velocious 1.0.643 → 1.0.645
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 +21 -10
- package/build/authorization/ability.js +36 -13
- package/build/background-jobs/adapter.js +9 -0
- package/build/background-jobs/main.js +35 -10
- package/build/background-jobs/store.js +217 -38
- package/build/background-jobs/types.js +15 -0
- package/build/configuration-types.js +1 -1
- package/build/configuration.js +45 -9
- package/build/database/drivers/base-column.js +8 -0
- package/build/database/drivers/mssql/sql/update.js +1 -3
- package/build/database/drivers/mysql/sql/update.js +1 -3
- package/build/database/drivers/pgsql/column.js +22 -0
- package/build/database/drivers/pgsql/sql/update.js +1 -3
- package/build/database/drivers/sqlite/sql/alter-table.js +11 -1
- package/build/database/drivers/sqlite/sql/update.js +1 -3
- package/build/database/query/index.js +2 -2
- package/build/database/query/model-class-query.js +26 -10
- package/build/database/query/preloader/has-many.js +4 -1
- package/build/database/query/query-data.js +2 -1
- package/build/database/query/update-base.js +14 -0
- package/build/database/query/with-count.js +3 -1
- package/build/database/record/acts-as-list.js +37 -13
- package/build/database/record/attachments/store.js +336 -26
- package/build/database/record/auditing.js +6 -3
- package/build/database/record/index.js +197 -42
- package/build/database/record/instance-relationships/belongs-to.js +2 -1
- package/build/database/record/validators/uniqueness.js +8 -5
- package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -8
- package/build/frontend-model-controller.js +136 -53
- package/build/frontend-model-resource/base-resource.js +87 -37
- package/build/frontend-model-resource/velocious-attachment-resource.js +98 -31
- package/build/frontend-models/base.js +307 -59
- package/build/frontend-models/preloader.js +6 -3
- package/build/frontend-models/query.js +15 -6
- package/build/frontend-models/resource-definition.js +21 -2
- package/build/frontend-models/use-destroyed-event.js +1 -1
- package/build/frontend-models/use-model-class-event.js +2 -2
- package/build/frontend-models/use-updated-event.js +1 -1
- package/build/frontend-models/websocket-channel.js +256 -93
- package/build/frontend-models/websocket-publishers.js +218 -18
- package/build/http-server/client/websocket-session.js +13 -1
- package/build/http-server/websocket-channel.js +15 -2
- package/build/src/authorization/ability.d.ts +9 -3
- package/build/src/authorization/ability.d.ts.map +1 -1
- package/build/src/authorization/ability.js +33 -14
- package/build/src/background-jobs/adapter.d.ts +6 -0
- package/build/src/background-jobs/adapter.d.ts.map +1 -1
- package/build/src/background-jobs/adapter.js +9 -1
- package/build/src/background-jobs/main.d.ts +6 -0
- package/build/src/background-jobs/main.d.ts.map +1 -1
- package/build/src/background-jobs/main.js +34 -11
- package/build/src/background-jobs/store.d.ts +66 -12
- package/build/src/background-jobs/store.d.ts.map +1 -1
- package/build/src/background-jobs/store.js +191 -35
- package/build/src/background-jobs/types.d.ts +55 -0
- package/build/src/background-jobs/types.d.ts.map +1 -1
- package/build/src/background-jobs/types.js +16 -1
- package/build/src/configuration-types.d.ts +3 -3
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +2 -2
- package/build/src/configuration.d.ts +18 -8
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +38 -7
- package/build/src/database/drivers/base-column.d.ts +5 -0
- package/build/src/database/drivers/base-column.d.ts.map +1 -1
- package/build/src/database/drivers/base-column.js +8 -1
- package/build/src/database/drivers/mssql/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/update.js +2 -4
- package/build/src/database/drivers/mysql/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/sql/update.js +2 -4
- package/build/src/database/drivers/pgsql/column.d.ts +5 -0
- package/build/src/database/drivers/pgsql/column.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/column.js +19 -1
- package/build/src/database/drivers/pgsql/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/sql/update.js +2 -4
- package/build/src/database/drivers/sqlite/sql/alter-table.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/alter-table.js +6 -2
- package/build/src/database/drivers/sqlite/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/update.js +2 -4
- package/build/src/database/query/index.d.ts +4 -4
- package/build/src/database/query/index.d.ts.map +1 -1
- package/build/src/database/query/index.js +3 -3
- package/build/src/database/query/model-class-query.d.ts +8 -2
- package/build/src/database/query/model-class-query.d.ts.map +1 -1
- package/build/src/database/query/model-class-query.js +25 -11
- package/build/src/database/query/preloader/has-many.d.ts.map +1 -1
- package/build/src/database/query/preloader/has-many.js +4 -2
- package/build/src/database/query/query-data.d.ts.map +1 -1
- package/build/src/database/query/query-data.js +3 -2
- package/build/src/database/query/update-base.d.ts +7 -0
- package/build/src/database/query/update-base.d.ts.map +1 -1
- package/build/src/database/query/update-base.js +13 -1
- package/build/src/database/query/with-count.d.ts.map +1 -1
- package/build/src/database/query/with-count.js +3 -2
- package/build/src/database/record/acts-as-list.d.ts.map +1 -1
- package/build/src/database/record/acts-as-list.js +35 -14
- package/build/src/database/record/attachments/store.d.ts +67 -0
- package/build/src/database/record/attachments/store.d.ts.map +1 -1
- package/build/src/database/record/attachments/store.js +301 -25
- package/build/src/database/record/auditing.d.ts.map +1 -1
- package/build/src/database/record/auditing.js +7 -4
- package/build/src/database/record/index.d.ts +78 -26
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +171 -42
- package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/belongs-to.js +3 -2
- package/build/src/database/record/validators/uniqueness.d.ts.map +1 -1
- package/build/src/database/record/validators/uniqueness.js +8 -6
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +4 -4
- 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 +24 -12
- package/build/src/frontend-model-controller.d.ts +29 -8
- package/build/src/frontend-model-controller.d.ts.map +1 -1
- package/build/src/frontend-model-controller.js +122 -51
- package/build/src/frontend-model-resource/base-resource.d.ts +51 -24
- package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/base-resource.js +83 -37
- package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts +45 -26
- package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/velocious-attachment-resource.js +89 -31
- package/build/src/frontend-models/base.d.ts +53 -20
- package/build/src/frontend-models/base.d.ts.map +1 -1
- package/build/src/frontend-models/base.js +275 -59
- package/build/src/frontend-models/preloader.d.ts.map +1 -1
- package/build/src/frontend-models/preloader.js +6 -4
- package/build/src/frontend-models/query.d.ts +2 -2
- package/build/src/frontend-models/query.d.ts.map +1 -1
- package/build/src/frontend-models/query.js +14 -7
- package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
- package/build/src/frontend-models/resource-definition.js +20 -3
- package/build/src/frontend-models/use-destroyed-event.d.ts +1 -1
- package/build/src/frontend-models/use-destroyed-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-destroyed-event.js +2 -2
- package/build/src/frontend-models/use-model-class-event.d.ts +2 -2
- package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-model-class-event.js +3 -3
- package/build/src/frontend-models/use-updated-event.d.ts +1 -1
- package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-updated-event.js +2 -2
- package/build/src/frontend-models/websocket-channel.d.ts +60 -41
- package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-channel.js +225 -85
- package/build/src/frontend-models/websocket-publishers.d.ts +9 -0
- package/build/src/frontend-models/websocket-publishers.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-publishers.js +190 -19
- package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-session.js +11 -2
- package/build/src/http-server/websocket-channel.d.ts +20 -8
- package/build/src/http-server/websocket-channel.d.ts.map +1 -1
- package/build/src/http-server/websocket-channel.js +15 -3
- package/build/src/sync/assets/cache.d.ts +288 -0
- package/build/src/sync/assets/cache.d.ts.map +1 -0
- package/build/src/sync/assets/cache.js +883 -0
- package/build/src/sync/assets/types.d.ts +199 -0
- package/build/src/sync/assets/types.d.ts.map +1 -0
- package/build/src/sync/assets/types.js +56 -0
- package/build/src/sync/sync-api-client.d.ts.map +1 -1
- package/build/src/sync/sync-api-client.js +4 -3
- package/build/src/sync/sync-client.d.ts.map +1 -1
- package/build/src/sync/sync-client.js +3 -2
- package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
- package/build/src/sync/sync-envelope-replay-service.js +6 -5
- package/build/src/sync/sync-publisher.d.ts.map +1 -1
- package/build/src/sync/sync-publisher.js +4 -3
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts +2 -2
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts.map +1 -1
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +3 -3
- package/build/src/testing/test-profiler.d.ts +4 -4
- package/build/src/testing/test-profiler.d.ts.map +1 -1
- package/build/src/testing/test-profiler.js +3 -3
- package/build/src/testing/test-runner.d.ts +279 -117
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +503 -933
- package/build/src/testing/test.d.ts +11 -72
- package/build/src/testing/test.d.ts.map +1 -1
- package/build/src/testing/test.js +131 -284
- package/build/src/testing/velocious-attempt-executor.d.ts +54 -0
- package/build/src/testing/velocious-attempt-executor.d.ts.map +1 -0
- package/build/src/testing/velocious-attempt-executor.js +408 -0
- package/build/src/testing/velocious-runner-reporter.d.ts +67 -0
- package/build/src/testing/velocious-runner-reporter.d.ts.map +1 -0
- package/build/src/testing/velocious-runner-reporter.js +240 -0
- package/build/src/testing/velocious-suite-hook-executor.d.ts +19 -0
- package/build/src/testing/velocious-suite-hook-executor.d.ts.map +1 -0
- package/build/src/testing/velocious-suite-hook-executor.js +41 -0
- package/build/src/testing/velocious-test-arguments.d.ts +39 -0
- package/build/src/testing/velocious-test-arguments.d.ts.map +1 -0
- package/build/src/testing/velocious-test-arguments.js +55 -0
- package/build/src/utils/model-primary-key.d.ts +73 -0
- package/build/src/utils/model-primary-key.d.ts.map +1 -0
- package/build/src/utils/model-primary-key.js +144 -0
- package/build/src/utils/sha256-bytes-hex.d.ts +7 -0
- package/build/src/utils/sha256-bytes-hex.d.ts.map +1 -0
- package/build/src/utils/sha256-bytes-hex.js +117 -0
- package/build/src/utils/sha256-hex.d.ts +2 -4
- package/build/src/utils/sha256-hex.d.ts.map +1 -1
- package/build/src/utils/sha256-hex.js +6 -120
- package/build/sync/assets/cache.js +998 -0
- package/build/sync/assets/types.js +62 -0
- package/build/sync/sync-api-client.js +3 -2
- package/build/sync/sync-client.js +2 -1
- package/build/sync/sync-envelope-replay-service.js +5 -4
- package/build/sync/sync-publisher.js +3 -2
- package/build/testing/browser-frontend-model-event-hook-scenarios.js +2 -2
- package/build/testing/test-profiler.js +2 -2
- package/build/testing/test-runner.js +496 -990
- package/build/testing/test.js +164 -306
- package/build/testing/velocious-attempt-executor.js +441 -0
- package/build/testing/velocious-runner-reporter.js +264 -0
- package/build/testing/velocious-suite-hook-executor.js +43 -0
- package/build/testing/velocious-test-arguments.js +64 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/utils/model-primary-key.js +171 -0
- package/build/utils/sha256-bytes-hex.js +132 -0
- package/build/utils/sha256-hex.js +7 -135
- package/package.json +5 -4
- package/src/authorization/ability.js +36 -13
- package/src/background-jobs/adapter.js +9 -0
- package/src/background-jobs/main.js +35 -10
- package/src/background-jobs/store.js +217 -38
- package/src/background-jobs/types.js +15 -0
- package/src/configuration-types.js +1 -1
- package/src/configuration.js +45 -9
- package/src/database/drivers/base-column.js +8 -0
- package/src/database/drivers/mssql/sql/update.js +1 -3
- package/src/database/drivers/mysql/sql/update.js +1 -3
- package/src/database/drivers/pgsql/column.js +22 -0
- package/src/database/drivers/pgsql/sql/update.js +1 -3
- package/src/database/drivers/sqlite/sql/alter-table.js +11 -1
- package/src/database/drivers/sqlite/sql/update.js +1 -3
- package/src/database/query/index.js +2 -2
- package/src/database/query/model-class-query.js +26 -10
- package/src/database/query/preloader/has-many.js +4 -1
- package/src/database/query/query-data.js +2 -1
- package/src/database/query/update-base.js +14 -0
- package/src/database/query/with-count.js +3 -1
- package/src/database/record/acts-as-list.js +37 -13
- package/src/database/record/attachments/store.js +336 -26
- package/src/database/record/auditing.js +6 -3
- package/src/database/record/index.js +197 -42
- package/src/database/record/instance-relationships/belongs-to.js +2 -1
- package/src/database/record/validators/uniqueness.js +8 -5
- package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -8
- package/src/frontend-model-controller.js +136 -53
- package/src/frontend-model-resource/base-resource.js +87 -37
- package/src/frontend-model-resource/velocious-attachment-resource.js +98 -31
- package/src/frontend-models/base.js +307 -59
- package/src/frontend-models/preloader.js +6 -3
- package/src/frontend-models/query.js +15 -6
- package/src/frontend-models/resource-definition.js +21 -2
- package/src/frontend-models/use-destroyed-event.js +1 -1
- package/src/frontend-models/use-model-class-event.js +2 -2
- package/src/frontend-models/use-updated-event.js +1 -1
- package/src/frontend-models/websocket-channel.js +256 -93
- package/src/frontend-models/websocket-publishers.js +218 -18
- package/src/http-server/client/websocket-session.js +13 -1
- package/src/http-server/websocket-channel.js +15 -2
- package/src/sync/assets/cache.js +998 -0
- package/src/sync/assets/types.js +62 -0
- package/src/sync/sync-api-client.js +3 -2
- package/src/sync/sync-client.js +2 -1
- package/src/sync/sync-envelope-replay-service.js +5 -4
- package/src/sync/sync-publisher.js +3 -2
- package/src/testing/browser-frontend-model-event-hook-scenarios.js +2 -2
- package/src/testing/test-profiler.js +2 -2
- package/src/testing/test-runner.js +496 -990
- package/src/testing/test.js +164 -306
- package/src/testing/velocious-attempt-executor.js +441 -0
- package/src/testing/velocious-runner-reporter.js +264 -0
- package/src/testing/velocious-suite-hook-executor.js +43 -0
- package/src/testing/velocious-test-arguments.js +64 -0
- package/src/utils/model-primary-key.js +171 -0
- package/src/utils/sha256-bytes-hex.js +132 -0
- package/src/utils/sha256-hex.js +7 -135
- package/build/src/testing/testing-package-adapter.d.ts +0 -9
- package/build/src/testing/testing-package-adapter.d.ts.map +0 -1
- package/build/src/testing/testing-package-adapter.js +0 -69
- package/build/testing/testing-package-adapter.js +0 -76
- package/src/testing/testing-package-adapter.js +0 -76
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-many.d.ts","sourceRoot":"","sources":["../../../../../src/database/query/preloader/has-many.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"has-many.d.ts","sourceRoot":"","sources":["../../../../../src/database/query/preloader/has-many.js"],"names":[],"mappings":"AAKA,OAAO,kBAAkB,MAAM,gBAAgB,CAAA;AAI/C;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,YAAY,EALhD,OAAO,wCAAwC,EAAE,OAKD,EAAE,iBAAiB,EAJnE,cAAc,uBAAuB,EAAE,OAI4B,EAAE,gBAAgB,EAHrF,cAAc,uBAAuB,EAAE,OAG8C,GAFnF,MAAM,CAyBlB;AAED,MAAM,CAAC,OAAO,OAAO,sCAAsC;IAWlD,MAAM;IACN,YAAY;IACZ,SAAS;IAZhB;;;;;;OAMG;IACH,YAAY,EAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAC,EAJvD;QAAwD,MAAM,EAAtD,OAAO,uBAAuB,EAAE,OAAO,EAAE,CACjD;QAAuE,YAAY,EAA3E,OAAO,wCAAwC,EAAE,OAAO,CAChE;QAAkC,SAAS,AAA3C,CACF,EADU,kBAAkB,CAC5B;KACyD,EAMzD;IAED;;;OAGG;IACG,GAAG,IAFI,OAAO,CAAC,OAAO,uBAAuB,EAAE,OAAO,EAAE,CAAC,CAQ9D;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,gBAAgB,EAJhB,cAAc,uBAAuB,EAAE,OAIvB,EAAE,cAAc,EAHhC,MAAM,EAG0B,GAF9B;QAAC,YAAY,EAAE,OAAO,uBAAuB,EAAE,OAAO,EAAE,CAAC;QAAC,gBAAgB,EAAE,OAAO,uBAAuB,EAAE,OAAO,EAAE,CAAA;KAAC,CA0BlI;IAED;;;OAGG;IACG,WAAW,IAFJ,OAAO,CAAC,OAAO,uBAAuB,EAAE,OAAO,EAAE,CAAC,CAiK9D;IAED;;;OAGG;IACG,UAAU,IAFH,OAAO,CAAC,OAAO,uBAAuB,EAAE,OAAO,EAAE,CAAC,CAiG9D;CACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// @ts-check
|
|
2
|
+
import { scalarModelPrimaryKey } from "../../../utils/model-primary-key.js";
|
|
2
3
|
import ensureModelClassInitialized from "./ensure-model-class-initialized.js";
|
|
3
4
|
import PreloaderSelection from "./selection.js";
|
|
4
5
|
import preloadQueryForModel, { bindPreloadModelClass } from "./query-for-model.js";
|
|
@@ -151,7 +152,8 @@ export default class VelociousDatabaseQueryPreloaderHasMany {
|
|
|
151
152
|
const throughModels = await throughQuery.toArray();
|
|
152
153
|
for (const throughModel of throughModels) {
|
|
153
154
|
const parentId = /** @type {string | number} */ (throughModel.readColumn(throughForeignKey));
|
|
154
|
-
const
|
|
155
|
+
const throughPrimaryKey = scalarModelPrimaryKey(throughModelClass.primaryKey(), `Has-many-through preload for ${throughModelClass.name}`);
|
|
156
|
+
const throughId = /** @type {string | number} */ (throughModel.readColumn(throughPrimaryKey));
|
|
155
157
|
if (!(parentId in parentToTargetIds))
|
|
156
158
|
parentToTargetIds[parentId] = [];
|
|
157
159
|
parentToTargetIds[parentId].push(throughId);
|
|
@@ -288,4 +290,4 @@ export default class VelociousDatabaseQueryPreloaderHasMany {
|
|
|
288
290
|
return [...satisfiedTargets, ...targetModels];
|
|
289
291
|
}
|
|
290
292
|
}
|
|
291
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLW1hbnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvcHJlbG9hZGVyL2hhcy1tYW55LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLDJCQUEyQixNQUFNLHFDQUFxQyxDQUFBO0FBQzdFLE9BQU8sa0JBQWtCLE1BQU0sZ0JBQWdCLENBQUE7QUFDL0MsT0FBTyxvQkFBb0IsRUFBRSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDbEYsT0FBTyxhQUFhLE1BQU0sbUNBQW1DLENBQUE7QUFFN0Q7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDhCQUE4QixDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0I7SUFDOUYsNEZBQTRGO0lBQzVGLGlHQUFpRztJQUNqRywrRkFBK0Y7SUFDL0YsTUFBTSxrQkFBa0IsR0FBRyxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtJQUUvRCxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDdkIsT0FBTyxnQkFBZ0IsQ0FBQywrQkFBK0IsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksa0JBQWtCLENBQUE7SUFDckcsQ0FBQztJQUVELEtBQUssTUFBTSxrQkFBa0IsSUFBSSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7UUFDckUsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxXQUFXO1lBQUUsU0FBUTtRQUV6RCxNQUFNLDRCQUE0QixHQUFHLGtCQUFrQixDQUFDLG1CQUFtQixFQUFFLENBQUE7UUFFN0UsSUFBSSxDQUFDLDRCQUE0QjtZQUFFLFNBQVE7UUFFM0MsSUFBSSw0QkFBNEIsQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLGlCQUFpQixDQUFDLGlDQUFpQyxFQUFFLEVBQUUsQ0FBQztZQUMvSCxPQUFPLGtCQUFrQixDQUFDLDRCQUE0QixDQUFDLEVBQUMsVUFBVSxF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QUFDO1lBQzVDLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFMUQsS0FBSyxNQUFNLEtBQUssSUFBSSx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQTtnQkFFOUYsd0VBQXdFO2dCQUN4RSx5RUFBeUU7Z0JBQ3pFLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO2dCQUNoRCxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDdEMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFBO0lBQy9DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgZW5zdXJlTW9kZWxDbGFzc0luaXRpYWxpemVkIGZyb20gXCIuL2Vuc3VyZS1tb2RlbC1jbGFzcy1pbml0aWFsaXplZC5qc1wiXG5pbXBvcnQgUHJlbG9hZGVyU2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvbi5qc1wiXG5pbXBvcnQgcHJlbG9hZFF1ZXJ5Rm9yTW9kZWwsIHsgYmluZFByZWxvYWRNb2RlbENsYXNzIH0gZnJvbSBcIi4vcXVlcnktZm9yLW1vZGVsLmpzXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSB0YXJnZXQgY29sdW1uIHRoYXQgcmVmZXJlbmNlcyB0aGUgdGhyb3VnaCBtb2RlbC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vcmVjb3JkL3JlbGF0aW9uc2hpcHMvaGFzLW1hbnkuanNcIikuZGVmYXVsdH0gcmVsYXRpb25zaGlwIC0gSGFzLW1hbnkgdGhyb3VnaCByZWxhdGlvbnNoaXAuXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gdGhyb3VnaE1vZGVsQ2xhc3MgLSBNb2RlbCB1c2VkIGJ5IHRoZSB0aHJvdWdoIHJlbGF0aW9uc2hpcC5cbiAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSB0YXJnZXRNb2RlbENsYXNzIC0gTW9kZWwgbG9hZGVkIGJ5IHRoZSB0aHJvdWdoIHJlbGF0aW9uc2hpcC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRhcmdldCBtb2RlbCBmb3JlaWduIGtleSBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNNYW55VGhyb3VnaFRhcmdldEZvcmVpZ25LZXkocmVsYXRpb25zaGlwLCB0aHJvdWdoTW9kZWxDbGFzcywgdGFyZ2V0TW9kZWxDbGFzcykge1xuICAvLyBBbiBleHBsaWNpdCBmb3JlaWduIGtleSBvbiB0aGUgaGFzLW1hbnkgbmFtZXMgdGhlIGV4YWN0IHRhcmdldCBjb2x1bW4gdGhhdCByZWZlcmVuY2VzIHRoZVxuICAvLyB0aHJvdWdoIG1vZGVsIOKAlCBob25vciBpdC4gVGhlIHRhcmdldCBjYW4gaGF2ZSBzZXZlcmFsIGJlbG9uZ3MtdG8gcG9pbnRpbmcgYXQgdGhlIHRocm91Z2ggbW9kZWxcbiAgLy8gKGUuZy4gYSBkZWZhdWx0IHBsdXMgYW4gYWx0ZXJuYXRlKSwgc28gcGlja2luZyB0aGUgZmlyc3QgbWF0Y2ggd291bGQgb3RoZXJ3aXNlIGJlIGFtYmlndW91cy5cbiAgY29uc3QgZXhwbGljaXRGb3JlaWduS2V5ID0gcmVsYXRpb25zaGlwLmdldEV4cGxpY2l0Rm9yZWlnbktleSgpXG5cbiAgaWYgKGV4cGxpY2l0Rm9yZWlnbktleSkge1xuICAgIHJldHVybiB0YXJnZXRNb2RlbENsYXNzLmdldEF0dHJpYnV0ZU5hbWVUb0NvbHVtbk5hbWVNYXAoKVtleHBsaWNpdEZvcmVpZ25LZXldIHx8IGV4cGxpY2l0Rm9yZWlnbktleVxuICB9XG5cbiAgZm9yIChjb25zdCB0YXJnZXRSZWxhdGlvbnNoaXAgb2YgdGFyZ2V0TW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBzKCkpIHtcbiAgICBpZiAodGFyZ2V0UmVsYXRpb25zaGlwLmdldFR5cGUoKSAhPSBcImJlbG9uZ3NUb1wiKSBjb250aW51ZVxuXG4gICAgY29uc3QgcmVsYXRpb25zaGlwVGFyZ2V0TW9kZWxDbGFzcyA9IHRhcmdldFJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgIGlmICghcmVsYXRpb25zaGlwVGFyZ2V0TW9kZWxDbGFzcykgY29udGludWVcblxuICAgIGlmIChyZWxhdGlvbnNoaXBUYXJnZXRNb2RlbENsYXNzLmNhbm9uaWNhbFJlY29yZE1ldGFkYXRhTW9kZWxDbGFzcygpID09PSB0aHJvdWdoTW9kZWxDbGFzcy5jYW5vbmljYWxSZWNvcmRNZXRhZGF0YU1vZGVsQ2xhc3MoKSkge1xuICAgICAgcmV0dXJuIHRhcmdldFJlbGF0aW9uc2hpcC5nZXRGb3JlaWduS2V5Rm9yTW9kZWxDbGFzc2VzKHttb2RlbENsYXNzOiB0YXJnZXRNb2RlbENsYXNzLCB0YXJnZXRNb2RlbENsYXNzOiB0aHJvdWdoTW9kZWxDbGFzc30pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlbGF0aW9uc2hpcC5nZXRGb3JlaWduS2V5Rm9yTW9kZWxDbGFzc2VzKHttb2RlbENsYXNzOiB0aHJvdWdoTW9kZWxDbGFzcywgdGFyZ2V0TW9kZWxDbGFzc30pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUXVlcnlQcmVsb2FkZXJIYXNNYW55IHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXX0gYXJncy5tb2RlbHMgLSBNb2RlbCBpbnN0YW5jZXMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vcmVjb3JkL3JlbGF0aW9uc2hpcHMvaGFzLW1hbnkuanNcIikuZGVmYXVsdH0gYXJncy5yZWxhdGlvbnNoaXAgLSBSZWxhdGlvbnNoaXAuXG4gICAqIEBwYXJhbSB7UHJlbG9hZGVyU2VsZWN0aW9ufSBbYXJncy5zZWxlY3Rpb25dIC0gQ29sdW1uIHNlbGVjdGlvbiBhbmQgaWRlbXBvdGVuY3kgcnVsZXMuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7bW9kZWxzLCByZWxhdGlvbnNoaXAsIHNlbGVjdGlvbiwgLi4ucmVzdEFyZ3N9KSB7XG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIHRoaXMubW9kZWxzID0gbW9kZWxzXG4gICAgdGhpcy5yZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXBcbiAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbiB8fCBuZXcgUHJlbG9hZGVyU2VsZWN0aW9uKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHJ1bi5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXT59IC0gTG9hZGVkIHRhcmdldCBtb2RlbHMuXG4gICAqL1xuICBhc3luYyBydW4oKSB7XG4gICAgaWYgKHRoaXMucmVsYXRpb25zaGlwLnRocm91Z2gpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9ydW5UaHJvdWdoKClcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fcnVuRGlyZWN0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJ0aXRpb25zIGB0aGlzLm1vZGVsc2AgaW50byB0aG9zZSBhbHJlYWR5IHNhdGlzZmllZCBieSB0aGUgY3VycmVudFxuICAgKiBzZWxlY3Rpb24gKHNraXApIGFuZCB0aG9zZSB0aGF0IHN0aWxsIG5lZWQgbG9hZGluZy4gU2F0aXNmaWVkIG1vZGVscydcbiAgICogYWxyZWFkeS1sb2FkZWQgdGFyZ2V0cyBhcmUgY29sbGVjdGVkIHNvIG5lc3RlZCBwcmVsb2FkcyBrZWVwIHdvcmtpbmcuXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSB0YXJnZXRNb2RlbENsYXNzIC0gVGFyZ2V0IG1vZGVsIGNsYXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBtYXBwaW5nQ29sdW1ucyAtIENvbHVtbnMgcmVxdWlyZWQgZm9yIG1hcHBpbmcgKGZvcmVpZ24ga2V5KS5cbiAgICogQHJldHVybnMge3ttb2RlbHNUb0xvYWQ6IGltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W10sIHNhdGlzZmllZFRhcmdldHM6IGltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W119fSAtIFRoZSBwYXJ0aXRpb24uXG4gICAqL1xuICBfcGFydGl0aW9uKHRhcmdldE1vZGVsQ2xhc3MsIG1hcHBpbmdDb2x1bW5zKSB7XG4gICAgY29uc3QgcmVsYXRpb25zaGlwTmFtZSA9IHRoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKVxuICAgIC8qKlxuICAgICAqIE1vZGVscyB0byBsb2FkLlxuICAgICAqIEB0eXBlIHtpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdfSAqL1xuICAgIGNvbnN0IG1vZGVsc1RvTG9hZCA9IFtdXG4gICAgLyoqXG4gICAgICogU2F0aXNmaWVkIHRhcmdldHMuXG4gICAgICogQHR5cGUge2ltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W119ICovXG4gICAgY29uc3Qgc2F0aXNmaWVkVGFyZ2V0cyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMubW9kZWxzKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZVJlbGF0aW9uc2hpcCA9IG1vZGVsLmdldFJlbGF0aW9uc2hpcEJ5TmFtZShyZWxhdGlvbnNoaXBOYW1lKVxuXG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNTYXRpc2ZpZWQoe2luc3RhbmNlUmVsYXRpb25zaGlwLCB0YXJnZXRNb2RlbENsYXNzLCBtYXBwaW5nQ29sdW1uc30pKSB7XG4gICAgICAgIGNvbnN0IGxvYWRlZCA9IGluc3RhbmNlUmVsYXRpb25zaGlwLmdldExvYWRlZE9yVW5kZWZpbmVkKClcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsb2FkZWQpKSBzYXRpc2ZpZWRUYXJnZXRzLnB1c2goLi4ubG9hZGVkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbW9kZWxzVG9Mb2FkLnB1c2gobW9kZWwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHttb2RlbHNUb0xvYWQsIHNhdGlzZmllZFRhcmdldHN9XG4gIH1cblxuICAvKipcbiAgICogUHJlbG9hZCB0aHJvdWdoIGEgam9pbiB0YWJsZSAoZS5nLiBoYXNNYW55KFwiaW52b2ljZUdyb3Vwc1wiLCB7dGhyb3VnaDogXCJpbnZvaWNlR3JvdXBMaW5rc1wifSkpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdPn0gLSBMb2FkZWQgdGFyZ2V0IG1vZGVscy5cbiAgICovXG4gIGFzeW5jIF9ydW5UaHJvdWdoKCkge1xuICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRQcmltYXJ5S2V5KClcblxuICAgIGlmICghcHJpbWFyeUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMucmVsYXRpb25zaGlwLmdldE1vZGVsQ2xhc3MoKS5uYW1lfSMke3RoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKX0gZG9lc24ndCBoYXZlIGEgcHJpbWFyeSBrZXlgKVxuICAgIH1cblxuICAgIGNvbnN0IHRocm91Z2hSZWxhdGlvbnNoaXBOYW1lID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovICh0aGlzLnJlbGF0aW9uc2hpcC50aHJvdWdoKVxuICAgIGNvbnN0IHBhcmVudE1vZGVsQ2xhc3MgPSB0aGlzLm1vZGVsc1swXS5nZXRNb2RlbENsYXNzKClcbiAgICBjb25zdCB0aHJvdWdoUmVsYXRpb25zaGlwID0gcGFyZW50TW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBCeU5hbWUodGhyb3VnaFJlbGF0aW9uc2hpcE5hbWUpXG4gICAgY29uc3QgcmF3VGhyb3VnaE1vZGVsQ2xhc3MgPSB0aHJvdWdoUmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgaWYgKCFyYXdUaHJvdWdoTW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKGBUaHJvdWdoIHJlbGF0aW9uc2hpcCAke3Rocm91Z2hSZWxhdGlvbnNoaXBOYW1lfSBoYXMgbm8gdGFyZ2V0IG1vZGVsIGNsYXNzYClcblxuICAgIGNvbnN0IHRocm91Z2hNb2RlbENsYXNzID0gYmluZFByZWxvYWRNb2RlbENsYXNzKHRoaXMubW9kZWxzLCByYXdUaHJvdWdoTW9kZWxDbGFzcylcblxuICAgIGNvbnN0IHJhd1RhcmdldE1vZGVsQ2xhc3MgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgIGlmICghcmF3VGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiTm8gdGFyZ2V0IG1vZGVsIGNsYXNzIGNvdWxkIGJlIGdvdHRlbiBmcm9tIHJlbGF0aW9uc2hpcFwiKVxuXG4gICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IGJpbmRQcmVsb2FkTW9kZWxDbGFzcyh0aGlzLm1vZGVscywgcmF3VGFyZ2V0TW9kZWxDbGFzcylcblxuICAgIGNvbnN0IHRhcmdldEZvcmVpZ25LZXkgPSBoYXNNYW55VGhyb3VnaFRhcmdldEZvcmVpZ25LZXkodGhpcy5yZWxhdGlvbnNoaXAsIHRocm91Z2hNb2RlbENsYXNzLCB0YXJnZXRNb2RlbENsYXNzKVxuICAgIGNvbnN0IHttb2RlbHNUb0xvYWQsIHNhdGlzZmllZFRhcmdldHN9ID0gdGhpcy5fcGFydGl0aW9uKHRhcmdldE1vZGVsQ2xhc3MsIFt0YXJnZXRGb3JlaWduS2V5XSlcblxuICAgIGlmIChtb2RlbHNUb0xvYWQubGVuZ3RoID09IDApIHJldHVybiBzYXRpc2ZpZWRUYXJnZXRzXG5cbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0Q29uZmlndXJhdGlvbigpXG5cbiAgICBhd2FpdCBlbnN1cmVNb2RlbENsYXNzSW5pdGlhbGl6ZWQodGhyb3VnaE1vZGVsQ2xhc3MsIGNvbmZpZ3VyYXRpb24sIG1vZGVsc1RvTG9hZFswXSlcbiAgICBhd2FpdCBlbnN1cmVNb2RlbENsYXNzSW5pdGlhbGl6ZWQodGFyZ2V0TW9kZWxDbGFzcywgY29uZmlndXJhdGlvbiwgbW9kZWxzVG9Mb2FkWzBdKVxuXG4gICAgY29uc3QgdGhyb3VnaEZvcmVpZ25LZXkgPSB0aHJvdWdoUmVsYXRpb25zaGlwLmdldEZvcmVpZ25LZXlGb3JNb2RlbENsYXNzZXMoe21vZGVsQ2xhc3M6IHBhcmVudE1vZGVsQ2xhc3MsIHRhcmdldE1vZGVsQ2xhc3M6IHRocm91Z2hNb2RlbENsYXNzfSlcblxuICAgIC8qKlxuICAgICAqIE1vZGVscyBwcmltYXJ5IGtleSB2YWx1ZXMuXG4gICAgICogQHR5cGUge1NldDxudW1iZXIgfCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IG1vZGVsc1ByaW1hcnlLZXlWYWx1ZXMgPSBuZXcgU2V0KClcblxuICAgIC8qKlxuICAgICAqIE1vZGVscyBieSBwcmltYXJ5IGtleSB2YWx1ZS5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPG51bWJlciB8IHN0cmluZywgQXJyYXk8aW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+Pn0gKi9cbiAgICBjb25zdCBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZSA9IHt9XG5cbiAgICAvKipcbiAgICAgKiBQcmVsb2FkIGNvbGxlY3Rpb25zLlxuICAgICAqIEB0eXBlIHtSZWNvcmQ8bnVtYmVyIHwgc3RyaW5nLCBBcnJheTxpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD4+fSAqL1xuICAgIGNvbnN0IHByZWxvYWRDb2xsZWN0aW9ucyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIG1vZGVsc1RvTG9hZCkge1xuICAgICAgY29uc3QgcHJpbWFyeUtleVZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9ICovIChtb2RlbC5yZWFkQ29sdW1uKHByaW1hcnlLZXkpKVxuXG4gICAgICBwcmVsb2FkQ29sbGVjdGlvbnNbcHJpbWFyeUtleVZhbHVlXSA9IFtdXG5cbiAgICAgIG1vZGVsc1ByaW1hcnlLZXlWYWx1ZXMuYWRkKHByaW1hcnlLZXlWYWx1ZSlcbiAgICAgIGlmICghKHByaW1hcnlLZXlWYWx1ZSBpbiBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZSkpIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlW3ByaW1hcnlLZXlWYWx1ZV0gPSBbXVxuXG4gICAgICBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZVtwcmltYXJ5S2V5VmFsdWVdLnB1c2gobW9kZWwpXG4gICAgfVxuXG4gICAgLy8gU3RlcCAxOiBRdWVyeSB0aGUgdGhyb3VnaCB0YWJsZSB0byBidWlsZCBwYXJlbnTihpJ0YXJnZXQgSUQgbWFwcGluZy5cbiAgICAvLyBDaHVuayB0aGUgcGFyZW50IFBLIGNvaG9ydCBzbyB0aGUgdGhyb3VnaCBxdWVyeSdzIElOLWxpc3Qgc3RheXMgYm91bmRlZC5cbiAgICBjb25zdCB0aHJvdWdoQmFzZVF1ZXJ5ID0gcHJlbG9hZFF1ZXJ5Rm9yTW9kZWwobW9kZWxzVG9Mb2FkLCB0aHJvdWdoTW9kZWxDbGFzcylcbiAgICBjb25zdCB0aHJvdWdoRHJpdmVyID0gdGhyb3VnaEJhc2VRdWVyeS5kcml2ZXJcbiAgICBjb25zdCB0aHJvdWdoQ29ob3J0cyA9IHRocm91Z2hEcml2ZXIuY2h1bmtWYWx1ZXMoWy4uLm1vZGVsc1ByaW1hcnlLZXlWYWx1ZXNdLCAoY2h1bmspID0+IHRocm91Z2hCYXNlUXVlcnkuY2xvbmUoKS53aGVyZSh7W3Rocm91Z2hGb3JlaWduS2V5XTogY2h1bmt9KS50b1NxbCgpKVxuXG4gICAgLyoqXG4gICAgICogUGFyZW50IHRvIHRhcmdldCBpZHMuXG4gICAgICogQHR5cGUge1JlY29yZDxzdHJpbmcgfCBudW1iZXIsIEFycmF5PHN0cmluZyB8IG51bWJlcj4+fSAqL1xuICAgIGNvbnN0IHBhcmVudFRvVGFyZ2V0SWRzID0ge31cblxuICAgIC8qKlxuICAgICAqIEFsbCB0YXJnZXQgaWRzLlxuICAgICAqIEB0eXBlIHtTZXQ8c3RyaW5nIHwgbnVtYmVyPn0gKi9cbiAgICBjb25zdCBhbGxUYXJnZXRJZHMgPSBuZXcgU2V0KClcblxuICAgIGZvciAoY29uc3QgY29ob3J0IG9mIHRocm91Z2hDb2hvcnRzKSB7XG4gICAgICBjb25zdCB0aHJvdWdoUXVlcnkgPSB0aHJvdWdoQmFzZVF1ZXJ5LmNsb25lKCkud2hlcmUoe1t0aHJvdWdoRm9yZWlnbktleV06IGNvaG9ydH0pXG4gICAgICBjb25zdCB0aHJvdWdoTW9kZWxzID0gYXdhaXQgdGhyb3VnaFF1ZXJ5LnRvQXJyYXkoKVxuXG4gICAgICBmb3IgKGNvbnN0IHRocm91Z2hNb2RlbCBvZiB0aHJvdWdoTW9kZWxzKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudElkID0gLyoqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9ICovICh0aHJvdWdoTW9kZWwucmVhZENvbHVtbih0aHJvdWdoRm9yZWlnbktleSkpXG4gICAgICAgIGNvbnN0IHRocm91Z2hJZCA9IC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAodGhyb3VnaE1vZGVsLnJlYWRDb2x1bW4odGhyb3VnaE1vZGVsQ2xhc3MucHJpbWFyeUtleSgpKSlcblxuICAgICAgICBpZiAoIShwYXJlbnRJZCBpbiBwYXJlbnRUb1RhcmdldElkcykpIHBhcmVudFRvVGFyZ2V0SWRzW3BhcmVudElkXSA9IFtdXG5cbiAgICAgICAgcGFyZW50VG9UYXJnZXRJZHNbcGFyZW50SWRdLnB1c2godGhyb3VnaElkKVxuICAgICAgICBhbGxUYXJnZXRJZHMuYWRkKHRocm91Z2hJZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdGVwIDI6IExvYWQgdGFyZ2V0IG1vZGVscyBieSB0aGUgZm9yZWlnbiBrZXkgdGhhdCBwb2ludHMgdG8gdGhlIHRocm91Z2ggdGFibGUuXG4gICAgLy8gQ2h1bmsgdGhlIHRhcmdldCBJRCBjb2hvcnQgc28gdGhlIHRhcmdldCBxdWVyeSdzIElOLWxpc3Qgc3RheXMgYm91bmRlZC5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgbW9kZWxzLlxuICAgICAqIEB0eXBlIHtpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdfSAqL1xuICAgIGxldCB0YXJnZXRNb2RlbHMgPSBbXVxuXG4gICAgaWYgKGFsbFRhcmdldElkcy5zaXplID4gMCkge1xuICAgICAgbGV0IHRhcmdldEJhc2VRdWVyeSA9IHByZWxvYWRRdWVyeUZvck1vZGVsKG1vZGVsc1RvTG9hZCwgdGFyZ2V0TW9kZWxDbGFzcylcblxuICAgICAgdGFyZ2V0QmFzZVF1ZXJ5ID0gdGhpcy5yZWxhdGlvbnNoaXAuYXBwbHlTY29wZSh0YXJnZXRCYXNlUXVlcnkpXG4gICAgICB0YXJnZXRCYXNlUXVlcnkgPSB0aGlzLnNlbGVjdGlvbi5hcHBseVRvUXVlcnkoe3F1ZXJ5OiB0YXJnZXRCYXNlUXVlcnksIHRhcmdldE1vZGVsQ2xhc3MsIG1hcHBpbmdDb2x1bW5zOiBbdGFyZ2V0Rm9yZWlnbktleV19KVxuXG4gICAgICBjb25zdCB0YXJnZXREcml2ZXIgPSB0YXJnZXRCYXNlUXVlcnkuZHJpdmVyXG4gICAgICBjb25zdCB0YXJnZXRDb2hvcnRzID0gdGFyZ2V0RHJpdmVyLmNodW5rVmFsdWVzKFsuLi5hbGxUYXJnZXRJZHNdLCAoY2h1bmspID0+IHRhcmdldEJhc2VRdWVyeS5jbG9uZSgpLndoZXJlKHtbdGFyZ2V0Rm9yZWlnbktleV06IGNodW5rfSkudG9TcWwoKSlcblxuICAgICAgZm9yIChjb25zdCBjb2hvcnQgb2YgdGFyZ2V0Q29ob3J0cykge1xuICAgICAgICBjb25zdCBjb2hvcnRRdWVyeSA9IHRhcmdldEJhc2VRdWVyeS5jbG9uZSgpLndoZXJlKHtbdGFyZ2V0Rm9yZWlnbktleV06IGNvaG9ydH0pXG4gICAgICAgIGNvbnN0IGZvdW5kVGFyZ2V0TW9kZWxzID0gYXdhaXQgY29ob3J0UXVlcnkudG9BcnJheSgpXG5cbiAgICAgICAgdGFyZ2V0TW9kZWxzLnB1c2goLi4uZm91bmRUYXJnZXRNb2RlbHMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3RlcCAzOiBJbmRleCB0YXJnZXQgbW9kZWxzIGJ5IHRoZWlyIGZvcmVpZ24ga2V5IChtYXBzIHRvIHRocm91Z2ggbW9kZWwgSUQpXG4gICAgLyoqXG4gICAgICogVGFyZ2V0IG1vZGVscyBieSBmb3JlaWduIGtleS5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyB8IG51bWJlciwgQXJyYXk8aW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+Pn0gKi9cbiAgICBjb25zdCB0YXJnZXRNb2RlbHNCeUZvcmVpZ25LZXkgPSB7fVxuXG4gICAgZm9yIChjb25zdCB0YXJnZXRNb2RlbCBvZiB0YXJnZXRNb2RlbHMpIHtcbiAgICAgIGNvbnN0IGZrVmFsdWUgPSAvKiogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKHRhcmdldE1vZGVsLnJlYWRDb2x1bW4odGFyZ2V0Rm9yZWlnbktleSkpXG5cbiAgICAgIGlmICghKGZrVmFsdWUgaW4gdGFyZ2V0TW9kZWxzQnlGb3JlaWduS2V5KSkgdGFyZ2V0TW9kZWxzQnlGb3JlaWduS2V5W2ZrVmFsdWVdID0gW11cblxuICAgICAgdGFyZ2V0TW9kZWxzQnlGb3JlaWduS2V5W2ZrVmFsdWVdLnB1c2godGFyZ2V0TW9kZWwpXG4gICAgfVxuXG4gICAgLy8gU3RlcCA0OiBNYXAgdGFyZ2V0cyB0byBwYXJlbnRzIHZpYSB0aGUgdGhyb3VnaCBtYXBwaW5nXG4gICAgZm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRUb1RhcmdldElkcykge1xuICAgICAgY29uc3QgdGhyb3VnaElkcyA9IHBhcmVudFRvVGFyZ2V0SWRzW3BhcmVudElkXVxuXG4gICAgICBmb3IgKGNvbnN0IHRocm91Z2hJZCBvZiB0aHJvdWdoSWRzKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nVGFyZ2V0cyA9IHRhcmdldE1vZGVsc0J5Rm9yZWlnbktleVt0aHJvdWdoSWRdIHx8IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXRNb2RlbCBvZiBtYXRjaGluZ1RhcmdldHMpIHtcbiAgICAgICAgICBpZiAocGFyZW50SWQgaW4gcHJlbG9hZENvbGxlY3Rpb25zKSB7XG4gICAgICAgICAgICBwcmVsb2FkQ29sbGVjdGlvbnNbcGFyZW50SWRdLnB1c2godGFyZ2V0TW9kZWwpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBtb2RlbFZhbHVlIGluIHByZWxvYWRDb2xsZWN0aW9ucykge1xuICAgICAgY29uc3QgcHJlbG9hZGVkQ29sbGVjdGlvbiA9IHByZWxvYWRDb2xsZWN0aW9uc1ttb2RlbFZhbHVlXVxuXG4gICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlW21vZGVsVmFsdWVdKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsUmVsYXRpb25zaGlwID0gbW9kZWwuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHRoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKSlcblxuICAgICAgICAvLyBSZXBsYWNlIHJhdGhlciB0aGFuIGFwcGVuZDogYG1vZGVsc1RvTG9hZGAgYXJlIGV4YWN0bHkgdGhlIHJlY29yZHMgd2VcbiAgICAgICAgLy8gaW50ZW5kIHRvIChyZSlsb2FkLCBzbyBhIGZvcmNlZCByZS1wcmVsb2FkIG11c3Qgbm90IGR1cGxpY2F0ZSBlbnRyaWVzLlxuICAgICAgICBtb2RlbFJlbGF0aW9uc2hpcC5zZXRMb2FkZWQocHJlbG9hZGVkQ29sbGVjdGlvbilcbiAgICAgICAgbW9kZWxSZWxhdGlvbnNoaXAuc2V0UHJlbG9hZGVkKHRydWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFsuLi5zYXRpc2ZpZWRUYXJnZXRzLCAuLi50YXJnZXRNb2RlbHNdXG4gIH1cblxuICAvKipcbiAgICogUHJlbG9hZCBkaXJlY3QgaGFzLW1hbnkgcmVsYXRpb25zaGlwcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXT59IC0gTG9hZGVkIHRhcmdldCBtb2RlbHMuXG4gICAqL1xuICBhc3luYyBfcnVuRGlyZWN0KCkge1xuICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRQcmltYXJ5S2V5KClcblxuICAgIGlmICghcHJpbWFyeUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMucmVsYXRpb25zaGlwLmdldE1vZGVsQ2xhc3MoKS5uYW1lfSMke3RoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKX0gZG9lc24ndCBoYXZlIGEgcHJpbWFyeSBrZXlgKVxuICAgIH1cblxuICAgIGNvbnN0IHJhd1RhcmdldE1vZGVsQ2xhc3MgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgIGlmICghcmF3VGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiTm8gdGFyZ2V0IG1vZGVsIGNsYXNzIGNvdWxkIGJlIGdvdHRlbiBmcm9tIHJlbGF0aW9uc2hpcFwiKVxuXG4gICAgY29uc3Qgc291cmNlTW9kZWxDbGFzcyA9IHRoaXMubW9kZWxzWzBdLmdldE1vZGVsQ2xhc3MoKVxuICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSBiaW5kUHJlbG9hZE1vZGVsQ2xhc3ModGhpcy5tb2RlbHMsIHJhd1RhcmdldE1vZGVsQ2xhc3MpXG4gICAgY29uc3QgZm9yZWlnbktleSA9IHRoaXMucmVsYXRpb25zaGlwLmdldEZvcmVpZ25LZXlGb3JNb2RlbENsYXNzZXMoe21vZGVsQ2xhc3M6IHNvdXJjZU1vZGVsQ2xhc3MsIHRhcmdldE1vZGVsQ2xhc3N9KVxuXG4gICAgY29uc3Qge21vZGVsc1RvTG9hZCwgc2F0aXNmaWVkVGFyZ2V0c30gPSB0aGlzLl9wYXJ0aXRpb24odGFyZ2V0TW9kZWxDbGFzcywgW2ZvcmVpZ25LZXldKVxuXG4gICAgaWYgKG1vZGVsc1RvTG9hZC5sZW5ndGggPT0gMCkgcmV0dXJuIHNhdGlzZmllZFRhcmdldHNcblxuICAgIC8qKlxuICAgICAqIE1vZGVscyBwcmltYXJ5IGtleSB2YWx1ZXMuXG4gICAgICogQHR5cGUge1NldDxudW1iZXIgfCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IG1vZGVsc1ByaW1hcnlLZXlWYWx1ZXMgPSBuZXcgU2V0KClcblxuICAgIC8qKlxuICAgICAqIE1vZGVscyBieSBwcmltYXJ5IGtleSB2YWx1ZS5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPG51bWJlciB8IHN0cmluZywgQXJyYXk8aW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+Pn0gKi9cbiAgICBjb25zdCBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZSA9IHt9XG5cbiAgICAvKipcbiAgICAgKiBQcmVsb2FkIGNvbGxlY3Rpb25zLlxuICAgICAqIEB0eXBlIHtSZWNvcmQ8bnVtYmVyIHwgc3RyaW5nLCBBcnJheTxpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD4+fSAqL1xuICAgIGNvbnN0IHByZWxvYWRDb2xsZWN0aW9ucyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIG1vZGVsc1RvTG9hZCkge1xuICAgICAgY29uc3QgcHJpbWFyeUtleVZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9ICovIChtb2RlbC5yZWFkQ29sdW1uKHByaW1hcnlLZXkpKVxuXG4gICAgICBwcmVsb2FkQ29sbGVjdGlvbnNbcHJpbWFyeUtleVZhbHVlXSA9IFtdXG5cbiAgICAgIG1vZGVsc1ByaW1hcnlLZXlWYWx1ZXMuYWRkKHByaW1hcnlLZXlWYWx1ZSlcbiAgICAgIGlmICghKHByaW1hcnlLZXlWYWx1ZSBpbiBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZSkpIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlW3ByaW1hcnlLZXlWYWx1ZV0gPSBbXVxuXG4gICAgICBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZVtwcmltYXJ5S2V5VmFsdWVdLnB1c2gobW9kZWwpXG4gICAgfVxuXG4gICAgYXdhaXQgZW5zdXJlTW9kZWxDbGFzc0luaXRpYWxpemVkKHRhcmdldE1vZGVsQ2xhc3MsIHRoaXMucmVsYXRpb25zaGlwLmdldENvbmZpZ3VyYXRpb24oKSwgbW9kZWxzVG9Mb2FkWzBdKVxuXG4gICAgLy8gQnVpbGQgdGhlIHF1ZXJ5IG9uY2Ugd2l0aCB0aGUgcG9seW1vcnBoaWMgdHlwZSBjb25zdGFudCAod2hlbiBwcmVzZW50KSxcbiAgICAvLyByZWxhdGlvbnNoaXAgc2NvcGUsIGFuZCBzZWxlY3Rpb24uIFRoZSBwYXJlbnQgSUQgSU4tbGlzdCBpcyBjbG9uZWQgcGVyIGNvaG9ydFxuICAgIC8vIHNvIHRoZSBnZW5lcmF0ZWQgU1FMIHN0YXlzIHdpdGhpbiBkcml2ZXIgbGltaXRzLlxuICAgIGxldCBiYXNlUXVlcnkgPSBwcmVsb2FkUXVlcnlGb3JNb2RlbChtb2RlbHNUb0xvYWQsIHRhcmdldE1vZGVsQ2xhc3MpXG5cbiAgICBpZiAodGhpcy5yZWxhdGlvbnNoaXAuZ2V0UG9seW1vcnBoaWMoKSkge1xuICAgICAgY29uc3QgdHlwZUNvbHVtbiA9IHRoaXMucmVsYXRpb25zaGlwLmdldFBvbHltb3JwaGljVHlwZUNvbHVtbigpXG5cbiAgICAgIGJhc2VRdWVyeSA9IGJhc2VRdWVyeS53aGVyZSh7W3R5cGVDb2x1bW5dOiB0aGlzLnJlbGF0aW9uc2hpcC5nZXRNb2RlbENsYXNzKCkuZ2V0TW9kZWxOYW1lKCl9KVxuICAgIH1cblxuICAgIGJhc2VRdWVyeSA9IHRoaXMucmVsYXRpb25zaGlwLmFwcGx5U2NvcGUoYmFzZVF1ZXJ5KVxuICAgIGJhc2VRdWVyeSA9IHRoaXMuc2VsZWN0aW9uLmFwcGx5VG9RdWVyeSh7cXVlcnk6IGJhc2VRdWVyeSwgdGFyZ2V0TW9kZWxDbGFzcywgbWFwcGluZ0NvbHVtbnM6IFtmb3JlaWduS2V5XX0pXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgbW9kZWxzLlxuICAgICAqIEB0eXBlIHtpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdfSAqL1xuICAgIGNvbnN0IHRhcmdldE1vZGVscyA9IFtdXG4gICAgY29uc3QgZHJpdmVyID0gYmFzZVF1ZXJ5LmRyaXZlclxuICAgIGNvbnN0IGNvaG9ydHMgPSBkcml2ZXIuY2h1bmtWYWx1ZXMoWy4uLm1vZGVsc1ByaW1hcnlLZXlWYWx1ZXNdLCAoY2h1bmspID0+IGJhc2VRdWVyeS5jbG9uZSgpLndoZXJlKHtbZm9yZWlnbktleV06IGNodW5rfSkudG9TcWwoKSlcblxuICAgIGZvciAoY29uc3QgY29ob3J0IG9mIGNvaG9ydHMpIHtcbiAgICAgIGNvbnN0IGNvaG9ydFF1ZXJ5ID0gYmFzZVF1ZXJ5LmNsb25lKCkud2hlcmUoe1tmb3JlaWduS2V5XTogY29ob3J0fSlcbiAgICAgIGNvbnN0IGZvdW5kVGFyZ2V0TW9kZWxzID0gYXdhaXQgY29ob3J0UXVlcnkudG9BcnJheSgpXG5cbiAgICAgIHRhcmdldE1vZGVscy5wdXNoKC4uLmZvdW5kVGFyZ2V0TW9kZWxzKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGFyZ2V0TW9kZWwgb2YgdGFyZ2V0TW9kZWxzKSB7XG4gICAgICBjb25zdCBmb3JlaWduS2V5VmFsdWUgPSAvKiogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKHRhcmdldE1vZGVsLnJlYWRDb2x1bW4oZm9yZWlnbktleSkpXG5cbiAgICAgIHByZWxvYWRDb2xsZWN0aW9uc1tmb3JlaWduS2V5VmFsdWVdLnB1c2godGFyZ2V0TW9kZWwpXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBtb2RlbFZhbHVlIGluIHByZWxvYWRDb2xsZWN0aW9ucykge1xuICAgICAgY29uc3QgcHJlbG9hZGVkQ29sbGVjdGlvbiA9IHByZWxvYWRDb2xsZWN0aW9uc1ttb2RlbFZhbHVlXVxuXG4gICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlW21vZGVsVmFsdWVdKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsUmVsYXRpb25zaGlwID0gbW9kZWwuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHRoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKSlcblxuICAgICAgICAvLyBSZXBsYWNlIHJhdGhlciB0aGFuIGFwcGVuZDogYG1vZGVsc1RvTG9hZGAgYXJlIGV4YWN0bHkgdGhlIHJlY29yZHMgd2VcbiAgICAgICAgLy8gaW50ZW5kIHRvIChyZSlsb2FkLCBzbyBhIGZvcmNlZCByZS1wcmVsb2FkIG11c3Qgbm90IGR1cGxpY2F0ZSBlbnRyaWVzLlxuICAgICAgICBtb2RlbFJlbGF0aW9uc2hpcC5zZXRMb2FkZWQocHJlbG9hZGVkQ29sbGVjdGlvbilcbiAgICAgICAgbW9kZWxSZWxhdGlvbnNoaXAuc2V0UHJlbG9hZGVkKHRydWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFsuLi5zYXRpc2ZpZWRUYXJnZXRzLCAuLi50YXJnZXRNb2RlbHNdXG4gIH1cbn1cbiJdfQ==
|
|
293
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLW1hbnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvcHJlbG9hZGVyL2hhcy1tYW55LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQTtBQUV6RSxPQUFPLDJCQUEyQixNQUFNLHFDQUFxQyxDQUFBO0FBQzdFLE9BQU8sa0JBQWtCLE1BQU0sZ0JBQWdCLENBQUE7QUFDL0MsT0FBTyxvQkFBb0IsRUFBRSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDbEYsT0FBTyxhQUFhLE1BQU0sbUNBQW1DLENBQUE7QUFFN0Q7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDhCQUE4QixDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0I7SUFDOUYsNEZBQTRGO0lBQzVGLGlHQUFpRztJQUNqRywrRkFBK0Y7SUFDL0YsTUFBTSxrQkFBa0IsR0FBRyxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtJQUUvRCxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDdkIsT0FBTyxnQkFBZ0IsQ0FBQywrQkFBK0IsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksa0JBQWtCLENBQUE7SUFDckcsQ0FBQztJQUVELEtBQUssTUFBTSxrQkFBa0IsSUFBSSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7UUFDckUsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxXQUFXO1lBQUUsU0FBUTtRQUV6RCxNQUFNLDRCQUE0QixHQUFHLGtCQUFrQixDQUFDLG1CQUFtQixFQUFFLENBQUE7UUFFN0UsSUFBSSxDQUFDLDRCQUE0QjtZQUFFLFNBQVE7UUFFM0MsSUFBSSw0QkFBNEIsQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLGlCQUFpQixDQUFDLGlDQUFpQyxFQUFFLEVBQUUsQ0FBQztZ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Q0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1lBRTNGLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUN2RCxDQUFDO1FBRUQsS0FBSyxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQzVDLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFMUQsS0FBSyxNQUFNLEtBQUssSUFBSSx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQTtnQkFFOUYsd0VBQXdFO2dCQUN4RSx5RUFBeUU7Z0JBQ3pFLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO2dCQUNoRCxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDdEMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFBO0lBQy9DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3NjYWxhck1vZGVsUHJpbWFyeUtleX0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL21vZGVsLXByaW1hcnkta2V5LmpzXCJcblxuaW1wb3J0IGVuc3VyZU1vZGVsQ2xhc3NJbml0aWFsaXplZCBmcm9tIFwiLi9lbnN1cmUtbW9kZWwtY2xhc3MtaW5pdGlhbGl6ZWQuanNcIlxuaW1wb3J0IFByZWxvYWRlclNlbGVjdGlvbiBmcm9tIFwiLi9zZWxlY3Rpb24uanNcIlxuaW1wb3J0IHByZWxvYWRRdWVyeUZvck1vZGVsLCB7IGJpbmRQcmVsb2FkTW9kZWxDbGFzcyB9IGZyb20gXCIuL3F1ZXJ5LWZvci1tb2RlbC5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgdGFyZ2V0IGNvbHVtbiB0aGF0IHJlZmVyZW5jZXMgdGhlIHRocm91Z2ggbW9kZWwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3JlY29yZC9yZWxhdGlvbnNoaXBzL2hhcy1tYW55LmpzXCIpLmRlZmF1bHR9IHJlbGF0aW9uc2hpcCAtIEhhcy1tYW55IHRocm91Z2ggcmVsYXRpb25zaGlwLlxuICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IHRocm91Z2hNb2RlbENsYXNzIC0gTW9kZWwgdXNlZCBieSB0aGUgdGhyb3VnaCByZWxhdGlvbnNoaXAuXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gdGFyZ2V0TW9kZWxDbGFzcyAtIE1vZGVsIGxvYWRlZCBieSB0aGUgdGhyb3VnaCByZWxhdGlvbnNoaXAuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUYXJnZXQgbW9kZWwgZm9yZWlnbiBrZXkgY29sdW1uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzTWFueVRocm91Z2hUYXJnZXRGb3JlaWduS2V5KHJlbGF0aW9uc2hpcCwgdGhyb3VnaE1vZGVsQ2xhc3MsIHRhcmdldE1vZGVsQ2xhc3MpIHtcbiAgLy8gQW4gZXhwbGljaXQgZm9yZWlnbiBrZXkgb24gdGhlIGhhcy1tYW55IG5hbWVzIHRoZSBleGFjdCB0YXJnZXQgY29sdW1uIHRoYXQgcmVmZXJlbmNlcyB0aGVcbiAgLy8gdGhyb3VnaCBtb2RlbCDigJQgaG9ub3IgaXQuIFRoZSB0YXJnZXQgY2FuIGhhdmUgc2V2ZXJhbCBiZWxvbmdzLXRvIHBvaW50aW5nIGF0IHRoZSB0aHJvdWdoIG1vZGVsXG4gIC8vIChlLmcuIGEgZGVmYXVsdCBwbHVzIGFuIGFsdGVybmF0ZSksIHNvIHBpY2tpbmcgdGhlIGZpcnN0IG1hdGNoIHdvdWxkIG90aGVyd2lzZSBiZSBhbWJpZ3VvdXMuXG4gIGNvbnN0IGV4cGxpY2l0Rm9yZWlnbktleSA9IHJlbGF0aW9uc2hpcC5nZXRFeHBsaWNpdEZvcmVpZ25LZXkoKVxuXG4gIGlmIChleHBsaWNpdEZvcmVpZ25LZXkpIHtcbiAgICByZXR1cm4gdGFyZ2V0TW9kZWxDbGFzcy5nZXRBdHRyaWJ1dGVOYW1lVG9Db2x1bW5OYW1lTWFwKClbZXhwbGljaXRGb3JlaWduS2V5XSB8fCBleHBsaWNpdEZvcmVpZ25LZXlcbiAgfVxuXG4gIGZvciAoY29uc3QgdGFyZ2V0UmVsYXRpb25zaGlwIG9mIHRhcmdldE1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zaGlwcygpKSB7XG4gICAgaWYgKHRhcmdldFJlbGF0aW9uc2hpcC5nZXRUeXBlKCkgIT0gXCJiZWxvbmdzVG9cIikgY29udGludWVcblxuICAgIGNvbnN0IHJlbGF0aW9uc2hpcFRhcmdldE1vZGVsQ2xhc3MgPSB0YXJnZXRSZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgICBpZiAoIXJlbGF0aW9uc2hpcFRhcmdldE1vZGVsQ2xhc3MpIGNvbnRpbnVlXG5cbiAgICBpZiAocmVsYXRpb25zaGlwVGFyZ2V0TW9kZWxDbGFzcy5jYW5vbmljYWxSZWNvcmRNZXRhZGF0YU1vZGVsQ2xhc3MoKSA9PT0gdGhyb3VnaE1vZGVsQ2xhc3MuY2Fub25pY2FsUmVjb3JkTWV0YWRhdGFNb2RlbENsYXNzKCkpIHtcbiAgICAgIHJldHVybiB0YXJnZXRSZWxhdGlvbnNoaXAuZ2V0Rm9yZWlnbktleUZvck1vZGVsQ2xhc3Nlcyh7bW9kZWxDbGFzczogdGFyZ2V0TW9kZWxDbGFzcywgdGFyZ2V0TW9kZWxDbGFzczogdGhyb3VnaE1vZGVsQ2xhc3N9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWxhdGlvbnNoaXAuZ2V0Rm9yZWlnbktleUZvck1vZGVsQ2xhc3Nlcyh7bW9kZWxDbGFzczogdGhyb3VnaE1vZGVsQ2xhc3MsIHRhcmdldE1vZGVsQ2xhc3N9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5UHJlbG9hZGVySGFzTWFueSB7XG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W119IGFyZ3MubW9kZWxzIC0gTW9kZWwgaW5zdGFuY2VzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3JlY29yZC9yZWxhdGlvbnNoaXBzL2hhcy1tYW55LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVsYXRpb25zaGlwIC0gUmVsYXRpb25zaGlwLlxuICAgKiBAcGFyYW0ge1ByZWxvYWRlclNlbGVjdGlvbn0gW2FyZ3Muc2VsZWN0aW9uXSAtIENvbHVtbiBzZWxlY3Rpb24gYW5kIGlkZW1wb3RlbmN5IHJ1bGVzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe21vZGVscywgcmVsYXRpb25zaGlwLCBzZWxlY3Rpb24sIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICB0aGlzLm1vZGVscyA9IG1vZGVsc1xuICAgIHRoaXMucmVsYXRpb25zaGlwID0gcmVsYXRpb25zaGlwXG4gICAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb24gfHwgbmV3IFByZWxvYWRlclNlbGVjdGlvbigpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBydW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W10+fSAtIExvYWRlZCB0YXJnZXQgbW9kZWxzLlxuICAgKi9cbiAgYXN5bmMgcnVuKCkge1xuICAgIGlmICh0aGlzLnJlbGF0aW9uc2hpcC50aHJvdWdoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcnVuVGhyb3VnaCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3J1bkRpcmVjdCgpXG4gIH1cblxuICAvKipcbiAgICogUGFydGl0aW9ucyBgdGhpcy5tb2RlbHNgIGludG8gdGhvc2UgYWxyZWFkeSBzYXRpc2ZpZWQgYnkgdGhlIGN1cnJlbnRcbiAgICogc2VsZWN0aW9uIChza2lwKSBhbmQgdGhvc2UgdGhhdCBzdGlsbCBuZWVkIGxvYWRpbmcuIFNhdGlzZmllZCBtb2RlbHMnXG4gICAqIGFscmVhZHktbG9hZGVkIHRhcmdldHMgYXJlIGNvbGxlY3RlZCBzbyBuZXN0ZWQgcHJlbG9hZHMga2VlcCB3b3JraW5nLlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gdGFyZ2V0TW9kZWxDbGFzcyAtIFRhcmdldCBtb2RlbCBjbGFzcy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gbWFwcGluZ0NvbHVtbnMgLSBDb2x1bW5zIHJlcXVpcmVkIGZvciBtYXBwaW5nIChmb3JlaWduIGtleSkuXG4gICAqIEByZXR1cm5zIHt7bW9kZWxzVG9Mb2FkOiBpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdLCBzYXRpc2ZpZWRUYXJnZXRzOiBpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdfX0gLSBUaGUgcGFydGl0aW9uLlxuICAgKi9cbiAgX3BhcnRpdGlvbih0YXJnZXRNb2RlbENsYXNzLCBtYXBwaW5nQ29sdW1ucykge1xuICAgIGNvbnN0IHJlbGF0aW9uc2hpcE5hbWUgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKClcbiAgICAvKipcbiAgICAgKiBNb2RlbHMgdG8gbG9hZC5cbiAgICAgKiBAdHlwZSB7aW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXX0gKi9cbiAgICBjb25zdCBtb2RlbHNUb0xvYWQgPSBbXVxuICAgIC8qKlxuICAgICAqIFNhdGlzZmllZCB0YXJnZXRzLlxuICAgICAqIEB0eXBlIHtpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdfSAqL1xuICAgIGNvbnN0IHNhdGlzZmllZFRhcmdldHMgPSBbXVxuXG4gICAgZm9yIChjb25zdCBtb2RlbCBvZiB0aGlzLm1vZGVscykge1xuICAgICAgY29uc3QgaW5zdGFuY2VSZWxhdGlvbnNoaXAgPSBtb2RlbC5nZXRSZWxhdGlvbnNoaXBCeU5hbWUocmVsYXRpb25zaGlwTmFtZSlcblxuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzU2F0aXNmaWVkKHtpbnN0YW5jZVJlbGF0aW9uc2hpcCwgdGFyZ2V0TW9kZWxDbGFzcywgbWFwcGluZ0NvbHVtbnN9KSkge1xuICAgICAgICBjb25zdCBsb2FkZWQgPSBpbnN0YW5jZVJlbGF0aW9uc2hpcC5nZXRMb2FkZWRPclVuZGVmaW5lZCgpXG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobG9hZGVkKSkgc2F0aXNmaWVkVGFyZ2V0cy5wdXNoKC4uLmxvYWRlZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1vZGVsc1RvTG9hZC5wdXNoKG1vZGVsKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7bW9kZWxzVG9Mb2FkLCBzYXRpc2ZpZWRUYXJnZXRzfVxuICB9XG5cbiAgLyoqXG4gICAqIFByZWxvYWQgdGhyb3VnaCBhIGpvaW4gdGFibGUgKGUuZy4gaGFzTWFueShcImludm9pY2VHcm91cHNcIiwge3Rocm91Z2g6IFwiaW52b2ljZUdyb3VwTGlua3NcIn0pKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXT59IC0gTG9hZGVkIHRhcmdldCBtb2RlbHMuXG4gICAqL1xuICBhc3luYyBfcnVuVGhyb3VnaCgpIHtcbiAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0UHJpbWFyeUtleSgpXG5cbiAgICBpZiAoIXByaW1hcnlLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLnJlbGF0aW9uc2hpcC5nZXRNb2RlbENsYXNzKCkubmFtZX0jJHt0aGlzLnJlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCl9IGRvZXNuJ3QgaGF2ZSBhIHByaW1hcnkga2V5YClcbiAgICB9XG5cbiAgICBjb25zdCB0aHJvdWdoUmVsYXRpb25zaGlwTmFtZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAodGhpcy5yZWxhdGlvbnNoaXAudGhyb3VnaClcbiAgICBjb25zdCBwYXJlbnRNb2RlbENsYXNzID0gdGhpcy5tb2RlbHNbMF0uZ2V0TW9kZWxDbGFzcygpXG4gICAgY29uc3QgdGhyb3VnaFJlbGF0aW9uc2hpcCA9IHBhcmVudE1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHRocm91Z2hSZWxhdGlvbnNoaXBOYW1lKVxuICAgIGNvbnN0IHJhd1Rocm91Z2hNb2RlbENsYXNzID0gdGhyb3VnaFJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgIGlmICghcmF3VGhyb3VnaE1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihgVGhyb3VnaCByZWxhdGlvbnNoaXAgJHt0aHJvdWdoUmVsYXRpb25zaGlwTmFtZX0gaGFzIG5vIHRhcmdldCBtb2RlbCBjbGFzc2ApXG5cbiAgICBjb25zdCB0aHJvdWdoTW9kZWxDbGFzcyA9IGJpbmRQcmVsb2FkTW9kZWxDbGFzcyh0aGlzLm1vZGVscywgcmF3VGhyb3VnaE1vZGVsQ2xhc3MpXG5cbiAgICBjb25zdCByYXdUYXJnZXRNb2RlbENsYXNzID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgICBpZiAoIXJhd1RhcmdldE1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihcIk5vIHRhcmdldCBtb2RlbCBjbGFzcyBjb3VsZCBiZSBnb3R0ZW4gZnJvbSByZWxhdGlvbnNoaXBcIilcblxuICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSBiaW5kUHJlbG9hZE1vZGVsQ2xhc3ModGhpcy5tb2RlbHMsIHJhd1RhcmdldE1vZGVsQ2xhc3MpXG5cbiAgICBjb25zdCB0YXJnZXRGb3JlaWduS2V5ID0gaGFzTWFueVRocm91Z2hUYXJnZXRGb3JlaWduS2V5KHRoaXMucmVsYXRpb25zaGlwLCB0aHJvdWdoTW9kZWxDbGFzcywgdGFyZ2V0TW9kZWxDbGFzcylcbiAgICBjb25zdCB7bW9kZWxzVG9Mb2FkLCBzYXRpc2ZpZWRUYXJnZXRzfSA9IHRoaXMuX3BhcnRpdGlvbih0YXJnZXRNb2RlbENsYXNzLCBbdGFyZ2V0Rm9yZWlnbktleV0pXG5cbiAgICBpZiAobW9kZWxzVG9Mb2FkLmxlbmd0aCA9PSAwKSByZXR1cm4gc2F0aXNmaWVkVGFyZ2V0c1xuXG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHRoaXMucmVsYXRpb25zaGlwLmdldENvbmZpZ3VyYXRpb24oKVxuXG4gICAgYXdhaXQgZW5zdXJlTW9kZWxDbGFzc0luaXRpYWxpemVkKHRocm91Z2hNb2RlbENsYXNzLCBjb25maWd1cmF0aW9uLCBtb2RlbHNUb0xvYWRbMF0pXG4gICAgYXdhaXQgZW5zdXJlTW9kZWxDbGFzc0luaXRpYWxpemVkKHRhcmdldE1vZGVsQ2xhc3MsIGNvbmZpZ3VyYXRpb24sIG1vZGVsc1RvTG9hZFswXSlcblxuICAgIGNvbnN0IHRocm91Z2hGb3JlaWduS2V5ID0gdGhyb3VnaFJlbGF0aW9uc2hpcC5nZXRGb3JlaWduS2V5Rm9yTW9kZWxDbGFzc2VzKHttb2RlbENsYXNzOiBwYXJlbnRNb2RlbENsYXNzLCB0YXJnZXRNb2RlbENsYXNzOiB0aHJvdWdoTW9kZWxDbGFzc30pXG5cbiAgICAvKipcbiAgICAgKiBNb2RlbHMgcHJpbWFyeSBrZXkgdmFsdWVzLlxuICAgICAqIEB0eXBlIHtTZXQ8bnVtYmVyIHwgc3RyaW5nPn0gKi9cbiAgICBjb25zdCBtb2RlbHNQcmltYXJ5S2V5VmFsdWVzID0gbmV3IFNldCgpXG5cbiAgICAvKipcbiAgICAgKiBNb2RlbHMgYnkgcHJpbWFyeSBrZXkgdmFsdWUuXG4gICAgICogQHR5cGUge1JlY29yZDxudW1iZXIgfCBzdHJpbmcsIEFycmF5PGltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0Pj59ICovXG4gICAgY29uc3QgbW9kZWxzQnlQcmltYXJ5S2V5VmFsdWUgPSB7fVxuXG4gICAgLyoqXG4gICAgICogUHJlbG9hZCBjb2xsZWN0aW9ucy5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPG51bWJlciB8IHN0cmluZywgQXJyYXk8aW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+Pn0gKi9cbiAgICBjb25zdCBwcmVsb2FkQ29sbGVjdGlvbnMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBtb2RlbCBvZiBtb2RlbHNUb0xvYWQpIHtcbiAgICAgIGNvbnN0IHByaW1hcnlLZXlWYWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAobW9kZWwucmVhZENvbHVtbihwcmltYXJ5S2V5KSlcblxuICAgICAgcHJlbG9hZENvbGxlY3Rpb25zW3ByaW1hcnlLZXlWYWx1ZV0gPSBbXVxuXG4gICAgICBtb2RlbHNQcmltYXJ5S2V5VmFsdWVzLmFkZChwcmltYXJ5S2V5VmFsdWUpXG4gICAgICBpZiAoIShwcmltYXJ5S2V5VmFsdWUgaW4gbW9kZWxzQnlQcmltYXJ5S2V5VmFsdWUpKSBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZVtwcmltYXJ5S2V5VmFsdWVdID0gW11cblxuICAgICAgbW9kZWxzQnlQcmltYXJ5S2V5VmFsdWVbcHJpbWFyeUtleVZhbHVlXS5wdXNoKG1vZGVsKVxuICAgIH1cblxuICAgIC8vIFN0ZXAgMTogUXVlcnkgdGhlIHRocm91Z2ggdGFibGUgdG8gYnVpbGQgcGFyZW504oaSdGFyZ2V0IElEIG1hcHBpbmcuXG4gICAgLy8gQ2h1bmsgdGhlIHBhcmVudCBQSyBjb2hvcnQgc28gdGhlIHRocm91Z2ggcXVlcnkncyBJTi1saXN0IHN0YXlzIGJvdW5kZWQuXG4gICAgY29uc3QgdGhyb3VnaEJhc2VRdWVyeSA9IHByZWxvYWRRdWVyeUZvck1vZGVsKG1vZGVsc1RvTG9hZCwgdGhyb3VnaE1vZGVsQ2xhc3MpXG4gICAgY29uc3QgdGhyb3VnaERyaXZlciA9IHRocm91Z2hCYXNlUXVlcnkuZHJpdmVyXG4gICAgY29uc3QgdGhyb3VnaENvaG9ydHMgPSB0aHJvdWdoRHJpdmVyLmNodW5rVmFsdWVzKFsuLi5tb2RlbHNQcmltYXJ5S2V5VmFsdWVzXSwgKGNodW5rKSA9PiB0aHJvdWdoQmFzZVF1ZXJ5LmNsb25lKCkud2hlcmUoe1t0aHJvdWdoRm9yZWlnbktleV06IGNodW5rfSkudG9TcWwoKSlcblxuICAgIC8qKlxuICAgICAqIFBhcmVudCB0byB0YXJnZXQgaWRzLlxuICAgICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBBcnJheTxzdHJpbmcgfCBudW1iZXI+Pn0gKi9cbiAgICBjb25zdCBwYXJlbnRUb1RhcmdldElkcyA9IHt9XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGFyZ2V0IGlkcy5cbiAgICAgKiBAdHlwZSB7U2V0PHN0cmluZyB8IG51bWJlcj59ICovXG4gICAgY29uc3QgYWxsVGFyZ2V0SWRzID0gbmV3IFNldCgpXG5cbiAgICBmb3IgKGNvbnN0IGNvaG9ydCBvZiB0aHJvdWdoQ29ob3J0cykge1xuICAgICAgY29uc3QgdGhyb3VnaFF1ZXJ5ID0gdGhyb3VnaEJhc2VRdWVyeS5jbG9uZSgpLndoZXJlKHtbdGhyb3VnaEZvcmVpZ25LZXldOiBjb2hvcnR9KVxuICAgICAgY29uc3QgdGhyb3VnaE1vZGVscyA9IGF3YWl0IHRocm91Z2hRdWVyeS50b0FycmF5KClcblxuICAgICAgZm9yIChjb25zdCB0aHJvdWdoTW9kZWwgb2YgdGhyb3VnaE1vZGVscykge1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAodGhyb3VnaE1vZGVsLnJlYWRDb2x1bW4odGhyb3VnaEZvcmVpZ25LZXkpKVxuICAgICAgICBjb25zdCB0aHJvdWdoUHJpbWFyeUtleSA9IHNjYWxhck1vZGVsUHJpbWFyeUtleSh0aHJvdWdoTW9kZWxDbGFzcy5wcmltYXJ5S2V5KCksIGBIYXMtbWFueS10aHJvdWdoIHByZWxvYWQgZm9yICR7dGhyb3VnaE1vZGVsQ2xhc3MubmFtZX1gKVxuICAgICAgICBjb25zdCB0aHJvdWdoSWQgPSAvKiogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKHRocm91Z2hNb2RlbC5yZWFkQ29sdW1uKHRocm91Z2hQcmltYXJ5S2V5KSlcblxuICAgICAgICBpZiAoIShwYXJlbnRJZCBpbiBwYXJlbnRUb1RhcmdldElkcykpIHBhcmVudFRvVGFyZ2V0SWRzW3BhcmVudElkXSA9IFtdXG5cbiAgICAgICAgcGFyZW50VG9UYXJnZXRJZHNbcGFyZW50SWRdLnB1c2godGhyb3VnaElkKVxuICAgICAgICBhbGxUYXJnZXRJZHMuYWRkKHRocm91Z2hJZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdGVwIDI6IExvYWQgdGFyZ2V0IG1vZGVscyBieSB0aGUgZm9yZWlnbiBrZXkgdGhhdCBwb2ludHMgdG8gdGhlIHRocm91Z2ggdGFibGUuXG4gICAgLy8gQ2h1bmsgdGhlIHRhcmdldCBJRCBjb2hvcnQgc28gdGhlIHRhcmdldCBxdWVyeSdzIElOLWxpc3Qgc3RheXMgYm91bmRlZC5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgbW9kZWxzLlxuICAgICAqIEB0eXBlIHtpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdfSAqL1xuICAgIGxldCB0YXJnZXRNb2RlbHMgPSBbXVxuXG4gICAgaWYgKGFsbFRhcmdldElkcy5zaXplID4gMCkge1xuICAgICAgbGV0IHRhcmdldEJhc2VRdWVyeSA9IHByZWxvYWRRdWVyeUZvck1vZGVsKG1vZGVsc1RvTG9hZCwgdGFyZ2V0TW9kZWxDbGFzcylcblxuICAgICAgdGFyZ2V0QmFzZVF1ZXJ5ID0gdGhpcy5yZWxhdGlvbnNoaXAuYXBwbHlTY29wZSh0YXJnZXRCYXNlUXVlcnkpXG4gICAgICB0YXJnZXRCYXNlUXVlcnkgPSB0aGlzLnNlbGVjdGlvbi5hcHBseVRvUXVlcnkoe3F1ZXJ5OiB0YXJnZXRCYXNlUXVlcnksIHRhcmdldE1vZGVsQ2xhc3MsIG1hcHBpbmdDb2x1bW5zOiBbdGFyZ2V0Rm9yZWlnbktleV19KVxuXG4gICAgICBjb25zdCB0YXJnZXREcml2ZXIgPSB0YXJnZXRCYXNlUXVlcnkuZHJpdmVyXG4gICAgICBjb25zdCB0YXJnZXRDb2hvcnRzID0gdGFyZ2V0RHJpdmVyLmNodW5rVmFsdWVzKFsuLi5hbGxUYXJnZXRJZHNdLCAoY2h1bmspID0+IHRhcmdldEJhc2VRdWVyeS5jbG9uZSgpLndoZXJlKHtbdGFyZ2V0Rm9yZWlnbktleV06IGNodW5rfSkudG9TcWwoKSlcblxuICAgICAgZm9yIChjb25zdCBjb2hvcnQgb2YgdGFyZ2V0Q29ob3J0cykge1xuICAgICAgICBjb25zdCBjb2hvcnRRdWVyeSA9IHRhcmdldEJhc2VRdWVyeS5jbG9uZSgpLndoZXJlKHtbdGFyZ2V0Rm9yZWlnbktleV06IGNvaG9ydH0pXG4gICAgICAgIGNvbnN0IGZvdW5kVGFyZ2V0TW9kZWxzID0gYXdhaXQgY29ob3J0UXVlcnkudG9BcnJheSgpXG5cbiAgICAgICAgdGFyZ2V0TW9kZWxzLnB1c2goLi4uZm91bmRUYXJnZXRNb2RlbHMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3RlcCAzOiBJbmRleCB0YXJnZXQgbW9kZWxzIGJ5IHRoZWlyIGZvcmVpZ24ga2V5IChtYXBzIHRvIHRocm91Z2ggbW9kZWwgSUQpXG4gICAgLyoqXG4gICAgICogVGFyZ2V0IG1vZGVscyBieSBmb3JlaWduIGtleS5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyB8IG51bWJlciwgQXJyYXk8aW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+Pn0gKi9cbiAgICBjb25zdCB0YXJnZXRNb2RlbHNCeUZvcmVpZ25LZXkgPSB7fVxuXG4gICAgZm9yIChjb25zdCB0YXJnZXRNb2RlbCBvZiB0YXJnZXRNb2RlbHMpIHtcbiAgICAgIGNvbnN0IGZrVmFsdWUgPSAvKiogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKHRhcmdldE1vZGVsLnJlYWRDb2x1bW4odGFyZ2V0Rm9yZWlnbktleSkpXG5cbiAgICAgIGlmICghKGZrVmFsdWUgaW4gdGFyZ2V0TW9kZWxzQnlGb3JlaWduS2V5KSkgdGFyZ2V0TW9kZWxzQnlGb3JlaWduS2V5W2ZrVmFsdWVdID0gW11cblxuICAgICAgdGFyZ2V0TW9kZWxzQnlGb3JlaWduS2V5W2ZrVmFsdWVdLnB1c2godGFyZ2V0TW9kZWwpXG4gICAgfVxuXG4gICAgLy8gU3RlcCA0OiBNYXAgdGFyZ2V0cyB0byBwYXJlbnRzIHZpYSB0aGUgdGhyb3VnaCBtYXBwaW5nXG4gICAgZm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRUb1RhcmdldElkcykge1xuICAgICAgY29uc3QgdGhyb3VnaElkcyA9IHBhcmVudFRvVGFyZ2V0SWRzW3BhcmVudElkXVxuXG4gICAgICBmb3IgKGNvbnN0IHRocm91Z2hJZCBvZiB0aHJvdWdoSWRzKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nVGFyZ2V0cyA9IHRhcmdldE1vZGVsc0J5Rm9yZWlnbktleVt0aHJvdWdoSWRdIHx8IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXRNb2RlbCBvZiBtYXRjaGluZ1RhcmdldHMpIHtcbiAgICAgICAgICBpZiAocGFyZW50SWQgaW4gcHJlbG9hZENvbGxlY3Rpb25zKSB7XG4gICAgICAgICAgICBwcmVsb2FkQ29sbGVjdGlvbnNbcGFyZW50SWRdLnB1c2godGFyZ2V0TW9kZWwpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBtb2RlbFZhbHVlIGluIHByZWxvYWRDb2xsZWN0aW9ucykge1xuICAgICAgY29uc3QgcHJlbG9hZGVkQ29sbGVjdGlvbiA9IHByZWxvYWRDb2xsZWN0aW9uc1ttb2RlbFZhbHVlXVxuXG4gICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlW21vZGVsVmFsdWVdKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsUmVsYXRpb25zaGlwID0gbW9kZWwuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHRoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKSlcblxuICAgICAgICAvLyBSZXBsYWNlIHJhdGhlciB0aGFuIGFwcGVuZDogYG1vZGVsc1RvTG9hZGAgYXJlIGV4YWN0bHkgdGhlIHJlY29yZHMgd2VcbiAgICAgICAgLy8gaW50ZW5kIHRvIChyZSlsb2FkLCBzbyBhIGZvcmNlZCByZS1wcmVsb2FkIG11c3Qgbm90IGR1cGxpY2F0ZSBlbnRyaWVzLlxuICAgICAgICBtb2RlbFJlbGF0aW9uc2hpcC5zZXRMb2FkZWQocHJlbG9hZGVkQ29sbGVjdGlvbilcbiAgICAgICAgbW9kZWxSZWxhdGlvbnNoaXAuc2V0UHJlbG9hZGVkKHRydWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFsuLi5zYXRpc2ZpZWRUYXJnZXRzLCAuLi50YXJnZXRNb2RlbHNdXG4gIH1cblxuICAvKipcbiAgICogUHJlbG9hZCBkaXJlY3QgaGFzLW1hbnkgcmVsYXRpb25zaGlwcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXT59IC0gTG9hZGVkIHRhcmdldCBtb2RlbHMuXG4gICAqL1xuICBhc3luYyBfcnVuRGlyZWN0KCkge1xuICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRQcmltYXJ5S2V5KClcblxuICAgIGlmICghcHJpbWFyeUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMucmVsYXRpb25zaGlwLmdldE1vZGVsQ2xhc3MoKS5uYW1lfSMke3RoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKX0gZG9lc24ndCBoYXZlIGEgcHJpbWFyeSBrZXlgKVxuICAgIH1cblxuICAgIGNvbnN0IHJhd1RhcmdldE1vZGVsQ2xhc3MgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgIGlmICghcmF3VGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiTm8gdGFyZ2V0IG1vZGVsIGNsYXNzIGNvdWxkIGJlIGdvdHRlbiBmcm9tIHJlbGF0aW9uc2hpcFwiKVxuXG4gICAgY29uc3Qgc291cmNlTW9kZWxDbGFzcyA9IHRoaXMubW9kZWxzWzBdLmdldE1vZGVsQ2xhc3MoKVxuICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSBiaW5kUHJlbG9hZE1vZGVsQ2xhc3ModGhpcy5tb2RlbHMsIHJhd1RhcmdldE1vZGVsQ2xhc3MpXG4gICAgY29uc3QgZm9yZWlnbktleSA9IHRoaXMucmVsYXRpb25zaGlwLmdldEZvcmVpZ25LZXlGb3JNb2RlbENsYXNzZXMoe21vZGVsQ2xhc3M6IHNvdXJjZU1vZGVsQ2xhc3MsIHRhcmdldE1vZGVsQ2xhc3N9KVxuXG4gICAgY29uc3Qge21vZGVsc1RvTG9hZCwgc2F0aXNmaWVkVGFyZ2V0c30gPSB0aGlzLl9wYXJ0aXRpb24odGFyZ2V0TW9kZWxDbGFzcywgW2ZvcmVpZ25LZXldKVxuXG4gICAgaWYgKG1vZGVsc1RvTG9hZC5sZW5ndGggPT0gMCkgcmV0dXJuIHNhdGlzZmllZFRhcmdldHNcblxuICAgIC8qKlxuICAgICAqIE1vZGVscyBwcmltYXJ5IGtleSB2YWx1ZXMuXG4gICAgICogQHR5cGUge1NldDxudW1iZXIgfCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IG1vZGVsc1ByaW1hcnlLZXlWYWx1ZXMgPSBuZXcgU2V0KClcblxuICAgIC8qKlxuICAgICAqIE1vZGVscyBieSBwcmltYXJ5IGtleSB2YWx1ZS5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPG51bWJlciB8IHN0cmluZywgQXJyYXk8aW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+Pn0gKi9cbiAgICBjb25zdCBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZSA9IHt9XG5cbiAgICAvKipcbiAgICAgKiBQcmVsb2FkIGNvbGxlY3Rpb25zLlxuICAgICAqIEB0eXBlIHtSZWNvcmQ8bnVtYmVyIHwgc3RyaW5nLCBBcnJheTxpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD4+fSAqL1xuICAgIGNvbnN0IHByZWxvYWRDb2xsZWN0aW9ucyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIG1vZGVsc1RvTG9hZCkge1xuICAgICAgY29uc3QgcHJpbWFyeUtleVZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9ICovIChtb2RlbC5yZWFkQ29sdW1uKHByaW1hcnlLZXkpKVxuXG4gICAgICBwcmVsb2FkQ29sbGVjdGlvbnNbcHJpbWFyeUtleVZhbHVlXSA9IFtdXG5cbiAgICAgIG1vZGVsc1ByaW1hcnlLZXlWYWx1ZXMuYWRkKHByaW1hcnlLZXlWYWx1ZSlcbiAgICAgIGlmICghKHByaW1hcnlLZXlWYWx1ZSBpbiBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZSkpIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlW3ByaW1hcnlLZXlWYWx1ZV0gPSBbXVxuXG4gICAgICBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZVtwcmltYXJ5S2V5VmFsdWVdLnB1c2gobW9kZWwpXG4gICAgfVxuXG4gICAgYXdhaXQgZW5zdXJlTW9kZWxDbGFzc0luaXRpYWxpemVkKHRhcmdldE1vZGVsQ2xhc3MsIHRoaXMucmVsYXRpb25zaGlwLmdldENvbmZpZ3VyYXRpb24oKSwgbW9kZWxzVG9Mb2FkWzBdKVxuXG4gICAgLy8gQnVpbGQgdGhlIHF1ZXJ5IG9uY2Ugd2l0aCB0aGUgcG9seW1vcnBoaWMgdHlwZSBjb25zdGFudCAod2hlbiBwcmVzZW50KSxcbiAgICAvLyByZWxhdGlvbnNoaXAgc2NvcGUsIGFuZCBzZWxlY3Rpb24uIFRoZSBwYXJlbnQgSUQgSU4tbGlzdCBpcyBjbG9uZWQgcGVyIGNvaG9ydFxuICAgIC8vIHNvIHRoZSBnZW5lcmF0ZWQgU1FMIHN0YXlzIHdpdGhpbiBkcml2ZXIgbGltaXRzLlxuICAgIGxldCBiYXNlUXVlcnkgPSBwcmVsb2FkUXVlcnlGb3JNb2RlbChtb2RlbHNUb0xvYWQsIHRhcmdldE1vZGVsQ2xhc3MpXG5cbiAgICBpZiAodGhpcy5yZWxhdGlvbnNoaXAuZ2V0UG9seW1vcnBoaWMoKSkge1xuICAgICAgY29uc3QgdHlwZUNvbHVtbiA9IHRoaXMucmVsYXRpb25zaGlwLmdldFBvbHltb3JwaGljVHlwZUNvbHVtbigpXG5cbiAgICAgIGJhc2VRdWVyeSA9IGJhc2VRdWVyeS53aGVyZSh7W3R5cGVDb2x1bW5dOiB0aGlzLnJlbGF0aW9uc2hpcC5nZXRNb2RlbENsYXNzKCkuZ2V0TW9kZWxOYW1lKCl9KVxuICAgIH1cblxuICAgIGJhc2VRdWVyeSA9IHRoaXMucmVsYXRpb25zaGlwLmFwcGx5U2NvcGUoYmFzZVF1ZXJ5KVxuICAgIGJhc2VRdWVyeSA9IHRoaXMuc2VsZWN0aW9uLmFwcGx5VG9RdWVyeSh7cXVlcnk6IGJhc2VRdWVyeSwgdGFyZ2V0TW9kZWxDbGFzcywgbWFwcGluZ0NvbHVtbnM6IFtmb3JlaWduS2V5XX0pXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgbW9kZWxzLlxuICAgICAqIEB0eXBlIHtpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdfSAqL1xuICAgIGNvbnN0IHRhcmdldE1vZGVscyA9IFtdXG4gICAgY29uc3QgZHJpdmVyID0gYmFzZVF1ZXJ5LmRyaXZlclxuICAgIGNvbnN0IGNvaG9ydHMgPSBkcml2ZXIuY2h1bmtWYWx1ZXMoWy4uLm1vZGVsc1ByaW1hcnlLZXlWYWx1ZXNdLCAoY2h1bmspID0+IGJhc2VRdWVyeS5jbG9uZSgpLndoZXJlKHtbZm9yZWlnbktleV06IGNodW5rfSkudG9TcWwoKSlcblxuICAgIGZvciAoY29uc3QgY29ob3J0IG9mIGNvaG9ydHMpIHtcbiAgICAgIGNvbnN0IGNvaG9ydFF1ZXJ5ID0gYmFzZVF1ZXJ5LmNsb25lKCkud2hlcmUoe1tmb3JlaWduS2V5XTogY29ob3J0fSlcbiAgICAgIGNvbnN0IGZvdW5kVGFyZ2V0TW9kZWxzID0gYXdhaXQgY29ob3J0UXVlcnkudG9BcnJheSgpXG5cbiAgICAgIHRhcmdldE1vZGVscy5wdXNoKC4uLmZvdW5kVGFyZ2V0TW9kZWxzKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGFyZ2V0TW9kZWwgb2YgdGFyZ2V0TW9kZWxzKSB7XG4gICAgICBjb25zdCBmb3JlaWduS2V5VmFsdWUgPSAvKiogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKHRhcmdldE1vZGVsLnJlYWRDb2x1bW4oZm9yZWlnbktleSkpXG5cbiAgICAgIHByZWxvYWRDb2xsZWN0aW9uc1tmb3JlaWduS2V5VmFsdWVdLnB1c2godGFyZ2V0TW9kZWwpXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBtb2RlbFZhbHVlIGluIHByZWxvYWRDb2xsZWN0aW9ucykge1xuICAgICAgY29uc3QgcHJlbG9hZGVkQ29sbGVjdGlvbiA9IHByZWxvYWRDb2xsZWN0aW9uc1ttb2RlbFZhbHVlXVxuXG4gICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlW21vZGVsVmFsdWVdKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsUmVsYXRpb25zaGlwID0gbW9kZWwuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHRoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKSlcblxuICAgICAgICAvLyBSZXBsYWNlIHJhdGhlciB0aGFuIGFwcGVuZDogYG1vZGVsc1RvTG9hZGAgYXJlIGV4YWN0bHkgdGhlIHJlY29yZHMgd2VcbiAgICAgICAgLy8gaW50ZW5kIHRvIChyZSlsb2FkLCBzbyBhIGZvcmNlZCByZS1wcmVsb2FkIG11c3Qgbm90IGR1cGxpY2F0ZSBlbnRyaWVzLlxuICAgICAgICBtb2RlbFJlbGF0aW9uc2hpcC5zZXRMb2FkZWQocHJlbG9hZGVkQ29sbGVjdGlvbilcbiAgICAgICAgbW9kZWxSZWxhdGlvbnNoaXAuc2V0UHJlbG9hZGVkKHRydWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFsuLi5zYXRpc2ZpZWRUYXJnZXRzLCAuLi50YXJnZXRNb2RlbHNdXG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-data.d.ts","sourceRoot":"","sources":["../../../../src/database/query/query-data.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"query-data.d.ts","sourceRoot":"","sources":["../../../../src/database/query/query-data.js"],"names":[],"mappings":"AAOG,YAAkB,cAAc,GAChC;;;;IAAqB,KAAK,EAAf,MAAM,EAAE,CACnB;;;;IAAmB,MAAM,EAAd,MAAM,CACnB;CAAA,CAAA;AAIE,YAAsL,aAAa,GAAzL,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;CAAC,CAAe;AAKnM,YAAkB,qBAAqB,GACvC;;;;IAAmB,aAAa,EAArB,MAAM,CACjB;;;;IAAiD,MAAM,EAA5C,OAAO,oBAAoB,EAAE,OAAO,CAC/C;;;;IAAwD,UAAU,EAAvD,cAAc,oBAAoB,EAAE,OAAO,CACtD;;;;IAAmC,SAAS,EAAjC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CACjC;;;;IAAqD,KAAK,EAA/C,OAAO,wBAAwB,EAAE,OAAO,CACnD;;;;IAAmB,SAAS,EAAjB,MAAM,CACnB;CAAA,CAAA;AAIE,YAA4F,WAAW,GAA7F,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,wBAAwB,EAAE,OAAO,CAAa;AAzB1G;;;;;GAKG;AAEH;;;GAGG;AAEH;;;;;;;;;GASG;AAEH;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAJhC,aAIgC,EAAE,KAAK,AAH/C,CACA,EADQ,MAAM,EAGsC,GAF1C,cAAc,EAAE,CA8D5B;AAwDD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,YAAY,CAAC,EAAC,cAAc,EAAE,UAAU,EAAE,OAAO,EAAC,EALrE;IAA0D,cAAc,EAAhE,cAAc,oBAAoB,EAAE,OAAO,CACnD;IAAqD,UAAU,EAAvD,OAAO,oBAAoB,EAAE,OAAO,EAAE,CAC9C;IAA+B,OAAO,EAA9B,cAAc,EAAE,CACxB;CAEqE,GAF3D,OAAO,CAAC,IAAI,CAAC,CA8CzB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import { isPlainObject } from "is-plain-object";
|
|
3
|
+
import { scalarModelPrimaryKey } from "../../utils/model-primary-key.js";
|
|
3
4
|
/**
|
|
4
5
|
* QueryDataEntry type.
|
|
5
6
|
* @typedef {object} QueryDataEntry
|
|
@@ -161,7 +162,7 @@ function resolveTargetModelClass(rootModelClass, chain) {
|
|
|
161
162
|
export async function runQueryData({ rootModelClass, rootModels, entries }) {
|
|
162
163
|
if (rootModels.length === 0 || entries.length === 0)
|
|
163
164
|
return;
|
|
164
|
-
const primaryKey = rootModelClass.primaryKey();
|
|
165
|
+
const primaryKey = scalarModelPrimaryKey(rootModelClass.primaryKey(), `queryData for ${rootModelClass.name}`);
|
|
165
166
|
const rootIds = rootModels.map((model) => /** @type {string | number} */ (model.readColumn(primaryKey)));
|
|
166
167
|
const sourceModel = rootModels[0];
|
|
167
168
|
const preparedEntries = entries.map((entry, entryIndex) => prepareEntry({
|
|
@@ -331,4 +332,4 @@ async function executeChunkedEntryQuery({ primaryKey, query, rootIds, rootModels
|
|
|
331
332
|
await executeEntryQuery({ primaryKey, query: cohortQuery, rootModels });
|
|
332
333
|
}
|
|
333
334
|
}
|
|
334
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS9xdWVyeS1kYXRhLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFFN0M7Ozs7O0dBS0c7QUFFSDs7O0dBR0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7O0dBR0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtJQUNyRCxJQUFJLElBQUksSUFBSSxJQUFJO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFFM0IsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixPQUFPLENBQUMsRUFBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN4Qjs7c0NBRThCO1FBQzlCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUVsQixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO2dCQUMvQyxTQUFRO1lBQ1YsQ0FBQztZQUVELElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssTUFBTSxNQUFNLElBQUksc0JBQXNCLENBQUMsNENBQTRDLENBQUMsQ0FBQyxJ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QUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBRTFHLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUUvRCxNQUFNLGlCQUFpQixDQUFDLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtJQUN2RSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2lzUGxhaW5PYmplY3R9IGZyb20gXCJpcy1wbGFpbi1vYmplY3RcIlxuXG4vKipcbiAqIFF1ZXJ5RGF0YUVudHJ5IHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBRdWVyeURhdGFFbnRyeVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gY2hhaW4gLSBSZWxhdGlvbnNoaXAgY2hhaW4gZnJvbSB0aGUgcm9vdCBtb2RlbCB0byB0aGUgbW9kZWwgdGhhdCBkZWNsYXJlcyB0aGUgZm4uIEVtcHR5IGZvciBhIHJvb3QtbGV2ZWwgZW50cnkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZm5OYW1lIC0gSWRlbnRpZmllciB1bmRlciB3aGljaCB0aGUgZm4gaXMgcmVnaXN0ZXJlZCBvbiB0aGUgZGVjbGFyaW5nIG1vZGVsLlxuICovXG5cbi8qKlxuICogRGVmaW5lcyB0aGlzIHR5cGVkZWYuXG4gKiBAdHlwZWRlZiB7c3RyaW5nIHwgQXJyYXk8c3RyaW5nIHwgUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+PiB8IHtba2V5OiBzdHJpbmddOiB0cnVlIHwgZmFsc2UgfCBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn19IFF1ZXJ5RGF0YVNwZWNcbiAqL1xuXG4vKipcbiAqIFF1ZXJ5RGF0YUNhbGxiYWNrQXJncyB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gUXVlcnlEYXRhQ2FsbGJhY2tBcmdzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXR0cmlidXRlTmFtZSAtIE5hbWUgdW5kZXIgd2hpY2ggdGhlIGZuIHdhcyByZWdpc3RlcmVkLiBDb252ZW5pZW50IHdoZW4gYSBmbiBpcyByZXVzZWQgYWNyb3NzIGFsaWFzZXMuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBkcml2ZXIgLSBBY3RpdmUgZGF0YWJhc2UgZHJpdmVyLCBmb3IgcXVvdGluZyBoZWxwZXJzIGFuZCB0eXBlLXNwZWNpZmljIFNRTC5cbiAqIEBwcm9wZXJ0eSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MgdGhlIGZuIGlzIHJlZ2lzdGVyZWQgb24gKHRoZSBjaGFpbidzIHRhcmdldCkuXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZyB8IG51bWJlcj59IHBhcmVudElkcyAtIFByaW1hcnkta2V5IHZhbHVlcyBvZiB0aGUgbG9hZGVkIHJvb3QgcmVjb3Jkcy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0fSBxdWVyeSAtIEdyb3VwZWQgcXVlcnkgYWxyZWFkeSBqb2luZWQgZG93biB0aGUgY2hhaW4sIGZpbHRlcmVkIGJ5IGBwYXJlbnRJZHNgLCB3aXRoIGBwYXJlbnRfaWRgIHByZS1zZWxlY3RlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBVbnF1b3RlZCB0YWJsZSByZWZlcmVuY2UgKGFsaWFzIG9yIHRhYmxlIG5hbWUpIGZvciB0aGUgY2hhaW4ncyB0YXJnZXQsIHJlYWR5IHRvIHBhc3RlIGludG8gU1FMLlxuICovXG5cbi8qKlxuICogUXVlcnlEYXRhRm4gdHlwZS5cbiAqIEB0eXBlZGVmIHsoYXJnczogUXVlcnlEYXRhQ2FsbGJhY2tBcmdzKSA9PiB2b2lkIHwgaW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0fSBRdWVyeURhdGFGblxuICovXG5cbi8qKlxuICogTm9ybWFsaXplIGEgdXNlci1zdXBwbGllZCBxdWVyeURhdGEgc3BlYyBpbnRvIGEgZmxhdCBsaXN0IG9mIGVudHJpZXNcbiAqIHRoZSBydW5uZXIgY2FuIGNvbnN1bWUuIFRoZSBzcGVjIG1pcnJvcnMgdGhlIHNoYXBlIG9mIGBwcmVsb2FkYCwgd2l0aFxuICogdGhlIGltcG9ydGFudCBkaXN0aW5jdGlvbiB0aGF0ICoqbGVhZiBzdHJpbmdzIGFyZSBmbiBuYW1lcyoqLCBub3RcbiAqIGZ1cnRoZXIgcmVsYXRpb25zaGlwIHNlZ21lbnRzLiBOZXN0ZWQga2V5cyBhcmUgcmVsYXRpb25zaGlwIG5hbWVzXG4gKiBhbG9uZyB0aGUgam9pbiBjaGFpbiBmcm9tIHRoZSByb290IG1vZGVsIHRvIHRoZSBkZWNsYXJpbmcgbW9kZWwuXG4gKlxuICogQWNjZXB0ZWQgc2hhcGVzIChhbGwgeWllbGQgdGhlIHNhbWUgZmxhdCBlbnRyaWVzKTpcbiAqICAgXCJmb29cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oaSIFt7Y2hhaW46IFtdLCBmbk5hbWU6IFwiZm9vXCJ9XVxuICogICBbXCJmb29cIiwgXCJiYXJcIl0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKGkiBbe2NoYWluOiBbXSwgZm5OYW1lOiBcImZvb1wifSwge2NoYWluOiBbXSwgZm5OYW1lOiBcImJhclwifV1cbiAqICAge2ZvbzogdHJ1ZX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKGkiBbe2NoYWluOiBbXSwgZm5OYW1lOiBcImZvb1wifV1cbiAqICAge3Byb2plY3RzOiBbXCJ0YXNrc0NvdW50XCJdfSAgICAgICAgICAgICAgICAg4oaSIFt7Y2hhaW46IFtcInByb2plY3RzXCJdLCBmbk5hbWU6IFwidGFza3NDb3VudFwifV1cbiAqICAge3Byb2plY3RzOiB7dGFza3M6IFtcInRyYW5zcG9ydFNlY29uZHNTdW1cIiwge3RpbWVsb2dzOiBbXCJ0aW1lU2Vjb25kc1N1bVwiXX1dfX1cbiAqICAgICDihpIgW3tjaGFpbjogW1wicHJvamVjdHNcIixcInRhc2tzXCJdLCBmbk5hbWU6IFwidHJhbnNwb3J0U2Vjb25kc1N1bVwifSxcbiAqICAgICAgICB7Y2hhaW46IFtcInByb2plY3RzXCIsXCJ0YXNrc1wiLFwidGltZWxvZ3NcIl0sIGZuTmFtZTogXCJ0aW1lU2Vjb25kc1N1bVwifV1cbiAqIEBwYXJhbSB7UXVlcnlEYXRhU3BlY30gc3BlYyAtIFVzZXItc3VwcGxpZWQgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nW119IFtjaGFpbl0gLSBDdXJyZW50IGNoYWluIChpbnRlcm5hbCByZWN1cnNpb24pLlxuICogQHJldHVybnMge1F1ZXJ5RGF0YUVudHJ5W119IC0gRmxhdCBsaXN0IG9mIGVudHJpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVRdWVyeURhdGFTcGVjKHNwZWMsIGNoYWluID0gW10pIHtcbiAgaWYgKHNwZWMgPT0gbnVsbCkgcmV0dXJuIFtdXG5cbiAgaWYgKHR5cGVvZiBzcGVjID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIFt7Y2hhaW46IFsuLi5jaGFpbl0sIGZuTmFtZTogc3BlY31dXG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShzcGVjKSkge1xuICAgIC8qKlxuICAgICAqIEVudHJpZXMuXG4gICAgICogQHR5cGUge1F1ZXJ5RGF0YUVudHJ5W119ICovXG4gICAgY29uc3QgZW50cmllcyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc3BlYykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7Y2hhaW46IFsuLi5jaGFpbl0sIGZuTmFtZTogaXRlbX0pXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgIGZvciAoY29uc3QgbmVzdGVkIG9mIG5vcm1hbGl6ZVF1ZXJ5RGF0YVNwZWMoLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gKi8gKGl0ZW0pLCBjaGFpbikpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2gobmVzdGVkKVxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBxdWVyeURhdGEgYXJyYXkgZW50cnk6ICR7dHlwZW9mIGl0ZW19YClcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cmllc1xuICB9XG5cbiAgaWYgKGlzUGxhaW5PYmplY3Qoc3BlYykpIHtcbiAgICAvKipcbiAgICAgKiBFbnRyaWVzLlxuICAgICAqIEB0eXBlIHtRdWVyeURhdGFFbnRyeVtdfSAqL1xuICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc3BlYykpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBlbnRyaWVzLnB1c2goe2NoYWluOiBbLi4uY2hhaW5dLCBmbk5hbWU6IGtleX0pXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIGNvbnRpbnVlXG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBuZXN0ZWQgb2Ygbm9ybWFsaXplUXVlcnlEYXRhU3BlYygvKiogQHR5cGUge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSAqLyAodmFsdWUpLCBbLi4uY2hhaW4sIGtleV0pKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKG5lc3RlZClcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcXVlcnlEYXRhIHZhbHVlIGZvciBcIiR7a2V5fVwiOiAke3R5cGVvZiB2YWx1ZX1gKVxuICAgIH1cblxuICAgIHJldHVybiBlbnRyaWVzXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcXVlcnlEYXRhIHNwZWM6ICR7dHlwZW9mIHNwZWN9YClcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgbmVzdGVkIGBqb2lucyguLi4pYCBkZXNjcmlwdG9yIGZvciBhIGNoYWluIG9mIHJlbGF0aW9uc2hpcCBuYW1lcy5cbiAqIGBbXCJwcm9qZWN0c1wiLCBcInRhc2tzXCJdYCDihpIgYHtwcm9qZWN0czoge3Rhc2tzOiB0cnVlfX1gLiBVc2VkIGludGVybmFsbHkgc29cbiAqIHRoZSBydW5uZXIgY2FuIHJldXNlIHRoZSBleGlzdGluZyBgam9pbnNgIHBhdGgtcmVnaXN0cmF0aW9uIG1hY2hpbmVyeVxuICogKEpvaW5UcmFja2VyLCBhbGlhcyBnZW5lcmF0aW9uLCBzY29wZSBhcHBsaWNhdGlvbikuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGFpbiAtIFJlbGF0aW9uc2hpcCBjaGFpbi5cbiAqIEByZXR1cm5zIHt0cnVlIHwgUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSAtIE5lc3RlZCBqb2luIGRlc2NyaXB0b3IsIG9yIGB0cnVlYCB3aGVuIHRoZSBjaGFpbiBpcyBlbXB0eS5cbiAqL1xuZnVuY3Rpb24gYnVpbGROZXN0ZWRKb2luRGVzY3JpcHRvcihjaGFpbikge1xuICBpZiAoY2hhaW4ubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZVxuXG4gIC8qKlxuICAgKiBPYmouXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59ICovXG4gIGNvbnN0IG9iaiA9IHt9XG4gIGxldCBjdXJzb3IgPSBvYmpcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYWluLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3Qgc2VnID0gY2hhaW5baV1cbiAgICBjb25zdCBpc0xhc3QgPSBpID09PSBjaGFpbi5sZW5ndGggLSAxXG5cbiAgICBjdXJzb3Jbc2VnXSA9IGlzTGFzdCA/IHRydWUgOiB7fVxuXG4gICAgaWYgKCFpc0xhc3QpIGN1cnNvciA9IGN1cnNvcltzZWddXG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbi8qKlxuICogV2FsayBhIHJlbGF0aW9uc2hpcCBjaGFpbiBmcm9tIHRoZSByb290IG1vZGVsIGFuZCByZXR1cm4gdGhlIG1vZGVsXG4gKiBjbGFzcyBhdCBpdHMgdGFpbC4gVGhyb3dzIHdpdGggYSBjbGVhciBtZXNzYWdlIHdoZW4gYW55IHNlZ21lbnQgaXNcbiAqIHVua25vd24uXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gcm9vdE1vZGVsQ2xhc3MgLSBSb290IG1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hhaW4gLSBSZWxhdGlvbnNoaXAgY2hhaW4uXG4gKiBAcmV0dXJucyB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSAtIFRhcmdldCBtb2RlbCBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVRhcmdldE1vZGVsQ2xhc3Mocm9vdE1vZGVsQ2xhc3MsIGNoYWluKSB7XG4gIGxldCBtb2RlbENsYXNzID0gcm9vdE1vZGVsQ2xhc3NcblxuICBmb3IgKGNvbnN0IHNlZ21lbnQgb2YgY2hhaW4pIHtcbiAgICBjb25zdCByZWxhdGlvbnNoaXAgPSBtb2RlbENsYXNzLmdldFJlbGF0aW9uc2hpcEJ5TmFtZShzZWdtZW50KVxuICAgIGNvbnN0IHJhd1RhcmdldCA9IHJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgIGlmICghcmF3VGFyZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHF1ZXJ5RGF0YTogY291bGQgbm90IHJlc29sdmUgdGFyZ2V0IG1vZGVsIGZvciAke21vZGVsQ2xhc3MubmFtZX0jJHtzZWdtZW50fWApXG4gICAgfVxuXG4gICAgbW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3MuYmluZFJlY29yZE1ldGFkYXRhTW9kZWxDbGFzcyhyYXdUYXJnZXQpXG4gIH1cblxuICByZXR1cm4gbW9kZWxDbGFzc1xufVxuXG4vKipcbiAqIFJ1biBldmVyeSBxdWVyeURhdGEgZW50cnkgYWdhaW5zdCB0aGUgbG9hZGVkIHJvb3QgcmVjb3JkcywgYXR0YWNoaW5nXG4gKiB0aGUgcmVzdWx0aW5nIHZhbHVlcyBhcyBxdWVyeURhdGEgZW50cmllcyBvbiBlYWNoIHJvb3QgcmVjb3JkLlxuICpcbiAqIE9uZSBncm91cGVkIHF1ZXJ5IHBlciBlbnRyeTogdGhlIHJ1bm5lciBidWlsZHMgYSBmcmVzaCBxdWVyeSBvdmVyIHRoZVxuICogcm9vdCBtb2RlbCwgam9pbnMgZG93biB0aGUgY2hhaW4sIGdyb3VwcyBieSB0aGUgcm9vdCB0YWJsZSdzIHByaW1hcnlcbiAqIGtleSwgYW5kIGludm9rZXMgdGhlIHJlZ2lzdGVyZWQgZm4gdG8gYWRkIGl0cyBvd24gU0VMRUNUIChhbmQgYW55XG4gKiBhZGRpdGlvbmFsIGpvaW5zL3doZXJlKS4gUmVzdWx0cyBhcmUgbWFwcGVkIGJhY2sgdG8gcm9vdCBtb2RlbHMgYnlcbiAqIHByaW1hcnkga2V5IGFuZCBhdHRhY2hlZCB2aWEgYF9zZXRRdWVyeURhdGEobmFtZSwgdmFsdWUpYCBmb3IgZXZlcnlcbiAqIHNlbGVjdGVkIGFsaWFzIChleGNlcHQgdGhlIHJlc2VydmVkIGBwYXJlbnRfaWRgKS4gUm93cyBtaXNzaW5nIGZyb21cbiAqIHRoZSByZXN1bHQga2VlcCBgbnVsbGAg4oCUIG1hdGNoZXMgdGhlIGZlYXR1cmUncyBkb2N1bWVudGVkIGRlZmF1bHQuXG4gKlxuICogTWlycm9ycyB0aGUgc2hhcGUgb2YgYHJ1bldpdGhDb3VudGA6IG9uZSBxdWVyeSBwZXIgZW50cnksIGEgc2VwYXJhdGVcbiAqIHN0b3JhZ2UgbWFwIG9uIHRoZSByZWNvcmQsIG5ldmVyIHRvdWNoZXMgYF9hdHRyaWJ1dGVzYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLnJvb3RNb2RlbENsYXNzIC0gUm9vdCBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXX0gYXJncy5yb290TW9kZWxzIC0gTG9hZGVkIHJvb3QgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7UXVlcnlEYXRhRW50cnlbXX0gYXJncy5lbnRyaWVzIC0gTm9ybWFsaXplZCBxdWVyeURhdGEgZW50cmllcy5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuUXVlcnlEYXRhKHtyb290TW9kZWxDbGFzcywgcm9vdE1vZGVscywgZW50cmllc30pIHtcbiAgaWYgKHJvb3RNb2RlbHMubGVuZ3RoID09PSAwIHx8IGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICBjb25zdCBwcmltYXJ5S2V5ID0gcm9vdE1vZGVsQ2xhc3MucHJpbWFyeUtleSgpXG4gIGNvbnN0IHJvb3RJZHMgPSByb290TW9kZWxzLm1hcCgobW9kZWwpID0+IC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAobW9kZWwucmVhZENvbHVtbihwcmltYXJ5S2V5KSkpXG4gIGNvbnN0IHNvdXJjZU1vZGVsID0gcm9vdE1vZGVsc1swXVxuICBjb25zdCBwcmVwYXJlZEVudHJpZXMgPSBlbnRyaWVzLm1hcCgoZW50cnksIGVudHJ5SW5kZXgpID0+IHByZXBhcmVFbnRyeSh7XG4gICAgZW50cnksXG4gICAgZW50cnlJbmRleCxcbiAgICBwcmltYXJ5S2V5LFxuICAgIHJvb3RJZHMsXG4gICAgcm9vdE1vZGVsQ2xhc3MsXG4gICAgc291cmNlTW9kZWxcbiAgfSkpXG4gIC8qKlxuICAgKiBDb21wYXRpYmxlIHF1ZXJ5IGdyb3Vwcy5cbiAgICogQHR5cGUge0FycmF5PHthbGlhc2VzOiBTZXQ8c3RyaW5nPiwgcXVlcnk6IGltcG9ydChcIi4vbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdCwgc2lnbmF0dXJlOiBzdHJpbmd9Pn0gKi9cbiAgY29uc3QgcXVlcnlHcm91cHMgPSBbXVxuXG4gIGZvciAoY29uc3QgcHJlcGFyZWRFbnRyeSBvZiBwcmVwYXJlZEVudHJpZXMpIHtcbiAgICBjb25zdCBjb21wYXRpYmxlR3JvdXAgPSBxdWVyeUdyb3Vwcy5maW5kKChncm91cCwgZ3JvdXBJbmRleCkgPT4ge1xuICAgICAgaWYgKGdyb3VwLnNpZ25hdHVyZSAhPT0gcHJlcGFyZWRFbnRyeS5zaWduYXR1cmUpIHJldHVybiBmYWxzZVxuICAgICAgaWYgKHF1ZXJ5R3JvdXBzLnNsaWNlKGdyb3VwSW5kZXggKyAxKS5zb21lKChpbnRlcnZlbmluZ0dyb3VwKSA9PiAoXG4gICAgICAgIHByZXBhcmVkRW50cnkuYWxpYXNlcy5zb21lKChhbGlhcykgPT4gaW50ZXJ2ZW5pbmdHcm91cC5hbGlhc2VzLmhhcyhhbGlhcykpXG4gICAgICApKSkgcmV0dXJuIGZhbHNlXG5cbiAgICAgIHJldHVybiBwcmVwYXJlZEVudHJ5LmFsaWFzZXMuZXZlcnkoKGFsaWFzKSA9PiAhZ3JvdXAuYWxpYXNlcy5oYXMoYWxpYXMpKVxuICAgIH0pXG5cbiAgICBpZiAoY29tcGF0aWJsZUdyb3VwKSB7XG4gICAgICBjb21wYXRpYmxlR3JvdXAucXVlcnkuc2VsZWN0KHByZXBhcmVkRW50cnkucXVlcnkuZ2V0U2VsZWN0cygpLnNsaWNlKDEpKVxuICAgICAgZm9yIChjb25zdCBhbGlhcyBvZiBwcmVwYXJlZEVudHJ5LmFsaWFzZXMpIGNvbXBhdGlibGVHcm91cC5hbGlhc2VzLmFkZChhbGlhcylcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnlHcm91cHMucHVzaCh7XG4gICAgICAgIGFsaWFzZXM6IG5ldyBTZXQocHJlcGFyZWRFbnRyeS5hbGlhc2VzKSxcbiAgICAgICAgcXVlcnk6IHByZXBhcmVkRW50cnkucXVlcnksXG4gICAgICAgIHNpZ25hdHVyZTogcHJlcGFyZWRFbnRyeS5zaWduYXR1cmVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCB7cXVlcnl9IG9mIHF1ZXJ5R3JvdXBzKSB7XG4gICAgYXdhaXQgZXhlY3V0ZUNodW5rZWRFbnRyeVF1ZXJ5KHtwcmltYXJ5S2V5LCBxdWVyeSwgcm9vdElkcywgcm9vdE1vZGVsc30pXG4gIH1cbn1cblxuLyoqXG4gKiBQcmVwYXJlcyBvbmUgcXVlcnlEYXRhIGVudHJ5IGFuZCBpdHMgY29tcGF0aWJpbGl0eSBtZXRhZGF0YS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7UXVlcnlEYXRhRW50cnl9IGFyZ3MuZW50cnkgLSBFbnRyeSBiZWluZyBldmFsdWF0ZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5lbnRyeUluZGV4IC0gU3RhYmxlIHBvc2l0aW9uIHVzZWQgdG8gaXNvbGF0ZSBvcGFxdWUgcHJvamVjdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5wcmltYXJ5S2V5IC0gUm9vdCBtb2RlbCBwcmltYXJ5IGtleSBjb2x1bW4uXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZyB8IG51bWJlcj59IGFyZ3Mucm9vdElkcyAtIFJvb3QgcHJpbWFyeS1rZXkgdmFsdWVzLlxuICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3Mucm9vdE1vZGVsQ2xhc3MgLSBSb290IG1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5zb3VyY2VNb2RlbCAtIExvYWRlZCBvcGVyYXRpb24gb3duZXIuXG4gKiBAcmV0dXJucyB7e2FsaWFzZXM6IHN0cmluZ1tdLCBxdWVyeTogaW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0LCBzaWduYXR1cmU6IHN0cmluZ319IC0gUHJlcGFyZWQgZW50cnkuXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVFbnRyeSh7ZW50cnksIGVudHJ5SW5kZXgsIHByaW1hcnlLZXksIHJvb3RJZHMsIHJvb3RNb2RlbENsYXNzLCBzb3VyY2VNb2RlbH0pIHtcbiAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHJlc29sdmVUYXJnZXRNb2RlbENsYXNzKHJvb3RNb2RlbENsYXNzLCBlbnRyeS5jaGFpbilcbiAgY29uc3QgZm4gPSB0YXJnZXRNb2RlbENsYXNzLmdldFF1ZXJ5RGF0YUJ5TmFtZShlbnRyeS5mbk5hbWUpXG5cbiAgaWYgKCFmbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgcXVlcnlEYXRhOiAke3RhcmdldE1vZGVsQ2xhc3MubmFtZX0gaGFzIG5vIGVudHJ5IHJlZ2lzdGVyZWQgYXMgJHtKU09OLnN0cmluZ2lmeShlbnRyeS5mbk5hbWUpfS4gYCArXG4gICAgICBgRGVjbGFyZSBpdCB3aXRoICR7dGFyZ2V0TW9kZWxDbGFzcy5uYW1lfS5xdWVyeURhdGEoJHtKU09OLnN0cmluZ2lmeShlbnRyeS5mbk5hbWUpfSwgKHtxdWVyeSwgdGFibGVOYW1lfSkgPT4gcXVlcnkuc2VsZWN0KC4uLikpYClcbiAgfVxuXG4gIGNvbnN0IHF1ZXJ5ID0gc291cmNlTW9kZWwucXVlcnlGb3JNb2RlbChyb290TW9kZWxDbGFzcylcblxuICAvLyBFbXB0eSBvdXQgYW55IGRlZmF1bHRzIHRoZSBxdWVyeSBmYWN0b3J5IGFkZGVkIOKAlCBxdWVyeURhdGEgcnVuc1xuICAvLyBhIGJhcmUgYWdncmVnYXRlLCBub3QgYSBmdWxsIG1vZGVsIGxvYWQuXG4gIHF1ZXJ5LnJlc2VsZWN0KClcbiAgcXVlcnkuX3ByZWxvYWQgPSB7fVxuXG4gIC8vIEZvcmNlIHRoZSByb290IFdIRVJFIHRvIHF1YWxpZnkgYnkgdGFibGUgbmFtZSBzbyBpdCBzdXJ2aXZlcyB0aGVcbiAgLy8gam9pbnMgdGhlIGZuIG1heSBhZGQgbGF0ZXIgKG90aGVyd2lzZSBhIGNoaWxkIHRhYmxlIHNoYXJpbmcgdGhlXG4gIC8vIHJvb3QgUEsgY29sdW1uIG5hbWUsIGUuZy4gYGlkYCwgbWFrZXMgdGhlIGNsYXVzZSBhbWJpZ3VvdXMpLlxuICBxdWVyeS5fZm9yY2VRdWFsaWZ5QmFzZVRhYmxlID0gdHJ1ZVxuXG4gIGNvbnN0IGRyaXZlciA9IHF1ZXJ5LmRyaXZlclxuICBjb25zdCByb290VGFibGUgPSByb290TW9kZWxDbGFzcy50YWJsZU5hbWUoKVxuICBjb25zdCByb290UGtTcWwgPSBgJHtkcml2ZXIucXVvdGVUYWJsZShyb290VGFibGUpfS4ke2RyaXZlci5xdW90ZUNvbHVtbihwcmltYXJ5S2V5KX1gXG5cbiAgY29uc3Qgam9pbkRlc2NyaXB0b3IgPSBidWlsZE5lc3RlZEpvaW5EZXNjcmlwdG9yKGVudHJ5LmNoYWluKVxuXG4gIGlmIChqb2luRGVzY3JpcHRvciAhPT0gdHJ1ZSkge1xuICAgIHF1ZXJ5LmpvaW5zKGpvaW5EZXNjcmlwdG9yKVxuICB9XG5cbiAgcXVlcnkuZ3JvdXAocm9vdFBrU3FsKVxuICBxdWVyeS5zZWxlY3QoYCR7cm9vdFBrU3FsfSBBUyBwYXJlbnRfaWRgKVxuXG4gIGNvbnN0IHRhcmdldFRhYmxlUmVmID0gZW50cnkuY2hhaW4ubGVuZ3RoID09PSAwXG4gICAgPyByb290VGFibGVcbiAgICA6IHF1ZXJ5LmdldFRhYmxlUmVmZXJlbmNlRm9ySm9pbiguLi5lbnRyeS5jaGFpbilcblxuICAvLyBOQjogd2UgaW50ZW50aW9uYWxseSBsZWF2ZSBgX2pvaW5CYXNlUGF0aGAgYXQgW10gc28gdGhlIG91dGVyIGNoYWluXG4gIC8vIGpvaW5zIGNvbnRpbnVlIHRvIHJlc29sdmUgZnJvbSB0aGUgcm9vdCBtb2RlbCBhdCByZW5kZXIgdGltZS4gVGhlXG4gIC8vIGZuIGdldHMgYHRhYmxlTmFtZWAgZm9yIHNlbGYtcmVmZXJlbmNlOyBhZGRpdGlvbmFsIGpvaW5zIGZyb21cbiAgLy8gbmVzdGVkIGxldmVscyBzaG91bGQgdXNlIGZ1bGwgcGF0aHMgZnJvbSB0aGUgcm9vdC5cbiAgZm4oe1xuICAgIGF0dHJpYnV0ZU5hbWU6IGVudHJ5LmZuTmFtZSxcbiAgICBkcml2ZXIsXG4gICAgbW9kZWxDbGFzczogdGFyZ2V0TW9kZWxDbGFzcyxcbiAgICBwYXJlbnRJZHM6IHJvb3RJZHMsXG4gICAgcXVlcnksXG4gICAgdGFibGVOYW1lOiB0YXJnZXRUYWJsZVJlZlxuICB9KVxuXG4gIGNvbnN0IGFsaWFzZXMgPSBzZWxlY3RlZEFsaWFzZXMocXVlcnkpXG4gIGNvbnN0IHNpZ25hdHVyZVF1ZXJ5ID0gcXVlcnkuY2xvbmUoKVxuICBzaWduYXR1cmVRdWVyeS5yZXNlbGVjdChzaWduYXR1cmVRdWVyeS5nZXRTZWxlY3RzKCkuc2xpY2UoMCwgMSkpXG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBhbGlhc2VzIHx8IFtdLFxuICAgIHF1ZXJ5LFxuICAgIHNpZ25hdHVyZTogYWxpYXNlcyA/IHNpZ25hdHVyZVF1ZXJ5LnRvU3FsKCkgOiBgb3BhcXVlOiR7ZW50cnlJbmRleH1gXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGV4cGxpY2l0IGFsaWFzZXMgc2VsZWN0ZWQgYWZ0ZXIgdGhlIHJlc2VydmVkIHBhcmVudCBpZC5cbiAqIEVudHJpZXMgd2l0aCBhbiBvcGFxdWUgc2VsZWN0IHN0YXkgaXNvbGF0ZWQgYnkgcmVjZWl2aW5nIGEgdW5pcXVlIGNvbXBhdGliaWxpdHkgYWxpYXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdH0gcXVlcnkgLSBQcmVwYXJlZCBxdWVyeURhdGEgcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nW10gfCBudWxsfSAtIFNlbGVjdGVkIGFsaWFzZXMsIG9yIG51bGwgZm9yIGFuIG9wYXF1ZSBwcm9qZWN0aW9uLlxuICovXG5mdW5jdGlvbiBzZWxlY3RlZEFsaWFzZXMocXVlcnkpIHtcbiAgY29uc3QgYWxpYXNlcyA9IFtdXG5cbiAgZm9yIChjb25zdCBzZWxlY3Qgb2YgcXVlcnkuZ2V0U2VsZWN0cygpLnNsaWNlKDEpKSB7XG4gICAgY29uc3Qgc3FsID0gc2VsZWN0LnRvU3FsKClcbiAgICBjb25zdCBtYXRjaCA9IHNxbC5tYXRjaCgvXFxzQVNcXHMrKFteXFxzXSspXFxzKiQvaXUpXG5cbiAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbFxuXG4gICAgYWxpYXNlcy5wdXNoKG1hdGNoWzFdLnJlcGxhY2UoL15bXCJbYF18W1wiYFxcXV0kL2d1LCBcIlwiKSlcbiAgfVxuXG4gIHJldHVybiBhbGlhc2VzXG59XG5cbi8qKlxuICogRXhlY3V0ZXMgb25lIGNvbXBhdGlibGUgcXVlcnlEYXRhIGdyb3VwIGFuZCBhdHRhY2hlcyBldmVyeSBzZWxlY3RlZCBhbGlhcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnByaW1hcnlLZXkgLSBSb290IG1vZGVsIHByaW1hcnkga2V5IGNvbHVtbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0fSBhcmdzLnF1ZXJ5IC0gUHJlcGFyZWQgZ3JvdXBlZCBxdWVyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXX0gYXJncy5yb290TW9kZWxzIC0gTG9hZGVkIHJvb3QgcmVjb3Jkcy5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlRW50cnlRdWVyeSh7cHJpbWFyeUtleSwgcXVlcnksIHJvb3RNb2RlbHN9KSB7XG4gIGNvbnN0IHJvd3MgPSAvKiogQHR5cGUge0FycmF5PFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pj59ICovIChhd2FpdCBxdWVyeS5fZXhlY3V0ZVF1ZXJ5KCkpXG4gIGNvbnN0IGJ5UGFyZW50ID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgIGNvbnN0IHBhcmVudElkID0gcm93LnBhcmVudF9pZFxuXG4gICAgaWYgKHBhcmVudElkID09IG51bGwpIGNvbnRpbnVlXG5cbiAgICBieVBhcmVudC5zZXQocGFyZW50SWQsIHJvdylcbiAgfVxuXG4gIGZvciAoY29uc3QgbW9kZWwgb2Ygcm9vdE1vZGVscykge1xuICAgIGNvbnN0IG1vZGVsSWQgPSAvKiogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKG1vZGVsLnJlYWRDb2x1bW4ocHJpbWFyeUtleSkpXG4gICAgLy8gRHJpdmVyLXR5cGUgdG9sZXJhbmNlOiBNeVNRTCBjYW4gcmV0dXJuIFBLcyBhcyBzdHJpbmdzIGV2ZW4gd2hlblxuICAgIC8vIHRoZSBjb2x1bW4gaXMgbnVtZXJpYy4gRmFsbCBiYWNrIHRvIGEgc3RyaW5nIGxvb2t1cCBzbyByZXN1bHRzXG4gICAgLy8gc3RpbGwgbGFuZCBvbiB0aGUgcmlnaHQgbW9kZWwuXG4gICAgY29uc3Qgcm93ID0gYnlQYXJlbnQuaGFzKG1vZGVsSWQpXG4gICAgICA/IGJ5UGFyZW50LmdldChtb2RlbElkKVxuICAgICAgOiBieVBhcmVudC5nZXQoU3RyaW5nKG1vZGVsSWQpKVxuXG4gICAgaWYgKCFyb3cpIGNvbnRpbnVlXG5cbiAgICBmb3IgKGNvbnN0IFtjb2x1bW5OYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocm93KSkge1xuICAgICAgaWYgKGNvbHVtbk5hbWUgPT09IFwicGFyZW50X2lkXCIpIGNvbnRpbnVlXG5cbiAgICAgIG1vZGVsLl9zZXRRdWVyeURhdGEoY29sdW1uTmFtZSwgdmFsdWUpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgb25lIGNvbXBhdGlibGUgcXVlcnlEYXRhIGdyb3VwIGluIGNvaG9ydHMgc28gdGhlIHJvb3QgSUQgSU4tbGlzdFxuICogc3RheXMgd2l0aGluIGRyaXZlciBsaW1pdHMsIGF0dGFjaGluZyBlYWNoIHNlbGVjdGVkIGFsaWFzIHRvIHRoZSBtYXRjaGluZ1xuICogcm9vdCByZWNvcmQuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5wcmltYXJ5S2V5IC0gUm9vdCBtb2RlbCBwcmltYXJ5IGtleSBjb2x1bW4uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdH0gYXJncy5xdWVyeSAtIFByZXBhcmVkIGdyb3VwZWQgcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZyB8IG51bWJlcj59IGFyZ3Mucm9vdElkcyAtIFJvb3QgcHJpbWFyeS1rZXkgdmFsdWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdfSBhcmdzLnJvb3RNb2RlbHMgLSBMb2FkZWQgcm9vdCByZWNvcmRzLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVDaHVua2VkRW50cnlRdWVyeSh7cHJpbWFyeUtleSwgcXVlcnksIHJvb3RJZHMsIHJvb3RNb2RlbHN9KSB7XG4gIGNvbnN0IGRyaXZlciA9IHF1ZXJ5LmRyaXZlclxuICBjb25zdCBjb2hvcnRzID0gZHJpdmVyLmNodW5rVmFsdWVzKHJvb3RJZHMsIChjaHVuaykgPT4gcXVlcnkuY2xvbmUoKS53aGVyZSh7W3ByaW1hcnlLZXldOiBjaHVua30pLnRvU3FsKCkpXG5cbiAgZm9yIChjb25zdCBjb2hvcnQgb2YgY29ob3J0cykge1xuICAgIGNvbnN0IGNvaG9ydFF1ZXJ5ID0gcXVlcnkuY2xvbmUoKS53aGVyZSh7W3ByaW1hcnlLZXldOiBjb2hvcnR9KVxuXG4gICAgYXdhaXQgZXhlY3V0ZUVudHJ5UXVlcnkoe3ByaW1hcnlLZXksIHF1ZXJ5OiBjb2hvcnRRdWVyeSwgcm9vdE1vZGVsc30pXG4gIH1cbn1cbiJdfQ==
|
|
335
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS9xdWVyeS1kYXRhLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFDN0MsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0NBQWtDLENBQUE7QUFFdEU7Ozs7O0dBS0c7QUFFSDs7O0dBR0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7O0dBR0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtJQUNyRCxJQUFJLElBQUksSUFBSSxJQUFJO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFFM0IsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixPQUFPLENBQUMsRUFBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN4Qjs7c0NBRThCO1FBQzlCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUVsQixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO2dCQUMvQyxTQUFRO1lBQ1YsQ0FBQztZQUVELElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLEtBQUss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QUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUUxRyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFFL0QsTUFBTSxpQkFBaUIsQ0FBQyxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7SUFDdkUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtpc1BsYWluT2JqZWN0fSBmcm9tIFwiaXMtcGxhaW4tb2JqZWN0XCJcbmltcG9ydCB7c2NhbGFyTW9kZWxQcmltYXJ5S2V5fSBmcm9tIFwiLi4vLi4vdXRpbHMvbW9kZWwtcHJpbWFyeS1rZXkuanNcIlxuXG4vKipcbiAqIFF1ZXJ5RGF0YUVudHJ5IHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBRdWVyeURhdGFFbnRyeVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gY2hhaW4gLSBSZWxhdGlvbnNoaXAgY2hhaW4gZnJvbSB0aGUgcm9vdCBtb2RlbCB0byB0aGUgbW9kZWwgdGhhdCBkZWNsYXJlcyB0aGUgZm4uIEVtcHR5IGZvciBhIHJvb3QtbGV2ZWwgZW50cnkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZm5OYW1lIC0gSWRlbnRpZmllciB1bmRlciB3aGljaCB0aGUgZm4gaXMgcmVnaXN0ZXJlZCBvbiB0aGUgZGVjbGFyaW5nIG1vZGVsLlxuICovXG5cbi8qKlxuICogRGVmaW5lcyB0aGlzIHR5cGVkZWYuXG4gKiBAdHlwZWRlZiB7c3RyaW5nIHwgQXJyYXk8c3RyaW5nIHwgUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+PiB8IHtba2V5OiBzdHJpbmddOiB0cnVlIHwgZmFsc2UgfCBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn19IFF1ZXJ5RGF0YVNwZWNcbiAqL1xuXG4vKipcbiAqIFF1ZXJ5RGF0YUNhbGxiYWNrQXJncyB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gUXVlcnlEYXRhQ2FsbGJhY2tBcmdzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXR0cmlidXRlTmFtZSAtIE5hbWUgdW5kZXIgd2hpY2ggdGhlIGZuIHdhcyByZWdpc3RlcmVkLiBDb252ZW5pZW50IHdoZW4gYSBmbiBpcyByZXVzZWQgYWNyb3NzIGFsaWFzZXMuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBkcml2ZXIgLSBBY3RpdmUgZGF0YWJhc2UgZHJpdmVyLCBmb3IgcXVvdGluZyBoZWxwZXJzIGFuZCB0eXBlLXNwZWNpZmljIFNRTC5cbiAqIEBwcm9wZXJ0eSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MgdGhlIGZuIGlzIHJlZ2lzdGVyZWQgb24gKHRoZSBjaGFpbidzIHRhcmdldCkuXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZyB8IG51bWJlcj59IHBhcmVudElkcyAtIFByaW1hcnkta2V5IHZhbHVlcyBvZiB0aGUgbG9hZGVkIHJvb3QgcmVjb3Jkcy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0fSBxdWVyeSAtIEdyb3VwZWQgcXVlcnkgYWxyZWFkeSBqb2luZWQgZG93biB0aGUgY2hhaW4sIGZpbHRlcmVkIGJ5IGBwYXJlbnRJZHNgLCB3aXRoIGBwYXJlbnRfaWRgIHByZS1zZWxlY3RlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBVbnF1b3RlZCB0YWJsZSByZWZlcmVuY2UgKGFsaWFzIG9yIHRhYmxlIG5hbWUpIGZvciB0aGUgY2hhaW4ncyB0YXJnZXQsIHJlYWR5IHRvIHBhc3RlIGludG8gU1FMLlxuICovXG5cbi8qKlxuICogUXVlcnlEYXRhRm4gdHlwZS5cbiAqIEB0eXBlZGVmIHsoYXJnczogUXVlcnlEYXRhQ2FsbGJhY2tBcmdzKSA9PiB2b2lkIHwgaW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0fSBRdWVyeURhdGFGblxuICovXG5cbi8qKlxuICogTm9ybWFsaXplIGEgdXNlci1zdXBwbGllZCBxdWVyeURhdGEgc3BlYyBpbnRvIGEgZmxhdCBsaXN0IG9mIGVudHJpZXNcbiAqIHRoZSBydW5uZXIgY2FuIGNvbnN1bWUuIFRoZSBzcGVjIG1pcnJvcnMgdGhlIHNoYXBlIG9mIGBwcmVsb2FkYCwgd2l0aFxuICogdGhlIGltcG9ydGFudCBkaXN0aW5jdGlvbiB0aGF0ICoqbGVhZiBzdHJpbmdzIGFyZSBmbiBuYW1lcyoqLCBub3RcbiAqIGZ1cnRoZXIgcmVsYXRpb25zaGlwIHNlZ21lbnRzLiBOZXN0ZWQga2V5cyBhcmUgcmVsYXRpb25zaGlwIG5hbWVzXG4gKiBhbG9uZyB0aGUgam9pbiBjaGFpbiBmcm9tIHRoZSByb290IG1vZGVsIHRvIHRoZSBkZWNsYXJpbmcgbW9kZWwuXG4gKlxuICogQWNjZXB0ZWQgc2hhcGVzIChhbGwgeWllbGQgdGhlIHNhbWUgZmxhdCBlbnRyaWVzKTpcbiAqICAgXCJmb29cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oaSIFt7Y2hhaW46IFtdLCBmbk5hbWU6IFwiZm9vXCJ9XVxuICogICBbXCJmb29cIiwgXCJiYXJcIl0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKGkiBbe2NoYWluOiBbXSwgZm5OYW1lOiBcImZvb1wifSwge2NoYWluOiBbXSwgZm5OYW1lOiBcImJhclwifV1cbiAqICAge2ZvbzogdHJ1ZX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKGkiBbe2NoYWluOiBbXSwgZm5OYW1lOiBcImZvb1wifV1cbiAqICAge3Byb2plY3RzOiBbXCJ0YXNrc0NvdW50XCJdfSAgICAgICAgICAgICAgICAg4oaSIFt7Y2hhaW46IFtcInByb2plY3RzXCJdLCBmbk5hbWU6IFwidGFza3NDb3VudFwifV1cbiAqICAge3Byb2plY3RzOiB7dGFza3M6IFtcInRyYW5zcG9ydFNlY29uZHNTdW1cIiwge3RpbWVsb2dzOiBbXCJ0aW1lU2Vjb25kc1N1bVwiXX1dfX1cbiAqICAgICDihpIgW3tjaGFpbjogW1wicHJvamVjdHNcIixcInRhc2tzXCJdLCBmbk5hbWU6IFwidHJhbnNwb3J0U2Vjb25kc1N1bVwifSxcbiAqICAgICAgICB7Y2hhaW46IFtcInByb2plY3RzXCIsXCJ0YXNrc1wiLFwidGltZWxvZ3NcIl0sIGZuTmFtZTogXCJ0aW1lU2Vjb25kc1N1bVwifV1cbiAqIEBwYXJhbSB7UXVlcnlEYXRhU3BlY30gc3BlYyAtIFVzZXItc3VwcGxpZWQgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nW119IFtjaGFpbl0gLSBDdXJyZW50IGNoYWluIChpbnRlcm5hbCByZWN1cnNpb24pLlxuICogQHJldHVybnMge1F1ZXJ5RGF0YUVudHJ5W119IC0gRmxhdCBsaXN0IG9mIGVudHJpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVRdWVyeURhdGFTcGVjKHNwZWMsIGNoYWluID0gW10pIHtcbiAgaWYgKHNwZWMgPT0gbnVsbCkgcmV0dXJuIFtdXG5cbiAgaWYgKHR5cGVvZiBzcGVjID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIFt7Y2hhaW46IFsuLi5jaGFpbl0sIGZuTmFtZTogc3BlY31dXG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShzcGVjKSkge1xuICAgIC8qKlxuICAgICAqIEVudHJpZXMuXG4gICAgICogQHR5cGUge1F1ZXJ5RGF0YUVudHJ5W119ICovXG4gICAgY29uc3QgZW50cmllcyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc3BlYykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7Y2hhaW46IFsuLi5jaGFpbl0sIGZuTmFtZTogaXRlbX0pXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgIGZvciAoY29uc3QgbmVzdGVkIG9mIG5vcm1hbGl6ZVF1ZXJ5RGF0YVNwZWMoLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gKi8gKGl0ZW0pLCBjaGFpbikpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2gobmVzdGVkKVxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBxdWVyeURhdGEgYXJyYXkgZW50cnk6ICR7dHlwZW9mIGl0ZW19YClcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cmllc1xuICB9XG5cbiAgaWYgKGlzUGxhaW5PYmplY3Qoc3BlYykpIHtcbiAgICAvKipcbiAgICAgKiBFbnRyaWVzLlxuICAgICAqIEB0eXBlIHtRdWVyeURhdGFFbnRyeVtdfSAqL1xuICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc3BlYykpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBlbnRyaWVzLnB1c2goe2NoYWluOiBbLi4uY2hhaW5dLCBmbk5hbWU6IGtleX0pXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIGNvbnRpbnVlXG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBuZXN0ZWQgb2Ygbm9ybWFsaXplUXVlcnlEYXRhU3BlYygvKiogQHR5cGUge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSAqLyAodmFsdWUpLCBbLi4uY2hhaW4sIGtleV0pKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKG5lc3RlZClcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcXVlcnlEYXRhIHZhbHVlIGZvciBcIiR7a2V5fVwiOiAke3R5cGVvZiB2YWx1ZX1gKVxuICAgIH1cblxuICAgIHJldHVybiBlbnRyaWVzXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcXVlcnlEYXRhIHNwZWM6ICR7dHlwZW9mIHNwZWN9YClcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgbmVzdGVkIGBqb2lucyguLi4pYCBkZXNjcmlwdG9yIGZvciBhIGNoYWluIG9mIHJlbGF0aW9uc2hpcCBuYW1lcy5cbiAqIGBbXCJwcm9qZWN0c1wiLCBcInRhc2tzXCJdYCDihpIgYHtwcm9qZWN0czoge3Rhc2tzOiB0cnVlfX1gLiBVc2VkIGludGVybmFsbHkgc29cbiAqIHRoZSBydW5uZXIgY2FuIHJldXNlIHRoZSBleGlzdGluZyBgam9pbnNgIHBhdGgtcmVnaXN0cmF0aW9uIG1hY2hpbmVyeVxuICogKEpvaW5UcmFja2VyLCBhbGlhcyBnZW5lcmF0aW9uLCBzY29wZSBhcHBsaWNhdGlvbikuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGFpbiAtIFJlbGF0aW9uc2hpcCBjaGFpbi5cbiAqIEByZXR1cm5zIHt0cnVlIHwgUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSAtIE5lc3RlZCBqb2luIGRlc2NyaXB0b3IsIG9yIGB0cnVlYCB3aGVuIHRoZSBjaGFpbiBpcyBlbXB0eS5cbiAqL1xuZnVuY3Rpb24gYnVpbGROZXN0ZWRKb2luRGVzY3JpcHRvcihjaGFpbikge1xuICBpZiAoY2hhaW4ubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZVxuXG4gIC8qKlxuICAgKiBPYmouXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59ICovXG4gIGNvbnN0IG9iaiA9IHt9XG4gIGxldCBjdXJzb3IgPSBvYmpcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYWluLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3Qgc2VnID0gY2hhaW5baV1cbiAgICBjb25zdCBpc0xhc3QgPSBpID09PSBjaGFpbi5sZW5ndGggLSAxXG5cbiAgICBjdXJzb3Jbc2VnXSA9IGlzTGFzdCA/IHRydWUgOiB7fVxuXG4gICAgaWYgKCFpc0xhc3QpIGN1cnNvciA9IGN1cnNvcltzZWddXG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbi8qKlxuICogV2FsayBhIHJlbGF0aW9uc2hpcCBjaGFpbiBmcm9tIHRoZSByb290IG1vZGVsIGFuZCByZXR1cm4gdGhlIG1vZGVsXG4gKiBjbGFzcyBhdCBpdHMgdGFpbC4gVGhyb3dzIHdpdGggYSBjbGVhciBtZXNzYWdlIHdoZW4gYW55IHNlZ21lbnQgaXNcbiAqIHVua25vd24uXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gcm9vdE1vZGVsQ2xhc3MgLSBSb290IG1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hhaW4gLSBSZWxhdGlvbnNoaXAgY2hhaW4uXG4gKiBAcmV0dXJucyB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSAtIFRhcmdldCBtb2RlbCBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVRhcmdldE1vZGVsQ2xhc3Mocm9vdE1vZGVsQ2xhc3MsIGNoYWluKSB7XG4gIGxldCBtb2RlbENsYXNzID0gcm9vdE1vZGVsQ2xhc3NcblxuICBmb3IgKGNvbnN0IHNlZ21lbnQgb2YgY2hhaW4pIHtcbiAgICBjb25zdCByZWxhdGlvbnNoaXAgPSBtb2RlbENsYXNzLmdldFJlbGF0aW9uc2hpcEJ5TmFtZShzZWdtZW50KVxuICAgIGNvbnN0IHJhd1RhcmdldCA9IHJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgIGlmICghcmF3VGFyZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHF1ZXJ5RGF0YTogY291bGQgbm90IHJlc29sdmUgdGFyZ2V0IG1vZGVsIGZvciAke21vZGVsQ2xhc3MubmFtZX0jJHtzZWdtZW50fWApXG4gICAgfVxuXG4gICAgbW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3MuYmluZFJlY29yZE1ldGFkYXRhTW9kZWxDbGFzcyhyYXdUYXJnZXQpXG4gIH1cblxuICByZXR1cm4gbW9kZWxDbGFzc1xufVxuXG4vKipcbiAqIFJ1biBldmVyeSBxdWVyeURhdGEgZW50cnkgYWdhaW5zdCB0aGUgbG9hZGVkIHJvb3QgcmVjb3JkcywgYXR0YWNoaW5nXG4gKiB0aGUgcmVzdWx0aW5nIHZhbHVlcyBhcyBxdWVyeURhdGEgZW50cmllcyBvbiBlYWNoIHJvb3QgcmVjb3JkLlxuICpcbiAqIE9uZSBncm91cGVkIHF1ZXJ5IHBlciBlbnRyeTogdGhlIHJ1bm5lciBidWlsZHMgYSBmcmVzaCBxdWVyeSBvdmVyIHRoZVxuICogcm9vdCBtb2RlbCwgam9pbnMgZG93biB0aGUgY2hhaW4sIGdyb3VwcyBieSB0aGUgcm9vdCB0YWJsZSdzIHByaW1hcnlcbiAqIGtleSwgYW5kIGludm9rZXMgdGhlIHJlZ2lzdGVyZWQgZm4gdG8gYWRkIGl0cyBvd24gU0VMRUNUIChhbmQgYW55XG4gKiBhZGRpdGlvbmFsIGpvaW5zL3doZXJlKS4gUmVzdWx0cyBhcmUgbWFwcGVkIGJhY2sgdG8gcm9vdCBtb2RlbHMgYnlcbiAqIHByaW1hcnkga2V5IGFuZCBhdHRhY2hlZCB2aWEgYF9zZXRRdWVyeURhdGEobmFtZSwgdmFsdWUpYCBmb3IgZXZlcnlcbiAqIHNlbGVjdGVkIGFsaWFzIChleGNlcHQgdGhlIHJlc2VydmVkIGBwYXJlbnRfaWRgKS4gUm93cyBtaXNzaW5nIGZyb21cbiAqIHRoZSByZXN1bHQga2VlcCBgbnVsbGAg4oCUIG1hdGNoZXMgdGhlIGZlYXR1cmUncyBkb2N1bWVudGVkIGRlZmF1bHQuXG4gKlxuICogTWlycm9ycyB0aGUgc2hhcGUgb2YgYHJ1bldpdGhDb3VudGA6IG9uZSBxdWVyeSBwZXIgZW50cnksIGEgc2VwYXJhdGVcbiAqIHN0b3JhZ2UgbWFwIG9uIHRoZSByZWNvcmQsIG5ldmVyIHRvdWNoZXMgYF9hdHRyaWJ1dGVzYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLnJvb3RNb2RlbENsYXNzIC0gUm9vdCBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXX0gYXJncy5yb290TW9kZWxzIC0gTG9hZGVkIHJvb3QgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7UXVlcnlEYXRhRW50cnlbXX0gYXJncy5lbnRyaWVzIC0gTm9ybWFsaXplZCBxdWVyeURhdGEgZW50cmllcy5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuUXVlcnlEYXRhKHtyb290TW9kZWxDbGFzcywgcm9vdE1vZGVscywgZW50cmllc30pIHtcbiAgaWYgKHJvb3RNb2RlbHMubGVuZ3RoID09PSAwIHx8IGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICBjb25zdCBwcmltYXJ5S2V5ID0gc2NhbGFyTW9kZWxQcmltYXJ5S2V5KHJvb3RNb2RlbENsYXNzLnByaW1hcnlLZXkoKSwgYHF1ZXJ5RGF0YSBmb3IgJHtyb290TW9kZWxDbGFzcy5uYW1lfWApXG4gIGNvbnN0IHJvb3RJZHMgPSByb290TW9kZWxzLm1hcCgobW9kZWwpID0+IC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAobW9kZWwucmVhZENvbHVtbihwcmltYXJ5S2V5KSkpXG4gIGNvbnN0IHNvdXJjZU1vZGVsID0gcm9vdE1vZGVsc1swXVxuICBjb25zdCBwcmVwYXJlZEVudHJpZXMgPSBlbnRyaWVzLm1hcCgoZW50cnksIGVudHJ5SW5kZXgpID0+IHByZXBhcmVFbnRyeSh7XG4gICAgZW50cnksXG4gICAgZW50cnlJbmRleCxcbiAgICBwcmltYXJ5S2V5LFxuICAgIHJvb3RJZHMsXG4gICAgcm9vdE1vZGVsQ2xhc3MsXG4gICAgc291cmNlTW9kZWxcbiAgfSkpXG4gIC8qKlxuICAgKiBDb21wYXRpYmxlIHF1ZXJ5IGdyb3Vwcy5cbiAgICogQHR5cGUge0FycmF5PHthbGlhc2VzOiBTZXQ8c3RyaW5nPiwgcXVlcnk6IGltcG9ydChcIi4vbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdCwgc2lnbmF0dXJlOiBzdHJpbmd9Pn0gKi9cbiAgY29uc3QgcXVlcnlHcm91cHMgPSBbXVxuXG4gIGZvciAoY29uc3QgcHJlcGFyZWRFbnRyeSBvZiBwcmVwYXJlZEVudHJpZXMpIHtcbiAgICBjb25zdCBjb21wYXRpYmxlR3JvdXAgPSBxdWVyeUdyb3Vwcy5maW5kKChncm91cCwgZ3JvdXBJbmRleCkgPT4ge1xuICAgICAgaWYgKGdyb3VwLnNpZ25hdHVyZSAhPT0gcHJlcGFyZWRFbnRyeS5zaWduYXR1cmUpIHJldHVybiBmYWxzZVxuICAgICAgaWYgKHF1ZXJ5R3JvdXBzLnNsaWNlKGdyb3VwSW5kZXggKyAxKS5zb21lKChpbnRlcnZlbmluZ0dyb3VwKSA9PiAoXG4gICAgICAgIHByZXBhcmVkRW50cnkuYWxpYXNlcy5zb21lKChhbGlhcykgPT4gaW50ZXJ2ZW5pbmdHcm91cC5hbGlhc2VzLmhhcyhhbGlhcykpXG4gICAgICApKSkgcmV0dXJuIGZhbHNlXG5cbiAgICAgIHJldHVybiBwcmVwYXJlZEVudHJ5LmFsaWFzZXMuZXZlcnkoKGFsaWFzKSA9PiAhZ3JvdXAuYWxpYXNlcy5oYXMoYWxpYXMpKVxuICAgIH0pXG5cbiAgICBpZiAoY29tcGF0aWJsZUdyb3VwKSB7XG4gICAgICBjb21wYXRpYmxlR3JvdXAucXVlcnkuc2VsZWN0KHByZXBhcmVkRW50cnkucXVlcnkuZ2V0U2VsZWN0cygpLnNsaWNlKDEpKVxuICAgICAgZm9yIChjb25zdCBhbGlhcyBvZiBwcmVwYXJlZEVudHJ5LmFsaWFzZXMpIGNvbXBhdGlibGVHcm91cC5hbGlhc2VzLmFkZChhbGlhcylcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnlHcm91cHMucHVzaCh7XG4gICAgICAgIGFsaWFzZXM6IG5ldyBTZXQocHJlcGFyZWRFbnRyeS5hbGlhc2VzKSxcbiAgICAgICAgcXVlcnk6IHByZXBhcmVkRW50cnkucXVlcnksXG4gICAgICAgIHNpZ25hdHVyZTogcHJlcGFyZWRFbnRyeS5zaWduYXR1cmVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCB7cXVlcnl9IG9mIHF1ZXJ5R3JvdXBzKSB7XG4gICAgYXdhaXQgZXhlY3V0ZUNodW5rZWRFbnRyeVF1ZXJ5KHtwcmltYXJ5S2V5LCBxdWVyeSwgcm9vdElkcywgcm9vdE1vZGVsc30pXG4gIH1cbn1cblxuLyoqXG4gKiBQcmVwYXJlcyBvbmUgcXVlcnlEYXRhIGVudHJ5IGFuZCBpdHMgY29tcGF0aWJpbGl0eSBtZXRhZGF0YS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7UXVlcnlEYXRhRW50cnl9IGFyZ3MuZW50cnkgLSBFbnRyeSBiZWluZyBldmFsdWF0ZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5lbnRyeUluZGV4IC0gU3RhYmxlIHBvc2l0aW9uIHVzZWQgdG8gaXNvbGF0ZSBvcGFxdWUgcHJvamVjdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5wcmltYXJ5S2V5IC0gUm9vdCBtb2RlbCBwcmltYXJ5IGtleSBjb2x1bW4uXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZyB8IG51bWJlcj59IGFyZ3Mucm9vdElkcyAtIFJvb3QgcHJpbWFyeS1rZXkgdmFsdWVzLlxuICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3Mucm9vdE1vZGVsQ2xhc3MgLSBSb290IG1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5zb3VyY2VNb2RlbCAtIExvYWRlZCBvcGVyYXRpb24gb3duZXIuXG4gKiBAcmV0dXJucyB7e2FsaWFzZXM6IHN0cmluZ1tdLCBxdWVyeTogaW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0LCBzaWduYXR1cmU6IHN0cmluZ319IC0gUHJlcGFyZWQgZW50cnkuXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVFbnRyeSh7ZW50cnksIGVudHJ5SW5kZXgsIHByaW1hcnlLZXksIHJvb3RJZHMsIHJvb3RNb2RlbENsYXNzLCBzb3VyY2VNb2RlbH0pIHtcbiAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHJlc29sdmVUYXJnZXRNb2RlbENsYXNzKHJvb3RNb2RlbENsYXNzLCBlbnRyeS5jaGFpbilcbiAgY29uc3QgZm4gPSB0YXJnZXRNb2RlbENsYXNzLmdldFF1ZXJ5RGF0YUJ5TmFtZShlbnRyeS5mbk5hbWUpXG5cbiAgaWYgKCFmbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgcXVlcnlEYXRhOiAke3RhcmdldE1vZGVsQ2xhc3MubmFtZX0gaGFzIG5vIGVudHJ5IHJlZ2lzdGVyZWQgYXMgJHtKU09OLnN0cmluZ2lmeShlbnRyeS5mbk5hbWUpfS4gYCArXG4gICAgICBgRGVjbGFyZSBpdCB3aXRoICR7dGFyZ2V0TW9kZWxDbGFzcy5uYW1lfS5xdWVyeURhdGEoJHtKU09OLnN0cmluZ2lmeShlbnRyeS5mbk5hbWUpfSwgKHtxdWVyeSwgdGFibGVOYW1lfSkgPT4gcXVlcnkuc2VsZWN0KC4uLikpYClcbiAgfVxuXG4gIGNvbnN0IHF1ZXJ5ID0gc291cmNlTW9kZWwucXVlcnlGb3JNb2RlbChyb290TW9kZWxDbGFzcylcblxuICAvLyBFbXB0eSBvdXQgYW55IGRlZmF1bHRzIHRoZSBxdWVyeSBmYWN0b3J5IGFkZGVkIOKAlCBxdWVyeURhdGEgcnVuc1xuICAvLyBhIGJhcmUgYWdncmVnYXRlLCBub3QgYSBmdWxsIG1vZGVsIGxvYWQuXG4gIHF1ZXJ5LnJlc2VsZWN0KClcbiAgcXVlcnkuX3ByZWxvYWQgPSB7fVxuXG4gIC8vIEZvcmNlIHRoZSByb290IFdIRVJFIHRvIHF1YWxpZnkgYnkgdGFibGUgbmFtZSBzbyBpdCBzdXJ2aXZlcyB0aGVcbiAgLy8gam9pbnMgdGhlIGZuIG1heSBhZGQgbGF0ZXIgKG90aGVyd2lzZSBhIGNoaWxkIHRhYmxlIHNoYXJpbmcgdGhlXG4gIC8vIHJvb3QgUEsgY29sdW1uIG5hbWUsIGUuZy4gYGlkYCwgbWFrZXMgdGhlIGNsYXVzZSBhbWJpZ3VvdXMpLlxuICBxdWVyeS5fZm9yY2VRdWFsaWZ5QmFzZVRhYmxlID0gdHJ1ZVxuXG4gIGNvbnN0IGRyaXZlciA9IHF1ZXJ5LmRyaXZlclxuICBjb25zdCByb290VGFibGUgPSByb290TW9kZWxDbGFzcy50YWJsZU5hbWUoKVxuICBjb25zdCByb290UGtTcWwgPSBgJHtkcml2ZXIucXVvdGVUYWJsZShyb290VGFibGUpfS4ke2RyaXZlci5xdW90ZUNvbHVtbihwcmltYXJ5S2V5KX1gXG5cbiAgY29uc3Qgam9pbkRlc2NyaXB0b3IgPSBidWlsZE5lc3RlZEpvaW5EZXNjcmlwdG9yKGVudHJ5LmNoYWluKVxuXG4gIGlmIChqb2luRGVzY3JpcHRvciAhPT0gdHJ1ZSkge1xuICAgIHF1ZXJ5LmpvaW5zKGpvaW5EZXNjcmlwdG9yKVxuICB9XG5cbiAgcXVlcnkuZ3JvdXAocm9vdFBrU3FsKVxuICBxdWVyeS5zZWxlY3QoYCR7cm9vdFBrU3FsfSBBUyBwYXJlbnRfaWRgKVxuXG4gIGNvbnN0IHRhcmdldFRhYmxlUmVmID0gZW50cnkuY2hhaW4ubGVuZ3RoID09PSAwXG4gICAgPyByb290VGFibGVcbiAgICA6IHF1ZXJ5LmdldFRhYmxlUmVmZXJlbmNlRm9ySm9pbiguLi5lbnRyeS5jaGFpbilcblxuICAvLyBOQjogd2UgaW50ZW50aW9uYWxseSBsZWF2ZSBgX2pvaW5CYXNlUGF0aGAgYXQgW10gc28gdGhlIG91dGVyIGNoYWluXG4gIC8vIGpvaW5zIGNvbnRpbnVlIHRvIHJlc29sdmUgZnJvbSB0aGUgcm9vdCBtb2RlbCBhdCByZW5kZXIgdGltZS4gVGhlXG4gIC8vIGZuIGdldHMgYHRhYmxlTmFtZWAgZm9yIHNlbGYtcmVmZXJlbmNlOyBhZGRpdGlvbmFsIGpvaW5zIGZyb21cbiAgLy8gbmVzdGVkIGxldmVscyBzaG91bGQgdXNlIGZ1bGwgcGF0aHMgZnJvbSB0aGUgcm9vdC5cbiAgZm4oe1xuICAgIGF0dHJpYnV0ZU5hbWU6IGVudHJ5LmZuTmFtZSxcbiAgICBkcml2ZXIsXG4gICAgbW9kZWxDbGFzczogdGFyZ2V0TW9kZWxDbGFzcyxcbiAgICBwYXJlbnRJZHM6IHJvb3RJZHMsXG4gICAgcXVlcnksXG4gICAgdGFibGVOYW1lOiB0YXJnZXRUYWJsZVJlZlxuICB9KVxuXG4gIGNvbnN0IGFsaWFzZXMgPSBzZWxlY3RlZEFsaWFzZXMocXVlcnkpXG4gIGNvbnN0IHNpZ25hdHVyZVF1ZXJ5ID0gcXVlcnkuY2xvbmUoKVxuICBzaWduYXR1cmVRdWVyeS5yZXNlbGVjdChzaWduYXR1cmVRdWVyeS5nZXRTZWxlY3RzKCkuc2xpY2UoMCwgMSkpXG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBhbGlhc2VzIHx8IFtdLFxuICAgIHF1ZXJ5LFxuICAgIHNpZ25hdHVyZTogYWxpYXNlcyA/IHNpZ25hdHVyZVF1ZXJ5LnRvU3FsKCkgOiBgb3BhcXVlOiR7ZW50cnlJbmRleH1gXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGV4cGxpY2l0IGFsaWFzZXMgc2VsZWN0ZWQgYWZ0ZXIgdGhlIHJlc2VydmVkIHBhcmVudCBpZC5cbiAqIEVudHJpZXMgd2l0aCBhbiBvcGFxdWUgc2VsZWN0IHN0YXkgaXNvbGF0ZWQgYnkgcmVjZWl2aW5nIGEgdW5pcXVlIGNvbXBhdGliaWxpdHkgYWxpYXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdH0gcXVlcnkgLSBQcmVwYXJlZCBxdWVyeURhdGEgcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nW10gfCBudWxsfSAtIFNlbGVjdGVkIGFsaWFzZXMsIG9yIG51bGwgZm9yIGFuIG9wYXF1ZSBwcm9qZWN0aW9uLlxuICovXG5mdW5jdGlvbiBzZWxlY3RlZEFsaWFzZXMocXVlcnkpIHtcbiAgY29uc3QgYWxpYXNlcyA9IFtdXG5cbiAgZm9yIChjb25zdCBzZWxlY3Qgb2YgcXVlcnkuZ2V0U2VsZWN0cygpLnNsaWNlKDEpKSB7XG4gICAgY29uc3Qgc3FsID0gc2VsZWN0LnRvU3FsKClcbiAgICBjb25zdCBtYXRjaCA9IHNxbC5tYXRjaCgvXFxzQVNcXHMrKFteXFxzXSspXFxzKiQvaXUpXG5cbiAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbFxuXG4gICAgYWxpYXNlcy5wdXNoKG1hdGNoWzFdLnJlcGxhY2UoL15bXCJbYF18W1wiYFxcXV0kL2d1LCBcIlwiKSlcbiAgfVxuXG4gIHJldHVybiBhbGlhc2VzXG59XG5cbi8qKlxuICogRXhlY3V0ZXMgb25lIGNvbXBhdGlibGUgcXVlcnlEYXRhIGdyb3VwIGFuZCBhdHRhY2hlcyBldmVyeSBzZWxlY3RlZCBhbGlhcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnByaW1hcnlLZXkgLSBSb290IG1vZGVsIHByaW1hcnkga2V5IGNvbHVtbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0fSBhcmdzLnF1ZXJ5IC0gUHJlcGFyZWQgZ3JvdXBlZCBxdWVyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXX0gYXJncy5yb290TW9kZWxzIC0gTG9hZGVkIHJvb3QgcmVjb3Jkcy5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlRW50cnlRdWVyeSh7cHJpbWFyeUtleSwgcXVlcnksIHJvb3RNb2RlbHN9KSB7XG4gIGNvbnN0IHJvd3MgPSAvKiogQHR5cGUge0FycmF5PFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pj59ICovIChhd2FpdCBxdWVyeS5fZXhlY3V0ZVF1ZXJ5KCkpXG4gIGNvbnN0IGJ5UGFyZW50ID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgIGNvbnN0IHBhcmVudElkID0gcm93LnBhcmVudF9pZFxuXG4gICAgaWYgKHBhcmVudElkID09IG51bGwpIGNvbnRpbnVlXG5cbiAgICBieVBhcmVudC5zZXQocGFyZW50SWQsIHJvdylcbiAgfVxuXG4gIGZvciAoY29uc3QgbW9kZWwgb2Ygcm9vdE1vZGVscykge1xuICAgIGNvbnN0IG1vZGVsSWQgPSAvKiogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKG1vZGVsLnJlYWRDb2x1bW4ocHJpbWFyeUtleSkpXG4gICAgLy8gRHJpdmVyLXR5cGUgdG9sZXJhbmNlOiBNeVNRTCBjYW4gcmV0dXJuIFBLcyBhcyBzdHJpbmdzIGV2ZW4gd2hlblxuICAgIC8vIHRoZSBjb2x1bW4gaXMgbnVtZXJpYy4gRmFsbCBiYWNrIHRvIGEgc3RyaW5nIGxvb2t1cCBzbyByZXN1bHRzXG4gICAgLy8gc3RpbGwgbGFuZCBvbiB0aGUgcmlnaHQgbW9kZWwuXG4gICAgY29uc3Qgcm93ID0gYnlQYXJlbnQuaGFzKG1vZGVsSWQpXG4gICAgICA/IGJ5UGFyZW50LmdldChtb2RlbElkKVxuICAgICAgOiBieVBhcmVudC5nZXQoU3RyaW5nKG1vZGVsSWQpKVxuXG4gICAgaWYgKCFyb3cpIGNvbnRpbnVlXG5cbiAgICBmb3IgKGNvbnN0IFtjb2x1bW5OYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocm93KSkge1xuICAgICAgaWYgKGNvbHVtbk5hbWUgPT09IFwicGFyZW50X2lkXCIpIGNvbnRpbnVlXG5cbiAgICAgIG1vZGVsLl9zZXRRdWVyeURhdGEoY29sdW1uTmFtZSwgdmFsdWUpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgb25lIGNvbXBhdGlibGUgcXVlcnlEYXRhIGdyb3VwIGluIGNvaG9ydHMgc28gdGhlIHJvb3QgSUQgSU4tbGlzdFxuICogc3RheXMgd2l0aGluIGRyaXZlciBsaW1pdHMsIGF0dGFjaGluZyBlYWNoIHNlbGVjdGVkIGFsaWFzIHRvIHRoZSBtYXRjaGluZ1xuICogcm9vdCByZWNvcmQuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5wcmltYXJ5S2V5IC0gUm9vdCBtb2RlbCBwcmltYXJ5IGtleSBjb2x1bW4uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdH0gYXJncy5xdWVyeSAtIFByZXBhcmVkIGdyb3VwZWQgcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZyB8IG51bWJlcj59IGFyZ3Mucm9vdElkcyAtIFJvb3QgcHJpbWFyeS1rZXkgdmFsdWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdfSBhcmdzLnJvb3RNb2RlbHMgLSBMb2FkZWQgcm9vdCByZWNvcmRzLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVDaHVua2VkRW50cnlRdWVyeSh7cHJpbWFyeUtleSwgcXVlcnksIHJvb3RJZHMsIHJvb3RNb2RlbHN9KSB7XG4gIGNvbnN0IGRyaXZlciA9IHF1ZXJ5LmRyaXZlclxuICBjb25zdCBjb2hvcnRzID0gZHJpdmVyLmNodW5rVmFsdWVzKHJvb3RJZHMsIChjaHVuaykgPT4gcXVlcnkuY2xvbmUoKS53aGVyZSh7W3ByaW1hcnlLZXldOiBjaHVua30pLnRvU3FsKCkpXG5cbiAgZm9yIChjb25zdCBjb2hvcnQgb2YgY29ob3J0cykge1xuICAgIGNvbnN0IGNvaG9ydFF1ZXJ5ID0gcXVlcnkuY2xvbmUoKS53aGVyZSh7W3ByaW1hcnlLZXldOiBjb2hvcnR9KVxuXG4gICAgYXdhaXQgZXhlY3V0ZUVudHJ5UXVlcnkoe3ByaW1hcnlLZXksIHF1ZXJ5OiBjb2hvcnRRdWVyeSwgcm9vdE1vZGVsc30pXG4gIH1cbn1cbiJdfQ==
|
|
@@ -28,6 +28,13 @@ export default class VelociousDatabaseQueryUpdateBase {
|
|
|
28
28
|
* @returns {string | number} - SQL literal.
|
|
29
29
|
*/
|
|
30
30
|
formatValue(value: ReturnType<typeof JSON.parse>): string | number;
|
|
31
|
+
/**
|
|
32
|
+
* Formats one hash condition with SQL null semantics.
|
|
33
|
+
* @param {string} columnName - Column name.
|
|
34
|
+
* @param {ReturnType<typeof JSON.parse>} value - Condition value.
|
|
35
|
+
* @returns {string} - SQL condition.
|
|
36
|
+
*/
|
|
37
|
+
formatCondition(columnName: string, value: ReturnType<typeof JSON.parse>): string;
|
|
31
38
|
toSql(): void;
|
|
32
39
|
}
|
|
33
40
|
//# sourceMappingURL=update-base.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-base.d.ts","sourceRoot":"","sources":["../../../../src/database/query/update-base.js"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,gCAAgC;IAU5C,UAAU;IACV,IAAI;IACJ,MAAM;IACN,SAAS;IAZhB;;;;;;;OAOG;IACH,YAAY,EAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAC,EAL9C;QAA4D,UAAU,EAA9D,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CACrD;QAA4D,IAAI,EAAxD,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CACrD;QAAmD,MAAM,EAAjD,OAAO,oBAAoB,EAAE,OAAO,CAC5C;QAAqB,SAAS,EAAtB,MAAM,CAChB;KACgD,EAKhD;IAED;;;OAGG;IACH,UAAU,IAFG,OAAO,4BAA4B,EAAE,OAAO,CAIxD;IAED;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAHN,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAGtB,GAFJ,MAAM,GAAG,MAAM,CAM3B;IAED,KAAK,SAEJ;CACF"}
|
|
1
|
+
{"version":3,"file":"update-base.d.ts","sourceRoot":"","sources":["../../../../src/database/query/update-base.js"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,gCAAgC;IAU5C,UAAU;IACV,IAAI;IACJ,MAAM;IACN,SAAS;IAZhB;;;;;;;OAOG;IACH,YAAY,EAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAC,EAL9C;QAA4D,UAAU,EAA9D,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CACrD;QAA4D,IAAI,EAAxD,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CACrD;QAAmD,MAAM,EAAjD,OAAO,oBAAoB,EAAE,OAAO,CAC5C;QAAqB,SAAS,EAAtB,MAAM,CAChB;KACgD,EAKhD;IAED;;;OAGG;IACH,UAAU,IAFG,OAAO,4BAA4B,EAAE,OAAO,CAIxD;IAED;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAHN,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAGtB,GAFJ,MAAM,GAAG,MAAM,CAM3B;IAED;;;;;OAKG;IACH,eAAe,CAAC,UAAU,EAJf,MAIe,EAAE,KAAK,EAHtB,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAGN,GAFpB,MAAM,CAQlB;IAED,KAAK,SAEJ;CACF"}
|
|
@@ -31,8 +31,20 @@ export default class VelociousDatabaseQueryUpdateBase {
|
|
|
31
31
|
return "NULL";
|
|
32
32
|
return this.getOptions().quote(value);
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Formats one hash condition with SQL null semantics.
|
|
36
|
+
* @param {string} columnName - Column name.
|
|
37
|
+
* @param {ReturnType<typeof JSON.parse>} value - Condition value.
|
|
38
|
+
* @returns {string} - SQL condition.
|
|
39
|
+
*/
|
|
40
|
+
formatCondition(columnName, value) {
|
|
41
|
+
const column = this.getOptions().quoteColumnName(columnName);
|
|
42
|
+
if (value === null)
|
|
43
|
+
return `${column} IS NULL`;
|
|
44
|
+
return `${column} = ${this.formatValue(value)}`;
|
|
45
|
+
}
|
|
34
46
|
toSql() {
|
|
35
47
|
throw new Error("'toSql' wasn't implemented");
|
|
36
48
|
}
|
|
37
49
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvdXBkYXRlLWJhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0NBQWdDO0lBQ25EOzs7Ozs7O09BT0c7SUFDSCxZQUFZLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDO1FBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQzlCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLEtBQUs7UUFDZixJQUFJLEtBQUssS0FBSyxJQUFJO1lBQUUsT0FBTyxNQUFNLENBQUE7UUFFakMsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGVBQWUsQ0FBQyxVQUFVLEVBQUUsS0FBSztRQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRTVELElBQUksS0FBSyxLQUFLLElBQUk7WUFBRSxPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUE7UUFFOUMsT0FBTyxHQUFHLE1BQU0sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUE7SUFDakQsQ0FBQztJQUVELEtBQUs7UUFDSCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUE7SUFDL0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUXVlcnlVcGRhdGVCYXNlIHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBhcmdzLmNvbmRpdGlvbnMgLSBDb25kaXRpb25zLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gYXJncy5kYXRhIC0gRGF0YSBwYXlsb2FkLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBhcmdzLmRyaXZlciAtIERhdGFiYXNlIGRyaXZlciBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25kaXRpb25zLCBkYXRhLCBkcml2ZXIsIHRhYmxlTmFtZX0pIHtcbiAgICB0aGlzLmNvbmRpdGlvbnMgPSBjb25kaXRpb25zXG4gICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIHRoaXMuZHJpdmVyID0gZHJpdmVyXG4gICAgdGhpcy50YWJsZU5hbWUgPSB0YWJsZU5hbWVcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vcXVlcnktcGFyc2VyL29wdGlvbnMuanNcIikuZGVmYXVsdH0gLSBUaGUgb3B0aW9ucyBvcHRpb25zLlxuICAgKi9cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kcml2ZXIub3B0aW9ucygpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBmb3JtYXQgdmFsdWUuXG4gICAqIEBwYXJhbSB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IHZhbHVlIC0gVmFsdWUgdG8gZm9ybWF0LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVtYmVyfSAtIFNRTCBsaXRlcmFsLlxuICAgKi9cbiAgZm9ybWF0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiBcIk5VTExcIlxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9ucygpLnF1b3RlKHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgb25lIGhhc2ggY29uZGl0aW9uIHdpdGggU1FMIG51bGwgc2VtYW50aWNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uTmFtZSAtIENvbHVtbiBuYW1lLlxuICAgKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSB2YWx1ZSAtIENvbmRpdGlvbiB2YWx1ZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBTUUwgY29uZGl0aW9uLlxuICAgKi9cbiAgZm9ybWF0Q29uZGl0aW9uKGNvbHVtbk5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5nZXRPcHRpb25zKCkucXVvdGVDb2x1bW5OYW1lKGNvbHVtbk5hbWUpXG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiBgJHtjb2x1bW59IElTIE5VTExgXG5cbiAgICByZXR1cm4gYCR7Y29sdW1ufSA9ICR7dGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSl9YFxuICB9XG5cbiAgdG9TcWwoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ3RvU3FsJyB3YXNuJ3QgaW1wbGVtZW50ZWRcIilcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with-count.d.ts","sourceRoot":"","sources":["../../../../src/database/query/with-count.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"with-count.d.ts","sourceRoot":"","sources":["../../../../src/database/query/with-count.js"],"names":[],"mappings":"AAMG,YAAkB,cAAc,GAChC;;;;IAAmB,aAAa,EAArB,MAAM,CACjB;;;;IAAmB,gBAAgB,EAAxB,MAAM,CACjB;;;;IAAsE,KAAK,EAAhE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CACtE;CAAA,CAAA;AAIE,YAAwI,aAAa,GAA3I,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;CAAC,CAAC,CAAe;AAVxJ;;;;;;GAMG;AAEH;;;GAGG;AAEH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAH5B,aAG4B,GAF1B,cAAc,EAAE,CAuD5B;AAeD;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAAC,EAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAC,EAL7D;IAAqD,MAAM,EAAnD,OAAO,oBAAoB,EAAE,OAAO,EAAE,CAC9C;IAA0D,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO,CACnD;IAA+B,OAAO,EAA9B,cAAc,EAAE,CACxB;CAE6D,GAFnD,OAAO,CAAC,IAAI,CAAC,CA2BzB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// @ts-check
|
|
2
|
+
import { scalarModelPrimaryKey } from "../../utils/model-primary-key.js";
|
|
2
3
|
/**
|
|
3
4
|
* WithCountEntry type.
|
|
4
5
|
* @typedef {object} WithCountEntry
|
|
@@ -95,7 +96,7 @@ function entryFromName(name) {
|
|
|
95
96
|
export async function runWithCount({ models, modelClass, entries }) {
|
|
96
97
|
if (models.length === 0 || entries.length === 0)
|
|
97
98
|
return;
|
|
98
|
-
const primaryKey = modelClass.primaryKey();
|
|
99
|
+
const primaryKey = scalarModelPrimaryKey(modelClass.primaryKey(), `withCount for ${modelClass.name}`);
|
|
99
100
|
const parentIds = models.map((model) => /** @type {string | number} */ (model.readColumn(primaryKey)));
|
|
100
101
|
const sourceModel = models[0];
|
|
101
102
|
const queryGroups = new Map();
|
|
@@ -237,4 +238,4 @@ function attachCounts({ counts, entry, models, primaryKey }) {
|
|
|
237
238
|
model._setAssociationCount(entry.attributeName, resolvedCount);
|
|
238
239
|
}
|
|
239
240
|
}
|
|
240
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS93aXRoLWNvdW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7Ozs7O0dBTUc7QUFFSDs7O0dBR0c7QUFFSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQUk7SUFDckMsSUFBSSxJQUFJLElBQUksSUFBSTtRQUFFLE9BQU8sRUFBRSxDQUFBO0lBRTNCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzlCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxPQUFPLElBQUksRUFBRSxDQUFDLENBQUE7WUFDaEYsQ0FBQztZQUVELE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0I7O3NDQUU4QjtRQUM5QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFFbEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtnQkFDaEMsU0FBUTtZQUNWLENBQUM7WUFFRCxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDcEIsU0FBUTtZQUNWLENBQUM7WUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2hEOzs0R0FFNEY7Z0JBQzVGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQTtnQkFDckIsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDWCxhQUFhLEVBQUUsR0FBRztvQkFDbEIsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLFlBQVksSUFBSSxHQUFHO29CQUM3QyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7aUJBQ3JCLENBQUMsQ0FBQTtnQkFDRixTQUFRO1lBQ1YsQ0FBQztZQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLEdBQUcsS0FBSyxPQUFPLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDeEUsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixPQUFPLElBQUksRUFBRSxDQUFDLENBQUE7QUFDM0QsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxJQUFJO0lBQ3pCLE9BQU87UUFDTCxhQUFhLEVBQUUsR0FBRyxJQUFJLE9BQU87UUFDN0IsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QixLQUFLLEVBQUUsU0FBUztLQUNqQixDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FBQyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDO0lBQzlELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTTtJQUV2RCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUE7SUFDMUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsOEJBQThCLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN0RyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDN0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUU3QixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE1BQU0sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFDLEdBQUcsYUFBYSxDQUFDLEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFBO1FBQy9FLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUM3QixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRTFDLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDTixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxNQUFNLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDcEYsTUFBTSxNQUFNLEdBQUcsTUFBTSx3QkFBd0IsQ0FBQyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQTtRQUVqRixLQUFLLE1BQU0sS0FBSyxJQUFJLGNBQWM7WUFBRSxZQUFZLENBQUMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO0lBQ3ZGLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsYUFBYSxDQUFDLEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUM7SUFDckQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBRTdFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksOEJBQThCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEssQ0FBQztJQUVELElBQUksWUFBWSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxVQUFVLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUNsSixDQUFDO0lBRUQsTUFBTSxtQkFBbUIsR0FBRyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtJQUU5RCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxVQUFVLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUE7SUFDL0csQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLDRCQUE0QixDQUFDLG1CQUFtQixDQUFDLENBQUE7SUFDckYsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLDRCQUE0QixDQUFDLEVBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFDLENBQUMsQ0FBQTtJQUM1Rjs7K0RBRTJEO0lBQzNELE1BQU0sd0JBQXdCLEdBQUcsRUFBRSxDQUFBO0lBRW5DLElBQUksWUFBWSxDQUFDLGNBQWMsSUFBSSxZQUFZLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztRQUNqRSxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTtRQUMxRCx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUE7SUFDbEUsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUU3RCxTQUFTLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFBO0lBRXZDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNyRCxTQUFTLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUE7SUFDM0MsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzlCLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBRXJELFVBQVUsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO0lBQ3hCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUVyQixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFBO0lBQ2hDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQTtJQUN0RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQy9DLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxXQUFXLElBQUksUUFBUSxFQUFFLENBQUE7SUFFeEQsVUFBVSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQ3JDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxtQkFBbUIsZUFBZSxDQUFDLENBQUE7SUFDeEQsVUFBVSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0lBRTVDLE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBQyxDQUFBO0FBQzVDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsS0FBSyxVQUFVLGlCQUFpQixDQUFDLFVBQVU7SUFDekMsTUFBTSxJQUFJLEdBQUcsZ0ZBQWdGLENBQUMsQ0FDNUYsTUFBTSxVQUFVLENBQUMsYUFBYSxFQUFFLENBQ2pDLENBQUE7SUFFRDs7OENBRTBDO0lBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFFeEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyw4QkFBOEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUMvRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMvQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxLQUFLLFVBQVUsd0JBQXdCLENBQUMsRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQztJQUN4RSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFBO0lBQy9CLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7SUFFaEg7OzhDQUUwQztJQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRXhCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUNuRSxNQUFNLFlBQVksR0FBRyxNQUFNLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRXpELEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUM3QyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxZQUFZLENBQUMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUM7SUFDdkQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUMzQixNQUFNLG9CQUFvQixHQUFHLDhCQUE4QixDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQzFGLDhEQUE4RDtRQUM5RCw2REFBNkQ7UUFDN0Qsa0RBQWtEO1FBQ2xELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUM7WUFDcEQsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRXpELDZEQUE2RDtRQUM3RCxpRUFBaUU7UUFDakUsaUVBQWlFO1FBQ2pFLG1EQUFtRDtRQUNuRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIFdpdGhDb3VudEVudHJ5IHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBXaXRoQ291bnRFbnRyeVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGF0dHJpYnV0ZU5hbWUgLSBBdHRyaWJ1dGUgdG8gc2V0IG9uIGVhY2ggcGFyZW50IHJlY29yZCBob2xkaW5nIHRoZSBjb3VudC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWxhdGlvbnNoaXBOYW1lIC0gSGFzLW1hbnkgcmVsYXRpb25zaGlwIHdob3NlIHJvd3MgYXJlIGNvdW50ZWQuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiB8IHVuZGVmaW5lZH0gd2hlcmUgLSBPcHRpb25hbCBleHRyYSB3aGVyZSBjbGF1c2UgYXBwbGllZCB0byB0aGUgY291bnQgcXVlcnkuXG4gKi9cblxuLyoqXG4gKiBEZWZpbmVzIHRoaXMgdHlwZWRlZi5cbiAqIEB0eXBlZGVmIHtzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCB7cmVsYXRpb25zaGlwPzogc3RyaW5nLCB3aGVyZT86IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0+fSBXaXRoQ291bnRTcGVjXG4gKi9cblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIGZsZXhpYmxlIHVzZXItZmFjaW5nIGAud2l0aENvdW50KC4uLilgIGFyZ3VtZW50IGludG8gdGhlXG4gKiBzdHJpY3QgaW50ZXJuYWwgbGlzdCBvZiB7YXR0cmlidXRlTmFtZSwgcmVsYXRpb25zaGlwTmFtZSwgd2hlcmV9IGVudHJpZXNcbiAqIHRoZSBydW5uZXIgY29uc3VtZXMuXG4gKlxuICogQWNjZXB0ZWQgc2hhcGVzOlxuICogICBcInByb2plY3RzXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKGkiBvbmUgZW50cnlcbiAqICAgW1wicHJvamVjdHNcIiwgXCJ0aW1lbG9nc1wiXSAgICAgICAgICAgICAgICAgICAgICAgICAgIOKGkiBvbmUgZW50cnkgcGVyIG5hbWVcbiAqICAge3Byb2plY3RzOiB0cnVlfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oaSIG9uZSBlbnRyeSAoYXR0ciA9IFwicHJvamVjdHNDb3VudFwiKVxuICogICB7YWN0aXZlTWVtYmVyc0NvdW50OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDihpIgY3VzdG9tIGF0dHJpYnV0ZSBuYW1lXG4gKiAgICAge3JlbGF0aW9uc2hpcDogXCJ1c2Vyc1wiLCB3aGVyZToge2FjdGl2ZTogdHJ1ZX19fVxuICogQHBhcmFtIHtXaXRoQ291bnRTcGVjfSBzcGVjIC0gVXNlci1zdXBwbGllZCBzcGVjLlxuICogQHJldHVybnMge1dpdGhDb3VudEVudHJ5W119IC0gTm9ybWFsaXplZCBlbnRyaWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplV2l0aENvdW50KHNwZWMpIHtcbiAgaWYgKHNwZWMgPT0gbnVsbCkgcmV0dXJuIFtdXG5cbiAgaWYgKHR5cGVvZiBzcGVjID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIFtlbnRyeUZyb21OYW1lKHNwZWMpXVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3BlYykpIHtcbiAgICByZXR1cm4gc3BlYy5mbGF0TWFwKChpdGVtKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB3aXRoQ291bnQgYXJyYXkgZW50cmllcyBtdXN0IGJlIHN0cmluZ3M7IGdvdCAke3R5cGVvZiBpdGVtfWApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbnRyeUZyb21OYW1lKGl0ZW0pXG4gICAgfSlcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3BlYyA9PT0gXCJvYmplY3RcIikge1xuICAgIC8qKlxuICAgICAqIEVudHJpZXMuXG4gICAgICogQHR5cGUge1dpdGhDb3VudEVudHJ5W119ICovXG4gICAgY29uc3QgZW50cmllcyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzcGVjKSkge1xuICAgICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeUZyb21OYW1lKGtleSkpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogT3B0aW9ucy5cbiAgICAgICAgICogQHR5cGUge3tyZWxhdGlvbnNoaXA/OiBzdHJpbmcsIHdoZXJlPzogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fX0gKi9cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHZhbHVlXG4gICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAgYXR0cmlidXRlTmFtZToga2V5LFxuICAgICAgICAgIHJlbGF0aW9uc2hpcE5hbWU6IG9wdGlvbnMucmVsYXRpb25zaGlwIHx8IGtleSxcbiAgICAgICAgICB3aGVyZTogb3B0aW9ucy53aGVyZVxuICAgICAgICB9KVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgd2l0aENvdW50IHZhbHVlIGZvciAke2tleX06ICR7dHlwZW9mIHZhbHVlfWApXG4gICAgfVxuXG4gICAgcmV0dXJuIGVudHJpZXNcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB3aXRoQ291bnQgc3BlYzogJHt0eXBlb2Ygc3BlY31gKVxufVxuXG4vKipcbiAqIFJ1bnMgZW50cnkgZnJvbSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBSZWxhdGlvbnNoaXAgbmFtZSAoYXR0cmlidXRlIG5hbWUgaXMgZGVyaXZlZCBieSBhcHBlbmRpbmcgXCJDb3VudFwiKS5cbiAqIEByZXR1cm5zIHtXaXRoQ291bnRFbnRyeX0gLSBOb3JtYWxpemVkIGFzc29jaWF0aW9uLWNvdW50IGVudHJ5LlxuICovXG5mdW5jdGlvbiBlbnRyeUZyb21OYW1lKG5hbWUpIHtcbiAgcmV0dXJuIHtcbiAgICBhdHRyaWJ1dGVOYW1lOiBgJHtuYW1lfUNvdW50YCxcbiAgICByZWxhdGlvbnNoaXBOYW1lOiBuYW1lLFxuICAgIHdoZXJlOiB1bmRlZmluZWRcbiAgfVxufVxuXG4vKipcbiAqIFJ1biBldmVyeSB3aXRoQ291bnQgZW50cnkgYWdhaW5zdCB0aGUgbG9hZGVkIHBhcmVudCByZWNvcmRzLCBhdHRhY2hpbmdcbiAqIHRoZSByZXN1bHRpbmcgY291bnRzIGFzIGF0dHJpYnV0ZXMgb24gZWFjaCByZWNvcmQuIE1pcnJvcnMgdGhlXG4gKiBQcmVsb2FkZXIncyBkYXRhLWZsb3cgc2hhcGUg4oCUIG9uZSBncm91cGVkIGNvdW50IHF1ZXJ5IHBlciBlbnRyeSwgdGhlblxuICogYHNldEF0dHJpYnV0ZWAgb24gZWFjaCBwYXJlbnQuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W119IGFyZ3MubW9kZWxzIC0gTG9hZGVkIHBhcmVudCByZWNvcmRzLlxuICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWxDbGFzcyAtIFBhcmVudCBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7V2l0aENvdW50RW50cnlbXX0gYXJncy5lbnRyaWVzIC0gTm9ybWFsaXplZCB3aXRoQ291bnQgZW50cmllcy5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2l0aENvdW50KHttb2RlbHMsIG1vZGVsQ2xhc3MsIGVudHJpZXN9KSB7XG4gIGlmIChtb2RlbHMubGVuZ3RoID09PSAwIHx8IGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICBjb25zdCBwcmltYXJ5S2V5ID0gbW9kZWxDbGFzcy5wcmltYXJ5S2V5KClcbiAgY29uc3QgcGFyZW50SWRzID0gbW9kZWxzLm1hcCgobW9kZWwpID0+IC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAobW9kZWwucmVhZENvbHVtbihwcmltYXJ5S2V5KSkpXG4gIGNvbnN0IHNvdXJjZU1vZGVsID0gbW9kZWxzWzBdXG4gIGNvbnN0IHF1ZXJ5R3JvdXBzID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3Qge2Jhc2VRdWVyeSwgZm9yZWlnbktleX0gPSBxdWVyeUZvckVudHJ5KHtlbnRyeSwgbW9kZWxDbGFzcywgc291cmNlTW9kZWx9KVxuICAgIGNvbnN0IHNxbCA9IGJhc2VRdWVyeS50b1NxbCgpXG4gICAgY29uc3QgZXhpc3RpbmdHcm91cCA9IHF1ZXJ5R3JvdXBzLmdldChzcWwpXG5cbiAgICBpZiAoZXhpc3RpbmdHcm91cCkge1xuICAgICAgZXhpc3RpbmdHcm91cC5lbnRyaWVzLnB1c2goZW50cnkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXJ5R3JvdXBzLnNldChzcWwsIHtiYXNlUXVlcnksIGVudHJpZXM6IFtlbnRyeV0sIGZvcmVpZ25LZXl9KVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qge2Jhc2VRdWVyeSwgZW50cmllczogZ3JvdXBlZEVudHJpZXMsIGZvcmVpZ25LZXl9IG9mIHF1ZXJ5R3JvdXBzLnZhbHVlcygpKSB7XG4gICAgY29uc3QgY291bnRzID0gYXdhaXQgZXhlY3V0ZUNodW5rZWRDb3VudFF1ZXJ5KHtiYXNlUXVlcnksIGZvcmVpZ25LZXksIHBhcmVudElkc30pXG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGdyb3VwZWRFbnRyaWVzKSBhdHRhY2hDb3VudHMoe2NvdW50cywgZW50cnksIG1vZGVscywgcHJpbWFyeUtleX0pXG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGdyb3VwZWQgY291bnQgcXVlcnkgZm9yIGFuIGVudHJ5LlxuICpcbiAqIFRoZSByZXR1cm5lZCBxdWVyeSBkb2VzIE5PVCB5ZXQgZmlsdGVyIGJ5IHBhcmVudCBJRHM7IGNhbGxlcnMgY2h1bmsgdGhlXG4gKiBwYXJlbnQgY29ob3J0IGFuZCBhcHBseSB0aGUgZm9yZWlnbi1rZXkgSU4gY2xhdXNlIHBlciBjaHVuay5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7V2l0aENvdW50RW50cnl9IGFyZ3MuZW50cnkgLSBFbnRyeSBiZWluZyBldmFsdWF0ZWQuXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5tb2RlbENsYXNzIC0gUGFyZW50IG1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5zb3VyY2VNb2RlbCAtIExvYWRlZCBvcGVyYXRpb24gb3duZXIuXG4gKiBAcmV0dXJucyB7e2Jhc2VRdWVyeTogaW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0LCBmb3JlaWduS2V5OiBzdHJpbmd9fSAtIFByZXBhcmVkIGNvdW50IHF1ZXJ5IGFuZCBpdHMgZm9yZWlnbiBrZXkuXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5Rm9yRW50cnkoe2VudHJ5LCBtb2RlbENsYXNzLCBzb3VyY2VNb2RlbH0pIHtcbiAgY29uc3QgcmVsYXRpb25zaGlwID0gbW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBCeU5hbWUoZW50cnkucmVsYXRpb25zaGlwTmFtZSlcblxuICBpZiAoIXJlbGF0aW9uc2hpcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHttb2RlbENsYXNzLm5hbWV9IGhhcyBubyByZWxhdGlvbnNoaXAgbmFtZWQgJHtKU09OLnN0cmluZ2lmeShlbnRyeS5yZWxhdGlvbnNoaXBOYW1lKX0gKHdpdGhDb3VudCBhdHRyaWJ1dGUgJHtKU09OLnN0cmluZ2lmeShlbnRyeS5hdHRyaWJ1dGVOYW1lKX0pYClcbiAgfVxuXG4gIGlmIChyZWxhdGlvbnNoaXAudHlwZSAhPT0gXCJoYXNNYW55XCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHdpdGhDb3VudCBjdXJyZW50bHkgc3VwcG9ydHMgb25seSBoYXNNYW55IHJlbGF0aW9uc2hpcHM7ICR7bW9kZWxDbGFzcy5uYW1lfSMke2VudHJ5LnJlbGF0aW9uc2hpcE5hbWV9IGlzICR7cmVsYXRpb25zaGlwLnR5cGV9YClcbiAgfVxuXG4gIGNvbnN0IHJhd1RhcmdldE1vZGVsQ2xhc3MgPSByZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgaWYgKCFyYXdUYXJnZXRNb2RlbENsYXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB3aXRoQ291bnQ6IGNvdWxkIG5vdCByZXNvbHZlIHRhcmdldCBtb2RlbCBmb3IgJHttb2RlbENsYXNzLm5hbWV9IyR7ZW50cnkucmVsYXRpb25zaGlwTmFtZX1gKVxuICB9XG5cbiAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3MuYmluZFJlY29yZE1ldGFkYXRhTW9kZWxDbGFzcyhyYXdUYXJnZXRNb2RlbENsYXNzKVxuICBjb25zdCBmb3JlaWduS2V5ID0gcmVsYXRpb25zaGlwLmdldEZvcmVpZ25LZXlGb3JNb2RlbENsYXNzZXMoe21vZGVsQ2xhc3MsIHRhcmdldE1vZGVsQ2xhc3N9KVxuICAvKipcbiAgICogTWFuZGF0b3J5IGNvaG9ydCBjb25kaXRpb25zLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSAqL1xuICBjb25zdCBtYW5kYXRvcnlXaGVyZUNvbmRpdGlvbnMgPSB7fVxuXG4gIGlmIChyZWxhdGlvbnNoaXAuZ2V0UG9seW1vcnBoaWMgJiYgcmVsYXRpb25zaGlwLmdldFBvbHltb3JwaGljKCkpIHtcbiAgICBjb25zdCB0eXBlQ29sdW1uID0gcmVsYXRpb25zaGlwLmdldFBvbHltb3JwaGljVHlwZUNvbHVtbigpXG4gICAgbWFuZGF0b3J5V2hlcmVDb25kaXRpb25zW3R5cGVDb2x1bW5dID0gbW9kZWxDbGFzcy5nZXRNb2RlbE5hbWUoKVxuICB9XG5cbiAgY29uc3QgYmFzZVF1ZXJ5ID0gc291cmNlTW9kZWwucXVlcnlGb3JNb2RlbCh0YXJnZXRNb2RlbENsYXNzKVxuXG4gIGJhc2VRdWVyeS5fZm9yY2VRdWFsaWZ5QmFzZVRhYmxlID0gdHJ1ZVxuXG4gIGlmIChPYmplY3Qua2V5cyhtYW5kYXRvcnlXaGVyZUNvbmRpdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICBiYXNlUXVlcnkud2hlcmUobWFuZGF0b3J5V2hlcmVDb25kaXRpb25zKVxuICB9XG5cbiAgaWYgKGVudHJ5LndoZXJlKSB7XG4gICAgYmFzZVF1ZXJ5LndoZXJlKGVudHJ5LndoZXJlKVxuICB9XG5cbiAgY29uc3QgY291bnRRdWVyeSA9IHJlbGF0aW9uc2hpcC5hcHBseVNjb3BlKGJhc2VRdWVyeSlcblxuICBjb3VudFF1ZXJ5Ll9wcmVsb2FkID0ge31cbiAgY291bnRRdWVyeS5yZXNlbGVjdCgpXG5cbiAgY29uc3QgZHJpdmVyID0gY291bnRRdWVyeS5kcml2ZXJcbiAgY29uc3QgcXVvdGVkVGFibGUgPSBkcml2ZXIucXVvdGVUYWJsZShjb3VudFF1ZXJ5LnJvb3RUYWJsZVJlZmVyZW5jZSgpKVxuICBjb25zdCBxdW90ZWRGayA9IGRyaXZlci5xdW90ZUNvbHVtbihmb3JlaWduS2V5KVxuICBjb25zdCBxdWFsaWZpZWRGb3JlaWduS2V5ID0gYCR7cXVvdGVkVGFibGV9LiR7cXVvdGVkRmt9YFxuXG4gIGNvdW50UXVlcnkuZ3JvdXAocXVhbGlmaWVkRm9yZWlnbktleSlcbiAgY291bnRRdWVyeS5zZWxlY3QoYCR7cXVhbGlmaWVkRm9yZWlnbktleX0gQVMgcGFyZW50X2lkYClcbiAgY291bnRRdWVyeS5zZWxlY3QoXCJDT1VOVCgqKSBBUyBjb3VudF92YWx1ZVwiKVxuXG4gIHJldHVybiB7YmFzZVF1ZXJ5OiBjb3VudFF1ZXJ5LCBmb3JlaWduS2V5fVxufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGEgcHJlcGFyZWQgZ3JvdXBlZCBjb3VudCBxdWVyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0fSBjb3VudFF1ZXJ5IC0gUHJlcGFyZWQgY291bnQgcXVlcnkuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxNYXA8c3RyaW5nIHwgbnVtYmVyLCBudW1iZXI+Pn0gLSBNYXAgb2YgcGFyZW50IHBrIOKGkiBjb3VudC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUNvdW50UXVlcnkoY291bnRRdWVyeSkge1xuICBjb25zdCByb3dzID0gLyoqIEB0eXBlIHtBcnJheTx7cGFyZW50X2lkOiBzdHJpbmcgfCBudW1iZXIsIGNvdW50X3ZhbHVlOiBzdHJpbmcgfCBudW1iZXJ9Pn0gKi8gKFxuICAgIGF3YWl0IGNvdW50UXVlcnkuX2V4ZWN1dGVRdWVyeSgpXG4gIClcblxuICAvKipcbiAgICogQ291bnRzLlxuICAgKiBAdHlwZSB7TWFwPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPn0gKi9cbiAgY29uc3QgY291bnRzID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgIGNvbnN0IHBhcmVudElkID0gLyoqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9ICovIChyb3cucGFyZW50X2lkKVxuICAgIGNvbnN0IGNvdW50VmFsdWUgPSBOdW1iZXIocm93LmNvdW50X3ZhbHVlKSB8fCAwXG4gICAgY291bnRzLnNldChwYXJlbnRJZCwgY291bnRWYWx1ZSlcbiAgfVxuXG4gIHJldHVybiBjb3VudHNcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhIGdyb3VwZWQgY291bnQgcXVlcnkgaW4gY29ob3J0cyBzbyB0aGUgcGFyZW50IElEIElOLWxpc3Qgc3RheXNcbiAqIHdpdGhpbiBkcml2ZXIgbGltaXRzLCBtZXJnaW5nIHBlci1wYXJlbnQgY291bnRzIGFjcm9zcyBjaHVua3MuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdH0gYXJncy5iYXNlUXVlcnkgLSBQcmVwYXJlZCBjb3VudCBxdWVyeSB3aXRob3V0IHBhcmVudCBJRHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5mb3JlaWduS2V5IC0gRm9yZWlnbiBrZXkgdXNlZCB0byBqb2luIHRvIHRoZSBwYXJlbnRzLlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmcgfCBudW1iZXI+fSBhcmdzLnBhcmVudElkcyAtIFByaW1hcnkga2V5cyBvZiB0aGUgbG9hZGVkIHBhcmVudHMuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxNYXA8c3RyaW5nIHwgbnVtYmVyLCBudW1iZXI+Pn0gLSBNYXAgb2YgcGFyZW50IHBrIOKGkiBjb3VudC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUNodW5rZWRDb3VudFF1ZXJ5KHtiYXNlUXVlcnksIGZvcmVpZ25LZXksIHBhcmVudElkc30pIHtcbiAgY29uc3QgZHJpdmVyID0gYmFzZVF1ZXJ5LmRyaXZlclxuICBjb25zdCBjb2hvcnRzID0gZHJpdmVyLmNodW5rVmFsdWVzKHBhcmVudElkcywgKGNodW5rKSA9PiBiYXNlUXVlcnkuY2xvbmUoKS53aGVyZSh7W2ZvcmVpZ25LZXldOiBjaHVua30pLnRvU3FsKCkpXG5cbiAgLyoqXG4gICAqIENvdW50cy5cbiAgICogQHR5cGUge01hcDxzdHJpbmcgfCBudW1iZXIsIG51bWJlcj59ICovXG4gIGNvbnN0IGNvdW50cyA9IG5ldyBNYXAoKVxuXG4gIGZvciAoY29uc3QgY29ob3J0IG9mIGNvaG9ydHMpIHtcbiAgICBjb25zdCBjb2hvcnRRdWVyeSA9IGJhc2VRdWVyeS5jbG9uZSgpLndoZXJlKHtbZm9yZWlnbktleV06IGNvaG9ydH0pXG4gICAgY29uc3QgY29ob3J0Q291bnRzID0gYXdhaXQgZXhlY3V0ZUNvdW50UXVlcnkoY29ob3J0UXVlcnkpXG5cbiAgICBmb3IgKGNvbnN0IFtwYXJlbnRJZCwgY291bnRdIG9mIGNvaG9ydENvdW50cykge1xuICAgICAgY291bnRzLnNldChwYXJlbnRJZCwgY291bnQpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvdW50c1xufVxuXG4vKipcbiAqIEF0dGFjaGVzIG9uZSBlbnRyeSdzIHJlc29sdmVkIGNvdW50cyB0byB0aGUgbG9hZGVkIG1vZGVscy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPn0gYXJncy5jb3VudHMgLSBDb3VudHMga2V5ZWQgYnkgcGFyZW50IHByaW1hcnkga2V5LlxuICogQHBhcmFtIHtXaXRoQ291bnRFbnRyeX0gYXJncy5lbnRyeSAtIEVudHJ5IHdob3NlIGFsaWFzIHJlY2VpdmVzIHRoZSBjb3VudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W119IGFyZ3MubW9kZWxzIC0gTG9hZGVkIHBhcmVudCByZWNvcmRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucHJpbWFyeUtleSAtIFBhcmVudCBwcmltYXJ5IGtleSBjb2x1bW4uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYXR0YWNoQ291bnRzKHtjb3VudHMsIGVudHJ5LCBtb2RlbHMsIHByaW1hcnlLZXl9KSB7XG4gIGZvciAoY29uc3QgbW9kZWwgb2YgbW9kZWxzKSB7XG4gICAgY29uc3QgbW9kZWxQcmltYXJ5S2V5VmFsdWUgPSAvKiogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKG1vZGVsLnJlYWRDb2x1bW4ocHJpbWFyeUtleSkpXG4gICAgLy8gVG9sZXJhdGUgZHJpdmVyIGRpZmZlcmVuY2VzIGluIG51bWVyaWMgcmV0dXJuIHR5cGVzOiBTUUxpdGVcbiAgICAvLyByZXR1cm5zIGludGVnZXJzIGFzIEpTIG51bWJlcnMsIGJ1dCBNeVNRTCdzIHJhdyBkcml2ZXIgY2FuXG4gICAgLy8gcmV0dXJuIGNvdW50IHByaW1hcnkga2V5cyBhcyBzdHJpbmdzLiBUcnkgYm90aC5cbiAgICBjb25zdCByZXNvbHZlZENvdW50ID0gY291bnRzLmhhcyhtb2RlbFByaW1hcnlLZXlWYWx1ZSlcbiAgICAgID8gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChjb3VudHMuZ2V0KG1vZGVsUHJpbWFyeUtleVZhbHVlKSlcbiAgICAgIDogTnVtYmVyKGNvdW50cy5nZXQoU3RyaW5nKG1vZGVsUHJpbWFyeUtleVZhbHVlKSkgPz8gMClcblxuICAgIC8vIENvdW50cyBnbyBvbiB0aGUgcmVjb3JkJ3MgZGVkaWNhdGVkIGFzc29jaWF0aW9uLWNvdW50IG1hcCxcbiAgICAvLyBOT1Qgb24gYF9hdHRyaWJ1dGVzYCwgc28gYSB2aXJ0dWFsIGB0YXNrc0NvdW50YCBjYW4ndCBzaGFkb3cgYVxuICAgIC8vIHJlYWwgYHRhc2tzX2NvdW50YCBjb2x1bW4gKGUuZy4gYSBjb3VudGVyX2NhY2hlKSBub3IgbGVhayBpbnRvXG4gICAgLy8gYXR0cmlidXRlLWxldmVsIHNlcmlhbGl6YXRpb24gLyBjaGFuZ2UgdHJhY2tpbmcuXG4gICAgbW9kZWwuX3NldEFzc29jaWF0aW9uQ291bnQoZW50cnkuYXR0cmlidXRlTmFtZSwgcmVzb2x2ZWRDb3VudClcbiAgfVxufVxuIl19
|
|
241
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS93aXRoLWNvdW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQTtBQUV0RTs7Ozs7O0dBTUc7QUFFSDs7O0dBR0c7QUFFSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQUk7SUFDckMsSUFBSSxJQUFJLElBQUksSUFBSTtRQUFFLE9BQU8sRUFBRSxDQUFBO0lBRTNCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzlCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxPQUFPLElBQUksRUFBRSxDQUFDLENBQUE7WUFDaEYsQ0FBQztZQUVELE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0I7O3NDQUU4QjtRQUM5QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFFbEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztn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TSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUV6RCw2REFBNkQ7UUFDN0QsaUVBQWlFO1FBQ2pFLGlFQUFpRTtRQUNqRSxtREFBbUQ7UUFDbkQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFDaEUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtzY2FsYXJNb2RlbFByaW1hcnlLZXl9IGZyb20gXCIuLi8uLi91dGlscy9tb2RlbC1wcmltYXJ5LWtleS5qc1wiXG5cbi8qKlxuICogV2l0aENvdW50RW50cnkgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFdpdGhDb3VudEVudHJ5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXR0cmlidXRlTmFtZSAtIEF0dHJpYnV0ZSB0byBzZXQgb24gZWFjaCBwYXJlbnQgcmVjb3JkIGhvbGRpbmcgdGhlIGNvdW50LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbGF0aW9uc2hpcE5hbWUgLSBIYXMtbWFueSByZWxhdGlvbnNoaXAgd2hvc2Ugcm93cyBhcmUgY291bnRlZC5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+IHwgdW5kZWZpbmVkfSB3aGVyZSAtIE9wdGlvbmFsIGV4dHJhIHdoZXJlIGNsYXVzZSBhcHBsaWVkIHRvIHRoZSBjb3VudCBxdWVyeS5cbiAqL1xuXG4vKipcbiAqIERlZmluZXMgdGhpcyB0eXBlZGVmLlxuICogQHR5cGVkZWYge3N0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IHtyZWxhdGlvbnNoaXA/OiBzdHJpbmcsIHdoZXJlPzogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fT59IFdpdGhDb3VudFNwZWNcbiAqL1xuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgZmxleGlibGUgdXNlci1mYWNpbmcgYC53aXRoQ291bnQoLi4uKWAgYXJndW1lbnQgaW50byB0aGVcbiAqIHN0cmljdCBpbnRlcm5hbCBsaXN0IG9mIHthdHRyaWJ1dGVOYW1lLCByZWxhdGlvbnNoaXBOYW1lLCB3aGVyZX0gZW50cmllc1xuICogdGhlIHJ1bm5lciBjb25zdW1lcy5cbiAqXG4gKiBBY2NlcHRlZCBzaGFwZXM6XG4gKiAgIFwicHJvamVjdHNcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oaSIG9uZSBlbnRyeVxuICogICBbXCJwcm9qZWN0c1wiLCBcInRpbWVsb2dzXCJdICAgICAgICAgICAgICAgICAgICAgICAgICAg4oaSIG9uZSBlbnRyeSBwZXIgbmFtZVxuICogICB7cHJvamVjdHM6IHRydWV9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDihpIgb25lIGVudHJ5IChhdHRyID0gXCJwcm9qZWN0c0NvdW50XCIpXG4gKiAgIHthY3RpdmVNZW1iZXJzQ291bnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKGkiBjdXN0b20gYXR0cmlidXRlIG5hbWVcbiAqICAgICB7cmVsYXRpb25zaGlwOiBcInVzZXJzXCIsIHdoZXJlOiB7YWN0aXZlOiB0cnVlfX19XG4gKiBAcGFyYW0ge1dpdGhDb3VudFNwZWN9IHNwZWMgLSBVc2VyLXN1cHBsaWVkIHNwZWMuXG4gKiBAcmV0dXJucyB7V2l0aENvdW50RW50cnlbXX0gLSBOb3JtYWxpemVkIGVudHJpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVXaXRoQ291bnQoc3BlYykge1xuICBpZiAoc3BlYyA9PSBudWxsKSByZXR1cm4gW11cblxuICBpZiAodHlwZW9mIHNwZWMgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gW2VudHJ5RnJvbU5hbWUoc3BlYyldXG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShzcGVjKSkge1xuICAgIHJldHVybiBzcGVjLmZsYXRNYXAoKGl0ZW0pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdpdGhDb3VudCBhcnJheSBlbnRyaWVzIG11c3QgYmUgc3RyaW5nczsgZ290ICR7dHlwZW9mIGl0ZW19YClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVudHJ5RnJvbU5hbWUoaXRlbSlcbiAgICB9KVxuICB9XG5cbiAgaWYgKHR5cGVvZiBzcGVjID09PSBcIm9iamVjdFwiKSB7XG4gICAgLyoqXG4gICAgICogRW50cmllcy5cbiAgICAgKiBAdHlwZSB7V2l0aENvdW50RW50cnlbXX0gKi9cbiAgICBjb25zdCBlbnRyaWVzID0gW11cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNwZWMpKSB7XG4gICAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5RnJvbU5hbWUoa2V5KSlcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPcHRpb25zLlxuICAgICAgICAgKiBAdHlwZSB7e3JlbGF0aW9uc2hpcD86IHN0cmluZywgd2hlcmU/OiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59fSAqL1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdmFsdWVcbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiBrZXksXG4gICAgICAgICAgcmVsYXRpb25zaGlwTmFtZTogb3B0aW9ucy5yZWxhdGlvbnNoaXAgfHwga2V5LFxuICAgICAgICAgIHdoZXJlOiBvcHRpb25zLndoZXJlXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB3aXRoQ291bnQgdmFsdWUgZm9yICR7a2V5fTogJHt0eXBlb2YgdmFsdWV9YClcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cmllc1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHdpdGhDb3VudCBzcGVjOiAke3R5cGVvZiBzcGVjfWApXG59XG5cbi8qKlxuICogUnVucyBlbnRyeSBmcm9tIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFJlbGF0aW9uc2hpcCBuYW1lIChhdHRyaWJ1dGUgbmFtZSBpcyBkZXJpdmVkIGJ5IGFwcGVuZGluZyBcIkNvdW50XCIpLlxuICogQHJldHVybnMge1dpdGhDb3VudEVudHJ5fSAtIE5vcm1hbGl6ZWQgYXNzb2NpYXRpb24tY291bnQgZW50cnkuXG4gKi9cbmZ1bmN0aW9uIGVudHJ5RnJvbU5hbWUobmFtZSkge1xuICByZXR1cm4ge1xuICAgIGF0dHJpYnV0ZU5hbWU6IGAke25hbWV9Q291bnRgLFxuICAgIHJlbGF0aW9uc2hpcE5hbWU6IG5hbWUsXG4gICAgd2hlcmU6IHVuZGVmaW5lZFxuICB9XG59XG5cbi8qKlxuICogUnVuIGV2ZXJ5IHdpdGhDb3VudCBlbnRyeSBhZ2FpbnN0IHRoZSBsb2FkZWQgcGFyZW50IHJlY29yZHMsIGF0dGFjaGluZ1xuICogdGhlIHJlc3VsdGluZyBjb3VudHMgYXMgYXR0cmlidXRlcyBvbiBlYWNoIHJlY29yZC4gTWlycm9ycyB0aGVcbiAqIFByZWxvYWRlcidzIGRhdGEtZmxvdyBzaGFwZSDigJQgb25lIGdyb3VwZWQgY291bnQgcXVlcnkgcGVyIGVudHJ5LCB0aGVuXG4gKiBgc2V0QXR0cmlidXRlYCBvbiBlYWNoIHBhcmVudC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXX0gYXJncy5tb2RlbHMgLSBMb2FkZWQgcGFyZW50IHJlY29yZHMuXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5tb2RlbENsYXNzIC0gUGFyZW50IG1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtXaXRoQ291bnRFbnRyeVtdfSBhcmdzLmVudHJpZXMgLSBOb3JtYWxpemVkIHdpdGhDb3VudCBlbnRyaWVzLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5XaXRoQ291bnQoe21vZGVscywgbW9kZWxDbGFzcywgZW50cmllc30pIHtcbiAgaWYgKG1vZGVscy5sZW5ndGggPT09IDAgfHwgZW50cmllcy5sZW5ndGggPT09IDApIHJldHVyblxuXG4gIGNvbnN0IHByaW1hcnlLZXkgPSBzY2FsYXJNb2RlbFByaW1hcnlLZXkobW9kZWxDbGFzcy5wcmltYXJ5S2V5KCksIGB3aXRoQ291bnQgZm9yICR7bW9kZWxDbGFzcy5uYW1lfWApXG4gIGNvbnN0IHBhcmVudElkcyA9IG1vZGVscy5tYXAoKG1vZGVsKSA9PiAvKiogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKG1vZGVsLnJlYWRDb2x1bW4ocHJpbWFyeUtleSkpKVxuICBjb25zdCBzb3VyY2VNb2RlbCA9IG1vZGVsc1swXVxuICBjb25zdCBxdWVyeUdyb3VwcyA9IG5ldyBNYXAoKVxuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IHtiYXNlUXVlcnksIGZvcmVpZ25LZXl9ID0gcXVlcnlGb3JFbnRyeSh7ZW50cnksIG1vZGVsQ2xhc3MsIHNvdXJjZU1vZGVsfSlcbiAgICBjb25zdCBzcWwgPSBiYXNlUXVlcnkudG9TcWwoKVxuICAgIGNvbnN0IGV4aXN0aW5nR3JvdXAgPSBxdWVyeUdyb3Vwcy5nZXQoc3FsKVxuXG4gICAgaWYgKGV4aXN0aW5nR3JvdXApIHtcbiAgICAgIGV4aXN0aW5nR3JvdXAuZW50cmllcy5wdXNoKGVudHJ5KVxuICAgIH0gZWxzZSB7XG4gICAgICBxdWVyeUdyb3Vwcy5zZXQoc3FsLCB7YmFzZVF1ZXJ5LCBlbnRyaWVzOiBbZW50cnldLCBmb3JlaWduS2V5fSlcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHtiYXNlUXVlcnksIGVudHJpZXM6IGdyb3VwZWRFbnRyaWVzLCBmb3JlaWduS2V5fSBvZiBxdWVyeUdyb3Vwcy52YWx1ZXMoKSkge1xuICAgIGNvbnN0IGNvdW50cyA9IGF3YWl0IGV4ZWN1dGVDaHVua2VkQ291bnRRdWVyeSh7YmFzZVF1ZXJ5LCBmb3JlaWduS2V5LCBwYXJlbnRJZHN9KVxuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBncm91cGVkRW50cmllcykgYXR0YWNoQ291bnRzKHtjb3VudHMsIGVudHJ5LCBtb2RlbHMsIHByaW1hcnlLZXl9KVxuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBncm91cGVkIGNvdW50IHF1ZXJ5IGZvciBhbiBlbnRyeS5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgcXVlcnkgZG9lcyBOT1QgeWV0IGZpbHRlciBieSBwYXJlbnQgSURzOyBjYWxsZXJzIGNodW5rIHRoZVxuICogcGFyZW50IGNvaG9ydCBhbmQgYXBwbHkgdGhlIGZvcmVpZ24ta2V5IElOIGNsYXVzZSBwZXIgY2h1bmsuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge1dpdGhDb3VudEVudHJ5fSBhcmdzLmVudHJ5IC0gRW50cnkgYmVpbmcgZXZhbHVhdGVkLlxuICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWxDbGFzcyAtIFBhcmVudCBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3Muc291cmNlTW9kZWwgLSBMb2FkZWQgb3BlcmF0aW9uIG93bmVyLlxuICogQHJldHVybnMge3tiYXNlUXVlcnk6IGltcG9ydChcIi4vbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdCwgZm9yZWlnbktleTogc3RyaW5nfX0gLSBQcmVwYXJlZCBjb3VudCBxdWVyeSBhbmQgaXRzIGZvcmVpZ24ga2V5LlxuICovXG5mdW5jdGlvbiBxdWVyeUZvckVudHJ5KHtlbnRyeSwgbW9kZWxDbGFzcywgc291cmNlTW9kZWx9KSB7XG4gIGNvbnN0IHJlbGF0aW9uc2hpcCA9IG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKGVudHJ5LnJlbGF0aW9uc2hpcE5hbWUpXG5cbiAgaWYgKCFyZWxhdGlvbnNoaXApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bW9kZWxDbGFzcy5uYW1lfSBoYXMgbm8gcmVsYXRpb25zaGlwIG5hbWVkICR7SlNPTi5zdHJpbmdpZnkoZW50cnkucmVsYXRpb25zaGlwTmFtZSl9ICh3aXRoQ291bnQgYXR0cmlidXRlICR7SlNPTi5zdHJpbmdpZnkoZW50cnkuYXR0cmlidXRlTmFtZSl9KWApXG4gIH1cblxuICBpZiAocmVsYXRpb25zaGlwLnR5cGUgIT09IFwiaGFzTWFueVwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB3aXRoQ291bnQgY3VycmVudGx5IHN1cHBvcnRzIG9ubHkgaGFzTWFueSByZWxhdGlvbnNoaXBzOyAke21vZGVsQ2xhc3MubmFtZX0jJHtlbnRyeS5yZWxhdGlvbnNoaXBOYW1lfSBpcyAke3JlbGF0aW9uc2hpcC50eXBlfWApXG4gIH1cblxuICBjb25zdCByYXdUYXJnZXRNb2RlbENsYXNzID0gcmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gIGlmICghcmF3VGFyZ2V0TW9kZWxDbGFzcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgd2l0aENvdW50OiBjb3VsZCBub3QgcmVzb2x2ZSB0YXJnZXQgbW9kZWwgZm9yICR7bW9kZWxDbGFzcy5uYW1lfSMke2VudHJ5LnJlbGF0aW9uc2hpcE5hbWV9YClcbiAgfVxuXG4gIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzLmJpbmRSZWNvcmRNZXRhZGF0YU1vZGVsQ2xhc3MocmF3VGFyZ2V0TW9kZWxDbGFzcylcbiAgY29uc3QgZm9yZWlnbktleSA9IHJlbGF0aW9uc2hpcC5nZXRGb3JlaWduS2V5Rm9yTW9kZWxDbGFzc2VzKHttb2RlbENsYXNzLCB0YXJnZXRNb2RlbENsYXNzfSlcbiAgLyoqXG4gICAqIE1hbmRhdG9yeSBjb2hvcnQgY29uZGl0aW9ucy5cbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gKi9cbiAgY29uc3QgbWFuZGF0b3J5V2hlcmVDb25kaXRpb25zID0ge31cblxuICBpZiAocmVsYXRpb25zaGlwLmdldFBvbHltb3JwaGljICYmIHJlbGF0aW9uc2hpcC5nZXRQb2x5bW9ycGhpYygpKSB7XG4gICAgY29uc3QgdHlwZUNvbHVtbiA9IHJlbGF0aW9uc2hpcC5nZXRQb2x5bW9ycGhpY1R5cGVDb2x1bW4oKVxuICAgIG1hbmRhdG9yeVdoZXJlQ29uZGl0aW9uc1t0eXBlQ29sdW1uXSA9IG1vZGVsQ2xhc3MuZ2V0TW9kZWxOYW1lKClcbiAgfVxuXG4gIGNvbnN0IGJhc2VRdWVyeSA9IHNvdXJjZU1vZGVsLnF1ZXJ5Rm9yTW9kZWwodGFyZ2V0TW9kZWxDbGFzcylcblxuICBiYXNlUXVlcnkuX2ZvcmNlUXVhbGlmeUJhc2VUYWJsZSA9IHRydWVcblxuICBpZiAoT2JqZWN0LmtleXMobWFuZGF0b3J5V2hlcmVDb25kaXRpb25zKS5sZW5ndGggPiAwKSB7XG4gICAgYmFzZVF1ZXJ5LndoZXJlKG1hbmRhdG9yeVdoZXJlQ29uZGl0aW9ucylcbiAgfVxuXG4gIGlmIChlbnRyeS53aGVyZSkge1xuICAgIGJhc2VRdWVyeS53aGVyZShlbnRyeS53aGVyZSlcbiAgfVxuXG4gIGNvbnN0IGNvdW50UXVlcnkgPSByZWxhdGlvbnNoaXAuYXBwbHlTY29wZShiYXNlUXVlcnkpXG5cbiAgY291bnRRdWVyeS5fcHJlbG9hZCA9IHt9XG4gIGNvdW50UXVlcnkucmVzZWxlY3QoKVxuXG4gIGNvbnN0IGRyaXZlciA9IGNvdW50UXVlcnkuZHJpdmVyXG4gIGNvbnN0IHF1b3RlZFRhYmxlID0gZHJpdmVyLnF1b3RlVGFibGUoY291bnRRdWVyeS5yb290VGFibGVSZWZlcmVuY2UoKSlcbiAgY29uc3QgcXVvdGVkRmsgPSBkcml2ZXIucXVvdGVDb2x1bW4oZm9yZWlnbktleSlcbiAgY29uc3QgcXVhbGlmaWVkRm9yZWlnbktleSA9IGAke3F1b3RlZFRhYmxlfS4ke3F1b3RlZEZrfWBcblxuICBjb3VudFF1ZXJ5Lmdyb3VwKHF1YWxpZmllZEZvcmVpZ25LZXkpXG4gIGNvdW50UXVlcnkuc2VsZWN0KGAke3F1YWxpZmllZEZvcmVpZ25LZXl9IEFTIHBhcmVudF9pZGApXG4gIGNvdW50UXVlcnkuc2VsZWN0KFwiQ09VTlQoKikgQVMgY291bnRfdmFsdWVcIilcblxuICByZXR1cm4ge2Jhc2VRdWVyeTogY291bnRRdWVyeSwgZm9yZWlnbktleX1cbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhIHByZXBhcmVkIGdyb3VwZWQgY291bnQgcXVlcnkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdH0gY291bnRRdWVyeSAtIFByZXBhcmVkIGNvdW50IHF1ZXJ5LlxuICogQHJldHVybnMge1Byb21pc2U8TWFwPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPj59IC0gTWFwIG9mIHBhcmVudCBwayDihpIgY291bnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVDb3VudFF1ZXJ5KGNvdW50UXVlcnkpIHtcbiAgY29uc3Qgcm93cyA9IC8qKiBAdHlwZSB7QXJyYXk8e3BhcmVudF9pZDogc3RyaW5nIHwgbnVtYmVyLCBjb3VudF92YWx1ZTogc3RyaW5nIHwgbnVtYmVyfT59ICovIChcbiAgICBhd2FpdCBjb3VudFF1ZXJ5Ll9leGVjdXRlUXVlcnkoKVxuICApXG5cbiAgLyoqXG4gICAqIENvdW50cy5cbiAgICogQHR5cGUge01hcDxzdHJpbmcgfCBudW1iZXIsIG51bWJlcj59ICovXG4gIGNvbnN0IGNvdW50cyA9IG5ldyBNYXAoKVxuXG4gIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICBjb25zdCBwYXJlbnRJZCA9IC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAocm93LnBhcmVudF9pZClcbiAgICBjb25zdCBjb3VudFZhbHVlID0gTnVtYmVyKHJvdy5jb3VudF92YWx1ZSkgfHwgMFxuICAgIGNvdW50cy5zZXQocGFyZW50SWQsIGNvdW50VmFsdWUpXG4gIH1cblxuICByZXR1cm4gY291bnRzXG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBncm91cGVkIGNvdW50IHF1ZXJ5IGluIGNvaG9ydHMgc28gdGhlIHBhcmVudCBJRCBJTi1saXN0IHN0YXlzXG4gKiB3aXRoaW4gZHJpdmVyIGxpbWl0cywgbWVyZ2luZyBwZXItcGFyZW50IGNvdW50cyBhY3Jvc3MgY2h1bmtzLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL21vZGVsLWNsYXNzLXF1ZXJ5LmpzXCIpLmRlZmF1bHR9IGFyZ3MuYmFzZVF1ZXJ5IC0gUHJlcGFyZWQgY291bnQgcXVlcnkgd2l0aG91dCBwYXJlbnQgSURzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZm9yZWlnbktleSAtIEZvcmVpZ24ga2V5IHVzZWQgdG8gam9pbiB0byB0aGUgcGFyZW50cy5cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nIHwgbnVtYmVyPn0gYXJncy5wYXJlbnRJZHMgLSBQcmltYXJ5IGtleXMgb2YgdGhlIGxvYWRlZCBwYXJlbnRzLlxuICogQHJldHVybnMge1Byb21pc2U8TWFwPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPj59IC0gTWFwIG9mIHBhcmVudCBwayDihpIgY291bnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVDaHVua2VkQ291bnRRdWVyeSh7YmFzZVF1ZXJ5LCBmb3JlaWduS2V5LCBwYXJlbnRJZHN9KSB7XG4gIGNvbnN0IGRyaXZlciA9IGJhc2VRdWVyeS5kcml2ZXJcbiAgY29uc3QgY29ob3J0cyA9IGRyaXZlci5jaHVua1ZhbHVlcyhwYXJlbnRJZHMsIChjaHVuaykgPT4gYmFzZVF1ZXJ5LmNsb25lKCkud2hlcmUoe1tmb3JlaWduS2V5XTogY2h1bmt9KS50b1NxbCgpKVxuXG4gIC8qKlxuICAgKiBDb3VudHMuXG4gICAqIEB0eXBlIHtNYXA8c3RyaW5nIHwgbnVtYmVyLCBudW1iZXI+fSAqL1xuICBjb25zdCBjb3VudHMgPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IGNvaG9ydCBvZiBjb2hvcnRzKSB7XG4gICAgY29uc3QgY29ob3J0UXVlcnkgPSBiYXNlUXVlcnkuY2xvbmUoKS53aGVyZSh7W2ZvcmVpZ25LZXldOiBjb2hvcnR9KVxuICAgIGNvbnN0IGNvaG9ydENvdW50cyA9IGF3YWl0IGV4ZWN1dGVDb3VudFF1ZXJ5KGNvaG9ydFF1ZXJ5KVxuXG4gICAgZm9yIChjb25zdCBbcGFyZW50SWQsIGNvdW50XSBvZiBjb2hvcnRDb3VudHMpIHtcbiAgICAgIGNvdW50cy5zZXQocGFyZW50SWQsIGNvdW50KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb3VudHNcbn1cblxuLyoqXG4gKiBBdHRhY2hlcyBvbmUgZW50cnkncyByZXNvbHZlZCBjb3VudHMgdG8gdGhlIGxvYWRlZCBtb2RlbHMuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcgfCBudW1iZXIsIG51bWJlcj59IGFyZ3MuY291bnRzIC0gQ291bnRzIGtleWVkIGJ5IHBhcmVudCBwcmltYXJ5IGtleS5cbiAqIEBwYXJhbSB7V2l0aENvdW50RW50cnl9IGFyZ3MuZW50cnkgLSBFbnRyeSB3aG9zZSBhbGlhcyByZWNlaXZlcyB0aGUgY291bnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdfSBhcmdzLm1vZGVscyAtIExvYWRlZCBwYXJlbnQgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnByaW1hcnlLZXkgLSBQYXJlbnQgcHJpbWFyeSBrZXkgY29sdW1uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGF0dGFjaENvdW50cyh7Y291bnRzLCBlbnRyeSwgbW9kZWxzLCBwcmltYXJ5S2V5fSkge1xuICBmb3IgKGNvbnN0IG1vZGVsIG9mIG1vZGVscykge1xuICAgIGNvbnN0IG1vZGVsUHJpbWFyeUtleVZhbHVlID0gLyoqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9ICovIChtb2RlbC5yZWFkQ29sdW1uKHByaW1hcnlLZXkpKVxuICAgIC8vIFRvbGVyYXRlIGRyaXZlciBkaWZmZXJlbmNlcyBpbiBudW1lcmljIHJldHVybiB0eXBlczogU1FMaXRlXG4gICAgLy8gcmV0dXJucyBpbnRlZ2VycyBhcyBKUyBudW1iZXJzLCBidXQgTXlTUUwncyByYXcgZHJpdmVyIGNhblxuICAgIC8vIHJldHVybiBjb3VudCBwcmltYXJ5IGtleXMgYXMgc3RyaW5ncy4gVHJ5IGJvdGguXG4gICAgY29uc3QgcmVzb2x2ZWRDb3VudCA9IGNvdW50cy5oYXMobW9kZWxQcmltYXJ5S2V5VmFsdWUpXG4gICAgICA/IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoY291bnRzLmdldChtb2RlbFByaW1hcnlLZXlWYWx1ZSkpXG4gICAgICA6IE51bWJlcihjb3VudHMuZ2V0KFN0cmluZyhtb2RlbFByaW1hcnlLZXlWYWx1ZSkpID8/IDApXG5cbiAgICAvLyBDb3VudHMgZ28gb24gdGhlIHJlY29yZCdzIGRlZGljYXRlZCBhc3NvY2lhdGlvbi1jb3VudCBtYXAsXG4gICAgLy8gTk9UIG9uIGBfYXR0cmlidXRlc2AsIHNvIGEgdmlydHVhbCBgdGFza3NDb3VudGAgY2FuJ3Qgc2hhZG93IGFcbiAgICAvLyByZWFsIGB0YXNrc19jb3VudGAgY29sdW1uIChlLmcuIGEgY291bnRlcl9jYWNoZSkgbm9yIGxlYWsgaW50b1xuICAgIC8vIGF0dHJpYnV0ZS1sZXZlbCBzZXJpYWxpemF0aW9uIC8gY2hhbmdlIHRyYWNraW5nLlxuICAgIG1vZGVsLl9zZXRBc3NvY2lhdGlvbkNvdW50KGVudHJ5LmF0dHJpYnV0ZU5hbWUsIHJlc29sdmVkQ291bnQpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acts-as-list.d.ts","sourceRoot":"","sources":["../../../../src/database/record/acts-as-list.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"acts-as-list.d.ts","sourceRoot":"","sources":["../../../../src/database/record/acts-as-list.js"],"names":[],"mappings":"AAkDA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,OAAO,UAAU,2BAA2B,CAAC,UAAU,EANnD,cAAc,YAAY,EAAE,OAMuB,EAAE,cAAc,EALnE,MAKmE,EAAE,EAAC,KAAK,EAAC,EAHpF;IAAwB,KAAK,EAArB,MAAM,CACd;CAEoF,GAF1E,IAAI,CAsGhB"}
|