velocious 1.0.449 → 1.0.451
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/application.js +4 -4
- package/build/authorization/ability.js +8 -8
- package/build/authorization/base-resource.js +4 -4
- package/build/background-jobs/cron-expression.js +1 -1
- package/build/background-jobs/forked-runner-child.js +1 -1
- package/build/background-jobs/job-registry.js +1 -1
- package/build/background-jobs/job-runner.js +1 -1
- package/build/background-jobs/job.js +1 -1
- package/build/background-jobs/json-socket.js +4 -4
- package/build/background-jobs/main.js +21 -21
- package/build/background-jobs/scheduler.js +7 -7
- package/build/background-jobs/store.js +7 -7
- package/build/background-jobs/web/controller.js +2 -2
- package/build/background-jobs/worker.js +12 -12
- package/build/beacon/client.js +11 -8
- package/build/beacon/in-process-broker.js +2 -2
- package/build/beacon/in-process-client.js +2 -2
- package/build/beacon/server.js +3 -3
- package/build/cli/browser-cli.js +1 -1
- package/build/cli/commands/db/base-command.js +2 -2
- package/build/cli/index.js +2 -2
- package/build/cli/tenant-database-command-helper.js +3 -3
- package/build/cli/use-browser-cli.js +1 -1
- package/build/configuration-types.js +3 -1
- package/build/configuration.js +38 -38
- package/build/controller.js +8 -8
- package/build/current-configuration.js +1 -1
- package/build/database/annotations-async-hooks.js +2 -2
- package/build/database/annotations.js +3 -3
- package/build/database/drivers/base-column.js +1 -1
- package/build/database/drivers/base-foreign-key.js +1 -1
- package/build/database/drivers/base-table.js +1 -1
- package/build/database/drivers/base.js +10 -10
- package/build/database/drivers/mssql/index.js +1 -1
- package/build/database/drivers/mssql/table.js +1 -1
- package/build/database/drivers/mysql/index.js +3 -3
- package/build/database/drivers/mysql/query.js +1 -1
- package/build/database/drivers/mysql/table.js +1 -1
- package/build/database/drivers/pgsql/index.js +2 -2
- package/build/database/drivers/sqlite/base.js +16 -16
- package/build/database/drivers/sqlite/index.js +11 -11
- package/build/database/drivers/sqlite/index.native.js +1 -1
- package/build/database/drivers/sqlite/index.web.js +3 -3
- package/build/database/drivers/sqlite/query.js +1 -1
- package/build/database/drivers/sqlite/query.web.js +1 -1
- package/build/database/drivers/sqlite/sql/alter-table.js +2 -2
- package/build/database/drivers/sqlite/table.js +1 -1
- package/build/database/migrator/files-finder.js +1 -1
- package/build/database/migrator.js +6 -6
- package/build/database/pool/async-tracked-multi-connection.js +27 -27
- package/build/database/pool/base-methods-forward.js +4 -4
- package/build/database/pool/base.js +8 -8
- package/build/database/query/from-base.js +1 -1
- package/build/database/query/index.js +10 -10
- package/build/database/query/join-object.js +3 -3
- package/build/database/query/model-class-query.js +39 -39
- package/build/database/query/preloader/belongs-to.js +22 -22
- package/build/database/query/preloader/has-many.js +20 -20
- package/build/database/query/preloader/has-one.js +8 -8
- package/build/database/query/preloader/selection.js +3 -3
- package/build/database/query/preloader.js +8 -8
- package/build/database/query/query-data.js +9 -9
- package/build/database/query/where-model-class-hash.js +7 -7
- package/build/database/query/with-count.js +9 -9
- package/build/database/record/acts-as-list.js +15 -15
- package/build/database/record/attachments/handle.js +2 -2
- package/build/database/record/attachments/normalize-input.js +12 -12
- package/build/database/record/attachments/storage-drivers/s3.js +6 -6
- package/build/database/record/attachments/store.js +13 -13
- package/build/database/record/index.js +115 -121
- package/build/database/record/instance-relationships/base.js +11 -11
- package/build/database/record/instance-relationships/belongs-to.js +3 -3
- package/build/database/record/instance-relationships/has-many.js +8 -8
- package/build/database/record/instance-relationships/has-one.js +7 -7
- package/build/database/record/relationships/base.js +2 -2
- package/build/database/record/state-machine.js +7 -7
- package/build/database/record/validators/presence.js +1 -1
- package/build/database/record/validators/uniqueness.js +5 -5
- package/build/database/table-data/index.js +4 -4
- package/build/environment-handlers/base.js +2 -2
- package/build/environment-handlers/browser.js +7 -7
- package/build/environment-handlers/node/cli/commands/cli-command-context.js +1 -1
- package/build/environment-handlers/node/cli/commands/console.js +4 -4
- package/build/environment-handlers/node/cli/commands/db/schema/dump.js +1 -1
- package/build/environment-handlers/node/cli/commands/db/schema/load.js +3 -3
- package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +836 -60
- package/build/environment-handlers/node.js +6 -6
- package/build/frontend-model-controller.js +81 -82
- package/build/frontend-model-resource/base-resource.js +78 -115
- package/build/frontend-models/base.js +162 -149
- package/build/frontend-models/clear-pending-debounced-callback.js +1 -1
- package/build/frontend-models/event-hook-models.js +2 -2
- package/build/frontend-models/outgoing-event-buffer.js +2 -2
- package/build/frontend-models/preloader.js +5 -5
- package/build/frontend-models/query.js +43 -38
- package/build/frontend-models/resource-definition.js +6 -6
- package/build/frontend-models/transport-serialization.js +11 -11
- package/build/frontend-models/use-destroyed-event.js +10 -10
- package/build/frontend-models/use-model-class-event.js +11 -11
- package/build/frontend-models/use-updated-event.js +11 -11
- package/build/frontend-models/websocket-channel.js +26 -17
- package/build/frontend-models/websocket-publishers.js +9 -9
- package/build/http-client/response.js +2 -2
- package/build/http-server/client/index.js +8 -8
- package/build/http-server/client/params-to-object.js +10 -10
- package/build/http-server/client/request-buffer/form-data-part.js +2 -2
- package/build/http-server/client/request-buffer/index.js +8 -8
- package/build/http-server/client/request-parser.js +3 -3
- package/build/http-server/client/request-runner.js +6 -6
- package/build/http-server/client/request-timing.js +5 -5
- package/build/http-server/client/request.js +1 -1
- package/build/http-server/client/response.js +5 -5
- package/build/http-server/client/websocket-request.js +4 -4
- package/build/http-server/client/websocket-session.js +18 -18
- package/build/http-server/development-reloader.js +5 -5
- package/build/http-server/index.js +12 -12
- package/build/http-server/remote-address.js +4 -4
- package/build/http-server/server-client.js +3 -3
- package/build/http-server/server-lock.js +4 -4
- package/build/http-server/websocket-channel-subscribers.js +3 -3
- package/build/http-server/websocket-channel.js +1 -1
- package/build/http-server/websocket-connection.js +1 -1
- package/build/http-server/websocket-event-log-store.js +6 -6
- package/build/http-server/websocket-events-host.js +2 -2
- package/build/http-server/worker-handler/in-process.js +7 -7
- package/build/http-server/worker-handler/index.js +4 -4
- package/build/http-server/worker-handler/worker-thread.js +3 -3
- package/build/logger/outputs/array-output.js +3 -3
- package/build/logger/outputs/console-output.js +1 -1
- package/build/logger/outputs/file-output.js +4 -4
- package/build/logger/outputs/stdout-output.js +1 -1
- package/build/logger.js +10 -10
- package/build/mailer/backends/smtp.js +3 -3
- package/build/mailer/base.js +8 -8
- package/build/mailer/delivery.js +4 -4
- package/build/plugins/sqljs-wasm-route-controller.js +1 -1
- package/build/routes/base-route.js +6 -6
- package/build/routes/basic-route.js +1 -1
- package/build/routes/hooks/frontend-model-command-route-hook.js +1 -1
- package/build/routes/index.js +1 -1
- package/build/routes/plugin-routes.js +1 -1
- package/build/routes/resolver.js +11 -11
- package/build/routes/resource-route.js +1 -1
- package/build/src/application.d.ts +3 -3
- package/build/src/application.d.ts.map +1 -1
- package/build/src/application.js +5 -5
- package/build/src/authorization/ability.d.ts +7 -7
- package/build/src/authorization/ability.d.ts.map +1 -1
- package/build/src/authorization/ability.js +9 -9
- package/build/src/authorization/base-resource.d.ts +1 -1
- package/build/src/authorization/base-resource.d.ts.map +1 -1
- package/build/src/authorization/base-resource.js +5 -5
- package/build/src/background-jobs/cron-expression.js +2 -2
- package/build/src/background-jobs/forked-runner-child.js +2 -2
- package/build/src/background-jobs/job-registry.d.ts +1 -1
- package/build/src/background-jobs/job-registry.d.ts.map +1 -1
- package/build/src/background-jobs/job-registry.js +2 -2
- package/build/src/background-jobs/job-runner.js +2 -2
- package/build/src/background-jobs/job.js +2 -2
- package/build/src/background-jobs/json-socket.d.ts +4 -4
- package/build/src/background-jobs/json-socket.d.ts.map +1 -1
- package/build/src/background-jobs/json-socket.js +5 -5
- package/build/src/background-jobs/main.d.ts +18 -18
- package/build/src/background-jobs/main.d.ts.map +1 -1
- package/build/src/background-jobs/main.js +22 -22
- package/build/src/background-jobs/scheduler.d.ts +5 -5
- package/build/src/background-jobs/scheduler.d.ts.map +1 -1
- package/build/src/background-jobs/scheduler.js +8 -8
- package/build/src/background-jobs/store.js +8 -8
- package/build/src/background-jobs/web/controller.js +3 -3
- package/build/src/background-jobs/worker.d.ts +6 -6
- package/build/src/background-jobs/worker.d.ts.map +1 -1
- package/build/src/background-jobs/worker.js +13 -13
- package/build/src/beacon/client.d.ts +4 -4
- package/build/src/beacon/client.d.ts.map +1 -1
- package/build/src/beacon/client.js +12 -9
- package/build/src/beacon/in-process-broker.d.ts.map +1 -1
- package/build/src/beacon/in-process-broker.js +3 -3
- package/build/src/beacon/in-process-client.d.ts +1 -1
- package/build/src/beacon/in-process-client.d.ts.map +1 -1
- package/build/src/beacon/in-process-client.js +3 -3
- package/build/src/beacon/server.d.ts +2 -2
- package/build/src/beacon/server.d.ts.map +1 -1
- package/build/src/beacon/server.js +4 -4
- package/build/src/cli/browser-cli.js +2 -2
- package/build/src/cli/commands/db/base-command.d.ts +2 -2
- package/build/src/cli/commands/db/base-command.d.ts.map +1 -1
- package/build/src/cli/commands/db/base-command.js +3 -3
- package/build/src/cli/index.js +3 -3
- package/build/src/cli/tenant-database-command-helper.d.ts +1 -1
- package/build/src/cli/tenant-database-command-helper.d.ts.map +1 -1
- package/build/src/cli/tenant-database-command-helper.js +4 -4
- package/build/src/cli/use-browser-cli.js +2 -2
- package/build/src/configuration-types.d.ts +12 -2
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +4 -2
- package/build/src/configuration.d.ts +14 -14
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +39 -39
- package/build/src/controller.js +10 -10
- package/build/src/current-configuration.js +2 -2
- package/build/src/database/annotations-async-hooks.js +3 -3
- package/build/src/database/annotations.d.ts.map +1 -1
- package/build/src/database/annotations.js +4 -4
- package/build/src/database/drivers/base-column.d.ts +1 -1
- package/build/src/database/drivers/base-column.d.ts.map +1 -1
- package/build/src/database/drivers/base-column.js +2 -2
- package/build/src/database/drivers/base-foreign-key.d.ts +1 -1
- package/build/src/database/drivers/base-foreign-key.d.ts.map +1 -1
- package/build/src/database/drivers/base-foreign-key.js +2 -2
- package/build/src/database/drivers/base-table.d.ts +1 -1
- package/build/src/database/drivers/base-table.d.ts.map +1 -1
- package/build/src/database/drivers/base-table.js +2 -2
- package/build/src/database/drivers/base.d.ts +6 -6
- package/build/src/database/drivers/base.d.ts.map +1 -1
- package/build/src/database/drivers/base.js +11 -11
- package/build/src/database/drivers/mssql/index.js +2 -2
- package/build/src/database/drivers/mssql/table.js +2 -2
- package/build/src/database/drivers/mysql/index.js +4 -4
- package/build/src/database/drivers/mysql/query.js +2 -2
- package/build/src/database/drivers/mysql/table.js +2 -2
- package/build/src/database/drivers/pgsql/index.js +3 -3
- package/build/src/database/drivers/sqlite/base.d.ts +3 -3
- package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/base.js +17 -17
- package/build/src/database/drivers/sqlite/index.d.ts +4 -4
- package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/index.js +12 -12
- package/build/src/database/drivers/sqlite/index.native.js +2 -2
- package/build/src/database/drivers/sqlite/index.web.d.ts +2 -2
- package/build/src/database/drivers/sqlite/index.web.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/index.web.js +4 -4
- package/build/src/database/drivers/sqlite/query.js +2 -2
- package/build/src/database/drivers/sqlite/query.web.js +2 -2
- package/build/src/database/drivers/sqlite/sql/alter-table.js +3 -3
- package/build/src/database/drivers/sqlite/table.js +2 -2
- package/build/src/database/migrator/files-finder.js +2 -2
- package/build/src/database/migrator.d.ts +1 -1
- package/build/src/database/migrator.d.ts.map +1 -1
- package/build/src/database/migrator.js +7 -7
- package/build/src/database/pool/async-tracked-multi-connection.d.ts +9 -9
- package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
- package/build/src/database/pool/async-tracked-multi-connection.js +28 -28
- package/build/src/database/pool/base-methods-forward.js +7 -7
- package/build/src/database/pool/base.d.ts +1 -1
- package/build/src/database/pool/base.d.ts.map +1 -1
- package/build/src/database/pool/base.js +9 -9
- package/build/src/database/query/from-base.d.ts +1 -1
- package/build/src/database/query/from-base.d.ts.map +1 -1
- package/build/src/database/query/from-base.js +2 -2
- package/build/src/database/query/index.d.ts +4 -4
- package/build/src/database/query/index.d.ts.map +1 -1
- package/build/src/database/query/index.js +11 -11
- package/build/src/database/query/join-object.js +4 -4
- package/build/src/database/query/model-class-query.d.ts +4 -4
- package/build/src/database/query/model-class-query.d.ts.map +1 -1
- package/build/src/database/query/model-class-query.js +40 -40
- package/build/src/database/query/preloader/belongs-to.js +23 -23
- package/build/src/database/query/preloader/has-many.js +21 -21
- package/build/src/database/query/preloader/has-one.js +9 -9
- package/build/src/database/query/preloader/selection.js +4 -4
- package/build/src/database/query/preloader.js +9 -9
- package/build/src/database/query/query-data.js +10 -10
- package/build/src/database/query/where-model-class-hash.js +8 -8
- package/build/src/database/query/with-count.js +10 -10
- package/build/src/database/record/acts-as-list.js +20 -20
- package/build/src/database/record/attachments/handle.d.ts +1 -1
- package/build/src/database/record/attachments/handle.d.ts.map +1 -1
- package/build/src/database/record/attachments/handle.js +3 -3
- package/build/src/database/record/attachments/normalize-input.js +15 -15
- package/build/src/database/record/attachments/storage-drivers/s3.js +7 -7
- package/build/src/database/record/attachments/store.d.ts +2 -2
- package/build/src/database/record/attachments/store.d.ts.map +1 -1
- package/build/src/database/record/attachments/store.js +14 -14
- package/build/src/database/record/index.d.ts +18 -25
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +135 -141
- package/build/src/database/record/instance-relationships/base.d.ts +3 -3
- package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/base.js +13 -13
- package/build/src/database/record/instance-relationships/belongs-to.js +4 -4
- package/build/src/database/record/instance-relationships/has-many.js +9 -9
- package/build/src/database/record/instance-relationships/has-one.d.ts +1 -1
- package/build/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/has-one.js +8 -8
- package/build/src/database/record/relationships/base.js +4 -4
- package/build/src/database/record/state-machine.js +8 -8
- package/build/src/database/record/validators/presence.js +2 -2
- package/build/src/database/record/validators/uniqueness.js +6 -6
- package/build/src/database/table-data/index.d.ts +4 -4
- package/build/src/database/table-data/index.d.ts.map +1 -1
- package/build/src/database/table-data/index.js +5 -5
- package/build/src/environment-handlers/base.js +3 -3
- package/build/src/environment-handlers/browser.d.ts +3 -3
- package/build/src/environment-handlers/browser.d.ts.map +1 -1
- package/build/src/environment-handlers/browser.js +8 -8
- package/build/src/environment-handlers/node/cli/commands/cli-command-context.js +2 -2
- package/build/src/environment-handlers/node/cli/commands/console.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/console.js +5 -5
- package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts +1 -1
- package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/db/schema/dump.js +2 -2
- package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts +1 -1
- 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 +4 -4
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +285 -12
- 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 +712 -61
- package/build/src/environment-handlers/node.d.ts +2 -2
- package/build/src/environment-handlers/node.d.ts.map +1 -1
- package/build/src/environment-handlers/node.js +7 -7
- package/build/src/frontend-model-controller.d.ts +5 -6
- package/build/src/frontend-model-controller.d.ts.map +1 -1
- package/build/src/frontend-model-controller.js +88 -89
- package/build/src/frontend-model-resource/base-resource.d.ts +36 -27
- package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/base-resource.js +67 -120
- package/build/src/frontend-models/base.d.ts +67 -59
- package/build/src/frontend-models/base.d.ts.map +1 -1
- package/build/src/frontend-models/base.js +171 -158
- package/build/src/frontend-models/clear-pending-debounced-callback.js +2 -2
- package/build/src/frontend-models/event-hook-models.d.ts.map +1 -1
- package/build/src/frontend-models/event-hook-models.js +3 -3
- package/build/src/frontend-models/outgoing-event-buffer.d.ts +1 -1
- package/build/src/frontend-models/outgoing-event-buffer.d.ts.map +1 -1
- package/build/src/frontend-models/outgoing-event-buffer.js +3 -3
- package/build/src/frontend-models/preloader.js +6 -6
- package/build/src/frontend-models/query.d.ts +16 -8
- package/build/src/frontend-models/query.d.ts.map +1 -1
- package/build/src/frontend-models/query.js +43 -39
- package/build/src/frontend-models/resource-definition.js +7 -7
- package/build/src/frontend-models/transport-serialization.js +12 -12
- package/build/src/frontend-models/use-destroyed-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-destroyed-event.js +11 -11
- package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-model-class-event.js +12 -12
- package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-updated-event.js +12 -12
- package/build/src/frontend-models/websocket-channel.d.ts +6 -1
- package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-channel.js +26 -18
- package/build/src/frontend-models/websocket-publishers.js +11 -11
- package/build/src/http-client/response.d.ts +2 -2
- package/build/src/http-client/response.d.ts.map +1 -1
- package/build/src/http-client/response.js +3 -3
- package/build/src/http-server/client/index.d.ts +1 -1
- package/build/src/http-server/client/index.d.ts.map +1 -1
- package/build/src/http-server/client/index.js +9 -9
- package/build/src/http-server/client/params-to-object.js +11 -11
- package/build/src/http-server/client/request-buffer/form-data-part.d.ts +2 -2
- package/build/src/http-server/client/request-buffer/form-data-part.d.ts.map +1 -1
- package/build/src/http-server/client/request-buffer/form-data-part.js +3 -3
- package/build/src/http-server/client/request-buffer/index.d.ts +4 -4
- package/build/src/http-server/client/request-buffer/index.d.ts.map +1 -1
- package/build/src/http-server/client/request-buffer/index.js +9 -9
- package/build/src/http-server/client/request-parser.d.ts +1 -1
- package/build/src/http-server/client/request-parser.d.ts.map +1 -1
- package/build/src/http-server/client/request-parser.js +4 -4
- package/build/src/http-server/client/request-runner.js +7 -7
- package/build/src/http-server/client/request-timing.d.ts +5 -5
- package/build/src/http-server/client/request-timing.d.ts.map +1 -1
- package/build/src/http-server/client/request-timing.js +6 -6
- package/build/src/http-server/client/request.js +2 -2
- package/build/src/http-server/client/response.d.ts +3 -3
- package/build/src/http-server/client/response.d.ts.map +1 -1
- package/build/src/http-server/client/response.js +6 -6
- package/build/src/http-server/client/websocket-request.d.ts +3 -3
- package/build/src/http-server/client/websocket-request.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-request.js +5 -5
- package/build/src/http-server/client/websocket-session.d.ts +6 -6
- package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-session.js +19 -19
- package/build/src/http-server/development-reloader.d.ts +3 -3
- package/build/src/http-server/development-reloader.d.ts.map +1 -1
- package/build/src/http-server/development-reloader.js +6 -6
- package/build/src/http-server/index.d.ts +7 -7
- package/build/src/http-server/index.d.ts.map +1 -1
- package/build/src/http-server/index.js +13 -13
- package/build/src/http-server/remote-address.js +6 -6
- package/build/src/http-server/server-client.js +4 -4
- package/build/src/http-server/server-lock.js +5 -5
- package/build/src/http-server/websocket-channel-subscribers.d.ts +1 -1
- package/build/src/http-server/websocket-channel-subscribers.d.ts.map +1 -1
- package/build/src/http-server/websocket-channel-subscribers.js +4 -4
- package/build/src/http-server/websocket-channel.d.ts +1 -1
- package/build/src/http-server/websocket-channel.d.ts.map +1 -1
- package/build/src/http-server/websocket-channel.js +2 -2
- package/build/src/http-server/websocket-connection.d.ts +1 -1
- package/build/src/http-server/websocket-connection.d.ts.map +1 -1
- package/build/src/http-server/websocket-connection.js +2 -2
- package/build/src/http-server/websocket-event-log-store.d.ts +1 -1
- package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
- package/build/src/http-server/websocket-event-log-store.js +7 -7
- package/build/src/http-server/websocket-events-host.d.ts +1 -1
- package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
- package/build/src/http-server/websocket-events-host.js +3 -3
- package/build/src/http-server/worker-handler/in-process.d.ts +3 -3
- package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/in-process.js +9 -9
- package/build/src/http-server/worker-handler/index.d.ts +4 -4
- package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/index.js +5 -5
- package/build/src/http-server/worker-handler/worker-thread.d.ts +2 -2
- package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/worker-thread.js +4 -4
- package/build/src/logger/outputs/array-output.d.ts +3 -3
- package/build/src/logger/outputs/array-output.d.ts.map +1 -1
- package/build/src/logger/outputs/array-output.js +4 -4
- package/build/src/logger/outputs/console-output.d.ts +1 -1
- package/build/src/logger/outputs/console-output.d.ts.map +1 -1
- package/build/src/logger/outputs/console-output.js +2 -2
- package/build/src/logger/outputs/file-output.d.ts +4 -4
- package/build/src/logger/outputs/file-output.d.ts.map +1 -1
- package/build/src/logger/outputs/file-output.js +5 -5
- package/build/src/logger/outputs/stdout-output.d.ts.map +1 -1
- package/build/src/logger/outputs/stdout-output.js +2 -2
- package/build/src/logger.d.ts.map +1 -1
- package/build/src/logger.js +11 -11
- package/build/src/mailer/backends/smtp.d.ts.map +1 -1
- package/build/src/mailer/backends/smtp.js +5 -5
- package/build/src/mailer/base.js +11 -11
- package/build/src/mailer/delivery.d.ts +3 -3
- package/build/src/mailer/delivery.d.ts.map +1 -1
- package/build/src/mailer/delivery.js +5 -5
- package/build/src/plugins/sqljs-wasm-route-controller.js +2 -2
- package/build/src/routes/base-route.d.ts +6 -6
- package/build/src/routes/base-route.d.ts.map +1 -1
- package/build/src/routes/base-route.js +7 -7
- package/build/src/routes/basic-route.js +2 -2
- package/build/src/routes/hooks/frontend-model-command-route-hook.js +2 -2
- package/build/src/routes/index.js +2 -2
- package/build/src/routes/plugin-routes.js +2 -2
- package/build/src/routes/resolver.d.ts +1 -1
- package/build/src/routes/resolver.d.ts.map +1 -1
- package/build/src/routes/resolver.js +13 -13
- package/build/src/routes/resource-route.d.ts +1 -1
- package/build/src/routes/resource-route.d.ts.map +1 -1
- package/build/src/routes/resource-route.js +2 -2
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts.map +1 -1
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +8 -8
- package/build/src/testing/expect-utils.js +13 -13
- package/build/src/testing/expect.d.ts +1 -1
- package/build/src/testing/expect.d.ts.map +1 -1
- package/build/src/testing/expect.js +9 -9
- package/build/src/testing/test-files-finder.d.ts +8 -8
- package/build/src/testing/test-files-finder.d.ts.map +1 -1
- package/build/src/testing/test-files-finder.js +9 -9
- package/build/src/testing/test-filter-parser.js +3 -3
- package/build/src/testing/test-runner.d.ts +2 -2
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +17 -17
- package/build/src/testing/test-suite-splitter.js +2 -2
- package/build/src/testing/test.d.ts +2 -2
- package/build/src/testing/test.d.ts.map +1 -1
- package/build/src/testing/test.js +16 -16
- package/build/src/utils/backtrace-cleaner.d.ts +1 -1
- package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
- package/build/src/utils/backtrace-cleaner.js +2 -2
- package/build/src/utils/format-value.js +2 -2
- package/build/src/utils/model-scope.js +2 -2
- package/build/src/utils/ransack.js +27 -27
- package/build/src/utils/with-tracked-stack-async-hooks.js +8 -8
- package/build/src/utils/with-tracked-stack.js +4 -4
- package/build/testing/browser-frontend-model-event-hook-scenarios.js +7 -7
- package/build/testing/expect-utils.js +11 -11
- package/build/testing/expect.js +7 -7
- package/build/testing/test-files-finder.js +8 -8
- package/build/testing/test-filter-parser.js +2 -2
- package/build/testing/test-runner.js +16 -16
- package/build/testing/test-suite-splitter.js +1 -1
- package/build/testing/test.js +15 -15
- package/build/utils/backtrace-cleaner.js +1 -1
- package/build/utils/format-value.js +1 -1
- package/build/utils/model-scope.js +1 -1
- package/build/utils/ransack.js +26 -26
- package/build/utils/with-tracked-stack-async-hooks.js +7 -7
- package/build/utils/with-tracked-stack.js +3 -3
- package/package.json +2 -1
- package/src/application.js +4 -4
- package/src/authorization/ability.js +8 -8
- package/src/authorization/base-resource.js +4 -4
- package/src/background-jobs/cron-expression.js +1 -1
- package/src/background-jobs/forked-runner-child.js +1 -1
- package/src/background-jobs/job-registry.js +1 -1
- package/src/background-jobs/job-runner.js +1 -1
- package/src/background-jobs/job.js +1 -1
- package/src/background-jobs/json-socket.js +4 -4
- package/src/background-jobs/main.js +21 -21
- package/src/background-jobs/scheduler.js +7 -7
- package/src/background-jobs/store.js +7 -7
- package/src/background-jobs/web/controller.js +2 -2
- package/src/background-jobs/worker.js +12 -12
- package/src/beacon/client.js +11 -8
- package/src/beacon/in-process-broker.js +2 -2
- package/src/beacon/in-process-client.js +2 -2
- package/src/beacon/server.js +3 -3
- package/src/cli/browser-cli.js +1 -1
- package/src/cli/commands/db/base-command.js +2 -2
- package/src/cli/index.js +2 -2
- package/src/cli/tenant-database-command-helper.js +3 -3
- package/src/cli/use-browser-cli.js +1 -1
- package/src/configuration-types.js +3 -1
- package/src/configuration.js +38 -38
- package/src/controller.js +8 -8
- package/src/current-configuration.js +1 -1
- package/src/database/annotations-async-hooks.js +2 -2
- package/src/database/annotations.js +3 -3
- package/src/database/drivers/base-column.js +1 -1
- package/src/database/drivers/base-foreign-key.js +1 -1
- package/src/database/drivers/base-table.js +1 -1
- package/src/database/drivers/base.js +10 -10
- package/src/database/drivers/mssql/index.js +1 -1
- package/src/database/drivers/mssql/table.js +1 -1
- package/src/database/drivers/mysql/index.js +3 -3
- package/src/database/drivers/mysql/query.js +1 -1
- package/src/database/drivers/mysql/table.js +1 -1
- package/src/database/drivers/pgsql/index.js +2 -2
- package/src/database/drivers/sqlite/base.js +16 -16
- package/src/database/drivers/sqlite/index.js +11 -11
- package/src/database/drivers/sqlite/index.native.js +1 -1
- package/src/database/drivers/sqlite/index.web.js +3 -3
- package/src/database/drivers/sqlite/query.js +1 -1
- package/src/database/drivers/sqlite/query.web.js +1 -1
- package/src/database/drivers/sqlite/sql/alter-table.js +2 -2
- package/src/database/drivers/sqlite/table.js +1 -1
- package/src/database/migrator/files-finder.js +1 -1
- package/src/database/migrator.js +6 -6
- package/src/database/pool/async-tracked-multi-connection.js +27 -27
- package/src/database/pool/base-methods-forward.js +4 -4
- package/src/database/pool/base.js +8 -8
- package/src/database/query/from-base.js +1 -1
- package/src/database/query/index.js +10 -10
- package/src/database/query/join-object.js +3 -3
- package/src/database/query/model-class-query.js +39 -39
- package/src/database/query/preloader/belongs-to.js +22 -22
- package/src/database/query/preloader/has-many.js +20 -20
- package/src/database/query/preloader/has-one.js +8 -8
- package/src/database/query/preloader/selection.js +3 -3
- package/src/database/query/preloader.js +8 -8
- package/src/database/query/query-data.js +9 -9
- package/src/database/query/where-model-class-hash.js +7 -7
- package/src/database/query/with-count.js +9 -9
- package/src/database/record/acts-as-list.js +15 -15
- package/src/database/record/attachments/handle.js +2 -2
- package/src/database/record/attachments/normalize-input.js +12 -12
- package/src/database/record/attachments/storage-drivers/s3.js +6 -6
- package/src/database/record/attachments/store.js +13 -13
- package/src/database/record/index.js +115 -121
- package/src/database/record/instance-relationships/base.js +11 -11
- package/src/database/record/instance-relationships/belongs-to.js +3 -3
- package/src/database/record/instance-relationships/has-many.js +8 -8
- package/src/database/record/instance-relationships/has-one.js +7 -7
- package/src/database/record/relationships/base.js +2 -2
- package/src/database/record/state-machine.js +7 -7
- package/src/database/record/validators/presence.js +1 -1
- package/src/database/record/validators/uniqueness.js +5 -5
- package/src/database/table-data/index.js +4 -4
- package/src/environment-handlers/base.js +2 -2
- package/src/environment-handlers/browser.js +7 -7
- package/src/environment-handlers/node/cli/commands/cli-command-context.js +1 -1
- package/src/environment-handlers/node/cli/commands/console.js +4 -4
- package/src/environment-handlers/node/cli/commands/db/schema/dump.js +1 -1
- package/src/environment-handlers/node/cli/commands/db/schema/load.js +3 -3
- package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +836 -60
- package/src/environment-handlers/node.js +6 -6
- package/src/frontend-model-controller.js +81 -82
- package/src/frontend-model-resource/base-resource.js +78 -115
- package/src/frontend-models/base.js +162 -149
- package/src/frontend-models/clear-pending-debounced-callback.js +1 -1
- package/src/frontend-models/event-hook-models.js +2 -2
- package/src/frontend-models/outgoing-event-buffer.js +2 -2
- package/src/frontend-models/preloader.js +5 -5
- package/src/frontend-models/query.js +43 -38
- package/src/frontend-models/resource-definition.js +6 -6
- package/src/frontend-models/transport-serialization.js +11 -11
- package/src/frontend-models/use-destroyed-event.js +10 -10
- package/src/frontend-models/use-model-class-event.js +11 -11
- package/src/frontend-models/use-updated-event.js +11 -11
- package/src/frontend-models/websocket-channel.js +26 -17
- package/src/frontend-models/websocket-publishers.js +9 -9
- package/src/http-client/response.js +2 -2
- package/src/http-server/client/index.js +8 -8
- package/src/http-server/client/params-to-object.js +10 -10
- package/src/http-server/client/request-buffer/form-data-part.js +2 -2
- package/src/http-server/client/request-buffer/index.js +8 -8
- package/src/http-server/client/request-parser.js +3 -3
- package/src/http-server/client/request-runner.js +6 -6
- package/src/http-server/client/request-timing.js +5 -5
- package/src/http-server/client/request.js +1 -1
- package/src/http-server/client/response.js +5 -5
- package/src/http-server/client/websocket-request.js +4 -4
- package/src/http-server/client/websocket-session.js +18 -18
- package/src/http-server/development-reloader.js +5 -5
- package/src/http-server/index.js +12 -12
- package/src/http-server/remote-address.js +4 -4
- package/src/http-server/server-client.js +3 -3
- package/src/http-server/server-lock.js +4 -4
- package/src/http-server/websocket-channel-subscribers.js +3 -3
- package/src/http-server/websocket-channel.js +1 -1
- package/src/http-server/websocket-connection.js +1 -1
- package/src/http-server/websocket-event-log-store.js +6 -6
- package/src/http-server/websocket-events-host.js +2 -2
- package/src/http-server/worker-handler/in-process.js +7 -7
- package/src/http-server/worker-handler/index.js +4 -4
- package/src/http-server/worker-handler/worker-thread.js +3 -3
- package/src/logger/outputs/array-output.js +3 -3
- package/src/logger/outputs/console-output.js +1 -1
- package/src/logger/outputs/file-output.js +4 -4
- package/src/logger/outputs/stdout-output.js +1 -1
- package/src/logger.js +10 -10
- package/src/mailer/backends/smtp.js +3 -3
- package/src/mailer/base.js +8 -8
- package/src/mailer/delivery.js +4 -4
- package/src/plugins/sqljs-wasm-route-controller.js +1 -1
- package/src/routes/base-route.js +6 -6
- package/src/routes/basic-route.js +1 -1
- package/src/routes/hooks/frontend-model-command-route-hook.js +1 -1
- package/src/routes/index.js +1 -1
- package/src/routes/plugin-routes.js +1 -1
- package/src/routes/resolver.js +11 -11
- package/src/routes/resource-route.js +1 -1
- package/src/testing/browser-frontend-model-event-hook-scenarios.js +7 -7
- package/src/testing/expect-utils.js +11 -11
- package/src/testing/expect.js +7 -7
- package/src/testing/test-files-finder.js +8 -8
- package/src/testing/test-filter-parser.js +2 -2
- package/src/testing/test-runner.js +16 -16
- package/src/testing/test-suite-splitter.js +1 -1
- package/src/testing/test.js +15 -15
- package/src/utils/backtrace-cleaner.js +1 -1
- package/src/utils/format-value.js +1 -1
- package/src/utils/model-scope.js +1 -1
- package/src/utils/ransack.js +26 -26
- package/src/utils/with-tracked-stack-async-hooks.js +7 -7
- package/src/utils/with-tracked-stack.js +3 -3
|
@@ -52,7 +52,7 @@ export function frontendModelResourceConfigurationFromDefinition(resourceDefinit
|
|
|
52
52
|
function normalizeFrontendModelResourceConfiguration(resourceConfiguration) {
|
|
53
53
|
const restArgs = /**
|
|
54
54
|
* Narrows the runtime value to the documented type.
|
|
55
|
-
|
|
55
|
+
* @type {Record<string, ?>} */ ({ ...resourceConfiguration });
|
|
56
56
|
for (const key of [
|
|
57
57
|
"abilities",
|
|
58
58
|
"attributes",
|
|
@@ -103,7 +103,7 @@ function normalizeFrontendModelResourceAbilities(abilities) {
|
|
|
103
103
|
}
|
|
104
104
|
/**
|
|
105
105
|
* Normalized.
|
|
106
|
-
|
|
106
|
+
* @type {Record<string, string>} */
|
|
107
107
|
const normalized = {};
|
|
108
108
|
if (abilities.includes("create"))
|
|
109
109
|
normalized.create = "create";
|
|
@@ -184,7 +184,7 @@ function normalizeFrontendModelBuiltInCommands({ commandDefaults, commandsConfig
|
|
|
184
184
|
}
|
|
185
185
|
/**
|
|
186
186
|
* Normalized commands.
|
|
187
|
-
|
|
187
|
+
* @type {Record<string, string>} */
|
|
188
188
|
const normalizedCommands = {};
|
|
189
189
|
for (const commandType of commandsConfig) {
|
|
190
190
|
const defaultCommandName = commandDefaults[commandType];
|
|
@@ -215,7 +215,7 @@ function normalizeFrontendModelCustomCommands({ commandsConfig, modelName }) {
|
|
|
215
215
|
}
|
|
216
216
|
/**
|
|
217
217
|
* Normalized commands.
|
|
218
|
-
|
|
218
|
+
* @type {Record<string, string>} */
|
|
219
219
|
const normalizedCommands = {};
|
|
220
220
|
for (const methodName of commandsConfig) {
|
|
221
221
|
const validatedMethodName = validateFrontendModelResourceCommandName({
|
|
@@ -264,11 +264,11 @@ export function frontendModelActionForCommand({ commandName, modelName, resource
|
|
|
264
264
|
commandName: configuredCommandName,
|
|
265
265
|
commandType: /**
|
|
266
266
|
* Narrows the runtime value to the documented type.
|
|
267
|
-
|
|
267
|
+
* @type {"attach" | "create" | "destroy" | "download" | "find" | "index" | "update" | "url"} */ (action),
|
|
268
268
|
modelName
|
|
269
269
|
});
|
|
270
270
|
if (commandName === validatedCommandName) {
|
|
271
|
-
return /**
|
|
271
|
+
return /** @type {"attach" | "create" | "destroy" | "download" | "find" | "index" | "update" | "url"} */ (action);
|
|
272
272
|
}
|
|
273
273
|
}
|
|
274
274
|
return null;
|
|
@@ -342,4 +342,4 @@ function normalizeFrontendModelResourcePathForMatch(path) {
|
|
|
342
342
|
}
|
|
343
343
|
return withLeadingSlash;
|
|
344
344
|
}
|
|
345
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZC1tb2RlbHMvcmVzb3VyY2UtZGVmaW5pdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyx5QkFBeUIsTUFBTSw2Q0FBNkMsQ0FBQTtBQUNuRixPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUN2RCxPQUFPLEVBQUMsd0NBQXdDLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQTtBQUV4Rjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHVDQUF1QyxDQUFDLGNBQWM7SUFDcEUsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLGNBQWMsQ0FBQTtJQUUvQyxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDekYsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFFRCxPQUFPLEVBQUUsQ0FBQTtBQUNYLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNDQUFzQyxDQUFDLEtBQUs7SUFDMUQsT0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLElBQUksQ0FBQyxLQUFLLEtBQUsseUJBQXlCLElBQUksS0FBSyxDQUFDLFNBQVMsWUFBWSx5QkFBeUIsQ0FBQyxDQUFBO0FBQ3JJLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHdDQUF3QyxDQUFDLGtCQUFrQjtJQUN6RSxPQUFPLHNDQUFzQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFD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LENBQUE7Z0JBRTdELElBQUksb0JBQW9CLEVBQUUsQ0FBQztvQkFDekIsT0FBTzt3QkFDTCxXQUFXLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO3dCQUNwQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM3QyxVQUFVLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO3dCQUNuQyxTQUFTO3dCQUNULFlBQVk7d0JBQ1osS0FBSyxFQUFFLFFBQVE7cUJBQ2hCLENBQUE7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLDBDQUEwQyxDQUFDLElBQUk7SUFDdEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUE7SUFFakUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDaEMsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFFRCxPQUFPLGdCQUFnQixDQUFBO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSBmcm9tIFwiLi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCB7dmFsaWRhdGVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kTmFtZX0gZnJvbSBcIi4vcmVzb3VyY2UtY29uZmlnLXZhbGlkYXRpb24uanNcIlxuXG4vKipcbiAqIFJ1bnMgdGhlIGZyb250ZW5kTW9kZWxSZXNvdXJjZXNGb3JCYWNrZW5kUHJvamVjdCBoZWxwZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuQmFja2VuZFByb2plY3RDb25maWd1cmF0aW9ufSBiYWNrZW5kUHJvamVjdCAtIEJhY2tlbmQgcHJvamVjdCBjb25maWcuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGU+fSAtIFJlc291cmNlIGRlZmluaXRpb25zIGtleWVkIGJ5IG1vZGVsIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsUmVzb3VyY2VzRm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpIHtcbiAgY29uc3QgcmVzb3VyY2VzID0gYmFja2VuZFByb2plY3QuZnJvbnRlbmRNb2RlbHNcblxuICBpZiAocmVzb3VyY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXJlc291cmNlcyB8fCB0eXBlb2YgcmVzb3VyY2VzICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJhY2tlbmQgcHJvamVjdCBmcm9udGVuZE1vZGVscyBvYmplY3QgYnV0IGdvdDogJHtyZXNvdXJjZXN9YClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzb3VyY2VzXG4gIH1cblxuICByZXR1cm4ge31cbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBmcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uSXNDbGFzcyBoZWxwZXIuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gQ2FuZGlkYXRlIHJlc291cmNlIGRlZmluaXRpb24uXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGV9IC0gV2hldGhlciB2YWx1ZSBpcyBhIHJlc291cmNlIGNsYXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbklzQ2xhc3ModmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmICh2YWx1ZSA9PT0gRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSB8fCB2YWx1ZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlKVxufVxuXG4vKipcbiAqIFJ1bnMgdGhlIGZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzRnJvbURlZmluaXRpb24gaGVscGVyLlxuICogQHBhcmFtIHs/fSByZXNvdXJjZURlZmluaXRpb24gLSBSZXNvdXJjZSBkZWZpbml0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlIHwgbnVsbH0gLSBSZXNvdXJjZSBjbGFzcyB3aGVuIGRlZmluaXRpb24gaXMgY2xhc3MtYmFzZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc0Zyb21EZWZpbml0aW9uKHJlc291cmNlRGVmaW5pdGlvbikge1xuICByZXR1cm4gZnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbklzQ2xhc3MocmVzb3VyY2VEZWZpbml0aW9uKSA/IHJlc291cmNlRGVmaW5pdGlvbiA6IG51bGxcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24gaGVscGVyLlxuICogQHBhcmFtIHs/fSByZXNvdXJjZURlZmluaXRpb24gLSBSZXNvdXJjZSBkZWZpbml0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuTm9ybWFsaXplZEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb24gfCBudWxsfSAtIE5vcm1hbGl6ZWQgcmVzb3VyY2UgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25Gcm9tRGVmaW5pdGlvbihyZXNvdXJjZURlZmluaXRpb24pIHtcbiAgaWYgKCFmcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uSXNDbGFzcyhyZXNvdXJjZURlZmluaXRpb24pKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uKHJlc291cmNlRGVmaW5pdGlvbi5yZXNvdXJjZUNvbmZpZygpKVxufVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIGZyb250ZW5kIG1vZGVsIHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbn0gcmVzb3VyY2VDb25maWd1cmF0aW9uIC0gUmF3IHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Ob3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbn0gLSBOb3JtYWxpemVkIHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb24ocmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gIGNvbnN0IHJlc3RBcmdzID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqLyAoey4uLnJlc291cmNlQ29uZmlndXJhdGlvbn0pXG5cbiAgZm9yIChjb25zdCBrZXkgb2YgW1xuICAgIFwiYWJpbGl0aWVzXCIsXG4gICAgXCJhdHRyaWJ1dGVzXCIsXG4gICAgXCJhdHRhY2htZW50c1wiLFxuICAgIFwiYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kc1wiLFxuICAgIFwiYnVpbHRJbk1lbWJlckNvbW1hbmRzXCIsXG4gICAgXCJjb2xsZWN0aW9uQ29tbWFuZHNcIixcbiAgICBcImNvbW1hbmRzXCIsXG4gICAgXCJtZW1iZXJDb21tYW5kc1wiLFxuICAgIFwibW9kZWxOYW1lXCIsXG4gICAgXCJwcmltYXJ5S2V5XCIsXG4gICAgXCJyZWxhdGlvbnNoaXBzXCIsXG4gICAgXCJzZXJ2ZXJcIlxuICBdKSB7XG4gICAgZGVsZXRlIHJlc3RBcmdzW2tleV1cbiAgfVxuXG4gIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmRzID0gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlQ29tbWFuZHMocmVzb3VyY2VDb25maWd1cmF0aW9uKVxuXG4gIHJldHVybiB7XG4gICAgLi4ucmVzb3VyY2VDb25maWd1cmF0aW9uLFxuICAgIGFiaWxpdGllczogbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlQWJpbGl0aWVzKHJlc291cmNlQ29uZmlndXJhdGlvbi5hYmlsaXRpZXMpLFxuICAgIGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHM6IG5vcm1hbGl6ZWRDb21tYW5kcy5idWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzLFxuICAgIGJ1aWx0SW5NZW1iZXJDb21tYW5kczogbm9ybWFsaXplZENvbW1hbmRzLmJ1aWx0SW5NZW1iZXJDb21tYW5kcyxcbiAgICBjb2xsZWN0aW9uQ29tbWFuZHM6IG5vcm1hbGl6ZWRDb21tYW5kcy5jb2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgbWVtYmVyQ29tbWFuZHM6IG5vcm1hbGl6ZWRDb21tYW5kcy5tZW1iZXJDb21tYW5kc1xuICB9XG59XG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgZnJvbnRlbmQgbW9kZWwgcmVzb3VyY2UgYWJpbGl0aWVzLlxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gYWJpbGl0aWVzIC0gUmVzb3VyY2UgYWJpbGl0aWVzIGNvbmZpZyAoY2FtZWxDYXNlIGFjdGlvbiBsaXN0KS5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAtIE5vcm1hbGl6ZWQgYWJpbGl0aWVzIGNvbmZpZy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlQWJpbGl0aWVzKGFiaWxpdGllcykge1xuICBpZiAoYWJpbGl0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGVmYXVsdENydWRBYmlsaXRpZXMoKVxuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGFiaWxpdGllcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXNvdXJjZSBhYmlsaXRpZXMgbXVzdCBiZSBhbiBhcnJheSBvZiBhY3Rpb24gbmFtZXMuIE9iamVjdCBmb3JtIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuXCIpXG4gIH1cblxuICBpZiAoYWJpbGl0aWVzLmluY2x1ZGVzKFwibWFuYWdlXCIpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZTogXCJtYW5hZ2VcIixcbiAgICAgIGRlc3Ryb3k6IFwibWFuYWdlXCIsXG4gICAgICBmaW5kOiBcIm1hbmFnZVwiLFxuICAgICAgaW5kZXg6IFwibWFuYWdlXCIsXG4gICAgICB1cGRhdGU6IFwibWFuYWdlXCJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplZC5cbiAgICBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgY29uc3Qgbm9ybWFsaXplZCA9IHt9XG5cbiAgaWYgKGFiaWxpdGllcy5pbmNsdWRlcyhcImNyZWF0ZVwiKSkgbm9ybWFsaXplZC5jcmVhdGUgPSBcImNyZWF0ZVwiXG4gIGlmIChhYmlsaXRpZXMuaW5jbHVkZXMoXCJkZXN0cm95XCIpKSBub3JtYWxpemVkLmRlc3Ryb3kgPSBcImRlc3Ryb3lcIlxuICBpZiAoYWJpbGl0aWVzLmluY2x1ZGVzKFwicmVhZFwiKSkge1xuICAgIG5vcm1hbGl6ZWQuZmluZCA9IFwicmVhZFwiXG4gICAgbm9ybWFsaXplZC5pbmRleCA9IFwicmVhZFwiXG4gIH1cbiAgaWYgKGFiaWxpdGllcy5pbmNsdWRlcyhcInVwZGF0ZVwiKSkgbm9ybWFsaXplZC51cGRhdGUgPSBcInVwZGF0ZVwiXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuLyoqXG4gKiBSdW5zIGRlZmF1bHQgY3J1ZCBhYmlsaXRpZXMuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gLSBEZWZhdWx0IENSVUQgYWJpbGl0eSBtYXAuXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRDcnVkQWJpbGl0aWVzKCkge1xuICByZXR1cm4ge1xuICAgIGNyZWF0ZTogXCJjcmVhdGVcIixcbiAgICBkZXN0cm95OiBcImRlc3Ryb3lcIixcbiAgICBmaW5kOiBcInJlYWRcIixcbiAgICBpbmRleDogXCJyZWFkXCIsXG4gICAgdXBkYXRlOiBcInVwZGF0ZVwiXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSBmcm9udGVuZCBtb2RlbCByZXNvdXJjZSBjb21tYW5kcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9ufSByZXNvdXJjZUNvbmZpZ3VyYXRpb24gLSBSYXcgcmVzb3VyY2UgY29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIHt7YnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgYnVpbHRJbk1lbWJlckNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBjb2xsZWN0aW9uQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIG1lbWJlckNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fX0gLSBOb3JtYWxpemVkIGNvbW1hbmQgY29uZmlndXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlQ29tbWFuZHMocmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gIGNvbnN0IGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMgPSByZXNvdXJjZUNvbmZpZ3VyYXRpb24uYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kc1xuICBjb25zdCBidWlsdEluTWVtYmVyQ29tbWFuZHMgPSByZXNvdXJjZUNvbmZpZ3VyYXRpb24uYnVpbHRJbk1lbWJlckNvbW1hbmRzXG4gIGNvbnN0IGN1c3RvbUNvbGxlY3Rpb25Db21tYW5kcyA9IHJlc291cmNlQ29uZmlndXJhdGlvbi5jb2xsZWN0aW9uQ29tbWFuZHNcbiAgY29uc3QgY3VzdG9tTWVtYmVyQ29tbWFuZHMgPSByZXNvdXJjZUNvbmZpZ3VyYXRpb24ubWVtYmVyQ29tbWFuZHNcbiAgY29uc3Qgbm9ybWFsaXplZEJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMgPSBub3JtYWxpemVGcm9udGVuZE1vZGVsQnVpbHRJbkNvbW1hbmRzKHtcbiAgICBjb21tYW5kRGVmYXVsdHM6IHtcbiAgICAgIGNyZWF0ZTogXCJjcmVhdGVcIixcbiAgICAgIGluZGV4OiBcImluZGV4XCJcbiAgICB9LFxuICAgIGNvbW1hbmRzQ29uZmlnOiBidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzLFxuICAgIG1vZGVsTmFtZTogXCJDb2xsZWN0aW9uQ29tbWFuZFwiXG4gIH0pXG4gIGNvbnN0IG5vcm1hbGl6ZWRCdWlsdEluTWVtYmVyQ29tbWFuZHMgPSBub3JtYWxpemVGcm9udGVuZE1vZGVsQnVpbHRJbkNvbW1hbmRzKHtcbiAgICBjb21tYW5kRGVmYXVsdHM6IHtcbiAgICAgIGF0dGFjaDogXCJhdHRhY2hcIixcbiAgICAgIGRlc3Ryb3k6IFwiZGVzdHJveVwiLFxuICAgICAgZG93bmxvYWQ6IFwiZG93bmxvYWRcIixcbiAgICAgIGZpbmQ6IFwiZmluZFwiLFxuICAgICAgdXBkYXRlOiBcInVwZGF0ZVwiLFxuICAgICAgdXJsOiBcInVybFwiXG4gICAgfSxcbiAgICBjb21tYW5kc0NvbmZpZzogYnVpbHRJbk1lbWJlckNvbW1hbmRzLFxuICAgIG1vZGVsTmFtZTogXCJNZW1iZXJDb21tYW5kXCJcbiAgfSlcblxuICByZXR1cm4ge1xuICAgIGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHM6IG5vcm1hbGl6ZWRCdWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzLFxuICAgIGJ1aWx0SW5NZW1iZXJDb21tYW5kczogbm9ybWFsaXplZEJ1aWx0SW5NZW1iZXJDb21tYW5kcyxcbiAgICBjb2xsZWN0aW9uQ29tbWFuZHM6IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxDdXN0b21Db21tYW5kcyh7Y29tbWFuZHNDb25maWc6IGN1c3RvbUNvbGxlY3Rpb25Db21tYW5kcywgbW9kZWxOYW1lOiBcIkNvbGxlY3Rpb25Db21tYW5kXCJ9KSxcbiAgICBtZW1iZXJDb21tYW5kczogbm9ybWFsaXplRnJvbnRlbmRNb2RlbEN1c3RvbUNvbW1hbmRzKHtjb21tYW5kc0NvbmZpZzogY3VzdG9tTWVtYmVyQ29tbWFuZHMsIG1vZGVsTmFtZTogXCJNZW1iZXJDb21tYW5kXCJ9KVxuICB9XG59XG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgZnJvbnRlbmQgbW9kZWwgYnVpbHQgaW4gY29tbWFuZHMuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gYXJncy5jb21tYW5kRGVmYXVsdHMgLSBCdWlsdC1pbiBkZWZhdWx0IGNvbW1hbmQgbmFtZXMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSBhcmdzLmNvbW1hbmRzQ29uZmlnIC0gQnVpbHQtaW4gY29tbWFuZHMgY29uZmlnIChjYW1lbENhc2UgY29tbWFuZCB0eXBlIGxpc3QpLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubW9kZWxOYW1lIC0gRGlhZ25vc3RpYyBtb2RlbCBuYW1lLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gTm9ybWFsaXplZCBidWlsdC1pbiBjb21tYW5kIGNvbmZpZy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbEJ1aWx0SW5Db21tYW5kcyh7Y29tbWFuZERlZmF1bHRzLCBjb21tYW5kc0NvbmZpZywgbW9kZWxOYW1lfSkge1xuICBpZiAoIWNvbW1hbmRzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNvbW1hbmREZWZhdWx0c1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGNvbW1hbmRzQ29uZmlnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHttb2RlbE5hbWV9IGNvbmZpZ3VyYXRpb24gbXVzdCB1c2UgdGhlIGFycmF5IGZvcm0uIE9iamVjdCBmb3JtIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuYClcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVkIGNvbW1hbmRzLlxuICAgIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBub3JtYWxpemVkQ29tbWFuZHMgPSB7fVxuXG4gIGZvciAoY29uc3QgY29tbWFuZFR5cGUgb2YgY29tbWFuZHNDb25maWcpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29tbWFuZE5hbWUgPSBjb21tYW5kRGVmYXVsdHNbY29tbWFuZFR5cGVdXG5cbiAgICBpZiAoIWRlZmF1bHRDb21tYW5kTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGJ1aWx0LWluIGZyb250ZW5kIG1vZGVsIGNvbW1hbmQgJyR7Y29tbWFuZFR5cGV9JyBmb3IgJHttb2RlbE5hbWV9YClcbiAgICB9XG5cbiAgICBub3JtYWxpemVkQ29tbWFuZHNbY29tbWFuZFR5cGVdID0gdmFsaWRhdGVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kTmFtZSh7XG4gICAgICBjb21tYW5kTmFtZTogZGVmYXVsdENvbW1hbmROYW1lLFxuICAgICAgY29tbWFuZFR5cGU6IGRlZmF1bHRDb21tYW5kTmFtZSxcbiAgICAgIG1vZGVsTmFtZVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZENvbW1hbmRzXG59XG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgZnJvbnRlbmQgbW9kZWwgY3VzdG9tIGNvbW1hbmRzLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSBhcmdzLmNvbW1hbmRzQ29uZmlnIC0gQ3VzdG9tIGNvbW1hbmRzIGNvbmZpZyAoY2FtZWxDYXNlIG1ldGhvZC1uYW1lIGxpc3QpLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubW9kZWxOYW1lIC0gRGlhZ25vc3RpYyBtb2RlbCBuYW1lLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gTm9ybWFsaXplZCBjdXN0b20gY29tbWFuZCBjb25maWcgKGNhbWVsQ2FzZSBtZXRob2QgbmFtZSDihpIga2ViYWItY2FzZSBjb21tYW5kIHNsdWcpLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsQ3VzdG9tQ29tbWFuZHMoe2NvbW1hbmRzQ29uZmlnLCBtb2RlbE5hbWV9KSB7XG4gIGlmICghY29tbWFuZHNDb25maWcpIHtcbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShjb21tYW5kc0NvbmZpZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bW9kZWxOYW1lfSBjb25maWd1cmF0aW9uIG11c3QgdXNlIHRoZSBhcnJheSBmb3JtLiBPYmplY3QgZm9ybSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLmApXG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplZCBjb21tYW5kcy5cbiAgICBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmRzID0ge31cblxuICBmb3IgKGNvbnN0IG1ldGhvZE5hbWUgb2YgY29tbWFuZHNDb25maWcpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWRNZXRob2ROYW1lID0gdmFsaWRhdGVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kTmFtZSh7XG4gICAgICBjb21tYW5kTmFtZTogbWV0aG9kTmFtZSxcbiAgICAgIGNvbW1hbmRUeXBlOiBtZXRob2ROYW1lLFxuICAgICAgbW9kZWxOYW1lXG4gICAgfSlcbiAgICBjb25zdCBjb21tYW5kU2x1ZyA9IGluZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZSh2YWxpZGF0ZWRNZXRob2ROYW1lKSlcblxuICAgIG5vcm1hbGl6ZWRDb21tYW5kc1t2YWxpZGF0ZWRNZXRob2ROYW1lXSA9IGNvbW1hbmRTbHVnXG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZENvbW1hbmRzXG59XG5cbi8qKlxuICogUnVucyB0aGUgZnJvbnRlbmRNb2RlbFJlc291cmNlUGF0aCBoZWxwZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lIC0gTW9kZWwgY2xhc3MgbmFtZS5cbiAqIEBwYXJhbSB7P30gcmVzb3VyY2VEZWZpbml0aW9uIC0gUmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gTm9ybWFsaXplZCByZXNvdXJjZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlUGF0aChtb2RlbE5hbWUsIHJlc291cmNlRGVmaW5pdGlvbikge1xuICBjb25zdCByZXNvdXJjZUNvbmZpZ3VyYXRpb24gPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24ocmVzb3VyY2VEZWZpbml0aW9uKVxuXG4gIGlmICghcmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZyb250ZW5kIG1vZGVsIHJlc291cmNlIGRlZmluaXRpb24gZm9yICR7bW9kZWxOYW1lfWApXG4gIH1cblxuICByZXR1cm4gYC8ke2luZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24ucGx1cmFsaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShtb2RlbE5hbWUpKSl9YFxufVxuXG4vKipcbiAqIFJ1bnMgdGhlIGZyb250ZW5kTW9kZWxBY3Rpb25Gb3JDb21tYW5kIGhlbHBlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY29tbWFuZE5hbWUgLSBDb21tYW5kIHBhdGggc2VnbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1vZGVsTmFtZSAtIE1vZGVsIGNsYXNzIG5hbWUuXG4gKiBAcGFyYW0gez99IGFyZ3MucmVzb3VyY2VEZWZpbml0aW9uIC0gUmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHtcImRlc3Ryb3lcIiB8IFwiZmluZFwiIHwgXCJpbmRleFwiIHwgXCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImF0dGFjaFwiIHwgXCJkb3dubG9hZFwiIHwgXCJ1cmxcIiB8IG51bGx9IC0gRnJvbnRlbmQgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbEFjdGlvbkZvckNvbW1hbmQoe2NvbW1hbmROYW1lLCBtb2RlbE5hbWUsIHJlc291cmNlRGVmaW5pdGlvbn0pIHtcbiAgY29uc3QgcmVzb3VyY2VDb25maWd1cmF0aW9uID0gZnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbkZyb21EZWZpbml0aW9uKHJlc291cmNlRGVmaW5pdGlvbilcblxuICBpZiAoIXJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmcm9udGVuZCBtb2RlbCByZXNvdXJjZSBkZWZpbml0aW9uIGZvciAke21vZGVsTmFtZX1gKVxuICB9XG5cbiAgZm9yIChjb25zdCBbYWN0aW9uLCBjb25maWd1cmVkQ29tbWFuZE5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKHtcbiAgICAuLi5yZXNvdXJjZUNvbmZpZ3VyYXRpb24uYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICAuLi5yZXNvdXJjZUNvbmZpZ3VyYXRpb24uYnVpbHRJbk1lbWJlckNvbW1hbmRzXG4gIH0pKSB7XG4gICAgaWYgKGNvbmZpZ3VyZWRDb21tYW5kTmFtZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZVxuXG4gICAgY29uc3QgdmFsaWRhdGVkQ29tbWFuZE5hbWUgPSB2YWxpZGF0ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmROYW1lKHtcbiAgICAgIGNvbW1hbmROYW1lOiBjb25maWd1cmVkQ29tbWFuZE5hbWUsXG4gICAgICBjb21tYW5kVHlwZTogLyoqXG4gICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgQHR5cGUge1wiYXR0YWNoXCIgfCBcImNyZWF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcImRvd25sb2FkXCIgfCBcImZpbmRcIiB8IFwiaW5kZXhcIiB8IFwidXBkYXRlXCIgfCBcInVybFwifSAqLyAoYWN0aW9uKSxcbiAgICAgIG1vZGVsTmFtZVxuICAgIH0pXG5cbiAgICBpZiAoY29tbWFuZE5hbWUgPT09IHZhbGlkYXRlZENvbW1hbmROYW1lKSB7XG4gICAgICByZXR1cm4gLyoqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS4gQHR5cGUge1wiYXR0YWNoXCIgfCBcImNyZWF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcImRvd25sb2FkXCIgfCBcImZpbmRcIiB8IFwiaW5kZXhcIiB8IFwidXBkYXRlXCIgfCBcInVybFwifSAqLyAoYWN0aW9uKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogUnVucyB0aGUgZnJvbnRlbmRNb2RlbEN1c3RvbUNvbW1hbmRGb3JQYXRoIGhlbHBlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkJhY2tlbmRQcm9qZWN0Q29uZmlndXJhdGlvbltdfSBhcmdzLmJhY2tlbmRQcm9qZWN0cyAtIEJhY2tlbmQgcHJvamVjdHMgdG8gc2Nhbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmN1cnJlbnRQYXRoIC0gUmVxdWVzdCBwYXRoIHdpdGhvdXQgcXVlcnkuXG4gKiBAcmV0dXJucyB7e2NvbW1hbmROYW1lOiBzdHJpbmcsIG1lbWJlcklkPzogc3RyaW5nLCBtZXRob2ROYW1lOiBzdHJpbmcsIG1vZGVsTmFtZTogc3RyaW5nLCByZXNvdXJjZVBhdGg6IHN0cmluZywgc2NvcGU6IFwiY29sbGVjdGlvblwiIHwgXCJtZW1iZXJcIn0gfCBudWxsfSAtIE1hdGNoZWQgY3VzdG9tIGNvbW1hbmQgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsQ3VzdG9tQ29tbWFuZEZvclBhdGgoe2JhY2tlbmRQcm9qZWN0cywgY3VycmVudFBhdGh9KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRDdXJyZW50UGF0aCA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZVBhdGhGb3JNYXRjaChjdXJyZW50UGF0aClcblxuICBmb3IgKGNvbnN0IGJhY2tlbmRQcm9qZWN0IG9mIGJhY2tlbmRQcm9qZWN0cykge1xuICAgIGNvbnN0IHJlc291cmNlcyA9IGZyb250ZW5kTW9kZWxSZXNvdXJjZXNGb3JCYWNrZW5kUHJvamVjdChiYWNrZW5kUHJvamVjdClcblxuICAgIGZvciAoY29uc3QgbW9kZWxOYW1lIGluIHJlc291cmNlcykge1xuICAgICAgY29uc3QgcmVzb3VyY2VEZWZpbml0aW9uID0gcmVzb3VyY2VzW21vZGVsTmFtZV1cbiAgICAgIGNvbnN0IHJlc291cmNlQ29uZmlndXJhdGlvbiA9IGZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25Gcm9tRGVmaW5pdGlvbihyZXNvdXJjZURlZmluaXRpb24pXG5cbiAgICAgIGlmICghcmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc291cmNlUGF0aCA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZVBhdGhGb3JNYXRjaChmcm9udGVuZE1vZGVsUmVzb3VyY2VQYXRoKG1vZGVsTmFtZSwgcmVzb3VyY2VEZWZpbml0aW9uKSlcbiAgICAgIGNvbnN0IGV4cGVjdGVkUHJlZml4ID0gYCR7cmVzb3VyY2VQYXRofS9gXG5cbiAgICAgIGlmICghbm9ybWFsaXplZEN1cnJlbnRQYXRoLnN0YXJ0c1dpdGgoZXhwZWN0ZWRQcmVmaXgpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IG5vcm1hbGl6ZWRDdXJyZW50UGF0aFxuICAgICAgICAuc2xpY2UoZXhwZWN0ZWRQcmVmaXgubGVuZ3RoKVxuICAgICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcblxuICAgICAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZENvbGxlY3Rpb25Db21tYW5kID0gT2JqZWN0LmVudHJpZXMocmVzb3VyY2VDb25maWd1cmF0aW9uLmNvbGxlY3Rpb25Db21tYW5kcylcbiAgICAgICAgICAuZmluZCgoWywgY29tbWFuZE5hbWVdKSA9PiBjb21tYW5kTmFtZSA9PT0gcGF0aFNlZ21lbnRzWzBdKVxuXG4gICAgICAgIGlmIChtYXRjaGVkQ29sbGVjdGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29tbWFuZE5hbWU6IG1hdGNoZWRDb2xsZWN0aW9uQ29tbWFuZFsxXSxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IG1hdGNoZWRDb2xsZWN0aW9uQ29tbWFuZFswXSxcbiAgICAgICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgICAgIHJlc291cmNlUGF0aCxcbiAgICAgICAgICAgIHNjb3BlOiBcImNvbGxlY3Rpb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBjb25zdCBtYXRjaGVkTWVtYmVyQ29tbWFuZCA9IE9iamVjdC5lbnRyaWVzKHJlc291cmNlQ29uZmlndXJhdGlvbi5tZW1iZXJDb21tYW5kcylcbiAgICAgICAgICAuZmluZCgoWywgY29tbWFuZE5hbWVdKSA9PiBjb21tYW5kTmFtZSA9PT0gcGF0aFNlZ21lbnRzWzFdKVxuXG4gICAgICAgIGlmIChtYXRjaGVkTWVtYmVyQ29tbWFuZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb21tYW5kTmFtZTogbWF0Y2hlZE1lbWJlckNvbW1hbmRbMV0sXG4gICAgICAgICAgICBtZW1iZXJJZDogZGVjb2RlVVJJQ29tcG9uZW50KHBhdGhTZWdtZW50c1swXSksXG4gICAgICAgICAgICBtZXRob2ROYW1lOiBtYXRjaGVkTWVtYmVyQ29tbWFuZFswXSxcbiAgICAgICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgICAgIHJlc291cmNlUGF0aCxcbiAgICAgICAgICAgIHNjb3BlOiBcIm1lbWJlclwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSBmcm9udGVuZCBtb2RlbCByZXNvdXJjZSBwYXRoIGZvciBtYXRjaC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gUGF0aCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gTm9ybWFsaXplZCBwYXRoIHdpdGggbGVhZGluZyBzbGFzaCBhbmQgbm8gdHJhaWxpbmcgc2xhc2guXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZVBhdGhGb3JNYXRjaChwYXRoKSB7XG4gIGNvbnN0IHdpdGhMZWFkaW5nU2xhc2ggPSBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gcGF0aCA6IGAvJHtwYXRofWBcblxuICBpZiAod2l0aExlYWRpbmdTbGFzaC5sZW5ndGggPiAxKSB7XG4gICAgcmV0dXJuIHdpdGhMZWFkaW5nU2xhc2gucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICB9XG5cbiAgcmV0dXJuIHdpdGhMZWFkaW5nU2xhc2hcbn1cbiJdfQ==
|
|
345
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZC1tb2RlbHMvcmVzb3VyY2UtZGVmaW5pdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyx5QkFBeUIsTUFBTSw2Q0FBNkMsQ0FBQTtBQUNuRixPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUN2RCxPQUFPLEVBQUMsd0NBQXdDLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQTtBQUV4Rjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHVDQUF1QyxDQUFDLGNBQWM7SUFDcEUsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLGNBQWMsQ0FBQTtJQUUvQyxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDekYsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFFRCxPQUFPLEVBQUUsQ0FBQTtBQUNYLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNDQUFzQyxDQUFDLEtBQUs7SUFDMUQsT0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLElBQUksQ0FBQyxLQUFLLEtBQUsseUJBQXlCLElBQUksS0FBSyxDQUFDLFNBQVMsWUFBWSx5QkFBeUIsQ0FBQyxDQUFBO0FBQ3JJLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHdDQUF3QyxDQUFDLGtCQUFrQjtJQUN6RSxPQUFPLHNDQUFzQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFD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LENBQUE7Z0JBRTdELElBQUksb0JBQW9CLEVBQUUsQ0FBQztvQkFDekIsT0FBTzt3QkFDTCxXQUFXLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO3dCQUNwQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM3QyxVQUFVLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO3dCQUNuQyxTQUFTO3dCQUNULFlBQVk7d0JBQ1osS0FBSyxFQUFFLFFBQVE7cUJBQ2hCLENBQUE7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLDBDQUEwQyxDQUFDLElBQUk7SUFDdEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUE7SUFFakUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDaEMsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFFRCxPQUFPLGdCQUFnQixDQUFBO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSBmcm9tIFwiLi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCB7dmFsaWRhdGVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kTmFtZX0gZnJvbSBcIi4vcmVzb3VyY2UtY29uZmlnLXZhbGlkYXRpb24uanNcIlxuXG4vKipcbiAqIFJ1bnMgdGhlIGZyb250ZW5kTW9kZWxSZXNvdXJjZXNGb3JCYWNrZW5kUHJvamVjdCBoZWxwZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuQmFja2VuZFByb2plY3RDb25maWd1cmF0aW9ufSBiYWNrZW5kUHJvamVjdCAtIEJhY2tlbmQgcHJvamVjdCBjb25maWcuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGU+fSAtIFJlc291cmNlIGRlZmluaXRpb25zIGtleWVkIGJ5IG1vZGVsIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsUmVzb3VyY2VzRm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpIHtcbiAgY29uc3QgcmVzb3VyY2VzID0gYmFja2VuZFByb2plY3QuZnJvbnRlbmRNb2RlbHNcblxuICBpZiAocmVzb3VyY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXJlc291cmNlcyB8fCB0eXBlb2YgcmVzb3VyY2VzICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJhY2tlbmQgcHJvamVjdCBmcm9udGVuZE1vZGVscyBvYmplY3QgYnV0IGdvdDogJHtyZXNvdXJjZXN9YClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzb3VyY2VzXG4gIH1cblxuICByZXR1cm4ge31cbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBmcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uSXNDbGFzcyBoZWxwZXIuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gQ2FuZGlkYXRlIHJlc291cmNlIGRlZmluaXRpb24uXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGV9IC0gV2hldGhlciB2YWx1ZSBpcyBhIHJlc291cmNlIGNsYXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbklzQ2xhc3ModmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmICh2YWx1ZSA9PT0gRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSB8fCB2YWx1ZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlKVxufVxuXG4vKipcbiAqIFJ1bnMgdGhlIGZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzRnJvbURlZmluaXRpb24gaGVscGVyLlxuICogQHBhcmFtIHs/fSByZXNvdXJjZURlZmluaXRpb24gLSBSZXNvdXJjZSBkZWZpbml0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlIHwgbnVsbH0gLSBSZXNvdXJjZSBjbGFzcyB3aGVuIGRlZmluaXRpb24gaXMgY2xhc3MtYmFzZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc0Zyb21EZWZpbml0aW9uKHJlc291cmNlRGVmaW5pdGlvbikge1xuICByZXR1cm4gZnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbklzQ2xhc3MocmVzb3VyY2VEZWZpbml0aW9uKSA/IHJlc291cmNlRGVmaW5pdGlvbiA6IG51bGxcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24gaGVscGVyLlxuICogQHBhcmFtIHs/fSByZXNvdXJjZURlZmluaXRpb24gLSBSZXNvdXJjZSBkZWZpbml0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuTm9ybWFsaXplZEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb24gfCBudWxsfSAtIE5vcm1hbGl6ZWQgcmVzb3VyY2UgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25Gcm9tRGVmaW5pdGlvbihyZXNvdXJjZURlZmluaXRpb24pIHtcbiAgaWYgKCFmcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uSXNDbGFzcyhyZXNvdXJjZURlZmluaXRpb24pKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uKHJlc291cmNlRGVmaW5pdGlvbi5yZXNvdXJjZUNvbmZpZygpKVxufVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIGZyb250ZW5kIG1vZGVsIHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbn0gcmVzb3VyY2VDb25maWd1cmF0aW9uIC0gUmF3IHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Ob3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbn0gLSBOb3JtYWxpemVkIHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb24ocmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gIGNvbnN0IHJlc3RBcmdzID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gKi8gKHsuLi5yZXNvdXJjZUNvbmZpZ3VyYXRpb259KVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIFtcbiAgICBcImFiaWxpdGllc1wiLFxuICAgIFwiYXR0cmlidXRlc1wiLFxuICAgIFwiYXR0YWNobWVudHNcIixcbiAgICBcImJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHNcIixcbiAgICBcImJ1aWx0SW5NZW1iZXJDb21tYW5kc1wiLFxuICAgIFwiY29sbGVjdGlvbkNvbW1hbmRzXCIsXG4gICAgXCJjb21tYW5kc1wiLFxuICAgIFwibWVtYmVyQ29tbWFuZHNcIixcbiAgICBcIm1vZGVsTmFtZVwiLFxuICAgIFwicHJpbWFyeUtleVwiLFxuICAgIFwicmVsYXRpb25zaGlwc1wiLFxuICAgIFwic2VydmVyXCJcbiAgXSkge1xuICAgIGRlbGV0ZSByZXN0QXJnc1trZXldXG4gIH1cblxuICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRDb21tYW5kcyA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmRzKHJlc291cmNlQ29uZmlndXJhdGlvbilcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc291cmNlQ29uZmlndXJhdGlvbixcbiAgICBhYmlsaXRpZXM6IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUFiaWxpdGllcyhyZXNvdXJjZUNvbmZpZ3VyYXRpb24uYWJpbGl0aWVzKSxcbiAgICBidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzOiBub3JtYWxpemVkQ29tbWFuZHMuYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICBidWlsdEluTWVtYmVyQ29tbWFuZHM6IG5vcm1hbGl6ZWRDb21tYW5kcy5idWlsdEluTWVtYmVyQ29tbWFuZHMsXG4gICAgY29sbGVjdGlvbkNvbW1hbmRzOiBub3JtYWxpemVkQ29tbWFuZHMuY29sbGVjdGlvbkNvbW1hbmRzLFxuICAgIG1lbWJlckNvbW1hbmRzOiBub3JtYWxpemVkQ29tbWFuZHMubWVtYmVyQ29tbWFuZHNcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIGZyb250ZW5kIG1vZGVsIHJlc291cmNlIGFiaWxpdGllcy5cbiAqIEBwYXJhbSB7c3RyaW5nW10gfCB1bmRlZmluZWR9IGFiaWxpdGllcyAtIFJlc291cmNlIGFiaWxpdGllcyBjb25maWcgKGNhbWVsQ2FzZSBhY3Rpb24gbGlzdCkuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gLSBOb3JtYWxpemVkIGFiaWxpdGllcyBjb25maWcuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUFiaWxpdGllcyhhYmlsaXRpZXMpIHtcbiAgaWYgKGFiaWxpdGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRDcnVkQWJpbGl0aWVzKClcbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShhYmlsaXRpZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUmVzb3VyY2UgYWJpbGl0aWVzIG11c3QgYmUgYW4gYXJyYXkgb2YgYWN0aW9uIG5hbWVzLiBPYmplY3QgZm9ybSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLlwiKVxuICB9XG5cbiAgaWYgKGFiaWxpdGllcy5pbmNsdWRlcyhcIm1hbmFnZVwiKSkge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGU6IFwibWFuYWdlXCIsXG4gICAgICBkZXN0cm95OiBcIm1hbmFnZVwiLFxuICAgICAgZmluZDogXCJtYW5hZ2VcIixcbiAgICAgIGluZGV4OiBcIm1hbmFnZVwiLFxuICAgICAgdXBkYXRlOiBcIm1hbmFnZVwiXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZWQuXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBub3JtYWxpemVkID0ge31cblxuICBpZiAoYWJpbGl0aWVzLmluY2x1ZGVzKFwiY3JlYXRlXCIpKSBub3JtYWxpemVkLmNyZWF0ZSA9IFwiY3JlYXRlXCJcbiAgaWYgKGFiaWxpdGllcy5pbmNsdWRlcyhcImRlc3Ryb3lcIikpIG5vcm1hbGl6ZWQuZGVzdHJveSA9IFwiZGVzdHJveVwiXG4gIGlmIChhYmlsaXRpZXMuaW5jbHVkZXMoXCJyZWFkXCIpKSB7XG4gICAgbm9ybWFsaXplZC5maW5kID0gXCJyZWFkXCJcbiAgICBub3JtYWxpemVkLmluZGV4ID0gXCJyZWFkXCJcbiAgfVxuICBpZiAoYWJpbGl0aWVzLmluY2x1ZGVzKFwidXBkYXRlXCIpKSBub3JtYWxpemVkLnVwZGF0ZSA9IFwidXBkYXRlXCJcblxuICByZXR1cm4gbm9ybWFsaXplZFxufVxuXG4vKipcbiAqIFJ1bnMgZGVmYXVsdCBjcnVkIGFiaWxpdGllcy5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAtIERlZmF1bHQgQ1JVRCBhYmlsaXR5IG1hcC5cbiAqL1xuZnVuY3Rpb24gZGVmYXVsdENydWRBYmlsaXRpZXMoKSB7XG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiBcImNyZWF0ZVwiLFxuICAgIGRlc3Ryb3k6IFwiZGVzdHJveVwiLFxuICAgIGZpbmQ6IFwicmVhZFwiLFxuICAgIGluZGV4OiBcInJlYWRcIixcbiAgICB1cGRhdGU6IFwidXBkYXRlXCJcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIGZyb250ZW5kIG1vZGVsIHJlc291cmNlIGNvbW1hbmRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb259IHJlc291cmNlQ29uZmlndXJhdGlvbiAtIFJhdyByZXNvdXJjZSBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge3tidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBidWlsdEluTWVtYmVyQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGNvbGxlY3Rpb25Db21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgbWVtYmVyQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz59fSAtIE5vcm1hbGl6ZWQgY29tbWFuZCBjb25maWd1cmF0aW9uLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kcyhyZXNvdXJjZUNvbmZpZ3VyYXRpb24pIHtcbiAgY29uc3QgYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyA9IHJlc291cmNlQ29uZmlndXJhdGlvbi5idWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzXG4gIGNvbnN0IGJ1aWx0SW5NZW1iZXJDb21tYW5kcyA9IHJlc291cmNlQ29uZmlndXJhdGlvbi5idWlsdEluTWVtYmVyQ29tbWFuZHNcbiAgY29uc3QgY3VzdG9tQ29sbGVjdGlvbkNvbW1hbmRzID0gcmVzb3VyY2VDb25maWd1cmF0aW9uLmNvbGxlY3Rpb25Db21tYW5kc1xuICBjb25zdCBjdXN0b21NZW1iZXJDb21tYW5kcyA9IHJlc291cmNlQ29uZmlndXJhdGlvbi5tZW1iZXJDb21tYW5kc1xuICBjb25zdCBub3JtYWxpemVkQnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxCdWlsdEluQ29tbWFuZHMoe1xuICAgIGNvbW1hbmREZWZhdWx0czoge1xuICAgICAgY3JlYXRlOiBcImNyZWF0ZVwiLFxuICAgICAgaW5kZXg6IFwiaW5kZXhcIlxuICAgIH0sXG4gICAgY29tbWFuZHNDb25maWc6IGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgbW9kZWxOYW1lOiBcIkNvbGxlY3Rpb25Db21tYW5kXCJcbiAgfSlcbiAgY29uc3Qgbm9ybWFsaXplZEJ1aWx0SW5NZW1iZXJDb21tYW5kcyA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxCdWlsdEluQ29tbWFuZHMoe1xuICAgIGNvbW1hbmREZWZhdWx0czoge1xuICAgICAgYXR0YWNoOiBcImF0dGFjaFwiLFxuICAgICAgZGVzdHJveTogXCJkZXN0cm95XCIsXG4gICAgICBkb3dubG9hZDogXCJkb3dubG9hZFwiLFxuICAgICAgZmluZDogXCJmaW5kXCIsXG4gICAgICB1cGRhdGU6IFwidXBkYXRlXCIsXG4gICAgICB1cmw6IFwidXJsXCJcbiAgICB9LFxuICAgIGNvbW1hbmRzQ29uZmlnOiBidWlsdEluTWVtYmVyQ29tbWFuZHMsXG4gICAgbW9kZWxOYW1lOiBcIk1lbWJlckNvbW1hbmRcIlxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kczogbm9ybWFsaXplZEJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgYnVpbHRJbk1lbWJlckNvbW1hbmRzOiBub3JtYWxpemVkQnVpbHRJbk1lbWJlckNvbW1hbmRzLFxuICAgIGNvbGxlY3Rpb25Db21tYW5kczogbm9ybWFsaXplRnJvbnRlbmRNb2RlbEN1c3RvbUNvbW1hbmRzKHtjb21tYW5kc0NvbmZpZzogY3VzdG9tQ29sbGVjdGlvbkNvbW1hbmRzLCBtb2RlbE5hbWU6IFwiQ29sbGVjdGlvbkNvbW1hbmRcIn0pLFxuICAgIG1lbWJlckNvbW1hbmRzOiBub3JtYWxpemVGcm9udGVuZE1vZGVsQ3VzdG9tQ29tbWFuZHMoe2NvbW1hbmRzQ29uZmlnOiBjdXN0b21NZW1iZXJDb21tYW5kcywgbW9kZWxOYW1lOiBcIk1lbWJlckNvbW1hbmRcIn0pXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSBmcm9udGVuZCBtb2RlbCBidWlsdCBpbiBjb21tYW5kcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBhcmdzLmNvbW1hbmREZWZhdWx0cyAtIEJ1aWx0LWluIGRlZmF1bHQgY29tbWFuZCBuYW1lcy5cbiAqIEBwYXJhbSB7c3RyaW5nW10gfCB1bmRlZmluZWR9IGFyZ3MuY29tbWFuZHNDb25maWcgLSBCdWlsdC1pbiBjb21tYW5kcyBjb25maWcgKGNhbWVsQ2FzZSBjb21tYW5kIHR5cGUgbGlzdCkuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tb2RlbE5hbWUgLSBEaWFnbm9zdGljIG1vZGVsIG5hbWUuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gLSBOb3JtYWxpemVkIGJ1aWx0LWluIGNvbW1hbmQgY29uZmlnLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsQnVpbHRJbkNvbW1hbmRzKHtjb21tYW5kRGVmYXVsdHMsIGNvbW1hbmRzQ29uZmlnLCBtb2RlbE5hbWV9KSB7XG4gIGlmICghY29tbWFuZHNDb25maWcpIHtcbiAgICByZXR1cm4gY29tbWFuZERlZmF1bHRzXG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoY29tbWFuZHNDb25maWcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke21vZGVsTmFtZX0gY29uZmlndXJhdGlvbiBtdXN0IHVzZSB0aGUgYXJyYXkgZm9ybS4gT2JqZWN0IGZvcm0gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5gKVxuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZWQgY29tbWFuZHMuXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBub3JtYWxpemVkQ29tbWFuZHMgPSB7fVxuXG4gIGZvciAoY29uc3QgY29tbWFuZFR5cGUgb2YgY29tbWFuZHNDb25maWcpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29tbWFuZE5hbWUgPSBjb21tYW5kRGVmYXVsdHNbY29tbWFuZFR5cGVdXG5cbiAgICBpZiAoIWRlZmF1bHRDb21tYW5kTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGJ1aWx0LWluIGZyb250ZW5kIG1vZGVsIGNvbW1hbmQgJyR7Y29tbWFuZFR5cGV9JyBmb3IgJHttb2RlbE5hbWV9YClcbiAgICB9XG5cbiAgICBub3JtYWxpemVkQ29tbWFuZHNbY29tbWFuZFR5cGVdID0gdmFsaWRhdGVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kTmFtZSh7XG4gICAgICBjb21tYW5kTmFtZTogZGVmYXVsdENvbW1hbmROYW1lLFxuICAgICAgY29tbWFuZFR5cGU6IGRlZmF1bHRDb21tYW5kTmFtZSxcbiAgICAgIG1vZGVsTmFtZVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZENvbW1hbmRzXG59XG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgZnJvbnRlbmQgbW9kZWwgY3VzdG9tIGNvbW1hbmRzLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSBhcmdzLmNvbW1hbmRzQ29uZmlnIC0gQ3VzdG9tIGNvbW1hbmRzIGNvbmZpZyAoY2FtZWxDYXNlIG1ldGhvZC1uYW1lIGxpc3QpLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubW9kZWxOYW1lIC0gRGlhZ25vc3RpYyBtb2RlbCBuYW1lLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gTm9ybWFsaXplZCBjdXN0b20gY29tbWFuZCBjb25maWcgKGNhbWVsQ2FzZSBtZXRob2QgbmFtZSDihpIga2ViYWItY2FzZSBjb21tYW5kIHNsdWcpLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsQ3VzdG9tQ29tbWFuZHMoe2NvbW1hbmRzQ29uZmlnLCBtb2RlbE5hbWV9KSB7XG4gIGlmICghY29tbWFuZHNDb25maWcpIHtcbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShjb21tYW5kc0NvbmZpZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bW9kZWxOYW1lfSBjb25maWd1cmF0aW9uIG11c3QgdXNlIHRoZSBhcnJheSBmb3JtLiBPYmplY3QgZm9ybSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLmApXG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplZCBjb21tYW5kcy5cbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IG5vcm1hbGl6ZWRDb21tYW5kcyA9IHt9XG5cbiAgZm9yIChjb25zdCBtZXRob2ROYW1lIG9mIGNvbW1hbmRzQ29uZmlnKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkTWV0aG9kTmFtZSA9IHZhbGlkYXRlRnJvbnRlbmRNb2RlbFJlc291cmNlQ29tbWFuZE5hbWUoe1xuICAgICAgY29tbWFuZE5hbWU6IG1ldGhvZE5hbWUsXG4gICAgICBjb21tYW5kVHlwZTogbWV0aG9kTmFtZSxcbiAgICAgIG1vZGVsTmFtZVxuICAgIH0pXG4gICAgY29uc3QgY29tbWFuZFNsdWcgPSBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUodmFsaWRhdGVkTWV0aG9kTmFtZSkpXG5cbiAgICBub3JtYWxpemVkQ29tbWFuZHNbdmFsaWRhdGVkTWV0aG9kTmFtZV0gPSBjb21tYW5kU2x1Z1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRDb21tYW5kc1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIGZyb250ZW5kTW9kZWxSZXNvdXJjZVBhdGggaGVscGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAtIE1vZGVsIGNsYXNzIG5hbWUuXG4gKiBAcGFyYW0gez99IHJlc291cmNlRGVmaW5pdGlvbiAtIFJlc291cmNlIGRlZmluaXRpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIE5vcm1hbGl6ZWQgcmVzb3VyY2UgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxSZXNvdXJjZVBhdGgobW9kZWxOYW1lLCByZXNvdXJjZURlZmluaXRpb24pIHtcbiAgY29uc3QgcmVzb3VyY2VDb25maWd1cmF0aW9uID0gZnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbkZyb21EZWZpbml0aW9uKHJlc291cmNlRGVmaW5pdGlvbilcblxuICBpZiAoIXJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmcm9udGVuZCBtb2RlbCByZXNvdXJjZSBkZWZpbml0aW9uIGZvciAke21vZGVsTmFtZX1gKVxuICB9XG5cbiAgcmV0dXJuIGAvJHtpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnBsdXJhbGl6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUobW9kZWxOYW1lKSkpfWBcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBmcm9udGVuZE1vZGVsQWN0aW9uRm9yQ29tbWFuZCBoZWxwZXIuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNvbW1hbmROYW1lIC0gQ29tbWFuZCBwYXRoIHNlZ21lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tb2RlbE5hbWUgLSBNb2RlbCBjbGFzcyBuYW1lLlxuICogQHBhcmFtIHs/fSBhcmdzLnJlc291cmNlRGVmaW5pdGlvbiAtIFJlc291cmNlIGRlZmluaXRpb24uXG4gKiBAcmV0dXJucyB7XCJkZXN0cm95XCIgfCBcImZpbmRcIiB8IFwiaW5kZXhcIiB8IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJhdHRhY2hcIiB8IFwiZG93bmxvYWRcIiB8IFwidXJsXCIgfCBudWxsfSAtIEZyb250ZW5kIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxBY3Rpb25Gb3JDb21tYW5kKHtjb21tYW5kTmFtZSwgbW9kZWxOYW1lLCByZXNvdXJjZURlZmluaXRpb259KSB7XG4gIGNvbnN0IHJlc291cmNlQ29uZmlndXJhdGlvbiA9IGZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25Gcm9tRGVmaW5pdGlvbihyZXNvdXJjZURlZmluaXRpb24pXG5cbiAgaWYgKCFyZXNvdXJjZUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZnJvbnRlbmQgbW9kZWwgcmVzb3VyY2UgZGVmaW5pdGlvbiBmb3IgJHttb2RlbE5hbWV9YClcbiAgfVxuXG4gIGZvciAoY29uc3QgW2FjdGlvbiwgY29uZmlndXJlZENvbW1hbmROYW1lXSBvZiBPYmplY3QuZW50cmllcyh7XG4gICAgLi4ucmVzb3VyY2VDb25maWd1cmF0aW9uLmJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgLi4ucmVzb3VyY2VDb25maWd1cmF0aW9uLmJ1aWx0SW5NZW1iZXJDb21tYW5kc1xuICB9KSkge1xuICAgIGlmIChjb25maWd1cmVkQ29tbWFuZE5hbWUgPT09IHVuZGVmaW5lZCkgY29udGludWVcblxuICAgIGNvbnN0IHZhbGlkYXRlZENvbW1hbmROYW1lID0gdmFsaWRhdGVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kTmFtZSh7XG4gICAgICBjb21tYW5kTmFtZTogY29uZmlndXJlZENvbW1hbmROYW1lLFxuICAgICAgY29tbWFuZFR5cGU6IC8qKlxuICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7XCJhdHRhY2hcIiB8IFwiY3JlYXRlXCIgfCBcImRlc3Ryb3lcIiB8IFwiZG93bmxvYWRcIiB8IFwiZmluZFwiIHwgXCJpbmRleFwiIHwgXCJ1cGRhdGVcIiB8IFwidXJsXCJ9ICovIChhY3Rpb24pLFxuICAgICAgbW9kZWxOYW1lXG4gICAgfSlcblxuICAgIGlmIChjb21tYW5kTmFtZSA9PT0gdmFsaWRhdGVkQ29tbWFuZE5hbWUpIHtcbiAgICAgIHJldHVybiAvKiogQHR5cGUge1wiYXR0YWNoXCIgfCBcImNyZWF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcImRvd25sb2FkXCIgfCBcImZpbmRcIiB8IFwiaW5kZXhcIiB8IFwidXBkYXRlXCIgfCBcInVybFwifSAqLyAoYWN0aW9uKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogUnVucyB0aGUgZnJvbnRlbmRNb2RlbEN1c3RvbUNvbW1hbmRGb3JQYXRoIGhlbHBlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkJhY2tlbmRQcm9qZWN0Q29uZmlndXJhdGlvbltdfSBhcmdzLmJhY2tlbmRQcm9qZWN0cyAtIEJhY2tlbmQgcHJvamVjdHMgdG8gc2Nhbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmN1cnJlbnRQYXRoIC0gUmVxdWVzdCBwYXRoIHdpdGhvdXQgcXVlcnkuXG4gKiBAcmV0dXJucyB7e2NvbW1hbmROYW1lOiBzdHJpbmcsIG1lbWJlcklkPzogc3RyaW5nLCBtZXRob2ROYW1lOiBzdHJpbmcsIG1vZGVsTmFtZTogc3RyaW5nLCByZXNvdXJjZVBhdGg6IHN0cmluZywgc2NvcGU6IFwiY29sbGVjdGlvblwiIHwgXCJtZW1iZXJcIn0gfCBudWxsfSAtIE1hdGNoZWQgY3VzdG9tIGNvbW1hbmQgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsQ3VzdG9tQ29tbWFuZEZvclBhdGgoe2JhY2tlbmRQcm9qZWN0cywgY3VycmVudFBhdGh9KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRDdXJyZW50UGF0aCA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZVBhdGhGb3JNYXRjaChjdXJyZW50UGF0aClcblxuICBmb3IgKGNvbnN0IGJhY2tlbmRQcm9qZWN0IG9mIGJhY2tlbmRQcm9qZWN0cykge1xuICAgIGNvbnN0IHJlc291cmNlcyA9IGZyb250ZW5kTW9kZWxSZXNvdXJjZXNGb3JCYWNrZW5kUHJvamVjdChiYWNrZW5kUHJvamVjdClcblxuICAgIGZvciAoY29uc3QgbW9kZWxOYW1lIGluIHJlc291cmNlcykge1xuICAgICAgY29uc3QgcmVzb3VyY2VEZWZpbml0aW9uID0gcmVzb3VyY2VzW21vZGVsTmFtZV1cbiAgICAgIGNvbnN0IHJlc291cmNlQ29uZmlndXJhdGlvbiA9IGZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25Gcm9tRGVmaW5pdGlvbihyZXNvdXJjZURlZmluaXRpb24pXG5cbiAgICAgIGlmICghcmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc291cmNlUGF0aCA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZVBhdGhGb3JNYXRjaChmcm9udGVuZE1vZGVsUmVzb3VyY2VQYXRoKG1vZGVsTmFtZSwgcmVzb3VyY2VEZWZpbml0aW9uKSlcbiAgICAgIGNvbnN0IGV4cGVjdGVkUHJlZml4ID0gYCR7cmVzb3VyY2VQYXRofS9gXG5cbiAgICAgIGlmICghbm9ybWFsaXplZEN1cnJlbnRQYXRoLnN0YXJ0c1dpdGgoZXhwZWN0ZWRQcmVmaXgpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IG5vcm1hbGl6ZWRDdXJyZW50UGF0aFxuICAgICAgICAuc2xpY2UoZXhwZWN0ZWRQcmVmaXgubGVuZ3RoKVxuICAgICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcblxuICAgICAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZENvbGxlY3Rpb25Db21tYW5kID0gT2JqZWN0LmVudHJpZXMocmVzb3VyY2VDb25maWd1cmF0aW9uLmNvbGxlY3Rpb25Db21tYW5kcylcbiAgICAgICAgICAuZmluZCgoWywgY29tbWFuZE5hbWVdKSA9PiBjb21tYW5kTmFtZSA9PT0gcGF0aFNlZ21lbnRzWzBdKVxuXG4gICAgICAgIGlmIChtYXRjaGVkQ29sbGVjdGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29tbWFuZE5hbWU6IG1hdGNoZWRDb2xsZWN0aW9uQ29tbWFuZFsxXSxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IG1hdGNoZWRDb2xsZWN0aW9uQ29tbWFuZFswXSxcbiAgICAgICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgICAgIHJlc291cmNlUGF0aCxcbiAgICAgICAgICAgIHNjb3BlOiBcImNvbGxlY3Rpb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBjb25zdCBtYXRjaGVkTWVtYmVyQ29tbWFuZCA9IE9iamVjdC5lbnRyaWVzKHJlc291cmNlQ29uZmlndXJhdGlvbi5tZW1iZXJDb21tYW5kcylcbiAgICAgICAgICAuZmluZCgoWywgY29tbWFuZE5hbWVdKSA9PiBjb21tYW5kTmFtZSA9PT0gcGF0aFNlZ21lbnRzWzFdKVxuXG4gICAgICAgIGlmIChtYXRjaGVkTWVtYmVyQ29tbWFuZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb21tYW5kTmFtZTogbWF0Y2hlZE1lbWJlckNvbW1hbmRbMV0sXG4gICAgICAgICAgICBtZW1iZXJJZDogZGVjb2RlVVJJQ29tcG9uZW50KHBhdGhTZWdtZW50c1swXSksXG4gICAgICAgICAgICBtZXRob2ROYW1lOiBtYXRjaGVkTWVtYmVyQ29tbWFuZFswXSxcbiAgICAgICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgICAgIHJlc291cmNlUGF0aCxcbiAgICAgICAgICAgIHNjb3BlOiBcIm1lbWJlclwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSBmcm9udGVuZCBtb2RlbCByZXNvdXJjZSBwYXRoIGZvciBtYXRjaC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gUGF0aCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gTm9ybWFsaXplZCBwYXRoIHdpdGggbGVhZGluZyBzbGFzaCBhbmQgbm8gdHJhaWxpbmcgc2xhc2guXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZVBhdGhGb3JNYXRjaChwYXRoKSB7XG4gIGNvbnN0IHdpdGhMZWFkaW5nU2xhc2ggPSBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gcGF0aCA6IGAvJHtwYXRofWBcblxuICBpZiAod2l0aExlYWRpbmdTbGFzaC5sZW5ndGggPiAxKSB7XG4gICAgcmV0dXJuIHdpdGhMZWFkaW5nU2xhc2gucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICB9XG5cbiAgcmV0dXJuIHdpdGhMZWFkaW5nU2xhc2hcbn1cbiJdfQ==
|
|
@@ -119,7 +119,7 @@ export function isBackendModelInstance(value) {
|
|
|
119
119
|
return false;
|
|
120
120
|
const candidate = /**
|
|
121
121
|
* Narrows the runtime value to the documented type.
|
|
122
|
-
|
|
122
|
+
* @type {Record<string, ?>} */ (value);
|
|
123
123
|
return (typeof candidate.attributes === "function"
|
|
124
124
|
&& typeof candidate.getModelClass === "function"
|
|
125
125
|
&& typeof candidate.getRelationshipByName === "function");
|
|
@@ -164,12 +164,12 @@ function serializeFrontendModelTransportValueInternal(value, seenModels) {
|
|
|
164
164
|
const modelName = typeof modelClass.getModelName === "function" ? modelClass.getModelName() : modelClass.name;
|
|
165
165
|
/**
|
|
166
166
|
* Serialized model.
|
|
167
|
-
|
|
167
|
+
* @type {Record<string, ?>} */
|
|
168
168
|
const serializedModel = {
|
|
169
169
|
[TYPE_KEY]: TYPE_FRONTEND_MODEL,
|
|
170
170
|
attributes: /**
|
|
171
171
|
* Narrows the runtime value to the documented type.
|
|
172
|
-
|
|
172
|
+
* @type {Record<string, ?>} */ (serializeFrontendModelTransportValueInternal(modelAttributes, seenModels)),
|
|
173
173
|
modelName
|
|
174
174
|
};
|
|
175
175
|
if (seenModels.has(value)) {
|
|
@@ -178,7 +178,7 @@ function serializeFrontendModelTransportValueInternal(value, seenModels) {
|
|
|
178
178
|
seenModels.add(value);
|
|
179
179
|
/**
|
|
180
180
|
* Preloaded relationships.
|
|
181
|
-
|
|
181
|
+
* @type {Record<string, ?>} */
|
|
182
182
|
const preloadedRelationships = {};
|
|
183
183
|
const relationshipsMap = value.getModelClass().getRelationshipsMap();
|
|
184
184
|
for (const relationshipName of Object.keys(relationshipsMap)) {
|
|
@@ -197,7 +197,7 @@ function serializeFrontendModelTransportValueInternal(value, seenModels) {
|
|
|
197
197
|
if (isPlainObject(value)) {
|
|
198
198
|
/**
|
|
199
199
|
* Serialized.
|
|
200
|
-
|
|
200
|
+
* @type {Record<string, ?>} */
|
|
201
201
|
const serialized = {};
|
|
202
202
|
for (const [key, nestedValue] of Object.entries(value)) {
|
|
203
203
|
assignSafeProperty(serialized, key, serializeFrontendModelTransportValueInternal(nestedValue, seenModels));
|
|
@@ -214,11 +214,11 @@ function serializeFrontendModelTransportValueInternal(value, seenModels) {
|
|
|
214
214
|
function deserializeFrontendModelMarker(marker) {
|
|
215
215
|
const attributes = /**
|
|
216
216
|
* Narrows the runtime value to the documented type.
|
|
217
|
-
|
|
217
|
+
* @type {Record<string, ?>} */ (deserializeFrontendModelTransportValue(marker.attributes));
|
|
218
218
|
const preloadedRelationships = isPlainObject(marker.preloadedRelationships)
|
|
219
219
|
? /**
|
|
220
220
|
* Narrows the runtime value to the documented type.
|
|
221
|
-
|
|
221
|
+
* @type {Record<string, ?>} */
|
|
222
222
|
(deserializeFrontendModelTransportValue(marker.preloadedRelationships))
|
|
223
223
|
: {};
|
|
224
224
|
const modelClass = resolveFrontendModelClass(marker.modelName);
|
|
@@ -266,19 +266,19 @@ export function deserializeFrontendModelTransportValue(value) {
|
|
|
266
266
|
if (isDateMarker(value)) {
|
|
267
267
|
const dateValue = /**
|
|
268
268
|
* Narrows the runtime value to the documented type.
|
|
269
|
-
|
|
269
|
+
* @type {{value: string}} */ (value).value;
|
|
270
270
|
return new Date(dateValue);
|
|
271
271
|
}
|
|
272
272
|
if (isBigIntMarker(value)) {
|
|
273
273
|
const bigintValue = /**
|
|
274
274
|
* Narrows the runtime value to the documented type.
|
|
275
|
-
|
|
275
|
+
* @type {{value: string}} */ (value).value;
|
|
276
276
|
return BigInt(bigintValue);
|
|
277
277
|
}
|
|
278
278
|
if (isNonFiniteNumberMarker(value)) {
|
|
279
279
|
const numberValue = /**
|
|
280
280
|
* Narrows the runtime value to the documented type.
|
|
281
|
-
|
|
281
|
+
* @type {{value: string}} */ (value).value;
|
|
282
282
|
if (numberValue === NUMBER_NAN)
|
|
283
283
|
return Number.NaN;
|
|
284
284
|
if (numberValue === NUMBER_POSITIVE_INFINITY)
|
|
@@ -294,7 +294,7 @@ export function deserializeFrontendModelTransportValue(value) {
|
|
|
294
294
|
if (isPlainObject(value)) {
|
|
295
295
|
/**
|
|
296
296
|
* Deserialized.
|
|
297
|
-
|
|
297
|
+
* @type {Record<string, ?>} */
|
|
298
298
|
const deserialized = {};
|
|
299
299
|
for (const [key, nestedValue] of Object.entries(value)) {
|
|
300
300
|
assignSafeProperty(deserialized, key, deserializeFrontendModelTransportValue(nestedValue));
|
|
@@ -303,4 +303,4 @@ export function deserializeFrontendModelTransportValue(value) {
|
|
|
303
303
|
}
|
|
304
304
|
return value;
|
|
305
305
|
}
|
|
306
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LXNlcmlhbGl6YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmQtbW9kZWxzL3RyYW5zcG9ydC1zZXJpYWxpemF0aW9uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUM3RCxPQUFPLGFBQWEsTUFBTSwwQkFBMEIsQ0FBQTtBQUVwRCxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQTtBQUNuQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUE7QUFDeEIsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFBO0FBQ2xDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQTtBQUM1QixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUE7QUFDNUIsTUFBTSxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQTtBQUM1QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUE7QUFDeEIsTUFBTSx3QkFBd0IsR0FBRyxVQUFVLENBQUE7QUFDM0MsTUFBTSx3QkFBd0IsR0FBRyxXQUFXLENBQUE7QUFDNUMsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsQ0FBQTtBQUU5RDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSztJQUNuRCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7UUFDakMsS0FBSztRQUNMLFFBQVEsRUFBRSxJQUFJO1FBQ2QsVUFBVSxFQUFFLElBQUk7UUFDaEIsWUFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEtBQUs7SUFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUV2QyxNQUFNLElBQUksR0FB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RCxJQUFJLFdBQVcsS0FBSyx3QkFBd0I7WUFBRSxPQUFPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQTtRQUU3RSxPQUFPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDOUMsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsc0NBQXNDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUM1RSxDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6Qjs7c0NBRThCO1FBQzlCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQTtRQUV2QixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZELGtCQUFrQixDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsc0NBQXNDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtRQUM1RixDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUE7SUFDckIsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3Jlc29sdmVGcm9udGVuZE1vZGVsQ2xhc3N9IGZyb20gXCIuL21vZGVsLXJlZ2lzdHJ5LmpzXCJcbmltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gXCIuLi91dGlscy9wbGFpbi1vYmplY3QuanNcIlxuXG5jb25zdCBUWVBFX0tFWSA9IFwiX192ZWxvY2lvdXNfdHlwZVwiXG5jb25zdCBUWVBFX0RBVEUgPSBcImRhdGVcIlxuY29uc3QgVFlQRV9VTkRFRklORUQgPSBcInVuZGVmaW5lZFwiXG5jb25zdCBUWVBFX0JJR0lOVCA9IFwiYmlnaW50XCJcbmNvbnN0IFRZUEVfTlVNQkVSID0gXCJudW1iZXJcIlxuY29uc3QgVFlQRV9GUk9OVEVORF9NT0RFTCA9IFwiZnJvbnRlbmRfbW9kZWxcIlxuY29uc3QgTlVNQkVSX05BTiA9IFwiTmFOXCJcbmNvbnN0IE5VTUJFUl9QT1NJVElWRV9JTkZJTklUWSA9IFwiSW5maW5pdHlcIlxuY29uc3QgTlVNQkVSX05FR0FUSVZFX0lORklOSVRZID0gXCItSW5maW5pdHlcIlxuY29uc3QgUFJFTE9BREVEX1JFTEFUSU9OU0hJUFNfS0VZID0gXCJfX3ByZWxvYWRlZFJlbGF0aW9uc2hpcHNcIlxuXG4vKipcbiAqIEFzc2lnbiBhIGtleSB0byBhIHBsYWluIG9iamVjdCB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIGBfX3Byb3RvX19gIHNldHRlci5cbiAqIFVzZXMgYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgc28gdGhhdCBrZXlzIGxpa2UgYF9fcHJvdG9fX2AgYXJlIHN0b3JlZCBhc1xuICogb3duIGRhdGEgcHJvcGVydGllcyBpbnN0ZWFkIG9mIG11dGF0aW5nIHRoZSBvYmplY3QncyBwcm90b3R5cGUgY2hhaW4uIFRoaXNcbiAqIGxldHMgY2FsbGVycyByZWNlaXZlIGEgcmVndWxhciBge31gIG9iamVjdCAod2l0aCBgT2JqZWN0LnByb3RvdHlwZWAgYW5kIGFcbiAqIG5vcm1hbCBgY29uc3RydWN0b3IubmFtZWApIHdoaWxlIHN0aWxsIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvbi5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgPz59IHRhcmdldCAtIFRhcmdldCBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gUHJvcGVydHkga2V5LlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIFByb3BlcnR5IHZhbHVlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25TYWZlUHJvcGVydHkodGFyZ2V0LCBrZXksIHZhbHVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgIHZhbHVlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG59XG5cbi8qKlxuICogUnVucyBpcyB1bmRlZmluZWQgbWFya2VyLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIENhbmRpZGF0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdmFsdWUgaXMgZW5jb2RlZCB1bmRlZmluZWQgbWFya2VyLlxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZE1hcmtlcih2YWx1ZSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpXG5cbiAgcmV0dXJuIGtleXMubGVuZ3RoID09PSAxICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgVFlQRV9LRVkpICYmIHZhbHVlW1RZUEVfS0VZXSA9PT0gVFlQRV9VTkRFRklORURcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgdmFsdWUgaXMgYSB0eXBlZCBtYXJrZXIgb2JqZWN0IHdpdGggYSBzdHJpbmcgYHZhbHVlYCBmaWVsZC5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgbWFya2VyLlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmtlclR5cGUgLSBFeHBlY3RlZCBtYXJrZXIgdHlwZSB2YWx1ZS5cbiAqIEBwYXJhbSB7KHN0cmluZ1ZhbHVlOiBzdHJpbmcpID0+IGJvb2xlYW59IHZhbHVlTWF0Y2hlcyAtIEFkZGl0aW9uYWwgc3RyaW5nIHZhbHVlIHByZWRpY2F0ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdmFsdWUgbWF0Y2hlcyB0aGUgbWFya2VyIHNoYXBlLlxuICovXG5mdW5jdGlvbiBpc1N0cmluZ1ZhbHVlTWFya2VyKHZhbHVlLCBtYXJrZXJUeXBlLCB2YWx1ZU1hdGNoZXMpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKVxuXG4gIHJldHVybiAoXG4gICAga2V5cy5sZW5ndGggPT09IDJcbiAgICAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIFRZUEVfS0VZKVxuICAgICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgXCJ2YWx1ZVwiKVxuICAgICYmIHZhbHVlW1RZUEVfS0VZXSA9PT0gbWFya2VyVHlwZVxuICAgICYmIHR5cGVvZiB2YWx1ZS52YWx1ZSA9PT0gXCJzdHJpbmdcIlxuICAgICYmIHZhbHVlTWF0Y2hlcyh2YWx1ZS52YWx1ZSlcbiAgKVxufVxuXG4vKipcbiAqIFJ1bnMgaXMgZGF0ZSBtYXJrZXIuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gQ2FuZGlkYXRlIHZhbHVlLlxuICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB2YWx1ZSBpcyBlbmNvZGVkIGRhdGUgbWFya2VyLlxuICovXG5mdW5jdGlvbiBpc0RhdGVNYXJrZXIodmFsdWUpIHtcbiAgcmV0dXJuIGlzU3RyaW5nVmFsdWVNYXJrZXIodmFsdWUsIFRZUEVfREFURSwgKCkgPT4gdHJ1ZSlcbn1cblxuLyoqXG4gKiBSdW5zIGlzIGJpZyBpbnQgbWFya2VyLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIENhbmRpZGF0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdmFsdWUgaXMgZW5jb2RlZCBiaWdpbnQgbWFya2VyLlxuICovXG5mdW5jdGlvbiBpc0JpZ0ludE1hcmtlcih2YWx1ZSkge1xuICByZXR1cm4gaXNTdHJpbmdWYWx1ZU1hcmtlcih2YWx1ZSwgVFlQRV9CSUdJTlQsIChzdHJpbmdWYWx1ZSkgPT4gL14tP1xcZCskLy50ZXN0KHN0cmluZ1ZhbHVlKSlcbn1cblxuLyoqXG4gKiBSdW5zIGlzIG5vbiBmaW5pdGUgbnVtYmVyIG1hcmtlci5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHZhbHVlIGlzIGVuY29kZWQgbm9uLWZpbml0ZSBudW1iZXIgbWFya2VyLlxuICovXG5mdW5jdGlvbiBpc05vbkZpbml0ZU51bWJlck1hcmtlcih2YWx1ZSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpXG4gIGNvbnN0IG1hcmtlclZhbHVlID0gdmFsdWUudmFsdWVcblxuICByZXR1cm4gKFxuICAgIGtleXMubGVuZ3RoID09PSAyXG4gICAgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBUWVBFX0tFWSlcbiAgICAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIFwidmFsdWVcIilcbiAgICAmJiB2YWx1ZVtUWVBFX0tFWV0gPT09IFRZUEVfTlVNQkVSXG4gICAgJiYgKG1hcmtlclZhbHVlID09PSBOVU1CRVJfTkFOIHx8IG1hcmtlclZhbHVlID09PSBOVU1CRVJfUE9TSVRJVkVfSU5GSU5JVFkgfHwgbWFya2VyVmFsdWUgPT09IE5VTUJFUl9ORUdBVElWRV9JTkZJTklUWSlcbiAgKVxufVxuXG4vKipcbiAqIFJ1bnMgaXMgZnJvbnRlbmQgbW9kZWwgbWFya2VyLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIENhbmRpZGF0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyB7X192ZWxvY2lvdXNfdHlwZTogXCJmcm9udGVuZF9tb2RlbFwiLCBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCA/PiwgbW9kZWxOYW1lOiBzdHJpbmcsIHByZWxvYWRlZFJlbGF0aW9uc2hpcHM/OiBSZWNvcmQ8c3RyaW5nLCA/Pn19IC0gV2hldGhlciB2YWx1ZSBpcyBlbmNvZGVkIGZyb250ZW5kLW1vZGVsIG1hcmtlci5cbiAqL1xuZnVuY3Rpb24gaXNGcm9udGVuZE1vZGVsTWFya2VyKHZhbHVlKSB7XG4gIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IG1vZGVsTmFtZSA9IHZhbHVlLm1vZGVsTmFtZVxuICBjb25zdCBhdHRyaWJ1dGVzID0gdmFsdWUuYXR0cmlidXRlc1xuICBjb25zdCBwcmVsb2FkZWRSZWxhdGlvbnNoaXBzID0gdmFsdWUucHJlbG9hZGVkUmVsYXRpb25zaGlwc1xuXG4gIHJldHVybiAoXG4gICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBUWVBFX0tFWSlcbiAgICAmJiB2YWx1ZVtUWVBFX0tFWV0gPT09IFRZUEVfRlJPTlRFTkRfTU9ERUxcbiAgICAmJiB0eXBlb2YgbW9kZWxOYW1lID09PSBcInN0cmluZ1wiXG4gICAgJiYgbW9kZWxOYW1lLmxlbmd0aCA+IDBcbiAgICAmJiBpc1BsYWluT2JqZWN0KGF0dHJpYnV0ZXMpXG4gICAgJiYgKHByZWxvYWRlZFJlbGF0aW9uc2hpcHMgPT09IHVuZGVmaW5lZCB8fCBpc1BsYWluT2JqZWN0KHByZWxvYWRlZFJlbGF0aW9uc2hpcHMpKVxuICApXG59XG5cbi8qKlxuICogUnVucyB0aGUgaXNCYWNrZW5kTW9kZWxJbnN0YW5jZSBoZWxwZXIuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gQ2FuZGlkYXRlIHZhbHVlLlxuICogQHJldHVybnMge3ZhbHVlIGlzIHthdHRyaWJ1dGVzOiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCA/PiwgY29uc3RydWN0b3I6IHtnZXRNb2RlbE5hbWU/OiAoKSA9PiBzdHJpbmcsIG5hbWU/OiBzdHJpbmd9LCBnZXRNb2RlbENsYXNzOiAoKSA9PiB7Z2V0UmVsYXRpb25zaGlwc01hcDogKCkgPT4gUmVjb3JkPHN0cmluZywgPz59LCBnZXRSZWxhdGlvbnNoaXBCeU5hbWU6IChyZWxhdGlvbnNoaXBOYW1lOiBzdHJpbmcpID0+IHtnZXRQcmVsb2FkZWQ6ICgpID0+IGJvb2xlYW4sIGxvYWRlZDogKCkgPT4gP319fSAtIFdoZXRoZXIgdmFsdWUgbG9va3MgbGlrZSBhIGJhY2tlbmQgbW9kZWwgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JhY2tlbmRNb2RlbEluc3RhbmNlKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBjYW5kaWRhdGUgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gKi8gKHZhbHVlKVxuXG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGNhbmRpZGF0ZS5hdHRyaWJ1dGVzID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2YgY2FuZGlkYXRlLmdldE1vZGVsQ2xhc3MgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBjYW5kaWRhdGUuZ2V0UmVsYXRpb25zaGlwQnlOYW1lID09PSBcImZ1bmN0aW9uXCJcbiAgKVxufVxuXG4vKipcbiAqIFJ1bnMgc2VyaWFsaXplIGZyb250ZW5kIG1vZGVsIHRyYW5zcG9ydCB2YWx1ZSBpbnRlcm5hbC5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBWYWx1ZSB0byBzZXJpYWxpemUuXG4gKiBAcGFyYW0ge1dlYWtTZXQ8b2JqZWN0Pn0gc2Vlbk1vZGVscyAtIE1vZGVscyBhbHJlYWR5IHZpc2l0ZWQgaW4gdGhlIGN1cnJlbnQgcmVjdXJzaW9uIHBhdGguXG4gKiBAcmV0dXJucyB7P30gLSBTZXJpYWxpemVkIHZhbHVlIHdpdGggdHJhbnNwb3J0IG1hcmtlcnMuXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZUludGVybmFsKHZhbHVlLCBzZWVuTW9kZWxzKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHtbVFlQRV9LRVldOiBUWVBFX1VOREVGSU5FRH1cbiAgfVxuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW1RZUEVfS0VZXTogVFlQRV9EQVRFLFxuICAgICAgdmFsdWU6IHZhbHVlLnRvSVNPU3RyaW5nKClcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJpZ2ludFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtUWVBFX0tFWV06IFRZUEVfQklHSU5ULFxuICAgICAgdmFsdWU6IHZhbHVlLnRvU3RyaW5nKClcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmICFOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgY29uc3QgbWFya2VyVmFsdWUgPSBOdW1iZXIuaXNOYU4odmFsdWUpXG4gICAgICA/IE5VTUJFUl9OQU5cbiAgICAgIDogKHZhbHVlID4gMCA/IE5VTUJFUl9QT1NJVElWRV9JTkZJTklUWSA6IE5VTUJFUl9ORUdBVElWRV9JTkZJTklUWSlcblxuICAgIHJldHVybiB7XG4gICAgICBbVFlQRV9LRVldOiBUWVBFX05VTUJFUixcbiAgICAgIHZhbHVlOiBtYXJrZXJWYWx1ZVxuICAgIH1cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoKGVudHJ5KSA9PiBzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWVJbnRlcm5hbChlbnRyeSwgc2Vlbk1vZGVscykpXG4gIH1cblxuICBpZiAoaXNCYWNrZW5kTW9kZWxJbnN0YW5jZSh2YWx1ZSkpIHtcbiAgICBjb25zdCBtb2RlbEF0dHJpYnV0ZXMgPSB2YWx1ZS5hdHRyaWJ1dGVzKClcbiAgICBjb25zdCBtb2RlbENsYXNzID0gdmFsdWUuY29uc3RydWN0b3JcbiAgICBjb25zdCBtb2RlbE5hbWUgPSB0eXBlb2YgbW9kZWxDbGFzcy5nZXRNb2RlbE5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG1vZGVsQ2xhc3MuZ2V0TW9kZWxOYW1lKCkgOiBtb2RlbENsYXNzLm5hbWVcblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZWQgbW9kZWwuXG4gICAgICBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovXG4gICAgY29uc3Qgc2VyaWFsaXplZE1vZGVsID0ge1xuICAgICAgW1RZUEVfS0VZXTogVFlQRV9GUk9OVEVORF9NT0RFTCxcbiAgICAgIGF0dHJpYnV0ZXM6IC8qKlxuICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovIChzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWVJbnRlcm5hbChtb2RlbEF0dHJpYnV0ZXMsIHNlZW5Nb2RlbHMpKSxcbiAgICAgIG1vZGVsTmFtZVxuICAgIH1cblxuICAgIGlmIChzZWVuTW9kZWxzLmhhcyh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBzZXJpYWxpemVkTW9kZWxcbiAgICB9XG5cbiAgICBzZWVuTW9kZWxzLmFkZCh2YWx1ZSlcblxuICAgIC8qKlxuICAgICAqIFByZWxvYWRlZCByZWxhdGlvbnNoaXBzLlxuICAgICAgQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqL1xuICAgIGNvbnN0IHByZWxvYWRlZFJlbGF0aW9uc2hpcHMgPSB7fVxuICAgIGNvbnN0IHJlbGF0aW9uc2hpcHNNYXAgPSB2YWx1ZS5nZXRNb2RlbENsYXNzKCkuZ2V0UmVsYXRpb25zaGlwc01hcCgpXG5cbiAgICBmb3IgKGNvbnN0IHJlbGF0aW9uc2hpcE5hbWUgb2YgT2JqZWN0LmtleXMocmVsYXRpb25zaGlwc01hcCkpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHZhbHVlLmdldFJlbGF0aW9uc2hpcEJ5TmFtZShyZWxhdGlvbnNoaXBOYW1lKVxuXG4gICAgICBpZiAoIXJlbGF0aW9uc2hpcC5nZXRQcmVsb2FkZWQoKSkgY29udGludWVcblxuICAgICAgY29uc3QgbG9hZGVkUmVsYXRpb25zaGlwID0gcmVsYXRpb25zaGlwLmxvYWRlZCgpXG5cbiAgICAgIGFzc2lnblNhZmVQcm9wZXJ0eShwcmVsb2FkZWRSZWxhdGlvbnNoaXBzLCByZWxhdGlvbnNoaXBOYW1lLCBzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWVJbnRlcm5hbChcbiAgICAgICAgbG9hZGVkUmVsYXRpb25zaGlwID09IHVuZGVmaW5lZCA/IG51bGwgOiBsb2FkZWRSZWxhdGlvbnNoaXAsXG4gICAgICAgIHNlZW5Nb2RlbHNcbiAgICAgICkpXG4gICAgfVxuXG4gICAgc2Vlbk1vZGVscy5kZWxldGUodmFsdWUpXG5cbiAgICBpZiAoT2JqZWN0LmtleXMocHJlbG9hZGVkUmVsYXRpb25zaGlwcykubGVuZ3RoID4gMCkge1xuICAgICAgc2VyaWFsaXplZE1vZGVsLnByZWxvYWRlZFJlbGF0aW9uc2hpcHMgPSBwcmVsb2FkZWRSZWxhdGlvbnNoaXBzXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcmlhbGl6ZWRNb2RlbFxuICB9XG5cbiAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplZC5cbiAgICAgIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gKi9cbiAgICBjb25zdCBzZXJpYWxpemVkID0ge31cblxuICAgIGZvciAoY29uc3QgW2tleSwgbmVzdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgYXNzaWduU2FmZVByb3BlcnR5KHNlcmlhbGl6ZWQsIGtleSwgc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlSW50ZXJuYWwobmVzdGVkVmFsdWUsIHNlZW5Nb2RlbHMpKVxuICAgIH1cblxuICAgIHJldHVybiBzZXJpYWxpemVkXG4gIH1cblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBSdW5zIGRlc2VyaWFsaXplIGZyb250ZW5kIG1vZGVsIG1hcmtlci5cbiAqIEBwYXJhbSB7e2F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsID8+LCBtb2RlbE5hbWU6IHN0cmluZywgcHJlbG9hZGVkUmVsYXRpb25zaGlwcz86IFJlY29yZDxzdHJpbmcsID8+fX0gbWFya2VyIC0gRW5jb2RlZCBmcm9udGVuZC1tb2RlbCBtYXJrZXIuXG4gKiBAcmV0dXJucyB7P30gLSBIeWRyYXRlZCBmcm9udGVuZCBtb2RlbCBvciBwbGFpbiBvYmplY3QgZmFsbGJhY2suXG4gKi9cbmZ1bmN0aW9uIGRlc2VyaWFsaXplRnJvbnRlbmRNb2RlbE1hcmtlcihtYXJrZXIpIHtcbiAgY29uc3QgYXR0cmlidXRlcyA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovIChkZXNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZShtYXJrZXIuYXR0cmlidXRlcykpXG4gIGNvbnN0IHByZWxvYWRlZFJlbGF0aW9uc2hpcHMgPSBpc1BsYWluT2JqZWN0KG1hcmtlci5wcmVsb2FkZWRSZWxhdGlvbnNoaXBzKVxuICAgID8gLyoqXG4gICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gKi8gKGRlc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlKG1hcmtlci5wcmVsb2FkZWRSZWxhdGlvbnNoaXBzKSlcbiAgICA6IHt9XG4gIGNvbnN0IG1vZGVsQ2xhc3MgPSByZXNvbHZlRnJvbnRlbmRNb2RlbENsYXNzKG1hcmtlci5tb2RlbE5hbWUpXG5cbiAgaWYgKCFtb2RlbENsYXNzIHx8IHR5cGVvZiBtb2RlbENsYXNzLmluc3RhbnRpYXRlRnJvbVJlc3BvbnNlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBpZiAoT2JqZWN0LmtleXMocHJlbG9hZGVkUmVsYXRpb25zaGlwcykubGVuZ3RoIDwgMSkge1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXR0cmlidXRlcyxcbiAgICAgIFtQUkVMT0FERURfUkVMQVRJT05TSElQU19LRVldOiBwcmVsb2FkZWRSZWxhdGlvbnNoaXBzXG4gICAgfVxuICB9XG5cbiAgLy8gUm91dGUgaHlkcmF0aW9uIHRocm91Z2ggYGluc3RhbnRpYXRlRnJvbVJlc3BvbnNlYCBzb1xuICAvLyBgX19hYmlsaXRpZXNgIC8gYF9fcXVlcnlEYXRhYCAvIGBfX2Fzc29jaWF0aW9uQ291bnRzYCAvXG4gIC8vIGBfX3ByZWxvYWRlZFJlbGF0aW9uc2hpcHNgIGJha2VkIGludG8gdGhlIG1hcmtlcidzIGF0dHJpYnV0ZXMgYmxvYiAoZS5nLlxuICAvLyBieSBgcmVzb3VyY2Uuc2VyaWFsaXplYCBpbiBjdXN0b20tY29tbWFuZCBhdXRvLXNlcmlhbGl6YXRpb24pIGdldFxuICAvLyBleHRyYWN0ZWQgYW5kIGFwcGxpZWQuIExlZ2FjeSBtYXJrZXJzIHRoYXQgdXNlZCBhIHNlcGFyYXRlIHRvcC1sZXZlbFxuICAvLyBgcHJlbG9hZGVkUmVsYXRpb25zaGlwc2AgZmllbGQgbWVyZ2UgdGhlbSB1bmRlciB0aGUgc3RhbmRhcmQga2V5IGZpcnN0XG4gIC8vIHNvIGBtb2RlbERhdGFGcm9tUmVzcG9uc2VgIHBpY2tzIHRoZW0gdXAuXG4gIGNvbnN0IHJlc3BvbnNlQXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKHByZWxvYWRlZFJlbGF0aW9uc2hpcHMpLmxlbmd0aCA+IDBcbiAgICA/IHtcbiAgICAgIC4uLmF0dHJpYnV0ZXMsXG4gICAgICBbUFJFTE9BREVEX1JFTEFUSU9OU0hJUFNfS0VZXTogcHJlbG9hZGVkUmVsYXRpb25zaGlwc1xuICAgIH1cbiAgICA6IGF0dHJpYnV0ZXNcblxuICByZXR1cm4gbW9kZWxDbGFzcy5pbnN0YW50aWF0ZUZyb21SZXNwb25zZShyZXNwb25zZUF0dHJpYnV0ZXMpXG59XG5cbi8qKlxuICogUnVucyB0aGUgc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlIGhlbHBlci5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBWYWx1ZSB0byBzZXJpYWxpemUuXG4gKiBAcmV0dXJucyB7P30gLSBTZXJpYWxpemVkIHZhbHVlIHdpdGggdHJhbnNwb3J0IG1hcmtlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZUludGVybmFsKHZhbHVlLCBuZXcgV2Vha1NldCgpKVxufVxuXG4vKipcbiAqIFJ1bnMgdGhlIGRlc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlIGhlbHBlci5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBWYWx1ZSB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm5zIHs/fSAtIERlc2VyaWFsaXplZCB2YWx1ZSB3aXRoIHRyYW5zcG9ydCBtYXJrZXJzIHJlc3RvcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWUodmFsdWUpIHtcbiAgaWYgKGlzVW5kZWZpbmVkTWFya2VyKHZhbHVlKSkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIGlmIChpc0RhdGVNYXJrZXIodmFsdWUpKSB7XG4gICAgY29uc3QgZGF0ZVZhbHVlID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgQHR5cGUge3t2YWx1ZTogc3RyaW5nfX0gKi8gKHZhbHVlKS52YWx1ZVxuXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVWYWx1ZSlcbiAgfVxuXG4gIGlmIChpc0JpZ0ludE1hcmtlcih2YWx1ZSkpIHtcbiAgICBjb25zdCBiaWdpbnRWYWx1ZSA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7e3ZhbHVlOiBzdHJpbmd9fSAqLyAodmFsdWUpLnZhbHVlXG5cbiAgICByZXR1cm4gQmlnSW50KGJpZ2ludFZhbHVlKVxuICB9XG5cbiAgaWYgKGlzTm9uRmluaXRlTnVtYmVyTWFya2VyKHZhbHVlKSkge1xuICAgIGNvbnN0IG51bWJlclZhbHVlID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEB0eXBlIHt7dmFsdWU6IHN0cmluZ319ICovICh2YWx1ZSkudmFsdWVcblxuICAgIGlmIChudW1iZXJWYWx1ZSA9PT0gTlVNQkVSX05BTikgcmV0dXJuIE51bWJlci5OYU5cbiAgICBpZiAobnVtYmVyVmFsdWUgPT09IE5VTUJFUl9QT1NJVElWRV9JTkZJTklUWSkgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxuXG4gICAgcmV0dXJuIE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICB9XG5cbiAgaWYgKGlzRnJvbnRlbmRNb2RlbE1hcmtlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gZGVzZXJpYWxpemVGcm9udGVuZE1vZGVsTWFya2VyKHZhbHVlKVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcCgoZW50cnkpID0+IGRlc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlKGVudHJ5KSlcbiAgfVxuXG4gIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplZC5cbiAgICAgIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gKi9cbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSB7fVxuXG4gICAgZm9yIChjb25zdCBba2V5LCBuZXN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICBhc3NpZ25TYWZlUHJvcGVydHkoZGVzZXJpYWxpemVkLCBrZXksIGRlc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlKG5lc3RlZFZhbHVlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzZXJpYWxpemVkXG4gIH1cblxuICByZXR1cm4gdmFsdWVcbn1cbiJdfQ==
|
|
306
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LXNlcmlhbGl6YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmQtbW9kZWxzL3RyYW5zcG9ydC1zZXJpYWxpemF0aW9uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUM3RCxPQUFPLGFBQWEsTUFBTSwwQkFBMEIsQ0FBQTtBQUVwRCxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQTtBQUNuQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUE7QUFDeEIsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFBO0FBQ2xDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQTtBQUM1QixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUE7QUFDNUIsTUFBTSxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQTtBQUM1QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUE7QUFDeEIsTUFBTSx3QkFBd0IsR0FBRyxVQUFVLENBQUE7QUFDM0MsTUFBTSx3QkFBd0IsR0FBRyxXQUFXLENBQUE7QUFDNUMsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsQ0FBQTtBQUU5RDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSztJQUNuRCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7UUFDakMsS0FBSztRQUNMLFFBQVEsRUFBRSxJQUFJO1FBQ2QsVUFBVSxFQUFFLElBQUk7UUFDaEIsWUFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEtBQUs7SUFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUV2QyxNQUFNLElBQUksR0FB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RCxJQUFJLFdBQVcsS0FBSyx3QkFBd0I7WUFBRSxPQUFPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQTtRQUU3RSxPQUFPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDOUMsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsc0NBQXNDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUM1RSxDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6Qjs7dUNBRStCO1FBQy9CLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQTtRQUV2QixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZELGtCQUFrQixDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsc0NBQXNDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtRQUM1RixDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUE7SUFDckIsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3Jlc29sdmVGcm9udGVuZE1vZGVsQ2xhc3N9IGZyb20gXCIuL21vZGVsLXJlZ2lzdHJ5LmpzXCJcbmltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gXCIuLi91dGlscy9wbGFpbi1vYmplY3QuanNcIlxuXG5jb25zdCBUWVBFX0tFWSA9IFwiX192ZWxvY2lvdXNfdHlwZVwiXG5jb25zdCBUWVBFX0RBVEUgPSBcImRhdGVcIlxuY29uc3QgVFlQRV9VTkRFRklORUQgPSBcInVuZGVmaW5lZFwiXG5jb25zdCBUWVBFX0JJR0lOVCA9IFwiYmlnaW50XCJcbmNvbnN0IFRZUEVfTlVNQkVSID0gXCJudW1iZXJcIlxuY29uc3QgVFlQRV9GUk9OVEVORF9NT0RFTCA9IFwiZnJvbnRlbmRfbW9kZWxcIlxuY29uc3QgTlVNQkVSX05BTiA9IFwiTmFOXCJcbmNvbnN0IE5VTUJFUl9QT1NJVElWRV9JTkZJTklUWSA9IFwiSW5maW5pdHlcIlxuY29uc3QgTlVNQkVSX05FR0FUSVZFX0lORklOSVRZID0gXCItSW5maW5pdHlcIlxuY29uc3QgUFJFTE9BREVEX1JFTEFUSU9OU0hJUFNfS0VZID0gXCJfX3ByZWxvYWRlZFJlbGF0aW9uc2hpcHNcIlxuXG4vKipcbiAqIEFzc2lnbiBhIGtleSB0byBhIHBsYWluIG9iamVjdCB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIGBfX3Byb3RvX19gIHNldHRlci5cbiAqIFVzZXMgYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgc28gdGhhdCBrZXlzIGxpa2UgYF9fcHJvdG9fX2AgYXJlIHN0b3JlZCBhc1xuICogb3duIGRhdGEgcHJvcGVydGllcyBpbnN0ZWFkIG9mIG11dGF0aW5nIHRoZSBvYmplY3QncyBwcm90b3R5cGUgY2hhaW4uIFRoaXNcbiAqIGxldHMgY2FsbGVycyByZWNlaXZlIGEgcmVndWxhciBge31gIG9iamVjdCAod2l0aCBgT2JqZWN0LnByb3RvdHlwZWAgYW5kIGFcbiAqIG5vcm1hbCBgY29uc3RydWN0b3IubmFtZWApIHdoaWxlIHN0aWxsIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvbi5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgPz59IHRhcmdldCAtIFRhcmdldCBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gUHJvcGVydHkga2V5LlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIFByb3BlcnR5IHZhbHVlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25TYWZlUHJvcGVydHkodGFyZ2V0LCBrZXksIHZhbHVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgIHZhbHVlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG59XG5cbi8qKlxuICogUnVucyBpcyB1bmRlZmluZWQgbWFya2VyLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIENhbmRpZGF0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdmFsdWUgaXMgZW5jb2RlZCB1bmRlZmluZWQgbWFya2VyLlxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZE1hcmtlcih2YWx1ZSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpXG5cbiAgcmV0dXJuIGtleXMubGVuZ3RoID09PSAxICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgVFlQRV9LRVkpICYmIHZhbHVlW1RZUEVfS0VZXSA9PT0gVFlQRV9VTkRFRklORURcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgdmFsdWUgaXMgYSB0eXBlZCBtYXJrZXIgb2JqZWN0IHdpdGggYSBzdHJpbmcgYHZhbHVlYCBmaWVsZC5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgbWFya2VyLlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmtlclR5cGUgLSBFeHBlY3RlZCBtYXJrZXIgdHlwZSB2YWx1ZS5cbiAqIEBwYXJhbSB7KHN0cmluZ1ZhbHVlOiBzdHJpbmcpID0+IGJvb2xlYW59IHZhbHVlTWF0Y2hlcyAtIEFkZGl0aW9uYWwgc3RyaW5nIHZhbHVlIHByZWRpY2F0ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdmFsdWUgbWF0Y2hlcyB0aGUgbWFya2VyIHNoYXBlLlxuICovXG5mdW5jdGlvbiBpc1N0cmluZ1ZhbHVlTWFya2VyKHZhbHVlLCBtYXJrZXJUeXBlLCB2YWx1ZU1hdGNoZXMpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKVxuXG4gIHJldHVybiAoXG4gICAga2V5cy5sZW5ndGggPT09IDJcbiAgICAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIFRZUEVfS0VZKVxuICAgICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgXCJ2YWx1ZVwiKVxuICAgICYmIHZhbHVlW1RZUEVfS0VZXSA9PT0gbWFya2VyVHlwZVxuICAgICYmIHR5cGVvZiB2YWx1ZS52YWx1ZSA9PT0gXCJzdHJpbmdcIlxuICAgICYmIHZhbHVlTWF0Y2hlcyh2YWx1ZS52YWx1ZSlcbiAgKVxufVxuXG4vKipcbiAqIFJ1bnMgaXMgZGF0ZSBtYXJrZXIuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gQ2FuZGlkYXRlIHZhbHVlLlxuICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB2YWx1ZSBpcyBlbmNvZGVkIGRhdGUgbWFya2VyLlxuICovXG5mdW5jdGlvbiBpc0RhdGVNYXJrZXIodmFsdWUpIHtcbiAgcmV0dXJuIGlzU3RyaW5nVmFsdWVNYXJrZXIodmFsdWUsIFRZUEVfREFURSwgKCkgPT4gdHJ1ZSlcbn1cblxuLyoqXG4gKiBSdW5zIGlzIGJpZyBpbnQgbWFya2VyLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIENhbmRpZGF0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdmFsdWUgaXMgZW5jb2RlZCBiaWdpbnQgbWFya2VyLlxuICovXG5mdW5jdGlvbiBpc0JpZ0ludE1hcmtlcih2YWx1ZSkge1xuICByZXR1cm4gaXNTdHJpbmdWYWx1ZU1hcmtlcih2YWx1ZSwgVFlQRV9CSUdJTlQsIChzdHJpbmdWYWx1ZSkgPT4gL14tP1xcZCskLy50ZXN0KHN0cmluZ1ZhbHVlKSlcbn1cblxuLyoqXG4gKiBSdW5zIGlzIG5vbiBmaW5pdGUgbnVtYmVyIG1hcmtlci5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHZhbHVlIGlzIGVuY29kZWQgbm9uLWZpbml0ZSBudW1iZXIgbWFya2VyLlxuICovXG5mdW5jdGlvbiBpc05vbkZpbml0ZU51bWJlck1hcmtlcih2YWx1ZSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpXG4gIGNvbnN0IG1hcmtlclZhbHVlID0gdmFsdWUudmFsdWVcblxuICByZXR1cm4gKFxuICAgIGtleXMubGVuZ3RoID09PSAyXG4gICAgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBUWVBFX0tFWSlcbiAgICAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIFwidmFsdWVcIilcbiAgICAmJiB2YWx1ZVtUWVBFX0tFWV0gPT09IFRZUEVfTlVNQkVSXG4gICAgJiYgKG1hcmtlclZhbHVlID09PSBOVU1CRVJfTkFOIHx8IG1hcmtlclZhbHVlID09PSBOVU1CRVJfUE9TSVRJVkVfSU5GSU5JVFkgfHwgbWFya2VyVmFsdWUgPT09IE5VTUJFUl9ORUdBVElWRV9JTkZJTklUWSlcbiAgKVxufVxuXG4vKipcbiAqIFJ1bnMgaXMgZnJvbnRlbmQgbW9kZWwgbWFya2VyLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIENhbmRpZGF0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyB7X192ZWxvY2lvdXNfdHlwZTogXCJmcm9udGVuZF9tb2RlbFwiLCBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCA/PiwgbW9kZWxOYW1lOiBzdHJpbmcsIHByZWxvYWRlZFJlbGF0aW9uc2hpcHM/OiBSZWNvcmQ8c3RyaW5nLCA/Pn19IC0gV2hldGhlciB2YWx1ZSBpcyBlbmNvZGVkIGZyb250ZW5kLW1vZGVsIG1hcmtlci5cbiAqL1xuZnVuY3Rpb24gaXNGcm9udGVuZE1vZGVsTWFya2VyKHZhbHVlKSB7XG4gIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IG1vZGVsTmFtZSA9IHZhbHVlLm1vZGVsTmFtZVxuICBjb25zdCBhdHRyaWJ1dGVzID0gdmFsdWUuYXR0cmlidXRlc1xuICBjb25zdCBwcmVsb2FkZWRSZWxhdGlvbnNoaXBzID0gdmFsdWUucHJlbG9hZGVkUmVsYXRpb25zaGlwc1xuXG4gIHJldHVybiAoXG4gICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBUWVBFX0tFWSlcbiAgICAmJiB2YWx1ZVtUWVBFX0tFWV0gPT09IFRZUEVfRlJPTlRFTkRfTU9ERUxcbiAgICAmJiB0eXBlb2YgbW9kZWxOYW1lID09PSBcInN0cmluZ1wiXG4gICAgJiYgbW9kZWxOYW1lLmxlbmd0aCA+IDBcbiAgICAmJiBpc1BsYWluT2JqZWN0KGF0dHJpYnV0ZXMpXG4gICAgJiYgKHByZWxvYWRlZFJlbGF0aW9uc2hpcHMgPT09IHVuZGVmaW5lZCB8fCBpc1BsYWluT2JqZWN0KHByZWxvYWRlZFJlbGF0aW9uc2hpcHMpKVxuICApXG59XG5cbi8qKlxuICogUnVucyB0aGUgaXNCYWNrZW5kTW9kZWxJbnN0YW5jZSBoZWxwZXIuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gQ2FuZGlkYXRlIHZhbHVlLlxuICogQHJldHVybnMge3ZhbHVlIGlzIHthdHRyaWJ1dGVzOiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCA/PiwgY29uc3RydWN0b3I6IHtnZXRNb2RlbE5hbWU/OiAoKSA9PiBzdHJpbmcsIG5hbWU/OiBzdHJpbmd9LCBnZXRNb2RlbENsYXNzOiAoKSA9PiB7Z2V0UmVsYXRpb25zaGlwc01hcDogKCkgPT4gUmVjb3JkPHN0cmluZywgPz59LCBnZXRSZWxhdGlvbnNoaXBCeU5hbWU6IChyZWxhdGlvbnNoaXBOYW1lOiBzdHJpbmcpID0+IHtnZXRQcmVsb2FkZWQ6ICgpID0+IGJvb2xlYW4sIGxvYWRlZDogKCkgPT4gP319fSAtIFdoZXRoZXIgdmFsdWUgbG9va3MgbGlrZSBhIGJhY2tlbmQgbW9kZWwgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JhY2tlbmRNb2RlbEluc3RhbmNlKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBjYW5kaWRhdGUgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovICh2YWx1ZSlcblxuICByZXR1cm4gKFxuICAgIHR5cGVvZiBjYW5kaWRhdGUuYXR0cmlidXRlcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIGNhbmRpZGF0ZS5nZXRNb2RlbENsYXNzID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2YgY2FuZGlkYXRlLmdldFJlbGF0aW9uc2hpcEJ5TmFtZSA9PT0gXCJmdW5jdGlvblwiXG4gIClcbn1cblxuLyoqXG4gKiBSdW5zIHNlcmlhbGl6ZSBmcm9udGVuZCBtb2RlbCB0cmFuc3BvcnQgdmFsdWUgaW50ZXJuYWwuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gVmFsdWUgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIHtXZWFrU2V0PG9iamVjdD59IHNlZW5Nb2RlbHMgLSBNb2RlbHMgYWxyZWFkeSB2aXNpdGVkIGluIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBwYXRoLlxuICogQHJldHVybnMgez99IC0gU2VyaWFsaXplZCB2YWx1ZSB3aXRoIHRyYW5zcG9ydCBtYXJrZXJzLlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWVJbnRlcm5hbCh2YWx1ZSwgc2Vlbk1vZGVscykge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB7W1RZUEVfS0VZXTogVFlQRV9VTkRFRklORUR9XG4gIH1cblxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtUWVBFX0tFWV06IFRZUEVfREFURSxcbiAgICAgIHZhbHVlOiB2YWx1ZS50b0lTT1N0cmluZygpXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJiaWdpbnRcIikge1xuICAgIHJldHVybiB7XG4gICAgICBbVFlQRV9LRVldOiBUWVBFX0JJR0lOVCxcbiAgICAgIHZhbHVlOiB2YWx1ZS50b1N0cmluZygpXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiAhTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkge1xuICAgIGNvbnN0IG1hcmtlclZhbHVlID0gTnVtYmVyLmlzTmFOKHZhbHVlKVxuICAgICAgPyBOVU1CRVJfTkFOXG4gICAgICA6ICh2YWx1ZSA+IDAgPyBOVU1CRVJfUE9TSVRJVkVfSU5GSU5JVFkgOiBOVU1CRVJfTkVHQVRJVkVfSU5GSU5JVFkpXG5cbiAgICByZXR1cm4ge1xuICAgICAgW1RZUEVfS0VZXTogVFlQRV9OVU1CRVIsXG4gICAgICB2YWx1ZTogbWFya2VyVmFsdWVcbiAgICB9XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUubWFwKChlbnRyeSkgPT4gc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlSW50ZXJuYWwoZW50cnksIHNlZW5Nb2RlbHMpKVxuICB9XG5cbiAgaWYgKGlzQmFja2VuZE1vZGVsSW5zdGFuY2UodmFsdWUpKSB7XG4gICAgY29uc3QgbW9kZWxBdHRyaWJ1dGVzID0gdmFsdWUuYXR0cmlidXRlcygpXG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IHZhbHVlLmNvbnN0cnVjdG9yXG4gICAgY29uc3QgbW9kZWxOYW1lID0gdHlwZW9mIG1vZGVsQ2xhc3MuZ2V0TW9kZWxOYW1lID09PSBcImZ1bmN0aW9uXCIgPyBtb2RlbENsYXNzLmdldE1vZGVsTmFtZSgpIDogbW9kZWxDbGFzcy5uYW1lXG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemVkIG1vZGVsLlxuICAgICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gKi9cbiAgICBjb25zdCBzZXJpYWxpemVkTW9kZWwgPSB7XG4gICAgICBbVFlQRV9LRVldOiBUWVBFX0ZST05URU5EX01PREVMLFxuICAgICAgYXR0cmlidXRlczogLyoqXG4gICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovIChzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWVJbnRlcm5hbChtb2RlbEF0dHJpYnV0ZXMsIHNlZW5Nb2RlbHMpKSxcbiAgICAgIG1vZGVsTmFtZVxuICAgIH1cblxuICAgIGlmIChzZWVuTW9kZWxzLmhhcyh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBzZXJpYWxpemVkTW9kZWxcbiAgICB9XG5cbiAgICBzZWVuTW9kZWxzLmFkZCh2YWx1ZSlcblxuICAgIC8qKlxuICAgICAqIFByZWxvYWRlZCByZWxhdGlvbnNoaXBzLlxuICAgICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gKi9cbiAgICBjb25zdCBwcmVsb2FkZWRSZWxhdGlvbnNoaXBzID0ge31cbiAgICBjb25zdCByZWxhdGlvbnNoaXBzTWFwID0gdmFsdWUuZ2V0TW9kZWxDbGFzcygpLmdldFJlbGF0aW9uc2hpcHNNYXAoKVxuXG4gICAgZm9yIChjb25zdCByZWxhdGlvbnNoaXBOYW1lIG9mIE9iamVjdC5rZXlzKHJlbGF0aW9uc2hpcHNNYXApKSB7XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSB2YWx1ZS5nZXRSZWxhdGlvbnNoaXBCeU5hbWUocmVsYXRpb25zaGlwTmFtZSlcblxuICAgICAgaWYgKCFyZWxhdGlvbnNoaXAuZ2V0UHJlbG9hZGVkKCkpIGNvbnRpbnVlXG5cbiAgICAgIGNvbnN0IGxvYWRlZFJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcC5sb2FkZWQoKVxuXG4gICAgICBhc3NpZ25TYWZlUHJvcGVydHkocHJlbG9hZGVkUmVsYXRpb25zaGlwcywgcmVsYXRpb25zaGlwTmFtZSwgc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlSW50ZXJuYWwoXG4gICAgICAgIGxvYWRlZFJlbGF0aW9uc2hpcCA9PSB1bmRlZmluZWQgPyBudWxsIDogbG9hZGVkUmVsYXRpb25zaGlwLFxuICAgICAgICBzZWVuTW9kZWxzXG4gICAgICApKVxuICAgIH1cblxuICAgIHNlZW5Nb2RlbHMuZGVsZXRlKHZhbHVlKVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKHByZWxvYWRlZFJlbGF0aW9uc2hpcHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHNlcmlhbGl6ZWRNb2RlbC5wcmVsb2FkZWRSZWxhdGlvbnNoaXBzID0gcHJlbG9hZGVkUmVsYXRpb25zaGlwc1xuICAgIH1cblxuICAgIHJldHVybiBzZXJpYWxpemVkTW9kZWxcbiAgfVxuXG4gIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZWQuXG4gICAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqL1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB7fVxuXG4gICAgZm9yIChjb25zdCBba2V5LCBuZXN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICBhc3NpZ25TYWZlUHJvcGVydHkoc2VyaWFsaXplZCwga2V5LCBzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWVJbnRlcm5hbChuZXN0ZWRWYWx1ZSwgc2Vlbk1vZGVscykpXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcmlhbGl6ZWRcbiAgfVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIFJ1bnMgZGVzZXJpYWxpemUgZnJvbnRlbmQgbW9kZWwgbWFya2VyLlxuICogQHBhcmFtIHt7YXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgPz4sIG1vZGVsTmFtZTogc3RyaW5nLCBwcmVsb2FkZWRSZWxhdGlvbnNoaXBzPzogUmVjb3JkPHN0cmluZywgPz59fSBtYXJrZXIgLSBFbmNvZGVkIGZyb250ZW5kLW1vZGVsIG1hcmtlci5cbiAqIEByZXR1cm5zIHs/fSAtIEh5ZHJhdGVkIGZyb250ZW5kIG1vZGVsIG9yIHBsYWluIG9iamVjdCBmYWxsYmFjay5cbiAqL1xuZnVuY3Rpb24gZGVzZXJpYWxpemVGcm9udGVuZE1vZGVsTWFya2VyKG1hcmtlcikge1xuICBjb25zdCBhdHRyaWJ1dGVzID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovIChkZXNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZShtYXJrZXIuYXR0cmlidXRlcykpXG4gIGNvbnN0IHByZWxvYWRlZFJlbGF0aW9uc2hpcHMgPSBpc1BsYWluT2JqZWN0KG1hcmtlci5wcmVsb2FkZWRSZWxhdGlvbnNoaXBzKVxuICAgID8gLyoqXG4gICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovIChkZXNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZShtYXJrZXIucHJlbG9hZGVkUmVsYXRpb25zaGlwcykpXG4gICAgOiB7fVxuICBjb25zdCBtb2RlbENsYXNzID0gcmVzb2x2ZUZyb250ZW5kTW9kZWxDbGFzcyhtYXJrZXIubW9kZWxOYW1lKVxuXG4gIGlmICghbW9kZWxDbGFzcyB8fCB0eXBlb2YgbW9kZWxDbGFzcy5pbnN0YW50aWF0ZUZyb21SZXNwb25zZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHByZWxvYWRlZFJlbGF0aW9uc2hpcHMpLmxlbmd0aCA8IDEpIHtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmF0dHJpYnV0ZXMsXG4gICAgICBbUFJFTE9BREVEX1JFTEFUSU9OU0hJUFNfS0VZXTogcHJlbG9hZGVkUmVsYXRpb25zaGlwc1xuICAgIH1cbiAgfVxuXG4gIC8vIFJvdXRlIGh5ZHJhdGlvbiB0aHJvdWdoIGBpbnN0YW50aWF0ZUZyb21SZXNwb25zZWAgc29cbiAgLy8gYF9fYWJpbGl0aWVzYCAvIGBfX3F1ZXJ5RGF0YWAgLyBgX19hc3NvY2lhdGlvbkNvdW50c2AgL1xuICAvLyBgX19wcmVsb2FkZWRSZWxhdGlvbnNoaXBzYCBiYWtlZCBpbnRvIHRoZSBtYXJrZXIncyBhdHRyaWJ1dGVzIGJsb2IgKGUuZy5cbiAgLy8gYnkgYHJlc291cmNlLnNlcmlhbGl6ZWAgaW4gY3VzdG9tLWNvbW1hbmQgYXV0by1zZXJpYWxpemF0aW9uKSBnZXRcbiAgLy8gZXh0cmFjdGVkIGFuZCBhcHBsaWVkLiBMZWdhY3kgbWFya2VycyB0aGF0IHVzZWQgYSBzZXBhcmF0ZSB0b3AtbGV2ZWxcbiAgLy8gYHByZWxvYWRlZFJlbGF0aW9uc2hpcHNgIGZpZWxkIG1lcmdlIHRoZW0gdW5kZXIgdGhlIHN0YW5kYXJkIGtleSBmaXJzdFxuICAvLyBzbyBgbW9kZWxEYXRhRnJvbVJlc3BvbnNlYCBwaWNrcyB0aGVtIHVwLlxuICBjb25zdCByZXNwb25zZUF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhwcmVsb2FkZWRSZWxhdGlvbnNoaXBzKS5sZW5ndGggPiAwXG4gICAgPyB7XG4gICAgICAuLi5hdHRyaWJ1dGVzLFxuICAgICAgW1BSRUxPQURFRF9SRUxBVElPTlNISVBTX0tFWV06IHByZWxvYWRlZFJlbGF0aW9uc2hpcHNcbiAgICB9XG4gICAgOiBhdHRyaWJ1dGVzXG5cbiAgcmV0dXJuIG1vZGVsQ2xhc3MuaW5zdGFudGlhdGVGcm9tUmVzcG9uc2UocmVzcG9uc2VBdHRyaWJ1dGVzKVxufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZSBoZWxwZXIuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gVmFsdWUgdG8gc2VyaWFsaXplLlxuICogQHJldHVybnMgez99IC0gU2VyaWFsaXplZCB2YWx1ZSB3aXRoIHRyYW5zcG9ydCBtYXJrZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiBzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWVJbnRlcm5hbCh2YWx1ZSwgbmV3IFdlYWtTZXQoKSlcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBkZXNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZSBoZWxwZXIuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gVmFsdWUgdG8gZGVzZXJpYWxpemUuXG4gKiBAcmV0dXJucyB7P30gLSBEZXNlcmlhbGl6ZWQgdmFsdWUgd2l0aCB0cmFuc3BvcnQgbWFya2VycyByZXN0b3JlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlKHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZE1hcmtlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBpZiAoaXNEYXRlTWFya2VyKHZhbHVlKSkge1xuICAgIGNvbnN0IGRhdGVWYWx1ZSA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7e3ZhbHVlOiBzdHJpbmd9fSAqLyAodmFsdWUpLnZhbHVlXG5cbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZVZhbHVlKVxuICB9XG5cbiAgaWYgKGlzQmlnSW50TWFya2VyKHZhbHVlKSkge1xuICAgIGNvbnN0IGJpZ2ludFZhbHVlID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7e3ZhbHVlOiBzdHJpbmd9fSAqLyAodmFsdWUpLnZhbHVlXG5cbiAgICByZXR1cm4gQmlnSW50KGJpZ2ludFZhbHVlKVxuICB9XG5cbiAgaWYgKGlzTm9uRmluaXRlTnVtYmVyTWFya2VyKHZhbHVlKSkge1xuICAgIGNvbnN0IG51bWJlclZhbHVlID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7e3ZhbHVlOiBzdHJpbmd9fSAqLyAodmFsdWUpLnZhbHVlXG5cbiAgICBpZiAobnVtYmVyVmFsdWUgPT09IE5VTUJFUl9OQU4pIHJldHVybiBOdW1iZXIuTmFOXG4gICAgaWYgKG51bWJlclZhbHVlID09PSBOVU1CRVJfUE9TSVRJVkVfSU5GSU5JVFkpIHJldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcblxuICAgIHJldHVybiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgfVxuXG4gIGlmIChpc0Zyb250ZW5kTW9kZWxNYXJrZXIodmFsdWUpKSB7XG4gICAgcmV0dXJuIGRlc2VyaWFsaXplRnJvbnRlbmRNb2RlbE1hcmtlcih2YWx1ZSlcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoKGVudHJ5KSA9PiBkZXNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZShlbnRyeSkpXG4gIH1cblxuICBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZWQuXG4gICAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqL1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIG5lc3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgIGFzc2lnblNhZmVQcm9wZXJ0eShkZXNlcmlhbGl6ZWQsIGtleSwgZGVzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWUobmVzdGVkVmFsdWUpKVxuICAgIH1cblxuICAgIHJldHVybiBkZXNlcmlhbGl6ZWRcbiAgfVxuXG4gIHJldHVybiB2YWx1ZVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-destroyed-event.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/use-destroyed-event.js"],"names":[],"mappings":"AAuDA;;;;;;;GAOG;AACH,8DALW,kBAAkB,GAAG,qBAAqB,GAAG,qBAAqB,EAAE,GAAG,IAAI,GAAG,SAAS,YACvF,iCAAiC,YACjC,wBAAwB,GACtB,IAAI,CAYhB;;;;
|
|
1
|
+
{"version":3,"file":"use-destroyed-event.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/use-destroyed-event.js"],"names":[],"mappings":"AAuDA;;;;;;;GAOG;AACH,8DALW,kBAAkB,GAAG,qBAAqB,GAAG,qBAAqB,EAAE,GAAG,IAAI,GAAG,SAAS,YACvF,iCAAiC,YACjC,wBAAwB,GACtB,IAAI,CAYhB;;;;iCA9DY,OAAO,WAAW,EAAE,kBAAkB;;;;oCAGtC,OAAO,WAAW,EAAE,OAAO;;;;oDAG3B,OAAO,4BAA4B,EAAE,gCAAgC;;;;uDAGrE;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC;;;;+CAGZ,qCAAqC,GAAG,wCAAwC;;;;uCAGhF,OAAO,4BAA4B,EAAE,yBAAyB;;;;gDAG9D,CAAC,OAAO,EAAE,gCAAgC,KAAK,IAAI"}
|
|
@@ -6,25 +6,25 @@ import { modelsDependencyKey, modelsFromInput } from "./event-hook-models.js";
|
|
|
6
6
|
import useModelClassEvent from "./use-model-class-event.js";
|
|
7
7
|
/**
|
|
8
8
|
* FrontendModelClass type.
|
|
9
|
-
|
|
9
|
+
* @typedef {import("./base.js").FrontendModelClass} FrontendModelClass */
|
|
10
10
|
/**
|
|
11
11
|
* FrontendModelInstance type.
|
|
12
|
-
|
|
12
|
+
* @typedef {import("./base.js").default} FrontendModelInstance */
|
|
13
13
|
/**
|
|
14
14
|
* FrontendModelClassDestroyEventPayload type.
|
|
15
|
-
|
|
15
|
+
* @typedef {import("./use-model-class-event.js").FrontendModelDestroyEventPayload} FrontendModelClassDestroyEventPayload */
|
|
16
16
|
/**
|
|
17
17
|
* Defines this typedef.
|
|
18
|
-
|
|
18
|
+
* @typedef {{id: string}} FrontendModelInstanceDestroyEventPayload */
|
|
19
19
|
/**
|
|
20
20
|
* FrontendModelDestroyEventPayload type.
|
|
21
|
-
|
|
21
|
+
* @typedef {FrontendModelClassDestroyEventPayload | FrontendModelInstanceDestroyEventPayload} FrontendModelDestroyEventPayload */
|
|
22
22
|
/**
|
|
23
23
|
* UseDestroyedEventOptions type.
|
|
24
|
-
|
|
24
|
+
* @typedef {import("./use-model-class-event.js").UseModelClassEventOptions} UseDestroyedEventOptions */
|
|
25
25
|
/**
|
|
26
26
|
* FrontendModelDestroyEventCallback type.
|
|
27
|
-
|
|
27
|
+
* @typedef {(payload: FrontendModelDestroyEventPayload) => void} FrontendModelDestroyEventCallback */
|
|
28
28
|
/**
|
|
29
29
|
* Runs assert no unknown options.
|
|
30
30
|
* @param {Record<string, import("./query.js").FrontendModelTransportValue | (() => void) | undefined>} restOptions - Unknown options object.
|
|
@@ -83,7 +83,7 @@ function useInstanceDestroyedEvent(modelOrModels, callback, options) {
|
|
|
83
83
|
const eventCallback = useMemo(() => {
|
|
84
84
|
const wrappedCallback = (/**
|
|
85
85
|
* Narrows the runtime value to the documented type.
|
|
86
|
-
|
|
86
|
+
* @type {FrontendModelInstanceDestroyEventPayload} */ payload) => {
|
|
87
87
|
if (activeRef.current)
|
|
88
88
|
callbackRef.current(payload);
|
|
89
89
|
};
|
|
@@ -102,11 +102,11 @@ function useInstanceDestroyedEvent(modelOrModels, callback, options) {
|
|
|
102
102
|
let closed = false;
|
|
103
103
|
/**
|
|
104
104
|
* Unsubscribe callbacks.
|
|
105
|
-
|
|
105
|
+
* @type {Array<() => void>} */
|
|
106
106
|
const unsubscribeCallbacks = [];
|
|
107
107
|
const subscriptionCallback = (/**
|
|
108
108
|
* Narrows the runtime value to the documented type.
|
|
109
|
-
|
|
109
|
+
* @type {FrontendModelInstanceDestroyEventPayload} */ payload) => {
|
|
110
110
|
if (!closed)
|
|
111
111
|
eventCallback(payload);
|
|
112
112
|
};
|
|
@@ -132,4 +132,4 @@ function useInstanceDestroyedEvent(modelOrModels, callback, options) {
|
|
|
132
132
|
};
|
|
133
133
|
}, [active, eventCallback, modelsKey, onConnected, projectionKey]);
|
|
134
134
|
}
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWRlc3Ryb3llZC1ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZC1tb2RlbHMvdXNlLWRlc3Ryb3llZC1ldmVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxnQkFBZ0IsTUFBTSxVQUFVLENBQUE7QUFDdkMsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBRWhELE9BQU8sNkJBQTZCLE1BQU0sdUNBQXVDLENBQUE7QUFDakYsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQzNFLE9BQU8sa0JBQWtCLE1BQU0sNEJBQTRCLENBQUE7QUFFM0Q7O3lFQUV5RTtBQUN6RTs7aUVBRWlFO0FBQ2pFOzsySEFFMkg7QUFDM0g7O3FFQUVxRTtBQUNyRTs7aUlBRWlJO0FBQ2pJOzt1R0FFdUc7QUFDdkc7O3FHQUVxRztBQUVyRzs7OztHQUlHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxXQUFXO0lBQ3pDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUVuRCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTTtJQUUzQyxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ2pHLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUywyQkFBMkIsQ0FBQyxLQUFLO0lBQ3hDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFdkIsT0FBTyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtBQUNwQyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxPQUFPLFVBQVUsaUJBQWlCLENBQUMsa0JB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QUUsQ0FBQTtRQUVKLE9BQU8sR0FBRyxFQUFFO1lBQ1YsTUFBTSxHQUFHLElBQUksQ0FBQTtZQUViLEtBQUssTUFBTSxXQUFXLElBQUksb0JBQW9CLEVBQUUsQ0FBQztnQkFDL0MsV0FBVyxFQUFFLENBQUE7WUFDZixDQUFDO1lBRUQsNkJBQTZCLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDOUMsQ0FBQyxDQUFBO0lBQ0gsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUE7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgZGVib3VuY2VGdW5jdGlvbiBmcm9tIFwiZGVib3VuY2VcIlxuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZn0gZnJvbSBcInJlYWN0XCJcblxuaW1wb3J0IGNsZWFyUGVuZGluZ0RlYm91bmNlZENhbGxiYWNrIGZyb20gXCIuL2NsZWFyLXBlbmRpbmctZGVib3VuY2VkLWNhbGxiYWNrLmpzXCJcbmltcG9ydCB7bW9kZWxzRGVwZW5kZW5jeUtleSwgbW9kZWxzRnJvbUlucHV0fSBmcm9tIFwiLi9ldmVudC1ob29rLW1vZGVscy5qc1wiXG5pbXBvcnQgdXNlTW9kZWxDbGFzc0V2ZW50IGZyb20gXCIuL3VzZS1tb2RlbC1jbGFzcy1ldmVudC5qc1wiXG5cbi8qKlxuICogRnJvbnRlbmRNb2RlbENsYXNzIHR5cGUuXG4gIEB0eXBlZGVmIHtpbXBvcnQoXCIuL2Jhc2UuanNcIikuRnJvbnRlbmRNb2RlbENsYXNzfSBGcm9udGVuZE1vZGVsQ2xhc3MgKi9cbi8qKlxuICogRnJvbnRlbmRNb2RlbEluc3RhbmNlIHR5cGUuXG4gIEB0eXBlZGVmIHtpbXBvcnQoXCIuL2Jhc2UuanNcIikuZGVmYXVsdH0gRnJvbnRlbmRNb2RlbEluc3RhbmNlICovXG4vKipcbiAqIEZyb250ZW5kTW9kZWxDbGFzc0Rlc3Ryb3lFdmVudFBheWxvYWQgdHlwZS5cbiAgQHR5cGVkZWYge2ltcG9ydChcIi4vdXNlLW1vZGVsLWNsYXNzLWV2ZW50LmpzXCIpLkZyb250ZW5kTW9kZWxEZXN0cm95RXZlbnRQYXlsb2FkfSBGcm9udGVuZE1vZGVsQ2xhc3NEZXN0cm95RXZlbnRQYXlsb2FkICovXG4vKipcbiAqIERlZmluZXMgdGhpcyB0eXBlZGVmLlxuICBAdHlwZWRlZiB7e2lkOiBzdHJpbmd9fSBGcm9udGVuZE1vZGVsSW5zdGFuY2VEZXN0cm95RXZlbnRQYXlsb2FkICovXG4vKipcbiAqIEZyb250ZW5kTW9kZWxEZXN0cm95RXZlbnRQYXlsb2FkIHR5cGUuXG4gIEB0eXBlZGVmIHtGcm9udGVuZE1vZGVsQ2xhc3NEZXN0cm95RXZlbnRQYXlsb2FkIHwgRnJvbnRlbmRNb2RlbEluc3RhbmNlRGVzdHJveUV2ZW50UGF5bG9hZH0gRnJvbnRlbmRNb2RlbERlc3Ryb3lFdmVudFBheWxvYWQgKi9cbi8qKlxuICogVXNlRGVzdHJveWVkRXZlbnRPcHRpb25zIHR5cGUuXG4gIEB0eXBlZGVmIHtpbXBvcnQoXCIuL3VzZS1tb2RlbC1jbGFzcy1ldmVudC5qc1wiKS5Vc2VNb2RlbENsYXNzRXZlbnRPcHRpb25zfSBVc2VEZXN0cm95ZWRFdmVudE9wdGlvbnMgKi9cbi8qKlxuICogRnJvbnRlbmRNb2RlbERlc3Ryb3lFdmVudENhbGxiYWNrIHR5cGUuXG4gIEB0eXBlZGVmIHsocGF5bG9hZDogRnJvbnRlbmRNb2RlbERlc3Ryb3lFdmVudFBheWxvYWQpID0+IHZvaWR9IEZyb250ZW5kTW9kZWxEZXN0cm95RXZlbnRDYWxsYmFjayAqL1xuXG4vKipcbiAqIFJ1bnMgYXNzZXJ0IG5vIHVua25vd24gb3B0aW9ucy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWUgfCAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ+fSByZXN0T3B0aW9ucyAtIFVua25vd24gb3B0aW9ucyBvYmplY3QuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9Vbmtub3duT3B0aW9ucyhyZXN0T3B0aW9ucykge1xuICBjb25zdCB1bmtub3duT3B0aW9uTmFtZXMgPSBPYmplY3Qua2V5cyhyZXN0T3B0aW9ucylcblxuICBpZiAodW5rbm93bk9wdGlvbk5hbWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG9wdGlvbnMgZ2l2ZW4gdG8gdXNlRGVzdHJveWVkRXZlbnQ6ICR7dW5rbm93bk9wdGlvbk5hbWVzLmpvaW4oXCIsIFwiKX1gKVxufVxuXG4vKipcbiAqIFJ1bnMgZXZlbnQgcXVlcnkgZGVwZW5kZW5jeSBwYXlsb2FkLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3F1ZXJ5LmpzXCIpLmRlZmF1bHQ8RnJvbnRlbmRNb2RlbENsYXNzPiB8IHVuZGVmaW5lZH0gcXVlcnkgLSBFdmVudCBxdWVyeSBvcHRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsRXZlbnRPcHRpb25zUGF5bG9hZCB8IG51bGx9IFN0YWJsZSBkZXBlbmRlbmN5IHBheWxvYWQuXG4gKi9cbmZ1bmN0aW9uIGV2ZW50UXVlcnlEZXBlbmRlbmN5UGF5bG9hZChxdWVyeSkge1xuICBpZiAoIXF1ZXJ5KSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiBxdWVyeS5ldmVudE9wdGlvbnNQYXlsb2FkKClcbn1cblxuLyoqXG4gKiBSZWFjdCBob29rIGZvciBmcm9udGVuZC1tb2RlbCBkZXN0cm95IGV2ZW50cy4gUGFzcyBhIG1vZGVsIGNsYXNzIGZvciBjbGFzcy1sZXZlbFxuICogZGVzdHJveSBldmVudHMsIG9yIGEgbW9kZWwgLyBtb2RlbCBhcnJheSBmb3IgaW5zdGFuY2UtbGV2ZWwgZGVzdHJveSBldmVudHMuXG4gKiBAcGFyYW0ge0Zyb250ZW5kTW9kZWxDbGFzcyB8IEZyb250ZW5kTW9kZWxJbnN0YW5jZSB8IEZyb250ZW5kTW9kZWxJbnN0YW5jZVtdIHwgbnVsbCB8IHVuZGVmaW5lZH0gbW9kZWxDbGFzc09yTW9kZWxzIC0gTW9kZWwgY2xhc3MsIG1vZGVsLCBvciBtb2RlbHMuXG4gKiBAcGFyYW0ge0Zyb250ZW5kTW9kZWxEZXN0cm95RXZlbnRDYWxsYmFja30gY2FsbGJhY2sgLSBFdmVudCBjYWxsYmFjay5cbiAqIEBwYXJhbSB7VXNlRGVzdHJveWVkRXZlbnRPcHRpb25zfSBbb3B0aW9uc10gLSBIb29rIG9wdGlvbnMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRGVzdHJveWVkRXZlbnQobW9kZWxDbGFzc09yTW9kZWxzLCBjYWxsYmFjaywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHthY3RpdmUgPSB0cnVlLCBhYmlsaXRpZXMsIGRlYm91bmNlID0gZmFsc2UsIG9uQ29ubmVjdGVkLCBwcmVsb2FkLCBxdWVyeSwgcXVlcnlEYXRhLCBzZWxlY3QsIHNlbGVjdHNFeHRyYSwgd2l0aENvdW50LCAuLi5yZXN0T3B0aW9uc30gPSBvcHRpb25zXG4gIGFzc2VydE5vVW5rbm93bk9wdGlvbnMocmVzdE9wdGlvbnMpXG5cbiAgY29uc3QgY2xhc3NNb2RlbCA9IHR5cGVvZiBtb2RlbENsYXNzT3JNb2RlbHMgPT09IFwiZnVuY3Rpb25cIiA/IG1vZGVsQ2xhc3NPck1vZGVscyA6IG51bGxcbiAgY29uc3QgaW5zdGFuY2VNb2RlbHMgPSB0eXBlb2YgbW9kZWxDbGFzc09yTW9kZWxzID09PSBcImZ1bmN0aW9uXCIgPyBudWxsIDogbW9kZWxDbGFzc09yTW9kZWxzXG4gIGNvbnN0IHByb2plY3Rpb25PcHRpb25zID0ge2FiaWxpdGllcywgcHJlbG9hZCwgcXVlcnksIHF1ZXJ5RGF0YSwgc2VsZWN0LCBzZWxlY3RzRXh0cmEsIHdpdGhDb3VudH1cblxuICB1c2VNb2RlbENsYXNzRXZlbnQoY2xhc3NNb2RlbCwgXCJkZXN0cm95XCIsIGNhbGxiYWNrLCB7YWN0aXZlOiBhY3RpdmUgJiYgQm9vbGVhbihjbGFzc01vZGVsKSwgZGVib3VuY2UsIG9uQ29ubmVjdGVkLCAuLi5wcm9qZWN0aW9uT3B0aW9uc30pXG4gIHVzZUluc3RhbmNlRGVzdHJveWVkRXZlbnQoaW5zdGFuY2VNb2RlbHMsIGNhbGxiYWNrLCB7YWN0aXZlOiBhY3RpdmUgJiYgIWNsYXNzTW9kZWwsIGRlYm91bmNlLCBvbkNvbm5lY3RlZCwgLi4ucHJvamVjdGlvbk9wdGlvbnN9KVxufVxuXG4vKipcbiAqIFJ1bnMgdXNlIGluc3RhbmNlIGRlc3Ryb3llZCBldmVudC5cbiAqIEBwYXJhbSB7RnJvbnRlbmRNb2RlbEluc3RhbmNlIHwgRnJvbnRlbmRNb2RlbEluc3RhbmNlW10gfCBudWxsIHwgdW5kZWZpbmVkfSBtb2RlbE9yTW9kZWxzIC0gTW9kZWwgb3IgbW9kZWxzLlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsRGVzdHJveUV2ZW50Q2FsbGJhY2t9IGNhbGxiYWNrIC0gRXZlbnQgY2FsbGJhY2suXG4gKiBAcGFyYW0ge1VzZURlc3Ryb3llZEV2ZW50T3B0aW9uc30gb3B0aW9ucyAtIEhvb2sgb3B0aW9ucy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB1c2VJbnN0YW5jZURlc3Ryb3llZEV2ZW50KG1vZGVsT3JNb2RlbHMsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIGNvbnN0IHthY3RpdmUgPSB0cnVlLCBhYmlsaXRpZXMsIGRlYm91bmNlID0gZmFsc2UsIG9uQ29ubmVjdGVkLCBwcmVsb2FkLCBxdWVyeSwgcXVlcnlEYXRhLCBzZWxlY3QsIHNlbGVjdHNFeHRyYSwgd2l0aENvdW50fSA9IG9wdGlvbnNcbiAgY29uc3QgcHJvamVjdGlvbktleSA9IEpTT04uc3RyaW5naWZ5KHthYmlsaXRpZXMsIHByZWxvYWQsIHF1ZXJ5OiBldmVudFF1ZXJ5RGVwZW5kZW5jeVBheWxvYWQocXVlcnkpLCBxdWVyeURhdGEsIHNlbGVjdCwgc2VsZWN0c0V4dHJhLCB3aXRoQ291bnR9KVxuICBjb25zdCBwcm9qZWN0aW9uT3B0aW9uc1JlZiA9IHVzZVJlZih7YWJpbGl0aWVzLCBwcmVsb2FkLCBxdWVyeSwgcXVlcnlEYXRhLCBzZWxlY3QsIHNlbGVjdHNFeHRyYSwgd2l0aENvdW50fSlcbiAgY29uc3QgY2FsbGJhY2tSZWYgPSB1c2VSZWYoY2FsbGJhY2spXG4gIGNvbnN0IGFjdGl2ZVJlZiA9IHVzZVJlZihhY3RpdmUpXG4gIHByb2plY3Rpb25PcHRpb25zUmVmLmN1cnJlbnQgPSB7YWJpbGl0aWVzLCBwcmVsb2FkLCBxdWVyeSwgcXVlcnlEYXRhLCBzZWxlY3QsIHNlbGVjdHNFeHRyYSwgd2l0aENvdW50fVxuICBjYWxsYmFja1JlZi5jdXJyZW50ID0gY2FsbGJhY2tcbiAgYWN0aXZlUmVmLmN1cnJlbnQgPSBhY3RpdmVcblxuICBjb25zdCBtb2RlbHNLZXkgPSBtb2RlbHNEZXBlbmRlbmN5S2V5KG1vZGVsT3JNb2RlbHMpXG4gIGNvbnN0IGV2ZW50Q2FsbGJhY2sgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVkQ2FsbGJhY2sgPSAoLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7RnJvbnRlbmRNb2RlbEluc3RhbmNlRGVzdHJveUV2ZW50UGF5bG9hZH0gKi8gcGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKGFjdGl2ZVJlZi5jdXJyZW50KSBjYWxsYmFja1JlZi5jdXJyZW50KHBheWxvYWQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkZWJvdW5jZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGRlYm91bmNlRnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCBkZWJvdW5jZSlcbiAgICBpZiAoZGVib3VuY2UpIHJldHVybiBkZWJvdW5jZUZ1bmN0aW9uKHdyYXBwZWRDYWxsYmFjaylcblxuICAgIHJldHVybiB3cmFwcGVkQ2FsbGJhY2tcbiAgfSwgW2RlYm91bmNlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghYWN0aXZlKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCBtb2RlbHMgPSBtb2RlbHNGcm9tSW5wdXQobW9kZWxPck1vZGVscylcbiAgICBpZiAobW9kZWxzLmxlbmd0aCA8IDEpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGxldCBjbG9zZWQgPSBmYWxzZVxuICAgIC8qKlxuICAgICAqIFVuc3Vic2NyaWJlIGNhbGxiYWNrcy5cbiAgICAgIEB0eXBlIHtBcnJheTwoKSA9PiB2b2lkPn0gKi9cbiAgICBjb25zdCB1bnN1YnNjcmliZUNhbGxiYWNrcyA9IFtdXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uQ2FsbGJhY2sgPSAoLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHR5cGUge0Zyb250ZW5kTW9kZWxJbnN0YW5jZURlc3Ryb3lFdmVudFBheWxvYWR9ICovIHBheWxvYWQpID0+IHtcbiAgICAgIGlmICghY2xvc2VkKSBldmVudENhbGxiYWNrKHBheWxvYWQpXG4gICAgfVxuXG4gICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBtb2RlbCBvZiBtb2RlbHMpIHtcbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBhd2FpdCBtb2RlbC5vbkRlc3Ryb3koc3Vic2NyaXB0aW9uQ2FsbGJhY2ssIHByb2plY3Rpb25PcHRpb25zUmVmLmN1cnJlbnQpXG5cbiAgICAgICAgaWYgKGNsb3NlZCkge1xuICAgICAgICAgIHVuc3Vic2NyaWJlKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bnN1YnNjcmliZUNhbGxiYWNrcy5wdXNoKHVuc3Vic2NyaWJlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghY2xvc2VkICYmIG9uQ29ubmVjdGVkKSBvbkNvbm5lY3RlZCgpXG4gICAgfSkoKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsb3NlZCA9IHRydWVcblxuICAgICAgZm9yIChjb25zdCB1bnN1YnNjcmliZSBvZiB1bnN1YnNjcmliZUNhbGxiYWNrcykge1xuICAgICAgICB1bnN1YnNjcmliZSgpXG4gICAgICB9XG5cbiAgICAgIGNsZWFyUGVuZGluZ0RlYm91bmNlZENhbGxiYWNrKGV2ZW50Q2FsbGJhY2spXG4gICAgfVxuICB9LCBbYWN0aXZlLCBldmVudENhbGxiYWNrLCBtb2RlbHNLZXksIG9uQ29ubmVjdGVkLCBwcm9qZWN0aW9uS2V5XSlcbn1cbiJdfQ==
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWRlc3Ryb3llZC1ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZC1tb2RlbHMvdXNlLWRlc3Ryb3llZC1ldmVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxnQkFBZ0IsTUFBTSxVQUFVLENBQUE7QUFDdkMsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBRWhELE9BQU8sNkJBQTZCLE1BQU0sdUNBQXVDLENBQUE7QUFDakYsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQzNFLE9BQU8sa0JBQWtCLE1BQU0sNEJBQTRCLENBQUE7QUFFM0Q7OzBFQUUwRTtBQUMxRTs7a0VBRWtFO0FBQ2xFOzs0SEFFNEg7QUFDNUg7O3NFQUVzRTtBQUN0RTs7a0lBRWtJO0FBQ2xJOzt3R0FFd0c7QUFDeEc7O3NHQUVzRztBQUV0Rzs7OztHQUlHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxXQUFXO0lBQ3pDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUVuRCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTTtJQUUzQyxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ2pHLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUywyQkFBMkIsQ0FBQyxLQUFLO0lBQ3hDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFdkIsT0FBTyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtBQUNwQyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxPQUFPLFVBQVUsaUJBQWlCLENBQUMsa0JB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QUUsQ0FBQTtRQUVKLE9BQU8sR0FBRyxFQUFFO1lBQ1YsTUFBTSxHQUFHLElBQUksQ0FBQTtZQUViLEtBQUssTUFBTSxXQUFXLElBQUksb0JBQW9CLEVBQUUsQ0FBQztnQkFDL0MsV0FBVyxFQUFFLENBQUE7WUFDZixDQUFDO1lBRUQsNkJBQTZCLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDOUMsQ0FBQyxDQUFBO0lBQ0gsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUE7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgZGVib3VuY2VGdW5jdGlvbiBmcm9tIFwiZGVib3VuY2VcIlxuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZn0gZnJvbSBcInJlYWN0XCJcblxuaW1wb3J0IGNsZWFyUGVuZGluZ0RlYm91bmNlZENhbGxiYWNrIGZyb20gXCIuL2NsZWFyLXBlbmRpbmctZGVib3VuY2VkLWNhbGxiYWNrLmpzXCJcbmltcG9ydCB7bW9kZWxzRGVwZW5kZW5jeUtleSwgbW9kZWxzRnJvbUlucHV0fSBmcm9tIFwiLi9ldmVudC1ob29rLW1vZGVscy5qc1wiXG5pbXBvcnQgdXNlTW9kZWxDbGFzc0V2ZW50IGZyb20gXCIuL3VzZS1tb2RlbC1jbGFzcy1ldmVudC5qc1wiXG5cbi8qKlxuICogRnJvbnRlbmRNb2RlbENsYXNzIHR5cGUuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9iYXNlLmpzXCIpLkZyb250ZW5kTW9kZWxDbGFzc30gRnJvbnRlbmRNb2RlbENsYXNzICovXG4vKipcbiAqIEZyb250ZW5kTW9kZWxJbnN0YW5jZSB0eXBlLlxuICogQHR5cGVkZWYge2ltcG9ydChcIi4vYmFzZS5qc1wiKS5kZWZhdWx0fSBGcm9udGVuZE1vZGVsSW5zdGFuY2UgKi9cbi8qKlxuICogRnJvbnRlbmRNb2RlbENsYXNzRGVzdHJveUV2ZW50UGF5bG9hZCB0eXBlLlxuICogQHR5cGVkZWYge2ltcG9ydChcIi4vdXNlLW1vZGVsLWNsYXNzLWV2ZW50LmpzXCIpLkZyb250ZW5kTW9kZWxEZXN0cm95RXZlbnRQYXlsb2FkfSBGcm9udGVuZE1vZGVsQ2xhc3NEZXN0cm95RXZlbnRQYXlsb2FkICovXG4vKipcbiAqIERlZmluZXMgdGhpcyB0eXBlZGVmLlxuICogQHR5cGVkZWYge3tpZDogc3RyaW5nfX0gRnJvbnRlbmRNb2RlbEluc3RhbmNlRGVzdHJveUV2ZW50UGF5bG9hZCAqL1xuLyoqXG4gKiBGcm9udGVuZE1vZGVsRGVzdHJveUV2ZW50UGF5bG9hZCB0eXBlLlxuICogQHR5cGVkZWYge0Zyb250ZW5kTW9kZWxDbGFzc0Rlc3Ryb3lFdmVudFBheWxvYWQgfCBGcm9udGVuZE1vZGVsSW5zdGFuY2VEZXN0cm95RXZlbnRQYXlsb2FkfSBGcm9udGVuZE1vZGVsRGVzdHJveUV2ZW50UGF5bG9hZCAqL1xuLyoqXG4gKiBVc2VEZXN0cm95ZWRFdmVudE9wdGlvbnMgdHlwZS5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoXCIuL3VzZS1tb2RlbC1jbGFzcy1ldmVudC5qc1wiKS5Vc2VNb2RlbENsYXNzRXZlbnRPcHRpb25zfSBVc2VEZXN0cm95ZWRFdmVudE9wdGlvbnMgKi9cbi8qKlxuICogRnJvbnRlbmRNb2RlbERlc3Ryb3lFdmVudENhbGxiYWNrIHR5cGUuXG4gKiBAdHlwZWRlZiB7KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxEZXN0cm95RXZlbnRQYXlsb2FkKSA9PiB2b2lkfSBGcm9udGVuZE1vZGVsRGVzdHJveUV2ZW50Q2FsbGJhY2sgKi9cblxuLyoqXG4gKiBSdW5zIGFzc2VydCBubyB1bmtub3duIG9wdGlvbnMuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlIHwgKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkPn0gcmVzdE9wdGlvbnMgLSBVbmtub3duIG9wdGlvbnMgb2JqZWN0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vVW5rbm93bk9wdGlvbnMocmVzdE9wdGlvbnMpIHtcbiAgY29uc3QgdW5rbm93bk9wdGlvbk5hbWVzID0gT2JqZWN0LmtleXMocmVzdE9wdGlvbnMpXG5cbiAgaWYgKHVua25vd25PcHRpb25OYW1lcy5sZW5ndGggPT09IDApIHJldHVyblxuXG4gIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBvcHRpb25zIGdpdmVuIHRvIHVzZURlc3Ryb3llZEV2ZW50OiAke3Vua25vd25PcHRpb25OYW1lcy5qb2luKFwiLCBcIil9YClcbn1cblxuLyoqXG4gKiBSdW5zIGV2ZW50IHF1ZXJ5IGRlcGVuZGVuY3kgcGF5bG9hZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9xdWVyeS5qc1wiKS5kZWZhdWx0PEZyb250ZW5kTW9kZWxDbGFzcz4gfCB1bmRlZmluZWR9IHF1ZXJ5IC0gRXZlbnQgcXVlcnkgb3B0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbEV2ZW50T3B0aW9uc1BheWxvYWQgfCBudWxsfSBTdGFibGUgZGVwZW5kZW5jeSBwYXlsb2FkLlxuICovXG5mdW5jdGlvbiBldmVudFF1ZXJ5RGVwZW5kZW5jeVBheWxvYWQocXVlcnkpIHtcbiAgaWYgKCFxdWVyeSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gcXVlcnkuZXZlbnRPcHRpb25zUGF5bG9hZCgpXG59XG5cbi8qKlxuICogUmVhY3QgaG9vayBmb3IgZnJvbnRlbmQtbW9kZWwgZGVzdHJveSBldmVudHMuIFBhc3MgYSBtb2RlbCBjbGFzcyBmb3IgY2xhc3MtbGV2ZWxcbiAqIGRlc3Ryb3kgZXZlbnRzLCBvciBhIG1vZGVsIC8gbW9kZWwgYXJyYXkgZm9yIGluc3RhbmNlLWxldmVsIGRlc3Ryb3kgZXZlbnRzLlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsQ2xhc3MgfCBGcm9udGVuZE1vZGVsSW5zdGFuY2UgfCBGcm9udGVuZE1vZGVsSW5zdGFuY2VbXSB8IG51bGwgfCB1bmRlZmluZWR9IG1vZGVsQ2xhc3NPck1vZGVscyAtIE1vZGVsIGNsYXNzLCBtb2RlbCwgb3IgbW9kZWxzLlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsRGVzdHJveUV2ZW50Q2FsbGJhY2t9IGNhbGxiYWNrIC0gRXZlbnQgY2FsbGJhY2suXG4gKiBAcGFyYW0ge1VzZURlc3Ryb3llZEV2ZW50T3B0aW9uc30gW29wdGlvbnNdIC0gSG9vayBvcHRpb25zLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZURlc3Ryb3llZEV2ZW50KG1vZGVsQ2xhc3NPck1vZGVscywgY2FsbGJhY2ssIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7YWN0aXZlID0gdHJ1ZSwgYWJpbGl0aWVzLCBkZWJvdW5jZSA9IGZhbHNlLCBvbkNvbm5lY3RlZCwgcHJlbG9hZCwgcXVlcnksIHF1ZXJ5RGF0YSwgc2VsZWN0LCBzZWxlY3RzRXh0cmEsIHdpdGhDb3VudCwgLi4ucmVzdE9wdGlvbnN9ID0gb3B0aW9uc1xuICBhc3NlcnROb1Vua25vd25PcHRpb25zKHJlc3RPcHRpb25zKVxuXG4gIGNvbnN0IGNsYXNzTW9kZWwgPSB0eXBlb2YgbW9kZWxDbGFzc09yTW9kZWxzID09PSBcImZ1bmN0aW9uXCIgPyBtb2RlbENsYXNzT3JNb2RlbHMgOiBudWxsXG4gIGNvbnN0IGluc3RhbmNlTW9kZWxzID0gdHlwZW9mIG1vZGVsQ2xhc3NPck1vZGVscyA9PT0gXCJmdW5jdGlvblwiID8gbnVsbCA6IG1vZGVsQ2xhc3NPck1vZGVsc1xuICBjb25zdCBwcm9qZWN0aW9uT3B0aW9ucyA9IHthYmlsaXRpZXMsIHByZWxvYWQsIHF1ZXJ5LCBxdWVyeURhdGEsIHNlbGVjdCwgc2VsZWN0c0V4dHJhLCB3aXRoQ291bnR9XG5cbiAgdXNlTW9kZWxDbGFzc0V2ZW50KGNsYXNzTW9kZWwsIFwiZGVzdHJveVwiLCBjYWxsYmFjaywge2FjdGl2ZTogYWN0aXZlICYmIEJvb2xlYW4oY2xhc3NNb2RlbCksIGRlYm91bmNlLCBvbkNvbm5lY3RlZCwgLi4ucHJvamVjdGlvbk9wdGlvbnN9KVxuICB1c2VJbnN0YW5jZURlc3Ryb3llZEV2ZW50KGluc3RhbmNlTW9kZWxzLCBjYWxsYmFjaywge2FjdGl2ZTogYWN0aXZlICYmICFjbGFzc01vZGVsLCBkZWJvdW5jZSwgb25Db25uZWN0ZWQsIC4uLnByb2plY3Rpb25PcHRpb25zfSlcbn1cblxuLyoqXG4gKiBSdW5zIHVzZSBpbnN0YW5jZSBkZXN0cm95ZWQgZXZlbnQuXG4gKiBAcGFyYW0ge0Zyb250ZW5kTW9kZWxJbnN0YW5jZSB8IEZyb250ZW5kTW9kZWxJbnN0YW5jZVtdIHwgbnVsbCB8IHVuZGVmaW5lZH0gbW9kZWxPck1vZGVscyAtIE1vZGVsIG9yIG1vZGVscy5cbiAqIEBwYXJhbSB7RnJvbnRlbmRNb2RlbERlc3Ryb3lFdmVudENhbGxiYWNrfSBjYWxsYmFjayAtIEV2ZW50IGNhbGxiYWNrLlxuICogQHBhcmFtIHtVc2VEZXN0cm95ZWRFdmVudE9wdGlvbnN9IG9wdGlvbnMgLSBIb29rIG9wdGlvbnMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdXNlSW5zdGFuY2VEZXN0cm95ZWRFdmVudChtb2RlbE9yTW9kZWxzLCBjYWxsYmFjaywgb3B0aW9ucykge1xuICBjb25zdCB7YWN0aXZlID0gdHJ1ZSwgYWJpbGl0aWVzLCBkZWJvdW5jZSA9IGZhbHNlLCBvbkNvbm5lY3RlZCwgcHJlbG9hZCwgcXVlcnksIHF1ZXJ5RGF0YSwgc2VsZWN0LCBzZWxlY3RzRXh0cmEsIHdpdGhDb3VudH0gPSBvcHRpb25zXG4gIGNvbnN0IHByb2plY3Rpb25LZXkgPSBKU09OLnN0cmluZ2lmeSh7YWJpbGl0aWVzLCBwcmVsb2FkLCBxdWVyeTogZXZlbnRRdWVyeURlcGVuZGVuY3lQYXlsb2FkKHF1ZXJ5KSwgcXVlcnlEYXRhLCBzZWxlY3QsIHNlbGVjdHNFeHRyYSwgd2l0aENvdW50fSlcbiAgY29uc3QgcHJvamVjdGlvbk9wdGlvbnNSZWYgPSB1c2VSZWYoe2FiaWxpdGllcywgcHJlbG9hZCwgcXVlcnksIHF1ZXJ5RGF0YSwgc2VsZWN0LCBzZWxlY3RzRXh0cmEsIHdpdGhDb3VudH0pXG4gIGNvbnN0IGNhbGxiYWNrUmVmID0gdXNlUmVmKGNhbGxiYWNrKVxuICBjb25zdCBhY3RpdmVSZWYgPSB1c2VSZWYoYWN0aXZlKVxuICBwcm9qZWN0aW9uT3B0aW9uc1JlZi5jdXJyZW50ID0ge2FiaWxpdGllcywgcHJlbG9hZCwgcXVlcnksIHF1ZXJ5RGF0YSwgc2VsZWN0LCBzZWxlY3RzRXh0cmEsIHdpdGhDb3VudH1cbiAgY2FsbGJhY2tSZWYuY3VycmVudCA9IGNhbGxiYWNrXG4gIGFjdGl2ZVJlZi5jdXJyZW50ID0gYWN0aXZlXG5cbiAgY29uc3QgbW9kZWxzS2V5ID0gbW9kZWxzRGVwZW5kZW5jeUtleShtb2RlbE9yTW9kZWxzKVxuICBjb25zdCBldmVudENhbGxiYWNrID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrID0gKC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0eXBlIHtGcm9udGVuZE1vZGVsSW5zdGFuY2VEZXN0cm95RXZlbnRQYXlsb2FkfSAqLyBwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoYWN0aXZlUmVmLmN1cnJlbnQpIGNhbGxiYWNrUmVmLmN1cnJlbnQocGF5bG9hZClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRlYm91bmNlID09PSBcIm51bWJlclwiKSByZXR1cm4gZGVib3VuY2VGdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIGRlYm91bmNlKVxuICAgIGlmIChkZWJvdW5jZSkgcmV0dXJuIGRlYm91bmNlRnVuY3Rpb24od3JhcHBlZENhbGxiYWNrKVxuXG4gICAgcmV0dXJuIHdyYXBwZWRDYWxsYmFja1xuICB9LCBbZGVib3VuY2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFhY3RpdmUpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IG1vZGVscyA9IG1vZGVsc0Zyb21JbnB1dChtb2RlbE9yTW9kZWxzKVxuICAgIGlmIChtb2RlbHMubGVuZ3RoIDwgMSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgbGV0IGNsb3NlZCA9IGZhbHNlXG4gICAgLyoqXG4gICAgICogVW5zdWJzY3JpYmUgY2FsbGJhY2tzLlxuICAgICAqIEB0eXBlIHtBcnJheTwoKSA9PiB2b2lkPn0gKi9cbiAgICBjb25zdCB1bnN1YnNjcmliZUNhbGxiYWNrcyA9IFtdXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uQ2FsbGJhY2sgPSAoLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0eXBlIHtGcm9udGVuZE1vZGVsSW5zdGFuY2VEZXN0cm95RXZlbnRQYXlsb2FkfSAqLyBwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIWNsb3NlZCkgZXZlbnRDYWxsYmFjayhwYXlsb2FkKVxuICAgIH1cblxuICAgIHZvaWQgKGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbW9kZWwgb2YgbW9kZWxzKSB7XG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gYXdhaXQgbW9kZWwub25EZXN0cm95KHN1YnNjcmlwdGlvbkNhbGxiYWNrLCBwcm9qZWN0aW9uT3B0aW9uc1JlZi5jdXJyZW50KVxuXG4gICAgICAgIGlmIChjbG9zZWQpIHtcbiAgICAgICAgICB1bnN1YnNjcmliZSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5zdWJzY3JpYmVDYWxsYmFja3MucHVzaCh1bnN1YnNjcmliZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWNsb3NlZCAmJiBvbkNvbm5lY3RlZCkgb25Db25uZWN0ZWQoKVxuICAgIH0pKClcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbG9zZWQgPSB0cnVlXG5cbiAgICAgIGZvciAoY29uc3QgdW5zdWJzY3JpYmUgb2YgdW5zdWJzY3JpYmVDYWxsYmFja3MpIHtcbiAgICAgICAgdW5zdWJzY3JpYmUoKVxuICAgICAgfVxuXG4gICAgICBjbGVhclBlbmRpbmdEZWJvdW5jZWRDYWxsYmFjayhldmVudENhbGxiYWNrKVxuICAgIH1cbiAgfSwgW2FjdGl2ZSwgZXZlbnRDYWxsYmFjaywgbW9kZWxzS2V5LCBvbkNvbm5lY3RlZCwgcHJvamVjdGlvbktleV0pXG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-model-class-event.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/use-model-class-event.js"],"names":[],"mappings":"AA0FA;;;;;;;GAOG;AACH,uDANW,kBAAkB,GAAG,IAAI,GAAG,SAAS,iBACrC,2BAA2B,GAAG,2BAA2B,EAAE,YAC3D,+BAA+B,YAC/B,yBAAyB,GACvB,IAAI,CAmEhB;;;;
|
|
1
|
+
{"version":3,"file":"use-model-class-event.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/use-model-class-event.js"],"names":[],"mappings":"AA0FA;;;;;;;GAOG;AACH,uDANW,kBAAkB,GAAG,IAAI,GAAG,SAAS,iBACrC,2BAA2B,GAAG,2BAA2B,EAAE,YAC3D,+BAA+B,YAC/B,yBAAyB,GACvB,IAAI,CAmEhB;;;;iCA1JY,OAAO,WAAW,EAAE,kBAAkB;;;;oCAGtC,YAAY,CAAC,kBAAkB,CAAC;;;;0CAGhC,QAAQ,GAAG,QAAQ,GAAG,SAAS;;;;oDAG/B;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAC;;;;+CAG1C;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC;;;;6CAGZ,qCAAqC,GAAG,gCAAgC;;;;8CAGxE,CAAC,OAAO,EAAE,8BAA8B,KAAK,IAAI;;;;wCAGjD;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;CAAC,GAAG,OAAO,YAAY,EAAE,+BAA+B"}
|