velocious 1.0.562 → 1.0.564
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/README.md +5 -1
- package/build/background-jobs/cron-expression.js +12 -13
- package/build/background-jobs/main.js +6 -6
- package/build/background-jobs/runner-graceful-shutdown.js +2 -3
- package/build/background-jobs/scheduler.js +3 -3
- package/build/background-jobs/worker.js +8 -9
- package/build/beacon/client.js +3 -4
- package/build/configuration-types.js +1 -0
- package/build/configuration.js +44 -3
- package/build/database/drivers/sqlite/web-persistence.js +2 -5
- package/build/database/pool/async-tracked-multi-connection.js +65 -15
- package/build/database/pool/base.js +23 -7
- package/build/database/query/index.js +21 -22
- package/build/database/query/model-class-query.js +5 -6
- package/build/database/record/attachments/normalize-input.js +9 -10
- package/build/database/record/attachments/store.js +2 -2
- package/build/database/record/auditing.js +7 -8
- package/build/database/record/index.js +4 -5
- package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +1 -2
- package/build/frontend-model-controller.js +49 -56
- package/build/frontend-models/base.js +17 -19
- package/build/frontend-models/outgoing-event-buffer.js +3 -4
- package/build/frontend-models/query.js +40 -44
- package/build/frontend-models/resource-definition.js +7 -8
- package/build/frontend-models/transport-serialization.js +10 -12
- package/build/frontend-models/websocket-channel.js +12 -13
- package/build/http-server/client/websocket-session.js +7 -8
- package/build/http-server/client-delivery-queue.js +167 -0
- package/build/http-server/server-client.js +9 -0
- package/build/http-server/websocket-event-log-store.js +4 -6
- package/build/http-server/websocket-events-host.js +42 -12
- package/build/http-server/worker-handler/in-process.js +53 -14
- package/build/http-server/worker-handler/index.js +88 -18
- package/build/http-server/worker-handler/worker-thread.js +2 -2
- package/build/plugins/sqljs-wasm-route.js +3 -5
- package/build/src/background-jobs/cron-expression.d.ts +0 -12
- package/build/src/background-jobs/cron-expression.d.ts.map +1 -1
- package/build/src/background-jobs/cron-expression.js +13 -13
- package/build/src/background-jobs/main.d.ts.map +1 -1
- package/build/src/background-jobs/main.js +7 -7
- package/build/src/background-jobs/runner-graceful-shutdown.d.ts +0 -6
- package/build/src/background-jobs/runner-graceful-shutdown.d.ts.map +1 -1
- package/build/src/background-jobs/runner-graceful-shutdown.js +3 -3
- package/build/src/background-jobs/scheduler.d.ts +0 -3
- package/build/src/background-jobs/scheduler.d.ts.map +1 -1
- package/build/src/background-jobs/scheduler.js +4 -4
- package/build/src/background-jobs/worker.d.ts +0 -8
- package/build/src/background-jobs/worker.d.ts.map +1 -1
- package/build/src/background-jobs/worker.js +9 -9
- package/build/src/beacon/client.d.ts +0 -4
- package/build/src/beacon/client.d.ts.map +1 -1
- package/build/src/beacon/client.js +4 -4
- package/build/src/configuration-types.d.ts +8 -0
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +2 -1
- package/build/src/configuration.d.ts +34 -1
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +40 -4
- package/build/src/database/drivers/sqlite/web-persistence.d.ts +0 -14
- package/build/src/database/drivers/sqlite/web-persistence.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/web-persistence.js +3 -3
- package/build/src/database/pool/async-tracked-multi-connection.d.ts +29 -1
- package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
- package/build/src/database/pool/async-tracked-multi-connection.js +57 -15
- package/build/src/database/pool/base.d.ts +53 -4
- package/build/src/database/pool/base.d.ts.map +1 -1
- package/build/src/database/pool/base.js +23 -6
- package/build/src/database/query/index.d.ts +18 -39
- package/build/src/database/query/index.d.ts.map +1 -1
- package/build/src/database/query/index.js +22 -22
- package/build/src/database/query/model-class-query.d.ts +0 -5
- package/build/src/database/query/model-class-query.d.ts.map +1 -1
- package/build/src/database/query/model-class-query.js +6 -6
- package/build/src/database/record/attachments/normalize-input.d.ts +0 -9
- package/build/src/database/record/attachments/normalize-input.d.ts.map +1 -1
- package/build/src/database/record/attachments/normalize-input.js +10 -10
- package/build/src/database/record/attachments/store.d.ts.map +1 -1
- package/build/src/database/record/attachments/store.js +2 -2
- package/build/src/database/record/auditing.d.ts +17 -24
- package/build/src/database/record/auditing.d.ts.map +1 -1
- package/build/src/database/record/auditing.js +8 -8
- package/build/src/database/record/index.d.ts +4 -4
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +5 -5
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +0 -39
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +2 -2
- package/build/src/frontend-model-controller.d.ts +1 -1
- package/build/src/frontend-model-controller.d.ts.map +1 -1
- package/build/src/frontend-model-controller.js +50 -50
- package/build/src/frontend-models/base.d.ts.map +1 -1
- package/build/src/frontend-models/base.js +18 -18
- package/build/src/frontend-models/outgoing-event-buffer.d.ts.map +1 -1
- package/build/src/frontend-models/outgoing-event-buffer.js +3 -3
- package/build/src/frontend-models/query.d.ts +56 -37
- package/build/src/frontend-models/query.d.ts.map +1 -1
- package/build/src/frontend-models/query.js +39 -39
- package/build/src/frontend-models/resource-definition.d.ts +0 -7
- package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
- package/build/src/frontend-models/resource-definition.js +8 -8
- package/build/src/frontend-models/transport-serialization.d.ts +0 -10
- package/build/src/frontend-models/transport-serialization.d.ts.map +1 -1
- package/build/src/frontend-models/transport-serialization.js +11 -11
- package/build/src/frontend-models/websocket-channel.d.ts +0 -12
- package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-channel.js +13 -13
- package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-session.js +8 -8
- package/build/src/http-server/client-delivery-queue.d.ts +121 -0
- package/build/src/http-server/client-delivery-queue.d.ts.map +1 -0
- package/build/src/http-server/client-delivery-queue.js +152 -0
- package/build/src/http-server/server-client.d.ts +6 -0
- package/build/src/http-server/server-client.d.ts.map +1 -1
- package/build/src/http-server/server-client.js +10 -1
- package/build/src/http-server/websocket-event-log-store.d.ts +0 -14
- package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
- package/build/src/http-server/websocket-event-log-store.js +5 -5
- package/build/src/http-server/websocket-events-host.d.ts +15 -4
- package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
- package/build/src/http-server/websocket-events-host.js +39 -13
- package/build/src/http-server/worker-handler/in-process.d.ts +19 -1
- package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/in-process.js +50 -14
- package/build/src/http-server/worker-handler/index.d.ts +36 -4
- package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/index.js +82 -18
- package/build/src/http-server/worker-handler/worker-thread.js +3 -3
- package/build/src/plugins/sqljs-wasm-route.d.ts.map +1 -1
- package/build/src/plugins/sqljs-wasm-route.js +4 -4
- package/build/src/sync/conflict-strategy.d.ts +0 -15
- package/build/src/sync/conflict-strategy.d.ts.map +1 -1
- package/build/src/sync/conflict-strategy.js +3 -3
- package/build/src/sync/device-identity.d.ts +0 -45
- package/build/src/sync/device-identity.d.ts.map +1 -1
- package/build/src/sync/device-identity.js +4 -4
- package/build/src/sync/local-mutation-log.d.ts +0 -41
- package/build/src/sync/local-mutation-log.d.ts.map +1 -1
- package/build/src/sync/local-mutation-log.js +9 -9
- package/build/src/sync/offline-grant.d.ts +0 -26
- package/build/src/sync/offline-grant.d.ts.map +1 -1
- package/build/src/sync/offline-grant.js +4 -4
- package/build/src/sync/peer-mutation-bundle.d.ts +0 -14
- package/build/src/sync/peer-mutation-bundle.d.ts.map +1 -1
- package/build/src/sync/peer-mutation-bundle.js +3 -3
- package/build/src/sync/server-change-feed.d.ts.map +1 -1
- package/build/src/sync/server-change-feed.js +33 -33
- package/build/src/sync/sync-api-client.d.ts +0 -9
- package/build/src/sync/sync-api-client.d.ts.map +1 -1
- package/build/src/sync/sync-api-client.js +2 -2
- package/build/src/sync/sync-envelope-replay-service.d.ts +38 -21
- package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
- package/build/src/sync/sync-envelope-replay-service.js +18 -18
- package/build/src/sync/sync-resource-base.d.ts +0 -7
- package/build/src/sync/sync-resource-base.d.ts.map +1 -1
- package/build/src/sync/sync-resource-base.js +2 -2
- package/build/src/sync/sync-scope-store.d.ts +0 -9
- package/build/src/sync/sync-scope-store.d.ts.map +1 -1
- package/build/src/sync/sync-scope-store.js +10 -10
- package/build/src/testing/test-filter-parser.d.ts +0 -10
- package/build/src/testing/test-filter-parser.d.ts.map +1 -1
- package/build/src/testing/test-filter-parser.js +11 -11
- package/build/src/testing/test-runner.d.ts +25 -91
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +113 -98
- package/build/src/testing/test.d.ts +8 -0
- package/build/src/testing/test.d.ts.map +1 -1
- package/build/src/testing/test.js +9 -9
- package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
- package/build/src/utils/backtrace-cleaner.js +9 -9
- package/build/src/utils/model-scope.d.ts +0 -8
- package/build/src/utils/model-scope.d.ts.map +1 -1
- package/build/src/utils/model-scope.js +3 -3
- package/build/src/utils/ransack.d.ts +52 -19
- package/build/src/utils/ransack.d.ts.map +1 -1
- package/build/src/utils/ransack.js +26 -26
- package/build/sync/conflict-strategy.js +3 -6
- package/build/sync/device-identity.js +4 -9
- package/build/sync/local-mutation-log.js +9 -14
- package/build/sync/offline-grant.js +4 -7
- package/build/sync/peer-mutation-bundle.js +2 -4
- package/build/sync/server-change-feed.js +32 -34
- package/build/sync/sync-api-client.js +1 -2
- package/build/sync/sync-envelope-replay-service.js +17 -19
- package/build/sync/sync-resource-base.js +1 -2
- package/build/sync/sync-scope-store.js +9 -10
- package/build/testing/test-filter-parser.js +10 -11
- package/build/testing/test-runner.js +116 -108
- package/build/testing/test.js +8 -9
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/utils/backtrace-cleaner.js +8 -9
- package/build/utils/model-scope.js +3 -4
- package/build/utils/ransack.js +27 -34
- package/package.json +3 -1
- package/scripts/eslint-rules/typedefs-first.js +67 -0
- package/scripts/prewarm-chromedriver.js +26 -0
- package/src/background-jobs/cron-expression.js +12 -13
- package/src/background-jobs/main.js +6 -6
- package/src/background-jobs/runner-graceful-shutdown.js +2 -3
- package/src/background-jobs/scheduler.js +3 -3
- package/src/background-jobs/worker.js +8 -9
- package/src/beacon/client.js +3 -4
- package/src/configuration-types.js +1 -0
- package/src/configuration.js +44 -3
- package/src/database/drivers/sqlite/web-persistence.js +2 -5
- package/src/database/pool/async-tracked-multi-connection.js +65 -15
- package/src/database/pool/base.js +23 -7
- package/src/database/query/index.js +21 -22
- package/src/database/query/model-class-query.js +5 -6
- package/src/database/record/attachments/normalize-input.js +9 -10
- package/src/database/record/attachments/store.js +2 -2
- package/src/database/record/auditing.js +7 -8
- package/src/database/record/index.js +4 -5
- package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +1 -2
- package/src/frontend-model-controller.js +49 -56
- package/src/frontend-models/base.js +17 -19
- package/src/frontend-models/outgoing-event-buffer.js +3 -4
- package/src/frontend-models/query.js +40 -44
- package/src/frontend-models/resource-definition.js +7 -8
- package/src/frontend-models/transport-serialization.js +10 -12
- package/src/frontend-models/websocket-channel.js +12 -13
- package/src/http-server/client/websocket-session.js +7 -8
- package/src/http-server/client-delivery-queue.js +167 -0
- package/src/http-server/server-client.js +9 -0
- package/src/http-server/websocket-event-log-store.js +4 -6
- package/src/http-server/websocket-events-host.js +42 -12
- package/src/http-server/worker-handler/in-process.js +53 -14
- package/src/http-server/worker-handler/index.js +88 -18
- package/src/http-server/worker-handler/worker-thread.js +2 -2
- package/src/plugins/sqljs-wasm-route.js +3 -5
- package/src/sync/conflict-strategy.js +3 -6
- package/src/sync/device-identity.js +4 -9
- package/src/sync/local-mutation-log.js +9 -14
- package/src/sync/offline-grant.js +4 -7
- package/src/sync/peer-mutation-bundle.js +2 -4
- package/src/sync/server-change-feed.js +32 -34
- package/src/sync/sync-api-client.js +1 -2
- package/src/sync/sync-envelope-replay-service.js +17 -19
- package/src/sync/sync-resource-base.js +1 -2
- package/src/sync/sync-scope-store.js +9 -10
- package/src/testing/test-filter-parser.js +10 -11
- package/src/testing/test-runner.js +116 -108
- package/src/testing/test.js +8 -9
- package/src/utils/backtrace-cleaner.js +8 -9
- package/src/utils/model-scope.js +3 -4
- package/src/utils/ransack.js +27 -34
|
@@ -1,17 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SQLite web persistence adapter.
|
|
3
|
-
* @typedef {object} SqliteWebPersistence
|
|
4
|
-
* @property {"indexeddb" | "localstorage" | "opfs"} name - Persistence backend name.
|
|
5
|
-
* @property {() => Promise<void>} delete - Deletes the persisted database.
|
|
6
|
-
* @property {() => Promise<Uint8Array | undefined>} load - Loads persisted database bytes.
|
|
7
|
-
* @property {(content: Uint8Array) => Promise<void>} save - Saves persisted database bytes.
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Browser-like environment used for web persistence detection.
|
|
11
|
-
* @typedef {object} SqliteWebPersistenceEnvironment
|
|
12
|
-
* @property {unknown} [indexedDB] - IndexedDB global.
|
|
13
|
-
* @property {unknown} [navigator] - Navigator global.
|
|
14
|
-
*/
|
|
15
1
|
/**
|
|
16
2
|
* Creates the best SQLite web persistence adapter supported by the current browser.
|
|
17
3
|
* @param {object} args - Arguments.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-persistence.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/sqlite/web-persistence.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"web-persistence.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/sqlite/web-persistence.js"],"names":[],"mappings":"AAqBA;;;;;;GAMG;AACH,0EAJG;IAAqB,YAAY,EAAzB,MAAM;IACiC,WAAW;CAC1D,GAAU,OAAO,CAAC,oBAAoB,CAAC,CAiBzC;AAED;;;;;;GAMG;AACH,2EAJG;IAAqB,YAAY,EAAzB,MAAM;IACiC,WAAW;CAC1D,GAAU,OAAO,CAAC,IAAI,CAAC,CAUzB;AAED;;;;GAIG;AACH,sDAHW,MAAM,GACJ,MAAM,CAMlB;;;;;;;;UAhEa,WAAW,GAAG,cAAc,GAAG,MAAM;;;;YACrC,MAAM,OAAO,CAAC,IAAI,CAAC;;;;UACnB,MAAM,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;;;;UACrC,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC;;;;;;;;;gBAKtC,OAAO;;;;gBACP,OAAO"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import BetterLocalStorage from "better-localstorage";
|
|
3
|
-
const SUPPORT_CHECK_FILE = ".velocious-opfs-support-check";
|
|
4
|
-
const SUPPORT_CHECK_BYTES = new Uint8Array([118, 101, 108, 111, 99, 105, 111, 117, 115]);
|
|
5
3
|
/**
|
|
6
4
|
* SQLite web persistence adapter.
|
|
7
5
|
* @typedef {object} SqliteWebPersistence
|
|
@@ -16,6 +14,8 @@ const SUPPORT_CHECK_BYTES = new Uint8Array([118, 101, 108, 111, 99, 105, 111, 11
|
|
|
16
14
|
* @property {unknown} [indexedDB] - IndexedDB global.
|
|
17
15
|
* @property {unknown} [navigator] - Navigator global.
|
|
18
16
|
*/
|
|
17
|
+
const SUPPORT_CHECK_FILE = ".velocious-opfs-support-check";
|
|
18
|
+
const SUPPORT_CHECK_BYTES = new Uint8Array([118, 101, 108, 111, 99, 105, 111, 117, 115]);
|
|
19
19
|
/**
|
|
20
20
|
* Creates the best SQLite web persistence adapter supported by the current browser.
|
|
21
21
|
* @param {object} args - Arguments.
|
|
@@ -461,4 +461,4 @@ function sameBytes(left, right) {
|
|
|
461
461
|
return false;
|
|
462
462
|
return left.every((value, index) => value === right[index]);
|
|
463
463
|
}
|
|
464
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLXBlcnNpc3RlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL2RyaXZlcnMvc3FsaXRlL3dlYi1wZXJzaXN0ZW5jZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxrQkFBa0IsTUFBTSxxQkFBcUIsQ0FBQTtBQUVwRCxNQUFNLGtCQUFrQixHQUFHLCtCQUErQixDQUFBO0FBQzFELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFFeEY7Ozs7Ozs7R0FPRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwwQkFBMEIsQ0FBQyxFQUFDLFlBQVksRUFBRSxXQUFXLEdBQUcsVUFBVSxFQUFDO0lBQ3ZGLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUE7SUFDM0UsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtJQUN4RSxNQUFNLG9CQUFvQixHQUFHLElBQUksb0JBQW9CLENBQUMsRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtJQUVsRixNQUFNLG1CQUFtQixHQUFHLE1BQU0sMEJBQTBCLENBQUMsRUFBQyxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFDLENBQUMsQ0FBQTtJQUUzSSxNQUFNLHdCQUF3QixDQUFDO1FBQzdCLFlBQVk7UUFDWixzQkFBc0IsRUFBRSxtQkFBbUI7UUFDM0MsV0FBVztRQUNYLGtCQUFrQixFQUFFLENBQUMsdUJB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LE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQTtBQUNwQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsZUFBZSxDQUFDLEtBQUs7SUFDNUIsT0FBTyxLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFBO0FBQ2pFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLO0lBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRTlDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCZXR0ZXJMb2NhbFN0b3JhZ2UgZnJvbSBcImJldHRlci1sb2NhbHN0b3JhZ2VcIlxuXG5jb25zdCBTVVBQT1JUX0NIRUNLX0ZJTEUgPSBcIi52ZWxvY2lvdXMtb3Bmcy1zdXBwb3J0LWNoZWNrXCJcbmNvbnN0IFNVUFBPUlRfQ0hFQ0tfQllURVMgPSBuZXcgVWludDhBcnJheShbMTE4LCAxMDEsIDEwOCwgMTExLCA5OSwgMTA1LCAxMTEsIDExNywgMTE1XSlcblxuLyoqXG4gKiBTUUxpdGUgd2ViIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTcWxpdGVXZWJQZXJzaXN0ZW5jZVxuICogQHByb3BlcnR5IHtcImluZGV4ZWRkYlwiIHwgXCJsb2NhbHN0b3JhZ2VcIiB8IFwib3Bmc1wifSBuYW1lIC0gUGVyc2lzdGVuY2UgYmFja2VuZCBuYW1lLlxuICogQHByb3BlcnR5IHsoKSA9PiBQcm9taXNlPHZvaWQ+fSBkZWxldGUgLSBEZWxldGVzIHRoZSBwZXJzaXN0ZWQgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkgeygpID0+IFByb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59IGxvYWQgLSBMb2FkcyBwZXJzaXN0ZWQgZGF0YWJhc2UgYnl0ZXMuXG4gKiBAcHJvcGVydHkgeyhjb250ZW50OiBVaW50OEFycmF5KSA9PiBQcm9taXNlPHZvaWQ+fSBzYXZlIC0gU2F2ZXMgcGVyc2lzdGVkIGRhdGFiYXNlIGJ5dGVzLlxuICovXG5cbi8qKlxuICogQnJvd3Nlci1saWtlIGVudmlyb25tZW50IHVzZWQgZm9yIHdlYiBwZXJzaXN0ZW5jZSBkZXRlY3Rpb24uXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50XG4gKiBAcHJvcGVydHkge3Vua25vd259IFtpbmRleGVkREJdIC0gSW5kZXhlZERCIGdsb2JhbC5cbiAqIEBwcm9wZXJ0eSB7dW5rbm93bn0gW25hdmlnYXRvcl0gLSBOYXZpZ2F0b3IgZ2xvYmFsLlxuICovXG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgYmVzdCBTUUxpdGUgd2ViIHBlcnNpc3RlbmNlIGFkYXB0ZXIgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJyb3dzZXIuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmRhdGFiYXNlTmFtZSAtIERhdGFiYXNlIG5hbWUuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IFthcmdzLmVudmlyb25tZW50XSAtIEJyb3dzZXItbGlrZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFNxbGl0ZVdlYlBlcnNpc3RlbmNlPn0gLSBTZWxlY3RlZCBwZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlU3FsaXRlV2ViUGVyc2lzdGVuY2Uoe2RhdGFiYXNlTmFtZSwgZW52aXJvbm1lbnQgPSBnbG9iYWxUaGlzfSkge1xuICBjb25zdCBsb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZSA9IG5ldyBMb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZSh7ZGF0YWJhc2VOYW1lfSlcbiAgY29uc3Qgb3Bmc1BlcnNpc3RlbmNlID0gbmV3IE9wZnNQZXJzaXN0ZW5jZSh7ZGF0YWJhc2VOYW1lLCBlbnZpcm9ubWVudH0pXG4gIGNvbnN0IGluZGV4ZWREYlBlcnNpc3RlbmNlID0gbmV3IEluZGV4ZWREYlBlcnNpc3RlbmNlKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50fSlcblxuICBjb25zdCBzZWxlY3RlZFBlcnNpc3RlbmNlID0gYXdhaXQgc2VsZWN0U3VwcG9ydGVkUGVyc2lzdGVuY2Uoe2Vudmlyb25tZW50LCBpbmRleGVkRGJQZXJzaXN0ZW5jZSwgbG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UsIG9wZnNQZXJzaXN0ZW5jZX0pXG5cbiAgYXdhaXQgbWlncmF0ZVBlcnNpc3RlZERhdGFiYXNlKHtcbiAgICBkYXRhYmFzZU5hbWUsXG4gICAgZGVzdGluYXRpb25QZXJzaXN0ZW5jZTogc2VsZWN0ZWRQZXJzaXN0ZW5jZSxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBzb3VyY2VQZXJzaXN0ZW5jZXM6IFtsb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZSwgaW5kZXhlZERiUGVyc2lzdGVuY2UsIG9wZnNQZXJzaXN0ZW5jZV1cbiAgfSlcblxuICByZXR1cm4gc2VsZWN0ZWRQZXJzaXN0ZW5jZVxufVxuXG4vKipcbiAqIERlbGV0ZXMgU1FMaXRlIHdlYiBkYXRhYmFzZSBieXRlcyBmcm9tIGV2ZXJ5IGF2YWlsYWJsZSBwZXJzaXN0ZW5jZSBiYWNrZW5kLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5kYXRhYmFzZU5hbWUgLSBEYXRhYmFzZSBuYW1lLlxuICogQHBhcmFtIHtTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50fSBbYXJncy5lbnZpcm9ubWVudF0gLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGFsbCBhdmFpbGFibGUgYmFja2VuZHMgd2VyZSBjbGVhcmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlU3FsaXRlV2ViUGVyc2lzdGVuY2VzKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50ID0gZ2xvYmFsVGhpc30pIHtcbiAgY29uc3QgcGVyc2lzdGVuY2VzID0gW1xuICAgIG5ldyBMb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZSh7ZGF0YWJhc2VOYW1lfSksXG4gICAgbmV3IE9wZnNQZXJzaXN0ZW5jZSh7ZGF0YWJhc2VOYW1lLCBlbnZpcm9ubWVudH0pLFxuICAgIG5ldyBJbmRleGVkRGJQZXJzaXN0ZW5jZSh7ZGF0YWJhc2VOYW1lLCBlbnZpcm9ubWVudH0pXG4gIF1cblxuICBmb3IgKGNvbnN0IHBlcnNpc3RlbmNlIG9mIHBlcnNpc3RlbmNlcykgYXdhaXQgZGVsZXRlUGVyc2lzdGVuY2VJZkF2YWlsYWJsZShwZXJzaXN0ZW5jZSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsZWdhY3kgU1FMaXRlIHdlYiBzdG9yYWdlIGtleSBmb3IgYSBkYXRhYmFzZSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGFiYXNlTmFtZSAtIERhdGFiYXNlIG5hbWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFBlcnNpc3RlbmNlIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KGRhdGFiYXNlTmFtZSkge1xuICBpZiAoIWRhdGFiYXNlTmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiTm8gbmFtZSBnaXZlbiBpbiBhcmd1bWVudHMgZm9yIFNRTGl0ZSBXZWIgZGF0YWJhc2VcIilcblxuICByZXR1cm4gYFZlbG9jaW91c0RhdGFiYXNlRHJpdmVyc1NxbGl0ZVdlYi0tLSR7ZGF0YWJhc2VOYW1lfWBcbn1cblxuLyoqIE9QRlMtYmFja2VkIFNRTC5qcyBkYXRhYmFzZSBmaWxlIHBlcnNpc3RlbmNlLiAqL1xuY2xhc3MgT3Bmc1BlcnNpc3RlbmNlIHtcbiAgLyoqIEB0eXBlIHtcIm9wZnNcIn0gKi9cbiAgbmFtZSA9IFwib3Bmc1wiXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgT1BGUyBwZXJzaXN0ZW5jZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmRhdGFiYXNlTmFtZSAtIERhdGFiYXNlIG5hbWUuXG4gICAqIEBwYXJhbSB7U3FsaXRlV2ViUGVyc2lzdGVuY2VFbnZpcm9ubWVudH0gYXJncy5lbnZpcm9ubWVudCAtIEJyb3dzZXItbGlrZSBlbnZpcm9ubWVudC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50fSkge1xuICAgIHRoaXMuZGF0YWJhc2VOYW1lID0gZGF0YWJhc2VOYW1lXG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgT1BGUyBkYXRhYmFzZSBmaWxlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGRlbGV0ZWQuXG4gICAqL1xuICBhc3luYyBkZWxldGUoKSB7XG4gICAgY29uc3QgZGlyZWN0b3J5ID0gYXdhaXQgb3Bmc0RpcmVjdG9yeSh0aGlzLmVudmlyb25tZW50KVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRpcmVjdG9yeS5yZW1vdmVFbnRyeShzcWxpdGVXZWJQZXJzaXN0ZW5jZUtleSh0aGlzLmRhdGFiYXNlTmFtZSkpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghaXNOb3RGb3VuZEVycm9yKGVycm9yKSkgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIE9QRlMgZGF0YWJhc2UgZmlsZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59IC0gUGVyc2lzdGVkIGJ5dGVzLlxuICAgKi9cbiAgYXN5bmMgbG9hZCgpIHtcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBvcGZzRGlyZWN0b3J5KHRoaXMuZW52aXJvbm1lbnQpXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZUhhbmRsZSA9IGF3YWl0IGRpcmVjdG9yeS5nZXRGaWxlSGFuZGxlKHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSlcbiAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBmaWxlSGFuZGxlLmdldEZpbGUoKVxuICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBmaWxlLmFycmF5QnVmZmVyKClcblxuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoaXNOb3RGb3VuZEVycm9yKGVycm9yKSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgT1BGUyBkYXRhYmFzZSBmaWxlIGV4aXN0cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciBjb250ZW50IGV4aXN0cy5cbiAgICovXG4gIGFzeW5jIGV4aXN0cygpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmxvYWQoKSkgIT09IHVuZGVmaW5lZFxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGRhdGFiYXNlIGJ5dGVzLlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGNvbnRlbnQgLSBEYXRhYmFzZSBieXRlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBzYXZlZC5cbiAgICovXG4gIGFzeW5jIHNhdmUoY29udGVudCkge1xuICAgIGNvbnN0IGRpcmVjdG9yeSA9IGF3YWl0IG9wZnNEaXJlY3RvcnkodGhpcy5lbnZpcm9ubWVudClcbiAgICBjb25zdCBmaWxlSGFuZGxlID0gYXdhaXQgZGlyZWN0b3J5LmdldEZpbGVIYW5kbGUoc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkodGhpcy5kYXRhYmFzZU5hbWUpLCB7Y3JlYXRlOiB0cnVlfSlcbiAgICBjb25zdCB3cml0YWJsZSA9IGF3YWl0IGZpbGVIYW5kbGUuY3JlYXRlV3JpdGFibGUoKVxuXG4gICAgYXdhaXQgd3JpdGFibGUud3JpdGUoYXJyYXlCdWZmZXJGcm9tQnl0ZXMoY29udGVudCkpXG4gICAgYXdhaXQgd3JpdGFibGUuY2xvc2UoKVxuICB9XG59XG5cbi8qKiBJbmRleGVkREItYmFja2VkIFNRTC5qcyBkYXRhYmFzZSBibG9iIHBlcnNpc3RlbmNlLiAqL1xuY2xhc3MgSW5kZXhlZERiUGVyc2lzdGVuY2Uge1xuICAvKiogQHR5cGUge1wiaW5kZXhlZGRiXCJ9ICovXG4gIG5hbWUgPSBcImluZGV4ZWRkYlwiXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgSW5kZXhlZERCIHBlcnNpc3RlbmNlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGF0YWJhc2VOYW1lIC0gRGF0YWJhc2UgbmFtZS5cbiAgICogQHBhcmFtIHtTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50fSBhcmdzLmVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2RhdGFiYXNlTmFtZSwgZW52aXJvbm1lbnR9KSB7XG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBkYXRhYmFzZU5hbWVcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnRcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBJbmRleGVkREIgZGF0YWJhc2UgZW50cnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gZGVsZXRlZC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IGF3YWl0IG9wZW5JbmRleGVkRGIodGhpcy5lbnZpcm9ubWVudClcblxuICAgIGF3YWl0IGluZGV4ZWREYlJlcXVlc3QoZGF0YWJhc2UudHJhbnNhY3Rpb24oXCJkYXRhYmFzZXNcIiwgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUoXCJkYXRhYmFzZXNcIikuZGVsZXRlKHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSkpXG4gICAgZGF0YWJhc2UuY2xvc2UoKVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBJbmRleGVkREIgZGF0YWJhc2UgZW50cnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ+fSAtIFBlcnNpc3RlZCBieXRlcy5cbiAgICovXG4gIGFzeW5jIGxvYWQoKSB7XG4gICAgY29uc3QgZGF0YWJhc2UgPSBhd2FpdCBvcGVuSW5kZXhlZERiKHRoaXMuZW52aXJvbm1lbnQpXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5kZXhlZERiUmVxdWVzdChkYXRhYmFzZS50cmFuc2FjdGlvbihcImRhdGFiYXNlc1wiLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKFwiZGF0YWJhc2VzXCIpLmdldChzcWxpdGVXZWJQZXJzaXN0ZW5jZUtleSh0aGlzLmRhdGFiYXNlTmFtZSkpKVxuXG4gICAgZGF0YWJhc2UuY2xvc2UoKVxuXG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHJldHVybiByZXN1bHRcbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTUUxpdGUgd2ViIEluZGV4ZWREQiBwZXJzaXN0ZW5jZSByZXR1cm5lZCB1bnN1cHBvcnRlZCBjb250ZW50XCIpXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIEluZGV4ZWREQiBkYXRhYmFzZSBlbnRyeSBleGlzdHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgY29udGVudCBleGlzdHMuXG4gICAqL1xuICBhc3luYyBleGlzdHMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGFiYXNlID0gYXdhaXQgb3BlbkluZGV4ZWREYih0aGlzLmVudmlyb25tZW50KVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5kZXhlZERiUmVxdWVzdChkYXRhYmFzZS50cmFuc2FjdGlvbihcImRhdGFiYXNlc1wiLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKFwiZGF0YWJhc2VzXCIpLmdldChzcWxpdGVXZWJQZXJzaXN0ZW5jZUtleSh0aGlzLmRhdGFiYXNlTmFtZSkpKVxuXG4gICAgICBkYXRhYmFzZS5jbG9zZSgpXG5cbiAgICAgIHJldHVybiByZXN1bHQgIT09IHVuZGVmaW5lZCAmJiByZXN1bHQgIT09IG51bGxcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBkYXRhYmFzZSBieXRlcy5cbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBjb250ZW50IC0gRGF0YWJhc2UgYnl0ZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gc2F2ZWQuXG4gICAqL1xuICBhc3luYyBzYXZlKGNvbnRlbnQpIHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IGF3YWl0IG9wZW5JbmRleGVkRGIodGhpcy5lbnZpcm9ubWVudClcblxuICAgIGF3YWl0IGluZGV4ZWREYlJlcXVlc3QoZGF0YWJhc2UudHJhbnNhY3Rpb24oXCJkYXRhYmFzZXNcIiwgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUoXCJkYXRhYmFzZXNcIikucHV0KGNvbnRlbnQsIHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSkpXG4gICAgZGF0YWJhc2UuY2xvc2UoKVxuICB9XG59XG5cbi8qKiBMb2NhbFN0b3JhZ2UtYmFja2VkIFNRTC5qcyBkYXRhYmFzZSBibG9iIHBlcnNpc3RlbmNlIGZvciBsZWdhY3kgbWlncmF0aW9ucy4gKi9cbmNsYXNzIExvY2FsU3RvcmFnZVBlcnNpc3RlbmNlIHtcblxuICAvKiogQHR5cGUge1wibG9jYWxzdG9yYWdlXCJ9ICovXG4gIG5hbWUgPSBcImxvY2Fsc3RvcmFnZVwiXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgbG9jYWxTdG9yYWdlIHBlcnNpc3RlbmNlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGF0YWJhc2VOYW1lIC0gRGF0YWJhc2UgbmFtZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtkYXRhYmFzZU5hbWV9KSB7XG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBkYXRhYmFzZU5hbWVcbiAgICAvKiogQHR5cGUge0JldHRlckxvY2FsU3RvcmFnZSB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLnN0b3JhZ2UgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBsb2NhbFN0b3JhZ2UgZGF0YWJhc2UgZW50cnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gZGVsZXRlZC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICBhd2FpdCB0aGlzLmxvY2FsU3RvcmFnZSgpLmRlbGV0ZShzcWxpdGVXZWJQZXJzaXN0ZW5jZUtleSh0aGlzLmRhdGFiYXNlTmFtZSkpXG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGxvY2FsU3RvcmFnZSBkYXRhYmFzZSBlbnRyeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59IC0gUGVyc2lzdGVkIGJ5dGVzLlxuICAgKi9cbiAgYXN5bmMgbG9hZCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5sb2NhbFN0b3JhZ2UoKS5nZXQoc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkodGhpcy5kYXRhYmFzZU5hbWUpKVxuXG4gICAgaWYgKGNvbnRlbnQgPT09IG51bGwgfHwgY29udGVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSByZXR1cm4gY29udGVudFxuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHJldHVybiBuZXcgVWludDhBcnJheShjb250ZW50KVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7VWludDhBcnJheX0gKi8gKGNvbnRlbnQpXG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgZGF0YWJhc2UgYnl0ZXMuXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gY29udGVudCAtIERhdGFiYXNlIGJ5dGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHNhdmVkLlxuICAgKi9cbiAgYXN5bmMgc2F2ZShjb250ZW50KSB7XG4gICAgYXdhaXQgdGhpcy5sb2NhbFN0b3JhZ2UoKS5zZXQoc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkodGhpcy5kYXRhYmFzZU5hbWUpLCBjb250ZW50KVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBsZWdhY3kgbG9jYWxTdG9yYWdlIGRhdGFiYXNlIGV4aXN0cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciBjb250ZW50IGV4aXN0cy5cbiAgICovXG4gIGFzeW5jIGV4aXN0cygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHRoaXMubG9jYWxTdG9yYWdlKCkuZ2V0KHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSlcblxuICAgICAgcmV0dXJuIGNvbnRlbnQgIT09IHVuZGVmaW5lZCAmJiBjb250ZW50ICE9PSBudWxsXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbG9jYWxTdG9yYWdlIHdyYXBwZXIuXG4gICAqIEByZXR1cm5zIHtCZXR0ZXJMb2NhbFN0b3JhZ2V9IC0gU3RvcmFnZSB3cmFwcGVyLlxuICAgKi9cbiAgbG9jYWxTdG9yYWdlKCkge1xuICAgIHRoaXMuc3RvcmFnZSB8fD0gbmV3IEJldHRlckxvY2FsU3RvcmFnZSgpXG5cbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlXG4gIH1cbn1cblxuXG4vKipcbiAqIFNlbGVjdHMgdGhlIHByZWZlcnJlZCBhdmFpbGFibGUgU1FMaXRlIHdlYiBwZXJzaXN0ZW5jZSBiYWNrZW5kLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGFyZ3MuZW52aXJvbm1lbnQgLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge0luZGV4ZWREYlBlcnNpc3RlbmNlfSBhcmdzLmluZGV4ZWREYlBlcnNpc3RlbmNlIC0gSW5kZXhlZERCIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKiBAcGFyYW0ge0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlfSBhcmdzLmxvY2FsU3RvcmFnZVBlcnNpc3RlbmNlIC0gTGVnYWN5IGxvY2FsU3RvcmFnZSBwZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHBhcmFtIHtPcGZzUGVyc2lzdGVuY2V9IGFyZ3Mub3Bmc1BlcnNpc3RlbmNlIC0gT1BGUyBwZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHJldHVybnMge1Byb21pc2U8U3FsaXRlV2ViUGVyc2lzdGVuY2U+fSAtIFNlbGVjdGVkIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdFN1cHBvcnRlZFBlcnNpc3RlbmNlKHtlbnZpcm9ubWVudCwgaW5kZXhlZERiUGVyc2lzdGVuY2UsIGxvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLCBvcGZzUGVyc2lzdGVuY2V9KSB7XG4gIGlmIChhd2FpdCBzdXBwb3J0c09wZnNQZXJzaXN0ZW5jZShlbnZpcm9ubWVudCkpIHJldHVybiBvcGZzUGVyc2lzdGVuY2VcbiAgaWYgKGF3YWl0IHN1cHBvcnRzSW5kZXhlZERiUGVyc2lzdGVuY2UoZW52aXJvbm1lbnQpKSByZXR1cm4gaW5kZXhlZERiUGVyc2lzdGVuY2VcblxuICByZXR1cm4gbG9jYWxTdG9yYWdlUGVyc2lzdGVuY2Vcbn1cblxuLyoqXG4gKiBNaWdyYXRlcyBhbnkgZXhpc3RpbmcgZGF0YWJhc2UgYnl0ZXMgaW50byB0aGUgc2VsZWN0ZWQgcGVyc2lzdGVuY2UgYmFja2VuZC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGF0YWJhc2VOYW1lIC0gRGF0YWJhc2UgbmFtZS5cbiAqIEBwYXJhbSB7U3FsaXRlV2ViUGVyc2lzdGVuY2V9IGFyZ3MuZGVzdGluYXRpb25QZXJzaXN0ZW5jZSAtIFNlbGVjdGVkIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGFyZ3MuZW52aXJvbm1lbnQgLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge3tkZWxldGU6ICgpID0+IFByb21pc2U8dm9pZD4sIGxvYWQ6ICgpID0+IFByb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59W119IGFyZ3Muc291cmNlUGVyc2lzdGVuY2VzIC0gUGVyc2lzdGVuY2UgYWRhcHRlcnMgdG8gc2NhbiBmb3IgZXhpc3RpbmcgYnl0ZXMuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIG1pZ3JhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbWlncmF0ZVBlcnNpc3RlZERhdGFiYXNlKHtkYXRhYmFzZU5hbWUsIGRlc3RpbmF0aW9uUGVyc2lzdGVuY2UsIGVudmlyb25tZW50LCBzb3VyY2VQZXJzaXN0ZW5jZXN9KSB7XG4gIGlmIChhd2FpdCBkZXN0aW5hdGlvblBlcnNpc3RlbmNlLmxvYWQoKSAhPT0gdW5kZWZpbmVkKSByZXR1cm5cblxuICBmb3IgKGNvbnN0IHNvdXJjZVBlcnNpc3RlbmNlIG9mIHNvdXJjZVBlcnNpc3RlbmNlcykge1xuICAgIGlmIChzb3VyY2VQZXJzaXN0ZW5jZSA9PT0gZGVzdGluYXRpb25QZXJzaXN0ZW5jZSkgY29udGludWVcblxuICAgIGNvbnN0IGRhdGFiYXNlQnl0ZXMgPSBhd2FpdCBsb2FkUGVyc2lzdGVuY2VJZkF2YWlsYWJsZShzb3VyY2VQZXJzaXN0ZW5jZSlcbiAgICBpZiAoZGF0YWJhc2VCeXRlcyA9PT0gdW5kZWZpbmVkKSBjb250aW51ZVxuXG4gICAgYXdhaXQgZGVzdGluYXRpb25QZXJzaXN0ZW5jZS5zYXZlKGRhdGFiYXNlQnl0ZXMpXG4gICAgYXdhaXQgZGVsZXRlU3FsaXRlV2ViUGVyc2lzdGVuY2VzKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50fSlcbiAgICBhd2FpdCBkZXN0aW5hdGlvblBlcnNpc3RlbmNlLnNhdmUoZGF0YWJhc2VCeXRlcylcbiAgICByZXR1cm5cbiAgfVxufVxuXG4vKipcbiAqIExvYWRzIGEgcGVyc2lzdGVuY2UgYmFja2VuZCwgaWdub3JpbmcgdW5hdmFpbGFibGUgYmFja2VuZCBlcnJvcnMuXG4gKiBAcGFyYW0ge3tsb2FkOiAoKSA9PiBQcm9taXNlPFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ+fX0gcGVyc2lzdGVuY2UgLSBQZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHJldHVybnMge1Byb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59IC0gUGVyc2lzdGVkIGJ5dGVzLCBpZiBhdmFpbGFibGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRQZXJzaXN0ZW5jZUlmQXZhaWxhYmxlKHBlcnNpc3RlbmNlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHBlcnNpc3RlbmNlLmxvYWQoKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbn1cblxuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIE9QRlMgcGVyc2lzdGVuY2UgaXMgdXNhYmxlLlxuICogQHBhcmFtIHtTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50fSBlbnZpcm9ubWVudCAtIEJyb3dzZXItbGlrZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgT1BGUyBjYW4gYmUgdXNlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3VwcG9ydHNPcGZzUGVyc2lzdGVuY2UoZW52aXJvbm1lbnQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBvcGZzRGlyZWN0b3J5KGVudmlyb25tZW50KVxuICAgIGNvbnN0IGZpbGVIYW5kbGUgPSBhd2FpdCBkaXJlY3RvcnkuZ2V0RmlsZUhhbmRsZShTVVBQT1JUX0NIRUNLX0ZJTEUsIHtjcmVhdGU6IHRydWV9KVxuICAgIGNvbnN0IHdyaXRhYmxlID0gYXdhaXQgZmlsZUhhbmRsZS5jcmVhdGVXcml0YWJsZSgpXG5cbiAgICBhd2FpdCB3cml0YWJsZS53cml0ZShhcnJheUJ1ZmZlckZyb21CeXRlcyhTVVBQT1JUX0NIRUNLX0JZVEVTKSlcbiAgICBhd2FpdCB3cml0YWJsZS5jbG9zZSgpXG5cbiAgICBjb25zdCBmaWxlID0gYXdhaXQgZmlsZUhhbmRsZS5nZXRGaWxlKClcbiAgICBjb25zdCByZWFkQmFjayA9IG5ldyBVaW50OEFycmF5KGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKSlcblxuICAgIGF3YWl0IGRpcmVjdG9yeS5yZW1vdmVFbnRyeShTVVBQT1JUX0NIRUNLX0ZJTEUpXG5cbiAgICByZXR1cm4gc2FtZUJ5dGVzKHJlYWRCYWNrLCBTVVBQT1JUX0NIRUNLX0JZVEVTKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgSW5kZXhlZERCIHBlcnNpc3RlbmNlIGlzIHVzYWJsZS5cbiAqIEBwYXJhbSB7U3FsaXRlV2ViUGVyc2lzdGVuY2VFbnZpcm9ubWVudH0gZW52aXJvbm1lbnQgLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIEluZGV4ZWREQiBjYW4gYmUgdXNlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3VwcG9ydHNJbmRleGVkRGJQZXJzaXN0ZW5jZShlbnZpcm9ubWVudCkge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gYXdhaXQgb3BlbkluZGV4ZWREYihlbnZpcm9ubWVudClcbiAgICBjb25zdCBzdG9yZSA9IGRhdGFiYXNlLnRyYW5zYWN0aW9uKFwiZGF0YWJhc2VzXCIsIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKFwiZGF0YWJhc2VzXCIpXG5cbiAgICBhd2FpdCBpbmRleGVkRGJSZXF1ZXN0KHN0b3JlLnB1dChTVVBQT1JUX0NIRUNLX0JZVEVTLCBTVVBQT1JUX0NIRUNLX0ZJTEUpKVxuXG4gICAgY29uc3QgcmVhZEJhY2sgPSBhd2FpdCBpbmRleGVkRGJSZXF1ZXN0KHN0b3JlLmdldChTVVBQT1JUX0NIRUNLX0ZJTEUpKVxuXG4gICAgYXdhaXQgaW5kZXhlZERiUmVxdWVzdChzdG9yZS5kZWxldGUoU1VQUE9SVF9DSEVDS19GSUxFKSlcbiAgICBkYXRhYmFzZS5jbG9zZSgpXG5cbiAgICByZXR1cm4gcmVhZEJhY2sgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIHNhbWVCeXRlcyhyZWFkQmFjaywgU1VQUE9SVF9DSEVDS19CWVRFUylcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBPcGVucyB0aGUgU1FMaXRlIHdlYiBJbmRleGVkREIgZGF0YWJhc2UuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICogQHJldHVybnMge1Byb21pc2U8SURCRGF0YWJhc2U+fSAtIE9wZW4gZGF0YWJhc2UuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG9wZW5JbmRleGVkRGIoZW52aXJvbm1lbnQpIHtcbiAgY29uc3QgaW5kZXhlZERiID0gaW5kZXhlZERiRnJvbUVudmlyb25tZW50KGVudmlyb25tZW50KVxuXG4gIGlmICghaW5kZXhlZERiIHx8IHR5cGVvZiBpbmRleGVkRGIub3BlbiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJJbmRleGVkREIgaXMgbm90IGF2YWlsYWJsZVwiKVxuXG4gIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkRGIub3BlbihcIlZlbG9jaW91c0RhdGFiYXNlRHJpdmVyc1NxbGl0ZVdlYlwiLCAxKVxuICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9ICgpID0+IHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IHJlcXVlc3QucmVzdWx0XG5cbiAgICBpZiAoIWRhdGFiYXNlLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoXCJkYXRhYmFzZXNcIikpIGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3JlKFwiZGF0YWJhc2VzXCIpXG4gIH1cblxuICByZXR1cm4gYXdhaXQgaW5kZXhlZERiUmVxdWVzdChyZXF1ZXN0KVxufVxuXG4vKipcbiAqIFJlc29sdmVzIGFuIEluZGV4ZWREQiByZXF1ZXN0LlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7SURCUmVxdWVzdDxUPn0gcmVxdWVzdCAtIEluZGV4ZWREQiByZXF1ZXN0LlxuICogQHJldHVybnMge1Byb21pc2U8VD59IC0gUmVxdWVzdCByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGluZGV4ZWREYlJlcXVlc3QocmVxdWVzdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdClcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvciB8fCBuZXcgRXJyb3IoXCJJbmRleGVkREIgcmVxdWVzdCBmYWlsZWRcIikpXG4gIH0pXG59XG5cbi8qKlxuICogRGVsZXRlcyBhIHBlcnNpc3RlbmNlIGJhY2tlbmQsIGlnbm9yaW5nIHVuYXZhaWxhYmxlIGJhY2tlbmQgZXJyb3JzLlxuICogQHBhcmFtIHt7ZGVsZXRlOiAoKSA9PiBQcm9taXNlPHZvaWQ+fX0gcGVyc2lzdGVuY2UgLSBQZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBkZWxldGlvbiB3YXMgYXR0ZW1wdGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZWxldGVQZXJzaXN0ZW5jZUlmQXZhaWxhYmxlKHBlcnNpc3RlbmNlKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcGVyc2lzdGVuY2UuZGVsZXRlKClcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIHVuYXZhaWxhYmxlIGJhY2tlbmRzIHNvIHJlc2V0IGNsZWFycyBldmVyeSBiYWNrZW5kIHRoZSBicm93c2VyIGNhbiBhY2Nlc3MuXG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIE9QRlMgcm9vdCBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICogQHJldHVybnMge1Byb21pc2U8RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZT59IC0gT1BGUyByb290IGRpcmVjdG9yeS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gb3Bmc0RpcmVjdG9yeShlbnZpcm9ubWVudCkge1xuICBjb25zdCBuYXZpZ2F0b3JPYmplY3QgPSBuYXZpZ2F0b3JGcm9tRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpXG4gIGNvbnN0IHN0b3JhZ2UgPSBuYXZpZ2F0b3JPYmplY3Quc3RvcmFnZVxuXG4gIGlmICghc3RvcmFnZSB8fCB0eXBlb2Ygc3RvcmFnZS5nZXREaXJlY3RvcnkgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiT1BGUyBpcyBub3QgYXZhaWxhYmxlXCIpXG5cbiAgcmV0dXJuIGF3YWl0IHN0b3JhZ2UuZ2V0RGlyZWN0b3J5KClcbn1cblxuLyoqXG4gKiBHZXRzIG5hdmlnYXRvciBmcm9tIGVudmlyb25tZW50LlxuICogQHBhcmFtIHtTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50fSBlbnZpcm9ubWVudCAtIEJyb3dzZXItbGlrZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIHt7c3RvcmFnZT86IHtnZXREaXJlY3Rvcnk/OiAoKSA9PiBQcm9taXNlPEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU+fX19IC0gTmF2aWdhdG9yLWxpa2Ugb2JqZWN0LlxuICovXG5mdW5jdGlvbiBuYXZpZ2F0b3JGcm9tRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpIHtcbiAgY29uc3QgY2FuZGlkYXRlID0gZW52aXJvbm1lbnQubmF2aWdhdG9yXG5cbiAgaWYgKCFjYW5kaWRhdGUgfHwgdHlwZW9mIGNhbmRpZGF0ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHt9XG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7e3N0b3JhZ2U/OiB7Z2V0RGlyZWN0b3J5PzogKCkgPT4gUHJvbWlzZTxGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlPn19fSAqLyAoY2FuZGlkYXRlKVxufVxuXG4vKipcbiAqIEdldHMgSW5kZXhlZERCIGZyb20gZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICogQHJldHVybnMge3tvcGVuPzogKG5hbWU6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcikgPT4gSURCT3BlbkRCUmVxdWVzdH0gfCB1bmRlZmluZWR9IC0gSW5kZXhlZERCLWxpa2Ugb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpbmRleGVkRGJGcm9tRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpIHtcbiAgY29uc3QgY2FuZGlkYXRlID0gZW52aXJvbm1lbnQuaW5kZXhlZERCXG5cbiAgaWYgKCFjYW5kaWRhdGUgfHwgdHlwZW9mIGNhbmRpZGF0ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIHJldHVybiAvKiogQHR5cGUge3tvcGVuPzogKG5hbWU6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcikgPT4gSURCT3BlbkRCUmVxdWVzdH19ICovIChjYW5kaWRhdGUpXG59XG5cbi8qKlxuICogQ29udmVydHMgYnl0ZXMgdG8gYSBzdGFuZGFsb25lIEFycmF5QnVmZmVyIGZvciBicm93c2VyIGZpbGUgd3JpdGVzLlxuICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlcyAtIEJ5dGVzIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IC0gU3RhbmRhbG9uZSBBcnJheUJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gYXJyYXlCdWZmZXJGcm9tQnl0ZXMoYnl0ZXMpIHtcbiAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmJ5dGVMZW5ndGgpXG5cbiAgY29weS5zZXQoYnl0ZXMpXG5cbiAgcmV0dXJuIGNvcHkuYnVmZmVyXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gZXJyb3IgaXMgYSBmaWxlLW5vdC1mb3VuZCBlcnJvci5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyb3IgLSBFcnJvciBjYW5kaWRhdGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSBlcnJvciBpcyBub3QgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGlzTm90Rm91bmRFcnJvcihlcnJvcikge1xuICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSBcIk5vdEZvdW5kRXJyb3JcIlxufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBieXRlIGFycmF5cy5cbiAqIEBwYXJhbSB7VWludDhBcnJheX0gbGVmdCAtIExlZnQgYnl0ZXMuXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHJpZ2h0IC0gUmlnaHQgYnl0ZXMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGJ5dGVzIG1hdGNoLlxuICovXG5mdW5jdGlvbiBzYW1lQnl0ZXMobGVmdCwgcmlnaHQpIHtcbiAgaWYgKGxlZnQubGVuZ3RoICE9PSByaWdodC5sZW5ndGgpIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiBsZWZ0LmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSByaWdodFtpbmRleF0pXG59XG4iXX0=
|
|
464
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLXBlcnNpc3RlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL2RyaXZlcnMvc3FsaXRlL3dlYi1wZXJzaXN0ZW5jZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxrQkFBa0IsTUFBTSxxQkFBcUIsQ0FBQTtBQUVwRDs7Ozs7OztHQU9HO0FBQ0g7Ozs7O0dBS0c7QUFDSCxNQUFNLGtCQUFrQixHQUFHLCtCQUErQixDQUFBO0FBQzFELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFFeEY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwwQkFBMEIsQ0FBQyxFQUFDLFlBQVksRUFBRSxXQUFXLEdBQUcsVUFBVSxFQUFDO0lBQ3ZGLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUE7SUFDM0UsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtJQUN4RSxNQUFNLG9CQUFvQixHQUFHLElBQUksb0JBQW9CLENBQUMsRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtJQUVsRixNQUFNLG1CQUFtQixHQUFHLE1BQU0sMEJBQTBCLENBQUMsRUFBQyxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFDLENBQUMsQ0FBQTtJQUUzSSxNQUFNLHdCQUF3QixDQUFDO1FBQzdCLFlBQVk7UUFDWixzQkFBc0IsRUFBRSxtQkFBbUI7UUFDM0MsV0FBVztRQUNYLGtCQUFrQixFQUFFLENBQUMsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxDQUFDO0tBQ3JGLENBQUMsQ0FBQTtJQUVGLE9BQU8sbUJBQW1CLENBQUE7QUFDNUIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsMkJBQTJCLENBQUMsRUFBQyxZQUFZLEVBQUUsV0FBVyxHQUFHLFVBQVUsRUFBQztJQUN4RixNQUFNLFlBQVksR0FBRztRQUNuQixJQUFJLHVCQUF1QixDQUFDLEVBQUMsWUFBWSxFQUFDLENBQUM7UUFDM0MsSUFBSSxlQUFlLENBQUMsRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFDLENBQUM7UUFDaEQsSUFBSSxvQkFBb0IsQ0FBQyxFQUFDLFlBQVksRUFBRSxXQUFXLEVBQUMsQ0FBQztLQUN0RCxDQUFBO0lBRUQsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZO1FBQUUsTUFBTSw0QkFBNEIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQUN6RixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxZQUFZO0lBQ2xELElBQUksQ0FBQyxZQUFZO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFBO0lBRXhGLE9BQU8sdUNBQXVDLFlBQVksRUFBRSxDQUFBO0FBQzlELENBQUM7QUFFRCxvREFBb0Q7QUFDcEQsTUFBTSxlQUFlO0lBQ25CLHFCQUFxQjtJQUNyQixJQUFJLEdBQUcsTUFBTSxDQUFBO0lBRWI7Ozs7O09BS0c7SUFDSCxZQUFZLEVBQUMsWUFBWSxFQUFFLFdBQVcsRUFBQztRQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtJQUNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE1BQU07UUFDVixNQUFNLFNBQVMsR0FBRyxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFdkQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBO1FBQ3pFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsTUFBTSxLQUFLLENBQUE7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sU0FBUyxHQUFHLE1BQU0sYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUV2RCxJQUFJLENBQUM7WUFDSCxNQUFNLFVBQVUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUE7WUFDNUYsTUFBTSxJQUFJLEdBQUcsTUFBTSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUE7WUFDdkMsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7WUFFNUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNwQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQztnQkFBRSxPQUFPLFNBQVMsQ0FBQTtZQUU1QyxNQUFNLEtBQUssQ0FBQTtRQUNiLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE1BQU07UUFDVixJQUFJLENBQUM7WUFDSCxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxTQUFTLENBQUE7UUFDMUMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFBO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPO1FBQ2hCLE1BQU0sU0FBUyxHQUFHLE1BQU0sYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUN2RCxNQUFNLFVBQVUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDNUcsTUFBTSxRQUFRLEdBQUcsTUFBTSxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUE7UUFFbEQsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDbkQsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDeEIsQ0FBQztDQUNGO0FBRUQseURBQXlEO0FBQ3pELE1BQU0sb0JBQW9CO0lBQ3hCLDBCQUEwQjtJQUMxQixJQUFJLEdBQUcsV0FBVyxDQUFBO0lBRWxCOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLFlBQVksRUFBRSxXQUFXLEVBQUM7UUFDckMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUE7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxRQUFRLEdBQUcsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRXRELE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2xKLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNsQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLFFBQVEsR0FBRyxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFN0osUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBRWhCLElBQUksTUFBTSxLQUFLLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQTtRQUMxQyxJQUFJLE1BQU0sWUFBWSxVQUFVO1lBQUUsT0FBTyxNQUFNLENBQUE7UUFDL0MsSUFBSSxNQUFNLFlBQVksV0FBVztZQUFFLE9BQU8sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFaEUsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFBO0lBQ2xGLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsTUFBTTtRQUNWLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUN0RCxNQUFNLE1BQU0sR0FBRyxNQUFNLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUU3SixRQUFRLENBQUMsS0FBSyxFQUFFLENBQUE7WUFFaEIsT0FBTyxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUE7UUFDaEQsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFBO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPO1FBQ2hCLE1BQU0sUUFBUSxHQUFHLE1BQU0sYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUV0RCxNQUFNLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLHVCQUF1QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDeEosUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ2xCLENBQUM7Q0FDRjtBQUVELGtGQUFrRjtBQUNsRixNQUFNLHVCQUF1QjtJQUUzQiw2QkFBNkI7SUFDN0IsSUFBSSxHQUFHLGNBQWMsQ0FBQTtJQUVyQjs7OztPQUlHO0lBQ0gsWUFBWSxFQUFDLFlBQVksRUFBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtRQUNoQyw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUE7SUFDMUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBO0lBQzlFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQTtRQUV6RixJQUFJLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQTtRQUMvRCxJQUFJLE9BQU8sWUFBWSxVQUFVO1lBQUUsT0FBTyxPQUFPLENBQUE7UUFDakQsSUFBSSxPQUFPLFlBQVksV0FBVztZQUFFLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFbEUsT0FBTyx5QkFBeUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPO1FBQ2hCLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDcEYsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFNO1FBQ1YsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBO1lBRXpGLE9BQU8sT0FBTyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFBO1FBQ2xELENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWTtRQUNWLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxrQkFBa0IsRUFBRSxDQUFBO1FBRXpDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUNyQixDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILEtBQUssVUFBVSwwQkFBMEIsQ0FBQyxFQUFDLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSxlQUFlLEVBQUM7SUFDckgsSUFBSSxNQUFNLHVCQUF1QixDQUFDLFdBQVcsQ0FBQztRQUFFLE9BQU8sZUFBZSxDQUFBO0lBQ3RFLElBQUksTUFBTSw0QkFBNEIsQ0FBQyxXQUFXLENBQUM7UUFBRSxPQUFPLG9CQUFvQixDQUFBO0lBRWhGLE9BQU8sdUJBQXVCLENBQUE7QUFDaEMsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsS0FBSyxVQUFVLHdCQUF3QixDQUFDLEVBQUMsWUFBWSxFQUFFLHNCQUFzQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBQztJQUM3RyxJQUFJLE1BQU0sc0JBQXNCLENBQUMsSUFBSSxFQUFFLEtBQUssU0FBUztRQUFFLE9BQU07SUFFN0QsS0FBSyxNQUFNLGlCQUFpQixJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDbkQsSUFBSSxpQkFBaUIsS0FBSyxzQkFBc0I7WUFBRSxTQUFRO1FBRTFELE1BQU0sYUFBYSxHQUFHLE1BQU0sMEJBQTBCLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUN6RSxJQUFJLGFBQWEsS0FBSyxTQUFTO1lBQUUsU0FBUTtRQUV6QyxNQUFNLHNCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNoRCxNQUFNLDJCQUEyQixDQUFDLEVBQUMsWUFBWSxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUE7UUFDOUQsTUFBTSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDaEQsT0FBTTtJQUNSLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSwwQkFBMEIsQ0FBQyxXQUFXO0lBQ25ELElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDakMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxXQUFXO0lBQ2hELElBQUksQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHLE1BQU0sYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ2xELE1BQU0sVUFBVSxHQUFHLE1BQU0sU0FBUyxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ3BGLE1BQU0sUUFBUSxHQUFHLE1BQU0sVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBRWxELE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUE7UUFDL0QsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUE7UUFFdEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQTtRQUV6RCxNQUFNLFNBQVMsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUUvQyxPQUFPLFNBQVMsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsNEJBQTRCLENBQUMsV0FBVztJQUNyRCxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNqRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFckYsTUFBTSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQTtRQUUxRSxNQUFNLFFBQVEsR0FBRyxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFBO1FBRXRFLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUE7UUFDeEQsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBRWhCLE9BQU8sUUFBUSxZQUFZLFVBQVUsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUE7SUFDbkYsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsS0FBSyxVQUFVLGFBQWEsQ0FBQyxXQUFXO0lBQ3RDLE1BQU0sU0FBUyxHQUFHLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRXZELElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxTQUFTLENBQUMsSUFBSSxLQUFLLFVBQVU7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUE7SUFFckcsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUN0RSxPQUFPLENBQUMsZUFBZSxHQUFHLEdBQUcsRUFBRTtRQUM3QixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFBO1FBRS9CLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUFFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUMvRixDQUFDLENBQUE7SUFFRCxPQUFPLE1BQU0sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDeEMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxPQUFPO0lBQy9CLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsT0FBTyxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2pELE9BQU8sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFBO0lBQ3hGLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsNEJBQTRCLENBQUMsV0FBVztJQUNyRCxJQUFJLENBQUM7UUFDSCxNQUFNLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUM1QixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1Asb0ZBQW9GO0lBQ3RGLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxhQUFhLENBQUMsV0FBVztJQUN0QyxNQUFNLGVBQWUsR0FBRyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUM3RCxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFBO0lBRXZDLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxPQUFPLENBQUMsWUFBWSxLQUFLLFVBQVU7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUE7SUFFcEcsT0FBTyxNQUFNLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQTtBQUNyQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsd0JBQXdCLENBQUMsV0FBVztJQUMzQyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFBO0lBRXZDLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUTtRQUFFLE9BQU8sRUFBRSxDQUFBO0lBRTFELE9BQU8sb0ZBQW9GLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUN6RyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsd0JBQXdCLENBQUMsV0FBVztJQUMzQyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFBO0lBRXZDLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFBO0lBRWpFLE9BQU8sNEVBQTRFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUNqRyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsb0JBQW9CLENBQUMsS0FBSztJQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7SUFFN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQTtBQUNwQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsZUFBZSxDQUFDLEtBQUs7SUFDNUIsT0FBTyxLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFBO0FBQ2pFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLO0lBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRTlDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCZXR0ZXJMb2NhbFN0b3JhZ2UgZnJvbSBcImJldHRlci1sb2NhbHN0b3JhZ2VcIlxuXG4vKipcbiAqIFNRTGl0ZSB3ZWIgcGVyc2lzdGVuY2UgYWRhcHRlci5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNxbGl0ZVdlYlBlcnNpc3RlbmNlXG4gKiBAcHJvcGVydHkge1wiaW5kZXhlZGRiXCIgfCBcImxvY2Fsc3RvcmFnZVwiIHwgXCJvcGZzXCJ9IG5hbWUgLSBQZXJzaXN0ZW5jZSBiYWNrZW5kIG5hbWUuXG4gKiBAcHJvcGVydHkgeygpID0+IFByb21pc2U8dm9pZD59IGRlbGV0ZSAtIERlbGV0ZXMgdGhlIHBlcnNpc3RlZCBkYXRhYmFzZS5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gUHJvbWlzZTxVaW50OEFycmF5IHwgdW5kZWZpbmVkPn0gbG9hZCAtIExvYWRzIHBlcnNpc3RlZCBkYXRhYmFzZSBieXRlcy5cbiAqIEBwcm9wZXJ0eSB7KGNvbnRlbnQ6IFVpbnQ4QXJyYXkpID0+IFByb21pc2U8dm9pZD59IHNhdmUgLSBTYXZlcyBwZXJzaXN0ZWQgZGF0YWJhc2UgYnl0ZXMuXG4gKi9cbi8qKlxuICogQnJvd3Nlci1saWtlIGVudmlyb25tZW50IHVzZWQgZm9yIHdlYiBwZXJzaXN0ZW5jZSBkZXRlY3Rpb24uXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50XG4gKiBAcHJvcGVydHkge3Vua25vd259IFtpbmRleGVkREJdIC0gSW5kZXhlZERCIGdsb2JhbC5cbiAqIEBwcm9wZXJ0eSB7dW5rbm93bn0gW25hdmlnYXRvcl0gLSBOYXZpZ2F0b3IgZ2xvYmFsLlxuICovXG5jb25zdCBTVVBQT1JUX0NIRUNLX0ZJTEUgPSBcIi52ZWxvY2lvdXMtb3Bmcy1zdXBwb3J0LWNoZWNrXCJcbmNvbnN0IFNVUFBPUlRfQ0hFQ0tfQllURVMgPSBuZXcgVWludDhBcnJheShbMTE4LCAxMDEsIDEwOCwgMTExLCA5OSwgMTA1LCAxMTEsIDExNywgMTE1XSlcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBiZXN0IFNRTGl0ZSB3ZWIgcGVyc2lzdGVuY2UgYWRhcHRlciBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3Nlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGF0YWJhc2VOYW1lIC0gRGF0YWJhc2UgbmFtZS5cbiAqIEBwYXJhbSB7U3FsaXRlV2ViUGVyc2lzdGVuY2VFbnZpcm9ubWVudH0gW2FyZ3MuZW52aXJvbm1lbnRdIC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICogQHJldHVybnMge1Byb21pc2U8U3FsaXRlV2ViUGVyc2lzdGVuY2U+fSAtIFNlbGVjdGVkIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTcWxpdGVXZWJQZXJzaXN0ZW5jZSh7ZGF0YWJhc2VOYW1lLCBlbnZpcm9ubWVudCA9IGdsb2JhbFRoaXN9KSB7XG4gIGNvbnN0IGxvY2FsU3RvcmFnZVBlcnNpc3RlbmNlID0gbmV3IExvY2FsU3RvcmFnZVBlcnNpc3RlbmNlKHtkYXRhYmFzZU5hbWV9KVxuICBjb25zdCBvcGZzUGVyc2lzdGVuY2UgPSBuZXcgT3Bmc1BlcnNpc3RlbmNlKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50fSlcbiAgY29uc3QgaW5kZXhlZERiUGVyc2lzdGVuY2UgPSBuZXcgSW5kZXhlZERiUGVyc2lzdGVuY2Uoe2RhdGFiYXNlTmFtZSwgZW52aXJvbm1lbnR9KVxuXG4gIGNvbnN0IHNlbGVjdGVkUGVyc2lzdGVuY2UgPSBhd2FpdCBzZWxlY3RTdXBwb3J0ZWRQZXJzaXN0ZW5jZSh7ZW52aXJvbm1lbnQsIGluZGV4ZWREYlBlcnNpc3RlbmNlLCBsb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZSwgb3Bmc1BlcnNpc3RlbmNlfSlcblxuICBhd2FpdCBtaWdyYXRlUGVyc2lzdGVkRGF0YWJhc2Uoe1xuICAgIGRhdGFiYXNlTmFtZSxcbiAgICBkZXN0aW5hdGlvblBlcnNpc3RlbmNlOiBzZWxlY3RlZFBlcnNpc3RlbmNlLFxuICAgIGVudmlyb25tZW50LFxuICAgIHNvdXJjZVBlcnNpc3RlbmNlczogW2xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLCBpbmRleGVkRGJQZXJzaXN0ZW5jZSwgb3Bmc1BlcnNpc3RlbmNlXVxuICB9KVxuXG4gIHJldHVybiBzZWxlY3RlZFBlcnNpc3RlbmNlXG59XG5cbi8qKlxuICogRGVsZXRlcyBTUUxpdGUgd2ViIGRhdGFiYXNlIGJ5dGVzIGZyb20gZXZlcnkgYXZhaWxhYmxlIHBlcnNpc3RlbmNlIGJhY2tlbmQuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmRhdGFiYXNlTmFtZSAtIERhdGFiYXNlIG5hbWUuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IFthcmdzLmVudmlyb25tZW50XSAtIEJyb3dzZXItbGlrZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gYWxsIGF2YWlsYWJsZSBiYWNrZW5kcyB3ZXJlIGNsZWFyZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVTcWxpdGVXZWJQZXJzaXN0ZW5jZXMoe2RhdGFiYXNlTmFtZSwgZW52aXJvbm1lbnQgPSBnbG9iYWxUaGlzfSkge1xuICBjb25zdCBwZXJzaXN0ZW5jZXMgPSBbXG4gICAgbmV3IExvY2FsU3RvcmFnZVBlcnNpc3RlbmNlKHtkYXRhYmFzZU5hbWV9KSxcbiAgICBuZXcgT3Bmc1BlcnNpc3RlbmNlKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50fSksXG4gICAgbmV3IEluZGV4ZWREYlBlcnNpc3RlbmNlKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50fSlcbiAgXVxuXG4gIGZvciAoY29uc3QgcGVyc2lzdGVuY2Ugb2YgcGVyc2lzdGVuY2VzKSBhd2FpdCBkZWxldGVQZXJzaXN0ZW5jZUlmQXZhaWxhYmxlKHBlcnNpc3RlbmNlKVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGxlZ2FjeSBTUUxpdGUgd2ViIHN0b3JhZ2Uga2V5IGZvciBhIGRhdGFiYXNlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YWJhc2VOYW1lIC0gRGF0YWJhc2UgbmFtZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUGVyc2lzdGVuY2Uga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkoZGF0YWJhc2VOYW1lKSB7XG4gIGlmICghZGF0YWJhc2VOYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBuYW1lIGdpdmVuIGluIGFyZ3VtZW50cyBmb3IgU1FMaXRlIFdlYiBkYXRhYmFzZVwiKVxuXG4gIHJldHVybiBgVmVsb2Npb3VzRGF0YWJhc2VEcml2ZXJzU3FsaXRlV2ViLS0tJHtkYXRhYmFzZU5hbWV9YFxufVxuXG4vKiogT1BGUy1iYWNrZWQgU1FMLmpzIGRhdGFiYXNlIGZpbGUgcGVyc2lzdGVuY2UuICovXG5jbGFzcyBPcGZzUGVyc2lzdGVuY2Uge1xuICAvKiogQHR5cGUge1wib3Bmc1wifSAqL1xuICBuYW1lID0gXCJvcGZzXCJcblxuICAvKipcbiAgICogQ3JlYXRlcyBPUEZTIHBlcnNpc3RlbmNlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGF0YWJhc2VOYW1lIC0gRGF0YWJhc2UgbmFtZS5cbiAgICogQHBhcmFtIHtTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50fSBhcmdzLmVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2RhdGFiYXNlTmFtZSwgZW52aXJvbm1lbnR9KSB7XG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBkYXRhYmFzZU5hbWVcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnRcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBPUEZTIGRhdGFiYXNlIGZpbGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gZGVsZXRlZC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBvcGZzRGlyZWN0b3J5KHRoaXMuZW52aXJvbm1lbnQpXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGlyZWN0b3J5LnJlbW92ZUVudHJ5KHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFpc05vdEZvdW5kRXJyb3IoZXJyb3IpKSB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgT1BGUyBkYXRhYmFzZSBmaWxlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxVaW50OEFycmF5IHwgdW5kZWZpbmVkPn0gLSBQZXJzaXN0ZWQgYnl0ZXMuXG4gICAqL1xuICBhc3luYyBsb2FkKCkge1xuICAgIGNvbnN0IGRpcmVjdG9yeSA9IGF3YWl0IG9wZnNEaXJlY3RvcnkodGhpcy5lbnZpcm9ubWVudClcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlSGFuZGxlID0gYXdhaXQgZGlyZWN0b3J5LmdldEZpbGVIYW5kbGUoc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkodGhpcy5kYXRhYmFzZU5hbWUpKVxuICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGZpbGVIYW5kbGUuZ2V0RmlsZSgpXG4gICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKVxuXG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChpc05vdEZvdW5kRXJyb3IoZXJyb3IpKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBPUEZTIGRhdGFiYXNlIGZpbGUgZXhpc3RzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIGNvbnRlbnQgZXhpc3RzLlxuICAgKi9cbiAgYXN5bmMgZXhpc3RzKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGF3YWl0IHRoaXMubG9hZCgpKSAhPT0gdW5kZWZpbmVkXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgZGF0YWJhc2UgYnl0ZXMuXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gY29udGVudCAtIERhdGFiYXNlIGJ5dGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHNhdmVkLlxuICAgKi9cbiAgYXN5bmMgc2F2ZShjb250ZW50KSB7XG4gICAgY29uc3QgZGlyZWN0b3J5ID0gYXdhaXQgb3Bmc0RpcmVjdG9yeSh0aGlzLmVudmlyb25tZW50KVxuICAgIGNvbnN0IGZpbGVIYW5kbGUgPSBhd2FpdCBkaXJlY3RvcnkuZ2V0RmlsZUhhbmRsZShzcWxpdGVXZWJQZXJzaXN0ZW5jZUtleSh0aGlzLmRhdGFiYXNlTmFtZSksIHtjcmVhdGU6IHRydWV9KVxuICAgIGNvbnN0IHdyaXRhYmxlID0gYXdhaXQgZmlsZUhhbmRsZS5jcmVhdGVXcml0YWJsZSgpXG5cbiAgICBhd2FpdCB3cml0YWJsZS53cml0ZShhcnJheUJ1ZmZlckZyb21CeXRlcyhjb250ZW50KSlcbiAgICBhd2FpdCB3cml0YWJsZS5jbG9zZSgpXG4gIH1cbn1cblxuLyoqIEluZGV4ZWREQi1iYWNrZWQgU1FMLmpzIGRhdGFiYXNlIGJsb2IgcGVyc2lzdGVuY2UuICovXG5jbGFzcyBJbmRleGVkRGJQZXJzaXN0ZW5jZSB7XG4gIC8qKiBAdHlwZSB7XCJpbmRleGVkZGJcIn0gKi9cbiAgbmFtZSA9IFwiaW5kZXhlZGRiXCJcblxuICAvKipcbiAgICogQ3JlYXRlcyBJbmRleGVkREIgcGVyc2lzdGVuY2UuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5kYXRhYmFzZU5hbWUgLSBEYXRhYmFzZSBuYW1lLlxuICAgKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGFyZ3MuZW52aXJvbm1lbnQgLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7ZGF0YWJhc2VOYW1lLCBlbnZpcm9ubWVudH0pIHtcbiAgICB0aGlzLmRhdGFiYXNlTmFtZSA9IGRhdGFiYXNlTmFtZVxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudFxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIEluZGV4ZWREQiBkYXRhYmFzZSBlbnRyeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBkZWxldGVkLlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKCkge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gYXdhaXQgb3BlbkluZGV4ZWREYih0aGlzLmVudmlyb25tZW50KVxuXG4gICAgYXdhaXQgaW5kZXhlZERiUmVxdWVzdChkYXRhYmFzZS50cmFuc2FjdGlvbihcImRhdGFiYXNlc1wiLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZShcImRhdGFiYXNlc1wiKS5kZWxldGUoc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkodGhpcy5kYXRhYmFzZU5hbWUpKSlcbiAgICBkYXRhYmFzZS5jbG9zZSgpXG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIEluZGV4ZWREQiBkYXRhYmFzZSBlbnRyeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59IC0gUGVyc2lzdGVkIGJ5dGVzLlxuICAgKi9cbiAgYXN5bmMgbG9hZCgpIHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IGF3YWl0IG9wZW5JbmRleGVkRGIodGhpcy5lbnZpcm9ubWVudClcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmRleGVkRGJSZXF1ZXN0KGRhdGFiYXNlLnRyYW5zYWN0aW9uKFwiZGF0YWJhc2VzXCIsIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUoXCJkYXRhYmFzZXNcIikuZ2V0KHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSkpXG5cbiAgICBkYXRhYmFzZS5jbG9zZSgpXG5cbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgVWludDhBcnJheSkgcmV0dXJuIHJlc3VsdFxuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlc3VsdClcblxuICAgIHRocm93IG5ldyBFcnJvcihcIlNRTGl0ZSB3ZWIgSW5kZXhlZERCIHBlcnNpc3RlbmNlIHJldHVybmVkIHVuc3VwcG9ydGVkIGNvbnRlbnRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgSW5kZXhlZERCIGRhdGFiYXNlIGVudHJ5IGV4aXN0cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciBjb250ZW50IGV4aXN0cy5cbiAgICovXG4gIGFzeW5jIGV4aXN0cygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YWJhc2UgPSBhd2FpdCBvcGVuSW5kZXhlZERiKHRoaXMuZW52aXJvbm1lbnQpXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmRleGVkRGJSZXF1ZXN0KGRhdGFiYXNlLnRyYW5zYWN0aW9uKFwiZGF0YWJhc2VzXCIsIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUoXCJkYXRhYmFzZXNcIikuZ2V0KHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSkpXG5cbiAgICAgIGRhdGFiYXNlLmNsb3NlKClcblxuICAgICAgcmV0dXJuIHJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIHJlc3VsdCAhPT0gbnVsbFxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGRhdGFiYXNlIGJ5dGVzLlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGNvbnRlbnQgLSBEYXRhYmFzZSBieXRlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBzYXZlZC5cbiAgICovXG4gIGFzeW5jIHNhdmUoY29udGVudCkge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gYXdhaXQgb3BlbkluZGV4ZWREYih0aGlzLmVudmlyb25tZW50KVxuXG4gICAgYXdhaXQgaW5kZXhlZERiUmVxdWVzdChkYXRhYmFzZS50cmFuc2FjdGlvbihcImRhdGFiYXNlc1wiLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZShcImRhdGFiYXNlc1wiKS5wdXQoY29udGVudCwgc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkodGhpcy5kYXRhYmFzZU5hbWUpKSlcbiAgICBkYXRhYmFzZS5jbG9zZSgpXG4gIH1cbn1cblxuLyoqIExvY2FsU3RvcmFnZS1iYWNrZWQgU1FMLmpzIGRhdGFiYXNlIGJsb2IgcGVyc2lzdGVuY2UgZm9yIGxlZ2FjeSBtaWdyYXRpb25zLiAqL1xuY2xhc3MgTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2Uge1xuXG4gIC8qKiBAdHlwZSB7XCJsb2NhbHN0b3JhZ2VcIn0gKi9cbiAgbmFtZSA9IFwibG9jYWxzdG9yYWdlXCJcblxuICAvKipcbiAgICogQ3JlYXRlcyBsb2NhbFN0b3JhZ2UgcGVyc2lzdGVuY2UuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5kYXRhYmFzZU5hbWUgLSBEYXRhYmFzZSBuYW1lLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2RhdGFiYXNlTmFtZX0pIHtcbiAgICB0aGlzLmRhdGFiYXNlTmFtZSA9IGRhdGFiYXNlTmFtZVxuICAgIC8qKiBAdHlwZSB7QmV0dGVyTG9jYWxTdG9yYWdlIHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMuc3RvcmFnZSA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGxvY2FsU3RvcmFnZSBkYXRhYmFzZSBlbnRyeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBkZWxldGVkLlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKCkge1xuICAgIGF3YWl0IHRoaXMubG9jYWxTdG9yYWdlKCkuZGVsZXRlKHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgbG9jYWxTdG9yYWdlIGRhdGFiYXNlIGVudHJ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxVaW50OEFycmF5IHwgdW5kZWZpbmVkPn0gLSBQZXJzaXN0ZWQgYnl0ZXMuXG4gICAqL1xuICBhc3luYyBsb2FkKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmxvY2FsU3RvcmFnZSgpLmdldChzcWxpdGVXZWJQZXJzaXN0ZW5jZUtleSh0aGlzLmRhdGFiYXNlTmFtZSkpXG5cbiAgICBpZiAoY29udGVudCA9PT0gbnVsbCB8fCBjb250ZW50ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHJldHVybiBjb250ZW50XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgcmV0dXJuIG5ldyBVaW50OEFycmF5KGNvbnRlbnQpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtVaW50OEFycmF5fSAqLyAoY29udGVudClcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBkYXRhYmFzZSBieXRlcy5cbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBjb250ZW50IC0gRGF0YWJhc2UgYnl0ZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gc2F2ZWQuXG4gICAqL1xuICBhc3luYyBzYXZlKGNvbnRlbnQpIHtcbiAgICBhd2FpdCB0aGlzLmxvY2FsU3RvcmFnZSgpLnNldChzcWxpdGVXZWJQZXJzaXN0ZW5jZUtleSh0aGlzLmRhdGFiYXNlTmFtZSksIGNvbnRlbnQpXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGxlZ2FjeSBsb2NhbFN0b3JhZ2UgZGF0YWJhc2UgZXhpc3RzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIGNvbnRlbnQgZXhpc3RzLlxuICAgKi9cbiAgYXN5bmMgZXhpc3RzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5sb2NhbFN0b3JhZ2UoKS5nZXQoc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkodGhpcy5kYXRhYmFzZU5hbWUpKVxuXG4gICAgICByZXR1cm4gY29udGVudCAhPT0gdW5kZWZpbmVkICYmIGNvbnRlbnQgIT09IG51bGxcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsb2NhbFN0b3JhZ2Ugd3JhcHBlci5cbiAgICogQHJldHVybnMge0JldHRlckxvY2FsU3RvcmFnZX0gLSBTdG9yYWdlIHdyYXBwZXIuXG4gICAqL1xuICBsb2NhbFN0b3JhZ2UoKSB7XG4gICAgdGhpcy5zdG9yYWdlIHx8PSBuZXcgQmV0dGVyTG9jYWxTdG9yYWdlKClcblxuICAgIHJldHVybiB0aGlzLnN0b3JhZ2VcbiAgfVxufVxuXG4vKipcbiAqIFNlbGVjdHMgdGhlIHByZWZlcnJlZCBhdmFpbGFibGUgU1FMaXRlIHdlYiBwZXJzaXN0ZW5jZSBiYWNrZW5kLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGFyZ3MuZW52aXJvbm1lbnQgLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge0luZGV4ZWREYlBlcnNpc3RlbmNlfSBhcmdzLmluZGV4ZWREYlBlcnNpc3RlbmNlIC0gSW5kZXhlZERCIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKiBAcGFyYW0ge0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlfSBhcmdzLmxvY2FsU3RvcmFnZVBlcnNpc3RlbmNlIC0gTGVnYWN5IGxvY2FsU3RvcmFnZSBwZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHBhcmFtIHtPcGZzUGVyc2lzdGVuY2V9IGFyZ3Mub3Bmc1BlcnNpc3RlbmNlIC0gT1BGUyBwZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHJldHVybnMge1Byb21pc2U8U3FsaXRlV2ViUGVyc2lzdGVuY2U+fSAtIFNlbGVjdGVkIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdFN1cHBvcnRlZFBlcnNpc3RlbmNlKHtlbnZpcm9ubWVudCwgaW5kZXhlZERiUGVyc2lzdGVuY2UsIGxvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLCBvcGZzUGVyc2lzdGVuY2V9KSB7XG4gIGlmIChhd2FpdCBzdXBwb3J0c09wZnNQZXJzaXN0ZW5jZShlbnZpcm9ubWVudCkpIHJldHVybiBvcGZzUGVyc2lzdGVuY2VcbiAgaWYgKGF3YWl0IHN1cHBvcnRzSW5kZXhlZERiUGVyc2lzdGVuY2UoZW52aXJvbm1lbnQpKSByZXR1cm4gaW5kZXhlZERiUGVyc2lzdGVuY2VcblxuICByZXR1cm4gbG9jYWxTdG9yYWdlUGVyc2lzdGVuY2Vcbn1cblxuLyoqXG4gKiBNaWdyYXRlcyBhbnkgZXhpc3RpbmcgZGF0YWJhc2UgYnl0ZXMgaW50byB0aGUgc2VsZWN0ZWQgcGVyc2lzdGVuY2UgYmFja2VuZC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGF0YWJhc2VOYW1lIC0gRGF0YWJhc2UgbmFtZS5cbiAqIEBwYXJhbSB7U3FsaXRlV2ViUGVyc2lzdGVuY2V9IGFyZ3MuZGVzdGluYXRpb25QZXJzaXN0ZW5jZSAtIFNlbGVjdGVkIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGFyZ3MuZW52aXJvbm1lbnQgLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge3tkZWxldGU6ICgpID0+IFByb21pc2U8dm9pZD4sIGxvYWQ6ICgpID0+IFByb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59W119IGFyZ3Muc291cmNlUGVyc2lzdGVuY2VzIC0gUGVyc2lzdGVuY2UgYWRhcHRlcnMgdG8gc2NhbiBmb3IgZXhpc3RpbmcgYnl0ZXMuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIG1pZ3JhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbWlncmF0ZVBlcnNpc3RlZERhdGFiYXNlKHtkYXRhYmFzZU5hbWUsIGRlc3RpbmF0aW9uUGVyc2lzdGVuY2UsIGVudmlyb25tZW50LCBzb3VyY2VQZXJzaXN0ZW5jZXN9KSB7XG4gIGlmIChhd2FpdCBkZXN0aW5hdGlvblBlcnNpc3RlbmNlLmxvYWQoKSAhPT0gdW5kZWZpbmVkKSByZXR1cm5cblxuICBmb3IgKGNvbnN0IHNvdXJjZVBlcnNpc3RlbmNlIG9mIHNvdXJjZVBlcnNpc3RlbmNlcykge1xuICAgIGlmIChzb3VyY2VQZXJzaXN0ZW5jZSA9PT0gZGVzdGluYXRpb25QZXJzaXN0ZW5jZSkgY29udGludWVcblxuICAgIGNvbnN0IGRhdGFiYXNlQnl0ZXMgPSBhd2FpdCBsb2FkUGVyc2lzdGVuY2VJZkF2YWlsYWJsZShzb3VyY2VQZXJzaXN0ZW5jZSlcbiAgICBpZiAoZGF0YWJhc2VCeXRlcyA9PT0gdW5kZWZpbmVkKSBjb250aW51ZVxuXG4gICAgYXdhaXQgZGVzdGluYXRpb25QZXJzaXN0ZW5jZS5zYXZlKGRhdGFiYXNlQnl0ZXMpXG4gICAgYXdhaXQgZGVsZXRlU3FsaXRlV2ViUGVyc2lzdGVuY2VzKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50fSlcbiAgICBhd2FpdCBkZXN0aW5hdGlvblBlcnNpc3RlbmNlLnNhdmUoZGF0YWJhc2VCeXRlcylcbiAgICByZXR1cm5cbiAgfVxufVxuXG4vKipcbiAqIExvYWRzIGEgcGVyc2lzdGVuY2UgYmFja2VuZCwgaWdub3JpbmcgdW5hdmFpbGFibGUgYmFja2VuZCBlcnJvcnMuXG4gKiBAcGFyYW0ge3tsb2FkOiAoKSA9PiBQcm9taXNlPFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ+fX0gcGVyc2lzdGVuY2UgLSBQZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHJldHVybnMge1Byb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59IC0gUGVyc2lzdGVkIGJ5dGVzLCBpZiBhdmFpbGFibGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRQZXJzaXN0ZW5jZUlmQXZhaWxhYmxlKHBlcnNpc3RlbmNlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHBlcnNpc3RlbmNlLmxvYWQoKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbn1cblxuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIE9QRlMgcGVyc2lzdGVuY2UgaXMgdXNhYmxlLlxuICogQHBhcmFtIHtTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50fSBlbnZpcm9ubWVudCAtIEJyb3dzZXItbGlrZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgT1BGUyBjYW4gYmUgdXNlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3VwcG9ydHNPcGZzUGVyc2lzdGVuY2UoZW52aXJvbm1lbnQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBvcGZzRGlyZWN0b3J5KGVudmlyb25tZW50KVxuICAgIGNvbnN0IGZpbGVIYW5kbGUgPSBhd2FpdCBkaXJlY3RvcnkuZ2V0RmlsZUhhbmRsZShTVVBQT1JUX0NIRUNLX0ZJTEUsIHtjcmVhdGU6IHRydWV9KVxuICAgIGNvbnN0IHdyaXRhYmxlID0gYXdhaXQgZmlsZUhhbmRsZS5jcmVhdGVXcml0YWJsZSgpXG5cbiAgICBhd2FpdCB3cml0YWJsZS53cml0ZShhcnJheUJ1ZmZlckZyb21CeXRlcyhTVVBQT1JUX0NIRUNLX0JZVEVTKSlcbiAgICBhd2FpdCB3cml0YWJsZS5jbG9zZSgpXG5cbiAgICBjb25zdCBmaWxlID0gYXdhaXQgZmlsZUhhbmRsZS5nZXRGaWxlKClcbiAgICBjb25zdCByZWFkQmFjayA9IG5ldyBVaW50OEFycmF5KGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKSlcblxuICAgIGF3YWl0IGRpcmVjdG9yeS5yZW1vdmVFbnRyeShTVVBQT1JUX0NIRUNLX0ZJTEUpXG5cbiAgICByZXR1cm4gc2FtZUJ5dGVzKHJlYWRCYWNrLCBTVVBQT1JUX0NIRUNLX0JZVEVTKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgSW5kZXhlZERCIHBlcnNpc3RlbmNlIGlzIHVzYWJsZS5cbiAqIEBwYXJhbSB7U3FsaXRlV2ViUGVyc2lzdGVuY2VFbnZpcm9ubWVudH0gZW52aXJvbm1lbnQgLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIEluZGV4ZWREQiBjYW4gYmUgdXNlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3VwcG9ydHNJbmRleGVkRGJQZXJzaXN0ZW5jZShlbnZpcm9ubWVudCkge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gYXdhaXQgb3BlbkluZGV4ZWREYihlbnZpcm9ubWVudClcbiAgICBjb25zdCBzdG9yZSA9IGRhdGFiYXNlLnRyYW5zYWN0aW9uKFwiZGF0YWJhc2VzXCIsIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKFwiZGF0YWJhc2VzXCIpXG5cbiAgICBhd2FpdCBpbmRleGVkRGJSZXF1ZXN0KHN0b3JlLnB1dChTVVBQT1JUX0NIRUNLX0JZVEVTLCBTVVBQT1JUX0NIRUNLX0ZJTEUpKVxuXG4gICAgY29uc3QgcmVhZEJhY2sgPSBhd2FpdCBpbmRleGVkRGJSZXF1ZXN0KHN0b3JlLmdldChTVVBQT1JUX0NIRUNLX0ZJTEUpKVxuXG4gICAgYXdhaXQgaW5kZXhlZERiUmVxdWVzdChzdG9yZS5kZWxldGUoU1VQUE9SVF9DSEVDS19GSUxFKSlcbiAgICBkYXRhYmFzZS5jbG9zZSgpXG5cbiAgICByZXR1cm4gcmVhZEJhY2sgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIHNhbWVCeXRlcyhyZWFkQmFjaywgU1VQUE9SVF9DSEVDS19CWVRFUylcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBPcGVucyB0aGUgU1FMaXRlIHdlYiBJbmRleGVkREIgZGF0YWJhc2UuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICogQHJldHVybnMge1Byb21pc2U8SURCRGF0YWJhc2U+fSAtIE9wZW4gZGF0YWJhc2UuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG9wZW5JbmRleGVkRGIoZW52aXJvbm1lbnQpIHtcbiAgY29uc3QgaW5kZXhlZERiID0gaW5kZXhlZERiRnJvbUVudmlyb25tZW50KGVudmlyb25tZW50KVxuXG4gIGlmICghaW5kZXhlZERiIHx8IHR5cGVvZiBpbmRleGVkRGIub3BlbiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJJbmRleGVkREIgaXMgbm90IGF2YWlsYWJsZVwiKVxuXG4gIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkRGIub3BlbihcIlZlbG9jaW91c0RhdGFiYXNlRHJpdmVyc1NxbGl0ZVdlYlwiLCAxKVxuICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9ICgpID0+IHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IHJlcXVlc3QucmVzdWx0XG5cbiAgICBpZiAoIWRhdGFiYXNlLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoXCJkYXRhYmFzZXNcIikpIGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3JlKFwiZGF0YWJhc2VzXCIpXG4gIH1cblxuICByZXR1cm4gYXdhaXQgaW5kZXhlZERiUmVxdWVzdChyZXF1ZXN0KVxufVxuXG4vKipcbiAqIFJlc29sdmVzIGFuIEluZGV4ZWREQiByZXF1ZXN0LlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7SURCUmVxdWVzdDxUPn0gcmVxdWVzdCAtIEluZGV4ZWREQiByZXF1ZXN0LlxuICogQHJldHVybnMge1Byb21pc2U8VD59IC0gUmVxdWVzdCByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGluZGV4ZWREYlJlcXVlc3QocmVxdWVzdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdClcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvciB8fCBuZXcgRXJyb3IoXCJJbmRleGVkREIgcmVxdWVzdCBmYWlsZWRcIikpXG4gIH0pXG59XG5cbi8qKlxuICogRGVsZXRlcyBhIHBlcnNpc3RlbmNlIGJhY2tlbmQsIGlnbm9yaW5nIHVuYXZhaWxhYmxlIGJhY2tlbmQgZXJyb3JzLlxuICogQHBhcmFtIHt7ZGVsZXRlOiAoKSA9PiBQcm9taXNlPHZvaWQ+fX0gcGVyc2lzdGVuY2UgLSBQZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBkZWxldGlvbiB3YXMgYXR0ZW1wdGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZWxldGVQZXJzaXN0ZW5jZUlmQXZhaWxhYmxlKHBlcnNpc3RlbmNlKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcGVyc2lzdGVuY2UuZGVsZXRlKClcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIHVuYXZhaWxhYmxlIGJhY2tlbmRzIHNvIHJlc2V0IGNsZWFycyBldmVyeSBiYWNrZW5kIHRoZSBicm93c2VyIGNhbiBhY2Nlc3MuXG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIE9QRlMgcm9vdCBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICogQHJldHVybnMge1Byb21pc2U8RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZT59IC0gT1BGUyByb290IGRpcmVjdG9yeS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gb3Bmc0RpcmVjdG9yeShlbnZpcm9ubWVudCkge1xuICBjb25zdCBuYXZpZ2F0b3JPYmplY3QgPSBuYXZpZ2F0b3JGcm9tRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpXG4gIGNvbnN0IHN0b3JhZ2UgPSBuYXZpZ2F0b3JPYmplY3Quc3RvcmFnZVxuXG4gIGlmICghc3RvcmFnZSB8fCB0eXBlb2Ygc3RvcmFnZS5nZXREaXJlY3RvcnkgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiT1BGUyBpcyBub3QgYXZhaWxhYmxlXCIpXG5cbiAgcmV0dXJuIGF3YWl0IHN0b3JhZ2UuZ2V0RGlyZWN0b3J5KClcbn1cblxuLyoqXG4gKiBHZXRzIG5hdmlnYXRvciBmcm9tIGVudmlyb25tZW50LlxuICogQHBhcmFtIHtTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50fSBlbnZpcm9ubWVudCAtIEJyb3dzZXItbGlrZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIHt7c3RvcmFnZT86IHtnZXREaXJlY3Rvcnk/OiAoKSA9PiBQcm9taXNlPEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU+fX19IC0gTmF2aWdhdG9yLWxpa2Ugb2JqZWN0LlxuICovXG5mdW5jdGlvbiBuYXZpZ2F0b3JGcm9tRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpIHtcbiAgY29uc3QgY2FuZGlkYXRlID0gZW52aXJvbm1lbnQubmF2aWdhdG9yXG5cbiAgaWYgKCFjYW5kaWRhdGUgfHwgdHlwZW9mIGNhbmRpZGF0ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHt9XG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7e3N0b3JhZ2U/OiB7Z2V0RGlyZWN0b3J5PzogKCkgPT4gUHJvbWlzZTxGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlPn19fSAqLyAoY2FuZGlkYXRlKVxufVxuXG4vKipcbiAqIEdldHMgSW5kZXhlZERCIGZyb20gZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICogQHJldHVybnMge3tvcGVuPzogKG5hbWU6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcikgPT4gSURCT3BlbkRCUmVxdWVzdH0gfCB1bmRlZmluZWR9IC0gSW5kZXhlZERCLWxpa2Ugb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpbmRleGVkRGJGcm9tRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpIHtcbiAgY29uc3QgY2FuZGlkYXRlID0gZW52aXJvbm1lbnQuaW5kZXhlZERCXG5cbiAgaWYgKCFjYW5kaWRhdGUgfHwgdHlwZW9mIGNhbmRpZGF0ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIHJldHVybiAvKiogQHR5cGUge3tvcGVuPzogKG5hbWU6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcikgPT4gSURCT3BlbkRCUmVxdWVzdH19ICovIChjYW5kaWRhdGUpXG59XG5cbi8qKlxuICogQ29udmVydHMgYnl0ZXMgdG8gYSBzdGFuZGFsb25lIEFycmF5QnVmZmVyIGZvciBicm93c2VyIGZpbGUgd3JpdGVzLlxuICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlcyAtIEJ5dGVzIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IC0gU3RhbmRhbG9uZSBBcnJheUJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gYXJyYXlCdWZmZXJGcm9tQnl0ZXMoYnl0ZXMpIHtcbiAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmJ5dGVMZW5ndGgpXG5cbiAgY29weS5zZXQoYnl0ZXMpXG5cbiAgcmV0dXJuIGNvcHkuYnVmZmVyXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gZXJyb3IgaXMgYSBmaWxlLW5vdC1mb3VuZCBlcnJvci5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyb3IgLSBFcnJvciBjYW5kaWRhdGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSBlcnJvciBpcyBub3QgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGlzTm90Rm91bmRFcnJvcihlcnJvcikge1xuICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSBcIk5vdEZvdW5kRXJyb3JcIlxufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBieXRlIGFycmF5cy5cbiAqIEBwYXJhbSB7VWludDhBcnJheX0gbGVmdCAtIExlZnQgYnl0ZXMuXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHJpZ2h0IC0gUmlnaHQgYnl0ZXMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGJ5dGVzIG1hdGNoLlxuICovXG5mdW5jdGlvbiBzYW1lQnl0ZXMobGVmdCwgcmlnaHQpIHtcbiAgaWYgKGxlZnQubGVuZ3RoICE9PSByaWdodC5sZW5ndGgpIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiBsZWZ0LmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSByaWdodFtpbmRleF0pXG59XG4iXX0=
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export const CLOSED_CONNECTION: unique symbol;
|
|
2
1
|
/**
|
|
3
2
|
* PendingCheckout type.
|
|
4
3
|
* @typedef {object} PendingCheckout
|
|
@@ -12,6 +11,7 @@ export const CLOSED_CONNECTION: unique symbol;
|
|
|
12
11
|
* @property {number | null} timeoutMillis - Milliseconds to wait before rejecting, or null when disabled.
|
|
13
12
|
* @property {ReturnType<typeof setTimeout> | undefined} timeoutTimer - Timer that rejects the pending checkout.
|
|
14
13
|
*/
|
|
14
|
+
export const CLOSED_CONNECTION: unique symbol;
|
|
15
15
|
export default class VelociousDatabasePoolAsyncTrackedMultiConnection extends BasePool {
|
|
16
16
|
/**
|
|
17
17
|
* Global fallback connections keyed by configuration instance and pool identifier.
|
|
@@ -39,6 +39,16 @@ export default class VelociousDatabasePoolAsyncTrackedMultiConnection extends Ba
|
|
|
39
39
|
* @type {import("../drivers/base.js").default | undefined}
|
|
40
40
|
*/
|
|
41
41
|
_testSharedConnection: import("../drivers/base.js").default | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Dynamically resolves the connection eligible for in-process test request sharing.
|
|
44
|
+
* @type {(() => import("../drivers/base.js").default | undefined) | undefined}
|
|
45
|
+
*/
|
|
46
|
+
_testSharedConnectionProvider: (() => import("../drivers/base.js").default | undefined) | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Identifies the lifecycle that installed the current shared connection or provider.
|
|
49
|
+
* @type {import("./base.js").TestSharedConnectionRegistration | undefined}
|
|
50
|
+
*/
|
|
51
|
+
_testSharedConnectionRegistration: import("./base.js").TestSharedConnectionRegistration | undefined;
|
|
42
52
|
/**
|
|
43
53
|
* Connections.
|
|
44
54
|
* @type {import("../drivers/base.js").default[]} */
|
|
@@ -294,6 +304,24 @@ export default class VelociousDatabasePoolAsyncTrackedMultiConnection extends Ba
|
|
|
294
304
|
* @returns {void} - No return value.
|
|
295
305
|
*/
|
|
296
306
|
setGlobalConnection(connection: import("../drivers/base.js").default): void;
|
|
307
|
+
/**
|
|
308
|
+
* Set a shared connection for test mode so that HTTP handlers running
|
|
309
|
+
* in the same process can reuse the test runner's database connection.
|
|
310
|
+
* @param {import("../drivers/base.js").default} connection - Shared connection.
|
|
311
|
+
* @returns {import("./base.js").TestSharedConnectionRegistration} - Opaque registration handle.
|
|
312
|
+
*/
|
|
313
|
+
setTestSharedConnection(connection: import("../drivers/base.js").default): import("./base.js").TestSharedConnectionRegistration;
|
|
314
|
+
/**
|
|
315
|
+
* Sets a provider that is evaluated when an in-process test request is dispatched.
|
|
316
|
+
* @param {() => import("../drivers/base.js").default | undefined} provider - Shared connection provider.
|
|
317
|
+
* @returns {import("./base.js").TestSharedConnectionRegistration} - Opaque registration handle.
|
|
318
|
+
*/
|
|
319
|
+
setTestSharedConnectionProvider(provider: () => import("../drivers/base.js").default | undefined): import("./base.js").TestSharedConnectionRegistration;
|
|
320
|
+
/**
|
|
321
|
+
* Resolves the connection currently eligible for in-process test request sharing.
|
|
322
|
+
* @returns {import("../drivers/base.js").default | undefined} - Shared connection.
|
|
323
|
+
*/
|
|
324
|
+
testSharedConnection(): import("../drivers/base.js").default | undefined;
|
|
297
325
|
/**
|
|
298
326
|
* Runs debug connection snapshots.
|
|
299
327
|
* @param {number} now - Current timestamp.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async-tracked-multi-connection.d.ts","sourceRoot":"","sources":["../../../../src/database/pool/async-tracked-multi-connection.js"],"names":[],"mappings":"AAKA,8CAAoE;AAQpE
|
|
1
|
+
{"version":3,"file":"async-tracked-multi-connection.d.ts","sourceRoot":"","sources":["../../../../src/database/pool/async-tracked-multi-connection.js"],"names":[],"mappings":"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"}
|