velocious 1.0.461 → 1.0.462
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/build/application.js +1 -3
- package/build/background-jobs/cron-expression.js +1 -3
- package/build/background-jobs/forked-runner-child.js +1 -3
- package/build/background-jobs/job.js +1 -3
- package/build/background-jobs/scheduler.js +2 -6
- package/build/background-jobs/store.js +2 -6
- package/build/background-jobs/web/controller.js +1 -3
- package/build/background-jobs/worker.js +1 -3
- package/build/beacon/client.js +2 -6
- package/build/cli/tenant-database-command-helper.js +1 -3
- package/build/configuration.js +29 -32
- package/build/controller.js +4 -14
- package/build/database/drivers/mssql/index.js +1 -3
- package/build/database/drivers/mysql/index.js +2 -6
- package/build/database/drivers/pgsql/index.js +1 -3
- package/build/database/drivers/sqlite/base.js +3 -9
- package/build/database/drivers/sqlite/index.js +3 -9
- package/build/database/drivers/sqlite/table.js +1 -3
- package/build/database/migrator.js +1 -3
- package/build/database/pool/async-tracked-multi-connection.js +20 -45
- package/build/database/pool/base-methods-forward.js +2 -10
- package/build/database/pool/base.js +5 -15
- package/build/database/query/index.js +4 -12
- package/build/database/query/join-object.js +3 -9
- package/build/database/query/model-class-query.js +21 -63
- package/build/database/query/preloader/belongs-to.js +9 -27
- package/build/database/query/preloader/has-many.js +7 -21
- package/build/database/query/preloader/has-one.js +3 -9
- package/build/database/query/preloader.js +6 -18
- package/build/database/query/query-data.js +5 -15
- package/build/database/query/where-model-class-hash.js +5 -15
- package/build/database/query/with-count.js +5 -15
- package/build/database/record/acts-as-list.js +10 -38
- package/build/database/record/attachments/normalize-input.js +7 -25
- package/build/database/record/attachments/storage-drivers/s3.js +4 -12
- package/build/database/record/attachments/store.js +2 -6
- package/build/database/record/index.js +55 -171
- package/build/database/record/instance-relationships/base.js +6 -20
- package/build/database/record/instance-relationships/belongs-to.js +2 -6
- package/build/database/record/instance-relationships/has-many.js +4 -12
- package/build/database/record/instance-relationships/has-one.js +4 -12
- package/build/database/record/relationships/base.js +1 -5
- package/build/database/record/validators/presence.js +1 -3
- package/build/database/record/validators/uniqueness.js +4 -12
- package/build/environment-handlers/browser.js +1 -3
- package/build/environment-handlers/node/cli/commands/console.js +2 -6
- package/build/environment-handlers/node/cli/commands/db/schema/load.js +1 -3
- package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +67 -11
- package/build/environment-handlers/node.js +15 -6
- package/build/frontend-model-controller.js +34 -110
- package/build/frontend-models/base.js +45 -151
- package/build/frontend-models/clear-pending-debounced-callback.js +1 -3
- package/build/frontend-models/preloader.js +3 -9
- package/build/frontend-models/query.js +11 -33
- package/build/frontend-models/resource-definition.js +2 -6
- package/build/frontend-models/transport-serialization.js +7 -21
- package/build/frontend-models/use-destroyed-event.js +2 -6
- package/build/frontend-models/use-model-class-event.js +2 -6
- package/build/frontend-models/use-updated-event.js +3 -9
- package/build/frontend-models/websocket-channel.js +9 -27
- package/build/frontend-models/websocket-publishers.js +12 -23
- package/build/http-server/client/index.js +6 -18
- package/build/http-server/client/params-to-object.js +6 -18
- package/build/http-server/client/request-buffer/index.js +1 -3
- package/build/http-server/client/request-parser.js +1 -3
- package/build/http-server/client/request-runner.js +4 -12
- package/build/http-server/client/websocket-session.js +6 -18
- package/build/http-server/development-reloader.js +2 -6
- package/build/http-server/remote-address.js +1 -5
- package/build/http-server/server-client.js +3 -9
- package/build/http-server/server-lock.js +2 -6
- package/build/http-server/websocket-channel-subscribers.js +2 -6
- package/build/http-server/websocket-event-log-store.js +5 -15
- package/build/http-server/websocket-events-host.js +1 -3
- package/build/http-server/worker-handler/in-process.js +3 -11
- package/build/http-server/worker-handler/worker-thread.js +1 -3
- package/build/logger.js +2 -6
- package/build/mailer/backends/smtp.js +1 -5
- package/build/mailer/base.js +4 -16
- package/build/plugins/sqljs-wasm-route-controller.js +1 -3
- package/build/routes/basic-route.js +1 -3
- package/build/routes/resolver.js +4 -14
- package/build/src/application.d.ts.map +1 -1
- package/build/src/application.js +2 -4
- package/build/src/background-jobs/cron-expression.d.ts.map +1 -1
- package/build/src/background-jobs/cron-expression.js +2 -4
- package/build/src/background-jobs/forked-runner-child.js +2 -4
- package/build/src/background-jobs/job.d.ts.map +1 -1
- package/build/src/background-jobs/job.js +2 -4
- package/build/src/background-jobs/scheduler.d.ts.map +1 -1
- package/build/src/background-jobs/scheduler.js +3 -7
- package/build/src/background-jobs/store.d.ts.map +1 -1
- package/build/src/background-jobs/store.js +3 -7
- package/build/src/background-jobs/web/controller.d.ts.map +1 -1
- package/build/src/background-jobs/web/controller.js +2 -5
- package/build/src/background-jobs/worker.d.ts.map +1 -1
- package/build/src/background-jobs/worker.js +2 -4
- package/build/src/beacon/client.d.ts.map +1 -1
- package/build/src/beacon/client.js +3 -7
- package/build/src/cli/tenant-database-command-helper.d.ts.map +1 -1
- package/build/src/cli/tenant-database-command-helper.js +2 -4
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +27 -35
- package/build/src/controller.d.ts.map +1 -1
- package/build/src/controller.js +5 -15
- package/build/src/database/drivers/mssql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/index.js +2 -4
- package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/index.js +3 -7
- package/build/src/database/drivers/pgsql/index.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/index.js +2 -4
- package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/base.js +4 -10
- package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/index.js +4 -10
- package/build/src/database/drivers/sqlite/table.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/table.js +2 -4
- package/build/src/database/migrator.d.ts.map +1 -1
- package/build/src/database/migrator.js +2 -4
- package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
- package/build/src/database/pool/async-tracked-multi-connection.js +21 -47
- package/build/src/database/pool/base-methods-forward.d.ts.map +1 -1
- package/build/src/database/pool/base-methods-forward.js +3 -11
- package/build/src/database/pool/base.d.ts.map +1 -1
- package/build/src/database/pool/base.js +6 -16
- package/build/src/database/query/index.d.ts.map +1 -1
- package/build/src/database/query/index.js +5 -13
- package/build/src/database/query/join-object.d.ts.map +1 -1
- package/build/src/database/query/join-object.js +4 -10
- package/build/src/database/query/model-class-query.d.ts.map +1 -1
- package/build/src/database/query/model-class-query.js +22 -64
- package/build/src/database/query/preloader/belongs-to.d.ts.map +1 -1
- package/build/src/database/query/preloader/belongs-to.js +10 -28
- package/build/src/database/query/preloader/has-many.d.ts.map +1 -1
- package/build/src/database/query/preloader/has-many.js +8 -22
- package/build/src/database/query/preloader/has-one.d.ts.map +1 -1
- package/build/src/database/query/preloader/has-one.js +4 -10
- package/build/src/database/query/preloader.d.ts.map +1 -1
- package/build/src/database/query/preloader.js +7 -20
- package/build/src/database/query/query-data.d.ts.map +1 -1
- package/build/src/database/query/query-data.js +6 -16
- package/build/src/database/query/where-model-class-hash.d.ts.map +1 -1
- package/build/src/database/query/where-model-class-hash.js +6 -16
- package/build/src/database/query/with-count.d.ts.map +1 -1
- package/build/src/database/query/with-count.js +6 -17
- package/build/src/database/record/acts-as-list.d.ts.map +1 -1
- package/build/src/database/record/acts-as-list.js +11 -47
- package/build/src/database/record/attachments/normalize-input.d.ts.map +1 -1
- package/build/src/database/record/attachments/normalize-input.js +8 -30
- package/build/src/database/record/attachments/storage-drivers/s3.d.ts.map +1 -1
- package/build/src/database/record/attachments/storage-drivers/s3.js +5 -13
- package/build/src/database/record/attachments/store.d.ts.map +1 -1
- package/build/src/database/record/attachments/store.js +3 -7
- package/build/src/database/record/index.d.ts +4 -9
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +53 -173
- package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/base.js +7 -21
- 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 -7
- package/build/src/database/record/instance-relationships/has-many.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/has-many.js +5 -13
- package/build/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/has-one.js +5 -13
- package/build/src/database/record/relationships/base.d.ts.map +1 -1
- package/build/src/database/record/relationships/base.js +2 -6
- package/build/src/database/record/validators/presence.d.ts.map +1 -1
- package/build/src/database/record/validators/presence.js +2 -4
- package/build/src/database/record/validators/uniqueness.d.ts.map +1 -1
- package/build/src/database/record/validators/uniqueness.js +5 -14
- package/build/src/environment-handlers/browser.d.ts.map +1 -1
- package/build/src/environment-handlers/browser.js +2 -4
- package/build/src/environment-handlers/node/cli/commands/console.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/console.js +3 -7
- package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +2 -4
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +38 -0
- 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 +58 -12
- package/build/src/environment-handlers/node.d.ts.map +1 -1
- package/build/src/environment-handlers/node.js +16 -7
- package/build/src/frontend-model-controller.d.ts.map +1 -1
- package/build/src/frontend-model-controller.js +35 -114
- package/build/src/frontend-models/base.d.ts.map +1 -1
- package/build/src/frontend-models/base.js +46 -158
- package/build/src/frontend-models/clear-pending-debounced-callback.d.ts.map +1 -1
- package/build/src/frontend-models/clear-pending-debounced-callback.js +2 -4
- package/build/src/frontend-models/preloader.d.ts.map +1 -1
- package/build/src/frontend-models/preloader.js +4 -11
- package/build/src/frontend-models/query.d.ts.map +1 -1
- package/build/src/frontend-models/query.js +12 -34
- package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
- package/build/src/frontend-models/resource-definition.js +3 -7
- package/build/src/frontend-models/transport-serialization.d.ts.map +1 -1
- package/build/src/frontend-models/transport-serialization.js +8 -23
- package/build/src/frontend-models/use-destroyed-event.js +3 -7
- 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 -7
- package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-updated-event.js +4 -10
- package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-channel.js +10 -32
- package/build/src/frontend-models/websocket-publishers.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-publishers.js +14 -25
- package/build/src/http-server/client/index.d.ts.map +1 -1
- package/build/src/http-server/client/index.js +7 -21
- package/build/src/http-server/client/params-to-object.d.ts.map +1 -1
- package/build/src/http-server/client/params-to-object.js +7 -21
- package/build/src/http-server/client/request-buffer/index.d.ts.map +1 -1
- package/build/src/http-server/client/request-buffer/index.js +2 -4
- package/build/src/http-server/client/request-parser.d.ts.map +1 -1
- package/build/src/http-server/client/request-parser.js +2 -4
- package/build/src/http-server/client/request-runner.d.ts.map +1 -1
- package/build/src/http-server/client/request-runner.js +5 -14
- package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-session.js +7 -20
- package/build/src/http-server/development-reloader.d.ts.map +1 -1
- package/build/src/http-server/development-reloader.js +3 -7
- package/build/src/http-server/remote-address.d.ts.map +1 -1
- package/build/src/http-server/remote-address.js +2 -6
- package/build/src/http-server/server-client.d.ts.map +1 -1
- package/build/src/http-server/server-client.js +4 -10
- package/build/src/http-server/server-lock.d.ts.map +1 -1
- package/build/src/http-server/server-lock.js +3 -7
- package/build/src/http-server/websocket-channel-subscribers.d.ts.map +1 -1
- package/build/src/http-server/websocket-channel-subscribers.js +3 -7
- package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
- package/build/src/http-server/websocket-event-log-store.js +6 -16
- package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
- package/build/src/http-server/websocket-events-host.js +2 -5
- package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/in-process.js +4 -12
- package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/worker-thread.js +2 -4
- package/build/src/logger.d.ts.map +1 -1
- package/build/src/logger.js +3 -7
- package/build/src/mailer/backends/smtp.d.ts.map +1 -1
- package/build/src/mailer/backends/smtp.js +2 -6
- package/build/src/mailer/base.d.ts.map +1 -1
- package/build/src/mailer/base.js +5 -17
- package/build/src/plugins/sqljs-wasm-route-controller.d.ts.map +1 -1
- package/build/src/plugins/sqljs-wasm-route-controller.js +2 -4
- package/build/src/routes/basic-route.d.ts.map +1 -1
- package/build/src/routes/basic-route.js +2 -4
- package/build/src/routes/resolver.d.ts.map +1 -1
- package/build/src/routes/resolver.js +5 -15
- package/build/src/testing/expect-utils.d.ts.map +1 -1
- package/build/src/testing/expect-utils.js +9 -27
- package/build/src/testing/expect.d.ts.map +1 -1
- package/build/src/testing/expect.js +5 -15
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +4 -10
- package/build/src/testing/test.d.ts.map +1 -1
- package/build/src/testing/test.js +5 -17
- package/build/src/utils/model-scope.d.ts.map +1 -1
- package/build/src/utils/model-scope.js +2 -5
- package/build/src/utils/ransack.d.ts.map +1 -1
- package/build/src/utils/ransack.js +15 -42
- package/build/src/utils/with-tracked-stack-async-hooks.d.ts.map +1 -1
- package/build/src/utils/with-tracked-stack-async-hooks.js +4 -12
- package/build/src/utils/with-tracked-stack.d.ts.map +1 -1
- package/build/src/utils/with-tracked-stack.js +3 -8
- package/build/testing/expect-utils.js +8 -26
- package/build/testing/expect.js +4 -14
- package/build/testing/test-runner.js +3 -9
- package/build/testing/test.js +4 -12
- package/build/utils/model-scope.js +1 -3
- package/build/utils/ransack.js +15 -41
- package/build/utils/with-tracked-stack-async-hooks.js +3 -9
- package/build/utils/with-tracked-stack.js +2 -6
- package/package.json +3 -2
- package/src/application.js +1 -3
- package/src/background-jobs/cron-expression.js +1 -3
- package/src/background-jobs/forked-runner-child.js +1 -3
- package/src/background-jobs/job.js +1 -3
- package/src/background-jobs/scheduler.js +2 -6
- package/src/background-jobs/store.js +2 -6
- package/src/background-jobs/web/controller.js +1 -3
- package/src/background-jobs/worker.js +1 -3
- package/src/beacon/client.js +2 -6
- package/src/cli/tenant-database-command-helper.js +1 -3
- package/src/configuration.js +29 -32
- package/src/controller.js +4 -14
- package/src/database/drivers/mssql/index.js +1 -3
- package/src/database/drivers/mysql/index.js +2 -6
- package/src/database/drivers/pgsql/index.js +1 -3
- package/src/database/drivers/sqlite/base.js +3 -9
- package/src/database/drivers/sqlite/index.js +3 -9
- package/src/database/drivers/sqlite/table.js +1 -3
- package/src/database/migrator.js +1 -3
- package/src/database/pool/async-tracked-multi-connection.js +20 -45
- package/src/database/pool/base-methods-forward.js +2 -10
- package/src/database/pool/base.js +5 -15
- package/src/database/query/index.js +4 -12
- package/src/database/query/join-object.js +3 -9
- package/src/database/query/model-class-query.js +21 -63
- package/src/database/query/preloader/belongs-to.js +9 -27
- package/src/database/query/preloader/has-many.js +7 -21
- package/src/database/query/preloader/has-one.js +3 -9
- package/src/database/query/preloader.js +6 -18
- package/src/database/query/query-data.js +5 -15
- package/src/database/query/where-model-class-hash.js +5 -15
- package/src/database/query/with-count.js +5 -15
- package/src/database/record/acts-as-list.js +10 -38
- package/src/database/record/attachments/normalize-input.js +7 -25
- package/src/database/record/attachments/storage-drivers/s3.js +4 -12
- package/src/database/record/attachments/store.js +2 -6
- package/src/database/record/index.js +55 -171
- package/src/database/record/instance-relationships/base.js +6 -20
- package/src/database/record/instance-relationships/belongs-to.js +2 -6
- package/src/database/record/instance-relationships/has-many.js +4 -12
- package/src/database/record/instance-relationships/has-one.js +4 -12
- package/src/database/record/relationships/base.js +1 -5
- package/src/database/record/validators/presence.js +1 -3
- package/src/database/record/validators/uniqueness.js +4 -12
- package/src/environment-handlers/browser.js +1 -3
- package/src/environment-handlers/node/cli/commands/console.js +2 -6
- package/src/environment-handlers/node/cli/commands/db/schema/load.js +1 -3
- package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +67 -11
- package/src/environment-handlers/node.js +15 -6
- package/src/frontend-model-controller.js +34 -110
- package/src/frontend-models/base.js +45 -151
- package/src/frontend-models/clear-pending-debounced-callback.js +1 -3
- package/src/frontend-models/preloader.js +3 -9
- package/src/frontend-models/query.js +11 -33
- package/src/frontend-models/resource-definition.js +2 -6
- package/src/frontend-models/transport-serialization.js +7 -21
- package/src/frontend-models/use-destroyed-event.js +2 -6
- package/src/frontend-models/use-model-class-event.js +2 -6
- package/src/frontend-models/use-updated-event.js +3 -9
- package/src/frontend-models/websocket-channel.js +9 -27
- package/src/frontend-models/websocket-publishers.js +12 -23
- package/src/http-server/client/index.js +6 -18
- package/src/http-server/client/params-to-object.js +6 -18
- package/src/http-server/client/request-buffer/index.js +1 -3
- package/src/http-server/client/request-parser.js +1 -3
- package/src/http-server/client/request-runner.js +4 -12
- package/src/http-server/client/websocket-session.js +6 -18
- package/src/http-server/development-reloader.js +2 -6
- package/src/http-server/remote-address.js +1 -5
- package/src/http-server/server-client.js +3 -9
- package/src/http-server/server-lock.js +2 -6
- package/src/http-server/websocket-channel-subscribers.js +2 -6
- package/src/http-server/websocket-event-log-store.js +5 -15
- package/src/http-server/websocket-events-host.js +1 -3
- package/src/http-server/worker-handler/in-process.js +3 -11
- package/src/http-server/worker-handler/worker-thread.js +1 -3
- package/src/logger.js +2 -6
- package/src/mailer/backends/smtp.js +1 -5
- package/src/mailer/base.js +4 -16
- package/src/plugins/sqljs-wasm-route-controller.js +1 -3
- package/src/routes/basic-route.js +1 -3
- package/src/routes/resolver.js +4 -14
- package/src/testing/expect-utils.js +8 -26
- package/src/testing/expect.js +4 -14
- package/src/testing/test-runner.js +3 -9
- package/src/testing/test.js +4 -12
- package/src/utils/model-scope.js +1 -3
- package/src/utils/ransack.js +15 -41
- package/src/utils/with-tracked-stack-async-hooks.js +3 -9
- package/src/utils/with-tracked-stack.js +2 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-scope.d.ts","sourceRoot":"","sources":["../../../src/utils/model-scope.js"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,uEALG;IAAuC,QAAQ,EAAvC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,OAAC;IAC6F,UAAU,EAA/H,cAAc,6BAA6B,EAAE,OAAO,GAAG,OAAO,4BAA4B,EAAE,kBAAkB;IAChG,UAAU,EAAxB,MAAM,OAAC;CACf,GAAU,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,OAAC,CAAC,GAAG;IAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,oBAAoB,CAAA;CAAC,CAyB7F;AAED;;;;GAIG;AACH,8CAHW,OAAC,GACC,KAAK,IAAI,oBAAoB,
|
|
1
|
+
{"version":3,"file":"model-scope.d.ts","sourceRoot":"","sources":["../../../src/utils/model-scope.js"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,uEALG;IAAuC,QAAQ,EAAvC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,OAAC;IAC6F,UAAU,EAA/H,cAAc,6BAA6B,EAAE,OAAO,GAAG,OAAO,4BAA4B,EAAE,kBAAkB;IAChG,UAAU,EAAxB,MAAM,OAAC;CACf,GAAU,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,OAAC,CAAC,GAAG;IAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,oBAAoB,CAAA;CAAC,CAyB7F;AAED;;;;GAIG;AACH,8CAHW,OAAC,GACC,KAAK,IAAI,oBAAoB,CAIzC;;;;;;;;;;;;cA7Ca,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,OAAC;;;;gBACxB,cAAc,6BAA6B,EAAE,OAAO,GAAG,OAAO,4BAA4B,EAAE,kBAAkB;;;;eAC9G,KAAK,CAAC,OAAC,CAAC"}
|
|
@@ -44,9 +44,6 @@ export function defineModelScope({ callback, modelClass, startQuery }) {
|
|
|
44
44
|
* @returns {value is ModelScopeDescriptor} - Whether the value is a scope descriptor.
|
|
45
45
|
*/
|
|
46
46
|
export function isModelScopeDescriptor(value) {
|
|
47
|
-
return Boolean(value && typeof value === "object" && /**
|
|
48
|
-
* Narrows the runtime value to the documented type.
|
|
49
|
-
* @type {Record<string, ?>} */
|
|
50
|
-
(value)[MODEL_SCOPE_DESCRIPTOR_MARKER] === true);
|
|
47
|
+
return Boolean(value && typeof value === "object" && /** @type {Record<string, ?>} */ (value)[MODEL_SCOPE_DESCRIPTOR_MARKER] === true);
|
|
51
48
|
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtc2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvbW9kZWwtc2NvcGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE1BQU0sNkJBQTZCLEdBQUcsK0JBQStCLENBQUE7QUFFckU7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsRUFBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBQztJQUNqRTs7OztPQUlHO0lBQ0gsU0FBUyxZQUFZLENBQUMsR0FBRyxTQUFTO1FBQ2hDLE9BQU8sVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBQzdELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsNkJBQTZCLENBQUMsRUFBRSxJQUFJO1FBQ3JDLFFBQVE7UUFDUixVQUFVO1FBQ1YsU0FBUztLQUNWLENBQUMsQ0FBQTtJQUVGLE9BQU8sWUFBWSxDQUFBO0FBQ3JCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEtBQUs7SUFDMUMsT0FBTyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxnQ0FBZ0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLDZCQUE2QixDQUFDLEtBQUssSUFBSSxDQUFDLENBQUE7QUFDeEksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5jb25zdCBNT0RFTF9TQ09QRV9ERVNDUklQVE9SX01BUktFUiA9IFwidmVsb2Npb3VzTW9kZWxTY29wZURlc2NyaXB0b3JcIlxuXG4vKipcbiAqIE1vZGVsU2NvcGVEZXNjcmlwdG9yIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBNb2RlbFNjb3BlRGVzY3JpcHRvclxuICogQHByb3BlcnR5IHt0cnVlfSBbdmVsb2Npb3VzTW9kZWxTY29wZURlc2NyaXB0b3JdIC0gSW50ZXJuYWwgbWFya2VyLlxuICogQHByb3BlcnR5IHsoLi4uYXJnczogQXJyYXk8Pz4pID0+ID99IGNhbGxiYWNrIC0gU2NvcGUgY2FsbGJhY2suXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9iYXNlLmpzXCIpLkZyb250ZW5kTW9kZWxDbGFzc30gbW9kZWxDbGFzcyAtIE93bmluZyBtb2RlbCBjbGFzcy5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8Pz59IHNjb3BlQXJncyAtIFNjb3BlIGFyZ3VtZW50cy5cbiAqL1xuXG4vKipcbiAqIFJ1bnMgdGhlIGRlZmluZU1vZGVsU2NvcGUgaGVscGVyLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBEZWZpbml0aW9uIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7KC4uLmFyZ3M6IEFycmF5PD8+KSA9PiA/fSBhcmdzLmNhbGxiYWNrIC0gU2NvcGUgY2FsbGJhY2suXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9iYXNlLmpzXCIpLkZyb250ZW5kTW9kZWxDbGFzc30gYXJncy5tb2RlbENsYXNzIC0gT3duaW5nIG1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHsoKSA9PiA/fSBhcmdzLnN0YXJ0UXVlcnkgLSBGYWN0b3J5IHRoYXQgcmV0dXJucyBhIGZyZXNoIHF1ZXJ5IGZvciB0aGUgb3duaW5nIG1vZGVsIGNsYXNzLlxuICogQHJldHVybnMgeygoLi4uYXJnczogQXJyYXk8Pz4pID0+ID8pICYge3Njb3BlOiAoLi4uYXJnczogQXJyYXk8Pz4pID0+IE1vZGVsU2NvcGVEZXNjcmlwdG9yfX0gLSBTY29wZSBoZWxwZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVNb2RlbFNjb3BlKHtjYWxsYmFjaywgbW9kZWxDbGFzcywgc3RhcnRRdWVyeX0pIHtcbiAgLyoqXG4gICAqIFJ1bnMgZGVmaW5lZCBzY29wZS5cbiAgICogQHBhcmFtIHsuLi4/fSBzY29wZUFyZ3MgLSBTY29wZSBhcmd1bWVudHMuXG4gICAqIEByZXR1cm5zIHs/fSAtIFNjb3BlZCByb290IHF1ZXJ5LlxuICAgKi9cbiAgZnVuY3Rpb24gZGVmaW5lZFNjb3BlKC4uLnNjb3BlQXJncykge1xuICAgIHJldHVybiBzdGFydFF1ZXJ5KCkuc2NvcGUoZGVmaW5lZFNjb3BlLnNjb3BlKC4uLnNjb3BlQXJncykpXG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgcmV1c2FibGUgc2NvcGUgZGVzY3JpcHRvci5cbiAgICogQHBhcmFtIHsuLi4/fSBzY29wZUFyZ3MgLSBTY29wZSBhcmd1bWVudHMuXG4gICAqIEByZXR1cm5zIHtNb2RlbFNjb3BlRGVzY3JpcHRvcn0gLSBSZXVzYWJsZSBzY29wZSBkZXNjcmlwdG9yLlxuICAgKi9cbiAgZGVmaW5lZFNjb3BlLnNjb3BlID0gKC4uLnNjb3BlQXJncykgPT4gKHtcbiAgICBbTU9ERUxfU0NPUEVfREVTQ1JJUFRPUl9NQVJLRVJdOiB0cnVlLFxuICAgIGNhbGxiYWNrLFxuICAgIG1vZGVsQ2xhc3MsXG4gICAgc2NvcGVBcmdzXG4gIH0pXG5cbiAgcmV0dXJuIGRlZmluZWRTY29wZVxufVxuXG4vKipcbiAqIFJ1bnMgdGhlIGlzTW9kZWxTY29wZURlc2NyaXB0b3IgaGVscGVyLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIENhbmRpZGF0ZSBkZXNjcmlwdG9yLlxuICogQHJldHVybnMge3ZhbHVlIGlzIE1vZGVsU2NvcGVEZXNjcmlwdG9yfSAtIFdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgc2NvcGUgZGVzY3JpcHRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTW9kZWxTY29wZURlc2NyaXB0b3IodmFsdWUpIHtcbiAgcmV0dXJuIEJvb2xlYW4odmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovICh2YWx1ZSlbTU9ERUxfU0NPUEVfREVTQ1JJUFRPUl9NQVJLRVJdID09PSB0cnVlKVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ransack.d.ts","sourceRoot":"","sources":["../../../src/utils/ransack.js"],"names":[],"mappings":"AA4DA;;;;;GAKG;AACH,mDAJW,iBAAiB,UACjB,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,GACf,gBAAgB,EAAE,CAI9B;AAED;;;;;GAKG;AACH,kDAJW,iBAAiB,UACjB,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,GACf,YAAY,CAoCxB;
|
|
1
|
+
{"version":3,"file":"ransack.d.ts","sourceRoot":"","sources":["../../../src/utils/ransack.js"],"names":[],"mappings":"AA4DA;;;;;GAKG;AACH,mDAJW,iBAAiB,UACjB,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,GACf,gBAAgB,EAAE,CAI9B;AAED;;;;;GAKG;AACH,kDAJW,iBAAiB,UACjB,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,GACf,YAAY,CAoCxB;AAiqBD;;;;;GAKG;AAEH;;;;;GAKG;AACH,6CAJW,iBAAiB,cACjB,MAAM,GACJ,WAAW,EAAE,CA6BzB;;;;;;;;eArCa,MAAM;;;;eACN,KAAK,GAAG,MAAM;;;;;+BA3wBf,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO;;;;gCAKrG,KAAK,GAAG,IAAI;;;;gCAKZ,cAAc,6BAA6B,EAAE,OAAO,GAAG,OAAO,4BAA4B,EAAE,kBAAkB;;;;;;;;mBAM7G,MAAM;;;;UACN,MAAM,EAAE;;;;;;;;;gBAMR,gBAAgB,EAAE;;;;gBAClB,iBAAiB;;;;eACjB,gBAAgB;;;;WAChB,OAAC;;;;;;;;;gBAMD,iBAAiB;;;;gBACjB,gBAAgB,EAAE;;;;eAClB,YAAY,EAAE"}
|
|
@@ -145,9 +145,7 @@ function normalizeAdvancedRansackConditions({ modelClass, value }) {
|
|
|
145
145
|
if (!supportedPredicates.includes(predicateValue)) {
|
|
146
146
|
throw new Error(`Unsupported ransack predicate in condition: ${predicateValue}`);
|
|
147
147
|
}
|
|
148
|
-
const predicate = /**
|
|
149
|
-
* Narrows the runtime value to the documented type.
|
|
150
|
-
* @type {RansackPredicate} */ (predicateValue);
|
|
148
|
+
const predicate = /** @type {RansackPredicate} */ (predicateValue);
|
|
151
149
|
const rawValue = advancedRansackConditionValue({ predicate, value: entry.v });
|
|
152
150
|
const normalizedValue = normalizeRansackValue({ predicate, value: rawValue });
|
|
153
151
|
if (normalizedValue === SKIP_RANSACK_CONDITION)
|
|
@@ -452,17 +450,11 @@ function resolveAttributeName({ modelClass, value }) {
|
|
|
452
450
|
* @returns {Record<string, {targetModelClass: RansackModelClass}>} - Relationship entries keyed by name.
|
|
453
451
|
*/
|
|
454
452
|
function relationshipEntries(modelClass) {
|
|
455
|
-
if (typeof /**
|
|
456
|
-
* Narrows the runtime value to the documented type.
|
|
457
|
-
* @type {?} */ (modelClass).getRelationshipsMap === "function") {
|
|
453
|
+
if (typeof /** @type {?} */ (modelClass).getRelationshipsMap === "function") {
|
|
458
454
|
return backendRelationshipEntries(modelClass);
|
|
459
455
|
}
|
|
460
|
-
if (typeof /**
|
|
461
|
-
|
|
462
|
-
* @type {?} */ (modelClass).relationshipDefinitions === "function" &&
|
|
463
|
-
typeof /**
|
|
464
|
-
* Narrows the runtime value to the documented type.
|
|
465
|
-
* @type {?} */ (modelClass).relationshipModelClasses === "function") {
|
|
456
|
+
if (typeof /** @type {?} */ (modelClass).relationshipDefinitions === "function" &&
|
|
457
|
+
typeof /** @type {?} */ (modelClass).relationshipModelClasses === "function") {
|
|
466
458
|
return frontendRelationshipEntries(modelClass);
|
|
467
459
|
}
|
|
468
460
|
return {};
|
|
@@ -477,9 +469,7 @@ function backendRelationshipEntries(modelClass) {
|
|
|
477
469
|
* Entries.
|
|
478
470
|
* @type {Record<string, {targetModelClass: RansackModelClass}>} */
|
|
479
471
|
const entries = {};
|
|
480
|
-
const relationshipsMap = /**
|
|
481
|
-
* Narrows the runtime value to the documented type.
|
|
482
|
-
* @type {?} */ (modelClass).getRelationshipsMap();
|
|
472
|
+
const relationshipsMap = /** @type {?} */ (modelClass).getRelationshipsMap();
|
|
483
473
|
for (const relationshipName of Object.keys(relationshipsMap)) {
|
|
484
474
|
const relationship = relationshipsMap[relationshipName];
|
|
485
475
|
if (typeof relationship.isPolymorphic === "function" && relationship.isPolymorphic())
|
|
@@ -501,12 +491,8 @@ function frontendRelationshipEntries(modelClass) {
|
|
|
501
491
|
* Entries.
|
|
502
492
|
* @type {Record<string, {targetModelClass: RansackModelClass}>} */
|
|
503
493
|
const entries = {};
|
|
504
|
-
const definitions = /**
|
|
505
|
-
|
|
506
|
-
* @type {?} */ (modelClass).relationshipDefinitions();
|
|
507
|
-
const relationshipModelClasses = /**
|
|
508
|
-
* Narrows the runtime value to the documented type.
|
|
509
|
-
* @type {?} */ (modelClass).relationshipModelClasses();
|
|
494
|
+
const definitions = /** @type {?} */ (modelClass).relationshipDefinitions();
|
|
495
|
+
const relationshipModelClasses = /** @type {?} */ (modelClass).relationshipModelClasses();
|
|
510
496
|
for (const relationshipName of Object.keys(definitions)) {
|
|
511
497
|
const targetModelClass = resolveFrontendModelClass(relationshipModelClasses[relationshipName]);
|
|
512
498
|
if (!targetModelClass)
|
|
@@ -521,20 +507,11 @@ function frontendRelationshipEntries(modelClass) {
|
|
|
521
507
|
* @returns {Record<string, string>} - Attribute-to-column entries keyed by attribute name.
|
|
522
508
|
*/
|
|
523
509
|
function attributeEntries(modelClass) {
|
|
524
|
-
if (typeof /**
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
* @type {?} */(modelClass).getAttributeNameToColumnNameMap()));
|
|
530
|
-
}
|
|
531
|
-
const resourceConfig = typeof /**
|
|
532
|
-
* Narrows the runtime value to the documented type.
|
|
533
|
-
* @type {?} */ (modelClass).resourceConfig === "function"
|
|
534
|
-
? /**
|
|
535
|
-
* Narrows the runtime value to the documented type.
|
|
536
|
-
* @type {?} */
|
|
537
|
-
(modelClass).resourceConfig()
|
|
510
|
+
if (typeof /** @type {?} */ (modelClass).getAttributeNameToColumnNameMap === "function") {
|
|
511
|
+
return /** @type {Record<string, string>} */ (( /** @type {?} */(modelClass).getAttributeNameToColumnNameMap()));
|
|
512
|
+
}
|
|
513
|
+
const resourceConfig = typeof /** @type {?} */ (modelClass).resourceConfig === "function"
|
|
514
|
+
? /** @type {?} */ (modelClass).resourceConfig()
|
|
538
515
|
: {};
|
|
539
516
|
const attributes = resourceConfig.attributes;
|
|
540
517
|
/**
|
|
@@ -587,9 +564,7 @@ function parseRansackKey(key) {
|
|
|
587
564
|
}
|
|
588
565
|
return {
|
|
589
566
|
pathValue,
|
|
590
|
-
predicate: /**
|
|
591
|
-
* Narrows the runtime value to the documented type.
|
|
592
|
-
* @type {RansackPredicate} */ (predicate)
|
|
567
|
+
predicate: /** @type {RansackPredicate} */ (predicate)
|
|
593
568
|
};
|
|
594
569
|
}
|
|
595
570
|
for (const predicate of supportedPredicates) {
|
|
@@ -602,9 +577,7 @@ function parseRansackKey(key) {
|
|
|
602
577
|
}
|
|
603
578
|
return {
|
|
604
579
|
pathValue,
|
|
605
|
-
predicate: /**
|
|
606
|
-
* Narrows the runtime value to the documented type.
|
|
607
|
-
* @type {RansackPredicate} */ (predicate)
|
|
580
|
+
predicate: /** @type {RansackPredicate} */ (predicate)
|
|
608
581
|
};
|
|
609
582
|
}
|
|
610
583
|
return null;
|
|
@@ -741,4 +714,4 @@ export function parseRansackSort(modelClass, sortString) {
|
|
|
741
714
|
function uniqunize(values) {
|
|
742
715
|
return Array.from(new Set(values));
|
|
743
716
|
}
|
|
744
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuc2Fjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9yYW5zYWNrLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFDN0MsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sc0NBQXNDLENBQUE7QUFFOUU7OztHQUdHO0FBRUg7OztHQUdHO0FBRUg7OztHQUdHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7OztHQU9HO0FBRUg7Ozs7OztHQU1HO0FBRUgsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixRQUFRO0lBQ1IsUUFBUTtJQUNSLE1BQU07SUFDTixNQUFNO0lBQ04sT0FBTztJQUNQLE1BQU07SUFDTixNQUFNO0lBQ04sS0FBSztJQUNMLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7Q0FDTCxDQUFBO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsVUFBVSxFQUFFLE1BQU07SUFDdkQsT0FBTyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUFBO0FBQzdELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsTUFBTTtJQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsT0FBTyxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBQ2pGLENBQUM7SUFFRDs7OEJBRTBCO0lBQzFCLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLFVBQVUsRUFBRSwwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUN2RCxVQUFVLEVBQUUsRUFBRTtRQUNkLFNB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QUssQ0FBQyxtQ0FBbUMsa0JBQWtCLFNBQVMsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUMxRixDQUFDO1FBRUQsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFDLENBQUMsQ0FBQTtRQUVwRixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxlQUFlLFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7UUFDL0YsQ0FBQztRQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFDLENBQUMsQ0FBQTtJQUMzRSxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsU0FBUyxDQUFDLE1BQU07SUFDdkIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7aXNQbGFpbk9iamVjdH0gZnJvbSBcImlzLXBsYWluLW9iamVjdFwiXG5pbXBvcnQge3Jlc29sdmVGcm9udGVuZE1vZGVsQ2xhc3N9IGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvbW9kZWwtcmVnaXN0cnkuanNcIlxuXG4vKipcbiAqIFJhbnNhY2tQcmVkaWNhdGUgdHlwZS5cbiAqIEB0eXBlZGVmIHtcImNvbnRcIiB8IFwiZW5kXCIgfCBcImVxXCIgfCBcImd0XCIgfCBcImd0ZXFcIiB8IFwiaW5cIiB8IFwibHRcIiB8IFwibHRlcVwiIHwgXCJub3RfZXFcIiB8IFwibm90X2luXCIgfCBcIm51bGxcIiB8IFwic3RhcnRcIn0gUmFuc2Fja1ByZWRpY2F0ZVxuICovXG5cbi8qKlxuICogUmFuc2Fja0NvbWJpbmF0b3IgdHlwZS5cbiAqIEB0eXBlZGVmIHtcImFuZFwiIHwgXCJvclwifSBSYW5zYWNrQ29tYmluYXRvclxuICovXG5cbi8qKlxuICogUmFuc2Fja01vZGVsQ2xhc3MgdHlwZS5cbiAqIEB0eXBlZGVmIHt0eXBlb2YgaW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiKS5Gcm9udGVuZE1vZGVsQ2xhc3N9IFJhbnNhY2tNb2RlbENsYXNzXG4gKi9cblxuLyoqXG4gKiBSYW5zYWNrQXR0cmlidXRlIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSYW5zYWNrQXR0cmlidXRlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXR0cmlidXRlTmFtZSAtIFJlc29sdmVkIGF0dHJpYnV0ZSBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gcGF0aCAtIFJlc29sdmVkIHJlbGF0aW9uc2hpcCBwYXRoLlxuICovXG5cbi8qKlxuICogUmFuc2Fja0NvbmRpdGlvbiB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gUmFuc2Fja0NvbmRpdGlvblxuICogQHByb3BlcnR5IHtSYW5zYWNrQXR0cmlidXRlW119IGF0dHJpYnV0ZXMgLSBSZXNvbHZlZCBhdHRyaWJ1dGVzIHRvIHRlc3QuXG4gKiBAcHJvcGVydHkge1JhbnNhY2tDb21iaW5hdG9yfSBjb21iaW5hdG9yIC0gSG93IG11bHRpcGxlIGF0dHJpYnV0ZXMgYXJlIGNvbWJpbmVkLlxuICogQHByb3BlcnR5IHtSYW5zYWNrUHJlZGljYXRlfSBwcmVkaWNhdGUgLSBQYXJzZWQgUmFuc2FjayBwcmVkaWNhdGUuXG4gKiBAcHJvcGVydHkgez99IHZhbHVlIC0gTm9ybWFsaXplZCB2YWx1ZS5cbiAqL1xuXG4vKipcbiAqIFJhbnNhY2tHcm91cCB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gUmFuc2Fja0dyb3VwXG4gKiBAcHJvcGVydHkge1JhbnNhY2tDb21iaW5hdG9yfSBjb21iaW5hdG9yIC0gSG93IGVudHJpZXMgaW5zaWRlIHRoaXMgZ3JvdXAgYXJlIGNvbWJpbmVkLlxuICogQHByb3BlcnR5IHtSYW5zYWNrQ29uZGl0aW9uW119IGNvbmRpdGlvbnMgLSBDb25kaXRpb25zIGluIHRoaXMgZ3JvdXAuXG4gKiBAcHJvcGVydHkge1JhbnNhY2tHcm91cFtdfSBncm91cGluZ3MgLSBOZXN0ZWQgZ3JvdXBzLlxuICovXG5cbmNvbnN0IHN1cHBvcnRlZFByZWRpY2F0ZXMgPSBbXG4gIFwibm90X2luXCIsXG4gIFwibm90X2VxXCIsXG4gIFwiZ3RlcVwiLFxuICBcImx0ZXFcIixcbiAgXCJzdGFydFwiLFxuICBcImNvbnRcIixcbiAgXCJudWxsXCIsXG4gIFwiZW5kXCIsXG4gIFwiZXFcIixcbiAgXCJndFwiLFxuICBcImx0XCIsXG4gIFwiaW5cIlxuXVxuXG4vKipcbiAqIFJ1bnMgdGhlIG5vcm1hbGl6ZVJhbnNhY2tQYXJhbXMgaGVscGVyLlxuICogQHBhcmFtIHtSYW5zYWNrTW9kZWxDbGFzc30gbW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gcGFyYW1zIC0gUmFuc2Fjay1zdHlsZSBwYXJhbXMgaGFzaC5cbiAqIEByZXR1cm5zIHtSYW5zYWNrQ29uZGl0aW9uW119IC0gTm9ybWFsaXplZCBjb25kaXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUmFuc2Fja1BhcmFtcyhtb2RlbENsYXNzLCBwYXJhbXMpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVJhbnNhY2tHcm91cChtb2RlbENsYXNzLCBwYXJhbXMpLmNvbmRpdGlvbnNcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBub3JtYWxpemVSYW5zYWNrR3JvdXAgaGVscGVyLlxuICogQHBhcmFtIHtSYW5zYWNrTW9kZWxDbGFzc30gbW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gcGFyYW1zIC0gUmFuc2Fjay1zdHlsZSBwYXJhbXMgaGFzaC5cbiAqIEByZXR1cm5zIHtSYW5zYWNrR3JvdXB9IC0gTm9ybWFsaXplZCBncm91cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVJhbnNhY2tHcm91cChtb2RlbENsYXNzLCBwYXJhbXMpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHBhcmFtcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJhbnNhY2sgcGFyYW1zIG11c3QgYmUgYSBwbGFpbiBvYmplY3QsIGdvdDogJHt0eXBlb2YgcGFyYW1zfWApXG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplZC5cbiAgICogQHR5cGUge1JhbnNhY2tHcm91cH0gKi9cbiAgY29uc3Qgbm9ybWFsaXplZCA9IHtcbiAgICBjb21iaW5hdG9yOiBub3JtYWxpemVSYW5zYWNrQ29tYmluYXRvcihwYXJhbXMubSwgXCJhbmRcIiksXG4gICAgY29uZGl0aW9uczogW10sXG4gICAgZ3JvdXBpbmdzOiBbXVxuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCByYXdWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zKSkge1xuICAgIGlmIChrZXkgPT09IFwibVwiKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09IFwiY1wiKSB7XG4gICAgICBub3JtYWxpemVkLmNvbmRpdGlvbnMucHVzaCguLi5ub3JtYWxpemVBZHZhbmNlZFJhbnNhY2tDb25kaXRpb25zKHttb2RlbENsYXNzLCB2YWx1ZTogcmF3VmFsdWV9KSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gXCJnXCIpIHtcbiAgICAgIG5vcm1hbGl6ZWQuZ3JvdXBpbmdzLnB1c2goLi4ubm9ybWFsaXplQWR2YW5jZWRSYW5zYWNrR3JvdXBzKHttb2RlbENsYXNzLCB2YWx1ZTogcmF3VmFsdWV9KSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgY29uZGl0aW9uID0gbm9ybWFsaXplU2ltcGxlUmFuc2Fja0NvbmRpdGlvbih7a2V5LCBtb2RlbENsYXNzLCByYXdWYWx1ZX0pXG4gICAgaWYgKGNvbmRpdGlvbikgbm9ybWFsaXplZC5jb25kaXRpb25zLnB1c2goY29uZGl0aW9uKVxuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuY29uc3QgU0tJUF9SQU5TQUNLX0NPTkRJVElPTiA9IFN5bWJvbChcInNraXAtcmFuc2Fjay1jb25kaXRpb25cIilcblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSBzaW1wbGUgcmFuc2FjayBjb25kaXRpb24uXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5rZXkgLSBTaW1wbGUgUmFuc2FjayBrZXkuXG4gKiBAcGFyYW0ge1JhbnNhY2tNb2RlbENsYXNzfSBhcmdzLm1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7P30gYXJncy5yYXdWYWx1ZSAtIFJhdyBjb25kaXRpb24gdmFsdWUuXG4gKiBAcmV0dXJucyB7UmFuc2Fja0NvbmRpdGlvbiB8IG51bGx9IC0gTm9ybWFsaXplZCBjb25kaXRpb24sIG9yIG51bGwgd2hlbiBza2lwcGVkLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVTaW1wbGVSYW5zYWNrQ29uZGl0aW9uKHtrZXksIG1vZGVsQ2xhc3MsIHJhd1ZhbHVlfSkge1xuICBjb25zdCBwYXJzZWRLZXkgPSBwYXJzZVJhbnNhY2tLZXkoa2V5KVxuXG4gIGlmICghcGFyc2VkS2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCByYW5zYWNrIHByZWRpY2F0ZSBpbiBrZXk6ICR7a2V5fWApXG4gIH1cblxuICBjb25zdCB2YWx1ZSA9IG5vcm1hbGl6ZVJhbnNhY2tWYWx1ZSh7XG4gICAgcHJlZGljYXRlOiBwYXJzZWRLZXkucHJlZGljYXRlLFxuICAgIHZhbHVlOiByYXdWYWx1ZVxuICB9KVxuXG4gIGlmICh2YWx1ZSA9PT0gU0tJUF9SQU5TQUNLX0NPTkRJVElPTikgcmV0dXJuIG51bGxcblxuICBjb25zdCBhdHRyaWJ1dGVzID0gcmVzb2x2ZVJhbnNhY2tBdHRyaWJ1dGVzKHttb2RlbENsYXNzLCB2YWx1ZTogcGFyc2VkS2V5LnBhdGhWYWx1ZX0pXG5cbiAgcmV0dXJuIHtcbiAgICBhdHRyaWJ1dGVzLFxuICAgIGNvbWJpbmF0b3I6IGF0dHJpYnV0ZXMubGVuZ3RoID4gMSA/IFwib3JcIiA6IFwiYW5kXCIsXG4gICAgcHJlZGljYXRlOiBwYXJzZWRLZXkucHJlZGljYXRlLFxuICAgIHZhbHVlXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSBhZHZhbmNlZCByYW5zYWNrIGNvbmRpdGlvbnMuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge1JhbnNhY2tNb2RlbENsYXNzfSBhcmdzLm1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7P30gYXJncy52YWx1ZSAtIEFkdmFuY2VkIGNvbmRpdGlvbnMgY29sbGVjdGlvbi5cbiAqIEByZXR1cm5zIHtSYW5zYWNrQ29uZGl0aW9uW119IC0gTm9ybWFsaXplZCBjb25kaXRpb25zLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVBZHZhbmNlZFJhbnNhY2tDb25kaXRpb25zKHttb2RlbENsYXNzLCB2YWx1ZX0pIHtcbiAgLyoqXG4gICAqIENvbmRpdGlvbnMuXG4gICAqIEB0eXBlIHtSYW5zYWNrQ29uZGl0aW9uW119ICovXG4gIGNvbnN0IGNvbmRpdGlvbnMgPSBbXVxuXG4gIGZvciAoY29uc3QgZW50cnkgb2Ygbm9ybWFsaXplUmFuc2Fja0NvbGxlY3Rpb24odmFsdWUsIFwiY29uZGl0aW9uc1wiKSkge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmFuc2FjayBjb25kaXRpb24gZW50cmllcyBtdXN0IGJlIHBsYWluIG9iamVjdHMsIGdvdDogJHt0eXBlb2YgZW50cnl9YClcbiAgICB9XG5cbiAgICBjb25zdCBwcmVkaWNhdGVWYWx1ZSA9IGVudHJ5LnBcblxuICAgIGlmICh0eXBlb2YgcHJlZGljYXRlVmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlJhbnNhY2sgY29uZGl0aW9uIHByZWRpY2F0ZSBtdXN0IGJlIGEgc3RyaW5nXCIpXG4gICAgfVxuXG4gICAgaWYgKCFzdXBwb3J0ZWRQcmVkaWNhdGVzLmluY2x1ZGVzKHByZWRpY2F0ZVZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCByYW5zYWNrIHByZWRpY2F0ZSBpbiBjb25kaXRpb246ICR7cHJlZGljYXRlVmFsdWV9YClcbiAgICB9XG5cbiAgICBjb25zdCBwcmVkaWNhdGUgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge1JhbnNhY2tQcmVkaWNhdGV9ICovIChwcmVkaWNhdGVWYWx1ZSlcbiAgICBjb25zdCByYXdWYWx1ZSA9IGFkdmFuY2VkUmFuc2Fja0NvbmRpdGlvblZhbHVlKHtwcmVkaWNhdGUsIHZhbHVlOiBlbnRyeS52fSlcbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVSYW5zYWNrVmFsdWUoe3ByZWRpY2F0ZSwgdmFsdWU6IHJhd1ZhbHVlfSlcblxuICAgIGlmIChub3JtYWxpemVkVmFsdWUgPT09IFNLSVBfUkFOU0FDS19DT05ESVRJT04pIGNvbnRpbnVlXG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gcmVzb2x2ZVJhbnNhY2tBdHRyaWJ1dGVzRnJvbUFkdmFuY2VkVmFsdWUoe21vZGVsQ2xhc3MsIHZhbHVlOiBlbnRyeS5hfSlcblxuICAgIGNvbmRpdGlvbnMucHVzaCh7XG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgY29tYmluYXRvcjogbm9ybWFsaXplUmFuc2Fja0NvbWJpbmF0b3IoZW50cnkubSwgYXR0cmlidXRlcy5sZW5ndGggPiAxID8gXCJvclwiIDogXCJhbmRcIiksXG4gICAgICBwcmVkaWNhdGUsXG4gICAgICB2YWx1ZTogbm9ybWFsaXplZFZhbHVlXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBjb25kaXRpb25zXG59XG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgYWR2YW5jZWQgcmFuc2FjayBncm91cHMuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge1JhbnNhY2tNb2RlbENsYXNzfSBhcmdzLm1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7P30gYXJncy52YWx1ZSAtIEFkdmFuY2VkIGdyb3VwcyBjb2xsZWN0aW9uLlxuICogQHJldHVybnMge1JhbnNhY2tHcm91cFtdfSAtIE5vcm1hbGl6ZWQgZ3JvdXBzLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVBZHZhbmNlZFJhbnNhY2tHcm91cHMoe21vZGVsQ2xhc3MsIHZhbHVlfSkge1xuICAvKipcbiAgICogR3JvdXBpbmdzLlxuICAgKiBAdHlwZSB7UmFuc2Fja0dyb3VwW119ICovXG4gIGNvbnN0IGdyb3VwaW5ncyA9IFtdXG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBub3JtYWxpemVSYW5zYWNrQ29sbGVjdGlvbih2YWx1ZSwgXCJncm91cGluZ3NcIikpIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJhbnNhY2sgZ3JvdXBpbmcgZW50cmllcyBtdXN0IGJlIHBsYWluIG9iamVjdHMsIGdvdDogJHt0eXBlb2YgZW50cnl9YClcbiAgICB9XG5cbiAgICBncm91cGluZ3MucHVzaChub3JtYWxpemVSYW5zYWNrR3JvdXAobW9kZWxDbGFzcywgZW50cnkpKVxuICB9XG5cbiAgcmV0dXJuIGdyb3VwaW5nc1xufVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIHJhbnNhY2sgY29tYmluYXRvci5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgY29tYmluYXRvci5cbiAqIEBwYXJhbSB7UmFuc2Fja0NvbWJpbmF0b3J9IGRlZmF1bHRWYWx1ZSAtIERlZmF1bHQgY29tYmluYXRvci5cbiAqIEByZXR1cm5zIHtSYW5zYWNrQ29tYmluYXRvcn0gLSBOb3JtYWxpemVkIGNvbWJpbmF0b3IuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJhbnNhY2tDb21iaW5hdG9yKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHJldHVybiBkZWZhdWx0VmFsdWVcbiAgaWYgKHZhbHVlID09PSBcImFuZFwiIHx8IHZhbHVlID09PSBcIm9yXCIpIHJldHVybiB2YWx1ZVxuXG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByYW5zYWNrIGNvbWJpbmF0b3I6ICR7U3RyaW5nKHZhbHVlKX1gKVxufVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIHJhbnNhY2sgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gQ29sbGVjdGlvbiBuYW1lIGZvciBlcnJvcnMuXG4gKiBAcmV0dXJucyB7QXJyYXk8Pz59IC0gQ29sbGVjdGlvbiB2YWx1ZXMgaW4gc3RhYmxlIG9yZGVyLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSYW5zYWNrQ29sbGVjdGlvbih2YWx1ZSwgbmFtZSkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikgcmV0dXJuIFtdXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlXG5cbiAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlKVxuICAgICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiB7XG4gICAgICAgIGNvbnN0IGxlZnROdW1iZXIgPSBOdW1iZXIobGVmdClcbiAgICAgICAgY29uc3QgcmlnaHROdW1iZXIgPSBOdW1iZXIocmlnaHQpXG5cbiAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShsZWZ0TnVtYmVyKSAmJiBOdW1iZXIuaXNGaW5pdGUocmlnaHROdW1iZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxlZnROdW1iZXIgLSByaWdodE51bWJlclxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxlZnQubG9jYWxlQ29tcGFyZShyaWdodClcbiAgICAgIH0pXG4gICAgICAubWFwKChrZXkpID0+IHZhbHVlW2tleV0pXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYFJhbnNhY2sgJHtuYW1lfSBtdXN0IGJlIGFuIGFycmF5IG9yIG9iamVjdCwgZ290OiAke3R5cGVvZiB2YWx1ZX1gKVxufVxuXG4vKipcbiAqIFJ1bnMgYWR2YW5jZWQgcmFuc2FjayBjb25kaXRpb24gdmFsdWUuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge1JhbnNhY2tQcmVkaWNhdGV9IGFyZ3MucHJlZGljYXRlIC0gUGFyc2VkIHByZWRpY2F0ZS5cbiAqIEBwYXJhbSB7P30gYXJncy52YWx1ZSAtIEFkdmFuY2VkIGNvbmRpdGlvbiB2YWx1ZS5cbiAqIEByZXR1cm5zIHs/fSAtIFZhbHVlIHBhc3NlZCB0byBwcmVkaWNhdGUgbm9ybWFsaXphdGlvbi5cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZWRSYW5zYWNrQ29uZGl0aW9uVmFsdWUoe3ByZWRpY2F0ZSwgdmFsdWV9KSB7XG4gIGlmIChwcmVkaWNhdGUgPT09IFwiaW5cIiB8fCBwcmVkaWNhdGUgPT09IFwibm90X2luXCIpIHJldHVybiB2YWx1ZVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5maW5kKChlbnRyeSkgPT4gZW50cnkgIT09IHVuZGVmaW5lZCAmJiBlbnRyeSAhPT0gbnVsbCAmJiBlbnRyeSAhPT0gXCJcIilcbiAgfVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIFJ1bnMgcmVzb2x2ZSByYW5zYWNrIGF0dHJpYnV0ZXMgZnJvbSBhZHZhbmNlZCB2YWx1ZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7UmFuc2Fja01vZGVsQ2xhc3N9IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHs/fSBhcmdzLnZhbHVlIC0gQWR2YW5jZWQgYXR0cmlidXRlIHZhbHVlLlxuICogQHJldHVybnMge1JhbnNhY2tBdHRyaWJ1dGVbXX0gLSBSZXNvbHZlZCBhdHRyaWJ1dGVzLlxuICovXG5mdW5jdGlvbiByZXNvbHZlUmFuc2Fja0F0dHJpYnV0ZXNGcm9tQWR2YW5jZWRWYWx1ZSh7bW9kZWxDbGFzcywgdmFsdWV9KSB7XG4gIGNvbnN0IHZhbHVlcyA9IG5vcm1hbGl6ZUFkdmFuY2VkQXR0cmlidXRlVmFsdWVzKHZhbHVlKVxuICAvKipcbiAgICogQXR0cmlidXRlcy5cbiAgICogQHR5cGUge1JhbnNhY2tBdHRyaWJ1dGVbXX0gKi9cbiAgY29uc3QgYXR0cmlidXRlcyA9IFtdXG5cbiAgZm9yIChjb25zdCBhdHRyaWJ1dGVWYWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICBhdHRyaWJ1dGVzLnB1c2goLi4ucmVzb2x2ZVJhbnNhY2tBdHRyaWJ1dGVzKHttb2RlbENsYXNzLCB2YWx1ZTogYXR0cmlidXRlVmFsdWV9KSlcbiAgfVxuXG4gIGlmIChhdHRyaWJ1dGVzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJSYW5zYWNrIGNvbmRpdGlvbiBtdXN0IGluY2x1ZGUgYXQgbGVhc3Qgb25lIGF0dHJpYnV0ZVwiKVxuICB9XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZXNcbn1cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSBhZHZhbmNlZCBhdHRyaWJ1dGUgdmFsdWVzLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIEFkdmFuY2VkIGF0dHJpYnV0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gLSBBdHRyaWJ1dGUgcGF0aCBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVBZHZhbmNlZEF0dHJpYnV0ZVZhbHVlcyh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSByZXR1cm4gW3ZhbHVlXVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoKGVudHJ5KSA9PiBub3JtYWxpemVBZHZhbmNlZEF0dHJpYnV0ZVZhbHVlKGVudHJ5KSlcbiAgfVxuXG4gIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBub3JtYWxpemVSYW5zYWNrQ29sbGVjdGlvbih2YWx1ZSwgXCJhdHRyaWJ1dGVzXCIpLm1hcCgoZW50cnkpID0+IG5vcm1hbGl6ZUFkdmFuY2VkQXR0cmlidXRlVmFsdWUoZW50cnkpKVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBSYW5zYWNrIGNvbmRpdGlvbiBhdHRyaWJ1dGVzIG11c3QgYmUgc3RyaW5ncywgYXJyYXlzLCBvciBvYmplY3RzLCBnb3Q6ICR7dHlwZW9mIHZhbHVlfWApXG59XG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgYWR2YW5jZWQgYXR0cmlidXRlIHZhbHVlLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIEFkdmFuY2VkIGF0dHJpYnV0ZSBlbnRyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gQXR0cmlidXRlIHBhdGggc3RyaW5nLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVBZHZhbmNlZEF0dHJpYnV0ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHJldHVybiB2YWx1ZVxuXG4gIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUubmFtZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB2YWx1ZS5uYW1lXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYFJhbnNhY2sgY29uZGl0aW9uIGF0dHJpYnV0ZSBlbnRyaWVzIG11c3QgYmUgc3RyaW5ncyBvciB7bmFtZX0sIGdvdDogJHt0eXBlb2YgdmFsdWV9YClcbn1cblxuLyoqXG4gKiBSdW5zIHJlc29sdmUgcmFuc2FjayBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICogQHBhcmFtIHtSYW5zYWNrTW9kZWxDbGFzc30gYXJncy5tb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy52YWx1ZSAtIEF0dHJpYnV0ZSBwYXRoIHZhbHVlLlxuICogQHJldHVybnMge1JhbnNhY2tBdHRyaWJ1dGVbXX0gLSBSZXNvbHZlZCBhdHRyaWJ1dGVzLlxuICovXG5mdW5jdGlvbiByZXNvbHZlUmFuc2Fja0F0dHJpYnV0ZXMoe21vZGVsQ2xhc3MsIHZhbHVlfSkge1xuICByZXR1cm4gdmFsdWUuc3BsaXQoXCJfb3JfXCIpLm1hcCgoYXR0cmlidXRlVmFsdWUpID0+IHtcbiAgICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlUmFuc2Fja1BhdGgoe21vZGVsQ2xhc3MsIHZhbHVlOiBhdHRyaWJ1dGVWYWx1ZX0pXG4gICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NBdFBhdGgoe21vZGVsQ2xhc3MsIHBhdGg6IHJlc29sdmVkUGF0aC5wYXRofSlcbiAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gcmVzb2x2ZUF0dHJpYnV0ZU5hbWUoe21vZGVsQ2xhc3M6IHRhcmdldE1vZGVsQ2xhc3MsIHZhbHVlOiByZXNvbHZlZFBhdGguYXR0cmlidXRlVmFsdWV9KVxuXG4gICAgaWYgKCFhdHRyaWJ1dGVOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcmFuc2FjayBhdHRyaWJ1dGUgXCIke3Jlc29sdmVkUGF0aC5hdHRyaWJ1dGVWYWx1ZX1cIiBmb3IgJHt0YXJnZXRNb2RlbENsYXNzLm5hbWV9YClcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRlTmFtZSxcbiAgICAgIHBhdGg6IHJlc29sdmVkUGF0aC5wYXRoXG4gICAgfVxuICB9KVxufVxuXG4vKipcbiAqIFJ1bnMgbW9kZWwgY2xhc3MgYXQgcGF0aC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7UmFuc2Fja01vZGVsQ2xhc3N9IGFyZ3MubW9kZWxDbGFzcyAtIFJvb3QgbW9kZWwgY2xhc3MuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzLnBhdGggLSBSZWxhdGlvbnNoaXAgcGF0aC5cbiAqIEByZXR1cm5zIHtSYW5zYWNrTW9kZWxDbGFzc30gLSBUYXJnZXQgbW9kZWwgY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIG1vZGVsQ2xhc3NBdFBhdGgoe21vZGVsQ2xhc3MsIHBhdGh9KSB7XG4gIGxldCBjdXJyZW50TW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NcblxuICBmb3IgKGNvbnN0IHJlbGF0aW9uc2hpcE5hbWUgb2YgcGF0aCkge1xuICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcEVudHJpZXMoY3VycmVudE1vZGVsQ2xhc3MpW3JlbGF0aW9uc2hpcE5hbWVdXG5cbiAgICBpZiAoIXJlbGF0aW9uc2hpcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJhbnNhY2sgcmVsYXRpb25zaGlwIFwiJHtyZWxhdGlvbnNoaXBOYW1lfVwiIGZvciAke2N1cnJlbnRNb2RlbENsYXNzLm5hbWV9YClcbiAgICB9XG5cbiAgICBjdXJyZW50TW9kZWxDbGFzcyA9IHJlbGF0aW9uc2hpcC50YXJnZXRNb2RlbENsYXNzXG4gIH1cblxuICByZXR1cm4gY3VycmVudE1vZGVsQ2xhc3Ncbn1cblxuLyoqXG4gKiBSdW5zIHJlc29sdmUgcmFuc2FjayBwYXRoLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICogQHBhcmFtIHtSYW5zYWNrTW9kZWxDbGFzc30gYXJncy5tb2RlbENsYXNzIC0gQ3VycmVudCBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnZhbHVlIC0gUmVtYWluaW5nIHBhdGggdmFsdWUuXG4gKiBAcmV0dXJucyB7e2F0dHJpYnV0ZVZhbHVlOiBzdHJpbmcsIHBhdGg6IHN0cmluZ1tdfX0gLSBSZXNvbHZlZCByZWxhdGlvbnNoaXAgcGF0aCBhbmQgcmVtYWluaW5nIGF0dHJpYnV0ZSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJhbnNhY2tQYXRoKHttb2RlbENsYXNzLCB2YWx1ZX0pIHtcbiAgLyoqXG4gICAqIFBhdGguXG4gICAqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgY29uc3QgcGF0aCA9IFtdXG4gIGxldCBjdXJyZW50TW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NcbiAgbGV0IHJlbWFpbmluZ1ZhbHVlID0gdmFsdWVcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChyZXNvbHZlQXR0cmlidXRlTmFtZSh7bW9kZWxDbGFzczogY3VycmVudE1vZGVsQ2xhc3MsIHZhbHVlOiByZW1haW5pbmdWYWx1ZX0pKSB7XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gZmluZFJlbGF0aW9uc2hpcFByZWZpeCh7XG4gICAgICBtb2RlbENsYXNzOiBjdXJyZW50TW9kZWxDbGFzcyxcbiAgICAgIHZhbHVlOiByZW1haW5pbmdWYWx1ZVxuICAgIH0pXG5cbiAgICBpZiAoIW1hdGNoKSBicmVha1xuXG4gICAgcGF0aC5wdXNoKG1hdGNoLnJlbGF0aW9uc2hpcE5hbWUpXG4gICAgY3VycmVudE1vZGVsQ2xhc3MgPSBtYXRjaC50YXJnZXRNb2RlbENsYXNzXG4gICAgcmVtYWluaW5nVmFsdWUgPSBtYXRjaC5yZW1haW5pbmdWYWx1ZVxuICB9XG5cbiAgaWYgKHJlbWFpbmluZ1ZhbHVlLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmFuc2FjayBrZXkgcGF0aDogJHt2YWx1ZX1gKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhdHRyaWJ1dGVWYWx1ZTogcmVtYWluaW5nVmFsdWUsXG4gICAgcGF0aFxuICB9XG59XG5cbi8qKlxuICogUnVucyBmaW5kIHJlbGF0aW9uc2hpcCBwcmVmaXguXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge1JhbnNhY2tNb2RlbENsYXNzfSBhcmdzLm1vZGVsQ2xhc3MgLSBDdXJyZW50IG1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudmFsdWUgLSBSZW1haW5pbmcgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7e3JlbGF0aW9uc2hpcE5hbWU6IHN0cmluZywgcmVtYWluaW5nVmFsdWU6IHN0cmluZywgdGFyZ2V0TW9kZWxDbGFzczogUmFuc2Fja01vZGVsQ2xhc3N9IHwgbnVsbH0gLSBNYXRjaGluZyByZWxhdGlvbnNoaXAgcHJlZml4LlxuICovXG5mdW5jdGlvbiBmaW5kUmVsYXRpb25zaGlwUHJlZml4KHttb2RlbENsYXNzLCB2YWx1ZX0pIHtcbiAgbGV0IGJlc3RNYXRjaCA9IG51bGxcblxuICBmb3IgKGNvbnN0IHJlbGF0aW9uc2hpcE5hbWUgb2YgT2JqZWN0LmtleXMocmVsYXRpb25zaGlwRW50cmllcyhtb2RlbENsYXNzKSkpIHtcbiAgICBjb25zdCByZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXBFbnRyaWVzKG1vZGVsQ2xhc3MpW3JlbGF0aW9uc2hpcE5hbWVdXG5cbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiByZWxhdGlvbnNoaXBDYW5kaWRhdGVzKHJlbGF0aW9uc2hpcE5hbWUpKSB7XG4gICAgICBjb25zdCByZW1haW5pbmdWYWx1ZSA9IHN0cmlwUmVsYXRpb25zaGlwQ2FuZGlkYXRlKHZhbHVlLCBjYW5kaWRhdGUpXG5cbiAgICAgIGlmIChyZW1haW5pbmdWYWx1ZSA9PT0gbnVsbCkgY29udGludWVcbiAgICAgIGlmIChyZW1haW5pbmdWYWx1ZS5sZW5ndGggPCAxKSBjb250aW51ZVxuICAgICAgaWYgKGJlc3RNYXRjaCAmJiBjYW5kaWRhdGUubGVuZ3RoIDw9IGJlc3RNYXRjaC5jYW5kaWRhdGVMZW5ndGgpIGNvbnRpbnVlXG5cbiAgICAgIGJlc3RNYXRjaCA9IHtcbiAgICAgICAgY2FuZGlkYXRlTGVuZ3RoOiBjYW5kaWRhdGUubGVuZ3RoLFxuICAgICAgICByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICByZW1haW5pbmdWYWx1ZSxcbiAgICAgICAgdGFyZ2V0TW9kZWxDbGFzczogcmVsYXRpb25zaGlwLnRhcmdldE1vZGVsQ2xhc3NcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWJlc3RNYXRjaCkgcmV0dXJuIG51bGxcblxuICByZXR1cm4ge1xuICAgIHJlbGF0aW9uc2hpcE5hbWU6IGJlc3RNYXRjaC5yZWxhdGlvbnNoaXBOYW1lLFxuICAgIHJlbWFpbmluZ1ZhbHVlOiBiZXN0TWF0Y2gucmVtYWluaW5nVmFsdWUsXG4gICAgdGFyZ2V0TW9kZWxDbGFzczogYmVzdE1hdGNoLnRhcmdldE1vZGVsQ2xhc3NcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBvcnRpb24gb2YgYHZhbHVlYCBhZnRlciBgY2FuZGlkYXRlYCB3aGVuIGBjYW5kaWRhdGVgXG4gKiBzaXRzIGF0IGEgcmVsYXRpb25zaGlwLXBhdGggYm91bmRhcnksIG9yIG51bGwgd2hlbiB0aGVyZSdzIG5vXG4gKiBib3VuZGFyeSBtYXRjaC4gVHdvIGJvdW5kYXJ5IGZvcm1zIGFyZSBhY2NlcHRlZDpcbiAqIC0gc25ha2U6IGA8Y2FuZGlkYXRlPl9gIGZvbGxvd2VkIGJ5IHRoZSByZXN0IG9mIHRoZSBwYXRoIChlLmcuXG4gKiAgIGB0YXNrX3Byb2plY3RfaWRgIGFnYWluc3QgY2FuZGlkYXRlIGB0YXNrYCByZXR1cm5zIGBwcm9qZWN0X2lkYCkuXG4gKiAtIGNhbWVsOiBgPGNhbmRpZGF0ZT5gIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGFuIHVwcGVyY2FzZSBsZXR0ZXIsXG4gKiAgIHdoaWNoIG1hcmtzIGEgbmV3IHdvcmQgaW4gY2FtZWxDYXNlIChlLmcuIGB0YXNrUHJvamVjdElkYCBhZ2FpbnN0XG4gKiAgIGNhbmRpZGF0ZSBgdGFza2AgcmV0dXJucyBgcHJvamVjdElkYCB3aXRoIHRoZSBsZWFkaW5nIGBQYFxuICogICBsb3dlcmNhc2VkIHNvIHRoZSByZW1haW5kZXIgc3RheXMgaW4gY2FsbGVyLWZvcm0gZm9yIHRoZSBuZXh0XG4gKiAgIGF0dHJpYnV0ZSAvIHJlbGF0aW9uc2hpcCBtYXRjaCkuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBSZW1haW5pbmcgcmFuc2FjayBwYXRoLlxuICogQHBhcmFtIHtzdHJpbmd9IGNhbmRpZGF0ZSAtIFJlbGF0aW9uc2hpcCBuYW1lIGNhbmRpZGF0ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfSAtIFJlbWFpbmRlciBhZnRlciB0aGUgY2FuZGlkYXRlLCBvciBudWxsLlxuICovXG5mdW5jdGlvbiBzdHJpcFJlbGF0aW9uc2hpcENhbmRpZGF0ZSh2YWx1ZSwgY2FuZGlkYXRlKSB7XG4gIGlmICh2YWx1ZS5zdGFydHNXaXRoKGAke2NhbmRpZGF0ZX1fYCkpIHtcbiAgICByZXR1cm4gdmFsdWUuc2xpY2UoY2FuZGlkYXRlLmxlbmd0aCArIDEpXG4gIH1cblxuICBpZiAodmFsdWUubGVuZ3RoIDw9IGNhbmRpZGF0ZS5sZW5ndGgpIHJldHVybiBudWxsXG4gIGlmICghdmFsdWUuc3RhcnRzV2l0aChjYW5kaWRhdGUpKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IG5leHRDaGFyID0gdmFsdWUuY2hhckF0KGNhbmRpZGF0ZS5sZW5ndGgpXG5cbiAgaWYgKG5leHRDaGFyIDwgXCJBXCIgfHwgbmV4dENoYXIgPiBcIlpcIikgcmV0dXJuIG51bGxcblxuICByZXR1cm4gbmV4dENoYXIudG9Mb3dlckNhc2UoKSArIHZhbHVlLnNsaWNlKGNhbmRpZGF0ZS5sZW5ndGggKyAxKVxufVxuXG4vKipcbiAqIFJ1bnMgcmVsYXRpb25zaGlwIGNhbmRpZGF0ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25zaGlwTmFtZSAtIFJlbGF0aW9uc2hpcCBuYW1lLlxuICogQHJldHVybnMge3N0cmluZ1tdfSAtIENhbmRpZGF0ZSB0b2tlbnMgZm9yIG1hdGNoaW5nLlxuICovXG5mdW5jdGlvbiByZWxhdGlvbnNoaXBDYW5kaWRhdGVzKHJlbGF0aW9uc2hpcE5hbWUpIHtcbiAgcmV0dXJuIHVuaXF1bml6ZShbcmVsYXRpb25zaGlwTmFtZSwgaW5mbGVjdGlvbi51bmRlcnNjb3JlKHJlbGF0aW9uc2hpcE5hbWUpXSlcbn1cblxuLyoqXG4gKiBSdW5zIHJlc29sdmUgYXR0cmlidXRlIG5hbWUuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge1JhbnNhY2tNb2RlbENsYXNzfSBhcmdzLm1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnZhbHVlIC0gQXR0cmlidXRlIGNhbmRpZGF0ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gUmVzb2x2ZWQgYXR0cmlidXRlIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBdHRyaWJ1dGVOYW1lKHttb2RlbENsYXNzLCB2YWx1ZX0pIHtcbiAgZm9yIChjb25zdCBbYXR0cmlidXRlTmFtZSwgY29sdW1uTmFtZV0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlRW50cmllcyhtb2RlbENsYXNzKSkpIHtcbiAgICBpZiAobWF0Y2hlc0F0dHJpYnV0ZVZhbHVlKHthdHRyaWJ1dGVOYW1lLCBjb2x1bW5OYW1lLCB2YWx1ZX0pKSB7XG4gICAgICByZXR1cm4gYXR0cmlidXRlTmFtZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBSdW5zIHJlbGF0aW9uc2hpcCBlbnRyaWVzLlxuICogQHBhcmFtIHtSYW5zYWNrTW9kZWxDbGFzc30gbW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHt0YXJnZXRNb2RlbENsYXNzOiBSYW5zYWNrTW9kZWxDbGFzc30+fSAtIFJlbGF0aW9uc2hpcCBlbnRyaWVzIGtleWVkIGJ5IG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aW9uc2hpcEVudHJpZXMobW9kZWxDbGFzcykge1xuICBpZiAodHlwZW9mIC8qKlxuICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgKiBAdHlwZSB7P30gKi8gKG1vZGVsQ2xhc3MpLmdldFJlbGF0aW9uc2hpcHNNYXAgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBiYWNrZW5kUmVsYXRpb25zaGlwRW50cmllcyhtb2RlbENsYXNzKVxuICB9XG5cbiAgaWYgKHR5cGVvZiAvKipcbiAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICogQHR5cGUgez99ICovIChtb2RlbENsYXNzKS5yZWxhdGlvbnNoaXBEZWZpbml0aW9ucyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIC8qKlxuICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAqIEB0eXBlIHs/fSAqLyAobW9kZWxDbGFzcykucmVsYXRpb25zaGlwTW9kZWxDbGFzc2VzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gZnJvbnRlbmRSZWxhdGlvbnNoaXBFbnRyaWVzKG1vZGVsQ2xhc3MpXG4gIH1cblxuICByZXR1cm4ge31cbn1cblxuLyoqXG4gKiBSdW5zIGJhY2tlbmQgcmVsYXRpb25zaGlwIGVudHJpZXMuXG4gKiBAcGFyYW0ge1JhbnNhY2tNb2RlbENsYXNzfSBtb2RlbENsYXNzIC0gQmFja2VuZCBtb2RlbCBjbGFzcy5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCB7dGFyZ2V0TW9kZWxDbGFzczogUmFuc2Fja01vZGVsQ2xhc3N9Pn0gLSBSZWxhdGlvbnNoaXAgZW50cmllcyBrZXllZCBieSBuYW1lLlxuICovXG5mdW5jdGlvbiBiYWNrZW5kUmVsYXRpb25zaGlwRW50cmllcyhtb2RlbENsYXNzKSB7XG4gIC8qKlxuICAgKiBFbnRyaWVzLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywge3RhcmdldE1vZGVsQ2xhc3M6IFJhbnNhY2tNb2RlbENsYXNzfT59ICovXG4gIGNvbnN0IGVudHJpZXMgPSB7fVxuICBjb25zdCByZWxhdGlvbnNoaXBzTWFwID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7P30gKi8gKG1vZGVsQ2xhc3MpLmdldFJlbGF0aW9uc2hpcHNNYXAoKVxuXG4gIGZvciAoY29uc3QgcmVsYXRpb25zaGlwTmFtZSBvZiBPYmplY3Qua2V5cyhyZWxhdGlvbnNoaXBzTWFwKSkge1xuICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcHNNYXBbcmVsYXRpb25zaGlwTmFtZV1cblxuICAgIGlmICh0eXBlb2YgcmVsYXRpb25zaGlwLmlzUG9seW1vcnBoaWMgPT09IFwiZnVuY3Rpb25cIiAmJiByZWxhdGlvbnNoaXAuaXNQb2x5bW9ycGhpYygpKSBjb250aW51ZVxuXG4gICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgIGlmICghdGFyZ2V0TW9kZWxDbGFzcykgY29udGludWVcblxuICAgIGVudHJpZXNbcmVsYXRpb25zaGlwTmFtZV0gPSB7dGFyZ2V0TW9kZWxDbGFzc31cbiAgfVxuXG4gIHJldHVybiBlbnRyaWVzXG59XG5cbi8qKlxuICogUnVucyBmcm9udGVuZCByZWxhdGlvbnNoaXAgZW50cmllcy5cbiAqIEBwYXJhbSB7UmFuc2Fja01vZGVsQ2xhc3N9IG1vZGVsQ2xhc3MgLSBGcm9udGVuZCBtb2RlbCBjbGFzcy5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCB7dGFyZ2V0TW9kZWxDbGFzczogUmFuc2Fja01vZGVsQ2xhc3N9Pn0gLSBSZWxhdGlvbnNoaXAgZW50cmllcyBrZXllZCBieSBuYW1lLlxuICovXG5mdW5jdGlvbiBmcm9udGVuZFJlbGF0aW9uc2hpcEVudHJpZXMobW9kZWxDbGFzcykge1xuICAvKipcbiAgICogRW50cmllcy5cbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIHt0YXJnZXRNb2RlbENsYXNzOiBSYW5zYWNrTW9kZWxDbGFzc30+fSAqL1xuICBjb25zdCBlbnRyaWVzID0ge31cbiAgY29uc3QgZGVmaW5pdGlvbnMgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUgez99ICovIChtb2RlbENsYXNzKS5yZWxhdGlvbnNoaXBEZWZpbml0aW9ucygpXG4gIGNvbnN0IHJlbGF0aW9uc2hpcE1vZGVsQ2xhc3NlcyA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0eXBlIHs/fSAqLyAobW9kZWxDbGFzcykucmVsYXRpb25zaGlwTW9kZWxDbGFzc2VzKClcblxuICBmb3IgKGNvbnN0IHJlbGF0aW9uc2hpcE5hbWUgb2YgT2JqZWN0LmtleXMoZGVmaW5pdGlvbnMpKSB7XG4gICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHJlc29sdmVGcm9udGVuZE1vZGVsQ2xhc3MocmVsYXRpb25zaGlwTW9kZWxDbGFzc2VzW3JlbGF0aW9uc2hpcE5hbWVdKVxuXG4gICAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSBjb250aW51ZVxuXG4gICAgZW50cmllc1tyZWxhdGlvbnNoaXBOYW1lXSA9IHt0YXJnZXRNb2RlbENsYXNzfVxuICB9XG5cbiAgcmV0dXJuIGVudHJpZXNcbn1cblxuLyoqXG4gKiBSdW5zIGF0dHJpYnV0ZSBlbnRyaWVzLlxuICogQHBhcmFtIHtSYW5zYWNrTW9kZWxDbGFzc30gbW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gQXR0cmlidXRlLXRvLWNvbHVtbiBlbnRyaWVzIGtleWVkIGJ5IGF0dHJpYnV0ZSBuYW1lLlxuICovXG5mdW5jdGlvbiBhdHRyaWJ1dGVFbnRyaWVzKG1vZGVsQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiAvKipcbiAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICogQHR5cGUgez99ICovIChtb2RlbENsYXNzKS5nZXRBdHRyaWJ1dGVOYW1lVG9Db2x1bW5OYW1lTWFwID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqLyAoKC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUgez99ICovIChtb2RlbENsYXNzKS5nZXRBdHRyaWJ1dGVOYW1lVG9Db2x1bW5OYW1lTWFwKCkpKVxuICB9XG5cbiAgY29uc3QgcmVzb3VyY2VDb25maWcgPSB0eXBlb2YgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUgez99ICovIChtb2RlbENsYXNzKS5yZXNvdXJjZUNvbmZpZyA9PT0gXCJmdW5jdGlvblwiXG4gICAgPyAvKipcbiAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAqIEB0eXBlIHs/fSAqLyAobW9kZWxDbGFzcykucmVzb3VyY2VDb25maWcoKVxuICAgIDoge31cbiAgY29uc3QgYXR0cmlidXRlcyA9IHJlc291cmNlQ29uZmlnLmF0dHJpYnV0ZXNcbiAgLyoqXG4gICAqIEVudHJpZXMuXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBlbnRyaWVzID0ge31cblxuICBpZiAoQXJyYXkuaXNBcnJheShhdHRyaWJ1dGVzKSkge1xuICAgIGZvciAoY29uc3QgYXR0cmlidXRlTmFtZSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZU5hbWUgIT09IFwic3RyaW5nXCIpIGNvbnRpbnVlXG5cbiAgICAgIGVudHJpZXNbYXR0cmlidXRlTmFtZV0gPSBhdHRyaWJ1dGVOYW1lXG4gICAgfVxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoYXR0cmlidXRlcykpIHtcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZU5hbWUgb2YgT2JqZWN0LmtleXMoYXR0cmlidXRlcykpIHtcbiAgICAgIGVudHJpZXNbYXR0cmlidXRlTmFtZV0gPSBhdHRyaWJ1dGVOYW1lXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVudHJpZXNcbn1cblxuLyoqXG4gKiBSdW5zIG1hdGNoZXMgYXR0cmlidXRlIHZhbHVlLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuYXR0cmlidXRlTmFtZSAtIEF0dHJpYnV0ZSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY29sdW1uTmFtZSAtIENvbHVtbiBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudmFsdWUgLSBDYW5kaWRhdGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSBjYW5kaWRhdGUgcmVzb2x2ZXMgdG8gdGhlIGF0dHJpYnV0ZS5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc0F0dHJpYnV0ZVZhbHVlKHthdHRyaWJ1dGVOYW1lLCBjb2x1bW5OYW1lLCB2YWx1ZX0pIHtcbiAgcmV0dXJuIHVuaXF1bml6ZShbXG4gICAgYXR0cmlidXRlTmFtZSxcbiAgICBjb2x1bW5OYW1lLFxuICAgIGluZmxlY3Rpb24udW5kZXJzY29yZShhdHRyaWJ1dGVOYW1lKSxcbiAgICBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoY29sdW1uTmFtZSlcbiAgXSkuaW5jbHVkZXModmFsdWUpXG59XG5cbi8qKlxuICogUnVucyBwYXJzZSByYW5zYWNrIGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBSYW5zYWNrIGtleS5cbiAqIEByZXR1cm5zIHt7cGF0aFZhbHVlOiBzdHJpbmcsIHByZWRpY2F0ZTogUmFuc2Fja1ByZWRpY2F0ZX0gfCBudWxsfSAtIFBhcnNlZCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUmFuc2Fja0tleShrZXkpIHtcbiAgZm9yIChjb25zdCBwcmVkaWNhdGUgb2Ygc3VwcG9ydGVkUHJlZGljYXRlcykge1xuICAgIGNvbnN0IHN1ZmZpeCA9IGBfJHtwcmVkaWNhdGV9YFxuICAgIGlmICgha2V5LmVuZHNXaXRoKHN1ZmZpeCkpIGNvbnRpbnVlXG5cbiAgICBjb25zdCBwYXRoVmFsdWUgPSBrZXkuc2xpY2UoMCwga2V5Lmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpXG5cbiAgICBpZiAocGF0aFZhbHVlLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByYW5zYWNrIGtleTogJHtrZXl9YClcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aFZhbHVlLFxuICAgICAgcHJlZGljYXRlOiAvKipcbiAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7UmFuc2Fja1ByZWRpY2F0ZX0gKi8gKHByZWRpY2F0ZSlcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHByZWRpY2F0ZSBvZiBzdXBwb3J0ZWRQcmVkaWNhdGVzKSB7XG4gICAgY29uc3QgY2FtZWxTdWZmaXggPSBzbmFrZVRvQ2FtZWxTdWZmaXgocHJlZGljYXRlKVxuXG4gICAgaWYgKCFrZXkuZW5kc1dpdGgoY2FtZWxTdWZmaXgpKSBjb250aW51ZVxuXG4gICAgY29uc3QgcGF0aFZhbHVlID0ga2V5LnNsaWNlKDAsIGtleS5sZW5ndGggLSBjYW1lbFN1ZmZpeC5sZW5ndGgpXG5cbiAgICBpZiAocGF0aFZhbHVlLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByYW5zYWNrIGtleTogJHtrZXl9YClcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aFZhbHVlLFxuICAgICAgcHJlZGljYXRlOiAvKipcbiAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7UmFuc2Fja1ByZWRpY2F0ZX0gKi8gKHByZWRpY2F0ZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG4vKipcbiAqIFJ1bnMgc25ha2UgdG8gY2FtZWwgc3VmZml4LlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gU25ha2UtY2FzZSBwcmVkaWNhdGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIENhbWVsQ2FzZSBwcmVkaWNhdGUgc3VmZml4IHVzZWQgaW4gcmFuc2FjayBrZXlzLlxuICovXG5mdW5jdGlvbiBzbmFrZVRvQ2FtZWxTdWZmaXgodmFsdWUpIHtcbiAgY29uc3Qgc2VnbWVudHMgPSB2YWx1ZS5zcGxpdChcIl9cIilcblxuICByZXR1cm4gc2VnbWVudHMubWFwKChzZWdtZW50KSA9PiBzZWdtZW50LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc2VnbWVudC5zbGljZSgxKSkuam9pbihcIlwiKVxufVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIHJhbnNhY2sgdmFsdWUuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge1JhbnNhY2tQcmVkaWNhdGV9IGFyZ3MucHJlZGljYXRlIC0gUGFyc2VkIHByZWRpY2F0ZS5cbiAqIEBwYXJhbSB7P30gYXJncy52YWx1ZSAtIFJhdyB2YWx1ZS5cbiAqIEByZXR1cm5zIHs/fSAtIE5vcm1hbGl6ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJhbnNhY2tWYWx1ZSh7cHJlZGljYXRlLCB2YWx1ZX0pIHtcbiAgaWYgKHByZWRpY2F0ZSA9PT0gXCJudWxsXCIpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplUmFuc2Fja051bGxWYWx1ZSh2YWx1ZSlcbiAgfVxuXG4gIGlmIChwcmVkaWNhdGUgPT09IFwiaW5cIiB8fCBwcmVkaWNhdGUgPT09IFwibm90X2luXCIpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplUmFuc2Fja0xpc3RWYWx1ZSh2YWx1ZSlcbiAgfVxuXG4gIGlmIChyYW5zYWNrVmFsdWVJc0JsYW5rKHZhbHVlKSkgcmV0dXJuIFNLSVBfUkFOU0FDS19DT05ESVRJT05cblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSByYW5zYWNrIG51bGwgdmFsdWUuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gQ2FuZGlkYXRlIG51bGwgcHJlZGljYXRlIHZhbHVlLlxuICogQHJldHVybnMge2Jvb2xlYW4gfCB0eXBlb2YgU0tJUF9SQU5TQUNLX0NPTkRJVElPTn0gLSBOb3JtYWxpemVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSYW5zYWNrTnVsbFZhbHVlKHZhbHVlKSB7XG4gIGNvbnN0IGJvb2xlYW5WYWx1ZSA9IG5vcm1hbGl6ZVJhbnNhY2tCb29sZWFuKHZhbHVlKVxuXG4gIHJldHVybiBib29sZWFuVmFsdWUgPT09IG51bGwgPyBTS0lQX1JBTlNBQ0tfQ09ORElUSU9OIDogYm9vbGVhblZhbHVlXG59XG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgcmFuc2FjayBsaXN0IHZhbHVlLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIENhbmRpZGF0ZSBsaXN0IHByZWRpY2F0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheTw/PiB8IHR5cGVvZiBTS0lQX1JBTlNBQ0tfQ09ORElUSU9OfSAtIE5vcm1hbGl6ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJhbnNhY2tMaXN0VmFsdWUodmFsdWUpIHtcbiAgY29uc3Qgbm9ybWFsaXplZEFycmF5ID0gbm9ybWFsaXplUmFuc2Fja0FycmF5KHZhbHVlKVxuXG4gIHJldHVybiBub3JtYWxpemVkQXJyYXkubGVuZ3RoIDwgMSA/IFNLSVBfUkFOU0FDS19DT05ESVRJT04gOiBub3JtYWxpemVkQXJyYXlcbn1cblxuLyoqXG4gKiBSYW5zYWNrIHRydWUgdmFsdWVzLlxuICogQHR5cGUge1NldDw/Pn0gKi9cbmNvbnN0IHJhbnNhY2tUcnVlVmFsdWVzID0gbmV3IFNldChbdHJ1ZSwgMSwgXCIxXCIsIFwidHJ1ZVwiXSlcbi8qKlxuICogUmFuc2FjayBmYWxzZSB2YWx1ZXMuXG4gKiBAdHlwZSB7U2V0PD8+fSAqL1xuY29uc3QgcmFuc2Fja0ZhbHNlVmFsdWVzID0gbmV3IFNldChbZmFsc2UsIDAsIFwiMFwiLCBcImZhbHNlXCJdKVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIHJhbnNhY2sgYm9vbGVhbi5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgYm9vbGVhbi5cbiAqIEByZXR1cm5zIHtib29sZWFuIHwgbnVsbH0gLSBOb3JtYWxpemVkIGJvb2xlYW4gb3IgbnVsbCB3aGVuIGJsYW5rLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSYW5zYWNrQm9vbGVhbih2YWx1ZSkge1xuICBpZiAocmFuc2Fja1RydWVWYWx1ZXMuaGFzKHZhbHVlKSkgcmV0dXJuIHRydWVcbiAgaWYgKHJhbnNhY2tGYWxzZVZhbHVlcy5oYXModmFsdWUpKSByZXR1cm4gZmFsc2VcbiAgaWYgKHJhbnNhY2tWYWx1ZUlzQmxhbmsodmFsdWUpKSByZXR1cm4gbnVsbFxuXG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByYW5zYWNrIGJvb2xlYW4gdmFsdWU6ICR7U3RyaW5nKHZhbHVlKX1gKVxufVxuXG4vKipcbiAqIFJ1bnMgcmFuc2FjayB2YWx1ZSBpcyBibGFuay5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHZhbHVlIHNob3VsZCBiZSBpZ25vcmVkIGFzIGJsYW5rLlxuICovXG5mdW5jdGlvbiByYW5zYWNrVmFsdWVJc0JsYW5rKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSBcIlwiXG59XG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgcmFuc2FjayBhcnJheS5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgYXJyYXktaXNoIHZhbHVlLlxuICogQHJldHVybnMge0FycmF5PD8+fSAtIE5vcm1hbGl6ZWQgYXJyYXkgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSYW5zYWNrQXJyYXkodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmZpbHRlcigoZW50cnkpID0+IGVudHJ5ICE9PSB1bmRlZmluZWQgJiYgZW50cnkgIT09IG51bGwgJiYgZW50cnkgIT09IFwiXCIpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KFwiLFwiKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS50cmltKCkpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lmxlbmd0aCA+IDApXG4gIH1cblxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikgcmV0dXJuIFtdXG5cbiAgcmV0dXJuIFt2YWx1ZV1cbn1cblxuLyoqXG4gKiBSYW5zYWNrU29ydCB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gUmFuc2Fja1NvcnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhdHRyaWJ1dGUgLSBSZXNvbHZlZCBhdHRyaWJ1dGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7XCJhc2NcIiB8IFwiZGVzY1wifSBkaXJlY3Rpb24gLSBTb3J0IGRpcmVjdGlvbi5cbiAqL1xuXG4vKipcbiAqIFBhcnNlcyBhbmQgdmFsaWRhdGVzIGEgcmFuc2FjayBgc2Agc29ydCBzdHJpbmcgYWdhaW5zdCBtb2RlbCBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtSYW5zYWNrTW9kZWxDbGFzc30gbW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzIGZvciBhdHRyaWJ1dGUgdmFsaWRhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3J0U3RyaW5nIC0gUmFuc2FjayBzb3J0IHN0cmluZyAoZS5nLiwgXCJuYW1lIGFzY1wiIG9yIFwibmFtZSBhc2MsIGNyZWF0ZWRBdCBkZXNjXCIpLlxuICogQHJldHVybnMge1JhbnNhY2tTb3J0W119IC0gVmFsaWRhdGVkIHNvcnQgZGVmaW5pdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJhbnNhY2tTb3J0KG1vZGVsQ2xhc3MsIHNvcnRTdHJpbmcpIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBzb3J0U3RyaW5nLnNwbGl0KFwiLFwiKS5tYXAoKHNlZ21lbnQpID0+IHNlZ21lbnQudHJpbSgpKS5maWx0ZXIoKHNlZ21lbnQpID0+IHNlZ21lbnQubGVuZ3RoID4gMClcblxuICAvKipcbiAgICogU29ydHMuXG4gICAqIEB0eXBlIHtSYW5zYWNrU29ydFtdfSAqL1xuICBjb25zdCBzb3J0cyA9IFtdXG5cbiAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgY29uc3QgcGFydHMgPSBzZWdtZW50LnNwbGl0KC9cXHMrLylcbiAgICBjb25zdCBjb2x1bW5DYW5kaWRhdGUgPSBwYXJ0c1swXVxuICAgIGNvbnN0IGRpcmVjdGlvbkNhbmRpZGF0ZSA9IHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJ0c1sxXS50b0xvd2VyQ2FzZSgpIDogXCJhc2NcIlxuXG4gICAgaWYgKGRpcmVjdGlvbkNhbmRpZGF0ZSAhPT0gXCJhc2NcIiAmJiBkaXJlY3Rpb25DYW5kaWRhdGUgIT09IFwiZGVzY1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmFuc2FjayBzb3J0IGRpcmVjdGlvbiBcIiR7ZGlyZWN0aW9uQ2FuZGlkYXRlfVwiIGluOiAke3NlZ21lbnR9YClcbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZEF0dHJpYnV0ZSA9IHJlc29sdmVBdHRyaWJ1dGVOYW1lKHttb2RlbENsYXNzLCB2YWx1ZTogY29sdW1uQ2FuZGlkYXRlfSlcblxuICAgIGlmICghcmVzb2x2ZWRBdHRyaWJ1dGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByYW5zYWNrIHNvcnQgYXR0cmlidXRlIFwiJHtjb2x1bW5DYW5kaWRhdGV9XCIgZm9yICR7bW9kZWxDbGFzcy5uYW1lfWApXG4gICAgfVxuXG4gICAgc29ydHMucHVzaCh7YXR0cmlidXRlOiByZXNvbHZlZEF0dHJpYnV0ZSwgZGlyZWN0aW9uOiBkaXJlY3Rpb25DYW5kaWRhdGV9KVxuICB9XG5cbiAgcmV0dXJuIHNvcnRzXG59XG5cbi8qKlxuICogUnVucyB1bmlxdW5pemUuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSB2YWx1ZXMgLSBJbnB1dCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IC0gVW5pcXVlIHZhbHVlcyBpbiBvcmlnaW5hbCBvcmRlci5cbiAqL1xuZnVuY3Rpb24gdW5pcXVuaXplKHZhbHVlcykge1xuICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KHZhbHVlcykpXG59XG4iXX0=
|
|
717
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuc2Fjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9yYW5zYWNrLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFDN0MsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sc0NBQXNDLENBQUE7QUFFOUU7OztHQUdHO0FBRUg7OztHQUdHO0FBRUg7OztHQUdHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7OztHQU9HO0FBRUg7Ozs7OztHQU1HO0FBRUgsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixRQUFRO0lBQ1IsUUFBUTtJQUNSLE1BQU07SUFDTixNQUFNO0lBQ04sT0FBTztJQUNQLE1BQU07SUFDTixNQUFNO0lBQ04sS0FBSztJQUNMLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7Q0FDTCxDQUFBO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsVUFBVSxFQUFFLE1BQU07SUFDdkQsT0FBTyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUFBO0FBQzdELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsTUFBTTtJQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsT0FBTyxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBQ2pGLENBQUM7SUFFRDs7OEJBRTBCO0lBQzFCLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLFVBQVUsRUFBRSwwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUN2RCxVQUFVLEVBQUUsRUFBRTtRQUNkLFNB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QUFDLG1DQUFtQyxrQkFBa0IsU0FBUyxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQzFGLENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLG9CQUFvQixDQUFDLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUMsQ0FBQyxDQUFBO1FBRXBGLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLGVBQWUsU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUMvRixDQUFDO1FBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUMsQ0FBQyxDQUFBO0lBQzNFLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxTQUFTLENBQUMsTUFBTTtJQUN2QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IHtpc1BsYWluT2JqZWN0fSBmcm9tIFwiaXMtcGxhaW4tb2JqZWN0XCJcbmltcG9ydCB7cmVzb2x2ZUZyb250ZW5kTW9kZWxDbGFzc30gZnJvbSBcIi4uL2Zyb250ZW5kLW1vZGVscy9tb2RlbC1yZWdpc3RyeS5qc1wiXG5cbi8qKlxuICogUmFuc2Fja1ByZWRpY2F0ZSB0eXBlLlxuICogQHR5cGVkZWYge1wiY29udFwiIHwgXCJlbmRcIiB8IFwiZXFcIiB8IFwiZ3RcIiB8IFwiZ3RlcVwiIHwgXCJpblwiIHwgXCJsdFwiIHwgXCJsdGVxXCIgfCBcIm5vdF9lcVwiIHwgXCJub3RfaW5cIiB8IFwibnVsbFwiIHwgXCJzdGFydFwifSBSYW5zYWNrUHJlZGljYXRlXG4gKi9cblxuLyoqXG4gKiBSYW5zYWNrQ29tYmluYXRvciB0eXBlLlxuICogQHR5cGVkZWYge1wiYW5kXCIgfCBcIm9yXCJ9IFJhbnNhY2tDb21iaW5hdG9yXG4gKi9cblxuLyoqXG4gKiBSYW5zYWNrTW9kZWxDbGFzcyB0eXBlLlxuICogQHR5cGVkZWYge3R5cGVvZiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9iYXNlLmpzXCIpLkZyb250ZW5kTW9kZWxDbGFzc30gUmFuc2Fja01vZGVsQ2xhc3NcbiAqL1xuXG4vKipcbiAqIFJhbnNhY2tBdHRyaWJ1dGUgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJhbnNhY2tBdHRyaWJ1dGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gUmVzb2x2ZWQgYXR0cmlidXRlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBwYXRoIC0gUmVzb2x2ZWQgcmVsYXRpb25zaGlwIHBhdGguXG4gKi9cblxuLyoqXG4gKiBSYW5zYWNrQ29uZGl0aW9uIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSYW5zYWNrQ29uZGl0aW9uXG4gKiBAcHJvcGVydHkge1JhbnNhY2tBdHRyaWJ1dGVbXX0gYXR0cmlidXRlcyAtIFJlc29sdmVkIGF0dHJpYnV0ZXMgdG8gdGVzdC5cbiAqIEBwcm9wZXJ0eSB7UmFuc2Fja0NvbWJpbmF0b3J9IGNvbWJpbmF0b3IgLSBIb3cgbXVsdGlwbGUgYXR0cmlidXRlcyBhcmUgY29tYmluZWQuXG4gKiBAcHJvcGVydHkge1JhbnNhY2tQcmVkaWNhdGV9IHByZWRpY2F0ZSAtIFBhcnNlZCBSYW5zYWNrIHByZWRpY2F0ZS5cbiAqIEBwcm9wZXJ0eSB7P30gdmFsdWUgLSBOb3JtYWxpemVkIHZhbHVlLlxuICovXG5cbi8qKlxuICogUmFuc2Fja0dyb3VwIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSYW5zYWNrR3JvdXBcbiAqIEBwcm9wZXJ0eSB7UmFuc2Fja0NvbWJpbmF0b3J9IGNvbWJpbmF0b3IgLSBIb3cgZW50cmllcyBpbnNpZGUgdGhpcyBncm91cCBhcmUgY29tYmluZWQuXG4gKiBAcHJvcGVydHkge1JhbnNhY2tDb25kaXRpb25bXX0gY29uZGl0aW9ucyAtIENvbmRpdGlvbnMgaW4gdGhpcyBncm91cC5cbiAqIEBwcm9wZXJ0eSB7UmFuc2Fja0dyb3VwW119IGdyb3VwaW5ncyAtIE5lc3RlZCBncm91cHMuXG4gKi9cblxuY29uc3Qgc3VwcG9ydGVkUHJlZGljYXRlcyA9IFtcbiAgXCJub3RfaW5cIixcbiAgXCJub3RfZXFcIixcbiAgXCJndGVxXCIsXG4gIFwibHRlcVwiLFxuICBcInN0YXJ0XCIsXG4gIFwiY29udFwiLFxuICBcIm51bGxcIixcbiAgXCJlbmRcIixcbiAgXCJlcVwiLFxuICBcImd0XCIsXG4gIFwibHRcIixcbiAgXCJpblwiXG5dXG5cbi8qKlxuICogUnVucyB0aGUgbm9ybWFsaXplUmFuc2Fja1BhcmFtcyBoZWxwZXIuXG4gKiBAcGFyYW0ge1JhbnNhY2tNb2RlbENsYXNzfSBtb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBwYXJhbXMgLSBSYW5zYWNrLXN0eWxlIHBhcmFtcyBoYXNoLlxuICogQHJldHVybnMge1JhbnNhY2tDb25kaXRpb25bXX0gLSBOb3JtYWxpemVkIGNvbmRpdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVSYW5zYWNrUGFyYW1zKG1vZGVsQ2xhc3MsIHBhcmFtcykge1xuICByZXR1cm4gbm9ybWFsaXplUmFuc2Fja0dyb3VwKG1vZGVsQ2xhc3MsIHBhcmFtcykuY29uZGl0aW9uc1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIG5vcm1hbGl6ZVJhbnNhY2tHcm91cCBoZWxwZXIuXG4gKiBAcGFyYW0ge1JhbnNhY2tNb2RlbENsYXNzfSBtb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBwYXJhbXMgLSBSYW5zYWNrLXN0eWxlIHBhcmFtcyBoYXNoLlxuICogQHJldHVybnMge1JhbnNhY2tHcm91cH0gLSBOb3JtYWxpemVkIGdyb3VwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUmFuc2Fja0dyb3VwKG1vZGVsQ2xhc3MsIHBhcmFtcykge1xuICBpZiAoIWlzUGxhaW5PYmplY3QocGFyYW1zKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgcmFuc2FjayBwYXJhbXMgbXVzdCBiZSBhIHBsYWluIG9iamVjdCwgZ290OiAke3R5cGVvZiBwYXJhbXN9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVkLlxuICAgKiBAdHlwZSB7UmFuc2Fja0dyb3VwfSAqL1xuICBjb25zdCBub3JtYWxpemVkID0ge1xuICAgIGNvbWJpbmF0b3I6IG5vcm1hbGl6ZVJhbnNhY2tDb21iaW5hdG9yKHBhcmFtcy5tLCBcImFuZFwiKSxcbiAgICBjb25kaXRpb25zOiBbXSxcbiAgICBncm91cGluZ3M6IFtdXG4gIH1cblxuICBmb3IgKGNvbnN0IFtrZXksIHJhd1ZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbXMpKSB7XG4gICAgaWYgKGtleSA9PT0gXCJtXCIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gXCJjXCIpIHtcbiAgICAgIG5vcm1hbGl6ZWQuY29uZGl0aW9ucy5wdXNoKC4uLm5vcm1hbGl6ZUFkdmFuY2VkUmFuc2Fja0NvbmRpdGlvbnMoe21vZGVsQ2xhc3MsIHZhbHVlOiByYXdWYWx1ZX0pKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBcImdcIikge1xuICAgICAgbm9ybWFsaXplZC5ncm91cGluZ3MucHVzaCguLi5ub3JtYWxpemVBZHZhbmNlZFJhbnNhY2tHcm91cHMoe21vZGVsQ2xhc3MsIHZhbHVlOiByYXdWYWx1ZX0pKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb24gPSBub3JtYWxpemVTaW1wbGVSYW5zYWNrQ29uZGl0aW9uKHtrZXksIG1vZGVsQ2xhc3MsIHJhd1ZhbHVlfSlcbiAgICBpZiAoY29uZGl0aW9uKSBub3JtYWxpemVkLmNvbmRpdGlvbnMucHVzaChjb25kaXRpb24pXG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZFxufVxuXG5jb25zdCBTS0lQX1JBTlNBQ0tfQ09ORElUSU9OID0gU3ltYm9sKFwic2tpcC1yYW5zYWNrLWNvbmRpdGlvblwiKVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIHNpbXBsZSByYW5zYWNrIGNvbmRpdGlvbi5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmtleSAtIFNpbXBsZSBSYW5zYWNrIGtleS5cbiAqIEBwYXJhbSB7UmFuc2Fja01vZGVsQ2xhc3N9IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHs/fSBhcmdzLnJhd1ZhbHVlIC0gUmF3IGNvbmRpdGlvbiB2YWx1ZS5cbiAqIEByZXR1cm5zIHtSYW5zYWNrQ29uZGl0aW9uIHwgbnVsbH0gLSBOb3JtYWxpemVkIGNvbmRpdGlvbiwgb3IgbnVsbCB3aGVuIHNraXBwZWQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNpbXBsZVJhbnNhY2tDb25kaXRpb24oe2tleSwgbW9kZWxDbGFzcywgcmF3VmFsdWV9KSB7XG4gIGNvbnN0IHBhcnNlZEtleSA9IHBhcnNlUmFuc2Fja0tleShrZXkpXG5cbiAgaWYgKCFwYXJzZWRLZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHJhbnNhY2sgcHJlZGljYXRlIGluIGtleTogJHtrZXl9YClcbiAgfVxuXG4gIGNvbnN0IHZhbHVlID0gbm9ybWFsaXplUmFuc2Fja1ZhbHVlKHtcbiAgICBwcmVkaWNhdGU6IHBhcnNlZEtleS5wcmVkaWNhdGUsXG4gICAgdmFsdWU6IHJhd1ZhbHVlXG4gIH0pXG5cbiAgaWYgKHZhbHVlID09PSBTS0lQX1JBTlNBQ0tfQ09ORElUSU9OKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSByZXNvbHZlUmFuc2Fja0F0dHJpYnV0ZXMoe21vZGVsQ2xhc3MsIHZhbHVlOiBwYXJzZWRLZXkucGF0aFZhbHVlfSlcblxuICByZXR1cm4ge1xuICAgIGF0dHJpYnV0ZXMsXG4gICAgY29tYmluYXRvcjogYXR0cmlidXRlcy5sZW5ndGggPiAxID8gXCJvclwiIDogXCJhbmRcIixcbiAgICBwcmVkaWNhdGU6IHBhcnNlZEtleS5wcmVkaWNhdGUsXG4gICAgdmFsdWVcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIGFkdmFuY2VkIHJhbnNhY2sgY29uZGl0aW9ucy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7UmFuc2Fja01vZGVsQ2xhc3N9IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHs/fSBhcmdzLnZhbHVlIC0gQWR2YW5jZWQgY29uZGl0aW9ucyBjb2xsZWN0aW9uLlxuICogQHJldHVybnMge1JhbnNhY2tDb25kaXRpb25bXX0gLSBOb3JtYWxpemVkIGNvbmRpdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFkdmFuY2VkUmFuc2Fja0NvbmRpdGlvbnMoe21vZGVsQ2xhc3MsIHZhbHVlfSkge1xuICAvKipcbiAgICogQ29uZGl0aW9ucy5cbiAgICogQHR5cGUge1JhbnNhY2tDb25kaXRpb25bXX0gKi9cbiAgY29uc3QgY29uZGl0aW9ucyA9IFtdXG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBub3JtYWxpemVSYW5zYWNrQ29sbGVjdGlvbih2YWx1ZSwgXCJjb25kaXRpb25zXCIpKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSYW5zYWNrIGNvbmRpdGlvbiBlbnRyaWVzIG11c3QgYmUgcGxhaW4gb2JqZWN0cywgZ290OiAke3R5cGVvZiBlbnRyeX1gKVxuICAgIH1cblxuICAgIGNvbnN0IHByZWRpY2F0ZVZhbHVlID0gZW50cnkucFxuXG4gICAgaWYgKHR5cGVvZiBwcmVkaWNhdGVWYWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmFuc2FjayBjb25kaXRpb24gcHJlZGljYXRlIG11c3QgYmUgYSBzdHJpbmdcIilcbiAgICB9XG5cbiAgICBpZiAoIXN1cHBvcnRlZFByZWRpY2F0ZXMuaW5jbHVkZXMocHJlZGljYXRlVmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHJhbnNhY2sgcHJlZGljYXRlIGluIGNvbmRpdGlvbjogJHtwcmVkaWNhdGVWYWx1ZX1gKVxuICAgIH1cblxuICAgIGNvbnN0IHByZWRpY2F0ZSA9IC8qKiBAdHlwZSB7UmFuc2Fja1ByZWRpY2F0ZX0gKi8gKHByZWRpY2F0ZVZhbHVlKVxuICAgIGNvbnN0IHJhd1ZhbHVlID0gYWR2YW5jZWRSYW5zYWNrQ29uZGl0aW9uVmFsdWUoe3ByZWRpY2F0ZSwgdmFsdWU6IGVudHJ5LnZ9KVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZVJhbnNhY2tWYWx1ZSh7cHJlZGljYXRlLCB2YWx1ZTogcmF3VmFsdWV9KVxuXG4gICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZSA9PT0gU0tJUF9SQU5TQUNLX0NPTkRJVElPTikgY29udGludWVcblxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSByZXNvbHZlUmFuc2Fja0F0dHJpYnV0ZXNGcm9tQWR2YW5jZWRWYWx1ZSh7bW9kZWxDbGFzcywgdmFsdWU6IGVudHJ5LmF9KVxuXG4gICAgY29uZGl0aW9ucy5wdXNoKHtcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBjb21iaW5hdG9yOiBub3JtYWxpemVSYW5zYWNrQ29tYmluYXRvcihlbnRyeS5tLCBhdHRyaWJ1dGVzLmxlbmd0aCA+IDEgPyBcIm9yXCIgOiBcImFuZFwiKSxcbiAgICAgIHByZWRpY2F0ZSxcbiAgICAgIHZhbHVlOiBub3JtYWxpemVkVmFsdWVcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGNvbmRpdGlvbnNcbn1cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSBhZHZhbmNlZCByYW5zYWNrIGdyb3Vwcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7UmFuc2Fja01vZGVsQ2xhc3N9IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHs/fSBhcmdzLnZhbHVlIC0gQWR2YW5jZWQgZ3JvdXBzIGNvbGxlY3Rpb24uXG4gKiBAcmV0dXJucyB7UmFuc2Fja0dyb3VwW119IC0gTm9ybWFsaXplZCBncm91cHMuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFkdmFuY2VkUmFuc2Fja0dyb3Vwcyh7bW9kZWxDbGFzcywgdmFsdWV9KSB7XG4gIC8qKlxuICAgKiBHcm91cGluZ3MuXG4gICAqIEB0eXBlIHtSYW5zYWNrR3JvdXBbXX0gKi9cbiAgY29uc3QgZ3JvdXBpbmdzID0gW11cblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIG5vcm1hbGl6ZVJhbnNhY2tDb2xsZWN0aW9uKHZhbHVlLCBcImdyb3VwaW5nc1wiKSkge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmFuc2FjayBncm91cGluZyBlbnRyaWVzIG11c3QgYmUgcGxhaW4gb2JqZWN0cywgZ290OiAke3R5cGVvZiBlbnRyeX1gKVxuICAgIH1cblxuICAgIGdyb3VwaW5ncy5wdXNoKG5vcm1hbGl6ZVJhbnNhY2tHcm91cChtb2RlbENsYXNzLCBlbnRyeSkpXG4gIH1cblxuICByZXR1cm4gZ3JvdXBpbmdzXG59XG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgcmFuc2FjayBjb21iaW5hdG9yLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIENhbmRpZGF0ZSBjb21iaW5hdG9yLlxuICogQHBhcmFtIHtSYW5zYWNrQ29tYmluYXRvcn0gZGVmYXVsdFZhbHVlIC0gRGVmYXVsdCBjb21iaW5hdG9yLlxuICogQHJldHVybnMge1JhbnNhY2tDb21iaW5hdG9yfSAtIE5vcm1hbGl6ZWQgY29tYmluYXRvci5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmFuc2Fja0NvbWJpbmF0b3IodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikgcmV0dXJuIGRlZmF1bHRWYWx1ZVxuICBpZiAodmFsdWUgPT09IFwiYW5kXCIgfHwgdmFsdWUgPT09IFwib3JcIikgcmV0dXJuIHZhbHVlXG5cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJhbnNhY2sgY29tYmluYXRvcjogJHtTdHJpbmcodmFsdWUpfWApXG59XG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgcmFuc2FjayBjb2xsZWN0aW9uLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIENhbmRpZGF0ZSBjb2xsZWN0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDb2xsZWN0aW9uIG5hbWUgZm9yIGVycm9ycy5cbiAqIEByZXR1cm5zIHtBcnJheTw/Pn0gLSBDb2xsZWN0aW9uIHZhbHVlcyBpbiBzdGFibGUgb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJhbnNhY2tDb2xsZWN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSBcIlwiKSByZXR1cm4gW11cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWVcblxuICBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsdWUpXG4gICAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlciA9IE51bWJlcihsZWZ0KVxuICAgICAgICBjb25zdCByaWdodE51bWJlciA9IE51bWJlcihyaWdodClcblxuICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGxlZnROdW1iZXIpICYmIE51bWJlci5pc0Zpbml0ZShyaWdodE51bWJlcikpIHtcbiAgICAgICAgICByZXR1cm4gbGVmdE51bWJlciAtIHJpZ2h0TnVtYmVyXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGVmdC5sb2NhbGVDb21wYXJlKHJpZ2h0KVxuICAgICAgfSlcbiAgICAgIC5tYXAoKGtleSkgPT4gdmFsdWVba2V5XSlcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgUmFuc2FjayAke25hbWV9IG11c3QgYmUgYW4gYXJyYXkgb3Igb2JqZWN0LCBnb3Q6ICR7dHlwZW9mIHZhbHVlfWApXG59XG5cbi8qKlxuICogUnVucyBhZHZhbmNlZCByYW5zYWNrIGNvbmRpdGlvbiB2YWx1ZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7UmFuc2Fja1ByZWRpY2F0ZX0gYXJncy5wcmVkaWNhdGUgLSBQYXJzZWQgcHJlZGljYXRlLlxuICogQHBhcmFtIHs/fSBhcmdzLnZhbHVlIC0gQWR2YW5jZWQgY29uZGl0aW9uIHZhbHVlLlxuICogQHJldHVybnMgez99IC0gVmFsdWUgcGFzc2VkIHRvIHByZWRpY2F0ZSBub3JtYWxpemF0aW9uLlxuICovXG5mdW5jdGlvbiBhZHZhbmNlZFJhbnNhY2tDb25kaXRpb25WYWx1ZSh7cHJlZGljYXRlLCB2YWx1ZX0pIHtcbiAgaWYgKHByZWRpY2F0ZSA9PT0gXCJpblwiIHx8IHByZWRpY2F0ZSA9PT0gXCJub3RfaW5cIikgcmV0dXJuIHZhbHVlXG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmZpbmQoKGVudHJ5KSA9PiBlbnRyeSAhPT0gdW5kZWZpbmVkICYmIGVudHJ5ICE9PSBudWxsICYmIGVudHJ5ICE9PSBcIlwiKVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogUnVucyByZXNvbHZlIHJhbnNhY2sgYXR0cmlidXRlcyBmcm9tIGFkdmFuY2VkIHZhbHVlLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICogQHBhcmFtIHtSYW5zYWNrTW9kZWxDbGFzc30gYXJncy5tb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gKiBAcGFyYW0gez99IGFyZ3MudmFsdWUgLSBBZHZhbmNlZCBhdHRyaWJ1dGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7UmFuc2Fja0F0dHJpYnV0ZVtdfSAtIFJlc29sdmVkIGF0dHJpYnV0ZXMuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVSYW5zYWNrQXR0cmlidXRlc0Zyb21BZHZhbmNlZFZhbHVlKHttb2RlbENsYXNzLCB2YWx1ZX0pIHtcbiAgY29uc3QgdmFsdWVzID0gbm9ybWFsaXplQWR2YW5jZWRBdHRyaWJ1dGVWYWx1ZXModmFsdWUpXG4gIC8qKlxuICAgKiBBdHRyaWJ1dGVzLlxuICAgKiBAdHlwZSB7UmFuc2Fja0F0dHJpYnV0ZVtdfSAqL1xuICBjb25zdCBhdHRyaWJ1dGVzID0gW11cblxuICBmb3IgKGNvbnN0IGF0dHJpYnV0ZVZhbHVlIG9mIHZhbHVlcykge1xuICAgIGF0dHJpYnV0ZXMucHVzaCguLi5yZXNvbHZlUmFuc2Fja0F0dHJpYnV0ZXMoe21vZGVsQ2xhc3MsIHZhbHVlOiBhdHRyaWJ1dGVWYWx1ZX0pKVxuICB9XG5cbiAgaWYgKGF0dHJpYnV0ZXMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlJhbnNhY2sgY29uZGl0aW9uIG11c3QgaW5jbHVkZSBhdCBsZWFzdCBvbmUgYXR0cmlidXRlXCIpXG4gIH1cblxuICByZXR1cm4gYXR0cmlidXRlc1xufVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIGFkdmFuY2VkIGF0dHJpYnV0ZSB2YWx1ZXMuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gQWR2YW5jZWQgYXR0cmlidXRlIHZhbHVlLlxuICogQHJldHVybnMge3N0cmluZ1tdfSAtIEF0dHJpYnV0ZSBwYXRoIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFkdmFuY2VkQXR0cmlidXRlVmFsdWVzKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHJldHVybiBbdmFsdWVdXG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcCgoZW50cnkpID0+IG5vcm1hbGl6ZUFkdmFuY2VkQXR0cmlidXRlVmFsdWUoZW50cnkpKVxuICB9XG5cbiAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVJhbnNhY2tDb2xsZWN0aW9uKHZhbHVlLCBcImF0dHJpYnV0ZXNcIikubWFwKChlbnRyeSkgPT4gbm9ybWFsaXplQWR2YW5jZWRBdHRyaWJ1dGVWYWx1ZShlbnRyeSkpXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYFJhbnNhY2sgY29uZGl0aW9uIGF0dHJpYnV0ZXMgbXVzdCBiZSBzdHJpbmdzLCBhcnJheXMsIG9yIG9iamVjdHMsIGdvdDogJHt0eXBlb2YgdmFsdWV9YClcbn1cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSBhZHZhbmNlZCBhdHRyaWJ1dGUgdmFsdWUuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gQWR2YW5jZWQgYXR0cmlidXRlIGVudHJ5LlxuICogQHJldHVybnMge3N0cmluZ30gLSBBdHRyaWJ1dGUgcGF0aCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFkdmFuY2VkQXR0cmlidXRlVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbHVlXG5cbiAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpICYmIHR5cGVvZiB2YWx1ZS5uYW1lID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHZhbHVlLm5hbWVcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgUmFuc2FjayBjb25kaXRpb24gYXR0cmlidXRlIGVudHJpZXMgbXVzdCBiZSBzdHJpbmdzIG9yIHtuYW1lfSwgZ290OiAke3R5cGVvZiB2YWx1ZX1gKVxufVxuXG4vKipcbiAqIFJ1bnMgcmVzb2x2ZSByYW5zYWNrIGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge1JhbnNhY2tNb2RlbENsYXNzfSBhcmdzLm1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnZhbHVlIC0gQXR0cmlidXRlIHBhdGggdmFsdWUuXG4gKiBAcmV0dXJucyB7UmFuc2Fja0F0dHJpYnV0ZVtdfSAtIFJlc29sdmVkIGF0dHJpYnV0ZXMuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVSYW5zYWNrQXR0cmlidXRlcyh7bW9kZWxDbGFzcywgdmFsdWV9KSB7XG4gIHJldHVybiB2YWx1ZS5zcGxpdChcIl9vcl9cIikubWFwKChhdHRyaWJ1dGVWYWx1ZSkgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmVSYW5zYWNrUGF0aCh7bW9kZWxDbGFzcywgdmFsdWU6IGF0dHJpYnV0ZVZhbHVlfSlcbiAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gbW9kZWxDbGFzc0F0UGF0aCh7bW9kZWxDbGFzcywgcGF0aDogcmVzb2x2ZWRQYXRoLnBhdGh9KVxuICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSByZXNvbHZlQXR0cmlidXRlTmFtZSh7bW9kZWxDbGFzczogdGFyZ2V0TW9kZWxDbGFzcywgdmFsdWU6IHJlc29sdmVkUGF0aC5hdHRyaWJ1dGVWYWx1ZX0pXG5cbiAgICBpZiAoIWF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByYW5zYWNrIGF0dHJpYnV0ZSBcIiR7cmVzb2x2ZWRQYXRoLmF0dHJpYnV0ZVZhbHVlfVwiIGZvciAke3RhcmdldE1vZGVsQ2xhc3MubmFtZX1gKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGVOYW1lLFxuICAgICAgcGF0aDogcmVzb2x2ZWRQYXRoLnBhdGhcbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogUnVucyBtb2RlbCBjbGFzcyBhdCBwYXRoLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICogQHBhcmFtIHtSYW5zYWNrTW9kZWxDbGFzc30gYXJncy5tb2RlbENsYXNzIC0gUm9vdCBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MucGF0aCAtIFJlbGF0aW9uc2hpcCBwYXRoLlxuICogQHJldHVybnMge1JhbnNhY2tNb2RlbENsYXNzfSAtIFRhcmdldCBtb2RlbCBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gbW9kZWxDbGFzc0F0UGF0aCh7bW9kZWxDbGFzcywgcGF0aH0pIHtcbiAgbGV0IGN1cnJlbnRNb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuXG4gIGZvciAoY29uc3QgcmVsYXRpb25zaGlwTmFtZSBvZiBwYXRoKSB7XG4gICAgY29uc3QgcmVsYXRpb25zaGlwID0gcmVsYXRpb25zaGlwRW50cmllcyhjdXJyZW50TW9kZWxDbGFzcylbcmVsYXRpb25zaGlwTmFtZV1cblxuICAgIGlmICghcmVsYXRpb25zaGlwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcmFuc2FjayByZWxhdGlvbnNoaXAgXCIke3JlbGF0aW9uc2hpcE5hbWV9XCIgZm9yICR7Y3VycmVudE1vZGVsQ2xhc3MubmFtZX1gKVxuICAgIH1cblxuICAgIGN1cnJlbnRNb2RlbENsYXNzID0gcmVsYXRpb25zaGlwLnRhcmdldE1vZGVsQ2xhc3NcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50TW9kZWxDbGFzc1xufVxuXG4vKipcbiAqIFJ1bnMgcmVzb2x2ZSByYW5zYWNrIHBhdGguXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge1JhbnNhY2tNb2RlbENsYXNzfSBhcmdzLm1vZGVsQ2xhc3MgLSBDdXJyZW50IG1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudmFsdWUgLSBSZW1haW5pbmcgcGF0aCB2YWx1ZS5cbiAqIEByZXR1cm5zIHt7YXR0cmlidXRlVmFsdWU6IHN0cmluZywgcGF0aDogc3RyaW5nW119fSAtIFJlc29sdmVkIHJlbGF0aW9uc2hpcCBwYXRoIGFuZCByZW1haW5pbmcgYXR0cmlidXRlIHZhbHVlLlxuICovXG5mdW5jdGlvbiByZXNvbHZlUmFuc2Fja1BhdGgoe21vZGVsQ2xhc3MsIHZhbHVlfSkge1xuICAvKipcbiAgICogUGF0aC5cbiAgICogQHR5cGUge3N0cmluZ1tdfSAqL1xuICBjb25zdCBwYXRoID0gW11cbiAgbGV0IGN1cnJlbnRNb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuICBsZXQgcmVtYWluaW5nVmFsdWUgPSB2YWx1ZVxuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKHJlc29sdmVBdHRyaWJ1dGVOYW1lKHttb2RlbENsYXNzOiBjdXJyZW50TW9kZWxDbGFzcywgdmFsdWU6IHJlbWFpbmluZ1ZhbHVlfSkpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSBmaW5kUmVsYXRpb25zaGlwUHJlZml4KHtcbiAgICAgIG1vZGVsQ2xhc3M6IGN1cnJlbnRNb2RlbENsYXNzLFxuICAgICAgdmFsdWU6IHJlbWFpbmluZ1ZhbHVlXG4gICAgfSlcblxuICAgIGlmICghbWF0Y2gpIGJyZWFrXG5cbiAgICBwYXRoLnB1c2gobWF0Y2gucmVsYXRpb25zaGlwTmFtZSlcbiAgICBjdXJyZW50TW9kZWxDbGFzcyA9IG1hdGNoLnRhcmdldE1vZGVsQ2xhc3NcbiAgICByZW1haW5pbmdWYWx1ZSA9IG1hdGNoLnJlbWFpbmluZ1ZhbHVlXG4gIH1cblxuICBpZiAocmVtYWluaW5nVmFsdWUubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByYW5zYWNrIGtleSBwYXRoOiAke3ZhbHVlfWApXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGF0dHJpYnV0ZVZhbHVlOiByZW1haW5pbmdWYWx1ZSxcbiAgICBwYXRoXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIGZpbmQgcmVsYXRpb25zaGlwIHByZWZpeC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7UmFuc2Fja01vZGVsQ2xhc3N9IGFyZ3MubW9kZWxDbGFzcyAtIEN1cnJlbnQgbW9kZWwgY2xhc3MuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy52YWx1ZSAtIFJlbWFpbmluZyB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHt7cmVsYXRpb25zaGlwTmFtZTogc3RyaW5nLCByZW1haW5pbmdWYWx1ZTogc3RyaW5nLCB0YXJnZXRNb2RlbENsYXNzOiBSYW5zYWNrTW9kZWxDbGFzc30gfCBudWxsfSAtIE1hdGNoaW5nIHJlbGF0aW9uc2hpcCBwcmVmaXguXG4gKi9cbmZ1bmN0aW9uIGZpbmRSZWxhdGlvbnNoaXBQcmVmaXgoe21vZGVsQ2xhc3MsIHZhbHVlfSkge1xuICBsZXQgYmVzdE1hdGNoID0gbnVsbFxuXG4gIGZvciAoY29uc3QgcmVsYXRpb25zaGlwTmFtZSBvZiBPYmplY3Qua2V5cyhyZWxhdGlvbnNoaXBFbnRyaWVzKG1vZGVsQ2xhc3MpKSkge1xuICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcEVudHJpZXMobW9kZWxDbGFzcylbcmVsYXRpb25zaGlwTmFtZV1cblxuICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIHJlbGF0aW9uc2hpcENhbmRpZGF0ZXMocmVsYXRpb25zaGlwTmFtZSkpIHtcbiAgICAgIGNvbnN0IHJlbWFpbmluZ1ZhbHVlID0gc3RyaXBSZWxhdGlvbnNoaXBDYW5kaWRhdGUodmFsdWUsIGNhbmRpZGF0ZSlcblxuICAgICAgaWYgKHJlbWFpbmluZ1ZhbHVlID09PSBudWxsKSBjb250aW51ZVxuICAgICAgaWYgKHJlbWFpbmluZ1ZhbHVlLmxlbmd0aCA8IDEpIGNvbnRpbnVlXG4gICAgICBpZiAoYmVzdE1hdGNoICYmIGNhbmRpZGF0ZS5sZW5ndGggPD0gYmVzdE1hdGNoLmNhbmRpZGF0ZUxlbmd0aCkgY29udGludWVcblxuICAgICAgYmVzdE1hdGNoID0ge1xuICAgICAgICBjYW5kaWRhdGVMZW5ndGg6IGNhbmRpZGF0ZS5sZW5ndGgsXG4gICAgICAgIHJlbGF0aW9uc2hpcE5hbWUsXG4gICAgICAgIHJlbWFpbmluZ1ZhbHVlLFxuICAgICAgICB0YXJnZXRNb2RlbENsYXNzOiByZWxhdGlvbnNoaXAudGFyZ2V0TW9kZWxDbGFzc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghYmVzdE1hdGNoKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiB7XG4gICAgcmVsYXRpb25zaGlwTmFtZTogYmVzdE1hdGNoLnJlbGF0aW9uc2hpcE5hbWUsXG4gICAgcmVtYWluaW5nVmFsdWU6IGJlc3RNYXRjaC5yZW1haW5pbmdWYWx1ZSxcbiAgICB0YXJnZXRNb2RlbENsYXNzOiBiZXN0TWF0Y2gudGFyZ2V0TW9kZWxDbGFzc1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcG9ydGlvbiBvZiBgdmFsdWVgIGFmdGVyIGBjYW5kaWRhdGVgIHdoZW4gYGNhbmRpZGF0ZWBcbiAqIHNpdHMgYXQgYSByZWxhdGlvbnNoaXAtcGF0aCBib3VuZGFyeSwgb3IgbnVsbCB3aGVuIHRoZXJlJ3Mgbm9cbiAqIGJvdW5kYXJ5IG1hdGNoLiBUd28gYm91bmRhcnkgZm9ybXMgYXJlIGFjY2VwdGVkOlxuICogLSBzbmFrZTogYDxjYW5kaWRhdGU+X2AgZm9sbG93ZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIHBhdGggKGUuZy5cbiAqICAgYHRhc2tfcHJvamVjdF9pZGAgYWdhaW5zdCBjYW5kaWRhdGUgYHRhc2tgIHJldHVybnMgYHByb2plY3RfaWRgKS5cbiAqIC0gY2FtZWw6IGA8Y2FuZGlkYXRlPmAgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYW4gdXBwZXJjYXNlIGxldHRlcixcbiAqICAgd2hpY2ggbWFya3MgYSBuZXcgd29yZCBpbiBjYW1lbENhc2UgKGUuZy4gYHRhc2tQcm9qZWN0SWRgIGFnYWluc3RcbiAqICAgY2FuZGlkYXRlIGB0YXNrYCByZXR1cm5zIGBwcm9qZWN0SWRgIHdpdGggdGhlIGxlYWRpbmcgYFBgXG4gKiAgIGxvd2VyY2FzZWQgc28gdGhlIHJlbWFpbmRlciBzdGF5cyBpbiBjYWxsZXItZm9ybSBmb3IgdGhlIG5leHRcbiAqICAgYXR0cmlidXRlIC8gcmVsYXRpb25zaGlwIG1hdGNoKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFJlbWFpbmluZyByYW5zYWNrIHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gY2FuZGlkYXRlIC0gUmVsYXRpb25zaGlwIG5hbWUgY2FuZGlkYXRlLlxuICogQHJldHVybnMge3N0cmluZyB8IG51bGx9IC0gUmVtYWluZGVyIGFmdGVyIHRoZSBjYW5kaWRhdGUsIG9yIG51bGwuXG4gKi9cbmZ1bmN0aW9uIHN0cmlwUmVsYXRpb25zaGlwQ2FuZGlkYXRlKHZhbHVlLCBjYW5kaWRhdGUpIHtcbiAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoYCR7Y2FuZGlkYXRlfV9gKSkge1xuICAgIHJldHVybiB2YWx1ZS5zbGljZShjYW5kaWRhdGUubGVuZ3RoICsgMSlcbiAgfVxuXG4gIGlmICh2YWx1ZS5sZW5ndGggPD0gY2FuZGlkYXRlLmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKGNhbmRpZGF0ZSkpIHJldHVybiBudWxsXG5cbiAgY29uc3QgbmV4dENoYXIgPSB2YWx1ZS5jaGFyQXQoY2FuZGlkYXRlLmxlbmd0aClcblxuICBpZiAobmV4dENoYXIgPCBcIkFcIiB8fCBuZXh0Q2hhciA+IFwiWlwiKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiBuZXh0Q2hhci50b0xvd2VyQ2FzZSgpICsgdmFsdWUuc2xpY2UoY2FuZGlkYXRlLmxlbmd0aCArIDEpXG59XG5cbi8qKlxuICogUnVucyByZWxhdGlvbnNoaXAgY2FuZGlkYXRlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbnNoaXBOYW1lIC0gUmVsYXRpb25zaGlwIG5hbWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IC0gQ2FuZGlkYXRlIHRva2VucyBmb3IgbWF0Y2hpbmcuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aW9uc2hpcENhbmRpZGF0ZXMocmVsYXRpb25zaGlwTmFtZSkge1xuICByZXR1cm4gdW5pcXVuaXplKFtyZWxhdGlvbnNoaXBOYW1lLCBpbmZsZWN0aW9uLnVuZGVyc2NvcmUocmVsYXRpb25zaGlwTmFtZSldKVxufVxuXG4vKipcbiAqIFJ1bnMgcmVzb2x2ZSBhdHRyaWJ1dGUgbmFtZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7UmFuc2Fja01vZGVsQ2xhc3N9IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudmFsdWUgLSBBdHRyaWJ1dGUgY2FuZGlkYXRlLlxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBSZXNvbHZlZCBhdHRyaWJ1dGUgbmFtZS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUF0dHJpYnV0ZU5hbWUoe21vZGVsQ2xhc3MsIHZhbHVlfSkge1xuICBmb3IgKGNvbnN0IFthdHRyaWJ1dGVOYW1lLCBjb2x1bW5OYW1lXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVFbnRyaWVzKG1vZGVsQ2xhc3MpKSkge1xuICAgIGlmIChtYXRjaGVzQXR0cmlidXRlVmFsdWUoe2F0dHJpYnV0ZU5hbWUsIGNvbHVtbk5hbWUsIHZhbHVlfSkpIHtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVOYW1lXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFJ1bnMgcmVsYXRpb25zaGlwIGVudHJpZXMuXG4gKiBAcGFyYW0ge1JhbnNhY2tNb2RlbENsYXNzfSBtb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywge3RhcmdldE1vZGVsQ2xhc3M6IFJhbnNhY2tNb2RlbENsYXNzfT59IC0gUmVsYXRpb25zaGlwIGVudHJpZXMga2V5ZWQgYnkgbmFtZS5cbiAqL1xuZnVuY3Rpb24gcmVsYXRpb25zaGlwRW50cmllcyhtb2RlbENsYXNzKSB7XG4gIGlmICh0eXBlb2YgLyoqIEB0eXBlIHs/fSAqLyAobW9kZWxDbGFzcykuZ2V0UmVsYXRpb25zaGlwc01hcCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGJhY2tlbmRSZWxhdGlvbnNoaXBFbnRyaWVzKG1vZGVsQ2xhc3MpXG4gIH1cblxuICBpZiAodHlwZW9mIC8qKiBAdHlwZSB7P30gKi8gKG1vZGVsQ2xhc3MpLnJlbGF0aW9uc2hpcERlZmluaXRpb25zID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2YgLyoqIEB0eXBlIHs/fSAqLyAobW9kZWxDbGFzcykucmVsYXRpb25zaGlwTW9kZWxDbGFzc2VzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gZnJvbnRlbmRSZWxhdGlvbnNoaXBFbnRyaWVzKG1vZGVsQ2xhc3MpXG4gIH1cblxuICByZXR1cm4ge31cbn1cblxuLyoqXG4gKiBSdW5zIGJhY2tlbmQgcmVsYXRpb25zaGlwIGVudHJpZXMuXG4gKiBAcGFyYW0ge1JhbnNhY2tNb2RlbENsYXNzfSBtb2RlbENsYXNzIC0gQmFja2VuZCBtb2RlbCBjbGFzcy5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCB7dGFyZ2V0TW9kZWxDbGFzczogUmFuc2Fja01vZGVsQ2xhc3N9Pn0gLSBSZWxhdGlvbnNoaXAgZW50cmllcyBrZXllZCBieSBuYW1lLlxuICovXG5mdW5jdGlvbiBiYWNrZW5kUmVsYXRpb25zaGlwRW50cmllcyhtb2RlbENsYXNzKSB7XG4gIC8qKlxuICAgKiBFbnRyaWVzLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywge3RhcmdldE1vZGVsQ2xhc3M6IFJhbnNhY2tNb2RlbENsYXNzfT59ICovXG4gIGNvbnN0IGVudHJpZXMgPSB7fVxuICBjb25zdCByZWxhdGlvbnNoaXBzTWFwID0gLyoqIEB0eXBlIHs/fSAqLyAobW9kZWxDbGFzcykuZ2V0UmVsYXRpb25zaGlwc01hcCgpXG5cbiAgZm9yIChjb25zdCByZWxhdGlvbnNoaXBOYW1lIG9mIE9iamVjdC5rZXlzKHJlbGF0aW9uc2hpcHNNYXApKSB7XG4gICAgY29uc3QgcmVsYXRpb25zaGlwID0gcmVsYXRpb25zaGlwc01hcFtyZWxhdGlvbnNoaXBOYW1lXVxuXG4gICAgaWYgKHR5cGVvZiByZWxhdGlvbnNoaXAuaXNQb2x5bW9ycGhpYyA9PT0gXCJmdW5jdGlvblwiICYmIHJlbGF0aW9uc2hpcC5pc1BvbHltb3JwaGljKCkpIGNvbnRpbnVlXG5cbiAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gcmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSBjb250aW51ZVxuXG4gICAgZW50cmllc1tyZWxhdGlvbnNoaXBOYW1lXSA9IHt0YXJnZXRNb2RlbENsYXNzfVxuICB9XG5cbiAgcmV0dXJuIGVudHJpZXNcbn1cblxuLyoqXG4gKiBSdW5zIGZyb250ZW5kIHJlbGF0aW9uc2hpcCBlbnRyaWVzLlxuICogQHBhcmFtIHtSYW5zYWNrTW9kZWxDbGFzc30gbW9kZWxDbGFzcyAtIEZyb250ZW5kIG1vZGVsIGNsYXNzLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHt0YXJnZXRNb2RlbENsYXNzOiBSYW5zYWNrTW9kZWxDbGFzc30+fSAtIFJlbGF0aW9uc2hpcCBlbnRyaWVzIGtleWVkIGJ5IG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGZyb250ZW5kUmVsYXRpb25zaGlwRW50cmllcyhtb2RlbENsYXNzKSB7XG4gIC8qKlxuICAgKiBFbnRyaWVzLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywge3RhcmdldE1vZGVsQ2xhc3M6IFJhbnNhY2tNb2RlbENsYXNzfT59ICovXG4gIGNvbnN0IGVudHJpZXMgPSB7fVxuICBjb25zdCBkZWZpbml0aW9ucyA9IC8qKiBAdHlwZSB7P30gKi8gKG1vZGVsQ2xhc3MpLnJlbGF0aW9uc2hpcERlZmluaXRpb25zKClcbiAgY29uc3QgcmVsYXRpb25zaGlwTW9kZWxDbGFzc2VzID0gLyoqIEB0eXBlIHs/fSAqLyAobW9kZWxDbGFzcykucmVsYXRpb25zaGlwTW9kZWxDbGFzc2VzKClcblxuICBmb3IgKGNvbnN0IHJlbGF0aW9uc2hpcE5hbWUgb2YgT2JqZWN0LmtleXMoZGVmaW5pdGlvbnMpKSB7XG4gICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHJlc29sdmVGcm9udGVuZE1vZGVsQ2xhc3MocmVsYXRpb25zaGlwTW9kZWxDbGFzc2VzW3JlbGF0aW9uc2hpcE5hbWVdKVxuXG4gICAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSBjb250aW51ZVxuXG4gICAgZW50cmllc1tyZWxhdGlvbnNoaXBOYW1lXSA9IHt0YXJnZXRNb2RlbENsYXNzfVxuICB9XG5cbiAgcmV0dXJuIGVudHJpZXNcbn1cblxuLyoqXG4gKiBSdW5zIGF0dHJpYnV0ZSBlbnRyaWVzLlxuICogQHBhcmFtIHtSYW5zYWNrTW9kZWxDbGFzc30gbW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gQXR0cmlidXRlLXRvLWNvbHVtbiBlbnRyaWVzIGtleWVkIGJ5IGF0dHJpYnV0ZSBuYW1lLlxuICovXG5mdW5jdGlvbiBhdHRyaWJ1dGVFbnRyaWVzKG1vZGVsQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiAvKiogQHR5cGUgez99ICovIChtb2RlbENsYXNzKS5nZXRBdHRyaWJ1dGVOYW1lVG9Db2x1bW5OYW1lTWFwID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqLyAoKC8qKiBAdHlwZSB7P30gKi8gKG1vZGVsQ2xhc3MpLmdldEF0dHJpYnV0ZU5hbWVUb0NvbHVtbk5hbWVNYXAoKSkpXG4gIH1cblxuICBjb25zdCByZXNvdXJjZUNvbmZpZyA9IHR5cGVvZiAvKiogQHR5cGUgez99ICovIChtb2RlbENsYXNzKS5yZXNvdXJjZUNvbmZpZyA9PT0gXCJmdW5jdGlvblwiXG4gICAgPyAvKiogQHR5cGUgez99ICovIChtb2RlbENsYXNzKS5yZXNvdXJjZUNvbmZpZygpXG4gICAgOiB7fVxuICBjb25zdCBhdHRyaWJ1dGVzID0gcmVzb3VyY2VDb25maWcuYXR0cmlidXRlc1xuICAvKipcbiAgICogRW50cmllcy5cbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IGVudHJpZXMgPSB7fVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGF0dHJpYnV0ZXMpKSB7XG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGVOYW1lIG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmICh0eXBlb2YgYXR0cmlidXRlTmFtZSAhPT0gXCJzdHJpbmdcIikgY29udGludWVcblxuICAgICAgZW50cmllc1thdHRyaWJ1dGVOYW1lXSA9IGF0dHJpYnV0ZU5hbWVcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChhdHRyaWJ1dGVzKSkge1xuICAgIGZvciAoY29uc3QgYXR0cmlidXRlTmFtZSBvZiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKSkge1xuICAgICAgZW50cmllc1thdHRyaWJ1dGVOYW1lXSA9IGF0dHJpYnV0ZU5hbWVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZW50cmllc1xufVxuXG4vKipcbiAqIFJ1bnMgbWF0Y2hlcyBhdHRyaWJ1dGUgdmFsdWUuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5hdHRyaWJ1dGVOYW1lIC0gQXR0cmlidXRlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jb2x1bW5OYW1lIC0gQ29sdW1uIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy52YWx1ZSAtIENhbmRpZGF0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhlIGNhbmRpZGF0ZSByZXNvbHZlcyB0byB0aGUgYXR0cmlidXRlLlxuICovXG5mdW5jdGlvbiBtYXRjaGVzQXR0cmlidXRlVmFsdWUoe2F0dHJpYnV0ZU5hbWUsIGNvbHVtbk5hbWUsIHZhbHVlfSkge1xuICByZXR1cm4gdW5pcXVuaXplKFtcbiAgICBhdHRyaWJ1dGVOYW1lLFxuICAgIGNvbHVtbk5hbWUsXG4gICAgaW5mbGVjdGlvbi51bmRlcnNjb3JlKGF0dHJpYnV0ZU5hbWUpLFxuICAgIGluZmxlY3Rpb24udW5kZXJzY29yZShjb2x1bW5OYW1lKVxuICBdKS5pbmNsdWRlcyh2YWx1ZSlcbn1cblxuLyoqXG4gKiBSdW5zIHBhcnNlIHJhbnNhY2sga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFJhbnNhY2sga2V5LlxuICogQHJldHVybnMge3twYXRoVmFsdWU6IHN0cmluZywgcHJlZGljYXRlOiBSYW5zYWNrUHJlZGljYXRlfSB8IG51bGx9IC0gUGFyc2VkIGtleS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VSYW5zYWNrS2V5KGtleSkge1xuICBmb3IgKGNvbnN0IHByZWRpY2F0ZSBvZiBzdXBwb3J0ZWRQcmVkaWNhdGVzKSB7XG4gICAgY29uc3Qgc3VmZml4ID0gYF8ke3ByZWRpY2F0ZX1gXG4gICAgaWYgKCFrZXkuZW5kc1dpdGgoc3VmZml4KSkgY29udGludWVcblxuICAgIGNvbnN0IHBhdGhWYWx1ZSA9IGtleS5zbGljZSgwLCBrZXkubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aClcblxuICAgIGlmIChwYXRoVmFsdWUubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJhbnNhY2sga2V5OiAke2tleX1gKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwYXRoVmFsdWUsXG4gICAgICBwcmVkaWNhdGU6IC8qKiBAdHlwZSB7UmFuc2Fja1ByZWRpY2F0ZX0gKi8gKHByZWRpY2F0ZSlcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHByZWRpY2F0ZSBvZiBzdXBwb3J0ZWRQcmVkaWNhdGVzKSB7XG4gICAgY29uc3QgY2FtZWxTdWZmaXggPSBzbmFrZVRvQ2FtZWxTdWZmaXgocHJlZGljYXRlKVxuXG4gICAgaWYgKCFrZXkuZW5kc1dpdGgoY2FtZWxTdWZmaXgpKSBjb250aW51ZVxuXG4gICAgY29uc3QgcGF0aFZhbHVlID0ga2V5LnNsaWNlKDAsIGtleS5sZW5ndGggLSBjYW1lbFN1ZmZpeC5sZW5ndGgpXG5cbiAgICBpZiAocGF0aFZhbHVlLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByYW5zYWNrIGtleTogJHtrZXl9YClcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aFZhbHVlLFxuICAgICAgcHJlZGljYXRlOiAvKiogQHR5cGUge1JhbnNhY2tQcmVkaWNhdGV9ICovIChwcmVkaWNhdGUpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBSdW5zIHNuYWtlIHRvIGNhbWVsIHN1ZmZpeC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFNuYWtlLWNhc2UgcHJlZGljYXRlLlxuICogQHJldHVybnMge3N0cmluZ30gLSBDYW1lbENhc2UgcHJlZGljYXRlIHN1ZmZpeCB1c2VkIGluIHJhbnNhY2sga2V5cy5cbiAqL1xuZnVuY3Rpb24gc25ha2VUb0NhbWVsU3VmZml4KHZhbHVlKSB7XG4gIGNvbnN0IHNlZ21lbnRzID0gdmFsdWUuc3BsaXQoXCJfXCIpXG5cbiAgcmV0dXJuIHNlZ21lbnRzLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHNlZ21lbnQuc2xpY2UoMSkpLmpvaW4oXCJcIilcbn1cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSByYW5zYWNrIHZhbHVlLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICogQHBhcmFtIHtSYW5zYWNrUHJlZGljYXRlfSBhcmdzLnByZWRpY2F0ZSAtIFBhcnNlZCBwcmVkaWNhdGUuXG4gKiBAcGFyYW0gez99IGFyZ3MudmFsdWUgLSBSYXcgdmFsdWUuXG4gKiBAcmV0dXJucyB7P30gLSBOb3JtYWxpemVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSYW5zYWNrVmFsdWUoe3ByZWRpY2F0ZSwgdmFsdWV9KSB7XG4gIGlmIChwcmVkaWNhdGUgPT09IFwibnVsbFwiKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVJhbnNhY2tOdWxsVmFsdWUodmFsdWUpXG4gIH1cblxuICBpZiAocHJlZGljYXRlID09PSBcImluXCIgfHwgcHJlZGljYXRlID09PSBcIm5vdF9pblwiKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVJhbnNhY2tMaXN0VmFsdWUodmFsdWUpXG4gIH1cblxuICBpZiAocmFuc2Fja1ZhbHVlSXNCbGFuayh2YWx1ZSkpIHJldHVybiBTS0lQX1JBTlNBQ0tfQ09ORElUSU9OXG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgcmFuc2FjayBudWxsIHZhbHVlLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIENhbmRpZGF0ZSBudWxsIHByZWRpY2F0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtib29sZWFuIHwgdHlwZW9mIFNLSVBfUkFOU0FDS19DT05ESVRJT059IC0gTm9ybWFsaXplZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmFuc2Fja051bGxWYWx1ZSh2YWx1ZSkge1xuICBjb25zdCBib29sZWFuVmFsdWUgPSBub3JtYWxpemVSYW5zYWNrQm9vbGVhbih2YWx1ZSlcblxuICByZXR1cm4gYm9vbGVhblZhbHVlID09PSBudWxsID8gU0tJUF9SQU5TQUNLX0NPTkRJVElPTiA6IGJvb2xlYW5WYWx1ZVxufVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIHJhbnNhY2sgbGlzdCB2YWx1ZS5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgbGlzdCBwcmVkaWNhdGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7QXJyYXk8Pz4gfCB0eXBlb2YgU0tJUF9SQU5TQUNLX0NPTkRJVElPTn0gLSBOb3JtYWxpemVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSYW5zYWNrTGlzdFZhbHVlKHZhbHVlKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRBcnJheSA9IG5vcm1hbGl6ZVJhbnNhY2tBcnJheSh2YWx1ZSlcblxuICByZXR1cm4gbm9ybWFsaXplZEFycmF5Lmxlbmd0aCA8IDEgPyBTS0lQX1JBTlNBQ0tfQ09ORElUSU9OIDogbm9ybWFsaXplZEFycmF5XG59XG5cbi8qKlxuICogUmFuc2FjayB0cnVlIHZhbHVlcy5cbiAqIEB0eXBlIHtTZXQ8Pz59ICovXG5jb25zdCByYW5zYWNrVHJ1ZVZhbHVlcyA9IG5ldyBTZXQoW3RydWUsIDEsIFwiMVwiLCBcInRydWVcIl0pXG4vKipcbiAqIFJhbnNhY2sgZmFsc2UgdmFsdWVzLlxuICogQHR5cGUge1NldDw/Pn0gKi9cbmNvbnN0IHJhbnNhY2tGYWxzZVZhbHVlcyA9IG5ldyBTZXQoW2ZhbHNlLCAwLCBcIjBcIiwgXCJmYWxzZVwiXSlcblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSByYW5zYWNrIGJvb2xlYW4uXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gQ2FuZGlkYXRlIGJvb2xlYW4uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbiB8IG51bGx9IC0gTm9ybWFsaXplZCBib29sZWFuIG9yIG51bGwgd2hlbiBibGFuay5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmFuc2Fja0Jvb2xlYW4odmFsdWUpIHtcbiAgaWYgKHJhbnNhY2tUcnVlVmFsdWVzLmhhcyh2YWx1ZSkpIHJldHVybiB0cnVlXG4gIGlmIChyYW5zYWNrRmFsc2VWYWx1ZXMuaGFzKHZhbHVlKSkgcmV0dXJuIGZhbHNlXG4gIGlmIChyYW5zYWNrVmFsdWVJc0JsYW5rKHZhbHVlKSkgcmV0dXJuIG51bGxcblxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmFuc2FjayBib29sZWFuIHZhbHVlOiAke1N0cmluZyh2YWx1ZSl9YClcbn1cblxuLyoqXG4gKiBSdW5zIHJhbnNhY2sgdmFsdWUgaXMgYmxhbmsuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gQ2FuZGlkYXRlIHZhbHVlLlxuICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB2YWx1ZSBzaG91bGQgYmUgaWdub3JlZCBhcyBibGFuay5cbiAqL1xuZnVuY3Rpb24gcmFuc2Fja1ZhbHVlSXNCbGFuayh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIlxufVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIHJhbnNhY2sgYXJyYXkuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gQ2FuZGlkYXRlIGFycmF5LWlzaCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheTw/Pn0gLSBOb3JtYWxpemVkIGFycmF5IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmFuc2Fja0FycmF5KHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeSAhPT0gdW5kZWZpbmVkICYmIGVudHJ5ICE9PSBudWxsICYmIGVudHJ5ICE9PSBcIlwiKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdChcIixcIikubWFwKChlbnRyeSkgPT4gZW50cnkudHJpbSgpKS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5sZW5ndGggPiAwKVxuICB9XG5cbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHJldHVybiBbXVxuXG4gIHJldHVybiBbdmFsdWVdXG59XG5cbi8qKlxuICogUmFuc2Fja1NvcnQgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJhbnNhY2tTb3J0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXR0cmlidXRlIC0gUmVzb2x2ZWQgYXR0cmlidXRlIG5hbWUuXG4gKiBAcHJvcGVydHkge1wiYXNjXCIgfCBcImRlc2NcIn0gZGlyZWN0aW9uIC0gU29ydCBkaXJlY3Rpb24uXG4gKi9cblxuLyoqXG4gKiBQYXJzZXMgYW5kIHZhbGlkYXRlcyBhIHJhbnNhY2sgYHNgIHNvcnQgc3RyaW5nIGFnYWluc3QgbW9kZWwgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7UmFuc2Fja01vZGVsQ2xhc3N9IG1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcyBmb3IgYXR0cmlidXRlIHZhbGlkYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gc29ydFN0cmluZyAtIFJhbnNhY2sgc29ydCBzdHJpbmcgKGUuZy4sIFwibmFtZSBhc2NcIiBvciBcIm5hbWUgYXNjLCBjcmVhdGVkQXQgZGVzY1wiKS5cbiAqIEByZXR1cm5zIHtSYW5zYWNrU29ydFtdfSAtIFZhbGlkYXRlZCBzb3J0IGRlZmluaXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSYW5zYWNrU29ydChtb2RlbENsYXNzLCBzb3J0U3RyaW5nKSB7XG4gIGNvbnN0IHNlZ21lbnRzID0gc29ydFN0cmluZy5zcGxpdChcIixcIikubWFwKChzZWdtZW50KSA9PiBzZWdtZW50LnRyaW0oKSkuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50Lmxlbmd0aCA+IDApXG5cbiAgLyoqXG4gICAqIFNvcnRzLlxuICAgKiBAdHlwZSB7UmFuc2Fja1NvcnRbXX0gKi9cbiAgY29uc3Qgc29ydHMgPSBbXVxuXG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgIGNvbnN0IHBhcnRzID0gc2VnbWVudC5zcGxpdCgvXFxzKy8pXG4gICAgY29uc3QgY29sdW1uQ2FuZGlkYXRlID0gcGFydHNbMF1cbiAgICBjb25zdCBkaXJlY3Rpb25DYW5kaWRhdGUgPSBwYXJ0cy5sZW5ndGggPiAxID8gcGFydHNbMV0udG9Mb3dlckNhc2UoKSA6IFwiYXNjXCJcblxuICAgIGlmIChkaXJlY3Rpb25DYW5kaWRhdGUgIT09IFwiYXNjXCIgJiYgZGlyZWN0aW9uQ2FuZGlkYXRlICE9PSBcImRlc2NcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJhbnNhY2sgc29ydCBkaXJlY3Rpb24gXCIke2RpcmVjdGlvbkNhbmRpZGF0ZX1cIiBpbjogJHtzZWdtZW50fWApXG4gICAgfVxuXG4gICAgY29uc3QgcmVzb2x2ZWRBdHRyaWJ1dGUgPSByZXNvbHZlQXR0cmlidXRlTmFtZSh7bW9kZWxDbGFzcywgdmFsdWU6IGNvbHVtbkNhbmRpZGF0ZX0pXG5cbiAgICBpZiAoIXJlc29sdmVkQXR0cmlidXRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcmFuc2FjayBzb3J0IGF0dHJpYnV0ZSBcIiR7Y29sdW1uQ2FuZGlkYXRlfVwiIGZvciAke21vZGVsQ2xhc3MubmFtZX1gKVxuICAgIH1cblxuICAgIHNvcnRzLnB1c2goe2F0dHJpYnV0ZTogcmVzb2x2ZWRBdHRyaWJ1dGUsIGRpcmVjdGlvbjogZGlyZWN0aW9uQ2FuZGlkYXRlfSlcbiAgfVxuXG4gIHJldHVybiBzb3J0c1xufVxuXG4vKipcbiAqIFJ1bnMgdW5pcXVuaXplLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gdmFsdWVzIC0gSW5wdXQgdmFsdWVzLlxuICogQHJldHVybnMge3N0cmluZ1tdfSAtIFVuaXF1ZSB2YWx1ZXMgaW4gb3JpZ2luYWwgb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIHVuaXF1bml6ZSh2YWx1ZXMpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldCh2YWx1ZXMpKVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with-tracked-stack-async-hooks.d.ts","sourceRoot":"","sources":["../../../src/utils/with-tracked-stack-async-hooks.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"with-tracked-stack-async-hooks.d.ts","sourceRoot":"","sources":["../../../src/utils/with-tracked-stack-async-hooks.js"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,8CAFW,KAAK,QAiBf;AAED;;;;;GAKG;AACH,uCAJW,CAAC,MAAM,OAAO,CAAC,OAAC,CAAC,CAAC,GAAG,MAAM,SAC3B,CAAC,MAAM,OAAO,CAAC,OAAC,CAAC,CAAC,GAAG,KAAK,GACxB,OAAO,CAAC,OAAC,CAAC,CA6CtB"}
|
|
@@ -7,9 +7,7 @@ let asyncLocalStorage;
|
|
|
7
7
|
/**
|
|
8
8
|
* Tracked stack global.
|
|
9
9
|
* @type {{withTrackedStack?: {addTrackedStackToError: (error: Error) => void, withTrackedStack: (arg1: string | (() => Promise<?>), arg2?: (() => Promise<?>) | Error) => Promise<?>}}} */
|
|
10
|
-
const trackedStackGlobal = /**
|
|
11
|
-
* Narrows the runtime value to the documented type.
|
|
12
|
-
* @type {?} */ (globalThis);
|
|
10
|
+
const trackedStackGlobal = /** @type {?} */ (globalThis);
|
|
13
11
|
if (AsyncLocalStorage) {
|
|
14
12
|
asyncLocalStorage = new AsyncLocalStorage();
|
|
15
13
|
}
|
|
@@ -47,17 +45,11 @@ async function withTrackedStack(arg1, arg2) {
|
|
|
47
45
|
* @type {string} */
|
|
48
46
|
let stack;
|
|
49
47
|
if (typeof arg2 == "function" && typeof arg1 == "string") {
|
|
50
|
-
callback = /**
|
|
51
|
-
* Narrows the runtime value to the documented type.
|
|
52
|
-
* @type {() => Promise<?>} */
|
|
53
|
-
(arg2);
|
|
48
|
+
callback = /** @type {() => Promise<?>} */ (arg2);
|
|
54
49
|
stack = arg1;
|
|
55
50
|
}
|
|
56
51
|
else {
|
|
57
|
-
callback = /**
|
|
58
|
-
* Narrows the runtime value to the documented type.
|
|
59
|
-
* @type {() => Promise<?>} */
|
|
60
|
-
(arg1);
|
|
52
|
+
callback = /** @type {() => Promise<?>} */ (arg1);
|
|
61
53
|
stack = Error().stack || "";
|
|
62
54
|
}
|
|
63
55
|
// Not supported
|
|
@@ -86,4 +78,4 @@ else {
|
|
|
86
78
|
trackedStackGlobal.withTrackedStack = { addTrackedStackToError, withTrackedStack };
|
|
87
79
|
}
|
|
88
80
|
export { addTrackedStackToError, withTrackedStack };
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC10cmFja2VkLXN0YWNrLWFzeW5jLWhvb2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3dpdGgtdHJhY2tlZC1zdGFjay1hc3luYy1ob29rcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFFbEQ7O3VGQUV1RjtBQUN2RixJQUFJLGlCQUFpQixDQUFBO0FBRXJCOzsyTEFFMkw7QUFDM0wsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBRXhELElBQUksaUJBQWlCLEVBQUUsQ0FBQztJQUN0QixpQkFBaUIsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUE7QUFDN0MsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsc0JBQXNCLENBQUMsS0FBSztJQUNuQyxnQkFBZ0I7SUFDaEIsSUFBSSxDQUFDLGlCQUFpQjtRQUFFLE9BQU07SUFFOUIsTUFBTSxZQUFZLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFBO0lBQ3ZELE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFBO0lBRS9CLEtBQUssTUFBTSxXQUFXLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkMsS0FBSyxNQUFNLGVBQWUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUMxQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDNUMsQ0FBQztJQUNILENBQUM7SUFFRCwrREFBK0Q7SUFDL0QsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3ZELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSTtJQUN4Qzs7a0NBRThCO0lBQzlCLElBQUksUUFBUSxDQUFBO0lBRVo7O3dCQUVvQjtJQUNwQixJQUFJLEtBQUssQ0FBQTtJQUVULElBQUksT0FBTyxJQUFJLElBQUksVUFBVSxJQUFJLE9BQU8sSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ3pELFFBQVEsR0FBRywrQkFBK0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2pELEtBQUssR0FBRyxJQUFJLENBQUE7SUFDZCxDQUFDO1NBQU0sQ0FBQztRQUNOLFFBQVEsR0FBRywrQkFBK0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2pELEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFBO0lBQzdCLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsSUFBSSxDQUFDLGlCQUFpQjtRQUFFLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQTtJQUUvQyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFDdkQsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUE7SUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRTNDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLDBCQUEwQixDQUFBO0lBRWpELEtBQUssSUFBSSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNuRCxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUV0QyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFdkMsSUFBSSxTQUFTLElBQUksMEJBQTBCLEVBQUUsQ0FBQztZQUM1QyxNQUFLO1FBQ1AsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUE7SUFFekQsT0FBTyxNQUFNLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdkQsT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFBO0lBQ3pCLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELElBQUksa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUN4QyxPQUFPLENBQUMsSUFBSSxDQUFDLGlEQUFpRCxDQUFDLENBQUE7QUFDakUsQ0FBQztLQUFNLENBQUM7SUFDTixrQkFBa0IsQ0FBQyxnQkFBZ0IsR0FBRyxFQUFDLHNCQUFzQixFQUFFLGdCQUFnQixFQUFDLENBQUE7QUFDbEYsQ0FBQztBQUVELE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7QXN5bmNMb2NhbFN0b3JhZ2V9IGZyb20gXCJub2RlOmFzeW5jX2hvb2tzXCJcblxuLyoqXG4gKiBEZWZpbmVzIGFzeW5jTG9jYWxTdG9yYWdlLlxuICogQHR5cGUge2ltcG9ydChcIm5vZGU6YXN5bmNfaG9va3NcIikuQXN5bmNMb2NhbFN0b3JhZ2U8QXJyYXk8c3RyaW5nW10+PiB8IHVuZGVmaW5lZH0gKi9cbmxldCBhc3luY0xvY2FsU3RvcmFnZVxuXG4vKipcbiAqIFRyYWNrZWQgc3RhY2sgZ2xvYmFsLlxuICogQHR5cGUge3t3aXRoVHJhY2tlZFN0YWNrPzoge2FkZFRyYWNrZWRTdGFja1RvRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IHZvaWQsIHdpdGhUcmFja2VkU3RhY2s6IChhcmcxOiBzdHJpbmcgfCAoKCkgPT4gUHJvbWlzZTw/PiksIGFyZzI/OiAoKCkgPT4gUHJvbWlzZTw/PikgfCBFcnJvcikgPT4gUHJvbWlzZTw/Pn19fSAqL1xuY29uc3QgdHJhY2tlZFN0YWNrR2xvYmFsID0gLyoqIEB0eXBlIHs/fSAqLyAoZ2xvYmFsVGhpcylcblxuaWYgKEFzeW5jTG9jYWxTdG9yYWdlKSB7XG4gIGFzeW5jTG9jYWxTdG9yYWdlID0gbmV3IEFzeW5jTG9jYWxTdG9yYWdlKClcbn1cblxuLyoqXG4gKiBSdW5zIGFkZCB0cmFja2VkIHN0YWNrIHRvIGVycm9yLlxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgLSBFcnJvciB0byBhbm5vdGF0ZSB3aXRoIGEgdHJhY2tlZCBzdGFjay5cbiAqL1xuZnVuY3Rpb24gYWRkVHJhY2tlZFN0YWNrVG9FcnJvcihlcnJvcikge1xuICAvLyBOb3Qgc3VwcG9ydGVkXG4gIGlmICghYXN5bmNMb2NhbFN0b3JhZ2UpIHJldHVyblxuXG4gIGNvbnN0IHBhcmVudFN0YWNrcyA9IGFzeW5jTG9jYWxTdG9yYWdlLmdldFN0b3JlKCkgfHwgW11cbiAgY29uc3QgYWRkaXRpb25hbFN0YWNrTGluZXMgPSBbXVxuXG4gIGZvciAoY29uc3QgcGFyZW50U3RhY2sgb2YgcGFyZW50U3RhY2tzKSB7XG4gICAgZm9yIChjb25zdCBwYXJlbnRTdGFja0xpbmUgb2YgcGFyZW50U3RhY2spIHtcbiAgICAgIGFkZGl0aW9uYWxTdGFja0xpbmVzLnB1c2gocGFyZW50U3RhY2tMaW5lKVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlcGxhY2UgdGhlIGVycm9yIG1lc3NhZ2Ugb24gdGhlIGZpcnN0IGxpbmUgd2l0aCB0aGlzIHN0cmluZ1xuICBlcnJvci5zdGFjayArPSBcIlxcblwiICsgYWRkaXRpb25hbFN0YWNrTGluZXMuam9pbihcIlxcblwiKVxufVxuXG4vKipcbiAqIFJ1bnMgd2l0aCB0cmFja2VkIHN0YWNrLlxuICogQHBhcmFtIHsoKCkgPT4gUHJvbWlzZTw/PikgfCBzdHJpbmd9IGFyZzEgLSBBcmcxLlxuICogQHBhcmFtIHsoKCkgPT4gUHJvbWlzZTw/PikgfCBFcnJvcn0gW2FyZzJdIC0gQXJnMi5cbiAqIEByZXR1cm5zIHtQcm9taXNlPD8+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNhbGxiYWNrIHJlc3VsdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2l0aFRyYWNrZWRTdGFjayhhcmcxLCBhcmcyKSB7XG4gIC8qKlxuICAgKiBEZWZpbmVzIGNhbGxiYWNrLlxuICAgKiBAdHlwZSB7KCkgPT4gUHJvbWlzZTw/Pn0gKi9cbiAgbGV0IGNhbGxiYWNrXG5cbiAgLyoqXG4gICAqIERlZmluZXMgc3RhY2suXG4gICAqIEB0eXBlIHtzdHJpbmd9ICovXG4gIGxldCBzdGFja1xuXG4gIGlmICh0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIGFyZzEgPT0gXCJzdHJpbmdcIikge1xuICAgIGNhbGxiYWNrID0gLyoqIEB0eXBlIHsoKSA9PiBQcm9taXNlPD8+fSAqLyAoYXJnMilcbiAgICBzdGFjayA9IGFyZzFcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjayA9IC8qKiBAdHlwZSB7KCkgPT4gUHJvbWlzZTw/Pn0gKi8gKGFyZzEpXG4gICAgc3RhY2sgPSBFcnJvcigpLnN0YWNrIHx8IFwiXCJcbiAgfVxuXG4gIC8vIE5vdCBzdXBwb3J0ZWRcbiAgaWYgKCFhc3luY0xvY2FsU3RvcmFnZSkgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKClcblxuICBjb25zdCBwYXJlbnRTdGFja3MgPSBhc3luY0xvY2FsU3RvcmFnZS5nZXRTdG9yZSgpIHx8IFtdXG4gIGNvbnN0IGFkZGl0aW9uYWxTdGFja0xpbmVzID0gW11cbiAgY29uc3QgY3VycmVudFN0YWNrTGluZXMgPSBzdGFjay5zcGxpdChcIlxcblwiKVxuXG4gIGN1cnJlbnRTdGFja0xpbmVzWzBdID0gXCIgICAgW1dJVEggVFJBQ0tFRCBTVEFDS11cIlxuXG4gIGZvciAobGV0IGkgPSBjdXJyZW50U3RhY2tMaW5lcy5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3Qgc3RhY2tMaW5lID0gY3VycmVudFN0YWNrTGluZXNbaV1cblxuICAgIGFkZGl0aW9uYWxTdGFja0xpbmVzLnVuc2hpZnQoc3RhY2tMaW5lKVxuXG4gICAgaWYgKHN0YWNrTGluZSA9PSBcIiAgICBbV0lUSCBUUkFDS0VEIFNUQUNLXVwiKSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5ld1N0YWNrcyA9IFthZGRpdGlvbmFsU3RhY2tMaW5lcywgLi4ucGFyZW50U3RhY2tzXVxuXG4gIHJldHVybiBhd2FpdCBhc3luY0xvY2FsU3RvcmFnZS5ydW4obmV3U3RhY2tzLCBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKClcbiAgfSlcbn1cblxuaWYgKHRyYWNrZWRTdGFja0dsb2JhbC53aXRoVHJhY2tlZFN0YWNrKSB7XG4gIGNvbnNvbGUud2FybihcImdsb2JhbFRoaXMud2l0aFRyYWNrZWRTdGFjayB3YXMgYWxyZWFkeSBkZWZpbmVkXCIpXG59IGVsc2Uge1xuICB0cmFja2VkU3RhY2tHbG9iYWwud2l0aFRyYWNrZWRTdGFjayA9IHthZGRUcmFja2VkU3RhY2tUb0Vycm9yLCB3aXRoVHJhY2tlZFN0YWNrfVxufVxuXG5leHBvcnQge2FkZFRyYWNrZWRTdGFja1RvRXJyb3IsIHdpdGhUcmFja2VkU3RhY2t9XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with-tracked-stack.d.ts","sourceRoot":"","sources":["../../../src/utils/with-tracked-stack.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"with-tracked-stack.d.ts","sourceRoot":"","sources":["../../../src/utils/with-tracked-stack.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH,8CAFW,KAAK,QAIf;AAED;;;;;GAKG;AACH,kDAJW,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,OAAC,CAAC,CAAC,aAC3B,CAAC,MAAM,OAAO,CAAC,OAAC,CAAC,CAAC,GAChB,OAAO,CAAC,OAAC,CAAC,CAYtB"}
|
|
@@ -2,9 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Tracked stack global.
|
|
4
4
|
* @type {{withTrackedStack?: {withTrackedStack?: (stack: string | undefined, fn: () => Promise<?>) => Promise<?>, addTrackedStackToError?: (error: Error) => void}}} */
|
|
5
|
-
const trackedStackGlobal = /**
|
|
6
|
-
* Narrows the runtime value to the documented type.
|
|
7
|
-
* @type {?} */ (globalThis);
|
|
5
|
+
const trackedStackGlobal = /** @type {?} */ (globalThis);
|
|
8
6
|
/**
|
|
9
7
|
* Runs add tracked stack to error.
|
|
10
8
|
* @param {Error} error - Error to annotate with a tracked stack.
|
|
@@ -20,10 +18,7 @@ function addTrackedStackToError(error) {
|
|
|
20
18
|
*/
|
|
21
19
|
async function withTrackedStack(stackOrCallback, callback) {
|
|
22
20
|
const tracked = trackedStackGlobal.withTrackedStack?.withTrackedStack;
|
|
23
|
-
const resolvedCallback = callback ?? /**
|
|
24
|
-
* Narrows the runtime value to the documented type.
|
|
25
|
-
* @type {() => Promise<?>} */
|
|
26
|
-
(stackOrCallback);
|
|
21
|
+
const resolvedCallback = callback ?? /** @type {() => Promise<?>} */ (stackOrCallback);
|
|
27
22
|
const stack = typeof stackOrCallback == "string" ? stackOrCallback : undefined;
|
|
28
23
|
if (tracked) {
|
|
29
24
|
return await tracked(stack, resolvedCallback);
|
|
@@ -31,4 +26,4 @@ async function withTrackedStack(stackOrCallback, callback) {
|
|
|
31
26
|
return await resolvedCallback();
|
|
32
27
|
}
|
|
33
28
|
export { addTrackedStackToError, withTrackedStack };
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC10cmFja2VkLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3dpdGgtdHJhY2tlZC1zdGFjay5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVo7O3dLQUV3SztBQUN4SyxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLENBQUMsVUFBVSxDQUFDLENBQUE7QUFFeEQ7OztHQUdHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxLQUFLO0lBQ25DLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDdEUsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsS0FBSyxVQUFVLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxRQUFRO0lBQ3ZELE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFBO0lBQ3JFLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxJQUFJLCtCQUErQixDQUFDLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDdEYsTUFBTSxLQUFLLEdBQUcsT0FBTyxlQUFlLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUU5RSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ1osT0FBTyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRUQsT0FBTyxNQUFNLGdCQUFnQixFQUFFLENBQUE7QUFDakMsQ0FBQztBQUVELE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogVHJhY2tlZCBzdGFjayBnbG9iYWwuXG4gKiBAdHlwZSB7e3dpdGhUcmFja2VkU3RhY2s/OiB7d2l0aFRyYWNrZWRTdGFjaz86IChzdGFjazogc3RyaW5nIHwgdW5kZWZpbmVkLCBmbjogKCkgPT4gUHJvbWlzZTw/PikgPT4gUHJvbWlzZTw/PiwgYWRkVHJhY2tlZFN0YWNrVG9FcnJvcj86IChlcnJvcjogRXJyb3IpID0+IHZvaWR9fX0gKi9cbmNvbnN0IHRyYWNrZWRTdGFja0dsb2JhbCA9IC8qKiBAdHlwZSB7P30gKi8gKGdsb2JhbFRoaXMpXG5cbi8qKlxuICogUnVucyBhZGQgdHJhY2tlZCBzdGFjayB0byBlcnJvci5cbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIC0gRXJyb3IgdG8gYW5ub3RhdGUgd2l0aCBhIHRyYWNrZWQgc3RhY2suXG4gKi9cbmZ1bmN0aW9uIGFkZFRyYWNrZWRTdGFja1RvRXJyb3IoZXJyb3IpIHtcbiAgdHJhY2tlZFN0YWNrR2xvYmFsLndpdGhUcmFja2VkU3RhY2s/LmFkZFRyYWNrZWRTdGFja1RvRXJyb3I/LihlcnJvcilcbn1cblxuLyoqXG4gKiBSdW5zIHdpdGggdHJhY2tlZCBzdGFjay5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgKCgpID0+IFByb21pc2U8Pz4pfSBzdGFja09yQ2FsbGJhY2sgLSBTdGFjayBzdHJpbmcgb3IgY2FsbGJhY2suXG4gKiBAcGFyYW0geygoKSA9PiBQcm9taXNlPD8+KX0gW2NhbGxiYWNrXSAtIENhbGxiYWNrIHRvIGV4ZWN1dGUuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTw/Pn0gLSBSZXNvbHZlcyB3aXRoIHZhbHVlLlxuICovXG5hc3luYyBmdW5jdGlvbiB3aXRoVHJhY2tlZFN0YWNrKHN0YWNrT3JDYWxsYmFjaywgY2FsbGJhY2spIHtcbiAgY29uc3QgdHJhY2tlZCA9IHRyYWNrZWRTdGFja0dsb2JhbC53aXRoVHJhY2tlZFN0YWNrPy53aXRoVHJhY2tlZFN0YWNrXG4gIGNvbnN0IHJlc29sdmVkQ2FsbGJhY2sgPSBjYWxsYmFjayA/PyAvKiogQHR5cGUgeygpID0+IFByb21pc2U8Pz59ICovIChzdGFja09yQ2FsbGJhY2spXG4gIGNvbnN0IHN0YWNrID0gdHlwZW9mIHN0YWNrT3JDYWxsYmFjayA9PSBcInN0cmluZ1wiID8gc3RhY2tPckNhbGxiYWNrIDogdW5kZWZpbmVkXG5cbiAgaWYgKHRyYWNrZWQpIHtcbiAgICByZXR1cm4gYXdhaXQgdHJhY2tlZChzdGFjaywgcmVzb2x2ZWRDYWxsYmFjaylcbiAgfVxuXG4gIHJldHVybiBhd2FpdCByZXNvbHZlZENhbGxiYWNrKClcbn1cblxuZXhwb3J0IHthZGRUcmFja2VkU3RhY2tUb0Vycm9yLCB3aXRoVHJhY2tlZFN0YWNrfVxuIl19
|