@lynx-js/react 0.116.5 → 0.117.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -0
- package/package.json +2 -2
- package/refresh/.turbo/turbo-build.log +1 -1
- package/runtime/lazy/compat.js +4 -0
- package/runtime/lazy/internal.js +8 -0
- package/runtime/lazy/react.js +4 -0
- package/runtime/lepus/jsx-runtime/index.js +17 -17
- package/runtime/lib/debug/printSnapshot.d.ts +3 -3
- package/runtime/lib/debug/printSnapshot.js +2 -2
- package/runtime/lib/debug/printSnapshot.js.map +1 -1
- package/runtime/lib/document.d.ts +2 -2
- package/runtime/lib/document.js +2 -2
- package/runtime/lib/document.js.map +1 -1
- package/runtime/lib/gesture/types.d.ts +13 -12
- package/runtime/lib/gesture/types.js +11 -12
- package/runtime/lib/gesture/types.js.map +1 -1
- package/runtime/lib/hydrate.d.ts +1 -1
- package/runtime/lib/internal.d.ts +5 -3
- package/runtime/lib/internal.js +5 -3
- package/runtime/lib/internal.js.map +1 -1
- package/runtime/lib/lifecycle/isRendering.js +6 -8
- package/runtime/lib/lifecycle/isRendering.js.map +1 -1
- package/runtime/lib/lifecycle/patch/commit.d.ts +1 -1
- package/runtime/lib/lifecycle/patch/commit.js +9 -9
- package/runtime/lib/lifecycle/patch/commit.js.map +1 -1
- package/runtime/lib/lifecycle/patch/error.js +2 -1
- package/runtime/lib/lifecycle/patch/error.js.map +1 -1
- package/runtime/lib/lifecycle/patch/globalState.d.ts +8 -0
- package/runtime/lib/lifecycle/patch/globalState.js +14 -0
- package/runtime/lib/lifecycle/patch/globalState.js.map +1 -0
- package/runtime/lib/lifecycle/patch/snapshotPatchApply.js +1 -1
- package/runtime/lib/lifecycle/patch/snapshotPatchApply.js.map +1 -1
- package/runtime/lib/lifecycle/patch/updateMainThread.js +1 -1
- package/runtime/lib/lifecycle/patch/updateMainThread.js.map +1 -1
- package/runtime/lib/lifecycle/ref/delay.js +1 -1
- package/runtime/lib/lifecycle/ref/delay.js.map +1 -1
- package/runtime/lib/lifecycle/reload.js +2 -1
- package/runtime/lib/lifecycle/reload.js.map +1 -1
- package/runtime/lib/lifecycle/render.js +1 -1
- package/runtime/lib/lifecycle/render.js.map +1 -1
- package/runtime/lib/lifecycleConstant.d.ts +15 -13
- package/runtime/lib/lifecycleConstant.js +13 -15
- package/runtime/lib/lifecycleConstant.js.map +1 -1
- package/runtime/lib/list.d.ts +1 -1
- package/runtime/lib/list.js.map +1 -1
- package/runtime/lib/listUpdateInfo.d.ts +1 -1
- package/runtime/lib/lynx/calledByNative.js +2 -1
- package/runtime/lib/lynx/calledByNative.js.map +1 -1
- package/runtime/lib/lynx/injectLepusMethods.js +1 -1
- package/runtime/lib/lynx/injectLepusMethods.js.map +1 -1
- package/runtime/lib/lynx/performance.js +6 -13
- package/runtime/lib/lynx/performance.js.map +1 -1
- package/runtime/lib/lynx/suspense.js.map +1 -1
- package/runtime/lib/lynx/tt.js +18 -12
- package/runtime/lib/lynx/tt.js.map +1 -1
- package/runtime/lib/lynx-api.d.ts +75 -0
- package/runtime/lib/lynx-api.js +113 -0
- package/runtime/lib/lynx-api.js.map +1 -1
- package/runtime/lib/opcodes.d.ts +1 -1
- package/runtime/lib/opcodes.js +13 -16
- package/runtime/lib/opcodes.js.map +1 -1
- package/runtime/lib/renderToOpcodes/constants.d.ts +2 -0
- package/runtime/lib/renderToOpcodes/constants.js +2 -0
- package/runtime/lib/renderToOpcodes/constants.js.map +1 -1
- package/runtime/lib/root.d.ts +2 -2
- package/runtime/lib/root.js +2 -2
- package/runtime/lib/root.js.map +1 -1
- package/runtime/lib/{backgroundSnapshot.d.ts → snapshot/backgroundSnapshot.d.ts} +13 -3
- package/runtime/lib/{backgroundSnapshot.js → snapshot/backgroundSnapshot.js} +79 -30
- package/runtime/lib/snapshot/backgroundSnapshot.js.map +1 -0
- package/runtime/lib/snapshot/constants.d.ts +11 -0
- package/runtime/lib/snapshot/constants.js +15 -0
- package/runtime/lib/snapshot/constants.js.map +1 -0
- package/runtime/lib/snapshot/definition.d.ts +29 -0
- package/runtime/lib/snapshot/definition.js +109 -0
- package/runtime/lib/snapshot/definition.js.map +1 -0
- package/runtime/lib/snapshot/dynamicPartType.d.ts +13 -8
- package/runtime/lib/snapshot/dynamicPartType.js +12 -9
- package/runtime/lib/snapshot/dynamicPartType.js.map +1 -1
- package/runtime/lib/snapshot/event.d.ts +1 -1
- package/runtime/lib/snapshot/event.js +1 -1
- package/runtime/lib/snapshot/event.js.map +1 -1
- package/runtime/lib/snapshot/gesture.d.ts +1 -1
- package/runtime/lib/snapshot/gesture.js +0 -1
- package/runtime/lib/snapshot/gesture.js.map +1 -1
- package/runtime/lib/snapshot/index.d.ts +4 -0
- package/runtime/lib/snapshot/index.js +8 -0
- package/runtime/lib/snapshot/index.js.map +1 -0
- package/runtime/lib/snapshot/list.d.ts +1 -1
- package/runtime/lib/snapshot/platformInfo.d.ts +1 -1
- package/runtime/lib/snapshot/platformInfo.js +0 -1
- package/runtime/lib/snapshot/platformInfo.js.map +1 -1
- package/runtime/lib/snapshot/ref.d.ts +1 -1
- package/runtime/lib/snapshot/ref.js.map +1 -1
- package/runtime/lib/snapshot/snapshot.d.ts +57 -0
- package/runtime/lib/{snapshot.js → snapshot/snapshot.js} +11 -172
- package/runtime/lib/snapshot/snapshot.js.map +1 -0
- package/runtime/lib/snapshot/snapshotInstanceHydrationMap.js.map +1 -0
- package/runtime/lib/snapshot/spread.d.ts +2 -2
- package/runtime/lib/snapshot/spread.js +1 -1
- package/runtime/lib/snapshot/spread.js.map +1 -1
- package/runtime/lib/snapshot/types.d.ts +19 -0
- package/runtime/lib/snapshot/types.js +5 -0
- package/runtime/lib/snapshot/types.js.map +1 -0
- package/runtime/lib/snapshot/utils.d.ts +12 -0
- package/runtime/lib/snapshot/utils.js +20 -0
- package/runtime/lib/snapshot/utils.js.map +1 -0
- package/runtime/lib/snapshot/workletEvent.d.ts +1 -1
- package/runtime/lib/snapshot/workletEvent.js +1 -1
- package/runtime/lib/snapshot/workletEvent.js.map +1 -1
- package/runtime/lib/snapshot/workletRef.d.ts +1 -1
- package/runtime/lib/utils.js +1 -1
- package/testing-library/dist/env/vitest.js +39 -0
- package/testing-library/dist/index.d.ts +8 -0
- package/testing-library/dist/pure.js +1 -1
- package/testing-library/dist/vitest-global-setup.js +1 -2
- package/transform/dist/wasm.cjs +1 -1
- package/worklet-runtime/dist/dev.js +1 -1
- package/worklet-runtime/lib/api/animation/animation.js.map +1 -1
- package/worklet-runtime/lib/api/animation/effect.js.map +1 -1
- package/worklet-runtime/lib/api/element.js.map +1 -1
- package/worklet-runtime/lib/api/lepusQuerySelector.js.map +1 -1
- package/worklet-runtime/lib/api/lynxApi.js.map +1 -1
- package/worklet-runtime/lib/bindings/bindings.js.map +1 -1
- package/worklet-runtime/lib/bindings/events.js.map +1 -1
- package/worklet-runtime/lib/bindings/index.js.map +1 -1
- package/worklet-runtime/lib/bindings/loadRuntime.js.map +1 -1
- package/worklet-runtime/lib/bindings/observers.js +3 -1
- package/worklet-runtime/lib/bindings/observers.js.map +1 -1
- package/worklet-runtime/lib/bindings/types.js.map +1 -1
- package/worklet-runtime/lib/delayRunOnBackground.js.map +1 -1
- package/worklet-runtime/lib/delayWorkletEvent.js.map +1 -1
- package/worklet-runtime/lib/eomImpl.js.map +1 -1
- package/worklet-runtime/lib/eventPropagation.js.map +1 -1
- package/worklet-runtime/lib/global.js.map +1 -1
- package/worklet-runtime/lib/hydrate.js.map +1 -1
- package/worklet-runtime/lib/index.js.map +1 -1
- package/worklet-runtime/lib/jsFunctionLifecycle.js.map +1 -1
- package/worklet-runtime/lib/listeners.js.map +1 -1
- package/worklet-runtime/lib/runOnMainThread.js.map +1 -1
- package/worklet-runtime/lib/utils/mainThreadFlushLoopGuard.js.map +1 -1
- package/worklet-runtime/lib/utils/profile.js.map +1 -1
- package/worklet-runtime/lib/utils/version.js.map +1 -1
- package/worklet-runtime/lib/workletRef.js.map +1 -1
- package/worklet-runtime/lib/workletRuntime.js.map +1 -1
- package/runtime/lib/backgroundSnapshot.js.map +0 -1
- package/runtime/lib/snapshot.d.ts +0 -104
- package/runtime/lib/snapshot.js.map +0 -1
- package/runtime/lib/snapshotInstanceHydrationMap.js.map +0 -1
- /package/runtime/lib/{snapshotInstanceHydrationMap.d.ts → snapshot/snapshotInstanceHydrationMap.d.ts} +0 -0
- /package/runtime/lib/{snapshotInstanceHydrationMap.js → snapshot/snapshotInstanceHydrationMap.js} +0 -0
|
@@ -622,4 +622,4 @@
|
|
|
622
622
|
}
|
|
623
623
|
})();
|
|
624
624
|
|
|
625
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2FwaS9hbmltYXRpb24vYW5pbWF0aW9uLnRzPzMzZmYiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2FwaS9hbmltYXRpb24vZWZmZWN0LnRzPzFlNTUiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL3V0aWxzL21haW5UaHJlYWRGbHVzaExvb3BHdWFyZC50cz85NTM5Iiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy91dGlscy92ZXJzaW9uLnRzPzM3ZjUiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2FwaS9lbGVtZW50LnRzP2UxNGYiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2FwaS9sZXB1c1F1ZXJ5U2VsZWN0b3IudHM/OWZhNCIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvYXBpL2x5bnhBcGkudHM/MWIxMyIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvcnVuT25NYWluVGhyZWFkLnRzP2Q3MWIiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL3V0aWxzL3Byb2ZpbGUudHM/YzE2ZCIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvd29ya2xldFJlZi50cz9hMWZlIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9saXN0ZW5lcnMudHM/NmM4MiIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvZGVsYXlSdW5PbkJhY2tncm91bmQudHM/MmY2YiIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvZGVsYXlXb3JrbGV0RXZlbnQudHM/MTU0ZiIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvZW9tSW1wbC50cz82MGU1Iiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy9ldmVudFByb3BhZ2F0aW9uLnRzP2NjMTciLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4vc3JjL2h5ZHJhdGUudHM/Mjc5NSIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi9zcmMvanNGdW5jdGlvbkxpZmVjeWNsZS50cz8yYzgzIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uL3NyYy93b3JrbGV0UnVudGltZS50cz9jNWNmIiwiW3JlbGF0aXZlLXJlc291cmNlLXBhdGhdIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI1IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgdHlwZSB7IEtleWZyYW1lRWZmZWN0IH0gZnJvbSAnLi9lZmZlY3QuanMnO1xuXG5leHBvcnQgZW51bSBBbmltYXRpb25PcGVyYXRpb24ge1xuICBTVEFSVCA9IDAsIC8vIFN0YXJ0IGEgbmV3IGFuaW1hdGlvblxuICBQTEFZID0gMSwgLy8gUGxheS9yZXN1bWUgYSBwYXVzZWQgYW5pbWF0aW9uXG4gIFBBVVNFID0gMiwgLy8gUGF1c2UgYW4gZXhpc3RpbmcgYW5pbWF0aW9uXG4gIENBTkNFTCA9IDMsIC8vIENhbmNlbCBhbiBhbmltYXRpb25cbn1cblxuZXhwb3J0IGNsYXNzIEFuaW1hdGlvbiB7XG4gIHN0YXRpYyBjb3VudCA9IDA7XG4gIHB1YmxpYyByZWFkb25seSBlZmZlY3Q6IEtleWZyYW1lRWZmZWN0O1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihlZmZlY3Q6IEtleWZyYW1lRWZmZWN0KSB7XG4gICAgdGhpcy5lZmZlY3QgPSBlZmZlY3Q7XG4gICAgdGhpcy5pZCA9ICdfX2x5bngtaW5uZXItanMtYW5pbWF0aW9uLScgKyBBbmltYXRpb24uY291bnQrKztcbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYWNjZXNzaW5nIHByaXZhdGUgbWVtYmVyICdlbGVtZW50J1xuICAgIHJldHVybiBfX0VsZW1lbnRBbmltYXRlKHRoaXMuZWZmZWN0LnRhcmdldC5lbGVtZW50LCBbQW5pbWF0aW9uT3BlcmF0aW9uLkNBTkNFTCwgdGhpcy5pZF0pO1xuICB9XG5cbiAgcHVibGljIHBhdXNlKCk6IHZvaWQge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYWNjZXNzaW5nIHByaXZhdGUgbWVtYmVyICdlbGVtZW50J1xuICAgIHJldHVybiBfX0VsZW1lbnRBbmltYXRlKHRoaXMuZWZmZWN0LnRhcmdldC5lbGVtZW50LCBbQW5pbWF0aW9uT3BlcmF0aW9uLlBBVVNFLCB0aGlzLmlkXSk7XG4gIH1cblxuICBwdWJsaWMgcGxheSgpOiB2b2lkIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFjY2Vzc2luZyBwcml2YXRlIG1lbWJlciAnZWxlbWVudCdcbiAgICByZXR1cm4gX19FbGVtZW50QW5pbWF0ZSh0aGlzLmVmZmVjdC50YXJnZXQuZWxlbWVudCwgW0FuaW1hdGlvbk9wZXJhdGlvbi5QTEFZLCB0aGlzLmlkXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0KCk6IHZvaWQge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYWNjZXNzaW5nIHByaXZhdGUgbWVtYmVyICdlbGVtZW50J1xuICAgIHJldHVybiBfX0VsZW1lbnRBbmltYXRlKHRoaXMuZWZmZWN0LnRhcmdldC5lbGVtZW50LCBbXG4gICAgICBBbmltYXRpb25PcGVyYXRpb24uU1RBUlQsXG4gICAgICB0aGlzLmlkLFxuICAgICAgdGhpcy5lZmZlY3Qua2V5ZnJhbWVzLFxuICAgICAgdGhpcy5lZmZlY3Qub3B0aW9ucyxcbiAgICBdKTtcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjUgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB0eXBlIHsgRWxlbWVudCB9IGZyb20gJy4uL2VsZW1lbnQuanMnO1xuXG5leHBvcnQgY2xhc3MgS2V5ZnJhbWVFZmZlY3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0OiBFbGVtZW50O1xuICBwdWJsaWMgcmVhZG9ubHkga2V5ZnJhbWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+W107XG4gIHB1YmxpYyByZWFkb25seSBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRhcmdldDogRWxlbWVudCxcbiAgICBrZXlmcmFtZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz5bXSxcbiAgICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+LFxuICApIHtcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB0aGlzLmtleWZyYW1lcyA9IGtleWZyYW1lcztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNiBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuXG5jb25zdCBUUkFDRV9MSU1JVCA9IDI1NjtcbmNvbnN0IERFRkFVTFRfRkxVU0hfTElNSVQgPSAyNTY7XG5cbmxldCB0cmFjZTogc3RyaW5nW10gPSBbXTtcblxubGV0IGZsdXNoQ291bnRJbldpbmRvdyA9IDA7XG5sZXQgcmVzZXRTY2hlZHVsZWQgPSBmYWxzZTtcbmxldCB0cmlwcGVkRXJyb3I6IEVycm9yIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIHB1c2hUcmFjZShtYXJrZXI6IHN0cmluZyk6IHZvaWQge1xuICB0cmFjZS5wdXNoKG1hcmtlcik7XG4gIGlmICh0cmFjZS5sZW5ndGggPiBUUkFDRV9MSU1JVCkge1xuICAgIHRyYWNlID0gdHJhY2Uuc2xpY2UodHJhY2UubGVuZ3RoIC0gVFJBQ0VfTElNSVQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXByZXNzVHJhY2UobWFya2Vyczogc3RyaW5nW10pOiBzdHJpbmcge1xuICBpZiAobWFya2Vycy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdO1xuICAvLyBEaXNwbGF5IG1vc3QtcmVjZW50LWZpcnN0IHRvIG1ha2UgbG9vcHMgZWFzaWVyIHRvIHJlYWQuXG4gIGxldCBwcmV2ID0gbWFya2Vyc1ttYXJrZXJzLmxlbmd0aCAtIDFdITtcbiAgbGV0IGNvdW50ID0gMTtcblxuICBmb3IgKGxldCBpID0gbWFya2Vycy5sZW5ndGggLSAyOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGN1ciA9IG1hcmtlcnNbaV0hO1xuICAgIGlmIChjdXIgPT09IHByZXYpIHtcbiAgICAgIGNvdW50Kys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgb3V0LnB1c2goY291bnQgPT09IDEgPyBwcmV2IDogYCR7cHJldn0geCR7Y291bnR9YCk7XG4gICAgcHJldiA9IGN1cjtcbiAgICBjb3VudCA9IDE7XG4gIH1cbiAgb3V0LnB1c2goY291bnQgPT09IDEgPyBwcmV2IDogYCR7cHJldn0geCR7Y291bnR9YCk7XG4gIHJldHVybiBvdXQuam9pbignIDwtICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFpblRocmVhZEZsdXNoTG9vcE1hcmsobWFya2VyOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKF9fREVWX18pIHtcbiAgICBwdXNoVHJhY2UobWFya2VyKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFpblRocmVhZEZsdXNoTG9vcE9uRmx1c2hNaWNyb3Rhc2soKTogRXJyb3IgfCBudWxsIHtcbiAgLyogdjggaWdub3JlIG5leHQgMSAqL1xuICBpZiAoIV9fREVWX18pIHJldHVybiBudWxsO1xuICBpZiAodHJpcHBlZEVycm9yKSByZXR1cm4gdHJpcHBlZEVycm9yO1xuXG4gIGlmICghcmVzZXRTY2hlZHVsZWQpIHtcbiAgICByZXNldFNjaGVkdWxlZCA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBtYWluVGhyZWFkRmx1c2hMb29wUmVzZXQoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIGZsdXNoQ291bnRJbldpbmRvdysrO1xuICBjb25zdCBsaW1pdCA9IERFRkFVTFRfRkxVU0hfTElNSVQ7XG4gIGlmIChmbHVzaENvdW50SW5XaW5kb3cgPiBsaW1pdCkge1xuICAgIGNvbnN0IHRyYWNlVGV4dCA9IGNvbXByZXNzVHJhY2UodHJhY2UpO1xuICAgIHRyaXBwZWRFcnJvciA9IG5ldyBFcnJvcihcbiAgICAgIGBbUmVhY3RMeW54XVtERVZdIE1haW5UaHJlYWQgZmx1c2ggbG9vcCBkZXRlY3RlZDogcmVuZGVyIGV4ZWN1dGVkICR7Zmx1c2hDb3VudEluV2luZG93fSB0aW1lcyB3aXRob3V0IHlpZWxkaW5nIChsaW1pdD0ke2xpbWl0fSkuIFRyYWNlOiAke3RyYWNlVGV4dH1gLFxuICAgICk7XG4gICAgcmV0dXJuIHRyaXBwZWRFcnJvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFpblRocmVhZEZsdXNoTG9vcFJlcG9ydChlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgaWYgKF9fREVWX18pIHtcbiAgICAvLyBUaHJvdyBvbiBtYWNyb3Rhc2sgdG8gYXZvaWQgUHJvbWlzZS11bmhhbmRsZWQtcmVqZWN0aW9uIG5vaXNlLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1haW5UaHJlYWRGbHVzaExvb3BSZXNldCgpOiB2b2lkIHtcbiAgdHJhY2UgPSBbXTtcbiAgZmx1c2hDb3VudEluV2luZG93ID0gMDtcbiAgcmVzZXRTY2hlZHVsZWQgPSBmYWxzZTtcbiAgdHJpcHBlZEVycm9yID0gbnVsbDtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5leHBvcnQgZnVuY3Rpb24gaXNTZGtWZXJzaW9uR3QobWFqb3I6IG51bWJlciwgbWlub3I6IG51bWJlcik6IGJvb2xlYW4ge1xuICBjb25zdCBseW54U2RrVmVyc2lvbjogc3RyaW5nID0gU3lzdGVtSW5mby5seW54U2RrVmVyc2lvbiA/PyAnMS4wJztcbiAgY29uc3QgdmVyc2lvbiA9IGx5bnhTZGtWZXJzaW9uLnNwbGl0KCcuJyk7XG4gIHJldHVybiAoXG4gICAgTnVtYmVyKHZlcnNpb25bMF0pID4gbWFqb3JcbiAgICB8fCAoTnVtYmVyKHZlcnNpb25bMF0pID09IG1ham9yICYmIE51bWJlcih2ZXJzaW9uWzFdKSA+IG1pbm9yKVxuICApO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IEFuaW1hdGlvbiB9IGZyb20gJy4vYW5pbWF0aW9uL2FuaW1hdGlvbi5qcyc7XG5pbXBvcnQgeyBLZXlmcmFtZUVmZmVjdCB9IGZyb20gJy4vYW5pbWF0aW9uL2VmZmVjdC5qcyc7XG5pbXBvcnQge1xuICBtYWluVGhyZWFkRmx1c2hMb29wTWFyayxcbiAgbWFpblRocmVhZEZsdXNoTG9vcE9uRmx1c2hNaWNyb3Rhc2ssXG4gIG1haW5UaHJlYWRGbHVzaExvb3BSZXBvcnQsXG59IGZyb20gJy4uL3V0aWxzL21haW5UaHJlYWRGbHVzaExvb3BHdWFyZC5qcyc7XG5pbXBvcnQgeyBpc1Nka1ZlcnNpb25HdCB9IGZyb20gJy4uL3V0aWxzL3ZlcnNpb24uanMnO1xuXG5sZXQgd2lsbEZsdXNoID0gZmFsc2U7XG5sZXQgc2hvdWxkRmx1c2ggPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2hvdWxkRmx1c2godmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgc2hvdWxkRmx1c2ggPSB2YWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnQge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHNldCBpbiBjb25zdHJ1Y3RvclxuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQ6IEVsZW1lbnROb2RlO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnROb2RlKSB7XG4gICAgLy8gSW4gTHlueCB2ZXJzaW9ucyBwcmlvciB0byBhbmQgaW5jbHVkaW5nIDIuMTUsXG4gICAgLy8gYSBjcmFzaCBvY2N1cnMgd2hlbiBwcmludGluZyBvciB0cmFuc2ZlcnJpbmcgcmVmQ291bnRlZCBhY3Jvc3MgdGhyZWFkcy5cbiAgICAvLyBCeXBhc3MgdGhpcyBwcm9ibGVtIGJ5IGhpZGluZyB0aGUgZWxlbWVudCBvYmplY3QuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbGVtZW50Jywge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICAvKiB2OCBpZ25vcmUgbmV4dCAzICovXG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIG1haW5UaHJlYWRGbHVzaExvb3BNYXJrKGBlbGVtZW50OnNldEF0dHJpYnV0ZSAke25hbWV9YCk7XG4gICAgfVxuICAgIF9fU2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudCwgbmFtZSwgdmFsdWUpO1xuICAgIHRoaXMuZmx1c2hFbGVtZW50VHJlZSgpO1xuICB9XG5cbiAgcHVibGljIHNldFN0eWxlUHJvcGVydHkobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBtYWluVGhyZWFkRmx1c2hMb29wTWFyayhgZWxlbWVudDpzZXRTdHlsZVByb3BlcnR5ICR7bmFtZX1gKTtcbiAgICB9XG4gICAgX19BZGRJbmxpbmVTdHlsZSh0aGlzLmVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICB0aGlzLmZsdXNoRWxlbWVudFRyZWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdHlsZVByb3BlcnRpZXMoc3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgLyogdjggaWdub3JlIG5leHQgNSAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBtYWluVGhyZWFkRmx1c2hMb29wTWFyayhcbiAgICAgICAgYGVsZW1lbnQ6c2V0U3R5bGVQcm9wZXJ0aWVzIGtleXM9JHtPYmplY3Qua2V5cyhzdHlsZXMpLmxlbmd0aH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc3R5bGVzKSB7XG4gICAgICBfX0FkZElubGluZVN0eWxlKHRoaXMuZWxlbWVudCwga2V5LCBzdHlsZXNba2V5XSEpO1xuICAgIH1cbiAgICB0aGlzLmZsdXNoRWxlbWVudFRyZWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgcmV0dXJuIF9fR2V0QXR0cmlidXRlQnlOYW1lKHRoaXMuZWxlbWVudCwgYXR0cmlidXRlTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXR0cmlidXRlTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBfX0dldEF0dHJpYnV0ZU5hbWVzKHRoaXMuZWxlbWVudCk7XG4gIH1cblxuICBwdWJsaWMgcXVlcnlTZWxlY3RvcihzZWxlY3Rvcjogc3RyaW5nKTogRWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IHJlZiA9IF9fUXVlcnlTZWxlY3Rvcih0aGlzLmVsZW1lbnQsIHNlbGVjdG9yLCB7fSk7XG4gICAgcmV0dXJuIHJlZiA/IG5ldyBFbGVtZW50KHJlZikgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIHF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3I6IHN0cmluZyk6IEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIF9fUXVlcnlTZWxlY3RvckFsbCh0aGlzLmVsZW1lbnQsIHNlbGVjdG9yLCB7fSkubWFwKChlbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gbmV3IEVsZW1lbnQoZWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tcHV0ZWRTdHlsZVByb3BlcnR5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWlzU2RrVmVyc2lvbkd0KDMsIDQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdnZXRDb21wdXRlZFN0eWxlUHJvcGVydHkgcmVxdWlyZXMgTHlueCBzZGsgdmVyc2lvbiAzLjUnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDb21wdXRlZFN0eWxlUHJvcGVydHk6IGtleSBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gX19HZXRDb21wdXRlZFN0eWxlQnlLZXkodGhpcy5lbGVtZW50LCBrZXkpO1xuICB9XG5cbiAgcHVibGljIGFuaW1hdGUoXG4gICAga2V5ZnJhbWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+W10sXG4gICAgb3B0aW9ucz86IG51bWJlciB8IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz4sXG4gICk6IEFuaW1hdGlvbiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZE9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gJ251bWJlcicgPyB7IGR1cmF0aW9uOiBvcHRpb25zIH0gOiBvcHRpb25zID8/IHt9O1xuICAgIHJldHVybiBuZXcgQW5pbWF0aW9uKG5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLCBrZXlmcmFtZXMsIG5vcm1hbGl6ZWRPcHRpb25zKSk7XG4gIH1cblxuICBwdWJsaWMgaW52b2tlKFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBtYWluVGhyZWFkRmx1c2hMb29wTWFyayhgZWxlbWVudDppbnZva2UgJHttZXRob2ROYW1lfWApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgX19JbnZva2VVSU1ldGhvZChcbiAgICAgICAgdGhpcy5lbGVtZW50LFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXJhbXMgPz8ge30sXG4gICAgICAgIChyZXM6IHsgY29kZTogbnVtYmVyOyBkYXRhOiB1bmtub3duIH0pID0+IHtcbiAgICAgICAgICBpZiAocmVzLmNvZGUgPT09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzLmRhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdVSSBtZXRob2QgaW52b2tlOiAnICsgSlNPTi5zdHJpbmdpZnkocmVzKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICB0aGlzLmZsdXNoRWxlbWVudFRyZWUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2hFbGVtZW50VHJlZSgpIHtcbiAgICBpZiAod2lsbEZsdXNoIHx8ICFzaG91bGRGbHVzaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3aWxsRmx1c2ggPSB0cnVlO1xuICAgIHZvaWQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICB3aWxsRmx1c2ggPSBmYWxzZTtcbiAgICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICAgIG1haW5UaHJlYWRGbHVzaExvb3BNYXJrKCdyZW5kZXInKTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBtYWluVGhyZWFkRmx1c2hMb29wT25GbHVzaE1pY3JvdGFzaygpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBTdG9wIHNjaGVkdWxpbmcgZnVydGhlciBmbHVzaGVzIHNvIHdlIGNhbiBzdXJmYWNlIHRoZSBlcnJvci5cbiAgICAgICAgICAvLyBUaGlzIGlzIERFVi1vbmx5IGJlaGF2aW9yIGd1YXJkZWQgaW50ZXJuYWxseSBieSB0aGUgZGV2IGd1YXJkLlxuICAgICAgICAgIHNob3VsZEZsdXNoID0gZmFsc2U7XG4gICAgICAgICAgbWFpblRocmVhZEZsdXNoTG9vcFJlcG9ydChlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBfX0ZsdXNoRWxlbWVudFRyZWUoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tICcuL2VsZW1lbnQuanMnO1xuXG5jbGFzcyBQYWdlRWxlbWVudCB7XG4gIHByaXZhdGUgc3RhdGljIHBhZ2VFbGVtZW50OiBFbGVtZW50Tm9kZSB8IHVuZGVmaW5lZDtcblxuICBzdGF0aWMgZ2V0KCkge1xuICAgIFBhZ2VFbGVtZW50LnBhZ2VFbGVtZW50ID8/PSBfX0dldFBhZ2VFbGVtZW50KCk7XG4gICAgcmV0dXJuIFBhZ2VFbGVtZW50LnBhZ2VFbGVtZW50O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yKGNzc1NlbGVjdG9yOiBzdHJpbmcpOiBFbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGVsZW1lbnQgPSBfX1F1ZXJ5U2VsZWN0b3IoUGFnZUVsZW1lbnQuZ2V0KCksIGNzc1NlbGVjdG9yLCB7fSk7XG4gIHJldHVybiBlbGVtZW50ID8gbmV3IEVsZW1lbnQoZWxlbWVudCkgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTZWxlY3RvckFsbChjc3NTZWxlY3Rvcjogc3RyaW5nKTogRWxlbWVudFtdIHtcbiAgcmV0dXJuIF9fUXVlcnlTZWxlY3RvckFsbChQYWdlRWxlbWVudC5nZXQoKSwgY3NzU2VsZWN0b3IsIHt9KS5tYXAoXG4gICAgKGVsZW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBuZXcgRWxlbWVudChlbGVtZW50KTtcbiAgICB9LFxuICApO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IHF1ZXJ5U2VsZWN0b3IsIHF1ZXJ5U2VsZWN0b3JBbGwgfSBmcm9tICcuL2xlcHVzUXVlcnlTZWxlY3Rvci5qcyc7XG5pbXBvcnQgeyBpc1Nka1ZlcnNpb25HdCB9IGZyb20gJy4uL3V0aWxzL3ZlcnNpb24uanMnO1xuXG5mdW5jdGlvbiBpbml0QXBpRW52KCk6IHZvaWQge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgbHlueC5xdWVyeVNlbGVjdG9yID0gcXVlcnlTZWxlY3RvcjtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGx5bngucXVlcnlTZWxlY3RvckFsbCA9IHF1ZXJ5U2VsZWN0b3JBbGw7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBnbG9iYWxUaGlzLnNldFRpbWVvdXQgPSBseW54LnNldFRpbWVvdXQgYXMgKGNiOiAoKSA9PiB2b2lkLCB0aW1lb3V0OiBudW1iZXIpID0+IG51bWJlcjtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGdsb2JhbFRoaXMuc2V0SW50ZXJ2YWwgPSBseW54LnNldEludGVydmFsIGFzIChjYjogKCkgPT4gdm9pZCwgdGltZW91dDogbnVtYmVyKSA9PiBudW1iZXI7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBnbG9iYWxUaGlzLmNsZWFyVGltZW91dCA9IGx5bnguY2xlYXJUaW1lb3V0IGFzICh0aW1lb3V0OiBudW1iZXIpID0+IHZvaWQ7XG4gIC8vIEluIGx5bnggMi4xNCBgY2xlYXJJbnRlcnZhbGAgaXMgbWlzdGFrZW5seSBzcGVsbGVkIGFzIGBjbGVhclRpbWVJbnRlcnZhbGAuIFRoaXMgaXMgZml4ZWQgaW4gbHlueCAyLjE1LlxuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5jbGVhckludGVydmFsID0gKGx5bnguY2xlYXJJbnRlcnZhbCA/PyBseW54LmNsZWFyVGltZUludGVydmFsKSBhcyAodGltZW91dDogbnVtYmVyKSA9PiB2b2lkO1xuXG4gIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgICBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBseW54LnJlcXVlc3RBbmltYXRpb25GcmFtZSBhcyAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IG51bWJlcjtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgICBseW54LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGdsb2JhbFRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gKFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHZvaWQsXG4gICAgKSA9PiB7XG4gICAgICBpZiAoIWlzU2RrVmVyc2lvbkd0KDIsIDE1KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ3JlcXVlc3RBbmltYXRpb25GcmFtZSBpbiBtYWluIHRocmVhZCBzY3JpcHQgcmVxdWlyZXMgTHlueCBzZGsgdmVyc2lvbiAyLjE2JyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spO1xuICAgIH07XG4gIH1cblxuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGx5bnguY2FuY2VsQW5pbWF0aW9uRnJhbWUgYXMgKHJlcXVlc3RJZDogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgeyBpbml0QXBpRW52IH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNSBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgV29ya2xldEV2ZW50cyB9IGZyb20gJy4vYmluZGluZ3MvaW5kZXguanMnO1xuaW1wb3J0IHR5cGUgeyBDbG9zdXJlVmFsdWVUeXBlLCBSdW5Xb3JrbGV0Q3R4UmV0RGF0YSwgV29ya2xldCB9IGZyb20gJy4vYmluZGluZ3MvaW5kZXguanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVuUnVuT25NYWluVGhyZWFkVGFzayh0YXNrOiBXb3JrbGV0LCBwYXJhbXM6IENsb3N1cmVWYWx1ZVR5cGVbXSwgcmVzb2x2ZUlkOiBudW1iZXIpOiB2b2lkIHtcbiAgbGV0IHJldHVyblZhbHVlO1xuICB0cnkge1xuICAgIHJldHVyblZhbHVlID0gcnVuV29ya2xldCh0YXNrLCBwYXJhbXMpO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIFRPRE86IFNob3VsZCBiZSBtb3JlIHByb3BlciB0byByZWplY3QgdGhlIHByb21pc2UgaWYgdGhlcmUgaXMgYW4gZXJyb3IuXG4gICAgbHlueC5nZXRKU0NvbnRleHQoKS5kaXNwYXRjaEV2ZW50KHtcbiAgICAgIHR5cGU6IFdvcmtsZXRFdmVudHMuRnVuY3Rpb25DYWxsUmV0LFxuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICByZXNvbHZlSWQsXG4gICAgICAgIHJldHVyblZhbHVlLFxuICAgICAgfSBhcyBSdW5Xb3JrbGV0Q3R4UmV0RGF0YSksXG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5leHBvcnQgZnVuY3Rpb24gcHJvZmlsZTxSZXQsIEZuIGV4dGVuZHMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUmV0PihcbiAgc2xpY2VOYW1lOiBzdHJpbmcsXG4gIGY6IEZuLFxuKTogUmV0IHtcbiAgLyogdjggaWdub3JlIG5leHQgOSAqL1xuICAvLyBUT0RPOiBjaGFuZ2UgaXQgdG8gX19QUk9GSUxFX19cbiAgaWYgKF9fREVWX18pIHtcbiAgICBjb25zb2xlLnByb2ZpbGU/LihzbGljZU5hbWUpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zb2xlLnByb2ZpbGVFbmQ/LigpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZigpO1xuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gJy4vYXBpL2VsZW1lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBXb3JrbGV0UmVmLCBXb3JrbGV0UmVmSWQsIFdvcmtsZXRSZWZJbXBsIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5pbXBvcnQgeyBtYWluVGhyZWFkRmx1c2hMb29wTWFyayB9IGZyb20gJy4vdXRpbHMvbWFpblRocmVhZEZsdXNoTG9vcEd1YXJkLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuXG5pbnRlcmZhY2UgUmVmSW1wbCB7XG4gIF93b3JrbGV0UmVmTWFwOiBSZWNvcmQ8V29ya2xldFJlZklkLCBXb3JrbGV0UmVmPHVua25vd24+PjtcbiAgX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcDogUmVjb3JkPFdvcmtsZXRSZWZJZCwgV29ya2xldFJlZjx1bmtub3duPj47XG4gIHVwZGF0ZVdvcmtsZXRSZWYoXG4gICAgcmVmSW1wbDogV29ya2xldFJlZkltcGw8RWxlbWVudCB8IG51bGw+LFxuICAgIGVsZW1lbnQ6IEVsZW1lbnROb2RlIHwgbnVsbCxcbiAgKTogdm9pZDtcbiAgdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMocGF0Y2g6IFtudW1iZXIsIHVua25vd25dW10pOiB2b2lkO1xuICBjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCgpOiB2b2lkO1xufVxuXG5sZXQgaW1wbDogUmVmSW1wbCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaW5pdFdvcmtsZXRSZWYoKTogUmVmSW1wbCB7XG4gIHJldHVybiAoaW1wbCA9IHtcbiAgICBfd29ya2xldFJlZk1hcDoge30sXG4gICAgLyoqXG4gICAgICogTWFwIG9mIHdvcmtsZXQgcmVmcyB0aGF0IGFyZSBjcmVhdGVkIGR1cmluZyBmaXJzdCBzY3JlZW4gcmVuZGVyaW5nLlxuICAgICAqIFRoZXNlIHJlZnMgYXJlIGNyZWF0ZWQgd2l0aCBuZWdhdGl2ZSBJRHMgYW5kIG5lZWQgdG8gYmUgaHlkcmF0ZWRcbiAgICAgKiB3aGVuIHRoZSBhcHAgc3RhcnRzLiBUaGUgbWFwIGlzIGNsZWFyZWQgYWZ0ZXIgaHlkcmF0aW9uIGlzIGNvbXBsZXRlXG4gICAgICogdG8gZnJlZSB1cCBtZW1vcnkuXG4gICAgICovXG4gICAgX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcDoge30sXG4gICAgdXBkYXRlV29ya2xldFJlZixcbiAgICB1cGRhdGVXb3JrbGV0UmVmSW5pdFZhbHVlQ2hhbmdlcyxcbiAgICBjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCxcbiAgfSk7XG59XG5cbmNvbnN0IGNyZWF0ZVdvcmtsZXRSZWYgPSA8VD4oXG4gIGlkOiBXb3JrbGV0UmVmSWQsXG4gIHZhbHVlOiBULFxuKTogV29ya2xldFJlZjxUPiA9PiB7XG4gIHJldHVybiB7XG4gICAgY3VycmVudDogdmFsdWUsXG4gICAgX3d2aWQ6IGlkLFxuICB9O1xufTtcblxuY29uc3QgZ2V0RnJvbVdvcmtsZXRSZWZNYXAgPSA8VD4oXG4gIHJlZkltcGw6IFdvcmtsZXRSZWZJbXBsPFQ+LFxuKTogV29ya2xldFJlZjxUPiA9PiB7XG4gIGNvbnN0IGlkID0gcmVmSW1wbC5fd3ZpZDtcbiAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICBpZiAoX19ERVZfXykge1xuICAgIG1haW5UaHJlYWRGbHVzaExvb3BNYXJrKGBNYWluVGhyZWFkUmVmOmdldCBpZD0ke2lkfWApO1xuICB9XG4gIGxldCB2YWx1ZTtcbiAgaWYgKGlkIDwgMCkge1xuICAgIC8vIEF0IHRoZSBmaXJzdCBzY3JlZW4gcmVuZGVyaW5nLCB0aGUgd29ya2xldCByZWYgaXMgY3JlYXRlZCB3aXRoIGEgbmVnYXRpdmUgSUQuXG4gICAgLy8gTWlnaHQgYmUgY2FsbGVkIGluIHR3byBzY2VuYXJpb3M6XG4gICAgLy8gMS4gSW4gTVRTIGV2ZW50c1xuICAgIC8vIDIuIEluIGBtYWluLXRocmVhZDpyZWZgXG4gICAgdmFsdWUgPSBpbXBsIS5fZmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwW2lkXSBhcyBXb3JrbGV0UmVmPFQ+O1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHZhbHVlID0gaW1wbCEuX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcFtpZF0gPSBjcmVhdGVXb3JrbGV0UmVmKGlkLCByZWZJbXBsLl9pbml0VmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGltcGwhLl93b3JrbGV0UmVmTWFwW2lkXSBhcyBXb3JrbGV0UmVmPFQ+O1xuICB9XG5cbiAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICBpZiAoX19ERVZfXyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNYWluVGhyZWFkUmVmIGlzIG5vdCBpbml0aWFsaXplZDogJyArIGlkKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5mdW5jdGlvbiByZW1vdmVWYWx1ZUZyb21Xb3JrbGV0UmVmTWFwKGlkOiBXb3JrbGV0UmVmSWQpOiB2b2lkIHtcbiAgZGVsZXRlIGltcGwhLl93b3JrbGV0UmVmTWFwW2lkXTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZWxlbWVudCBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudCBub2RlLCB0aGVuIHNldCB0aGUgd29ya2xldCB2YWx1ZSB0byBpdC5cbiAqIFRoaXMgaXMgY2FsbGVkIGluIGBzbmFwc2hvdENvbnRleHRVcGRhdGVXb3JrbGV0UmVmYC5cbiAqIEBwYXJhbSBoYW5kbGUgaGFuZGxlIG9mIHRoZSB3b3JrbGV0IHZhbHVlLlxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlV29ya2xldFJlZihcbiAgaGFuZGxlOiBXb3JrbGV0UmVmSW1wbDxFbGVtZW50IHwgbnVsbD4sXG4gIGVsZW1lbnQ6IEVsZW1lbnROb2RlIHwgbnVsbCxcbik6IHZvaWQge1xuICBnZXRGcm9tV29ya2xldFJlZk1hcChoYW5kbGUpLmN1cnJlbnQgPSBlbGVtZW50XG4gICAgPyBuZXcgRWxlbWVudChlbGVtZW50KVxuICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMoXG4gIHBhdGNoOiBbV29ya2xldFJlZklkLCB1bmtub3duXVtdLFxuKTogdm9pZCB7XG4gIHByb2ZpbGUoJ3VwZGF0ZVdvcmtsZXRSZWZJbml0VmFsdWVDaGFuZ2VzJywgKCkgPT4ge1xuICAgIHBhdGNoLmZvckVhY2goKFtpZCwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAoIWltcGwhLl93b3JrbGV0UmVmTWFwW2lkXSkge1xuICAgICAgICBpbXBsIS5fd29ya2xldFJlZk1hcFtpZF0gPSBjcmVhdGVXb3JrbGV0UmVmKGlkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCgpOiB2b2lkIHtcbiAgaW1wbCEuX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCA9IHt9O1xufVxuXG5leHBvcnQge1xuICB0eXBlIFJlZkltcGwsXG4gIGNyZWF0ZVdvcmtsZXRSZWYsXG4gIGluaXRXb3JrbGV0UmVmLFxuICBnZXRGcm9tV29ya2xldFJlZk1hcCxcbiAgcmVtb3ZlVmFsdWVGcm9tV29ya2xldFJlZk1hcCxcbiAgdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMsXG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IFdvcmtsZXRFdmVudHMgfSBmcm9tICcuL2JpbmRpbmdzL2V2ZW50cy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlbGVhc2VXb3JrbGV0UmVmRGF0YSwgUnVuV29ya2xldEN0eERhdGEgfSBmcm9tICcuL2JpbmRpbmdzL2V2ZW50cy5qcyc7XG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IHJ1blJ1bk9uTWFpblRocmVhZFRhc2sgfSBmcm9tICcuL3J1bk9uTWFpblRocmVhZC5qcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50IH0gZnJvbSAnLi90eXBlcy9ydW50aW1lUHJveHkuanMnO1xuaW1wb3J0IHsgcmVtb3ZlVmFsdWVGcm9tV29ya2xldFJlZk1hcCB9IGZyb20gJy4vd29ya2xldFJlZi5qcyc7XG5cbmZ1bmN0aW9uIGluaXRFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgY29uc3QganNDb250ZXh0ID0gbHlueC5nZXRKU0NvbnRleHQoKTtcbiAganNDb250ZXh0LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgV29ya2xldEV2ZW50cy5ydW5Xb3JrbGV0Q3R4LFxuICAgIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEgYXMgc3RyaW5nKSBhcyBSdW5Xb3JrbGV0Q3R4RGF0YTtcbiAgICAgIHJ1blJ1bk9uTWFpblRocmVhZFRhc2soZGF0YS53b3JrbGV0LCBkYXRhLnBhcmFtcyBhcyBDbG9zdXJlVmFsdWVUeXBlW10sIGRhdGEucmVzb2x2ZUlkKTtcbiAgICB9LFxuICApO1xuICBqc0NvbnRleHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBXb3JrbGV0RXZlbnRzLnJlbGVhc2VXb3JrbGV0UmVmLFxuICAgIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIHJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAoKGV2ZW50LmRhdGEgYXMgUmVsZWFzZVdvcmtsZXRSZWZEYXRhKS5pZCk7XG4gICAgfSxcbiAgKTtcbn1cblxuZXhwb3J0IHsgaW5pdEV2ZW50TGlzdGVuZXJzIH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHR5cGUgeyBKc0ZuSGFuZGxlIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5cbmludGVyZmFjZSBEZXRhaWxzIHtcbiAgdGFzazogKGZuSWQ6IG51bWJlciwgZXhlY0lkOiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgLy8gVGhpcyBjb21lcyBmcm9tIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCwgaW5zZXJ0ZWQgaGVyZSBkdXJpbmcgY3R4IGh5ZHJhdGlvbi5cbiAganNGbkhhbmRsZT86IEpzRm5IYW5kbGU7XG59XG5cbmludGVyZmFjZSBSdW5PbkJhY2tncm91bmREZWxheUltcGwge1xuICAvLyBFbGVtZW50cyBzaG91bGQga2VlcCB0aGUgb3JkZXIgYmVpbmcgY2FsbGVkIGJ5IHRoZSB1c2VyLlxuICBkZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXk6IERldGFpbHNbXTtcbiAgZGVsYXlSdW5PbkJhY2tncm91bmQoZm5PYmo6IEpzRm5IYW5kbGUsIGZuOiAoZm5JZDogbnVtYmVyLCBleGVjSWQ6IG51bWJlcikgPT4gdm9pZCk6IHZvaWQ7XG4gIHJ1bkRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25zKCk6IHZvaWQ7XG59XG5cbmxldCBpbXBsOiBSdW5PbkJhY2tncm91bmREZWxheUltcGwgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGluaXRSdW5PbkJhY2tncm91bmREZWxheSgpOiBSdW5PbkJhY2tncm91bmREZWxheUltcGwge1xuICByZXR1cm4gKGltcGwgPSB7XG4gICAgZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5OiBbXSxcbiAgICBkZWxheVJ1bk9uQmFja2dyb3VuZCxcbiAgICBydW5EZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9ucyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlbGF5UnVuT25CYWNrZ3JvdW5kKGZuT2JqOiBKc0ZuSGFuZGxlLCB0YXNrOiAoZm5JZDogbnVtYmVyLCBleGVjSWQ6IG51bWJlcikgPT4gdm9pZCkge1xuICBpbXBsIS5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXkucHVzaCh7IHRhc2sgfSk7XG4gIGNvbnN0IGRlbGF5SW5kaWNlcyA9IGZuT2JqLl9kZWxheUluZGljZXMgPz89IFtdO1xuICBkZWxheUluZGljZXMucHVzaChpbXBsIS5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXkubGVuZ3RoIC0gMSk7XG59XG5cbmZ1bmN0aW9uIHJ1bkRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25zKCk6IHZvaWQge1xuICBmb3IgKGNvbnN0IGRldGFpbHMgb2YgaW1wbCEuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5KSB7XG4gICAgaWYgKGRldGFpbHMuanNGbkhhbmRsZSkge1xuICAgICAgZGV0YWlscy50YXNrKGRldGFpbHMuanNGbkhhbmRsZS5fanNGbklkISwgZGV0YWlscy5qc0ZuSGFuZGxlLl9leGVjSWQhKTtcbiAgICB9XG4gIH1cbiAgaW1wbCEuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5Lmxlbmd0aCA9IDA7XG59XG5cbmV4cG9ydCB7IHR5cGUgUnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsLCBpbml0UnVuT25CYWNrZ3JvdW5kRGVsYXkgfTtcbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUsIFdvcmtsZXQgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuXG5pbnRlcmZhY2UgRXZlbnREZWxheUltcGwge1xuICBfZGVsYXllZFdvcmtsZXRQYXJhbXNNYXA6IE1hcDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGVbXVtdPjtcbiAgcnVuRGVsYXllZFdvcmtsZXQod29ya2xldDogV29ya2xldCwgZWxlbWVudDogRWxlbWVudE5vZGUpOiB2b2lkO1xuICBjbGVhckRlbGF5ZWRXb3JrbGV0cygpOiB2b2lkO1xufVxuXG5sZXQgaW1wbDogRXZlbnREZWxheUltcGwgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGluaXRFdmVudERlbGF5KCk6IEV2ZW50RGVsYXlJbXBsIHtcbiAgcmV0dXJuIChpbXBsID0ge1xuICAgIF9kZWxheWVkV29ya2xldFBhcmFtc01hcDogbmV3IE1hcCgpLFxuICAgIHJ1bkRlbGF5ZWRXb3JrbGV0LFxuICAgIGNsZWFyRGVsYXllZFdvcmtsZXRzLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVsYXlFeGVjVW50aWxKc1JlYWR5KFxuICBoYXNoOiBzdHJpbmcsXG4gIHBhcmFtczogQ2xvc3VyZVZhbHVlVHlwZVtdLFxuKTogdm9pZCB7XG4gIHByb2ZpbGUoJ2RlbGF5RXhlY1VudGlsSnNSZWFkeTogJyArIGhhc2gsICgpID0+IHtcbiAgICBjb25zdCBtYXAgPSBpbXBsIS5fZGVsYXllZFdvcmtsZXRQYXJhbXNNYXA7XG4gICAgY29uc3QgcGFyYW1WZWMgPSBtYXAuZ2V0KGhhc2gpO1xuICAgIGlmIChwYXJhbVZlYykge1xuICAgICAgcGFyYW1WZWMucHVzaChwYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXAuc2V0KGhhc2gsIFtwYXJhbXNdKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBydW5EZWxheWVkV29ya2xldCh3b3JrbGV0OiBXb3JrbGV0LCBlbGVtZW50OiBFbGVtZW50Tm9kZSk6IHZvaWQge1xuICBwcm9maWxlKCdjb21taXREZWxheWVkV29ya2xldCcsICgpID0+IHtcbiAgICBjb25zdCBwYXJhbXNWZWMgPSBpbXBsIS5fZGVsYXllZFdvcmtsZXRQYXJhbXNNYXAuZ2V0KFxuICAgICAgd29ya2xldC5fd2tsdElkLFxuICAgICk7XG4gICAgaWYgKHBhcmFtc1ZlYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxlZnRQYXJhbXNWZWM6IENsb3N1cmVWYWx1ZVR5cGVbXVtdID0gW107XG4gICAgcGFyYW1zVmVjLmZvckVhY2goKHBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgZmlyc3RQYXJhbSA9IHBhcmFtc1swXSBhcyB7IGN1cnJlbnRUYXJnZXQ/OiB7IGVsZW1lbnRSZWZwdHI/OiBFbGVtZW50Tm9kZSB9IH0gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZmlyc3RQYXJhbT8uY3VycmVudFRhcmdldD8uZWxlbWVudFJlZnB0ciA9PT0gZWxlbWVudCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBwcm9maWxlKCdydW5EZWxheWVkV29ya2xldCcsICgpID0+IHtcbiAgICAgICAgICAgIHJ1bldvcmtsZXQod29ya2xldCwgcGFyYW1zKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0UGFyYW1zVmVjLnB1c2gocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpbXBsIS5fZGVsYXllZFdvcmtsZXRQYXJhbXNNYXAuc2V0KFxuICAgICAgd29ya2xldC5fd2tsdElkLFxuICAgICAgbGVmdFBhcmFtc1ZlYyxcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJEZWxheWVkV29ya2xldHMoKTogdm9pZCB7XG4gIGltcGwhLl9kZWxheWVkV29ya2xldFBhcmFtc01hcC5jbGVhcigpO1xufVxuXG5leHBvcnQgeyB0eXBlIEV2ZW50RGVsYXlJbXBsLCBpbml0RXZlbnREZWxheSwgZGVsYXlFeGVjVW50aWxKc1JlYWR5LCBydW5EZWxheWVkV29ya2xldCwgY2xlYXJEZWxheWVkV29ya2xldHMgfTtcbiIsIi8vIENvcHlyaWdodCAyMDI1IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBzZXRTaG91bGRGbHVzaCB9IGZyb20gJy4vYXBpL2VsZW1lbnQuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVvbUltcGwge1xuICBzZXRTaG91bGRGbHVzaCh2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0RW9tSW1wbCgpOiBFb21JbXBsIHtcbiAgcmV0dXJuIHtcbiAgICBzZXRTaG91bGRGbHVzaCxcbiAgfTtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5cbmltcG9ydCB0eXBlIHsgQ2xvc3VyZVZhbHVlVHlwZSwgRXZlbnRDdHgsIFJ1bldvcmtsZXRPcHRpb25zIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5pbXBvcnQgeyBSdW5Xb3JrbGV0U291cmNlIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5cbi8vIEV2ZW50UmVzdWx0IGVudW0gdmFsdWVzXG5leHBvcnQgY29uc3QgRXZlbnRSZXN1bHQgPSB7XG4gIGtEZWZhdWx0OiAweDAsXG4gIGtTdG9wUHJvcGFnYXRpb25NYXNrOiAweDEsXG4gIGtTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25NYXNrOiAweDIsXG59IGFzIGNvbnN0O1xuXG50eXBlIEV2ZW50TGlrZSA9IFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFdmVudE9iamVjdChcbiAgY3R4OiBDbG9zdXJlVmFsdWVUeXBlW10sXG4gIG9wdGlvbnM/OiBSdW5Xb3JrbGV0T3B0aW9ucyxcbik6IGN0eCBpcyBbRXZlbnRMaWtlLCAuLi5DbG9zdXJlVmFsdWVUeXBlW11dIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGN0eCkgfHwgdHlwZW9mIGN0eFswXSAhPT0gJ29iamVjdCcgfHwgY3R4WzBdID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc291cmNlID09PSBSdW5Xb3JrbGV0U291cmNlLkVWRU5UKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBldmVudCBtZXRob2RzIHRvIGFuIGV2ZW50IG9iamVjdCBpZiBuZWVkZWRcbiAqIEBwYXJhbSBjdHggVGhlIGV2ZW50IG9iamVjdCB0byBlbmhhbmNlXG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgcnVuIHdvcmtsZXQgb3B0aW9uc1xuICogQHJldHVybnMgQSB0dXBsZSBvZiBib29sZWFuIGFuZCB0aGUgZXZlbnQgcmV0dXJuIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRNZXRob2RzSWZOZWVkZWQoY3R4OiBDbG9zdXJlVmFsdWVUeXBlW10sIG9wdGlvbnM/OiBSdW5Xb3JrbGV0T3B0aW9ucyk6IFtib29sZWFuLCBFdmVudEN0eF0ge1xuICBpZiAoIWlzRXZlbnRPYmplY3QoY3R4LCBvcHRpb25zKSkge1xuICAgIHJldHVybiBbZmFsc2UsIHt9XTtcbiAgfVxuICBjb25zdCBldmVudEN0eDogRXZlbnRDdHggPSB7fTtcbiAgY29uc3QgZXZlbnRPYmogPSBjdHhbMF07XG5cbiAgLy8gQWRkIHN0b3BQcm9wYWdhdGlvbiBtZXRob2RcbiAgZXZlbnRPYmpbJ3N0b3BQcm9wYWdhdGlvbiddID0gZnVuY3Rpb24oKSB7XG4gICAgZXZlbnRDdHguX2V2ZW50UmV0dXJuUmVzdWx0ID0gKGV2ZW50Q3R4Ll9ldmVudFJldHVyblJlc3VsdCA/PyBFdmVudFJlc3VsdC5rRGVmYXVsdClcbiAgICAgIHwgRXZlbnRSZXN1bHQua1N0b3BQcm9wYWdhdGlvbk1hc2s7XG4gIH07XG5cbiAgLy8gQWRkIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiBtZXRob2RcbiAgZXZlbnRPYmpbJ3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiddID0gZnVuY3Rpb24oKSB7XG4gICAgZXZlbnRDdHguX2V2ZW50UmV0dXJuUmVzdWx0ID0gKGV2ZW50Q3R4Ll9ldmVudFJldHVyblJlc3VsdCA/PyBFdmVudFJlc3VsdC5rRGVmYXVsdClcbiAgICAgIHwgRXZlbnRSZXN1bHQua1N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbk1hc2s7XG4gIH07XG5cbiAgcmV0dXJuIFt0cnVlLCBldmVudEN0eF07XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuXG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUsIEpzRm5IYW5kbGUsIFdvcmtsZXQsIFdvcmtsZXRSZWZJZCwgV29ya2xldFJlZkltcGwgfSBmcm9tICcuL2JpbmRpbmdzL2luZGV4LmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuXG4vKipcbiAqIEh5ZHJhdGVzIGEgV29ya2xldCBjb250ZXh0IHdpdGggZGF0YSBmcm9tIGEgZmlyc3Qtc2NyZWVuIFdvcmtsZXQgY29udGV4dC5cbiAqIFRoaXMgcHJvY2VzcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBydW4gYWxsIGRlbGF5ZWQgYHJ1bk9uQmFja2dyb3VuZGAgZnVuY3Rpb25zXG4gKiBhbmQgaW5pdGlhbGl6ZSBgV29ya2xldFJlZmAgdmFsdWVzIG1vZGlmaWVkIGJlZm9yZSBoeWRyYXRpb24uXG4gKlxuICogQHBhcmFtIGN0eCBUaGUgdGFyZ2V0IFdvcmtsZXQgY29udGV4dCB0byBiZSBoeWRyYXRlZC5cbiAqIEBwYXJhbSBmaXJzdFNjcmVlbkN0eCBUaGUgV29ya2xldCBjb250ZXh0IGZyb20gdGhlIGZpcnN0IHNjcmVlbiByZW5kZXJpbmcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyB0aGUgZGF0YSB0byBoeWRyYXRlIHdpdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlQ3R4KGN0eDogV29ya2xldCwgZmlyc3RTY3JlZW5DdHg6IFdvcmtsZXQpOiB2b2lkIHtcbiAgcHJvZmlsZSgnaHlkcmF0ZUN0eCcsICgpID0+IHtcbiAgICBoeWRyYXRlQ3R4SW1wbChjdHgsIGZpcnN0U2NyZWVuQ3R4LCBjdHguX2V4ZWNJZCEpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaHlkcmF0ZUN0eEltcGwoXG4gIGN0eDogQ2xvc3VyZVZhbHVlVHlwZSxcbiAgZmlyc3RTY3JlZW5DdHg6IENsb3N1cmVWYWx1ZVR5cGUsXG4gIGV4ZWNJZDogbnVtYmVyLFxuKTogdm9pZCB7XG4gIGlmIChcbiAgICAhY3R4IHx8IHR5cGVvZiBjdHggIT09ICdvYmplY3QnIHx8ICFmaXJzdFNjcmVlbkN0eFxuICAgIHx8IHR5cGVvZiBmaXJzdFNjcmVlbkN0eCAhPT0gJ29iamVjdCdcbiAgKSByZXR1cm47XG5cbiAgY29uc3QgY3R4T2JqID0gY3R4IGFzIFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuICBjb25zdCBmaXJzdFNjcmVlbkN0eE9iaiA9IGZpcnN0U2NyZWVuQ3R4IGFzIFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuXG4gIGlmIChjdHhPYmpbJ193a2x0SWQnXSAmJiBjdHhPYmpbJ193a2x0SWQnXSAhPT0gZmlyc3RTY3JlZW5DdHhPYmpbJ193a2x0SWQnXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZm9yLWluLWFycmF5XG4gIGZvciAoY29uc3Qga2V5IGluIGN0eCkge1xuICAgIGlmIChrZXkgPT09ICdfd3ZpZCcpIHtcbiAgICAgIGh5ZHJhdGVNYWluVGhyZWFkUmVmKFxuICAgICAgICBjdHhPYmpba2V5XSBhcyBXb3JrbGV0UmVmSWQsXG4gICAgICAgIGZpcnN0U2NyZWVuQ3R4T2JqIGFzIHVua25vd24gYXMgV29ya2xldFJlZkltcGw8dW5rbm93bj4sXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnX2pzRm4nKSB7XG4gICAgICBoeWRyYXRlRGVsYXlSdW5PbkJhY2tncm91bmRUYXNrcyhcbiAgICAgICAgY3R4T2JqW2tleV0gYXMgUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sXG4gICAgICAgIGZpcnN0U2NyZWVuQ3R4T2JqW2tleV0gYXMgUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sXG4gICAgICAgIGV4ZWNJZCxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpcnN0U2NyZWVuVmFsdWUgPSB0eXBlb2YgZmlyc3RTY3JlZW5DdHhPYmpba2V5XSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IChmaXJzdFNjcmVlbkN0eE9ialtrZXldIGFzIHsgY3R4OiBDbG9zdXJlVmFsdWVUeXBlIH0pLmN0eFxuICAgICAgICA6IGZpcnN0U2NyZWVuQ3R4T2JqW2tleV07XG4gICAgICBoeWRyYXRlQ3R4SW1wbChjdHhPYmpba2V5XSwgZmlyc3RTY3JlZW5WYWx1ZSwgZXhlY0lkKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBIeWRyYXRlcyBhIFdvcmtsZXRSZWYgb24gdGhlIG1haW4gdGhyZWFkLlxuICogVGhpcyBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgV29ya2xldFJlZidzIGJhY2tncm91bmQgaW5pdGlhbCB2YWx1ZSBiYXNlZCBvbiBjaGFuZ2VzXG4gKiB0aGF0IG9jY3VycmVkIGluIHRoZSBmaXJzdC1zY3JlZW4gV29ya2xldCBjb250ZXh0IGJlZm9yZSBoeWRyYXRpb24uXG4gKlxuICogQHBhcmFtIHJlZklkIFRoZSBJRCBvZiB0aGUgV29ya2xldFJlZiB0byBoeWRyYXRlLlxuICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBXb3JrbGV0UmVmLlxuICovXG5mdW5jdGlvbiBoeWRyYXRlTWFpblRocmVhZFJlZihcbiAgcmVmSWQ6IFdvcmtsZXRSZWZJZCxcbiAgdmFsdWU6IFdvcmtsZXRSZWZJbXBsPHVua25vd24+LFxuKSB7XG4gIGlmICgnX2luaXRWYWx1ZScgaW4gdmFsdWUpIHtcbiAgICAvLyBUaGUgcmVmIGhhcyBub3QgYmVlbiBhY2Nlc3NlZCB5ZXQuXG4gICAgcmV0dXJuO1xuICB9XG4gIGx5bnhXb3JrbGV0SW1wbCEuX3JlZkltcGwuX3dvcmtsZXRSZWZNYXBbcmVmSWRdID0gdmFsdWU7XG59XG5cbi8qKlxuICogSHlkcmF0ZXMgZGVsYXllZCBgcnVuT25CYWNrZ3JvdW5kYCB0YXNrcy5cbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IGFueSBgcnVuT25CYWNrZ3JvdW5kYCBjYWxscyB0aGF0IHdlcmUgZGVsYXllZFxuICogZHVyaW5nIHRoZSBmaXJzdC1zY3JlZW4gcmVuZGVyaW5nIGFyZSBjb3JyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIHRoZWlyXG4gKiByZXNwZWN0aXZlIEphdmFTY3JpcHQgZnVuY3Rpb24gaGFuZGxlcyBpbiB0aGUgaHlkcmF0ZWQgV29ya2xldCBjb250ZXh0LlxuICovXG5mdW5jdGlvbiBoeWRyYXRlRGVsYXlSdW5PbkJhY2tncm91bmRUYXNrcyhcbiAgZm5PYmpzOiBSZWNvcmQ8c3RyaW5nLCBKc0ZuSGFuZGxlPiwgLy8gZXhhbXBsZToge1wiX2pzRm4xXCI6e1wiX2pzRm5JZFwiOjF9fVxuICBmaXJzdFNjcmVlbkZuT2JqczogUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sIC8vIGV4YW1wbGU6IHtcIl9qc0ZuMVwiOntcIl9pc0ZpcnN0U2NyZWVuXCI6dHJ1ZSxcIl9kZWxheUluZGljZXNcIjpbMF19fVxuICBleGVjSWQ6IG51bWJlcixcbikge1xuICBmb3IgKGNvbnN0IGZuTmFtZSBpbiBmbk9ianMpIHtcbiAgICBjb25zdCBmbk9iaiA9IGZuT2Jqc1tmbk5hbWVdITtcbiAgICBjb25zdCBmaXJzdFNjcmVlbkZuT2JqOiBKc0ZuSGFuZGxlIHwgdW5kZWZpbmVkID0gZmlyc3RTY3JlZW5Gbk9ianNbZm5OYW1lXTtcbiAgICBpZiAoIWZpcnN0U2NyZWVuRm5PYmo/Ll9kZWxheUluZGljZXMpIHtcbiAgICAgIGlmIChmaXJzdFNjcmVlbkZuT2JqKSB7XG4gICAgICAgIGZpcnN0U2NyZWVuRm5PYmouX2lzRmlyc3RTY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgZmlyc3RTY3JlZW5Gbk9iai5fZXhlY0lkID0gZXhlY0lkO1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpcnN0U2NyZWVuRm5PYmosIGZuT2JqKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGZpcnN0U2NyZWVuRm5PYmouX2RlbGF5SW5kaWNlcykge1xuICAgICAgY29uc3QgZGV0YWlscyA9IGx5bnhXb3JrbGV0SW1wbCEuX3J1bk9uQmFja2dyb3VuZERlbGF5SW1wbFxuICAgICAgICAuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5W2luZGV4XSE7XG4gICAgICBmbk9iai5fZXhlY0lkID0gZXhlY0lkO1xuICAgICAgZGV0YWlscy5qc0ZuSGFuZGxlID0gZm5PYmo7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgV29ya2xldEV2ZW50cyB9IGZyb20gJy4vYmluZGluZ3MvZXZlbnRzLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuaW1wb3J0IHsgaXNTZGtWZXJzaW9uR3QgfSBmcm9tICcuL3V0aWxzL3ZlcnNpb24uanMnO1xuXG4vKipcbiAqIGBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlcmAgbW9uaXRvcnMgcmVmZXJlbmNlcyB0byBKUyBmdW5jdGlvbiBoYW5kbGVzIHRvIGJlIGNhbGxlZCBieSBgcnVuT25CYWNrZ3JvdW5kKClgLlxuICogSW4gSlMgY29udGV4dCwgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBieSBgcnVuT25CYWNrZ3JvdW5kKClgIGlzIHJlZmVyZW5jZWQgYnkgYEpzRm5IYW5kbGVgcyBhbmQgZmluYWxseSBieSBgZXhlY0lkYC5cbiAqIFdoZW4gYWxsIGBKc0ZuSGFuZGxlYHMgaW4gbGVwdXMgYXJlIHJlbGVhc2VkLCBhbiBldmVudCB3aWxsIGJlIHNlbnQgdG8gSlMgY29udGV4dCB0byBkZS1yZWYgdGhlIGBleGVjSWRgLFxuICogcmVzdWx0aW5nIGEgZGUtcmVmIHRvIHRoZSBqcyBmdW5jdGlvbiBpbiBKUyBjb250ZXh0LlxuICovXG5jbGFzcyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciB7XG4gIHByaXZhdGUgZXhlY0lkUmVmQ291bnQgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBwcml2YXRlIGV4ZWNJZFNldFRvRmlyZSA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBwcml2YXRlIHdpbGxGaXJlID0gZmFsc2U7XG4gIHByaXZhdGUgcmVnaXN0cnk/OiBGaW5hbGl6YXRpb25SZWdpc3RyeTxudW1iZXI+ID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucmVnaXN0cnkgPSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnk8bnVtYmVyPih0aGlzLnJlbW92ZVJlZi5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIGFkZFJlZihleGVjSWQ6IG51bWJlciwgb2JqVG9SZWY6IG9iamVjdCk6IHZvaWQge1xuICAgIHRoaXMuZXhlY0lkUmVmQ291bnQuc2V0KFxuICAgICAgZXhlY0lkLFxuICAgICAgKHRoaXMuZXhlY0lkUmVmQ291bnQuZ2V0KGV4ZWNJZCkgPz8gMCkgKyAxLFxuICAgICk7XG4gICAgdGhpcy5yZWdpc3RyeSEucmVnaXN0ZXIob2JqVG9SZWYsIGV4ZWNJZCk7XG4gIH1cblxuICByZW1vdmVSZWYoZXhlY0lkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCByYyA9IHRoaXMuZXhlY0lkUmVmQ291bnQuZ2V0KGV4ZWNJZCkhO1xuICAgIGlmIChyYyA+IDEpIHtcbiAgICAgIHRoaXMuZXhlY0lkUmVmQ291bnQuc2V0KGV4ZWNJZCwgcmMgLSAxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5leGVjSWRSZWZDb3VudC5kZWxldGUoZXhlY0lkKTtcbiAgICB0aGlzLmV4ZWNJZFNldFRvRmlyZS5hZGQoZXhlY0lkKTtcbiAgICBpZiAoIXRoaXMud2lsbEZpcmUpIHtcbiAgICAgIHRoaXMud2lsbEZpcmUgPSB0cnVlO1xuICAgICAgdm9pZCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmaXJlKCk6IHZvaWQge1xuICAgIHByb2ZpbGUoJ0pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyLmZpcmUnLCAoKSA9PiB7XG4gICAgICBseW54LmdldEpTQ29udGV4dCgpLmRpc3BhdGNoRXZlbnQoe1xuICAgICAgICB0eXBlOiBXb3JrbGV0RXZlbnRzLnJlbGVhc2VCYWNrZ3JvdW5kV29ya2xldEN0eCxcbiAgICAgICAgZGF0YTogQXJyYXkuZnJvbSh0aGlzLmV4ZWNJZFNldFRvRmlyZSksXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhlY0lkU2V0VG9GaXJlLmNsZWFyKCk7XG4gICAgICB0aGlzLndpbGxGaXJlID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNSdW5PbkJhY2tncm91bmRFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNTZGtWZXJzaW9uR3QoMiwgMTUpO1xufVxuXG5leHBvcnQgeyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciwgaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gJy4vYXBpL2VsZW1lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBDbG9zdXJlVmFsdWVUeXBlLCBSdW5Xb3JrbGV0T3B0aW9ucywgV29ya2xldCwgV29ya2xldFJlZkltcGwgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IFJ1bldvcmtsZXRTb3VyY2UgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IGluaXRSdW5PbkJhY2tncm91bmREZWxheSB9IGZyb20gJy4vZGVsYXlSdW5PbkJhY2tncm91bmQuanMnO1xuaW1wb3J0IHsgZGVsYXlFeGVjVW50aWxKc1JlYWR5LCBpbml0RXZlbnREZWxheSB9IGZyb20gJy4vZGVsYXlXb3JrbGV0RXZlbnQuanMnO1xuaW1wb3J0IHsgaW5pdEVvbUltcGwgfSBmcm9tICcuL2VvbUltcGwuanMnO1xuaW1wb3J0IHsgYWRkRXZlbnRNZXRob2RzSWZOZWVkZWQgfSBmcm9tICcuL2V2ZW50UHJvcGFnYXRpb24uanMnO1xuaW1wb3J0IHsgaHlkcmF0ZUN0eCB9IGZyb20gJy4vaHlkcmF0ZS5qcyc7XG5pbXBvcnQgeyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciwgaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIH0gZnJvbSAnLi9qc0Z1bmN0aW9uTGlmZWN5Y2xlLmpzJztcbmltcG9ydCB7IHJ1blJ1bk9uTWFpblRocmVhZFRhc2sgfSBmcm9tICcuL3J1bk9uTWFpblRocmVhZC5qcyc7XG5pbXBvcnQgeyBtYWluVGhyZWFkRmx1c2hMb29wTWFyayB9IGZyb20gJy4vdXRpbHMvbWFpblRocmVhZEZsdXNoTG9vcEd1YXJkLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuaW1wb3J0IHsgZ2V0RnJvbVdvcmtsZXRSZWZNYXAsIGluaXRXb3JrbGV0UmVmIH0gZnJvbSAnLi93b3JrbGV0UmVmLmpzJztcblxuZnVuY3Rpb24gaW5pdFdvcmtsZXQoKTogdm9pZCB7XG4gIGdsb2JhbFRoaXMubHlueFdvcmtsZXRJbXBsID0ge1xuICAgIF93b3JrbGV0TWFwOiB7fSxcbiAgICBfcmVmSW1wbDogaW5pdFdvcmtsZXRSZWYoKSxcbiAgICBfcnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsOiBpbml0UnVuT25CYWNrZ3JvdW5kRGVsYXkoKSxcbiAgICBfaHlkcmF0ZUN0eDogaHlkcmF0ZUN0eCxcbiAgICBfZXZlbnREZWxheUltcGw6IGluaXRFdmVudERlbGF5KCksXG4gICAgX2VvbUltcGw6IGluaXRFb21JbXBsKCksXG4gICAgX3J1blJ1bk9uTWFpblRocmVhZFRhc2s6IHJ1blJ1bk9uTWFpblRocmVhZFRhc2ssXG4gIH07XG5cbiAgaWYgKGlzUnVuT25CYWNrZ3JvdW5kRW5hYmxlZCgpKSB7XG4gICAgZ2xvYmFsVGhpcy5seW54V29ya2xldEltcGwuX2pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyID0gbmV3IEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyKCk7XG4gIH1cblxuICBnbG9iYWxUaGlzLnJlZ2lzdGVyV29ya2xldCA9IHJlZ2lzdGVyV29ya2xldDtcbiAgZ2xvYmFsVGhpcy5yZWdpc3RlcldvcmtsZXRJbnRlcm5hbCA9IHJlZ2lzdGVyV29ya2xldDtcbiAgZ2xvYmFsVGhpcy5ydW5Xb3JrbGV0ID0gcnVuV29ya2xldDtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIHdvcmtsZXQgZnVuY3Rpb24sIGFsbG93aW5nIGl0IHRvIGJlIGV4ZWN1dGVkIGJ5IGBydW5Xb3JrbGV0KClgLlxuICogVGhpcyBpcyBjYWxsZWQgaW4gbGVwdXMuanMuXG4gKiBAcGFyYW0gX3R5cGUgd29ya2xldCB0eXBlLCAnbWFpbi10aHJlYWQnIG9yICd1aSdcbiAqIEBwYXJhbSBpZCB3b3JrbGV0IGhhc2hcbiAqIEBwYXJhbSB3b3JrbGV0IHdvcmtsZXQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJXb3JrbGV0KF90eXBlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIHdvcmtsZXQ6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pOiB2b2lkIHtcbiAgbHlueFdvcmtsZXRJbXBsLl93b3JrbGV0TWFwW2lkXSA9IHdvcmtsZXQ7XG59XG5cbi8qKlxuICogRW50cmFuY2Ugb2YgYWxsIHdvcmtsZXQgY2FsbHMuXG4gKiBOYXRpdmUgZXZlbnQgdG91Y2ggaGFuZGxlciB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSBjdHggd29ya2xldCBvYmplY3QuXG4gKiBAcGFyYW0gcGFyYW1zIHdvcmtsZXQgcGFyYW1zLlxuICogQHBhcmFtIG9wdGlvbnMgcnVuIHdvcmtsZXQgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gcnVuV29ya2xldChjdHg6IFdvcmtsZXQsIHBhcmFtczogQ2xvc3VyZVZhbHVlVHlwZVtdLCBvcHRpb25zPzogUnVuV29ya2xldE9wdGlvbnMpOiB1bmtub3duIHtcbiAgaWYgKCF2YWxpZGF0ZVdvcmtsZXQoY3R4KSkge1xuICAgIGNvbnNvbGUud2FybignTWFpblRocmVhZEZ1bmN0aW9uOiBJbnZhbGlkIGZ1bmN0aW9uIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KGN0eCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChfX0RFVl9fKSB7XG4gICAgaWYgKG9wdGlvbnM/LnNvdXJjZSA9PT0gUnVuV29ya2xldFNvdXJjZS5FVkVOVCAmJiBBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcbiAgICAgIGNvbnN0IGZpcnN0ID0gcGFyYW1zWzBdO1xuICAgICAgY29uc3QgdCA9IChmaXJzdCBhcyB7IHR5cGU/OiB1bmtub3duIH0pLnR5cGU7XG4gICAgICBpZiAodHlwZW9mIHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG1haW5UaHJlYWRGbHVzaExvb3BNYXJrKGBldmVudDoke3R9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWFpblRocmVhZEZsdXNoTG9vcE1hcmsoYE1haW5UaHJlYWRGdW5jdGlvbiBpZD0ke1N0cmluZyhjdHguX3drbHRJZCl9YCk7XG4gIH1cblxuICBpZiAoJ19sZXB1c1dvcmtsZXRIYXNoJyBpbiBjdHgpIHtcbiAgICBkZWxheUV4ZWNVbnRpbEpzUmVhZHkoY3R4Ll9sZXB1c1dvcmtsZXRIYXNoLCBwYXJhbXMpO1xuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4gcnVuV29ya2xldEltcGwoY3R4LCBwYXJhbXMsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBydW5Xb3JrbGV0SW1wbChjdHg6IFdvcmtsZXQsIHBhcmFtczogQ2xvc3VyZVZhbHVlVHlwZVtdLCBvcHRpb25zPzogUnVuV29ya2xldE9wdGlvbnMpOiB1bmtub3duIHtcbiAgY29uc3Qgd29ya2xldDogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biA9IHByb2ZpbGUoXG4gICAgJ3RyYW5zZm9ybVdvcmtsZXRDdHggJyArIGN0eC5fd2tsdElkLFxuICAgICgpID0+IHRyYW5zZm9ybVdvcmtsZXQoY3R4LCB0cnVlKSxcbiAgKTtcbiAgY29uc3QgcGFyYW1zXzogQ2xvc3VyZVZhbHVlVHlwZVtdID0gcHJvZmlsZShcbiAgICAndHJhbnNmb3JtV29ya2xldFBhcmFtcycsXG4gICAgKCkgPT4gdHJhbnNmb3JtV29ya2xldChwYXJhbXMgfHwgW10sIGZhbHNlKSxcbiAgKTtcblxuICBjb25zdCBbaGFzRXZlbnRNZXRob2RzLCBldmVudEN0eF0gPSBhZGRFdmVudE1ldGhvZHNJZk5lZWRlZChwYXJhbXNfLCBvcHRpb25zKTtcblxuICBjb25zdCByZXN1bHQgPSBwcm9maWxlKCdydW5Xb3JrbGV0JywgKCkgPT4gd29ya2xldCguLi5wYXJhbXNfKSk7XG5cbiAgaWYgKGhhc0V2ZW50TWV0aG9kcykge1xuICAgIHJldHVybiB7XG4gICAgICByZXR1cm5WYWx1ZTogcmVzdWx0LFxuICAgICAgZXZlbnRSZXR1cm5SZXN1bHQ6IGV2ZW50Q3R4Ll9ldmVudFJldHVyblJlc3VsdCxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXb3JrbGV0KGN0eDogdW5rbm93bik6IGN0eCBpcyBXb3JrbGV0IHtcbiAgcmV0dXJuIHR5cGVvZiBjdHggPT09ICdvYmplY3QnICYmIGN0eCAhPT0gbnVsbCAmJiAoJ193a2x0SWQnIGluIGN0eCB8fCAnX2xlcHVzV29ya2xldEhhc2gnIGluIGN0eCk7XG59XG5cbmNvbnN0IHdvcmtsZXRDYWNoZSA9IG5ldyBXZWFrTWFwPG9iamVjdCwgQ2xvc3VyZVZhbHVlVHlwZSB8ICgoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duKT4oKTtcblxuZnVuY3Rpb24gdHJhbnNmb3JtV29ya2xldChjdHg6IFdvcmtsZXQsIGlzV29ya2xldDogdHJ1ZSk6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd247XG5mdW5jdGlvbiB0cmFuc2Zvcm1Xb3JrbGV0KFxuICBjdHg6IENsb3N1cmVWYWx1ZVR5cGVbXSxcbiAgaXNXb3JrbGV0OiBmYWxzZSxcbik6IENsb3N1cmVWYWx1ZVR5cGVbXTtcblxuZnVuY3Rpb24gdHJhbnNmb3JtV29ya2xldChcbiAgY3R4OiBDbG9zdXJlVmFsdWVUeXBlLFxuICBpc1dvcmtsZXQ6IGJvb2xlYW4sXG4pOiBDbG9zdXJlVmFsdWVUeXBlIHwgKCguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pIHtcbiAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICBpZiAodHlwZW9mIGN0eCAhPT0gJ29iamVjdCcgfHwgY3R4ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGN0eDtcbiAgfVxuXG4gIGlmIChpc1dvcmtsZXQpIHtcbiAgICBjb25zdCByZXMgPSB3b3JrbGV0Q2FjaGUuZ2V0KGN0eCk7XG4gICAgaWYgKHJlcykge1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH1cblxuICBjb25zdCB3b3JrbGV0ID0geyBtYWluOiBjdHggfTtcbiAgdHJhbnNmb3JtV29ya2xldElubmVyKHdvcmtsZXQsIDAsIGN0eCk7XG5cbiAgaWYgKGlzV29ya2xldCkge1xuICAgIHdvcmtsZXRDYWNoZS5zZXQoY3R4LCB3b3JrbGV0Lm1haW4pO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtsZXQubWFpbjtcbn1cblxuY29uc3QgdHJhbnNmb3JtV29ya2xldElubmVyID0gKFxuICB2YWx1ZTogQ2xvc3VyZVZhbHVlVHlwZSxcbiAgZGVwdGg6IG51bWJlcixcbiAgY3R4OiB1bmtub3duLFxuKSA9PiB7XG4gIGNvbnN0IGxpbWl0ID0gMTAwMDtcbiAgaWYgKCsrZGVwdGggPj0gbGltaXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlcHRoIG9mIHZhbHVlIGV4Y2VlZHMgbGltaXQgb2YgJyArIGxpbWl0ICsgJy4nKTtcbiAgfVxuICAvKiB2OCBpZ25vcmUgbmV4dCAzICovXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG9iaiA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuXG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGNvbnN0IHN1Yk9iajogQ2xvc3VyZVZhbHVlVHlwZSA9IG9ialtrZXldO1xuICAgIGlmICh0eXBlb2Ygc3ViT2JqICE9PSAnb2JqZWN0JyB8fCBzdWJPYmogPT09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICgvKiogaXNFdmVudFRhcmdldCAqLyAnZWxlbWVudFJlZnB0cicgaW4gc3ViT2JqKSB7XG4gICAgICBvYmpba2V5XSA9IG5ldyBFbGVtZW50KHN1Yk9ialsnZWxlbWVudFJlZnB0ciddIGFzIEVsZW1lbnROb2RlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAoc3ViT2JqIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtV29ya2xldElubmVyKHN1Yk9iaiwgZGVwdGgsIGN0eCk7XG5cbiAgICBjb25zdCBpc1dvcmtsZXRSZWYgPSAnX3d2aWQnIGluIChzdWJPYmogYXMgb2JqZWN0KTtcbiAgICBpZiAoaXNXb3JrbGV0UmVmKSB7XG4gICAgICBvYmpba2V5XSA9IGdldEZyb21Xb3JrbGV0UmVmTWFwKFxuICAgICAgICBzdWJPYmogYXMgdW5rbm93biBhcyBXb3JrbGV0UmVmSW1wbDx1bmtub3duPixcbiAgICAgICk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgaXNXb3JrbGV0ID0gJ193a2x0SWQnIGluIHN1Yk9iajtcbiAgICBpZiAoaXNXb3JrbGV0KSB7XG4gICAgICAvLyBgc3ViT2JqYCBpcyB3b3JrbGV0IGN0eC4gU2hhbGxvdyBjb3B5IGl0IHRvIHByZXZlbnQgdGhlIHRyYW5zZm9ybWVkIHdvcmtsZXQgZnJvbSByZWZlcmVuY2luZyBjdHguXG4gICAgICAvLyBUaGlzIHdvdWxkIHJlc3VsdCBpbiB0aGUgdmFsdWUgb2YgYHdvcmtsZXRDYWNoZWAgcmVmZXJlbmNpbmcgaXRzIGtleS5cbiAgICAgIG9ialtrZXldID0gbHlueFdvcmtsZXRJbXBsLl93b3JrbGV0TWFwWyhzdWJPYmogYXMgV29ya2xldCkuX3drbHRJZF0hXG4gICAgICAgIC5iaW5kKHsgLi4uc3ViT2JqIH0pO1xuICAgICAgb2JqW2tleV0uY3R4ID0gc3ViT2JqO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGlzSnNGbiA9ICdfanNGbklkJyBpbiBzdWJPYmo7XG4gICAgaWYgKGlzSnNGbikge1xuICAgICAgc3ViT2JqWydfZXhlY0lkJ10gPSAoY3R4IGFzIFdvcmtsZXQpLl9leGVjSWQ7XG4gICAgICBseW54V29ya2xldEltcGwuX2pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyPy5hZGRSZWYoXG4gICAgICAgIChjdHggYXMgV29ya2xldCkuX2V4ZWNJZCEsXG4gICAgICAgIHN1Yk9iaixcbiAgICAgICk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCB7IGluaXRXb3JrbGV0IH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgaW5pdEFwaUVudiB9IGZyb20gJy4vYXBpL2x5bnhBcGkuanMnO1xuaW1wb3J0IHsgaW5pdEV2ZW50TGlzdGVuZXJzIH0gZnJvbSAnLi9saXN0ZW5lcnMuanMnO1xuaW1wb3J0IHsgaW5pdFdvcmtsZXQgfSBmcm9tICcuL3dvcmtsZXRSdW50aW1lLmpzJztcblxuaWYgKGdsb2JhbFRoaXMubHlueFdvcmtsZXRJbXBsID09PSB1bmRlZmluZWQpIHtcbiAgaW5pdFdvcmtsZXQoKTtcbiAgaW5pdEFwaUVudigpO1xuICBpbml0RXZlbnRMaXN0ZW5lcnMoKTtcbn1cbiJdLCJuYW1lcyI6WyJBbmltYXRpb24iLCJfX0VsZW1lbnRBbmltYXRlIiwiZWZmZWN0IiwiS2V5ZnJhbWVFZmZlY3QiLCJ0YXJnZXQiLCJrZXlmcmFtZXMiLCJvcHRpb25zIiwiVFJBQ0VfTElNSVQiLCJERUZBVUxUX0ZMVVNIX0xJTUlUIiwidHJhY2UiLCJmbHVzaENvdW50SW5XaW5kb3ciLCJyZXNldFNjaGVkdWxlZCIsInRyaXBwZWRFcnJvciIsInB1c2hUcmFjZSIsIm1hcmtlciIsImNvbXByZXNzVHJhY2UiLCJtYXJrZXJzIiwib3V0IiwicHJldiIsImNvdW50IiwiaSIsImN1ciIsIm1haW5UaHJlYWRGbHVzaExvb3BNYXJrIiwibWFpblRocmVhZEZsdXNoTG9vcE9uRmx1c2hNaWNyb3Rhc2siLCJzZXRUaW1lb3V0IiwibWFpblRocmVhZEZsdXNoTG9vcFJlc2V0IiwibGltaXQiLCJ0cmFjZVRleHQiLCJFcnJvciIsIm1haW5UaHJlYWRGbHVzaExvb3BSZXBvcnQiLCJlcnJvciIsImlzU2RrVmVyc2lvbkd0IiwibWFqb3IiLCJtaW5vciIsIl9TeXN0ZW1JbmZvX2x5bnhTZGtWZXJzaW9uIiwibHlueFNka1ZlcnNpb24iLCJ2ZXJzaW9uIiwiTnVtYmVyIiwid2lsbEZsdXNoIiwic2hvdWxkRmx1c2giLCJzZXRTaG91bGRGbHVzaCIsInZhbHVlIiwiRWxlbWVudCIsIm5hbWUiLCJfX1NldEF0dHJpYnV0ZSIsIl9fQWRkSW5saW5lU3R5bGUiLCJzdHlsZXMiLCJPYmplY3QiLCJrZXkiLCJhdHRyaWJ1dGVOYW1lIiwiX19HZXRBdHRyaWJ1dGVCeU5hbWUiLCJfX0dldEF0dHJpYnV0ZU5hbWVzIiwic2VsZWN0b3IiLCJyZWYiLCJfX1F1ZXJ5U2VsZWN0b3IiLCJfX1F1ZXJ5U2VsZWN0b3JBbGwiLCJlbGVtZW50IiwiX19HZXRDb21wdXRlZFN0eWxlQnlLZXkiLCJub3JtYWxpemVkT3B0aW9ucyIsIm1ldGhvZE5hbWUiLCJwYXJhbXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIl9fSW52b2tlVUlNZXRob2QiLCJyZXMiLCJKU09OIiwiX19GbHVzaEVsZW1lbnRUcmVlIiwiUGFnZUVsZW1lbnQiLCJfUGFnZUVsZW1lbnQiLCJfX0dldFBhZ2VFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvckFsbCIsImluaXRBcGlFbnYiLCJfbHlueF9jbGVhckludGVydmFsIiwibHlueCIsImdsb2JhbFRoaXMiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYWxsYmFjayIsInJ1blJ1bk9uTWFpblRocmVhZFRhc2siLCJ0YXNrIiwicmVzb2x2ZUlkIiwicmV0dXJuVmFsdWUiLCJydW5Xb3JrbGV0IiwiV29ya2xldEV2ZW50cyIsInByb2ZpbGUiLCJzbGljZU5hbWUiLCJmIiwiX2NvbnNvbGUiLCJfY29uc29sZTEiLCJpbXBsIiwiaW5pdFdvcmtsZXRSZWYiLCJ1cGRhdGVXb3JrbGV0UmVmIiwidXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMiLCJjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCIsImNyZWF0ZVdvcmtsZXRSZWYiLCJpZCIsImdldEZyb21Xb3JrbGV0UmVmTWFwIiwicmVmSW1wbCIsInVuZGVmaW5lZCIsInJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAiLCJoYW5kbGUiLCJwYXRjaCIsImluaXRFdmVudExpc3RlbmVycyIsImpzQ29udGV4dCIsImV2ZW50IiwiZGF0YSIsImluaXRSdW5PbkJhY2tncm91bmREZWxheSIsImRlbGF5UnVuT25CYWNrZ3JvdW5kIiwicnVuRGVsYXllZEJhY2tncm91bmRGdW5jdGlvbnMiLCJmbk9iaiIsIl9mbk9iaiIsImRlbGF5SW5kaWNlcyIsImRldGFpbHMiLCJpbml0RXZlbnREZWxheSIsIk1hcCIsInJ1bkRlbGF5ZWRXb3JrbGV0IiwiY2xlYXJEZWxheWVkV29ya2xldHMiLCJkZWxheUV4ZWNVbnRpbEpzUmVhZHkiLCJoYXNoIiwibWFwIiwicGFyYW1WZWMiLCJ3b3JrbGV0IiwicGFyYW1zVmVjIiwibGVmdFBhcmFtc1ZlYyIsIl9maXJzdFBhcmFtX2N1cnJlbnRUYXJnZXQiLCJmaXJzdFBhcmFtIiwiaW5pdEVvbUltcGwiLCJFdmVudFJlc3VsdCIsImlzRXZlbnRPYmplY3QiLCJjdHgiLCJBcnJheSIsIlJ1bldvcmtsZXRTb3VyY2UiLCJhZGRFdmVudE1ldGhvZHNJZk5lZWRlZCIsImV2ZW50Q3R4IiwiZXZlbnRPYmoiLCJfZXZlbnRDdHhfX2V2ZW50UmV0dXJuUmVzdWx0IiwiaHlkcmF0ZUN0eCIsImZpcnN0U2NyZWVuQ3R4IiwiaHlkcmF0ZUN0eEltcGwiLCJleGVjSWQiLCJjdHhPYmoiLCJmaXJzdFNjcmVlbkN0eE9iaiIsImh5ZHJhdGVNYWluVGhyZWFkUmVmIiwiaHlkcmF0ZURlbGF5UnVuT25CYWNrZ3JvdW5kVGFza3MiLCJmaXJzdFNjcmVlblZhbHVlIiwicmVmSWQiLCJseW54V29ya2xldEltcGwiLCJmbk9ianMiLCJmaXJzdFNjcmVlbkZuT2JqcyIsImZuTmFtZSIsImZpcnN0U2NyZWVuRm5PYmoiLCJpbmRleCIsIkpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyIiwib2JqVG9SZWYiLCJfdGhpc19leGVjSWRSZWZDb3VudF9nZXQiLCJyYyIsIlNldCIsIkZpbmFsaXphdGlvblJlZ2lzdHJ5IiwiaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIiwiaW5pdFdvcmtsZXQiLCJyZWdpc3RlcldvcmtsZXQiLCJfdHlwZSIsInZhbGlkYXRlV29ya2xldCIsImNvbnNvbGUiLCJmaXJzdCIsInQiLCJTdHJpbmciLCJydW5Xb3JrbGV0SW1wbCIsInRyYW5zZm9ybVdvcmtsZXQiLCJwYXJhbXNfIiwiaGFzRXZlbnRNZXRob2RzIiwicmVzdWx0Iiwid29ya2xldENhY2hlIiwiV2Vha01hcCIsImlzV29ya2xldCIsInRyYW5zZm9ybVdvcmtsZXRJbm5lciIsImRlcHRoIiwib2JqIiwic3ViT2JqIiwiaXNXb3JrbGV0UmVmIiwiaXNKc0ZuIiwiX2x5bnhXb3JrbGV0SW1wbF9fanNGdW5jdGlvbkxpZmVjeWNsZU1hbmFnZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQVlPLE1BQU1BO1FBV0osU0FBZTtZQUVwQixPQUFPQyxpQkFBaUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFOztnQkFBNEIsSUFBSSxDQUFDLEVBQUU7YUFBQztRQUMxRjtRQUVPLFFBQWM7WUFFbkIsT0FBT0EsaUJBQWlCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTs7Z0JBQTJCLElBQUksQ0FBQyxFQUFFO2FBQUM7UUFDekY7UUFFTyxPQUFhO1lBRWxCLE9BQU9BLGlCQUFpQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7O2dCQUEwQixJQUFJLENBQUMsRUFBRTthQUFDO1FBQ3hGO1FBRVEsUUFBYztZQUVwQixPQUFPQSxpQkFBaUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFOztnQkFFbEQsSUFBSSxDQUFDLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87YUFDcEI7UUFDSDtRQTdCQSxZQUFZQyxNQUFzQixDQUFFO1lBSHBDLHVCQUFnQixVQUFoQjtZQUNBLHVCQUFnQixNQUFoQjtZQUdFLElBQUksQ0FBQyxNQUFNLEdBQUdBO1lBQ2QsSUFB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
|
|
625
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4uL3J1bnRpbWUvc3JjL3dvcmtsZXQtcnVudGltZS9hcGkvYW5pbWF0aW9uL2FuaW1hdGlvbi50cz9kYWI4Iiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uLi9ydW50aW1lL3NyYy93b3JrbGV0LXJ1bnRpbWUvYXBpL2FuaW1hdGlvbi9lZmZlY3QudHM/Y2EyOSIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi4vcnVudGltZS9zcmMvd29ya2xldC1ydW50aW1lL3V0aWxzL21haW5UaHJlYWRGbHVzaExvb3BHdWFyZC50cz9iZjJmIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uLi9ydW50aW1lL3NyYy93b3JrbGV0LXJ1bnRpbWUvdXRpbHMvdmVyc2lvbi50cz8zYmUyIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uLi9ydW50aW1lL3NyYy93b3JrbGV0LXJ1bnRpbWUvYXBpL2VsZW1lbnQudHM/YTkzZiIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi4vcnVudGltZS9zcmMvd29ya2xldC1ydW50aW1lL2FwaS9sZXB1c1F1ZXJ5U2VsZWN0b3IudHM/NGJmMSIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi4vcnVudGltZS9zcmMvd29ya2xldC1ydW50aW1lL2FwaS9seW54QXBpLnRzPzdhMTUiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4uL3J1bnRpbWUvc3JjL3dvcmtsZXQtcnVudGltZS9ydW5Pbk1haW5UaHJlYWQudHM/ODA5MCIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi4vcnVudGltZS9zcmMvd29ya2xldC1ydW50aW1lL3V0aWxzL3Byb2ZpbGUudHM/ODZlMSIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi4vcnVudGltZS9zcmMvd29ya2xldC1ydW50aW1lL3dvcmtsZXRSZWYudHM/ODIzZCIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi4vcnVudGltZS9zcmMvd29ya2xldC1ydW50aW1lL2xpc3RlbmVycy50cz83M2FjIiwid2VicGFjazovL0BseW54LWpzL3JlYWN0LXdvcmtsZXQtcnVudGltZS8uLi9ydW50aW1lL3NyYy93b3JrbGV0LXJ1bnRpbWUvZGVsYXlSdW5PbkJhY2tncm91bmQudHM/OWUwYiIsIndlYnBhY2s6Ly9AbHlueC1qcy9yZWFjdC13b3JrbGV0LXJ1bnRpbWUvLi4vcnVudGltZS9zcmMvd29ya2xldC1ydW50aW1lL2RlbGF5V29ya2xldEV2ZW50LnRzPzhlOWEiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4uL3J1bnRpbWUvc3JjL3dvcmtsZXQtcnVudGltZS9lb21JbXBsLnRzPzFiMzciLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4uL3J1bnRpbWUvc3JjL3dvcmtsZXQtcnVudGltZS9ldmVudFByb3BhZ2F0aW9uLnRzP2FkYmUiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4uL3J1bnRpbWUvc3JjL3dvcmtsZXQtcnVudGltZS9oeWRyYXRlLnRzP2E1ZTAiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4uL3J1bnRpbWUvc3JjL3dvcmtsZXQtcnVudGltZS9qc0Z1bmN0aW9uTGlmZWN5Y2xlLnRzPzc4MWUiLCJ3ZWJwYWNrOi8vQGx5bngtanMvcmVhY3Qtd29ya2xldC1ydW50aW1lLy4uL3J1bnRpbWUvc3JjL3dvcmtsZXQtcnVudGltZS93b3JrbGV0UnVudGltZS50cz9jMzE3IiwiW3JlbGF0aXZlLXJlc291cmNlLXBhdGhdIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI1IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgdHlwZSB7IEtleWZyYW1lRWZmZWN0IH0gZnJvbSAnLi9lZmZlY3QuanMnO1xuXG5leHBvcnQgZW51bSBBbmltYXRpb25PcGVyYXRpb24ge1xuICBTVEFSVCA9IDAsIC8vIFN0YXJ0IGEgbmV3IGFuaW1hdGlvblxuICBQTEFZID0gMSwgLy8gUGxheS9yZXN1bWUgYSBwYXVzZWQgYW5pbWF0aW9uXG4gIFBBVVNFID0gMiwgLy8gUGF1c2UgYW4gZXhpc3RpbmcgYW5pbWF0aW9uXG4gIENBTkNFTCA9IDMsIC8vIENhbmNlbCBhbiBhbmltYXRpb25cbn1cblxuZXhwb3J0IGNsYXNzIEFuaW1hdGlvbiB7XG4gIHN0YXRpYyBjb3VudCA9IDA7XG4gIHB1YmxpYyByZWFkb25seSBlZmZlY3Q6IEtleWZyYW1lRWZmZWN0O1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihlZmZlY3Q6IEtleWZyYW1lRWZmZWN0KSB7XG4gICAgdGhpcy5lZmZlY3QgPSBlZmZlY3Q7XG4gICAgdGhpcy5pZCA9ICdfX2x5bngtaW5uZXItanMtYW5pbWF0aW9uLScgKyBBbmltYXRpb24uY291bnQrKztcbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYWNjZXNzaW5nIHByaXZhdGUgbWVtYmVyICdlbGVtZW50J1xuICAgIHJldHVybiBfX0VsZW1lbnRBbmltYXRlKHRoaXMuZWZmZWN0LnRhcmdldC5lbGVtZW50LCBbQW5pbWF0aW9uT3BlcmF0aW9uLkNBTkNFTCwgdGhpcy5pZF0pO1xuICB9XG5cbiAgcHVibGljIHBhdXNlKCk6IHZvaWQge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYWNjZXNzaW5nIHByaXZhdGUgbWVtYmVyICdlbGVtZW50J1xuICAgIHJldHVybiBfX0VsZW1lbnRBbmltYXRlKHRoaXMuZWZmZWN0LnRhcmdldC5lbGVtZW50LCBbQW5pbWF0aW9uT3BlcmF0aW9uLlBBVVNFLCB0aGlzLmlkXSk7XG4gIH1cblxuICBwdWJsaWMgcGxheSgpOiB2b2lkIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFjY2Vzc2luZyBwcml2YXRlIG1lbWJlciAnZWxlbWVudCdcbiAgICByZXR1cm4gX19FbGVtZW50QW5pbWF0ZSh0aGlzLmVmZmVjdC50YXJnZXQuZWxlbWVudCwgW0FuaW1hdGlvbk9wZXJhdGlvbi5QTEFZLCB0aGlzLmlkXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0KCk6IHZvaWQge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYWNjZXNzaW5nIHByaXZhdGUgbWVtYmVyICdlbGVtZW50J1xuICAgIHJldHVybiBfX0VsZW1lbnRBbmltYXRlKHRoaXMuZWZmZWN0LnRhcmdldC5lbGVtZW50LCBbXG4gICAgICBBbmltYXRpb25PcGVyYXRpb24uU1RBUlQsXG4gICAgICB0aGlzLmlkLFxuICAgICAgdGhpcy5lZmZlY3Qua2V5ZnJhbWVzLFxuICAgICAgdGhpcy5lZmZlY3Qub3B0aW9ucyxcbiAgICBdKTtcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjUgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB0eXBlIHsgRWxlbWVudCB9IGZyb20gJy4uL2VsZW1lbnQuanMnO1xuXG5leHBvcnQgY2xhc3MgS2V5ZnJhbWVFZmZlY3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0OiBFbGVtZW50O1xuICBwdWJsaWMgcmVhZG9ubHkga2V5ZnJhbWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+W107XG4gIHB1YmxpYyByZWFkb25seSBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRhcmdldDogRWxlbWVudCxcbiAgICBrZXlmcmFtZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz5bXSxcbiAgICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+LFxuICApIHtcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB0aGlzLmtleWZyYW1lcyA9IGtleWZyYW1lcztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNiBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuXG5jb25zdCBUUkFDRV9MSU1JVCA9IDI1NjtcbmNvbnN0IERFRkFVTFRfRkxVU0hfTElNSVQgPSAyNTY7XG5cbmxldCB0cmFjZTogc3RyaW5nW10gPSBbXTtcblxubGV0IGZsdXNoQ291bnRJbldpbmRvdyA9IDA7XG5sZXQgcmVzZXRTY2hlZHVsZWQgPSBmYWxzZTtcbmxldCB0cmlwcGVkRXJyb3I6IEVycm9yIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIHB1c2hUcmFjZShtYXJrZXI6IHN0cmluZyk6IHZvaWQge1xuICB0cmFjZS5wdXNoKG1hcmtlcik7XG4gIGlmICh0cmFjZS5sZW5ndGggPiBUUkFDRV9MSU1JVCkge1xuICAgIHRyYWNlID0gdHJhY2Uuc2xpY2UodHJhY2UubGVuZ3RoIC0gVFJBQ0VfTElNSVQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXByZXNzVHJhY2UobWFya2Vyczogc3RyaW5nW10pOiBzdHJpbmcge1xuICBpZiAobWFya2Vycy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdO1xuICAvLyBEaXNwbGF5IG1vc3QtcmVjZW50LWZpcnN0IHRvIG1ha2UgbG9vcHMgZWFzaWVyIHRvIHJlYWQuXG4gIGxldCBwcmV2ID0gbWFya2Vyc1ttYXJrZXJzLmxlbmd0aCAtIDFdITtcbiAgbGV0IGNvdW50ID0gMTtcblxuICBmb3IgKGxldCBpID0gbWFya2Vycy5sZW5ndGggLSAyOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGN1ciA9IG1hcmtlcnNbaV0hO1xuICAgIGlmIChjdXIgPT09IHByZXYpIHtcbiAgICAgIGNvdW50Kys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgb3V0LnB1c2goY291bnQgPT09IDEgPyBwcmV2IDogYCR7cHJldn0geCR7Y291bnR9YCk7XG4gICAgcHJldiA9IGN1cjtcbiAgICBjb3VudCA9IDE7XG4gIH1cbiAgb3V0LnB1c2goY291bnQgPT09IDEgPyBwcmV2IDogYCR7cHJldn0geCR7Y291bnR9YCk7XG4gIHJldHVybiBvdXQuam9pbignIDwtICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFpblRocmVhZEZsdXNoTG9vcE1hcmsobWFya2VyOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKF9fREVWX18pIHtcbiAgICBwdXNoVHJhY2UobWFya2VyKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFpblRocmVhZEZsdXNoTG9vcE9uRmx1c2hNaWNyb3Rhc2soKTogRXJyb3IgfCBudWxsIHtcbiAgLyogdjggaWdub3JlIG5leHQgMSAqL1xuICBpZiAoIV9fREVWX18pIHJldHVybiBudWxsO1xuICBpZiAodHJpcHBlZEVycm9yKSByZXR1cm4gdHJpcHBlZEVycm9yO1xuXG4gIGlmICghcmVzZXRTY2hlZHVsZWQpIHtcbiAgICByZXNldFNjaGVkdWxlZCA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBtYWluVGhyZWFkRmx1c2hMb29wUmVzZXQoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIGZsdXNoQ291bnRJbldpbmRvdysrO1xuICBjb25zdCBsaW1pdCA9IERFRkFVTFRfRkxVU0hfTElNSVQ7XG4gIGlmIChmbHVzaENvdW50SW5XaW5kb3cgPiBsaW1pdCkge1xuICAgIGNvbnN0IHRyYWNlVGV4dCA9IGNvbXByZXNzVHJhY2UodHJhY2UpO1xuICAgIHRyaXBwZWRFcnJvciA9IG5ldyBFcnJvcihcbiAgICAgIGBbUmVhY3RMeW54XVtERVZdIE1haW5UaHJlYWQgZmx1c2ggbG9vcCBkZXRlY3RlZDogcmVuZGVyIGV4ZWN1dGVkICR7Zmx1c2hDb3VudEluV2luZG93fSB0aW1lcyB3aXRob3V0IHlpZWxkaW5nIChsaW1pdD0ke2xpbWl0fSkuIFRyYWNlOiAke3RyYWNlVGV4dH1gLFxuICAgICk7XG4gICAgcmV0dXJuIHRyaXBwZWRFcnJvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFpblRocmVhZEZsdXNoTG9vcFJlcG9ydChlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgaWYgKF9fREVWX18pIHtcbiAgICAvLyBUaHJvdyBvbiBtYWNyb3Rhc2sgdG8gYXZvaWQgUHJvbWlzZS11bmhhbmRsZWQtcmVqZWN0aW9uIG5vaXNlLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1haW5UaHJlYWRGbHVzaExvb3BSZXNldCgpOiB2b2lkIHtcbiAgdHJhY2UgPSBbXTtcbiAgZmx1c2hDb3VudEluV2luZG93ID0gMDtcbiAgcmVzZXRTY2hlZHVsZWQgPSBmYWxzZTtcbiAgdHJpcHBlZEVycm9yID0gbnVsbDtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5leHBvcnQgZnVuY3Rpb24gaXNTZGtWZXJzaW9uR3QobWFqb3I6IG51bWJlciwgbWlub3I6IG51bWJlcik6IGJvb2xlYW4ge1xuICBjb25zdCBseW54U2RrVmVyc2lvbjogc3RyaW5nID0gU3lzdGVtSW5mby5seW54U2RrVmVyc2lvbiA/PyAnMS4wJztcbiAgY29uc3QgdmVyc2lvbiA9IGx5bnhTZGtWZXJzaW9uLnNwbGl0KCcuJyk7XG4gIHJldHVybiAoXG4gICAgTnVtYmVyKHZlcnNpb25bMF0pID4gbWFqb3JcbiAgICB8fCAoTnVtYmVyKHZlcnNpb25bMF0pID09IG1ham9yICYmIE51bWJlcih2ZXJzaW9uWzFdKSA+IG1pbm9yKVxuICApO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IEFuaW1hdGlvbiB9IGZyb20gJy4vYW5pbWF0aW9uL2FuaW1hdGlvbi5qcyc7XG5pbXBvcnQgeyBLZXlmcmFtZUVmZmVjdCB9IGZyb20gJy4vYW5pbWF0aW9uL2VmZmVjdC5qcyc7XG5pbXBvcnQge1xuICBtYWluVGhyZWFkRmx1c2hMb29wTWFyayxcbiAgbWFpblRocmVhZEZsdXNoTG9vcE9uRmx1c2hNaWNyb3Rhc2ssXG4gIG1haW5UaHJlYWRGbHVzaExvb3BSZXBvcnQsXG59IGZyb20gJy4uL3V0aWxzL21haW5UaHJlYWRGbHVzaExvb3BHdWFyZC5qcyc7XG5pbXBvcnQgeyBpc1Nka1ZlcnNpb25HdCB9IGZyb20gJy4uL3V0aWxzL3ZlcnNpb24uanMnO1xuXG5sZXQgd2lsbEZsdXNoID0gZmFsc2U7XG5sZXQgc2hvdWxkRmx1c2ggPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2hvdWxkRmx1c2godmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgc2hvdWxkRmx1c2ggPSB2YWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnQge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHNldCBpbiBjb25zdHJ1Y3RvclxuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQ6IEVsZW1lbnROb2RlO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnROb2RlKSB7XG4gICAgLy8gSW4gTHlueCB2ZXJzaW9ucyBwcmlvciB0byBhbmQgaW5jbHVkaW5nIDIuMTUsXG4gICAgLy8gYSBjcmFzaCBvY2N1cnMgd2hlbiBwcmludGluZyBvciB0cmFuc2ZlcnJpbmcgcmVmQ291bnRlZCBhY3Jvc3MgdGhyZWFkcy5cbiAgICAvLyBCeXBhc3MgdGhpcyBwcm9ibGVtIGJ5IGhpZGluZyB0aGUgZWxlbWVudCBvYmplY3QuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbGVtZW50Jywge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICAvKiB2OCBpZ25vcmUgbmV4dCAzICovXG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIG1haW5UaHJlYWRGbHVzaExvb3BNYXJrKGBlbGVtZW50OnNldEF0dHJpYnV0ZSAke25hbWV9YCk7XG4gICAgfVxuICAgIF9fU2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudCwgbmFtZSwgdmFsdWUpO1xuICAgIHRoaXMuZmx1c2hFbGVtZW50VHJlZSgpO1xuICB9XG5cbiAgcHVibGljIHNldFN0eWxlUHJvcGVydHkobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBtYWluVGhyZWFkRmx1c2hMb29wTWFyayhgZWxlbWVudDpzZXRTdHlsZVByb3BlcnR5ICR7bmFtZX1gKTtcbiAgICB9XG4gICAgX19BZGRJbmxpbmVTdHlsZSh0aGlzLmVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICB0aGlzLmZsdXNoRWxlbWVudFRyZWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdHlsZVByb3BlcnRpZXMoc3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgLyogdjggaWdub3JlIG5leHQgNSAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBtYWluVGhyZWFkRmx1c2hMb29wTWFyayhcbiAgICAgICAgYGVsZW1lbnQ6c2V0U3R5bGVQcm9wZXJ0aWVzIGtleXM9JHtPYmplY3Qua2V5cyhzdHlsZXMpLmxlbmd0aH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc3R5bGVzKSB7XG4gICAgICBfX0FkZElubGluZVN0eWxlKHRoaXMuZWxlbWVudCwga2V5LCBzdHlsZXNba2V5XSEpO1xuICAgIH1cbiAgICB0aGlzLmZsdXNoRWxlbWVudFRyZWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgcmV0dXJuIF9fR2V0QXR0cmlidXRlQnlOYW1lKHRoaXMuZWxlbWVudCwgYXR0cmlidXRlTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXR0cmlidXRlTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBfX0dldEF0dHJpYnV0ZU5hbWVzKHRoaXMuZWxlbWVudCk7XG4gIH1cblxuICBwdWJsaWMgcXVlcnlTZWxlY3RvcihzZWxlY3Rvcjogc3RyaW5nKTogRWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IHJlZiA9IF9fUXVlcnlTZWxlY3Rvcih0aGlzLmVsZW1lbnQsIHNlbGVjdG9yLCB7fSk7XG4gICAgcmV0dXJuIHJlZiA/IG5ldyBFbGVtZW50KHJlZikgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIHF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3I6IHN0cmluZyk6IEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIF9fUXVlcnlTZWxlY3RvckFsbCh0aGlzLmVsZW1lbnQsIHNlbGVjdG9yLCB7fSkubWFwKChlbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gbmV3IEVsZW1lbnQoZWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tcHV0ZWRTdHlsZVByb3BlcnR5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWlzU2RrVmVyc2lvbkd0KDMsIDQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdnZXRDb21wdXRlZFN0eWxlUHJvcGVydHkgcmVxdWlyZXMgTHlueCBzZGsgdmVyc2lvbiAzLjUnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDb21wdXRlZFN0eWxlUHJvcGVydHk6IGtleSBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gX19HZXRDb21wdXRlZFN0eWxlQnlLZXkodGhpcy5lbGVtZW50LCBrZXkpO1xuICB9XG5cbiAgcHVibGljIGFuaW1hdGUoXG4gICAga2V5ZnJhbWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+W10sXG4gICAgb3B0aW9ucz86IG51bWJlciB8IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz4sXG4gICk6IEFuaW1hdGlvbiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZE9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gJ251bWJlcicgPyB7IGR1cmF0aW9uOiBvcHRpb25zIH0gOiBvcHRpb25zID8/IHt9O1xuICAgIHJldHVybiBuZXcgQW5pbWF0aW9uKG5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLCBrZXlmcmFtZXMsIG5vcm1hbGl6ZWRPcHRpb25zKSk7XG4gIH1cblxuICBwdWJsaWMgaW52b2tlKFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBtYWluVGhyZWFkRmx1c2hMb29wTWFyayhgZWxlbWVudDppbnZva2UgJHttZXRob2ROYW1lfWApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgX19JbnZva2VVSU1ldGhvZChcbiAgICAgICAgdGhpcy5lbGVtZW50LFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXJhbXMgPz8ge30sXG4gICAgICAgIChyZXM6IHsgY29kZTogbnVtYmVyOyBkYXRhOiB1bmtub3duIH0pID0+IHtcbiAgICAgICAgICBpZiAocmVzLmNvZGUgPT09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzLmRhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdVSSBtZXRob2QgaW52b2tlOiAnICsgSlNPTi5zdHJpbmdpZnkocmVzKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICB0aGlzLmZsdXNoRWxlbWVudFRyZWUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2hFbGVtZW50VHJlZSgpIHtcbiAgICBpZiAod2lsbEZsdXNoIHx8ICFzaG91bGRGbHVzaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3aWxsRmx1c2ggPSB0cnVlO1xuICAgIHZvaWQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICB3aWxsRmx1c2ggPSBmYWxzZTtcbiAgICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICAgIG1haW5UaHJlYWRGbHVzaExvb3BNYXJrKCdyZW5kZXInKTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBtYWluVGhyZWFkRmx1c2hMb29wT25GbHVzaE1pY3JvdGFzaygpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBTdG9wIHNjaGVkdWxpbmcgZnVydGhlciBmbHVzaGVzIHNvIHdlIGNhbiBzdXJmYWNlIHRoZSBlcnJvci5cbiAgICAgICAgICAvLyBUaGlzIGlzIERFVi1vbmx5IGJlaGF2aW9yIGd1YXJkZWQgaW50ZXJuYWxseSBieSB0aGUgZGV2IGd1YXJkLlxuICAgICAgICAgIHNob3VsZEZsdXNoID0gZmFsc2U7XG4gICAgICAgICAgbWFpblRocmVhZEZsdXNoTG9vcFJlcG9ydChlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBfX0ZsdXNoRWxlbWVudFRyZWUoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tICcuL2VsZW1lbnQuanMnO1xuXG5jbGFzcyBQYWdlRWxlbWVudCB7XG4gIHByaXZhdGUgc3RhdGljIHBhZ2VFbGVtZW50OiBFbGVtZW50Tm9kZSB8IHVuZGVmaW5lZDtcblxuICBzdGF0aWMgZ2V0KCkge1xuICAgIFBhZ2VFbGVtZW50LnBhZ2VFbGVtZW50ID8/PSBfX0dldFBhZ2VFbGVtZW50KCk7XG4gICAgcmV0dXJuIFBhZ2VFbGVtZW50LnBhZ2VFbGVtZW50O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yKGNzc1NlbGVjdG9yOiBzdHJpbmcpOiBFbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGVsZW1lbnQgPSBfX1F1ZXJ5U2VsZWN0b3IoUGFnZUVsZW1lbnQuZ2V0KCksIGNzc1NlbGVjdG9yLCB7fSk7XG4gIHJldHVybiBlbGVtZW50ID8gbmV3IEVsZW1lbnQoZWxlbWVudCkgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTZWxlY3RvckFsbChjc3NTZWxlY3Rvcjogc3RyaW5nKTogRWxlbWVudFtdIHtcbiAgcmV0dXJuIF9fUXVlcnlTZWxlY3RvckFsbChQYWdlRWxlbWVudC5nZXQoKSwgY3NzU2VsZWN0b3IsIHt9KS5tYXAoXG4gICAgKGVsZW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBuZXcgRWxlbWVudChlbGVtZW50KTtcbiAgICB9LFxuICApO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IHF1ZXJ5U2VsZWN0b3IsIHF1ZXJ5U2VsZWN0b3JBbGwgfSBmcm9tICcuL2xlcHVzUXVlcnlTZWxlY3Rvci5qcyc7XG5pbXBvcnQgeyBpc1Nka1ZlcnNpb25HdCB9IGZyb20gJy4uL3V0aWxzL3ZlcnNpb24uanMnO1xuXG5mdW5jdGlvbiBpbml0QXBpRW52KCk6IHZvaWQge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgbHlueC5xdWVyeVNlbGVjdG9yID0gcXVlcnlTZWxlY3RvcjtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGx5bngucXVlcnlTZWxlY3RvckFsbCA9IHF1ZXJ5U2VsZWN0b3JBbGw7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBnbG9iYWxUaGlzLnNldFRpbWVvdXQgPSBseW54LnNldFRpbWVvdXQgYXMgKGNiOiAoKSA9PiB2b2lkLCB0aW1lb3V0OiBudW1iZXIpID0+IG51bWJlcjtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGdsb2JhbFRoaXMuc2V0SW50ZXJ2YWwgPSBseW54LnNldEludGVydmFsIGFzIChjYjogKCkgPT4gdm9pZCwgdGltZW91dDogbnVtYmVyKSA9PiBudW1iZXI7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBnbG9iYWxUaGlzLmNsZWFyVGltZW91dCA9IGx5bnguY2xlYXJUaW1lb3V0IGFzICh0aW1lb3V0OiBudW1iZXIpID0+IHZvaWQ7XG4gIC8vIEluIGx5bnggMi4xNCBgY2xlYXJJbnRlcnZhbGAgaXMgbWlzdGFrZW5seSBzcGVsbGVkIGFzIGBjbGVhclRpbWVJbnRlcnZhbGAuIFRoaXMgaXMgZml4ZWQgaW4gbHlueCAyLjE1LlxuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5jbGVhckludGVydmFsID0gKGx5bnguY2xlYXJJbnRlcnZhbCA/PyBseW54LmNsZWFyVGltZUludGVydmFsKSBhcyAodGltZW91dDogbnVtYmVyKSA9PiB2b2lkO1xuXG4gIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgICBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBseW54LnJlcXVlc3RBbmltYXRpb25GcmFtZSBhcyAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IG51bWJlcjtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgICBseW54LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGdsb2JhbFRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gKFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHZvaWQsXG4gICAgKSA9PiB7XG4gICAgICBpZiAoIWlzU2RrVmVyc2lvbkd0KDIsIDE1KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ3JlcXVlc3RBbmltYXRpb25GcmFtZSBpbiBtYWluIHRocmVhZCBzY3JpcHQgcmVxdWlyZXMgTHlueCBzZGsgdmVyc2lvbiAyLjE2JyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spO1xuICAgIH07XG4gIH1cblxuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGx5bnguY2FuY2VsQW5pbWF0aW9uRnJhbWUgYXMgKHJlcXVlc3RJZDogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgeyBpbml0QXBpRW52IH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNSBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgV29ya2xldEV2ZW50cyB9IGZyb20gJy4vYmluZGluZ3MvaW5kZXguanMnO1xuaW1wb3J0IHR5cGUgeyBDbG9zdXJlVmFsdWVUeXBlLCBSdW5Xb3JrbGV0Q3R4UmV0RGF0YSwgV29ya2xldCB9IGZyb20gJy4vYmluZGluZ3MvaW5kZXguanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVuUnVuT25NYWluVGhyZWFkVGFzayh0YXNrOiBXb3JrbGV0LCBwYXJhbXM6IENsb3N1cmVWYWx1ZVR5cGVbXSwgcmVzb2x2ZUlkOiBudW1iZXIpOiB2b2lkIHtcbiAgbGV0IHJldHVyblZhbHVlO1xuICB0cnkge1xuICAgIHJldHVyblZhbHVlID0gcnVuV29ya2xldCh0YXNrLCBwYXJhbXMpO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIFRPRE86IFNob3VsZCBiZSBtb3JlIHByb3BlciB0byByZWplY3QgdGhlIHByb21pc2UgaWYgdGhlcmUgaXMgYW4gZXJyb3IuXG4gICAgbHlueC5nZXRKU0NvbnRleHQoKS5kaXNwYXRjaEV2ZW50KHtcbiAgICAgIHR5cGU6IFdvcmtsZXRFdmVudHMuRnVuY3Rpb25DYWxsUmV0LFxuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICByZXNvbHZlSWQsXG4gICAgICAgIHJldHVyblZhbHVlLFxuICAgICAgfSBhcyBSdW5Xb3JrbGV0Q3R4UmV0RGF0YSksXG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5leHBvcnQgZnVuY3Rpb24gcHJvZmlsZTxSZXQsIEZuIGV4dGVuZHMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUmV0PihcbiAgc2xpY2VOYW1lOiBzdHJpbmcsXG4gIGY6IEZuLFxuKTogUmV0IHtcbiAgLyogdjggaWdub3JlIG5leHQgOSAqL1xuICAvLyBUT0RPOiBjaGFuZ2UgaXQgdG8gX19QUk9GSUxFX19cbiAgaWYgKF9fREVWX18pIHtcbiAgICBjb25zb2xlLnByb2ZpbGU/LihzbGljZU5hbWUpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zb2xlLnByb2ZpbGVFbmQ/LigpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZigpO1xuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gJy4vYXBpL2VsZW1lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBXb3JrbGV0UmVmLCBXb3JrbGV0UmVmSWQsIFdvcmtsZXRSZWZJbXBsIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5pbXBvcnQgeyBtYWluVGhyZWFkRmx1c2hMb29wTWFyayB9IGZyb20gJy4vdXRpbHMvbWFpblRocmVhZEZsdXNoTG9vcEd1YXJkLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuXG5pbnRlcmZhY2UgUmVmSW1wbCB7XG4gIF93b3JrbGV0UmVmTWFwOiBSZWNvcmQ8V29ya2xldFJlZklkLCBXb3JrbGV0UmVmPHVua25vd24+PjtcbiAgX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcDogUmVjb3JkPFdvcmtsZXRSZWZJZCwgV29ya2xldFJlZjx1bmtub3duPj47XG4gIHVwZGF0ZVdvcmtsZXRSZWYoXG4gICAgcmVmSW1wbDogV29ya2xldFJlZkltcGw8RWxlbWVudCB8IG51bGw+LFxuICAgIGVsZW1lbnQ6IEVsZW1lbnROb2RlIHwgbnVsbCxcbiAgKTogdm9pZDtcbiAgdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMocGF0Y2g6IFtudW1iZXIsIHVua25vd25dW10pOiB2b2lkO1xuICBjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCgpOiB2b2lkO1xufVxuXG5sZXQgaW1wbDogUmVmSW1wbCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaW5pdFdvcmtsZXRSZWYoKTogUmVmSW1wbCB7XG4gIHJldHVybiAoaW1wbCA9IHtcbiAgICBfd29ya2xldFJlZk1hcDoge30sXG4gICAgLyoqXG4gICAgICogTWFwIG9mIHdvcmtsZXQgcmVmcyB0aGF0IGFyZSBjcmVhdGVkIGR1cmluZyBmaXJzdCBzY3JlZW4gcmVuZGVyaW5nLlxuICAgICAqIFRoZXNlIHJlZnMgYXJlIGNyZWF0ZWQgd2l0aCBuZWdhdGl2ZSBJRHMgYW5kIG5lZWQgdG8gYmUgaHlkcmF0ZWRcbiAgICAgKiB3aGVuIHRoZSBhcHAgc3RhcnRzLiBUaGUgbWFwIGlzIGNsZWFyZWQgYWZ0ZXIgaHlkcmF0aW9uIGlzIGNvbXBsZXRlXG4gICAgICogdG8gZnJlZSB1cCBtZW1vcnkuXG4gICAgICovXG4gICAgX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcDoge30sXG4gICAgdXBkYXRlV29ya2xldFJlZixcbiAgICB1cGRhdGVXb3JrbGV0UmVmSW5pdFZhbHVlQ2hhbmdlcyxcbiAgICBjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCxcbiAgfSk7XG59XG5cbmNvbnN0IGNyZWF0ZVdvcmtsZXRSZWYgPSA8VD4oXG4gIGlkOiBXb3JrbGV0UmVmSWQsXG4gIHZhbHVlOiBULFxuKTogV29ya2xldFJlZjxUPiA9PiB7XG4gIHJldHVybiB7XG4gICAgY3VycmVudDogdmFsdWUsXG4gICAgX3d2aWQ6IGlkLFxuICB9O1xufTtcblxuY29uc3QgZ2V0RnJvbVdvcmtsZXRSZWZNYXAgPSA8VD4oXG4gIHJlZkltcGw6IFdvcmtsZXRSZWZJbXBsPFQ+LFxuKTogV29ya2xldFJlZjxUPiA9PiB7XG4gIGNvbnN0IGlkID0gcmVmSW1wbC5fd3ZpZDtcbiAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICBpZiAoX19ERVZfXykge1xuICAgIG1haW5UaHJlYWRGbHVzaExvb3BNYXJrKGBNYWluVGhyZWFkUmVmOmdldCBpZD0ke2lkfWApO1xuICB9XG4gIGxldCB2YWx1ZTtcbiAgaWYgKGlkIDwgMCkge1xuICAgIC8vIEF0IHRoZSBmaXJzdCBzY3JlZW4gcmVuZGVyaW5nLCB0aGUgd29ya2xldCByZWYgaXMgY3JlYXRlZCB3aXRoIGEgbmVnYXRpdmUgSUQuXG4gICAgLy8gTWlnaHQgYmUgY2FsbGVkIGluIHR3byBzY2VuYXJpb3M6XG4gICAgLy8gMS4gSW4gTVRTIGV2ZW50c1xuICAgIC8vIDIuIEluIGBtYWluLXRocmVhZDpyZWZgXG4gICAgdmFsdWUgPSBpbXBsIS5fZmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwW2lkXSBhcyBXb3JrbGV0UmVmPFQ+O1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHZhbHVlID0gaW1wbCEuX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcFtpZF0gPSBjcmVhdGVXb3JrbGV0UmVmKGlkLCByZWZJbXBsLl9pbml0VmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGltcGwhLl93b3JrbGV0UmVmTWFwW2lkXSBhcyBXb3JrbGV0UmVmPFQ+O1xuICB9XG5cbiAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICBpZiAoX19ERVZfXyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNYWluVGhyZWFkUmVmIGlzIG5vdCBpbml0aWFsaXplZDogJyArIGlkKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5mdW5jdGlvbiByZW1vdmVWYWx1ZUZyb21Xb3JrbGV0UmVmTWFwKGlkOiBXb3JrbGV0UmVmSWQpOiB2b2lkIHtcbiAgZGVsZXRlIGltcGwhLl93b3JrbGV0UmVmTWFwW2lkXTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZWxlbWVudCBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudCBub2RlLCB0aGVuIHNldCB0aGUgd29ya2xldCB2YWx1ZSB0byBpdC5cbiAqIFRoaXMgaXMgY2FsbGVkIGluIGBzbmFwc2hvdENvbnRleHRVcGRhdGVXb3JrbGV0UmVmYC5cbiAqIEBwYXJhbSBoYW5kbGUgaGFuZGxlIG9mIHRoZSB3b3JrbGV0IHZhbHVlLlxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlV29ya2xldFJlZihcbiAgaGFuZGxlOiBXb3JrbGV0UmVmSW1wbDxFbGVtZW50IHwgbnVsbD4sXG4gIGVsZW1lbnQ6IEVsZW1lbnROb2RlIHwgbnVsbCxcbik6IHZvaWQge1xuICBnZXRGcm9tV29ya2xldFJlZk1hcChoYW5kbGUpLmN1cnJlbnQgPSBlbGVtZW50XG4gICAgPyBuZXcgRWxlbWVudChlbGVtZW50KVxuICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMoXG4gIHBhdGNoOiBbV29ya2xldFJlZklkLCB1bmtub3duXVtdLFxuKTogdm9pZCB7XG4gIHByb2ZpbGUoJ3VwZGF0ZVdvcmtsZXRSZWZJbml0VmFsdWVDaGFuZ2VzJywgKCkgPT4ge1xuICAgIHBhdGNoLmZvckVhY2goKFtpZCwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAoIWltcGwhLl93b3JrbGV0UmVmTWFwW2lkXSkge1xuICAgICAgICBpbXBsIS5fd29ya2xldFJlZk1hcFtpZF0gPSBjcmVhdGVXb3JrbGV0UmVmKGlkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCgpOiB2b2lkIHtcbiAgaW1wbCEuX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCA9IHt9O1xufVxuXG5leHBvcnQge1xuICB0eXBlIFJlZkltcGwsXG4gIGNyZWF0ZVdvcmtsZXRSZWYsXG4gIGluaXRXb3JrbGV0UmVmLFxuICBnZXRGcm9tV29ya2xldFJlZk1hcCxcbiAgcmVtb3ZlVmFsdWVGcm9tV29ya2xldFJlZk1hcCxcbiAgdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMsXG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IFdvcmtsZXRFdmVudHMgfSBmcm9tICcuL2JpbmRpbmdzL2V2ZW50cy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlbGVhc2VXb3JrbGV0UmVmRGF0YSwgUnVuV29ya2xldEN0eERhdGEgfSBmcm9tICcuL2JpbmRpbmdzL2V2ZW50cy5qcyc7XG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IHJ1blJ1bk9uTWFpblRocmVhZFRhc2sgfSBmcm9tICcuL3J1bk9uTWFpblRocmVhZC5qcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50IH0gZnJvbSAnLi90eXBlcy9ydW50aW1lUHJveHkuanMnO1xuaW1wb3J0IHsgcmVtb3ZlVmFsdWVGcm9tV29ya2xldFJlZk1hcCB9IGZyb20gJy4vd29ya2xldFJlZi5qcyc7XG5cbmZ1bmN0aW9uIGluaXRFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgY29uc3QganNDb250ZXh0ID0gbHlueC5nZXRKU0NvbnRleHQoKTtcbiAganNDb250ZXh0LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgV29ya2xldEV2ZW50cy5ydW5Xb3JrbGV0Q3R4LFxuICAgIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEgYXMgc3RyaW5nKSBhcyBSdW5Xb3JrbGV0Q3R4RGF0YTtcbiAgICAgIHJ1blJ1bk9uTWFpblRocmVhZFRhc2soZGF0YS53b3JrbGV0LCBkYXRhLnBhcmFtcyBhcyBDbG9zdXJlVmFsdWVUeXBlW10sIGRhdGEucmVzb2x2ZUlkKTtcbiAgICB9LFxuICApO1xuICBqc0NvbnRleHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBXb3JrbGV0RXZlbnRzLnJlbGVhc2VXb3JrbGV0UmVmLFxuICAgIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIHJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAoKGV2ZW50LmRhdGEgYXMgUmVsZWFzZVdvcmtsZXRSZWZEYXRhKS5pZCk7XG4gICAgfSxcbiAgKTtcbn1cblxuZXhwb3J0IHsgaW5pdEV2ZW50TGlzdGVuZXJzIH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHR5cGUgeyBKc0ZuSGFuZGxlIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5cbmludGVyZmFjZSBEZXRhaWxzIHtcbiAgdGFzazogKGZuSWQ6IG51bWJlciwgZXhlY0lkOiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgLy8gVGhpcyBjb21lcyBmcm9tIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCwgaW5zZXJ0ZWQgaGVyZSBkdXJpbmcgY3R4IGh5ZHJhdGlvbi5cbiAganNGbkhhbmRsZT86IEpzRm5IYW5kbGU7XG59XG5cbmludGVyZmFjZSBSdW5PbkJhY2tncm91bmREZWxheUltcGwge1xuICAvLyBFbGVtZW50cyBzaG91bGQga2VlcCB0aGUgb3JkZXIgYmVpbmcgY2FsbGVkIGJ5IHRoZSB1c2VyLlxuICBkZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXk6IERldGFpbHNbXTtcbiAgZGVsYXlSdW5PbkJhY2tncm91bmQoZm5PYmo6IEpzRm5IYW5kbGUsIGZuOiAoZm5JZDogbnVtYmVyLCBleGVjSWQ6IG51bWJlcikgPT4gdm9pZCk6IHZvaWQ7XG4gIHJ1bkRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25zKCk6IHZvaWQ7XG59XG5cbmxldCBpbXBsOiBSdW5PbkJhY2tncm91bmREZWxheUltcGwgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGluaXRSdW5PbkJhY2tncm91bmREZWxheSgpOiBSdW5PbkJhY2tncm91bmREZWxheUltcGwge1xuICByZXR1cm4gKGltcGwgPSB7XG4gICAgZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5OiBbXSxcbiAgICBkZWxheVJ1bk9uQmFja2dyb3VuZCxcbiAgICBydW5EZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9ucyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlbGF5UnVuT25CYWNrZ3JvdW5kKGZuT2JqOiBKc0ZuSGFuZGxlLCB0YXNrOiAoZm5JZDogbnVtYmVyLCBleGVjSWQ6IG51bWJlcikgPT4gdm9pZCkge1xuICBpbXBsIS5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXkucHVzaCh7IHRhc2sgfSk7XG4gIGNvbnN0IGRlbGF5SW5kaWNlcyA9IGZuT2JqLl9kZWxheUluZGljZXMgPz89IFtdO1xuICBkZWxheUluZGljZXMucHVzaChpbXBsIS5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXkubGVuZ3RoIC0gMSk7XG59XG5cbmZ1bmN0aW9uIHJ1bkRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25zKCk6IHZvaWQge1xuICBmb3IgKGNvbnN0IGRldGFpbHMgb2YgaW1wbCEuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5KSB7XG4gICAgaWYgKGRldGFpbHMuanNGbkhhbmRsZSkge1xuICAgICAgZGV0YWlscy50YXNrKGRldGFpbHMuanNGbkhhbmRsZS5fanNGbklkISwgZGV0YWlscy5qc0ZuSGFuZGxlLl9leGVjSWQhKTtcbiAgICB9XG4gIH1cbiAgaW1wbCEuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5Lmxlbmd0aCA9IDA7XG59XG5cbmV4cG9ydCB7IHR5cGUgUnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsLCBpbml0UnVuT25CYWNrZ3JvdW5kRGVsYXkgfTtcbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUsIFdvcmtsZXQgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuXG5pbnRlcmZhY2UgRXZlbnREZWxheUltcGwge1xuICBfZGVsYXllZFdvcmtsZXRQYXJhbXNNYXA6IE1hcDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGVbXVtdPjtcbiAgcnVuRGVsYXllZFdvcmtsZXQod29ya2xldDogV29ya2xldCwgZWxlbWVudDogRWxlbWVudE5vZGUpOiB2b2lkO1xuICBjbGVhckRlbGF5ZWRXb3JrbGV0cygpOiB2b2lkO1xufVxuXG5sZXQgaW1wbDogRXZlbnREZWxheUltcGwgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGluaXRFdmVudERlbGF5KCk6IEV2ZW50RGVsYXlJbXBsIHtcbiAgcmV0dXJuIChpbXBsID0ge1xuICAgIF9kZWxheWVkV29ya2xldFBhcmFtc01hcDogbmV3IE1hcCgpLFxuICAgIHJ1bkRlbGF5ZWRXb3JrbGV0LFxuICAgIGNsZWFyRGVsYXllZFdvcmtsZXRzLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVsYXlFeGVjVW50aWxKc1JlYWR5KFxuICBoYXNoOiBzdHJpbmcsXG4gIHBhcmFtczogQ2xvc3VyZVZhbHVlVHlwZVtdLFxuKTogdm9pZCB7XG4gIHByb2ZpbGUoJ2RlbGF5RXhlY1VudGlsSnNSZWFkeTogJyArIGhhc2gsICgpID0+IHtcbiAgICBjb25zdCBtYXAgPSBpbXBsIS5fZGVsYXllZFdvcmtsZXRQYXJhbXNNYXA7XG4gICAgY29uc3QgcGFyYW1WZWMgPSBtYXAuZ2V0KGhhc2gpO1xuICAgIGlmIChwYXJhbVZlYykge1xuICAgICAgcGFyYW1WZWMucHVzaChwYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXAuc2V0KGhhc2gsIFtwYXJhbXNdKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBydW5EZWxheWVkV29ya2xldCh3b3JrbGV0OiBXb3JrbGV0LCBlbGVtZW50OiBFbGVtZW50Tm9kZSk6IHZvaWQge1xuICBwcm9maWxlKCdjb21taXREZWxheWVkV29ya2xldCcsICgpID0+IHtcbiAgICBjb25zdCBwYXJhbXNWZWMgPSBpbXBsIS5fZGVsYXllZFdvcmtsZXRQYXJhbXNNYXAuZ2V0KFxuICAgICAgd29ya2xldC5fd2tsdElkLFxuICAgICk7XG4gICAgaWYgKHBhcmFtc1ZlYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxlZnRQYXJhbXNWZWM6IENsb3N1cmVWYWx1ZVR5cGVbXVtdID0gW107XG4gICAgcGFyYW1zVmVjLmZvckVhY2goKHBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgZmlyc3RQYXJhbSA9IHBhcmFtc1swXSBhcyB7IGN1cnJlbnRUYXJnZXQ/OiB7IGVsZW1lbnRSZWZwdHI/OiBFbGVtZW50Tm9kZSB9IH0gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZmlyc3RQYXJhbT8uY3VycmVudFRhcmdldD8uZWxlbWVudFJlZnB0ciA9PT0gZWxlbWVudCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBwcm9maWxlKCdydW5EZWxheWVkV29ya2xldCcsICgpID0+IHtcbiAgICAgICAgICAgIHJ1bldvcmtsZXQod29ya2xldCwgcGFyYW1zKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0UGFyYW1zVmVjLnB1c2gocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpbXBsIS5fZGVsYXllZFdvcmtsZXRQYXJhbXNNYXAuc2V0KFxuICAgICAgd29ya2xldC5fd2tsdElkLFxuICAgICAgbGVmdFBhcmFtc1ZlYyxcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJEZWxheWVkV29ya2xldHMoKTogdm9pZCB7XG4gIGltcGwhLl9kZWxheWVkV29ya2xldFBhcmFtc01hcC5jbGVhcigpO1xufVxuXG5leHBvcnQgeyB0eXBlIEV2ZW50RGVsYXlJbXBsLCBpbml0RXZlbnREZWxheSwgZGVsYXlFeGVjVW50aWxKc1JlYWR5LCBydW5EZWxheWVkV29ya2xldCwgY2xlYXJEZWxheWVkV29ya2xldHMgfTtcbiIsIi8vIENvcHlyaWdodCAyMDI1IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBzZXRTaG91bGRGbHVzaCB9IGZyb20gJy4vYXBpL2VsZW1lbnQuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVvbUltcGwge1xuICBzZXRTaG91bGRGbHVzaCh2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0RW9tSW1wbCgpOiBFb21JbXBsIHtcbiAgcmV0dXJuIHtcbiAgICBzZXRTaG91bGRGbHVzaCxcbiAgfTtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5cbmltcG9ydCB0eXBlIHsgQ2xvc3VyZVZhbHVlVHlwZSwgRXZlbnRDdHgsIFJ1bldvcmtsZXRPcHRpb25zIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5pbXBvcnQgeyBSdW5Xb3JrbGV0U291cmNlIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5cbi8vIEV2ZW50UmVzdWx0IGVudW0gdmFsdWVzXG5leHBvcnQgY29uc3QgRXZlbnRSZXN1bHQgPSB7XG4gIGtEZWZhdWx0OiAweDAsXG4gIGtTdG9wUHJvcGFnYXRpb25NYXNrOiAweDEsXG4gIGtTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25NYXNrOiAweDIsXG59IGFzIGNvbnN0O1xuXG50eXBlIEV2ZW50TGlrZSA9IFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFdmVudE9iamVjdChcbiAgY3R4OiBDbG9zdXJlVmFsdWVUeXBlW10sXG4gIG9wdGlvbnM/OiBSdW5Xb3JrbGV0T3B0aW9ucyxcbik6IGN0eCBpcyBbRXZlbnRMaWtlLCAuLi5DbG9zdXJlVmFsdWVUeXBlW11dIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGN0eCkgfHwgdHlwZW9mIGN0eFswXSAhPT0gJ29iamVjdCcgfHwgY3R4WzBdID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc291cmNlID09PSBSdW5Xb3JrbGV0U291cmNlLkVWRU5UKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBldmVudCBtZXRob2RzIHRvIGFuIGV2ZW50IG9iamVjdCBpZiBuZWVkZWRcbiAqIEBwYXJhbSBjdHggVGhlIGV2ZW50IG9iamVjdCB0byBlbmhhbmNlXG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgcnVuIHdvcmtsZXQgb3B0aW9uc1xuICogQHJldHVybnMgQSB0dXBsZSBvZiBib29sZWFuIGFuZCB0aGUgZXZlbnQgcmV0dXJuIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRNZXRob2RzSWZOZWVkZWQoY3R4OiBDbG9zdXJlVmFsdWVUeXBlW10sIG9wdGlvbnM/OiBSdW5Xb3JrbGV0T3B0aW9ucyk6IFtib29sZWFuLCBFdmVudEN0eF0ge1xuICBpZiAoIWlzRXZlbnRPYmplY3QoY3R4LCBvcHRpb25zKSkge1xuICAgIHJldHVybiBbZmFsc2UsIHt9XTtcbiAgfVxuICBjb25zdCBldmVudEN0eDogRXZlbnRDdHggPSB7fTtcbiAgY29uc3QgZXZlbnRPYmogPSBjdHhbMF07XG5cbiAgLy8gQWRkIHN0b3BQcm9wYWdhdGlvbiBtZXRob2RcbiAgZXZlbnRPYmpbJ3N0b3BQcm9wYWdhdGlvbiddID0gZnVuY3Rpb24oKSB7XG4gICAgZXZlbnRDdHguX2V2ZW50UmV0dXJuUmVzdWx0ID0gKGV2ZW50Q3R4Ll9ldmVudFJldHVyblJlc3VsdCA/PyBFdmVudFJlc3VsdC5rRGVmYXVsdClcbiAgICAgIHwgRXZlbnRSZXN1bHQua1N0b3BQcm9wYWdhdGlvbk1hc2s7XG4gIH07XG5cbiAgLy8gQWRkIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiBtZXRob2RcbiAgZXZlbnRPYmpbJ3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiddID0gZnVuY3Rpb24oKSB7XG4gICAgZXZlbnRDdHguX2V2ZW50UmV0dXJuUmVzdWx0ID0gKGV2ZW50Q3R4Ll9ldmVudFJldHVyblJlc3VsdCA/PyBFdmVudFJlc3VsdC5rRGVmYXVsdClcbiAgICAgIHwgRXZlbnRSZXN1bHQua1N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbk1hc2s7XG4gIH07XG5cbiAgcmV0dXJuIFt0cnVlLCBldmVudEN0eF07XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuXG5pbXBvcnQgdHlwZSB7IENsb3N1cmVWYWx1ZVR5cGUsIEpzRm5IYW5kbGUsIFdvcmtsZXQsIFdvcmtsZXRSZWZJZCwgV29ya2xldFJlZkltcGwgfSBmcm9tICcuL2JpbmRpbmdzL2luZGV4LmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuXG4vKipcbiAqIEh5ZHJhdGVzIGEgV29ya2xldCBjb250ZXh0IHdpdGggZGF0YSBmcm9tIGEgZmlyc3Qtc2NyZWVuIFdvcmtsZXQgY29udGV4dC5cbiAqIFRoaXMgcHJvY2VzcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBydW4gYWxsIGRlbGF5ZWQgYHJ1bk9uQmFja2dyb3VuZGAgZnVuY3Rpb25zXG4gKiBhbmQgaW5pdGlhbGl6ZSBgV29ya2xldFJlZmAgdmFsdWVzIG1vZGlmaWVkIGJlZm9yZSBoeWRyYXRpb24uXG4gKlxuICogQHBhcmFtIGN0eCBUaGUgdGFyZ2V0IFdvcmtsZXQgY29udGV4dCB0byBiZSBoeWRyYXRlZC5cbiAqIEBwYXJhbSBmaXJzdFNjcmVlbkN0eCBUaGUgV29ya2xldCBjb250ZXh0IGZyb20gdGhlIGZpcnN0IHNjcmVlbiByZW5kZXJpbmcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyB0aGUgZGF0YSB0byBoeWRyYXRlIHdpdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlQ3R4KGN0eDogV29ya2xldCwgZmlyc3RTY3JlZW5DdHg6IFdvcmtsZXQpOiB2b2lkIHtcbiAgcHJvZmlsZSgnaHlkcmF0ZUN0eCcsICgpID0+IHtcbiAgICBoeWRyYXRlQ3R4SW1wbChjdHgsIGZpcnN0U2NyZWVuQ3R4LCBjdHguX2V4ZWNJZCEpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaHlkcmF0ZUN0eEltcGwoXG4gIGN0eDogQ2xvc3VyZVZhbHVlVHlwZSxcbiAgZmlyc3RTY3JlZW5DdHg6IENsb3N1cmVWYWx1ZVR5cGUsXG4gIGV4ZWNJZDogbnVtYmVyLFxuKTogdm9pZCB7XG4gIGlmIChcbiAgICAhY3R4IHx8IHR5cGVvZiBjdHggIT09ICdvYmplY3QnIHx8ICFmaXJzdFNjcmVlbkN0eFxuICAgIHx8IHR5cGVvZiBmaXJzdFNjcmVlbkN0eCAhPT0gJ29iamVjdCdcbiAgKSByZXR1cm47XG5cbiAgY29uc3QgY3R4T2JqID0gY3R4IGFzIFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuICBjb25zdCBmaXJzdFNjcmVlbkN0eE9iaiA9IGZpcnN0U2NyZWVuQ3R4IGFzIFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuXG4gIGlmIChjdHhPYmpbJ193a2x0SWQnXSAmJiBjdHhPYmpbJ193a2x0SWQnXSAhPT0gZmlyc3RTY3JlZW5DdHhPYmpbJ193a2x0SWQnXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZm9yLWluLWFycmF5XG4gIGZvciAoY29uc3Qga2V5IGluIGN0eCkge1xuICAgIGlmIChrZXkgPT09ICdfd3ZpZCcpIHtcbiAgICAgIGh5ZHJhdGVNYWluVGhyZWFkUmVmKFxuICAgICAgICBjdHhPYmpba2V5XSBhcyBXb3JrbGV0UmVmSWQsXG4gICAgICAgIGZpcnN0U2NyZWVuQ3R4T2JqIGFzIHVua25vd24gYXMgV29ya2xldFJlZkltcGw8dW5rbm93bj4sXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnX2pzRm4nKSB7XG4gICAgICBoeWRyYXRlRGVsYXlSdW5PbkJhY2tncm91bmRUYXNrcyhcbiAgICAgICAgY3R4T2JqW2tleV0gYXMgUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sXG4gICAgICAgIGZpcnN0U2NyZWVuQ3R4T2JqW2tleV0gYXMgUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sXG4gICAgICAgIGV4ZWNJZCxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpcnN0U2NyZWVuVmFsdWUgPSB0eXBlb2YgZmlyc3RTY3JlZW5DdHhPYmpba2V5XSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IChmaXJzdFNjcmVlbkN0eE9ialtrZXldIGFzIHsgY3R4OiBDbG9zdXJlVmFsdWVUeXBlIH0pLmN0eFxuICAgICAgICA6IGZpcnN0U2NyZWVuQ3R4T2JqW2tleV07XG4gICAgICBoeWRyYXRlQ3R4SW1wbChjdHhPYmpba2V5XSwgZmlyc3RTY3JlZW5WYWx1ZSwgZXhlY0lkKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBIeWRyYXRlcyBhIFdvcmtsZXRSZWYgb24gdGhlIG1haW4gdGhyZWFkLlxuICogVGhpcyBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgV29ya2xldFJlZidzIGJhY2tncm91bmQgaW5pdGlhbCB2YWx1ZSBiYXNlZCBvbiBjaGFuZ2VzXG4gKiB0aGF0IG9jY3VycmVkIGluIHRoZSBmaXJzdC1zY3JlZW4gV29ya2xldCBjb250ZXh0IGJlZm9yZSBoeWRyYXRpb24uXG4gKlxuICogQHBhcmFtIHJlZklkIFRoZSBJRCBvZiB0aGUgV29ya2xldFJlZiB0byBoeWRyYXRlLlxuICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBXb3JrbGV0UmVmLlxuICovXG5mdW5jdGlvbiBoeWRyYXRlTWFpblRocmVhZFJlZihcbiAgcmVmSWQ6IFdvcmtsZXRSZWZJZCxcbiAgdmFsdWU6IFdvcmtsZXRSZWZJbXBsPHVua25vd24+LFxuKSB7XG4gIGlmICgnX2luaXRWYWx1ZScgaW4gdmFsdWUpIHtcbiAgICAvLyBUaGUgcmVmIGhhcyBub3QgYmVlbiBhY2Nlc3NlZCB5ZXQuXG4gICAgcmV0dXJuO1xuICB9XG4gIGx5bnhXb3JrbGV0SW1wbCEuX3JlZkltcGwuX3dvcmtsZXRSZWZNYXBbcmVmSWRdID0gdmFsdWU7XG59XG5cbi8qKlxuICogSHlkcmF0ZXMgZGVsYXllZCBgcnVuT25CYWNrZ3JvdW5kYCB0YXNrcy5cbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IGFueSBgcnVuT25CYWNrZ3JvdW5kYCBjYWxscyB0aGF0IHdlcmUgZGVsYXllZFxuICogZHVyaW5nIHRoZSBmaXJzdC1zY3JlZW4gcmVuZGVyaW5nIGFyZSBjb3JyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIHRoZWlyXG4gKiByZXNwZWN0aXZlIEphdmFTY3JpcHQgZnVuY3Rpb24gaGFuZGxlcyBpbiB0aGUgaHlkcmF0ZWQgV29ya2xldCBjb250ZXh0LlxuICovXG5mdW5jdGlvbiBoeWRyYXRlRGVsYXlSdW5PbkJhY2tncm91bmRUYXNrcyhcbiAgZm5PYmpzOiBSZWNvcmQ8c3RyaW5nLCBKc0ZuSGFuZGxlPiwgLy8gZXhhbXBsZToge1wiX2pzRm4xXCI6e1wiX2pzRm5JZFwiOjF9fVxuICBmaXJzdFNjcmVlbkZuT2JqczogUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sIC8vIGV4YW1wbGU6IHtcIl9qc0ZuMVwiOntcIl9pc0ZpcnN0U2NyZWVuXCI6dHJ1ZSxcIl9kZWxheUluZGljZXNcIjpbMF19fVxuICBleGVjSWQ6IG51bWJlcixcbikge1xuICBmb3IgKGNvbnN0IGZuTmFtZSBpbiBmbk9ianMpIHtcbiAgICBjb25zdCBmbk9iaiA9IGZuT2Jqc1tmbk5hbWVdITtcbiAgICBjb25zdCBmaXJzdFNjcmVlbkZuT2JqOiBKc0ZuSGFuZGxlIHwgdW5kZWZpbmVkID0gZmlyc3RTY3JlZW5Gbk9ianNbZm5OYW1lXTtcbiAgICBpZiAoIWZpcnN0U2NyZWVuRm5PYmo/Ll9kZWxheUluZGljZXMpIHtcbiAgICAgIGlmIChmaXJzdFNjcmVlbkZuT2JqKSB7XG4gICAgICAgIGZpcnN0U2NyZWVuRm5PYmouX2lzRmlyc3RTY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgZmlyc3RTY3JlZW5Gbk9iai5fZXhlY0lkID0gZXhlY0lkO1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpcnN0U2NyZWVuRm5PYmosIGZuT2JqKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGZpcnN0U2NyZWVuRm5PYmouX2RlbGF5SW5kaWNlcykge1xuICAgICAgY29uc3QgZGV0YWlscyA9IGx5bnhXb3JrbGV0SW1wbCEuX3J1bk9uQmFja2dyb3VuZERlbGF5SW1wbFxuICAgICAgICAuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5W2luZGV4XSE7XG4gICAgICBmbk9iai5fZXhlY0lkID0gZXhlY0lkO1xuICAgICAgZGV0YWlscy5qc0ZuSGFuZGxlID0gZm5PYmo7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgV29ya2xldEV2ZW50cyB9IGZyb20gJy4vYmluZGluZ3MvZXZlbnRzLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuaW1wb3J0IHsgaXNTZGtWZXJzaW9uR3QgfSBmcm9tICcuL3V0aWxzL3ZlcnNpb24uanMnO1xuXG4vKipcbiAqIGBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlcmAgbW9uaXRvcnMgcmVmZXJlbmNlcyB0byBKUyBmdW5jdGlvbiBoYW5kbGVzIHRvIGJlIGNhbGxlZCBieSBgcnVuT25CYWNrZ3JvdW5kKClgLlxuICogSW4gSlMgY29udGV4dCwgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBieSBgcnVuT25CYWNrZ3JvdW5kKClgIGlzIHJlZmVyZW5jZWQgYnkgYEpzRm5IYW5kbGVgcyBhbmQgZmluYWxseSBieSBgZXhlY0lkYC5cbiAqIFdoZW4gYWxsIGBKc0ZuSGFuZGxlYHMgaW4gbGVwdXMgYXJlIHJlbGVhc2VkLCBhbiBldmVudCB3aWxsIGJlIHNlbnQgdG8gSlMgY29udGV4dCB0byBkZS1yZWYgdGhlIGBleGVjSWRgLFxuICogcmVzdWx0aW5nIGEgZGUtcmVmIHRvIHRoZSBqcyBmdW5jdGlvbiBpbiBKUyBjb250ZXh0LlxuICovXG5jbGFzcyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciB7XG4gIHByaXZhdGUgZXhlY0lkUmVmQ291bnQgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBwcml2YXRlIGV4ZWNJZFNldFRvRmlyZSA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBwcml2YXRlIHdpbGxGaXJlID0gZmFsc2U7XG4gIHByaXZhdGUgcmVnaXN0cnk/OiBGaW5hbGl6YXRpb25SZWdpc3RyeTxudW1iZXI+ID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucmVnaXN0cnkgPSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnk8bnVtYmVyPih0aGlzLnJlbW92ZVJlZi5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIGFkZFJlZihleGVjSWQ6IG51bWJlciwgb2JqVG9SZWY6IG9iamVjdCk6IHZvaWQge1xuICAgIHRoaXMuZXhlY0lkUmVmQ291bnQuc2V0KFxuICAgICAgZXhlY0lkLFxuICAgICAgKHRoaXMuZXhlY0lkUmVmQ291bnQuZ2V0KGV4ZWNJZCkgPz8gMCkgKyAxLFxuICAgICk7XG4gICAgdGhpcy5yZWdpc3RyeSEucmVnaXN0ZXIob2JqVG9SZWYsIGV4ZWNJZCk7XG4gIH1cblxuICByZW1vdmVSZWYoZXhlY0lkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCByYyA9IHRoaXMuZXhlY0lkUmVmQ291bnQuZ2V0KGV4ZWNJZCkhO1xuICAgIGlmIChyYyA+IDEpIHtcbiAgICAgIHRoaXMuZXhlY0lkUmVmQ291bnQuc2V0KGV4ZWNJZCwgcmMgLSAxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5leGVjSWRSZWZDb3VudC5kZWxldGUoZXhlY0lkKTtcbiAgICB0aGlzLmV4ZWNJZFNldFRvRmlyZS5hZGQoZXhlY0lkKTtcbiAgICBpZiAoIXRoaXMud2lsbEZpcmUpIHtcbiAgICAgIHRoaXMud2lsbEZpcmUgPSB0cnVlO1xuICAgICAgdm9pZCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmaXJlKCk6IHZvaWQge1xuICAgIHByb2ZpbGUoJ0pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyLmZpcmUnLCAoKSA9PiB7XG4gICAgICBseW54LmdldEpTQ29udGV4dCgpLmRpc3BhdGNoRXZlbnQoe1xuICAgICAgICB0eXBlOiBXb3JrbGV0RXZlbnRzLnJlbGVhc2VCYWNrZ3JvdW5kV29ya2xldEN0eCxcbiAgICAgICAgZGF0YTogQXJyYXkuZnJvbSh0aGlzLmV4ZWNJZFNldFRvRmlyZSksXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhlY0lkU2V0VG9GaXJlLmNsZWFyKCk7XG4gICAgICB0aGlzLndpbGxGaXJlID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNSdW5PbkJhY2tncm91bmRFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNTZGtWZXJzaW9uR3QoMiwgMTUpO1xufVxuXG5leHBvcnQgeyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciwgaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gJy4vYXBpL2VsZW1lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBDbG9zdXJlVmFsdWVUeXBlLCBSdW5Xb3JrbGV0T3B0aW9ucywgV29ya2xldCwgV29ya2xldFJlZkltcGwgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IFJ1bldvcmtsZXRTb3VyY2UgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IGluaXRSdW5PbkJhY2tncm91bmREZWxheSB9IGZyb20gJy4vZGVsYXlSdW5PbkJhY2tncm91bmQuanMnO1xuaW1wb3J0IHsgZGVsYXlFeGVjVW50aWxKc1JlYWR5LCBpbml0RXZlbnREZWxheSB9IGZyb20gJy4vZGVsYXlXb3JrbGV0RXZlbnQuanMnO1xuaW1wb3J0IHsgaW5pdEVvbUltcGwgfSBmcm9tICcuL2VvbUltcGwuanMnO1xuaW1wb3J0IHsgYWRkRXZlbnRNZXRob2RzSWZOZWVkZWQgfSBmcm9tICcuL2V2ZW50UHJvcGFnYXRpb24uanMnO1xuaW1wb3J0IHsgaHlkcmF0ZUN0eCB9IGZyb20gJy4vaHlkcmF0ZS5qcyc7XG5pbXBvcnQgeyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciwgaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIH0gZnJvbSAnLi9qc0Z1bmN0aW9uTGlmZWN5Y2xlLmpzJztcbmltcG9ydCB7IHJ1blJ1bk9uTWFpblRocmVhZFRhc2sgfSBmcm9tICcuL3J1bk9uTWFpblRocmVhZC5qcyc7XG5pbXBvcnQgeyBtYWluVGhyZWFkRmx1c2hMb29wTWFyayB9IGZyb20gJy4vdXRpbHMvbWFpblRocmVhZEZsdXNoTG9vcEd1YXJkLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuaW1wb3J0IHsgZ2V0RnJvbVdvcmtsZXRSZWZNYXAsIGluaXRXb3JrbGV0UmVmIH0gZnJvbSAnLi93b3JrbGV0UmVmLmpzJztcblxuZnVuY3Rpb24gaW5pdFdvcmtsZXQoKTogdm9pZCB7XG4gIGdsb2JhbFRoaXMubHlueFdvcmtsZXRJbXBsID0ge1xuICAgIF93b3JrbGV0TWFwOiB7fSxcbiAgICBfcmVmSW1wbDogaW5pdFdvcmtsZXRSZWYoKSxcbiAgICBfcnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsOiBpbml0UnVuT25CYWNrZ3JvdW5kRGVsYXkoKSxcbiAgICBfaHlkcmF0ZUN0eDogaHlkcmF0ZUN0eCxcbiAgICBfZXZlbnREZWxheUltcGw6IGluaXRFdmVudERlbGF5KCksXG4gICAgX2VvbUltcGw6IGluaXRFb21JbXBsKCksXG4gICAgX3J1blJ1bk9uTWFpblRocmVhZFRhc2s6IHJ1blJ1bk9uTWFpblRocmVhZFRhc2ssXG4gIH07XG5cbiAgaWYgKGlzUnVuT25CYWNrZ3JvdW5kRW5hYmxlZCgpKSB7XG4gICAgZ2xvYmFsVGhpcy5seW54V29ya2xldEltcGwuX2pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyID0gbmV3IEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyKCk7XG4gIH1cblxuICBnbG9iYWxUaGlzLnJlZ2lzdGVyV29ya2xldCA9IHJlZ2lzdGVyV29ya2xldDtcbiAgZ2xvYmFsVGhpcy5yZWdpc3RlcldvcmtsZXRJbnRlcm5hbCA9IHJlZ2lzdGVyV29ya2xldDtcbiAgZ2xvYmFsVGhpcy5ydW5Xb3JrbGV0ID0gcnVuV29ya2xldDtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIHdvcmtsZXQgZnVuY3Rpb24sIGFsbG93aW5nIGl0IHRvIGJlIGV4ZWN1dGVkIGJ5IGBydW5Xb3JrbGV0KClgLlxuICogVGhpcyBpcyBjYWxsZWQgaW4gbGVwdXMuanMuXG4gKiBAcGFyYW0gX3R5cGUgd29ya2xldCB0eXBlLCAnbWFpbi10aHJlYWQnIG9yICd1aSdcbiAqIEBwYXJhbSBpZCB3b3JrbGV0IGhhc2hcbiAqIEBwYXJhbSB3b3JrbGV0IHdvcmtsZXQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJXb3JrbGV0KF90eXBlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIHdvcmtsZXQ6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pOiB2b2lkIHtcbiAgbHlueFdvcmtsZXRJbXBsLl93b3JrbGV0TWFwW2lkXSA9IHdvcmtsZXQ7XG59XG5cbi8qKlxuICogRW50cmFuY2Ugb2YgYWxsIHdvcmtsZXQgY2FsbHMuXG4gKiBOYXRpdmUgZXZlbnQgdG91Y2ggaGFuZGxlciB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSBjdHggd29ya2xldCBvYmplY3QuXG4gKiBAcGFyYW0gcGFyYW1zIHdvcmtsZXQgcGFyYW1zLlxuICogQHBhcmFtIG9wdGlvbnMgcnVuIHdvcmtsZXQgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gcnVuV29ya2xldChjdHg6IFdvcmtsZXQsIHBhcmFtczogQ2xvc3VyZVZhbHVlVHlwZVtdLCBvcHRpb25zPzogUnVuV29ya2xldE9wdGlvbnMpOiB1bmtub3duIHtcbiAgaWYgKCF2YWxpZGF0ZVdvcmtsZXQoY3R4KSkge1xuICAgIGNvbnNvbGUud2FybignTWFpblRocmVhZEZ1bmN0aW9uOiBJbnZhbGlkIGZ1bmN0aW9uIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KGN0eCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChfX0RFVl9fKSB7XG4gICAgaWYgKG9wdGlvbnM/LnNvdXJjZSA9PT0gUnVuV29ya2xldFNvdXJjZS5FVkVOVCAmJiBBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcbiAgICAgIGNvbnN0IGZpcnN0ID0gcGFyYW1zWzBdO1xuICAgICAgY29uc3QgdCA9IChmaXJzdCBhcyB7IHR5cGU/OiB1bmtub3duIH0pLnR5cGU7XG4gICAgICBpZiAodHlwZW9mIHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG1haW5UaHJlYWRGbHVzaExvb3BNYXJrKGBldmVudDoke3R9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWFpblRocmVhZEZsdXNoTG9vcE1hcmsoYE1haW5UaHJlYWRGdW5jdGlvbiBpZD0ke1N0cmluZyhjdHguX3drbHRJZCl9YCk7XG4gIH1cblxuICBpZiAoJ19sZXB1c1dvcmtsZXRIYXNoJyBpbiBjdHgpIHtcbiAgICBkZWxheUV4ZWNVbnRpbEpzUmVhZHkoY3R4Ll9sZXB1c1dvcmtsZXRIYXNoLCBwYXJhbXMpO1xuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4gcnVuV29ya2xldEltcGwoY3R4LCBwYXJhbXMsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBydW5Xb3JrbGV0SW1wbChjdHg6IFdvcmtsZXQsIHBhcmFtczogQ2xvc3VyZVZhbHVlVHlwZVtdLCBvcHRpb25zPzogUnVuV29ya2xldE9wdGlvbnMpOiB1bmtub3duIHtcbiAgY29uc3Qgd29ya2xldDogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biA9IHByb2ZpbGUoXG4gICAgJ3RyYW5zZm9ybVdvcmtsZXRDdHggJyArIGN0eC5fd2tsdElkLFxuICAgICgpID0+IHRyYW5zZm9ybVdvcmtsZXQoY3R4LCB0cnVlKSxcbiAgKTtcbiAgY29uc3QgcGFyYW1zXzogQ2xvc3VyZVZhbHVlVHlwZVtdID0gcHJvZmlsZShcbiAgICAndHJhbnNmb3JtV29ya2xldFBhcmFtcycsXG4gICAgKCkgPT4gdHJhbnNmb3JtV29ya2xldChwYXJhbXMgfHwgW10sIGZhbHNlKSxcbiAgKTtcblxuICBjb25zdCBbaGFzRXZlbnRNZXRob2RzLCBldmVudEN0eF0gPSBhZGRFdmVudE1ldGhvZHNJZk5lZWRlZChwYXJhbXNfLCBvcHRpb25zKTtcblxuICBjb25zdCByZXN1bHQgPSBwcm9maWxlKCdydW5Xb3JrbGV0JywgKCkgPT4gd29ya2xldCguLi5wYXJhbXNfKSk7XG5cbiAgaWYgKGhhc0V2ZW50TWV0aG9kcykge1xuICAgIHJldHVybiB7XG4gICAgICByZXR1cm5WYWx1ZTogcmVzdWx0LFxuICAgICAgZXZlbnRSZXR1cm5SZXN1bHQ6IGV2ZW50Q3R4Ll9ldmVudFJldHVyblJlc3VsdCxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXb3JrbGV0KGN0eDogdW5rbm93bik6IGN0eCBpcyBXb3JrbGV0IHtcbiAgcmV0dXJuIHR5cGVvZiBjdHggPT09ICdvYmplY3QnICYmIGN0eCAhPT0gbnVsbCAmJiAoJ193a2x0SWQnIGluIGN0eCB8fCAnX2xlcHVzV29ya2xldEhhc2gnIGluIGN0eCk7XG59XG5cbmNvbnN0IHdvcmtsZXRDYWNoZSA9IG5ldyBXZWFrTWFwPG9iamVjdCwgQ2xvc3VyZVZhbHVlVHlwZSB8ICgoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duKT4oKTtcblxuZnVuY3Rpb24gdHJhbnNmb3JtV29ya2xldChjdHg6IFdvcmtsZXQsIGlzV29ya2xldDogdHJ1ZSk6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd247XG5mdW5jdGlvbiB0cmFuc2Zvcm1Xb3JrbGV0KFxuICBjdHg6IENsb3N1cmVWYWx1ZVR5cGVbXSxcbiAgaXNXb3JrbGV0OiBmYWxzZSxcbik6IENsb3N1cmVWYWx1ZVR5cGVbXTtcblxuZnVuY3Rpb24gdHJhbnNmb3JtV29ya2xldChcbiAgY3R4OiBDbG9zdXJlVmFsdWVUeXBlLFxuICBpc1dvcmtsZXQ6IGJvb2xlYW4sXG4pOiBDbG9zdXJlVmFsdWVUeXBlIHwgKCguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pIHtcbiAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICBpZiAodHlwZW9mIGN0eCAhPT0gJ29iamVjdCcgfHwgY3R4ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGN0eDtcbiAgfVxuXG4gIGlmIChpc1dvcmtsZXQpIHtcbiAgICBjb25zdCByZXMgPSB3b3JrbGV0Q2FjaGUuZ2V0KGN0eCk7XG4gICAgaWYgKHJlcykge1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH1cblxuICBjb25zdCB3b3JrbGV0ID0geyBtYWluOiBjdHggfTtcbiAgdHJhbnNmb3JtV29ya2xldElubmVyKHdvcmtsZXQsIDAsIGN0eCk7XG5cbiAgaWYgKGlzV29ya2xldCkge1xuICAgIHdvcmtsZXRDYWNoZS5zZXQoY3R4LCB3b3JrbGV0Lm1haW4pO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtsZXQubWFpbjtcbn1cblxuY29uc3QgdHJhbnNmb3JtV29ya2xldElubmVyID0gKFxuICB2YWx1ZTogQ2xvc3VyZVZhbHVlVHlwZSxcbiAgZGVwdGg6IG51bWJlcixcbiAgY3R4OiB1bmtub3duLFxuKSA9PiB7XG4gIGNvbnN0IGxpbWl0ID0gMTAwMDtcbiAgaWYgKCsrZGVwdGggPj0gbGltaXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlcHRoIG9mIHZhbHVlIGV4Y2VlZHMgbGltaXQgb2YgJyArIGxpbWl0ICsgJy4nKTtcbiAgfVxuICAvKiB2OCBpZ25vcmUgbmV4dCAzICovXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG9iaiA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIENsb3N1cmVWYWx1ZVR5cGU+O1xuXG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGNvbnN0IHN1Yk9iajogQ2xvc3VyZVZhbHVlVHlwZSA9IG9ialtrZXldO1xuICAgIGlmICh0eXBlb2Ygc3ViT2JqICE9PSAnb2JqZWN0JyB8fCBzdWJPYmogPT09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICgvKiogaXNFdmVudFRhcmdldCAqLyAnZWxlbWVudFJlZnB0cicgaW4gc3ViT2JqKSB7XG4gICAgICBvYmpba2V5XSA9IG5ldyBFbGVtZW50KHN1Yk9ialsnZWxlbWVudFJlZnB0ciddIGFzIEVsZW1lbnROb2RlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAoc3ViT2JqIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtV29ya2xldElubmVyKHN1Yk9iaiwgZGVwdGgsIGN0eCk7XG5cbiAgICBjb25zdCBpc1dvcmtsZXRSZWYgPSAnX3d2aWQnIGluIChzdWJPYmogYXMgb2JqZWN0KTtcbiAgICBpZiAoaXNXb3JrbGV0UmVmKSB7XG4gICAgICBvYmpba2V5XSA9IGdldEZyb21Xb3JrbGV0UmVmTWFwKFxuICAgICAgICBzdWJPYmogYXMgdW5rbm93biBhcyBXb3JrbGV0UmVmSW1wbDx1bmtub3duPixcbiAgICAgICk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgaXNXb3JrbGV0ID0gJ193a2x0SWQnIGluIHN1Yk9iajtcbiAgICBpZiAoaXNXb3JrbGV0KSB7XG4gICAgICAvLyBgc3ViT2JqYCBpcyB3b3JrbGV0IGN0eC4gU2hhbGxvdyBjb3B5IGl0IHRvIHByZXZlbnQgdGhlIHRyYW5zZm9ybWVkIHdvcmtsZXQgZnJvbSByZWZlcmVuY2luZyBjdHguXG4gICAgICAvLyBUaGlzIHdvdWxkIHJlc3VsdCBpbiB0aGUgdmFsdWUgb2YgYHdvcmtsZXRDYWNoZWAgcmVmZXJlbmNpbmcgaXRzIGtleS5cbiAgICAgIG9ialtrZXldID0gbHlueFdvcmtsZXRJbXBsLl93b3JrbGV0TWFwWyhzdWJPYmogYXMgV29ya2xldCkuX3drbHRJZF0hXG4gICAgICAgIC5iaW5kKHsgLi4uc3ViT2JqIH0pO1xuICAgICAgb2JqW2tleV0uY3R4ID0gc3ViT2JqO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGlzSnNGbiA9ICdfanNGbklkJyBpbiBzdWJPYmo7XG4gICAgaWYgKGlzSnNGbikge1xuICAgICAgc3ViT2JqWydfZXhlY0lkJ10gPSAoY3R4IGFzIFdvcmtsZXQpLl9leGVjSWQ7XG4gICAgICBseW54V29ya2xldEltcGwuX2pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyPy5hZGRSZWYoXG4gICAgICAgIChjdHggYXMgV29ya2xldCkuX2V4ZWNJZCEsXG4gICAgICAgIHN1Yk9iaixcbiAgICAgICk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCB7IGluaXRXb3JrbGV0IH07XG4iLCIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgaW5pdEFwaUVudiB9IGZyb20gJy4vYXBpL2x5bnhBcGkuanMnO1xuaW1wb3J0IHsgaW5pdEV2ZW50TGlzdGVuZXJzIH0gZnJvbSAnLi9saXN0ZW5lcnMuanMnO1xuaW1wb3J0IHsgaW5pdFdvcmtsZXQgfSBmcm9tICcuL3dvcmtsZXRSdW50aW1lLmpzJztcblxuaWYgKGdsb2JhbFRoaXMubHlueFdvcmtsZXRJbXBsID09PSB1bmRlZmluZWQpIHtcbiAgaW5pdFdvcmtsZXQoKTtcbiAgaW5pdEFwaUVudigpO1xuICBpbml0RXZlbnRMaXN0ZW5lcnMoKTtcbn1cbiJdLCJuYW1lcyI6WyJBbmltYXRpb24iLCJfX0VsZW1lbnRBbmltYXRlIiwiZWZmZWN0IiwiS2V5ZnJhbWVFZmZlY3QiLCJ0YXJnZXQiLCJrZXlmcmFtZXMiLCJvcHRpb25zIiwiVFJBQ0VfTElNSVQiLCJERUZBVUxUX0ZMVVNIX0xJTUlUIiwidHJhY2UiLCJmbHVzaENvdW50SW5XaW5kb3ciLCJyZXNldFNjaGVkdWxlZCIsInRyaXBwZWRFcnJvciIsInB1c2hUcmFjZSIsIm1hcmtlciIsImNvbXByZXNzVHJhY2UiLCJtYXJrZXJzIiwib3V0IiwicHJldiIsImNvdW50IiwiaSIsImN1ciIsIm1haW5UaHJlYWRGbHVzaExvb3BNYXJrIiwibWFpblRocmVhZEZsdXNoTG9vcE9uRmx1c2hNaWNyb3Rhc2siLCJzZXRUaW1lb3V0IiwibWFpblRocmVhZEZsdXNoTG9vcFJlc2V0IiwibGltaXQiLCJ0cmFjZVRleHQiLCJFcnJvciIsIm1haW5UaHJlYWRGbHVzaExvb3BSZXBvcnQiLCJlcnJvciIsImlzU2RrVmVyc2lvbkd0IiwibWFqb3IiLCJtaW5vciIsIl9TeXN0ZW1JbmZvX2x5bnhTZGtWZXJzaW9uIiwibHlueFNka1ZlcnNpb24iLCJ2ZXJzaW9uIiwiTnVtYmVyIiwid2lsbEZsdXNoIiwic2hvdWxkRmx1c2giLCJzZXRTaG91bGRGbHVzaCIsInZhbHVlIiwiRWxlbWVudCIsIm5hbWUiLCJfX1NldEF0dHJpYnV0ZSIsIl9fQWRkSW5saW5lU3R5bGUiLCJzdHlsZXMiLCJPYmplY3QiLCJrZXkiLCJhdHRyaWJ1dGVOYW1lIiwiX19HZXRBdHRyaWJ1dGVCeU5hbWUiLCJfX0dldEF0dHJpYnV0ZU5hbWVzIiwic2VsZWN0b3IiLCJyZWYiLCJfX1F1ZXJ5U2VsZWN0b3IiLCJfX1F1ZXJ5U2VsZWN0b3JBbGwiLCJlbGVtZW50IiwiX19HZXRDb21wdXRlZFN0eWxlQnlLZXkiLCJub3JtYWxpemVkT3B0aW9ucyIsIm1ldGhvZE5hbWUiLCJwYXJhbXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIl9fSW52b2tlVUlNZXRob2QiLCJyZXMiLCJKU09OIiwiX19GbHVzaEVsZW1lbnRUcmVlIiwiUGFnZUVsZW1lbnQiLCJfUGFnZUVsZW1lbnQiLCJfX0dldFBhZ2VFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvckFsbCIsImluaXRBcGlFbnYiLCJfbHlueF9jbGVhckludGVydmFsIiwibHlueCIsImdsb2JhbFRoaXMiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYWxsYmFjayIsInJ1blJ1bk9uTWFpblRocmVhZFRhc2siLCJ0YXNrIiwicmVzb2x2ZUlkIiwicmV0dXJuVmFsdWUiLCJydW5Xb3JrbGV0IiwiV29ya2xldEV2ZW50cyIsInByb2ZpbGUiLCJzbGljZU5hbWUiLCJmIiwiX2NvbnNvbGUiLCJfY29uc29sZTEiLCJpbXBsIiwiaW5pdFdvcmtsZXRSZWYiLCJ1cGRhdGVXb3JrbGV0UmVmIiwidXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMiLCJjbGVhckZpcnN0U2NyZWVuV29ya2xldFJlZk1hcCIsImNyZWF0ZVdvcmtsZXRSZWYiLCJpZCIsImdldEZyb21Xb3JrbGV0UmVmTWFwIiwicmVmSW1wbCIsInVuZGVmaW5lZCIsInJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAiLCJoYW5kbGUiLCJwYXRjaCIsImluaXRFdmVudExpc3RlbmVycyIsImpzQ29udGV4dCIsImV2ZW50IiwiZGF0YSIsImluaXRSdW5PbkJhY2tncm91bmREZWxheSIsImRlbGF5UnVuT25CYWNrZ3JvdW5kIiwicnVuRGVsYXllZEJhY2tncm91bmRGdW5jdGlvbnMiLCJmbk9iaiIsIl9mbk9iaiIsImRlbGF5SW5kaWNlcyIsImRldGFpbHMiLCJpbml0RXZlbnREZWxheSIsIk1hcCIsInJ1bkRlbGF5ZWRXb3JrbGV0IiwiY2xlYXJEZWxheWVkV29ya2xldHMiLCJkZWxheUV4ZWNVbnRpbEpzUmVhZHkiLCJoYXNoIiwibWFwIiwicGFyYW1WZWMiLCJ3b3JrbGV0IiwicGFyYW1zVmVjIiwibGVmdFBhcmFtc1ZlYyIsIl9maXJzdFBhcmFtX2N1cnJlbnRUYXJnZXQiLCJmaXJzdFBhcmFtIiwiaW5pdEVvbUltcGwiLCJFdmVudFJlc3VsdCIsImlzRXZlbnRPYmplY3QiLCJjdHgiLCJBcnJheSIsIlJ1bldvcmtsZXRTb3VyY2UiLCJhZGRFdmVudE1ldGhvZHNJZk5lZWRlZCIsImV2ZW50Q3R4IiwiZXZlbnRPYmoiLCJfZXZlbnRDdHhfX2V2ZW50UmV0dXJuUmVzdWx0IiwiaHlkcmF0ZUN0eCIsImZpcnN0U2NyZWVuQ3R4IiwiaHlkcmF0ZUN0eEltcGwiLCJleGVjSWQiLCJjdHhPYmoiLCJmaXJzdFNjcmVlbkN0eE9iaiIsImh5ZHJhdGVNYWluVGhyZWFkUmVmIiwiaHlkcmF0ZURlbGF5UnVuT25CYWNrZ3JvdW5kVGFza3MiLCJmaXJzdFNjcmVlblZhbHVlIiwicmVmSWQiLCJseW54V29ya2xldEltcGwiLCJmbk9ianMiLCJmaXJzdFNjcmVlbkZuT2JqcyIsImZuTmFtZSIsImZpcnN0U2NyZWVuRm5PYmoiLCJpbmRleCIsIkpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyIiwib2JqVG9SZWYiLCJfdGhpc19leGVjSWRSZWZDb3VudF9nZXQiLCJyYyIsIlNldCIsIkZpbmFsaXphdGlvblJlZ2lzdHJ5IiwiaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIiwiaW5pdFdvcmtsZXQiLCJyZWdpc3RlcldvcmtsZXQiLCJfdHlwZSIsInZhbGlkYXRlV29ya2xldCIsImNvbnNvbGUiLCJmaXJzdCIsInQiLCJTdHJpbmciLCJydW5Xb3JrbGV0SW1wbCIsInRyYW5zZm9ybVdvcmtsZXQiLCJwYXJhbXNfIiwiaGFzRXZlbnRNZXRob2RzIiwicmVzdWx0Iiwid29ya2xldENhY2hlIiwiV2Vha01hcCIsImlzV29ya2xldCIsInRyYW5zZm9ybVdvcmtsZXRJbm5lciIsImRlcHRoIiwib2JqIiwic3ViT2JqIiwiaXNXb3JrbGV0UmVmIiwiaXNKc0ZuIiwiX2x5bnhXb3JrbGV0SW1wbF9fanNGdW5jdGlvbkxpZmVjeWNsZU1hbmFnZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQVlPLE1BQU1BO1FBV0osU0FBZTtZQUVwQixPQUFPQyxpQkFBaUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFOztnQkFBNEIsSUFBSSxDQUFDLEVBQUU7YUFBQztRQUMxRjtRQUVPLFFBQWM7WUFFbkIs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animation.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"animation.js","sourceRoot":"","sources":["../../../../runtime/src/worklet-runtime/api/animation/animation.ts"],"names":[],"mappings":"AAKA,MAAM,CAAN,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,6DAAS,CAAA;IACT,2DAAQ,CAAA;IACR,6DAAS,CAAA;IACT,+DAAU,CAAA;AACZ,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,QAK7B;AAED,MAAM,OAAO,SAAS;IACpB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACD,MAAM,CAAiB;IACvB,EAAE,CAAS;IAE3B,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,GAAG,4BAA4B,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;QAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAEM,MAAM;QACX,sDAAsD;QACtD,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,CAAC;IAEM,KAAK;QACV,sDAAsD;QACtD,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC;IAEM,IAAI;QACT,sDAAsD;QACtD,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1F,CAAC;IAEO,KAAK;QACX,sDAAsD;QACtD,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;YAClD,kBAAkB,CAAC,KAAK;YACxB,IAAI,CAAC,EAAE;YACP,IAAI,CAAC,MAAM,CAAC,SAAS;YACrB,IAAI,CAAC,MAAM,CAAC,OAAO;SACpB,CAAC,CAAC;IACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"effect.js","sourceRoot":"","sources":["../../../../runtime/src/worklet-runtime/api/animation/effect.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,cAAc;IACT,MAAM,CAAU;IAChB,SAAS,CAAoC;IAC7C,OAAO,CAAkC;IAEzD,YACE,MAAe,EACf,SAA4C,EAC5C,OAAwC;QAExC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"element.js","sourceRoot":"","sources":["../../../runtime/src/worklet-runtime/api/element.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lepusQuerySelector.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"lepusQuerySelector.js","sourceRoot":"","sources":["../../../runtime/src/worklet-runtime/api/lepusQuerySelector.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,WAAW;IACP,MAAM,CAAC,WAAW,CAA0B;IAEpD,MAAM,CAAC,GAAG;QACR,WAAW,CAAC,WAAW,KAAK,gBAAgB,EAAE,CAAC;QAC/C,OAAO,WAAW,CAAC,WAAW,CAAC;IACjC,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IACpE,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,OAAO,kBAAkB,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,GAAG,CAC/D,CAAC,OAAO,EAAE,EAAE;QACV,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lynxApi.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"lynxApi.js","sourceRoot":"","sources":["../../../runtime/src/worklet-runtime/api/lynxApi.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,SAAS,UAAU;IACjB,wBAAwB;IACxB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACnC,wBAAwB;IACxB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IACzC,wBAAwB;IACxB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAyD,CAAC;IACvF,wBAAwB;IACxB,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,WAA0D,CAAC;IACzF,wBAAwB;IACxB,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,YAAyC,CAAC;IACzE,yGAAyG;IACzG,wBAAwB;IACxB,UAAU,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,iBAAiB,CAA8B,CAAC;IAEvG,CAAC;QACC,wBAAwB;QACxB,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAyD,CAAC;QAC7F,wBAAwB;QACxB,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,qBAAqB,GAAG,CAC9D,QAAoB,EACpB,EAAE;YACF,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;YACJ,CAAC;YACD,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC,CAAC;IACJ,CAAC;IAED,wBAAwB;IACxB,UAAU,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAmD,CAAC;AAC7F,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bindings.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../../runtime/src/worklet-runtime/bindings/bindings.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAK1D;;;;GAIG;AACH,SAAS,aAAa,CAAC,OAAgB,EAAE,MAA0B;IACjE,OAAO,UAAU,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,UAAmC,EAAE,OAA2B;IACxF,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC7E,CAAC;AAED;;;;GAIG;AACH,SAAS,gCAAgC,CAAC,KAA2B;IACnE,IAAI,KAAK,EAAE,CAAC;QACV,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,IAAY,EAAE,EAAU,EAAE,OAAwC;IACzF,UAAU,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,KAAiB,EAAE,EAA0C;IACzF,UAAU,CAAC,eAAe,EAAE,yBAAyB,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxF,CAAC;AAED;;;;GAIG;AACH,SAAS,4BAA4B,CAAC,KAAc;IAClD,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,IAAa,EAAE,MAA0B,EAAE,SAAiB;IAC1F,UAAU,CAAC,eAAe,EAAE,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAC/E,CAAC;AAED,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,gCAAgC,EAChC,eAAe,EACf,oBAAoB,EACpB,4BAA4B,EAC5B,sBAAsB,GACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../runtime/src/worklet-runtime/bindings/events.ts"],"names":[],"mappings":"AAKA,IAAW,aAMV;AAND,WAAW,aAAa;IACtB,6DAA4C,CAAA;IAC5C,iEAAgD,CAAA;IAChD,iEAAgD,CAAA;IAChD,yFAAwE,CAAA;IACxE,qEAAoD,CAAA;AACtD,CAAC,EANU,aAAa,KAAb,aAAa,QAMvB;AAiBD,OAAO,EAAE,aAAa,EAAiF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../runtime/src/worklet-runtime/bindings/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,cAAc,eAAe,CAAC;AAE9B,cAAc,gBAAgB,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAqD,MAAM,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadRuntime.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"loadRuntime.js","sourceRoot":"","sources":["../../../runtime/src/worklet-runtime/bindings/loadRuntime.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAE1D,OAAO,cAAc,CAAC;AAEtB;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,QAAiB;IAC3C,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,gBAAgB,CAAC,iBAAiB,EAAE;QACzC,qBAAqB,EAAE,QAAQ;QAC/B,SAAS,EAAE,CAAC;KACb,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
* @param element - The element
|
|
11
11
|
*/
|
|
12
12
|
export function onWorkletCtxUpdate(worklet, oldWorklet, isFirstScreen, element) {
|
|
13
|
-
|
|
13
|
+
if (worklet._execId !== undefined) {
|
|
14
|
+
globalThis.lynxWorkletImpl?._jsFunctionLifecycleManager?.addRef(worklet._execId, worklet);
|
|
15
|
+
}
|
|
14
16
|
if (isFirstScreen && oldWorklet) {
|
|
15
17
|
globalThis.lynxWorkletImpl?._hydrateCtx(worklet, oldWorklet);
|
|
16
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observers.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"observers.js","sourceRoot":"","sources":["../../../runtime/src/worklet-runtime/bindings/observers.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAI1D;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAgB,EAChB,UAAsC,EACtC,aAAsB,EACtB,OAAoB;IAEpB,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,UAAU,CAAC,eAAe,EAAE,2BAA2B,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;QAChC,UAAU,CAAC,eAAe,EAAE,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/D,CAAC;IACD,mDAAmD;IACnD,IAAI,aAAa,EAAE,CAAC;QAClB,UAAU,CAAC,eAAe,EAAE,eAAe,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,UAAU,CAAC,eAAe,EAAE,yBAAyB,CAAC,6BAA6B,EAAE,CAAC;IACtF,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,6BAA6B,EAAE,CAAC;IACrE,mDAAmD;IACnD,UAAU,CAAC,eAAe,EAAE,eAAe,CAAC,oBAAoB,EAAE,CAAC;AACrE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../runtime/src/worklet-runtime/bindings/types.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAuE1D,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,uDAAQ,CAAA;IACR,yDAAS,CAAA;IACT,6DAAW,CAAA;AACb,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delayRunOnBackground.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"delayRunOnBackground.js","sourceRoot":"","sources":["../../runtime/src/worklet-runtime/delayRunOnBackground.ts"],"names":[],"mappings":"AAmBA,IAAI,IAA0C,CAAC;AAE/C,SAAS,wBAAwB;IAC/B,OAAO,CAAC,IAAI,GAAG;QACb,8BAA8B,EAAE,EAAE;QAClC,oBAAoB;QACpB,6BAA6B;KAC9B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAiB,EAAE,IAA4C;IAC3F,IAAK,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,KAAK,EAAE,CAAC;IAChD,YAAY,CAAC,IAAI,CAAC,IAAK,CAAC,8BAA8B,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,6BAA6B;IACpC,KAAK,MAAM,OAAO,IAAI,IAAK,CAAC,8BAA8B,EAAE,CAAC;QAC3D,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,OAAQ,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,IAAK,CAAC,8BAA8B,CAAC,MAAM,GAAG,CAAC,CAAC;AAClD,CAAC;AAED,OAAO,EAAiC,wBAAwB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delayWorkletEvent.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"delayWorkletEvent.js","sourceRoot":"","sources":["../../runtime/src/worklet-runtime/delayWorkletEvent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAQ7C,IAAI,IAAgC,CAAC;AAErC,SAAS,cAAc;IACrB,OAAO,CAAC,IAAI,GAAG;QACb,wBAAwB,EAAE,IAAI,GAAG,EAAE;QACnC,iBAAiB;QACjB,oBAAoB;KACrB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAAY,EACZ,MAA0B;IAE1B,OAAO,CAAC,yBAAyB,GAAG,IAAI,EAAE,GAAG,EAAE;QAC7C,MAAM,GAAG,GAAG,IAAK,CAAC,wBAAwB,CAAC;QAC3C,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAgB,EAAE,OAAoB;IAC/D,OAAO,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACnC,MAAM,SAAS,GAAG,IAAK,CAAC,wBAAwB,CAAC,GAAG,CAClD,OAAO,CAAC,OAAO,CAChB,CAAC;QACF,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,MAAM,aAAa,GAAyB,EAAE,CAAC;QAC/C,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAoE,CAAC;YAChG,IAAI,UAAU,EAAE,aAAa,EAAE,aAAa,KAAK,OAAO,EAAE,CAAC;gBACzD,UAAU,CAAC,GAAG,EAAE;oBACd,OAAO,CAAC,mBAAmB,EAAE,GAAG,EAAE;wBAChC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC9B,CAAC,CAAC,CAAC;gBACL,CAAC,EAAE,CAAC,CAAC,CAAC;YACR,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAK,CAAC,wBAAwB,CAAC,GAAG,CAChC,OAAO,CAAC,OAAO,EACf,aAAa,CACd,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB;IAC3B,IAAK,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;AACzC,CAAC;AAED,OAAO,EAAuB,cAAc,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eomImpl.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"eomImpl.js","sourceRoot":"","sources":["../../runtime/src/worklet-runtime/eomImpl.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,MAAM,UAAU,WAAW;IACzB,OAAO;QACL,cAAc;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventPropagation.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"eventPropagation.js","sourceRoot":"","sources":["../../runtime/src/worklet-runtime/eventPropagation.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,0BAA0B;AAC1B,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,GAAG;IACb,oBAAoB,EAAE,GAAG;IACzB,6BAA6B,EAAE,GAAG;CAC1B,CAAC;AAIX,MAAM,UAAU,aAAa,CAC3B,GAAuB,EACvB,OAA2B;IAE3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACzE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB,CAAC,KAAK,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAuB,EAAE,OAA2B;IAC1F,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrB,CAAC;IACD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAExB,6BAA6B;IAC7B,QAAQ,CAAC,iBAAiB,CAAC,GAAG;QAC5B,QAAQ,CAAC,kBAAkB,GAAG,CAAC,QAAQ,CAAC,kBAAkB,IAAI,WAAW,CAAC,QAAQ,CAAC;cAC/E,WAAW,CAAC,oBAAoB,CAAC;IACvC,CAAC,CAAC;IAEF,sCAAsC;IACtC,QAAQ,CAAC,0BAA0B,CAAC,GAAG;QACrC,QAAQ,CAAC,kBAAkB,GAAG,CAAC,QAAQ,CAAC,kBAAkB,IAAI,WAAW,CAAC,QAAQ,CAAC;cAC/E,WAAW,CAAC,6BAA6B,CAAC;IAChD,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../runtime/src/worklet-runtime/global.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydrate.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"hydrate.js","sourceRoot":"","sources":["../../runtime/src/worklet-runtime/hydrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../runtime/src/worklet-runtime/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,IAAI,UAAU,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;IAC7C,WAAW,EAAE,CAAC;IACd,UAAU,EAAE,CAAC;IACb,kBAAkB,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsFunctionLifecycle.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"jsFunctionLifecycle.js","sourceRoot":"","sources":["../../runtime/src/worklet-runtime/jsFunctionLifecycle.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,0BAA0B;IACtB,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,QAAQ,GAAG,KAAK,CAAC;IACjB,QAAQ,GAAkC,SAAS,CAAC;IAE5D;QACE,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAoB,CAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,CAAC,MAAc,EAAE,QAAgB;QACrC,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,MAAM,EACN,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAC3C,CAAC;QACF,IAAI,CAAC,QAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,SAAS,CAAC,MAAc;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QAC5C,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI;QACF,OAAO,CAAC,iCAAiC,EAAE,GAAG,EAAE;YAC9C,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa,CAAC;gBAChC,IAAI,EAAE,aAAa,CAAC,2BAA2B;gBAC/C,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;aACvC,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,SAAS,wBAAwB;IAC/B,OAAO,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listeners.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"listeners.js","sourceRoot":"","sources":["../../runtime/src/worklet-runtime/listeners.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAE/D,SAAS,kBAAkB;IACzB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IACtC,SAAS,CAAC,gBAAgB,CACxB,aAAa,CAAC,aAAa,EAC3B,CAAC,KAAY,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAc,CAAsB,CAAC;QACnE,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAA4B,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1F,CAAC,CACF,CAAC;IACF,SAAS,CAAC,gBAAgB,CACxB,aAAa,CAAC,iBAAiB,EAC/B,CAAC,KAAY,EAAE,EAAE;QACf,4BAA4B,CAAE,KAAK,CAAC,IAA8B,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC,CACF,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runOnMainThread.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"runOnMainThread.js","sourceRoot":"","sources":["../../runtime/src/worklet-runtime/runOnMainThread.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,UAAU,sBAAsB,CAAC,IAAa,EAAE,MAA0B,EAAE,SAAiB;IACjG,IAAI,WAAW,CAAC;IAChB,IAAI,CAAC;QACH,WAAW,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;YAAS,CAAC;QACT,0EAA0E;QAC1E,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa,CAAC;YAChC,IAAI,EAAE,aAAa,CAAC,eAAe;YACnC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,SAAS;gBACT,WAAW;aACY,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mainThreadFlushLoopGuard.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"mainThreadFlushLoopGuard.js","sourceRoot":"","sources":["../../../runtime/src/worklet-runtime/utils/mainThreadFlushLoopGuard.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAE1D,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,IAAI,KAAK,GAAa,EAAE,CAAC;AAEzB,IAAI,kBAAkB,GAAG,CAAC,CAAC;AAC3B,IAAI,cAAc,GAAG,KAAK,CAAC;AAC3B,IAAI,YAAY,GAAiB,IAAI,CAAC;AAEtC,SAAS,SAAS,CAAC,MAAc;IAC/B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,IAAI,KAAK,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;QAC/B,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAAiB;IACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,0DAA0D;IAC1D,IAAI,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;IACxC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QACxB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,KAAK,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;QACnD,IAAI,GAAG,GAAG,CAAC;QACX,KAAK,GAAG,CAAC,CAAC;IACZ,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;IACnD,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,IAAI,OAAO,EAAE,CAAC;QACZ,SAAS,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mCAAmC;IACjD,sBAAsB;IACtB,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,cAAc,GAAG,IAAI,CAAC;QACtB,UAAU,CAAC,GAAG,EAAE;YACd,wBAAwB,EAAE,CAAC;QAC7B,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,CAAC;IAED,kBAAkB,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,mBAAmB,CAAC;IAClC,IAAI,kBAAkB,GAAG,KAAK,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACvC,YAAY,GAAG,IAAI,KAAK,CACtB,oEAAoE,kBAAkB,kCAAkC,KAAK,aAAa,SAAS,EAAE,CACtJ,CAAC;QACF,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAY;IACpD,IAAI,OAAO,EAAE,CAAC;QACZ,iEAAiE;QACjE,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,KAAK,CAAC;QACd,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,KAAK,GAAG,EAAE,CAAC;IACX,kBAAkB,GAAG,CAAC,CAAC;IACvB,cAAc,GAAG,KAAK,CAAC;IACvB,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../runtime/src/worklet-runtime/utils/profile.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,MAAM,UAAU,OAAO,CACrB,SAAiB,EACjB,CAAK;IAEL,sBAAsB;IACtB,iCAAiC;IACjC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,CAAC,EAAE,CAAC;QACb,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../runtime/src/worklet-runtime/utils/version.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,KAAa;IACzD,MAAM,cAAc,GAAW,UAAU,CAAC,cAAc,IAAI,KAAK,CAAC;IAClE,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,CACL,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;WACvB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAC/D,CAAC;AACJ,CAAC"}
|