oxygen-cli 1.40.1 → 1.40.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1742 -1742
- package/LICENSE +672 -672
- package/README.md +37 -37
- package/build/core/OxygenCore.js +1 -1
- package/build/core/OxygenEvents.js +1 -1
- package/build/core/OxygenModule.js +1 -1
- package/build/core/OxygenService.js +1 -1
- package/build/core/OxygenSubModule.js +1 -1
- package/build/core/WebDriverModule.js +1 -1
- package/build/core/utils.js +1 -1
- package/build/errors/HookError.js +1 -1
- package/build/errors/ModuleError.js +1 -1
- package/build/errors/ModuleUnavailableError.js +1 -1
- package/build/errors/OxygenError.js +1 -1
- package/build/errors/ScriptNotFound.js +1 -1
- package/build/errors/helper.js +2 -1
- package/build/index.js +1 -1
- package/build/lib/cli-util.js +5 -1
- package/build/lib/debugger.js +1 -1
- package/build/lib/img-merge.js +1 -1
- package/build/lib/launcher.js +1 -1
- package/build/lib/logger.js +43 -43
- package/build/lib/moduleRequire.js +1 -1
- package/build/lib/parallel-launcher.js +1 -1
- package/build/lib/param-manager.js +1 -1
- package/build/lib/param-reader-csv.js +1 -1
- package/build/lib/param-reader-excel.js +1 -1
- package/build/lib/param-reader-json.js +1 -1
- package/build/lib/text-to-image.js +1 -1
- package/build/lib/util.js +1 -1
- package/build/model/case-result.js +1 -1
- package/build/model/failure.js +1 -1
- package/build/model/status.js +1 -1
- package/build/model/step-result.js +1 -1
- package/build/model/suite-result.js +1 -1
- package/build/model/test-result.js +1 -1
- package/build/model/testcase.js +1 -1
- package/build/model/testsuite.js +1 -1
- package/build/ox_modules/index.js +9 -1
- package/build/ox_modules/module-assert.js +37 -37
- package/build/ox_modules/module-date.js +24 -24
- package/build/ox_modules/module-db.js +52 -52
- package/build/ox_modules/module-email.js +59 -59
- package/build/ox_modules/module-eyes.js +34 -34
- package/build/ox_modules/module-http/ntlm-util.js +10 -10
- package/build/ox_modules/module-http/ntlm.js +15 -15
- package/build/ox_modules/module-http.js +132 -132
- package/build/ox_modules/module-log.js +27 -27
- package/build/ox_modules/module-mailinator.js +87 -87
- package/build/ox_modules/module-mob/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-mob/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-mob/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-mob/commands/assertText.js +21 -21
- package/build/ox_modules/module-mob/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-mob/commands/assertValue.js +18 -18
- package/build/ox_modules/module-mob/commands/back.js +16 -16
- package/build/ox_modules/module-mob/commands/clear.js +19 -19
- package/build/ox_modules/module-mob/commands/click.js +17 -17
- package/build/ox_modules/module-mob/commands/clickHidden.js +17 -17
- package/build/ox_modules/module-mob/commands/clickLong.js +18 -18
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +18 -18
- package/build/ox_modules/module-mob/commands/closeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/debug.js +16 -16
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +19 -19
- package/build/ox_modules/module-mob/commands/enableNetwork.js +27 -27
- package/build/ox_modules/module-mob/commands/execute.js +21 -21
- package/build/ox_modules/module-mob/commands/findElement.js +20 -20
- package/build/ox_modules/module-mob/commands/findElements.js +23 -23
- package/build/ox_modules/module-mob/commands/getAlertText.js +17 -17
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +15 -15
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +15 -15
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +16 -16
- package/build/ox_modules/module-mob/commands/getLocation.js +20 -20
- package/build/ox_modules/module-mob/commands/getSource.js +16 -16
- package/build/ox_modules/module-mob/commands/getText.js +18 -18
- package/build/ox_modules/module-mob/commands/getTitle.js +13 -13
- package/build/ox_modules/module-mob/commands/getUrl.js +17 -17
- package/build/ox_modules/module-mob/commands/getValue.js +18 -18
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +17 -17
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +21 -21
- package/build/ox_modules/module-mob/commands/index.js +1 -1
- package/build/ox_modules/module-mob/commands/installApp.js +16 -16
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +16 -16
- package/build/ox_modules/module-mob/commands/isCheckable.js +18 -18
- package/build/ox_modules/module-mob/commands/isChecked.js +18 -18
- package/build/ox_modules/module-mob/commands/isClickable.js +18 -18
- package/build/ox_modules/module-mob/commands/isExist.js +19 -19
- package/build/ox_modules/module-mob/commands/isSelected.js +23 -23
- package/build/ox_modules/module-mob/commands/isVisible.js +19 -19
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/launchApp.js +15 -15
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +18 -18
- package/build/ox_modules/module-mob/commands/open.js +17 -17
- package/build/ox_modules/module-mob/commands/pause.js +16 -16
- package/build/ox_modules/module-mob/commands/removeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/resetApp.js +15 -15
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +22 -22
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +27 -27
- package/build/ox_modules/module-mob/commands/select.js +24 -24
- package/build/ox_modules/module-mob/commands/selectFrame.js +23 -23
- package/build/ox_modules/module-mob/commands/selectWindow.js +28 -28
- package/build/ox_modules/module-mob/commands/sendKeys.js +29 -29
- package/build/ox_modules/module-mob/commands/setContext.js +16 -16
- package/build/ox_modules/module-mob/commands/setNativeContext.js +15 -15
- package/build/ox_modules/module-mob/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/shake.js +16 -16
- package/build/ox_modules/module-mob/commands/smsClickLink.js +19 -19
- package/build/ox_modules/module-mob/commands/smsGetText.js +20 -20
- package/build/ox_modules/module-mob/commands/swipe.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeElement.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeScreen.js +20 -20
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-mob/commands/tap.js +17 -17
- package/build/ox_modules/module-mob/commands/type.js +20 -20
- package/build/ox_modules/module-mob/commands/unlockPattern.js +22 -22
- package/build/ox_modules/module-mob/commands/waitForExist.js +18 -18
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-mob/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-mob.js +74 -74
- package/build/ox_modules/module-mongo.js +302 -0
- package/build/ox_modules/module-pdf.js +35 -35
- package/build/ox_modules/module-proxy.js +77 -77
- package/build/ox_modules/module-serial.js +55 -55
- package/build/ox_modules/module-shell.js +25 -25
- package/build/ox_modules/module-soap.js +72 -72
- package/build/ox_modules/module-twilio.js +41 -41
- package/build/ox_modules/module-utils.js +91 -91
- package/build/ox_modules/module-web/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-web/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-web/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-web/commands/assertExist.js +17 -17
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/assertText.js +21 -21
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-web/commands/assertValue.js +20 -20
- package/build/ox_modules/module-web/commands/back.js +16 -16
- package/build/ox_modules/module-web/commands/clear.js +18 -18
- package/build/ox_modules/module-web/commands/click.js +25 -25
- package/build/ox_modules/module-web/commands/clickHidden.js +23 -23
- package/build/ox_modules/module-web/commands/closeWindow.js +15 -15
- package/build/ox_modules/module-web/commands/debug.js +15 -15
- package/build/ox_modules/module-web/commands/deleteCookies.js +12 -12
- package/build/ox_modules/module-web/commands/deselect.js +22 -22
- package/build/ox_modules/module-web/commands/doubleClick.js +17 -17
- package/build/ox_modules/module-web/commands/dragAndDrop.js +20 -20
- package/build/ox_modules/module-web/commands/execute.js +24 -24
- package/build/ox_modules/module-web/commands/fileBrowse.js +18 -18
- package/build/ox_modules/module-web/commands/findElement.js +19 -19
- package/build/ox_modules/module-web/commands/findElements.js +22 -22
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +14 -14
- package/build/ox_modules/module-web/commands/getAlertText.js +16 -16
- package/build/ox_modules/module-web/commands/getAttribute.js +19 -19
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +17 -17
- package/build/ox_modules/module-web/commands/getCookies.js +13 -13
- package/build/ox_modules/module-web/commands/getCssValue.js +19 -19
- package/build/ox_modules/module-web/commands/getElementCount.js +17 -17
- package/build/ox_modules/module-web/commands/getHTML.js +17 -17
- package/build/ox_modules/module-web/commands/getSource.js +16 -16
- package/build/ox_modules/module-web/commands/getText.js +18 -18
- package/build/ox_modules/module-web/commands/getTitle.js +12 -12
- package/build/ox_modules/module-web/commands/getUrl.js +16 -16
- package/build/ox_modules/module-web/commands/getValue.js +18 -18
- package/build/ox_modules/module-web/commands/getWindowHandles.js +16 -16
- package/build/ox_modules/module-web/commands/getWindowSize.js +16 -16
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +16 -16
- package/build/ox_modules/module-web/commands/index.js +1 -1
- package/build/ox_modules/module-web/commands/isAlertPresent.js +16 -16
- package/build/ox_modules/module-web/commands/isChecked.js +18 -18
- package/build/ox_modules/module-web/commands/isExist.js +19 -19
- package/build/ox_modules/module-web/commands/isInteractable.js +22 -22
- package/build/ox_modules/module-web/commands/isSelected.js +23 -23
- package/build/ox_modules/module-web/commands/isVisible.js +19 -19
- package/build/ox_modules/module-web/commands/makeVisible.js +25 -25
- package/build/ox_modules/module-web/commands/maximizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/minimizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/mock.js +20 -20
- package/build/ox_modules/module-web/commands/mockClearAll.js +12 -12
- package/build/ox_modules/module-web/commands/mockRestoreAll.js +12 -12
- package/build/ox_modules/module-web/commands/newWindow.js +16 -16
- package/build/ox_modules/module-web/commands/open.js +16 -16
- package/build/ox_modules/module-web/commands/pause.js +15 -15
- package/build/ox_modules/module-web/commands/point.js +21 -21
- package/build/ox_modules/module-web/commands/pointJS.js +15 -15
- package/build/ox_modules/module-web/commands/refresh.js +15 -15
- package/build/ox_modules/module-web/commands/rightClick.js +17 -17
- package/build/ox_modules/module-web/commands/rightClickActions.js +19 -19
- package/build/ox_modules/module-web/commands/scrollToElement.js +21 -21
- package/build/ox_modules/module-web/commands/select.js +23 -23
- package/build/ox_modules/module-web/commands/selectFrame.js +24 -24
- package/build/ox_modules/module-web/commands/selectWindow.js +27 -27
- package/build/ox_modules/module-web/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +20 -20
- package/build/ox_modules/module-web/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-web/commands/setWindowSize.js +17 -17
- package/build/ox_modules/module-web/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-web/commands/type.js +20 -20
- package/build/ox_modules/module-web/commands/verifyAlert.js +20 -20
- package/build/ox_modules/module-web/commands/verifyExist.js +17 -17
- package/build/ox_modules/module-web/commands/verifySelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/verifySelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/verifyText.js +21 -21
- package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTitle.js +19 -19
- package/build/ox_modules/module-web/commands/verifyValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForAngular.js +19 -19
- package/build/ox_modules/module-web/commands/waitForExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForNotValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-web/commands/waitForWindow.js +22 -22
- package/build/ox_modules/module-web.js +94 -94
- package/build/ox_modules/module-win/commands/assertText.js +17 -17
- package/build/ox_modules/module-win/commands/assertTitle.js +15 -15
- package/build/ox_modules/module-win/commands/assertValue.js +14 -14
- package/build/ox_modules/module-win/commands/back.js +11 -11
- package/build/ox_modules/module-win/commands/clear.js +13 -13
- package/build/ox_modules/module-win/commands/click.js +13 -13
- package/build/ox_modules/module-win/commands/clickLong.js +14 -14
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +14 -14
- package/build/ox_modules/module-win/commands/findElement.js +15 -15
- package/build/ox_modules/module-win/commands/findElements.js +15 -15
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +12 -12
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +15 -15
- package/build/ox_modules/module-win/commands/getLocation.js +14 -14
- package/build/ox_modules/module-win/commands/getSource.js +12 -12
- package/build/ox_modules/module-win/commands/getText.js +14 -14
- package/build/ox_modules/module-win/commands/getValue.js +14 -14
- package/build/ox_modules/module-win/commands/getWindowHandles.js +15 -15
- package/build/ox_modules/module-win/commands/index.js +1 -1
- package/build/ox_modules/module-win/commands/isCheckable.js +14 -14
- package/build/ox_modules/module-win/commands/isChecked.js +14 -14
- package/build/ox_modules/module-win/commands/isClickable.js +14 -14
- package/build/ox_modules/module-win/commands/isExist.js +15 -15
- package/build/ox_modules/module-win/commands/isSelected.js +14 -14
- package/build/ox_modules/module-win/commands/isVisible.js +15 -15
- package/build/ox_modules/module-win/commands/open.js +13 -13
- package/build/ox_modules/module-win/commands/pause.js +12 -12
- package/build/ox_modules/module-win/commands/rightClick.js +13 -13
- package/build/ox_modules/module-win/commands/selectWindow.js +23 -23
- package/build/ox_modules/module-win/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-win/commands/setTimeout.js +17 -17
- package/build/ox_modules/module-win/commands/takeScreenshot.js +16 -16
- package/build/ox_modules/module-win/commands/tap.js +13 -13
- package/build/ox_modules/module-win/commands/type.js +16 -16
- package/build/ox_modules/module-win/commands/waitForExist.js +14 -14
- package/build/ox_modules/module-win/commands/waitForInteractable.js +16 -16
- package/build/ox_modules/module-win/commands/waitForVisible.js +13 -13
- package/build/ox_modules/module-win.js +47 -47
- package/build/ox_modules/utils.js +8 -8
- package/build/ox_reporters/excel/template.json +48 -48
- package/build/ox_reporters/html/index.ejs +163 -163
- package/build/ox_reporters/html/summary.ejs +77 -77
- package/build/ox_reporters/html/tests-details.ejs +134 -134
- package/build/ox_reporters/html/tests-devices-browsers.ejs +83 -83
- package/build/ox_reporters/reporter-excel.js +1 -1
- package/build/ox_reporters/reporter-html.js +1 -1
- package/build/ox_reporters/reporter-json.js +1 -1
- package/build/ox_reporters/reporter-junit.js +1 -1
- package/build/ox_reporters/reporter-pdf.js +1 -1
- package/build/ox_reporters/reporter-rp.js +1 -1
- package/build/ox_reporters/reporter-xml.js +1 -1
- package/build/ox_services/service-devtools/submodule-network.js +1 -1
- package/build/ox_services/service-devtools.js +1 -1
- package/build/reporter/FileReporterBase.js +1 -1
- package/build/reporter/ReportAggregator.js +13 -5
- package/build/reporter/ReporterBase.js +1 -1
- package/build/reporter/WebSocketReporter.js +1 -1
- package/build/runners/WorkerProcess.js +1 -1
- package/build/runners/cucumber/CucumberEventListener.js +1 -1
- package/build/runners/cucumber/CucumberReporter.js +1 -1
- package/build/runners/cucumber/CucumberWorker.js +1 -1
- package/build/runners/cucumber/index.js +1 -1
- package/build/runners/cucumber/worker.js +1 -1
- package/build/runners/index.js +1 -1
- package/build/runners/oxygen/OxygenWorker.js +1 -1
- package/build/runners/oxygen/index.js +1 -1
- package/build/runners/oxygen/worker.js +1 -1
- package/config/default.json +6 -6
- package/log.txt +1614 -0
- package/package.json +139 -137
- package/reports/2025-06-08_231627/report.html +440 -0
- package/reports/2025-06-09_223615/report.html +440 -0
- package/transpiled/mongodb/etc/prepare.js +18 -0
- package/transpiled/mongodb/lib/admin.js +182 -0
- package/transpiled/mongodb/lib/beta.js +26 -0
- package/transpiled/mongodb/lib/bson.js +220 -0
- package/transpiled/mongodb/lib/bulk/common.js +1041 -0
- package/transpiled/mongodb/lib/bulk/ordered.js +76 -0
- package/transpiled/mongodb/lib/bulk/unordered.js +102 -0
- package/transpiled/mongodb/lib/change_stream.js +517 -0
- package/transpiled/mongodb/lib/client-side-encryption/auto_encrypter.js +329 -0
- package/transpiled/mongodb/lib/client-side-encryption/client_encryption.js +779 -0
- package/transpiled/mongodb/lib/client-side-encryption/crypto_callbacks.js +95 -0
- package/transpiled/mongodb/lib/client-side-encryption/errors.js +171 -0
- package/transpiled/mongodb/lib/client-side-encryption/mongocryptd_manager.js +98 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/aws.js +34 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/azure.js +186 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/gcp.js +29 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/index.js +58 -0
- package/transpiled/mongodb/lib/client-side-encryption/state_machine.js +505 -0
- package/transpiled/mongodb/lib/cmap/auth/auth_provider.js +63 -0
- package/transpiled/mongodb/lib/cmap/auth/aws_temporary_credentials.js +167 -0
- package/transpiled/mongodb/lib/cmap/auth/gssapi.js +207 -0
- package/transpiled/mongodb/lib/cmap/auth/mongo_credentials.js +193 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_aws.js +181 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js +101 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js +81 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/callback_workflow.js +174 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/command_builders.js +59 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js +58 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js +138 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js +42 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_cache.js +71 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js +34 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc.js +111 -0
- package/transpiled/mongodb/lib/cmap/auth/plain.js +43 -0
- package/transpiled/mongodb/lib/cmap/auth/providers.js +22 -0
- package/transpiled/mongodb/lib/cmap/auth/scram.js +318 -0
- package/transpiled/mongodb/lib/cmap/auth/x509.js +61 -0
- package/transpiled/mongodb/lib/cmap/command_monitoring_events.js +266 -0
- package/transpiled/mongodb/lib/cmap/commands.js +605 -0
- package/transpiled/mongodb/lib/cmap/connect.js +418 -0
- package/transpiled/mongodb/lib/cmap/connection.js +673 -0
- package/transpiled/mongodb/lib/cmap/connection_pool.js +688 -0
- package/transpiled/mongodb/lib/cmap/connection_pool_events.js +254 -0
- package/transpiled/mongodb/lib/cmap/errors.js +128 -0
- package/transpiled/mongodb/lib/cmap/handshake/client_metadata.js +278 -0
- package/transpiled/mongodb/lib/cmap/metrics.js +67 -0
- package/transpiled/mongodb/lib/cmap/stream_description.js +74 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/compression.js +196 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/constants.js +19 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_data.js +144 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_demand/document.js +278 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/responses.js +376 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/shared.js +49 -0
- package/transpiled/mongodb/lib/collection.js +852 -0
- package/transpiled/mongodb/lib/connection_string.js +1452 -0
- package/transpiled/mongodb/lib/constants.js +162 -0
- package/transpiled/mongodb/lib/cursor/abstract_cursor.js +1082 -0
- package/transpiled/mongodb/lib/cursor/aggregation_cursor.js +227 -0
- package/transpiled/mongodb/lib/cursor/change_stream_cursor.js +136 -0
- package/transpiled/mongodb/lib/cursor/client_bulk_write_cursor.js +69 -0
- package/transpiled/mongodb/lib/cursor/find_cursor.js +476 -0
- package/transpiled/mongodb/lib/cursor/list_collections_cursor.js +48 -0
- package/transpiled/mongodb/lib/cursor/list_indexes_cursor.js +46 -0
- package/transpiled/mongodb/lib/cursor/list_search_indexes_cursor.js +30 -0
- package/transpiled/mongodb/lib/cursor/run_command_cursor.js +125 -0
- package/transpiled/mongodb/lib/db.js +467 -0
- package/transpiled/mongodb/lib/deps.js +174 -0
- package/transpiled/mongodb/lib/encrypter.js +129 -0
- package/transpiled/mongodb/lib/error.js +1550 -0
- package/transpiled/mongodb/lib/explain.js +122 -0
- package/transpiled/mongodb/lib/gridfs/download.js +369 -0
- package/transpiled/mongodb/lib/gridfs/index.js +240 -0
- package/transpiled/mongodb/lib/gridfs/upload.js +446 -0
- package/transpiled/mongodb/lib/index.js +975 -0
- package/transpiled/mongodb/lib/mongo_client.js +626 -0
- package/transpiled/mongodb/lib/mongo_client_auth_providers.js +98 -0
- package/transpiled/mongodb/lib/mongo_logger.js +812 -0
- package/transpiled/mongodb/lib/mongo_types.js +71 -0
- package/transpiled/mongodb/lib/operations/aggregate.js +129 -0
- package/transpiled/mongodb/lib/operations/bulk_write.js +48 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/client_bulk_write.js +96 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/command_builder.js +409 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/common.js +5 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/executor.js +144 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/results_merger.js +228 -0
- package/transpiled/mongodb/lib/operations/collections.js +49 -0
- package/transpiled/mongodb/lib/operations/command.js +102 -0
- package/transpiled/mongodb/lib/operations/count.js +60 -0
- package/transpiled/mongodb/lib/operations/create_collection.js +109 -0
- package/transpiled/mongodb/lib/operations/delete.js +134 -0
- package/transpiled/mongodb/lib/operations/distinct.js +77 -0
- package/transpiled/mongodb/lib/operations/drop.js +102 -0
- package/transpiled/mongodb/lib/operations/estimated_document_count.js +47 -0
- package/transpiled/mongodb/lib/operations/execute_operation.js +251 -0
- package/transpiled/mongodb/lib/operations/find.js +197 -0
- package/transpiled/mongodb/lib/operations/find_and_modify.js +191 -0
- package/transpiled/mongodb/lib/operations/get_more.js +84 -0
- package/transpiled/mongodb/lib/operations/indexes.js +197 -0
- package/transpiled/mongodb/lib/operations/insert.js +138 -0
- package/transpiled/mongodb/lib/operations/is_capped.js +44 -0
- package/transpiled/mongodb/lib/operations/kill_cursors.js +58 -0
- package/transpiled/mongodb/lib/operations/list_collections.js +66 -0
- package/transpiled/mongodb/lib/operations/list_databases.js +56 -0
- package/transpiled/mongodb/lib/operations/operation.js +88 -0
- package/transpiled/mongodb/lib/operations/options_operation.js +44 -0
- package/transpiled/mongodb/lib/operations/profiling_level.js +42 -0
- package/transpiled/mongodb/lib/operations/remove_user.js +35 -0
- package/transpiled/mongodb/lib/operations/rename.js +48 -0
- package/transpiled/mongodb/lib/operations/run_command.js +64 -0
- package/transpiled/mongodb/lib/operations/search_indexes/create.js +41 -0
- package/transpiled/mongodb/lib/operations/search_indexes/drop.js +51 -0
- package/transpiled/mongodb/lib/operations/search_indexes/update.js +40 -0
- package/transpiled/mongodb/lib/operations/set_profiling_level.js +70 -0
- package/transpiled/mongodb/lib/operations/stats.js +39 -0
- package/transpiled/mongodb/lib/operations/update.js +218 -0
- package/transpiled/mongodb/lib/operations/validate_collection.js +49 -0
- package/transpiled/mongodb/lib/read_concern.js +92 -0
- package/transpiled/mongodb/lib/read_preference.js +215 -0
- package/transpiled/mongodb/lib/resource_management.js +74 -0
- package/transpiled/mongodb/lib/sdam/common.js +53 -0
- package/transpiled/mongodb/lib/sdam/events.js +177 -0
- package/transpiled/mongodb/lib/sdam/monitor.js +656 -0
- package/transpiled/mongodb/lib/sdam/server.js +463 -0
- package/transpiled/mongodb/lib/sdam/server_description.js +196 -0
- package/transpiled/mongodb/lib/sdam/server_selection.js +283 -0
- package/transpiled/mongodb/lib/sdam/server_selection_events.js +112 -0
- package/transpiled/mongodb/lib/sdam/srv_polling.js +139 -0
- package/transpiled/mongodb/lib/sdam/topology.js +833 -0
- package/transpiled/mongodb/lib/sdam/topology_description.js +447 -0
- package/transpiled/mongodb/lib/sessions.js +988 -0
- package/transpiled/mongodb/lib/sort.js +123 -0
- package/transpiled/mongodb/lib/timeout.js +349 -0
- package/transpiled/mongodb/lib/transactions.js +149 -0
- package/transpiled/mongodb/lib/utils.js +1502 -0
- package/transpiled/mongodb/lib/write_concern.js +115 -0
- package/types/index.d.ts +70 -70
- package/types/module-eyes.d.ts +39 -39
- package/types/module-http.d.ts +163 -163
- package/types/module-log.d.ts +34 -34
- package/types/module-mob.d.ts +966 -966
- package/types/module-pdf.d.ts +40 -40
- package/types/module-proxy.d.ts +100 -100
- package/types/module-shell.d.ts +24 -24
- package/types/module-utils.d.ts +99 -99
- package/types/module-web.d.ts +1053 -1053
- package/types/module-win.d.ts +352 -352
- package/types/oxygen.d.ts +53 -53
package/build/lib/debugger.js
CHANGED
|
@@ -963,4 +963,4 @@ class Debugger extends EventEmitter {
|
|
|
963
963
|
}
|
|
964
964
|
|
|
965
965
|
exports.default = Debugger;
|
|
966
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvZGVidWdnZXIuanMiXSwibmFtZXMiOlsibG9nIiwiRXZlbnRFbWl0dGVyIiwicmVxdWlyZSIsIkNEUCIsIkNPTk5FQ1RfUkVUUklFUyIsIkNPTk5FQ1RfU05PT1pFX0lOVEVSVkFMX01VTFQiLCJNQVhfREVQVEgiLCJJR05PUkVfU0NPUEVfQ0hBSU5fVkFSSUFCTEVTIiwibWF4RmluZGVkRGVwdGgiLCJ0cmFuc2Zvcm1Ub0lERVN0eWxlIiwiZmlsZU5hbWUiLCJ1cmlJbmRleCIsImluZGV4T2YiLCJicERhdGEiLCJzdWJzdHJpbmciLCJ1cmkiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwidXJsIiwiZmlsZVVSTFRvUGF0aCIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImRlbGV0ZVZhbHVlcyIsImFyciIsImRlcHRoIiwicmVzdWx0IiwibWFwIiwiaXRlbSIsInZhbHVlIiwiY2xhc3NOYW1lIiwiY2xvbmVWYWx1ZSIsIk9iamVjdCIsImFzc2lnbiIsIm9iamVjdElkIiwiY2xvbmUiLCJleHRyYWN0QnJlYWtwb2ludERhdGEiLCJicFN0ciIsInBhcnRzIiwic3BsaXQiLCJsaW5lTnVtYmVyIiwicGFyc2VJbnQiLCJzcGxpY2UiLCJqb2luIiwidmFsaWRhdGVCcmVha3BvaW50IiwiYnJlYWtwb2ludCIsImJyT2JqIiwiYnJlYWtwb2ludElkIiwiYnJMaW5lTnVtYmVyIiwibG9jYXRpb25zIiwiQXJyYXkiLCJpc0FycmF5IiwiYnJGaWxlTmFtZSIsIml0ZW1MaW5lTnVtYmVyIiwibXNnIiwibGluZSIsIkRlYnVnZ2VyIiwiY29uc3RydWN0b3IiLCJwaWQiLCJfcGlkIiwiX3BvcnQiLCJ1bmRlZmluZWQiLCJfaG9zdCIsIl9icmVha3BvaW50cyIsIl9wZW5kaW5nQlAiLCJfcGF1c2VkIiwiX2NsaWVudCIsIl9maWxlTmFtZUFsaWFzZXMiLCJfYnJlYWtwb2ludEVycm9ycyIsInJlc2V0IiwiY2xvc2UiLCJnZXRQcm9wZXJ0aWVzQnlPYmplY3RJZCIsImVsbSIsImRhdGEiLCJfUnVudGltZSIsImdldFByb3BlcnRpZXMiLCJnZXRQcm9taWNlQWxsUmVzdWx0IiwibWFwUmVzdWx0RmlsdGVyZWQiLCJwcm9taXNlQWxsUHJvbWlzZSIsImFsbCIsInRoZW4iLCJmaWx0ZXIiLCJwcm9taXNlcyIsImdldFByb3BlcnRpZXNSZXN1bHQiLCJtYXBSZXN1bHQiLCJnZXRQcm9wZXJ0aWVzSW5uZXJSZXN1bHQiLCJzY29wZUl0ZW0iLCJvYmplY3RJZFJlc3BvbnNlIiwiY2hpbGQiLCJ2YWx1ZXMiLCJwcm9jZXNzU2NvcGUiLCJzY29wZUNoYWluIiwic2NvcGVDaGFpblJlc3VsdCIsImNoYWluIiwib2JqZWN0IiwidHlwZSIsImVsIiwicHJvY2Vzc0NhbGxGcmFtZXMiLCJjYWxsRnJhbWVzIiwiY2FsbEZyYW1lc01hcFJlc3VsdCIsImNhbGxGcmFtZSIsInByb2Nlc3NTY29wZVJlc3VsdCIsImluQnJlYWtwb2ludHMiLCJpdGVtVXJsIiwiYnAiLCJ0b0xvd2VyQ2FzZSIsIm9yaWdpbiIsInNjcmlwdFBhdGgiLCJpbkZpbGVOYW1lQWxpYXNlcyIsImFsaWFzIiwiY29udGludWVDb25uZWN0Iiwib24iLCJtIiwiZmlsZWxjIiwiYnJlYWtwb2ludEZvckNoYW5nZSIsImZpbmRSZXN1bHQiLCJmaW5kIiwiYnJlYWtwb2ludGxjIiwiaW5jbHVkZXMiLCJwdXNoIiwiX0RlYnVnZ2VyIiwicGF1c2UiLCJtVXJsIiwiYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb24iLCJicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdCIsInNldEJyZWFrcG9pbnQiLCJyZXN1bWUiLCJyZWFzb24iLCJfYnJva2VPblN0YXJ0IiwicG9zc2libGVCcmVha3BvaW50c0RhdGEiLCJlQ2FsbEZyYW1lcyIsImJyZWFrcG9pbnRzTWFwUmVzdWx0Iiwic2NyaXB0SWQiLCJsb2NhdGlvbiIsImluaXRpYWxEZXB0aCIsInVuaXF1ZVNjcmlwdElkQXJyIiwiZmluZGVkIiwiZW5kc1dpdGgiLCJwb3NzaWJsZUJyZWFrcG9pbnRzIiwiZ2V0UG9zc2libGVCcmVha3BvaW50cyIsInNjcmlwdFNvdXJjZSIsImdldFNjcmlwdFNvdXJjZSIsInNjcmlwdFNvdXJjZVNwbGl0IiwiZmlsZUxpbmVOdW1iZXJzTGVuZ3RoIiwiYnJlYWtwb2ludHMiLCJmaWxlIiwic2NvcGVDaGFpblRyZWUiLCJicmVha3BvaW50RGF0YSIsInZhcmlhYmxlcyIsImFkZFZhcmlhYmxlc0Zyb21TY29wZUNoYWluVHJlZSIsImFkZE94eWdlblZhcmlhYmxlc0Zyb21HbG9iYWxTY29wZSIsImlzc2V0IiwibG9jIiwicmVhbEJyZmluZGVkIiwiYnJlYWtwb2ludEVycm9yIiwiYnIiLCJwb3NzaWJsZUJyZWFrcG9pbnREYXRhIiwicmVzb2x2ZWQiLCJlbWl0IiwiaWdub3JlIiwibWVzc2FnZSIsImNvbnRpbnVlIiwib25CcmVha3BvaW50UmVzb2x2ZWQiLCJSdW50aW1lIiwiZW5hYmxlIiwic2V0UGF1c2VPbkV4Y2VwdGlvbnMiLCJzdGF0ZSIsInNldEFzeW5jQ2FsbFN0YWNrRGVwdGgiLCJtYXhEZXB0aCIsInNldEJsYWNrYm94UGF0dGVybnMiLCJwYXR0ZXJucyIsInJ1bklmV2FpdGluZ0ZvckRlYnVnZ2VyIiwicGF1c2VkIiwidmFsaWRhdGVSZXN1bHQiLCJjb25uZWN0IiwicG9ydCIsImhvc3QiLCJzbm9vemVUaW1lIiwibGFzdEVycm9yIiwicmV0cmllcyIsIndhcm4iLCJhbGlhc1Jlc3VsdCIsInBhdGhUb0ZpbGVVUkwiLCJ0b1N0cmluZyIsImVyciIsInNldEJyZWFrcG9pbnRCeVVybCIsImNvbHVtbk51bWJlciIsImNhdGNoIiwicmVzcG9uc2UiLCJzZXRCcmVha3BvaW50c0FjdGl2ZSIsImFjdGl2ZSIsInJlbW92ZUJyZWFrcG9pbnQiLCJyZW1vdmVCciIsInJlc3VtZVRlcm1pbmF0ZSIsImRpc2FibGUiLCJyZW1vdmVCcmVha3BvaW50QnlWYWx1ZSIsImZpbGVQYXRoIiwiaW5wdXRMaW5lIiwiZmlsZVBhdGhBbGlhcyIsInNlbGYiLCJiIiwiY2xlYXJCcmVha3BvaW50cyIsInN0YXJ0TG9jYXRpb24iLCJzdGFydCIsInAiLCJwb3AiLCJzY29wZVZhciIsIm5hbWUiLCJ0cnlUb1JldHJpZXZlT2JqZWN0VmFsdWUiLCJvYmpWYWx1ZSIsImZvckVhY2giLCJwcm9wRGVzYyIsInBvRXZhbFJlc3VsdCIsImV2YWx1YXRlIiwiZXhwcmVzc2lvbiIsInJldHVybkJ5VmFsdWUiLCJlbnZFdmFsUmVzdWx0IiwidmFyc0V2YWxSZXN1bHQiLCJwYXJhbXNFdmFsUmVzdWx0IiwicmVzdWx0cyIsInBvIiwiZW52IiwidmFycyIsInBhcmFtcyIsImtleXMiLCJrZXkiLCJnZXRCcmVha3BvaW50cyIsImJwcyJdLCJtYXBwaW5ncyI6IkFBYUE7Ozs7Ozs7OztBQUVBOztBQUlBOzs7O0FBSEEsTUFBTUEsR0FBRyxHQUFHLHFCQUFPLFVBQVAsQ0FBWjs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBbUJDLE9BQU8sQ0FBQyxRQUFELENBQWhDOztBQUNBLE1BQU1DLEdBQUcsR0FBR0QsT0FBTyxDQUFDLHlCQUFELENBQW5COztBQUdBLE1BQU1FLGVBQWUsR0FBRyxDQUF4QjtBQUNBLE1BQU1DLDRCQUE0QixHQUFHLENBQXJDO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLENBQWxCO0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsQ0FDakMsU0FEaUMsRUFFakMsU0FGaUMsRUFHakMsUUFIaUMsRUFJakMsWUFKaUMsRUFLakMsV0FMaUMsQ0FBckM7QUFPQSxJQUFJQyxjQUFjLEdBQUcsQ0FBckI7O0FBRUEsTUFBTUMsbUJBQW1CLEdBQUlDLFFBQUQsSUFBYztBQUN0QyxNQUFJO0FBQ0EsVUFBTUMsUUFBUSxHQUFHRCxRQUFRLENBQUNFLE9BQVQsQ0FBaUIsT0FBakIsQ0FBakI7QUFDQSxVQUFNQyxNQUFNLEdBQUdILFFBQVEsQ0FB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Uy9FLFVBQVQ7QUFDSCxPQUZELE1BRU87QUFDSCxjQUFNOEosYUFBYSxHQUFHLEtBQUsxRixpQkFBTCxDQUF1QndGLFFBQXZCLENBQXRCOztBQUNBLFlBQUlFLGFBQUosRUFBbUI7QUFDZjZCLFVBQUFBLEdBQUcsQ0FBQzVHLElBQUosQ0FBUy9FLFVBQVQ7QUFDSDtBQUNKO0FBQ0o7O0FBQ0QsV0FBTzJMLEdBQVA7QUFDSDs7QUFuN0I4QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogVjggZGVidWdnZXIgY2xpZW50LlxyXG4gKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbGliL2xvZ2dlcic7XHJcbmNvbnN0IGxvZyA9IGxvZ2dlcignRGVidWdnZXInKTtcclxuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpO1xyXG5jb25zdCBDRFAgPSByZXF1aXJlKCdjaHJvbWUtcmVtb3RlLWludGVyZmFjZScpO1xyXG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XHJcblxyXG5jb25zdCBDT05ORUNUX1JFVFJJRVMgPSA0O1xyXG5jb25zdCBDT05ORUNUX1NOT09aRV9JTlRFUlZBTF9NVUxUID0gMjtcclxuY29uc3QgTUFYX0RFUFRIID0gNTtcclxuY29uc3QgSUdOT1JFX1NDT1BFX0NIQUlOX1ZBUklBQkxFUyA9IFtcclxuICAgICdleHBvcnRzJyxcclxuICAgICdyZXF1aXJlJyxcclxuICAgICdtb2R1bGUnLFxyXG4gICAgJ19fZmlsZW5hbWUnLFxyXG4gICAgJ19fZGlybmFtZSdcclxuXTtcclxubGV0IG1heEZpbmRlZERlcHRoID0gMDtcclxuXHJcbmNvbnN0IHRyYW5zZm9ybVRvSURFU3R5bGUgPSAoZmlsZU5hbWUpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgdXJpSW5kZXggPSBmaWxlTmFtZS5pbmRleE9mKCdmaWxlOicpO1xyXG4gICAgICAgIGNvbnN0IGJwRGF0YSA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCB1cmlJbmRleCk7XHJcbiAgICAgICAgbGV0IHVyaSA9IGZpbGVOYW1lLnN1YnN0cmluZyh1cmlJbmRleCk7XHJcbiAgICAgICAgLy8gZml4IFVOQyBwYXRoc1xyXG4gICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInICYmIHVyaS5zdGFydHNXaXRoKCdmaWxlOi8vLycpKSB7XHJcbiAgICAgICAgICAgIHVyaSA9ICdmaWxlOi8vJyArIHVyaS5zdWJzdHJpbmcoJ2ZpbGU6Ly8vJy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnBEYXRhICsgdXJsLmZpbGVVUkxUb1BhdGgodXJpKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygndHJhbnNmb3JtVG9JREVTdHlsZSBmaWxlTmFtZScsIGZpbGVOYW1lKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCd0cmFuc2Zvcm1Ub0lERVN0eWxlIGVycm9yJywgZSk7XHJcbiAgICAgICAgdGhyb3cgZTtcclxuICAgIH1cclxufTtcclxuXHJcbi8vIHNub296ZSBmdW5jdGlvbiAtIGFzeW5jIHdyYXBwZXIgYXJvdW5kIHNldFRpbWVvdXQgZnVuY3Rpb25cclxuY29uc3Qgc25vb3plID0gbXMgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XHJcblxyXG5jb25zdCBkZWxldGVWYWx1ZXMgPSAoYXJyLCBkZXB0aCkgPT4ge1xyXG5cclxuICAgIGlmIChkZXB0aCA+IG1heEZpbmRlZERlcHRoKSB7XHJcbiAgICAgICAgbWF4RmluZGVkRGVwdGggPSBkZXB0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGVwdGggPiBNQVhfREVQVEgpIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IGFyci5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnZhbHVlICYmIGl0ZW0udmFsdWUuY2xhc3NOYW1lICYmIGl0ZW0udmFsdWUuY2xhc3NOYW1lID09PSAnRnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsb25lVmFsdWUgPSBPYmplY3QuYXNzaWduKGl0ZW0udmFsdWUpO1xyXG4gICAgICAgICAgICBkZWxldGUgY2xvbmVWYWx1ZS5vYmplY3RJZDtcclxuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSBPYmplY3QuYXNzaWduKGl0ZW0sIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBjbG9uZVZhbHVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBkZWxldGUgY2xvbmUub2JqZWN0SWQ7XHJcbiAgICAgICAgICAgIHJldHVybiBjbG9uZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gZXh0cmFjdEJyZWFrcG9pbnREYXRhKGJwU3RyKSB7XHJcbiAgICBpZiAoIWJwU3RyIHx8IHR5cGVvZiBicFN0ciAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGJwU3RyID0gdHJhbnNmb3JtVG9JREVTdHlsZShicFN0cik7XHJcbiAgICAgICAgY29uc3QgcGFydHMgPSBicFN0ci5zcGxpdCgnOicpO1xyXG5cclxuICAgICAgICBjb25zdCBsaW5lTnVtYmVyID0gcGFyc2VJbnQocGFydHNbMV0pO1xyXG5cclxuICAgICAgICAvLyByb21vdmUgZmlsZSBudW1iZXIsIGxpbmUgbnVtYmVyLCBjb2x1bW4gbnVtYmVyXHJcbiAgICAgICAgcGFydHMuc3BsaWNlKDAsIDMpO1xyXG5cclxuICAgICAgICAvLyBsb29rcyBsaW5lIG5lZWQgb25seSBmb3Igd2luZG93cyBwYXRoIHdoaXRoIGRpc2ssIGxpa2UgQzovL1xyXG4gICAgICAgIC8vIGZvciB3aW5kb3dzIG5ldHdvcmsgZm9sZGVycyBhbmQgbWFjIG5vdCBuZWVkXHJcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXJ0cy5qb2luKCc6Jyk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcclxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlclxyXG4gICAgICAgIH07XHJcblxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGxvZy5lcnJvcihgRmFpbGVkIHRvIGV4dHJhY3QgYnJlYWtwb2ludCBkYXRhOiAke2JwU3RyfWApO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB2YWxpZGF0ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCkge1xyXG4gICAgY29uc3QgYnJPYmogPSBleHRyYWN0QnJlYWtwb2ludERhdGEoYnJlYWtwb2ludC5icmVha3BvaW50SWQpO1xyXG5cclxuICAgIGNvbnN0IGJyTGluZU51bWJlciA9IGJyT2JqLmxpbmVOdW1iZXIgKyAxOyAvLyBmcm9tIDAtYmFzZSB0byAxIGJhc2U7XHJcblxyXG4gICAgaWYgKGJyZWFrcG9pbnQgJiYgYnJlYWtwb2ludC5sb2NhdGlvbnMgJiYgQXJyYXkuaXNBcnJheShicmVha3BvaW50LmxvY2F0aW9ucykgJiYgYnJlYWtwb2ludC5sb2NhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIGJyZWFrcG9pbnQubG9jYXRpb25zLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBickZpbGVOYW1lID0gYnJPYmouZmlsZU5hbWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1MaW5lTnVtYmVyID0gaXRlbS5saW5lTnVtYmVyICsgMTsgLy8gZnJvbSAwLWJhc2UgdG8gMSBiYXNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJyTGluZU51bWJlciAhPT0gaXRlbUxpbmVOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBtc2c6IGBCcmVha3BvaW50cyB3YXJuaW5nIDogJHtickZpbGVOYW1lfSBEb24ndCBoYXZlIG9wcG9ydHVuaXR5IHRvIGhhdmUgYnJlYWtwb2ludCBhdCBsaW5lIDogYCxcclxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogYnJGaWxlTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBsaW5lOiBickxpbmVOdW1iZXJcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlYnVnZ2VyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKHBpZCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3BpZCA9IHBpZDtcclxuICAgICAgICB0aGlzLl9wb3J0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX2hvc3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLl9wZW5kaW5nQlAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50ID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9maWxlTmFtZUFsaWFzZXMgPSBbXTtcclxuICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVzZXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsaWVudCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuY2xvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5fY2xpZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0gW107XHJcbiAgICAgICAgdGhpcy5fZmlsZU5hbWVBbGlhc2VzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UHJvcGVydGllc0J5T2JqZWN0SWQob2JqZWN0SWQsIGRlcHRoLCBlbG0pIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHt9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgdGhpcy5fUnVudGltZS5nZXRQcm9wZXJ0aWVzKHtcclxuICAgICAgICAgICAgICAgIG9iamVjdElkIDogb2JqZWN0SWRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnZ2V0UHJvcGVydGllcyBlbG0nLCBlbG0pO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnZ2V0UHJvcGVydGllcyBlJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjbG9uZSA9IE9iamVjdC5hc3NpZ24oe30sIGRhdGEpO1xyXG5cclxuICAgICAgICBpZiAoY2xvbmUgJiYgY2xvbmUgJiYgY2xvbmUucmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGNsb25lID0gT2JqZWN0LmFzc2lnbih7fSwgY2xvbmUsIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogZGVsZXRlVmFsdWVzKGNsb25lLnJlc3VsdCwgZGVwdGgpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNsb25lO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFByb21pY2VBbGxSZXN1bHQobWFwUmVzdWx0RmlsdGVyZWQpIHtcclxuICAgICAgICBsZXQgcHJvbWlzZUFsbFByb21pc2UgPSBhd2FpdCBQcm9taXNlLmFsbChtYXBSZXN1bHRGaWx0ZXJlZCkudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHByb21pc2VBbGxQcm9taXNlICYmIEFycmF5LmlzQXJyYXkocHJvbWlzZUFsbFByb21pc2UpICYmIHByb21pc2VBbGxQcm9taXNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcHJvbWlzZUFsbFByb21pc2UgPSBwcm9taXNlQWxsUHJvbWlzZS5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHJvbWlzZUFsbFByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UHJvcGVydGllcyhvYmplY3RJZCwgZGVwdGgsIGVsbSkge1xyXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XHJcblxyXG4gICAgICAgIGNvbnN0IGdldFByb3BlcnRpZXNSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFByb3BlcnRpZXNCeU9iamVjdElkKG9iamVjdElkLCBkZXB0aCwgZWxtKTtcclxuXHJcbiAgICAgICAgaWYgKGdldFByb3BlcnRpZXNSZXN1bHQpIHtcclxuICAgICAgICAgICAgaWYgKGdldFByb3BlcnRpZXNSZXN1bHQgJiYgZ2V0UHJvcGVydGllc1Jlc3VsdC5yZXN1bHQgJiYgQXJyYXkuaXNBcnJheShnZXRQcm9wZXJ0aWVzUmVzdWx0LnJlc3VsdCkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXBSZXN1bHQgPSBnZXRQcm9wZXJ0aWVzUmVzdWx0LnJlc3VsdC5tYXAoYXN5bmMgKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnZhbHVlICYmIGl0ZW0udmFsdWUub2JqZWN0SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0UHJvcGVydGllc0lubmVyUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRQcm9wZXJ0aWVzKGl0ZW0udmFsdWUub2JqZWN0SWQsIGRlcHRoKzEsIGl0ZW0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uc2NvcGVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzSW5uZXJSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXBSZXN1bHRGaWx0ZXJlZCA9IG1hcFJlc3VsdC5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlcHRoOiBkZXB0aCxcclxuICAgICAgICAgICAgICAgICAgICBvYmplY3RJZDogb2JqZWN0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWRSZXNwb25zZTogT2JqZWN0LmFzc2lnbih7fSwgZ2V0UHJvcGVydGllc1Jlc3VsdCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RJZDogb2JqZWN0SWRcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobWFwUmVzdWx0RmlsdGVyZWQgJiYgQXJyYXkuaXNBcnJheShtYXBSZXN1bHRGaWx0ZXJlZCkgJiYgbWFwUmVzdWx0RmlsdGVyZWQubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlQWxsUHJvbWlzZSA9IGF3YWl0IHRoaXMuZ2V0UHJvbWljZUFsbFJlc3VsdChtYXBSZXN1bHRGaWx0ZXJlZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9taXNlQWxsUHJvbWlzZSAmJiBBcnJheS5pc0FycmF5KHByb21pc2VBbGxQcm9taXNlKSAmJiBwcm9taXNlQWxsUHJvbWlzZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jaGlsZCA9IHByb21pc2VBbGxQcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlcHRoOiBkZXB0aCxcclxuICAgICAgICAgICAgICAgICAgICBvYmplY3RJZDogb2JqZWN0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWRSZXNwb25zZTogT2JqZWN0LmFzc2lnbih7fSwgZ2V0UHJvcGVydGllc1Jlc3VsdCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RJZDogb2JqZWN0SWRcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKHZhbHVlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwcm9jZXNzU2NvcGUoc2NvcGVDaGFpbiwgZGVwdGgpIHtcclxuICAgICAgICBsZXQgc2NvcGVDaGFpblJlc3VsdCA9IGF3YWl0IHNjb3BlQ2hhaW4ubWFwKGFzeW5jIChjaGFpbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2hhaW4gJiYgY2hhaW4ub2JqZWN0ICYmIGNoYWluLm9iamVjdC5vYmplY3RJZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFpbi5vYmplY3Qub2JqZWN0SWQgPT09ICdzdHJpbmcnICYmIGNoYWluLnR5cGUgIT09ICdnbG9iYWwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0UHJvcGVydGllc1Jlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydGllcyhjaGFpbi5vYmplY3Qub2JqZWN0SWQsIGRlcHRoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFByb3BlcnRpZXNSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2NvcGVDaGFpblJlc3VsdCA9IHNjb3BlQ2hhaW5SZXN1bHQuZmlsdGVyKChlbCkgPT4gISFlbCk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChzY29wZUNoYWluUmVzdWx0KS50aGVuKHZhbHVlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKChlbCkgPT4gISFlbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJvY2Vzc0NhbGxGcmFtZXMoY2FsbEZyYW1lcywgZGVwdGgpIHtcclxuICAgICAgICBsZXQgY2FsbEZyYW1lc01hcFJlc3VsdCA9IGF3YWl0IGNhbGxGcmFtZXMubWFwKGFzeW5jKGNhbGxGcmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2FsbEZyYW1lICYmIGNhbGxGcmFtZS5zY29wZUNoYWluICYmIEFycmF5LmlzQXJyYXkoY2FsbEZyYW1lLnNjb3BlQ2hhaW4pKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9jZXNzU2NvcGVSZXN1bHQgPSBhd2FpdCB0aGlzLnByb2Nlc3NTY29wZShjYWxsRnJhbWUuc2NvcGVDaGFpbiwgZGVwdGgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NTY29wZVJlc3VsdDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNhbGxGcmFtZXNNYXBSZXN1bHQgPSBjYWxsRnJhbWVzTWFwUmVzdWx0LmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoY2FsbEZyYW1lc01hcFJlc3VsdCkudGhlbih2YWx1ZXMgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGluQnJlYWtwb2ludHMoaXRlbVVybCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLl9icmVha3BvaW50cykgJiYgdGhpcy5fYnJlYWtwb2ludHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9icmVha3BvaW50cy5tYXAoKGJwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbVVybCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1VcmwudG9Mb3dlckNhc2UgJiZcclxuICAgICAgICAgICAgICAgICAgICBicC5vcmlnaW4gJiZcclxuICAgICAgICAgICAgICAgICAgICBicC5vcmlnaW4uc2NyaXB0UGF0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGJwLm9yaWdpbi5zY3JpcHRQYXRoLnRvTG93ZXJDYXNlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbVVybC50b0xvd2VyQ2FzZSgpID09PSBicC5vcmlnaW4uc2NyaXB0UGF0aC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBpbkZpbGVOYW1lQWxpYXNlcyhmaWxlTmFtZSkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5fZmlsZU5hbWVBbGlhc2VzICYmIEFycmF5LmlzQXJyYXkodGhpcy5fZmlsZU5hbWVBbGlhc2VzKSAmJiB0aGlzLl9maWxlTmFtZUFsaWFzZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9maWxlTmFtZUFsaWFzZXMubWFwKChhbGlhcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGFsaWFzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgYWxpYXMudG9Mb3dlckNhc2UgJiZcclxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lLnRvTG93ZXJDYXNlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgYWxpYXMudG9Mb3dlckNhc2UoKSA9PT0gZmlsZU5hbWUudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYWxpYXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNvbnRpbnVlQ29ubmVjdCgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5fY2xpZW50Lm9uKCdEZWJ1Z2dlci5zY3JpcHRQYXJzZWQnLCBhc3luYyhtKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChtICYmIG0udXJsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobS51cmwudG9Mb3dlckNhc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlbGMgPSBtLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBicmVha3BvaW50Rm9yQ2hhbmdlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRSZXN1bHQgPSB0aGlzLl9icmVha3BvaW50cy5maW5kKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLm9yaWdpbiAmJiBpdGVtLm9yaWdpbi5zY3JpcHRQYXRoICYmIGl0ZW0ub3JpZ2luLnNjcmlwdFBhdGgudG9Mb3dlckNhc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyZWFrcG9pbnRsYyA9IGl0ZW0ub3JpZ2luLnNjcmlwdFBhdGgudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludGxjID09PSBmaWxlbGMgJiYgaXRlbS5vcmlnaW4uc2NyaXB0UGF0aCAhPT0gbS51cmwpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVOYW1lQWxpYXNlcy5pbmNsdWRlcyhtLnVybCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZU5hbWVBbGlhc2VzLnB1c2gobS51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9EZWJ1Z2dlci5wYXVzZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50Rm9yQ2hhbmdlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50OiBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXJsOiBtLnVybFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbiA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMubWFwKChicCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnAub3JpZ2luICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnAub3JpZ2luLnNjcmlwdFBhdGggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50Rm9yQ2hhbmdlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludEZvckNoYW5nZS5tVXJsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludEZvckNoYW5nZS5icmVha3BvaW50ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludEZvckNoYW5nZS5icmVha3BvaW50Lm9yaWdpbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3JDaGFuZ2UuYnJlYWtwb2ludC5vcmlnaW4uc2NyaXB0UGF0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwLm9yaWdpbi5zY3JpcHRQYXRoID09PSBicmVha3BvaW50Rm9yQ2hhbmdlLmJyZWFrcG9pbnQub3JpZ2luLnNjcmlwdFBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRQYXRoOiBicmVha3BvaW50Rm9yQ2hhbmdlLm1VcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGJwLm9yaWdpbi5saW5lTnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uICYmIEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb24pICYmIGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdCA9IGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uLm1hcChhc3luYyhicCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNldEJyZWFrcG9pbnQoYnAuc2NyaXB0UGF0aCwgYnAubGluZU51bWJlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdCA9IGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uUmVzdWx0LmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uUmVzdWx0KS50aGVuKGFzeW5jKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fRGVidWdnZXIucmVzdW1lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5wYXVzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NsaWVudC5vbignRGVidWdnZXIucGF1c2VkJywgKGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGUucmVhc29uID09PSAnQnJlYWsgb24gc3RhcnQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9icm9rZU9uU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQ2hyb21lIGRlYnVnZ2VyIGRvZXNuJ3Qgc2VlbSB0byByZW1vdmUgYnJlYWtwb2ludHMgd2hlbiB1c2luZyByZW1vdmVCcmVha3BvaW50XHJcbiAgICAgICAgICAgICAgICAvLyBhbmQgJ3NvbWV0aGluZycgaXMgc3RpbGwgZ2V0dGluZyBoaXQuIG5vdCBjbGVhciB3aHkgdGhpcyBpcyBoYXBwZW5pbmcuXHJcbiAgICAgICAgICAgICAgICAvLyB0aHVzLCB3ZSBlbWl0IGJyZWFrIGV2ZW50IG9ubHkgaWYgbWF0Y2hpbmcgYnJlYWtwb2ludCBzdGlsbCBleGlzdHMgaW4gdGhpcy5fYnJlYWtwb2ludHNcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgbGV0IGVDYWxsRnJhbWVzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS5jYWxsRnJhbWVzICYmIEFycmF5LmlzQXJyYXkoZS5jYWxsRnJhbWVzKSAmJiBlLmNhbGxGcmFtZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGUuY2FsbEZyYW1lcy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS51cmwgJiYgdGhpcy5pbkJyZWFrcG9pbnRzKGl0ZW0udXJsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZUNhbGxGcmFtZXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBicmVha3BvaW50c01hcFJlc3VsdCA9IHRoaXMuX2JyZWFrcG9pbnRzLm1hcChhc3luYyhicCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChicCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicC5sb2NhdGlvbnMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZUNhbGxGcmFtZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZUNhbGxGcmFtZXNbMF0gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnAubG9jYXRpb25zLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnAubG9jYXRpb25zWzBdLnNjcmlwdElkID09PSBlQ2FsbEZyYW1lc1swXS5sb2NhdGlvbi5zY3JpcHRJZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicC5sb2NhdGlvbnNbMF0ubGluZU51bWJlciA9PT0gZUNhbGxGcmFtZXNbMF0ubG9jYXRpb24ubGluZU51bWJlcikge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5pdGlhbERlcHRoID0gMTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlICYmIGUuY2FsbEZyYW1lcyAmJiBBcnJheS5pc0FycmF5KGUuY2FsbEZyYW1lcykgJiYgZS5jYWxsRnJhbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuaXF1ZVNjcmlwdElkQXJyID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsRnJhbWVzID0gZS5jYWxsRnJhbWVzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0udXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRlZCA9IHRoaXMuX2JyZWFrcG9pbnRzLmZpbmQoKGJyZWFrcG9pbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5icmVha3BvaW50SWQuZW5kc1dpdGgoaXRlbS51cmwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmxvY2F0aW9uICYmIGl0ZW0ubG9jYXRpb24uc2NyaXB0SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pcXVlU2NyaXB0SWRBcnIuaW5jbHVkZXMoaXRlbS5sb2NhdGlvbi5zY3JpcHRJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZVNjcmlwdElkQXJyLnB1c2goaXRlbS5sb2NhdGlvbi5zY3JpcHRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5kZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsRnJhbWVzLm1hcChhc3luYyhpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwb3NzaWJsZUJyZWFrcG9pbnRzID0gYXdhaXQgdGhpcy5nZXRQb3NzaWJsZUJyZWFrcG9pbnRzKGl0ZW0ubG9jYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHRTb3VyY2UgPSBhd2FpdCB0aGlzLmdldFNjcmlwdFNvdXJjZShpdGVtLmxvY2F0aW9uLnNjcmlwdElkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcmlwdFNvdXJjZVNwbGl0ID0gc2NyaXB0U291cmNlLnNjcmlwdFNvdXJjZS5zcGxpdCgnXFxuJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsZUxpbmVOdW1iZXJzTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdFNvdXJjZVNwbGl0ICYmIEFycmF5LmlzQXJyYXkoc2NyaXB0U291cmNlU3BsaXQpICYmIHNjcmlwdFNvdXJjZVNwbGl0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVMaW5lTnVtYmVyc0xlbmd0aCA9IHNjcmlwdFNvdXJjZVNwbGl0Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHNlZSBob3cgZGViYnVnZXIgc2VlIHNjcmlwdFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNjcmlwdFNvdXJjZVNwbGl0Lm1hcCgoc2NyaXB0U291cmNlSXRlbSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgY29uc29sZS5sb2coKGlkeCkgKyAnICcgKyBzY3JpcHRTb3VyY2VJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzOiBwb3NzaWJsZUJyZWFrcG9pbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogaXRlbS51cmwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTGluZU51bWJlcnNMZW5ndGg6IGZpbGVMaW5lTnVtYmVyc0xlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2dldFNjcmlwdFNvdXJjZSBlJywgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNhbGxGcmFtZXNNYXBSZXN1bHQgPSBhd2FpdCB0aGlzLnByb2Nlc3NDYWxsRnJhbWVzKGNhbGxGcmFtZXMsIGluaXRpYWxEZXB0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lc01hcFJlc3VsdCA9IGNhbGxGcmFtZXNNYXBSZXN1bHQuZmlsdGVyKChlbCkgPT4gISFlbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxGcmFtZXNNYXBSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBicmVha3BvaW50c01hcFJlc3VsdCA9IGJyZWFrcG9pbnRzTWFwUmVzdWx0LmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG5cclxuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKGJyZWFrcG9pbnRzTWFwUmVzdWx0KS50aGVuKGFzeW5jIChzY29wZUNoYWluVHJlZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29wZUNoYWluVHJlZSAmJiBBcnJheS5pc0FycmF5KHNjb3BlQ2hhaW5UcmVlKSAmJiBzY29wZUNoYWluVHJlZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2hhaW5UcmVlID0gc2NvcGVDaGFpblRyZWUuZmlsdGVyKChlbCkgPT4gISFlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBicmVha3BvaW50RGF0YSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3N1bWUgd2UgYWx3YXlzIHNlbmQgYnJlYWtwb2ludCBvZiB0aGUgdG9wIGNhbGwgZnJhbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVDYWxsRnJhbWVzICYmIGVDYWxsRnJhbWVzLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50RGF0YSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBlQ2FsbEZyYW1lc1swXS5sb2NhdGlvbi5saW5lTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiB0cmFuc2Zvcm1Ub0lERVN0eWxlKGVDYWxsRnJhbWVzWzBdLnVybCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRWYXJpYWJsZXNGcm9tU2NvcGVDaGFpblRyZWUoYnJlYWtwb2ludERhdGEudmFyaWFibGVzLCBzY29wZUNoYWluVHJlZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFkZE94eWdlblZhcmlhYmxlc0Zyb21HbG9iYWxTY29wZShicmVha3BvaW50RGF0YS52YXJpYWJsZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc3NldCA9IHRoaXMuX2JyZWFrcG9pbnRzLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcmlnaW4gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcmlnaW4ubGluZU51bWJlciAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChpdGVtLm9yaWdpbi5saW5lTnVtYmVyKSsxID09PSBwYXJzZUludChicmVha3BvaW50RGF0YS5saW5lTnVtYmVyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubG9jYXRpb25zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoaXRlbS5sb2NhdGlvbnMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubG9jYXRpb25zLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5sb2NhdGlvbnMuZmluZChsb2MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGxvYy5saW5lTnVtYmVyKSA9PT0gcGFyc2VJbnQoYnJlYWtwb2ludERhdGEubGluZU51bWJlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGl0ZW0ub3JpZ2luLmxpbmVOdW1iZXIpICE9PSAxICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGJyZWFrcG9pbnREYXRhLmxpbmVOdW1iZXIpICE9PSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVhbEJyZmluZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycy5tYXAoKGJyZWFrcG9pbnRFcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50cyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLl9icmVha3BvaW50cykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50cy5tYXAoKGJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJGaWxlTmFtZSA9IHRyYW5zZm9ybVRvSURFU3R5bGUoYnIub3JpZ2luLnNjcmlwdFBhdGgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcG9zc2libGVCcmVha3BvaW50RGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocG9zc2libGVCcmVha3BvaW50c0RhdGEpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50RGF0YSA9IHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZmlsZSA9PT0gZUNhbGxGcmFtZXNbMF0udXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJGaWxlTmFtZSA9PT0gYnJlYWtwb2ludERhdGEuZmlsZU5hbWUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50RGF0YSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcG9zc2libGVCcmVha3BvaW50RGF0YS5maWxlTGluZU51bWJlcnNMZW5ndGggIT09ICd1bmRlZmluZWQnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnREYXRhLmxpbmVOdW1iZXIrMSA9PT0gYnIub3JpZ2luLmxpbmVOdW1iZXIgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyLm9yaWdpbi5saW5lTnVtYmVyKzEgPT09IHBvc3NpYmxlQnJlYWtwb2ludERhdGEuZmlsZUxpbmVOdW1iZXJzTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbEJyZmluZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlYWxCcmZpbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50RGF0YS5yZXNvbHZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcG9zc2libGVCcmVha3BvaW50RGF0YTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50c0RhdGEubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludERhdGEgPSBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YS5maW5kKChpdGVtKSA9PiBpdGVtLmZpbGUgPT09IGVDYWxsRnJhbWVzWzBdLnVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludERhdGEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwb3NzaWJsZUJyZWFrcG9pbnREYXRhLmZpbGVMaW5lTnVtYmVyc0xlbmd0aCAhPT0gJ3VuZGVmaW5lZCcgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnREYXRhLmxpbmVOdW1iZXIrMSA+PSBwb3NzaWJsZUJyZWFrcG9pbnREYXRhLmZpbGVMaW5lTnVtYmVyc0xlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnREYXRhLmxpbmVOdW1iZXIgPSBwb3NzaWJsZUJyZWFrcG9pbnREYXRhLmZpbGVMaW5lTnVtYmVyc0xlbmd0aCAtIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnYnJlYWsnLCBicmVha3BvaW50RGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzLm1hcCgoYnJlYWtwb2ludEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRFcnJvciAmJiBicmVha3BvaW50RXJyb3IubXNnICYmIGJyZWFrcG9pbnRFcnJvci5maWxlTmFtZSAmJiBicmVha3BvaW50RXJyb3IubGluZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlnbm9yZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhICYmIEFycmF5LmlzQXJyYXkocG9zc2libGVCcmVha3BvaW50c0RhdGEpICYmIHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhLm1hcCgoaXRlbSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmZpbGUgPSB0cmFuc2Zvcm1Ub0lERVN0eWxlKGl0ZW0uZmlsZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmZpbGUgPT09IGJyZWFrcG9pbnRFcnJvci5maWxlTmFtZSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludERhdGEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0uZmlsZUxpbmVOdW1iZXJzTGVuZ3RoICE9PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50RXJyb3IubGluZSA+PSBpdGVtLmZpbGVMaW5lTnVtYmVyc0xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGJyZWFrcG9pbnRFcnJvci5saW5lIC0gMjsgLy8gLy8jIHNvdXJjZU1hcHBpbmdVUkwgYW5kIH0uY2FsbCh0aGlzLCBleHBvcnRzLCByZXF1aXJlLCBtb2R1bGUsIF9fZmlsZW5hbWUsIF9fZGlybmFtZSk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGJyZWFrcG9pbnRFcnJvci5saW5lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5icmVha3BvaW50cyAmJiBBcnJheS5pc0FycmF5KGl0ZW0uYnJlYWtwb2ludHMpICYmIGl0ZW0uYnJlYWtwb2ludHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRFcnJvciAmJiBicmVha3BvaW50RXJyb3IubXNnICYmIGJyZWFrcG9pbnRFcnJvci5tc2cuaW5jbHVkZXMoJ1Bvc3NpYmxlIGJyZWFrcG9pbnQgbGluZXMnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5icmVha3BvaW50cy5pbmNsdWRlcyhsaW5lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gYnJlYWtwb2ludEVycm9yLm1zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gYCR7bGluZX0uIGA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9IGAgUG9zc2libGUgYnJlYWtwb2ludCBsaW5lcyA6ICR7aXRlbS5icmVha3BvaW50cy5tYXAoKGxpbmUpID0+IGxpbmUpLmpvaW4oJywgJyl9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50RXJyb3IgJiYgYnJlYWtwb2ludEVycm9yLm1zZyAmJiBicmVha3BvaW50RXJyb3IubXNnLmluY2x1ZGVzKCdwb3NzaWJsZSBicmVha3BvaW50IGxpbmVzJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gYnJlYWtwb2ludEVycm9yLm1zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gYCR7bGluZX0uIGA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9ICcgRmlsZSBkb25cXCd0IGhhdmUgcG9zc2libGUgYnJlYWtwb2ludCBsaW5lcyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpZ25vcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnYnJlYWtFcnJvcicsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtc2csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogYnJlYWtwb2ludEVycm9yLmxpbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGJyZWFrcG9pbnRFcnJvci5maWxlTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnJlYXNvbiA9PT0gJ09PTScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE91dCBvZiBtZW1vcnkgbGVha1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250aW51ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0sIHJlYXNvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2JyZWFrcG9pbnRzTWFwUmVzdWx0IHJlcyByZWFzb24nICwgcmVhc29uKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jbGllbnQub24oJ0RlYnVnZ2VyLmJyZWFrcG9pbnRSZXNvbHZlZCcsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25CcmVha3BvaW50UmVzb2x2ZWQoZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHsgRGVidWdnZXIsIFJ1bnRpbWUgfSA9IHRoaXMuX2NsaWVudDtcclxuICAgICAgICB0aGlzLl9EZWJ1Z2dlciA9IERlYnVnZ2VyO1xyXG4gICAgICAgIHRoaXMuX1J1bnRpbWUgPSBSdW50aW1lO1xyXG4gICAgICAgIFJ1bnRpbWUuZW5hYmxlKCk7XHJcbiAgICAgICAgRGVidWdnZXIuZW5hYmxlKCk7XHJcbiAgICAgICAgRGVidWdnZXIuc2V0UGF1c2VPbkV4Y2VwdGlvbnMoeyBzdGF0ZTogJ25vbmUnIH0pO1xyXG4gICAgICAgIERlYnVnZ2VyLnNldEFzeW5jQ2FsbFN0YWNrRGVwdGgoeyBtYXhEZXB0aDogMzIgfSk7XHJcbiAgICAgICAgRGVidWdnZXIuc2V0QmxhY2tib3hQYXR0ZXJucyh7IHBhdHRlcm5zOiBbXSB9KTtcclxuICAgICAgICAvLyBvbmx5IHVzZSAnYXdhaXQnIGZvciB0aGUgbGFzdCBjYWxsLCBhbGwgcHJldmlvdXMgY2FsbCB0byBEZWJ1Z2dlciBvciBSdW50aW1lIHdpbGwgc3RhY2sgb3RoZXJ3aXNlXHJcbiAgICAgICAgYXdhaXQgUnVudGltZS5ydW5JZldhaXRpbmdGb3JEZWJ1Z2dlcigpO1xyXG4gICAgICAgIC8vIGF3YWl0IGZvciB0aGUgZmlyc3QgYnJlYWtwb2ludCB3aGljaCBpcyBwbGFjZWQgYnkgdGhlIGRlYnVnZ2VyIGF1dG9tYXRpY2FsbHkgXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fRGVidWdnZXIucGF1c2VkKCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdyZWFkeScpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQnJlYWtwb2ludFJlc29sdmVkKGUpIHtcclxuICAgICAgICAvLyBicmVha3BvaW50cyBzZXQgYmVmb3JlIHRoZSBzY3JpcHQgd2FzIGxvYWRlZCB3aWxsIGJlIHJlc29sdmVkIG9uY2UgaXQgbG9hZHNcclxuICAgICAgICBmb3IgKHZhciBicCBvZiB0aGlzLl9icmVha3BvaW50cykge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBicCAmJlxyXG4gICAgICAgICAgICAgICAgZSAmJlxyXG4gICAgICAgICAgICAgICAgYnAuYnJlYWtwb2ludElkID09PSBlLmJyZWFrcG9pbnRJZFxyXG4gICAgICAgICAgICApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsaWRhdGVSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoIGUubG9jYXRpb24gKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZWQgb24gcnVudGltZVxyXG4gICAgICAgICAgICAgICAgICAgIGJwLmxvY2F0aW9ucyA9IFtlLmxvY2F0aW9uXTtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVJlc3VsdCA9IHZhbGlkYXRlQnJlYWtwb2ludChicCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBlLmxvY2F0aW9ucyApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyByZXNvbHZlZCBvbiBwYXVzZVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlUmVzdWx0ID0gdmFsaWRhdGVCcmVha3BvaW50KGJwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzLnB1c2godmFsaWRhdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29ubmVjdHMgdG8gYSBkZWJ1Z2dlci4gRG9lcyBub3RoaW5nIGlmIGFscmVhZHkgY29ubmVjdGVkLlxyXG4gICAgICogQHBhcmFtIHtJbnRlZ2VyfSBEZWJ1Z2dlciBwb3J0LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBjb25uZWN0KHBvcnQsIGhvc3QpIHtcclxuICAgICAgICB0aGlzLl9wb3J0ID0gcG9ydDtcclxuICAgICAgICB0aGlzLl9ob3N0ID0gaG9zdCB8fCAnbG9jYWxob3N0JztcclxuXHJcbiAgICAgICAgbGV0IHNub296ZVRpbWUgPSAxMDAwO1xyXG4gICAgICAgIGxldCBsYXN0RXJyb3IgPSBudWxsO1xyXG5cclxuICAgICAgICBmb3IgKGxldCByZXRyaWVzID0gMDsgcmV0cmllcyA8IENPTk5FQ1RfUkVUUklFUzsgcmV0cmllcysrKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGllbnQgPSBhd2FpdCBDRFAoeyBwb3J0OiB0aGlzLl9wb3J0LCBob3N0OiB0aGlzLl9ob3N0IH0pO1xyXG4gICAgICAgICAgICAgICAgbGFzdEVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsb2cud2FybihgRGVidWdnZXIgY29ubmVjdGlvbiBmYWlsZWQuIFdpbGwgcmV0cnkgaW4gJHtzbm9vemVUaW1lLzEwMDB9cy4gRXJyb3I6IGAsIGxhc3RFcnJvcik7XHJcbiAgICAgICAgICAgIGF3YWl0IHNub296ZShzbm9vemVUaW1lKTtcclxuICAgICAgICAgICAgc25vb3plVGltZSAqPSBDT05ORUNUX1NOT09aRV9JTlRFUlZBTF9NVUxUO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ0ZhaWxlZCB0byBjb25uZWN0IHRvIHRoZSBkZWJ1Z2dlcjogJywgbGFzdEVycm9yKTtcclxuICAgICAgICAgICAgdGhyb3cgbGFzdEVycm9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb250aW51ZUNvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBicmVha3BvaW50IGZvciBhIHBhcnRpY3VsYXIgc2NyaXB0LlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFNjcmlwdCBwYXRoLlxyXG4gICAgICogQHBhcmFtIHtJbnRlZ2VyfSBMaW5lIG51bWJlci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2V0QnJlYWtwb2ludChzY3JpcHRQYXRoLCBsaW5lTnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gc2NyaXB0UGF0aDtcclxuXHJcbiAgICAgICAgY29uc3QgYWxpYXNSZXN1bHQgPSB0aGlzLmluRmlsZU5hbWVBbGlhc2VzKGZpbGVOYW1lKTtcclxuXHJcbiAgICAgICAgaWYgKGFsaWFzUmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGZpbGVOYW1lID0gYWxpYXNSZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmaWxlTmFtZSA9IHVybC5wYXRoVG9GaWxlVVJMKGZpbGVOYW1lKS50b1N0cmluZygpO1xyXG4gICAgICAgIGxldCBlcnIgPSBudWxsO1xyXG5cclxuICAgICAgICBsZXQgYnJlYWtwb2ludCA9IGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnNldEJyZWFrcG9pbnRCeVVybCh7XHJcbiAgICAgICAgICAgIHVybDogZmlsZU5hbWUsXHJcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXItMSwgLy8gZnJvbSAxLWJhc2UgdG8gMC1iYXNlXHJcbiAgICAgICAgICAgIGNvbHVtbk51bWJlcjogMFxyXG4gICAgICAgIH0pLmNhdGNoKGUgPT4ge1xyXG4gICAgICAgICAgICBlcnIgPSBlO1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3Igd2hlbiB0cnlpbmcgdG8gc2V0IGFuIGxhcmVhZHkgZXhpc3RpbmcgYnJlYWtwb2ludFxyXG4gICAgICAgICAgICBpZiAoIWUucmVzcG9uc2UgfHwgZS5yZXNwb25zZS5tZXNzYWdlICE9PSAnQnJlYWtwb2ludCBhdCBzcGVjaWZpZWQgbG9jYXRpb24gYWxyZWFkeSBleGlzdHMuJykge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYnJlYWtwb2ludC5vcmlnaW4gPSB7XHJcbiAgICAgICAgICAgICAgICBzY3JpcHRQYXRoOiBmaWxlTmFtZSxcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXJcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzLnB1c2goYnJlYWtwb2ludCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYnJlYWtwb2ludCkge1xyXG4gICAgICAgICAgICAgICAgLy8gbmV3IGJyZWFja3BvaW50IHJlc29sdmVkIHN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgIHRoaXMub25CcmVha3BvaW50UmVzb2x2ZWQoYnJlYWtwb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBicmVha3BvaW50O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNldEJyZWFrcG9pbnRzQWN0aXZlKGFjdGl2ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9EZWJ1Z2dlciAmJiB0aGlzLl9EZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUoeydhY3RpdmUnOiBhY3RpdmV9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCBzbm9vemUoNTAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0QnJlYWtwb2ludHNBY3RpdmUoYWN0aXZlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50SWQpIHtcclxuICAgICAgICB0aGlzLl9icmVha3BvaW50cyA9IHRoaXMuX2JyZWFrcG9pbnRzLmZpbHRlcigoYnApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGJwLmJyZWFrcG9pbnRJZCAhPT0gYnJlYWtwb2ludElkO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCByZW1vdmVCciA9IHsgYnJlYWtwb2ludElkOiBicmVha3BvaW50SWQgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnJlbW92ZUJyZWFrcG9pbnQocmVtb3ZlQnIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNvbnRpbnVlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5yZXN1bWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVzdW1lKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5yZXN1bWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVzdW1lVGVybWluYXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnJlc3VtZSh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzYWJsZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5kaXNhYmxlKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZW1vdmVCcmVha3BvaW50QnlWYWx1ZShmaWxlUGF0aCwgaW5wdXRMaW5lKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGVQYXRoQWxpYXMgPSB0aGlzLmluRmlsZU5hbWVBbGlhc2VzKGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgY29uc3QgbGluZSA9IGlucHV0TGluZSAtIDE7IC8vIGZyb20gMS1iYXNlIHRvIDAtYmFzZVxyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgYiBvZiB0aGlzLl9icmVha3BvaW50cykge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYiAmJiBiLmJyZWFrcG9pbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGIuYnJlYWtwb2ludElkLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxlTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmVOdW1iZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykgeyAvLyBwYXRoIG1heSBjb250YWluIGEgRHJpdmUgbGV0dGVyIG9uIHdpbjMyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aC0yXSArICc6JyArIHBhcnRzW3BhcnRzLmxlbmd0aC0xXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBwYXJzZUludChwYXJ0c1sxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aC0xXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBwYXJzZUludChwYXJ0c1sxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlTmFtZSA9PT0gZmlsZVBhdGggfHwgZmlsZU5hbWUgPT09IGZpbGVQYXRoQWxpYXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBsaW5lTnVtYmVyID09PSBsaW5lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2VsZi5yZW1vdmVCcmVha3BvaW50KGIuYnJlYWtwb2ludElkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cuZXJyb3IoJ0ZhaWxlZCB3aGVuIHdvcmsgd2l0aCBicmVha3BvaW50IGRhdGE6JywgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNsZWFyQnJlYWtwb2ludHMoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGIgb2YgdGhpcy5fYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNlbGYucmVtb3ZlQnJlYWtwb2ludChiLmJyZWFrcG9pbnRJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UG9zc2libGVCcmVha3BvaW50cyhzdGFydExvY2F0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgY29uc3QgcG9zc2libGVCcmVha3BvaW50cyA9IGF3YWl0IHRoaXMuX0RlYnVnZ2VyLmdldFBvc3NpYmxlQnJlYWtwb2ludHMoe1xyXG4gICAgICAgICAgICBzdGFydDoge1xyXG4gICAgICAgICAgICAgICAgc2NyaXB0SWQ6IHN0YXJ0TG9jYXRpb24uc2NyaXB0SWQsXHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiAwLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHBvc3NpYmxlQnJlYWtwb2ludHMgJiYgcG9zc2libGVCcmVha3BvaW50cy5sb2NhdGlvbnMgJiYgQXJyYXkuaXNBcnJheShwb3NzaWJsZUJyZWFrcG9pbnRzLmxvY2F0aW9ucykgJiYgcG9zc2libGVCcmVha3BvaW50cy5sb2NhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnRzLmxvY2F0aW9ucy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIHR5cGVvZiBpdGVtLmxpbmVOdW1iZXIgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGluZU51bWJlciA9IGl0ZW0ubGluZU51bWJlciArIDE7IC8vIGZyb20gMC1iYXNlIHRvIDEtYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmluY2x1ZGVzKGxpbmVOdW1iZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobGluZU51bWJlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgQXJyYXkuaXNBcnJheShyZXN1bHQpICYmIHJlc3VsdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBwID0gcmVzdWx0LnBvcCgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5pbmNsdWRlcyhwLTEpKSB7XHJcbiAgICAgICAgICAgICAgICAvL2luZ29yZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHAtMSA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwLTEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFNjcmlwdFNvdXJjZShzY3JpcHRJZCkge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5nZXRTY3JpcHRTb3VyY2UoeyBzY3JpcHRJZDogc2NyaXB0SWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2xvc2UoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFkZFZhcmlhYmxlc0Zyb21TY29wZUNoYWluVHJlZSh2YXJpYWJsZXMsIHNjb3BlQ2hhaW5UcmVlKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShzY29wZUNoYWluVHJlZSlcclxuICAgICAgICAgICAgfHwgc2NvcGVDaGFpblRyZWUubGVuZ3RoID09IDBcclxuICAgICAgICAgICAgfHwgIUFycmF5LmlzQXJyYXkoc2NvcGVDaGFpblRyZWVbMF0pXHJcbiAgICAgICAgICAgIHx8IHNjb3BlQ2hhaW5UcmVlWzBdLmxlbmd0aCA9PSAwXHJcbiAgICAgICAgICAgIHx8ICFBcnJheS5pc0FycmF5KHNjb3BlQ2hhaW5UcmVlWzBdWzBdKVxyXG4gICAgICAgICAgICB8fCBzY29wZUNoYWluVHJlZVswXVswXS5sZW5ndGggPT0gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHsgb2JqZWN0SWRSZXNwb25zZSB9ID0gc2NvcGVDaGFpblRyZWVbMF1bMF1bMF07XHJcbiAgICAgICAgY29uc3QgeyByZXN1bHQgfSA9IG9iamVjdElkUmVzcG9uc2U7XHJcbiAgICAgICAgZm9yIChjb25zdCBzY29wZVZhciBvZiByZXN1bHQpIHtcclxuICAgICAgICAgICAgaWYgKCFJR05PUkVfU0NPUEVfQ0hBSU5fVkFSSUFCTEVTLmluY2x1ZGVzKHNjb3BlVmFyLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgdHlwZTtcclxuICAgICAgICAgICAgICAgIGlmIChzY29wZVZhciAmJiBzY29wZVZhci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBzY29wZVZhci52YWx1ZS50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29wZVZhci52YWx1ZS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNjb3BlVmFyLnZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXdhaXQgdGhpcy50cnlUb1JldHJpZXZlT2JqZWN0VmFsdWUoc2NvcGVWYXIudmFsdWUub2JqZWN0SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBzY29wZVZhci5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUgfHwgJ3VuZGVmaW5lZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB0cnlUb1JldHJpZXZlT2JqZWN0VmFsdWUob2JqZWN0SWQpIHtcclxuICAgICAgICBpZiAoIW9iamVjdElkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcmVzdWx0IH0gPSBhd2FpdCB0aGlzLl9SdW50aW1lLmdldFByb3BlcnRpZXMoeyBvYmplY3RJZCB9KTtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqVmFsdWUgPSB7fTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5mb3JFYWNoKHByb3BEZXNjID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcERlc2MudmFsdWUgJiYgcHJvcERlc2MudmFsdWUudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqVmFsdWVbcHJvcERlc2MubmFtZV0gPSBwcm9wRGVzYy52YWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdSdW50aW1lLmdldFByb3BlcnRpZXMgY2FsbCBmYWlsZWQnLCBlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZGRPeHlnZW5WYXJpYWJsZXNGcm9tR2xvYmFsU2NvcGUodmFyaWFibGVzKSB7XHJcbiAgICAgICAgY29uc3QgeyByZXN1bHQ6IHBvRXZhbFJlc3VsdCB9ID0gYXdhaXQgdGhpcy5fUnVudGltZS5ldmFsdWF0ZSh7IGV4cHJlc3Npb246ICdwbycsIHJldHVybkJ5VmFsdWU6IHRydWUgfSk7XHJcbiAgICAgICAgY29uc3QgeyByZXN1bHQ6IGVudkV2YWxSZXN1bHQgfSA9IGF3YWl0IHRoaXMuX1J1bnRpbWUuZXZhbHVhdGUoeyBleHByZXNzaW9uOiAnZW52JywgcmV0dXJuQnlWYWx1ZTogdHJ1ZSB9KTtcclxuICAgICAgICBjb25zdCB7IHJlc3VsdDogdmFyc0V2YWxSZXN1bHQgfSA9IGF3YWl0IHRoaXMuX1J1bnRpbWUuZXZhbHVhdGUoeyBleHByZXNzaW9uOiAndmFycycsIHJldHVybkJ5VmFsdWU6IHRydWUgfSk7XHJcbiAgICAgICAgY29uc3QgeyByZXN1bHQ6IHBhcmFtc0V2YWxSZXN1bHQgfSA9IGF3YWl0IHRoaXMuX1J1bnRpbWUuZXZhbHVhdGUoeyBleHByZXNzaW9uOiAncGFyYW1zJywgcmV0dXJuQnlWYWx1ZTogdHJ1ZSB9KTtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0ge1xyXG4gICAgICAgICAgICBwbzogcG9FdmFsUmVzdWx0LFxyXG4gICAgICAgICAgICBlbnY6IGVudkV2YWxSZXN1bHQsXHJcbiAgICAgICAgICAgIHZhcnM6IHZhcnNFdmFsUmVzdWx0LFxyXG4gICAgICAgICAgICBwYXJhbXM6IHBhcmFtc0V2YWxSZXN1bHQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBPYmplY3Qua2V5cyhyZXN1bHRzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3VsdHNba2V5XTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGtleSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVzdWx0LnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCcmVha3BvaW50cyhmaWxlUGF0aCkge1xyXG4gICAgICAgIHZhciBicHMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBiIG9mIHRoaXMuX2JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gYi5icmVha3BvaW50SWQuc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgbGV0IGZpbGVOYW1lO1xyXG4gICAgICAgICAgICBsZXQgbGluZU51bWJlcjtcclxuXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7IC8vIHBhdGggbWF5IGNvbnRhaW4gYSBEcml2ZSBsZXR0ZXIgb24gd2luMzJcclxuICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gcGFydHNbcGFydHMubGVuZ3RoLTJdICsgJzonICsgcGFydHNbcGFydHMubGVuZ3RoLTFdO1xyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlciA9IHBhcnNlSW50KHBhcnRzWzFdKSsxOyAvL2Zyb20gMC1iYXNlIHRvIDEtYmFzZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gcGFyc2VJbnQocGFydHNbMV0pKzE7IC8vZnJvbSAwLWJhc2UgdG8gMS1iYXNlXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChmaWxlTmFtZSA9PT0gZmlsZVBhdGgpIHtcclxuICAgICAgICAgICAgICAgIGJwcy5wdXNoKGxpbmVOdW1iZXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVBhdGhBbGlhcyA9IHRoaXMuaW5GaWxlTmFtZUFsaWFzZXMoZmlsZVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbGVQYXRoQWxpYXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBicHMucHVzaChsaW5lTnVtYmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnBzO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
966
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvZGVidWdnZXIuanMiXSwibmFtZXMiOlsibG9nIiwiRXZlbnRFbWl0dGVyIiwicmVxdWlyZSIsIkNEUCIsIkNPTk5FQ1RfUkVUUklFUyIsIkNPTk5FQ1RfU05PT1pFX0lOVEVSVkFMX01VTFQiLCJNQVhfREVQVEgiLCJJR05PUkVfU0NPUEVfQ0hBSU5fVkFSSUFCTEVTIiwibWF4RmluZGVkRGVwdGgiLCJ0cmFuc2Zvcm1Ub0lERVN0eWxlIiwiZmlsZU5hbWUiLCJ1cmlJbmRleCIsImluZGV4T2YiLCJicERhdGEiLCJzdWJzdHJpbmciLCJ1cmkiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwidXJsIiwiZmlsZVVSTFRvUGF0aCIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImRlbGV0ZVZhbHVlcyIsImFyciIsImRlcHRoIiwicmVzdWx0IiwibWFwIiwiaXRlbSIsInZhbHVlIiwiY2xhc3NOYW1lIiwiY2xvbmVWYWx1ZSIsIk9iamVjdCIsImFzc2lnbiIsIm9iamVjdElkIiwiY2xvbmUiLCJleHRyYWN0QnJlYWtwb2ludERhdGEiLCJicFN0ciIsInBhcnRzIiwic3BsaXQiLCJsaW5lTnVtYmVyIiwicGFyc2VJbnQiLCJzcGxpY2UiLCJqb2luIiwidmFsaWRhdGVCcmVha3BvaW50IiwiYnJlYWtwb2ludCIsImJyT2JqIiwiYnJlYWtwb2ludElkIiwiYnJMaW5lTnVtYmVyIiwibG9jYXRpb25zIiwiQXJyYXkiLCJpc0FycmF5IiwiYnJGaWxlTmFtZSIsIml0ZW1MaW5lTnVtYmVyIiwibXNnIiwibGluZSIsIkRlYnVnZ2VyIiwiY29uc3RydWN0b3IiLCJwaWQiLCJfcGlkIiwiX3BvcnQiLCJ1bmRlZmluZWQiLCJfaG9zdCIsIl9icmVha3BvaW50cyIsIl9wZW5kaW5nQlAiLCJfcGF1c2VkIiwiX2NsaWVudCIsIl9maWxlTmFtZUFsaWFzZXMiLCJfYnJlYWtwb2ludEVycm9ycyIsInJlc2V0IiwiY2xvc2UiLCJnZXRQcm9wZXJ0aWVzQnlPYmplY3RJZCIsImVsbSIsImRhdGEiLCJfUnVudGltZSIsImdldFByb3BlcnRpZXMiLCJnZXRQcm9taWNlQWxsUmVzdWx0IiwibWFwUmVzdWx0RmlsdGVyZWQiLCJwcm9taXNlQWxsUHJvbWlzZSIsImFsbCIsInRoZW4iLCJmaWx0ZXIiLCJwcm9taXNlcyIsImdldFByb3BlcnRpZXNSZXN1bHQiLCJtYXBSZXN1bHQiLCJnZXRQcm9wZXJ0aWVzSW5uZXJSZXN1bHQiLCJzY29wZUl0ZW0iLCJvYmplY3RJZFJlc3BvbnNlIiwiY2hpbGQiLCJ2YWx1ZXMiLCJwcm9jZXNzU2NvcGUiLCJzY29wZUNoYWluIiwic2NvcGVDaGFpblJlc3VsdCIsImNoYWluIiwib2JqZWN0IiwidHlwZSIsImVsIiwicHJvY2Vzc0NhbGxGcmFtZXMiLCJjYWxsRnJhbWVzIiwiY2FsbEZyYW1lc01hcFJlc3VsdCIsImNhbGxGcmFtZSIsInByb2Nlc3NTY29wZVJlc3VsdCIsImluQnJlYWtwb2ludHMiLCJpdGVtVXJsIiwiYnAiLCJ0b0xvd2VyQ2FzZSIsIm9yaWdpbiIsInNjcmlwdFBhdGgiLCJpbkZpbGVOYW1lQWxpYXNlcyIsImFsaWFzIiwiY29udGludWVDb25uZWN0Iiwib24iLCJtIiwiZmlsZWxjIiwiYnJlYWtwb2ludEZvckNoYW5nZSIsImZpbmRSZXN1bHQiLCJmaW5kIiwiYnJlYWtwb2ludGxjIiwiaW5jbHVkZXMiLCJwdXNoIiwiX0RlYnVnZ2VyIiwicGF1c2UiLCJtVXJsIiwiYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb24iLCJicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdCIsInNldEJyZWFrcG9pbnQiLCJyZXN1bWUiLCJyZWFzb24iLCJfYnJva2VPblN0YXJ0IiwicG9zc2libGVCcmVha3BvaW50c0RhdGEiLCJlQ2FsbEZyYW1lcyIsImJyZWFrcG9pbnRzTWFwUmVzdWx0Iiwic2NyaXB0SWQiLCJsb2NhdGlvbiIsImluaXRpYWxEZXB0aCIsInVuaXF1ZVNjcmlwdElkQXJyIiwiZmluZGVkIiwiZW5kc1dpdGgiLCJwb3NzaWJsZUJyZWFrcG9pbnRzIiwiZ2V0UG9zc2libGVCcmVha3BvaW50cyIsInNjcmlwdFNvdXJjZSIsImdldFNjcmlwdFNvdXJjZSIsInNjcmlwdFNvdXJjZVNwbGl0IiwiZmlsZUxpbmVOdW1iZXJzTGVuZ3RoIiwiYnJlYWtwb2ludHMiLCJmaWxlIiwic2NvcGVDaGFpblRyZWUiLCJicmVha3BvaW50RGF0YSIsInZhcmlhYmxlcyIsImFkZFZhcmlhYmxlc0Zyb21TY29wZUNoYWluVHJlZSIsImFkZE94eWdlblZhcmlhYmxlc0Zyb21HbG9iYWxTY29wZSIsImlzc2V0IiwibG9jIiwicmVhbEJyZmluZGVkIiwiYnJlYWtwb2ludEVycm9yIiwiYnIiLCJwb3NzaWJsZUJyZWFrcG9pbnREYXRhIiwicmVzb2x2ZWQiLCJlbWl0IiwiaWdub3JlIiwibWVzc2FnZSIsImNvbnRpbnVlIiwib25CcmVha3BvaW50UmVzb2x2ZWQiLCJSdW50aW1lIiwiZW5hYmxlIiwic2V0UGF1c2VPbkV4Y2VwdGlvbnMiLCJzdGF0ZSIsInNldEFzeW5jQ2FsbFN0YWNrRGVwdGgiLCJtYXhEZXB0aCIsInNldEJsYWNrYm94UGF0dGVybnMiLCJwYXR0ZXJucyIsInJ1bklmV2FpdGluZ0ZvckRlYnVnZ2VyIiwicGF1c2VkIiwidmFsaWRhdGVSZXN1bHQiLCJjb25uZWN0IiwicG9ydCIsImhvc3QiLCJzbm9vemVUaW1lIiwibGFzdEVycm9yIiwicmV0cmllcyIsIndhcm4iLCJhbGlhc1Jlc3VsdCIsInBhdGhUb0ZpbGVVUkwiLCJ0b1N0cmluZyIsImVyciIsInNldEJyZWFrcG9pbnRCeVVybCIsImNvbHVtbk51bWJlciIsImNhdGNoIiwicmVzcG9uc2UiLCJzZXRCcmVha3BvaW50c0FjdGl2ZSIsImFjdGl2ZSIsInJlbW92ZUJyZWFrcG9pbnQiLCJyZW1vdmVCciIsInJlc3VtZVRlcm1pbmF0ZSIsImRpc2FibGUiLCJyZW1vdmVCcmVha3BvaW50QnlWYWx1ZSIsImZpbGVQYXRoIiwiaW5wdXRMaW5lIiwiZmlsZVBhdGhBbGlhcyIsInNlbGYiLCJiIiwiY2xlYXJCcmVha3BvaW50cyIsInN0YXJ0TG9jYXRpb24iLCJzdGFydCIsInAiLCJwb3AiLCJzY29wZVZhciIsIm5hbWUiLCJ0cnlUb1JldHJpZXZlT2JqZWN0VmFsdWUiLCJvYmpWYWx1ZSIsImZvckVhY2giLCJwcm9wRGVzYyIsInBvRXZhbFJlc3VsdCIsImV2YWx1YXRlIiwiZXhwcmVzc2lvbiIsInJldHVybkJ5VmFsdWUiLCJlbnZFdmFsUmVzdWx0IiwidmFyc0V2YWxSZXN1bHQiLCJwYXJhbXNFdmFsUmVzdWx0IiwicmVzdWx0cyIsInBvIiwiZW52IiwidmFycyIsInBhcmFtcyIsImtleXMiLCJrZXkiLCJnZXRCcmVha3BvaW50cyIsImJwcyJdLCJtYXBwaW5ncyI6IkFBYUE7Ozs7Ozs7OztBQUVBOztBQUlBOzs7O0FBSEEsTUFBTUEsR0FBRyxHQUFHLHFCQUFPLFVBQVAsQ0FBWjs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBbUJDLE9BQU8sQ0FBQyxRQUFELENBQWhDOztBQUNBLE1BQU1DLEdBQUcsR0FBR0QsT0FBTyxDQUFDLHlCQUFELENBQW5COztBQUdBLE1BQU1FLGVBQWUsR0FBRyxDQUF4QjtBQUNBLE1BQU1DLDRCQUE0QixHQUFHLENBQXJDO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLENBQWxCO0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsQ0FDakMsU0FEaUMsRUFFakMsU0FGaUMsRUFHakMsUUFIaUMsRUFJakMsWUFKaUMsRUFLakMsV0FMaUMsQ0FBckM7QUFPQSxJQUFJQyxjQUFjLEdBQUcsQ0FBckI7O0FBRUEsTUFBTUMsbUJBQW1CLEdBQUlDLFFBQUQsSUFBYztBQUN0QyxNQUFJO0FBQ0EsVUFBTUMsUUFBUSxHQUFHRCxRQUFRLENBQUNFLE9BQVQsQ0FBaUIsT0FBakIsQ0FBakI7QUFDQSxVQUFNQyxNQUFNLEdBQUdILFFBQVEsQ0FB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Uy9FLFVBQVQ7QUFDSCxPQUZELE1BRU87QUFDSCxjQUFNOEosYUFBYSxHQUFHLEtBQUsxRixpQkFBTCxDQUF1QndGLFFBQXZCLENBQXRCOztBQUNBLFlBQUlFLGFBQUosRUFBbUI7QUFDZjZCLFVBQUFBLEdBQUcsQ0FBQzVHLElBQUosQ0FBUy9FLFVBQVQ7QUFDSDtBQUNKO0FBQ0o7O0FBQ0QsV0FBTzJMLEdBQVA7QUFDSDs7QUFuN0I4QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKi9cblxuLypcbiAqIFY4IGRlYnVnZ2VyIGNsaWVudC5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbGliL2xvZ2dlcic7XG5jb25zdCBsb2cgPSBsb2dnZXIoJ0RlYnVnZ2VyJyk7XG5jb25zdCB7IEV2ZW50RW1pdHRlciB9ID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5jb25zdCBDRFAgPSByZXF1aXJlKCdjaHJvbWUtcmVtb3RlLWludGVyZmFjZScpO1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuXG5jb25zdCBDT05ORUNUX1JFVFJJRVMgPSA0O1xuY29uc3QgQ09OTkVDVF9TTk9PWkVfSU5URVJWQUxfTVVMVCA9IDI7XG5jb25zdCBNQVhfREVQVEggPSA1O1xuY29uc3QgSUdOT1JFX1NDT1BFX0NIQUlOX1ZBUklBQkxFUyA9IFtcbiAgICAnZXhwb3J0cycsXG4gICAgJ3JlcXVpcmUnLFxuICAgICdtb2R1bGUnLFxuICAgICdfX2ZpbGVuYW1lJyxcbiAgICAnX19kaXJuYW1lJ1xuXTtcbmxldCBtYXhGaW5kZWREZXB0aCA9IDA7XG5cbmNvbnN0IHRyYW5zZm9ybVRvSURFU3R5bGUgPSAoZmlsZU5hbWUpID0+IHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCB1cmlJbmRleCA9IGZpbGVOYW1lLmluZGV4T2YoJ2ZpbGU6Jyk7XG4gICAgICAgIGNvbnN0IGJwRGF0YSA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCB1cmlJbmRleCk7XG4gICAgICAgIGxldCB1cmkgPSBmaWxlTmFtZS5zdWJzdHJpbmcodXJpSW5kZXgpO1xuICAgICAgICAvLyBmaXggVU5DIHBhdGhzXG4gICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInICYmIHVyaS5zdGFydHNXaXRoKCdmaWxlOi8vLycpKSB7XG4gICAgICAgICAgICB1cmkgPSAnZmlsZTovLycgKyB1cmkuc3Vic3RyaW5nKCdmaWxlOi8vLycubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnBEYXRhICsgdXJsLmZpbGVVUkxUb1BhdGgodXJpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0cmFuc2Zvcm1Ub0lERVN0eWxlIGZpbGVOYW1lJywgZmlsZU5hbWUpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCd0cmFuc2Zvcm1Ub0lERVN0eWxlIGVycm9yJywgZSk7XG4gICAgICAgIHRocm93IGU7XG4gICAgfVxufTtcblxuLy8gc25vb3plIGZ1bmN0aW9uIC0gYXN5bmMgd3JhcHBlciBhcm91bmQgc2V0VGltZW91dCBmdW5jdGlvblxuY29uc3Qgc25vb3plID0gbXMgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG5cbmNvbnN0IGRlbGV0ZVZhbHVlcyA9IChhcnIsIGRlcHRoKSA9PiB7XG5cbiAgICBpZiAoZGVwdGggPiBtYXhGaW5kZWREZXB0aCkge1xuICAgICAgICBtYXhGaW5kZWREZXB0aCA9IGRlcHRoO1xuICAgIH1cblxuICAgIGlmIChkZXB0aCA+IE1BWF9ERVBUSCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCA9IGFyci5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLmNsYXNzTmFtZSAmJiBpdGVtLnZhbHVlLmNsYXNzTmFtZSA9PT0gJ0Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgY2xvbmVWYWx1ZSA9IE9iamVjdC5hc3NpZ24oaXRlbS52YWx1ZSk7XG4gICAgICAgICAgICBkZWxldGUgY2xvbmVWYWx1ZS5vYmplY3RJZDtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lID0gT2JqZWN0LmFzc2lnbihpdGVtLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGNsb25lVmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGVsZXRlIGNsb25lLm9iamVjdElkO1xuICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5mdW5jdGlvbiBleHRyYWN0QnJlYWtwb2ludERhdGEoYnBTdHIpIHtcbiAgICBpZiAoIWJwU3RyIHx8IHR5cGVvZiBicFN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgYnBTdHIgPSB0cmFuc2Zvcm1Ub0lERVN0eWxlKGJwU3RyKTtcbiAgICAgICAgY29uc3QgcGFydHMgPSBicFN0ci5zcGxpdCgnOicpO1xuXG4gICAgICAgIGNvbnN0IGxpbmVOdW1iZXIgPSBwYXJzZUludChwYXJ0c1sxXSk7XG5cbiAgICAgICAgLy8gcm9tb3ZlIGZpbGUgbnVtYmVyLCBsaW5lIG51bWJlciwgY29sdW1uIG51bWJlclxuICAgICAgICBwYXJ0cy5zcGxpY2UoMCwgMyk7XG5cbiAgICAgICAgLy8gbG9va3MgbGluZSBuZWVkIG9ubHkgZm9yIHdpbmRvd3MgcGF0aCB3aGl0aCBkaXNrLCBsaWtlIEM6Ly9cbiAgICAgICAgLy8gZm9yIHdpbmRvd3MgbmV0d29yayBmb2xkZXJzIGFuZCBtYWMgbm90IG5lZWRcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXJ0cy5qb2luKCc6Jyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXJcbiAgICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmVycm9yKGBGYWlsZWQgdG8gZXh0cmFjdCBicmVha3BvaW50IGRhdGE6ICR7YnBTdHJ9YCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVCcmVha3BvaW50KGJyZWFrcG9pbnQpIHtcbiAgICBjb25zdCBick9iaiA9IGV4dHJhY3RCcmVha3BvaW50RGF0YShicmVha3BvaW50LmJyZWFrcG9pbnRJZCk7XG5cbiAgICBjb25zdCBickxpbmVOdW1iZXIgPSBick9iai5saW5lTnVtYmVyICsgMTsgLy8gZnJvbSAwLWJhc2UgdG8gMSBiYXNlO1xuXG4gICAgaWYgKGJyZWFrcG9pbnQgJiYgYnJlYWtwb2ludC5sb2NhdGlvbnMgJiYgQXJyYXkuaXNBcnJheShicmVha3BvaW50LmxvY2F0aW9ucykgJiYgYnJlYWtwb2ludC5sb2NhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgYnJlYWtwb2ludC5sb2NhdGlvbnMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBickZpbGVOYW1lID0gYnJPYmouZmlsZU5hbWU7XG4gICAgICAgICAgICBjb25zdCBpdGVtTGluZU51bWJlciA9IGl0ZW0ubGluZU51bWJlciArIDE7IC8vIGZyb20gMC1iYXNlIHRvIDEgYmFzZTtcblxuICAgICAgICAgICAgaWYgKGJyTGluZU51bWJlciAhPT0gaXRlbUxpbmVOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZzogYEJyZWFrcG9pbnRzIHdhcm5pbmcgOiAke2JyRmlsZU5hbWV9IERvbid0IGhhdmUgb3Bwb3J0dW5pdHkgdG8gaGF2ZSBicmVha3BvaW50IGF0IGxpbmUgOiBgLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogYnJGaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbGluZTogYnJMaW5lTnVtYmVyXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlYnVnZ2VyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBjb25zdHJ1Y3RvcihwaWQpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLl9waWQgPSBwaWQ7XG4gICAgICAgIHRoaXMuX3BvcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2hvc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0gW107XG4gICAgICAgIHRoaXMuX3BlbmRpbmdCUCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NsaWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZpbGVOYW1lQWxpYXNlcyA9IFtdO1xuICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzID0gW107XG4gICAgfVxuXG4gICAgYXN5bmMgcmVzZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jbGllbnQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5jbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5fY2xpZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0gW107XG4gICAgICAgIHRoaXMuX2ZpbGVOYW1lQWxpYXNlcyA9IFtdO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFByb3BlcnRpZXNCeU9iamVjdElkKG9iamVjdElkLCBkZXB0aCwgZWxtKSB7XG4gICAgICAgIGxldCBkYXRhID0ge307XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLl9SdW50aW1lLmdldFByb3BlcnRpZXMoe1xuICAgICAgICAgICAgICAgIG9iamVjdElkIDogb2JqZWN0SWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnZ2V0UHJvcGVydGllcyBlbG0nLCBlbG0pO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2dldFByb3BlcnRpZXMgZScsIGUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjbG9uZSA9IE9iamVjdC5hc3NpZ24oe30sIGRhdGEpO1xuXG4gICAgICAgIGlmIChjbG9uZSAmJiBjbG9uZSAmJiBjbG9uZS5yZXN1bHQpIHtcbiAgICAgICAgICAgIGNsb25lID0gT2JqZWN0LmFzc2lnbih7fSwgY2xvbmUsIHtcbiAgICAgICAgICAgICAgICByZXN1bHQ6IGRlbGV0ZVZhbHVlcyhjbG9uZS5yZXN1bHQsIGRlcHRoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UHJvbWljZUFsbFJlc3VsdChtYXBSZXN1bHRGaWx0ZXJlZCkge1xuICAgICAgICBsZXQgcHJvbWlzZUFsbFByb21pc2UgPSBhd2FpdCBQcm9taXNlLmFsbChtYXBSZXN1bHRGaWx0ZXJlZCkudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwcm9taXNlQWxsUHJvbWlzZSAmJiBBcnJheS5pc0FycmF5KHByb21pc2VBbGxQcm9taXNlKSAmJiBwcm9taXNlQWxsUHJvbWlzZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwcm9taXNlQWxsUHJvbWlzZSA9IHByb21pc2VBbGxQcm9taXNlLmZpbHRlcigoaXRlbSkgPT4gISFpdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcm9taXNlQWxsUHJvbWlzZTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRQcm9wZXJ0aWVzKG9iamVjdElkLCBkZXB0aCwgZWxtKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG5cbiAgICAgICAgY29uc3QgZ2V0UHJvcGVydGllc1Jlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydGllc0J5T2JqZWN0SWQob2JqZWN0SWQsIGRlcHRoLCBlbG0pO1xuXG4gICAgICAgIGlmIChnZXRQcm9wZXJ0aWVzUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZ2V0UHJvcGVydGllc1Jlc3VsdCAmJiBnZXRQcm9wZXJ0aWVzUmVzdWx0LnJlc3VsdCAmJiBBcnJheS5pc0FycmF5KGdldFByb3BlcnRpZXNSZXN1bHQucmVzdWx0KSkge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbWFwUmVzdWx0ID0gZ2V0UHJvcGVydGllc1Jlc3VsdC5yZXN1bHQubWFwKGFzeW5jIChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0udmFsdWUgJiYgaXRlbS52YWx1ZS5vYmplY3RJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0UHJvcGVydGllc0lubmVyUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRQcm9wZXJ0aWVzKGl0ZW0udmFsdWUub2JqZWN0SWQsIGRlcHRoKzEsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5zY29wZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFByb3BlcnRpZXNJbm5lclJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbWFwUmVzdWx0RmlsdGVyZWQgPSBtYXBSZXN1bHQuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICBkZXB0aDogZGVwdGgsXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdElkOiBvYmplY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWRSZXNwb25zZTogT2JqZWN0LmFzc2lnbih7fSwgZ2V0UHJvcGVydGllc1Jlc3VsdCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdElkXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXBSZXN1bHRGaWx0ZXJlZCAmJiBBcnJheS5pc0FycmF5KG1hcFJlc3VsdEZpbHRlcmVkKSAmJiBtYXBSZXN1bHRGaWx0ZXJlZC5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZUFsbFByb21pc2UgPSBhd2FpdCB0aGlzLmdldFByb21pY2VBbGxSZXN1bHQobWFwUmVzdWx0RmlsdGVyZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9taXNlQWxsUHJvbWlzZSAmJiBBcnJheS5pc0FycmF5KHByb21pc2VBbGxQcm9taXNlKSAmJiBwcm9taXNlQWxsUHJvbWlzZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hpbGQgPSBwcm9taXNlQWxsUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBkZXB0aDogZGVwdGgsXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdElkOiBvYmplY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWRSZXNwb25zZTogT2JqZWN0LmFzc2lnbih7fSwgZ2V0UHJvcGVydGllc1Jlc3VsdCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdElkXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4odmFsdWVzID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHByb2Nlc3NTY29wZShzY29wZUNoYWluLCBkZXB0aCkge1xuICAgICAgICBsZXQgc2NvcGVDaGFpblJlc3VsdCA9IGF3YWl0IHNjb3BlQ2hhaW4ubWFwKGFzeW5jIChjaGFpbikgPT4ge1xuICAgICAgICAgICAgaWYgKGNoYWluICYmIGNoYWluLm9iamVjdCAmJiBjaGFpbi5vYmplY3Qub2JqZWN0SWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNoYWluLm9iamVjdC5vYmplY3RJZCA9PT0gJ3N0cmluZycgJiYgY2hhaW4udHlwZSAhPT0gJ2dsb2JhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0UHJvcGVydGllc1Jlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydGllcyhjaGFpbi5vYmplY3Qub2JqZWN0SWQsIGRlcHRoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UHJvcGVydGllc1Jlc3VsdDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzY29wZUNoYWluUmVzdWx0ID0gc2NvcGVDaGFpblJlc3VsdC5maWx0ZXIoKGVsKSA9PiAhIWVsKTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoc2NvcGVDaGFpblJlc3VsdCkudGhlbih2YWx1ZXMgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKChlbCkgPT4gISFlbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIHByb2Nlc3NDYWxsRnJhbWVzKGNhbGxGcmFtZXMsIGRlcHRoKSB7XG4gICAgICAgIGxldCBjYWxsRnJhbWVzTWFwUmVzdWx0ID0gYXdhaXQgY2FsbEZyYW1lcy5tYXAoYXN5bmMoY2FsbEZyYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FsbEZyYW1lICYmIGNhbGxGcmFtZS5zY29wZUNoYWluICYmIEFycmF5LmlzQXJyYXkoY2FsbEZyYW1lLnNjb3BlQ2hhaW4pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc1Njb3BlUmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9jZXNzU2NvcGUoY2FsbEZyYW1lLnNjb3BlQ2hhaW4sIGRlcHRoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1Njb3BlUmVzdWx0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY2FsbEZyYW1lc01hcFJlc3VsdCA9IGNhbGxGcmFtZXNNYXBSZXN1bHQuZmlsdGVyKChlbCkgPT4gISFlbCk7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGNhbGxGcmFtZXNNYXBSZXN1bHQpLnRoZW4odmFsdWVzID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluQnJlYWtwb2ludHMoaXRlbVVybCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50cyAmJiBBcnJheS5pc0FycmF5KHRoaXMuX2JyZWFrcG9pbnRzKSAmJiB0aGlzLl9icmVha3BvaW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9icmVha3BvaW50cy5tYXAoKGJwKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBpdGVtVXJsICYmXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1VcmwudG9Mb3dlckNhc2UgJiZcbiAgICAgICAgICAgICAgICAgICAgYnAub3JpZ2luICYmXG4gICAgICAgICAgICAgICAgICAgIGJwLm9yaWdpbi5zY3JpcHRQYXRoICYmXG4gICAgICAgICAgICAgICAgICAgIGJwLm9yaWdpbi5zY3JpcHRQYXRoLnRvTG93ZXJDYXNlICYmXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1VcmwudG9Mb3dlckNhc2UoKSA9PT0gYnAub3JpZ2luLnNjcmlwdFBhdGgudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaW5GaWxlTmFtZUFsaWFzZXMoZmlsZU5hbWUpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5fZmlsZU5hbWVBbGlhc2VzICYmIEFycmF5LmlzQXJyYXkodGhpcy5fZmlsZU5hbWVBbGlhc2VzKSAmJiB0aGlzLl9maWxlTmFtZUFsaWFzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fZmlsZU5hbWVBbGlhc2VzLm1hcCgoYWxpYXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGFsaWFzICYmXG4gICAgICAgICAgICAgICAgICAgIGFsaWFzLnRvTG93ZXJDYXNlICYmXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lICYmXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lLnRvTG93ZXJDYXNlICYmXG4gICAgICAgICAgICAgICAgICAgIGFsaWFzLnRvTG93ZXJDYXNlKCkgPT09IGZpbGVOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYWxpYXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBhc3luYyBjb250aW51ZUNvbm5lY3QoKSB7XG5cbiAgICAgICAgdGhpcy5fY2xpZW50Lm9uKCdEZWJ1Z2dlci5zY3JpcHRQYXJzZWQnLCBhc3luYyhtKSA9PiB7XG4gICAgICAgICAgICBpZiAobSAmJiBtLnVybCkge1xuICAgICAgICAgICAgICAgIGlmIChtLnVybC50b0xvd2VyQ2FzZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlbGMgPSBtLnVybC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludEZvckNoYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluZFJlc3VsdCA9IHRoaXMuX2JyZWFrcG9pbnRzLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLm9yaWdpbiAmJiBpdGVtLm9yaWdpbi5zY3JpcHRQYXRoICYmIGl0ZW0ub3JpZ2luLnNjcmlwdFBhdGgudG9Mb3dlckNhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50bGMgPSBpdGVtLm9yaWdpbi5zY3JpcHRQYXRoLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludGxjID09PSBmaWxlbGMgJiYgaXRlbS5vcmlnaW4uc2NyaXB0UGF0aCAhPT0gbS51cmwpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZmlsZU5hbWVBbGlhc2VzLmluY2x1ZGVzKG0udXJsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlTmFtZUFsaWFzZXMucHVzaChtLnVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9EZWJ1Z2dlci5wYXVzZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3JDaGFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50OiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVybDogbS51cmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb24gPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMubWFwKChicCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnAub3JpZ2luICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwLm9yaWdpbi5zY3JpcHRQYXRoICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3JDaGFuZ2UgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludEZvckNoYW5nZS5tVXJsICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3JDaGFuZ2UuYnJlYWtwb2ludCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50Rm9yQ2hhbmdlLmJyZWFrcG9pbnQub3JpZ2luICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3JDaGFuZ2UuYnJlYWtwb2ludC5vcmlnaW4uc2NyaXB0UGF0aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicC5vcmlnaW4uc2NyaXB0UGF0aCA9PT0gYnJlYWtwb2ludEZvckNoYW5nZS5icmVha3BvaW50Lm9yaWdpbi5zY3JpcHRQYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0UGF0aDogYnJlYWtwb2ludEZvckNoYW5nZS5tVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogYnAub3JpZ2luLmxpbmVOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbiAmJiBBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uKSAmJiBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uUmVzdWx0ID0gYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb24ubWFwKGFzeW5jKGJwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNldEJyZWFrcG9pbnQoYnAuc2NyaXB0UGF0aCwgYnAubGluZU51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdCA9IGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uUmVzdWx0LmZpbHRlcigoZWwpID0+ICEhZWwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb25SZXN1bHQpLnRoZW4oYXN5bmModmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fRGVidWdnZXIucmVzdW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2xpZW50Lm9uKCdEZWJ1Z2dlci5wYXVzZWQnLCAoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChlLnJlYXNvbiA9PT0gJ0JyZWFrIG9uIHN0YXJ0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Jyb2tlT25TdGFydCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIENocm9tZSBkZWJ1Z2dlciBkb2Vzbid0IHNlZW0gdG8gcmVtb3ZlIGJyZWFrcG9pbnRzIHdoZW4gdXNpbmcgcmVtb3ZlQnJlYWtwb2ludFxuICAgICAgICAgICAgICAgIC8vIGFuZCAnc29tZXRoaW5nJyBpcyBzdGlsbCBnZXR0aW5nIGhpdC4gbm90IGNsZWFyIHdoeSB0aGlzIGlzIGhhcHBlbmluZy5cbiAgICAgICAgICAgICAgICAvLyB0aHVzLCB3ZSBlbWl0IGJyZWFrIGV2ZW50IG9ubHkgaWYgbWF0Y2hpbmcgYnJlYWtwb2ludCBzdGlsbCBleGlzdHMgaW4gdGhpcy5fYnJlYWtwb2ludHNcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhID0gW107XG4gICAgICAgICAgICAgICAgbGV0IGVDYWxsRnJhbWVzID0gW107XG5cbiAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLmNhbGxGcmFtZXMgJiYgQXJyYXkuaXNBcnJheShlLmNhbGxGcmFtZXMpICYmIGUuY2FsbEZyYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUuY2FsbEZyYW1lcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0udXJsICYmIHRoaXMuaW5CcmVha3BvaW50cyhpdGVtLnVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlQ2FsbEZyYW1lcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludHNNYXBSZXN1bHQgPSB0aGlzLl9icmVha3BvaW50cy5tYXAoYXN5bmMoYnApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBicC5sb2NhdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGVDYWxsRnJhbWVzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBlQ2FsbEZyYW1lc1swXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgYnAubG9jYXRpb25zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGJwLmxvY2F0aW9uc1swXS5zY3JpcHRJZCA9PT0gZUNhbGxGcmFtZXNbMF0ubG9jYXRpb24uc2NyaXB0SWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGJwLmxvY2F0aW9uc1swXS5saW5lTnVtYmVyID09PSBlQ2FsbEZyYW1lc1swXS5sb2NhdGlvbi5saW5lTnVtYmVyKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluaXRpYWxEZXB0aCA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlICYmIGUuY2FsbEZyYW1lcyAmJiBBcnJheS5pc0FycmF5KGUuY2FsbEZyYW1lcykgJiYgZS5jYWxsRnJhbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmlxdWVTY3JpcHRJZEFyciA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxGcmFtZXMgPSBlLmNhbGxGcmFtZXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0udXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kZWQgPSB0aGlzLl9icmVha3BvaW50cy5maW5kKChicmVha3BvaW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuYnJlYWtwb2ludElkLmVuZHNXaXRoKGl0ZW0udXJsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmxvY2F0aW9uICYmIGl0ZW0ubG9jYXRpb24uc2NyaXB0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaXF1ZVNjcmlwdElkQXJyLmluY2x1ZGVzKGl0ZW0ubG9jYXRpb24uc2NyaXB0SWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVTY3JpcHRJZEFyci5wdXNoKGl0ZW0ubG9jYXRpb24uc2NyaXB0SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lcy5tYXAoYXN5bmMoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBvc3NpYmxlQnJlYWtwb2ludHMgPSBhd2FpdCB0aGlzLmdldFBvc3NpYmxlQnJlYWtwb2ludHMoaXRlbS5sb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHRTb3VyY2UgPSBhd2FpdCB0aGlzLmdldFNjcmlwdFNvdXJjZShpdGVtLmxvY2F0aW9uLnNjcmlwdElkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NyaXB0U291cmNlU3BsaXQgPSBzY3JpcHRTb3VyY2Uuc2NyaXB0U291cmNlLnNwbGl0KCdcXG4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGVMaW5lTnVtYmVyc0xlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0U291cmNlU3BsaXQgJiYgQXJyYXkuaXNBcnJheShzY3JpcHRTb3VyY2VTcGxpdCkgJiYgc2NyaXB0U291cmNlU3BsaXQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVMaW5lTnVtYmVyc0xlbmd0aCA9IHNjcmlwdFNvdXJjZVNwbGl0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBzZWUgaG93IGRlYmJ1Z2VyIHNlZSBzY3JpcHRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNjcmlwdFNvdXJjZVNwbGl0Lm1hcCgoc2NyaXB0U291cmNlSXRlbSwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKChpZHgpICsgJyAnICsgc2NyaXB0U291cmNlSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzOiBwb3NzaWJsZUJyZWFrcG9pbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGl0ZW0udXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVMaW5lTnVtYmVyc0xlbmd0aDogZmlsZUxpbmVOdW1iZXJzTGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRTY3JpcHRTb3VyY2UgZScsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjYWxsRnJhbWVzTWFwUmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9jZXNzQ2FsbEZyYW1lcyhjYWxsRnJhbWVzLCBpbml0aWFsRGVwdGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lc01hcFJlc3VsdCA9IGNhbGxGcmFtZXNNYXBSZXN1bHQuZmlsdGVyKChlbCkgPT4gISFlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbEZyYW1lc01hcFJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBicmVha3BvaW50c01hcFJlc3VsdCA9IGJyZWFrcG9pbnRzTWFwUmVzdWx0LmZpbHRlcigoZWwpID0+ICEhZWwpO1xuXG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoYnJlYWtwb2ludHNNYXBSZXN1bHQpLnRoZW4oYXN5bmMgKHNjb3BlQ2hhaW5UcmVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29wZUNoYWluVHJlZSAmJiBBcnJheS5pc0FycmF5KHNjb3BlQ2hhaW5UcmVlKSAmJiBzY29wZUNoYWluVHJlZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNoYWluVHJlZSA9IHNjb3BlQ2hhaW5UcmVlLmZpbHRlcigoZWwpID0+ICEhZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJyZWFrcG9pbnREYXRhID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzdW1lIHdlIGFsd2F5cyBzZW5kIGJyZWFrcG9pbnQgb2YgdGhlIHRvcCBjYWxsIGZyYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZUNhbGxGcmFtZXMgJiYgZUNhbGxGcmFtZXMubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludERhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGVDYWxsRnJhbWVzWzBdLmxvY2F0aW9uLmxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiB0cmFuc2Zvcm1Ub0lERVN0eWxlKGVDYWxsRnJhbWVzWzBdLnVybCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkVmFyaWFibGVzRnJvbVNjb3BlQ2hhaW5UcmVlKGJyZWFrcG9pbnREYXRhLnZhcmlhYmxlcywgc2NvcGVDaGFpblRyZWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkT3h5Z2VuVmFyaWFibGVzRnJvbUdsb2JhbFNjb3BlKGJyZWFrcG9pbnREYXRhLnZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLl9icmVha3BvaW50RXJyb3JzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNzZXQgPSB0aGlzLl9icmVha3BvaW50cy5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3JpZ2luICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm9yaWdpbi5saW5lTnVtYmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChpdGVtLm9yaWdpbi5saW5lTnVtYmVyKSsxID09PSBwYXJzZUludChicmVha3BvaW50RGF0YS5saW5lTnVtYmVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5sb2NhdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoaXRlbS5sb2NhdGlvbnMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxvY2F0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxvY2F0aW9ucy5maW5kKGxvYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGxvYy5saW5lTnVtYmVyKSA9PT0gcGFyc2VJbnQoYnJlYWtwb2ludERhdGEubGluZU51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaXRlbS5vcmlnaW4ubGluZU51bWJlcikgIT09IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGJyZWFrcG9pbnREYXRhLmxpbmVOdW1iZXIpICE9PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVhbEJyZmluZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMubWFwKChicmVha3BvaW50RXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50cyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5fYnJlYWtwb2ludHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMubWFwKChicikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBickZpbGVOYW1lID0gdHJhbnNmb3JtVG9JREVTdHlsZShici5vcmlnaW4uc2NyaXB0UGF0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBvc3NpYmxlQnJlYWtwb2ludERhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50c0RhdGEubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludERhdGEgPSBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YS5maW5kKChpdGVtKSA9PiBpdGVtLmZpbGUgPT09IGVDYWxsRnJhbWVzWzBdLnVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBickZpbGVOYW1lID09PSBicmVha3BvaW50RGF0YS5maWxlTmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50RGF0YSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBvc3NpYmxlQnJlYWtwb2ludERhdGEuZmlsZUxpbmVOdW1iZXJzTGVuZ3RoICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnREYXRhLmxpbmVOdW1iZXIrMSA9PT0gYnIub3JpZ2luLmxpbmVOdW1iZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBici5vcmlnaW4ubGluZU51bWJlcisxID09PSBwb3NzaWJsZUJyZWFrcG9pbnREYXRhLmZpbGVMaW5lTnVtYmVyc0xlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxCcmZpbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWFsQnJmaW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnREYXRhLnJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBvc3NpYmxlQnJlYWtwb2ludERhdGE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocG9zc2libGVCcmVha3BvaW50c0RhdGEpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50c0RhdGEubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50RGF0YSA9IHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZmlsZSA9PT0gZUNhbGxGcmFtZXNbMF0udXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludERhdGEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcG9zc2libGVCcmVha3BvaW50RGF0YS5maWxlTGluZU51bWJlcnNMZW5ndGggIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludERhdGEubGluZU51bWJlcisxID49IHBvc3NpYmxlQnJlYWtwb2ludERhdGEuZmlsZUxpbmVOdW1iZXJzTGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50RGF0YS5saW5lTnVtYmVyID0gcG9zc2libGVCcmVha3BvaW50RGF0YS5maWxlTGluZU51bWJlcnNMZW5ndGggLSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2JyZWFrJywgYnJlYWtwb2ludERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5fYnJlYWtwb2ludEVycm9ycykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMubWFwKChicmVha3BvaW50RXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRFcnJvciAmJiBicmVha3BvaW50RXJyb3IubXNnICYmIGJyZWFrcG9pbnRFcnJvci5maWxlTmFtZSAmJiBicmVha3BvaW50RXJyb3IubGluZSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXNnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlnbm9yZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zc2libGVCcmVha3BvaW50c0RhdGEgJiYgQXJyYXkuaXNBcnJheShwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YSkgJiYgcG9zc2libGVCcmVha3BvaW50c0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhLm1hcCgoaXRlbSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZmlsZSA9IHRyYW5zZm9ybVRvSURFU3R5bGUoaXRlbS5maWxlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmZpbGUgPT09IGJyZWFrcG9pbnRFcnJvci5maWxlTmFtZSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludERhdGEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpdGVtLmZpbGVMaW5lTnVtYmVyc0xlbmd0aCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRFcnJvci5saW5lID49IGl0ZW0uZmlsZUxpbmVOdW1iZXJzTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGJyZWFrcG9pbnRFcnJvci5saW5lIC0gMjsgLy8gLy8jIHNvdXJjZU1hcHBpbmdVUkwgYW5kIH0uY2FsbCh0aGlzLCBleHBvcnRzLCByZXF1aXJlLCBtb2R1bGUsIF9fZmlsZW5hbWUsIF9fZGlybmFtZSk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gYnJlYWtwb2ludEVycm9yLmxpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmJyZWFrcG9pbnRzICYmIEFycmF5LmlzQXJyYXkoaXRlbS5icmVha3BvaW50cykgJiYgaXRlbS5icmVha3BvaW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRFcnJvciAmJiBicmVha3BvaW50RXJyb3IubXNnICYmIGJyZWFrcG9pbnRFcnJvci5tc2cuaW5jbHVkZXMoJ1Bvc3NpYmxlIGJyZWFrcG9pbnQgbGluZXMnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5icmVha3BvaW50cy5pbmNsdWRlcyhsaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGJyZWFrcG9pbnRFcnJvci5tc2c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSBgJHtsaW5lfS4gYDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9IGAgUG9zc2libGUgYnJlYWtwb2ludCBsaW5lcyA6ICR7aXRlbS5icmVha3BvaW50cy5tYXAoKGxpbmUpID0+IGxpbmUpLmpvaW4oJywgJyl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50RXJyb3IgJiYgYnJlYWtwb2ludEVycm9yLm1zZyAmJiBicmVha3BvaW50RXJyb3IubXNnLmluY2x1ZGVzKCdwb3NzaWJsZSBicmVha3BvaW50IGxpbmVzJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gYnJlYWtwb2ludEVycm9yLm1zZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9IGAke2xpbmV9LiBgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gJyBGaWxlIGRvblxcJ3QgaGF2ZSBwb3NzaWJsZSBicmVha3BvaW50IGxpbmVzJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpZ25vcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2JyZWFrRXJyb3InLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG1zZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogYnJlYWtwb2ludEVycm9yLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBicmVha3BvaW50RXJyb3IuZmlsZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUucmVhc29uID09PSAnT09NJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE91dCBvZiBtZW1vcnkgbGVha1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGludWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSwgcmVhc29uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2JyZWFrcG9pbnRzTWFwUmVzdWx0IHJlcyByZWFzb24nICwgcmVhc29uKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jbGllbnQub24oJ0RlYnVnZ2VyLmJyZWFrcG9pbnRSZXNvbHZlZCcsIChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQnJlYWtwb2ludFJlc29sdmVkKGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB7IERlYnVnZ2VyLCBSdW50aW1lIH0gPSB0aGlzLl9jbGllbnQ7XG4gICAgICAgIHRoaXMuX0RlYnVnZ2VyID0gRGVidWdnZXI7XG4gICAgICAgIHRoaXMuX1J1bnRpbWUgPSBSdW50aW1lO1xuICAgICAgICBSdW50aW1lLmVuYWJsZSgpO1xuICAgICAgICBEZWJ1Z2dlci5lbmFibGUoKTtcbiAgICAgICAgRGVidWdnZXIuc2V0UGF1c2VPbkV4Y2VwdGlvbnMoeyBzdGF0ZTogJ25vbmUnIH0pO1xuICAgICAgICBEZWJ1Z2dlci5zZXRBc3luY0NhbGxTdGFja0RlcHRoKHsgbWF4RGVwdGg6IDMyIH0pO1xuICAgICAgICBEZWJ1Z2dlci5zZXRCbGFja2JveFBhdHRlcm5zKHsgcGF0dGVybnM6IFtdIH0pO1xuICAgICAgICAvLyBvbmx5IHVzZSAnYXdhaXQnIGZvciB0aGUgbGFzdCBjYWxsLCBhbGwgcHJldmlvdXMgY2FsbCB0byBEZWJ1Z2dlciBvciBSdW50aW1lIHdpbGwgc3RhY2sgb3RoZXJ3aXNlXG4gICAgICAgIGF3YWl0IFJ1bnRpbWUucnVuSWZXYWl0aW5nRm9yRGVidWdnZXIoKTtcbiAgICAgICAgLy8gYXdhaXQgZm9yIHRoZSBmaXJzdCBicmVha3BvaW50IHdoaWNoIGlzIHBsYWNlZCBieSB0aGUgZGVidWdnZXIgYXV0b21hdGljYWxseSBcbiAgICAgICAgYXdhaXQgdGhpcy5fRGVidWdnZXIucGF1c2VkKCk7XG4gICAgICAgIHRoaXMuZW1pdCgncmVhZHknKTtcbiAgICB9XG5cbiAgICBvbkJyZWFrcG9pbnRSZXNvbHZlZChlKSB7XG4gICAgICAgIC8vIGJyZWFrcG9pbnRzIHNldCBiZWZvcmUgdGhlIHNjcmlwdCB3YXMgbG9hZGVkIHdpbGwgYmUgcmVzb2x2ZWQgb25jZSBpdCBsb2Fkc1xuICAgICAgICBmb3IgKHZhciBicCBvZiB0aGlzLl9icmVha3BvaW50cykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGJwICYmXG4gICAgICAgICAgICAgICAgZSAmJlxuICAgICAgICAgICAgICAgIGJwLmJyZWFrcG9pbnRJZCA9PT0gZS5icmVha3BvaW50SWRcbiAgICAgICAgICAgICkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRlUmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmICggZS5sb2NhdGlvbiApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZWQgb24gcnVudGltZVxuICAgICAgICAgICAgICAgICAgICBicC5sb2NhdGlvbnMgPSBbZS5sb2NhdGlvbl07XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlUmVzdWx0ID0gdmFsaWRhdGVCcmVha3BvaW50KGJwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBlLmxvY2F0aW9ucyApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZWQgb24gcGF1c2VcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVSZXN1bHQgPSB2YWxpZGF0ZUJyZWFrcG9pbnQoYnApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzLnB1c2godmFsaWRhdGVSZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbm5lY3RzIHRvIGEgZGVidWdnZXIuIERvZXMgbm90aGluZyBpZiBhbHJlYWR5IGNvbm5lY3RlZC5cbiAgICAgKiBAcGFyYW0ge0ludGVnZXJ9IERlYnVnZ2VyIHBvcnQuXG4gICAgICovXG4gICAgYXN5bmMgY29ubmVjdChwb3J0LCBob3N0KSB7XG4gICAgICAgIHRoaXMuX3BvcnQgPSBwb3J0O1xuICAgICAgICB0aGlzLl9ob3N0ID0gaG9zdCB8fCAnbG9jYWxob3N0JztcblxuICAgICAgICBsZXQgc25vb3plVGltZSA9IDEwMDA7XG4gICAgICAgIGxldCBsYXN0RXJyb3IgPSBudWxsO1xuXG4gICAgICAgIGZvciAobGV0IHJldHJpZXMgPSAwOyByZXRyaWVzIDwgQ09OTkVDVF9SRVRSSUVTOyByZXRyaWVzKyspIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpZW50ID0gYXdhaXQgQ0RQKHsgcG9ydDogdGhpcy5fcG9ydCwgaG9zdDogdGhpcy5faG9zdCB9KTtcbiAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvZy53YXJuKGBEZWJ1Z2dlciBjb25uZWN0aW9uIGZhaWxlZC4gV2lsbCByZXRyeSBpbiAke3Nub296ZVRpbWUvMTAwMH1zLiBFcnJvcjogYCwgbGFzdEVycm9yKTtcbiAgICAgICAgICAgIGF3YWl0IHNub296ZShzbm9vemVUaW1lKTtcbiAgICAgICAgICAgIHNub296ZVRpbWUgKj0gQ09OTkVDVF9TTk9PWkVfSU5URVJWQUxfTVVMVDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0RXJyb3IpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignRmFpbGVkIHRvIGNvbm5lY3QgdG8gdGhlIGRlYnVnZ2VyOiAnLCBsYXN0RXJyb3IpO1xuICAgICAgICAgICAgdGhyb3cgbGFzdEVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jb250aW51ZUNvbm5lY3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgYnJlYWtwb2ludCBmb3IgYSBwYXJ0aWN1bGFyIHNjcmlwdC5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gU2NyaXB0IHBhdGguXG4gICAgICogQHBhcmFtIHtJbnRlZ2VyfSBMaW5lIG51bWJlci5cbiAgICAgKi9cbiAgICBhc3luYyBzZXRCcmVha3BvaW50KHNjcmlwdFBhdGgsIGxpbmVOdW1iZXIpIHtcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gc2NyaXB0UGF0aDtcblxuICAgICAgICBjb25zdCBhbGlhc1Jlc3VsdCA9IHRoaXMuaW5GaWxlTmFtZUFsaWFzZXMoZmlsZU5hbWUpO1xuXG4gICAgICAgIGlmIChhbGlhc1Jlc3VsdCkge1xuICAgICAgICAgICAgZmlsZU5hbWUgPSBhbGlhc1Jlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbGVOYW1lID0gdXJsLnBhdGhUb0ZpbGVVUkwoZmlsZU5hbWUpLnRvU3RyaW5nKCk7XG4gICAgICAgIGxldCBlcnIgPSBudWxsO1xuXG4gICAgICAgIGxldCBicmVha3BvaW50ID0gYXdhaXQgdGhpcy5fRGVidWdnZXIuc2V0QnJlYWtwb2ludEJ5VXJsKHtcbiAgICAgICAgICAgIHVybDogZmlsZU5hbWUsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLTEsIC8vIGZyb20gMS1iYXNlIHRvIDAtYmFzZVxuICAgICAgICAgICAgY29sdW1uTnVtYmVyOiAwXG4gICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvciB3aGVuIHRyeWluZyB0byBzZXQgYW4gbGFyZWFkeSBleGlzdGluZyBicmVha3BvaW50XG4gICAgICAgICAgICBpZiAoIWUucmVzcG9uc2UgfHwgZS5yZXNwb25zZS5tZXNzYWdlICE9PSAnQnJlYWtwb2ludCBhdCBzcGVjaWZpZWQgbG9jYXRpb24gYWxyZWFkeSBleGlzdHMuJykge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrcG9pbnQub3JpZ2luID0ge1xuICAgICAgICAgICAgICAgIHNjcmlwdFBhdGg6IGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzLnB1c2goYnJlYWtwb2ludCk7XG5cbiAgICAgICAgICAgIGlmIChicmVha3BvaW50KSB7XG4gICAgICAgICAgICAgICAgLy8gbmV3IGJyZWFja3BvaW50IHJlc29sdmVkIHN1Y2Nlc3NcbiAgICAgICAgICAgICAgICB0aGlzLm9uQnJlYWtwb2ludFJlc29sdmVkKGJyZWFrcG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnQ7XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0QnJlYWtwb2ludHNBY3RpdmUoYWN0aXZlKSB7XG4gICAgICAgIGlmICh0aGlzLl9EZWJ1Z2dlciAmJiB0aGlzLl9EZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlKHsnYWN0aXZlJzogYWN0aXZlfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCBzbm9vemUoNTAwKTtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNldEJyZWFrcG9pbnRzQWN0aXZlKGFjdGl2ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyByZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCkge1xuICAgICAgICB0aGlzLl9icmVha3BvaW50cyA9IHRoaXMuX2JyZWFrcG9pbnRzLmZpbHRlcigoYnApID0+IHtcbiAgICAgICAgICAgIHJldHVybiBicC5icmVha3BvaW50SWQgIT09IGJyZWFrcG9pbnRJZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlQnIgPSB7IGJyZWFrcG9pbnRJZDogYnJlYWtwb2ludElkIH07XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnJlbW92ZUJyZWFrcG9pbnQocmVtb3ZlQnIpO1xuICAgIH1cblxuICAgIGFzeW5jIGNvbnRpbnVlKCkge1xuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5yZXN1bWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHJlc3VtZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fRGVidWdnZXIucmVzdW1lKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyByZXN1bWVUZXJtaW5hdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fRGVidWdnZXIucmVzdW1lKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZGlzYWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5kaXNhYmxlKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgcmVtb3ZlQnJlYWtwb2ludEJ5VmFsdWUoZmlsZVBhdGgsIGlucHV0TGluZSkge1xuXG4gICAgICAgIGNvbnN0IGZpbGVQYXRoQWxpYXMgPSB0aGlzLmluRmlsZU5hbWVBbGlhc2VzKGZpbGVQYXRoKTtcblxuICAgICAgICBjb25zdCBsaW5lID0gaW5wdXRMaW5lIC0gMTsgLy8gZnJvbSAxLWJhc2UgdG8gMC1iYXNlXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50cykge1xuICAgICAgICAgICAgZm9yIChsZXQgYiBvZiB0aGlzLl9icmVha3BvaW50cykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiICYmIGIuYnJlYWtwb2ludElkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGIuYnJlYWtwb2ludElkLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsZU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluZU51bWJlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHsgLy8gcGF0aCBtYXkgY29udGFpbiBhIERyaXZlIGxldHRlciBvbiB3aW4zMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gcGFydHNbcGFydHMubGVuZ3RoLTJdICsgJzonICsgcGFydHNbcGFydHMubGVuZ3RoLTFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBwYXJzZUludChwYXJ0c1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gcGFydHNbcGFydHMubGVuZ3RoLTFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBwYXJzZUludChwYXJ0c1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZU5hbWUgPT09IGZpbGVQYXRoIHx8IGZpbGVOYW1lID09PSBmaWxlUGF0aEFsaWFzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGxpbmVOdW1iZXIgPT09IGxpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlbGYucmVtb3ZlQnJlYWtwb2ludChiLmJyZWFrcG9pbnRJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcignRmFpbGVkIHdoZW4gd29yayB3aXRoIGJyZWFrcG9pbnQgZGF0YTonLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBjbGVhckJyZWFrcG9pbnRzKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBiIG9mIHRoaXMuX2JyZWFrcG9pbnRzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgc2VsZi5yZW1vdmVCcmVha3BvaW50KGIuYnJlYWtwb2ludElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldFBvc3NpYmxlQnJlYWtwb2ludHMoc3RhcnRMb2NhdGlvbikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgY29uc3QgcG9zc2libGVCcmVha3BvaW50cyA9IGF3YWl0IHRoaXMuX0RlYnVnZ2VyLmdldFBvc3NpYmxlQnJlYWtwb2ludHMoe1xuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICBzY3JpcHRJZDogc3RhcnRMb2NhdGlvbi5zY3JpcHRJZCxcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiAwLFxuICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogMFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocG9zc2libGVCcmVha3BvaW50cyAmJiBwb3NzaWJsZUJyZWFrcG9pbnRzLmxvY2F0aW9ucyAmJiBBcnJheS5pc0FycmF5KHBvc3NpYmxlQnJlYWtwb2ludHMubG9jYXRpb25zKSAmJiBwb3NzaWJsZUJyZWFrcG9pbnRzLmxvY2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnRzLmxvY2F0aW9ucy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiB0eXBlb2YgaXRlbS5saW5lTnVtYmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5lTnVtYmVyID0gaXRlbS5saW5lTnVtYmVyICsgMTsgLy8gZnJvbSAwLWJhc2UgdG8gMS1iYXNlXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pbmNsdWRlcyhsaW5lTnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGxpbmVOdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0ICYmIEFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IHAgPSByZXN1bHQucG9wKCk7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQuaW5jbHVkZXMocC0xKSkge1xuICAgICAgICAgICAgICAgIC8vaW5nb3JlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwLTEgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRTY3JpcHRTb3VyY2Uoc2NyaXB0SWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLmdldFNjcmlwdFNvdXJjZSh7IHNjcmlwdElkOiBzY3JpcHRJZCB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIGFzeW5jIGFkZFZhcmlhYmxlc0Zyb21TY29wZUNoYWluVHJlZSh2YXJpYWJsZXMsIHNjb3BlQ2hhaW5UcmVlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHNjb3BlQ2hhaW5UcmVlKVxuICAgICAgICAgICAgfHwgc2NvcGVDaGFpblRyZWUubGVuZ3RoID09IDBcbiAgICAgICAgICAgIHx8ICFBcnJheS5pc0FycmF5KHNjb3BlQ2hhaW5UcmVlWzBdKVxuICAgICAgICAgICAgfHwgc2NvcGVDaGFpblRyZWVbMF0ubGVuZ3RoID09IDBcbiAgICAgICAgICAgIHx8ICFBcnJheS5pc0FycmF5KHNjb3BlQ2hhaW5UcmVlWzBdWzBdKVxuICAgICAgICAgICAgfHwgc2NvcGVDaGFpblRyZWVbMF1bMF0ubGVuZ3RoID09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBvYmplY3RJZFJlc3BvbnNlIH0gPSBzY29wZUNoYWluVHJlZVswXVswXVswXTtcbiAgICAgICAgY29uc3QgeyByZXN1bHQgfSA9IG9iamVjdElkUmVzcG9uc2U7XG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGVWYXIgb2YgcmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoIUlHTk9SRV9TQ09QRV9DSEFJTl9WQVJJQUJMRVMuaW5jbHVkZXMoc2NvcGVWYXIubmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICAgICAgdmFyIHR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlVmFyICYmIHNjb3BlVmFyLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBzY29wZVZhci52YWx1ZS50eXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGVWYXIudmFsdWUudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2NvcGVWYXIudmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGF3YWl0IHRoaXMudHJ5VG9SZXRyaWV2ZU9iamVjdFZhbHVlKHNjb3BlVmFyLnZhbHVlLm9iamVjdElkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXJpYWJsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHNjb3BlVmFyLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUgfHwgJ3VuZGVmaW5lZCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgdHJ5VG9SZXRyaWV2ZU9iamVjdFZhbHVlKG9iamVjdElkKSB7XG4gICAgICAgIGlmICghb2JqZWN0SWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgcmVzdWx0IH0gPSBhd2FpdCB0aGlzLl9SdW50aW1lLmdldFByb3BlcnRpZXMoeyBvYmplY3RJZCB9KTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmpWYWx1ZSA9IHt9O1xuICAgICAgICAgICAgICAgIHJlc3VsdC5mb3JFYWNoKHByb3BEZXNjID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BEZXNjLnZhbHVlICYmIHByb3BEZXNjLnZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpWYWx1ZVtwcm9wRGVzYy5uYW1lXSA9IHByb3BEZXNjLnZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ialZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdSdW50aW1lLmdldFByb3BlcnRpZXMgY2FsbCBmYWlsZWQnLCBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGFzeW5jIGFkZE94eWdlblZhcmlhYmxlc0Zyb21HbG9iYWxTY29wZSh2YXJpYWJsZXMpIHtcbiAgICAgICAgY29uc3QgeyByZXN1bHQ6IHBvRXZhbFJlc3VsdCB9ID0gYXdhaXQgdGhpcy5fUnVudGltZS5ldmFsdWF0ZSh7IGV4cHJlc3Npb246ICdwbycsIHJldHVybkJ5VmFsdWU6IHRydWUgfSk7XG4gICAgICAgIGNvbnN0IHsgcmVzdWx0OiBlbnZFdmFsUmVzdWx0IH0gPSBhd2FpdCB0aGlzLl9SdW50aW1lLmV2YWx1YXRlKHsgZXhwcmVzc2lvbjogJ2VudicsIHJldHVybkJ5VmFsdWU6IHRydWUgfSk7XG4gICAgICAgIGNvbnN0IHsgcmVzdWx0OiB2YXJzRXZhbFJlc3VsdCB9ID0gYXdhaXQgdGhpcy5fUnVudGltZS5ldmFsdWF0ZSh7IGV4cHJlc3Npb246ICd2YXJzJywgcmV0dXJuQnlWYWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgY29uc3QgeyByZXN1bHQ6IHBhcmFtc0V2YWxSZXN1bHQgfSA9IGF3YWl0IHRoaXMuX1J1bnRpbWUuZXZhbHVhdGUoeyBleHByZXNzaW9uOiAncGFyYW1zJywgcmV0dXJuQnlWYWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHtcbiAgICAgICAgICAgIHBvOiBwb0V2YWxSZXN1bHQsXG4gICAgICAgICAgICBlbnY6IGVudkV2YWxSZXN1bHQsXG4gICAgICAgICAgICB2YXJzOiB2YXJzRXZhbFJlc3VsdCxcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zRXZhbFJlc3VsdCxcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0cykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzdWx0c1trZXldO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZToga2V5LFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlc3VsdC52YWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QnJlYWtwb2ludHMoZmlsZVBhdGgpIHtcbiAgICAgICAgdmFyIGJwcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBiIG9mIHRoaXMuX2JyZWFrcG9pbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGIuYnJlYWtwb2ludElkLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBsZXQgZmlsZU5hbWU7XG4gICAgICAgICAgICBsZXQgbGluZU51bWJlcjtcblxuICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHsgLy8gcGF0aCBtYXkgY29udGFpbiBhIERyaXZlIGxldHRlciBvbiB3aW4zMlxuICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gcGFydHNbcGFydHMubGVuZ3RoLTJdICsgJzonICsgcGFydHNbcGFydHMubGVuZ3RoLTFdO1xuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBwYXJzZUludChwYXJ0c1sxXSkrMTsgLy9mcm9tIDAtYmFzZSB0byAxLWJhc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMV07XG4gICAgICAgICAgICAgICAgbGluZU51bWJlciA9IHBhcnNlSW50KHBhcnRzWzFdKSsxOyAvL2Zyb20gMC1iYXNlIHRvIDEtYmFzZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsZU5hbWUgPT09IGZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgYnBzLnB1c2gobGluZU51bWJlcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoQWxpYXMgPSB0aGlzLmluRmlsZU5hbWVBbGlhc2VzKGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZVBhdGhBbGlhcykge1xuICAgICAgICAgICAgICAgICAgICBicHMucHVzaChsaW5lTnVtYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJwcztcbiAgICB9XG59XG4iXX0=
|
package/build/lib/img-merge.js
CHANGED
|
@@ -160,4 +160,4 @@ module.exports = function mergeImages(images, {
|
|
|
160
160
|
return baseImage.getBase64Async(_jimp.default.MIME_JPEG);
|
|
161
161
|
});
|
|
162
162
|
};
|
|
163
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvaW1nLW1lcmdlLmpzIl0sIm5hbWVzIjpbImFsaWduSW1hZ2UiLCJ0b3RhbCIsInNpemUiLCJhbGlnbiIsImNhbGNNYXJnaW4iLCJvYmoiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJzcGxpdCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXJnZUltYWdlcyIsImltYWdlcyIsImRpcmVjdGlvbiIsImNvbG9yIiwib2Zmc2V0IiwibWFyZ2luIiwiQXJyYXkiLCJpc0FycmF5IiwiVHlwZUVycm9yIiwibGVuZ3RoIiwiRXJyb3IiLCJwcm9jZXNzSW1nIiwiaW1nIiwiaW1nQnVmZmVyIiwiQnVmZmVyIiwiZnJvbSIsIkppbXAiLCJyZWFkIiwidGhlbiIsImltZ09iaiIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJpbWdzIiwidG90YWxYIiwidG90YWxZIiwiaW1nRGF0YSIsInJlZHVjZSIsInJlcyIsIm9mZnNldFgiLCJvZmZzZXRZIiwiYml0bWFwIiwid2lkdGgiLCJoZWlnaHQiLCJwdXNoIiwieCIsInkiLCJtYXJnaW5Ub3BCb3R0b20iLCJtYXJnaW5SaWdodExlZnQiLCJ0b3RhbFdpZHRoIiwiTWF0aCIsIm1heCIsImluZGV4IiwidG90YWxIZWlnaHQiLCJiYXNlSW1hZ2UiLCJpbWdEYXRhRW50cmllcyIsImRhdGEiLCJweCIsInB5IiwiY29tcG9zaXRlIiwiZ2V0QmFzZTY0QXN5bmMiLCJNSU1FX0pQRUciXSwibWFwcGluZ3MiOiI7Ozs7QUFFQTs7OztBQUVBLFNBQVNBLFVBQVQsQ0FBb0JDLEtBQXBCLEVBQTJCQyxJQUEzQixFQUFpQ0MsS0FBakMsRUFBd0M7QUFDcEMsTUFBSUEsS0FBSyxLQUFLLFFBQWQsRUFBd0I7QUFDcEIsV0FBTyxDQUFDRixLQUFLLEdBQUdDLElBQVQsSUFBaUIsQ0FBeEI7QUFDSDs7QUFFRCxNQUFJQyxLQUFLLEtBQUssS0FBZCxFQUFxQjtBQUNqQixXQUFPRixLQUFLLEdBQUdDLElBQWY7QUFDSDs7QUFFRCxTQUFPLENBQVA7QUFDSDs7QUFFRCxTQUFTRSxVQUFULENBQW9CQyxHQUFHLEdBQUcsRUFBMUIsRUFBOEI7QUFDMUIsTUFBSUMsTUFBTSxDQUFDQyxTQUFQLENBQWlCRixHQUFqQixDQUFKLEVBQTJCO0FBQ3ZCLFdBQU87QUFDSEcsTUFBQUEsR0FBRyxFQUFFSCxHQURGO0FBRUhJLE1BQUFBLEtBQUssRUFBRUosR0FGSjtBQUdISyxNQUFBQSxNQUFNLEVBQUVMLEdBSEw7QUFJSE0sTUFBQUEsSUFBSSxFQUFFTjtBQUpILEtBQVA7QUFNSDs7QUFFRCxNQUFJLE9BQU9BLEdBQVAsS0FBZSxRQUFuQixFQUE2QjtBQUN6QixVQUFNLENBQUNHLEdBQUQsRUFBTUMsS0FBSyxHQUFHRCxHQUFkLEVBQW1CRSxNQUFNLEdBQUdGLEdBQTVCLEVBQWlDRyxJQUFJLEdBQUdGLEtBQXhDLElBQWlESixHQUFHLENBQUNPLEtBQUosQ0FBVSxHQUFWLENBQXZEO0FBRUEsV0FBTztBQUNISixNQUFBQSxHQUFHLEVBQUVGLE1BQU0sQ0FBQ0UsR0FBRCxDQURSO0FBRUhDLE1BQUFBLEtBQUssRUFBRUgsTUFBTSxDQUFDRyxLQUFELENBRlY7QUFHSEMsTUFBQUEsTUFBTSxFQUFFSixNQUFNLENBQUNJLE1BQUQsQ0FIWDtBQUlIQyxNQUFBQSxJQUFJLEVBQUVMLE1BQU0sQ0FBQ0ssSUFBRDtBQUpULEtBQVA7QUFNSDs7QUFFRCxRQUFNO0FBQUVILElBQUFBLEdBQUcsR0FBRyxDQUFSO0FBQVdDLElBQUFBLEtBQUssR0FBRyxDQUFuQjtBQUFzQkMsSUFBQUEsTUFBTSxHQUFHLENBQS9CO0FBQWtDQyxJQUFBQSxJQUFJLEdBQUc7QUFBekMsTUFBK0NOLEdBQXJEO0FBRUEsU0FBTztBQUNIRyxJQUFBQSxHQURHO0FBRUhDLElBQUFBLEtBRkc7QUFHSEMsSUFBQUEsTUFIRztBQUlIQyxJQUFBQTtBQUpHLEdBQVA7QUFNSDs7QUFFREUsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFNBQVNDLFdBQVQsQ0FDZkMsTUFEZSxFQUVmO0FBQ0VDLEVBQUFBLFNBQVMsR0FBRyxLQURkO0FBRUVDLEVBQUFBLEtBQUssR0FBRyxVQUZWO0FBR0VmLEVBQUFBLEtBQUssR0FBRyxPQUhWO0FBSUVnQixFQUFBQSxNQUFNLEdBQUcsQ0FKWDtBQUtFQyxFQUFBQTtBQUxGLElBTUksRUFSVyxFQVNmO0FBQ0UsTUFBSSxDQUFDQyxLQUFLLENBQUNDLE9BQU4sQ0FBY04sTUFBZCxDQUFMLEVBQTRCO0FBQ3hCLFVBQU0sSUFBSU8sU0FBSixDQUFjLGdEQUFkLENBQU47QUFDSDs7QUFFRCxNQUFJUCxNQUFNLENBQUNRLE1BQVAsR0FBZ0IsQ0FBcEIsRUFBdUI7QUFDbkIsVUFBTSxJQUFJQyxLQUFKLENBQVUsb0RBQVYsQ0FBTjtBQUNIOztBQUVELFFBQU1DLFVBQVUsR0FBRyxNQUFNQyxHQUFOLElBQWE7QUFDNUIsVUFBTUMsU0FBUyxHQUFHLE1BQU0sSUFBSUMsTUFBTSxDQUFDQyxJQUFYLENBQWdCSCxHQUFoQixFQUFxQixRQUFyQixDQUF4QjtBQUNBLFdBQU9JLGNBQUtDLElBQUwsQ0FBVUosU0FBVixFQUFxQkssSUFBckIsQ0FBMEJDLE1BQU0sS0FBSztBQUFFUCxNQUFBQSxHQUFHLEVBQUVPO0FBQVAsS0FBTCxDQUFoQyxDQUFQO0FBQ0gsR0FIRDs7QUFLQSxTQUFPQyxPQUFPLENBQUNDLEdBQVIsQ0FBWXBCLE1BQU0sQ0FBQ3FCLEdBQVAsQ0FBV1gsVUFBWCxDQUFaLEVBQW9DTyxJQUFwQyxDQUF5Q0ssSUFBSSxJQUFJO0FBQ3BELFFBQUlDLE1BQU0sR0FBRyxDQUFiO0FBQ0EsUUFBSUMsTUFBTSxHQUFHLENBQWI7QUFFQSxVQUFNQyxPQUFPLEdBQUdILElBQUksQ0FBQ0ksTUFBTCxDQUFZLENBQUNDLEdBQUQsRUFBTTtBQUFFaEIsTUFBQUEsR0FBRjtBQUFPaUIsTUFBQUEsT0FBTyxHQUFHLENBQWpCO0FBQW9CQyxNQUFBQSxPQUFPLEdBQUc7QUFBOUIsS0FBTixLQUE0QztBQUNwRSxZQUFNO0FBQ1ZDLFFBQUFBLE1BQU0sRUFBRTtBQUFFQyxVQUFBQSxLQUFGO0FBQVNDLFVBQUFBO0FBQVQ7QUFERSxVQUVSckIsR0FGRTtBQUlBZ0IsTUFBQUEsR0FBRyxDQUFDTSxJQUFKLENBQVM7QUFDTHRCLFFBQUFBLEdBREs7QUFFTHVCLFFBQUFBLENBQUMsRUFBRVgsTUFBTSxHQUFHSyxPQUZQO0FBR0xPLFFBQUFBLENBQUMsRUFBRVgsTUFBTSxHQUFHSyxPQUhQO0FBSUxELFFBQUFBLE9BSks7QUFLTEMsUUFBQUE7QUFMSyxPQUFUO0FBUUFOLE1BQUFBLE1BQU0sSUFBSVEsS0FBSyxHQUFHSCxPQUFsQjtBQUNBSixNQUFBQSxNQUFNLElBQUlRLE1BQU0sR0FBR0gsT0FBbkI7QUFFQSxhQUFPRixHQUFQO0FBQ0gsS0FqQmUsRUFpQmIsRUFqQmEsQ0FBaEI7QUFtQkEsVUFBTTtBQUFFbkMsTUFBQUEsR0FBRjtBQUFPQyxNQUFBQSxLQUFQO0FBQWNDLE1BQUFBLE1BQWQ7QUFBc0JDLE1BQUFBO0FBQXRCLFFBQStCUCxVQUFVLENBQUNnQixNQUFELENBQS9DO0FBQ0EsVUFBTWdDLGVBQWUsR0FBRzVDLEdBQUcsR0FBR0UsTUFBOUI7QUFDQSxVQUFNMkMsZUFBZSxHQUFHNUMsS0FBSyxHQUFHRSxJQUFoQztBQUVBLFVBQU0yQyxVQUFVLEdBQUdyQyxTQUFTLEdBQzVCc0MsSUFBSSxDQUFDQyxHQUFMLENBQ0UsR0FBR2YsT0FBTyxDQUFDSixHQUFSLENBQ0QsQ0FBQztBQUNDVixNQUFBQSxHQUFHLEVBQUU7QUFDSG1CLFFBQUFBLE1BQU0sRUFBRTtBQUFFQyxVQUFBQTtBQUFGO0FBREwsT0FETjtBQUlDSCxNQUFBQTtBQUpELEtBQUQsS0FLTUcsS0FBSyxHQUFHSCxPQU5iLENBREwsQ0FENEIsR0FXNUJILE9BQU8sQ0FBQ0MsTUFBUixDQUNFLENBQ0VDLEdBREYsRUFFRTtBQUNFaEIsTUFBQUEsR0FBRyxFQUFFO0FBQ0htQixRQUFBQSxNQUFNLEVBQUU7QUFBRUMsVUFBQUE7QUFBRjtBQURMLE9BRFA7QUFJRUgsTUFBQUE7QUFKRixLQUZGLEVBUUVhLEtBUkYsS0FTS2QsR0FBRyxHQUFHSSxLQUFOLEdBQWNILE9BQWQsR0FBd0J0QyxNQUFNLENBQUNtRCxLQUFLLEdBQUcsQ0FBVCxDQUFOLEdBQW9CdEMsTUFWbkQsRUFXRSxDQVhGLENBWEE7QUF5QkEsVUFBTXVDLFdBQVcsR0FBR3pDLFNBQVMsR0FDN0J3QixPQUFPLENBQUNDLE1BQVIsQ0FDRSxDQUNFQyxHQURGLEVBRUU7QUFDRWhCLE1BQUFBLEdBQUcsRUFBRTtBQUNIbUIsUUFBQUEsTUFBTSxFQUFFO0FBQUVFLFVBQUFBO0FBQUY7QUFETCxPQURQO0FBSUVILE1BQUFBO0FBSkYsS0FGRixFQVFFWSxLQVJGLEtBU0tkLEdBQUcsR0FBR0ssTUFBTixHQUFlSCxPQUFmLEdBQXlCdkMsTUFBTSxDQUFDbUQsS0FBSyxHQUFHLENBQVQsQ0FBTixHQUFvQnRDLE1BVnBELEVBV0UsQ0FYRixDQUQ2QixHQWM3Qm9DLElBQUksQ0FBQ0MsR0FBTCxDQUNFLEdBQUdmLE9BQU8sQ0FBQ0osR0FBUixDQUNELENBQUM7QUFDQ1YsTUFBQUEsR0FBRyxFQUFFO0FBQ0htQixRQUFBQSxNQUFNLEVBQUU7QUFBRUUsVUFBQUE7QUFBRjtBQURMLE9BRE47QUFJQ0gsTUFBQUE7QUFKRCxLQUFELEtBS01HLE1BQU0sR0FBR0gsT0FOZCxDQURMLENBZEE7QUF5QkEsVUFBTWMsU0FBUyxHQUFHLElBQUk1QixhQUFKLENBQ3BCdUIsVUFBVSxHQUFHRCxlQURPLEVBRXBCSyxXQUFXLEdBQUdOLGVBRk0sRUFHcEJsQyxLQUhvQixDQUFsQjtBQU9BLFVBQU0wQyxjQUFjLEdBQUduQixPQUFPLENBQUNKLEdBQVIsQ0FBWSxDQUFDd0IsSUFBRCxFQUFPSixLQUFQLEtBQWlCLENBQUNBLEtBQUQsRUFBUUksSUFBUixDQUE3QixDQUF2Qjs7QUFFQSxTQUFLLE1BQU0sQ0FBQ0osS0FBRCxFQUFRO0FBQUU5QixNQUFBQSxHQUFGO0FBQU91QixNQUFBQSxDQUFQO0FBQVVDLE1BQUFBLENBQVY7QUFBYVAsTUFBQUEsT0FBYjtBQUFzQkMsTUFBQUE7QUFBdEIsS0FBUixDQUFYLElBQXVEZSxjQUF2RCxFQUF1RTtBQUNuRSxZQUFNO0FBQ1ZkLFFBQUFBLE1BQU0sRUFBRTtBQUFFQyxVQUFBQSxLQUFGO0FBQVNDLFVBQUFBO0FBQVQ7QUFERSxVQUVSckIsR0FGRTtBQUdBLFlBQU0sQ0FBQ21DLEVBQUQsRUFBS0MsRUFBTCxJQUFXOUMsU0FBUyxHQUM1QixDQUFDakIsVUFBVSxDQUFDc0QsVUFBRCxFQUFhUCxLQUFiLEVBQW9CNUMsS0FBcEIsQ0FBVixHQUF1Q3lDLE9BQXhDLEVBQWlETyxDQUFDLEdBQUdNLEtBQUssR0FBR3RDLE1BQTdELENBRDRCLEdBRTVCLENBQ0UrQixDQUFDLEdBQUdPLEtBQUssR0FBR3RDLE1BRGQsRUFFRW5CLFVBQVUsQ0FBQzBELFdBQUQsRUFBY1YsTUFBZCxFQUFzQjdDLEtBQXRCLENBQVYsR0FBeUMwQyxPQUYzQyxDQUZFO0FBT0FjLE1BQUFBLFNBQVMsQ0FBQ0ssU0FBVixDQUFvQnJDLEdBQXBCLEVBQXlCbUMsRUFBRSxHQUFHbkQsSUFBOUIsRUFBb0NvRCxFQUFFLEdBQUd2RCxHQUF6QztBQUNIOztBQUVELFdBQU9tRCxTQUFTLENBQUNNLGNBQVYsQ0FBeUJsQyxjQUFLbUMsU0FBOUIsQ0FBUDtBQUVILEdBdEdNLENBQVA7QUF1R0gsQ0E5SEQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vcmFncmFnL21lcmdlLWJhc2U2NFxyXG5cclxuaW1wb3J0IEppbXAgZnJvbSAnamltcCc7XHJcblxyXG5mdW5jdGlvbiBhbGlnbkltYWdlKHRvdGFsLCBzaXplLCBhbGlnbikge1xyXG4gICAgaWYgKGFsaWduID09PSAnY2VudGVyJykge1xyXG4gICAgICAgIHJldHVybiAodG90YWwgLSBzaXplKSAvIDI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFsaWduID09PSAnZW5kJykge1xyXG4gICAgICAgIHJldHVybiB0b3RhbCAtIHNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGNNYXJnaW4ob2JqID0ge30pIHtcclxuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0b3A6IG9iaixcclxuICAgICAgICAgICAgcmlnaHQ6IG9iaixcclxuICAgICAgICAgICAgYm90dG9tOiBvYmosXHJcbiAgICAgICAgICAgIGxlZnQ6IG9ialxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29uc3QgW3RvcCwgcmlnaHQgPSB0b3AsIGJvdHRvbSA9IHRvcCwgbGVmdCA9IHJpZ2h0XSA9IG9iai5zcGxpdCgnICcpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0b3A6IE51bWJlcih0b3ApLFxyXG4gICAgICAgICAgICByaWdodDogTnVtYmVyKHJpZ2h0KSxcclxuICAgICAgICAgICAgYm90dG9tOiBOdW1iZXIoYm90dG9tKSxcclxuICAgICAgICAgICAgbGVmdDogTnVtYmVyKGxlZnQpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB7IHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMCwgbGVmdCA9IDAgfSA9IG9iajtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHRvcCxcclxuICAgICAgICByaWdodCxcclxuICAgICAgICBib3R0b20sXHJcbiAgICAgICAgbGVmdFxyXG4gICAgfTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUltYWdlcyhcclxuICBpbWFnZXMsXHJcbiAge1xyXG4gICAgZGlyZWN0aW9uID0gZmFsc2UsXHJcbiAgICBjb2xvciA9IDB4MDAwMDAwMDAsXHJcbiAgICBhbGlnbiA9ICdzdGFydCcsXHJcbiAgICBvZmZzZXQgPSAwLFxyXG4gICAgbWFyZ2luXHJcbiAgfSA9IHt9XHJcbikge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGltYWdlcykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgaW1hZ2VzYCBtdXN0IGJlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgaW1hZ2VzJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGltYWdlcy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdCBsZWFzdCBgaW1hZ2VzYCBtdXN0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBpbWFnZScpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHByb2Nlc3NJbWcgPSBhc3luYyBpbWcgPT4ge1xyXG4gICAgICAgIGNvbnN0IGltZ0J1ZmZlciA9IGF3YWl0IG5ldyBCdWZmZXIuZnJvbShpbWcsICdiYXNlNjQnKTtcclxuICAgICAgICByZXR1cm4gSmltcC5yZWFkKGltZ0J1ZmZlcikudGhlbihpbWdPYmogPT4gKHsgaW1nOiBpbWdPYmogfSkpO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoaW1hZ2VzLm1hcChwcm9jZXNzSW1nKSkudGhlbihpbWdzID0+IHtcclxuICAgICAgICBsZXQgdG90YWxYID0gMDtcclxuICAgICAgICBsZXQgdG90YWxZID0gMDtcclxuXHJcbiAgICAgICAgY29uc3QgaW1nRGF0YSA9IGltZ3MucmVkdWNlKChyZXMsIHsgaW1nLCBvZmZzZXRYID0gMCwgb2Zmc2V0WSA9IDAgfSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7XHJcbiAgICAgICAgYml0bWFwOiB7IHdpZHRoLCBoZWlnaHQgfVxyXG4gICAgICB9ID0gaW1nO1xyXG5cclxuICAgICAgICAgICAgcmVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaW1nLFxyXG4gICAgICAgICAgICAgICAgeDogdG90YWxYICsgb2Zmc2V0WCxcclxuICAgICAgICAgICAgICAgIHk6IHRvdGFsWSArIG9mZnNldFksXHJcbiAgICAgICAgICAgICAgICBvZmZzZXRYLFxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRvdGFsWCArPSB3aWR0aCArIG9mZnNldFg7XHJcbiAgICAgICAgICAgIHRvdGFsWSArPSBoZWlnaHQgKyBvZmZzZXRZO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9LCBbXSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBjYWxjTWFyZ2luKG1hcmdpbik7XHJcbiAgICAgICAgY29uc3QgbWFyZ2luVG9wQm90dG9tID0gdG9wICsgYm90dG9tO1xyXG4gICAgICAgIGNvbnN0IG1hcmdpblJpZ2h0TGVmdCA9IHJpZ2h0ICsgbGVmdDtcclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxXaWR0aCA9IGRpcmVjdGlvblxyXG4gICAgICA/IE1hdGgubWF4KFxyXG4gICAgICAgICAgLi4uaW1nRGF0YS5tYXAoXHJcbiAgICAgICAgICAgICh7XHJcbiAgICAgICAgICAgICAgaW1nOiB7XHJcbiAgICAgICAgICAgICAgICBiaXRtYXA6IHsgd2lkdGggfVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgb2Zmc2V0WFxyXG4gICAgICAgICAgICB9KSA9PiB3aWR0aCArIG9mZnNldFhcclxuICAgICAgICAgIClcclxuICAgICAgICApXHJcbiAgICAgIDogaW1nRGF0YS5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIHJlcyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGltZzoge1xyXG4gICAgICAgICAgICAgICAgYml0bWFwOiB7IHdpZHRoIH1cclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIG9mZnNldFhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaW5kZXhcclxuICAgICAgICAgICkgPT4gcmVzICsgd2lkdGggKyBvZmZzZXRYICsgTnVtYmVyKGluZGV4ID4gMCkgKiBvZmZzZXQsXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSBkaXJlY3Rpb25cclxuICAgICAgPyBpbWdEYXRhLnJlZHVjZShcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgcmVzLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgaW1nOiB7XHJcbiAgICAgICAgICAgICAgICBiaXRtYXA6IHsgaGVpZ2h0IH1cclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIG9mZnNldFlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaW5kZXhcclxuICAgICAgICAgICkgPT4gcmVzICsgaGVpZ2h0ICsgb2Zmc2V0WSArIE51bWJlcihpbmRleCA+IDApICogb2Zmc2V0LFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgIClcclxuICAgICAgOiBNYXRoLm1heChcclxuICAgICAgICAgIC4uLmltZ0RhdGEubWFwKFxyXG4gICAgICAgICAgICAoe1xyXG4gICAgICAgICAgICAgIGltZzoge1xyXG4gICAgICAgICAgICAgICAgYml0bWFwOiB7IGhlaWdodCB9XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBvZmZzZXRZXHJcbiAgICAgICAgICAgIH0pID0+IGhlaWdodCArIG9mZnNldFlcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBiYXNlSW1hZ2UgPSBuZXcgSmltcChcclxuICAgICAgdG90YWxXaWR0aCArIG1hcmdpblJpZ2h0TGVmdCxcclxuICAgICAgdG90YWxIZWlnaHQgKyBtYXJnaW5Ub3BCb3R0b20sXHJcbiAgICAgIGNvbG9yXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEZhbGxiYWNrIGZvciBgQXJyYXkjZW50cmllcygpYFxyXG4gICAgICAgIGNvbnN0IGltZ0RhdGFFbnRyaWVzID0gaW1nRGF0YS5tYXAoKGRhdGEsIGluZGV4KSA9PiBbaW5kZXgsIGRhdGFdKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHsgaW1nLCB4LCB5LCBvZmZzZXRYLCBvZmZzZXRZIH1dIG9mIGltZ0RhdGFFbnRyaWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHtcclxuICAgICAgICBiaXRtYXA6IHsgd2lkdGgsIGhlaWdodCB9XHJcbiAgICAgIH0gPSBpbWc7XHJcbiAgICAgICAgICAgIGNvbnN0IFtweCwgcHldID0gZGlyZWN0aW9uXHJcbiAgICAgICAgPyBbYWxpZ25JbWFnZSh0b3RhbFdpZHRoLCB3aWR0aCwgYWxpZ24pICsgb2Zmc2V0WCwgeSArIGluZGV4ICogb2Zmc2V0XVxyXG4gICAgICAgIDogW1xyXG4gICAgICAgICAgICB4ICsgaW5kZXggKiBvZmZzZXQsXHJcbiAgICAgICAgICAgIGFsaWduSW1hZ2UodG90YWxIZWlnaHQsIGhlaWdodCwgYWxpZ24pICsgb2Zmc2V0WVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgICAgICBiYXNlSW1hZ2UuY29tcG9zaXRlKGltZywgcHggKyBsZWZ0LCBweSArIHRvcCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYmFzZUltYWdlLmdldEJhc2U2NEFzeW5jKEppbXAuTUlNRV9KUEVHKTtcclxuICAgIC8vIHJldHVybiBiYXNlSW1hZ2U7XHJcbiAgICB9KTtcclxufTtcclxuIl19
|
|
163
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvaW1nLW1lcmdlLmpzIl0sIm5hbWVzIjpbImFsaWduSW1hZ2UiLCJ0b3RhbCIsInNpemUiLCJhbGlnbiIsImNhbGNNYXJnaW4iLCJvYmoiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJzcGxpdCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXJnZUltYWdlcyIsImltYWdlcyIsImRpcmVjdGlvbiIsImNvbG9yIiwib2Zmc2V0IiwibWFyZ2luIiwiQXJyYXkiLCJpc0FycmF5IiwiVHlwZUVycm9yIiwibGVuZ3RoIiwiRXJyb3IiLCJwcm9jZXNzSW1nIiwiaW1nIiwiaW1nQnVmZmVyIiwiQnVmZmVyIiwiZnJvbSIsIkppbXAiLCJyZWFkIiwidGhlbiIsImltZ09iaiIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJpbWdzIiwidG90YWxYIiwidG90YWxZIiwiaW1nRGF0YSIsInJlZHVjZSIsInJlcyIsIm9mZnNldFgiLCJvZmZzZXRZIiwiYml0bWFwIiwid2lkdGgiLCJoZWlnaHQiLCJwdXNoIiwieCIsInkiLCJtYXJnaW5Ub3BCb3R0b20iLCJtYXJnaW5SaWdodExlZnQiLCJ0b3RhbFdpZHRoIiwiTWF0aCIsIm1heCIsImluZGV4IiwidG90YWxIZWlnaHQiLCJiYXNlSW1hZ2UiLCJpbWdEYXRhRW50cmllcyIsImRhdGEiLCJweCIsInB5IiwiY29tcG9zaXRlIiwiZ2V0QmFzZTY0QXN5bmMiLCJNSU1FX0pQRUciXSwibWFwcGluZ3MiOiI7Ozs7QUFFQTs7OztBQUVBLFNBQVNBLFVBQVQsQ0FBb0JDLEtBQXBCLEVBQTJCQyxJQUEzQixFQUFpQ0MsS0FBakMsRUFBd0M7QUFDcEMsTUFBSUEsS0FBSyxLQUFLLFFBQWQsRUFBd0I7QUFDcEIsV0FBTyxDQUFDRixLQUFLLEdBQUdDLElBQVQsSUFBaUIsQ0FBeEI7QUFDSDs7QUFFRCxNQUFJQyxLQUFLLEtBQUssS0FBZCxFQUFxQjtBQUNqQixXQUFPRixLQUFLLEdBQUdDLElBQWY7QUFDSDs7QUFFRCxTQUFPLENBQVA7QUFDSDs7QUFFRCxTQUFTRSxVQUFULENBQW9CQyxHQUFHLEdBQUcsRUFBMUIsRUFBOEI7QUFDMUIsTUFBSUMsTUFBTSxDQUFDQyxTQUFQLENBQWlCRixHQUFqQixDQUFKLEVBQTJCO0FBQ3ZCLFdBQU87QUFDSEcsTUFBQUEsR0FBRyxFQUFFSCxHQURGO0FBRUhJLE1BQUFBLEtBQUssRUFBRUosR0FGSjtBQUdISyxNQUFBQSxNQUFNLEVBQUVMLEdBSEw7QUFJSE0sTUFBQUEsSUFBSSxFQUFFTjtBQUpILEtBQVA7QUFNSDs7QUFFRCxNQUFJLE9BQU9BLEdBQVAsS0FBZSxRQUFuQixFQUE2QjtBQUN6QixVQUFNLENBQUNHLEdBQUQsRUFBTUMsS0FBSyxHQUFHRCxHQUFkLEVBQW1CRSxNQUFNLEdBQUdGLEdBQTVCLEVBQWlDRyxJQUFJLEdBQUdGLEtBQXhDLElBQWlESixHQUFHLENBQUNPLEtBQUosQ0FBVSxHQUFWLENBQXZEO0FBRUEsV0FBTztBQUNISixNQUFBQSxHQUFHLEVBQUVGLE1BQU0sQ0FBQ0UsR0FBRCxDQURSO0FBRUhDLE1BQUFBLEtBQUssRUFBRUgsTUFBTSxDQUFDRyxLQUFELENBRlY7QUFHSEMsTUFBQUEsTUFBTSxFQUFFSixNQUFNLENBQUNJLE1BQUQsQ0FIWDtBQUlIQyxNQUFBQSxJQUFJLEVBQUVMLE1BQU0sQ0FBQ0ssSUFBRDtBQUpULEtBQVA7QUFNSDs7QUFFRCxRQUFNO0FBQUVILElBQUFBLEdBQUcsR0FBRyxDQUFSO0FBQVdDLElBQUFBLEtBQUssR0FBRyxDQUFuQjtBQUFzQkMsSUFBQUEsTUFBTSxHQUFHLENBQS9CO0FBQWtDQyxJQUFBQSxJQUFJLEdBQUc7QUFBekMsTUFBK0NOLEdBQXJEO0FBRUEsU0FBTztBQUNIRyxJQUFBQSxHQURHO0FBRUhDLElBQUFBLEtBRkc7QUFHSEMsSUFBQUEsTUFIRztBQUlIQyxJQUFBQTtBQUpHLEdBQVA7QUFNSDs7QUFFREUsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFNBQVNDLFdBQVQsQ0FDZkMsTUFEZSxFQUVmO0FBQ0VDLEVBQUFBLFNBQVMsR0FBRyxLQURkO0FBRUVDLEVBQUFBLEtBQUssR0FBRyxVQUZWO0FBR0VmLEVBQUFBLEtBQUssR0FBRyxPQUhWO0FBSUVnQixFQUFBQSxNQUFNLEdBQUcsQ0FKWDtBQUtFQyxFQUFBQTtBQUxGLElBTUksRUFSVyxFQVNmO0FBQ0UsTUFBSSxDQUFDQyxLQUFLLENBQUNDLE9BQU4sQ0FBY04sTUFBZCxDQUFMLEVBQTRCO0FBQ3hCLFVBQU0sSUFBSU8sU0FBSixDQUFjLGdEQUFkLENBQU47QUFDSDs7QUFFRCxNQUFJUCxNQUFNLENBQUNRLE1BQVAsR0FBZ0IsQ0FBcEIsRUFBdUI7QUFDbkIsVUFBTSxJQUFJQyxLQUFKLENBQVUsb0RBQVYsQ0FBTjtBQUNIOztBQUVELFFBQU1DLFVBQVUsR0FBRyxNQUFNQyxHQUFOLElBQWE7QUFDNUIsVUFBTUMsU0FBUyxHQUFHLE1BQU0sSUFBSUMsTUFBTSxDQUFDQyxJQUFYLENBQWdCSCxHQUFoQixFQUFxQixRQUFyQixDQUF4QjtBQUNBLFdBQU9JLGNBQUtDLElBQUwsQ0FBVUosU0FBVixFQUFxQkssSUFBckIsQ0FBMEJDLE1BQU0sS0FBSztBQUFFUCxNQUFBQSxHQUFHLEVBQUVPO0FBQVAsS0FBTCxDQUFoQyxDQUFQO0FBQ0gsR0FIRDs7QUFLQSxTQUFPQyxPQUFPLENBQUNDLEdBQVIsQ0FBWXBCLE1BQU0sQ0FBQ3FCLEdBQVAsQ0FBV1gsVUFBWCxDQUFaLEVBQW9DTyxJQUFwQyxDQUF5Q0ssSUFBSSxJQUFJO0FBQ3BELFFBQUlDLE1BQU0sR0FBRyxDQUFiO0FBQ0EsUUFBSUMsTUFBTSxHQUFHLENBQWI7QUFFQSxVQUFNQyxPQUFPLEdBQUdILElBQUksQ0FBQ0ksTUFBTCxDQUFZLENBQUNDLEdBQUQsRUFBTTtBQUFFaEIsTUFBQUEsR0FBRjtBQUFPaUIsTUFBQUEsT0FBTyxHQUFHLENBQWpCO0FBQW9CQyxNQUFBQSxPQUFPLEdBQUc7QUFBOUIsS0FBTixLQUE0QztBQUNwRSxZQUFNO0FBQ1ZDLFFBQUFBLE1BQU0sRUFBRTtBQUFFQyxVQUFBQSxLQUFGO0FBQVNDLFVBQUFBO0FBQVQ7QUFERSxVQUVSckIsR0FGRTtBQUlBZ0IsTUFBQUEsR0FBRyxDQUFDTSxJQUFKLENBQVM7QUFDTHRCLFFBQUFBLEdBREs7QUFFTHVCLFFBQUFBLENBQUMsRUFBRVgsTUFBTSxHQUFHSyxPQUZQO0FBR0xPLFFBQUFBLENBQUMsRUFBRVgsTUFBTSxHQUFHSyxPQUhQO0FBSUxELFFBQUFBLE9BSks7QUFLTEMsUUFBQUE7QUFMSyxPQUFUO0FBUUFOLE1BQUFBLE1BQU0sSUFBSVEsS0FBSyxHQUFHSCxPQUFsQjtBQUNBSixNQUFBQSxNQUFNLElBQUlRLE1BQU0sR0FBR0gsT0FBbkI7QUFFQSxhQUFPRixHQUFQO0FBQ0gsS0FqQmUsRUFpQmIsRUFqQmEsQ0FBaEI7QUFtQkEsVUFBTTtBQUFFbkMsTUFBQUEsR0FBRjtBQUFPQyxNQUFBQSxLQUFQO0FBQWNDLE1BQUFBLE1BQWQ7QUFBc0JDLE1BQUFBO0FBQXRCLFFBQStCUCxVQUFVLENBQUNnQixNQUFELENBQS9DO0FBQ0EsVUFBTWdDLGVBQWUsR0FBRzVDLEdBQUcsR0FBR0UsTUFBOUI7QUFDQSxVQUFNMkMsZUFBZSxHQUFHNUMsS0FBSyxHQUFHRSxJQUFoQztBQUVBLFVBQU0yQyxVQUFVLEdBQUdyQyxTQUFTLEdBQzVCc0MsSUFBSSxDQUFDQyxHQUFMLENBQ0UsR0FBR2YsT0FBTyxDQUFDSixHQUFSLENBQ0QsQ0FBQztBQUNDVixNQUFBQSxHQUFHLEVBQUU7QUFDSG1CLFFBQUFBLE1BQU0sRUFBRTtBQUFFQyxVQUFBQTtBQUFGO0FBREwsT0FETjtBQUlDSCxNQUFBQTtBQUpELEtBQUQsS0FLTUcsS0FBSyxHQUFHSCxPQU5iLENBREwsQ0FENEIsR0FXNUJILE9BQU8sQ0FBQ0MsTUFBUixDQUNFLENBQ0VDLEdBREYsRUFFRTtBQUNFaEIsTUFBQUEsR0FBRyxFQUFFO0FBQ0htQixRQUFBQSxNQUFNLEVBQUU7QUFBRUMsVUFBQUE7QUFBRjtBQURMLE9BRFA7QUFJRUgsTUFBQUE7QUFKRixLQUZGLEVBUUVhLEtBUkYsS0FTS2QsR0FBRyxHQUFHSSxLQUFOLEdBQWNILE9BQWQsR0FBd0J0QyxNQUFNLENBQUNtRCxLQUFLLEdBQUcsQ0FBVCxDQUFOLEdBQW9CdEMsTUFWbkQsRUFXRSxDQVhGLENBWEE7QUF5QkEsVUFBTXVDLFdBQVcsR0FBR3pDLFNBQVMsR0FDN0J3QixPQUFPLENBQUNDLE1BQVIsQ0FDRSxDQUNFQyxHQURGLEVBRUU7QUFDRWhCLE1BQUFBLEdBQUcsRUFBRTtBQUNIbUIsUUFBQUEsTUFBTSxFQUFFO0FBQUVFLFVBQUFBO0FBQUY7QUFETCxPQURQO0FBSUVILE1BQUFBO0FBSkYsS0FGRixFQVFFWSxLQVJGLEtBU0tkLEdBQUcsR0FBR0ssTUFBTixHQUFlSCxPQUFmLEdBQXlCdkMsTUFBTSxDQUFDbUQsS0FBSyxHQUFHLENBQVQsQ0FBTixHQUFvQnRDLE1BVnBELEVBV0UsQ0FYRixDQUQ2QixHQWM3Qm9DLElBQUksQ0FBQ0MsR0FBTCxDQUNFLEdBQUdmLE9BQU8sQ0FBQ0osR0FBUixDQUNELENBQUM7QUFDQ1YsTUFBQUEsR0FBRyxFQUFFO0FBQ0htQixRQUFBQSxNQUFNLEVBQUU7QUFBRUUsVUFBQUE7QUFBRjtBQURMLE9BRE47QUFJQ0gsTUFBQUE7QUFKRCxLQUFELEtBS01HLE1BQU0sR0FBR0gsT0FOZCxDQURMLENBZEE7QUF5QkEsVUFBTWMsU0FBUyxHQUFHLElBQUk1QixhQUFKLENBQ3BCdUIsVUFBVSxHQUFHRCxlQURPLEVBRXBCSyxXQUFXLEdBQUdOLGVBRk0sRUFHcEJsQyxLQUhvQixDQUFsQjtBQU9BLFVBQU0wQyxjQUFjLEdBQUduQixPQUFPLENBQUNKLEdBQVIsQ0FBWSxDQUFDd0IsSUFBRCxFQUFPSixLQUFQLEtBQWlCLENBQUNBLEtBQUQsRUFBUUksSUFBUixDQUE3QixDQUF2Qjs7QUFFQSxTQUFLLE1BQU0sQ0FBQ0osS0FBRCxFQUFRO0FBQUU5QixNQUFBQSxHQUFGO0FBQU91QixNQUFBQSxDQUFQO0FBQVVDLE1BQUFBLENBQVY7QUFBYVAsTUFBQUEsT0FBYjtBQUFzQkMsTUFBQUE7QUFBdEIsS0FBUixDQUFYLElBQXVEZSxjQUF2RCxFQUF1RTtBQUNuRSxZQUFNO0FBQ1ZkLFFBQUFBLE1BQU0sRUFBRTtBQUFFQyxVQUFBQSxLQUFGO0FBQVNDLFVBQUFBO0FBQVQ7QUFERSxVQUVSckIsR0FGRTtBQUdBLFlBQU0sQ0FBQ21DLEVBQUQsRUFBS0MsRUFBTCxJQUFXOUMsU0FBUyxHQUM1QixDQUFDakIsVUFBVSxDQUFDc0QsVUFBRCxFQUFhUCxLQUFiLEVBQW9CNUMsS0FBcEIsQ0FBVixHQUF1Q3lDLE9BQXhDLEVBQWlETyxDQUFDLEdBQUdNLEtBQUssR0FBR3RDLE1BQTdELENBRDRCLEdBRTVCLENBQ0UrQixDQUFDLEdBQUdPLEtBQUssR0FBR3RDLE1BRGQsRUFFRW5CLFVBQVUsQ0FBQzBELFdBQUQsRUFBY1YsTUFBZCxFQUFzQjdDLEtBQXRCLENBQVYsR0FBeUMwQyxPQUYzQyxDQUZFO0FBT0FjLE1BQUFBLFNBQVMsQ0FBQ0ssU0FBVixDQUFvQnJDLEdBQXBCLEVBQXlCbUMsRUFBRSxHQUFHbkQsSUFBOUIsRUFBb0NvRCxFQUFFLEdBQUd2RCxHQUF6QztBQUNIOztBQUVELFdBQU9tRCxTQUFTLENBQUNNLGNBQVYsQ0FBeUJsQyxjQUFLbUMsU0FBOUIsQ0FBUDtBQUVILEdBdEdNLENBQVA7QUF1R0gsQ0E5SEQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vcmFncmFnL21lcmdlLWJhc2U2NFxuXG5pbXBvcnQgSmltcCBmcm9tICdqaW1wJztcblxuZnVuY3Rpb24gYWxpZ25JbWFnZSh0b3RhbCwgc2l6ZSwgYWxpZ24pIHtcbiAgICBpZiAoYWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHJldHVybiAodG90YWwgLSBzaXplKSAvIDI7XG4gICAgfVxuXG4gICAgaWYgKGFsaWduID09PSAnZW5kJykge1xuICAgICAgICByZXR1cm4gdG90YWwgLSBzaXplO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBjYWxjTWFyZ2luKG9iaiA9IHt9KSB7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIob2JqKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wOiBvYmosXG4gICAgICAgICAgICByaWdodDogb2JqLFxuICAgICAgICAgICAgYm90dG9tOiBvYmosXG4gICAgICAgICAgICBsZWZ0OiBvYmpcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgW3RvcCwgcmlnaHQgPSB0b3AsIGJvdHRvbSA9IHRvcCwgbGVmdCA9IHJpZ2h0XSA9IG9iai5zcGxpdCgnICcpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3A6IE51bWJlcih0b3ApLFxuICAgICAgICAgICAgcmlnaHQ6IE51bWJlcihyaWdodCksXG4gICAgICAgICAgICBib3R0b206IE51bWJlcihib3R0b20pLFxuICAgICAgICAgICAgbGVmdDogTnVtYmVyKGxlZnQpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgeyB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDAsIGxlZnQgPSAwIH0gPSBvYmo7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0b3AsXG4gICAgICAgIHJpZ2h0LFxuICAgICAgICBib3R0b20sXG4gICAgICAgIGxlZnRcbiAgICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlSW1hZ2VzKFxuICBpbWFnZXMsXG4gIHtcbiAgICBkaXJlY3Rpb24gPSBmYWxzZSxcbiAgICBjb2xvciA9IDB4MDAwMDAwMDAsXG4gICAgYWxpZ24gPSAnc3RhcnQnLFxuICAgIG9mZnNldCA9IDAsXG4gICAgbWFyZ2luXG4gIH0gPSB7fVxuKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGltYWdlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYGltYWdlc2AgbXVzdCBiZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGltYWdlcycpO1xuICAgIH1cblxuICAgIGlmIChpbWFnZXMubGVuZ3RoIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0IGxlYXN0IGBpbWFnZXNgIG11c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIGltYWdlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvY2Vzc0ltZyA9IGFzeW5jIGltZyA9PiB7XG4gICAgICAgIGNvbnN0IGltZ0J1ZmZlciA9IGF3YWl0IG5ldyBCdWZmZXIuZnJvbShpbWcsICdiYXNlNjQnKTtcbiAgICAgICAgcmV0dXJuIEppbXAucmVhZChpbWdCdWZmZXIpLnRoZW4oaW1nT2JqID0+ICh7IGltZzogaW1nT2JqIH0pKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGltYWdlcy5tYXAocHJvY2Vzc0ltZykpLnRoZW4oaW1ncyA9PiB7XG4gICAgICAgIGxldCB0b3RhbFggPSAwO1xuICAgICAgICBsZXQgdG90YWxZID0gMDtcblxuICAgICAgICBjb25zdCBpbWdEYXRhID0gaW1ncy5yZWR1Y2UoKHJlcywgeyBpbWcsIG9mZnNldFggPSAwLCBvZmZzZXRZID0gMCB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgIGJpdG1hcDogeyB3aWR0aCwgaGVpZ2h0IH1cbiAgICAgIH0gPSBpbWc7XG5cbiAgICAgICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpbWcsXG4gICAgICAgICAgICAgICAgeDogdG90YWxYICsgb2Zmc2V0WCxcbiAgICAgICAgICAgICAgICB5OiB0b3RhbFkgKyBvZmZzZXRZLFxuICAgICAgICAgICAgICAgIG9mZnNldFgsXG4gICAgICAgICAgICAgICAgb2Zmc2V0WVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRvdGFsWCArPSB3aWR0aCArIG9mZnNldFg7XG4gICAgICAgICAgICB0b3RhbFkgKz0gaGVpZ2h0ICsgb2Zmc2V0WTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBjYWxjTWFyZ2luKG1hcmdpbik7XG4gICAgICAgIGNvbnN0IG1hcmdpblRvcEJvdHRvbSA9IHRvcCArIGJvdHRvbTtcbiAgICAgICAgY29uc3QgbWFyZ2luUmlnaHRMZWZ0ID0gcmlnaHQgKyBsZWZ0O1xuXG4gICAgICAgIGNvbnN0IHRvdGFsV2lkdGggPSBkaXJlY3Rpb25cbiAgICAgID8gTWF0aC5tYXgoXG4gICAgICAgICAgLi4uaW1nRGF0YS5tYXAoXG4gICAgICAgICAgICAoe1xuICAgICAgICAgICAgICBpbWc6IHtcbiAgICAgICAgICAgICAgICBiaXRtYXA6IHsgd2lkdGggfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvZmZzZXRYXG4gICAgICAgICAgICB9KSA9PiB3aWR0aCArIG9mZnNldFhcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogaW1nRGF0YS5yZWR1Y2UoXG4gICAgICAgICAgKFxuICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbWc6IHtcbiAgICAgICAgICAgICAgICBiaXRtYXA6IHsgd2lkdGggfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvZmZzZXRYXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICApID0+IHJlcyArIHdpZHRoICsgb2Zmc2V0WCArIE51bWJlcihpbmRleCA+IDApICogb2Zmc2V0LFxuICAgICAgICAgIDBcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB0b3RhbEhlaWdodCA9IGRpcmVjdGlvblxuICAgICAgPyBpbWdEYXRhLnJlZHVjZShcbiAgICAgICAgICAoXG4gICAgICAgICAgICByZXMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGltZzoge1xuICAgICAgICAgICAgICAgIGJpdG1hcDogeyBoZWlnaHQgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvZmZzZXRZXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICApID0+IHJlcyArIGhlaWdodCArIG9mZnNldFkgKyBOdW1iZXIoaW5kZXggPiAwKSAqIG9mZnNldCxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgIDogTWF0aC5tYXgoXG4gICAgICAgICAgLi4uaW1nRGF0YS5tYXAoXG4gICAgICAgICAgICAoe1xuICAgICAgICAgICAgICBpbWc6IHtcbiAgICAgICAgICAgICAgICBiaXRtYXA6IHsgaGVpZ2h0IH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb2Zmc2V0WVxuICAgICAgICAgICAgfSkgPT4gaGVpZ2h0ICsgb2Zmc2V0WVxuICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBiYXNlSW1hZ2UgPSBuZXcgSmltcChcbiAgICAgIHRvdGFsV2lkdGggKyBtYXJnaW5SaWdodExlZnQsXG4gICAgICB0b3RhbEhlaWdodCArIG1hcmdpblRvcEJvdHRvbSxcbiAgICAgIGNvbG9yXG4gICAgKTtcblxuICAgIC8vIEZhbGxiYWNrIGZvciBgQXJyYXkjZW50cmllcygpYFxuICAgICAgICBjb25zdCBpbWdEYXRhRW50cmllcyA9IGltZ0RhdGEubWFwKChkYXRhLCBpbmRleCkgPT4gW2luZGV4LCBkYXRhXSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHsgaW1nLCB4LCB5LCBvZmZzZXRYLCBvZmZzZXRZIH1dIG9mIGltZ0RhdGFFbnRyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgIGJpdG1hcDogeyB3aWR0aCwgaGVpZ2h0IH1cbiAgICAgIH0gPSBpbWc7XG4gICAgICAgICAgICBjb25zdCBbcHgsIHB5XSA9IGRpcmVjdGlvblxuICAgICAgICA/IFthbGlnbkltYWdlKHRvdGFsV2lkdGgsIHdpZHRoLCBhbGlnbikgKyBvZmZzZXRYLCB5ICsgaW5kZXggKiBvZmZzZXRdXG4gICAgICAgIDogW1xuICAgICAgICAgICAgeCArIGluZGV4ICogb2Zmc2V0LFxuICAgICAgICAgICAgYWxpZ25JbWFnZSh0b3RhbEhlaWdodCwgaGVpZ2h0LCBhbGlnbikgKyBvZmZzZXRZXG4gICAgICAgIF07XG5cbiAgICAgICAgICAgIGJhc2VJbWFnZS5jb21wb3NpdGUoaW1nLCBweCArIGxlZnQsIHB5ICsgdG9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBiYXNlSW1hZ2UuZ2V0QmFzZTY0QXN5bmMoSmltcC5NSU1FX0pQRUcpO1xuICAgIC8vIHJldHVybiBiYXNlSW1hZ2U7XG4gICAgfSk7XG59O1xuIl19
|
package/build/lib/launcher.js
CHANGED
|
@@ -101,4 +101,4 @@ class Launcher {
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
exports.default = Launcher;
|
|
104
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvbGF1bmNoZXIuanMiXSwibmFtZXMiOlsiTGF1bmNoZXIiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsInJlcG9ydGVyIiwiX2NvbmZpZyIsIl9yZXN1bHRzIiwiX3F1ZXVlIiwicnVuIiwiY2Fwc1NldCIsInRhc2siLCJjYiIsIl9sYXVuY2hUZXN0IiwicGFyYWxsZWwiLCJjb25jdXJyZW5jeSIsImVycm9yIiwiZXJyIiwiY29uc29sZSIsImxvZyIsInB1c2giLCJBcnJheSIsImlzQXJyYXkiLCJfdGhpcyIsIl8iLCJlYWNoIiwiY2FwcyIsImRyYWluIiwiX2luc3RhbnRpYXRlUnVubmVyIiwiZnJhbWV3b3JrIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiUnVubmVycyIsIm94eWdlbiIsImNhbGxiYWNrIiwicnVubmVyIiwiRXJyb3IiLCJpbml0IiwicmVzdWx0IiwiZSIsImtpbGwiLCJlcnJNc2ciLCJ0eXBlIiwibWVzc2FnZSIsInRvU3RyaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFTQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFZSxNQUFNQSxRQUFOLENBQWU7QUFDMUJDLEVBQUFBLFdBQVcsQ0FBQ0MsTUFBRCxFQUFTQyxRQUFULEVBQW1CO0FBQzFCLFNBQUtDLE9BQUwsR0FBZUYsTUFBZjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0JBLFFBQWhCO0FBQ0EsU0FBS0UsUUFBTCxHQUFnQixFQUFoQjtBQUNBLFNBQUtDLE1BQUwsR0FBYyxJQUFkO0FBQ0g7O0FBRVEsUUFBSEMsR0FBRyxDQUFDQyxPQUFELEVBQVU7QUFDZixTQUFLRixNQUFMLEdBQWMsb0JBQU0sQ0FBQ0csSUFBRCxFQUFPQyxFQUFQLEtBQWMsS0FBS0MsV0FBTCxDQUFpQkYsSUFBakIsRUFBdUJDLEVBQXZCLENBQXBCLEVBQWdELEtBQUtOLE9BQUwsQ0FBYVEsUUFBYixJQUF5QixLQUFLUixPQUFMLENBQWFTLFdBQXRDLElB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QUQsQ0FBUjtBQUNILE9BVkQsTUFXSztBQUNEUCxRQUFBQSxRQUFRLENBQUNLLENBQUQsQ0FBUjtBQUNIO0FBQ0o7QUFDSjs7QUFoRnlCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqL1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgUnVubmVycyBmcm9tICcuLi9ydW5uZXJzJztcbmltcG9ydCBxdWV1ZSBmcm9tICdhc3luYy9xdWV1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExhdW5jaGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcsIHJlcG9ydGVyKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5yZXBvcnRlciA9IHJlcG9ydGVyO1xuICAgICAgICB0aGlzLl9yZXN1bHRzID0gW107XG4gICAgICAgIHRoaXMuX3F1ZXVlID0gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBydW4oY2Fwc1NldCkge1xuICAgICAgICB0aGlzLl9xdWV1ZSA9IHF1ZXVlKCh0YXNrLCBjYikgPT4gdGhpcy5fbGF1bmNoVGVzdCh0YXNrLCBjYiksIHRoaXMuX2NvbmZpZy5wYXJhbGxlbCB8fCB0aGlzLl9jb25maWcuY29uY3VycmVuY3kgfHwgMSk7XG4gICAgICAgIHRoaXMuX3F1ZXVlLmVycm9yKChlcnIsIHRhc2spID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiBxdWV1ZTonLCBlcnIpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBpZiBubyBjYXBhYmlsaXRpZXMgYXJlIHNwZWNpZmllZCwgcnVuIHNpbmdsZSBpbnN0YW5jZSB3aXRoIGRlZmF1bHQgYXJndW1lbnRzXG4gICAgICAgIGlmICghY2Fwc1NldCkge1xuICAgICAgICAgICAgdGhpcy5fcXVldWUucHVzaChudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBjYXBzU2V0IGlzIGFuIGFycmF5IFxuICAgICAgICAgICAgY2Fwc1NldCA9IEFycmF5LmlzQXJyYXkoY2Fwc1NldCkgPyBjYXBzU2V0IDogW2NhcHNTZXRdO1xuICAgICAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgXy5lYWNoKGNhcHNTZXQsIGZ1bmN0aW9uKGNhcHMpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fcXVldWUucHVzaChjYXBzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuX3F1ZXVlLmRyYWluKCk7XG4gICAgfVxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqIFByaXZhdGUgbWV0aG9kc1xuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gICAgX2luc3RhbnRpYXRlUnVubmVyKGNhcHMpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5mcmFtZXdvcmsgJiYgdHlwZW9mIHRoaXMuX2NvbmZpZy5mcmFtZXdvcmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFJ1bm5lcnMsIHRoaXMuX2NvbmZpZy5mcmFtZXdvcmspKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW5uZXJzW3RoaXMuX2NvbmZpZy5mcmFtZXdvcmtdKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJ1bm5lcnMub3h5Z2VuKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2xhdW5jaFRlc3QoY2FwcywgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJ1bm5lciA9IHRoaXMuX2luc3RhbnRpYXRlUnVubmVyKGNhcHMpO1xuICAgICAgICBpZiAoIXJ1bm5lcikge1xuICAgICAgICAgICAgY29uc3QgZnJhbWV3b3JrID0gdGhpcy5fY29uZmlnLmZyYW1ld29yaztcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcnVubmVyIGZvciB0aGUgc3BlY2lmaWVkIGZyYW1ld29yazogJHtmcmFtZXdvcmt9LmApKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBveHlnZW5cbiAgICAgICAgICAgIGF3YWl0IHJ1bm5lci5pbml0KHRoaXMuX2NvbmZpZywgY2FwcywgdGhpcy5yZXBvcnRlcik7XG4gICAgICAgICAgICAvLyBydW4gT3h5Z2VuIHRlc3QgXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5uZXIucnVuKCk7XG4gICAgICAgICAgICB0aGlzLl9yZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsYXVuY2ggdGhlIHRlc3Q6JywgZSk7XG4gICAgICAgICAgICAvLyBzdG9wIHByb2Nlc3NpbmcgdGhlIHF1ZXVlXG4gICAgICAgICAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gICAgICAgICAgICBpZiAoZS5lcnJvcikge1xuICAgICAgICAgICAgICAgIHZhciBlcnJNc2cgPSAnJztcbiAgICAgICAgICAgICAgICB2YXIgZXJyID0gZS5lcnJvcjtcbiAgICAgICAgICAgICAgICBpZiAoZXJyLnR5cGUpXG4gICAgICAgICAgICAgICAgICAgIGVyck1zZyArPSBlcnIudHlwZSArICcgLSAnO1xuICAgICAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgZXJyTXNnICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgZXJyTXNnID0gZXJyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGVyck1zZykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZSk7ICAgIC8vIGNhbGwgYmFjayB3aXRoIHRoZSBvcmlnaW5hbCBleGNlcHRpb25cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|