oxygen-cli 1.40.2-beta.1 → 1.40.2
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 +1750 -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 +1 -2
- package/build/index.js +1 -1
- package/build/lib/cli-util.js +1 -5
- package/build/lib/cli.js +1 -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 +1 -9
- 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-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 +52 -33
- 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 +73 -42
- 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 +5 -13
- 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/package.json +137 -139
- 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/ox_modules/module-mongo.js +0 -302
- package/log.txt +0 -1614
- package/reports/2025-06-08_231627/report.html +0 -440
- package/reports/2025-06-09_223615/report.html +0 -440
- package/transpiled/mongodb/etc/prepare.js +0 -18
- package/transpiled/mongodb/lib/admin.js +0 -182
- package/transpiled/mongodb/lib/beta.js +0 -26
- package/transpiled/mongodb/lib/bson.js +0 -220
- package/transpiled/mongodb/lib/bulk/common.js +0 -1041
- package/transpiled/mongodb/lib/bulk/ordered.js +0 -76
- package/transpiled/mongodb/lib/bulk/unordered.js +0 -102
- package/transpiled/mongodb/lib/change_stream.js +0 -517
- package/transpiled/mongodb/lib/client-side-encryption/auto_encrypter.js +0 -329
- package/transpiled/mongodb/lib/client-side-encryption/client_encryption.js +0 -779
- package/transpiled/mongodb/lib/client-side-encryption/crypto_callbacks.js +0 -95
- package/transpiled/mongodb/lib/client-side-encryption/errors.js +0 -171
- package/transpiled/mongodb/lib/client-side-encryption/mongocryptd_manager.js +0 -98
- package/transpiled/mongodb/lib/client-side-encryption/providers/aws.js +0 -34
- package/transpiled/mongodb/lib/client-side-encryption/providers/azure.js +0 -186
- package/transpiled/mongodb/lib/client-side-encryption/providers/gcp.js +0 -29
- package/transpiled/mongodb/lib/client-side-encryption/providers/index.js +0 -58
- package/transpiled/mongodb/lib/client-side-encryption/state_machine.js +0 -505
- package/transpiled/mongodb/lib/cmap/auth/auth_provider.js +0 -63
- package/transpiled/mongodb/lib/cmap/auth/aws_temporary_credentials.js +0 -167
- package/transpiled/mongodb/lib/cmap/auth/gssapi.js +0 -207
- package/transpiled/mongodb/lib/cmap/auth/mongo_credentials.js +0 -193
- package/transpiled/mongodb/lib/cmap/auth/mongodb_aws.js +0 -181
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js +0 -101
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js +0 -81
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/callback_workflow.js +0 -174
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/command_builders.js +0 -59
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js +0 -58
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js +0 -138
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js +0 -42
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_cache.js +0 -71
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js +0 -34
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc.js +0 -111
- package/transpiled/mongodb/lib/cmap/auth/plain.js +0 -43
- package/transpiled/mongodb/lib/cmap/auth/providers.js +0 -22
- package/transpiled/mongodb/lib/cmap/auth/scram.js +0 -318
- package/transpiled/mongodb/lib/cmap/auth/x509.js +0 -61
- package/transpiled/mongodb/lib/cmap/command_monitoring_events.js +0 -266
- package/transpiled/mongodb/lib/cmap/commands.js +0 -605
- package/transpiled/mongodb/lib/cmap/connect.js +0 -418
- package/transpiled/mongodb/lib/cmap/connection.js +0 -673
- package/transpiled/mongodb/lib/cmap/connection_pool.js +0 -688
- package/transpiled/mongodb/lib/cmap/connection_pool_events.js +0 -254
- package/transpiled/mongodb/lib/cmap/errors.js +0 -128
- package/transpiled/mongodb/lib/cmap/handshake/client_metadata.js +0 -278
- package/transpiled/mongodb/lib/cmap/metrics.js +0 -67
- package/transpiled/mongodb/lib/cmap/stream_description.js +0 -74
- package/transpiled/mongodb/lib/cmap/wire_protocol/compression.js +0 -196
- package/transpiled/mongodb/lib/cmap/wire_protocol/constants.js +0 -19
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_data.js +0 -144
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_demand/document.js +0 -278
- package/transpiled/mongodb/lib/cmap/wire_protocol/responses.js +0 -376
- package/transpiled/mongodb/lib/cmap/wire_protocol/shared.js +0 -49
- package/transpiled/mongodb/lib/collection.js +0 -852
- package/transpiled/mongodb/lib/connection_string.js +0 -1452
- package/transpiled/mongodb/lib/constants.js +0 -162
- package/transpiled/mongodb/lib/cursor/abstract_cursor.js +0 -1082
- package/transpiled/mongodb/lib/cursor/aggregation_cursor.js +0 -227
- package/transpiled/mongodb/lib/cursor/change_stream_cursor.js +0 -136
- package/transpiled/mongodb/lib/cursor/client_bulk_write_cursor.js +0 -69
- package/transpiled/mongodb/lib/cursor/find_cursor.js +0 -476
- package/transpiled/mongodb/lib/cursor/list_collections_cursor.js +0 -48
- package/transpiled/mongodb/lib/cursor/list_indexes_cursor.js +0 -46
- package/transpiled/mongodb/lib/cursor/list_search_indexes_cursor.js +0 -30
- package/transpiled/mongodb/lib/cursor/run_command_cursor.js +0 -125
- package/transpiled/mongodb/lib/db.js +0 -467
- package/transpiled/mongodb/lib/deps.js +0 -174
- package/transpiled/mongodb/lib/encrypter.js +0 -129
- package/transpiled/mongodb/lib/error.js +0 -1550
- package/transpiled/mongodb/lib/explain.js +0 -122
- package/transpiled/mongodb/lib/gridfs/download.js +0 -369
- package/transpiled/mongodb/lib/gridfs/index.js +0 -240
- package/transpiled/mongodb/lib/gridfs/upload.js +0 -446
- package/transpiled/mongodb/lib/index.js +0 -975
- package/transpiled/mongodb/lib/mongo_client.js +0 -626
- package/transpiled/mongodb/lib/mongo_client_auth_providers.js +0 -98
- package/transpiled/mongodb/lib/mongo_logger.js +0 -812
- package/transpiled/mongodb/lib/mongo_types.js +0 -71
- package/transpiled/mongodb/lib/operations/aggregate.js +0 -129
- package/transpiled/mongodb/lib/operations/bulk_write.js +0 -48
- package/transpiled/mongodb/lib/operations/client_bulk_write/client_bulk_write.js +0 -96
- package/transpiled/mongodb/lib/operations/client_bulk_write/command_builder.js +0 -409
- package/transpiled/mongodb/lib/operations/client_bulk_write/common.js +0 -5
- package/transpiled/mongodb/lib/operations/client_bulk_write/executor.js +0 -144
- package/transpiled/mongodb/lib/operations/client_bulk_write/results_merger.js +0 -228
- package/transpiled/mongodb/lib/operations/collections.js +0 -49
- package/transpiled/mongodb/lib/operations/command.js +0 -102
- package/transpiled/mongodb/lib/operations/count.js +0 -60
- package/transpiled/mongodb/lib/operations/create_collection.js +0 -109
- package/transpiled/mongodb/lib/operations/delete.js +0 -134
- package/transpiled/mongodb/lib/operations/distinct.js +0 -77
- package/transpiled/mongodb/lib/operations/drop.js +0 -102
- package/transpiled/mongodb/lib/operations/estimated_document_count.js +0 -47
- package/transpiled/mongodb/lib/operations/execute_operation.js +0 -251
- package/transpiled/mongodb/lib/operations/find.js +0 -197
- package/transpiled/mongodb/lib/operations/find_and_modify.js +0 -191
- package/transpiled/mongodb/lib/operations/get_more.js +0 -84
- package/transpiled/mongodb/lib/operations/indexes.js +0 -197
- package/transpiled/mongodb/lib/operations/insert.js +0 -138
- package/transpiled/mongodb/lib/operations/is_capped.js +0 -44
- package/transpiled/mongodb/lib/operations/kill_cursors.js +0 -58
- package/transpiled/mongodb/lib/operations/list_collections.js +0 -66
- package/transpiled/mongodb/lib/operations/list_databases.js +0 -56
- package/transpiled/mongodb/lib/operations/operation.js +0 -88
- package/transpiled/mongodb/lib/operations/options_operation.js +0 -44
- package/transpiled/mongodb/lib/operations/profiling_level.js +0 -42
- package/transpiled/mongodb/lib/operations/remove_user.js +0 -35
- package/transpiled/mongodb/lib/operations/rename.js +0 -48
- package/transpiled/mongodb/lib/operations/run_command.js +0 -64
- package/transpiled/mongodb/lib/operations/search_indexes/create.js +0 -41
- package/transpiled/mongodb/lib/operations/search_indexes/drop.js +0 -51
- package/transpiled/mongodb/lib/operations/search_indexes/update.js +0 -40
- package/transpiled/mongodb/lib/operations/set_profiling_level.js +0 -70
- package/transpiled/mongodb/lib/operations/stats.js +0 -39
- package/transpiled/mongodb/lib/operations/update.js +0 -218
- package/transpiled/mongodb/lib/operations/validate_collection.js +0 -49
- package/transpiled/mongodb/lib/read_concern.js +0 -92
- package/transpiled/mongodb/lib/read_preference.js +0 -215
- package/transpiled/mongodb/lib/resource_management.js +0 -74
- package/transpiled/mongodb/lib/sdam/common.js +0 -53
- package/transpiled/mongodb/lib/sdam/events.js +0 -177
- package/transpiled/mongodb/lib/sdam/monitor.js +0 -656
- package/transpiled/mongodb/lib/sdam/server.js +0 -463
- package/transpiled/mongodb/lib/sdam/server_description.js +0 -196
- package/transpiled/mongodb/lib/sdam/server_selection.js +0 -283
- package/transpiled/mongodb/lib/sdam/server_selection_events.js +0 -112
- package/transpiled/mongodb/lib/sdam/srv_polling.js +0 -139
- package/transpiled/mongodb/lib/sdam/topology.js +0 -833
- package/transpiled/mongodb/lib/sdam/topology_description.js +0 -447
- package/transpiled/mongodb/lib/sessions.js +0 -988
- package/transpiled/mongodb/lib/sort.js +0 -123
- package/transpiled/mongodb/lib/timeout.js +0 -349
- package/transpiled/mongodb/lib/transactions.js +0 -149
- package/transpiled/mongodb/lib/utils.js +0 -1502
- package/transpiled/mongodb/lib/write_concern.js +0 -115
|
@@ -272,4 +272,4 @@ class OxygenWorker extends EventEmitter {
|
|
|
272
272
|
}
|
|
273
273
|
|
|
274
274
|
exports.default = OxygenWorker;
|
|
275
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi9PeHlnZW5Xb3JrZXIuanMiXSwibmFtZXMiOlsiRmliZXIiLCJyZXF1aXJlIiwicGF0aCIsImZzIiwiRXZlbnRFbWl0dGVyIiwiT3h5Z2VuIiwiZGVmYXVsdCIsIm94dXRpbCIsImVycm9ySGVscGVyIiwibW9kdWxlIiwiZ2xvYmFsIiwiYnJvd3NlciIsIk94eWdlbldvcmtlciIsImNvbnN0cnVjdG9yIiwicmVwb3J0ZXIiLCJsb2dnZXIiLCJfb3h5Z2VuIiwiX29wdHMiLCJfbG9nZ2VyIiwiX3Rlc3RIb29rcyIsIl9yZXBvcnRlciIsIl9ydW5JZCIsImluaXQiLCJydW5JZCIsIm9wdGlvbnMiLCJjYXBzIiwiX2N3ZCIsImN3ZCIsInByb2Nlc3MiLCJvbiIsIl9oYW5kbGVCZWZvcmVDb21tYW5kIiwiYmluZCIsIl9oYW5kbGVBZnRlckNvbW1hbmQiLCJfaGFuZGxlTG9nRW50cnkiLCJsb2FkVGVzdEhvb2tzIiwiZGVidWciLCJlIiwidG9TdHJpbmciLCJydW4iLCJzY3JpcHRQYXRoIiwiY29udGV4dCIsInBvRmlsZSIsIkVycm9yIiwibG9hZFBhZ2VPYmplY3RGaWxlIiwiX3N0ZXBzIiwiaXNBYnNvbHV0ZSIsInJlc29sdmUiLCJlcnJvciIsInJlYWxwYXRoU3luYyIsIm9uQmVmb3JlQ2FzZSIsIl9ydW5GbkluRmliZXJDb250ZXh0IiwiY2FjaGUiLCJjZSIsIk1vZHVsZSIsIm9yaWdpbmFsUmVxdWlyZSIsInByb3RvdHlwZSIsInNjcmlwdCIsImFyZ3VtZW50cyIsInN0YXJ0c1dpdGgiLCJrZXkiLCJleGkiLCJhcHBseSIsInR5cGUiLCJlcnJvckNvZGUiLCJBU1NFUlRfUEFTU0VEIiwiX3dhaXRTdGVwUmVzdWx0IiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIm1vZHVsZUNhcHMiLCJnZXRNb2R1bGVzQ2FwYWJpbGl0aWVzIiwib25BZnRlckNhc2UiLCJyZXN1bHRTdG9yZSIsInJlc3VsdHMiLCJyZXNldFJlc3VsdHMiLCJveENvbnRleHQiLCJ2YXJzIiwiZGlzcG9zZSIsInN0YXR1cyIsInN0YXJ0U2Vzc2lvbiIsImVuZFNlc3Npb24iLCJkaXNwb3NlTW9kdWxlcyIsImNhbGxUZXN0SG9vayIsImhvb2tOYW1lIiwiaG9va0FyZ3MiLCJleGVjdXRlVGVzdEhvb2siLCJmbiIsIlByb21pc2UiLCJyZWplY3QiLCJyZXN1bHQiLCJlcnIiLCJyZXBsU3RhcnQiLCJjb21tYW5kUmVzb2x2ZSIsInNldFRpbWVvdXQiLCJtb2R1bGVzIiwia2V5cyIsIk9iamVjdCIsIm1hcCIsIml0ZW0iLCJkcml2ZXIiLCJlbWl0IiwicHVzaCIsImxldmVsIiwibWVzc2FnZSIsInNyYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBWUEsTUFBTUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUFyQjs7QUFDQSxNQUFNQyxJQUFJLEdBQUdELE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUNBLE1BQU1FLEVBQUUsR0FBR0YsT0FBTyxDQUFDLElBQUQsQ0FBbEI7O0FBQ0EsTUFBTTtBQUFFRyxFQUFBQTtBQUFGLElBQW1CSCxPQUFPLENBQUMsUUFBRCxDQUFoQzs7QUFFQSxNQUFNSSxNQUFNLEdBQUdKLE9BQU8sQ0FBQyx1QkFBRCxDQUFQLENBQWlDSyxPQUFoRDs7QUFDQSxNQUFNQyxNQUFNLEdBQUdOLE9BQU8sQ0FBQyxnQkFBRCxDQUF0Qjs7QUFDQSxNQUFNTyxXQUFXLEdBQUdQLE9BQU8sQ0FBQyxxQkFBRCxDQUEzQjs7QUFHQUEsT0FBTyxHQUFHQSxPQUFPLENBQUMsS0FBRCxDQUFQLENBQWVRLE1BQWYsQ0FBVjtBQUdBQyxNQUFNLENBQUNDLE9BQVAsR0FBaUIsRUFBakI7O0FBRWUsTUFBTUMsWUFBTixTQUEyQlIsWUFBM0IsQ0FBd0M7QUFDbkRTLEVBQUFBLFdBQVcsQ0FBRUMsUUFBRixFQUFZQyxNQUFaLEVBQW9CO0FBQzNCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLElBQWY7QUFDQSxTQUFLQyxLQUFMLEdBQWEsSUFBYjtBQUNB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QUFDaUUsT0FBeEIsRUFBaUNqRSxDQUFDLENBQUNrRSxHQUFuQyxFQUF3Q2xFLENBQUMsQ0FBQ29ELEdBQTFDO0FBQ0gsS0FGRCxNQUVPO0FBQ0gsV0FBS3RFLE9BQUwsQ0FBYWtCLENBQUMsQ0FBQ2dFLEtBQWYsRUFBc0JoRSxDQUFDLENBQUNpRSxPQUF4QixFQUFpQ2pFLENBQUMsQ0FBQ2tFLEdBQW5DO0FBQ0g7QUFDSjs7QUEvUGtEIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxOS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBCYXNlZCBvbjpcbiAqIENvcHlyaWdodCAoYykgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy4gTGljZW5zZWQgdW5kZXIgTUlULlxuICovXG5cbmNvbnN0IEZpYmVyID0gcmVxdWlyZSgnZmliZXJzJyk7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuXG5jb25zdCBPeHlnZW4gPSByZXF1aXJlKCcuLi8uLi9jb3JlL094eWdlbkNvcmUnKS5kZWZhdWx0O1xuY29uc3Qgb3h1dGlsID0gcmVxdWlyZSgnLi4vLi4vbGliL3V0aWwnKTtcbmNvbnN0IGVycm9ySGVscGVyID0gcmVxdWlyZSgnLi4vLi4vZXJyb3JzL2hlbHBlcicpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZ2xvYmFsLWFzc2lnblxucmVxdWlyZSA9IHJlcXVpcmUoJ2VzbScpKG1vZHVsZSk7XG5cbi8vIG1vY2t1cCBnbG9iYmFsLmJyb3dzZXIgb2JqZWN0IGZvciBpbnRlcm5hbCBXRElPIGZ1bmN0aW9ucyB0byB3b3JrIHByb3Blcmx5XG5nbG9iYWwuYnJvd3NlciA9IHt9O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPeHlnZW5Xb3JrZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yIChyZXBvcnRlciwgbG9nZ2VyKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX294eWdlbiA9IG51bGw7XG4gICAgICAgIHRoaXMuX29wdHMgPSBudWxsO1xuICAgICAgICB0aGlzLl9sb2dnZXIgPSBsb2dnZXI7XG4gICAgICAgIHRoaXMuX3Rlc3RIb29rcyA9IHt9O1xuICAgICAgICB0aGlzLl9yZXBvcnRlciA9IHJlcG9ydGVyO1xuICAgICAgICB0aGlzLl9ydW5JZCA9IG51bGw7XG4gICAgfVxuICAgIC8qXG4gICAgICogSW5pdGlhbGl6ZSBPeHlnZW4gZW5naW5lXG4gICAgICovXG4gICAgYXN5bmMgaW5pdChydW5JZCwgb3B0aW9ucywgY2Fwcykge1xuICAgICAgICB0aGlzLl9ydW5JZCA9IHJ1bklkO1xuICAgICAgICB0aGlzLl9vcHRzID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5fY3dkID0gdGhpcy5fb3B0cy5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcblxuICAgICAgICBpZiAoIXRoaXMuX294eWdlbikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9veHlnZW4gPSBuZXcgT3h5Z2VuKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3h5Z2VuLm9uKCdjb21tYW5kOmJlZm9yZScsIHRoaXMuX2hhbmRsZUJlZm9yZUNvbW1hbmQuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3h5Z2VuLm9uKCdjb21tYW5kOmFmdGVyJywgdGhpcy5faGFuZGxlQWZ0ZXJDb21tYW5kLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIHRoaXMuX294eWdlbi5vbignbG9nJywgdGhpcy5faGFuZGxlTG9nRW50cnkuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fb3h5Z2VuLmluaXQob3B0aW9ucywgY2Fwcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGVzdEhvb2tzID0gb3h1dGlsLmxvYWRUZXN0SG9va3Mob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgLy9tYWtlTW9kdWxlc0dsb2JhbChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ094eWdlbiBpbml0aWFsaXphdGlvbiBjb21wbGV0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKGBPeHlnZW4gaW5pdGlhbGl6YXRpb24gZmFpbGVkOiAke2UudG9TdHJpbmcoKX1gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qXG4gICAgICogUnVuIGluZGl2aWR1YWwgdGVzdCBjYXNlXG4gICAgICovXG4gICAgYXN5bmMgcnVuKHsgc2NyaXB0UGF0aCwgY29udGV4dCwgcG9GaWxlID0gbnVsbCB9KSB7XG4gICAgICAgIC8vIGFzc2lnbiB1cCB0byBkYXRlIGNvbnRleHQgdG8gT3h5Z2VuIENvcmUgdG8gcmVmbGVjdCBuZXcgcGFyYW1ldGVycyBhbmQgb3RoZXIgY29udGV4dCBkYXRhXG4gICAgICAgIGlmICghdGhpcy5fb3h5Z2VuKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciAoJ094eWdlbiBpcyBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9veHlnZW4uY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMuX294eWdlbi5sb2FkUGFnZU9iamVjdEZpbGUocG9GaWxlKTtcbiAgICAgICAgdGhpcy5fc3RlcHMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuX2N3ZCAmJiAhcGF0aC5pc0Fic29sdXRlKHNjcmlwdFBhdGgpKSB7XG4gICAgICAgICAgICBzY3JpcHRQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuX2N3ZCwgc2NyaXB0UGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcblxuICAgICAgICAvLyBvbiBPU1ggY3dkIHdpbGwgYmUgYSBzeW1saW5rOiBcIi92YXIvZm9sZGVycy8uLlwiIGluc3RlYWQgb2YgXCIvcHJpdmF0ZS92YXIvZm9sZGVycy8uLlwiICh0aGlzIGNvdWxkIGFsc28gaGFwcGVuIG9uIG90aGVyIHBsYXRmb3JtcyB0b28pXG4gICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gcmVzb2x2ZSBpdCB0byByZWFsIHBhdGhcbiAgICAgICAgbGV0IGN3ZCA9IGZzLnJlYWxwYXRoU3luYyh0aGlzLl9jd2QpO1xuXG4gICAgICAgIC8vIGxvYWQgYW5kIHJ1biB0aGUgdGVzdCBzY3JpcHRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuX294eWdlbiAmJiB0aGlzLl9veHlnZW4ub25CZWZvcmVDYXNlICYmIGF3YWl0IHRoaXMuX294eWdlbi5vbkJlZm9yZUNhc2UoY29udGV4dCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9ydW5GbkluRmliZXJDb250ZXh0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdG8gY2xlYXIgcmVxdWlyZSBjYWNoZSBzbyB0aGUgc2NyaXB0IHdpbGwgYmUgZXhlY3V0ZWQgb24gZWFjaCBpdGVyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXF1aXJlLmNhY2hlW3JlcXVpcmUucmVzb2x2ZShzY3JpcHRQYXRoKV07XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVkLiBjb3VsZCBoYXBwZW4gaWYgbW9kdWxlIGhhc24ndCBiZWVuIGNhY2hlZCB5ZXQuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB1c2VyIHVzZXMgcmVxdWlyZSgnLi9zb21lc2NyaXB0LmpzJykgaW4gbXVsdGlwbGUgdGVzdCBzY3JpcHRzIChjYXNlcyksIGFuZCBzb21lc2NyaXB0LmpzIGNvbnRhaW5zIHdlYi9tb2IuaW5pdFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGVuLCB3aGVuIHRob3NlIHNjcmlwdHMgYXJlIGV4ZWN1dGVkIGluIGEgc3VpdGUsIG9ubHkgZmlyc3QgY2FzZSB3aWxsIHBhc3MsIHRoZSByZXN0IHdpbGwgZmFpbCB3aXRoIE1PRFVMRV9OT1RfSU5JVElBTElaRUQgZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYmVjYXVzZSAncmVxdWlyZScgaXMgY2FjaGVkLCBhbmQgd2hlbiB0aGUgZmlyc3QgY2FzZSBpcyBmaW5pc2hlZCwgdGhlIG1vZHVsZSBpcyBtYXJrZWQgYXMgaXNJbml0aWFsaXplZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBub3QgcmUtaW5pdGlhbGl6ZWQgYmFjayBvbiBuZXh0IGNhc2UuXG4gICAgICAgICAgICAgICAgICAgIC8vIHRodXMgd2UgY2xlYW4gdXNlciBsZXZlbCBzY3JpcHRzIGZyb20gJ3JlcXVpcmUnIGNhY2hlLlxuICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2ViLmluaXQgYW5kIG90aGVyIG1vZHVsZXMgc2hvdWxkIGJlIHByb2JhYmx5IGZpeGVkIChwcm9wZXJseSBkaXNwb3NlZClcbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogdGhpcyBvYnZpb3VzbHkgcmVsYXRlcyBub3Qgb25seSB0byB3ZWIsIGV0YyBtb2R1bGUuIHRoaXMgaXMgYSBnZW5lcmFsIGlzc3VlLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2R1bGUgPSByZXF1aXJlKCdtb2R1bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxSZXF1aXJlID0gTW9kdWxlLnByb3RvdHlwZS5yZXF1aXJlO1xuXG4gICAgICAgICAgICAgICAgICAgIE1vZHVsZS5wcm90b3R5cGUucmVxdWlyZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gYXJndW1lbnRzWycwJ107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludmFsaWRhdGUgY2FjaGUgb25seSB3aGVuIHdlIHRyeSB0byBsb2FkIHVzZXItbGV2ZWwgc2NyaXB0cyAodGhvc2Ugc3RhcnRpbmcgd2l0aCAnLi8nIG9yICcuLi8nKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdCAmJiBzY3JpcHQuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGV2ZXJ5dGhpbmcgdXNlciByZWxhdGVkIGZyb20gdGhlIGNhY2hlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVxdWlyZS5jYWNoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGggJiYga2V5LnN0YXJ0c1dpdGgoY3dkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVxdWlyZS5jYWNoZVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxSZXF1aXJlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoc2NyaXB0UGF0aCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBlcnJvciA9IGUuY29kZSAmJiBlLmNvZGUgPT09ICdNT0RVTEVfTk9UX0ZPVU5EJyA/IG5ldyBTY3JpcHROb3RGb3VuZEVycm9yKHNjcmlwdFBhdGgpIDogZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLnR5cGUgJiYgZS50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX1BBU1NFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvciA9IGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbiBzb21lIGNhc2VzIHN0ZXAgcmVzdWx0IGdlbmVyYXRpb24gdGFrZXMgc29tZSB0aW1lIHRvIG1ha2Ugc2NyZWVuc2hvdFxuICAgICAgICBhd2FpdCB0aGlzLl9veHlnZW4uX3dhaXRTdGVwUmVzdWx0KCk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBlcnJvciA9IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1vZHVsZUNhcHMgPSB7fTtcblxuICAgICAgICBpZiAodGhpcy5fb3h5Z2VuICYmIHRoaXMuX294eWdlbi5nZXRNb2R1bGVzQ2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgICBtb2R1bGVDYXBzID0gdGhpcy5fb3h5Z2VuLmdldE1vZHVsZXNDYXBhYmlsaXRpZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX294eWdlbiAmJiB0aGlzLl9veHlnZW4ub25BZnRlckNhc2UgJiYgYXdhaXQgdGhpcy5fb3h5Z2VuLm9uQWZ0ZXJDYXNlKGVycm9yKTtcblxuICAgICAgICAvLyBjbG9uZSB0aGUgcmVzdWx0cywgb3RoZXJ3aXNlIHJlc3VsdFN0b3JlIHdpbGwgYmUgZW1wdHkgYWZ0ZXIgdGhlIGZvbGxvd2luZyB0aGlzLl9veHlnZW4ucmVzZXRSZXN1bHRzKCkgY2FsbFxuXG4gICAgICAgIGxldCByZXN1bHRTdG9yZSA9IHt9O1xuXG4gICAgICAgIGlmICh0aGlzLl9veHlnZW4gJiYgdGhpcy5fb3h5Z2VuLnJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJlc3VsdFN0b3JlID0geyAuLi50aGlzLl9veHlnZW4ucmVzdWx0cyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX294eWdlbiAmJiB0aGlzLl9veHlnZW4ucmVzZXRSZXN1bHRzKSB7XG4gICAgICAgICAgICAvLyByZXNldCBzdGVwcyBhbmQgb3RoZXIgcmVzdWx0IGRhdGFcbiAgICAgICAgICAgIHRoaXMuX294eWdlbi5yZXNldFJlc3VsdHMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdGVwcyA9IG51bGw7XG5cbiAgICAgICAgbGV0IG94Q29udGV4dCA9IHt9O1xuICAgICAgICBpZiAodGhpcy5fb3h5Z2VuICYmIHRoaXMuX294eWdlbi5jb250ZXh0KSB7XG4gICAgICAgICAgICBveENvbnRleHQgPSB0aGlzLl9veHlnZW4uY29udGV4dDtcbiAgICAgICAgfVxuICAgICAgICBveENvbnRleHQudmFycyA9IGdsb2JhbC52YXJzO1xuXG4gICAgICAgIHJldHVybiB7IGVycm9yLCBtb2R1bGVDYXBzLCByZXN1bHRTdG9yZSwgY29udGV4dDogb3hDb250ZXh0IH07XG4gICAgfVxuICAgIC8qXG4gICAgICogRGlzcG9zZSBPeHlnZW4gZW5naW5lXG4gICAgICovXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMgPSBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLl9veHlnZW4pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fb3h5Z2VuLmRpc3Bvc2Uoc3RhdHVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGlzcG9zZSBPeHlnZW4nLCBudWxsLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0ZXBzID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBzdGFydFNlc3Npb24oKSB7XG5cbiAgICB9XG5cbiAgICBhc3luYyBlbmRTZXNzaW9uKHN0YXR1cyA9IG51bGwsIGRpc3Bvc2VNb2R1bGVzID0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5fb3h5Z2VuKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChkaXNwb3NlTW9kdWxlcykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9veHlnZW4uZGlzcG9zZU1vZHVsZXMoc3RhdHVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRpc3Bvc2UgT3h5Z2VuIG1vZHVsZXMnLCBudWxsLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRoaXMuX294eWdlbi5yZXNldFJlc3VsdHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGNhbGxUZXN0SG9vayhob29rTmFtZSwgaG9va0FyZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLl90ZXN0SG9va3MgfHwgIXRoaXMuX3Rlc3RIb29rc1tob29rTmFtZV0gfHwgdHlwZW9mIHRoaXMuX3Rlc3RIb29rc1tob29rTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSG9vayBkb2VzIG5vdCBleGlzdDogJHtob29rTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBveHV0aWwuZXhlY3V0ZVRlc3RIb29rKHRoaXMuX3Rlc3RIb29rcywgaG9va05hbWUsIGhvb2tBcmdzKTtcbiAgICB9XG5cbiAgICBhc3luYyBfcnVuRm5JbkZpYmVyQ29udGV4dCAoZm4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IEZpYmVyKCgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZm4uYXBwbHkodGhpcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkucnVuKCkpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlcGxTdGFydCgpIHtcbiAgICAgICAgbGV0IGNvbW1hbmRSZXNvbHZlID0gKCkgPT4geyB9O1xuXG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fb3h5Z2VuICYmIHRoaXMuX294eWdlbi5tb2R1bGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX294eWdlbi5tb2R1bGVzKTtcbiAgICAgICAgICAgICAgICBsZXQgZGVidWc7XG4gICAgICAgICAgICAgICAga2V5cy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZHJpdmVyID0gdGhpcy5fb3h5Z2VuLm1vZHVsZXNbaXRlbV1bJ2dldERyaXZlciddICYmIHRoaXMuX294eWdlbi5tb2R1bGVzW2l0ZW1dWydnZXREcml2ZXInXSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZHJpdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyA9IHRoaXMuX294eWdlbi5tb2R1bGVzW2l0ZW1dWydkZWJ1ZyddO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGVidWcoKTtcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZFJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21tYW5kUmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29tbWFuZFJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMTApO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gKGNvbW1hbmRSZXNvbHZlID0gcmVzb2x2ZSkpO1xuICAgIH1cblxuICAgIF9oYW5kbGVCZWZvcmVDb21tYW5kKGUpIHtcbiAgICAgICAgaWYgKCFlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KCdjb21tYW5kOmJlZm9yZScsIGUpO1xuICAgIH1cblxuICAgIF9oYW5kbGVBZnRlckNvbW1hbmQoZSkge1xuICAgICAgICBpZiAoIWUgfHwgIWUucmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdGVwcyAmJiB0aGlzLl9zdGVwcy5wdXNoKGUucmVzdWx0KTtcbiAgICAgICAgdGhpcy5lbWl0KCdjb21tYW5kOmFmdGVyJywgZSk7XG4gICAgfVxuXG4gICAgX2hhbmRsZUxvZ0VudHJ5KGUpIHtcbiAgICAgICAgaWYgKCFlIHx8ICFlLmxldmVsIHx8ICFlLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZSAmJiBlLmxldmVsICYmIGUubGV2ZWwgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlcltlLmxldmVsXShlLm1lc3NhZ2UsIGUuc3JjLCBlLmVycik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXJbZS5sZXZlbF0oZS5tZXNzYWdlLCBlLnNyYyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
275
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi9PeHlnZW5Xb3JrZXIuanMiXSwibmFtZXMiOlsiRmliZXIiLCJyZXF1aXJlIiwicGF0aCIsImZzIiwiRXZlbnRFbWl0dGVyIiwiT3h5Z2VuIiwiZGVmYXVsdCIsIm94dXRpbCIsImVycm9ySGVscGVyIiwibW9kdWxlIiwiZ2xvYmFsIiwiYnJvd3NlciIsIk94eWdlbldvcmtlciIsImNvbnN0cnVjdG9yIiwicmVwb3J0ZXIiLCJsb2dnZXIiLCJfb3h5Z2VuIiwiX29wdHMiLCJfbG9nZ2VyIiwiX3Rlc3RIb29rcyIsIl9yZXBvcnRlciIsIl9ydW5JZCIsImluaXQiLCJydW5JZCIsIm9wdGlvbnMiLCJjYXBzIiwiX2N3ZCIsImN3ZCIsInByb2Nlc3MiLCJvbiIsIl9oYW5kbGVCZWZvcmVDb21tYW5kIiwiYmluZCIsIl9oYW5kbGVBZnRlckNvbW1hbmQiLCJfaGFuZGxlTG9nRW50cnkiLCJsb2FkVGVzdEhvb2tzIiwiZGVidWciLCJlIiwidG9TdHJpbmciLCJydW4iLCJzY3JpcHRQYXRoIiwiY29udGV4dCIsInBvRmlsZSIsIkVycm9yIiwibG9hZFBhZ2VPYmplY3RGaWxlIiwiX3N0ZXBzIiwiaXNBYnNvbHV0ZSIsInJlc29sdmUiLCJlcnJvciIsInJlYWxwYXRoU3luYyIsIm9uQmVmb3JlQ2FzZSIsIl9ydW5GbkluRmliZXJDb250ZXh0IiwiY2FjaGUiLCJjZSIsIk1vZHVsZSIsIm9yaWdpbmFsUmVxdWlyZSIsInByb3RvdHlwZSIsInNjcmlwdCIsImFyZ3VtZW50cyIsInN0YXJ0c1dpdGgiLCJrZXkiLCJleGkiLCJhcHBseSIsInR5cGUiLCJlcnJvckNvZGUiLCJBU1NFUlRfUEFTU0VEIiwiX3dhaXRTdGVwUmVzdWx0IiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIm1vZHVsZUNhcHMiLCJnZXRNb2R1bGVzQ2FwYWJpbGl0aWVzIiwib25BZnRlckNhc2UiLCJyZXN1bHRTdG9yZSIsInJlc3VsdHMiLCJyZXNldFJlc3VsdHMiLCJveENvbnRleHQiLCJ2YXJzIiwiZGlzcG9zZSIsInN0YXR1cyIsInN0YXJ0U2Vzc2lvbiIsImVuZFNlc3Npb24iLCJkaXNwb3NlTW9kdWxlcyIsImNhbGxUZXN0SG9vayIsImhvb2tOYW1lIiwiaG9va0FyZ3MiLCJleGVjdXRlVGVzdEhvb2siLCJmbiIsIlByb21pc2UiLCJyZWplY3QiLCJyZXN1bHQiLCJlcnIiLCJyZXBsU3RhcnQiLCJjb21tYW5kUmVzb2x2ZSIsInNldFRpbWVvdXQiLCJtb2R1bGVzIiwia2V5cyIsIk9iamVjdCIsIm1hcCIsIml0ZW0iLCJkcml2ZXIiLCJlbWl0IiwicHVzaCIsImxldmVsIiwibWVzc2FnZSIsInNyYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBWUEsTUFBTUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUFyQjs7QUFDQSxNQUFNQyxJQUFJLEdBQUdELE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUNBLE1BQU1FLEVBQUUsR0FBR0YsT0FBTyxDQUFDLElBQUQsQ0FBbEI7O0FBQ0EsTUFBTTtBQUFFRyxFQUFBQTtBQUFGLElBQW1CSCxPQUFPLENBQUMsUUFBRCxDQUFoQzs7QUFFQSxNQUFNSSxNQUFNLEdBQUdKLE9BQU8sQ0FBQyx1QkFBRCxDQUFQLENBQWlDSyxPQUFoRDs7QUFDQSxNQUFNQyxNQUFNLEdBQUdOLE9BQU8sQ0FBQyxnQkFBRCxDQUF0Qjs7QUFDQSxNQUFNTyxXQUFXLEdBQUdQLE9BQU8sQ0FBQyxxQkFBRCxDQUEzQjs7QUFHQUEsT0FBTyxHQUFHQSxPQUFPLENBQUMsS0FBRCxDQUFQLENBQWVRLE1BQWYsQ0FBVjtBQUdBQyxNQUFNLENBQUNDLE9BQVAsR0FBaUIsRUFBakI7O0FBRWUsTUFBTUMsWUFBTixTQUEyQlIsWUFBM0IsQ0FBd0M7QUFDbkRTLEVBQUFBLFdBQVcsQ0FBRUMsUUFBRixFQUFZQyxNQUFaLEVBQW9CO0FBQzNCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLElBQWY7QUFDQSxTQUFLQyxLQUFMLEdBQWEsSUFBYjtBQUNB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QUFDaUUsT0FBeEIsRUFBaUNqRSxDQUFDLENBQUNrRSxHQUFuQyxFQUF3Q2xFLENBQUMsQ0FBQ29ELEdBQTFDO0FBQ0gsS0FGRCxNQUVPO0FBQ0gsV0FBS3RFLE9BQUwsQ0FBYWtCLENBQUMsQ0FBQ2dFLEtBQWYsRUFBc0JoRSxDQUFDLENBQUNpRSxPQUF4QixFQUFpQ2pFLENBQUMsQ0FBQ2tFLEdBQW5DO0FBQ0g7QUFDSjs7QUEvUGtEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE5LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICpcclxuICogQmFzZWQgb246XHJcbiAqIENvcHlyaWdodCAoYykgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy4gTGljZW5zZWQgdW5kZXIgTUlULlxyXG4gKi9cclxuXHJcbmNvbnN0IEZpYmVyID0gcmVxdWlyZSgnZmliZXJzJyk7XHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcclxuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpO1xyXG5cclxuY29uc3QgT3h5Z2VuID0gcmVxdWlyZSgnLi4vLi4vY29yZS9PeHlnZW5Db3JlJykuZGVmYXVsdDtcclxuY29uc3Qgb3h1dGlsID0gcmVxdWlyZSgnLi4vLi4vbGliL3V0aWwnKTtcclxuY29uc3QgZXJyb3JIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi9lcnJvcnMvaGVscGVyJyk7XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZ2xvYmFsLWFzc2lnblxyXG5yZXF1aXJlID0gcmVxdWlyZSgnZXNtJykobW9kdWxlKTtcclxuXHJcbi8vIG1vY2t1cCBnbG9iYmFsLmJyb3dzZXIgb2JqZWN0IGZvciBpbnRlcm5hbCBXRElPIGZ1bmN0aW9ucyB0byB3b3JrIHByb3Blcmx5XHJcbmdsb2JhbC5icm93c2VyID0ge307XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPeHlnZW5Xb3JrZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgY29uc3RydWN0b3IgKHJlcG9ydGVyLCBsb2dnZXIpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuX294eWdlbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb3B0cyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fbG9nZ2VyID0gbG9nZ2VyO1xyXG4gICAgICAgIHRoaXMuX3Rlc3RIb29rcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVyID0gcmVwb3J0ZXI7XHJcbiAgICAgICAgdGhpcy5fcnVuSWQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgLypcclxuICAgICAqIEluaXRpYWxpemUgT3h5Z2VuIGVuZ2luZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KHJ1bklkLCBvcHRpb25zLCBjYXBzKSB7XHJcbiAgICAgICAgdGhpcy5fcnVuSWQgPSBydW5JZDtcclxuICAgICAgICB0aGlzLl9vcHRzID0gb3B0aW9ucztcclxuICAgICAgICB0aGlzLl9jd2QgPSB0aGlzLl9vcHRzLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX294eWdlbikge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3h5Z2VuID0gbmV3IE94eWdlbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3h5Z2VuLm9uKCdjb21tYW5kOmJlZm9yZScsIHRoaXMuX2hhbmRsZUJlZm9yZUNvbW1hbmQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9veHlnZW4ub24oJ2NvbW1hbmQ6YWZ0ZXInLCB0aGlzLl9oYW5kbGVBZnRlckNvbW1hbmQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9veHlnZW4ub24oJ2xvZycsIHRoaXMuX2hhbmRsZUxvZ0VudHJ5LmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fb3h5Z2VuLmluaXQob3B0aW9ucywgY2Fwcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXN0SG9va3MgPSBveHV0aWwubG9hZFRlc3RIb29rcyhvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIC8vbWFrZU1vZHVsZXNHbG9iYWwob3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ094eWdlbiBpbml0aWFsaXphdGlvbiBjb21wbGV0ZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKGBPeHlnZW4gaW5pdGlhbGl6YXRpb24gZmFpbGVkOiAke2UudG9TdHJpbmcoKX1gKTtcclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKlxyXG4gICAgICogUnVuIGluZGl2aWR1YWwgdGVzdCBjYXNlXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJ1bih7IHNjcmlwdFBhdGgsIGNvbnRleHQsIHBvRmlsZSA9IG51bGwgfSkge1xyXG4gICAgICAgIC8vIGFzc2lnbiB1cCB0byBkYXRlIGNvbnRleHQgdG8gT3h5Z2VuIENvcmUgdG8gcmVmbGVjdCBuZXcgcGFyYW1ldGVycyBhbmQgb3RoZXIgY29udGV4dCBkYXRhXHJcbiAgICAgICAgaWYgKCF0aGlzLl9veHlnZW4pIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IgKCdPeHlnZW4gaXMgbm90IGluaXRpYWxpemVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX294eWdlbi5jb250ZXh0ID0gY29udGV4dDtcclxuICAgICAgICB0aGlzLl9veHlnZW4ubG9hZFBhZ2VPYmplY3RGaWxlKHBvRmlsZSk7XHJcbiAgICAgICAgdGhpcy5fc3RlcHMgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5fY3dkICYmICFwYXRoLmlzQWJzb2x1dGUoc2NyaXB0UGF0aCkpIHtcclxuICAgICAgICAgICAgc2NyaXB0UGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLl9jd2QsIHNjcmlwdFBhdGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBvbiBPU1ggY3dkIHdpbGwgYmUgYSBzeW1saW5rOiBcIi92YXIvZm9sZGVycy8uLlwiIGluc3RlYWQgb2YgXCIvcHJpdmF0ZS92YXIvZm9sZGVycy8uLlwiICh0aGlzIGNvdWxkIGFsc28gaGFwcGVuIG9uIG90aGVyIHBsYXRmb3JtcyB0b28pXHJcbiAgICAgICAgLy8gc28gd2UgbmVlZCB0byByZXNvbHZlIGl0IHRvIHJlYWwgcGF0aFxyXG4gICAgICAgIGxldCBjd2QgPSBmcy5yZWFscGF0aFN5bmModGhpcy5fY3dkKTtcclxuXHJcbiAgICAgICAgLy8gbG9hZCBhbmQgcnVuIHRoZSB0ZXN0IHNjcmlwdFxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuX294eWdlbiAmJiB0aGlzLl9veHlnZW4ub25CZWZvcmVDYXNlICYmIGF3YWl0IHRoaXMuX294eWdlbi5vbkJlZm9yZUNhc2UoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3J1bkZuSW5GaWJlckNvbnRleHQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdG8gY2xlYXIgcmVxdWlyZSBjYWNoZSBzbyB0aGUgc2NyaXB0IHdpbGwgYmUgZXhlY3V0ZWQgb24gZWFjaCBpdGVyYXRpb25cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVxdWlyZS5jYWNoZVtyZXF1aXJlLnJlc29sdmUoc2NyaXB0UGF0aCldO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZWQuIGNvdWxkIGhhcHBlbiBpZiBtb2R1bGUgaGFzbid0IGJlZW4gY2FjaGVkIHlldC5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHVzZXIgdXNlcyByZXF1aXJlKCcuL3NvbWVzY3JpcHQuanMnKSBpbiBtdWx0aXBsZSB0ZXN0IHNjcmlwdHMgKGNhc2VzKSwgYW5kIHNvbWVzY3JpcHQuanMgY29udGFpbnMgd2ViL21vYi5pbml0XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiwgd2hlbiB0aG9zZSBzY3JpcHRzIGFyZSBleGVjdXRlZCBpbiBhIHN1aXRlLCBvbmx5IGZpcnN0IGNhc2Ugd2lsbCBwYXNzLCB0aGUgcmVzdCB3aWxsIGZhaWwgd2l0aCBNT0RVTEVfTk9UX0lOSVRJQUxJWkVEIGVycm9yLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYmVjYXVzZSAncmVxdWlyZScgaXMgY2FjaGVkLCBhbmQgd2hlbiB0aGUgZmlyc3QgY2FzZSBpcyBmaW5pc2hlZCwgdGhlIG1vZHVsZSBpcyBtYXJrZWQgYXMgaXNJbml0aWFsaXplZCA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIG5vdCByZS1pbml0aWFsaXplZCBiYWNrIG9uIG5leHQgY2FzZS5cclxuICAgICAgICAgICAgICAgICAgICAvLyB0aHVzIHdlIGNsZWFuIHVzZXIgbGV2ZWwgc2NyaXB0cyBmcm9tICdyZXF1aXJlJyBjYWNoZS5cclxuICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2ViLmluaXQgYW5kIG90aGVyIG1vZHVsZXMgc2hvdWxkIGJlIHByb2JhYmx5IGZpeGVkIChwcm9wZXJseSBkaXNwb3NlZClcclxuICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiB0aGlzIG9idmlvdXNseSByZWxhdGVzIG5vdCBvbmx5IHRvIHdlYiwgZXRjIG1vZHVsZS4gdGhpcyBpcyBhIGdlbmVyYWwgaXNzdWUuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgTW9kdWxlID0gcmVxdWlyZSgnbW9kdWxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxSZXF1aXJlID0gTW9kdWxlLnByb3RvdHlwZS5yZXF1aXJlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBNb2R1bGUucHJvdG90eXBlLnJlcXVpcmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gYXJndW1lbnRzWycwJ107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnZhbGlkYXRlIGNhY2hlIG9ubHkgd2hlbiB3ZSB0cnkgdG8gbG9hZCB1c2VyLWxldmVsIHNjcmlwdHMgKHRob3NlIHN0YXJ0aW5nIHdpdGggJy4vJyBvciAnLi4vJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdCAmJiBzY3JpcHQuc3RhcnRzV2l0aCgnLicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgZXZlcnl0aGluZyB1c2VyIHJlbGF0ZWQgZnJvbSB0aGUgY2FjaGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlcXVpcmUuY2FjaGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGggJiYga2V5LnN0YXJ0c1dpdGgoY3dkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlcXVpcmUuY2FjaGVba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFJlcXVpcmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoc2NyaXB0UGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3IgPSBlLmNvZGUgJiYgZS5jb2RlID09PSAnTU9EVUxFX05PVF9GT1VORCcgPyBuZXcgU2NyaXB0Tm90Rm91bmRFcnJvcihzY3JpcHRQYXRoKSA6IGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlICYmIGUudHlwZSAmJiBlLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfUEFTU0VEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbiBzb21lIGNhc2VzIHN0ZXAgcmVzdWx0IGdlbmVyYXRpb24gdGFrZXMgc29tZSB0aW1lIHRvIG1ha2Ugc2NyZWVuc2hvdFxyXG4gICAgICAgIGF3YWl0IHRoaXMuX294eWdlbi5fd2FpdFN0ZXBSZXN1bHQoKTtcclxuXHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbW9kdWxlQ2FwcyA9IHt9O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fb3h5Z2VuICYmIHRoaXMuX294eWdlbi5nZXRNb2R1bGVzQ2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgICAgICAgIG1vZHVsZUNhcHMgPSB0aGlzLl9veHlnZW4uZ2V0TW9kdWxlc0NhcGFiaWxpdGllcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fb3h5Z2VuICYmIHRoaXMuX294eWdlbi5vbkFmdGVyQ2FzZSAmJiBhd2FpdCB0aGlzLl9veHlnZW4ub25BZnRlckNhc2UoZXJyb3IpO1xyXG5cclxuICAgICAgICAvLyBjbG9uZSB0aGUgcmVzdWx0cywgb3RoZXJ3aXNlIHJlc3VsdFN0b3JlIHdpbGwgYmUgZW1wdHkgYWZ0ZXIgdGhlIGZvbGxvd2luZyB0aGlzLl9veHlnZW4ucmVzZXRSZXN1bHRzKCkgY2FsbFxyXG5cclxuICAgICAgICBsZXQgcmVzdWx0U3RvcmUgPSB7fTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX294eWdlbiAmJiB0aGlzLl9veHlnZW4ucmVzdWx0cykge1xyXG4gICAgICAgICAgICByZXN1bHRTdG9yZSA9IHsgLi4udGhpcy5fb3h5Z2VuLnJlc3VsdHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9veHlnZW4gJiYgdGhpcy5fb3h5Z2VuLnJlc2V0UmVzdWx0cykge1xyXG4gICAgICAgICAgICAvLyByZXNldCBzdGVwcyBhbmQgb3RoZXIgcmVzdWx0IGRhdGFcclxuICAgICAgICAgICAgdGhpcy5fb3h5Z2VuLnJlc2V0UmVzdWx0cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zdGVwcyA9IG51bGw7XHJcblxyXG4gICAgICAgIGxldCBveENvbnRleHQgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5fb3h5Z2VuICYmIHRoaXMuX294eWdlbi5jb250ZXh0KSB7XHJcbiAgICAgICAgICAgIG94Q29udGV4dCA9IHRoaXMuX294eWdlbi5jb250ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBveENvbnRleHQudmFycyA9IGdsb2JhbC52YXJzO1xyXG5cclxuICAgICAgICByZXR1cm4geyBlcnJvciwgbW9kdWxlQ2FwcywgcmVzdWx0U3RvcmUsIGNvbnRleHQ6IG94Q29udGV4dCB9O1xyXG4gICAgfVxyXG4gICAgLypcclxuICAgICAqIERpc3Bvc2UgT3h5Z2VuIGVuZ2luZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICBpZiAodGhpcy5fb3h5Z2VuKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9veHlnZW4uZGlzcG9zZShzdGF0dXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkaXNwb3NlIE94eWdlbicsIG51bGwsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RlcHMgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgc3RhcnRTZXNzaW9uKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlbmRTZXNzaW9uKHN0YXR1cyA9IG51bGwsIGRpc3Bvc2VNb2R1bGVzID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9veHlnZW4pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChkaXNwb3NlTW9kdWxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX294eWdlbi5kaXNwb3NlTW9kdWxlcyhzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkaXNwb3NlIE94eWdlbiBtb2R1bGVzJywgbnVsbCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9veHlnZW4ucmVzZXRSZXN1bHRzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2FsbFRlc3RIb29rKGhvb2tOYW1lLCBob29rQXJncykge1xyXG4gICAgICAgIGlmICghdGhpcy5fdGVzdEhvb2tzIHx8ICF0aGlzLl90ZXN0SG9va3NbaG9va05hbWVdIHx8IHR5cGVvZiB0aGlzLl90ZXN0SG9va3NbaG9va05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSG9vayBkb2VzIG5vdCBleGlzdDogJHtob29rTmFtZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgb3h1dGlsLmV4ZWN1dGVUZXN0SG9vayh0aGlzLl90ZXN0SG9va3MsIGhvb2tOYW1lLCBob29rQXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3J1bkZuSW5GaWJlckNvbnRleHQgKGZuKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IEZpYmVyKCgpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZuLmFwcGx5KHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5ydW4oKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVwbFN0YXJ0KCkge1xyXG4gICAgICAgIGxldCBjb21tYW5kUmVzb2x2ZSA9ICgpID0+IHsgfTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX294eWdlbiAmJiB0aGlzLl9veHlnZW4ubW9kdWxlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX294eWdlbi5tb2R1bGVzKTtcclxuICAgICAgICAgICAgICAgIGxldCBkZWJ1ZztcclxuICAgICAgICAgICAgICAgIGtleXMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZHJpdmVyID0gdGhpcy5fb3h5Z2VuLm1vZHVsZXNbaXRlbV1bJ2dldERyaXZlciddICYmIHRoaXMuX294eWdlbi5tb2R1bGVzW2l0ZW1dWydnZXREcml2ZXInXSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkcml2ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcgPSB0aGlzLl9veHlnZW4ubW9kdWxlc1tpdGVtXVsnZGVidWcnXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGVidWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBkZWJ1ZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRSZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRSZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb21tYW5kUmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTApO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IChjb21tYW5kUmVzb2x2ZSA9IHJlc29sdmUpKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlQmVmb3JlQ29tbWFuZChlKSB7XHJcbiAgICAgICAgaWYgKCFlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjb21tYW5kOmJlZm9yZScsIGUpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVBZnRlckNvbW1hbmQoZSkge1xyXG4gICAgICAgIGlmICghZSB8fCAhZS5yZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc3RlcHMgJiYgdGhpcy5fc3RlcHMucHVzaChlLnJlc3VsdCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjb21tYW5kOmFmdGVyJywgZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZUxvZ0VudHJ5KGUpIHtcclxuICAgICAgICBpZiAoIWUgfHwgIWUubGV2ZWwgfHwgIWUubWVzc2FnZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlICYmIGUubGV2ZWwgJiYgZS5sZXZlbCA9PT0gJ2Vycm9yJykge1xyXG4gICAgICAgICAgICB0aGlzLl9sb2dnZXJbZS5sZXZlbF0oZS5tZXNzYWdlLCBlLnNyYywgZS5lcnIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlcltlLmxldmVsXShlLm1lc3NhZ2UsIGUuc3JjKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -905,4 +905,4 @@ class OxygenRunner extends _events.EventEmitter {
|
|
|
905
905
|
}
|
|
906
906
|
|
|
907
907
|
exports.default = OxygenRunner;
|
|
908
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi9pbmRleC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJERUZBVUxUX0lTU1VFUiIsIk1BWF9SRVJVTlMiLCJ2MSIsInJlcXVpcmUiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImdldFN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVzIiwicmV0dmFsIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwibWFwIiwic3VpdGUiLCJjYXNlcyIsImNhemUiLCJicmVha3BvaW50cyIsImJyZWFrcG9pbnQiLCJwdXNoIiwicmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXMiLCJyZW1vdmVCcmVha3BvaW50IiwiaWR4IiwiZmlsZSIsImxpbmUiLCJzcGxpY2UiLCJPeHlnZW5SdW5uZXIiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJfaWQiLCJveHV0aWwiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwiX2lzUnVubmluZyIsIl9pc0luaXRpYWxpemluZyIsIl9pc0Rpc3Bvc2luZyIsIl93b3JrZXIiLCJfZGVidWdNb2RlIiwiX3dvcmtlclByb2NMYXN0RXJyb3IiLCJfbnBtR1Jvb3RFeGVjdXRpb24iLCJucG1HUm9vdEV4ZWN1dGlvbiIsIl9zdWl0ZSIsIl9lbnZWYXJzIiwiX3ZhcnMiLCJfY2FwcyIsIl9tb2RDYXBzIiwiX2F0dHJpYnV0ZXMiLCJfb3B0aW9ucyIsIl9sb2NhbFRpbWUiLCJfdGVzdEtpbGxlZCIsIl9zY3JpcHRDb250ZW50TGluZU9mZnNldCIsIl9jdXJyZW50Q2FzZVJlc3VsdElkIiwidW5kZWZpbmVkIiwiX2N1cnJlbnRTdWl0ZVJlc3VsdElkIiwiX2N1cnJlbnRTdGVwUmVzdWx0SWQiLCJfd2hlbkRpc3Bvc2VkIiwiZ2V0SWQiLCJpbml0IiwiY2FwcyIsInJlcG9ydGVyIiwiRXJyb3IiLCJfY3dkIiwiY3dkIiwicHJvY2VzcyIsIl9yZXBvcnRlciIsIl9pc0luaXRpYWxpemVkIiwib3B0RW52IiwiZW52IiwiZW52cyIsIk9iamVjdCIsImtleXMiLCJlbnZWYXJzIiwiX2VudiIsInRlc3RBdHRyaWJ1dGVzIiwiX3N1aXRlcyIsImRlYnVnUG9ydElkZSIsImRlYnVnUG9ydCIsIl9kZWJ1Z1BvcnQiLCJzY3JpcHRDb250ZW50TGluZU9mZnNldCIsImxvY2FsVGltZSIsIl9zdGFydFdvcmtlclByb2Nlc3MiLCJfd29ya2VyX0luaXRPeHlnZW4iLCJkaXNwb3NlIiwic3RhdHVzIiwic3RvcERlYnVnZ2VyIiwiaXNSdW5uaW5nIiwic3RvcCIsImUiLCJjb25zb2xlIiwid2FybiIsIl9yZXNldEdsb2JhbFZhcmlhYmxlcyIsInJ1biIsIm9uUnVubmVyU3RhcnQiLCJlcnJvciIsInJlc3VsdCIsIl9ydW5UZXN0IiwiZmFpbHVyZSIsIm9uUnVubmVyRW5kIiwia2lsbCIsImRlYnVnQ29udGludWUiLCJkZWJ1Z2dlciIsImNvbnRpbnVlIiwidXBkYXRlQnJlYWtwb2ludHMiLCJmaWxlUGF0aCIsInNldEJyZWFrcG9pbnRzQWN0aXZlIiwicHJvbWlzZXMiLCJ0c0JyZWFrcG9pbnRzIiwiZ2V0QnJlYWtwb2ludHMiLCJzdWl0ZXNCcmVha3BvaW50cyIsInN1aXRlQnAiLCJpbmNsdWRlcyIsImFjdHVhbEN1cnJlbnRCcCIsInJlbW92ZUJyZWFrcG9pbnRCeVZhbHVlIiwidXNlclNldEJwIiwic2V0QnJlYWtwb2ludCIsInByb21pc2VBbGxQcm9taXNlIiwiYWxsIiwidGhlbiIsInZhbHVlIiwiZGVidWciLCJicmVha3BvaW50c0FmZXJNYW5pcHVsYXRpb25zIiwicmVwbENsb3NlIiwiX3NlbmQiLCJldmVudCIsIm5hbWUiLCJyZXBsU2VuZCIsImNtZCIsImNvbnRlbnQiLCJyZXBsU3RhcnQiLCJpbnZva2UiLCJjbGVhckJyZWFrcG9pbnQiLCJUZXN0UmVzdWx0Iiwic3RhcnRUaW1lIiwiZ2V0VGltZVN0YW1wIiwiU3RhdHVzIiwiUEFTU0VEIiwiX3dvcmtlcl9jYWxsQmVmb3JlVGVzdEhvb2siLCJzdWl0ZVJlc3VsdCIsIl9ydW5TdWl0ZSIsImVuZFRpbWUiLCJkdXJhdGlvbiIsImhhc0ZhaWxlZFN1aXRlcyIsInNvbWUiLCJzdWl0ZUl0ZXJhdGlvbnMiLCJ4IiwiRkFJTEVEIiwiZW52aXJvbm1lbnQiLCJjYXBhYmlsaXRpZXMiLCJlcnJvckhlbHBlciIsImdldEZhaWx1cmVGcm9tRXJyb3IiLCJfd29ya2VyX2NhbGxBZnRlclRlc3RIb29rIiwicGF0aCIsIml0ZXJhdGlvbkNvdW50Iiwic2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzIiwicmVSdW5PbkZhaWx1cmUiLCJyZVJ1bk9uRmFpbGVkIiwibWF4UmVydW5zIiwicmVSdW5Db3VudCIsInJlUnVuRGVsYXkiLCJzdWl0ZUl0ZXJhdGlvbiIsIm9uSXRlcmF0aW9uU3RhcnQiLCJUZXN0U3VpdGVSZXN1bHQiLCJpZCIsImdldEZpbGVOYW1lV2l0aG91dEV4dCIsInJlZklkIiwiaXRlcmF0aW9uTnVtIiwiX3dvcmtlcl9jYWxsQmVmb3JlU3VpdGVIb29rIiwib25TdWl0ZVN0YXJ0IiwiY2FzZUl0ZXJhdGlvbiIsInNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzIiwiY2FzZVJlc3VsdElkIiwib25DYXNlU3RhcnQiLCJjYXNlUmVzdWx0IiwiX3J1bkNhc2UiLCJzbGVlcCIsIm9uQ2FzZUVuZCIsIm9uSXRlcmF0aW9uRW5kIiwiV0FSTklORyIsIl93b3JrZXJfY2FsbEFmdGVyU3VpdGVIb29rIiwib25TdWl0ZUVuZCIsInBhcmFtcyIsInJlUnVuIiwicGFyYW1NYW5hZ2VyIiwicmVhZFByZXYiLCJfIiwiZXh0ZW5kIiwiZ2V0VmFsdWVzIiwiaSIsIl93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rIiwiVGVzdENhc2VSZXN1bHQiLCJsb2NhdGlvbiIsInJlYWROZXh0IiwiX3dvcmtlcl9zdGFydFNlc3Npb24iLCJyZXN1bHRTdG9yZSIsImNvbnRleHQiLCJtb2R1bGVDYXBzIiwiX3dvcmtlcl9SdW4iLCJfcHJvY2Vzc1Rlc3RSZXN1bHRzIiwic3RlcHMiLCJsb2dzIiwiaGFyIiwiYXR0cmlidXRlcyIsImF0dGFjaG1lbnRzIiwiZmFpbGVkU3RlcHMiLCJmaW5kIiwid2FybmluZ1N0ZXBzIiwiaXNFbXB0eSIsIm1ha2VUcmFuc2FjdGlvbkZhaWxlZElmU3RlcEZhaWxlZCIsIl93b3JrZXJfY2FsbEFmdGVyQ2FzZUhvb2siLCJkaXNwb3NlT3h5Z2VuTW9kdWxlcyIsImF1dG9EaXNwb3NlIiwiX3dvcmtlcl9lbmRTZXNzaW9uIiwiX3doZW5UZXN0Q2FzZUZpbmlzaGVkIiwicmVqZWN0Iiwic2NyaXB0TmFtZSIsInNjcmlwdFBhdGgiLCJ2YXJzIiwidGVzdCIsImNhc2UiLCJpdGVyYXRpb24iLCJwb0ZpbGUiLCJwbyIsImluaXRPeHlnZW4iLCJzdGFydFNlc3Npb24iLCJkaXNwb3NlTW9kdWxlcyIsImVuZFNlc3Npb24iLCJpbnZva2VUZXN0SG9vayIsIm9uTG9nRW50cnkiLCJ3b3JrZXJQYXRoIiwiam9pbiIsIl9fZGlybmFtZSIsIldvcmtlclByb2Nlc3MiLCJzdGFydCIsIl9ob29rV29ya2VyRXZlbnRzIiwic3RhcnREZWJ1Z2dlciIsIl9ob29rV29ya2VyRGVidWdnZXJFdmVudHMiLCJfdGhpcyIsInN1YnNjcmliZSIsIl9oYW5kbGVCZWZvcmVDb21tYW5kIiwiYmluZCIsIl9oYW5kbGVBZnRlckNvbW1hbmQiLCJvbiIsInBheWxvYWQiLCJleGl0RG9uZSIsImVtaXQiLCJleGl0Q29kZSIsInByb21pc2UiLCJPeHlnZW5FcnJvciIsImVycm9yQ29kZSIsIlNDUklQVF9FUlJPUiIsIm1zZyIsImxldmVsIiwiaW5mbyIsImVyciIsInRpbWUiLCJzcmMiLCJzdWl0ZUlkIiwiY2FzZUlkIiwic3RlcElkIiwic3RhY2siLCJtZXRob2QiLCJicmVha3BvaW50RGF0YSIsImJyZWFrRXJyb3IiLCJvblN0ZXBTdGFydCIsIm1vZHVsZSIsIm9uU3RlcEVuZCIsIl9lbWl0SXRlcmF0aW9uRW5kIiwidHMiLCJ0YyIsInN1aXRlSXRlcmF0aW9uTnVtIiwiY2FzZUl0ZXJhdGlvbk51bSIsImNhc2VJdGVyYXRpb25SZXN1bHQiLCJfc3RhdHVzIiwiX2VtaXRUZXN0RW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFVQTs7QUFPQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQW5CQSxNQUFNQSxHQUFHLEdBQUcscUJBQU8sY0FBUCxDQUFaO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLE1BQXZCO0FBQ0EsTUFBTUMsVUFBVSxHQUFHLENBQW5COztBQUVBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFTQyxPQUFPLENBQUMsTUFBRCxDQUF0Qjs7QUFrQkEsTUFBTUMsTUFBTSxHQUFHQyxFQUFFLElBQUksSUFBSUMsT0FBSixDQUFZQyxPQUFPLElBQUlDLFVBQVUsQ0FBQ0QsT0FBRCxFQUFVRixFQUFWLENBQWpDLENBQXJCOztBQUVBLE1BQU1JLG9CQUFvQixHQUFJQyxNQUFELElBQVk7QUFDckMsUUFBTUMsTUFBTSxHQUFHLEVBQWY7O0FBRUEsTUFDSUQsTUFBTSxJQUNORSxLQUFLLENBQUNDLE9BQU4sQ0FBY0gsTUFBZCxDQURBLElBRUFBLE1BQU0sQ0FBQ0ksTUFBUCxHQUFnQixDQUhwQixFQUlFO0FBQ0VKLElBQUFBLE1BQU0sQ0FBQ0ssR0FBUCxDQUFZQyxLQUFELElBQVc7QUFDbEIsVUFDSUEsS0FBSyxJQUNMQSxLQUFLLENBQUNDLEtBRE4sSUFFQUwsS0FBSyxDQUFDQyxPQUFOLENBQWNHLEtBQUssQ0FBQ0MsS0FBcEIsQ0FGQSxJQUdBRCxLQUFLLENBQUNDLEtBQU4sQ0FBWUgsTUFBWixHQUFxQixDQUp6QixFQUtFO0FBQ0VFLFFBQUFBLEtBQUssQ0FBQ0MsS0FBTixDQUFZRixHQUFaLENBQWlCRyxJQUFELElBQVU7QUFDdEIsY0FDSUEsSUFBSSxJQUNKQSxJQUFJLENBQUNDLFdBREwsSUFFQVAsS0FBSyxDQUFDQyxPQUFOLENBQWNLLElB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SUFEVjtBQUVIdEMsUUFBQUEsSUFBSSxFQUFFK0ksRUFBRSxDQUFDL0ksSUFGTjtBQUdIK0YsUUFBQUEsU0FBUyxFQUFFa0QsaUJBSFI7QUFJSHJILFFBQUFBLGNBQWMsRUFBRW1ILEVBQUUsQ0FBQ25IO0FBSmhCO0FBVGdCLEtBQTNCO0FBZ0JIOztBQUVEeUgsRUFBQUEsWUFBWSxDQUFDbkwsTUFBRCxFQUFTO0FBQ2pCLFNBQUtzSixJQUFMLENBQVUsVUFBVixFQUFzQnRKLE1BQXRCO0FBQ0g7O0FBcnpCa0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yICovXG4vKlxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICovXG5cbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vLi4vbGliL2xvZ2dlcic7XG5jb25zdCBsb2cgPSBsb2dnZXIoJ094eWdlblJ1bm5lcicpO1xuY29uc3QgREVGQVVMVF9JU1NVRVIgPSAndXNlcic7XG5jb25zdCBNQVhfUkVSVU5TID0gMjtcblxuY29uc3QgeyB2MSB9ID0gcmVxdWlyZSgndXVpZCcpO1xuXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IF8gIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCBUZXN0U3VpdGVSZXN1bHQgZnJvbSAnLi4vLi4vbW9kZWwvc3VpdGUtcmVzdWx0JztcbmltcG9ydCBUZXN0Q2FzZVJlc3VsdCBmcm9tICcuLi8uLi9tb2RlbC9jYXNlLXJlc3VsdCc7XG5pbXBvcnQgVGVzdFJlc3VsdCBmcm9tICcuLi8uLi9tb2RlbC90ZXN0LXJlc3VsdCc7XG5pbXBvcnQgU3RhdHVzIGZyb20gJy4uLy4uL21vZGVsL3N0YXR1cyc7XG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uLy4uL2xpYi91dGlsJztcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi8uLi9lcnJvcnMvaGVscGVyJztcbmltcG9ydCBPeHlnZW5FcnJvciBmcm9tICcuLi8uLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xuaW1wb3J0IFBhcmFtZXRlck1hbmFnZXIgZnJvbSAnLi4vLi4vbGliL3BhcmFtLW1hbmFnZXIuanMnO1xuaW1wb3J0IFdvcmtlclByb2Nlc3MgZnJvbSAnLi4vV29ya2VyUHJvY2Vzcyc7XG5cbi8vIHNub296ZSBmdW5jdGlvbiAtIGFzeW5jIHdyYXBwZXIgYXJvdW5kIHNldFRpbWVvdXQgZnVuY3Rpb25cbmNvbnN0IHNub296ZSA9IG1zID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuXG5jb25zdCBnZXRTdWl0ZXNCcmVha3BvaW50cyA9IChzdWl0ZXMpID0+IHtcbiAgICBjb25zdCByZXR2YWwgPSBbXTtcblxuICAgIGlmIChcbiAgICAgICAgc3VpdGVzICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkoc3VpdGVzKSAmJlxuICAgICAgICBzdWl0ZXMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgICBzdWl0ZXMubWFwKChzdWl0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN1aXRlICYmXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMgJiZcbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlLmNhc2VzKSAmJlxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzLm1hcCgoY2F6ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGNhemUuYnJlYWtwb2ludHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLm1hcCgoYnJlYWtwb2ludCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbC5wdXNoKGJyZWFrcG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHZhbDtcbn07XG5cbmNvbnN0IHJlbW92ZUJyZWFrcG9pbnRGcm9tU3VpdGVzID0gKHN1aXRlcywgcmVtb3ZlQnJlYWtwb2ludCkgPT4ge1xuICAgIGlmIChcbiAgICAgICAgc3VpdGVzICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkoc3VpdGVzKSAmJlxuICAgICAgICBzdWl0ZXMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgICBzdWl0ZXMubWFwKChzdWl0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN1aXRlICYmXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMgJiZcbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlLmNhc2VzKSAmJlxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzLm1hcCgoY2F6ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGNhemUuYnJlYWtwb2ludHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLm1hcCgoYnJlYWtwb2ludCwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50LmZpbGUgPT09IHJlbW92ZUJyZWFrcG9pbnQuZmlsZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50LmxpbmUgPT09IHJlbW92ZUJyZWFrcG9pbnQubGluZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE94eWdlblJ1bm5lciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICAvLyBjbGFzcyB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5faWQgPSBveHV0aWwuZ2VuZXJhdGVVbmlxdWVJZCgpO1xuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNEaXNwb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZGVidWdNb2RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3dvcmtlclByb2NMYXN0RXJyb3IgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuX25wbUdSb290RXhlY3V0aW9uID0gdHJ1ZTtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubnBtR1Jvb3RFeGVjdXRpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbiA9IG9wdGlvbnMubnBtR1Jvb3RFeGVjdXRpb247XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZWZpbmUgdmFyaWFibGVzIHRvIGl0ZXJhdGUgdGhyb3VnaCB0ZXN0IGNhc2VzIGFuZCB0ZXN0IHN1aXRlIGl0ZXJhdGlvbnNcbiAgICAgICAgdGhpcy5fc3VpdGU7XG4gICAgICAgIHRoaXMuX2VudlZhcnMgPSB7fTsgIC8vIGVudmlyb25tZW50IHZhcmlhYmxlcyBwYXNzZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGVzdFxuICAgICAgICB0aGlzLl92YXJzID0ge307ICAgICAvLyB1c2VyLWRlZmluZWQgdmFyaWFibGVzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIGRpZmZlcmVudCBzY3JpcHRzXG4gICAgICAgIHRoaXMuX2NhcHMgPSB7fTsgLy8gZGVzaXJlZCBjYXBhYmlsaXRpZXMgdGhhdCBhcmUgcGFzc2VkIHRvIGVhY2ggbW9kdWxlXG4gICAgICAgIHRoaXMuX21vZENhcHMgPSB7fTtcbiAgICAgICAgdGhpcy5fYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbG9jYWxUaW1lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Rlc3RLaWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc2NyaXB0Q29udGVudExpbmVPZmZzZXQgPSAzO1xuICAgICAgICB0aGlzLl9jdXJyZW50Q2FzZVJlc3VsdElkID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9jdXJyZW50U3VpdGVSZXN1bHRJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fY3VycmVudFN0ZXBSZXN1bHRJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gcHJvbWlzZXNcbiAgICAgICAgdGhpcy5fd2hlbkRpc3Bvc2VkID0gZGVmZXIoKTtcbiAgICB9XG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqIFB1YmxpYyBtZXRob2RzXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICBnZXRJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXQob3B0aW9ucywgY2FwcyA9IHt9LCByZXBvcnRlcikge1xuICAgICAgICAvLyBtYWtlIHN1cmUgYXQgbGVhc3Qgb25lIHRlc3Qgc3VpdGUgaXMgZGVmaW5lZFxuICAgICAgICBpZiAoIW9wdGlvbnMuc3VpdGVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luaXRpYWxpemF0aW9uIGZhaWxlZCAtIG5vIHRlc3Qgc3VpdGVzIGFyZSBkZWZpbmVkLiBZb3UgbXVzdCBkZWZpbmUgXCJzdWl0ZXNcIiBwcm9wZXJ0eSBpbiBPeHlnZW4gb3B0aW9ucy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLl9jd2QgPSB0aGlzLl9vcHRpb25zLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgICAgICB0aGlzLl9yZXBvcnRlciA9IHJlcG9ydGVyO1xuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIG1lcmdlIGN1cnJlbnQgYW5kIHRlc3QgY29uZmlndXJhdGlvbiBiYXNlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgICAgIGxldCBvcHRFbnYgPSB7fTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmVudikge1xuICAgICAgICAgICAgICAgIC8vICdlbnYnIG9wdGlvbiBtaWdodCBiZSBkZWZpbmVkIGVpdGhlciBhcyBhIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IG9yIGFzIGFuIG9iamVjdCB0aGF0IGxpc3RzIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgICAgICAgICAvLyBpZiAnZW52JyBpcyBhIHN0cmluZywgdGhlbiByZXNvbHZlIHRoZSBhY3R1YWwgdmFyaWFibGVzIGZyb20gJ2VudnMnIG9iamVjdFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5lbnYgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBvcHRpb25zLmVudnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMuZW52c1tvcHRpb25zLmVudl0pIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0RW52ID0gb3B0aW9ucy5lbnZzW29wdGlvbnMuZW52XTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiAnZW52JyBpcyBhbiBvYmplY3QsIHVzZSB0aGUgdmFyaWFibGVzIGRlZmluZWQgaW4gaXRcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5lbnYgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuZW52KSkge1xuICAgICAgICAgICAgICAgICAgICBvcHRFbnYgPSBvcHRpb25zLmVudjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmVudlZhcnMgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5lbnZWYXJzKSkge1xuICAgICAgICAgICAgICAgIG9wdEVudiA9IHsgLi4ub3B0RW52LCAuLi5vcHRpb25zLmVudlZhcnMgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgbGF0ZXIgdXNlXG4gICAgICAgICAgICB0aGlzLl9lbnYgPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZW52LFxuICAgICAgICAgICAgICAgIC4uLm9wdEVudlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuX2F0dHJpYnV0ZXMgPSBvcHRpb25zLnRlc3RBdHRyaWJ1dGVzIHx8IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FwcyA9IHsgLi4uY2FwcyB9OyAvLyBhc3NpZ24gY2FwcyBmb3IgbGF0ZXIgdXNlXG4gICAgICAgIHRoaXMuX3N1aXRlcyA9IFsgLi4ub3B0aW9ucy5zdWl0ZXMgXTtcbiAgICAgICAgLy8gc2V0IHVwIGRlYnVnZ2luZyBvcHRpb25zXG4gICAgICAgIC8vIFRPRE86IHRoaXMgbmVlZHMgdG8gYmUgcmVpbXBsZW1lbnRlZC4gRXZlcnl0aGluZyByZWxhdGVkIHRvIGRlYnVnZ2luZyAoaW5pdGlhbGl6ZURlYnVnZ2VyKSBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIE94eWdlblxuICAgICAgICAvLyBhbmQgYWRkZWQgdG8gSURFIGluc3RlYWQuIEkuZS4gdGhlIG9ubHkgdGhpbmcgb3h5Z2VuIHNob3VsZCBkbyBpcyB0byBsYXVuY2ggdGhlIGNoaWxkIHByb2Nlc3Mgd2l0aCB0aGUgZGVidWdnaW5nIHN3aXRjaC5cbiAgICAgICAgdGhpcy5fZGVidWdNb2RlID0gIG9wdGlvbnMuZGVidWdQb3J0SWRlIHx8IG9wdGlvbnMuZGVidWdQb3J0ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB0aGlzLl9kZWJ1Z1BvcnQgPSBvcHRpb25zLmRlYnVnUG9ydCB8fCBvcHRpb25zLmRlYnVnUG9ydElkZSB8fCBudWxsO1xuICAgICAgICBvcHRpb25zLnNjcmlwdENvbnRlbnRMaW5lT2Zmc2V0ID0gdGhpcy5fc2NyaXB0Q29udGVudExpbmVPZmZzZXQ7XG4gICAgICAgIHRoaXMuX2xvY2FsVGltZSA9ICh0aGlzLl9vcHRpb25zICYmIHRoaXMuX29wdGlvbnMubG9jYWxUaW1lKSB8fCB0aGlzLl9sb2NhbFRpbWU7XG4gICAgICAgIGF3YWl0IHRoaXMuX3N0YXJ0V29ya2VyUHJvY2VzcygpO1xuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfSW5pdE94eWdlbigpO1xuICAgIH1cblxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzID0gbnVsbCkge1xuICAgICAgICB0aGlzLl9pc0Rpc3Bvc2luZyA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLl93b3JrZXIgJiYgYXdhaXQgdGhpcy5fd29ya2VyLnN0b3BEZWJ1Z2dlcigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaXNSdW5uaW5nKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0b3Aoc3RhdHVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHdoZW4gZGlzcG9zaW5nIFJ1bm5lcicsIGUpO1xuICAgICAgICAgICAgLy8gaWdub3JlIGVycm9ycyBkdXJpbmcgdGhlIGRpc3Bvc2VcbiAgICAgICAgICAgIGxvZy53YXJuKCdFcnJvciB3aGVuIGRpc3Bvc2luZyBSdW5uZXI6JywgZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnQ0FOQ0VMRUQnKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNldEdsb2JhbFZhcmlhYmxlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgcnVuKCkge1xuICAgICAgICBpZiAodGhpcy5faXNJbml0aWFsaXppbmcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluaXRpYWxpemF0aW9uIGhhc24ndCBiZWVuIGNvbXBsZXRlZCB5ZXQsIHdhaXQgZm9yICdpbml0aWFsaXplZCcgZXZlbnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lzUnVubmluZykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJldmlvdXMgdGVzdCBpcyBzdGlsbCBydW5uaW5nLCB3YWl0IGZvciAndGVzdC1lbmRlZCcgZXZlbnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gdHJ1ZTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vblJ1bm5lclN0YXJ0KHRoaXMuX2lkLCB0aGlzLl9vcHRpb25zLCB0aGlzLl9jYXBzKTtcblxuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX3J1blRlc3QoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3IgPSBlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFlcnJvciAmJiByZXN1bHQgJiYgcmVzdWx0LmZhaWx1cmUpIHtcbiAgICAgICAgICAgIGVycm9yID0gcmVzdWx0LmZhaWx1cmU7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vblJ1bm5lckVuZCh0aGlzLl9pZCwgcmVzdWx0LCBlcnJvcik7XG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMga2lsbChzdGF0dXMgPSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3Rlc3RLaWxsZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmlzUnVubmluZykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmtpbGwoc3RhdHVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlYnVnQ29udGludWUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyKSB7XG4gICAgICAgICAgICB0aGlzLl93b3JrZXIuZGVidWdnZXIuY29udGludWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHVwZGF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzLCBmaWxlUGF0aCkge1xuICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBzbm9vemUoNTAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVCcmVha3BvaW50cyhicmVha3BvaW50cywgZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fZGVidWdNb2RlICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlcikge1xuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdHNCcmVha3BvaW50cyA9IHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5nZXRCcmVha3BvaW50cyhmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VpdGVzQnJlYWtwb2ludHMgPSBnZXRTdWl0ZXNCcmVha3BvaW50cyh0aGlzLl9zdWl0ZXMpO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGJyZWFrcG9pbnRzIGZyb20gc3VpdGVzL2Nhc2VzIHRyZWVcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBzdWl0ZUJwIG9mIHN1aXRlc0JyZWFrcG9pbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYnJlYWtwb2ludHMuaW5jbHVkZXMoc3VpdGVCcC5saW5lKSAmJiAgZmlsZVBhdGggPT09IHN1aXRlQnAuZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXModGhpcy5fc3VpdGVzLCBzdWl0ZUJwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBkZWxldGVkIGJyZWFrcG9pbnRzXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYWN0dWFsQ3VycmVudEJwIG9mIHRzQnJlYWtwb2ludHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFicmVha3BvaW50cy5pbmNsdWRlcyhhY3R1YWxDdXJyZW50QnApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50QnlWYWx1ZShmaWxlUGF0aCwgYWN0dWFsQ3VycmVudEJwKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBhZGQgbmV3IGJyZWFrcG9pbnRzXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdXNlclNldEJwIG9mIGJyZWFrcG9pbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdHNCcmVha3BvaW50cy5pbmNsdWRlcyh1c2VyU2V0QnApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50KGZpbGVQYXRoLCB1c2VyU2V0QnApKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlQWxsUHJvbWlzZSA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUodHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCBzbm9vemUoNTAwKTtcblxuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygndXBkYXRlQnJlYWtwb2ludHMoKSBkb25lLicpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYnJlYWtwb2ludHNBZmVyTWFuaXB1bGF0aW9ucyA9IHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5nZXRCcmVha3BvaW50cyhmaWxlUGF0aCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4geyBwcm9taXNlQWxsUHJvbWlzZSA6IHByb21pc2VBbGxQcm9taXNlLCBicmVha3BvaW50c0FmZXJNYW5pcHVsYXRpb25zIDogYnJlYWtwb2ludHNBZmVyTWFuaXB1bGF0aW9ucyB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdEZWJ1Z2dlciBlcnJvcicsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgcmVwbENsb3NlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuX3NlbmQoe1xuICAgICAgICAgICAgZXZlbnQ6ICdyZXBsJyxcbiAgICAgICAgICAgIG5hbWU6ICdyZXBsX3N0b3AnXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIHJlcGxTZW5kKGNtZCkge1xuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuX3NlbmQoe1xuICAgICAgICAgICAgZXZlbnQ6ICdyZXBsJyxcbiAgICAgICAgICAgIG5hbWU6ICdyZXBsX2V2YWwnLFxuICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAgIGNtZDogY21kXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIHJlcGxTdGFydCgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmludm9rZSgncmVwbFN0YXJ0Jyk7XG4gICAgfVxuXG4gICAgc2V0QnJlYWtwb2ludChsaW5lKSB7XG4gICAgICAgIC8qXG4gICAgICAgIGlmICh0aGlzLmRlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIHRoaXMuX3N1aXRlICYmIHRoaXMuX3N1aXRlLnRlc3RjYXNlcykge1xuICAgICAgICAgICAgY29uc3QgdGMgPSB0aGlzLl9zdWl0ZS50ZXN0Y2FzZXNbdGNpbmRleF07XG4gICAgICAgICAgICBsb2cuZGVidWcoJ294eWdlbi5zZXRCcmVha3BvaW50OiAnICsgKGxpbmUgKyB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCkpO1xuICAgICAgICAgICAgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnQodGMubmFtZSwgbGluZSArIHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0KTtcbiAgICAgICAgfSovXG4gICAgfVxuXG4gICAgY2xlYXJCcmVha3BvaW50KGxpbmUpIHtcbiAgICAgICAgLypcbiAgICAgICAgaWYgKHRoaXMuZGVidWdNb2RlICYmIHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5jbGVhckJyZWFrcG9pbnQobGluZSArIHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0LCBudWxsKTtcbiAgICAgICAgfSovXG4gICAgfVxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqIFByaXZhdGUgbWV0aG9kc1xuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBhc3luYyBfcnVuVGVzdCgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFRlc3RSZXN1bHQoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcbiAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5QQVNTRUQ7XG4gICAgICAgIHJlc3VsdC5zdWl0ZXMgPSBbXTtcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICAgICAgLy8gY2FsbCBiZWZvcmVUZXN0IGhvb2tcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxCZWZvcmVUZXN0SG9vaygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gaXRlcmF0ZSB0aHJvdWdoIHN1aXRlc1xuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgdGhpcy5fc3VpdGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VpdGVSZXN1bHQgPSBhd2FpdCB0aGlzLl9ydW5TdWl0ZShzdWl0ZSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN1aXRlcy5wdXNoKHN1aXRlUmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3IgPSBlO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xuICAgICAgICByZXN1bHQuZHVyYXRpb24gPSByZXN1bHQuZW5kVGltZSAtIHJlc3VsdC5zdGFydFRpbWU7XG5cbiAgICAgICAgY29uc3QgaGFzRmFpbGVkU3VpdGVzID0gcmVzdWx0LnN1aXRlcy5zb21lKHN1aXRlSXRlcmF0aW9ucyA9PiB7XG4gICAgICAgICAgICBpZiAoc3VpdGVJdGVyYXRpb25zICYmIEFycmF5LmlzQXJyYXkoc3VpdGVJdGVyYXRpb25zKSAmJiBzdWl0ZUl0ZXJhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdWl0ZUl0ZXJhdGlvbnMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzdWx0LnN0YXR1cyA9IGhhc0ZhaWxlZFN1aXRlcyA/IFN0YXR1cy5GQUlMRUQgOiBTdGF0dXMuUEFTU0VEO1xuICAgICAgICByZXN1bHQuZW52aXJvbm1lbnQgPSB7IC4uLnRoaXMuX2VudiB9O1xuICAgICAgICAvLyBjb21iaW5lIHRlc3QgZGVmaW5lZCBjYXBzIGFuZCBwZXIgbW9kdWxlIGNhcGFiaWxpdGllcywgdGhhdCB3ZXJlIHBhc3NlZCBieSB1c2VyIGluIGVhY2ggbW9kdWxlJ3MgaW5pdCBmdW5jdGlvblxuICAgICAgICByZXN1bHQuY2FwYWJpbGl0aWVzID0geyAuLi50aGlzLl9jYXBzLCAuLi50aGlzLl9tb2RDYXBzIH07ICAgIC8vIGFzc2lnbiBhIGNvcHkgb2YgX2NhcHMgb2JqZWN0XG4gICAgICAgIHJlc3VsdC5vcHRpb25zID0geyAuLi50aGlzLl9vcHRpb25zIH07ICAvLyBhc3NpZ24gYSBjb3B5IG9mIF9vcHRpb25zIG9iamVjdFxuXG4gICAgICAgIC8vIGlmIGVycm9yIG9jY3VyZWQsIGFkZCBpdCB0byB0aGUgc3VtbWFyeVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlc3VsdC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlcnJvcik7XG4gICAgICAgICAgICByZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEFmdGVyVGVzdEhvb2socmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBhc3luYyBfcnVuU3VpdGUoc3VpdGUpIHtcbiAgICAgICAgaWYgKCFzdWl0ZSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdzdWl0ZSBpcyBudWxsIGluIF9ydW5TdWl0ZSgpISEhJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWdub3JlIHN1aXRlIHdpdGggbWlzc2luZyBtYW5kYXRvcnkgcHJvcGVydGllc1xuICAgICAgICBpZiAoIXN1aXRlLm5hbWUgJiYgIXN1aXRlLnBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gYWx3YXlzIHNwZWNpZnkgc3VpdGUuaXRlcmF0aW9uQ291bnRcbiAgICAgICAgaWYgKCFzdWl0ZS5pdGVyYXRpb25Db3VudCkge1xuICAgICAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgICAgaWYgKHN1aXRlLml0ZXJhdGlvbkNvdW50ID4gMSkge1xuICAgICAgICAgICAgc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlUnVuT25GYWlsdXJlID0gdGhpcy5fb3B0aW9ucy5yZVJ1bk9uRmFpbGVkIHx8IGZhbHNlO1xuICAgICAgICBjb25zdCBtYXhSZXJ1bnMgPSAhcmVSdW5PbkZhaWx1cmUgPyAwIDogdGhpcy5fb3B0aW9ucy5yZVJ1bkNvdW50IHx8IE1BWF9SRVJVTlM7XG4gICAgICAgIGNvbnN0IHJlUnVuRGVsYXkgPSB0aGlzLl9vcHRpb25zLnJlUnVuRGVsYXk7XG4gICAgICAgIC8vIHNpbmdsZSBzdWl0ZSBtaWdodCBwcm9kdWNlIG11bHRpcGxlIHJlc3VsdHMsIGJhc2VkIG9uIGFtb3VudCBvZiBkZWZpbmVkIGl0ZXJhdGlvbnNcbiAgICAgICAgY29uc3Qgc3VpdGVJdGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAobGV0IHN1aXRlSXRlcmF0aW9uPTE7IHN1aXRlSXRlcmF0aW9uIDw9IHN1aXRlLml0ZXJhdGlvbkNvdW50OyBzdWl0ZUl0ZXJhdGlvbisrKSB7XG4gICAgICAgICAgICBpZiAoc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25JdGVyYXRpb25TdGFydCh0aGlzLl9pZCwgc3VpdGVJdGVyYXRpb24sICdTdWl0ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3VpdGVSZXN1bHQgPSBuZXcgVGVzdFN1aXRlUmVzdWx0KCk7XG4gICAgICAgICAgICBzdWl0ZUl0ZXJhdGlvbnMucHVzaChzdWl0ZVJlc3VsdCk7XG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5pZCA9IHRoaXMuX2N1cnJlbnRTdWl0ZVJlc3VsdElkID0gdjEoKTtcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0Lm5hbWUgPSBzdWl0ZS5uYW1lIHx8IG94dXRpbC5nZXRGaWxlTmFtZVdpdGhvdXRFeHQoc3VpdGUucGF0aCk7XG4gICAgICAgICAgICAvLyBhIHVuaXF1ZSByZWZlcmVuY2UgaWYgb2Ygc3VpdGUgZGVmaW5pdGlvblxuICAgICAgICAgICAgLy8gc3VpdGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhbmQgZGVmaW5pdGlvbiBzaG91bGQgaGF2ZSB0aGUgc2FtZSByZWZJZFxuICAgICAgICAgICAgLy8gcmVmSWQgbWlnaHQgYWxzbyBiZSBhIERCIGlkIG9mIHRoZSBzdWl0ZSBpbiB0aGUgQ0IgcGxhdGZvcm1cbiAgICAgICAgICAgIHN1aXRlUmVzdWx0LnJlZklkID0gc3VpdGUucmVmSWQgfHwgc3VpdGUuaWQgfHwgc3VpdGUubmFtZTtcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0Lml0ZXJhdGlvbk51bSA9IHN1aXRlSXRlcmF0aW9uO1xuICAgICAgICAgICAgc3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLlBBU1NFRDtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQmVmb3JlU3VpdGVIb29rKHN1aXRlKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uU3VpdGVTdGFydCh0aGlzLl9pZCwgc3VpdGVSZXN1bHQuaWQsIHN1aXRlUmVzdWx0KTtcbiAgICAgICAgICAgIGZvciAobGV0IGNhemUgb2Ygc3VpdGUuY2FzZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgY2FzZXMgd2l0aCBtaXNzaW5nIG1hbmRhdG9yeSAncGF0aCcgcHJvcGVydHkgXG4gICAgICAgICAgICAgICAgaWYgKCFjYXplLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghY2F6ZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhemUubmFtZSA9IG94dXRpbC5nZXRGaWxlTmFtZVdpdGhvdXRFeHQoY2F6ZS5wYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFjYXplLml0ZXJhdGlvbkNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhemUuaXRlcmF0aW9uQ291bnQgPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYXNlSXRlcmF0aW9uPTE7IGNhc2VJdGVyYXRpb24gPD0gY2F6ZS5pdGVyYXRpb25Db3VudDsgY2FzZUl0ZXJhdGlvbisrKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXplICYmIGNhemUuaXRlcmF0aW9uQ291bnQgJiYgY2F6ZS5pdGVyYXRpb25Db3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd0Nhc2VJdGVyYXRpb25zTWVzc2FnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uU3RhcnQodGhpcy5faWQsIGNhc2VJdGVyYXRpb24sICdDYXNlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgY2FzZSByZXN1bHQgaWRcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FzZVJlc3VsdElkID0gdGhpcy5fY3VycmVudENhc2VSZXN1bHRJZCA9IHYxKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlcG9ydCBjYXNlIHN0YXJ0IGV2ZW50XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uQ2FzZVN0YXJ0KHRoaXMuX2lkLCBzdWl0ZVJlc3VsdC5pZCwgc3VpdGVSZXN1bHQucmVmSWQsIGNhc2VSZXN1bHRJZCAvKmNhemUudXJpIHx8IGNhemUuaWQgfHwgY2F6ZS5wYXRoKi8sIGNhemUpO1xuICAgICAgICAgICAgICAgICAgICAvL2xldCByZVJ1bkNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhc2VSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJ1biBvciByZS1ydW4gdGhlIGN1cnJlbnQgdGVzdCBjYXNlXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHJlUnVuQ291bnQgPSAwOyByZVJ1bkNvdW50IDw9IG1heFJlcnVuczsgcmVSdW5Db3VudCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlUmVzdWx0ID0gYXdhaXQgdGhpcy5fcnVuQ2FzZShzdWl0ZSwgY2F6ZSwgc3VpdGVJdGVyYXRpb24sIGNhc2VJdGVyYXRpb24sIHJlUnVuQ291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCghY2FzZVJlc3VsdCB8fCBjYXNlUmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkgJiYgIXJlUnVuT25GYWlsdXJlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjYXNlUmVzdWx0ICYmIGNhc2VSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVSdW5EZWxheSAmJiByZVJ1bkNvdW50IDwgbWF4UmVydW5zIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG94dXRpbC5zbGVlcChyZVJ1bkRlbGF5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LmlkID0gY2FzZVJlc3VsdElkO1xuICAgICAgICAgICAgICAgICAgICAvLyByZXBvcnQgY2FzZSBlbmQgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25DYXNlRW5kKHRoaXMuX2lkLCBzdWl0ZVJlc3VsdC5pZCwgc3VpdGVSZXN1bHQucmVmSWQsIGNhc2VSZXN1bHRJZCwgY2FzZVJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25JdGVyYXRpb25FbmQodGhpcy5faWQsIGNhc2VSZXN1bHQsICdDYXNlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGNhc2UgcmVzdWx0IHRvIHRoZSBzdWl0ZSByZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgc3VpdGVSZXN1bHQuY2FzZXMucHVzaChjYXNlUmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGVzdCBjYXNlIGl0ZXJhdGlvbiBoYXMgZmFpbGVkLCB0aGVuIG1hcmsgdGhlIGVudGlyZSB0ZXN0IGNhc2UgYXMgZmFpbGVkLCBcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RvcCBpdGVyYXRpbmcgb3ZlciBpdCBhbmQgbW92ZSB0byB0aGUgbmV4dCB0ZXN0IGNhc2VcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNhc2VSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuV0FSTklORykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xuICAgICAgICAgICAgc3VpdGVSZXN1bHQuZHVyYXRpb24gPSBzdWl0ZVJlc3VsdC5lbmRUaW1lIC0gc3VpdGVSZXN1bHQuc3RhcnRUaW1lO1xuXG4gICAgICAgICAgICBpZiAoc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25JdGVyYXRpb25FbmQodGhpcy5faWQsIHN1aXRlUmVzdWx0LCAnU3VpdGUnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxBZnRlclN1aXRlSG9vayhzdWl0ZSwgc3VpdGVSZXN1bHQpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25TdWl0ZUVuZCh0aGlzLl9pZCwgc3VpdGVSZXN1bHQuaWQsIHN1aXRlUmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VpdGVJdGVyYXRpb25zO1xuICAgIH1cblxuICAgIGFzeW5jIF9ydW5DYXNlKHN1aXRlLCBjYXplLCBzdWl0ZUl0ZXJhdGlvbiwgY2FzZUl0ZXJhdGlvbiwgcmVSdW5Db3VudCA9IDApIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgICAgIGNvbnN0IHJlUnVuID0gcmVSdW5Db3VudCA+IDA7XG4gICAgICAgIC8vIGdldCB0ZXN0IHN1aXRlJ3MgcGFyYW1ldGVycyBpZiBkZWZpbmVkXG4gICAgICAgIC8vIGdldCB0aGVtIGZpcnN0IGFuZCB0aGVuIG92ZXJyaWRlIHdpdGggdGVzdCBjYXNlIGxldmVsIHBhcmFtZXRlcnMgaWYgZGVmaW5lZFxuICAgICAgICBpZiAoc3VpdGUucGFyYW1NYW5hZ2VyKSB7XG4gICAgICAgICAgICBpZiAocmVSdW4pIHtcbiAgICAgICAgICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIucmVhZFByZXYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF8uZXh0ZW5kKHBhcmFtcywgc3VpdGUucGFyYW1NYW5hZ2VyLmdldFZhbHVlcygpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkIHRlc3QgY2FzZSdzIG5leHQgbGluZXMgb2YgcGFyYW1ldGVycyBpZiBwYXJhbWV0ZXIgbWFuYWdlciBpcyBkZWZpbmVkXG4gICAgICAgIGlmIChjYXplLnBhcmFtTWFuYWdlcikge1xuICAgICAgICAgICAgaWYgKHJlUnVuKSB7XG4gICAgICAgICAgICAgICAgY2F6ZS5wYXJhbU1hbmFnZXIucmVhZFByZXYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF8uZXh0ZW5kKHBhcmFtcywgY2F6ZS5wYXJhbU1hbmFnZXIuZ2V0VmFsdWVzKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIGJyZWFrcG9pbnRzIGJlZm9yZSBydW5uaW5nIHRoZSBzY3JpcHQgaWYgaW4gZGVidWcgbW9kZVxuICAgICAgICBpZiAodGhpcy5fZGVidWdNb2RlICYmIHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIgJiYgY2F6ZS5icmVha3BvaW50cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgLy8gZWRpdG9yIGluZGV4IHN0YXJ0cyBmcm9tIDEsIGJ1dCB3ZSBuZWVkIHplcm8gYmFzZWQgaW5kZXhcbiAgICAgICAgICAgICAgICBsZXQgbGluZSA9IGNhemUuYnJlYWtwb2ludHNbaV0ubGluZTtcbiAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IGNhemUuYnJlYWtwb2ludHNbaV0uZmlsZTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50KGZpbGUsIGxpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQmVmb3JlQ2FzZUhvb2soY2F6ZSk7XG4gICAgICAgIGNvbnN0IGNhc2VSZXN1bHQgPSBuZXcgVGVzdENhc2VSZXN1bHQoKTtcbiAgICAgICAgY2FzZVJlc3VsdC5uYW1lID0gY2F6ZS5uYW1lO1xuICAgICAgICBjYXNlUmVzdWx0LmxvY2F0aW9uID0gY2F6ZS5wYXRoO1xuICAgICAgICBjYXNlUmVzdWx0Lml0ZXJhdGlvbk51bSA9IGNhc2VJdGVyYXRpb247XG4gICAgICAgIGNhc2VSZXN1bHQucmVSdW5Db3VudCA9IHJlUnVuQ291bnQ7XG5cbiAgICAgICAgLy8gdHJ5IHRvIGluaXRpYWxpemUgT3h5Z2VuIGFuZCBoYW5kbGUgYW55IHBvc3NpYmxlIGVycm9yXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCAoISh0aGlzLl93b3JrZXIpICYmIHRoaXMuX3dvcmtlcl9Jbml0T3h5Z2VuKCkpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl93b3JrZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignX3dvcmtlcl9Jbml0T3h5Z2VuKCkgdGhyb3duIGFuIGVycm9yOicsIGUpO1xuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGFydFRpbWUgPSBjYXNlUmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XG4gICAgICAgICAgICBjYXNlUmVzdWx0LmR1cmF0aW9uID0gMDtcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuZmFpbHVyZSA9IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZSk7XG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XG5cbiAgICAgICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIpIHtcbiAgICAgICAgICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIucmVhZE5leHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNhemUucGFyYW1NYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgY2F6ZS5wYXJhbU1hbmFnZXIucmVhZE5leHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNhc2VSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3RhcnQgbmV3IHRlc3Qgc2Vzc2lvblxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfc3RhcnRTZXNzaW9uKCk7XG4gICAgICAgIC8vIHJ1biB0aGUgdGVzdCBpbiB0aGUgd29ya2VyIHByb2Nlc3MgYW5kIGhhbmRsZSBhbnkgcG9zc2libGUgZXJyb3JcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xuICAgICAgICAgICAgY29uc3QgeyByZXN1bHRTdG9yZSwgY29udGV4dCwgbW9kdWxlQ2FwcywgZXJyb3IgfSA9IGF3YWl0IHRoaXMuX3dvcmtlcl9SdW4oc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCBwYXJhbXMpO1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc1Rlc3RSZXN1bHRzKHsgcmVzdWx0U3RvcmUsIGNvbnRleHQsIGVycm9yLCBtb2R1bGVDYXBzIH0pO1xuICAgICAgICAgICAgY2FzZVJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xuICAgICAgICAgICAgY2FzZVJlc3VsdC5kdXJhdGlvbiA9IGNhc2VSZXN1bHQuZW5kVGltZSAtIGNhc2VSZXN1bHQuc3RhcnRUaW1lO1xuICAgICAgICAgICAgY2FzZVJlc3VsdC5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RlcHMgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5zdGVwcyA/IHJlc3VsdFN0b3JlLnN0ZXBzIDogW107XG4gICAgICAgICAgICBjYXNlUmVzdWx0LmxvZ3MgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5sb2dzID8gcmVzdWx0U3RvcmUubG9ncyA6IFtdO1xuICAgICAgICAgICAgY2FzZVJlc3VsdC5oYXIgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5oYXIgPyByZXN1bHRTdG9yZS5oYXIgOiBudWxsO1xuICAgICAgICAgICAgY2FzZVJlc3VsdC50ZXN0QXR0cmlidXRlcyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmF0dHJpYnV0ZXMgPyByZXN1bHRTdG9yZS5hdHRyaWJ1dGVzIDogbnVsbDtcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuYXR0YWNobWVudHMgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5hdHRhY2htZW50cyA/IHJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzIDogbnVsbDtcblxuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHRlc3QgY2FzZSBpdGVyYXRpb24gc3RhdHVzIC0gbWFyayBpdCBhcyBmYWlsZWQgaWYgYW55IHN0ZXAgaGFzIGZhaWxlZFxuICAgICAgICAgICAgdmFyIGZhaWxlZFN0ZXBzID0gXy5maW5kKGNhc2VSZXN1bHQuc3RlcHMsIHtzdGF0dXM6IFN0YXR1cy5GQUlMRUR9KTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc3RlcHMgd2l0aCBXYXJuaW5nIHN0YXR1c1xuICAgICAgICAgICAgdmFyIHdhcm5pbmdTdGVwcyA9IF8uZmluZChjYXNlUmVzdWx0LnN0ZXBzLCB7c3RhdHVzOiBTdGF0dXMuV0FSTklOR30pO1xuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBfLmlzRW1wdHkoZmFpbGVkU3RlcHMpICYmICFlcnJvciA/IFN0YXR1cy5QQVNTRUQgOiBTdGF0dXMuRkFJTEVEO1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5mYWlsdXJlID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xuICAgICAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RlcHMgPSBveHV0aWwubWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkKGNhc2VSZXN1bHQuc3RlcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIV8uaXNFbXB0eSh3YXJuaW5nU3RlcHMpKSB7XG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuV0FSTklORztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQWZ0ZXJDYXNlSG9vayhjYXplLCBjYXNlUmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdfd29ya2VyX1J1bigpIHRocm93biBhbiBlcnJvcjonLCBlKTtcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuZmFpbHVyZSA9IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZSk7XG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XG5cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXNwb3NlT3h5Z2VuTW9kdWxlcyA9IHR5cGVvZiB0aGlzLl9vcHRpb25zLmF1dG9EaXNwb3NlICE9PSAnYm9vbGVhbicgfHwgdGhpcy5fb3B0aW9ucy5hdXRvRGlzcG9zZSA9PT0gdHJ1ZTtcbiAgICAgICAgLy8gZW5kIHNlc3Npb24gYW5kIGRpc3Bvc2UgT3h5Z2VuIG1vZHVsZXMgaWYgcmVxdWlyZWRcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2VuZFNlc3Npb24oY2FzZVJlc3VsdC5zdGF0dXMsIGRpc3Bvc2VPeHlnZW5Nb2R1bGVzKTtcblxuICAgICAgICBpZiAoc3VpdGUucGFyYW1NYW5hZ2VyKSB7XG4gICAgICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIucmVhZE5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYXplLnBhcmFtTWFuYWdlcikge1xuICAgICAgICAgICAgY2F6ZS5wYXJhbU1hbmFnZXIucmVhZE5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYXNlUmVzdWx0O1xuICAgIH1cblxuICAgIGFzeW5jIF93b3JrZXJfUnVuKHN1aXRlLCBjYXplLCBzdWl0ZUl0ZXJhdGlvbiwgY2FzZUl0ZXJhdGlvbiwgcGFyYW1zKSB7XG4gICAgICAgIGlmICghdGhpcy5fd29ya2VyKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoJ193b3JrZXIgaXMgbnVsbCBidXQgbm90IHN1cHBvc2UgdG8hJyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl93aGVuVGVzdENhc2VGaW5pc2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3doZW5UZXN0Q2FzZUZpbmlzaGVkLnJlamVjdChuZXcgRXJyb3IoJ193b3JrZXIgaXMgbnVsbCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdGFydCBydW5uaW5nIHRoZSB0ZXN0XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl93b3JrZXIucnVuKHtcbiAgICAgICAgICAgIHNjcmlwdE5hbWU6IGNhemUubmFtZSxcbiAgICAgICAgICAgIHNjcmlwdFBhdGg6IGNhemUucGF0aCxcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICBlbnY6IHRoaXMuX2VudixcbiAgICAgICAgICAgICAgICBjYXBzOiB0aGlzLl9jYXBzLFxuICAgICAgICAgICAgICAgIHZhcnM6IHRoaXMuX3ZhcnMsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogdGhpcy5fYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICB0ZXN0OiB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGNhemUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogY2FzZUl0ZXJhdGlvblxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWl0ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogc3VpdGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogc3VpdGVJdGVyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwb0ZpbGU6IHRoaXMuX29wdGlvbnMucG8gfHwgbnVsbCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgX3dvcmtlcl9Jbml0T3h5Z2VuKCkge1xuICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbml0T3h5Z2VuKHRoaXMuX2lkLCB0aGlzLl9vcHRpb25zLCB0aGlzLl9jYXBzKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgX3dvcmtlcl9zdGFydFNlc3Npb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLnN0YXJ0U2Vzc2lvbikge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0YXJ0U2Vzc2lvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgX3dvcmtlcl9lbmRTZXNzaW9uKHN0YXR1cyA9IG51bGwsIGRpc3Bvc2VNb2R1bGVzID0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5lbmRTZXNzaW9uKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZW5kU2Vzc2lvbihzdGF0dXMsIGRpc3Bvc2VNb2R1bGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEJlZm9yZVRlc3RIb29rKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlVGVzdCcsIFt0aGlzLl9pZCwgdGhpcy5fb3B0aW9ucywgdGhpcy5fY2Fwc10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYmVmb3JlVGVzdFwiIGhvb2sgZmFpbGVkOicsIGUpO1xuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImJlZm9yZVRlc3RcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEJlZm9yZVN1aXRlSG9vayhzdWl0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlU3VpdGUnLCBbc3VpdGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdcImJlZm9yZVN1aXRlXCIgaG9vayBmYWlsZWQ6JywgZSk7XG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYmVmb3JlU3VpdGVcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rKGNhemUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVDYXNlJywgW2NhemVdKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVDYXNlXCIgaG9vayBmYWlsZWQ6JywgZSk7XG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYmVmb3JlQ2FzZVwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQWZ0ZXJUZXN0SG9vayhyZXN1bHQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdhZnRlclRlc3QnLCBbdGhpcy5faWQsIHJlc3VsdF0pKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdcImFmdGVyVGVzdFwiIGhvb2sgZmFpbGVkOicsIGUpO1xuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImFmdGVyVGVzdFwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQWZ0ZXJTdWl0ZUhvb2soc3VpdGUsIHJlc3VsdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2FmdGVyU3VpdGUnLCBbc3VpdGUsIHJlc3VsdF0pKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdcImFmdGVyU3VpdGVcIiBob29rIGZhaWxlZDonLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlclN1aXRlXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBfd29ya2VyX2NhbGxBZnRlckNhc2VIb29rKGNhemUsIHJlc3VsdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2FmdGVyQ2FzZScsIFtjYXplLCByZXN1bHRdKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJhZnRlckNhc2VcIiBob29rIGZhaWxlZDonLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlckNhc2VcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIF9zdGFydFdvcmtlclByb2Nlc3MoKSB7XG4gICAgICAgIGNvbnN0IHdvcmtlclBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnd29ya2VyLmpzJyk7XG4gICAgICAgIHRoaXMuX3dvcmtlciA9IG5ldyBXb3JrZXJQcm9jZXNzKHRoaXMuX2lkLCB3b3JrZXJQYXRoLCB0aGlzLl9kZWJ1Z01vZGUsIHRoaXMuX2RlYnVnUG9ydCwgJ094eWdlbicsIHRoaXMuX25wbUdSb290RXhlY3V0aW9uKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0YXJ0KCk7XG4gICAgICAgIHRoaXMuX2hvb2tXb3JrZXJFdmVudHMoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0YXJ0RGVidWdnZXIoKTtcbiAgICAgICAgdGhpcy5faG9va1dvcmtlckRlYnVnZ2VyRXZlbnRzKCk7XG4gICAgfVxuXG4gICAgX2hvb2tXb3JrZXJFdmVudHMoKSB7XG4gICAgICAgIC8vIHByZXNlcnZlIHRoaXMgb2JqZWN0XG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5fd29ya2VyLnN1YnNjcmliZSgnY29tbWFuZDpiZWZvcmUnLCB0aGlzLl9oYW5kbGVCZWZvcmVDb21tYW5kLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLl93b3JrZXIuc3Vic2NyaWJlKCdjb21tYW5kOmFmdGVyJywgdGhpcy5faGFuZGxlQWZ0ZXJDb21tYW5kLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLl93b3JrZXIub24oJ2Vycm9yJywgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZXJyb3IgfSA9IHBheWxvYWQ7XG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1dvcmtlciBwcm9jZXNzIGVycm9yOiAnLCBlcnJvcik7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmV4aXREb25lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCd0ZXN0LWVycm9yJywgZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fd29ya2VyUHJvY0xhc3RFcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fd29ya2VyLm9uKCdleGl0JywgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXhpdERvbmUgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3QgeyBleGl0Q29kZSB9ID0gcGF5bG9hZDtcblxuICAgICAgICAgICAgaWYgKGV4aXRDb2RlICYmIGV4aXRDb2RlICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRlc3QgaXMgcnVubmluZyBvciBpcyBiZWluZyBkaXNwb3NlZCBhbmQgdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGRpZWQsXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBlbmQgdGhlIHRlc3Qgb3IgZGlzcG9zYWwgd2l0aCBmYXRhbCBlcnJvclxuICAgICAgICAgICAgICAgIC8vIChjaGlsZCBwcm9jZXNzIG5vdCBzdXBwb3NlIHRvIGRpZSB3aXRoIGNvZGUgPiAwKVxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX2lzRGlzcG9zaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBfdGhpcy5fd2hlbkRpc3Bvc2VkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5faXNSdW5uaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBfdGhpcy5fd2hlblRlc3RDYXNlRmluaXNoZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBlcnJvciA9IF90aGlzLl93b3JrZXJQcm9jTGFzdEVycm9yIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGV4aXRDb2RlID09IDEzNCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBPeHlnZW5FcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnT3V0IG9mIG1lbW9yeSBlcnJvci4gTWFrZSBzdXJlIHRoYXQgeW91IGRvblxcJ3QgaGF2ZSBhbnkgbWVtb3J5IGxlYWtzIGluIHRoZSB0ZXN0IHNjcmlwdC4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IE94eWdlbkVycm9yKGBXb3JrZXIgcHJvY2VzcyBleGl0ZWQgd2l0aCBjb2RlOiAke2V4aXRDb2RlfS5gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwcm9taXNlICYmIHByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVzZXRHbG9iYWxWYXJpYWJsZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3dvcmtlci5vbignbWVzc2FnZScsIGFzeW5jIChtc2cpID0+IHtcbiAgICAgICAgICAgIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAnbG9nJykge1xuICAgICAgICAgICAgICAgIGlmIChtc2cubGV2ZWwgPT09ICdERUJVRycpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKG1zZy5tc2cpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmxldmVsID09PSAnSU5GTycpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8obXNnLm1zZyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cubGV2ZWwgPT09ICdFUlJPUicpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKG1zZy5tc2csIG1zZy5lcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmxldmVsID09PSAnV0FSTicpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nLndhcm4obXNnLm1zZyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnbG9nJywgbXNnLnRpbWUsIG1zZy5sZXZlbCwgbXNnLm1zZywgbXNnLnNyYyB8fCBERUZBVUxUX0lTU1VFUik7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcG9ydGVyICYmIGF3YWl0IF90aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KFxuICAgICAgICAgICAgICAgICAgICBtc2cudGltZSwgbXNnLmxldmVsLCBtc2cubXNnLCBtc2cuc3JjIHx8IERFRkFVTFRfSVNTVUVSLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZUlkOiB0aGlzLl9jdXJyZW50U3VpdGVSZXN1bHRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2VJZDogdGhpcy5fY3VycmVudENhc2VSZXN1bHRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBJZDogdGhpcy5fY3VycmVudFN0ZXBSZXN1bHRJZCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAnbGluZS11cGRhdGUnKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnbGluZS11cGRhdGUnLCBtc2cubGluZSwgbXNnLnN0YWNrLCBtc2cudGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAncmVzdWx0LXVwZGF0ZScpIHtcbiAgICAgICAgICAgICAgICBpZiAobXNnLm1ldGhvZCA9PT0gJ2luaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2luaXQtZG9uZScsIG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobXNnLmV2ZW50ICYmIG1zZy5ldmVudCA9PT0gJ3dvcmtlckVycm9yJykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd3b3JrZXJFcnJvcjonLCBtc2cpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlzcG9zZSgnZmFpbGVkJyk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5raWxsKCdmYWlsZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICdyZXBsJykge1xuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ3JlcGwnLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfaG9va1dvcmtlckRlYnVnZ2VyRXZlbnRzKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3dvcmtlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIub24oJ2RlYnVnZ2VyOmJyZWFrJywgKGJyZWFrcG9pbnREYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2JyZWFrcG9pbnQnLCBicmVha3BvaW50RGF0YSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIub24oJ2RlYnVnZ2VyOmJyZWFrRXJyb3InLCAoYnJlYWtFcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdicmVha3BvaW50RXJyb3InLCBicmVha0Vycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2hhbmRsZUJlZm9yZUNvbW1hbmQoZSkge1xuICAgICAgICB0aGlzLl9jdXJyZW50U3RlcFJlc3VsdElkID0gZS5pZDtcbiAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25TdGVwU3RhcnQodGhpcy5faWQsIHRoaXMuX2N1cnJlbnRTdWl0ZVJlc3VsdElkLCB0aGlzLl9jdXJyZW50Q2FzZVJlc3VsdElkLCBlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGUgJiYgZS5tb2R1bGUgJiYgZS5tb2R1bGUgPT09ICdsb2cnKSB7XG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVDb21tYW5kJywgW2VdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVDb21tYW5kXCIgaG9vayBmYWlsZWQ6JywgZSk7XG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYmVmb3JlQ29tbWFuZFwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgX2hhbmRsZUFmdGVyQ29tbWFuZChlKSB7XG4gICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uU3RlcEVuZCh0aGlzLl9pZCwgdGhpcy5fY3VycmVudFN1aXRlUmVzdWx0SWQsIHRoaXMuX2N1cnJlbnRDYXNlUmVzdWx0SWQsIGUucmVzdWx0KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChlICYmIGUubW9kdWxlICYmIGUubW9kdWxlID09PSAnbG9nJykge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYWZ0ZXJDb21tYW5kJywgW2UucmVzdWx0XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJDb21tYW5kXCIgaG9vayBmYWlsZWQ6JywgZSk7XG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYWZ0ZXJDb21tYW5kXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3VycmVudFN0ZXBSZXN1bHRJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBfcmVzZXRHbG9iYWxWYXJpYWJsZXMoKSB7XG4gICAgICAgIHRoaXMuX21vZENhcHMgPSB7fTtcbiAgICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzRGlzcG9zaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Rlc3RLaWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fd2hlbkRpc3Bvc2VkID0gZGVmZXIoKTtcbiAgICB9XG5cbiAgICBfcHJvY2Vzc1Rlc3RSZXN1bHRzKHsgcmVzdWx0U3RvcmUsIG1vZHVsZUNhcHMsIGNvbnRleHQgPSB7fSwgZXJyb3IgPSBudWxsIH0pIHtcbiAgICAgICAgLy8gaWYgdGVzdCB3YXMga2lsbGVkIGJlZm9yZSBhbnkgcmVzdWx0cyB3ZXJlIGdlbmVyYXRlZCwgdGhlbiBqdXN0IGZpbmFsaXplIHRoZSB0ZXN0IHdpdGhvdXQgcHJvY2Vzc2luZyByZXN1bHRzXG4gICAgICAgIGlmICh0aGlzLl90ZXN0S2lsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgndGVzdC1lcnJvcicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdG9yZSAndmFycycgcGFydCBvZiB0aGUgY29udGV4dCBmb3IgYSBsYXRlciB1c2VcbiAgICAgICAgdGhpcy5fdmFycyA9IGNvbnRleHQudmFycyB8fCB0aGlzLl92YXJzO1xuICAgICAgICAvLyBzdG9yZSAnbW9kQ2FwcycgcGFydCBvZiB0aGUgY29udGV4dCBmb3IgYSBsYXRlciB1c2VcbiAgICAgICAgdGhpcy5fbW9kQ2FwcyA9IHsgLi4udGhpcy5fbW9kQ2FwcywgLi4ubW9kdWxlQ2FwcyB8fCB7fSB9O1xuICAgICAgICAvLyBjbGVhbiB1cCBjb250ZXh0IGZyb20gaW50ZXJuYWwgZWxlbWVudHMsIG5vdCBuZWVkIGluIHRoZSByZXBvcnQ6XG4gICAgICAgIC8vIHJlbW92ZSBjYXBzIGZyb20gdGhlIGNvbnRleHQgYXMgaXQgYWxyZWFkeSBhcHBlYXJzIGluIFRlc3RSZXN1bHQgbm9kZVxuICAgICAgICBpZiAoY29udGV4dC5jYXBzKVxuICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQuY2FwcztcbiAgICAgICAgLy8gcmVtb3ZlIGVudiBmcm9tIHRoZSBjb250ZXh0IGFzIGl0IGFscmVhZHkgYXBwZWFycyBpbiBUZXN0UmVzdWx0IG5vZGVcbiAgICAgICAgaWYgKGNvbnRleHQuZW52KVxuICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQuZW52O1xuICAgICAgICAvLyByZW1vdmUgdGVzdCBmcm9tIHRoZSBjb250ZXh0IGFzIGl0IGFscmVhZHkgYXBwZWFycyBpbiBUZXN0UmVzdWx0IG5vZGVcbiAgICAgICAgaWYgKGNvbnRleHQudGVzdClcbiAgICAgICAgICAgIGRlbGV0ZSBjb250ZXh0LnRlc3Q7XG4gICAgfVxuXG4gICAgX2VtaXRJdGVyYXRpb25FbmQodHMsIHRjLCBzdWl0ZUl0ZXJhdGlvbk51bSwgY2FzZUl0ZXJhdGlvbk51bSwgY2FzZUl0ZXJhdGlvblJlc3VsdCkge1xuICAgICAgICB0aGlzLmVtaXQoJ2l0ZXJhdGlvbi1lbmQnLCB7XG4gICAgICAgICAgICBzdGF0dXM6IGNhc2VJdGVyYXRpb25SZXN1bHQuX3N0YXR1cyxcbiAgICAgICAgICAgIGZhaWx1cmU6IGNhc2VJdGVyYXRpb25SZXN1bHQuZmFpbHVyZSB8fCBudWxsLFxuICAgICAgICAgICAgY2FzZToge1xuICAgICAgICAgICAgICAgIGlkOiB0Yy5pZCB8fCBudWxsLFxuICAgICAgICAgICAgICAgIG5hbWU6IHRjLm5hbWUsXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBjYXNlSXRlcmF0aW9uTnVtLFxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbkNvdW50OiB0Yy5pdGVyYXRpb25Db3VudFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN1aXRlOiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRzLmlkIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgbmFtZTogdHMubmFtZSxcbiAgICAgICAgICAgICAgICBpdGVyYXRpb246IHN1aXRlSXRlcmF0aW9uTnVtLFxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbkNvdW50OiB0cy5pdGVyYXRpb25Db3VudFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfZW1pdFRlc3RFbmQocmVzdWx0KSB7XG4gICAgICAgIHRoaXMuZW1pdCgndGVzdC1lbmQnLCByZXN1bHQpO1xuICAgIH1cblxufVxuXG5leHBvcnQgeyBQYXJhbWV0ZXJNYW5hZ2VyIH07Il19
|
|
908
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi9pbmRleC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJERUZBVUxUX0lTU1VFUiIsIk1BWF9SRVJVTlMiLCJ2MSIsInJlcXVpcmUiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImdldFN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVzIiwicmV0dmFsIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwibWFwIiwic3VpdGUiLCJjYXNlcyIsImNhemUiLCJicmVha3BvaW50cyIsImJyZWFrcG9pbnQiLCJwdXNoIiwicmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXMiLCJyZW1vdmVCcmVha3BvaW50IiwiaWR4IiwiZmlsZSIsImxpbmUiLCJzcGxpY2UiLCJPeHlnZW5SdW5uZXIiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJfaWQiLCJveHV0aWwiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwiX2lzUnVubmluZyIsIl9pc0luaXRpYWxpemluZyIsIl9pc0Rpc3Bvc2luZyIsIl93b3JrZXIiLCJfZGVidWdNb2RlIiwiX3dvcmtlclByb2NMYXN0RXJyb3IiLCJfbnBtR1Jvb3RFeGVjdXRpb24iLCJucG1HUm9vdEV4ZWN1dGlvbiIsIl9zdWl0ZSIsIl9lbnZWYXJzIiwiX3ZhcnMiLCJfY2FwcyIsIl9tb2RDYXBzIiwiX2F0dHJpYnV0ZXMiLCJfb3B0aW9ucyIsIl9sb2NhbFRpbWUiLCJfdGVzdEtpbGxlZCIsIl9zY3JpcHRDb250ZW50TGluZU9mZnNldCIsIl9jdXJyZW50Q2FzZVJlc3VsdElkIiwidW5kZWZpbmVkIiwiX2N1cnJlbnRTdWl0ZVJlc3VsdElkIiwiX2N1cnJlbnRTdGVwUmVzdWx0SWQiLCJfd2hlbkRpc3Bvc2VkIiwiZ2V0SWQiLCJpbml0IiwiY2FwcyIsInJlcG9ydGVyIiwiRXJyb3IiLCJfY3dkIiwiY3dkIiwicHJvY2VzcyIsIl9yZXBvcnRlciIsIl9pc0luaXRpYWxpemVkIiwib3B0RW52IiwiZW52IiwiZW52cyIsIk9iamVjdCIsImtleXMiLCJlbnZWYXJzIiwiX2VudiIsInRlc3RBdHRyaWJ1dGVzIiwiX3N1aXRlcyIsImRlYnVnUG9ydElkZSIsImRlYnVnUG9ydCIsIl9kZWJ1Z1BvcnQiLCJzY3JpcHRDb250ZW50TGluZU9mZnNldCIsImxvY2FsVGltZSIsIl9zdGFydFdvcmtlclByb2Nlc3MiLCJfd29ya2VyX0luaXRPeHlnZW4iLCJkaXNwb3NlIiwic3RhdHVzIiwic3RvcERlYnVnZ2VyIiwiaXNSdW5uaW5nIiwic3RvcCIsImUiLCJjb25zb2xlIiwid2FybiIsIl9yZXNldEdsb2JhbFZhcmlhYmxlcyIsInJ1biIsIm9uUnVubmVyU3RhcnQiLCJlcnJvciIsInJlc3VsdCIsIl9ydW5UZXN0IiwiZmFpbHVyZSIsIm9uUnVubmVyRW5kIiwia2lsbCIsImRlYnVnQ29udGludWUiLCJkZWJ1Z2dlciIsImNvbnRpbnVlIiwidXBkYXRlQnJlYWtwb2ludHMiLCJmaWxlUGF0aCIsInNldEJyZWFrcG9pbnRzQWN0aXZlIiwicHJvbWlzZXMiLCJ0c0JyZWFrcG9pbnRzIiwiZ2V0QnJlYWtwb2ludHMiLCJzdWl0ZXNCcmVha3BvaW50cyIsInN1aXRlQnAiLCJpbmNsdWRlcyIsImFjdHVhbEN1cnJlbnRCcCIsInJlbW92ZUJyZWFrcG9pbnRCeVZhbHVlIiwidXNlclNldEJwIiwic2V0QnJlYWtwb2ludCIsInByb21pc2VBbGxQcm9taXNlIiwiYWxsIiwidGhlbiIsInZhbHVlIiwiZGVidWciLCJicmVha3BvaW50c0FmZXJNYW5pcHVsYXRpb25zIiwicmVwbENsb3NlIiwiX3NlbmQiLCJldmVudCIsIm5hbWUiLCJyZXBsU2VuZCIsImNtZCIsImNvbnRlbnQiLCJyZXBsU3RhcnQiLCJpbnZva2UiLCJjbGVhckJyZWFrcG9pbnQiLCJUZXN0UmVzdWx0Iiwic3RhcnRUaW1lIiwiZ2V0VGltZVN0YW1wIiwiU3RhdHVzIiwiUEFTU0VEIiwiX3dvcmtlcl9jYWxsQmVmb3JlVGVzdEhvb2siLCJzdWl0ZVJlc3VsdCIsIl9ydW5TdWl0ZSIsImVuZFRpbWUiLCJkdXJhdGlvbiIsImhhc0ZhaWxlZFN1aXRlcyIsInNvbWUiLCJzdWl0ZUl0ZXJhdGlvbnMiLCJ4IiwiRkFJTEVEIiwiZW52aXJvbm1lbnQiLCJjYXBhYmlsaXRpZXMiLCJlcnJvckhlbHBlciIsImdldEZhaWx1cmVGcm9tRXJyb3IiLCJfd29ya2VyX2NhbGxBZnRlclRlc3RIb29rIiwicGF0aCIsIml0ZXJhdGlvbkNvdW50Iiwic2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzIiwicmVSdW5PbkZhaWx1cmUiLCJyZVJ1bk9uRmFpbGVkIiwibWF4UmVydW5zIiwicmVSdW5Db3VudCIsInJlUnVuRGVsYXkiLCJzdWl0ZUl0ZXJhdGlvbiIsIm9uSXRlcmF0aW9uU3RhcnQiLCJUZXN0U3VpdGVSZXN1bHQiLCJpZCIsImdldEZpbGVOYW1lV2l0aG91dEV4dCIsInJlZklkIiwiaXRlcmF0aW9uTnVtIiwiX3dvcmtlcl9jYWxsQmVmb3JlU3VpdGVIb29rIiwib25TdWl0ZVN0YXJ0IiwiY2FzZUl0ZXJhdGlvbiIsInNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzIiwiY2FzZVJlc3VsdElkIiwib25DYXNlU3RhcnQiLCJjYXNlUmVzdWx0IiwiX3J1bkNhc2UiLCJzbGVlcCIsIm9uQ2FzZUVuZCIsIm9uSXRlcmF0aW9uRW5kIiwiV0FSTklORyIsIl93b3JrZXJfY2FsbEFmdGVyU3VpdGVIb29rIiwib25TdWl0ZUVuZCIsInBhcmFtcyIsInJlUnVuIiwicGFyYW1NYW5hZ2VyIiwicmVhZFByZXYiLCJfIiwiZXh0ZW5kIiwiZ2V0VmFsdWVzIiwiaSIsIl93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rIiwiVGVzdENhc2VSZXN1bHQiLCJsb2NhdGlvbiIsInJlYWROZXh0IiwiX3dvcmtlcl9zdGFydFNlc3Npb24iLCJyZXN1bHRTdG9yZSIsImNvbnRleHQiLCJtb2R1bGVDYXBzIiwiX3dvcmtlcl9SdW4iLCJfcHJvY2Vzc1Rlc3RSZXN1bHRzIiwic3RlcHMiLCJsb2dzIiwiaGFyIiwiYXR0cmlidXRlcyIsImF0dGFjaG1lbnRzIiwiZmFpbGVkU3RlcHMiLCJmaW5kIiwid2FybmluZ1N0ZXBzIiwiaXNFbXB0eSIsIm1ha2VUcmFuc2FjdGlvbkZhaWxlZElmU3RlcEZhaWxlZCIsIl93b3JrZXJfY2FsbEFmdGVyQ2FzZUhvb2siLCJkaXNwb3NlT3h5Z2VuTW9kdWxlcyIsImF1dG9EaXNwb3NlIiwiX3dvcmtlcl9lbmRTZXNzaW9uIiwiX3doZW5UZXN0Q2FzZUZpbmlzaGVkIiwicmVqZWN0Iiwic2NyaXB0TmFtZSIsInNjcmlwdFBhdGgiLCJ2YXJzIiwidGVzdCIsImNhc2UiLCJpdGVyYXRpb24iLCJwb0ZpbGUiLCJwbyIsImluaXRPeHlnZW4iLCJzdGFydFNlc3Npb24iLCJkaXNwb3NlTW9kdWxlcyIsImVuZFNlc3Npb24iLCJpbnZva2VUZXN0SG9vayIsIm9uTG9nRW50cnkiLCJ3b3JrZXJQYXRoIiwiam9pbiIsIl9fZGlybmFtZSIsIldvcmtlclByb2Nlc3MiLCJzdGFydCIsIl9ob29rV29ya2VyRXZlbnRzIiwic3RhcnREZWJ1Z2dlciIsIl9ob29rV29ya2VyRGVidWdnZXJFdmVudHMiLCJfdGhpcyIsInN1YnNjcmliZSIsIl9oYW5kbGVCZWZvcmVDb21tYW5kIiwiYmluZCIsIl9oYW5kbGVBZnRlckNvbW1hbmQiLCJvbiIsInBheWxvYWQiLCJleGl0RG9uZSIsImVtaXQiLCJleGl0Q29kZSIsInByb21pc2UiLCJPeHlnZW5FcnJvciIsImVycm9yQ29kZSIsIlNDUklQVF9FUlJPUiIsIm1zZyIsImxldmVsIiwiaW5mbyIsImVyciIsInRpbWUiLCJzcmMiLCJzdWl0ZUlkIiwiY2FzZUlkIiwic3RlcElkIiwic3RhY2siLCJtZXRob2QiLCJicmVha3BvaW50RGF0YSIsImJyZWFrRXJyb3IiLCJvblN0ZXBTdGFydCIsIm1vZHVsZSIsIm9uU3RlcEVuZCIsIl9lbWl0SXRlcmF0aW9uRW5kIiwidHMiLCJ0YyIsInN1aXRlSXRlcmF0aW9uTnVtIiwiY2FzZUl0ZXJhdGlvbk51bSIsImNhc2VJdGVyYXRpb25SZXN1bHQiLCJfc3RhdHVzIiwiX2VtaXRUZXN0RW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFVQTs7QUFPQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQW5CQSxNQUFNQSxHQUFHLEdBQUcscUJBQU8sY0FBUCxDQUFaO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLE1BQXZCO0FBQ0EsTUFBTUMsVUFBVSxHQUFHLENBQW5COztBQUVBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFTQyxPQUFPLENBQUMsTUFBRCxDQUF0Qjs7QUFrQkEsTUFBTUMsTUFBTSxHQUFHQyxFQUFFLElBQUksSUFBSUMsT0FBSixDQUFZQyxPQUFPLElBQUlDLFVBQVUsQ0FBQ0QsT0FBRCxFQUFVRixFQUFWLENBQWpDLENBQXJCOztBQUVBLE1BQU1JLG9CQUFvQixHQUFJQyxNQUFELElBQVk7QUFDckMsUUFBTUMsTUFBTSxHQUFHLEVBQWY7O0FBRUEsTUFDSUQsTUFBTSxJQUNORSxLQUFLLENBQUNDLE9BQU4sQ0FBY0gsTUFBZCxDQURBLElBRUFBLE1BQU0sQ0FBQ0ksTUFBUCxHQUFnQixDQUhwQixFQUlFO0FBQ0VKLElBQUFBLE1BQU0sQ0FBQ0ssR0FBUCxDQUFZQyxLQUFELElBQVc7QUFDbEIsVUFDSUEsS0FBSyxJQUNMQSxLQUFLLENBQUNDLEtBRE4sSUFFQUwsS0FBSyxDQUFDQyxPQUFOLENBQWNHLEtBQUssQ0FBQ0MsS0FBcEIsQ0FGQSxJQUdBRCxLQUFLLENBQUNDLEtBQU4sQ0FBWUgsTUFBWixHQUFxQixDQUp6QixFQUtFO0FBQ0VFLFFBQUFBLEtBQUssQ0FBQ0MsS0FBTixDQUFZRixHQUFaLENBQWlCRyxJQUFELElBQVU7QUFDdEIsY0FDSUEsSUFBSSxJQUNKQSxJQUFJLENBQUNDLFdBREwsSUFFQVAsS0FBSyxDQUFDQyxPQUFOLENBQWNLLElBQUksQ0FBQ0MsV0FBbkIsQ0FGQSxJQUdBRCxJQUFJLENBQUNDLFdBQUwsQ0FBaUJMLE1BQWpCLEdBQTBCLENBSjlCLEVBS0U7QUFDRUksWUFBQUEsSUFBSSxDQUFDQyxXQUFMLENBQWlCSixHQUFqQixDQUFzQkssVUFBRCxJQUFnQjtBQUNqQ1QsY0FBQUEsTUFBTSxDQUFDVSxJQUFQLENBQVlELFVBQVo7QUFDSCxhQUZEO0FBR0g7QUFDSixTQVhEO0FBWUg7QUFDSixLQXBCRDtBQXFCSDs7QUFFRCxTQUFPVCxNQUFQO0FBQ0gsQ0FoQ0Q7O0FBa0NBLE1BQU1XLDBCQUEwQixHQUFHLENBQUNaLE1BQUQsRUFBU2EsZ0JBQVQsS0FBOEI7QUFDN0QsTUFDSWIsTUFBTSxJQUNORSxLQUFLLENBQUNDLE9BQU4sQ0FBY0gsTUFBZCxDQURBLElBRUFBLE1BQU0sQ0FBQ0ksTUFBUCxHQUFnQixDQUhwQixFQUlFO0FBQ0VKLElBQUFBLE1BQU0sQ0FBQ0ssR0FBUCxDQUFZQyxLQUFELElBQVc7QUFDbEIsVUFDSUEsS0FBSyxJQUNMQSxLQUFLLENBQUNDLEtBRE4sSUFFQUwsS0FBSyxDQUFDQyxPQUFOLENBQWNHLEtBQUssQ0FBQ0MsS0FBcEIsQ0FGQSxJQUdBRCxLQUFLLENBQUNDLEtBQU4sQ0FBWUgsTUFBWixHQUFxQixDQUp6QixFQUtFO0FBQ0VFLFFBQUFBLEtBQUssQ0FBQ0MsS0FBTixDQUFZRixHQUFaLENBQWlCRyxJQUFELElBQVU7QUFDdEIsY0FDSUEsSUFBSSxJQUNKQSxJQUFJLENBQUNDLFdBREwsSUFFQVAsS0FBSyxDQUFDQyxPQUFOLENBQWNLLElBQUksQ0FBQ0MsV0FBbkIsQ0FGQSxJQUdBRCxJQUFJLENBQUNDLFdBQUwsQ0FBaUJMLE1BQWpCLEdBQTBCLENBSjlCLEVBS0U7QUFDRUksWUFBQUEsSUFBSSxDQUFDQyxXQUFMLENBQWlCSixHQUFqQixDQUFxQixDQUFDSyxVQUFELEVBQWFJLEdBQWIsS0FBcUI7QUFDdEMsa0JBQ0lKLFVBQVUsQ0FBQ0ssSUFBWCxLQUFvQkYsZ0JBQWdCLENBQUNFLElBQXJDLElBQ0FMLFVBQVUsQ0FBQ00sSUFBWCxLQUFvQkgsZ0JBQWdCLENBQUNHLElBRnpDLEVBR0U7QUFDRVIsZ0JBQUFBLElBQUksQ0FBQ0MsV0FBTCxDQUFpQlEsTUFBakIsQ0FBd0JILEdBQXhCLEVBQTZCLENBQTdCO0FBQ0g7QUFDSixhQVBEO0FBUUg7QUFDSixTQWhCRDtBQWlCSDtBQUNKLEtBekJEO0FBMEJIO0FBQ0osQ0FqQ0Q7O0FBbUNlLE1BQU1JLFlBQU4sU0FBMkJDLG9CQUEzQixDQUF3QztBQUNuREMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVU7QUFDakI7QUFFQSxTQUFLQyxHQUFMLEdBQVdDLGNBQU9DLGdCQUFQLEVBQVg7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLEtBQWxCO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QixLQUF2QjtBQUNBLFNBQUtDLFlBQUwsR0FBb0IsS0FBcEI7QUFDQSxTQUFLQyxPQUFMLEdBQWUsSUFBZjtBQUNBLFNBQUtDLFVBQUwsR0FBa0IsS0FBbEI7QUFDQSxTQUFLQyxvQkFBTCxHQUE0QixJQUE1QjtBQUVBLFNBQUtDLGtCQUFMLEdBQTBCLElBQTFCOztBQUNBLFFBQUlWLE9BQU8sSUFBSSxPQUFPQSxPQUFPLENBQUNXLGlCQUFmLEtBQXFDLFdBQXBELEVBQWlFO0FBQzdELFdBQUtELGtCQUFMLEdBQTBCVixPQUFPLENBQUNXLGlCQUFsQztBQUNIOztBQUdELFNBQUtDLE1BQUw7QUFDQSxTQUFLQyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0EsU0FBS0MsS0FBTCxHQUFhLEVBQWI7QUFDQSxTQUFLQyxLQUFMLEdBQWEsRUFBYjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0IsRUFBaEI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLEVBQW5CO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixJQUFoQjtBQUNBLFNBQUtDLFVBQUwsR0FBa0IsS0FBbEI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLEtBQW5CO0FBQ0EsU0FBS0Msd0JBQUwsR0FBZ0MsQ0FBaEM7QUFDQSxTQUFLQyxvQkFBTCxHQUE0QkMsU0FBNUI7QUFDQSxTQUFLQyxxQkFBTCxHQUE2QkQsU0FBN0I7QUFDQSxTQUFLRSxvQkFBTCxHQUE0QkYsU0FBNUI7QUFFQSxTQUFLRyxhQUFMLEdBQXFCLGtCQUFyQjtBQUNIOztBQUlEQyxFQUFBQSxLQUFLLEdBQUc7QUFDSixXQUFPLEtBQUsxQixHQUFaO0FBQ0g7O0FBRVMsUUFBSjJCLElBQUksQ0FBQzVCLE9BQUQsRUFBVTZCLElBQUksR0FBRyxFQUFqQixFQUFxQkMsUUFBckIsRUFBK0I7QUFFckMsUUFBSSxDQUFDOUIsT0FBTyxDQUFDckIsTUFBYixFQUFxQjtBQUNqQixZQUFNLElBQUlvRCxLQUFKLENBQVUsMEdBQVYsQ0FBTjtBQUNIOztBQUVELFNBQUtiLFFBQUwsR0FBZ0JsQixPQUFoQjtBQUNBLFNBQUtnQyxJQUFMLEdBQVksS0FBS2QsUUFBTCxDQUFjZSxHQUFkLElBQXFCQyxPQUFPLENBQUNELEdBQVIsRUFBakM7QUFDQSxTQUFLRSxTQUFMLEdBQWlCTCxRQUFqQjtBQUNBLFNBQUtNLGNBQUwsR0FBc0IsSUFBdEI7O0FBQ0EsUUFBSXBDLE9BQUosRUFBYTtBQUVULFVBQUlxQyxNQUFNLEdBQUcsRUFBYjs7QUFDQSxVQUFJckMsT0FBTyxDQUFDc0MsR0FBWixFQUFpQjtBQUdiLFlBQUksT0FBT3RDLE9BQU8sQ0FBQ3NDLEdBQWYsS0FBdUIsUUFBdkIsSUFBbUMsT0FBT3RDLE9BQU8sQ0FBQ3VDLElBQWYsS0FBd0IsUUFBM0QsSUFBdUV2QyxPQUFPLENBQUN1QyxJQUFSLENBQWF2QyxPQUFPLENBQUNzQyxHQUFyQixDQUEzRSxFQUFzRztBQUNsR0QsVUFBQUEsTUFBTSxHQUFHckMsT0FBTyxDQUFDdUMsSUFBUixDQUFhdkMsT0FBTyxDQUFDc0MsR0FBckIsQ0FBVDtBQUVILFNBSEQsTUFLSyxJQUFJLE9BQU90QyxPQUFPLENBQUNzQyxHQUFmLEtBQXVCLFFBQXZCLElBQW1DRSxNQUFNLENBQUNDLElBQVAsQ0FBWXpDLE9BQU8sQ0FBQ3NDLEdBQXBCLENBQXZDLEVBQWlFO0FBQ2xFRCxZQUFBQSxNQUFNLEdBQUdyQyxPQUFPLENBQUNzQyxHQUFqQjtBQUNIO0FBQ0o7O0FBRUQsVUFBSXRDLE9BQU8sQ0FBQzBDLE9BQVIsSUFBbUJGLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZekMsT0FBTyxDQUFDMEMsT0FBcEIsQ0FBdkIsRUFBcUQ7QUFDakRMLFFBQUFBLE1BQU0sR0FBRyxFQUFFLEdBQUdBLE1BQUw7QUFBYSxhQUFHckMsT0FBTyxDQUFDMEM7QUFBeEIsU0FBVDtBQUNIOztBQUdELFdBQUtDLElBQUwsR0FBWSxFQUNSLEdBQUcsS0FBS0EsSUFEQTtBQUVSLFdBQUdOO0FBRkssT0FBWjtBQUlBLFdBQUtwQixXQUFMLEdBQW1CakIsT0FBTyxDQUFDNEMsY0FBUixJQUEwQixFQUE3QztBQUNIOztBQUVELFNBQUs3QixLQUFMLEdBQWEsRUFBRSxHQUFHYztBQUFMLEtBQWI7QUFDQSxTQUFLZ0IsT0FBTCxHQUFlLENBQUUsR0FBRzdDLE9BQU8sQ0FBQ3JCLE1BQWIsQ0FBZjtBQUlBLFNBQUs2QixVQUFMLEdBQW1CUixPQUFPLENBQUM4QyxZQUFSLElBQXdCOUMsT0FBTyxDQUFDK0MsU0FBaEMsR0FBNEMsSUFBNUMsR0FBbUQsS0FBdEU7QUFDQSxTQUFLQyxVQUFMLEdBQWtCaEQsT0FBTyxDQUFDK0MsU0FBUixJQUFxQi9DLE9BQU8sQ0FBQzhDLFlBQTdCLElBQTZDLElBQS9EO0FBQ0E5QyxJQUFBQSxPQUFPLENBQUNpRCx1QkFBUixHQUFrQyxLQUFLNUIsd0JBQXZDO0FBQ0EsU0FBS0YsVUFBTCxHQUFtQixLQUFLRCxRQUFMLElBQWlCLEtBQUtBLFFBQUwsQ0FBY2dDLFNBQWhDLElBQThDLEtBQUsvQixVQUFyRTtBQUNBLFVBQU0sS0FBS2dDLG1CQUFMLEVBQU47QUFDQSxVQUFNLEtBQUtDLGtCQUFMLEVBQU47QUFDSDs7QUFFWSxRQUFQQyxPQUFPLENBQUNDLE1BQU0sR0FBRyxJQUFWLEVBQWdCO0FBQ3pCLFNBQUtoRCxZQUFMLEdBQW9CLElBQXBCOztBQUNBLFFBQUk7QUFDQSxXQUFLQyxPQUFMLEtBQWdCLE1BQU0sS0FBS0EsT0FBTCxDQUFhZ0QsWUFBYixFQUF0Qjs7QUFDQSxVQUFJLEtBQUtoRCxPQUFMLElBQWdCLEtBQUtBLE9BQUwsQ0FBYWlELFNBQWpDLEVBQTRDO0FBQ3hDLGNBQU0sS0FBS2pELE9BQUwsQ0FBYWtELElBQWIsQ0FBa0JILE1BQWxCLENBQU47QUFDSDtBQUNKLEtBTEQsQ0FLRSxPQUFPSSxDQUFQLEVBQVU7QUFDUkMsTUFBQUEsT0FBTyxDQUFDM0YsR0FBUixDQUFZLDZCQUFaLEVBQTJDMEYsQ0FBM0M7QUFFQTFGLE1BQUFBLEdBQUcsQ0FBQzRGLElBQUosQ0FBUyw4QkFBVCxFQUF5Q0YsQ0FBekM7QUFDSDs7QUFFRCxRQUFJSixNQUFNLEtBQUssVUFBZixFQUEyQjtBQUN2QixXQUFLTyxxQkFBTDtBQUNIO0FBQ0o7O0FBRVEsUUFBSEMsR0FBRyxHQUFHO0FBQ1IsUUFBSSxLQUFLekQsZUFBVCxFQUEwQjtBQUN0QixZQUFNLElBQUkwQixLQUFKLENBQVUsd0VBQVYsQ0FBTjtBQUNIOztBQUNELFFBQUksS0FBSzNCLFVBQVQsRUFBcUI7QUFDakIsWUFBTSxJQUFJMkIsS0FBSixDQUFVLDZEQUFWLENBQU47QUFDSDs7QUFDRCxTQUFLM0IsVUFBTCxHQUFrQixJQUFsQjtBQUVBLFVBQU0sS0FBSytCLFNBQUwsQ0FBZTRCLGFBQWYsQ0FBNkIsS0FBSzlELEdBQWxDLEVBQXVDLEtBQUtpQixRQUE1QyxFQUFzRCxLQUFLSCxLQUEzRCxDQUFOO0FBRUEsUUFBSWlELEtBQUssR0FBRyxJQUFaO0FBQ0EsUUFBSUMsTUFBTSxHQUFHLElBQWI7O0FBQ0EsUUFBSTtBQUNBQSxNQUFBQSxNQUFNLEdBQUcsTUFBTSxLQUFLQyxRQUFMLEVBQWY7QUFDSCxLQUZELENBR0EsT0FBT1IsQ0FBUCxFQUFVO0FBQ05NLE1BQUFBLEtBQUssR0FBR04sQ0FBUjtBQUNIOztBQUVELFFBQUksQ0FBQ00sS0FBRCxJQUFVQyxNQUFWLElBQW9CQSxNQUFNLENBQUNFLE9BQS9CLEVBQXdDO0FBQ3BDSCxNQUFBQSxLQUFLLEdBQUdDLE1BQU0sQ0FBQ0UsT0FBZjtBQUNIOztBQUVELFVBQU0sS0FBS2hDLFNBQUwsQ0FBZWlDLFdBQWYsQ0FBMkIsS0FBS25FLEdBQWhDLEVBQXFDZ0UsTUFBckMsRUFBNkNELEtBQTdDLENBQU47QUFDQSxTQUFLNUQsVUFBTCxHQUFrQixLQUFsQjs7QUFDQSxRQUFJNEQsS0FBSixFQUFXO0FBQ1AsWUFBTUEsS0FBTjtBQUNIOztBQUNELFdBQU9DLE1BQVA7QUFDSDs7QUFFUyxRQUFKSSxJQUFJLENBQUNmLE1BQU0sR0FBRyxJQUFWLEVBQWdCO0FBQ3RCLFNBQUtsQyxXQUFMLEdBQW1CLElBQW5COztBQUVBLFFBQUksS0FBS2IsT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWFpRCxTQUFqQyxFQUE0QztBQUN4QyxZQUFNLEtBQUtqRCxPQUFMLENBQWE4RCxJQUFiLENBQWtCZixNQUFsQixDQUFOO0FBQ0g7QUFDSjs7QUFFRGdCLEVBQUFBLGFBQWEsR0FBRztBQUNaLFFBQUksS0FBSzlELFVBQUwsSUFBbUIsS0FBS0QsT0FBNUIsRUFBcUM7QUFDakMsV0FBS0EsT0FBTCxDQUFhZ0UsUUFBYixDQUFzQkMsUUFBdEI7QUFDSDtBQUNKOztBQUVzQixRQUFqQkMsaUJBQWlCLENBQUNyRixXQUFELEVBQWNzRixRQUFkLEVBQXdCO0FBQzNDLFFBQUk7QUFFQSxVQUFJLEtBQUtuRSxPQUFMLElBQWdCLEtBQUtBLE9BQUwsQ0FBYWdFLFFBQTdCLElBQXlDLEtBQUtoRSxPQUFMLENBQWFnRSxRQUFiLENBQXNCSSxvQkFBbkUsRUFBeUY7QUFDckYsY0FBTSxLQUFLcEUsT0FBTCxDQUFhZ0UsUUFBYixDQUFzQkksb0JBQXRCLENBQTJDLEtBQTNDLENBQU47QUFDSCxPQUZELE1BRU87QUFDSCxjQUFNdEcsTUFBTSxDQUFDLEdBQUQsQ0FBWjtBQUNBLGVBQU8sTUFBTSxLQUFLb0csaUJBQUwsQ0FBdUJyRixXQUF2QixFQUFvQ3NGLFFBQXBDLENBQWI7QUFDSDs7QUFFRCxVQUFJLEtBQUtsRSxVQUFMLElBQW1CLEtBQUtELE9BQUwsQ0FBYWdFLFFBQXBDLEVBQThDO0FBQzFDLFlBQUlLLFFBQVEsR0FBRyxFQUFmOztBQUVBLGNBQU1DLGFBQWEsR0FBRyxLQUFLdEUsT0FBTCxDQUFhZ0UsUUFBYixDQUFzQk8sY0FBdEIsQ0FBcUNKLFFBQXJDLENBQXRCOztBQUNBLGNBQU1LLGlCQUFpQixHQUFHckcsb0JBQW9CLENBQUMsS0FBS21FLE9BQU4sQ0FBOUM7O0FBR0EsYUFBSyxJQUFJbUMsT0FBVCxJQUFvQkQsaUJBQXBCLEVBQXVDO0FBQ25DLGNBQUksQ0FBQzNGLFdBQVcsQ0FBQzZGLFFBQVosQ0FBcUJELE9BQU8sQ0FBQ3JGLElBQTdCLENBQUQsSUFBd0MrRSxRQUFRLEtBQUtNLE9BQU8sQ0FBQ3RGLElBQWpFLEVBQXVFO0FBQ25FSCxZQUFBQSwwQkFBMEIsQ0FBQyxLQUFLc0QsT0FBTixFQUFlbUMsT0FBZixDQUExQjtBQUNIO0FBQ0o7O0FBR0QsYUFBSyxJQUFJRSxlQUFULElBQTRCTCxhQUE1QixFQUEyQztBQUN2QyxjQUFJLENBQUN6RixXQUFXLENBQUM2RixRQUFaLENBQXFCQyxlQUFyQixDQUFMLEVBQTRDO0FBQ3hDTixZQUFBQSxRQUFRLENBQUN0RixJQUFULENBQWMsS0FBS2lCLE9BQUwsQ0FBYWdFLFFBQWIsQ0FBc0JZLHVCQUF0QixDQUE4Q1QsUUFBOUMsRUFBd0RRLGVBQXhELENBQWQ7QUFDSDtBQUNKOztBQUdELGFBQUssSUFBSUUsU0FBVCxJQUFzQmhHLFdBQXRCLEVBQW1DO0FBQy9CLGNBQUksQ0FBQ3lGLGFBQWEsQ0FBQ0ksUUFBZCxDQUF1QkcsU0FBdkIsQ0FBTCxFQUF3QztBQUNwQ1IsWUFBQUEsUUFBUSxDQUFDdEYsSUFBVCxDQUFjLEtBQUtpQixPQUFMLENBQWFnRSxRQUFiLENBQXNCYyxhQUF0QixDQUFvQ1gsUUFBcEMsRUFBOENVLFNBQTlDLENBQWQ7QUFDSDtBQUNKOztBQUVELFlBQUlFLGlCQUFpQixHQUFHLE1BQU0vRyxPQUFPLENBQUNnSCxHQUFSLENBQVlYLFFBQVosRUFBc0JZLElBQXRCLENBQTRCQyxLQUFELElBQVc7QUFDaEUsaUJBQU9BLEtBQVA7QUFDSCxTQUY2QixDQUE5QjtBQUlBLGNBQU0sS0FBS2xGLE9BQUwsQ0FBYWdFLFFBQWIsQ0FBc0JJLG9CQUF0QixDQUEyQyxJQUEzQyxDQUFOO0FBRUEsY0FBTXRHLE1BQU0sQ0FBQyxHQUFELENBQVo7QUFFQUwsUUFBQUEsR0FBRyxDQUFDMEgsS0FBSixDQUFVLDJCQUFWOztBQUVBLGNBQU1DLDRCQUE0QixHQUFHLEtBQUtwRixPQUFMLENBQWFnRSxRQUFiLENBQXNCTyxjQUF0QixDQUFxQ0osUUFBckMsQ0FBckM7O0FBRUEsZUFBTztBQUFFWSxVQUFBQSxpQkFBaUIsRUFBR0EsaUJBQXRCO0FBQXlDSyxVQUFBQSw0QkFBNEIsRUFBR0E7QUFBeEUsU0FBUDtBQUNILE9BeENELE1Bd0NPO0FBQ0gsZUFBTyxJQUFQO0FBQ0g7QUFDSixLQXBERCxDQW9ERSxPQUFPakMsQ0FBUCxFQUFVO0FBQ1IxRixNQUFBQSxHQUFHLENBQUNnRyxLQUFKLENBQVUsZ0JBQVYsRUFBNEJOLENBQTVCO0FBQ0g7QUFDSjs7QUFFYyxRQUFUa0MsU0FBUyxHQUFHO0FBQ2QsVUFBTSxLQUFLckYsT0FBTCxDQUFhc0YsS0FBYixDQUFtQjtBQUNyQkMsTUFBQUEsS0FBSyxFQUFFLE1BRGM7QUFFckJDLE1BQUFBLElBQUksRUFBRTtBQUZlLEtBQW5CLENBQU47QUFJSDs7QUFFYSxRQUFSQyxRQUFRLENBQUNDLEdBQUQsRUFBTTtBQUNoQixVQUFNLEtBQUsxRixPQUFMLENBQWFzRixLQUFiLENBQW1CO0FBQ3JCQyxNQUFBQSxLQUFLLEVBQUUsTUFEYztBQUVyQkMsTUFBQUEsSUFBSSxFQUFFLFdBRmU7QUFHckJHLE1BQUFBLE9BQU8sRUFBRTtBQUNMRCxRQUFBQSxHQUFHLEVBQUVBO0FBREE7QUFIWSxLQUFuQixDQUFOO0FBT0g7O0FBRWMsUUFBVEUsU0FBUyxHQUFHO0FBQ2QsVUFBTSxLQUFLNUYsT0FBTCxDQUFhNkYsTUFBYixDQUFvQixXQUFwQixDQUFOO0FBQ0g7O0FBRURmLEVBQUFBLGFBQWEsQ0FBQzFGLElBQUQsRUFBTyxDQU9uQjs7QUFFRDBHLEVBQUFBLGVBQWUsQ0FBQzFHLElBQUQsRUFBTyxDQUtyQjs7QUFNYSxRQUFSdUUsUUFBUSxHQUFHO0FBQ2IsVUFBTUQsTUFBTSxHQUFHLElBQUlxQyxtQkFBSixFQUFmO0FBQ0FyQyxJQUFBQSxNQUFNLENBQUNzQyxTQUFQLEdBQW1CckcsY0FBT3NHLFlBQVAsRUFBbkI7QUFDQXZDLElBQUFBLE1BQU0sQ0FBQ1gsTUFBUCxHQUFnQm1ELGdCQUFPQyxNQUF2QjtBQUNBekMsSUFBQUEsTUFBTSxDQUFDdEYsTUFBUCxHQUFnQixFQUFoQjtBQUNBLFFBQUlxRixLQUFLLEdBQUcsSUFBWjtBQUVBLFVBQU0sS0FBSzJDLDBCQUFMLEVBQU47O0FBQ0EsUUFBSTtBQUVBLFdBQUssSUFBSTFILEtBQVQsSUFBa0IsS0FBSzRELE9BQXZCLEVBQWdDO0FBQzVCLGNBQU0rRCxXQUFXLEdBQUcsTUFBTSxLQUFLQyxTQUFMLENBQWU1SCxLQUFmLENBQTFCO0FBQ0FnRixRQUFBQSxNQUFNLENBQUN0RixNQUFQLENBQWNXLElBQWQsQ0FBbUJzSCxXQUFuQjtBQUNIO0FBQ0osS0FORCxDQU9BLE9BQU9sRCxDQUFQLEVBQVU7QUFDTk0sTUFBQUEsS0FBSyxHQUFHTixDQUFSO0FBQ0g7O0FBQ0RPLElBQUFBLE1BQU0sQ0FBQzZDLE9BQVAsR0FBaUI1RyxjQUFPc0csWUFBUCxFQUFqQjtBQUNBdkMsSUFBQUEsTUFBTSxDQUFDOEMsUUFBUCxHQUFrQjlDLE1BQU0sQ0FBQzZDLE9BQVAsR0FBaUI3QyxNQUFNLENBQUNzQyxTQUExQztBQUVBLFVBQU1TLGVBQWUsR0FBRy9DLE1BQU0sQ0FBQ3RGLE1BQVAsQ0FBY3NJLElBQWQsQ0FBbUJDLGVBQWUsSUFBSTtBQUMxRCxVQUFJQSxlQUFlLElBQUlySSxLQUFLLENBQUNDLE9BQU4sQ0FBY29JLGVBQWQsQ0FBbkIsSUFBcURBLGVBQWUsQ0FBQ25JLE1BQWhCLEdBQXlCLENBQWxGLEVBQXFGO0FBQ2pGLGVBQU9tSSxlQUFlLENBQUNELElBQWhCLENBQXFCRSxDQUFDLElBQUlBLENBQUMsQ0FBQzdELE1BQUYsS0FBYW1ELGdCQUFPVyxNQUE5QyxDQUFQO0FBQ0g7QUFDSixLQUp1QixDQUF4QjtBQU1BbkQsSUFBQUEsTUFBTSxDQUFDWCxNQUFQLEdBQWdCMEQsZUFBZSxHQUFHUCxnQkFBT1csTUFBVixHQUFtQlgsZ0JBQU9DLE1BQXpEO0FBQ0F6QyxJQUFBQSxNQUFNLENBQUNvRCxXQUFQLEdBQXFCLEVBQUUsR0FBRyxLQUFLMUU7QUFBVixLQUFyQjtBQUVBc0IsSUFBQUEsTUFBTSxDQUFDcUQsWUFBUCxHQUFzQixFQUFFLEdBQUcsS0FBS3ZHLEtBQVY7QUFBaUIsU0FBRyxLQUFLQztBQUF6QixLQUF0QjtBQUNBaUQsSUFBQUEsTUFBTSxDQUFDakUsT0FBUCxHQUFpQixFQUFFLEdBQUcsS0FBS2tCO0FBQVYsS0FBakI7O0FBR0EsUUFBSThDLEtBQUosRUFBVztBQUNQQyxNQUFBQSxNQUFNLENBQUNFLE9BQVAsR0FBaUJvRCxnQkFBWUMsbUJBQVosQ0FBZ0N4RCxLQUFoQyxDQUFqQjtBQUNBQyxNQUFBQSxNQUFNLENBQUNYLE1BQVAsR0FBZ0JtRCxnQkFBT1csTUFBdkI7QUFDSDs7QUFDRCxVQUFNLEtBQUtLLHlCQUFMLENBQStCeEQsTUFBL0IsQ0FBTjtBQUNBLFdBQU9BLE1BQVA7QUFDSDs7QUFFYyxRQUFUNEMsU0FBUyxDQUFDNUgsS0FBRCxFQUFRO0FBQ25CLFFBQUksQ0FBQ0EsS0FBTCxFQUFZO0FBQ1JqQixNQUFBQSxHQUFHLENBQUNnRyxLQUFKLENBQVUsaUNBQVY7QUFDSDs7QUFFRCxRQUFJLENBQUMvRSxLQUFLLENBQUM4RyxJQUFQLElBQWUsQ0FBQzlHLEtBQUssQ0FBQ3lJLElBQTFCLEVBQWdDO0FBQzVCLGFBQU8sRUFBUDtBQUNIOztBQUVELFFBQUksQ0FBQ3pJLEtBQUssQ0FBQzBJLGNBQVgsRUFBMkI7QUFDdkIxSSxNQUFBQSxLQUFLLENBQUMwSSxjQUFOLEdBQXVCLENBQXZCO0FBQ0g7O0FBQ0QsUUFBSUMsMkJBQTJCLEdBQUcsS0FBbEM7O0FBQ0EsUUFBSTNJLEtBQUssQ0FBQzBJLGNBQU4sR0FBdUIsQ0FBM0IsRUFBOEI7QUFDMUJDLE1BQUFBLDJCQUEyQixHQUFHLElBQTlCO0FBQ0g7O0FBRUQsVUFBTUMsY0FBYyxHQUFHLEtBQUszRyxRQUFMLENBQWM0RyxhQUFkLElBQStCLEtBQXREO0FBQ0EsVUFBTUMsU0FBUyxHQUFHLENBQUNGLGNBQUQsR0FBa0IsQ0FBbEIsR0FBc0IsS0FBSzNHLFFBQUwsQ0FBYzhHLFVBQWQsSUFBNEI5SixVQUFwRTtBQUNBLFVBQU0rSixVQUFVLEdBQUcsS0FBSy9HLFFBQUwsQ0FBYytHLFVBQWpDO0FBRUEsVUFBTWYsZUFBZSxHQUFHLEVBQXhCOztBQUNBLFNBQUssSUFBSWdCLGNBQWMsR0FBQyxDQUF4QixFQUEyQkEsY0FBYyxJQUFJakosS0FBSyxDQUFDMEksY0FBbkQsRUFBbUVPLGNBQWMsRUFBakYsRUFBcUY7QUFDakYsVUFBSU4sMkJBQUosRUFBaUM7QUFDN0IsY0FBTSxLQUFLekYsU0FBTCxDQUFlZ0csZ0JBQWYsQ0FBZ0MsS0FBS2xJLEdBQXJDLEVBQTBDaUksY0FBMUMsRUFBMEQsT0FBMUQsQ0FBTjtBQUNIOztBQUNELFlBQU10QixXQUFXLEdBQUcsSUFBSXdCLG9CQUFKLEVBQXBCO0FBQ0FsQixNQUFBQSxlQUFlLENBQUM1SCxJQUFoQixDQUFxQnNILFdBQXJCO0FBQ0FBLE1BQUFBLFdBQVcsQ0FBQ3lCLEVBQVosR0FBaUIsS0FBSzdHLHFCQUFMLEdBQTZCckQsRUFBRSxFQUFoRDtBQUNBeUksTUFBQUEsV0FBVyxDQUFDYixJQUFaLEdBQW1COUcsS0FBSyxDQUFDOEcsSUFBTixJQUFjN0YsY0FBT29JLHFCQUFQLENBQTZCckosS0FBSyxDQUFDeUksSUFBbkMsQ0FBakM7QUFJQWQsTUFBQUEsV0FBVyxDQUFDMkIsS0FBWixHQUFvQnRKLEtBQUssQ0FBQ3NKLEtBQU4sSUFBZXRKLEtBQUssQ0FBQ29KLEVBQXJCLElBQTJCcEosS0FBSyxDQUFDOEcsSUFBckQ7QUFDQWEsTUFBQUEsV0FBVyxDQUFDTCxTQUFaLEdBQXdCckcsY0FBT3NHLFlBQVAsRUFBeEI7QUFDQUksTUFBQUEsV0FBVyxDQUFDNEIsWUFBWixHQUEyQk4sY0FBM0I7QUFDQXRCLE1BQUFBLFdBQVcsQ0FBQ3RELE1BQVosR0FBcUJtRCxnQkFBT0MsTUFBNUI7QUFDQSxZQUFNLEtBQUsrQiwyQkFBTCxDQUFpQ3hKLEtBQWpDLENBQU47QUFDQSxZQUFNLEtBQUtrRCxTQUFMLENBQWV1RyxZQUFmLENBQTRCLEtBQUt6SSxHQUFqQyxFQUFzQzJHLFdBQVcsQ0FBQ3lCLEVBQWxELEVBQXNEekIsV0FBdEQsQ0FBTjs7QUFDQSxXQUFLLElBQUl6SCxJQUFULElBQWlCRixLQUFLLENBQUNDLEtBQXZCLEVBQThCO0FBRTFCLFlBQUksQ0FBQ0MsSUFBSSxDQUFDdUksSUFBVixFQUFnQjtBQUNaO0FBQ0g7O0FBQ0QsWUFBSSxDQUFDdkksSUFBSSxDQUFDNEcsSUFBVixFQUFnQjtBQUNaNUcsVUFBQUEsSUFBSSxDQUFDNEcsSUFBTCxHQUFZN0YsY0FBT29JLHFCQUFQLENBQTZCbkosSUFBSSxDQUFDdUksSUFBbEMsQ0FBWjtBQUNIOztBQUNELFlBQUksQ0FBQ3ZJLElBQUksQ0FBQ3dJLGNBQVYsRUFBMEI7QUFDdEJ4SSxVQUFBQSxJQUFJLENBQUN3SSxjQUFMLEdBQXNCLENBQXRCO0FBQ0g7O0FBQ0QsYUFBSyxJQUFJZ0IsYUFBYSxHQUFDLENBQXZCLEVBQTBCQSxhQUFhLElBQUl4SixJQUFJLENBQUN3SSxjQUFoRCxFQUFnRWdCLGFBQWEsRUFBN0UsRUFBaUY7QUFFN0UsY0FBSUMsMEJBQTBCLEdBQUcsS0FBakM7O0FBQ0EsY0FBSXpKLElBQUksSUFBSUEsSUFBSSxDQUFDd0ksY0FBYixJQUErQnhJLElBQUksQ0FBQ3dJLGNBQUwsR0FBc0IsQ0FBekQsRUFBNEQ7QUFDeERpQixZQUFBQSwwQkFBMEIsR0FBRyxJQUE3QjtBQUNIOztBQUNELGNBQUlBLDBCQUFKLEVBQWdDO0FBQzVCLGtCQUFNLEtBQUt6RyxTQUFMLENBQWVnRyxnQkFBZixDQUFnQyxLQUFLbEksR0FBckMsRUFBMEMwSSxhQUExQyxFQUF5RCxNQUF6RCxDQUFOO0FBQ0g7O0FBRUQsZ0JBQU1FLFlBQVksR0FBRyxLQUFLdkgsb0JBQUwsR0FBNEJuRCxFQUFFLEVBQW5EO0FBRUEsZ0JBQU0sS0FBS2dFLFNBQUwsQ0FBZTJHLFdBQWYsQ0FBMkIsS0FBSzdJLEdBQWhDLEVBQXFDMkcsV0FBVyxDQUFDeUIsRUFBakQsRUFBcUR6QixXQUFXLENBQUMyQixLQUFqRSxFQUF3RU0sWUFBeEUsRUFBMkgxSixJQUEzSCxDQUFOO0FBRUEsY0FBSTRKLFVBQUo7O0FBRUEsZUFBSyxJQUFJZixVQUFVLEdBQUcsQ0FBdEIsRUFBeUJBLFVBQVUsSUFBSUQsU0FBdkMsRUFBa0RDLFVBQVUsRUFBNUQsRUFBZ0U7QUFDNURlLFlBQUFBLFVBQVUsR0FBRyxNQUFNLEtBQUtDLFFBQUwsQ0FBYy9KLEtBQWQsRUFBcUJFLElBQXJCLEVBQTJCK0ksY0FBM0IsRUFBMkNTLGFBQTNDLEVBQTBEWCxVQUExRCxDQUFuQjs7QUFDQSxnQkFBSSxDQUFDLENBQUNlLFVBQUQsSUFBZUEsVUFBVSxDQUFDekYsTUFBWCxLQUFzQm1ELGdCQUFPVyxNQUE3QyxLQUF3RCxDQUFDUyxjQUE3RCxFQUE2RTtBQUN6RTtBQUNILGFBRkQsTUFHSyxJQUFJa0IsVUFBVSxJQUFJQSxVQUFVLENBQUN6RixNQUFYLEtBQXNCbUQsZ0JBQU9XLE1BQS9DLEVBQXVEO0FBQ3hEO0FBQ0g7O0FBQ0QsZ0JBQUlhLFVBQVUsSUFBSUQsVUFBVSxHQUFHRCxTQUFTLEdBQUcsQ0FBM0MsRUFBOEM7QUFDMUMsb0JBQU03SCxjQUFPK0ksS0FBUCxDQUFhaEIsVUFBYixDQUFOO0FBQ0g7QUFDSjs7QUFDRGMsVUFBQUEsVUFBVSxDQUFDVixFQUFYLEdBQWdCUSxZQUFoQjtBQUVBLGdCQUFNLEtBQUsxRyxTQUFMLENBQWUrRyxTQUFmLENBQXlCLEtBQUtqSixHQUE5QixFQUFtQzJHLFdBQVcsQ0FBQ3lCLEVBQS9DLEVBQW1EekIsV0FBVyxDQUFDMkIsS0FBL0QsRUFBc0VNLFlBQXRFLEVBQW9GRSxVQUFwRixDQUFOOztBQUNBLGNBQUlILDBCQUFKLEVBQWdDO0FBQzVCLGtCQUFNLEtBQUt6RyxTQUFMLENBQWVnSCxjQUFmLENBQThCLEtBQUtsSixHQUFuQyxFQUF3QzhJLFVBQXhDLEVBQW9ELE1BQXBELENBQU47QUFDSDs7QUFFRG5DLFVBQUFBLFdBQVcsQ0FBQzFILEtBQVosQ0FBa0JJLElBQWxCLENBQXVCeUosVUFBdkI7O0FBR0EsY0FBSUEsVUFBVSxDQUFDekYsTUFBWCxLQUFzQm1ELGdCQUFPVyxNQUFqQyxFQUF5QztBQUNyQ1IsWUFBQUEsV0FBVyxDQUFDdEQsTUFBWixHQUFxQm1ELGdCQUFPVyxNQUE1QjtBQUNILFdBRkQsTUFHSyxJQUFJMkIsVUFBVSxDQUFDekYsTUFBWCxLQUFzQm1ELGdCQUFPMkMsT0FBakMsRUFBMEM7QUFDM0N4QyxZQUFBQSxXQUFXLENBQUN0RCxNQUFaLEdBQXFCbUQsZ0JBQU8yQyxPQUE1QjtBQUNIO0FBQ0o7QUFDSjs7QUFDRHhDLE1BQUFBLFdBQVcsQ0FBQ0UsT0FBWixHQUFzQjVHLGNBQU9zRyxZQUFQLEVBQXRCO0FBQ0FJLE1BQUFBLFdBQVcsQ0FBQ0csUUFBWixHQUF1QkgsV0FBVyxDQUFDRSxPQUFaLEdBQXNCRixXQUFXLENBQUNMLFNBQXpEOztBQUVBLFVBQUlxQiwyQkFBSixFQUFpQztBQUM3QixjQUFNLEtBQUt6RixTQUFMLENBQWVnSCxjQUFmLENBQThCLEtBQUtsSixHQUFuQyxFQUF3QzJHLFdBQXhDLEVBQXFELE9BQXJELENBQU47QUFDSDs7QUFFRCxZQUFNLEtBQUt5QywwQkFBTCxDQUFnQ3BLLEtBQWhDLEVBQXVDMkgsV0FBdkMsQ0FBTjtBQUNBLFlBQU0sS0FBS3pFLFNBQUwsQ0FBZW1ILFVBQWYsQ0FBMEIsS0FBS3JKLEdBQS9CLEVBQW9DMkcsV0FBVyxDQUFDeUIsRUFBaEQsRUFBb0R6QixXQUFwRCxDQUFOO0FBQ0g7O0FBQ0QsV0FBT00sZUFBUDtBQUNIOztBQUVhLFFBQVI4QixRQUFRLENBQUMvSixLQUFELEVBQVFFLElBQVIsRUFBYytJLGNBQWQsRUFBOEJTLGFBQTlCLEVBQTZDWCxVQUFVLEdBQUcsQ0FBMUQsRUFBNkQ7QUFDdkUsVUFBTXVCLE1BQU0sR0FBRyxFQUFmO0FBQ0EsVUFBTUMsS0FBSyxHQUFHeEIsVUFBVSxHQUFHLENBQTNCOztBQUdBLFFBQUkvSSxLQUFLLENBQUN3SyxZQUFWLEVBQXdCO0FBQ3BCLFVBQUlELEtBQUosRUFBVztBQUNQdkssUUFBQUEsS0FBSyxDQUFDd0ssWUFBTixDQUFtQkMsUUFBbkI7QUFDSDs7QUFDREMsc0JBQUVDLE1BQUYsQ0FBU0wsTUFBVCxFQUFpQnRLLEtBQUssQ0FBQ3dLLFlBQU4sQ0FBbUJJLFNBQW5CLEVBQWpCO0FBQ0g7O0FBRUQsUUFBSTFLLElBQUksQ0FBQ3NLLFlBQVQsRUFBdUI7QUFDbkIsVUFBSUQsS0FBSixFQUFXO0FBQ1BySyxRQUFBQSxJQUFJLENBQUNzSyxZQUFMLENBQWtCQyxRQUFsQjtBQUNIOztBQUNEQyxzQkFBRUMsTUFBRixDQUFTTCxNQUFULEVBQWlCcEssSUFBSSxDQUFDc0ssWUFBTCxDQUFrQkksU0FBbEIsRUFBakI7QUFDSDs7QUFHRCxRQUFJLEtBQUtySixVQUFMLElBQW1CLEtBQUtELE9BQXhCLElBQW1DLEtBQUtBLE9BQUwsQ0FBYWdFLFFBQWhELElBQTREcEYsSUFBSSxDQUFDQyxXQUFyRSxFQUFrRjtBQUM5RSxXQUFLLElBQUkwSyxDQUFDLEdBQUMsQ0FBWCxFQUFjQSxDQUFDLEdBQUUzSyxJQUFJLENBQUNDLFdBQUwsQ0FBaUJMLE1BQWxDLEVBQTBDK0ssQ0FBQyxFQUEzQyxFQUErQztBQUUzQyxZQUFJbkssSUFBSSxHQUFHUixJQUFJLENBQUNDLFdBQUwsQ0FBaUIwSyxDQUFqQixFQUFvQm5LLElBQS9CO0FBQ0EsWUFBSUQsSUFBSSxHQUFHUCxJQUFJLENBQUNDLFdBQUwsQ0FBaUIwSyxDQUFqQixFQUFvQnBLLElBQS9CO0FBRUEsY0FBTSxLQUFLYSxPQUFMLENBQWFnRSxRQUFiLENBQXNCYyxhQUF0QixDQUFvQzNGLElBQXBDLEVBQTBDQyxJQUExQyxDQUFOO0FBQ0g7QUFDSjs7QUFDRCxVQUFNLEtBQUtvSywwQkFBTCxDQUFnQzVLLElBQWhDLENBQU47QUFDQSxVQUFNNEosVUFBVSxHQUFHLElBQUlpQixtQkFBSixFQUFuQjtBQUNBakIsSUFBQUEsVUFBVSxDQUFDaEQsSUFBWCxHQUFrQjVHLElBQUksQ0FBQzRHLElBQXZCO0FBQ0FnRCxJQUFBQSxVQUFVLENBQUNrQixRQUFYLEdBQXNCOUssSUFBSSxDQUFDdUksSUFBM0I7QUFDQXFCLElBQUFBLFVBQVUsQ0FBQ1AsWUFBWCxHQUEwQkcsYUFBMUI7QUFDQUksSUFBQUEsVUFBVSxDQUFDZixVQUFYLEdBQXdCQSxVQUF4Qjs7QUFHQSxRQUFJO0FBQ0EsYUFBTyxDQUFFLEtBQUt6SCxPQUFQLElBQW1CLEtBQUs2QyxrQkFBTCxFQUExQjs7QUFDQSxVQUFJLENBQUMsS0FBSzdDLE9BQVYsRUFBbUI7QUFDZjtBQUNIO0FBQ0osS0FMRCxDQUtFLE9BQU9tRCxDQUFQLEVBQVU7QUFDUjFGLE1BQUFBLEdBQUcsQ0FBQ2dHLEtBQUosQ0FBVSx1Q0FBVixFQUFtRE4sQ0FBbkQ7QUFDQXFGLE1BQUFBLFVBQVUsQ0FBQ3hDLFNBQVgsR0FBdUJ3QyxVQUFVLENBQUNqQyxPQUFYLEdBQXFCNUcsY0FBT3NHLFlBQVAsRUFBNUM7QUFDQXVDLE1BQUFBLFVBQVUsQ0FBQ2hDLFFBQVgsR0FBc0IsQ0FBdEI7QUFDQWdDLE1BQUFBLFVBQVUsQ0FBQzVFLE9BQVgsR0FBcUJvRCxnQkFBWUMsbUJBQVosQ0FBZ0M5RCxDQUFoQyxDQUFyQjtBQUNBcUYsTUFBQUEsVUFBVSxDQUFDekYsTUFBWCxHQUFvQm1ELGdCQUFPVyxNQUEzQjs7QUFFQSxVQUFJbkksS0FBSyxDQUFDd0ssWUFBVixFQUF3QjtBQUNwQnhLLFFBQUFBLEtBQUssQ0FBQ3dLLFlBQU4sQ0FBbUJTLFFBQW5CO0FBQ0g7O0FBRUQsVUFBSS9LLElBQUksQ0FBQ3NLLFlBQVQsRUFBdUI7QUFDbkJ0SyxRQUFBQSxJQUFJLENBQUNzSyxZQUFMLENBQWtCUyxRQUFsQjtBQUNIOztBQUVELGFBQU9uQixVQUFQO0FBQ0g7O0FBRUQsVUFBTSxLQUFLb0Isb0JBQUwsRUFBTjs7QUFFQSxRQUFJO0FBQ0FwQixNQUFBQSxVQUFVLENBQUN4QyxTQUFYLEdBQXVCckcsY0FBT3NHLFlBQVAsRUFBdkI7QUFDQSxZQUFNO0FBQUU0RCxRQUFBQSxXQUFGO0FBQWVDLFFBQUFBLE9BQWY7QUFBd0JDLFFBQUFBLFVBQXhCO0FBQW9DdEcsUUFBQUE7QUFBcEMsVUFBOEMsTUFBTSxLQUFLdUcsV0FBTCxDQUFpQnRMLEtBQWpCLEVBQXdCRSxJQUF4QixFQUE4QitJLGNBQTlCLEVBQThDUyxhQUE5QyxFQUE2RFksTUFBN0QsQ0FBMUQ7O0FBQ0EsV0FBS2lCLG1CQUFMLENBQXlCO0FBQUVKLFFBQUFBLFdBQUY7QUFBZUMsUUFBQUEsT0FBZjtBQUF3QnJHLFFBQUFBLEtBQXhCO0FBQStCc0csUUFBQUE7QUFBL0IsT0FBekI7O0FBQ0F2QixNQUFBQSxVQUFVLENBQUNqQyxPQUFYLEdBQXFCNUcsY0FBT3NHLFlBQVAsRUFBckI7QUFDQXVDLE1BQUFBLFVBQVUsQ0FBQ2hDLFFBQVgsR0FBc0JnQyxVQUFVLENBQUNqQyxPQUFYLEdBQXFCaUMsVUFBVSxDQUFDeEMsU0FBdEQ7QUFDQXdDLE1BQUFBLFVBQVUsQ0FBQ3NCLE9BQVgsR0FBcUJBLE9BQXJCO0FBQ0F0QixNQUFBQSxVQUFVLENBQUMwQixLQUFYLEdBQW1CTCxXQUFXLElBQUlBLFdBQVcsQ0FBQ0ssS0FBM0IsR0FBbUNMLFdBQVcsQ0FBQ0ssS0FBL0MsR0FBdUQsRUFBMUU7QUFDQTFCLE1BQUFBLFVBQVUsQ0FBQzJCLElBQVgsR0FBa0JOLFdBQVcsSUFBSUEsV0FBVyxDQUFDTSxJQUEzQixHQUFrQ04sV0FBVyxDQUFDTSxJQUE5QyxHQUFxRCxFQUF2RTtBQUNBM0IsTUFBQUEsVUFBVSxDQUFDNEIsR0FBWCxHQUFpQlAsV0FBVyxJQUFJQSxXQUFXLENBQUNPLEdBQTNCLEdBQWlDUCxXQUFXLENBQUNPLEdBQTdDLEdBQW1ELElBQXBFO0FBQ0E1QixNQUFBQSxVQUFVLENBQUNuRyxjQUFYLEdBQTRCd0gsV0FBVyxJQUFJQSxXQUFXLENBQUNRLFVBQTNCLEdBQXdDUixXQUFXLENBQUNRLFVBQXBELEdBQWlFLElBQTdGO0FBQ0E3QixNQUFBQSxVQUFVLENBQUM4QixXQUFYLEdBQXlCVCxXQUFXLElBQUlBLFdBQVcsQ0FBQ1MsV0FBM0IsR0FBeUNULFdBQVcsQ0FBQ1MsV0FBckQsR0FBbUUsSUFBNUY7O0FBR0EsVUFBSUMsV0FBVyxHQUFHbkIsZ0JBQUVvQixJQUFGLENBQU9oQyxVQUFVLENBQUMwQixLQUFsQixFQUF5QjtBQUFDbkgsUUFBQUEsTUFBTSxFQUFFbUQsZ0JBQU9XO0FBQWhCLE9BQXpCLENBQWxCOztBQUVBLFVBQUk0RCxZQUFZLEdBQUdyQixnQkFBRW9CLElBQUYsQ0FBT2hDLFVBQVUsQ0FBQzBCLEtBQWxCLEVBQXlCO0FBQUNuSCxRQUFBQSxNQUFNLEVBQUVtRCxnQkFBTzJDO0FBQWhCLE9BQXpCLENBQW5COztBQUNBTCxNQUFBQSxVQUFVLENBQUN6RixNQUFYLEdBQW9CcUcsZ0JBQUVzQixPQUFGLENBQVVILFdBQVYsS0FBMEIsQ0FBQzlHLEtBQTNCLEdBQW1DeUMsZ0JBQU9DLE1BQTFDLEdBQW1ERCxnQkFBT1csTUFBOUU7O0FBQ0EsVUFBSXBELEtBQUosRUFBVztBQUNQK0UsUUFBQUEsVUFBVSxDQUFDNUUsT0FBWCxHQUFxQkgsS0FBckI7QUFDQStFLFFBQUFBLFVBQVUsQ0FBQ3pGLE1BQVgsR0FBb0JtRCxnQkFBT1csTUFBM0I7QUFDQTJCLFFBQUFBLFVBQVUsQ0FBQzBCLEtBQVgsR0FBbUJ2SyxjQUFPZ0wsaUNBQVAsQ0FBeUNuQyxVQUFVLENBQUMwQixLQUFwRCxDQUFuQjtBQUNILE9BSkQsTUFLSyxJQUFJLENBQUNkLGdCQUFFc0IsT0FBRixDQUFVRCxZQUFWLENBQUwsRUFBOEI7QUFDL0JqQyxRQUFBQSxVQUFVLENBQUN6RixNQUFYLEdBQW9CbUQsZ0JBQU8yQyxPQUEzQjtBQUNIOztBQUNELFlBQU0sS0FBSytCLHlCQUFMLENBQStCaE0sSUFBL0IsRUFBcUM0SixVQUFyQyxDQUFOO0FBQ0gsS0EzQkQsQ0EyQkUsT0FBT3JGLENBQVAsRUFBVTtBQUNSMUYsTUFBQUEsR0FBRyxDQUFDZ0csS0FBSixDQUFVLGdDQUFWLEVBQTRDTixDQUE1QztBQUNBcUYsTUFBQUEsVUFBVSxDQUFDNUUsT0FBWCxHQUFxQm9ELGdCQUFZQyxtQkFBWixDQUFnQzlELENBQWhDLENBQXJCO0FBQ0FxRixNQUFBQSxVQUFVLENBQUN6RixNQUFYLEdBQW9CbUQsZ0JBQU9XLE1BQTNCO0FBRUg7O0FBQ0QsVUFBTWdFLG9CQUFvQixHQUFHLE9BQU8sS0FBS2xLLFFBQUwsQ0FBY21LLFdBQXJCLEtBQXFDLFNBQXJDLElBQWtELEtBQUtuSyxRQUFMLENBQWNtSyxXQUFkLEtBQThCLElBQTdHO0FBRUEsVUFBTSxLQUFLQyxrQkFBTCxDQUF3QnZDLFVBQVUsQ0FBQ3pGLE1BQW5DLEVBQTJDOEgsb0JBQTNDLENBQU47O0FBRUEsUUFBSW5NLEtBQUssQ0FBQ3dLLFlBQVYsRUFBd0I7QUFDcEJ4SyxNQUFBQSxLQUFLLENBQUN3SyxZQUFOLENBQW1CUyxRQUFuQjtBQUNIOztBQUVELFFBQUkvSyxJQUFJLENBQUNzSyxZQUFULEVBQXVCO0FBQ25CdEssTUFBQUEsSUFBSSxDQUFDc0ssWUFBTCxDQUFrQlMsUUFBbEI7QUFDSDs7QUFFRCxXQUFPbkIsVUFBUDtBQUNIOztBQUVnQixRQUFYd0IsV0FBVyxDQUFDdEwsS0FBRCxFQUFRRSxJQUFSLEVBQWMrSSxjQUFkLEVBQThCUyxhQUE5QixFQUE2Q1ksTUFBN0MsRUFBcUQ7QUFDbEUsUUFBSSxDQUFDLEtBQUtoSixPQUFWLEVBQW1CO0FBQ2Z2QyxNQUFBQSxHQUFHLENBQUNnRyxLQUFKLENBQVUscUNBQVY7O0FBRUEsVUFBSSxLQUFLdUgscUJBQVQsRUFBZ0M7QUFDNUIsYUFBS0EscUJBQUwsQ0FBMkJDLE1BQTNCLENBQWtDLElBQUl6SixLQUFKLENBQVUsaUJBQVYsQ0FBbEM7QUFDSDs7QUFDRDtBQUNIOztBQUVELFdBQU8sTUFBTSxLQUFLeEIsT0FBTCxDQUFhdUQsR0FBYixDQUFpQjtBQUMxQjJILE1BQUFBLFVBQVUsRUFBRXRNLElBQUksQ0FBQzRHLElBRFM7QUFFMUIyRixNQUFBQSxVQUFVLEVBQUV2TSxJQUFJLENBQUN1SSxJQUZTO0FBRzFCMkMsTUFBQUEsT0FBTyxFQUFFO0FBQ0xkLFFBQUFBLE1BQU0sRUFBRUEsTUFESDtBQUVMakgsUUFBQUEsR0FBRyxFQUFFLEtBQUtLLElBRkw7QUFHTGQsUUFBQUEsSUFBSSxFQUFFLEtBQUtkLEtBSE47QUFJTDRLLFFBQUFBLElBQUksRUFBRSxLQUFLN0ssS0FKTjtBQUtMOEosUUFBQUEsVUFBVSxFQUFFLEtBQUszSixXQUxaO0FBTUwySyxRQUFBQSxJQUFJLEVBQUU7QUFDRkMsVUFBQUEsSUFBSSxFQUFFO0FBQ0Y5RixZQUFBQSxJQUFJLEVBQUU1RyxJQUFJLENBQUM0RyxJQURUO0FBRUYrRixZQUFBQSxTQUFTLEVBQUVuRDtBQUZULFdBREo7QUFLRjFKLFVBQUFBLEtBQUssRUFBRTtBQUNIOEcsWUFBQUEsSUFBSSxFQUFFOUcsS0FBSyxDQUFDOEcsSUFEVDtBQUVIK0YsWUFBQUEsU0FBUyxFQUFFNUQ7QUFGUjtBQUxMO0FBTkQsT0FIaUI7QUFvQjFCNkQsTUFBQUEsTUFBTSxFQUFFLEtBQUs3SyxRQUFMLENBQWM4SyxFQUFkLElBQW9CO0FBcEJGLEtBQWpCLENBQWI7QUFzQkg7O0FBRXVCLFFBQWxCNUksa0JBQWtCLEdBQUc7QUFDdkIsV0FBTyxLQUFLN0MsT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWEwTCxVQUFiLENBQXdCLEtBQUtoTSxHQUE3QixFQUFrQyxLQUFLaUIsUUFBdkMsRUFBaUQsS0FBS0gsS0FBdEQsQ0FBdkI7QUFDSDs7QUFFeUIsUUFBcEJvSixvQkFBb0IsR0FBRztBQUN6QixRQUFJLEtBQUs1SixPQUFMLElBQWdCLEtBQUtBLE9BQUwsQ0FBYTJMLFlBQWpDLEVBQStDO0FBQzNDLFlBQU0sS0FBSzNMLE9BQUwsQ0FBYTJMLFlBQWIsRUFBTjtBQUNIO0FBQ0o7O0FBRXVCLFFBQWxCWixrQkFBa0IsQ0FBQ2hJLE1BQU0sR0FBRyxJQUFWLEVBQWdCNkksY0FBYyxHQUFHLElBQWpDLEVBQXVDO0FBQzNELFFBQUksS0FBSzVMLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhNkwsVUFBakMsRUFBNkM7QUFDekMsWUFBTSxLQUFLN0wsT0FBTCxDQUFhNkwsVUFBYixDQUF3QjlJLE1BQXhCLEVBQWdDNkksY0FBaEMsQ0FBTjtBQUNIO0FBQ0o7O0FBRStCLFFBQTFCeEYsMEJBQTBCLEdBQUc7QUFDL0IsUUFBSTtBQUNBLFVBQUksUUFBUSxLQUFLcEcsT0FBYixJQUF3QixLQUFLQSxPQUFMLENBQWE4TCxjQUF6QyxFQUF5RDtBQUNyRCxjQUFNLEtBQUs5TCxPQUFMLENBQWE4TCxjQUFiLENBQTRCLFlBQTVCLEVBQTBDLENBQUMsS0FBS3BNLEdBQU4sRUFBVyxLQUFLaUIsUUFBaEIsRUFBMEIsS0FBS0gsS0FBL0IsQ0FBMUMsQ0FBTjtBQUNIO0FBQ0osS0FKRCxDQUtBLE9BQU8yQyxDQUFQLEVBQVU7QUFDTjFGLE1BQUFBLEdBQUcsQ0FBQ2dHLEtBQUosQ0FBVSwyQkFBVixFQUF1Q04sQ0FBdkM7QUFDQSxXQUFLdkIsU0FBTCxLQUFrQixNQUFNLEtBQUtBLFNBQUwsQ0FBZW1LLFVBQWYsQ0FBMEIsSUFBMUIsRUFBZ0MsTUFBaEMsRUFBd0MsOEJBQTRCNUksQ0FBcEUsRUFBdUV6RixjQUF2RSxDQUF4QjtBQUNIO0FBQ0o7O0FBRWdDLFFBQTNCd0ssMkJBQTJCLENBQUN4SixLQUFELEVBQVE7QUFDckMsUUFBSTtBQUNBLFVBQUksUUFBUSxLQUFLc0IsT0FBYixJQUF3QixLQUFLQSxPQUFMLENBQWE4TCxjQUF6QyxFQUF5RDtBQUNyRCxjQUFNLEtBQUs5TCxPQUFMLENBQWE4TCxjQUFiLENBQTRCLGFBQTVCLEVBQTJDLENBQUNwTixLQUFELENBQTNDLENBQU47QUFDSDtBQUNKLEtBSkQsQ0FLQSxPQUFPeUUsQ0FBUCxFQUFVO0FBQ04xRixNQUFBQSxHQUFHLENBQUNnRyxLQUFKLENBQVUsNEJBQVYsRUFBd0NOLENBQXhDO0FBQ0EsV0FBS3ZCLFNBQUwsS0FBa0IsTUFBTSxLQUFLQSxTQUFMLENBQWVtSyxVQUFmLENBQTBCLElBQTFCLEVBQWdDLE1BQWhDLEVBQXdDLCtCQUE2QjVJLENBQXJFLEVBQXdFekYsY0FBeEUsQ0FBeEI7QUFDSDtBQUNKOztBQUUrQixRQUExQjhMLDBCQUEwQixDQUFDNUssSUFBRCxFQUFPO0FBQ25DLFFBQUk7QUFDQSxhQUFPLEtBQUtvQixPQUFMLElBQWdCLEtBQUtBLE9BQUwsQ0FBYThMLGNBQWIsQ0FBNEIsWUFBNUIsRUFBMEMsQ0FBQ2xOLElBQUQsQ0FBMUMsQ0FBdkI7QUFDSCxLQUZELENBR0EsT0FBT3VFLENBQVAsRUFBVTtBQUNOMUYsTUFBQUEsR0FBRyxDQUFDZ0csS0FBSixDQUFVLDJCQUFWLEVBQXVDTixDQUF2QztBQUNBLFdBQUt2QixTQUFMLEtBQWtCLE1BQU0sS0FBS0EsU0FBTCxDQUFlbUssVUFBZixDQUEwQixJQUExQixFQUFnQyxNQUFoQyxFQUF3Qyw4QkFBNEI1SSxDQUFwRSxFQUF1RXpGLGNBQXZFLENBQXhCO0FBQ0g7QUFDSjs7QUFFOEIsUUFBekJ3Six5QkFBeUIsQ0FBQ3hELE1BQUQsRUFBUztBQUNwQyxRQUFJO0FBQ0EsYUFBTyxLQUFLMUQsT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWE4TCxjQUFiLENBQTRCLFdBQTVCLEVBQXlDLENBQUMsS0FBS3BNLEdBQU4sRUFBV2dFLE1BQVgsQ0FBekMsQ0FBdkI7QUFDSCxLQUZELENBR0EsT0FBT1AsQ0FBUCxFQUFVO0FBQ04xRixNQUFBQSxHQUFHLENBQUNnRyxLQUFKLENBQVUsMEJBQVYsRUFBc0NOLENBQXRDO0FBQ0EsV0FBS3ZCLFNBQUwsS0FBa0IsTUFBTSxLQUFLQSxTQUFMLENBQWVtSyxVQUFmLENBQTBCLElBQTFCLEVBQWdDLE1BQWhDLEVBQXdDLDZCQUEyQjVJLENBQW5FLEVBQXNFekYsY0FBdEUsQ0FBeEI7QUFDSDtBQUNKOztBQUUrQixRQUExQm9MLDBCQUEwQixDQUFDcEssS0FBRCxFQUFRZ0YsTUFBUixFQUFnQjtBQUM1QyxRQUFJO0FBQ0EsYUFBTyxLQUFLMUQsT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWE4TCxjQUFiLENBQTRCLFlBQTVCLEVBQTBDLENBQUNwTixLQUFELEVBQVFnRixNQUFSLENBQTFDLENBQXZCO0FBQ0gsS0FGRCxDQUdBLE9BQU9QLENBQVAsRUFBVTtBQUNOMUYsTUFBQUEsR0FBRyxDQUFDZ0csS0FBSixDQUFVLDJCQUFWLEVBQXVDTixDQUF2QztBQUNBLFdBQUt2QixTQUFMLEtBQWtCLE1BQU0sS0FBS0EsU0FBTCxDQUFlbUssVUFBZixDQUEwQixJQUExQixFQUFnQyxNQUFoQyxFQUF3Qyw4QkFBNEI1SSxDQUFwRSxFQUF1RXpGLGNBQXZFLENBQXhCO0FBQ0g7QUFDSjs7QUFFOEIsUUFBekJrTix5QkFBeUIsQ0FBQ2hNLElBQUQsRUFBTzhFLE1BQVAsRUFBZTtBQUMxQyxRQUFJO0FBQ0EsYUFBTyxLQUFLMUQsT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWE4TCxjQUFiLENBQTRCLFdBQTVCLEVBQXlDLENBQUNsTixJQUFELEVBQU84RSxNQUFQLENBQXpDLENBQXZCO0FBQ0gsS0FGRCxDQUdBLE9BQU9QLENBQVAsRUFBVTtBQUNOMUYsTUFBQUEsR0FBRyxDQUFDZ0csS0FBSixDQUFVLDBCQUFWLEVBQXNDTixDQUF0QztBQUNBLFdBQUt2QixTQUFMLEtBQWtCLE1BQU0sS0FBS0EsU0FBTCxDQUFlbUssVUFBZixDQUEwQixJQUExQixFQUFnQyxNQUFoQyxFQUF3Qyw2QkFBMkI1SSxDQUFuRSxFQUFzRXpGLGNBQXRFLENBQXhCO0FBQ0g7QUFDSjs7QUFFd0IsUUFBbkJrRixtQkFBbUIsR0FBRztBQUN4QixVQUFNb0osVUFBVSxHQUFHN0UsY0FBSzhFLElBQUwsQ0FBVUMsU0FBVixFQUFxQixXQUFyQixDQUFuQjs7QUFDQSxTQUFLbE0sT0FBTCxHQUFlLElBQUltTSxzQkFBSixDQUFrQixLQUFLek0sR0FBdkIsRUFBNEJzTSxVQUE1QixFQUF3QyxLQUFLL0wsVUFBN0MsRUFBeUQsS0FBS3dDLFVBQTlELEVBQTBFLFFBQTFFLEVBQW9GLEtBQUt0QyxrQkFBekYsQ0FBZjtBQUNBLFVBQU0sS0FBS0gsT0FBTCxDQUFhb00sS0FBYixFQUFOOztBQUNBLFNBQUtDLGlCQUFMOztBQUNBLFVBQU0sS0FBS3JNLE9BQUwsQ0FBYXNNLGFBQWIsRUFBTjs7QUFDQSxTQUFLQyx5QkFBTDtBQUNIOztBQUVERixFQUFBQSxpQkFBaUIsR0FBRztBQUVoQixVQUFNRyxLQUFLLEdBQUcsSUFBZDs7QUFDQSxTQUFLeE0sT0FBTCxDQUFheU0sU0FBYixDQUF1QixnQkFBdkIsRUFBeUMsS0FBS0Msb0JBQUwsQ0FBMEJDLElBQTFCLENBQStCLElBQS9CLENBQXpDOztBQUNBLFNBQUszTSxPQUFMLENBQWF5TSxTQUFiLENBQXVCLGVBQXZCLEVBQXdDLEtBQUtHLG1CQUFMLENBQXlCRCxJQUF6QixDQUE4QixJQUE5QixDQUF4Qzs7QUFDQSxTQUFLM00sT0FBTCxDQUFhNk0sRUFBYixDQUFnQixPQUFoQixFQUEwQkMsT0FBRCxJQUFhO0FBQ2xDLFlBQU07QUFBRXJKLFFBQUFBO0FBQUYsVUFBWXFKLE9BQWxCO0FBQ0FyUCxNQUFBQSxHQUFHLENBQUNnRyxLQUFKLENBQVUsd0JBQVYsRUFBb0NBLEtBQXBDOztBQUVBLFVBQUksS0FBS3NKLFFBQVQsRUFBbUI7QUFDZixhQUFLQyxJQUFMLENBQVUsWUFBVixFQUF3QnZKLEtBQXhCO0FBQ0gsT0FGRCxNQUVPO0FBQ0grSSxRQUFBQSxLQUFLLENBQUN0TSxvQkFBTixHQUE2QnVELEtBQTdCO0FBQ0g7QUFDSixLQVREOztBQVVBLFNBQUt6RCxPQUFMLENBQWE2TSxFQUFiLENBQWdCLE1BQWhCLEVBQXlCQyxPQUFELElBQWE7QUFDakMsV0FBS0MsUUFBTCxHQUFnQixJQUFoQjtBQUNBLFlBQU07QUFBRUUsUUFBQUE7QUFBRixVQUFlSCxPQUFyQjs7QUFFQSxVQUFJRyxRQUFRLElBQUlBLFFBQVEsS0FBSyxDQUE3QixFQUFnQztBQUk1QixZQUFJQyxPQUFPLEdBQUcsSUFBZDs7QUFDQSxZQUFJVixLQUFLLENBQUN6TSxZQUFWLEVBQXdCO0FBQ3BCbU4sVUFBQUEsT0FBTyxHQUFHVixLQUFLLENBQUNyTCxhQUFoQjtBQUNILFNBRkQsTUFHSyxJQUFJcUwsS0FBSyxDQUFDM00sVUFBVixFQUFzQjtBQUN2QnFOLFVBQUFBLE9BQU8sR0FBR1YsS0FBSyxDQUFDeEIscUJBQWhCO0FBQ0g7O0FBQ0QsWUFBSXZILEtBQUssR0FBRytJLEtBQUssQ0FBQ3RNLG9CQUFOLElBQThCLElBQTFDOztBQUNBLFlBQUkrTSxRQUFRLElBQUksR0FBaEIsRUFBcUI7QUFDakJ4SixVQUFBQSxLQUFLLEdBQUcsSUFBSTBKLG9CQUFKLENBQWdCbkcsZ0JBQVlvRyxTQUFaLENBQXNCQyxZQUF0QyxFQUFvRCwwRkFBcEQsQ0FBUjtBQUNILFNBRkQsTUFHSyxJQUFJLENBQUM1SixLQUFMLEVBQVk7QUFDYkEsVUFBQUEsS0FBSyxHQUFHLElBQUkwSixvQkFBSixDQUFpQixvQ0FBbUNGLFFBQVMsR0FBN0QsQ0FBUjtBQUNIOztBQUVEQyxRQUFBQSxPQUFPLElBQUlBLE9BQU8sQ0FBQ2pDLE1BQVIsQ0FBZXhILEtBQWYsQ0FBWDs7QUFDQStJLFFBQUFBLEtBQUssQ0FBQ2xKLHFCQUFOO0FBQ0g7QUFDSixLQTFCRDs7QUEyQkEsU0FBS3RELE9BQUwsQ0FBYTZNLEVBQWIsQ0FBZ0IsU0FBaEIsRUFBMkIsTUFBT1MsR0FBUCxJQUFlO0FBQ3RDLFVBQUlBLEdBQUcsQ0FBQy9ILEtBQUosSUFBYStILEdBQUcsQ0FBQy9ILEtBQUosS0FBYyxLQUEvQixFQUFzQztBQUNsQyxZQUFJK0gsR0FBRyxDQUFDQyxLQUFKLEtBQWMsT0FBbEIsRUFBMkI7QUFDdkI5UCxVQUFBQSxHQUFHLENBQUMwSCxLQUFKLENBQVVtSSxHQUFHLENBQUNBLEdBQWQ7QUFDSCxTQUZELE1BRU8sSUFBSUEsR0FBRyxDQUFDQyxLQUFKLEtBQWMsTUFBbEIsRUFBMEI7QUFDN0I5UCxVQUFBQSxHQUFHLENBQUMrUCxJQUFKLENBQVNGLEdBQUcsQ0FBQ0EsR0FBYjtBQUNILFNBRk0sTUFFQSxJQUFJQSxHQUFHLENBQUNDLEtBQUosS0FBYyxPQUFsQixFQUEyQjtBQUM5QjlQLFVBQUFBLEdBQUcsQ0FBQ2dHLEtBQUosQ0FBVTZKLEdBQUcsQ0FBQ0EsR0FBZCxFQUFtQkEsR0FBRyxDQUFDRyxHQUF2QjtBQUNILFNBRk0sTUFFQSxJQUFJSCxHQUFHLENBQUNDLEtBQUosS0FBYyxNQUFsQixFQUEwQjtBQUM3QjlQLFVBQUFBLEdBQUcsQ0FBQzRGLElBQUosQ0FBU2lLLEdBQUcsQ0FBQ0EsR0FBYjtBQUNIOztBQUVEZCxRQUFBQSxLQUFLLENBQUNRLElBQU4sQ0FBVyxLQUFYLEVBQWtCTSxHQUFHLENBQUNJLElBQXRCLEVBQTRCSixHQUFHLENBQUNDLEtBQWhDLEVBQXVDRCxHQUFHLENBQUNBLEdBQTNDLEVBQWdEQSxHQUFHLENBQUNLLEdBQUosSUFBV2pRLGNBQTNEOztBQUNBOE8sUUFBQUEsS0FBSyxDQUFDNUssU0FBTixLQUFtQixNQUFNNEssS0FBSyxDQUFDNUssU0FBTixDQUFnQm1LLFVBQWhCLENBQ3JCdUIsR0FBRyxDQUFDSSxJQURpQixFQUNYSixHQUFHLENBQUNDLEtBRE8sRUFDQUQsR0FBRyxDQUFDQSxHQURKLEVBQ1NBLEdBQUcsQ0FBQ0ssR0FBSixJQUFXalEsY0FEcEIsRUFDb0M7QUFDckRrUSxVQUFBQSxPQUFPLEVBQUUsS0FBSzNNLHFCQUR1QztBQUVyRDRNLFVBQUFBLE1BQU0sRUFBRSxLQUFLOU0sb0JBRndDO0FBR3JEK00sVUFBQUEsTUFBTSxFQUFFLEtBQUs1TTtBQUh3QyxTQURwQyxDQUF6QjtBQU1ILE9BbEJELE1BbUJLLElBQUlvTSxHQUFHLENBQUMvSCxLQUFKLElBQWErSCxHQUFHLENBQUMvSCxLQUFKLEtBQWMsYUFBL0IsRUFBOEM7QUFDL0NpSCxRQUFBQSxLQUFLLENBQUNRLElBQU4sQ0FBVyxhQUFYLEVBQTBCTSxHQUFHLENBQUNsTyxJQUE5QixFQUFvQ2tPLEdBQUcsQ0FBQ1MsS0FBeEMsRUFBK0NULEdBQUcsQ0FBQ0ksSUFBbkQ7QUFDSCxPQUZJLE1BR0EsSUFBSUosR0FBRyxDQUFDL0gsS0FBSixJQUFhK0gsR0FBRyxDQUFDL0gsS0FBSixLQUFjLGVBQS9CLEVBQWdEO0FBQ2pELFlBQUkrSCxHQUFHLENBQUNVLE1BQUosS0FBZSxNQUFuQixFQUEyQjtBQUN2QnhCLFVBQUFBLEtBQUssQ0FBQ1EsSUFBTixDQUFXLFdBQVgsRUFBd0JNLEdBQXhCO0FBQ0g7QUFDSixPQUpJLE1BS0EsSUFBSUEsR0FBRyxDQUFDL0gsS0FBSixJQUFhK0gsR0FBRyxDQUFDL0gsS0FBSixLQUFjLGFBQS9CLEVBQThDO0FBQy9DbkMsUUFBQUEsT0FBTyxDQUFDM0YsR0FBUixDQUFZLGNBQVosRUFBNEI2UCxHQUE1QjtBQUNBLGNBQU0sS0FBS3hLLE9BQUwsQ0FBYSxRQUFiLENBQU47QUFDQSxjQUFNLEtBQUtnQixJQUFMLENBQVUsUUFBVixDQUFOO0FBQ0gsT0FKSSxNQUtBLElBQUl3SixHQUFHLENBQUMvSCxLQUFKLElBQWErSCxHQUFHLENBQUMvSCxLQUFKLEtBQWMsTUFBL0IsRUFBdUM7QUFDeENpSCxRQUFBQSxLQUFLLENBQUNRLElBQU4sQ0FBVyxNQUFYLEVBQW1CTSxHQUFuQjtBQUNIO0FBQ0osS0FwQ0Q7QUFxQ0g7O0FBRURmLEVBQUFBLHlCQUF5QixHQUFHO0FBQ3hCLFFBQUksQ0FBQyxLQUFLdk0sT0FBVixFQUFtQjtBQUNmO0FBQ0g7O0FBQ0QsU0FBS0EsT0FBTCxDQUFhZ0UsUUFBYixJQUF5QixLQUFLaEUsT0FBTCxDQUFhZ0UsUUFBYixDQUFzQjZJLEVBQXRCLENBQXlCLGdCQUF6QixFQUE0Q29CLGNBQUQsSUFBb0I7QUFDcEYsV0FBS2pCLElBQUwsQ0FBVSxZQUFWLEVBQXdCaUIsY0FBeEI7QUFDSCxLQUZ3QixDQUF6QjtBQUlBLFNBQUtqTyxPQUFMLENBQWFnRSxRQUFiLElBQXlCLEtBQUtoRSxPQUFMLENBQWFnRSxRQUFiLENBQXNCNkksRUFBdEIsQ0FBeUIscUJBQXpCLEVBQWlEcUIsVUFBRCxJQUFnQjtBQUNyRixXQUFLbEIsSUFBTCxDQUFVLGlCQUFWLEVBQTZCa0IsVUFBN0I7QUFDSCxLQUZ3QixDQUF6QjtBQUdIOztBQUV5QixRQUFwQnhCLG9CQUFvQixDQUFDdkosQ0FBRCxFQUFJO0FBQzFCLFNBQUtqQyxvQkFBTCxHQUE0QmlDLENBQUMsQ0FBQzJFLEVBQTlCO0FBQ0EsU0FBS2xHLFNBQUwsS0FBa0IsTUFBTSxLQUFLQSxTQUFMLENBQWV1TSxXQUFmLENBQTJCLEtBQUt6TyxHQUFoQyxFQUFxQyxLQUFLdUIscUJBQTFDLEVBQWlFLEtBQUtGLG9CQUF0RSxFQUE0Rm9DLENBQTVGLENBQXhCOztBQUVBLFFBQUk7QUFDQSxVQUFJQSxDQUFDLElBQUlBLENBQUMsQ0FBQ2lMLE1BQVAsSUFBaUJqTCxDQUFDLENBQUNpTCxNQUFGLEtBQWEsS0FBbEMsRUFBeUMsQ0FFeEMsQ0FGRCxNQUVPO0FBQ0gsZUFBTyxLQUFLcE8sT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWE4TCxjQUFiLENBQTRCLGVBQTVCLEVBQTZDLENBQUMzSSxDQUFELENBQTdDLENBQXZCO0FBQ0g7QUFDSixLQU5ELENBT0EsT0FBT0EsQ0FBUCxFQUFVO0FBQ04xRixNQUFBQSxHQUFHLENBQUNnRyxLQUFKLENBQVUsOEJBQVYsRUFBMENOLENBQTFDO0FBQ0EsV0FBS3ZCLFNBQUwsS0FBa0IsTUFBTSxLQUFLQSxTQUFMLENBQWVtSyxVQUFmLENBQTBCLElBQTFCLEVBQWdDLE1BQWhDLEVBQXdDLGlDQUErQjVJLENBQXZFLEVBQTBFekYsY0FBMUUsQ0FBeEI7QUFDSDtBQUNKOztBQUV3QixRQUFuQmtQLG1CQUFtQixDQUFDekosQ0FBRCxFQUFJO0FBQ3pCLFNBQUt2QixTQUFMLEtBQWtCLE1BQU0sS0FBS0EsU0FBTCxDQUFleU0sU0FBZixDQUF5QixLQUFLM08sR0FBOUIsRUFBbUMsS0FBS3VCLHFCQUF4QyxFQUErRCxLQUFLRixvQkFBcEUsRUFBMEZvQyxDQUFDLENBQUNPLE1BQTVGLENBQXhCOztBQUNBLFFBQUk7QUFDQSxVQUFJUCxDQUFDLElBQUlBLENBQUMsQ0FBQ2lMLE1BQVAsSUFBaUJqTCxDQUFDLENBQUNpTCxNQUFGLEtBQWEsS0FBbEMsRUFBeUMsQ0FFeEMsQ0FGRCxNQUVPO0FBQ0gsZUFBTyxLQUFLcE8sT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWE4TCxjQUFiLENBQTRCLGNBQTVCLEVBQTRDLENBQUMzSSxDQUFDLENBQUNPLE1BQUgsQ0FBNUMsQ0FBdkI7QUFDSDtBQUNKLEtBTkQsQ0FPQSxPQUFPUCxDQUFQLEVBQVU7QUFDTjFGLE1BQUFBLEdBQUcsQ0FBQ2dHLEtBQUosQ0FBVSw2QkFBVixFQUF5Q04sQ0FBekM7QUFDQSxXQUFLdkIsU0FBTCxLQUFrQixNQUFNLEtBQUtBLFNBQUwsQ0FBZW1LLFVBQWYsQ0FBMEIsSUFBMUIsRUFBZ0MsTUFBaEMsRUFBd0MsZ0NBQThCNUksQ0FBdEUsRUFBeUV6RixjQUF6RSxDQUF4QjtBQUNIOztBQUNELFNBQUt3RCxvQkFBTCxHQUE0QkYsU0FBNUI7QUFDSDs7QUFFRHNDLEVBQUFBLHFCQUFxQixHQUFHO0FBQ3BCLFNBQUs3QyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0EsU0FBS1QsT0FBTCxHQUFlLElBQWY7QUFDQSxTQUFLSCxVQUFMLEdBQWtCLEtBQWxCO0FBQ0EsU0FBS0UsWUFBTCxHQUFvQixLQUFwQjtBQUNBLFNBQUtELGVBQUwsR0FBdUIsS0FBdkI7QUFDQSxTQUFLZSxXQUFMLEdBQW1CLEtBQW5CO0FBQ0EsU0FBS00sYUFBTCxHQUFxQixrQkFBckI7QUFDSDs7QUFFRDhJLEVBQUFBLG1CQUFtQixDQUFDO0FBQUVKLElBQUFBLFdBQUY7QUFBZUUsSUFBQUEsVUFBZjtBQUEyQkQsSUFBQUEsT0FBTyxHQUFHLEVBQXJDO0FBQXlDckcsSUFBQUEsS0FBSyxHQUFHO0FBQWpELEdBQUQsRUFBMEQ7QUFFekUsUUFBSSxLQUFLNUMsV0FBVCxFQUFzQjtBQUNsQixhQUFPLElBQVA7QUFDSDs7QUFDRCxRQUFJNEMsS0FBSixFQUFXO0FBQ1AsV0FBS3VKLElBQUwsQ0FBVSxZQUFWLEVBQXdCdkosS0FBeEI7QUFDSDs7QUFFRCxTQUFLbEQsS0FBTCxHQUFhdUosT0FBTyxDQUFDc0IsSUFBUixJQUFnQixLQUFLN0ssS0FBbEM7QUFFQSxTQUFLRSxRQUFMLEdBQWdCLEVBQUUsR0FBRyxLQUFLQSxRQUFWO0FBQW9CLFVBQUdzSixVQUFVLElBQUksRUFBakI7QUFBcEIsS0FBaEI7QUFHQSxRQUFJRCxPQUFPLENBQUN4SSxJQUFaLEVBQ0ksT0FBT3dJLE9BQU8sQ0FBQ3hJLElBQWY7QUFFSixRQUFJd0ksT0FBTyxDQUFDL0gsR0FBWixFQUNJLE9BQU8rSCxPQUFPLENBQUMvSCxHQUFmO0FBRUosUUFBSStILE9BQU8sQ0FBQ3VCLElBQVosRUFDSSxPQUFPdkIsT0FBTyxDQUFDdUIsSUFBZjtBQUNQOztBQUVEaUQsRUFBQUEsaUJBQWlCLENBQUNDLEVBQUQsRUFBS0MsRUFBTCxFQUFTQyxpQkFBVCxFQUE0QkMsZ0JBQTVCLEVBQThDQyxtQkFBOUMsRUFBbUU7QUFDaEYsU0FBSzNCLElBQUwsQ0FBVSxlQUFWLEVBQTJCO0FBQ3ZCakssTUFBQUEsTUFBTSxFQUFFNEwsbUJBQW1CLENBQUNDLE9BREw7QUFFdkJoTCxNQUFBQSxPQUFPLEVBQUUrSyxtQkFBbUIsQ0FBQy9LLE9BQXBCLElBQStCLElBRmpCO0FBR3ZCMEgsTUFBQUEsSUFBSSxFQUFFO0FBQ0Z4RCxRQUFBQSxFQUFFLEVBQUUwRyxFQUFFLENBQUMxRyxFQUFILElBQVMsSUFEWDtBQUVGdEMsUUFBQUEsSUFBSSxFQUFFZ0osRUFBRSxDQUFDaEosSUFGUDtBQUdGK0YsUUFBQUEsU0FBUyxFQUFFbUQsZ0JBSFQ7QUFJRnRILFFBQUFBLGNBQWMsRUFBRW9ILEVBQUUsQ0FBQ3BIO0FBSmpCLE9BSGlCO0FBU3ZCMUksTUFBQUEsS0FBSyxFQUFFO0FBQ0hvSixRQUFBQSxFQUFFLEVBQUV5RyxFQUFFLENBQUN6RyxFQUFILElBQVMsSUFEVjtBQUVIdEMsUUFBQUEsSUFBSSxFQUFFK0ksRUFBRSxDQUFDL0ksSUFGTjtBQUdIK0YsUUFBQUEsU0FBUyxFQUFFa0QsaUJBSFI7QUFJSHJILFFBQUFBLGNBQWMsRUFBRW1ILEVBQUUsQ0FBQ25IO0FBSmhCO0FBVGdCLEtBQTNCO0FBZ0JIOztBQUVEeUgsRUFBQUEsWUFBWSxDQUFDbkwsTUFBRCxFQUFTO0FBQ2pCLFNBQUtzSixJQUFMLENBQVUsVUFBVixFQUFzQnRKLE1BQXRCO0FBQ0g7O0FBcnpCa0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yICovXHJcbi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi8uLi9saWIvbG9nZ2VyJztcclxuY29uc3QgbG9nID0gbG9nZ2VyKCdPeHlnZW5SdW5uZXInKTtcclxuY29uc3QgREVGQVVMVF9JU1NVRVIgPSAndXNlcic7XHJcbmNvbnN0IE1BWF9SRVJVTlMgPSAyO1xyXG5cclxuY29uc3QgeyB2MSB9ID0gcmVxdWlyZSgndXVpZCcpO1xyXG5cclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcclxuaW1wb3J0IF8gIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IGRlZmVyIH0gZnJvbSAnd2hlbic7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5cclxuaW1wb3J0IFRlc3RTdWl0ZVJlc3VsdCBmcm9tICcuLi8uLi9tb2RlbC9zdWl0ZS1yZXN1bHQnO1xyXG5pbXBvcnQgVGVzdENhc2VSZXN1bHQgZnJvbSAnLi4vLi4vbW9kZWwvY2FzZS1yZXN1bHQnO1xyXG5pbXBvcnQgVGVzdFJlc3VsdCBmcm9tICcuLi8uLi9tb2RlbC90ZXN0LXJlc3VsdCc7XHJcbmltcG9ydCBTdGF0dXMgZnJvbSAnLi4vLi4vbW9kZWwvc3RhdHVzJztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuLi8uLi9saWIvdXRpbCc7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi8uLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IE94eWdlbkVycm9yIGZyb20gJy4uLy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBQYXJhbWV0ZXJNYW5hZ2VyIGZyb20gJy4uLy4uL2xpYi9wYXJhbS1tYW5hZ2VyLmpzJztcclxuaW1wb3J0IFdvcmtlclByb2Nlc3MgZnJvbSAnLi4vV29ya2VyUHJvY2Vzcyc7XHJcblxyXG4vLyBzbm9vemUgZnVuY3Rpb24gLSBhc3luYyB3cmFwcGVyIGFyb3VuZCBzZXRUaW1lb3V0IGZ1bmN0aW9uXHJcbmNvbnN0IHNub296ZSA9IG1zID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG5cclxuY29uc3QgZ2V0U3VpdGVzQnJlYWtwb2ludHMgPSAoc3VpdGVzKSA9PiB7XHJcbiAgICBjb25zdCByZXR2YWwgPSBbXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICAgc3VpdGVzICYmXHJcbiAgICAgICAgQXJyYXkuaXNBcnJheShzdWl0ZXMpICYmXHJcbiAgICAgICAgc3VpdGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICAgIHN1aXRlcy5tYXAoKHN1aXRlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHN1aXRlICYmXHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcyAmJlxyXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShzdWl0ZS5jYXNlcykgJiZcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcy5tYXAoKGNhemUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGNhemUuYnJlYWtwb2ludHMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLm1hcCgoYnJlYWtwb2ludCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsLnB1c2goYnJlYWtwb2ludCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldHZhbDtcclxufTtcclxuXHJcbmNvbnN0IHJlbW92ZUJyZWFrcG9pbnRGcm9tU3VpdGVzID0gKHN1aXRlcywgcmVtb3ZlQnJlYWtwb2ludCkgPT4ge1xyXG4gICAgaWYgKFxyXG4gICAgICAgIHN1aXRlcyAmJlxyXG4gICAgICAgIEFycmF5LmlzQXJyYXkoc3VpdGVzKSAmJlxyXG4gICAgICAgIHN1aXRlcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgICBzdWl0ZXMubWFwKChzdWl0ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBzdWl0ZSAmJlxyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMgJiZcclxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoc3VpdGUuY2FzZXMpICYmXHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMubWFwKChjYXplKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShjYXplLmJyZWFrcG9pbnRzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5tYXAoKGJyZWFrcG9pbnQsIGlkeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQuZmlsZSA9PT0gcmVtb3ZlQnJlYWtwb2ludC5maWxlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5saW5lID09PSByZW1vdmVCcmVha3BvaW50LmxpbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPeHlnZW5SdW5uZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgLy8gY2xhc3MgdmFyaWFibGVzXHJcbiAgICAgICAgdGhpcy5faWQgPSBveHV0aWwuZ2VuZXJhdGVVbmlxdWVJZCgpO1xyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5faXNEaXNwb3NpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl93b3JrZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnTW9kZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlclByb2NMYXN0RXJyb3IgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbiA9IHRydWU7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubnBtR1Jvb3RFeGVjdXRpb24gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25wbUdSb290RXhlY3V0aW9uID0gb3B0aW9ucy5ucG1HUm9vdEV4ZWN1dGlvbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGRlZmluZSB2YXJpYWJsZXMgdG8gaXRlcmF0ZSB0aHJvdWdoIHRlc3QgY2FzZXMgYW5kIHRlc3Qgc3VpdGUgaXRlcmF0aW9uc1xyXG4gICAgICAgIHRoaXMuX3N1aXRlO1xyXG4gICAgICAgIHRoaXMuX2VudlZhcnMgPSB7fTsgIC8vIGVudmlyb25tZW50IHZhcmlhYmxlcyBwYXNzZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGVzdFxyXG4gICAgICAgIHRoaXMuX3ZhcnMgPSB7fTsgICAgIC8vIHVzZXItZGVmaW5lZCB2YXJpYWJsZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gZGlmZmVyZW50IHNjcmlwdHNcclxuICAgICAgICB0aGlzLl9jYXBzID0ge307IC8vIGRlc2lyZWQgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIHBhc3NlZCB0byBlYWNoIG1vZHVsZVxyXG4gICAgICAgIHRoaXMuX21vZENhcHMgPSB7fTtcclxuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fbG9jYWxUaW1lID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fdGVzdEtpbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0ID0gMztcclxuICAgICAgICB0aGlzLl9jdXJyZW50Q2FzZVJlc3VsdElkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdWl0ZVJlc3VsdElkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwUmVzdWx0SWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgLy8gcHJvbWlzZXNcclxuICAgICAgICB0aGlzLl93aGVuRGlzcG9zZWQgPSBkZWZlcigpO1xyXG4gICAgfVxyXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICogUHVibGljIG1ldGhvZHNcclxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgICBnZXRJZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdChvcHRpb25zLCBjYXBzID0ge30sIHJlcG9ydGVyKSB7XHJcbiAgICAgICAgLy8gbWFrZSBzdXJlIGF0IGxlYXN0IG9uZSB0ZXN0IHN1aXRlIGlzIGRlZmluZWRcclxuICAgICAgICBpZiAoIW9wdGlvbnMuc3VpdGVzKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5pdGlhbGl6YXRpb24gZmFpbGVkIC0gbm8gdGVzdCBzdWl0ZXMgYXJlIGRlZmluZWQuIFlvdSBtdXN0IGRlZmluZSBcInN1aXRlc1wiIHByb3BlcnR5IGluIE94eWdlbiBvcHRpb25zLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5fY3dkID0gdGhpcy5fb3B0aW9ucy5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgICAgICB0aGlzLl9yZXBvcnRlciA9IHJlcG9ydGVyO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIC8vIG1lcmdlIGN1cnJlbnQgYW5kIHRlc3QgY29uZmlndXJhdGlvbiBiYXNlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcclxuICAgICAgICAgICAgbGV0IG9wdEVudiA9IHt9O1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbnYpIHtcclxuICAgICAgICAgICAgICAgIC8vICdlbnYnIG9wdGlvbiBtaWdodCBiZSBkZWZpbmVkIGVpdGhlciBhcyBhIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IG9yIGFzIGFuIG9iamVjdCB0aGF0IGxpc3RzIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcclxuICAgICAgICAgICAgICAgIC8vIGlmICdlbnYnIGlzIGEgc3RyaW5nLCB0aGVuIHJlc29sdmUgdGhlIGFjdHVhbCB2YXJpYWJsZXMgZnJvbSAnZW52cycgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZW52ID09PSAnc3RyaW5nJyAmJiB0eXBlb2Ygb3B0aW9ucy5lbnZzID09PSAnb2JqZWN0JyAmJiBvcHRpb25zLmVudnNbb3B0aW9ucy5lbnZdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0RW52ID0gb3B0aW9ucy5lbnZzW29wdGlvbnMuZW52XTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBpZiAnZW52JyBpcyBhbiBvYmplY3QsIHVzZSB0aGUgdmFyaWFibGVzIGRlZmluZWQgaW4gaXRcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmVudiA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5lbnYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0RW52ID0gb3B0aW9ucy5lbnY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmVudlZhcnMgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5lbnZWYXJzKSkge1xyXG4gICAgICAgICAgICAgICAgb3B0RW52ID0geyAuLi5vcHRFbnYsIC4uLm9wdGlvbnMuZW52VmFycyB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBhc3NpZ24gZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBsYXRlciB1c2VcclxuICAgICAgICAgICAgdGhpcy5fZW52ID0ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZW52LFxyXG4gICAgICAgICAgICAgICAgLi4ub3B0RW52XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuX2F0dHJpYnV0ZXMgPSBvcHRpb25zLnRlc3RBdHRyaWJ1dGVzIHx8IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fY2FwcyA9IHsgLi4uY2FwcyB9OyAvLyBhc3NpZ24gY2FwcyBmb3IgbGF0ZXIgdXNlXHJcbiAgICAgICAgdGhpcy5fc3VpdGVzID0gWyAuLi5vcHRpb25zLnN1aXRlcyBdO1xyXG4gICAgICAgIC8vIHNldCB1cCBkZWJ1Z2dpbmcgb3B0aW9uc1xyXG4gICAgICAgIC8vIFRPRE86IHRoaXMgbmVlZHMgdG8gYmUgcmVpbXBsZW1lbnRlZC4gRXZlcnl0aGluZyByZWxhdGVkIHRvIGRlYnVnZ2luZyAoaW5pdGlhbGl6ZURlYnVnZ2VyKSBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIE94eWdlblxyXG4gICAgICAgIC8vIGFuZCBhZGRlZCB0byBJREUgaW5zdGVhZC4gSS5lLiB0aGUgb25seSB0aGluZyBveHlnZW4gc2hvdWxkIGRvIGlzIHRvIGxhdW5jaCB0aGUgY2hpbGQgcHJvY2VzcyB3aXRoIHRoZSBkZWJ1Z2dpbmcgc3dpdGNoLlxyXG4gICAgICAgIHRoaXMuX2RlYnVnTW9kZSA9ICBvcHRpb25zLmRlYnVnUG9ydElkZSB8fCBvcHRpb25zLmRlYnVnUG9ydCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLl9kZWJ1Z1BvcnQgPSBvcHRpb25zLmRlYnVnUG9ydCB8fCBvcHRpb25zLmRlYnVnUG9ydElkZSB8fCBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMuc2NyaXB0Q29udGVudExpbmVPZmZzZXQgPSB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldDtcclxuICAgICAgICB0aGlzLl9sb2NhbFRpbWUgPSAodGhpcy5fb3B0aW9ucyAmJiB0aGlzLl9vcHRpb25zLmxvY2FsVGltZSkgfHwgdGhpcy5fbG9jYWxUaW1lO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3N0YXJ0V29ya2VyUHJvY2VzcygpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9Jbml0T3h5Z2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5faXNEaXNwb3NpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlciAmJiBhd2FpdCB0aGlzLl93b3JrZXIuc3RvcERlYnVnZ2VyKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmlzUnVubmluZykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0b3Aoc3RhdHVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHdoZW4gZGlzcG9zaW5nIFJ1bm5lcicsIGUpO1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzIGR1cmluZyB0aGUgZGlzcG9zZVxyXG4gICAgICAgICAgICBsb2cud2FybignRXJyb3Igd2hlbiBkaXNwb3NpbmcgUnVubmVyOicsIGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ0NBTkNFTEVEJykge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNldEdsb2JhbFZhcmlhYmxlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBydW4oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6aW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluaXRpYWxpemF0aW9uIGhhc24ndCBiZWVuIGNvbXBsZXRlZCB5ZXQsIHdhaXQgZm9yICdpbml0aWFsaXplZCcgZXZlbnRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9pc1J1bm5pbmcpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJldmlvdXMgdGVzdCBpcyBzdGlsbCBydW5uaW5nLCB3YWl0IGZvciAndGVzdC1lbmRlZCcgZXZlbnRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uUnVubmVyU3RhcnQodGhpcy5faWQsIHRoaXMuX29wdGlvbnMsIHRoaXMuX2NhcHMpO1xyXG5cclxuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX3J1blRlc3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFlcnJvciAmJiByZXN1bHQgJiYgcmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgZXJyb3IgPSByZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uUnVubmVyRW5kKHRoaXMuX2lkLCByZXN1bHQsIGVycm9yKTtcclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMga2lsbChzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fdGVzdEtpbGxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmlzUnVubmluZykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIua2lsbChzdGF0dXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkZWJ1Z0NvbnRpbnVlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5jb250aW51ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVCcmVha3BvaW50cyhicmVha3BvaW50cywgZmlsZVBhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc25vb3plKDUwMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVCcmVha3BvaW50cyhicmVha3BvaW50cywgZmlsZVBhdGgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGVidWdNb2RlICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb21pc2VzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdHNCcmVha3BvaW50cyA9IHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5nZXRCcmVha3BvaW50cyhmaWxlUGF0aCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWl0ZXNCcmVha3BvaW50cyA9IGdldFN1aXRlc0JyZWFrcG9pbnRzKHRoaXMuX3N1aXRlcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGJyZWFrcG9pbnRzIGZyb20gc3VpdGVzL2Nhc2VzIHRyZWVcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHN1aXRlQnAgb2Ygc3VpdGVzQnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnRzLmluY2x1ZGVzKHN1aXRlQnAubGluZSkgJiYgIGZpbGVQYXRoID09PSBzdWl0ZUJwLmZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXModGhpcy5fc3VpdGVzLCBzdWl0ZUJwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGRlbGV0ZWQgYnJlYWtwb2ludHNcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGFjdHVhbEN1cnJlbnRCcCBvZiB0c0JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFicmVha3BvaW50cy5pbmNsdWRlcyhhY3R1YWxDdXJyZW50QnApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fd29ya2VyLmRlYnVnZ2VyLnJlbW92ZUJyZWFrcG9pbnRCeVZhbHVlKGZpbGVQYXRoLCBhY3R1YWxDdXJyZW50QnApKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gYWRkIG5ldyBicmVha3BvaW50c1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdXNlclNldEJwIG9mIGJyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0c0JyZWFrcG9pbnRzLmluY2x1ZGVzKHVzZXJTZXRCcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludChmaWxlUGF0aCwgdXNlclNldEJwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlQWxsUHJvbWlzZSA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbm9vemUoNTAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoJ3VwZGF0ZUJyZWFrcG9pbnRzKCkgZG9uZS4nKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50c0FmZXJNYW5pcHVsYXRpb25zID0gdGhpcy5fd29ya2VyLmRlYnVnZ2VyLmdldEJyZWFrcG9pbnRzKGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwcm9taXNlQWxsUHJvbWlzZSA6IHByb21pc2VBbGxQcm9taXNlLCBicmVha3BvaW50c0FmZXJNYW5pcHVsYXRpb25zIDogYnJlYWtwb2ludHNBZmVyTWFuaXB1bGF0aW9ucyB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignRGVidWdnZXIgZXJyb3InLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVwbENsb3NlKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5fc2VuZCh7XHJcbiAgICAgICAgICAgIGV2ZW50OiAncmVwbCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdyZXBsX3N0b3AnXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVwbFNlbmQoY21kKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLl9zZW5kKHtcclxuICAgICAgICAgICAgZXZlbnQ6ICdyZXBsJyxcclxuICAgICAgICAgICAgbmFtZTogJ3JlcGxfZXZhbCcsXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICAgICAgICAgIGNtZDogY21kXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZXBsU3RhcnQoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmludm9rZSgncmVwbFN0YXJ0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QnJlYWtwb2ludChsaW5lKSB7XHJcbiAgICAgICAgLypcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl9zdWl0ZSAmJiB0aGlzLl9zdWl0ZS50ZXN0Y2FzZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdGMgPSB0aGlzLl9zdWl0ZS50ZXN0Y2FzZXNbdGNpbmRleF07XHJcbiAgICAgICAgICAgIGxvZy5kZWJ1Zygnb3h5Z2VuLnNldEJyZWFrcG9pbnQ6ICcgKyAobGluZSArIHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0KSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50KHRjLm5hbWUsIGxpbmUgKyB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCk7XHJcbiAgICAgICAgfSovXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJCcmVha3BvaW50KGxpbmUpIHtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGlmICh0aGlzLmRlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5jbGVhckJyZWFrcG9pbnQobGluZSArIHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0LCBudWxsKTtcclxuICAgICAgICB9Ki9cclxuICAgIH1cclxuXHJcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgKiBQcml2YXRlIG1ldGhvZHNcclxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG4gICAgYXN5bmMgX3J1blRlc3QoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFRlc3RSZXN1bHQoKTtcclxuICAgICAgICByZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIHJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuUEFTU0VEO1xyXG4gICAgICAgIHJlc3VsdC5zdWl0ZXMgPSBbXTtcclxuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIC8vIGNhbGwgYmVmb3JlVGVzdCBob29rXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxCZWZvcmVUZXN0SG9vaygpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBzdWl0ZXNcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgdGhpcy5fc3VpdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWl0ZVJlc3VsdCA9IGF3YWl0IHRoaXMuX3J1blN1aXRlKHN1aXRlKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMucHVzaChzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICByZXN1bHQuZHVyYXRpb24gPSByZXN1bHQuZW5kVGltZSAtIHJlc3VsdC5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZFN1aXRlcyA9IHJlc3VsdC5zdWl0ZXMuc29tZShzdWl0ZUl0ZXJhdGlvbnMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3VpdGVJdGVyYXRpb25zICYmIEFycmF5LmlzQXJyYXkoc3VpdGVJdGVyYXRpb25zKSAmJiBzdWl0ZUl0ZXJhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlSXRlcmF0aW9ucy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJlc3VsdC5zdGF0dXMgPSBoYXNGYWlsZWRTdWl0ZXMgPyBTdGF0dXMuRkFJTEVEIDogU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICByZXN1bHQuZW52aXJvbm1lbnQgPSB7IC4uLnRoaXMuX2VudiB9O1xyXG4gICAgICAgIC8vIGNvbWJpbmUgdGVzdCBkZWZpbmVkIGNhcHMgYW5kIHBlciBtb2R1bGUgY2FwYWJpbGl0aWVzLCB0aGF0IHdlcmUgcGFzc2VkIGJ5IHVzZXIgaW4gZWFjaCBtb2R1bGUncyBpbml0IGZ1bmN0aW9uXHJcbiAgICAgICAgcmVzdWx0LmNhcGFiaWxpdGllcyA9IHsgLi4udGhpcy5fY2FwcywgLi4udGhpcy5fbW9kQ2FwcyB9OyAgICAvLyBhc3NpZ24gYSBjb3B5IG9mIF9jYXBzIG9iamVjdFxyXG4gICAgICAgIHJlc3VsdC5vcHRpb25zID0geyAuLi50aGlzLl9vcHRpb25zIH07ICAvLyBhc3NpZ24gYSBjb3B5IG9mIF9vcHRpb25zIG9iamVjdFxyXG5cclxuICAgICAgICAvLyBpZiBlcnJvciBvY2N1cmVkLCBhZGQgaXQgdG8gdGhlIHN1bW1hcnlcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmZhaWx1cmUgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQWZ0ZXJUZXN0SG9vayhyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3J1blN1aXRlKHN1aXRlKSB7XHJcbiAgICAgICAgaWYgKCFzdWl0ZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ3N1aXRlIGlzIG51bGwgaW4gX3J1blN1aXRlKCkhISEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWdub3JlIHN1aXRlIHdpdGggbWlzc2luZyBtYW5kYXRvcnkgcHJvcGVydGllc1xyXG4gICAgICAgIGlmICghc3VpdGUubmFtZSAmJiAhc3VpdGUucGF0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBhbHdheXMgc3BlY2lmeSBzdWl0ZS5pdGVyYXRpb25Db3VudFxyXG4gICAgICAgIGlmICghc3VpdGUuaXRlcmF0aW9uQ291bnQpIHtcclxuICAgICAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHN1aXRlLml0ZXJhdGlvbkNvdW50ID4gMSkge1xyXG4gICAgICAgICAgICBzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVSdW5PbkZhaWx1cmUgPSB0aGlzLl9vcHRpb25zLnJlUnVuT25GYWlsZWQgfHwgZmFsc2U7XHJcbiAgICAgICAgY29uc3QgbWF4UmVydW5zID0gIXJlUnVuT25GYWlsdXJlID8gMCA6IHRoaXMuX29wdGlvbnMucmVSdW5Db3VudCB8fCBNQVhfUkVSVU5TO1xyXG4gICAgICAgIGNvbnN0IHJlUnVuRGVsYXkgPSB0aGlzLl9vcHRpb25zLnJlUnVuRGVsYXk7XHJcbiAgICAgICAgLy8gc2luZ2xlIHN1aXRlIG1pZ2h0IHByb2R1Y2UgbXVsdGlwbGUgcmVzdWx0cywgYmFzZWQgb24gYW1vdW50IG9mIGRlZmluZWQgaXRlcmF0aW9uc1xyXG4gICAgICAgIGNvbnN0IHN1aXRlSXRlcmF0aW9ucyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IHN1aXRlSXRlcmF0aW9uPTE7IHN1aXRlSXRlcmF0aW9uIDw9IHN1aXRlLml0ZXJhdGlvbkNvdW50OyBzdWl0ZUl0ZXJhdGlvbisrKSB7XHJcbiAgICAgICAgICAgIGlmIChzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uU3RhcnQodGhpcy5faWQsIHN1aXRlSXRlcmF0aW9uLCAnU3VpdGUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzdWl0ZVJlc3VsdCA9IG5ldyBUZXN0U3VpdGVSZXN1bHQoKTtcclxuICAgICAgICAgICAgc3VpdGVJdGVyYXRpb25zLnB1c2goc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5pZCA9IHRoaXMuX2N1cnJlbnRTdWl0ZVJlc3VsdElkID0gdjEoKTtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQubmFtZSA9IHN1aXRlLm5hbWUgfHwgb3h1dGlsLmdldEZpbGVOYW1lV2l0aG91dEV4dChzdWl0ZS5wYXRoKTtcclxuICAgICAgICAgICAgLy8gYSB1bmlxdWUgcmVmZXJlbmNlIGlmIG9mIHN1aXRlIGRlZmluaXRpb25cclxuICAgICAgICAgICAgLy8gc3VpdGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhbmQgZGVmaW5pdGlvbiBzaG91bGQgaGF2ZSB0aGUgc2FtZSByZWZJZFxyXG4gICAgICAgICAgICAvLyByZWZJZCBtaWdodCBhbHNvIGJlIGEgREIgaWQgb2YgdGhlIHN1aXRlIGluIHRoZSBDQiBwbGF0Zm9ybVxyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5yZWZJZCA9IHN1aXRlLnJlZklkIHx8IHN1aXRlLmlkIHx8IHN1aXRlLm5hbWU7XHJcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQuaXRlcmF0aW9uTnVtID0gc3VpdGVJdGVyYXRpb247XHJcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5QQVNTRUQ7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQmVmb3JlU3VpdGVIb29rKHN1aXRlKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25TdWl0ZVN0YXJ0KHRoaXMuX2lkLCBzdWl0ZVJlc3VsdC5pZCwgc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjYXplIG9mIHN1aXRlLmNhc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgY2FzZXMgd2l0aCBtaXNzaW5nIG1hbmRhdG9yeSAncGF0aCcgcHJvcGVydHkgXHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhemUucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjYXplLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXplLm5hbWUgPSBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGNhemUucGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhemUuaXRlcmF0aW9uQ291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXplLml0ZXJhdGlvbkNvdW50ID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNhc2VJdGVyYXRpb249MTsgY2FzZUl0ZXJhdGlvbiA8PSBjYXplLml0ZXJhdGlvbkNvdW50OyBjYXNlSXRlcmF0aW9uKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhemUgJiYgY2F6ZS5pdGVyYXRpb25Db3VudCAmJiBjYXplLml0ZXJhdGlvbkNvdW50ID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkl0ZXJhdGlvblN0YXJ0KHRoaXMuX2lkLCBjYXNlSXRlcmF0aW9uLCAnQ2FzZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBnZW5lcmF0ZSBjYXNlIHJlc3VsdCBpZFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhc2VSZXN1bHRJZCA9IHRoaXMuX2N1cnJlbnRDYXNlUmVzdWx0SWQgPSB2MSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlcG9ydCBjYXNlIHN0YXJ0IGV2ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25DYXNlU3RhcnQodGhpcy5faWQsIHN1aXRlUmVzdWx0LmlkLCBzdWl0ZVJlc3VsdC5yZWZJZCwgY2FzZVJlc3VsdElkIC8qY2F6ZS51cmkgfHwgY2F6ZS5pZCB8fCBjYXplLnBhdGgqLywgY2F6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9sZXQgcmVSdW5Db3VudCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhc2VSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcnVuIG9yIHJlLXJ1biB0aGUgY3VycmVudCB0ZXN0IGNhc2VcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByZVJ1bkNvdW50ID0gMDsgcmVSdW5Db3VudCA8PSBtYXhSZXJ1bnM7IHJlUnVuQ291bnQrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlUmVzdWx0ID0gYXdhaXQgdGhpcy5fcnVuQ2FzZShzdWl0ZSwgY2F6ZSwgc3VpdGVJdGVyYXRpb24sIGNhc2VJdGVyYXRpb24sIHJlUnVuQ291bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCFjYXNlUmVzdWx0IHx8IGNhc2VSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSAmJiAhcmVSdW5PbkZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNhc2VSZXN1bHQgJiYgY2FzZVJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZVJ1bkRlbGF5ICYmIHJlUnVuQ291bnQgPCBtYXhSZXJ1bnMgLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBveHV0aWwuc2xlZXAocmVSdW5EZWxheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5pZCA9IGNhc2VSZXN1bHRJZDtcclxuICAgICAgICAgICAgICAgICAgICAvLyByZXBvcnQgY2FzZSBlbmQgZXZlbnRcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkNhc2VFbmQodGhpcy5faWQsIHN1aXRlUmVzdWx0LmlkLCBzdWl0ZVJlc3VsdC5yZWZJZCwgY2FzZVJlc3VsdElkLCBjYXNlUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd0Nhc2VJdGVyYXRpb25zTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25JdGVyYXRpb25FbmQodGhpcy5faWQsIGNhc2VSZXN1bHQsICdDYXNlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBjYXNlIHJlc3VsdCB0byB0aGUgc3VpdGUgcmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgc3VpdGVSZXN1bHQuY2FzZXMucHVzaChjYXNlUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0ZXN0IGNhc2UgaXRlcmF0aW9uIGhhcyBmYWlsZWQsIHRoZW4gbWFyayB0aGUgZW50aXJlIHRlc3QgY2FzZSBhcyBmYWlsZWQsIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3AgaXRlcmF0aW5nIG92ZXIgaXQgYW5kIG1vdmUgdG8gdGhlIG5leHQgdGVzdCBjYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNhc2VSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuV0FSTklORykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuV0FSTklORztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQuZHVyYXRpb24gPSBzdWl0ZVJlc3VsdC5lbmRUaW1lIC0gc3VpdGVSZXN1bHQuc3RhcnRUaW1lO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNob3dTdWl0ZUl0ZXJhdGlvbnNNZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25JdGVyYXRpb25FbmQodGhpcy5faWQsIHN1aXRlUmVzdWx0LCAnU3VpdGUnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxBZnRlclN1aXRlSG9vayhzdWl0ZSwgc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vblN1aXRlRW5kKHRoaXMuX2lkLCBzdWl0ZVJlc3VsdC5pZCwgc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VpdGVJdGVyYXRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9ydW5DYXNlKHN1aXRlLCBjYXplLCBzdWl0ZUl0ZXJhdGlvbiwgY2FzZUl0ZXJhdGlvbiwgcmVSdW5Db3VudCA9IDApIHtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcclxuICAgICAgICBjb25zdCByZVJ1biA9IHJlUnVuQ291bnQgPiAwO1xyXG4gICAgICAgIC8vIGdldCB0ZXN0IHN1aXRlJ3MgcGFyYW1ldGVycyBpZiBkZWZpbmVkXHJcbiAgICAgICAgLy8gZ2V0IHRoZW0gZmlyc3QgYW5kIHRoZW4gb3ZlcnJpZGUgd2l0aCB0ZXN0IGNhc2UgbGV2ZWwgcGFyYW1ldGVycyBpZiBkZWZpbmVkXHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICBpZiAocmVSdW4pIHtcclxuICAgICAgICAgICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlci5yZWFkUHJldigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF8uZXh0ZW5kKHBhcmFtcywgc3VpdGUucGFyYW1NYW5hZ2VyLmdldFZhbHVlcygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVhZCB0ZXN0IGNhc2UncyBuZXh0IGxpbmVzIG9mIHBhcmFtZXRlcnMgaWYgcGFyYW1ldGVyIG1hbmFnZXIgaXMgZGVmaW5lZFxyXG4gICAgICAgIGlmIChjYXplLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICBpZiAocmVSdW4pIHtcclxuICAgICAgICAgICAgICAgIGNhemUucGFyYW1NYW5hZ2VyLnJlYWRQcmV2KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXy5leHRlbmQocGFyYW1zLCBjYXplLnBhcmFtTWFuYWdlci5nZXRWYWx1ZXMoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGQgYnJlYWtwb2ludHMgYmVmb3JlIHJ1bm5pbmcgdGhlIHNjcmlwdCBpZiBpbiBkZWJ1ZyBtb2RlXHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIGNhemUuYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBlZGl0b3IgaW5kZXggc3RhcnRzIGZyb20gMSwgYnV0IHdlIG5lZWQgemVybyBiYXNlZCBpbmRleFxyXG4gICAgICAgICAgICAgICAgbGV0IGxpbmUgPSBjYXplLmJyZWFrcG9pbnRzW2ldLmxpbmU7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IGNhemUuYnJlYWtwb2ludHNbaV0uZmlsZTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludChmaWxlLCBsaW5lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rKGNhemUpO1xyXG4gICAgICAgIGNvbnN0IGNhc2VSZXN1bHQgPSBuZXcgVGVzdENhc2VSZXN1bHQoKTtcclxuICAgICAgICBjYXNlUmVzdWx0Lm5hbWUgPSBjYXplLm5hbWU7XHJcbiAgICAgICAgY2FzZVJlc3VsdC5sb2NhdGlvbiA9IGNhemUucGF0aDtcclxuICAgICAgICBjYXNlUmVzdWx0Lml0ZXJhdGlvbk51bSA9IGNhc2VJdGVyYXRpb247XHJcbiAgICAgICAgY2FzZVJlc3VsdC5yZVJ1bkNvdW50ID0gcmVSdW5Db3VudDtcclxuXHJcbiAgICAgICAgLy8gdHJ5IHRvIGluaXRpYWxpemUgT3h5Z2VuIGFuZCBoYW5kbGUgYW55IHBvc3NpYmxlIGVycm9yXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKCEodGhpcy5fd29ya2VyKSAmJiB0aGlzLl93b3JrZXJfSW5pdE94eWdlbigpKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl93b3JrZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdfd29ya2VyX0luaXRPeHlnZW4oKSB0aHJvd24gYW4gZXJyb3I6JywgZSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhcnRUaW1lID0gY2FzZVJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmR1cmF0aW9uID0gMDtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICAgICAgc3VpdGUucGFyYW1NYW5hZ2VyLnJlYWROZXh0KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjYXplLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICAgICAgY2F6ZS5wYXJhbU1hbmFnZXIucmVhZE5leHQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNhc2VSZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0YXJ0IG5ldyB0ZXN0IHNlc3Npb25cclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfc3RhcnRTZXNzaW9uKCk7XHJcbiAgICAgICAgLy8gcnVuIHRoZSB0ZXN0IGluIHRoZSB3b3JrZXIgcHJvY2VzcyBhbmQgaGFuZGxlIGFueSBwb3NzaWJsZSBlcnJvclxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBjb25zdCB7IHJlc3VsdFN0b3JlLCBjb250ZXh0LCBtb2R1bGVDYXBzLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5fd29ya2VyX1J1bihzdWl0ZSwgY2F6ZSwgc3VpdGVJdGVyYXRpb24sIGNhc2VJdGVyYXRpb24sIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NUZXN0UmVzdWx0cyh7IHJlc3VsdFN0b3JlLCBjb250ZXh0LCBlcnJvciwgbW9kdWxlQ2FwcyB9KTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmR1cmF0aW9uID0gY2FzZVJlc3VsdC5lbmRUaW1lIC0gY2FzZVJlc3VsdC5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RlcHMgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5zdGVwcyA/IHJlc3VsdFN0b3JlLnN0ZXBzIDogW107XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQubG9ncyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmxvZ3MgPyByZXN1bHRTdG9yZS5sb2dzIDogW107XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuaGFyID0gcmVzdWx0U3RvcmUgJiYgcmVzdWx0U3RvcmUuaGFyID8gcmVzdWx0U3RvcmUuaGFyIDogbnVsbDtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC50ZXN0QXR0cmlidXRlcyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmF0dHJpYnV0ZXMgPyByZXN1bHRTdG9yZS5hdHRyaWJ1dGVzIDogbnVsbDtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5hdHRhY2htZW50cyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzID8gcmVzdWx0U3RvcmUuYXR0YWNobWVudHMgOiBudWxsO1xyXG5cclxuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHRlc3QgY2FzZSBpdGVyYXRpb24gc3RhdHVzIC0gbWFyayBpdCBhcyBmYWlsZWQgaWYgYW55IHN0ZXAgaGFzIGZhaWxlZFxyXG4gICAgICAgICAgICB2YXIgZmFpbGVkU3RlcHMgPSBfLmZpbmQoY2FzZVJlc3VsdC5zdGVwcywge3N0YXR1czogU3RhdHVzLkZBSUxFRH0pO1xyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN0ZXBzIHdpdGggV2FybmluZyBzdGF0dXNcclxuICAgICAgICAgICAgdmFyIHdhcm5pbmdTdGVwcyA9IF8uZmluZChjYXNlUmVzdWx0LnN0ZXBzLCB7c3RhdHVzOiBTdGF0dXMuV0FSTklOR30pO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IF8uaXNFbXB0eShmYWlsZWRTdGVwcykgJiYgIWVycm9yID8gU3RhdHVzLlBBU1NFRCA6IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5mYWlsdXJlID0gZXJyb3I7XHJcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LnN0ZXBzID0gb3h1dGlsLm1ha2VUcmFuc2FjdGlvbkZhaWxlZElmU3RlcEZhaWxlZChjYXNlUmVzdWx0LnN0ZXBzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghXy5pc0VtcHR5KHdhcm5pbmdTdGVwcykpIHtcclxuICAgICAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxBZnRlckNhc2VIb29rKGNhemUsIGNhc2VSZXN1bHQpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdfd29ya2VyX1J1bigpIHRocm93biBhbiBlcnJvcjonLCBlKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGlzcG9zZU94eWdlbk1vZHVsZXMgPSB0eXBlb2YgdGhpcy5fb3B0aW9ucy5hdXRvRGlzcG9zZSAhPT0gJ2Jvb2xlYW4nIHx8IHRoaXMuX29wdGlvbnMuYXV0b0Rpc3Bvc2UgPT09IHRydWU7XHJcbiAgICAgICAgLy8gZW5kIHNlc3Npb24gYW5kIGRpc3Bvc2UgT3h5Z2VuIG1vZHVsZXMgaWYgcmVxdWlyZWRcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfZW5kU2Vzc2lvbihjYXNlUmVzdWx0LnN0YXR1cywgZGlzcG9zZU94eWdlbk1vZHVsZXMpO1xyXG5cclxuICAgICAgICBpZiAoc3VpdGUucGFyYW1NYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlci5yZWFkTmV4dCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhemUucGFyYW1NYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIGNhemUucGFyYW1NYW5hZ2VyLnJlYWROZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FzZVJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX1J1bihzdWl0ZSwgY2F6ZSwgc3VpdGVJdGVyYXRpb24sIGNhc2VJdGVyYXRpb24sIHBhcmFtcykge1xyXG4gICAgICAgIGlmICghdGhpcy5fd29ya2VyKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignX3dvcmtlciBpcyBudWxsIGJ1dCBub3Qgc3VwcG9zZSB0byEnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93aGVuVGVzdENhc2VGaW5pc2hlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd2hlblRlc3RDYXNlRmluaXNoZWQucmVqZWN0KG5ldyBFcnJvcignX3dvcmtlciBpcyBudWxsJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc3RhcnQgcnVubmluZyB0aGUgdGVzdFxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl93b3JrZXIucnVuKHtcclxuICAgICAgICAgICAgc2NyaXB0TmFtZTogY2F6ZS5uYW1lLFxyXG4gICAgICAgICAgICBzY3JpcHRQYXRoOiBjYXplLnBhdGgsXHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgZW52OiB0aGlzLl9lbnYsXHJcbiAgICAgICAgICAgICAgICBjYXBzOiB0aGlzLl9jYXBzLFxyXG4gICAgICAgICAgICAgICAgdmFyczogdGhpcy5fdmFycyxcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRoaXMuX2F0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICB0ZXN0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjYXplLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogY2FzZUl0ZXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3VpdGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogc3VpdGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBzdWl0ZUl0ZXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcG9GaWxlOiB0aGlzLl9vcHRpb25zLnBvIHx8IG51bGwsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9Jbml0T3h5Z2VuKCkge1xyXG4gICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmluaXRPeHlnZW4odGhpcy5faWQsIHRoaXMuX29wdGlvbnMsIHRoaXMuX2NhcHMpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX3N0YXJ0U2Vzc2lvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5zdGFydFNlc3Npb24pIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0YXJ0U2Vzc2lvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX2VuZFNlc3Npb24oc3RhdHVzID0gbnVsbCwgZGlzcG9zZU1vZHVsZXMgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuZW5kU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZW5kU2Vzc2lvbihzdGF0dXMsIGRpc3Bvc2VNb2R1bGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQmVmb3JlVGVzdEhvb2soKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVUZXN0JywgW3RoaXMuX2lkLCB0aGlzLl9vcHRpb25zLCB0aGlzLl9jYXBzXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdcImJlZm9yZVRlc3RcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImJlZm9yZVRlc3RcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQmVmb3JlU3VpdGVIb29rKHN1aXRlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVTdWl0ZScsIFtzdWl0ZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVTdWl0ZVwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYmVmb3JlU3VpdGVcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQmVmb3JlQ2FzZUhvb2soY2F6ZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVDYXNlJywgW2NhemVdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVDYXNlXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVDYXNlXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEFmdGVyVGVzdEhvb2socmVzdWx0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2FmdGVyVGVzdCcsIFt0aGlzLl9pZCwgcmVzdWx0XSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJUZXN0XCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlclRlc3RcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQWZ0ZXJTdWl0ZUhvb2soc3VpdGUsIHJlc3VsdCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdhZnRlclN1aXRlJywgW3N1aXRlLCByZXN1bHRdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJhZnRlclN1aXRlXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlclN1aXRlXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEFmdGVyQ2FzZUhvb2soY2F6ZSwgcmVzdWx0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2FmdGVyQ2FzZScsIFtjYXplLCByZXN1bHRdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJhZnRlckNhc2VcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImFmdGVyQ2FzZVwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc3RhcnRXb3JrZXJQcm9jZXNzKCkge1xyXG4gICAgICAgIGNvbnN0IHdvcmtlclBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnd29ya2VyLmpzJyk7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyID0gbmV3IFdvcmtlclByb2Nlc3ModGhpcy5faWQsIHdvcmtlclBhdGgsIHRoaXMuX2RlYnVnTW9kZSwgdGhpcy5fZGVidWdQb3J0LCAnT3h5Z2VuJywgdGhpcy5fbnBtR1Jvb3RFeGVjdXRpb24pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5zdGFydCgpO1xyXG4gICAgICAgIHRoaXMuX2hvb2tXb3JrZXJFdmVudHMoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuc3RhcnREZWJ1Z2dlcigpO1xyXG4gICAgICAgIHRoaXMuX2hvb2tXb3JrZXJEZWJ1Z2dlckV2ZW50cygpO1xyXG4gICAgfVxyXG5cclxuICAgIF9ob29rV29ya2VyRXZlbnRzKCkge1xyXG4gICAgICAgIC8vIHByZXNlcnZlIHRoaXMgb2JqZWN0XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlci5zdWJzY3JpYmUoJ2NvbW1hbmQ6YmVmb3JlJywgdGhpcy5faGFuZGxlQmVmb3JlQ29tbWFuZC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl93b3JrZXIuc3Vic2NyaWJlKCdjb21tYW5kOmFmdGVyJywgdGhpcy5faGFuZGxlQWZ0ZXJDb21tYW5kLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlci5vbignZXJyb3InLCAocGF5bG9hZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IGVycm9yIH0gPSBwYXlsb2FkO1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1dvcmtlciBwcm9jZXNzIGVycm9yOiAnLCBlcnJvcik7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5leGl0RG9uZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCd0ZXN0LWVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX3dvcmtlclByb2NMYXN0RXJyb3IgPSBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlci5vbignZXhpdCcsIChwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhpdERvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb25zdCB7IGV4aXRDb2RlIH0gPSBwYXlsb2FkO1xyXG5cclxuICAgICAgICAgICAgaWYgKGV4aXRDb2RlICYmIGV4aXRDb2RlICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdGVzdCBpcyBydW5uaW5nIG9yIGlzIGJlaW5nIGRpc3Bvc2VkIGFuZCB0aGUgY2hpbGQgcHJvY2VzcyBoYXMgZGllZCxcclxuICAgICAgICAgICAgICAgIC8vIHRoZW4gZW5kIHRoZSB0ZXN0IG9yIGRpc3Bvc2FsIHdpdGggZmF0YWwgZXJyb3JcclxuICAgICAgICAgICAgICAgIC8vIChjaGlsZCBwcm9jZXNzIG5vdCBzdXBwb3NlIHRvIGRpZSB3aXRoIGNvZGUgPiAwKVxyXG4gICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLl9pc0Rpc3Bvc2luZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBfdGhpcy5fd2hlbkRpc3Bvc2VkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoX3RoaXMuX2lzUnVubmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBfdGhpcy5fd2hlblRlc3RDYXNlRmluaXNoZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBfdGhpcy5fd29ya2VyUHJvY0xhc3RFcnJvciB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4aXRDb2RlID09IDEzNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IE94eWdlbkVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdPdXQgb2YgbWVtb3J5IGVycm9yLiBNYWtlIHN1cmUgdGhhdCB5b3UgZG9uXFwndCBoYXZlIGFueSBtZW1vcnkgbGVha3MgaW4gdGhlIHRlc3Qgc2NyaXB0LicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgT3h5Z2VuRXJyb3IoYFdvcmtlciBwcm9jZXNzIGV4aXRlZCB3aXRoIGNvZGU6ICR7ZXhpdENvZGV9LmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHByb21pc2UgJiYgcHJvbWlzZS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX3Jlc2V0R2xvYmFsVmFyaWFibGVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl93b3JrZXIub24oJ21lc3NhZ2UnLCBhc3luYyAobXNnKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAnbG9nJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1zZy5sZXZlbCA9PT0gJ0RFQlVHJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1Zyhtc2cubXNnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmxldmVsID09PSAnSU5GTycpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhtc2cubXNnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmxldmVsID09PSAnRVJST1InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKG1zZy5tc2csIG1zZy5lcnIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cubGV2ZWwgPT09ICdXQVJOJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZy53YXJuKG1zZy5tc2cpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2xvZycsIG1zZy50aW1lLCBtc2cubGV2ZWwsIG1zZy5tc2csIG1zZy5zcmMgfHwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcG9ydGVyICYmIGF3YWl0IF90aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIG1zZy50aW1lLCBtc2cubGV2ZWwsIG1zZy5tc2csIG1zZy5zcmMgfHwgREVGQVVMVF9JU1NVRVIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVJZDogdGhpcy5fY3VycmVudFN1aXRlUmVzdWx0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2VJZDogdGhpcy5fY3VycmVudENhc2VSZXN1bHRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcElkOiB0aGlzLl9jdXJyZW50U3RlcFJlc3VsdElkLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICdsaW5lLXVwZGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2xpbmUtdXBkYXRlJywgbXNnLmxpbmUsIG1zZy5zdGFjaywgbXNnLnRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICdyZXN1bHQtdXBkYXRlJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1zZy5tZXRob2QgPT09ICdpbml0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2luaXQtZG9uZScsIG1zZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobXNnLmV2ZW50ICYmIG1zZy5ldmVudCA9PT0gJ3dvcmtlckVycm9yJykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3dvcmtlckVycm9yOicsIG1zZyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRpc3Bvc2UoJ2ZhaWxlZCcpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5raWxsKCdmYWlsZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAncmVwbCcpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ3JlcGwnLCBtc2cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hvb2tXb3JrZXJEZWJ1Z2dlckV2ZW50cygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3dvcmtlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIub24oJ2RlYnVnZ2VyOmJyZWFrJywgKGJyZWFrcG9pbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnYnJlYWtwb2ludCcsIGJyZWFrcG9pbnREYXRhKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5vbignZGVidWdnZXI6YnJlYWtFcnJvcicsIChicmVha0Vycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnYnJlYWtwb2ludEVycm9yJywgYnJlYWtFcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2hhbmRsZUJlZm9yZUNvbW1hbmQoZSkge1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwUmVzdWx0SWQgPSBlLmlkO1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uU3RlcFN0YXJ0KHRoaXMuX2lkLCB0aGlzLl9jdXJyZW50U3VpdGVSZXN1bHRJZCwgdGhpcy5fY3VycmVudENhc2VSZXN1bHRJZCwgZSk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChlICYmIGUubW9kdWxlICYmIGUubW9kdWxlID09PSAnbG9nJykge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlQ29tbWFuZCcsIFtlXSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVDb21tYW5kXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVDb21tYW5kXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9oYW5kbGVBZnRlckNvbW1hbmQoZSkge1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uU3RlcEVuZCh0aGlzLl9pZCwgdGhpcy5fY3VycmVudFN1aXRlUmVzdWx0SWQsIHRoaXMuX2N1cnJlbnRDYXNlUmVzdWx0SWQsIGUucmVzdWx0KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZSAmJiBlLm1vZHVsZSAmJiBlLm1vZHVsZSA9PT0gJ2xvZycpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2FmdGVyQ29tbWFuZCcsIFtlLnJlc3VsdF0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJDb21tYW5kXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlckNvbW1hbmRcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFN0ZXBSZXN1bHRJZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBfcmVzZXRHbG9iYWxWYXJpYWJsZXMoKSB7XHJcbiAgICAgICAgdGhpcy5fbW9kQ2FwcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3dvcmtlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5faXNEaXNwb3NpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3Rlc3RLaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl93aGVuRGlzcG9zZWQgPSBkZWZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzVGVzdFJlc3VsdHMoeyByZXN1bHRTdG9yZSwgbW9kdWxlQ2FwcywgY29udGV4dCA9IHt9LCBlcnJvciA9IG51bGwgfSkge1xyXG4gICAgICAgIC8vIGlmIHRlc3Qgd2FzIGtpbGxlZCBiZWZvcmUgYW55IHJlc3VsdHMgd2VyZSBnZW5lcmF0ZWQsIHRoZW4ganVzdCBmaW5hbGl6ZSB0aGUgdGVzdCB3aXRob3V0IHByb2Nlc3NpbmcgcmVzdWx0c1xyXG4gICAgICAgIGlmICh0aGlzLl90ZXN0S2lsbGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCd0ZXN0LWVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzdG9yZSAndmFycycgcGFydCBvZiB0aGUgY29udGV4dCBmb3IgYSBsYXRlciB1c2VcclxuICAgICAgICB0aGlzLl92YXJzID0gY29udGV4dC52YXJzIHx8IHRoaXMuX3ZhcnM7XHJcbiAgICAgICAgLy8gc3RvcmUgJ21vZENhcHMnIHBhcnQgb2YgdGhlIGNvbnRleHQgZm9yIGEgbGF0ZXIgdXNlXHJcbiAgICAgICAgdGhpcy5fbW9kQ2FwcyA9IHsgLi4udGhpcy5fbW9kQ2FwcywgLi4ubW9kdWxlQ2FwcyB8fCB7fSB9O1xyXG4gICAgICAgIC8vIGNsZWFuIHVwIGNvbnRleHQgZnJvbSBpbnRlcm5hbCBlbGVtZW50cywgbm90IG5lZWQgaW4gdGhlIHJlcG9ydDpcclxuICAgICAgICAvLyByZW1vdmUgY2FwcyBmcm9tIHRoZSBjb250ZXh0IGFzIGl0IGFscmVhZHkgYXBwZWFycyBpbiBUZXN0UmVzdWx0IG5vZGVcclxuICAgICAgICBpZiAoY29udGV4dC5jYXBzKVxyXG4gICAgICAgICAgICBkZWxldGUgY29udGV4dC5jYXBzO1xyXG4gICAgICAgIC8vIHJlbW92ZSBlbnYgZnJvbSB0aGUgY29udGV4dCBhcyBpdCBhbHJlYWR5IGFwcGVhcnMgaW4gVGVzdFJlc3VsdCBub2RlXHJcbiAgICAgICAgaWYgKGNvbnRleHQuZW52KVxyXG4gICAgICAgICAgICBkZWxldGUgY29udGV4dC5lbnY7XHJcbiAgICAgICAgLy8gcmVtb3ZlIHRlc3QgZnJvbSB0aGUgY29udGV4dCBhcyBpdCBhbHJlYWR5IGFwcGVhcnMgaW4gVGVzdFJlc3VsdCBub2RlXHJcbiAgICAgICAgaWYgKGNvbnRleHQudGVzdClcclxuICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQudGVzdDtcclxuICAgIH1cclxuXHJcbiAgICBfZW1pdEl0ZXJhdGlvbkVuZCh0cywgdGMsIHN1aXRlSXRlcmF0aW9uTnVtLCBjYXNlSXRlcmF0aW9uTnVtLCBjYXNlSXRlcmF0aW9uUmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdpdGVyYXRpb24tZW5kJywge1xyXG4gICAgICAgICAgICBzdGF0dXM6IGNhc2VJdGVyYXRpb25SZXN1bHQuX3N0YXR1cyxcclxuICAgICAgICAgICAgZmFpbHVyZTogY2FzZUl0ZXJhdGlvblJlc3VsdC5mYWlsdXJlIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGNhc2U6IHtcclxuICAgICAgICAgICAgICAgIGlkOiB0Yy5pZCB8fCBudWxsLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdGMubmFtZSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogY2FzZUl0ZXJhdGlvbk51bSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbkNvdW50OiB0Yy5pdGVyYXRpb25Db3VudFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdWl0ZToge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRzLmlkIHx8IG51bGwsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0cy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBzdWl0ZUl0ZXJhdGlvbk51bSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbkNvdW50OiB0cy5pdGVyYXRpb25Db3VudFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2VtaXRUZXN0RW5kKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgndGVzdC1lbmQnLCByZXN1bHQpO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IHsgUGFyYW1ldGVyTWFuYWdlciB9OyJdfQ==
|