mediasfu-angular 1.0.2 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +686 -578
- package/dist/README.md +677 -578
- package/dist/fesm2022/mediasfu-angular.mjs +5551 -2944
- package/dist/fesm2022/mediasfu-angular.mjs.map +1 -1
- package/dist/lib/@types/types.d.ts +22 -1
- package/dist/lib/components/breakout-components/breakout-rooms-modal.component.d.ts +1 -0
- package/dist/lib/components/mediasfu-components/mediasfu-broadcast.component.d.ts +153 -61
- package/dist/lib/components/mediasfu-components/mediasfu-chat.component.d.ts +154 -66
- package/dist/lib/components/mediasfu-components/mediasfu-conference.component.d.ts +190 -76
- package/dist/lib/components/mediasfu-components/mediasfu-generic.component.d.ts +184 -70
- package/dist/lib/components/mediasfu-components/mediasfu-webinar.component.d.ts +192 -78
- package/dist/lib/components/menu-components/menu-modal/menu-modal.component.d.ts +6 -1
- package/dist/lib/components/menu-components/share-buttons-component/share-buttons-component.component.d.ts +5 -2
- package/dist/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.d.ts +4 -2
- package/dist/lib/components/misc-components/pre-join-page/pre-join-page.component.d.ts +71 -66
- package/dist/lib/components/misc-components/share-event-modal/share-event-modal.component.d.ts +5 -1
- package/dist/lib/consumers/connect-local-ips.service.d.ts +81 -0
- package/dist/lib/consumers/connect-send-transport-audio.service.d.ts +43 -11
- package/dist/lib/consumers/connect-send-transport-screen.service.d.ts +87 -46
- package/dist/lib/consumers/connect-send-transport-video.service.d.ts +89 -43
- package/dist/lib/consumers/connect-send-transport.service.d.ts +5 -1
- package/dist/lib/consumers/create-send-transport.service.d.ts +130 -40
- package/dist/lib/consumers/disconnect-send-transport-audio.service.d.ts +77 -40
- package/dist/lib/consumers/disconnect-send-transport-screen.service.d.ts +48 -14
- package/dist/lib/consumers/disconnect-send-transport-video.service.d.ts +81 -44
- package/dist/lib/consumers/get-piped-producers-alt.service.d.ts +5 -1
- package/dist/lib/consumers/receive-all-piped-transports.service.d.ts +5 -1
- package/dist/lib/consumers/resume-send-transport-audio.service.d.ts +54 -21
- package/dist/lib/consumers/stream-success-audio-switch.service.d.ts +124 -40
- package/dist/lib/consumers/trigger.service.d.ts +3 -0
- package/dist/lib/methods/exit-methods/confirm-exit.service.d.ts +5 -1
- package/dist/lib/methods/recording-methods/start-recording.service.d.ts +3 -0
- package/dist/lib/methods/recording-methods/stop-recording.service.d.ts +4 -1
- package/dist/lib/methods/recording-methods/update-recording.service.d.ts +3 -0
- package/dist/lib/methods/stream-methods/click-audio.service.d.ts +3 -0
- package/dist/lib/methods/utils/check-limits-and-make-request.service.d.ts +23 -0
- package/dist/lib/methods/utils/create-response-join-room.util.d.ts +33 -0
- package/dist/lib/methods/utils/create-room-on-media-sfu.service.d.ts +25 -0
- package/dist/lib/methods/utils/initial-values.util.d.ts +6 -0
- package/dist/lib/methods/utils/join-room-on-media-sfu.service.d.ts +52 -0
- package/dist/lib/methods/whiteboard-methods/capture-canvas-stream.service.d.ts +37 -20
- package/dist/lib/producers/producer-emits/join-local-room.service.d.ts +125 -0
- package/dist/lib/producers/socket-receive-methods/all-members-rest.service.d.ts +7 -2
- package/dist/lib/producers/socket-receive-methods/all-members.service.d.ts +7 -2
- package/dist/lib/producers/socket-receive-methods/disconnect-user-self.service.d.ts +5 -1
- package/dist/lib/sockets/socket-manager.service.d.ts +90 -0
- package/dist/public-api.d.ts +11 -1
- package/package.json +17 -20
- package/dist/esm2022/lib/@types/types.mjs +0 -2
- package/dist/esm2022/lib/components/background-components/background-modal/background-modal.component.mjs +0 -799
- package/dist/esm2022/lib/components/breakout-components/breakout-rooms-modal.component.mjs +0 -366
- package/dist/esm2022/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.mjs +0 -143
- package/dist/esm2022/lib/components/breakout-components/room-list/room-list.component.mjs +0 -40
- package/dist/esm2022/lib/components/co-host-components/co-host-modal/co-host-modal.component.mjs +0 -245
- package/dist/esm2022/lib/components/display-components/alert-component/alert.component.component.mjs +0 -79
- package/dist/esm2022/lib/components/display-components/audio-card/audio-card.component.mjs +0 -356
- package/dist/esm2022/lib/components/display-components/audio-grid/audio-grid.component.mjs +0 -80
- package/dist/esm2022/lib/components/display-components/card-video-display/card-video-display.component.mjs +0 -129
- package/dist/esm2022/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.mjs +0 -138
- package/dist/esm2022/lib/components/display-components/control-buttons-component/control-buttons-component.component.mjs +0 -231
- package/dist/esm2022/lib/components/display-components/control-buttons-component-touch/control-buttons-component-touch.component.mjs +0 -282
- package/dist/esm2022/lib/components/display-components/control-widgets/menu-participants-widget.component.mjs +0 -82
- package/dist/esm2022/lib/components/display-components/control-widgets/menu-record-widget.component.mjs +0 -65
- package/dist/esm2022/lib/components/display-components/control-widgets/menu-widget.component.mjs +0 -137
- package/dist/esm2022/lib/components/display-components/control-widgets/message-widget.component.mjs +0 -137
- package/dist/esm2022/lib/components/display-components/control-widgets/record-timer-widget.component.mjs +0 -51
- package/dist/esm2022/lib/components/display-components/control-widgets/screenshare-widget.component.mjs +0 -101
- package/dist/esm2022/lib/components/display-components/flexible-grid/flexible-grid.component.mjs +0 -151
- package/dist/esm2022/lib/components/display-components/flexible-video/flexible-video.component.mjs +0 -250
- package/dist/esm2022/lib/components/display-components/loading-modal/loading-modal.component.mjs +0 -102
- package/dist/esm2022/lib/components/display-components/main-aspect-component/main-aspect-component.component.mjs +0 -140
- package/dist/esm2022/lib/components/display-components/main-container-component/main-container-component.component.mjs +0 -131
- package/dist/esm2022/lib/components/display-components/main-grid-component/main-grid-component.component.mjs +0 -120
- package/dist/esm2022/lib/components/display-components/main-screen-component/main-screen-component.component.mjs +0 -201
- package/dist/esm2022/lib/components/display-components/meeting-progress-timer/meeting-progress-timer.component.mjs +0 -115
- package/dist/esm2022/lib/components/display-components/mini-audio/mini-audio.component.mjs +0 -319
- package/dist/esm2022/lib/components/display-components/mini-card/mini-card.component.mjs +0 -161
- package/dist/esm2022/lib/components/display-components/mini-card-audio/mini-card-audio.component.mjs +0 -230
- package/dist/esm2022/lib/components/display-components/other-grid-component/other-grid-component.component.mjs +0 -126
- package/dist/esm2022/lib/components/display-components/pagination/pagination.component.mjs +0 -334
- package/dist/esm2022/lib/components/display-components/sub-aspect-component/sub-aspect-component.component.mjs +0 -112
- package/dist/esm2022/lib/components/display-components/video-card/video-card.component.mjs +0 -392
- package/dist/esm2022/lib/components/display-settings-components/display-settings-modal.component.mjs +0 -106
- package/dist/esm2022/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.mjs +0 -199
- package/dist/esm2022/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.mjs +0 -132
- package/dist/esm2022/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.mjs +0 -220
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-broadcast.component.mjs +0 -4238
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-chat.component.mjs +0 -3754
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-conference.component.mjs +0 -5071
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-generic.component.mjs +0 -5380
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-webinar.component.mjs +0 -5068
- package/dist/esm2022/lib/components/menu-components/custom-buttons/custom-buttons.component.mjs +0 -83
- package/dist/esm2022/lib/components/menu-components/meeting-id-component/meeting-id-component.component.mjs +0 -27
- package/dist/esm2022/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.mjs +0 -27
- package/dist/esm2022/lib/components/menu-components/menu-modal/menu-modal.component.mjs +0 -125
- package/dist/esm2022/lib/components/menu-components/share-buttons-component/share-buttons-component.component.mjs +0 -106
- package/dist/esm2022/lib/components/message-components/message-panel/message-panel.component.mjs +0 -228
- package/dist/esm2022/lib/components/message-components/messages-modal/messages-modal.component.mjs +0 -277
- package/dist/esm2022/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.mjs +0 -130
- package/dist/esm2022/lib/components/misc-components/pre-join-page/pre-join-page.component.mjs +0 -343
- package/dist/esm2022/lib/components/misc-components/share-event-modal/share-event-modal.component.mjs +0 -127
- package/dist/esm2022/lib/components/misc-components/welcome-page/welcome-page.component.mjs +0 -241
- package/dist/esm2022/lib/components/participants-components/participant-list/participant-list.component.mjs +0 -82
- package/dist/esm2022/lib/components/participants-components/participant-list-item/participant-list-item.component.mjs +0 -139
- package/dist/esm2022/lib/components/participants-components/participant-list-others/participant-list-others.component.mjs +0 -40
- package/dist/esm2022/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.mjs +0 -60
- package/dist/esm2022/lib/components/participants-components/participants-modal/participants-modal.component.mjs +0 -124
- package/dist/esm2022/lib/components/polls-components/poll-modal/poll-modal.component.mjs +0 -201
- package/dist/esm2022/lib/components/recording-components/advanced-panel-component/advanced-panel-components.component.mjs +0 -92
- package/dist/esm2022/lib/components/recording-components/recording-modal/recording-modal.component.mjs +0 -133
- package/dist/esm2022/lib/components/recording-components/standard-panel-component/standard-panel-component.component.mjs +0 -90
- package/dist/esm2022/lib/components/requests-components/render-request-component/render-request-component.component.mjs +0 -81
- package/dist/esm2022/lib/components/requests-components/requests-modal/requests-modal.component.mjs +0 -147
- package/dist/esm2022/lib/components/screenboard-components/screenboard/screenboard.component.mjs +0 -627
- package/dist/esm2022/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.mjs +0 -391
- package/dist/esm2022/lib/components/waiting-components/waiting-room-modal.component.mjs +0 -201
- package/dist/esm2022/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.mjs +0 -286
- package/dist/esm2022/lib/components/whiteboard-components/whiteboard/whiteboard.component.mjs +0 -1833
- package/dist/esm2022/lib/consumers/add-videos-grid.service.mjs +0 -345
- package/dist/esm2022/lib/consumers/auto-adjust.service.mjs +0 -109
- package/dist/esm2022/lib/consumers/calculate-rows-and-columns.service.mjs +0 -60
- package/dist/esm2022/lib/consumers/change-vids.service.mjs +0 -551
- package/dist/esm2022/lib/consumers/check-grid.service.mjs +0 -93
- package/dist/esm2022/lib/consumers/check-permission.service.mjs +0 -105
- package/dist/esm2022/lib/consumers/check-screen-share.service.mjs +0 -106
- package/dist/esm2022/lib/consumers/close-and-resize.service.mjs +0 -331
- package/dist/esm2022/lib/consumers/compare-active-names.service.mjs +0 -106
- package/dist/esm2022/lib/consumers/compare-screen-states.service.mjs +0 -98
- package/dist/esm2022/lib/consumers/connect-ips.service.mjs +0 -154
- package/dist/esm2022/lib/consumers/connect-recv-transport.service.mjs +0 -146
- package/dist/esm2022/lib/consumers/connect-send-transport-audio.service.mjs +0 -84
- package/dist/esm2022/lib/consumers/connect-send-transport-screen.service.mjs +0 -102
- package/dist/esm2022/lib/consumers/connect-send-transport-video.service.mjs +0 -99
- package/dist/esm2022/lib/consumers/connect-send-transport.service.mjs +0 -140
- package/dist/esm2022/lib/consumers/consumer-resume.service.mjs +0 -368
- package/dist/esm2022/lib/consumers/control-media.service.mjs +0 -113
- package/dist/esm2022/lib/consumers/create-send-transport.service.mjs +0 -172
- package/dist/esm2022/lib/consumers/disconnect-send-transport-audio.service.mjs +0 -108
- package/dist/esm2022/lib/consumers/disconnect-send-transport-screen.service.mjs +0 -84
- package/dist/esm2022/lib/consumers/disconnect-send-transport-video.service.mjs +0 -101
- package/dist/esm2022/lib/consumers/disp-streams.service.mjs +0 -513
- package/dist/esm2022/lib/consumers/generate-page-content.service.mjs +0 -106
- package/dist/esm2022/lib/consumers/get-estimate.service.mjs +0 -120
- package/dist/esm2022/lib/consumers/get-piped-producers-alt.service.mjs +0 -82
- package/dist/esm2022/lib/consumers/get-producers-piped.service.mjs +0 -79
- package/dist/esm2022/lib/consumers/get-videos.service.mjs +0 -91
- package/dist/esm2022/lib/consumers/mix-streams.service.mjs +0 -95
- package/dist/esm2022/lib/consumers/on-screen-changes.service.mjs +0 -103
- package/dist/esm2022/lib/consumers/prepopulate-user-media.service.mjs +0 -541
- package/dist/esm2022/lib/consumers/process-consumer-transports-audio.service.mjs +0 -101
- package/dist/esm2022/lib/consumers/process-consumer-transports.service.mjs +0 -128
- package/dist/esm2022/lib/consumers/re-port.service.mjs +0 -114
- package/dist/esm2022/lib/consumers/re-update-inter.service.mjs +0 -239
- package/dist/esm2022/lib/consumers/readjust.service.mjs +0 -173
- package/dist/esm2022/lib/consumers/receive-all-piped-transports.service.mjs +0 -87
- package/dist/esm2022/lib/consumers/receive-room-messages.service.mjs +0 -69
- package/dist/esm2022/lib/consumers/reorder-streams.service.mjs +0 -239
- package/dist/esm2022/lib/consumers/request-screen-share.service.mjs +0 -101
- package/dist/esm2022/lib/consumers/resume-pause-audio-streams.service.mjs +0 -150
- package/dist/esm2022/lib/consumers/resume-pause-streams.service.mjs +0 -103
- package/dist/esm2022/lib/consumers/resume-send-transport-audio.service.mjs +0 -91
- package/dist/esm2022/lib/consumers/signal-new-consumer-transport.service.mjs +0 -136
- package/dist/esm2022/lib/consumers/socket-receive-methods/join-consume-room.service.mjs +0 -96
- package/dist/esm2022/lib/consumers/socket-receive-methods/new-pipe-producer.service.mjs +0 -100
- package/dist/esm2022/lib/consumers/socket-receive-methods/producer-closed.service.mjs +0 -78
- package/dist/esm2022/lib/consumers/start-share-screen.service.mjs +0 -120
- package/dist/esm2022/lib/consumers/stop-share-screen.service.mjs +0 -175
- package/dist/esm2022/lib/consumers/stream-success-audio-switch.service.mjs +0 -185
- package/dist/esm2022/lib/consumers/stream-success-audio.service.mjs +0 -210
- package/dist/esm2022/lib/consumers/stream-success-screen.service.mjs +0 -193
- package/dist/esm2022/lib/consumers/stream-success-video.service.mjs +0 -260
- package/dist/esm2022/lib/consumers/switch-user-audio.service.mjs +0 -120
- package/dist/esm2022/lib/consumers/switch-user-video-alt.service.mjs +0 -260
- package/dist/esm2022/lib/consumers/switch-user-video.service.mjs +0 -172
- package/dist/esm2022/lib/consumers/trigger.service.mjs +0 -210
- package/dist/esm2022/lib/consumers/update-mini-cards-grid.service.mjs +0 -135
- package/dist/esm2022/lib/consumers/update-participant-audio-decibels.service.mjs +0 -84
- package/dist/esm2022/lib/methods/background-methods/launch-background.service.mjs +0 -48
- package/dist/esm2022/lib/methods/breakout-room-methods/breakout-room-updated.service.mjs +0 -183
- package/dist/esm2022/lib/methods/breakout-room-methods/launch-breakout-rooms.service.mjs +0 -46
- package/dist/esm2022/lib/methods/co-host-methods/launch-co-host.service.mjs +0 -46
- package/dist/esm2022/lib/methods/co-host-methods/modify-co-host-settings.service.mjs +0 -104
- package/dist/esm2022/lib/methods/display-settings-methods/launch-display-settings.service.mjs +0 -46
- package/dist/esm2022/lib/methods/display-settings-methods/modify-display-settings.service.mjs +0 -194
- package/dist/esm2022/lib/methods/exit-methods/confirm-exit.service.mjs +0 -52
- package/dist/esm2022/lib/methods/exit-methods/launch-confirm-exit.service.mjs +0 -42
- package/dist/esm2022/lib/methods/media-settings-methods/launch-media-settings.service.mjs +0 -85
- package/dist/esm2022/lib/methods/menu-methods/launch-menu-modal.service.mjs +0 -44
- package/dist/esm2022/lib/methods/message-methods/launch-messages.service.mjs +0 -45
- package/dist/esm2022/lib/methods/message-methods/send-message.service.mjs +0 -143
- package/dist/esm2022/lib/methods/participants-methods/launch-participants.service.mjs +0 -47
- package/dist/esm2022/lib/methods/participants-methods/message-participants.service.mjs +0 -98
- package/dist/esm2022/lib/methods/participants-methods/mute-participants.service.mjs +0 -96
- package/dist/esm2022/lib/methods/participants-methods/remove-participants.service.mjs +0 -107
- package/dist/esm2022/lib/methods/polls-methods/handle-create-poll.service.mjs +0 -75
- package/dist/esm2022/lib/methods/polls-methods/handle-end-poll.service.mjs +0 -72
- package/dist/esm2022/lib/methods/polls-methods/handle-vote-poll.service.mjs +0 -83
- package/dist/esm2022/lib/methods/polls-methods/launch-poll.service.mjs +0 -43
- package/dist/esm2022/lib/methods/polls-methods/poll-updated.service.mjs +0 -95
- package/dist/esm2022/lib/methods/recording-methods/check-pause-state.service.mjs +0 -69
- package/dist/esm2022/lib/methods/recording-methods/check-resume-state.service.mjs +0 -56
- package/dist/esm2022/lib/methods/recording-methods/confirm-recording.service.mjs +0 -278
- package/dist/esm2022/lib/methods/recording-methods/launch-recording.service.mjs +0 -125
- package/dist/esm2022/lib/methods/recording-methods/record-pause-timer.service.mjs +0 -67
- package/dist/esm2022/lib/methods/recording-methods/record-resume-timer.service.mjs +0 -130
- package/dist/esm2022/lib/methods/recording-methods/record-start-timer.service.mjs +0 -134
- package/dist/esm2022/lib/methods/recording-methods/record-update-timer.service.mjs +0 -80
- package/dist/esm2022/lib/methods/recording-methods/start-recording.service.mjs +0 -197
- package/dist/esm2022/lib/methods/recording-methods/stop-recording.service.mjs +0 -112
- package/dist/esm2022/lib/methods/recording-methods/update-recording.service.mjs +0 -272
- package/dist/esm2022/lib/methods/requests-methods/launch-requests.service.mjs +0 -51
- package/dist/esm2022/lib/methods/requests-methods/respond-to-requests.service.mjs +0 -84
- package/dist/esm2022/lib/methods/settings-methods/launch-settings.service.mjs +0 -51
- package/dist/esm2022/lib/methods/settings-methods/modify-settings.service.mjs +0 -109
- package/dist/esm2022/lib/methods/stream-methods/click-audio.service.mjs +0 -275
- package/dist/esm2022/lib/methods/stream-methods/click-chat.service.mjs +0 -75
- package/dist/esm2022/lib/methods/stream-methods/click-screen-share.service.mjs +0 -178
- package/dist/esm2022/lib/methods/stream-methods/click-video.service.mjs +0 -271
- package/dist/esm2022/lib/methods/stream-methods/switch-audio.service.mjs +0 -80
- package/dist/esm2022/lib/methods/stream-methods/switch-video-alt.service.mjs +0 -116
- package/dist/esm2022/lib/methods/stream-methods/switch-video.service.mjs +0 -132
- package/dist/esm2022/lib/methods/utils/format-number.service.mjs +0 -57
- package/dist/esm2022/lib/methods/utils/generate-random-messages.service.mjs +0 -120
- package/dist/esm2022/lib/methods/utils/generate-random-participants.service.mjs +0 -126
- package/dist/esm2022/lib/methods/utils/generate-random-polls.service.mjs +0 -78
- package/dist/esm2022/lib/methods/utils/generate-random-request-list.service.mjs +0 -90
- package/dist/esm2022/lib/methods/utils/generate-random-waiting-room-list.service.mjs +0 -59
- package/dist/esm2022/lib/methods/utils/get-modal-position.util.mjs +0 -32
- package/dist/esm2022/lib/methods/utils/get-overlay-position.util.mjs +0 -31
- package/dist/esm2022/lib/methods/utils/initial-values.util.mjs +0 -379
- package/dist/esm2022/lib/methods/utils/meeting-timer/start-meeting-progress-timer.service.mjs +0 -96
- package/dist/esm2022/lib/methods/utils/mini-audio-player/mini-audio-player.component.mjs +0 -315
- package/dist/esm2022/lib/methods/utils/producer/a-params.service.mjs +0 -58
- package/dist/esm2022/lib/methods/utils/producer/h-params.service.mjs +0 -87
- package/dist/esm2022/lib/methods/utils/producer/screen-params.service.mjs +0 -61
- package/dist/esm2022/lib/methods/utils/producer/v-params.service.mjs +0 -87
- package/dist/esm2022/lib/methods/utils/producer/video-capture-constraints.service.mjs +0 -84
- package/dist/esm2022/lib/methods/utils/sleep.util.mjs +0 -17
- package/dist/esm2022/lib/methods/utils/sound-player.service.mjs +0 -63
- package/dist/esm2022/lib/methods/utils/validate-alphanumeric.service.mjs +0 -49
- package/dist/esm2022/lib/methods/waiting-methods/launch-waiting.service.mjs +0 -41
- package/dist/esm2022/lib/methods/waiting-methods/respond-to-waiting.service.mjs +0 -69
- package/dist/esm2022/lib/methods/whiteboard-methods/capture-canvas-stream.service.mjs +0 -98
- package/dist/esm2022/lib/methods/whiteboard-methods/launch-configure-whiteboard.service.mjs +0 -44
- package/dist/esm2022/lib/producer-client/producer-client-emits/create-device-client.service.mjs +0 -74
- package/dist/esm2022/lib/producer-client/producer-client-emits/join-room-client.service.mjs +0 -96
- package/dist/esm2022/lib/producer-client/producer-client-emits/update-room-parameters-client.service.mjs +0 -276
- package/dist/esm2022/lib/producers/producer-emits/join-con-room.service.mjs +0 -152
- package/dist/esm2022/lib/producers/producer-emits/join-room.service.mjs +0 -152
- package/dist/esm2022/lib/producers/socket-receive-methods/all-members-rest.service.mjs +0 -228
- package/dist/esm2022/lib/producers/socket-receive-methods/all-members.service.mjs +0 -218
- package/dist/esm2022/lib/producers/socket-receive-methods/all-waiting-room-members.service.mjs +0 -57
- package/dist/esm2022/lib/producers/socket-receive-methods/ban-participant.service.mjs +0 -76
- package/dist/esm2022/lib/producers/socket-receive-methods/control-media-host.service.mjs +0 -183
- package/dist/esm2022/lib/producers/socket-receive-methods/disconnect-user-self.service.mjs +0 -50
- package/dist/esm2022/lib/producers/socket-receive-methods/disconnect.service.mjs +0 -64
- package/dist/esm2022/lib/producers/socket-receive-methods/get-domains.service.mjs +0 -78
- package/dist/esm2022/lib/producers/socket-receive-methods/host-request-response.service.mjs +0 -150
- package/dist/esm2022/lib/producers/socket-receive-methods/meeting-ended.service.mjs +0 -73
- package/dist/esm2022/lib/producers/socket-receive-methods/meeting-still-there.service.mjs +0 -47
- package/dist/esm2022/lib/producers/socket-receive-methods/meeting-time-remaining.service.mjs +0 -63
- package/dist/esm2022/lib/producers/socket-receive-methods/participant-requested.service.mjs +0 -63
- package/dist/esm2022/lib/producers/socket-receive-methods/person-joined.service.mjs +0 -54
- package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-closed.service.mjs +0 -129
- package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-paused.service.mjs +0 -152
- package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-resumed.service.mjs +0 -99
- package/dist/esm2022/lib/producers/socket-receive-methods/re-initiate-recording.service.mjs +0 -67
- package/dist/esm2022/lib/producers/socket-receive-methods/receive-message.service.mjs +0 -134
- package/dist/esm2022/lib/producers/socket-receive-methods/recording-notice.service.mjs +0 -233
- package/dist/esm2022/lib/producers/socket-receive-methods/room-record-params.service.mjs +0 -121
- package/dist/esm2022/lib/producers/socket-receive-methods/screen-producer-id.service.mjs +0 -86
- package/dist/esm2022/lib/producers/socket-receive-methods/start-records.service.mjs +0 -60
- package/dist/esm2022/lib/producers/socket-receive-methods/stopped-recording.service.mjs +0 -62
- package/dist/esm2022/lib/producers/socket-receive-methods/time-left-recording.service.mjs +0 -57
- package/dist/esm2022/lib/producers/socket-receive-methods/update-consuming-domains.service.mjs +0 -105
- package/dist/esm2022/lib/producers/socket-receive-methods/update-media-settings.service.mjs +0 -66
- package/dist/esm2022/lib/producers/socket-receive-methods/updated-co-host.service.mjs +0 -96
- package/dist/esm2022/lib/producers/socket-receive-methods/user-waiting.service.mjs +0 -52
- package/dist/esm2022/lib/sockets/socket-manager.service.mjs +0 -113
- package/dist/esm2022/mediasfu-angular.mjs +0 -5
- package/dist/esm2022/public-api.mjs +0 -187
|
@@ -1,3754 +0,0 @@
|
|
|
1
|
-
import { Component, HostListener, Injector, Input, } from '@angular/core';
|
|
2
|
-
import { RouterOutlet } from '@angular/router';
|
|
3
|
-
import { CommonModule } from '@angular/common';
|
|
4
|
-
import { CookieService } from 'ngx-cookie-service';
|
|
5
|
-
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
6
|
-
import { faMicrophoneSlash, faVideoSlash, faPhone, faComments, faShareAlt, faSync, faVideo, faMicrophone, } from '@fortawesome/free-solid-svg-icons';
|
|
7
|
-
import { initialValuesState } from '../../methods/utils/initial-values.util';
|
|
8
|
-
// Components for display
|
|
9
|
-
import { MainAspectComponent } from '../display-components/main-aspect-component/main-aspect-component.component';
|
|
10
|
-
import { LoadingModal } from '../display-components/loading-modal/loading-modal.component';
|
|
11
|
-
import { ControlButtonsComponentTouch } from '../display-components/control-buttons-component-touch/control-buttons-component-touch.component';
|
|
12
|
-
import { OtherGridComponent } from '../display-components/other-grid-component/other-grid-component.component';
|
|
13
|
-
import { MainScreenComponent } from '../display-components/main-screen-component/main-screen-component.component';
|
|
14
|
-
import { MainContainerComponent } from '../display-components/main-container-component/main-container-component.component';
|
|
15
|
-
import { AlertComponent } from '../display-components/alert-component/alert.component.component';
|
|
16
|
-
import { MessagesModal } from '../message-components/messages-modal/messages-modal.component';
|
|
17
|
-
import { ConfirmExitModal } from '../exit-components/confirm-exit-modal/confirm-exit-modal.component';
|
|
18
|
-
import { ConfirmHereModal } from '../misc-components/confirm-here-modal/confirm-here-modal.component';
|
|
19
|
-
import { ShareEventModal } from '../misc-components/share-event-modal/share-event-modal.component';
|
|
20
|
-
import { WelcomePage, } from '../misc-components/welcome-page/welcome-page.component';
|
|
21
|
-
// Pagination and display of media
|
|
22
|
-
import { FlexibleGrid } from '../display-components/flexible-grid/flexible-grid.component';
|
|
23
|
-
import { AudioGrid } from '../display-components/audio-grid/audio-grid.component';
|
|
24
|
-
import { MessageWidget } from '../display-components/control-widgets/message-widget.component';
|
|
25
|
-
import { sleep } from '../../methods/utils/sleep.util';
|
|
26
|
-
import * as i0 from "@angular/core";
|
|
27
|
-
import * as i1 from "../../consumers/update-mini-cards-grid.service";
|
|
28
|
-
import * as i2 from "../../consumers/mix-streams.service";
|
|
29
|
-
import * as i3 from "../../consumers/disp-streams.service";
|
|
30
|
-
import * as i4 from "../../consumers/stop-share-screen.service";
|
|
31
|
-
import * as i5 from "../../consumers/check-screen-share.service";
|
|
32
|
-
import * as i6 from "../../consumers/start-share-screen.service";
|
|
33
|
-
import * as i7 from "../../consumers/request-screen-share.service";
|
|
34
|
-
import * as i8 from "../../consumers/reorder-streams.service";
|
|
35
|
-
import * as i9 from "../../consumers/prepopulate-user-media.service";
|
|
36
|
-
import * as i10 from "../../consumers/get-videos.service";
|
|
37
|
-
import * as i11 from "../../consumers/re-port.service";
|
|
38
|
-
import * as i12 from "../../consumers/trigger.service";
|
|
39
|
-
import * as i13 from "../../consumers/consumer-resume.service";
|
|
40
|
-
import * as i14 from "../../consumers/connect-send-transport.service";
|
|
41
|
-
import * as i15 from "../../consumers/connect-send-transport-audio.service";
|
|
42
|
-
import * as i16 from "../../consumers/connect-send-transport-video.service";
|
|
43
|
-
import * as i17 from "../../consumers/connect-send-transport-screen.service";
|
|
44
|
-
import * as i18 from "../../consumers/process-consumer-transports.service";
|
|
45
|
-
import * as i19 from "../../consumers/resume-pause-streams.service";
|
|
46
|
-
import * as i20 from "../../consumers/readjust.service";
|
|
47
|
-
import * as i21 from "../../consumers/check-grid.service";
|
|
48
|
-
import * as i22 from "../../consumers/get-estimate.service";
|
|
49
|
-
import * as i23 from "../../consumers/calculate-rows-and-columns.service";
|
|
50
|
-
import * as i24 from "../../consumers/add-videos-grid.service";
|
|
51
|
-
import * as i25 from "../../consumers/on-screen-changes.service";
|
|
52
|
-
import * as i26 from "../../consumers/change-vids.service";
|
|
53
|
-
import * as i27 from "../../consumers/compare-active-names.service";
|
|
54
|
-
import * as i28 from "../../consumers/compare-screen-states.service";
|
|
55
|
-
import * as i29 from "../../consumers/create-send-transport.service";
|
|
56
|
-
import * as i30 from "../../consumers/resume-send-transport-audio.service";
|
|
57
|
-
import * as i31 from "../../consumers/receive-all-piped-transports.service";
|
|
58
|
-
import * as i32 from "../../consumers/disconnect-send-transport-video.service";
|
|
59
|
-
import * as i33 from "../../consumers/disconnect-send-transport-audio.service";
|
|
60
|
-
import * as i34 from "../../consumers/disconnect-send-transport-screen.service";
|
|
61
|
-
import * as i35 from "../../consumers/get-piped-producers-alt.service";
|
|
62
|
-
import * as i36 from "../../consumers/signal-new-consumer-transport.service";
|
|
63
|
-
import * as i37 from "../../consumers/connect-recv-transport.service";
|
|
64
|
-
import * as i38 from "../../consumers/re-update-inter.service";
|
|
65
|
-
import * as i39 from "../../consumers/update-participant-audio-decibels.service";
|
|
66
|
-
import * as i40 from "../../consumers/close-and-resize.service";
|
|
67
|
-
import * as i41 from "../../consumers/auto-adjust.service";
|
|
68
|
-
import * as i42 from "../../consumers/switch-user-video-alt.service";
|
|
69
|
-
import * as i43 from "../../consumers/switch-user-video.service";
|
|
70
|
-
import * as i44 from "../../consumers/switch-user-audio.service";
|
|
71
|
-
import * as i45 from "../../producers/socket-receive-methods/get-domains.service";
|
|
72
|
-
import * as i46 from "../../methods/utils/format-number.service";
|
|
73
|
-
import * as i47 from "../../consumers/connect-ips.service";
|
|
74
|
-
import * as i48 from "../../producer-client/producer-client-emits/create-device-client.service";
|
|
75
|
-
import * as i49 from "../../methods/whiteboard-methods/capture-canvas-stream.service";
|
|
76
|
-
import * as i50 from "../../consumers/resume-pause-audio-streams.service";
|
|
77
|
-
import * as i51 from "../../consumers/process-consumer-transports-audio.service";
|
|
78
|
-
import * as i52 from "../../methods/message-methods/launch-messages.service";
|
|
79
|
-
import * as i53 from "../../methods/exit-methods/launch-confirm-exit.service";
|
|
80
|
-
import * as i54 from "../../methods/utils/meeting-timer/start-meeting-progress-timer.service";
|
|
81
|
-
import * as i55 from "../../producers/socket-receive-methods/producer-media-paused.service";
|
|
82
|
-
import * as i56 from "../../producers/socket-receive-methods/producer-media-resumed.service";
|
|
83
|
-
import * as i57 from "../../producers/socket-receive-methods/producer-media-closed.service";
|
|
84
|
-
import * as i58 from "../../producers/socket-receive-methods/meeting-ended.service";
|
|
85
|
-
import * as i59 from "../../producers/socket-receive-methods/disconnect-user-self.service";
|
|
86
|
-
import * as i60 from "../../producers/socket-receive-methods/receive-message.service";
|
|
87
|
-
import * as i61 from "../../producers/socket-receive-methods/meeting-time-remaining.service";
|
|
88
|
-
import * as i62 from "../../producers/socket-receive-methods/meeting-still-there.service";
|
|
89
|
-
import * as i63 from "../../producers/socket-receive-methods/all-members.service";
|
|
90
|
-
import * as i64 from "../../producers/socket-receive-methods/all-members-rest.service";
|
|
91
|
-
import * as i65 from "../../producers/socket-receive-methods/disconnect.service";
|
|
92
|
-
import * as i66 from "../../sockets/socket-manager.service";
|
|
93
|
-
import * as i67 from "../../producer-client/producer-client-emits/join-room-client.service";
|
|
94
|
-
import * as i68 from "../../producer-client/producer-client-emits/update-room-parameters-client.service";
|
|
95
|
-
import * as i69 from "../../methods/stream-methods/click-video.service";
|
|
96
|
-
import * as i70 from "../../methods/stream-methods/click-audio.service";
|
|
97
|
-
import * as i71 from "../../methods/stream-methods/click-screen-share.service";
|
|
98
|
-
import * as i72 from "../../methods/stream-methods/switch-video-alt.service";
|
|
99
|
-
import * as i73 from "../../consumers/stream-success-video.service";
|
|
100
|
-
import * as i74 from "../../consumers/stream-success-audio.service";
|
|
101
|
-
import * as i75 from "../../consumers/stream-success-screen.service";
|
|
102
|
-
import * as i76 from "../../consumers/stream-success-audio-switch.service";
|
|
103
|
-
import * as i77 from "../../consumers/check-permission.service";
|
|
104
|
-
import * as i78 from "../../producers/socket-receive-methods/update-consuming-domains.service";
|
|
105
|
-
import * as i79 from "../../consumers/receive-room-messages.service";
|
|
106
|
-
import * as i80 from "@angular/common";
|
|
107
|
-
/**
|
|
108
|
-
* MediasfuChat component provides an interface for chat-based streaming events. It includes a conditional prejoin screen, main content with flexible grids and modals, and supports chat-related settings.
|
|
109
|
-
*
|
|
110
|
-
* @component
|
|
111
|
-
* @selector app-mediasfu-chat
|
|
112
|
-
* @standalone true
|
|
113
|
-
* @imports [RouterOutlet, CommonModule, AlertComponent, AudioGrid, ControlButtonsComponentTouch, FlexibleGrid, LoadingModal, ConfirmExitModal, MessagesModal, ConfirmHereModal, ShareEventModal, WelcomePage, MainAspectComponent, MainContainerComponent, MainScreenComponent, OtherGridComponent, MessageWidget]
|
|
114
|
-
*
|
|
115
|
-
* @template
|
|
116
|
-
* The template includes:
|
|
117
|
-
* - Conditional rendering for the PrejoinPage component.
|
|
118
|
-
* - A main container with nested components for chat functionalities, including an aspect and screen layout.
|
|
119
|
-
* - The `app-main-aspect-component` for setting display properties based on event types.
|
|
120
|
-
* - An `app-other-grid-component` that manages the layout for video and audio content.
|
|
121
|
-
* - Embedded modals for messages, exit confirmation, and share event actions.
|
|
122
|
-
*
|
|
123
|
-
* @input {any} PrejoinPage - Component for the prejoin page (defaults to WelcomePage).
|
|
124
|
-
* @input {{ apiUserName: string; apiKey: string }} credentials - API credentials for MediaSFU.
|
|
125
|
-
* @input {boolean} useLocalUIMode - Toggles local UI mode.
|
|
126
|
-
* @input {SeedData} seedData - Optional seed data.
|
|
127
|
-
* @input {boolean} useSeed - Enables use of seed data.
|
|
128
|
-
* @input {string} imgSrc - Image source for branding or logos.
|
|
129
|
-
*
|
|
130
|
-
* @property {string} title - The title of the component, defaults to "MediaSFU-Chat".
|
|
131
|
-
*
|
|
132
|
-
* @styles
|
|
133
|
-
* Customizable styles for layout and overflow.
|
|
134
|
-
*
|
|
135
|
-
* @providers [CookieService] - Service for managing cookies within the component.
|
|
136
|
-
*
|
|
137
|
-
* @constructor
|
|
138
|
-
* @class MediasfuChat
|
|
139
|
-
* @implements OnInit, OnDestroy
|
|
140
|
-
*
|
|
141
|
-
* @method ngOnInit - Initializes configurations and parameters.
|
|
142
|
-
* @method ngOnDestroy - Handles cleanup and removal of event listeners or intervals.
|
|
143
|
-
*
|
|
144
|
-
* @example
|
|
145
|
-
* ```html
|
|
146
|
-
* <app-mediasfu-chat
|
|
147
|
-
* [PrejoinPage]="CustomPrejoinComponent"
|
|
148
|
-
* [credentials]="{ apiUserName: 'username', apiKey: 'apikey' }"
|
|
149
|
-
* [useLocalUIMode]="true"
|
|
150
|
-
* [seedData]="seedDataObject"
|
|
151
|
-
* [useSeed]="true"
|
|
152
|
-
* imgSrc="https://example.com/logo.png">
|
|
153
|
-
* </app-mediasfu-chat>
|
|
154
|
-
* ```
|
|
155
|
-
*/
|
|
156
|
-
export class MediasfuChat {
|
|
157
|
-
cdr;
|
|
158
|
-
injector;
|
|
159
|
-
updateMiniCardsGrid;
|
|
160
|
-
mixStreams;
|
|
161
|
-
dispStreams;
|
|
162
|
-
stopShareScreen;
|
|
163
|
-
checkScreenShare;
|
|
164
|
-
startShareScreen;
|
|
165
|
-
requestScreenShare;
|
|
166
|
-
reorderStreams;
|
|
167
|
-
prepopulateUserMedia;
|
|
168
|
-
getVideos;
|
|
169
|
-
rePort;
|
|
170
|
-
trigger;
|
|
171
|
-
consumerResume;
|
|
172
|
-
connectSendTransport;
|
|
173
|
-
connectSendTransportAudio;
|
|
174
|
-
connectSendTransportVideo;
|
|
175
|
-
connectSendTransportScreen;
|
|
176
|
-
processConsumerTransports;
|
|
177
|
-
resumePauseStreams;
|
|
178
|
-
readjust;
|
|
179
|
-
checkGrid;
|
|
180
|
-
getEstimate;
|
|
181
|
-
calculateRowsAndColumns;
|
|
182
|
-
addVideosGrid;
|
|
183
|
-
onScreenChanges;
|
|
184
|
-
changeVids;
|
|
185
|
-
compareActiveNames;
|
|
186
|
-
compareScreenStates;
|
|
187
|
-
createSendTransport;
|
|
188
|
-
resumeSendTransportAudio;
|
|
189
|
-
receiveAllPipedTransports;
|
|
190
|
-
disconnectSendTransportVideo;
|
|
191
|
-
disconnectSendTransportAudio;
|
|
192
|
-
disconnectSendTransportScreen;
|
|
193
|
-
getPipedProducersAlt;
|
|
194
|
-
signalNewConsumerTransport;
|
|
195
|
-
connectRecvTransport;
|
|
196
|
-
reUpdateInter;
|
|
197
|
-
updateParticipantAudioDecibels;
|
|
198
|
-
closeAndResize;
|
|
199
|
-
autoAdjust;
|
|
200
|
-
switchUserVideoAlt;
|
|
201
|
-
switchUserVideo;
|
|
202
|
-
switchUserAudio;
|
|
203
|
-
getDomains;
|
|
204
|
-
formatNumber;
|
|
205
|
-
connectIps;
|
|
206
|
-
createDeviceClient;
|
|
207
|
-
captureCanvasStream;
|
|
208
|
-
resumePauseAudioStreams;
|
|
209
|
-
processConsumerTransportsAudio;
|
|
210
|
-
launchMessages;
|
|
211
|
-
launchConfirmExit;
|
|
212
|
-
startMeetingProgressTimer;
|
|
213
|
-
producerMediaPaused;
|
|
214
|
-
producerMediaResumed;
|
|
215
|
-
producerMediaClosed;
|
|
216
|
-
meetingEnded;
|
|
217
|
-
disconnectUserSelf;
|
|
218
|
-
receiveMessage;
|
|
219
|
-
meetingTimeRemaining;
|
|
220
|
-
meetingStillThere;
|
|
221
|
-
allMembers;
|
|
222
|
-
allMembersRest;
|
|
223
|
-
disconnect;
|
|
224
|
-
socketManager;
|
|
225
|
-
joinRoomClient;
|
|
226
|
-
updateRoomParametersClient;
|
|
227
|
-
clickVideo;
|
|
228
|
-
clickAudio;
|
|
229
|
-
clickScreenShare;
|
|
230
|
-
switchVideoAlt;
|
|
231
|
-
streamSuccessVideo;
|
|
232
|
-
streamSuccessAudio;
|
|
233
|
-
streamSuccessScreen;
|
|
234
|
-
streamSuccessAudioSwitch;
|
|
235
|
-
checkPermission;
|
|
236
|
-
updateConsumingDomains;
|
|
237
|
-
receiveRoomMessages;
|
|
238
|
-
PrejoinPage = WelcomePage;
|
|
239
|
-
credentials = { apiUserName: '', apiKey: '' };
|
|
240
|
-
useLocalUIMode = false;
|
|
241
|
-
seedData;
|
|
242
|
-
useSeed = false;
|
|
243
|
-
imgSrc = 'https://mediasfu.com/images/logo192.png';
|
|
244
|
-
title = 'MediaSFU-Chat';
|
|
245
|
-
mainHeightWidthSubscription;
|
|
246
|
-
validatedSubscription;
|
|
247
|
-
islevelSubscription;
|
|
248
|
-
coHostSubscription;
|
|
249
|
-
ScreenboardSubscription;
|
|
250
|
-
recordingSubscription;
|
|
251
|
-
constructor(cdr, injector, updateMiniCardsGrid, mixStreams, dispStreams, stopShareScreen, checkScreenShare, startShareScreen, requestScreenShare, reorderStreams, prepopulateUserMedia, getVideos, rePort, trigger, consumerResume, connectSendTransport, connectSendTransportAudio, connectSendTransportVideo, connectSendTransportScreen, processConsumerTransports, resumePauseStreams, readjust, checkGrid, getEstimate, calculateRowsAndColumns, addVideosGrid, onScreenChanges, changeVids, compareActiveNames, compareScreenStates, createSendTransport, resumeSendTransportAudio, receiveAllPipedTransports, disconnectSendTransportVideo, disconnectSendTransportAudio, disconnectSendTransportScreen, getPipedProducersAlt, signalNewConsumerTransport, connectRecvTransport, reUpdateInter, updateParticipantAudioDecibels, closeAndResize, autoAdjust, switchUserVideoAlt, switchUserVideo, switchUserAudio, getDomains, formatNumber, connectIps, createDeviceClient, captureCanvasStream, resumePauseAudioStreams, processConsumerTransportsAudio, launchMessages, launchConfirmExit, startMeetingProgressTimer, producerMediaPaused, producerMediaResumed, producerMediaClosed, meetingEnded, disconnectUserSelf, receiveMessage, meetingTimeRemaining, meetingStillThere, allMembers, allMembersRest, disconnect, socketManager, joinRoomClient, updateRoomParametersClient, clickVideo, clickAudio, clickScreenShare, switchVideoAlt, streamSuccessVideo, streamSuccessAudio, streamSuccessScreen, streamSuccessAudioSwitch, checkPermission, updateConsumingDomains, receiveRoomMessages) {
|
|
252
|
-
this.cdr = cdr;
|
|
253
|
-
this.injector = injector;
|
|
254
|
-
this.updateMiniCardsGrid = updateMiniCardsGrid;
|
|
255
|
-
this.mixStreams = mixStreams;
|
|
256
|
-
this.dispStreams = dispStreams;
|
|
257
|
-
this.stopShareScreen = stopShareScreen;
|
|
258
|
-
this.checkScreenShare = checkScreenShare;
|
|
259
|
-
this.startShareScreen = startShareScreen;
|
|
260
|
-
this.requestScreenShare = requestScreenShare;
|
|
261
|
-
this.reorderStreams = reorderStreams;
|
|
262
|
-
this.prepopulateUserMedia = prepopulateUserMedia;
|
|
263
|
-
this.getVideos = getVideos;
|
|
264
|
-
this.rePort = rePort;
|
|
265
|
-
this.trigger = trigger;
|
|
266
|
-
this.consumerResume = consumerResume;
|
|
267
|
-
this.connectSendTransport = connectSendTransport;
|
|
268
|
-
this.connectSendTransportAudio = connectSendTransportAudio;
|
|
269
|
-
this.connectSendTransportVideo = connectSendTransportVideo;
|
|
270
|
-
this.connectSendTransportScreen = connectSendTransportScreen;
|
|
271
|
-
this.processConsumerTransports = processConsumerTransports;
|
|
272
|
-
this.resumePauseStreams = resumePauseStreams;
|
|
273
|
-
this.readjust = readjust;
|
|
274
|
-
this.checkGrid = checkGrid;
|
|
275
|
-
this.getEstimate = getEstimate;
|
|
276
|
-
this.calculateRowsAndColumns = calculateRowsAndColumns;
|
|
277
|
-
this.addVideosGrid = addVideosGrid;
|
|
278
|
-
this.onScreenChanges = onScreenChanges;
|
|
279
|
-
this.changeVids = changeVids;
|
|
280
|
-
this.compareActiveNames = compareActiveNames;
|
|
281
|
-
this.compareScreenStates = compareScreenStates;
|
|
282
|
-
this.createSendTransport = createSendTransport;
|
|
283
|
-
this.resumeSendTransportAudio = resumeSendTransportAudio;
|
|
284
|
-
this.receiveAllPipedTransports = receiveAllPipedTransports;
|
|
285
|
-
this.disconnectSendTransportVideo = disconnectSendTransportVideo;
|
|
286
|
-
this.disconnectSendTransportAudio = disconnectSendTransportAudio;
|
|
287
|
-
this.disconnectSendTransportScreen = disconnectSendTransportScreen;
|
|
288
|
-
this.getPipedProducersAlt = getPipedProducersAlt;
|
|
289
|
-
this.signalNewConsumerTransport = signalNewConsumerTransport;
|
|
290
|
-
this.connectRecvTransport = connectRecvTransport;
|
|
291
|
-
this.reUpdateInter = reUpdateInter;
|
|
292
|
-
this.updateParticipantAudioDecibels = updateParticipantAudioDecibels;
|
|
293
|
-
this.closeAndResize = closeAndResize;
|
|
294
|
-
this.autoAdjust = autoAdjust;
|
|
295
|
-
this.switchUserVideoAlt = switchUserVideoAlt;
|
|
296
|
-
this.switchUserVideo = switchUserVideo;
|
|
297
|
-
this.switchUserAudio = switchUserAudio;
|
|
298
|
-
this.getDomains = getDomains;
|
|
299
|
-
this.formatNumber = formatNumber;
|
|
300
|
-
this.connectIps = connectIps;
|
|
301
|
-
this.createDeviceClient = createDeviceClient;
|
|
302
|
-
this.captureCanvasStream = captureCanvasStream;
|
|
303
|
-
this.resumePauseAudioStreams = resumePauseAudioStreams;
|
|
304
|
-
this.processConsumerTransportsAudio = processConsumerTransportsAudio;
|
|
305
|
-
this.launchMessages = launchMessages;
|
|
306
|
-
this.launchConfirmExit = launchConfirmExit;
|
|
307
|
-
this.startMeetingProgressTimer = startMeetingProgressTimer;
|
|
308
|
-
this.producerMediaPaused = producerMediaPaused;
|
|
309
|
-
this.producerMediaResumed = producerMediaResumed;
|
|
310
|
-
this.producerMediaClosed = producerMediaClosed;
|
|
311
|
-
this.meetingEnded = meetingEnded;
|
|
312
|
-
this.disconnectUserSelf = disconnectUserSelf;
|
|
313
|
-
this.receiveMessage = receiveMessage;
|
|
314
|
-
this.meetingTimeRemaining = meetingTimeRemaining;
|
|
315
|
-
this.meetingStillThere = meetingStillThere;
|
|
316
|
-
this.allMembers = allMembers;
|
|
317
|
-
this.allMembersRest = allMembersRest;
|
|
318
|
-
this.disconnect = disconnect;
|
|
319
|
-
this.socketManager = socketManager;
|
|
320
|
-
this.joinRoomClient = joinRoomClient;
|
|
321
|
-
this.updateRoomParametersClient = updateRoomParametersClient;
|
|
322
|
-
this.clickVideo = clickVideo;
|
|
323
|
-
this.clickAudio = clickAudio;
|
|
324
|
-
this.clickScreenShare = clickScreenShare;
|
|
325
|
-
this.switchVideoAlt = switchVideoAlt;
|
|
326
|
-
this.streamSuccessVideo = streamSuccessVideo;
|
|
327
|
-
this.streamSuccessAudio = streamSuccessAudio;
|
|
328
|
-
this.streamSuccessScreen = streamSuccessScreen;
|
|
329
|
-
this.streamSuccessAudioSwitch = streamSuccessAudioSwitch;
|
|
330
|
-
this.checkPermission = checkPermission;
|
|
331
|
-
this.updateConsumingDomains = updateConsumingDomains;
|
|
332
|
-
this.receiveRoomMessages = receiveRoomMessages;
|
|
333
|
-
}
|
|
334
|
-
createInjector(inputs) {
|
|
335
|
-
const inj = Injector.create({
|
|
336
|
-
providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),
|
|
337
|
-
parent: this.injector,
|
|
338
|
-
});
|
|
339
|
-
return inj;
|
|
340
|
-
}
|
|
341
|
-
// Initial values
|
|
342
|
-
mediaSFUFunctions = () => {
|
|
343
|
-
return {
|
|
344
|
-
updateMiniCardsGrid: this.updateMiniCardsGrid?.updateMiniCardsGrid ||
|
|
345
|
-
(() => {
|
|
346
|
-
console.log('none');
|
|
347
|
-
}),
|
|
348
|
-
mixStreams: this.mixStreams?.mixStreams ||
|
|
349
|
-
(() => {
|
|
350
|
-
console.log('none');
|
|
351
|
-
}),
|
|
352
|
-
dispStreams: this.dispStreams?.dispStreams ||
|
|
353
|
-
(() => {
|
|
354
|
-
console.log('none');
|
|
355
|
-
}),
|
|
356
|
-
stopShareScreen: this.stopShareScreen?.stopShareScreen ||
|
|
357
|
-
(() => {
|
|
358
|
-
console.log('none');
|
|
359
|
-
}),
|
|
360
|
-
checkScreenShare: this.checkScreenShare?.checkScreenShare ||
|
|
361
|
-
(() => {
|
|
362
|
-
console.log('none');
|
|
363
|
-
}),
|
|
364
|
-
startShareScreen: this.startShareScreen?.startShareScreen ||
|
|
365
|
-
(() => {
|
|
366
|
-
console.log('none');
|
|
367
|
-
}),
|
|
368
|
-
requestScreenShare: this.requestScreenShare?.requestScreenShare ||
|
|
369
|
-
(() => {
|
|
370
|
-
console.log('none');
|
|
371
|
-
}),
|
|
372
|
-
reorderStreams: this.reorderStreams?.reorderStreams ||
|
|
373
|
-
(() => {
|
|
374
|
-
console.log('none');
|
|
375
|
-
}),
|
|
376
|
-
prepopulateUserMedia: this.prepopulateUserMedia?.prepopulateUserMedia ||
|
|
377
|
-
(() => {
|
|
378
|
-
console.log('none');
|
|
379
|
-
}),
|
|
380
|
-
getVideos: this.getVideos?.getVideos ||
|
|
381
|
-
(() => {
|
|
382
|
-
console.log('none');
|
|
383
|
-
}),
|
|
384
|
-
rePort: this.rePort?.rePort ||
|
|
385
|
-
(() => {
|
|
386
|
-
console.log('none');
|
|
387
|
-
}),
|
|
388
|
-
trigger: this.trigger?.trigger ||
|
|
389
|
-
(() => {
|
|
390
|
-
console.log('none');
|
|
391
|
-
}),
|
|
392
|
-
consumerResume: this.consumerResume?.consumerResume ||
|
|
393
|
-
(() => {
|
|
394
|
-
console.log('none');
|
|
395
|
-
}),
|
|
396
|
-
connectSendTransport: this.connectSendTransport?.connectSendTransport ||
|
|
397
|
-
(() => {
|
|
398
|
-
console.log('none');
|
|
399
|
-
}),
|
|
400
|
-
connectSendTransportAudio: this.connectSendTransportAudio?.connectSendTransportAudio ||
|
|
401
|
-
(() => {
|
|
402
|
-
console.log('none');
|
|
403
|
-
}),
|
|
404
|
-
connectSendTransportVideo: this.connectSendTransportVideo?.connectSendTransportVideo ||
|
|
405
|
-
(() => {
|
|
406
|
-
console.log('none');
|
|
407
|
-
}),
|
|
408
|
-
connectSendTransportScreen: this.connectSendTransportScreen?.connectSendTransportScreen ||
|
|
409
|
-
(() => {
|
|
410
|
-
console.log('none');
|
|
411
|
-
}),
|
|
412
|
-
processConsumerTransports: this.processConsumerTransports?.processConsumerTransports ||
|
|
413
|
-
(() => {
|
|
414
|
-
console.log('none');
|
|
415
|
-
}),
|
|
416
|
-
resumePauseStreams: this.resumePauseStreams?.resumePauseStreams ||
|
|
417
|
-
(() => {
|
|
418
|
-
console.log('none');
|
|
419
|
-
}),
|
|
420
|
-
readjust: this.readjust?.readjust ||
|
|
421
|
-
(() => {
|
|
422
|
-
console.log('none');
|
|
423
|
-
}),
|
|
424
|
-
checkGrid: this.checkGrid?.checkGrid ||
|
|
425
|
-
(() => {
|
|
426
|
-
console.log('none');
|
|
427
|
-
}),
|
|
428
|
-
getEstimate: this.getEstimate?.getEstimate ||
|
|
429
|
-
(() => {
|
|
430
|
-
console.log('none');
|
|
431
|
-
}),
|
|
432
|
-
calculateRowsAndColumns: this.calculateRowsAndColumns?.calculateRowsAndColumns ||
|
|
433
|
-
(() => {
|
|
434
|
-
console.log('none');
|
|
435
|
-
}),
|
|
436
|
-
addVideosGrid: this.addVideosGrid?.addVideosGrid ||
|
|
437
|
-
(() => {
|
|
438
|
-
console.log('none');
|
|
439
|
-
}),
|
|
440
|
-
onScreenChanges: this.onScreenChanges?.onScreenChanges ||
|
|
441
|
-
(() => {
|
|
442
|
-
console.log('none');
|
|
443
|
-
}),
|
|
444
|
-
sleep: sleep ||
|
|
445
|
-
(() => {
|
|
446
|
-
console.log('none');
|
|
447
|
-
}),
|
|
448
|
-
changeVids: this.changeVids?.changeVids ||
|
|
449
|
-
(() => {
|
|
450
|
-
console.log('none');
|
|
451
|
-
}),
|
|
452
|
-
compareActiveNames: this.compareActiveNames?.compareActiveNames ||
|
|
453
|
-
(() => {
|
|
454
|
-
console.log('none');
|
|
455
|
-
}),
|
|
456
|
-
compareScreenStates: this.compareScreenStates?.compareScreenStates ||
|
|
457
|
-
(() => {
|
|
458
|
-
console.log('none');
|
|
459
|
-
}),
|
|
460
|
-
createSendTransport: this.createSendTransport?.createSendTransport ||
|
|
461
|
-
(() => {
|
|
462
|
-
console.log('none');
|
|
463
|
-
}),
|
|
464
|
-
resumeSendTransportAudio: this.resumeSendTransportAudio?.resumeSendTransportAudio ||
|
|
465
|
-
(() => {
|
|
466
|
-
console.log('none');
|
|
467
|
-
}),
|
|
468
|
-
receiveAllPipedTransports: this.receiveAllPipedTransports?.receiveAllPipedTransports ||
|
|
469
|
-
(() => {
|
|
470
|
-
console.log('none');
|
|
471
|
-
}),
|
|
472
|
-
disconnectSendTransportVideo: this.disconnectSendTransportVideo?.disconnectSendTransportVideo ||
|
|
473
|
-
(() => {
|
|
474
|
-
console.log('none');
|
|
475
|
-
}),
|
|
476
|
-
disconnectSendTransportAudio: this.disconnectSendTransportAudio?.disconnectSendTransportAudio ||
|
|
477
|
-
(() => {
|
|
478
|
-
console.log('none');
|
|
479
|
-
}),
|
|
480
|
-
disconnectSendTransportScreen: this.disconnectSendTransportScreen?.disconnectSendTransportScreen ||
|
|
481
|
-
(() => {
|
|
482
|
-
console.log('none');
|
|
483
|
-
}),
|
|
484
|
-
getPipedProducersAlt: this.getPipedProducersAlt?.getPipedProducersAlt ||
|
|
485
|
-
(() => {
|
|
486
|
-
console.log('none');
|
|
487
|
-
}),
|
|
488
|
-
signalNewConsumerTransport: this.signalNewConsumerTransport?.signalNewConsumerTransport ||
|
|
489
|
-
(() => {
|
|
490
|
-
console.log('none');
|
|
491
|
-
}),
|
|
492
|
-
connectRecvTransport: this.connectRecvTransport?.connectRecvTransport ||
|
|
493
|
-
(() => {
|
|
494
|
-
console.log('none');
|
|
495
|
-
}),
|
|
496
|
-
reUpdateInter: this.reUpdateInter?.reUpdateInter ||
|
|
497
|
-
(() => {
|
|
498
|
-
console.log('none');
|
|
499
|
-
}),
|
|
500
|
-
updateParticipantAudioDecibels: this.updateParticipantAudioDecibels?.updateParticipantAudioDecibels ||
|
|
501
|
-
(() => {
|
|
502
|
-
console.log('none');
|
|
503
|
-
}),
|
|
504
|
-
closeAndResize: this.closeAndResize?.closeAndResize ||
|
|
505
|
-
(() => {
|
|
506
|
-
console.log('none');
|
|
507
|
-
}),
|
|
508
|
-
autoAdjust: this.autoAdjust?.autoAdjust ||
|
|
509
|
-
(() => {
|
|
510
|
-
console.log('none');
|
|
511
|
-
}),
|
|
512
|
-
switchUserVideoAlt: this.switchUserVideoAlt?.switchUserVideoAlt ||
|
|
513
|
-
(() => {
|
|
514
|
-
console.log('none');
|
|
515
|
-
}),
|
|
516
|
-
switchUserVideo: this.switchUserVideo?.switchUserVideo ||
|
|
517
|
-
(() => {
|
|
518
|
-
console.log('none');
|
|
519
|
-
}),
|
|
520
|
-
switchUserAudio: this.switchUserAudio?.switchUserAudio ||
|
|
521
|
-
(() => {
|
|
522
|
-
console.log('none');
|
|
523
|
-
}),
|
|
524
|
-
getDomains: this.getDomains?.getDomains ||
|
|
525
|
-
(() => {
|
|
526
|
-
console.log('none');
|
|
527
|
-
}),
|
|
528
|
-
formatNumber: this.formatNumber?.formatNumber ||
|
|
529
|
-
(() => {
|
|
530
|
-
console.log('none');
|
|
531
|
-
}),
|
|
532
|
-
connectIps: this.connectIps?.connectIps ||
|
|
533
|
-
(() => {
|
|
534
|
-
console.log('none');
|
|
535
|
-
}),
|
|
536
|
-
createDeviceClient: this.createDeviceClient?.createDeviceClient ||
|
|
537
|
-
(() => {
|
|
538
|
-
console.log('none');
|
|
539
|
-
}),
|
|
540
|
-
captureCanvasStream: this.captureCanvasStream?.captureCanvasStream ||
|
|
541
|
-
(() => {
|
|
542
|
-
console.log('none');
|
|
543
|
-
}),
|
|
544
|
-
resumePauseAudioStreams: this.resumePauseAudioStreams?.resumePauseAudioStreams ||
|
|
545
|
-
(() => {
|
|
546
|
-
console.log('none');
|
|
547
|
-
}),
|
|
548
|
-
processConsumerTransportsAudio: this.processConsumerTransportsAudio?.processConsumerTransportsAudio ||
|
|
549
|
-
(() => {
|
|
550
|
-
console.log('none');
|
|
551
|
-
}),
|
|
552
|
-
checkPermission: this.checkPermission?.checkPermission ||
|
|
553
|
-
(() => {
|
|
554
|
-
console.log('none');
|
|
555
|
-
}),
|
|
556
|
-
streamSuccessVideo: this.streamSuccessVideo?.streamSuccessVideo ||
|
|
557
|
-
(() => {
|
|
558
|
-
console.log('none');
|
|
559
|
-
}),
|
|
560
|
-
streamSuccessAudio: this.streamSuccessAudio?.streamSuccessAudio ||
|
|
561
|
-
(() => {
|
|
562
|
-
console.log('none');
|
|
563
|
-
}),
|
|
564
|
-
streamSuccessScreen: this.streamSuccessScreen?.streamSuccessScreen ||
|
|
565
|
-
(() => {
|
|
566
|
-
console.log('none');
|
|
567
|
-
}),
|
|
568
|
-
streamSuccessAudioSwitch: this.streamSuccessAudioSwitch?.streamSuccessAudioSwitch ||
|
|
569
|
-
(() => {
|
|
570
|
-
console.log('none');
|
|
571
|
-
}),
|
|
572
|
-
clickVideo: this.clickVideo?.clickVideo ||
|
|
573
|
-
(() => {
|
|
574
|
-
console.log('none');
|
|
575
|
-
}),
|
|
576
|
-
clickAudio: this.clickAudio?.clickAudio ||
|
|
577
|
-
(() => {
|
|
578
|
-
console.log('none');
|
|
579
|
-
}),
|
|
580
|
-
clickScreenShare: this.clickScreenShare?.clickScreenShare ||
|
|
581
|
-
(() => {
|
|
582
|
-
console.log('none');
|
|
583
|
-
}),
|
|
584
|
-
switchVideoAlt: this.switchVideoAlt?.switchVideoAlt ||
|
|
585
|
-
(() => {
|
|
586
|
-
console.log('none');
|
|
587
|
-
}),
|
|
588
|
-
requestPermissionCamera: this.requestPermissionCamera ||
|
|
589
|
-
(() => {
|
|
590
|
-
console.log('none');
|
|
591
|
-
}),
|
|
592
|
-
requestPermissionAudio: this.requestPermissionAudio ||
|
|
593
|
-
(() => {
|
|
594
|
-
console.log('none');
|
|
595
|
-
}),
|
|
596
|
-
};
|
|
597
|
-
};
|
|
598
|
-
validated = new BehaviorSubject(false);
|
|
599
|
-
localUIMode = new BehaviorSubject(false);
|
|
600
|
-
socket = new BehaviorSubject({});
|
|
601
|
-
roomData = new BehaviorSubject(null);
|
|
602
|
-
device = new BehaviorSubject(null);
|
|
603
|
-
apiKey = new BehaviorSubject('');
|
|
604
|
-
apiUserName = new BehaviorSubject('');
|
|
605
|
-
apiToken = new BehaviorSubject('');
|
|
606
|
-
link = new BehaviorSubject('');
|
|
607
|
-
roomName = new BehaviorSubject('');
|
|
608
|
-
member = new BehaviorSubject('');
|
|
609
|
-
adminPasscode = new BehaviorSubject('');
|
|
610
|
-
islevel = new BehaviorSubject('1');
|
|
611
|
-
coHost = new BehaviorSubject('No coHost');
|
|
612
|
-
coHostResponsibility = new BehaviorSubject([
|
|
613
|
-
{ name: 'participants', value: false, dedicated: false },
|
|
614
|
-
{ name: 'media', value: false, dedicated: false },
|
|
615
|
-
{ name: 'waiting', value: false, dedicated: false },
|
|
616
|
-
{ name: 'chat', value: false, dedicated: false },
|
|
617
|
-
]);
|
|
618
|
-
youAreCoHost = new BehaviorSubject(false);
|
|
619
|
-
youAreHost = new BehaviorSubject(false);
|
|
620
|
-
confirmedToRecord = new BehaviorSubject(false);
|
|
621
|
-
meetingDisplayType = new BehaviorSubject('media');
|
|
622
|
-
meetingVideoOptimized = new BehaviorSubject(false);
|
|
623
|
-
eventType = new BehaviorSubject('chat');
|
|
624
|
-
participants = new BehaviorSubject([]);
|
|
625
|
-
filteredParticipants = new BehaviorSubject([]);
|
|
626
|
-
participantsCounter = new BehaviorSubject(0);
|
|
627
|
-
participantsFilter = new BehaviorSubject('');
|
|
628
|
-
consume_sockets = new BehaviorSubject([]);
|
|
629
|
-
rtpCapabilities = new BehaviorSubject(null);
|
|
630
|
-
roomRecvIPs = new BehaviorSubject([]);
|
|
631
|
-
meetingRoomParams = new BehaviorSubject(null);
|
|
632
|
-
itemPageLimit = new BehaviorSubject(4);
|
|
633
|
-
audioOnlyRoom = new BehaviorSubject(false);
|
|
634
|
-
addForBasic = new BehaviorSubject(false);
|
|
635
|
-
screenPageLimit = new BehaviorSubject(4);
|
|
636
|
-
shareScreenStarted = new BehaviorSubject(false);
|
|
637
|
-
shared = new BehaviorSubject(false);
|
|
638
|
-
targetOrientation = new BehaviorSubject('landscape');
|
|
639
|
-
targetResolution = new BehaviorSubject('sd');
|
|
640
|
-
targetResolutionHost = new BehaviorSubject('sd');
|
|
641
|
-
vidCons = new BehaviorSubject({ width: 640, height: 360 });
|
|
642
|
-
frameRate = new BehaviorSubject(10);
|
|
643
|
-
hParams = new BehaviorSubject({});
|
|
644
|
-
vParams = new BehaviorSubject({});
|
|
645
|
-
screenParams = new BehaviorSubject({});
|
|
646
|
-
aParams = new BehaviorSubject({});
|
|
647
|
-
recordingAudioPausesLimit = new BehaviorSubject(0);
|
|
648
|
-
recordingAudioPausesCount = new BehaviorSubject(0);
|
|
649
|
-
recordingAudioSupport = new BehaviorSubject(false);
|
|
650
|
-
recordingAudioPeopleLimit = new BehaviorSubject(0);
|
|
651
|
-
recordingAudioParticipantsTimeLimit = new BehaviorSubject(0);
|
|
652
|
-
recordingVideoPausesCount = new BehaviorSubject(0);
|
|
653
|
-
recordingVideoPausesLimit = new BehaviorSubject(0);
|
|
654
|
-
recordingVideoSupport = new BehaviorSubject(false);
|
|
655
|
-
recordingVideoPeopleLimit = new BehaviorSubject(0);
|
|
656
|
-
recordingVideoParticipantsTimeLimit = new BehaviorSubject(0);
|
|
657
|
-
recordingAllParticipantsSupport = new BehaviorSubject(false);
|
|
658
|
-
recordingVideoParticipantsSupport = new BehaviorSubject(false);
|
|
659
|
-
recordingAllParticipantsFullRoomSupport = new BehaviorSubject(false);
|
|
660
|
-
recordingVideoParticipantsFullRoomSupport = new BehaviorSubject(false);
|
|
661
|
-
recordingPreferredOrientation = new BehaviorSubject('landscape');
|
|
662
|
-
recordingSupportForOtherOrientation = new BehaviorSubject(false);
|
|
663
|
-
recordingMultiFormatsSupport = new BehaviorSubject(false);
|
|
664
|
-
userRecordingParams = new BehaviorSubject({
|
|
665
|
-
mainSpecs: {
|
|
666
|
-
mediaOptions: 'video', // 'audio', 'video'
|
|
667
|
-
audioOptions: 'all', // 'all', 'onScreen', 'host'
|
|
668
|
-
videoOptions: 'all', // 'all', 'mainScreen'
|
|
669
|
-
videoType: 'fullDisplay', // 'all', 'bestDisplay', 'fullDisplay'
|
|
670
|
-
videoOptimized: false, // true, false
|
|
671
|
-
recordingDisplayType: 'media', // 'media', 'video', 'all'
|
|
672
|
-
addHLS: false, // true, false
|
|
673
|
-
},
|
|
674
|
-
dispSpecs: {
|
|
675
|
-
nameTags: true, // true, false
|
|
676
|
-
backgroundColor: '#000000', // '#000000', '#ffffff'
|
|
677
|
-
nameTagsColor: '#ffffff', // '#000000', '#ffffff'
|
|
678
|
-
orientationVideo: 'portrait', // 'landscape', 'portrait', 'all'
|
|
679
|
-
},
|
|
680
|
-
});
|
|
681
|
-
canRecord = new BehaviorSubject(false);
|
|
682
|
-
startReport = new BehaviorSubject(false);
|
|
683
|
-
endReport = new BehaviorSubject(false);
|
|
684
|
-
recordTimerInterval = new BehaviorSubject(null);
|
|
685
|
-
recordStartTime = new BehaviorSubject(0);
|
|
686
|
-
recordElapsedTime = new BehaviorSubject(0);
|
|
687
|
-
isTimerRunning = new BehaviorSubject(false);
|
|
688
|
-
canPauseResume = new BehaviorSubject(false);
|
|
689
|
-
recordChangeSeconds = new BehaviorSubject(15000);
|
|
690
|
-
pauseLimit = new BehaviorSubject(0);
|
|
691
|
-
pauseRecordCount = new BehaviorSubject(0);
|
|
692
|
-
canLaunchRecord = new BehaviorSubject(true);
|
|
693
|
-
stopLaunchRecord = new BehaviorSubject(false);
|
|
694
|
-
participantsAll = new BehaviorSubject([]);
|
|
695
|
-
firstAll = new BehaviorSubject(false);
|
|
696
|
-
updateMainWindow = new BehaviorSubject(false);
|
|
697
|
-
first_round = new BehaviorSubject(false);
|
|
698
|
-
landScaped = new BehaviorSubject(false);
|
|
699
|
-
lock_screen = new BehaviorSubject(false);
|
|
700
|
-
screenId = new BehaviorSubject('');
|
|
701
|
-
allVideoStreams = new BehaviorSubject([]);
|
|
702
|
-
newLimitedStreams = new BehaviorSubject([]);
|
|
703
|
-
newLimitedStreamsIDs = new BehaviorSubject([]);
|
|
704
|
-
activeSounds = new BehaviorSubject([]);
|
|
705
|
-
screenShareIDStream = new BehaviorSubject('');
|
|
706
|
-
screenShareNameStream = new BehaviorSubject('');
|
|
707
|
-
adminIDStream = new BehaviorSubject('');
|
|
708
|
-
adminNameStream = new BehaviorSubject('');
|
|
709
|
-
youYouStream = new BehaviorSubject([]);
|
|
710
|
-
youYouStreamIDs = new BehaviorSubject([]);
|
|
711
|
-
localStream = new BehaviorSubject(null);
|
|
712
|
-
recordStarted = new BehaviorSubject(false);
|
|
713
|
-
recordResumed = new BehaviorSubject(false);
|
|
714
|
-
recordPaused = new BehaviorSubject(false);
|
|
715
|
-
recordStopped = new BehaviorSubject(false);
|
|
716
|
-
adminRestrictSetting = new BehaviorSubject(false);
|
|
717
|
-
videoRequestState = new BehaviorSubject(null);
|
|
718
|
-
videoRequestTime = new BehaviorSubject(0);
|
|
719
|
-
videoAction = new BehaviorSubject(false);
|
|
720
|
-
localStreamVideo = new BehaviorSubject(null);
|
|
721
|
-
userDefaultVideoInputDevice = new BehaviorSubject('');
|
|
722
|
-
currentFacingMode = new BehaviorSubject('user');
|
|
723
|
-
prevFacingMode = new BehaviorSubject('user');
|
|
724
|
-
defVideoID = new BehaviorSubject('');
|
|
725
|
-
allowed = new BehaviorSubject(false);
|
|
726
|
-
dispActiveNames = new BehaviorSubject([]);
|
|
727
|
-
p_dispActiveNames = new BehaviorSubject([]);
|
|
728
|
-
activeNames = new BehaviorSubject([]);
|
|
729
|
-
prevActiveNames = new BehaviorSubject([]);
|
|
730
|
-
p_activeNames = new BehaviorSubject([]);
|
|
731
|
-
membersReceived = new BehaviorSubject(false);
|
|
732
|
-
deferScreenReceived = new BehaviorSubject(false);
|
|
733
|
-
hostFirstSwitch = new BehaviorSubject(false);
|
|
734
|
-
micAction = new BehaviorSubject(false);
|
|
735
|
-
screenAction = new BehaviorSubject(false);
|
|
736
|
-
chatAction = new BehaviorSubject(false);
|
|
737
|
-
audioRequestState = new BehaviorSubject(null);
|
|
738
|
-
screenRequestState = new BehaviorSubject(null);
|
|
739
|
-
chatRequestState = new BehaviorSubject(null);
|
|
740
|
-
audioRequestTime = new BehaviorSubject(0);
|
|
741
|
-
screenRequestTime = new BehaviorSubject(0);
|
|
742
|
-
chatRequestTime = new BehaviorSubject(0);
|
|
743
|
-
updateRequestIntervalSeconds = new BehaviorSubject(240);
|
|
744
|
-
oldSoundIds = new BehaviorSubject([]);
|
|
745
|
-
hostLabel = new BehaviorSubject('Host');
|
|
746
|
-
mainScreenFilled = new BehaviorSubject(false);
|
|
747
|
-
localStreamScreen = new BehaviorSubject(null);
|
|
748
|
-
screenAlreadyOn = new BehaviorSubject(false);
|
|
749
|
-
chatAlreadyOn = new BehaviorSubject(false);
|
|
750
|
-
redirectURL = new BehaviorSubject('');
|
|
751
|
-
oldAllStreams = new BehaviorSubject([]);
|
|
752
|
-
adminVidID = new BehaviorSubject('');
|
|
753
|
-
streamNames = new BehaviorSubject([]);
|
|
754
|
-
non_alVideoStreams = new BehaviorSubject([]);
|
|
755
|
-
sortAudioLoudness = new BehaviorSubject(false);
|
|
756
|
-
audioDecibels = new BehaviorSubject([]);
|
|
757
|
-
mixed_alVideoStreams = new BehaviorSubject([]);
|
|
758
|
-
non_alVideoStreams_muted = new BehaviorSubject([]);
|
|
759
|
-
paginatedStreams = new BehaviorSubject([]);
|
|
760
|
-
localStreamAudio = new BehaviorSubject(null);
|
|
761
|
-
defAudioID = new BehaviorSubject('');
|
|
762
|
-
userDefaultAudioInputDevice = new BehaviorSubject('');
|
|
763
|
-
userDefaultAudioOutputDevice = new BehaviorSubject('');
|
|
764
|
-
prevAudioInputDevice = new BehaviorSubject('');
|
|
765
|
-
prevVideoInputDevice = new BehaviorSubject('');
|
|
766
|
-
audioPaused = new BehaviorSubject(false);
|
|
767
|
-
mainScreenPerson = new BehaviorSubject('');
|
|
768
|
-
adminOnMainScreen = new BehaviorSubject(false);
|
|
769
|
-
screenStates = new BehaviorSubject([
|
|
770
|
-
{
|
|
771
|
-
mainScreenPerson: '',
|
|
772
|
-
mainScreenProducerId: '',
|
|
773
|
-
mainScreenFilled: false,
|
|
774
|
-
adminOnMainScreen: false,
|
|
775
|
-
},
|
|
776
|
-
]);
|
|
777
|
-
prevScreenStates = new BehaviorSubject([
|
|
778
|
-
{
|
|
779
|
-
mainScreenPerson: '',
|
|
780
|
-
mainScreenProducerId: '',
|
|
781
|
-
mainScreenFilled: false,
|
|
782
|
-
adminOnMainScreen: false,
|
|
783
|
-
},
|
|
784
|
-
]);
|
|
785
|
-
updateDateState = new BehaviorSubject(null);
|
|
786
|
-
lastUpdate = new BehaviorSubject(null);
|
|
787
|
-
nForReadjustRecord = new BehaviorSubject(0);
|
|
788
|
-
fixedPageLimit = new BehaviorSubject(4);
|
|
789
|
-
removeAltGrid = new BehaviorSubject(false);
|
|
790
|
-
nForReadjust = new BehaviorSubject(0);
|
|
791
|
-
reorderInterval = new BehaviorSubject(30000);
|
|
792
|
-
fastReorderInterval = new BehaviorSubject(10000);
|
|
793
|
-
lastReorderTime = new BehaviorSubject(0);
|
|
794
|
-
audStreamNames = new BehaviorSubject([]);
|
|
795
|
-
currentUserPage = new BehaviorSubject(0);
|
|
796
|
-
mainHeightWidth = new BehaviorSubject(0);
|
|
797
|
-
prevMainHeightWidth = new BehaviorSubject(this.mainHeightWidth.value);
|
|
798
|
-
prevDoPaginate = new BehaviorSubject(false);
|
|
799
|
-
doPaginate = new BehaviorSubject(false);
|
|
800
|
-
shareEnded = new BehaviorSubject(false);
|
|
801
|
-
lStreams = new BehaviorSubject([]);
|
|
802
|
-
chatRefStreams = new BehaviorSubject([]);
|
|
803
|
-
controlHeight = new BehaviorSubject(this.eventType.value === 'webinar' || this.eventType.value === 'conference' ? 0 : 0.06);
|
|
804
|
-
isWideScreen = new BehaviorSubject(false);
|
|
805
|
-
isMediumScreen = new BehaviorSubject(false);
|
|
806
|
-
isSmallScreen = new BehaviorSubject(false);
|
|
807
|
-
addGrid = new BehaviorSubject(false);
|
|
808
|
-
addAltGrid = new BehaviorSubject(false);
|
|
809
|
-
gridRows = new BehaviorSubject(0);
|
|
810
|
-
gridCols = new BehaviorSubject(0);
|
|
811
|
-
altGridRows = new BehaviorSubject(0);
|
|
812
|
-
altGridCols = new BehaviorSubject(0);
|
|
813
|
-
numberPages = new BehaviorSubject(0);
|
|
814
|
-
currentStreams = new BehaviorSubject([]);
|
|
815
|
-
showMiniView = new BehaviorSubject(false);
|
|
816
|
-
nStream = new BehaviorSubject(null);
|
|
817
|
-
defer_receive = new BehaviorSubject(false);
|
|
818
|
-
allAudioStreams = new BehaviorSubject([]);
|
|
819
|
-
remoteScreenStream = new BehaviorSubject([]);
|
|
820
|
-
screenProducer = new BehaviorSubject(null);
|
|
821
|
-
gotAllVids = new BehaviorSubject(false);
|
|
822
|
-
paginationHeightWidth = new BehaviorSubject(40);
|
|
823
|
-
paginationDirection = new BehaviorSubject('horizontal');
|
|
824
|
-
gridSizes = new BehaviorSubject({
|
|
825
|
-
gridWidth: 0,
|
|
826
|
-
gridHeight: 0,
|
|
827
|
-
altGridWidth: 0,
|
|
828
|
-
altGridHeight: 0,
|
|
829
|
-
});
|
|
830
|
-
screenForceFullDisplay = new BehaviorSubject(false);
|
|
831
|
-
mainGridStream = new BehaviorSubject([]);
|
|
832
|
-
otherGridStreams = new BehaviorSubject([]);
|
|
833
|
-
audioOnlyStreams = new BehaviorSubject([]);
|
|
834
|
-
videoInputs = new BehaviorSubject([]);
|
|
835
|
-
audioInputs = new BehaviorSubject([]);
|
|
836
|
-
meetingProgressTime = new BehaviorSubject('00:00:00');
|
|
837
|
-
meetingElapsedTime = new BehaviorSubject(0);
|
|
838
|
-
ref_participants = new BehaviorSubject([]);
|
|
839
|
-
updateValidated = (value) => {
|
|
840
|
-
this.validated.next(value);
|
|
841
|
-
};
|
|
842
|
-
updateSocket = (value) => {
|
|
843
|
-
this.socket.next(value);
|
|
844
|
-
};
|
|
845
|
-
updateDevice = (value) => {
|
|
846
|
-
this.device.next(value);
|
|
847
|
-
};
|
|
848
|
-
updateRoomData = (value) => {
|
|
849
|
-
this.roomData.next(value);
|
|
850
|
-
};
|
|
851
|
-
updateApiKey = (value) => {
|
|
852
|
-
this.apiKey.next(value);
|
|
853
|
-
};
|
|
854
|
-
updateApiUserName = (value) => {
|
|
855
|
-
this.apiUserName.next(value);
|
|
856
|
-
};
|
|
857
|
-
updateApiToken = (value) => {
|
|
858
|
-
this.apiToken.next(value);
|
|
859
|
-
};
|
|
860
|
-
updateLink = (value) => {
|
|
861
|
-
this.link.next(value);
|
|
862
|
-
};
|
|
863
|
-
updateRoomName = (value) => {
|
|
864
|
-
this.roomName.next(value);
|
|
865
|
-
};
|
|
866
|
-
updateMember = (value) => {
|
|
867
|
-
this.member.next(value);
|
|
868
|
-
};
|
|
869
|
-
updateAdminPasscode = (value) => {
|
|
870
|
-
this.adminPasscode.next(value);
|
|
871
|
-
};
|
|
872
|
-
updateIslevel = (value) => {
|
|
873
|
-
this.islevel.next(value);
|
|
874
|
-
};
|
|
875
|
-
updateCoHost = (value) => {
|
|
876
|
-
this.coHost.next(value);
|
|
877
|
-
};
|
|
878
|
-
updateCoHostResponsibility = (value) => {
|
|
879
|
-
this.coHostResponsibility.next(value);
|
|
880
|
-
};
|
|
881
|
-
updateYouAreCoHost = (value) => {
|
|
882
|
-
this.youAreCoHost.next(value);
|
|
883
|
-
};
|
|
884
|
-
updateYouAreHost = (value) => {
|
|
885
|
-
this.youAreHost.next(value);
|
|
886
|
-
};
|
|
887
|
-
updateConfirmedToRecord = (value) => {
|
|
888
|
-
this.confirmedToRecord.next(value);
|
|
889
|
-
};
|
|
890
|
-
updateMeetingDisplayType = (value) => {
|
|
891
|
-
this.meetingDisplayType.next(value);
|
|
892
|
-
};
|
|
893
|
-
updateMeetingVideoOptimized = (value) => {
|
|
894
|
-
this.meetingVideoOptimized.next(value);
|
|
895
|
-
};
|
|
896
|
-
updateEventType = (value) => {
|
|
897
|
-
this.eventType.next(value);
|
|
898
|
-
};
|
|
899
|
-
updateParticipants = (value) => {
|
|
900
|
-
this.participants.next(value);
|
|
901
|
-
this.participantsCounter.next(value.length);
|
|
902
|
-
this.filteredParticipants.next(this.participants.value);
|
|
903
|
-
};
|
|
904
|
-
updateFilteredParticipants = (value) => {
|
|
905
|
-
this.filteredParticipants.next(value);
|
|
906
|
-
};
|
|
907
|
-
updateParticipantsCounter = (value) => {
|
|
908
|
-
this.participantsCounter.next(value);
|
|
909
|
-
};
|
|
910
|
-
updateParticipantsFilter = (value) => {
|
|
911
|
-
this.participantsFilter.next(value);
|
|
912
|
-
};
|
|
913
|
-
updateConsume_sockets = (value) => {
|
|
914
|
-
this.consume_sockets.next(value);
|
|
915
|
-
};
|
|
916
|
-
updateRtpCapabilities = (value) => {
|
|
917
|
-
this.rtpCapabilities.next(value);
|
|
918
|
-
};
|
|
919
|
-
updateRoomRecvIPs = (value) => {
|
|
920
|
-
this.roomRecvIPs.next(value);
|
|
921
|
-
};
|
|
922
|
-
updateMeetingRoomParams = (value) => {
|
|
923
|
-
this.meetingRoomParams.next(value);
|
|
924
|
-
};
|
|
925
|
-
updateItemPageLimit = (value) => {
|
|
926
|
-
this.itemPageLimit.next(value);
|
|
927
|
-
};
|
|
928
|
-
updateAudioOnlyRoom = (value) => {
|
|
929
|
-
this.audioOnlyRoom.next(value);
|
|
930
|
-
};
|
|
931
|
-
updateAddForBasic = (value) => {
|
|
932
|
-
this.addForBasic.next(value);
|
|
933
|
-
};
|
|
934
|
-
updateScreenPageLimit = (value) => {
|
|
935
|
-
this.screenPageLimit.next(value);
|
|
936
|
-
};
|
|
937
|
-
updateShareScreenStarted = (value) => {
|
|
938
|
-
this.shareScreenStarted.next(value);
|
|
939
|
-
};
|
|
940
|
-
updateShared = (value) => {
|
|
941
|
-
this.shared.next(value);
|
|
942
|
-
};
|
|
943
|
-
updateTargetOrientation = (value) => {
|
|
944
|
-
this.targetOrientation.next(value);
|
|
945
|
-
};
|
|
946
|
-
updateTargetResolution = (value) => {
|
|
947
|
-
this.targetResolution.next(value);
|
|
948
|
-
};
|
|
949
|
-
updateTargetResolutionHost = (value) => {
|
|
950
|
-
this.targetResolutionHost.next(value);
|
|
951
|
-
};
|
|
952
|
-
updateVidCons = (value) => {
|
|
953
|
-
this.vidCons.next(value);
|
|
954
|
-
};
|
|
955
|
-
updateFrameRate = (value) => {
|
|
956
|
-
this.frameRate.next(value);
|
|
957
|
-
};
|
|
958
|
-
updateHParams = (value) => {
|
|
959
|
-
this.hParams.next(value);
|
|
960
|
-
};
|
|
961
|
-
updateVParams = (value) => {
|
|
962
|
-
this.vParams.next(value);
|
|
963
|
-
};
|
|
964
|
-
updateScreenParams = (value) => {
|
|
965
|
-
this.screenParams.next(value);
|
|
966
|
-
};
|
|
967
|
-
updateAParams = (value) => {
|
|
968
|
-
this.aParams.next(value);
|
|
969
|
-
};
|
|
970
|
-
updateRecordingAudioPausesLimit = (value) => {
|
|
971
|
-
this.recordingAudioPausesLimit.next(value);
|
|
972
|
-
};
|
|
973
|
-
updateRecordingAudioPausesCount = (value) => {
|
|
974
|
-
this.recordingAudioPausesCount.next(value);
|
|
975
|
-
};
|
|
976
|
-
updateRecordingAudioSupport = (value) => {
|
|
977
|
-
this.recordingAudioSupport.next(value);
|
|
978
|
-
};
|
|
979
|
-
updateRecordingAudioPeopleLimit = (value) => {
|
|
980
|
-
this.recordingAudioPeopleLimit.next(value);
|
|
981
|
-
};
|
|
982
|
-
updateRecordingAudioParticipantsTimeLimit = (value) => {
|
|
983
|
-
this.recordingAudioParticipantsTimeLimit.next(value);
|
|
984
|
-
};
|
|
985
|
-
updateRecordingVideoPausesCount = (value) => {
|
|
986
|
-
this.recordingVideoPausesCount.next(value);
|
|
987
|
-
};
|
|
988
|
-
updateRecordingVideoPausesLimit = (value) => {
|
|
989
|
-
this.recordingVideoPausesLimit.next(value);
|
|
990
|
-
};
|
|
991
|
-
updateRecordingVideoSupport = (value) => {
|
|
992
|
-
this.recordingVideoSupport.next(value);
|
|
993
|
-
};
|
|
994
|
-
updateRecordingVideoPeopleLimit = (value) => {
|
|
995
|
-
this.recordingVideoPeopleLimit.next(value);
|
|
996
|
-
};
|
|
997
|
-
updateRecordingVideoParticipantsTimeLimit = (value) => {
|
|
998
|
-
this.recordingVideoParticipantsTimeLimit.next(value);
|
|
999
|
-
};
|
|
1000
|
-
updateRecordingAllParticipantsSupport = (value) => {
|
|
1001
|
-
this.recordingAllParticipantsSupport.next(value);
|
|
1002
|
-
};
|
|
1003
|
-
updateRecordingVideoParticipantsSupport = (value) => {
|
|
1004
|
-
this.recordingVideoParticipantsSupport.next(value);
|
|
1005
|
-
};
|
|
1006
|
-
updateRecordingAllParticipantsFullRoomSupport = (value) => {
|
|
1007
|
-
this.recordingAllParticipantsFullRoomSupport.next(value);
|
|
1008
|
-
};
|
|
1009
|
-
updateRecordingVideoParticipantsFullRoomSupport = (value) => {
|
|
1010
|
-
this.recordingVideoParticipantsFullRoomSupport.next(value);
|
|
1011
|
-
};
|
|
1012
|
-
updateRecordingPreferredOrientation = (value) => {
|
|
1013
|
-
this.recordingPreferredOrientation.next(value);
|
|
1014
|
-
};
|
|
1015
|
-
updateRecordingSupportForOtherOrientation = (value) => {
|
|
1016
|
-
this.recordingSupportForOtherOrientation.next(value);
|
|
1017
|
-
};
|
|
1018
|
-
updateRecordingMultiFormatsSupport = (value) => {
|
|
1019
|
-
this.recordingMultiFormatsSupport.next(value);
|
|
1020
|
-
};
|
|
1021
|
-
updateUserRecordingParams = (value) => {
|
|
1022
|
-
this.userRecordingParams.next(value);
|
|
1023
|
-
};
|
|
1024
|
-
updateCanRecord = (value) => {
|
|
1025
|
-
this.canRecord.next(value);
|
|
1026
|
-
};
|
|
1027
|
-
updateStartReport = (value) => {
|
|
1028
|
-
this.startReport.next(value);
|
|
1029
|
-
};
|
|
1030
|
-
updateEndReport = (value) => {
|
|
1031
|
-
this.endReport.next(value);
|
|
1032
|
-
};
|
|
1033
|
-
updateRecordTimerInterval = (value) => {
|
|
1034
|
-
this.recordTimerInterval.next(value);
|
|
1035
|
-
};
|
|
1036
|
-
updateRecordStartTime = (value) => {
|
|
1037
|
-
this.recordStartTime.next(value);
|
|
1038
|
-
};
|
|
1039
|
-
updateRecordElapsedTime = (value) => {
|
|
1040
|
-
this.recordElapsedTime.next(value);
|
|
1041
|
-
};
|
|
1042
|
-
updateIsTimerRunning = (value) => {
|
|
1043
|
-
this.isTimerRunning.next(value);
|
|
1044
|
-
};
|
|
1045
|
-
updateCanPauseResume = (value) => {
|
|
1046
|
-
this.canPauseResume.next(value);
|
|
1047
|
-
};
|
|
1048
|
-
updateRecordChangeSeconds = (value) => {
|
|
1049
|
-
this.recordChangeSeconds.next(value);
|
|
1050
|
-
};
|
|
1051
|
-
updatePauseLimit = (value) => {
|
|
1052
|
-
this.pauseLimit.next(value);
|
|
1053
|
-
};
|
|
1054
|
-
updatePauseRecordCount = (value) => {
|
|
1055
|
-
this.pauseRecordCount.next(value);
|
|
1056
|
-
};
|
|
1057
|
-
updateCanLaunchRecord = (value) => {
|
|
1058
|
-
this.canLaunchRecord.next(value);
|
|
1059
|
-
};
|
|
1060
|
-
updateStopLaunchRecord = (value) => {
|
|
1061
|
-
this.stopLaunchRecord.next(value);
|
|
1062
|
-
};
|
|
1063
|
-
updateParticipantsAll = (value) => {
|
|
1064
|
-
this.participantsAll.next(value);
|
|
1065
|
-
};
|
|
1066
|
-
updateFirstAll = (value) => {
|
|
1067
|
-
this.firstAll.next(value);
|
|
1068
|
-
};
|
|
1069
|
-
updateUpdateMainWindow = (value) => {
|
|
1070
|
-
this.updateMainWindow.next(value);
|
|
1071
|
-
};
|
|
1072
|
-
updateFirst_round = (value) => {
|
|
1073
|
-
this.first_round.next(value);
|
|
1074
|
-
};
|
|
1075
|
-
updateLandScaped = (value) => {
|
|
1076
|
-
this.landScaped.next(value);
|
|
1077
|
-
};
|
|
1078
|
-
updateLock_screen = (value) => {
|
|
1079
|
-
this.lock_screen.next(value);
|
|
1080
|
-
};
|
|
1081
|
-
updateScreenId = (value) => {
|
|
1082
|
-
this.screenId.next(value);
|
|
1083
|
-
};
|
|
1084
|
-
updateAllVideoStreams = (value) => {
|
|
1085
|
-
this.allVideoStreams.next(value);
|
|
1086
|
-
};
|
|
1087
|
-
updateNewLimitedStreams = (value) => {
|
|
1088
|
-
this.newLimitedStreams.next(value);
|
|
1089
|
-
};
|
|
1090
|
-
updateNewLimitedStreamsIDs = (value) => {
|
|
1091
|
-
this.newLimitedStreamsIDs.next(value);
|
|
1092
|
-
};
|
|
1093
|
-
updateActiveSounds = (value) => {
|
|
1094
|
-
this.activeSounds.next(value);
|
|
1095
|
-
};
|
|
1096
|
-
updateScreenShareIDStream = (value) => {
|
|
1097
|
-
this.screenShareIDStream.next(value);
|
|
1098
|
-
};
|
|
1099
|
-
updateScreenShareNameStream = (value) => {
|
|
1100
|
-
this.screenShareNameStream.next(value);
|
|
1101
|
-
};
|
|
1102
|
-
updateAdminIDStream = (value) => {
|
|
1103
|
-
this.adminIDStream.next(value);
|
|
1104
|
-
};
|
|
1105
|
-
updateAdminNameStream = (value) => {
|
|
1106
|
-
this.adminNameStream.next(value);
|
|
1107
|
-
};
|
|
1108
|
-
updateYouYouStream = (value) => {
|
|
1109
|
-
this.youYouStream.next(value);
|
|
1110
|
-
};
|
|
1111
|
-
updateYouYouStreamIDs = (value) => {
|
|
1112
|
-
this.youYouStreamIDs.next(value);
|
|
1113
|
-
};
|
|
1114
|
-
updateLocalStream = (value) => {
|
|
1115
|
-
this.localStream.next(value);
|
|
1116
|
-
};
|
|
1117
|
-
updateRecordStarted = (value) => {
|
|
1118
|
-
this.recordStarted.next(value);
|
|
1119
|
-
};
|
|
1120
|
-
updateRecordResumed = (value) => {
|
|
1121
|
-
this.recordResumed.next(value);
|
|
1122
|
-
};
|
|
1123
|
-
updateRecordPaused = (value) => {
|
|
1124
|
-
this.recordPaused.next(value);
|
|
1125
|
-
};
|
|
1126
|
-
updateRecordStopped = (value) => {
|
|
1127
|
-
this.recordStopped.next(value);
|
|
1128
|
-
};
|
|
1129
|
-
updateAdminRestrictSetting = (value) => {
|
|
1130
|
-
this.adminRestrictSetting.next(value);
|
|
1131
|
-
};
|
|
1132
|
-
updateVideoRequestState = (value) => {
|
|
1133
|
-
this.videoRequestState.next(value);
|
|
1134
|
-
};
|
|
1135
|
-
updateVideoRequestTime = (value) => {
|
|
1136
|
-
this.videoRequestTime.next(value);
|
|
1137
|
-
};
|
|
1138
|
-
updateVideoAction = (value) => {
|
|
1139
|
-
this.videoAction.next(value);
|
|
1140
|
-
};
|
|
1141
|
-
updateLocalStreamVideo = (value) => {
|
|
1142
|
-
this.localStreamVideo.next(value);
|
|
1143
|
-
};
|
|
1144
|
-
updateUserDefaultVideoInputDevice = (value) => {
|
|
1145
|
-
this.userDefaultVideoInputDevice.next(value);
|
|
1146
|
-
};
|
|
1147
|
-
updateCurrentFacingMode = (value) => {
|
|
1148
|
-
this.currentFacingMode.next(value);
|
|
1149
|
-
};
|
|
1150
|
-
updatePrevFacingMode = (value) => {
|
|
1151
|
-
this.prevFacingMode.next(value);
|
|
1152
|
-
};
|
|
1153
|
-
updateDefVideoID = (value) => {
|
|
1154
|
-
this.defVideoID.next(value);
|
|
1155
|
-
};
|
|
1156
|
-
updateAllowed = (value) => {
|
|
1157
|
-
this.allowed.next(value);
|
|
1158
|
-
};
|
|
1159
|
-
updateDispActiveNames = (value) => {
|
|
1160
|
-
this.dispActiveNames.next(value);
|
|
1161
|
-
};
|
|
1162
|
-
updateP_dispActiveNames = (value) => {
|
|
1163
|
-
this.p_dispActiveNames.next(value);
|
|
1164
|
-
};
|
|
1165
|
-
updateActiveNames = (value) => {
|
|
1166
|
-
this.activeNames.next(value);
|
|
1167
|
-
};
|
|
1168
|
-
updatePrevActiveNames = (value) => {
|
|
1169
|
-
this.prevActiveNames.next(value);
|
|
1170
|
-
};
|
|
1171
|
-
updateP_activeNames = (value) => {
|
|
1172
|
-
this.p_activeNames.next(value);
|
|
1173
|
-
};
|
|
1174
|
-
updateMembersReceived = (value) => {
|
|
1175
|
-
this.membersReceived.next(value);
|
|
1176
|
-
};
|
|
1177
|
-
updateDeferScreenReceived = (value) => {
|
|
1178
|
-
this.deferScreenReceived.next(value);
|
|
1179
|
-
};
|
|
1180
|
-
updateHostFirstSwitch = (value) => {
|
|
1181
|
-
this.hostFirstSwitch.next(value);
|
|
1182
|
-
};
|
|
1183
|
-
updateMicAction = (value) => {
|
|
1184
|
-
this.micAction.next(value);
|
|
1185
|
-
};
|
|
1186
|
-
updateScreenAction = (value) => {
|
|
1187
|
-
this.screenAction.next(value);
|
|
1188
|
-
};
|
|
1189
|
-
updateChatAction = (value) => {
|
|
1190
|
-
this.chatAction.next(value);
|
|
1191
|
-
};
|
|
1192
|
-
updateAudioRequestState = (value) => {
|
|
1193
|
-
this.audioRequestState.next(value);
|
|
1194
|
-
};
|
|
1195
|
-
updateScreenRequestState = (value) => {
|
|
1196
|
-
this.screenRequestState.next(value);
|
|
1197
|
-
};
|
|
1198
|
-
updateChatRequestState = (value) => {
|
|
1199
|
-
this.chatRequestState.next(value);
|
|
1200
|
-
};
|
|
1201
|
-
updateAudioRequestTime = (value) => {
|
|
1202
|
-
this.audioRequestTime.next(value);
|
|
1203
|
-
};
|
|
1204
|
-
updateScreenRequestTime = (value) => {
|
|
1205
|
-
this.screenRequestTime.next(value);
|
|
1206
|
-
};
|
|
1207
|
-
updateChatRequestTime = (value) => {
|
|
1208
|
-
this.chatRequestTime.next(value);
|
|
1209
|
-
};
|
|
1210
|
-
updateOldSoundIds = (value) => {
|
|
1211
|
-
this.oldSoundIds.next(value);
|
|
1212
|
-
};
|
|
1213
|
-
updateHostLabel = (value) => {
|
|
1214
|
-
this.hostLabel.next(value);
|
|
1215
|
-
};
|
|
1216
|
-
updateMainScreenFilled = (value) => {
|
|
1217
|
-
this.mainScreenFilled.next(value);
|
|
1218
|
-
};
|
|
1219
|
-
updateLocalStreamScreen = (value) => {
|
|
1220
|
-
this.localStreamScreen.next(value);
|
|
1221
|
-
};
|
|
1222
|
-
updateScreenAlreadyOn = (value) => {
|
|
1223
|
-
this.screenAlreadyOn.next(value);
|
|
1224
|
-
};
|
|
1225
|
-
updateChatAlreadyOn = (value) => {
|
|
1226
|
-
this.chatAlreadyOn.next(value);
|
|
1227
|
-
};
|
|
1228
|
-
updateRedirectURL = (value) => {
|
|
1229
|
-
this.redirectURL.next(value);
|
|
1230
|
-
};
|
|
1231
|
-
updateOldAllStreams = (value) => {
|
|
1232
|
-
this.oldAllStreams.next(value);
|
|
1233
|
-
};
|
|
1234
|
-
updateAdminVidID = (value) => {
|
|
1235
|
-
this.adminVidID.next(value);
|
|
1236
|
-
};
|
|
1237
|
-
updateStreamNames = (value) => {
|
|
1238
|
-
this.streamNames.next(value);
|
|
1239
|
-
};
|
|
1240
|
-
updateNon_alVideoStreams = (value) => {
|
|
1241
|
-
this.non_alVideoStreams.next(value);
|
|
1242
|
-
};
|
|
1243
|
-
updateSortAudioLoudness = (value) => {
|
|
1244
|
-
this.sortAudioLoudness.next(value);
|
|
1245
|
-
};
|
|
1246
|
-
updateAudioDecibels = (value) => {
|
|
1247
|
-
this.audioDecibels.next(value);
|
|
1248
|
-
};
|
|
1249
|
-
updateMixed_alVideoStreams = (value) => {
|
|
1250
|
-
this.mixed_alVideoStreams.next(value);
|
|
1251
|
-
};
|
|
1252
|
-
updateNon_alVideoStreams_muted = (value) => {
|
|
1253
|
-
this.non_alVideoStreams_muted.next(value);
|
|
1254
|
-
};
|
|
1255
|
-
updatePaginatedStreams = (value) => {
|
|
1256
|
-
this.paginatedStreams.next(value);
|
|
1257
|
-
};
|
|
1258
|
-
updateLocalStreamAudio = (value) => {
|
|
1259
|
-
this.localStreamAudio.next(value);
|
|
1260
|
-
};
|
|
1261
|
-
updateDefAudioID = (value) => {
|
|
1262
|
-
this.defAudioID.next(value);
|
|
1263
|
-
};
|
|
1264
|
-
updateUserDefaultAudioInputDevice = (value) => {
|
|
1265
|
-
this.userDefaultAudioInputDevice.next(value);
|
|
1266
|
-
};
|
|
1267
|
-
updateUserDefaultAudioOutputDevice = (value) => {
|
|
1268
|
-
this.userDefaultAudioOutputDevice.next(value);
|
|
1269
|
-
};
|
|
1270
|
-
updatePrevAudioInputDevice = (value) => {
|
|
1271
|
-
this.prevAudioInputDevice.next(value);
|
|
1272
|
-
};
|
|
1273
|
-
updatePrevVideoInputDevice = (value) => {
|
|
1274
|
-
this.prevVideoInputDevice.next(value);
|
|
1275
|
-
};
|
|
1276
|
-
updateAudioPaused = (value) => {
|
|
1277
|
-
this.audioPaused.next(value);
|
|
1278
|
-
};
|
|
1279
|
-
updateMainScreenPerson = (value) => {
|
|
1280
|
-
this.mainScreenPerson.next(value);
|
|
1281
|
-
};
|
|
1282
|
-
updateAdminOnMainScreen = (value) => {
|
|
1283
|
-
this.adminOnMainScreen.next(value);
|
|
1284
|
-
};
|
|
1285
|
-
updateScreenStates = (value) => {
|
|
1286
|
-
this.screenStates.next(value);
|
|
1287
|
-
};
|
|
1288
|
-
updatePrevScreenStates = (value) => {
|
|
1289
|
-
this.prevScreenStates.next(value);
|
|
1290
|
-
};
|
|
1291
|
-
updateUpdateDateState = (value) => {
|
|
1292
|
-
this.updateDateState.next(value);
|
|
1293
|
-
};
|
|
1294
|
-
updateLastUpdate = (value) => {
|
|
1295
|
-
this.lastUpdate.next(value);
|
|
1296
|
-
};
|
|
1297
|
-
updateNForReadjustRecord = (value) => {
|
|
1298
|
-
this.nForReadjustRecord.next(value);
|
|
1299
|
-
};
|
|
1300
|
-
updateFixedPageLimit = (value) => {
|
|
1301
|
-
this.fixedPageLimit.next(value);
|
|
1302
|
-
};
|
|
1303
|
-
updateRemoveAltGrid = (value) => {
|
|
1304
|
-
this.removeAltGrid.next(value);
|
|
1305
|
-
};
|
|
1306
|
-
updateNForReadjust = (value) => {
|
|
1307
|
-
this.nForReadjust.next(value);
|
|
1308
|
-
};
|
|
1309
|
-
updateLastReorderTime = (value) => {
|
|
1310
|
-
this.lastReorderTime.next(value);
|
|
1311
|
-
};
|
|
1312
|
-
updateAudStreamNames = (value) => {
|
|
1313
|
-
this.audStreamNames.next(value);
|
|
1314
|
-
};
|
|
1315
|
-
updateCurrentUserPage = (value) => {
|
|
1316
|
-
this.currentUserPage.next(value);
|
|
1317
|
-
};
|
|
1318
|
-
updateMainHeightWidth = (value) => {
|
|
1319
|
-
this.mainHeightWidth.next(value);
|
|
1320
|
-
};
|
|
1321
|
-
updatePrevMainHeightWidth = (value) => {
|
|
1322
|
-
this.prevMainHeightWidth.next(value);
|
|
1323
|
-
};
|
|
1324
|
-
updatePrevDoPaginate = (value) => {
|
|
1325
|
-
this.prevDoPaginate.next(value);
|
|
1326
|
-
};
|
|
1327
|
-
updateDoPaginate = (value) => {
|
|
1328
|
-
this.doPaginate.next(value);
|
|
1329
|
-
};
|
|
1330
|
-
updateShareEnded = (value) => {
|
|
1331
|
-
this.shareEnded.next(value);
|
|
1332
|
-
};
|
|
1333
|
-
updateLStreams = (value) => {
|
|
1334
|
-
this.lStreams.next(value);
|
|
1335
|
-
};
|
|
1336
|
-
updateChatRefStreams = (value) => {
|
|
1337
|
-
this.chatRefStreams.next(value);
|
|
1338
|
-
};
|
|
1339
|
-
updateControlHeight = (value) => {
|
|
1340
|
-
this.controlHeight.next(value);
|
|
1341
|
-
};
|
|
1342
|
-
updateIsWideScreen = (value) => {
|
|
1343
|
-
this.isWideScreen.next(value);
|
|
1344
|
-
};
|
|
1345
|
-
updateIsMediumScreen = (value) => {
|
|
1346
|
-
this.isMediumScreen.next(value);
|
|
1347
|
-
};
|
|
1348
|
-
updateIsSmallScreen = (value) => {
|
|
1349
|
-
this.isSmallScreen.next(value);
|
|
1350
|
-
};
|
|
1351
|
-
updateAddGrid = (value) => {
|
|
1352
|
-
this.addGrid.next(value);
|
|
1353
|
-
};
|
|
1354
|
-
updateAddAltGrid = (value) => {
|
|
1355
|
-
this.addAltGrid.next(value);
|
|
1356
|
-
};
|
|
1357
|
-
updateGridRows = (value) => {
|
|
1358
|
-
this.gridRows.next(value);
|
|
1359
|
-
};
|
|
1360
|
-
updateGridCols = (value) => {
|
|
1361
|
-
this.gridCols.next(value);
|
|
1362
|
-
};
|
|
1363
|
-
updateAltGridRows = (value) => {
|
|
1364
|
-
this.altGridRows.next(value);
|
|
1365
|
-
};
|
|
1366
|
-
updateAltGridCols = (value) => {
|
|
1367
|
-
this.altGridCols.next(value);
|
|
1368
|
-
};
|
|
1369
|
-
updateNumberPages = (value) => {
|
|
1370
|
-
this.numberPages.next(value);
|
|
1371
|
-
};
|
|
1372
|
-
updateCurrentStreams = (value) => {
|
|
1373
|
-
this.currentStreams.next(value);
|
|
1374
|
-
};
|
|
1375
|
-
updateShowMiniView = (value) => {
|
|
1376
|
-
this.showMiniView.next(value);
|
|
1377
|
-
};
|
|
1378
|
-
updateNStream = (value) => {
|
|
1379
|
-
this.nStream.next(value);
|
|
1380
|
-
};
|
|
1381
|
-
updateDefer_receive = (value) => {
|
|
1382
|
-
this.defer_receive.next(value);
|
|
1383
|
-
};
|
|
1384
|
-
updateAllAudioStreams = (value) => {
|
|
1385
|
-
this.allAudioStreams.next(value);
|
|
1386
|
-
};
|
|
1387
|
-
updateRemoteScreenStream = (value) => {
|
|
1388
|
-
this.remoteScreenStream.next(value);
|
|
1389
|
-
};
|
|
1390
|
-
updateScreenProducer = (value) => {
|
|
1391
|
-
this.screenProducer.next(value);
|
|
1392
|
-
};
|
|
1393
|
-
updateGotAllVids = (value) => {
|
|
1394
|
-
this.gotAllVids.next(value);
|
|
1395
|
-
};
|
|
1396
|
-
updatePaginationHeightWidth = (value) => {
|
|
1397
|
-
this.paginationHeightWidth.next(value);
|
|
1398
|
-
};
|
|
1399
|
-
updatePaginationDirection = (value) => {
|
|
1400
|
-
this.paginationDirection.next(value);
|
|
1401
|
-
};
|
|
1402
|
-
updateGridSizes = (value) => {
|
|
1403
|
-
this.gridSizes.next(value);
|
|
1404
|
-
};
|
|
1405
|
-
updateScreenForceFullDisplay = (value) => {
|
|
1406
|
-
this.screenForceFullDisplay.next(value);
|
|
1407
|
-
};
|
|
1408
|
-
updateMainGridStream = (value) => {
|
|
1409
|
-
this.mainGridStream.next(value);
|
|
1410
|
-
};
|
|
1411
|
-
updateOtherGridStreams = (value) => {
|
|
1412
|
-
this.otherGridStreams.next(value);
|
|
1413
|
-
};
|
|
1414
|
-
updateAudioOnlyStreams = (value) => {
|
|
1415
|
-
this.audioOnlyStreams.next(value);
|
|
1416
|
-
};
|
|
1417
|
-
updateVideoInputs = (value) => {
|
|
1418
|
-
this.videoInputs.next(value);
|
|
1419
|
-
};
|
|
1420
|
-
updateAudioInputs = (value) => {
|
|
1421
|
-
this.audioInputs.next(value);
|
|
1422
|
-
};
|
|
1423
|
-
updateMeetingProgressTime = (value) => {
|
|
1424
|
-
this.meetingProgressTime.next(value);
|
|
1425
|
-
};
|
|
1426
|
-
updateMeetingElapsedTime = (value) => {
|
|
1427
|
-
this.meetingElapsedTime.next(value);
|
|
1428
|
-
};
|
|
1429
|
-
updateRef_participants = (value) => {
|
|
1430
|
-
this.ref_participants.next(value);
|
|
1431
|
-
};
|
|
1432
|
-
// Messages
|
|
1433
|
-
messages = new BehaviorSubject([]);
|
|
1434
|
-
startDirectMessage = new BehaviorSubject(false);
|
|
1435
|
-
directMessageDetails = new BehaviorSubject(null);
|
|
1436
|
-
showMessagesBadge = new BehaviorSubject(false);
|
|
1437
|
-
// Event Settings
|
|
1438
|
-
audioSetting = new BehaviorSubject('allow');
|
|
1439
|
-
videoSetting = new BehaviorSubject('allow');
|
|
1440
|
-
screenshareSetting = new BehaviorSubject('allow');
|
|
1441
|
-
chatSetting = new BehaviorSubject('allow');
|
|
1442
|
-
// Display Settings
|
|
1443
|
-
displayOption = new BehaviorSubject('media');
|
|
1444
|
-
autoWave = new BehaviorSubject(true);
|
|
1445
|
-
forceFullDisplay = new BehaviorSubject(true);
|
|
1446
|
-
prevForceFullDisplay = new BehaviorSubject(false);
|
|
1447
|
-
prevMeetingDisplayType = new BehaviorSubject('video');
|
|
1448
|
-
// Waiting Room
|
|
1449
|
-
waitingRoomFilter = new BehaviorSubject('');
|
|
1450
|
-
waitingRoomList = new BehaviorSubject([]);
|
|
1451
|
-
waitingRoomCounter = new BehaviorSubject(0);
|
|
1452
|
-
filteredWaitingRoomList = new BehaviorSubject([]);
|
|
1453
|
-
// Requests
|
|
1454
|
-
requestFilter = new BehaviorSubject('');
|
|
1455
|
-
requestList = new BehaviorSubject([]);
|
|
1456
|
-
requestCounter = new BehaviorSubject(0);
|
|
1457
|
-
filteredRequestList = new BehaviorSubject([]);
|
|
1458
|
-
// Total Requests and Waiting Room
|
|
1459
|
-
totalReqWait = new BehaviorSubject(0);
|
|
1460
|
-
// Alerts
|
|
1461
|
-
alertVisible = new BehaviorSubject(false);
|
|
1462
|
-
alertMessage = new BehaviorSubject('');
|
|
1463
|
-
alertType = new BehaviorSubject('success');
|
|
1464
|
-
alertDuration = new BehaviorSubject(3000);
|
|
1465
|
-
// Progress Timer
|
|
1466
|
-
progressTimerVisible = new BehaviorSubject(true);
|
|
1467
|
-
progressTimerValue = new BehaviorSubject(0);
|
|
1468
|
-
// Menu Modals
|
|
1469
|
-
isMenuModalVisible = new BehaviorSubject(false);
|
|
1470
|
-
isRecordingModalVisible = new BehaviorSubject(false);
|
|
1471
|
-
isSettingsModalVisible = new BehaviorSubject(false);
|
|
1472
|
-
isRequestsModalVisible = new BehaviorSubject(false);
|
|
1473
|
-
isWaitingModalVisible = new BehaviorSubject(false);
|
|
1474
|
-
isCoHostModalVisible = new BehaviorSubject(false);
|
|
1475
|
-
isMediaSettingsModalVisible = new BehaviorSubject(false);
|
|
1476
|
-
isDisplaySettingsModalVisible = new BehaviorSubject(false);
|
|
1477
|
-
// Other Modals
|
|
1478
|
-
isParticipantsModalVisible = new BehaviorSubject(false);
|
|
1479
|
-
isMessagesModalVisible = new BehaviorSubject(false);
|
|
1480
|
-
isConfirmExitModalVisible = new BehaviorSubject(false);
|
|
1481
|
-
isConfirmHereModalVisible = new BehaviorSubject(false);
|
|
1482
|
-
isShareEventModalVisible = new BehaviorSubject(false);
|
|
1483
|
-
isLoadingModalVisible = new BehaviorSubject(false);
|
|
1484
|
-
// Recording Options
|
|
1485
|
-
recordingMediaOptions = new BehaviorSubject('video');
|
|
1486
|
-
recordingAudioOptions = new BehaviorSubject('all');
|
|
1487
|
-
recordingVideoOptions = new BehaviorSubject('all');
|
|
1488
|
-
recordingVideoType = new BehaviorSubject('fullDisplay');
|
|
1489
|
-
recordingVideoOptimized = new BehaviorSubject(false);
|
|
1490
|
-
recordingDisplayType = new BehaviorSubject('video');
|
|
1491
|
-
recordingAddHLS = new BehaviorSubject(true);
|
|
1492
|
-
recordingNameTags = new BehaviorSubject(true);
|
|
1493
|
-
recordingBackgroundColor = new BehaviorSubject('#83c0e9');
|
|
1494
|
-
recordingNameTagsColor = new BehaviorSubject('#ffffff');
|
|
1495
|
-
recordingAddText = new BehaviorSubject(false);
|
|
1496
|
-
recordingCustomText = new BehaviorSubject('Add Text');
|
|
1497
|
-
recordingCustomTextPosition = new BehaviorSubject('top');
|
|
1498
|
-
recordingCustomTextColor = new BehaviorSubject('#ffffff');
|
|
1499
|
-
recordingOrientationVideo = new BehaviorSubject('landscape');
|
|
1500
|
-
clearedToResume = new BehaviorSubject(true);
|
|
1501
|
-
clearedToRecord = new BehaviorSubject(true);
|
|
1502
|
-
recordState = new BehaviorSubject('green');
|
|
1503
|
-
showRecordButtons = new BehaviorSubject(false);
|
|
1504
|
-
recordingProgressTime = new BehaviorSubject('00:00:00');
|
|
1505
|
-
audioSwitching = new BehaviorSubject(false);
|
|
1506
|
-
videoSwitching = new BehaviorSubject(false);
|
|
1507
|
-
// Media States
|
|
1508
|
-
videoAlreadyOn = new BehaviorSubject(false);
|
|
1509
|
-
audioAlreadyOn = new BehaviorSubject(false);
|
|
1510
|
-
componentSizes = new BehaviorSubject({
|
|
1511
|
-
mainHeight: 0,
|
|
1512
|
-
otherHeight: 0,
|
|
1513
|
-
mainWidth: 0,
|
|
1514
|
-
otherWidth: 0,
|
|
1515
|
-
});
|
|
1516
|
-
// Permissions
|
|
1517
|
-
hasCameraPermission = new BehaviorSubject(false);
|
|
1518
|
-
hasAudioPermission = new BehaviorSubject(false);
|
|
1519
|
-
// Transports
|
|
1520
|
-
transportCreated = new BehaviorSubject(false);
|
|
1521
|
-
transportCreatedVideo = new BehaviorSubject(false);
|
|
1522
|
-
transportCreatedAudio = new BehaviorSubject(false);
|
|
1523
|
-
transportCreatedScreen = new BehaviorSubject(false);
|
|
1524
|
-
producerTransport = new BehaviorSubject(null);
|
|
1525
|
-
videoProducer = new BehaviorSubject(null);
|
|
1526
|
-
params = new BehaviorSubject({});
|
|
1527
|
-
videoParams = new BehaviorSubject({});
|
|
1528
|
-
audioParams = new BehaviorSubject({});
|
|
1529
|
-
audioProducer = new BehaviorSubject(null);
|
|
1530
|
-
consumerTransports = new BehaviorSubject([]);
|
|
1531
|
-
consumingTransports = new BehaviorSubject([]);
|
|
1532
|
-
// Polls
|
|
1533
|
-
polls = new BehaviorSubject([]);
|
|
1534
|
-
poll = new BehaviorSubject(null);
|
|
1535
|
-
isPollModalVisible = new BehaviorSubject(false);
|
|
1536
|
-
// Background
|
|
1537
|
-
customImage = new BehaviorSubject('');
|
|
1538
|
-
selectedImage = new BehaviorSubject('');
|
|
1539
|
-
segmentVideo = new BehaviorSubject(null);
|
|
1540
|
-
selfieSegmentation = new BehaviorSubject(null);
|
|
1541
|
-
pauseSegmentation = new BehaviorSubject(false);
|
|
1542
|
-
processedStream = new BehaviorSubject(null);
|
|
1543
|
-
keepBackground = new BehaviorSubject(false);
|
|
1544
|
-
backgroundHasChanged = new BehaviorSubject(false);
|
|
1545
|
-
virtualStream = new BehaviorSubject(null);
|
|
1546
|
-
mainCanvas = new BehaviorSubject(null);
|
|
1547
|
-
prevKeepBackground = new BehaviorSubject(false);
|
|
1548
|
-
appliedBackground = new BehaviorSubject(false);
|
|
1549
|
-
isBackgroundModalVisible = new BehaviorSubject(false);
|
|
1550
|
-
autoClickBackground = new BehaviorSubject(false);
|
|
1551
|
-
// Breakout Rooms
|
|
1552
|
-
breakoutRooms = new BehaviorSubject([]);
|
|
1553
|
-
currentRoomIndex = new BehaviorSubject(0);
|
|
1554
|
-
canStartBreakout = new BehaviorSubject(false);
|
|
1555
|
-
breakOutRoomStarted = new BehaviorSubject(false);
|
|
1556
|
-
breakOutRoomEnded = new BehaviorSubject(false);
|
|
1557
|
-
hostNewRoom = new BehaviorSubject(-1);
|
|
1558
|
-
limitedBreakRoom = new BehaviorSubject([]);
|
|
1559
|
-
mainRoomsLength = new BehaviorSubject(0);
|
|
1560
|
-
memberRoom = new BehaviorSubject(-1);
|
|
1561
|
-
isBreakoutRoomsModalVisible = new BehaviorSubject(false);
|
|
1562
|
-
// Whiteboard
|
|
1563
|
-
whiteboardUsers = new BehaviorSubject([]);
|
|
1564
|
-
currentWhiteboardIndex = new BehaviorSubject(0);
|
|
1565
|
-
canStartWhiteboard = new BehaviorSubject(false);
|
|
1566
|
-
whiteboardStarted = new BehaviorSubject(false);
|
|
1567
|
-
whiteboardEnded = new BehaviorSubject(false);
|
|
1568
|
-
whiteboardLimit = new BehaviorSubject(4);
|
|
1569
|
-
isWhiteboardModalVisible = new BehaviorSubject(false);
|
|
1570
|
-
isConfigureWhiteboardModalVisible = new BehaviorSubject(false);
|
|
1571
|
-
shapes = new BehaviorSubject([]);
|
|
1572
|
-
useImageBackground = new BehaviorSubject(true);
|
|
1573
|
-
redoStack = new BehaviorSubject([]);
|
|
1574
|
-
undoStack = new BehaviorSubject([]);
|
|
1575
|
-
canvasStream = new BehaviorSubject(null);
|
|
1576
|
-
canvasWhiteboard = new BehaviorSubject(null);
|
|
1577
|
-
// Screenboard
|
|
1578
|
-
canvasScreenboard = new BehaviorSubject(null);
|
|
1579
|
-
processedScreenStream = new BehaviorSubject(null);
|
|
1580
|
-
annotateScreenStream = new BehaviorSubject(false);
|
|
1581
|
-
mainScreenCanvas = new BehaviorSubject(null);
|
|
1582
|
-
isScreenboardModalVisible = new BehaviorSubject(false);
|
|
1583
|
-
//state variables for the control buttons
|
|
1584
|
-
micActive = new BehaviorSubject(this.audioAlreadyOn.value ? this.audioAlreadyOn.value : false);
|
|
1585
|
-
videoActive = new BehaviorSubject(this.videoAlreadyOn.value ? this.videoAlreadyOn.value : false);
|
|
1586
|
-
screenShareActive = new BehaviorSubject(false);
|
|
1587
|
-
endCallActive = new BehaviorSubject(false);
|
|
1588
|
-
participantsActive = new BehaviorSubject(false);
|
|
1589
|
-
menuActive = new BehaviorSubject(false);
|
|
1590
|
-
commentsActive = new BehaviorSubject(false);
|
|
1591
|
-
// Update functions
|
|
1592
|
-
updateMessages = (value) => {
|
|
1593
|
-
this.messages.next(value);
|
|
1594
|
-
};
|
|
1595
|
-
updateStartDirectMessage = (value) => {
|
|
1596
|
-
this.startDirectMessage.next(value);
|
|
1597
|
-
};
|
|
1598
|
-
updateDirectMessageDetails = (value) => {
|
|
1599
|
-
this.directMessageDetails.next(value);
|
|
1600
|
-
};
|
|
1601
|
-
updateShowMessagesBadge = (value) => {
|
|
1602
|
-
this.showMessagesBadge.next(value);
|
|
1603
|
-
};
|
|
1604
|
-
updateAudioSetting = (value) => {
|
|
1605
|
-
this.audioSetting.next(value);
|
|
1606
|
-
};
|
|
1607
|
-
updateVideoSetting = (value) => {
|
|
1608
|
-
this.videoSetting.next(value);
|
|
1609
|
-
};
|
|
1610
|
-
updateScreenshareSetting = (value) => {
|
|
1611
|
-
this.screenshareSetting.next(value);
|
|
1612
|
-
};
|
|
1613
|
-
updateChatSetting = (value) => {
|
|
1614
|
-
this.chatSetting.next(value);
|
|
1615
|
-
};
|
|
1616
|
-
updateDisplayOption = (value) => {
|
|
1617
|
-
this.displayOption.next(value);
|
|
1618
|
-
};
|
|
1619
|
-
updateAutoWave = (value) => {
|
|
1620
|
-
this.autoWave.next(value);
|
|
1621
|
-
};
|
|
1622
|
-
updateForceFullDisplay = (value) => {
|
|
1623
|
-
this.forceFullDisplay.next(value);
|
|
1624
|
-
};
|
|
1625
|
-
updatePrevForceFullDisplay = (value) => {
|
|
1626
|
-
this.prevForceFullDisplay.next(value);
|
|
1627
|
-
};
|
|
1628
|
-
updatePrevMeetingDisplayType = (value) => {
|
|
1629
|
-
this.prevMeetingDisplayType.next(value);
|
|
1630
|
-
};
|
|
1631
|
-
updateWaitingRoomCounter = (value) => {
|
|
1632
|
-
this.waitingRoomCounter.next(value);
|
|
1633
|
-
};
|
|
1634
|
-
updateWaitingRoomFilter = (value) => {
|
|
1635
|
-
this.waitingRoomFilter.next(value);
|
|
1636
|
-
};
|
|
1637
|
-
updateWaitingRoomList = (value) => {
|
|
1638
|
-
this.waitingRoomList.next(value);
|
|
1639
|
-
this.filteredWaitingRoomList.next(value);
|
|
1640
|
-
this.waitingRoomCounter.next(value.length);
|
|
1641
|
-
};
|
|
1642
|
-
onWaitingRoomClose = () => {
|
|
1643
|
-
this.updateIsWaitingModalVisible(false);
|
|
1644
|
-
};
|
|
1645
|
-
updateRequestCounter = (value) => {
|
|
1646
|
-
this.requestCounter.next(value);
|
|
1647
|
-
};
|
|
1648
|
-
updateRequestFilter = (value) => {
|
|
1649
|
-
this.requestFilter.next(value);
|
|
1650
|
-
};
|
|
1651
|
-
updateRequestList = (value) => {
|
|
1652
|
-
this.requestList.next(value);
|
|
1653
|
-
this.filteredRequestList.next(value);
|
|
1654
|
-
this.requestCounter.next(value.length);
|
|
1655
|
-
};
|
|
1656
|
-
onRequestClose = () => {
|
|
1657
|
-
this.updateIsRequestsModalVisible(false);
|
|
1658
|
-
};
|
|
1659
|
-
updateTotalReqWait = (value) => {
|
|
1660
|
-
this.totalReqWait.next(value);
|
|
1661
|
-
};
|
|
1662
|
-
updateAlertVisible = (value) => {
|
|
1663
|
-
this.alertVisible.next(value);
|
|
1664
|
-
};
|
|
1665
|
-
updateAlertMessage = (value) => {
|
|
1666
|
-
this.alertMessage.next(value);
|
|
1667
|
-
};
|
|
1668
|
-
updateAlertType = (value) => {
|
|
1669
|
-
this.alertType.next(value);
|
|
1670
|
-
};
|
|
1671
|
-
updateAlertDuration = (value) => {
|
|
1672
|
-
this.alertDuration.next(value);
|
|
1673
|
-
};
|
|
1674
|
-
updateProgressTimerVisible = (value) => {
|
|
1675
|
-
this.progressTimerVisible.next(value);
|
|
1676
|
-
};
|
|
1677
|
-
updateProgressTimerValue = (value) => {
|
|
1678
|
-
this.progressTimerValue.next(value);
|
|
1679
|
-
};
|
|
1680
|
-
updateIsMenuModalVisible = (value) => {
|
|
1681
|
-
this.isMenuModalVisible.next(value);
|
|
1682
|
-
};
|
|
1683
|
-
updateIsRecordingModalVisible = (value) => {
|
|
1684
|
-
this.isRecordingModalVisible.next(value);
|
|
1685
|
-
if (value) {
|
|
1686
|
-
this.updateConfirmedToRecord(false);
|
|
1687
|
-
}
|
|
1688
|
-
else {
|
|
1689
|
-
if (this.clearedToRecord.getValue() &&
|
|
1690
|
-
this.clearedToResume.getValue() &&
|
|
1691
|
-
this.recordStarted.getValue()) {
|
|
1692
|
-
this.updateShowRecordButtons(true);
|
|
1693
|
-
}
|
|
1694
|
-
}
|
|
1695
|
-
};
|
|
1696
|
-
updateIsSettingsModalVisible = (value) => {
|
|
1697
|
-
this.isSettingsModalVisible.next(value);
|
|
1698
|
-
};
|
|
1699
|
-
updateIsRequestsModalVisible = (value) => {
|
|
1700
|
-
this.isRequestsModalVisible.next(value);
|
|
1701
|
-
};
|
|
1702
|
-
updateIsWaitingModalVisible = (value) => {
|
|
1703
|
-
this.isWaitingModalVisible.next(value);
|
|
1704
|
-
};
|
|
1705
|
-
updateIsCoHostModalVisible = (value) => {
|
|
1706
|
-
this.isCoHostModalVisible.next(value);
|
|
1707
|
-
};
|
|
1708
|
-
updateIsMediaSettingsModalVisible = (value) => {
|
|
1709
|
-
this.isMediaSettingsModalVisible.next(value);
|
|
1710
|
-
};
|
|
1711
|
-
updateIsDisplaySettingsModalVisible = (value) => {
|
|
1712
|
-
this.isDisplaySettingsModalVisible.next(value);
|
|
1713
|
-
};
|
|
1714
|
-
updateIsParticipantsModalVisible = (value) => {
|
|
1715
|
-
this.isParticipantsModalVisible.next(value);
|
|
1716
|
-
};
|
|
1717
|
-
updateIsMessagesModalVisible = (value) => {
|
|
1718
|
-
this.isMessagesModalVisible.next(value);
|
|
1719
|
-
if (!value) {
|
|
1720
|
-
this.updateShowMessagesBadge(false);
|
|
1721
|
-
}
|
|
1722
|
-
};
|
|
1723
|
-
updateIsConfirmExitModalVisible = (value) => {
|
|
1724
|
-
this.isConfirmExitModalVisible.next(value);
|
|
1725
|
-
};
|
|
1726
|
-
updateIsConfirmHereModalVisible = (value) => {
|
|
1727
|
-
this.isConfirmHereModalVisible.next(value);
|
|
1728
|
-
};
|
|
1729
|
-
updateIsLoadingModalVisible = (value) => {
|
|
1730
|
-
this.isLoadingModalVisible.next(value);
|
|
1731
|
-
};
|
|
1732
|
-
updateIsShareEventModalVisible = (value) => {
|
|
1733
|
-
this.isShareEventModalVisible.next(value);
|
|
1734
|
-
};
|
|
1735
|
-
updateRecordingMediaOptions = (value) => {
|
|
1736
|
-
this.recordingMediaOptions.next(value);
|
|
1737
|
-
this.clearedToRecord.next(false);
|
|
1738
|
-
};
|
|
1739
|
-
updateRecordingAudioOptions = (value) => {
|
|
1740
|
-
this.recordingAudioOptions.next(value);
|
|
1741
|
-
this.clearedToRecord.next(false);
|
|
1742
|
-
};
|
|
1743
|
-
updateRecordingVideoOptions = (value) => {
|
|
1744
|
-
this.recordingVideoOptions.next(value);
|
|
1745
|
-
this.clearedToRecord.next(false);
|
|
1746
|
-
};
|
|
1747
|
-
updateRecordingVideoType = (value) => {
|
|
1748
|
-
this.recordingVideoType.next(value);
|
|
1749
|
-
this.clearedToRecord.next(false);
|
|
1750
|
-
};
|
|
1751
|
-
updateRecordingVideoOptimized = (value) => {
|
|
1752
|
-
this.recordingVideoOptimized.next(value);
|
|
1753
|
-
this.clearedToRecord.next(false);
|
|
1754
|
-
};
|
|
1755
|
-
updateRecordingDisplayType = (value) => {
|
|
1756
|
-
this.recordingDisplayType.next(value);
|
|
1757
|
-
this.clearedToRecord.next(false);
|
|
1758
|
-
};
|
|
1759
|
-
updateRecordingAddHLS = (value) => {
|
|
1760
|
-
this.recordingAddHLS.next(value);
|
|
1761
|
-
this.clearedToRecord.next(false);
|
|
1762
|
-
};
|
|
1763
|
-
updateRecordingAddText = (value) => {
|
|
1764
|
-
this.recordingAddText.next(value);
|
|
1765
|
-
this.clearedToRecord.next(false);
|
|
1766
|
-
};
|
|
1767
|
-
updateRecordingCustomText = (value) => {
|
|
1768
|
-
this.recordingCustomText.next(value);
|
|
1769
|
-
this.clearedToRecord.next(false);
|
|
1770
|
-
};
|
|
1771
|
-
updateRecordingCustomTextPosition = (value) => {
|
|
1772
|
-
this.recordingCustomTextPosition.next(value);
|
|
1773
|
-
this.clearedToRecord.next(false);
|
|
1774
|
-
};
|
|
1775
|
-
updateRecordingCustomTextColor = (value) => {
|
|
1776
|
-
this.recordingCustomTextColor.next(value);
|
|
1777
|
-
this.clearedToRecord.next(false);
|
|
1778
|
-
};
|
|
1779
|
-
updateRecordingNameTags = (value) => {
|
|
1780
|
-
this.recordingNameTags.next(value);
|
|
1781
|
-
this.clearedToRecord.next(false);
|
|
1782
|
-
};
|
|
1783
|
-
updateRecordingBackgroundColor = (value) => {
|
|
1784
|
-
this.recordingBackgroundColor.next(value);
|
|
1785
|
-
this.clearedToRecord.next(false);
|
|
1786
|
-
};
|
|
1787
|
-
updateRecordingNameTagsColor = (value) => {
|
|
1788
|
-
this.recordingNameTagsColor.next(value);
|
|
1789
|
-
this.clearedToRecord.next(false);
|
|
1790
|
-
};
|
|
1791
|
-
updateRecordingOrientationVideo = (value) => {
|
|
1792
|
-
this.recordingOrientationVideo.next(value);
|
|
1793
|
-
this.clearedToRecord.next(false);
|
|
1794
|
-
};
|
|
1795
|
-
updateClearedToResume = (value) => {
|
|
1796
|
-
this.clearedToResume.next(value);
|
|
1797
|
-
};
|
|
1798
|
-
updateClearedToRecord = (value) => {
|
|
1799
|
-
this.clearedToRecord.next(value);
|
|
1800
|
-
};
|
|
1801
|
-
updateRecordState = (value) => {
|
|
1802
|
-
if (this.recordStarted.value && !this.recordStopped.value) {
|
|
1803
|
-
if (!this.recordPaused.value) {
|
|
1804
|
-
this.recordState.next('red');
|
|
1805
|
-
}
|
|
1806
|
-
else {
|
|
1807
|
-
this.recordState.next('yellow');
|
|
1808
|
-
}
|
|
1809
|
-
}
|
|
1810
|
-
else {
|
|
1811
|
-
this.recordState.next(value);
|
|
1812
|
-
}
|
|
1813
|
-
this.recordState.next(value);
|
|
1814
|
-
};
|
|
1815
|
-
updateShowRecordButtons = (value) => {
|
|
1816
|
-
this.showRecordButtons.next(value);
|
|
1817
|
-
};
|
|
1818
|
-
updateRecordingProgressTime = (value) => {
|
|
1819
|
-
this.recordingProgressTime.next(value);
|
|
1820
|
-
};
|
|
1821
|
-
updateAudioSwitching = (value) => {
|
|
1822
|
-
this.audioSwitching.next(value);
|
|
1823
|
-
};
|
|
1824
|
-
updateVideoSwitching = (value) => {
|
|
1825
|
-
this.videoSwitching.next(value);
|
|
1826
|
-
};
|
|
1827
|
-
updateVideoAlreadyOn = (value) => {
|
|
1828
|
-
this.videoAlreadyOn.next(value);
|
|
1829
|
-
this.videoActive.next(value);
|
|
1830
|
-
};
|
|
1831
|
-
updateAudioAlreadyOn = (value) => {
|
|
1832
|
-
this.audioAlreadyOn.next(value);
|
|
1833
|
-
this.micActive.next(value);
|
|
1834
|
-
};
|
|
1835
|
-
updateComponentSizes = (sizes) => {
|
|
1836
|
-
this.componentSizes.next(sizes);
|
|
1837
|
-
};
|
|
1838
|
-
updateHasCameraPermission = (value) => {
|
|
1839
|
-
this.hasCameraPermission.next(value);
|
|
1840
|
-
};
|
|
1841
|
-
updateHasAudioPermission = (value) => {
|
|
1842
|
-
this.hasAudioPermission.next(value);
|
|
1843
|
-
};
|
|
1844
|
-
requestPermissionCamera() {
|
|
1845
|
-
// Implement the request permission logic here
|
|
1846
|
-
return Promise.resolve('granted');
|
|
1847
|
-
}
|
|
1848
|
-
requestPermissionAudio() {
|
|
1849
|
-
// Implement the request permission logic here
|
|
1850
|
-
return Promise.resolve('granted');
|
|
1851
|
-
}
|
|
1852
|
-
updateTransportCreated = (value) => {
|
|
1853
|
-
this.transportCreated.next(value);
|
|
1854
|
-
};
|
|
1855
|
-
updateTransportCreatedVideo = (value) => {
|
|
1856
|
-
this.transportCreatedVideo.next(value);
|
|
1857
|
-
};
|
|
1858
|
-
updateTransportCreatedAudio = (value) => {
|
|
1859
|
-
this.transportCreatedAudio.next(value);
|
|
1860
|
-
};
|
|
1861
|
-
updateTransportCreatedScreen = (value) => {
|
|
1862
|
-
this.transportCreatedScreen.next(value);
|
|
1863
|
-
};
|
|
1864
|
-
updateProducerTransport = (value) => {
|
|
1865
|
-
this.producerTransport.next(value);
|
|
1866
|
-
};
|
|
1867
|
-
updateVideoProducer = (value) => {
|
|
1868
|
-
this.videoProducer.next(value);
|
|
1869
|
-
};
|
|
1870
|
-
updateParams = (value) => {
|
|
1871
|
-
this.params.next(value);
|
|
1872
|
-
};
|
|
1873
|
-
updateVideoParams = (value) => {
|
|
1874
|
-
this.videoParams.next(value);
|
|
1875
|
-
};
|
|
1876
|
-
updateAudioParams = (value) => {
|
|
1877
|
-
this.audioParams.next(value);
|
|
1878
|
-
};
|
|
1879
|
-
updateAudioProducer = (value) => {
|
|
1880
|
-
this.audioProducer.next(value);
|
|
1881
|
-
};
|
|
1882
|
-
updateConsumerTransports = (value) => {
|
|
1883
|
-
this.consumerTransports.next(value);
|
|
1884
|
-
};
|
|
1885
|
-
updateConsumingTransports = (value) => {
|
|
1886
|
-
this.consumingTransports.next(value);
|
|
1887
|
-
};
|
|
1888
|
-
updatePolls = (value) => {
|
|
1889
|
-
this.polls.next(value);
|
|
1890
|
-
};
|
|
1891
|
-
updatePoll = (value) => {
|
|
1892
|
-
this.poll.next(value);
|
|
1893
|
-
};
|
|
1894
|
-
updateIsPollModalVisible = (value) => {
|
|
1895
|
-
this.isPollModalVisible.next(value);
|
|
1896
|
-
};
|
|
1897
|
-
updateCustomImage = (value) => {
|
|
1898
|
-
this.customImage.next(value);
|
|
1899
|
-
};
|
|
1900
|
-
updateSelectedImage = (value) => {
|
|
1901
|
-
this.selectedImage.next(value);
|
|
1902
|
-
};
|
|
1903
|
-
updateSegmentVideo = (value) => {
|
|
1904
|
-
this.segmentVideo.next(value);
|
|
1905
|
-
};
|
|
1906
|
-
updateSelfieSegmentation = (value) => {
|
|
1907
|
-
this.selfieSegmentation.next(value);
|
|
1908
|
-
};
|
|
1909
|
-
updatePauseSegmentation = (value) => {
|
|
1910
|
-
this.pauseSegmentation.next(value);
|
|
1911
|
-
};
|
|
1912
|
-
updateProcessedStream = (value) => {
|
|
1913
|
-
this.processedStream.next(value);
|
|
1914
|
-
};
|
|
1915
|
-
updateKeepBackground = (value) => {
|
|
1916
|
-
this.keepBackground.next(value);
|
|
1917
|
-
};
|
|
1918
|
-
updateBackgroundHasChanged = (value) => {
|
|
1919
|
-
this.backgroundHasChanged.next(value);
|
|
1920
|
-
};
|
|
1921
|
-
updateVirtualStream = (value) => {
|
|
1922
|
-
this.virtualStream.next(value);
|
|
1923
|
-
};
|
|
1924
|
-
updateMainCanvas = (value) => {
|
|
1925
|
-
this.mainCanvas.next(value);
|
|
1926
|
-
};
|
|
1927
|
-
updatePrevKeepBackground = (value) => {
|
|
1928
|
-
this.prevKeepBackground.next(value);
|
|
1929
|
-
};
|
|
1930
|
-
updateAppliedBackground = (value) => {
|
|
1931
|
-
this.appliedBackground.next(value);
|
|
1932
|
-
};
|
|
1933
|
-
updateIsBackgroundModalVisible = (value) => {
|
|
1934
|
-
this.isBackgroundModalVisible.next(value);
|
|
1935
|
-
};
|
|
1936
|
-
updateAutoClickBackground = (value) => {
|
|
1937
|
-
this.autoClickBackground.next(value);
|
|
1938
|
-
};
|
|
1939
|
-
updateBreakoutRooms = (value) => {
|
|
1940
|
-
this.breakoutRooms.next(value);
|
|
1941
|
-
};
|
|
1942
|
-
updateCurrentRoomIndex = (value) => {
|
|
1943
|
-
this.currentRoomIndex.next(value);
|
|
1944
|
-
};
|
|
1945
|
-
updateCanStartBreakout = (value) => {
|
|
1946
|
-
this.canStartBreakout.next(value);
|
|
1947
|
-
};
|
|
1948
|
-
updateBreakOutRoomStarted = (value) => {
|
|
1949
|
-
this.breakOutRoomStarted.next(value);
|
|
1950
|
-
};
|
|
1951
|
-
updateBreakOutRoomEnded = (value) => {
|
|
1952
|
-
this.breakOutRoomEnded.next(value);
|
|
1953
|
-
};
|
|
1954
|
-
updateHostNewRoom = (value) => {
|
|
1955
|
-
this.hostNewRoom.next(value);
|
|
1956
|
-
};
|
|
1957
|
-
updateLimitedBreakRoom = (value) => {
|
|
1958
|
-
this.limitedBreakRoom.next(value);
|
|
1959
|
-
};
|
|
1960
|
-
updateMainRoomsLength = (value) => {
|
|
1961
|
-
this.mainRoomsLength.next(value);
|
|
1962
|
-
};
|
|
1963
|
-
updateMemberRoom = (value) => {
|
|
1964
|
-
this.memberRoom.next(value);
|
|
1965
|
-
};
|
|
1966
|
-
updateIsBreakoutRoomsModalVisible = (value) => {
|
|
1967
|
-
this.isBreakoutRoomsModalVisible.next(value);
|
|
1968
|
-
};
|
|
1969
|
-
updateWhiteboardUsers = (value) => {
|
|
1970
|
-
this.whiteboardUsers.next(value);
|
|
1971
|
-
};
|
|
1972
|
-
updateCurrentWhiteboardIndex = (value) => {
|
|
1973
|
-
this.currentWhiteboardIndex.next(value);
|
|
1974
|
-
};
|
|
1975
|
-
updateCanStartWhiteboard = (value) => {
|
|
1976
|
-
this.canStartWhiteboard.next(value);
|
|
1977
|
-
};
|
|
1978
|
-
updateWhiteboardStarted = (value) => {
|
|
1979
|
-
this.whiteboardStarted.next(value);
|
|
1980
|
-
};
|
|
1981
|
-
updateWhiteboardEnded = (value) => {
|
|
1982
|
-
this.whiteboardEnded.next(value);
|
|
1983
|
-
};
|
|
1984
|
-
updateWhiteboardLimit = (value) => {
|
|
1985
|
-
this.whiteboardLimit.next(value);
|
|
1986
|
-
};
|
|
1987
|
-
updateIsWhiteboardModalVisible = (value) => {
|
|
1988
|
-
this.isWhiteboardModalVisible.next(value);
|
|
1989
|
-
};
|
|
1990
|
-
updateIsConfigureWhiteboardModalVisible = (value) => {
|
|
1991
|
-
this.isConfigureWhiteboardModalVisible.next(value);
|
|
1992
|
-
};
|
|
1993
|
-
updateShapes = (value) => {
|
|
1994
|
-
this.shapes.next(value);
|
|
1995
|
-
};
|
|
1996
|
-
updateUseImageBackground = (value) => {
|
|
1997
|
-
this.useImageBackground.next(value);
|
|
1998
|
-
};
|
|
1999
|
-
updateRedoStack = (value) => {
|
|
2000
|
-
this.redoStack.next(value);
|
|
2001
|
-
};
|
|
2002
|
-
updateUndoStack = (value) => {
|
|
2003
|
-
this.undoStack.next(value);
|
|
2004
|
-
};
|
|
2005
|
-
updateCanvasStream = (value) => {
|
|
2006
|
-
this.canvasStream.next(value);
|
|
2007
|
-
};
|
|
2008
|
-
updateCanvasWhiteboard = (value) => {
|
|
2009
|
-
this.canvasWhiteboard.next(value);
|
|
2010
|
-
};
|
|
2011
|
-
updateCanvasScreenboard = (value) => {
|
|
2012
|
-
this.canvasScreenboard.next(value);
|
|
2013
|
-
};
|
|
2014
|
-
updateProcessedScreenStream = (value) => {
|
|
2015
|
-
this.processedScreenStream.next(value);
|
|
2016
|
-
};
|
|
2017
|
-
updateAnnotateScreenStream = (value) => {
|
|
2018
|
-
this.annotateScreenStream.next(value);
|
|
2019
|
-
};
|
|
2020
|
-
updateMainScreenCanvas = (value) => {
|
|
2021
|
-
this.mainScreenCanvas.next(value);
|
|
2022
|
-
};
|
|
2023
|
-
updateIsScreenboardModalVisible = (value) => {
|
|
2024
|
-
this.isScreenboardModalVisible.next(value);
|
|
2025
|
-
};
|
|
2026
|
-
checkOrientation = () => {
|
|
2027
|
-
const isPortrait = window.matchMedia('(orientation: portrait)').matches;
|
|
2028
|
-
return isPortrait ? 'portrait' : 'landscape';
|
|
2029
|
-
};
|
|
2030
|
-
showAlert = ({ message, type, duration = 3000, }) => {
|
|
2031
|
-
this.updateAlertMessage(message);
|
|
2032
|
-
this.updateAlertType(type);
|
|
2033
|
-
this.updateAlertDuration(duration);
|
|
2034
|
-
this.updateAlertVisible(true);
|
|
2035
|
-
};
|
|
2036
|
-
getAllParams() {
|
|
2037
|
-
return {
|
|
2038
|
-
localUIMode: this.localUIMode.value, // Local UI mode
|
|
2039
|
-
// Room Details
|
|
2040
|
-
roomName: this.roomName.value,
|
|
2041
|
-
member: this.member.value,
|
|
2042
|
-
adminPasscode: this.adminPasscode.value,
|
|
2043
|
-
youAreCoHost: this.youAreCoHost.value,
|
|
2044
|
-
youAreHost: this.youAreHost.value,
|
|
2045
|
-
islevel: this.islevel.value,
|
|
2046
|
-
confirmedToRecord: this.confirmedToRecord.value,
|
|
2047
|
-
meetingDisplayType: this.meetingDisplayType.value,
|
|
2048
|
-
meetingVideoOptimized: this.meetingVideoOptimized.value,
|
|
2049
|
-
eventType: this.eventType.value,
|
|
2050
|
-
participants: this.participants.value,
|
|
2051
|
-
filteredParticipants: this.filteredParticipants.value,
|
|
2052
|
-
participantsCounter: this.participantsCounter.value,
|
|
2053
|
-
participantsFilter: this.participantsFilter.value,
|
|
2054
|
-
// More room details - media
|
|
2055
|
-
consume_sockets: this.consume_sockets.value,
|
|
2056
|
-
rtpCapabilities: this.rtpCapabilities.value,
|
|
2057
|
-
roomRecvIPs: this.roomRecvIPs.value,
|
|
2058
|
-
meetingRoomParams: this.meetingRoomParams.value,
|
|
2059
|
-
itemPageLimit: this.itemPageLimit.value,
|
|
2060
|
-
audioOnlyRoom: this.audioOnlyRoom.value,
|
|
2061
|
-
addForBasic: this.addForBasic.value,
|
|
2062
|
-
screenPageLimit: this.screenPageLimit.value,
|
|
2063
|
-
shareScreenStarted: this.shareScreenStarted.value,
|
|
2064
|
-
shared: this.shared.value,
|
|
2065
|
-
targetOrientation: this.targetOrientation.value,
|
|
2066
|
-
targetResolution: this.targetResolution.value,
|
|
2067
|
-
targetResolutionHost: this.targetResolutionHost.value,
|
|
2068
|
-
vidCons: this.vidCons.value,
|
|
2069
|
-
frameRate: this.frameRate.value,
|
|
2070
|
-
hParams: this.hParams.value,
|
|
2071
|
-
vParams: this.vParams.value,
|
|
2072
|
-
screenParams: this.screenParams.value,
|
|
2073
|
-
aParams: this.aParams.value,
|
|
2074
|
-
// More room details - recording
|
|
2075
|
-
recordingAudioPausesLimit: this.recordingAudioPausesLimit.value,
|
|
2076
|
-
recordingAudioPausesCount: this.recordingAudioPausesCount.value,
|
|
2077
|
-
recordingAudioSupport: this.recordingAudioSupport.value,
|
|
2078
|
-
recordingAudioPeopleLimit: this.recordingAudioPeopleLimit.value,
|
|
2079
|
-
recordingAudioParticipantsTimeLimit: this.recordingAudioParticipantsTimeLimit.value,
|
|
2080
|
-
recordingVideoPausesCount: this.recordingVideoPausesCount.value,
|
|
2081
|
-
recordingVideoPausesLimit: this.recordingVideoPausesLimit.value,
|
|
2082
|
-
recordingVideoSupport: this.recordingVideoSupport.value,
|
|
2083
|
-
recordingVideoPeopleLimit: this.recordingVideoPeopleLimit.value,
|
|
2084
|
-
recordingVideoParticipantsTimeLimit: this.recordingVideoParticipantsTimeLimit.value,
|
|
2085
|
-
recordingAllParticipantsSupport: this.recordingAllParticipantsSupport.value,
|
|
2086
|
-
recordingVideoParticipantsSupport: this.recordingVideoParticipantsSupport.value,
|
|
2087
|
-
recordingAllParticipantsFullRoomSupport: this.recordingAllParticipantsFullRoomSupport.value,
|
|
2088
|
-
recordingVideoParticipantsFullRoomSupport: this.recordingVideoParticipantsFullRoomSupport.value,
|
|
2089
|
-
recordingPreferredOrientation: this.recordingPreferredOrientation.value,
|
|
2090
|
-
recordingSupportForOtherOrientation: this.recordingSupportForOtherOrientation.value,
|
|
2091
|
-
recordingMultiFormatsSupport: this.recordingMultiFormatsSupport.value,
|
|
2092
|
-
userRecordingParams: this.userRecordingParams.value,
|
|
2093
|
-
canRecord: this.canRecord.value,
|
|
2094
|
-
startReport: this.startReport.value,
|
|
2095
|
-
endReport: this.endReport.value,
|
|
2096
|
-
recordStartTime: this.recordStartTime.value,
|
|
2097
|
-
recordElapsedTime: this.recordElapsedTime.value,
|
|
2098
|
-
isTimerRunning: this.isTimerRunning.value,
|
|
2099
|
-
canPauseResume: this.canPauseResume.value,
|
|
2100
|
-
recordChangeSeconds: this.recordChangeSeconds.value,
|
|
2101
|
-
pauseLimit: this.pauseLimit.value,
|
|
2102
|
-
pauseRecordCount: this.pauseRecordCount.value,
|
|
2103
|
-
canLaunchRecord: this.canLaunchRecord.value,
|
|
2104
|
-
stopLaunchRecord: this.stopLaunchRecord.value,
|
|
2105
|
-
participantsAll: this.participantsAll.value,
|
|
2106
|
-
firstAll: this.firstAll.value,
|
|
2107
|
-
updateMainWindow: this.updateMainWindow.value,
|
|
2108
|
-
first_round: this.first_round.value,
|
|
2109
|
-
landScaped: this.landScaped.value,
|
|
2110
|
-
lock_screen: this.lock_screen.value,
|
|
2111
|
-
screenId: this.screenId.value,
|
|
2112
|
-
allVideoStreams: this.allVideoStreams.value,
|
|
2113
|
-
newLimitedStreams: this.newLimitedStreams.value,
|
|
2114
|
-
newLimitedStreamsIDs: this.newLimitedStreamsIDs.value,
|
|
2115
|
-
activeSounds: this.activeSounds.value,
|
|
2116
|
-
screenShareIDStream: this.screenShareIDStream.value,
|
|
2117
|
-
screenShareNameStream: this.screenShareNameStream.value,
|
|
2118
|
-
adminIDStream: this.adminIDStream.value,
|
|
2119
|
-
adminNameStream: this.adminNameStream.value,
|
|
2120
|
-
youYouStream: this.youYouStream.value,
|
|
2121
|
-
youYouStreamIDs: this.youYouStreamIDs.value,
|
|
2122
|
-
localStream: this.localStream.value,
|
|
2123
|
-
recordStarted: this.recordStarted.value,
|
|
2124
|
-
recordResumed: this.recordResumed.value,
|
|
2125
|
-
recordPaused: this.recordPaused.value,
|
|
2126
|
-
recordStopped: this.recordStopped.value,
|
|
2127
|
-
adminRestrictSetting: this.adminRestrictSetting.value,
|
|
2128
|
-
videoRequestState: this.videoRequestState.value,
|
|
2129
|
-
videoRequestTime: this.videoRequestTime.value,
|
|
2130
|
-
videoAction: this.videoAction.value,
|
|
2131
|
-
localStreamVideo: this.localStreamVideo.value,
|
|
2132
|
-
userDefaultVideoInputDevice: this.userDefaultVideoInputDevice.value,
|
|
2133
|
-
currentFacingMode: this.currentFacingMode.value,
|
|
2134
|
-
prevFacingMode: this.prevFacingMode.value,
|
|
2135
|
-
defVideoID: this.defVideoID.value,
|
|
2136
|
-
allowed: this.allowed.value,
|
|
2137
|
-
dispActiveNames: this.dispActiveNames.value,
|
|
2138
|
-
p_dispActiveNames: this.p_dispActiveNames.value,
|
|
2139
|
-
activeNames: this.activeNames.value,
|
|
2140
|
-
prevActiveNames: this.prevActiveNames.value,
|
|
2141
|
-
p_activeNames: this.p_activeNames.value,
|
|
2142
|
-
membersReceived: this.membersReceived.value,
|
|
2143
|
-
deferScreenReceived: this.deferScreenReceived.value,
|
|
2144
|
-
hostFirstSwitch: this.hostFirstSwitch.value,
|
|
2145
|
-
micAction: this.micAction.value,
|
|
2146
|
-
screenAction: this.screenAction.value,
|
|
2147
|
-
chatAction: this.chatAction.value,
|
|
2148
|
-
audioRequestState: this.audioRequestState.value,
|
|
2149
|
-
screenRequestState: this.screenRequestState.value,
|
|
2150
|
-
chatRequestState: this.chatRequestState.value,
|
|
2151
|
-
audioRequestTime: this.audioRequestTime.value,
|
|
2152
|
-
screenRequestTime: this.screenRequestTime.value,
|
|
2153
|
-
chatRequestTime: this.chatRequestTime.value,
|
|
2154
|
-
updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,
|
|
2155
|
-
oldSoundIds: this.oldSoundIds.value,
|
|
2156
|
-
hostLabel: this.hostLabel.value,
|
|
2157
|
-
mainScreenFilled: this.mainScreenFilled.value,
|
|
2158
|
-
localStreamScreen: this.localStreamScreen.value,
|
|
2159
|
-
screenAlreadyOn: this.screenAlreadyOn.value,
|
|
2160
|
-
chatAlreadyOn: this.chatAlreadyOn.value,
|
|
2161
|
-
redirectURL: this.redirectURL.value,
|
|
2162
|
-
oldAllStreams: this.oldAllStreams.value,
|
|
2163
|
-
adminVidID: this.adminVidID.value,
|
|
2164
|
-
streamNames: this.streamNames.value,
|
|
2165
|
-
non_alVideoStreams: this.non_alVideoStreams.value,
|
|
2166
|
-
sortAudioLoudness: this.sortAudioLoudness.value,
|
|
2167
|
-
audioDecibels: this.audioDecibels.value,
|
|
2168
|
-
mixed_alVideoStreams: this.mixed_alVideoStreams.value,
|
|
2169
|
-
non_alVideoStreams_muted: this.non_alVideoStreams_muted.value,
|
|
2170
|
-
paginatedStreams: this.paginatedStreams.value,
|
|
2171
|
-
localStreamAudio: this.localStreamAudio.value,
|
|
2172
|
-
defAudioID: this.defAudioID.value,
|
|
2173
|
-
userDefaultAudioInputDevice: this.userDefaultAudioInputDevice.value,
|
|
2174
|
-
userDefaultAudioOutputDevice: this.userDefaultAudioOutputDevice.value,
|
|
2175
|
-
prevAudioInputDevice: this.prevAudioInputDevice.value,
|
|
2176
|
-
prevVideoInputDevice: this.prevVideoInputDevice.value,
|
|
2177
|
-
audioPaused: this.audioPaused.value,
|
|
2178
|
-
mainScreenPerson: this.mainScreenPerson.value,
|
|
2179
|
-
adminOnMainScreen: this.adminOnMainScreen.value,
|
|
2180
|
-
screenStates: this.screenStates.value,
|
|
2181
|
-
prevScreenStates: this.prevScreenStates.value,
|
|
2182
|
-
updateDateState: this.updateDateState.value,
|
|
2183
|
-
lastUpdate: this.lastUpdate.value,
|
|
2184
|
-
nForReadjustRecord: this.nForReadjustRecord.value,
|
|
2185
|
-
fixedPageLimit: this.fixedPageLimit.value,
|
|
2186
|
-
removeAltGrid: this.removeAltGrid.value,
|
|
2187
|
-
nForReadjust: this.nForReadjust.value,
|
|
2188
|
-
lastReorderTime: this.lastReorderTime.value,
|
|
2189
|
-
reorderInterval: this.reorderInterval.value,
|
|
2190
|
-
fastReorderInterval: this.fastReorderInterval.value,
|
|
2191
|
-
audStreamNames: this.audStreamNames.value,
|
|
2192
|
-
currentUserPage: this.currentUserPage.value,
|
|
2193
|
-
mainHeightWidth: this.mainHeightWidth.value,
|
|
2194
|
-
prevMainHeightWidth: this.prevMainHeightWidth.value,
|
|
2195
|
-
prevDoPaginate: this.prevDoPaginate.value,
|
|
2196
|
-
doPaginate: this.doPaginate.value,
|
|
2197
|
-
shareEnded: this.shareEnded.value,
|
|
2198
|
-
lStreams: this.lStreams.value,
|
|
2199
|
-
chatRefStreams: this.chatRefStreams.value,
|
|
2200
|
-
controlHeight: this.controlHeight.value,
|
|
2201
|
-
isWideScreen: this.isWideScreen.value,
|
|
2202
|
-
isMediumScreen: this.isMediumScreen.value,
|
|
2203
|
-
isSmallScreen: this.isSmallScreen.value,
|
|
2204
|
-
addGrid: this.addGrid.value,
|
|
2205
|
-
addAltGrid: this.addAltGrid.value,
|
|
2206
|
-
gridRows: this.gridRows.value,
|
|
2207
|
-
gridCols: this.gridCols.value,
|
|
2208
|
-
altGridRows: this.altGridRows.value,
|
|
2209
|
-
altGridCols: this.altGridCols.value,
|
|
2210
|
-
numberPages: this.numberPages.value,
|
|
2211
|
-
currentStreams: this.currentStreams.value,
|
|
2212
|
-
showMiniView: this.showMiniView.value,
|
|
2213
|
-
nStream: this.nStream.value,
|
|
2214
|
-
defer_receive: this.defer_receive.value,
|
|
2215
|
-
allAudioStreams: this.allAudioStreams.value,
|
|
2216
|
-
screenProducer: this.screenProducer.value,
|
|
2217
|
-
remoteScreenStream: this.remoteScreenStream.value,
|
|
2218
|
-
gotAllVids: this.gotAllVids.value,
|
|
2219
|
-
paginationHeightWidth: this.paginationHeightWidth.value,
|
|
2220
|
-
paginationDirection: this.paginationDirection.value,
|
|
2221
|
-
gridSizes: this.gridSizes.value,
|
|
2222
|
-
screenForceFullDisplay: this.screenForceFullDisplay.value,
|
|
2223
|
-
mainGridStream: this.mainGridStream.value,
|
|
2224
|
-
otherGridStreams: this.otherGridStreams.value,
|
|
2225
|
-
audioOnlyStreams: this.audioOnlyStreams.value,
|
|
2226
|
-
videoInputs: this.videoInputs.value,
|
|
2227
|
-
audioInputs: this.audioInputs.value,
|
|
2228
|
-
meetingProgressTime: this.meetingProgressTime.value,
|
|
2229
|
-
meetingElapsedTime: this.meetingElapsedTime.value,
|
|
2230
|
-
ref_participants: this.ref_participants.value,
|
|
2231
|
-
messages: this.messages.value,
|
|
2232
|
-
startDirectMessage: this.startDirectMessage.value,
|
|
2233
|
-
directMessageDetails: this.directMessageDetails.value,
|
|
2234
|
-
coHost: this.coHost.value,
|
|
2235
|
-
coHostResponsibility: this.coHostResponsibility.value,
|
|
2236
|
-
// Event settings
|
|
2237
|
-
audioSetting: this.audioSetting.value,
|
|
2238
|
-
videoSetting: this.videoSetting.value,
|
|
2239
|
-
screenshareSetting: this.screenshareSetting.value,
|
|
2240
|
-
chatSetting: this.chatSetting.value,
|
|
2241
|
-
// Display settings
|
|
2242
|
-
autoWave: this.autoWave.value,
|
|
2243
|
-
forceFullDisplay: this.forceFullDisplay.value,
|
|
2244
|
-
prevForceFullDisplay: this.prevForceFullDisplay.value,
|
|
2245
|
-
prevMeetingDisplayType: this.prevMeetingDisplayType.value,
|
|
2246
|
-
// Waiting room
|
|
2247
|
-
waitingRoomFilter: this.waitingRoomFilter.value,
|
|
2248
|
-
waitingRoomList: this.waitingRoomList.value,
|
|
2249
|
-
waitingRoomCounter: this.waitingRoomCounter.value,
|
|
2250
|
-
filteredWaitingRoomList: this.filteredWaitingRoomList.value,
|
|
2251
|
-
// Requests
|
|
2252
|
-
requestFilter: this.requestFilter.value,
|
|
2253
|
-
requestList: this.requestList.value,
|
|
2254
|
-
requestCounter: this.requestCounter.value,
|
|
2255
|
-
filteredRequestList: this.filteredRequestList.value,
|
|
2256
|
-
// Total requests and waiting room
|
|
2257
|
-
totalReqWait: this.totalReqWait.value,
|
|
2258
|
-
// Alerts
|
|
2259
|
-
alertVisible: this.alertVisible.value,
|
|
2260
|
-
alertMessage: this.alertMessage.value,
|
|
2261
|
-
alertType: this.alertType.value,
|
|
2262
|
-
alertDuration: this.alertDuration.value,
|
|
2263
|
-
// Progress Timer
|
|
2264
|
-
progressTimerVisible: this.progressTimerVisible.value,
|
|
2265
|
-
progressTimerValue: this.progressTimerValue.value,
|
|
2266
|
-
// Menu modals
|
|
2267
|
-
isMenuModalVisible: this.isMenuModalVisible.value,
|
|
2268
|
-
isRecordingModalVisible: this.isRecordingModalVisible.value,
|
|
2269
|
-
isSettingsModalVisible: this.isSettingsModalVisible.value,
|
|
2270
|
-
isRequestsModalVisible: this.isRequestsModalVisible.value,
|
|
2271
|
-
isWaitingModalVisible: this.isWaitingModalVisible.value,
|
|
2272
|
-
isCoHostModalVisible: this.isCoHostModalVisible.value,
|
|
2273
|
-
isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,
|
|
2274
|
-
isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,
|
|
2275
|
-
// Other Modals
|
|
2276
|
-
isParticipantsModalVisible: this.isParticipantsModalVisible.value,
|
|
2277
|
-
isMessagesModalVisible: this.isMessagesModalVisible.value,
|
|
2278
|
-
isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,
|
|
2279
|
-
isConfirmHereModalVisible: this.isConfirmHereModalVisible.value,
|
|
2280
|
-
isLoadingModalVisible: this.isLoadingModalVisible.value,
|
|
2281
|
-
// Recording Options
|
|
2282
|
-
recordingMediaOptions: this.recordingMediaOptions.value,
|
|
2283
|
-
recordingAudioOptions: this.recordingAudioOptions.value,
|
|
2284
|
-
recordingVideoOptions: this.recordingVideoOptions.value,
|
|
2285
|
-
recordingVideoType: this.recordingVideoType.value,
|
|
2286
|
-
recordingVideoOptimized: this.recordingVideoOptimized.value,
|
|
2287
|
-
recordingDisplayType: this.recordingDisplayType.value,
|
|
2288
|
-
recordingAddHLS: this.recordingAddHLS.value,
|
|
2289
|
-
recordingAddText: this.recordingAddText.value,
|
|
2290
|
-
recordingCustomText: this.recordingCustomText.value,
|
|
2291
|
-
recordingCustomTextPosition: this.recordingCustomTextPosition.value,
|
|
2292
|
-
recordingCustomTextColor: this.recordingCustomTextColor.value,
|
|
2293
|
-
recordingNameTags: this.recordingNameTags.value,
|
|
2294
|
-
recordingBackgroundColor: this.recordingBackgroundColor.value,
|
|
2295
|
-
recordingNameTagsColor: this.recordingNameTagsColor.value,
|
|
2296
|
-
recordingOrientationVideo: this.recordingOrientationVideo.value,
|
|
2297
|
-
clearedToResume: this.clearedToResume.value,
|
|
2298
|
-
clearedToRecord: this.clearedToRecord.value,
|
|
2299
|
-
recordState: this.recordState.value,
|
|
2300
|
-
showRecordButtons: this.showRecordButtons.value,
|
|
2301
|
-
recordingProgressTime: this.recordingProgressTime.value,
|
|
2302
|
-
audioSwitching: this.audioSwitching.value,
|
|
2303
|
-
videoSwitching: this.videoSwitching.value,
|
|
2304
|
-
// Media states
|
|
2305
|
-
videoAlreadyOn: this.videoAlreadyOn.value,
|
|
2306
|
-
audioAlreadyOn: this.audioAlreadyOn.value,
|
|
2307
|
-
componentSizes: this.componentSizes.value,
|
|
2308
|
-
// Permissions
|
|
2309
|
-
hasCameraPermission: this.hasCameraPermission.value,
|
|
2310
|
-
hasAudioPermission: this.hasAudioPermission.value,
|
|
2311
|
-
// Transports
|
|
2312
|
-
transportCreated: this.transportCreated.value,
|
|
2313
|
-
transportCreatedVideo: this.transportCreatedVideo.value,
|
|
2314
|
-
transportCreatedAudio: this.transportCreatedAudio.value,
|
|
2315
|
-
transportCreatedScreen: this.transportCreatedScreen.value,
|
|
2316
|
-
producerTransport: this.producerTransport.value,
|
|
2317
|
-
videoProducer: this.videoProducer.value,
|
|
2318
|
-
params: this.params.value,
|
|
2319
|
-
videoParams: this.videoParams.value,
|
|
2320
|
-
audioParams: this.audioParams.value,
|
|
2321
|
-
audioProducer: this.audioProducer.value,
|
|
2322
|
-
consumerTransports: this.consumerTransports.value,
|
|
2323
|
-
consumingTransports: this.consumingTransports.value,
|
|
2324
|
-
// Polls
|
|
2325
|
-
polls: this.polls.value,
|
|
2326
|
-
poll: this.poll.value,
|
|
2327
|
-
isPollModalVisible: this.isPollModalVisible.value,
|
|
2328
|
-
// Background
|
|
2329
|
-
customImage: this.customImage.value,
|
|
2330
|
-
selectedImage: this.selectedImage.value,
|
|
2331
|
-
segmentVideo: this.segmentVideo.value,
|
|
2332
|
-
selfieSegmentation: this.selfieSegmentation.value,
|
|
2333
|
-
pauseSegmentation: this.pauseSegmentation.value,
|
|
2334
|
-
processedStream: this.processedStream.value,
|
|
2335
|
-
keepBackground: this.keepBackground.value,
|
|
2336
|
-
backgroundHasChanged: this.backgroundHasChanged.value,
|
|
2337
|
-
virtualStream: this.virtualStream.value,
|
|
2338
|
-
mainCanvas: this.mainCanvas.value,
|
|
2339
|
-
prevKeepBackground: this.prevKeepBackground.value,
|
|
2340
|
-
appliedBackground: this.appliedBackground.value,
|
|
2341
|
-
isBackgroundModalVisible: this.isBackgroundModalVisible.value,
|
|
2342
|
-
autoClickBackground: this.autoClickBackground.value,
|
|
2343
|
-
// Breakout rooms
|
|
2344
|
-
breakoutRooms: this.breakoutRooms.value,
|
|
2345
|
-
currentRoomIndex: this.currentRoomIndex.value,
|
|
2346
|
-
canStartBreakout: this.canStartBreakout.value,
|
|
2347
|
-
breakOutRoomStarted: this.breakOutRoomStarted.value,
|
|
2348
|
-
breakOutRoomEnded: this.breakOutRoomEnded.value,
|
|
2349
|
-
hostNewRoom: this.hostNewRoom.value,
|
|
2350
|
-
limitedBreakRoom: this.limitedBreakRoom.value,
|
|
2351
|
-
mainRoomsLength: this.mainRoomsLength.value,
|
|
2352
|
-
memberRoom: this.memberRoom.value,
|
|
2353
|
-
isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,
|
|
2354
|
-
// Whiteboard
|
|
2355
|
-
whiteboardUsers: this.whiteboardUsers.value,
|
|
2356
|
-
currentWhiteboardIndex: this.currentWhiteboardIndex.value,
|
|
2357
|
-
canStartWhiteboard: this.canStartWhiteboard.value,
|
|
2358
|
-
whiteboardStarted: this.whiteboardStarted.value,
|
|
2359
|
-
whiteboardEnded: this.whiteboardEnded.value,
|
|
2360
|
-
whiteboardLimit: this.whiteboardLimit.value,
|
|
2361
|
-
isWhiteboardModalVisible: this.isWhiteboardModalVisible.value,
|
|
2362
|
-
isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,
|
|
2363
|
-
shapes: this.shapes.value,
|
|
2364
|
-
useImageBackground: this.useImageBackground.value,
|
|
2365
|
-
redoStack: this.redoStack.value,
|
|
2366
|
-
undoStack: this.undoStack.value,
|
|
2367
|
-
canvasStream: this.canvasStream.value,
|
|
2368
|
-
canvasWhiteboard: this.canvasWhiteboard.value,
|
|
2369
|
-
// Screenboard
|
|
2370
|
-
canvasScreenboard: this.canvasScreenboard.value,
|
|
2371
|
-
processedScreenStream: this.processedScreenStream.value,
|
|
2372
|
-
annotateScreenStream: this.annotateScreenStream.value,
|
|
2373
|
-
mainScreenCanvas: this.mainScreenCanvas.value,
|
|
2374
|
-
isScreenboardModalVisible: this.isScreenboardModalVisible.value,
|
|
2375
|
-
validated: this.validated.value,
|
|
2376
|
-
device: this.device.value,
|
|
2377
|
-
socket: this.socket.value,
|
|
2378
|
-
checkMediaPermission: false,
|
|
2379
|
-
onWeb: true,
|
|
2380
|
-
// Update functions
|
|
2381
|
-
updateRoomName: this.updateRoomName.bind(this),
|
|
2382
|
-
updateMember: this.updateMember.bind(this),
|
|
2383
|
-
updateAdminPasscode: this.updateAdminPasscode.bind(this),
|
|
2384
|
-
updateYouAreCoHost: this.updateYouAreCoHost.bind(this),
|
|
2385
|
-
updateYouAreHost: this.updateYouAreHost.bind(this),
|
|
2386
|
-
updateIslevel: this.updateIslevel.bind(this),
|
|
2387
|
-
updateCoHost: this.updateCoHost.bind(this),
|
|
2388
|
-
updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),
|
|
2389
|
-
updateConfirmedToRecord: this.updateConfirmedToRecord.bind(this),
|
|
2390
|
-
updateMeetingDisplayType: this.updateMeetingDisplayType.bind(this),
|
|
2391
|
-
updateMeetingVideoOptimized: this.updateMeetingVideoOptimized.bind(this),
|
|
2392
|
-
updateEventType: this.updateEventType.bind(this),
|
|
2393
|
-
updateParticipants: this.updateParticipants.bind(this),
|
|
2394
|
-
updateParticipantsCounter: this.updateParticipantsCounter.bind(this),
|
|
2395
|
-
updateParticipantsFilter: this.updateParticipantsFilter.bind(this),
|
|
2396
|
-
// More update functions for media details
|
|
2397
|
-
updateConsume_sockets: this.updateConsume_sockets.bind(this),
|
|
2398
|
-
updateRtpCapabilities: this.updateRtpCapabilities.bind(this),
|
|
2399
|
-
updateRoomRecvIPs: this.updateRoomRecvIPs.bind(this),
|
|
2400
|
-
updateMeetingRoomParams: this.updateMeetingRoomParams.bind(this),
|
|
2401
|
-
updateItemPageLimit: this.updateItemPageLimit.bind(this),
|
|
2402
|
-
updateAudioOnlyRoom: this.updateAudioOnlyRoom.bind(this),
|
|
2403
|
-
updateAddForBasic: this.updateAddForBasic.bind(this),
|
|
2404
|
-
updateScreenPageLimit: this.updateScreenPageLimit.bind(this),
|
|
2405
|
-
updateShareScreenStarted: this.updateShareScreenStarted.bind(this),
|
|
2406
|
-
updateShared: this.updateShared.bind(this),
|
|
2407
|
-
updateTargetOrientation: this.updateTargetOrientation.bind(this),
|
|
2408
|
-
updateTargetResolution: this.updateTargetResolution.bind(this),
|
|
2409
|
-
updateTargetResolutionHost: this.updateTargetResolutionHost.bind(this),
|
|
2410
|
-
updateVidCons: this.updateVidCons.bind(this),
|
|
2411
|
-
updateFrameRate: this.updateFrameRate.bind(this),
|
|
2412
|
-
updateHParams: this.updateHParams.bind(this),
|
|
2413
|
-
updateVParams: this.updateVParams.bind(this),
|
|
2414
|
-
updateScreenParams: this.updateScreenParams.bind(this),
|
|
2415
|
-
updateAParams: this.updateAParams.bind(this),
|
|
2416
|
-
// More update functions for recording details
|
|
2417
|
-
updateRecordingAudioPausesLimit: this.updateRecordingAudioPausesLimit.bind(this),
|
|
2418
|
-
updateRecordingAudioPausesCount: this.updateRecordingAudioPausesCount.bind(this),
|
|
2419
|
-
updateRecordingAudioSupport: this.updateRecordingAudioSupport.bind(this),
|
|
2420
|
-
updateRecordingAudioPeopleLimit: this.updateRecordingAudioPeopleLimit.bind(this),
|
|
2421
|
-
updateRecordingAudioParticipantsTimeLimit: this.updateRecordingAudioParticipantsTimeLimit.bind(this),
|
|
2422
|
-
updateRecordingVideoPausesCount: this.updateRecordingVideoPausesCount.bind(this),
|
|
2423
|
-
updateRecordingVideoPausesLimit: this.updateRecordingVideoPausesLimit.bind(this),
|
|
2424
|
-
updateRecordingVideoSupport: this.updateRecordingVideoSupport.bind(this),
|
|
2425
|
-
updateRecordingVideoPeopleLimit: this.updateRecordingVideoPeopleLimit.bind(this),
|
|
2426
|
-
updateRecordingVideoParticipantsTimeLimit: this.updateRecordingVideoParticipantsTimeLimit.bind(this),
|
|
2427
|
-
updateRecordingAllParticipantsSupport: this.updateRecordingAllParticipantsSupport.bind(this),
|
|
2428
|
-
updateRecordingVideoParticipantsSupport: this.updateRecordingVideoParticipantsSupport.bind(this),
|
|
2429
|
-
updateRecordingAllParticipantsFullRoomSupport: this.updateRecordingAllParticipantsFullRoomSupport.bind(this),
|
|
2430
|
-
updateRecordingVideoParticipantsFullRoomSupport: this.updateRecordingVideoParticipantsFullRoomSupport.bind(this),
|
|
2431
|
-
updateRecordingPreferredOrientation: this.updateRecordingPreferredOrientation.bind(this),
|
|
2432
|
-
updateRecordingSupportForOtherOrientation: this.updateRecordingSupportForOtherOrientation.bind(this),
|
|
2433
|
-
updateRecordingMultiFormatsSupport: this.updateRecordingMultiFormatsSupport.bind(this),
|
|
2434
|
-
updateUserRecordingParams: this.updateUserRecordingParams.bind(this),
|
|
2435
|
-
updateCanRecord: this.updateCanRecord.bind(this),
|
|
2436
|
-
updateStartReport: this.updateStartReport.bind(this),
|
|
2437
|
-
updateEndReport: this.updateEndReport.bind(this),
|
|
2438
|
-
updateRecordTimerInterval: this.updateRecordTimerInterval.bind(this),
|
|
2439
|
-
updateRecordStartTime: this.updateRecordStartTime.bind(this),
|
|
2440
|
-
updateRecordElapsedTime: this.updateRecordElapsedTime.bind(this),
|
|
2441
|
-
updateIsTimerRunning: this.updateIsTimerRunning.bind(this),
|
|
2442
|
-
updateCanPauseResume: this.updateCanPauseResume.bind(this),
|
|
2443
|
-
updateRecordChangeSeconds: this.updateRecordChangeSeconds.bind(this),
|
|
2444
|
-
updatePauseLimit: this.updatePauseLimit.bind(this),
|
|
2445
|
-
updatePauseRecordCount: this.updatePauseRecordCount.bind(this),
|
|
2446
|
-
updateCanLaunchRecord: this.updateCanLaunchRecord.bind(this),
|
|
2447
|
-
updateStopLaunchRecord: this.updateStopLaunchRecord.bind(this),
|
|
2448
|
-
updateParticipantsAll: this.updateParticipantsAll.bind(this),
|
|
2449
|
-
updateFirstAll: this.updateFirstAll.bind(this),
|
|
2450
|
-
updateUpdateMainWindow: this.updateUpdateMainWindow.bind(this),
|
|
2451
|
-
updateFirst_round: this.updateFirst_round.bind(this),
|
|
2452
|
-
updateLandScaped: this.updateLandScaped.bind(this),
|
|
2453
|
-
updateLock_screen: this.updateLock_screen.bind(this),
|
|
2454
|
-
updateScreenId: this.updateScreenId.bind(this),
|
|
2455
|
-
updateAllVideoStreams: this.updateAllVideoStreams.bind(this),
|
|
2456
|
-
updateNewLimitedStreams: this.updateNewLimitedStreams.bind(this),
|
|
2457
|
-
updateNewLimitedStreamsIDs: this.updateNewLimitedStreamsIDs.bind(this),
|
|
2458
|
-
updateActiveSounds: this.updateActiveSounds.bind(this),
|
|
2459
|
-
updateScreenShareIDStream: this.updateScreenShareIDStream.bind(this),
|
|
2460
|
-
updateScreenShareNameStream: this.updateScreenShareNameStream.bind(this),
|
|
2461
|
-
updateAdminIDStream: this.updateAdminIDStream.bind(this),
|
|
2462
|
-
updateAdminNameStream: this.updateAdminNameStream.bind(this),
|
|
2463
|
-
updateYouYouStream: this.updateYouYouStream.bind(this),
|
|
2464
|
-
updateYouYouStreamIDs: this.updateYouYouStreamIDs.bind(this),
|
|
2465
|
-
updateLocalStream: this.updateLocalStream.bind(this),
|
|
2466
|
-
updateRecordStarted: this.updateRecordStarted.bind(this),
|
|
2467
|
-
updateRecordResumed: this.updateRecordResumed.bind(this),
|
|
2468
|
-
updateRecordPaused: this.updateRecordPaused.bind(this),
|
|
2469
|
-
updateRecordStopped: this.updateRecordStopped.bind(this),
|
|
2470
|
-
updateAdminRestrictSetting: this.updateAdminRestrictSetting.bind(this),
|
|
2471
|
-
updateVideoRequestState: this.updateVideoRequestState.bind(this),
|
|
2472
|
-
updateVideoRequestTime: this.updateVideoRequestTime.bind(this),
|
|
2473
|
-
updateVideoAction: this.updateVideoAction.bind(this),
|
|
2474
|
-
updateLocalStreamVideo: this.updateLocalStreamVideo.bind(this),
|
|
2475
|
-
updateUserDefaultVideoInputDevice: this.updateUserDefaultVideoInputDevice.bind(this),
|
|
2476
|
-
updateCurrentFacingMode: this.updateCurrentFacingMode.bind(this),
|
|
2477
|
-
updatePrevFacingMode: this.updatePrevFacingMode.bind(this),
|
|
2478
|
-
updateDefVideoID: this.updateDefVideoID.bind(this),
|
|
2479
|
-
updateAllowed: this.updateAllowed.bind(this),
|
|
2480
|
-
updateDispActiveNames: this.updateDispActiveNames.bind(this),
|
|
2481
|
-
updateP_dispActiveNames: this.updateP_dispActiveNames.bind(this),
|
|
2482
|
-
updateActiveNames: this.updateActiveNames.bind(this),
|
|
2483
|
-
updatePrevActiveNames: this.updatePrevActiveNames.bind(this),
|
|
2484
|
-
updateP_activeNames: this.updateP_activeNames.bind(this),
|
|
2485
|
-
updateMembersReceived: this.updateMembersReceived.bind(this),
|
|
2486
|
-
updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),
|
|
2487
|
-
updateHostFirstSwitch: this.updateHostFirstSwitch.bind(this),
|
|
2488
|
-
updateMicAction: this.updateMicAction.bind(this),
|
|
2489
|
-
updateScreenAction: this.updateScreenAction.bind(this),
|
|
2490
|
-
updateChatAction: this.updateChatAction.bind(this),
|
|
2491
|
-
updateAudioRequestState: this.updateAudioRequestState.bind(this),
|
|
2492
|
-
updateScreenRequestState: this.updateScreenRequestState.bind(this),
|
|
2493
|
-
updateChatRequestState: this.updateChatRequestState.bind(this),
|
|
2494
|
-
updateAudioRequestTime: this.updateAudioRequestTime.bind(this),
|
|
2495
|
-
updateScreenRequestTime: this.updateScreenRequestTime.bind(this),
|
|
2496
|
-
updateChatRequestTime: this.updateChatRequestTime.bind(this),
|
|
2497
|
-
updateOldSoundIds: this.updateOldSoundIds.bind(this),
|
|
2498
|
-
updateHostLabel: this.updateHostLabel.bind(this),
|
|
2499
|
-
updateMainScreenFilled: this.updateMainScreenFilled.bind(this),
|
|
2500
|
-
updateLocalStreamScreen: this.updateLocalStreamScreen.bind(this),
|
|
2501
|
-
updateScreenAlreadyOn: this.updateScreenAlreadyOn.bind(this),
|
|
2502
|
-
updateChatAlreadyOn: this.updateChatAlreadyOn.bind(this),
|
|
2503
|
-
updateRedirectURL: this.updateRedirectURL.bind(this),
|
|
2504
|
-
updateOldAllStreams: this.updateOldAllStreams.bind(this),
|
|
2505
|
-
updateAdminVidID: this.updateAdminVidID.bind(this),
|
|
2506
|
-
updateStreamNames: this.updateStreamNames.bind(this),
|
|
2507
|
-
updateNon_alVideoStreams: this.updateNon_alVideoStreams.bind(this),
|
|
2508
|
-
updateSortAudioLoudness: this.updateSortAudioLoudness.bind(this),
|
|
2509
|
-
updateAudioDecibels: this.updateAudioDecibels.bind(this),
|
|
2510
|
-
updateMixed_alVideoStreams: this.updateMixed_alVideoStreams.bind(this),
|
|
2511
|
-
updateNon_alVideoStreams_muted: this.updateNon_alVideoStreams_muted.bind(this),
|
|
2512
|
-
updatePaginatedStreams: this.updatePaginatedStreams.bind(this),
|
|
2513
|
-
updateLocalStreamAudio: this.updateLocalStreamAudio.bind(this),
|
|
2514
|
-
updateDefAudioID: this.updateDefAudioID.bind(this),
|
|
2515
|
-
updateUserDefaultAudioInputDevice: this.updateUserDefaultAudioInputDevice.bind(this),
|
|
2516
|
-
updateUserDefaultAudioOutputDevice: this.updateUserDefaultAudioOutputDevice.bind(this),
|
|
2517
|
-
updatePrevAudioInputDevice: this.updatePrevAudioInputDevice.bind(this),
|
|
2518
|
-
updatePrevVideoInputDevice: this.updatePrevVideoInputDevice.bind(this),
|
|
2519
|
-
updateAudioPaused: this.updateAudioPaused.bind(this),
|
|
2520
|
-
updateMainScreenPerson: this.updateMainScreenPerson.bind(this),
|
|
2521
|
-
updateAdminOnMainScreen: this.updateAdminOnMainScreen.bind(this),
|
|
2522
|
-
updateScreenStates: this.updateScreenStates.bind(this),
|
|
2523
|
-
updatePrevScreenStates: this.updatePrevScreenStates.bind(this),
|
|
2524
|
-
updateUpdateDateState: this.updateUpdateDateState.bind(this),
|
|
2525
|
-
updateLastUpdate: this.updateLastUpdate.bind(this),
|
|
2526
|
-
updateNForReadjustRecord: this.updateNForReadjustRecord.bind(this),
|
|
2527
|
-
updateFixedPageLimit: this.updateFixedPageLimit.bind(this),
|
|
2528
|
-
updateRemoveAltGrid: this.updateRemoveAltGrid.bind(this),
|
|
2529
|
-
updateNForReadjust: this.updateNForReadjust.bind(this),
|
|
2530
|
-
updateLastReorderTime: this.updateLastReorderTime.bind(this),
|
|
2531
|
-
updateAudStreamNames: this.updateAudStreamNames.bind(this),
|
|
2532
|
-
updateCurrentUserPage: this.updateCurrentUserPage.bind(this),
|
|
2533
|
-
updateMainHeightWidth: this.updateMainHeightWidth.bind(this),
|
|
2534
|
-
updatePrevMainHeightWidth: this.updatePrevMainHeightWidth.bind(this),
|
|
2535
|
-
updatePrevDoPaginate: this.updatePrevDoPaginate.bind(this),
|
|
2536
|
-
updateDoPaginate: this.updateDoPaginate.bind(this),
|
|
2537
|
-
updateShareEnded: this.updateShareEnded.bind(this),
|
|
2538
|
-
updateLStreams: this.updateLStreams.bind(this),
|
|
2539
|
-
updateChatRefStreams: this.updateChatRefStreams.bind(this),
|
|
2540
|
-
updateControlHeight: this.updateControlHeight.bind(this),
|
|
2541
|
-
updateIsWideScreen: this.updateIsWideScreen.bind(this),
|
|
2542
|
-
updateIsMediumScreen: this.updateIsMediumScreen.bind(this),
|
|
2543
|
-
updateIsSmallScreen: this.updateIsSmallScreen.bind(this),
|
|
2544
|
-
updateAddGrid: this.updateAddGrid.bind(this),
|
|
2545
|
-
updateAddAltGrid: this.updateAddAltGrid.bind(this),
|
|
2546
|
-
updateGridRows: this.updateGridRows.bind(this),
|
|
2547
|
-
updateGridCols: this.updateGridCols.bind(this),
|
|
2548
|
-
updateAltGridRows: this.updateAltGridRows.bind(this),
|
|
2549
|
-
updateAltGridCols: this.updateAltGridCols.bind(this),
|
|
2550
|
-
updateNumberPages: this.updateNumberPages.bind(this),
|
|
2551
|
-
updateCurrentStreams: this.updateCurrentStreams.bind(this),
|
|
2552
|
-
updateShowMiniView: this.updateShowMiniView.bind(this),
|
|
2553
|
-
updateNStream: this.updateNStream.bind(this),
|
|
2554
|
-
updateDefer_receive: this.updateDefer_receive.bind(this),
|
|
2555
|
-
updateAllAudioStreams: this.updateAllAudioStreams.bind(this),
|
|
2556
|
-
updateRemoteScreenStream: this.updateRemoteScreenStream.bind(this),
|
|
2557
|
-
updateScreenProducer: this.updateScreenProducer.bind(this),
|
|
2558
|
-
updateGotAllVids: this.updateGotAllVids.bind(this),
|
|
2559
|
-
updatePaginationHeightWidth: this.updatePaginationHeightWidth.bind(this),
|
|
2560
|
-
updatePaginationDirection: this.updatePaginationDirection.bind(this),
|
|
2561
|
-
updateGridSizes: this.updateGridSizes.bind(this),
|
|
2562
|
-
updateScreenForceFullDisplay: this.updateScreenForceFullDisplay.bind(this),
|
|
2563
|
-
updateMainGridStream: this.updateMainGridStream.bind(this),
|
|
2564
|
-
updateOtherGridStreams: this.updateOtherGridStreams.bind(this),
|
|
2565
|
-
updateAudioOnlyStreams: this.updateAudioOnlyStreams.bind(this),
|
|
2566
|
-
updateVideoInputs: this.updateVideoInputs.bind(this),
|
|
2567
|
-
updateAudioInputs: this.updateAudioInputs.bind(this),
|
|
2568
|
-
updateMeetingProgressTime: this.updateMeetingProgressTime.bind(this),
|
|
2569
|
-
updateMeetingElapsedTime: this.updateMeetingElapsedTime.bind(this),
|
|
2570
|
-
updateRef_participants: this.updateRef_participants.bind(this),
|
|
2571
|
-
updateMessages: this.updateMessages.bind(this),
|
|
2572
|
-
updateStartDirectMessage: this.updateStartDirectMessage.bind(this),
|
|
2573
|
-
updateDirectMessageDetails: this.updateDirectMessageDetails.bind(this),
|
|
2574
|
-
updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),
|
|
2575
|
-
// Event settings
|
|
2576
|
-
updateAudioSetting: this.updateAudioSetting.bind(this),
|
|
2577
|
-
updateVideoSetting: this.updateVideoSetting.bind(this),
|
|
2578
|
-
updateScreenshareSetting: this.updateScreenshareSetting.bind(this),
|
|
2579
|
-
updateChatSetting: this.updateChatSetting.bind(this),
|
|
2580
|
-
// Display settings
|
|
2581
|
-
updateAutoWave: this.updateAutoWave.bind(this),
|
|
2582
|
-
updateForceFullDisplay: this.updateForceFullDisplay.bind(this),
|
|
2583
|
-
updatePrevForceFullDisplay: this.updatePrevForceFullDisplay.bind(this),
|
|
2584
|
-
updatePrevMeetingDisplayType: this.updatePrevMeetingDisplayType.bind(this),
|
|
2585
|
-
// Waiting room
|
|
2586
|
-
updateWaitingRoomFilter: this.updateWaitingRoomFilter.bind(this),
|
|
2587
|
-
updateWaitingRoomList: this.updateWaitingRoomList.bind(this),
|
|
2588
|
-
updateWaitingRoomCounter: this.updateWaitingRoomCounter.bind(this),
|
|
2589
|
-
// Requests
|
|
2590
|
-
updateRequestFilter: this.updateRequestFilter.bind(this),
|
|
2591
|
-
updateRequestList: this.updateRequestList.bind(this),
|
|
2592
|
-
updateRequestCounter: this.updateRequestCounter.bind(this),
|
|
2593
|
-
// Total requests and waiting room
|
|
2594
|
-
updateTotalReqWait: this.updateTotalReqWait.bind(this),
|
|
2595
|
-
// Menu modals
|
|
2596
|
-
updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),
|
|
2597
|
-
updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),
|
|
2598
|
-
updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),
|
|
2599
|
-
updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),
|
|
2600
|
-
updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),
|
|
2601
|
-
updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),
|
|
2602
|
-
updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),
|
|
2603
|
-
updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),
|
|
2604
|
-
// Other modals
|
|
2605
|
-
updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),
|
|
2606
|
-
updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),
|
|
2607
|
-
updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),
|
|
2608
|
-
updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),
|
|
2609
|
-
updateIsLoadingModalVisible: this.updateIsLoadingModalVisible.bind(this),
|
|
2610
|
-
// Recording Options
|
|
2611
|
-
updateRecordingMediaOptions: this.updateRecordingMediaOptions.bind(this),
|
|
2612
|
-
updateRecordingAudioOptions: this.updateRecordingAudioOptions.bind(this),
|
|
2613
|
-
updateRecordingVideoOptions: this.updateRecordingVideoOptions.bind(this),
|
|
2614
|
-
updateRecordingVideoType: this.updateRecordingVideoType.bind(this),
|
|
2615
|
-
updateRecordingVideoOptimized: this.updateRecordingVideoOptimized.bind(this),
|
|
2616
|
-
updateRecordingDisplayType: this.updateRecordingDisplayType.bind(this),
|
|
2617
|
-
updateRecordingAddHLS: this.updateRecordingAddHLS.bind(this),
|
|
2618
|
-
updateRecordingAddText: this.updateRecordingAddText.bind(this),
|
|
2619
|
-
updateRecordingCustomText: this.updateRecordingCustomText.bind(this),
|
|
2620
|
-
updateRecordingCustomTextPosition: this.updateRecordingCustomTextPosition.bind(this),
|
|
2621
|
-
updateRecordingCustomTextColor: this.updateRecordingCustomTextColor.bind(this),
|
|
2622
|
-
updateRecordingNameTags: this.updateRecordingNameTags.bind(this),
|
|
2623
|
-
updateRecordingBackgroundColor: this.updateRecordingBackgroundColor.bind(this),
|
|
2624
|
-
updateRecordingNameTagsColor: this.updateRecordingNameTagsColor.bind(this),
|
|
2625
|
-
updateRecordingOrientationVideo: this.updateRecordingOrientationVideo.bind(this),
|
|
2626
|
-
updateClearedToResume: this.updateClearedToResume.bind(this),
|
|
2627
|
-
updateClearedToRecord: this.updateClearedToRecord.bind(this),
|
|
2628
|
-
updateRecordState: this.updateRecordState.bind(this),
|
|
2629
|
-
updateShowRecordButtons: this.updateShowRecordButtons.bind(this),
|
|
2630
|
-
updateRecordingProgressTime: this.updateRecordingProgressTime.bind(this),
|
|
2631
|
-
updateAudioSwitching: this.updateAudioSwitching.bind(this),
|
|
2632
|
-
updateVideoSwitching: this.updateVideoSwitching.bind(this),
|
|
2633
|
-
// Media states
|
|
2634
|
-
updateVideoAlreadyOn: this.updateVideoAlreadyOn.bind(this),
|
|
2635
|
-
updateAudioAlreadyOn: this.updateAudioAlreadyOn.bind(this),
|
|
2636
|
-
updateComponentSizes: this.updateComponentSizes.bind(this),
|
|
2637
|
-
// Permissions
|
|
2638
|
-
updateHasCameraPermission: this.updateHasCameraPermission.bind(this),
|
|
2639
|
-
updateHasAudioPermission: this.updateHasAudioPermission.bind(this),
|
|
2640
|
-
// Transports
|
|
2641
|
-
updateTransportCreated: this.updateTransportCreated.bind(this),
|
|
2642
|
-
updateTransportCreatedVideo: this.updateTransportCreatedVideo.bind(this),
|
|
2643
|
-
updateTransportCreatedAudio: this.updateTransportCreatedAudio.bind(this),
|
|
2644
|
-
updateTransportCreatedScreen: this.updateTransportCreatedScreen.bind(this),
|
|
2645
|
-
updateProducerTransport: this.updateProducerTransport.bind(this),
|
|
2646
|
-
updateVideoProducer: this.updateVideoProducer.bind(this),
|
|
2647
|
-
updateParams: this.updateParams.bind(this),
|
|
2648
|
-
updateVideoParams: this.updateVideoParams.bind(this),
|
|
2649
|
-
updateAudioParams: this.updateAudioParams.bind(this),
|
|
2650
|
-
updateAudioProducer: this.updateAudioProducer.bind(this),
|
|
2651
|
-
updateConsumerTransports: this.updateConsumerTransports.bind(this),
|
|
2652
|
-
updateConsumingTransports: this.updateConsumingTransports.bind(this),
|
|
2653
|
-
// Polls
|
|
2654
|
-
updatePolls: this.updatePolls.bind(this),
|
|
2655
|
-
updatePoll: this.updatePoll.bind(this),
|
|
2656
|
-
updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),
|
|
2657
|
-
// Background
|
|
2658
|
-
updateCustomImage: this.updateCustomImage.bind(this),
|
|
2659
|
-
updateSelectedImage: this.updateSelectedImage.bind(this),
|
|
2660
|
-
updateSegmentVideo: this.updateSegmentVideo.bind(this),
|
|
2661
|
-
updateSelfieSegmentation: this.updateSelfieSegmentation.bind(this),
|
|
2662
|
-
updatePauseSegmentation: this.updatePauseSegmentation.bind(this),
|
|
2663
|
-
updateProcessedStream: this.updateProcessedStream.bind(this),
|
|
2664
|
-
updateKeepBackground: this.updateKeepBackground.bind(this),
|
|
2665
|
-
updateBackgroundHasChanged: this.updateBackgroundHasChanged.bind(this),
|
|
2666
|
-
updateVirtualStream: this.updateVirtualStream.bind(this),
|
|
2667
|
-
updateMainCanvas: this.updateMainCanvas.bind(this),
|
|
2668
|
-
updatePrevKeepBackground: this.updatePrevKeepBackground.bind(this),
|
|
2669
|
-
updateAppliedBackground: this.updateAppliedBackground.bind(this),
|
|
2670
|
-
updateIsBackgroundModalVisible: this.updateIsBackgroundModalVisible.bind(this),
|
|
2671
|
-
updateAutoClickBackground: this.updateAutoClickBackground.bind(this),
|
|
2672
|
-
// Breakout rooms
|
|
2673
|
-
updateBreakoutRooms: this.updateBreakoutRooms.bind(this),
|
|
2674
|
-
updateCurrentRoomIndex: this.updateCurrentRoomIndex.bind(this),
|
|
2675
|
-
updateCanStartBreakout: this.updateCanStartBreakout.bind(this),
|
|
2676
|
-
updateBreakOutRoomStarted: this.updateBreakOutRoomStarted.bind(this),
|
|
2677
|
-
updateBreakOutRoomEnded: this.updateBreakOutRoomEnded.bind(this),
|
|
2678
|
-
updateHostNewRoom: this.updateHostNewRoom.bind(this),
|
|
2679
|
-
updateLimitedBreakRoom: this.updateLimitedBreakRoom.bind(this),
|
|
2680
|
-
updateMainRoomsLength: this.updateMainRoomsLength.bind(this),
|
|
2681
|
-
updateMemberRoom: this.updateMemberRoom.bind(this),
|
|
2682
|
-
updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),
|
|
2683
|
-
// Whiteboard
|
|
2684
|
-
updateWhiteboardUsers: this.updateWhiteboardUsers.bind(this),
|
|
2685
|
-
updateCurrentWhiteboardIndex: this.updateCurrentWhiteboardIndex.bind(this),
|
|
2686
|
-
updateCanStartWhiteboard: this.updateCanStartWhiteboard.bind(this),
|
|
2687
|
-
updateWhiteboardStarted: this.updateWhiteboardStarted.bind(this),
|
|
2688
|
-
updateWhiteboardEnded: this.updateWhiteboardEnded.bind(this),
|
|
2689
|
-
updateWhiteboardLimit: this.updateWhiteboardLimit.bind(this),
|
|
2690
|
-
updateIsWhiteboardModalVisible: this.updateIsWhiteboardModalVisible.bind(this),
|
|
2691
|
-
updateIsConfigureWhiteboardModalVisible: this.updateIsConfigureWhiteboardModalVisible.bind(this),
|
|
2692
|
-
updateShapes: this.updateShapes.bind(this),
|
|
2693
|
-
updateUseImageBackground: this.updateUseImageBackground.bind(this),
|
|
2694
|
-
updateRedoStack: this.updateRedoStack.bind(this),
|
|
2695
|
-
updateUndoStack: this.updateUndoStack.bind(this),
|
|
2696
|
-
updateCanvasStream: this.updateCanvasStream.bind(this),
|
|
2697
|
-
updateCanvasWhiteboard: this.updateCanvasWhiteboard.bind(this),
|
|
2698
|
-
// Screenboard
|
|
2699
|
-
updateCanvasScreenboard: this.updateCanvasScreenboard.bind(this),
|
|
2700
|
-
updateProcessedScreenStream: this.updateProcessedScreenStream.bind(this),
|
|
2701
|
-
updateAnnotateScreenStream: this.updateAnnotateScreenStream.bind(this),
|
|
2702
|
-
updateMainScreenCanvas: this.updateMainScreenCanvas.bind(this),
|
|
2703
|
-
updateIsScreenboardModalVisible: this.updateIsScreenboardModalVisible.bind(this),
|
|
2704
|
-
// Other functions
|
|
2705
|
-
checkOrientation: this.checkOrientation.bind(this),
|
|
2706
|
-
updateDevice: this.updateDevice.bind(this),
|
|
2707
|
-
updateSocket: this.updateSocket.bind(this),
|
|
2708
|
-
updateValidated: this.updateValidated.bind(this),
|
|
2709
|
-
showAlert: this.showAlert.bind(this),
|
|
2710
|
-
getUpdatedAllParams: () => {
|
|
2711
|
-
return {
|
|
2712
|
-
...this.getAllParams(),
|
|
2713
|
-
...this.mediaSFUFunctions(),
|
|
2714
|
-
};
|
|
2715
|
-
},
|
|
2716
|
-
};
|
|
2717
|
-
}
|
|
2718
|
-
mediaSFUParameters = {
|
|
2719
|
-
...this.getAllParams(),
|
|
2720
|
-
...this.mediaSFUFunctions(),
|
|
2721
|
-
};
|
|
2722
|
-
getUpdatedAllParams = () => {
|
|
2723
|
-
return {
|
|
2724
|
-
...this.getAllParams(),
|
|
2725
|
-
...this.mediaSFUFunctions(),
|
|
2726
|
-
};
|
|
2727
|
-
};
|
|
2728
|
-
PrejoinPageComponent = {
|
|
2729
|
-
component: this.PrejoinPage,
|
|
2730
|
-
injector: null,
|
|
2731
|
-
};
|
|
2732
|
-
updatePrejoinPageComponent = () => {
|
|
2733
|
-
const PrejoinComp = {
|
|
2734
|
-
component: this.PrejoinPage,
|
|
2735
|
-
injector: this.createInjector({
|
|
2736
|
-
parameters: {
|
|
2737
|
-
showAlert: this.showAlert ||
|
|
2738
|
-
(() => {
|
|
2739
|
-
console.log('showAlert not defined');
|
|
2740
|
-
}),
|
|
2741
|
-
updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,
|
|
2742
|
-
connectSocket: this.socketManager.connectSocket,
|
|
2743
|
-
updateSocket: this.updateSocket,
|
|
2744
|
-
updateValidated: this.updateValidated,
|
|
2745
|
-
updateApiUserName: this.updateApiUserName,
|
|
2746
|
-
updateApiToken: this.updateApiToken,
|
|
2747
|
-
updateLink: this.updateLink,
|
|
2748
|
-
updateRoomName: this.updateRoomName,
|
|
2749
|
-
updateMember: this.updateMember,
|
|
2750
|
-
},
|
|
2751
|
-
credentials: this.credentials,
|
|
2752
|
-
}),
|
|
2753
|
-
};
|
|
2754
|
-
this.PrejoinPageComponent = { ...PrejoinComp };
|
|
2755
|
-
this.cdr.detectChanges();
|
|
2756
|
-
};
|
|
2757
|
-
ngOnInit() {
|
|
2758
|
-
if (this.PrejoinPage) {
|
|
2759
|
-
this.updatePrejoinPageComponent();
|
|
2760
|
-
}
|
|
2761
|
-
this.setupResizeListener();
|
|
2762
|
-
if (this.validated) {
|
|
2763
|
-
this.connectAndAddSocketMethods();
|
|
2764
|
-
}
|
|
2765
|
-
this.mainHeightWidthSubscription = this.mainHeightWidth.subscribe(() => {
|
|
2766
|
-
this.updateMainVideoSize();
|
|
2767
|
-
});
|
|
2768
|
-
this.validatedSubscription = this.validated.subscribe((validated) => {
|
|
2769
|
-
if (validated) {
|
|
2770
|
-
this.handleValidated();
|
|
2771
|
-
}
|
|
2772
|
-
});
|
|
2773
|
-
this.islevelSubscription = this.islevel.subscribe((islevel) => {
|
|
2774
|
-
if (islevel) {
|
|
2775
|
-
this.updateControlChatButtons();
|
|
2776
|
-
}
|
|
2777
|
-
});
|
|
2778
|
-
this.coHostSubscription = combineLatest([this.coHost, this.coHostResponsibility]).subscribe(([coHost, coHostResponsibility]) => {
|
|
2779
|
-
if (coHost || coHostResponsibility) {
|
|
2780
|
-
this.updateControlChatButtons();
|
|
2781
|
-
}
|
|
2782
|
-
});
|
|
2783
|
-
this.mediaSFUParameters = {
|
|
2784
|
-
...this.getAllParams(),
|
|
2785
|
-
...this.mediaSFUFunctions(),
|
|
2786
|
-
};
|
|
2787
|
-
}
|
|
2788
|
-
ngOnDestroy() {
|
|
2789
|
-
window.removeEventListener('resize', this.handleResize);
|
|
2790
|
-
window.removeEventListener('orientationchange', this.handleResize);
|
|
2791
|
-
if (this.mainHeightWidthSubscription) {
|
|
2792
|
-
this.mainHeightWidthSubscription.unsubscribe();
|
|
2793
|
-
}
|
|
2794
|
-
if (this.validatedSubscription) {
|
|
2795
|
-
this.validatedSubscription.unsubscribe();
|
|
2796
|
-
}
|
|
2797
|
-
if (this.islevelSubscription) {
|
|
2798
|
-
this.islevelSubscription.unsubscribe();
|
|
2799
|
-
}
|
|
2800
|
-
if (this.coHostSubscription) {
|
|
2801
|
-
this.coHostSubscription.unsubscribe();
|
|
2802
|
-
}
|
|
2803
|
-
if (this.ScreenboardSubscription) {
|
|
2804
|
-
this.ScreenboardSubscription.unsubscribe();
|
|
2805
|
-
}
|
|
2806
|
-
if (this.recordingSubscription) {
|
|
2807
|
-
this.recordingSubscription.unsubscribe();
|
|
2808
|
-
}
|
|
2809
|
-
}
|
|
2810
|
-
updateMainVideoSize = async () => {
|
|
2811
|
-
if (!this.lock_screen.value && !this.shared.value) {
|
|
2812
|
-
this.prepopulateUserMedia.prepopulateUserMedia({
|
|
2813
|
-
name: this.hostLabel.value,
|
|
2814
|
-
parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },
|
|
2815
|
-
});
|
|
2816
|
-
}
|
|
2817
|
-
else {
|
|
2818
|
-
if (!this.first_round.value) {
|
|
2819
|
-
this.prepopulateUserMedia.prepopulateUserMedia({
|
|
2820
|
-
name: this.hostLabel.value,
|
|
2821
|
-
parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },
|
|
2822
|
-
});
|
|
2823
|
-
}
|
|
2824
|
-
}
|
|
2825
|
-
};
|
|
2826
|
-
async connectAndAddSocketMethods() {
|
|
2827
|
-
this.mediaSFUParameters = {
|
|
2828
|
-
...this.getAllParams(),
|
|
2829
|
-
...this.mediaSFUFunctions(),
|
|
2830
|
-
};
|
|
2831
|
-
const socket_ = await this.connect_Socket(this.apiUserName.value, '', this.apiToken.value);
|
|
2832
|
-
if (socket_) {
|
|
2833
|
-
this.updateSocket(socket_);
|
|
2834
|
-
}
|
|
2835
|
-
}
|
|
2836
|
-
async handleValidated() {
|
|
2837
|
-
this.updateAllVideoStreams([
|
|
2838
|
-
{ producerId: 'youyou', stream: undefined, id: 'youyou', name: 'youyou' },
|
|
2839
|
-
]);
|
|
2840
|
-
this.updateStreamNames([{ id: 'youyou', name: 'youyou', producerId: '' }]);
|
|
2841
|
-
if (this.validated.value) {
|
|
2842
|
-
try {
|
|
2843
|
-
if (!this.localUIMode.value) {
|
|
2844
|
-
await this.connectAndAddSocketMethods();
|
|
2845
|
-
this.updateIsLoadingModalVisible(true);
|
|
2846
|
-
}
|
|
2847
|
-
else {
|
|
2848
|
-
this.updateIsLoadingModalVisible(false);
|
|
2849
|
-
}
|
|
2850
|
-
}
|
|
2851
|
-
catch (error) {
|
|
2852
|
-
console.log('error connectAndaAddSocketMethods', error);
|
|
2853
|
-
}
|
|
2854
|
-
this.startMeetingProgressTimer.startMeetingProgressTimer({
|
|
2855
|
-
startTime: Date.now() / 1000,
|
|
2856
|
-
parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },
|
|
2857
|
-
});
|
|
2858
|
-
}
|
|
2859
|
-
}
|
|
2860
|
-
async handleResize() {
|
|
2861
|
-
let fraction = 0;
|
|
2862
|
-
if (window.innerHeight < window.innerWidth &&
|
|
2863
|
-
(this.eventType.value == 'webinar' || this.eventType.value == 'conference')) {
|
|
2864
|
-
const currentHeight = window.innerHeight;
|
|
2865
|
-
fraction = Number((40 / currentHeight).toFixed(3));
|
|
2866
|
-
if (fraction != this.controlHeight.value) {
|
|
2867
|
-
this.updateControlHeight(Number(fraction));
|
|
2868
|
-
}
|
|
2869
|
-
}
|
|
2870
|
-
else {
|
|
2871
|
-
// Set default control button height for portrait mode or other event types
|
|
2872
|
-
const currentHeight = window.innerHeight;
|
|
2873
|
-
fraction = Number((40 / currentHeight).toFixed(3));
|
|
2874
|
-
fraction = Number(fraction);
|
|
2875
|
-
if (fraction != this.controlHeight.value) {
|
|
2876
|
-
this.updateControlHeight(Number(fraction));
|
|
2877
|
-
}
|
|
2878
|
-
}
|
|
2879
|
-
const dimensions = this.computeDimensionsMethod({
|
|
2880
|
-
containerWidthFraction: 1,
|
|
2881
|
-
containerHeightFraction: 1,
|
|
2882
|
-
mainSize: this.mainHeightWidth.value,
|
|
2883
|
-
doStack: true,
|
|
2884
|
-
defaultFraction: this.eventType.value == 'webinar' || this.eventType.value == 'conference'
|
|
2885
|
-
? 1 - fraction
|
|
2886
|
-
: 1,
|
|
2887
|
-
});
|
|
2888
|
-
this.updateComponentSizes(dimensions);
|
|
2889
|
-
const orientation = this.checkOrientation();
|
|
2890
|
-
if (orientation == 'portrait') {
|
|
2891
|
-
if (!this.isWideScreen.value) {
|
|
2892
|
-
if (this.shareScreenStarted.value || this.shared.value) {
|
|
2893
|
-
this.updateScreenForceFullDisplay(true);
|
|
2894
|
-
}
|
|
2895
|
-
}
|
|
2896
|
-
}
|
|
2897
|
-
// Updates the main grid view
|
|
2898
|
-
await this.prepopulateUserMedia.prepopulateUserMedia({
|
|
2899
|
-
name: this.hostLabel.value,
|
|
2900
|
-
parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },
|
|
2901
|
-
});
|
|
2902
|
-
// Updates the mini grid view
|
|
2903
|
-
await this.onScreenChanges.onScreenChanges({
|
|
2904
|
-
changed: true,
|
|
2905
|
-
parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },
|
|
2906
|
-
});
|
|
2907
|
-
}
|
|
2908
|
-
async disconnectAllSockets(consume_sockets) {
|
|
2909
|
-
for (const socket of consume_sockets) {
|
|
2910
|
-
try {
|
|
2911
|
-
const ip = Object.keys(socket)[0];
|
|
2912
|
-
await socket[ip].disconnect();
|
|
2913
|
-
}
|
|
2914
|
-
catch (error) {
|
|
2915
|
-
console.log(`Error disconnecting socket with IP: ${Object.keys(socket)[0]}`, error);
|
|
2916
|
-
}
|
|
2917
|
-
}
|
|
2918
|
-
}
|
|
2919
|
-
async closeAndReset() {
|
|
2920
|
-
//close and clean up all sockets, modals,... and reset all states to initial values
|
|
2921
|
-
this.updateIsMessagesModalVisible(false);
|
|
2922
|
-
this.updateIsParticipantsModalVisible(false);
|
|
2923
|
-
this.updateIsWaitingModalVisible(false);
|
|
2924
|
-
this.updateIsRequestsModalVisible(false);
|
|
2925
|
-
this.updateIsCoHostModalVisible(false);
|
|
2926
|
-
this.updateIsSettingsModalVisible(false);
|
|
2927
|
-
this.updateIsDisplaySettingsModalVisible(false);
|
|
2928
|
-
this.updateIsMediaSettingsModalVisible(false);
|
|
2929
|
-
this.updateIsMenuModalVisible(false);
|
|
2930
|
-
this.updateIsShareEventModalVisible(false);
|
|
2931
|
-
this.updateIsConfirmExitModalVisible(false);
|
|
2932
|
-
await this.disconnectAllSockets(this.consume_sockets.value);
|
|
2933
|
-
await this.updateStatesToInitialValues();
|
|
2934
|
-
this.updateMeetingProgressTime('00:00:00');
|
|
2935
|
-
this.updateMeetingElapsedTime(0);
|
|
2936
|
-
this.updateRecordingProgressTime('00:00:00');
|
|
2937
|
-
this.updateRecordElapsedTime(0);
|
|
2938
|
-
this.updateShowRecordButtons(false);
|
|
2939
|
-
this.updateIsConfigureWhiteboardModalVisible(false);
|
|
2940
|
-
this.updateIsWhiteboardModalVisible(false);
|
|
2941
|
-
this.updateIsMenuModalVisible(false);
|
|
2942
|
-
this.updateIsRecordingModalVisible(false);
|
|
2943
|
-
this.updateIsPollModalVisible(false);
|
|
2944
|
-
this.updateIsBreakoutRoomsModalVisible(false);
|
|
2945
|
-
this.updateIsBackgroundModalVisible(false);
|
|
2946
|
-
this.updateIsLoadingModalVisible(false);
|
|
2947
|
-
this.updateIsConfirmHereModalVisible(false);
|
|
2948
|
-
await sleep({ ms: 500 });
|
|
2949
|
-
this.updateValidated(false);
|
|
2950
|
-
//if on web, reload the page
|
|
2951
|
-
window.location.reload();
|
|
2952
|
-
}
|
|
2953
|
-
computeDimensionsMethod = ({ containerWidthFraction = 1, containerHeightFraction = 1, mainSize, doStack = true, defaultFraction, }) => {
|
|
2954
|
-
const parentWidth = window.innerWidth * containerWidthFraction;
|
|
2955
|
-
const parentHeight = window.innerHeight * containerHeightFraction * defaultFraction;
|
|
2956
|
-
let isWideScreen = parentWidth >= 768;
|
|
2957
|
-
if (!isWideScreen && parentWidth > 1.5 * parentHeight) {
|
|
2958
|
-
isWideScreen = true;
|
|
2959
|
-
}
|
|
2960
|
-
this.updateIsWideScreen(isWideScreen);
|
|
2961
|
-
const dimensions = this.calculateDimensions({
|
|
2962
|
-
parentWidth,
|
|
2963
|
-
parentHeight,
|
|
2964
|
-
isWideScreen,
|
|
2965
|
-
mainSize,
|
|
2966
|
-
doStack,
|
|
2967
|
-
});
|
|
2968
|
-
return dimensions;
|
|
2969
|
-
};
|
|
2970
|
-
calculateDimensions({ parentWidth, parentHeight, isWideScreen, mainSize, doStack, }) {
|
|
2971
|
-
if (doStack) {
|
|
2972
|
-
return isWideScreen
|
|
2973
|
-
? {
|
|
2974
|
-
mainHeight: Math.floor(parentHeight),
|
|
2975
|
-
otherHeight: Math.floor(parentHeight),
|
|
2976
|
-
mainWidth: Math.floor((mainSize / 100) * parentWidth),
|
|
2977
|
-
otherWidth: Math.floor(((100 - mainSize) / 100) * parentWidth),
|
|
2978
|
-
}
|
|
2979
|
-
: {
|
|
2980
|
-
mainHeight: Math.floor((mainSize / 100) * parentHeight),
|
|
2981
|
-
otherHeight: Math.floor(((100 - mainSize) / 100) * parentHeight),
|
|
2982
|
-
mainWidth: Math.floor(parentWidth),
|
|
2983
|
-
otherWidth: Math.floor(parentWidth),
|
|
2984
|
-
};
|
|
2985
|
-
}
|
|
2986
|
-
else {
|
|
2987
|
-
return {
|
|
2988
|
-
mainHeight: Math.floor(parentHeight),
|
|
2989
|
-
otherHeight: Math.floor(parentHeight),
|
|
2990
|
-
mainWidth: Math.floor(parentWidth),
|
|
2991
|
-
otherWidth: Math.floor(parentWidth),
|
|
2992
|
-
};
|
|
2993
|
-
}
|
|
2994
|
-
}
|
|
2995
|
-
handleOrientationChange() {
|
|
2996
|
-
window.addEventListener('resize', this.handleResize.bind(this));
|
|
2997
|
-
window.addEventListener('orientationchange', this.handleResize.bind(this));
|
|
2998
|
-
}
|
|
2999
|
-
setupResizeListener() {
|
|
3000
|
-
this.handleResize();
|
|
3001
|
-
}
|
|
3002
|
-
orientation = window.innerHeight > window.innerWidth ? 'portrait' : 'landscape';
|
|
3003
|
-
async joinRoom(data) {
|
|
3004
|
-
const { socket, roomName, islevel, member, sec, apiUserName } = data;
|
|
3005
|
-
try {
|
|
3006
|
-
const response = await this.joinRoomClient.joinRoomClient({
|
|
3007
|
-
socket,
|
|
3008
|
-
roomName,
|
|
3009
|
-
islevel,
|
|
3010
|
-
member,
|
|
3011
|
-
sec,
|
|
3012
|
-
apiUserName,
|
|
3013
|
-
});
|
|
3014
|
-
return response;
|
|
3015
|
-
}
|
|
3016
|
-
catch (error) {
|
|
3017
|
-
console.log('Error joining room:', error);
|
|
3018
|
-
throw new Error('Failed to join the room. Please check your connection and try again.');
|
|
3019
|
-
}
|
|
3020
|
-
}
|
|
3021
|
-
async join_Room({ socket, roomName, islevel, member, sec, apiUserName, }) {
|
|
3022
|
-
const data = await this.joinRoom({
|
|
3023
|
-
socket: socket,
|
|
3024
|
-
roomName: roomName,
|
|
3025
|
-
islevel: islevel,
|
|
3026
|
-
member: member,
|
|
3027
|
-
sec: sec,
|
|
3028
|
-
apiUserName: apiUserName,
|
|
3029
|
-
});
|
|
3030
|
-
if (data && data.success) {
|
|
3031
|
-
this.roomData.next(data);
|
|
3032
|
-
try {
|
|
3033
|
-
this.updateRoomParametersClient.updateRoomParametersClient({
|
|
3034
|
-
parameters: {
|
|
3035
|
-
...this.getAllParams(),
|
|
3036
|
-
...this.mediaSFUFunctions(),
|
|
3037
|
-
data: data,
|
|
3038
|
-
},
|
|
3039
|
-
});
|
|
3040
|
-
if (data.isHost) {
|
|
3041
|
-
this.updateIslevel('2');
|
|
3042
|
-
}
|
|
3043
|
-
else {
|
|
3044
|
-
this.updateIslevel('1');
|
|
3045
|
-
}
|
|
3046
|
-
if (data.secureCode) {
|
|
3047
|
-
this.updateAdminPasscode(data.secureCode);
|
|
3048
|
-
}
|
|
3049
|
-
if (data.rtpCapabilities) {
|
|
3050
|
-
const device_ = await this.createDeviceClient.createDeviceClient({
|
|
3051
|
-
rtpCapabilities: data.rtpCapabilities,
|
|
3052
|
-
});
|
|
3053
|
-
if (device_) {
|
|
3054
|
-
this.device.next(device_);
|
|
3055
|
-
}
|
|
3056
|
-
}
|
|
3057
|
-
}
|
|
3058
|
-
catch {
|
|
3059
|
-
/* handle error */
|
|
3060
|
-
}
|
|
3061
|
-
}
|
|
3062
|
-
else {
|
|
3063
|
-
this.updateValidated(false);
|
|
3064
|
-
try {
|
|
3065
|
-
if (this.showAlert && data?.reason) {
|
|
3066
|
-
this.showAlert({ message: data?.reason, type: 'danger', duration: 3000 });
|
|
3067
|
-
}
|
|
3068
|
-
}
|
|
3069
|
-
catch {
|
|
3070
|
-
/* handle error */
|
|
3071
|
-
}
|
|
3072
|
-
}
|
|
3073
|
-
}
|
|
3074
|
-
updateStatesToInitialValues = async () => {
|
|
3075
|
-
const initialValues = initialValuesState;
|
|
3076
|
-
const updateFunctions = this.getAllParams();
|
|
3077
|
-
for (const key in initialValues) {
|
|
3078
|
-
if (Object.prototype.hasOwnProperty.call(initialValues, key)) {
|
|
3079
|
-
const updateFunctionName = `update${key.charAt(0).toUpperCase() + key.slice(1)}`;
|
|
3080
|
-
const updateFunction = updateFunctions[updateFunctionName];
|
|
3081
|
-
if (typeof updateFunction === 'function') {
|
|
3082
|
-
try {
|
|
3083
|
-
updateFunction(initialValues[key]);
|
|
3084
|
-
}
|
|
3085
|
-
catch {
|
|
3086
|
-
/* handle error */
|
|
3087
|
-
}
|
|
3088
|
-
}
|
|
3089
|
-
}
|
|
3090
|
-
}
|
|
3091
|
-
};
|
|
3092
|
-
faMicrophone = faMicrophone;
|
|
3093
|
-
faMicrophoneSlash = faMicrophoneSlash;
|
|
3094
|
-
faVideo = faVideo;
|
|
3095
|
-
faVideoSlash = faVideoSlash;
|
|
3096
|
-
faSync = faSync;
|
|
3097
|
-
faPhone = faPhone;
|
|
3098
|
-
faShareAlt = faShareAlt;
|
|
3099
|
-
faComments = faComments;
|
|
3100
|
-
onCloseMenuModal = () => {
|
|
3101
|
-
this.updateIsMenuModalVisible(false);
|
|
3102
|
-
};
|
|
3103
|
-
onEventSettingsClose = () => {
|
|
3104
|
-
this.updateIsSettingsModalVisible(false);
|
|
3105
|
-
};
|
|
3106
|
-
onCoHostClose = () => {
|
|
3107
|
-
this.updateIsCoHostModalVisible(false);
|
|
3108
|
-
};
|
|
3109
|
-
onMediaSettingsClose = () => {
|
|
3110
|
-
this.updateIsMediaSettingsModalVisible(false);
|
|
3111
|
-
};
|
|
3112
|
-
onDisplaySettingsClose = () => {
|
|
3113
|
-
this.updateIsDisplaySettingsModalVisible(false);
|
|
3114
|
-
};
|
|
3115
|
-
onPollClose = () => {
|
|
3116
|
-
this.updateIsPollModalVisible(false);
|
|
3117
|
-
};
|
|
3118
|
-
onBreakoutRoomsClose = () => {
|
|
3119
|
-
this.updateIsBreakoutRoomsModalVisible(false);
|
|
3120
|
-
};
|
|
3121
|
-
onConfigureWhiteboardClose = () => {
|
|
3122
|
-
this.updateIsConfigureWhiteboardModalVisible(false);
|
|
3123
|
-
};
|
|
3124
|
-
onMessagesClose = () => {
|
|
3125
|
-
this.updateIsMessagesModalVisible(false);
|
|
3126
|
-
};
|
|
3127
|
-
onRecordingClose = () => {
|
|
3128
|
-
this.updateIsRecordingModalVisible(false);
|
|
3129
|
-
};
|
|
3130
|
-
onParticipantsClose = () => {
|
|
3131
|
-
this.updateIsParticipantsModalVisible(false);
|
|
3132
|
-
};
|
|
3133
|
-
onBackgroundClose = () => {
|
|
3134
|
-
this.updateIsBackgroundModalVisible(false);
|
|
3135
|
-
};
|
|
3136
|
-
onConfirmExitClose = () => {
|
|
3137
|
-
this.updateIsConfirmExitModalVisible(false);
|
|
3138
|
-
};
|
|
3139
|
-
onConfirmHereClose = () => {
|
|
3140
|
-
this.updateIsConfirmHereModalVisible(false);
|
|
3141
|
-
};
|
|
3142
|
-
onScreenboardClose = () => {
|
|
3143
|
-
this.updateIsScreenboardModalVisible(false);
|
|
3144
|
-
};
|
|
3145
|
-
onShareEventClose = () => {
|
|
3146
|
-
this.updateIsShareEventModalVisible(false);
|
|
3147
|
-
};
|
|
3148
|
-
onAlertHide = () => {
|
|
3149
|
-
this.updateAlertVisible(false);
|
|
3150
|
-
};
|
|
3151
|
-
messageWidget = {
|
|
3152
|
-
component: MessageWidget,
|
|
3153
|
-
injector: this.createInjector({
|
|
3154
|
-
icon: this.faComments,
|
|
3155
|
-
showBadge: this.showMessagesBadge.value,
|
|
3156
|
-
badgeValue: 1,
|
|
3157
|
-
iconColor: 'black',
|
|
3158
|
-
}),
|
|
3159
|
-
};
|
|
3160
|
-
controlChatButtons = [];
|
|
3161
|
-
controlChatButtonsArray = [
|
|
3162
|
-
{
|
|
3163
|
-
icon: this.faShareAlt,
|
|
3164
|
-
active: true,
|
|
3165
|
-
alternateIcon: this.faShareAlt,
|
|
3166
|
-
onPress: () => this.updateIsShareEventModalVisible(!this.isShareEventModalVisible.value),
|
|
3167
|
-
activeColor: 'black',
|
|
3168
|
-
inActiveColor: 'black',
|
|
3169
|
-
show: true,
|
|
3170
|
-
},
|
|
3171
|
-
{
|
|
3172
|
-
customComponent: this.messageWidget,
|
|
3173
|
-
onPress: () => this.launchMessages.launchMessages({
|
|
3174
|
-
updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),
|
|
3175
|
-
isMessagesModalVisible: this.isMessagesModalVisible.value,
|
|
3176
|
-
}),
|
|
3177
|
-
show: true,
|
|
3178
|
-
},
|
|
3179
|
-
{
|
|
3180
|
-
icon: this.faSync,
|
|
3181
|
-
active: true,
|
|
3182
|
-
alternateIcon: this.faSync,
|
|
3183
|
-
onPress: () => this.switchVideoAlt.switchVideoAlt({
|
|
3184
|
-
parameters: {
|
|
3185
|
-
...this.getAllParams(),
|
|
3186
|
-
...this.mediaSFUFunctions(),
|
|
3187
|
-
},
|
|
3188
|
-
}),
|
|
3189
|
-
activeColor: 'black',
|
|
3190
|
-
inActiveColor: 'black',
|
|
3191
|
-
show: true,
|
|
3192
|
-
},
|
|
3193
|
-
{
|
|
3194
|
-
icon: this.faVideoSlash,
|
|
3195
|
-
alternateIcon: this.faVideo,
|
|
3196
|
-
active: () => this.videoActive.value,
|
|
3197
|
-
onPress: () => this.clickVideo.clickVideo({
|
|
3198
|
-
parameters: {
|
|
3199
|
-
...this.getAllParams(),
|
|
3200
|
-
...this.mediaSFUFunctions(),
|
|
3201
|
-
},
|
|
3202
|
-
}),
|
|
3203
|
-
activeColor: 'green',
|
|
3204
|
-
inActiveColor: 'red',
|
|
3205
|
-
show: true,
|
|
3206
|
-
},
|
|
3207
|
-
{
|
|
3208
|
-
icon: this.faMicrophoneSlash,
|
|
3209
|
-
alternateIcon: this.faMicrophone,
|
|
3210
|
-
active: () => this.micActive.value,
|
|
3211
|
-
onPress: () => this.clickAudio.clickAudio({
|
|
3212
|
-
parameters: {
|
|
3213
|
-
...this.getAllParams(),
|
|
3214
|
-
...this.mediaSFUFunctions(),
|
|
3215
|
-
},
|
|
3216
|
-
}),
|
|
3217
|
-
activeColor: 'green',
|
|
3218
|
-
inActiveColor: 'red',
|
|
3219
|
-
show: true,
|
|
3220
|
-
},
|
|
3221
|
-
{
|
|
3222
|
-
icon: this.faPhone,
|
|
3223
|
-
active: this.endCallActive.value,
|
|
3224
|
-
onPress: () => this.launchConfirmExit.launchConfirmExit({
|
|
3225
|
-
updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),
|
|
3226
|
-
isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,
|
|
3227
|
-
}),
|
|
3228
|
-
activeColor: 'green',
|
|
3229
|
-
inActiveColor: 'red',
|
|
3230
|
-
show: true,
|
|
3231
|
-
},
|
|
3232
|
-
];
|
|
3233
|
-
updateControlChatButtons() {
|
|
3234
|
-
this.controlChatButtons = this.controlChatButtonsArray.map((button) => {
|
|
3235
|
-
return {
|
|
3236
|
-
...button,
|
|
3237
|
-
show: typeof button.show === 'function' ? button.show() : button.show,
|
|
3238
|
-
active: typeof button.active === 'function' ? button.active() : button.active,
|
|
3239
|
-
};
|
|
3240
|
-
});
|
|
3241
|
-
}
|
|
3242
|
-
async connect_Socket(apiUserName, apiKey, apiToken) {
|
|
3243
|
-
if (this.socket.value && this.socket.value.id) {
|
|
3244
|
-
this.socket.value.on('disconnect', async () => {
|
|
3245
|
-
await this.disconnect.disconnect({
|
|
3246
|
-
showAlert: this.showAlert.bind(this),
|
|
3247
|
-
redirectURL: this.redirectURL.value,
|
|
3248
|
-
onWeb: true,
|
|
3249
|
-
updateValidated: this.updateValidated.bind(this),
|
|
3250
|
-
});
|
|
3251
|
-
if (this.videoAlreadyOn.value) {
|
|
3252
|
-
await this.clickVideo.clickVideo({
|
|
3253
|
-
parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },
|
|
3254
|
-
});
|
|
3255
|
-
}
|
|
3256
|
-
if (this.audioAlreadyOn.value) {
|
|
3257
|
-
await this.clickAudio.clickAudio({
|
|
3258
|
-
parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },
|
|
3259
|
-
});
|
|
3260
|
-
}
|
|
3261
|
-
await this.closeAndReset();
|
|
3262
|
-
});
|
|
3263
|
-
this.socket.value.on('allMembers', async (membersData) => {
|
|
3264
|
-
if (membersData) {
|
|
3265
|
-
await this.allMembers.allMembers({
|
|
3266
|
-
apiUserName: apiUserName,
|
|
3267
|
-
apiKey: '', //not recommended - use apiToken instead. Use for testing/development only
|
|
3268
|
-
apiToken: apiToken,
|
|
3269
|
-
members: membersData.members,
|
|
3270
|
-
requestss: membersData.requests ? membersData.requests : this.requestList.value,
|
|
3271
|
-
coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,
|
|
3272
|
-
coHostRes: membersData.coHostResponsibilities
|
|
3273
|
-
? membersData.coHostResponsibilities
|
|
3274
|
-
: this.coHostResponsibility.value,
|
|
3275
|
-
parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },
|
|
3276
|
-
consume_sockets: this.consume_sockets.value,
|
|
3277
|
-
});
|
|
3278
|
-
}
|
|
3279
|
-
});
|
|
3280
|
-
this.socket.value.on('allMembersRest', async (membersData) => {
|
|
3281
|
-
if (membersData) {
|
|
3282
|
-
await this.allMembersRest.allMembersRest({
|
|
3283
|
-
apiUserName: apiUserName,
|
|
3284
|
-
apiKey: '', // not recommended - use apiToken instead. Use for testing/development only
|
|
3285
|
-
members: membersData.members,
|
|
3286
|
-
apiToken: apiToken,
|
|
3287
|
-
settings: membersData.settings,
|
|
3288
|
-
coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,
|
|
3289
|
-
coHostRes: membersData.coHostResponsibilities
|
|
3290
|
-
? membersData.coHostResponsibilities
|
|
3291
|
-
: this.coHostResponsibility.value,
|
|
3292
|
-
parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },
|
|
3293
|
-
consume_sockets: this.consume_sockets.value,
|
|
3294
|
-
});
|
|
3295
|
-
}
|
|
3296
|
-
});
|
|
3297
|
-
this.socket.value.on('producer-media-paused', async ({ producerId, kind, name, }) => {
|
|
3298
|
-
await this.producerMediaPaused.producerMediaPaused({
|
|
3299
|
-
producerId,
|
|
3300
|
-
kind,
|
|
3301
|
-
name,
|
|
3302
|
-
parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },
|
|
3303
|
-
});
|
|
3304
|
-
});
|
|
3305
|
-
this.socket.value.on('producer-media-resumed', async ({ kind, name }) => {
|
|
3306
|
-
await this.producerMediaResumed.producerMediaResumed({
|
|
3307
|
-
kind,
|
|
3308
|
-
name,
|
|
3309
|
-
parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },
|
|
3310
|
-
});
|
|
3311
|
-
});
|
|
3312
|
-
this.socket.value.on('producer-media-closed', async ({ producerId, kind, }) => {
|
|
3313
|
-
if (producerId && kind) {
|
|
3314
|
-
await this.producerMediaClosed.producerMediaClosed({
|
|
3315
|
-
producerId,
|
|
3316
|
-
kind,
|
|
3317
|
-
parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },
|
|
3318
|
-
});
|
|
3319
|
-
}
|
|
3320
|
-
});
|
|
3321
|
-
this.socket.value.on('meetingEnded', async () => {
|
|
3322
|
-
await this.meetingEnded.meetingEnded({
|
|
3323
|
-
showAlert: this.showAlert.bind(this),
|
|
3324
|
-
redirectURL: this.redirectURL.value,
|
|
3325
|
-
onWeb: true,
|
|
3326
|
-
eventType: this.eventType.value,
|
|
3327
|
-
updateValidated: this.updateValidated.bind(this),
|
|
3328
|
-
});
|
|
3329
|
-
if (this.videoAlreadyOn.value) {
|
|
3330
|
-
await this.clickVideo.clickVideo({
|
|
3331
|
-
parameters: {
|
|
3332
|
-
...this.getAllParams(),
|
|
3333
|
-
...this.mediaSFUFunctions(),
|
|
3334
|
-
},
|
|
3335
|
-
});
|
|
3336
|
-
}
|
|
3337
|
-
if (this.audioAlreadyOn.value) {
|
|
3338
|
-
await this.clickAudio.clickAudio({
|
|
3339
|
-
parameters: {
|
|
3340
|
-
...this.getAllParams(),
|
|
3341
|
-
...this.mediaSFUFunctions(),
|
|
3342
|
-
},
|
|
3343
|
-
});
|
|
3344
|
-
}
|
|
3345
|
-
await this.closeAndReset();
|
|
3346
|
-
});
|
|
3347
|
-
this.socket.value.on('disconnectUserSelf', async () => {
|
|
3348
|
-
await this.disconnectUserSelf.disconnectUserSelf({
|
|
3349
|
-
socket: this.socket.value,
|
|
3350
|
-
member: this.member.value,
|
|
3351
|
-
roomName: this.roomName.value,
|
|
3352
|
-
});
|
|
3353
|
-
});
|
|
3354
|
-
this.socket.value.on('receiveMessage', async ({ message }) => {
|
|
3355
|
-
await this.receiveMessage.receiveMessage({
|
|
3356
|
-
message,
|
|
3357
|
-
messages: this.messages.value,
|
|
3358
|
-
participantsAll: this.participantsAll.value,
|
|
3359
|
-
member: this.member.value,
|
|
3360
|
-
eventType: this.eventType.value,
|
|
3361
|
-
islevel: this.islevel.value,
|
|
3362
|
-
coHost: this.coHost.value,
|
|
3363
|
-
updateMessages: this.updateMessages.bind(this),
|
|
3364
|
-
updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),
|
|
3365
|
-
});
|
|
3366
|
-
});
|
|
3367
|
-
this.socket.value.on('meetingTimeRemaining', async ({ timeRemaining }) => {
|
|
3368
|
-
await this.meetingTimeRemaining.meetingTimeRemaining({
|
|
3369
|
-
timeRemaining,
|
|
3370
|
-
showAlert: this.showAlert.bind(this),
|
|
3371
|
-
eventType: this.eventType.value,
|
|
3372
|
-
});
|
|
3373
|
-
});
|
|
3374
|
-
this.socket.value.on('meetingStillThere', async () => {
|
|
3375
|
-
this.meetingStillThere.meetingStillThere({
|
|
3376
|
-
updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),
|
|
3377
|
-
});
|
|
3378
|
-
});
|
|
3379
|
-
this.socket.value.on('updateConsumingDomains', async ({ domains, alt_domains }) => {
|
|
3380
|
-
await this.updateConsumingDomains.updateConsumingDomains({
|
|
3381
|
-
domains,
|
|
3382
|
-
alt_domains,
|
|
3383
|
-
apiUserName,
|
|
3384
|
-
apiKey,
|
|
3385
|
-
apiToken,
|
|
3386
|
-
parameters: {
|
|
3387
|
-
...this.getAllParams(),
|
|
3388
|
-
...this.mediaSFUFunctions(),
|
|
3389
|
-
},
|
|
3390
|
-
});
|
|
3391
|
-
});
|
|
3392
|
-
await this.join_Room({
|
|
3393
|
-
socket: this.socket.value,
|
|
3394
|
-
roomName: this.roomName.value,
|
|
3395
|
-
islevel: this.islevel.value,
|
|
3396
|
-
member: this.member.value,
|
|
3397
|
-
sec: this.apiToken.value,
|
|
3398
|
-
apiUserName: this.apiUserName.value,
|
|
3399
|
-
});
|
|
3400
|
-
await this.receiveRoomMessages.receiveRoomMessages({
|
|
3401
|
-
socket: this.socket.value,
|
|
3402
|
-
roomName: this.roomName.value,
|
|
3403
|
-
updateMessages: this.updateMessages.bind(this),
|
|
3404
|
-
});
|
|
3405
|
-
this.prepopulateUserMedia.prepopulateUserMedia({
|
|
3406
|
-
name: this.hostLabel.value,
|
|
3407
|
-
parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },
|
|
3408
|
-
});
|
|
3409
|
-
return this.socket.value;
|
|
3410
|
-
}
|
|
3411
|
-
else {
|
|
3412
|
-
return null;
|
|
3413
|
-
}
|
|
3414
|
-
}
|
|
3415
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: MediasfuChat, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i1.UpdateMiniCardsGrid }, { token: i2.MixStreams }, { token: i3.DispStreams }, { token: i4.StopShareScreen }, { token: i5.CheckScreenShare }, { token: i6.StartShareScreen }, { token: i7.RequestScreenShare }, { token: i8.ReorderStreams }, { token: i9.PrepopulateUserMedia }, { token: i10.GetVideos }, { token: i11.RePort }, { token: i12.Trigger }, { token: i13.ConsumerResume }, { token: i14.ConnectSendTransport }, { token: i15.ConnectSendTransportAudio }, { token: i16.ConnectSendTransportVideo }, { token: i17.ConnectSendTransportScreen }, { token: i18.ProcessConsumerTransports }, { token: i19.ResumePauseStreams }, { token: i20.Readjust }, { token: i21.CheckGrid }, { token: i22.GetEstimate }, { token: i23.CalculateRowsAndColumns }, { token: i24.AddVideosGrid }, { token: i25.OnScreenChanges }, { token: i26.ChangeVids }, { token: i27.CompareActiveNames }, { token: i28.CompareScreenStates }, { token: i29.CreateSendTransport }, { token: i30.ResumeSendTransportAudio }, { token: i31.ReceiveAllPipedTransports }, { token: i32.DisconnectSendTransportVideo }, { token: i33.DisconnectSendTransportAudio }, { token: i34.DisconnectSendTransportScreen }, { token: i35.GetPipedProducersAlt }, { token: i36.SignalNewConsumerTransport }, { token: i37.ConnectRecvTransport }, { token: i38.ReUpdateInter }, { token: i39.UpdateParticipantAudioDecibels }, { token: i40.CloseAndResize }, { token: i41.AutoAdjust }, { token: i42.SwitchUserVideoAlt }, { token: i43.SwitchUserVideo }, { token: i44.SwitchUserAudio }, { token: i45.GetDomains }, { token: i46.FormatNumber }, { token: i47.ConnectIps }, { token: i48.CreateDeviceClient }, { token: i49.CaptureCanvasStream }, { token: i50.ResumePauseAudioStreams }, { token: i51.ProcessConsumerTransportsAudio }, { token: i52.LaunchMessages }, { token: i53.LaunchConfirmExit }, { token: i54.StartMeetingProgressTimer }, { token: i55.ProducerMediaPaused }, { token: i56.ProducerMediaResumed }, { token: i57.ProducerMediaClosed }, { token: i58.MeetingEnded }, { token: i59.DisconnectUserSelf }, { token: i60.ReceiveMessage }, { token: i61.MeetingTimeRemaining }, { token: i62.MeetingStillThere }, { token: i63.AllMembers }, { token: i64.AllMembersRest }, { token: i65.Disconnect }, { token: i66.SocketManager }, { token: i67.JoinRoomClient }, { token: i68.UpdateRoomParametersClient }, { token: i69.ClickVideo }, { token: i70.ClickAudio }, { token: i71.ClickScreenShare }, { token: i72.SwitchVideoAlt }, { token: i73.StreamSuccessVideo }, { token: i74.StreamSuccessAudio }, { token: i75.StreamSuccessScreen }, { token: i76.StreamSuccessAudioSwitch }, { token: i77.CheckPermission }, { token: i78.UpdateConsumingDomains }, { token: i79.ReceiveRoomMessages }], target: i0.ɵɵFactoryTarget.Component });
|
|
3416
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: MediasfuChat, isStandalone: true, selector: "app-mediasfu-chat", inputs: { PrejoinPage: "PrejoinPage", credentials: "credentials", useLocalUIMode: "useLocalUIMode", seedData: "seedData", useSeed: "useSeed", imgSrc: "imgSrc" }, host: { listeners: { "window:resize": "handleResize()", "window:orientationchange": "handleResize()" } }, providers: [CookieService], ngImport: i0, template: `
|
|
3417
|
-
<div
|
|
3418
|
-
class="MediaSFU"
|
|
3419
|
-
[ngStyle]="{
|
|
3420
|
-
height: '100vh',
|
|
3421
|
-
width: '100vw',
|
|
3422
|
-
maxWidth: '100vw',
|
|
3423
|
-
maxHeight: '100vh',
|
|
3424
|
-
overflow: 'hidden'
|
|
3425
|
-
}"
|
|
3426
|
-
>
|
|
3427
|
-
<ng-container *ngIf="!validated.value; else mainContent">
|
|
3428
|
-
<ng-container
|
|
3429
|
-
*ngComponentOutlet="
|
|
3430
|
-
PrejoinPageComponent.component;
|
|
3431
|
-
injector: PrejoinPageComponent.injector
|
|
3432
|
-
"
|
|
3433
|
-
>
|
|
3434
|
-
</ng-container>
|
|
3435
|
-
</ng-container>
|
|
3436
|
-
|
|
3437
|
-
<ng-template #mainContent>
|
|
3438
|
-
<app-main-container-component>
|
|
3439
|
-
<app-main-aspect-component
|
|
3440
|
-
[backgroundColor]="'rgba(217, 227, 234, 0.99)'"
|
|
3441
|
-
[defaultFraction]="1 - controlHeight.value"
|
|
3442
|
-
[showControls]="eventType.value === 'webinar' || eventType.value === 'conference'"
|
|
3443
|
-
[updateIsWideScreen]="updateIsWideScreen"
|
|
3444
|
-
[updateIsMediumScreen]="updateIsMediumScreen"
|
|
3445
|
-
[updateIsSmallScreen]="updateIsSmallScreen"
|
|
3446
|
-
>
|
|
3447
|
-
<app-main-screen-component
|
|
3448
|
-
[doStack]="true"
|
|
3449
|
-
[mainSize]="mainHeightWidth.value"
|
|
3450
|
-
[defaultFraction]="1 - controlHeight.value"
|
|
3451
|
-
[showControls]="eventType.value === 'webinar' || eventType.value === 'conference'"
|
|
3452
|
-
[updateComponentSizes]="updateComponentSizes"
|
|
3453
|
-
>
|
|
3454
|
-
<!-- MainGridComponent removed -->
|
|
3455
|
-
|
|
3456
|
-
<!-- OtherGridComponent -->
|
|
3457
|
-
<app-other-grid-component
|
|
3458
|
-
[height]="componentSizes.value.otherHeight"
|
|
3459
|
-
[width]="componentSizes.value.otherWidth"
|
|
3460
|
-
[backgroundColor]="'rgba(217, 227, 234, 0.99)'"
|
|
3461
|
-
[showAspect]="mainHeightWidth.value !== 100"
|
|
3462
|
-
[timeBackgroundColor]="recordState.value"
|
|
3463
|
-
[showTimer]="mainHeightWidth.value === 0"
|
|
3464
|
-
[meetingProgressTime]="meetingProgressTime.value"
|
|
3465
|
-
>
|
|
3466
|
-
<!-- AudioGrid -->
|
|
3467
|
-
<app-audio-grid [componentsToRender]="audioOnlyStreams.value"></app-audio-grid>
|
|
3468
|
-
|
|
3469
|
-
<!-- Control Buttons for Chat -->
|
|
3470
|
-
<app-control-buttons-component-touch
|
|
3471
|
-
[buttons]="controlChatButtons"
|
|
3472
|
-
[position]="'right'"
|
|
3473
|
-
[location]="'bottom'"
|
|
3474
|
-
[direction]="'vertical'"
|
|
3475
|
-
[showAspect]="eventType.value === 'chat'"
|
|
3476
|
-
></app-control-buttons-component-touch>
|
|
3477
|
-
|
|
3478
|
-
<!-- Flexible Grid -->
|
|
3479
|
-
<app-flexible-grid
|
|
3480
|
-
[customWidth]="gridSizes.value.gridWidth!"
|
|
3481
|
-
[customHeight]="gridSizes.value.gridHeight!"
|
|
3482
|
-
[rows]="gridRows.value"
|
|
3483
|
-
[columns]="gridCols.value"
|
|
3484
|
-
[componentsToRender]="otherGridStreams.value[0]"
|
|
3485
|
-
[backgroundColor]="'rgba(217, 227, 234, 0.99)'"
|
|
3486
|
-
></app-flexible-grid>
|
|
3487
|
-
</app-other-grid-component>
|
|
3488
|
-
</app-main-screen-component>
|
|
3489
|
-
</app-main-aspect-component>
|
|
3490
|
-
|
|
3491
|
-
<!-- SubAspectComponent removed -->
|
|
3492
|
-
</app-main-container-component>
|
|
3493
|
-
</ng-template>
|
|
3494
|
-
|
|
3495
|
-
<!-- Modals to include -->
|
|
3496
|
-
<app-messages-modal
|
|
3497
|
-
[backgroundColor]="
|
|
3498
|
-
eventType.value === 'webinar' || eventType.value === 'conference'
|
|
3499
|
-
? '#f5f5f5'
|
|
3500
|
-
: 'rgba(255, 255, 255, 0.25)'
|
|
3501
|
-
"
|
|
3502
|
-
[isMessagesModalVisible]="isMessagesModalVisible.value"
|
|
3503
|
-
[onMessagesClose]="onMessagesClose"
|
|
3504
|
-
[messages]="messages.value"
|
|
3505
|
-
[eventType]="eventType.value"
|
|
3506
|
-
[member]="member.value"
|
|
3507
|
-
[islevel]="islevel.value"
|
|
3508
|
-
[coHostResponsibility]="coHostResponsibility.value"
|
|
3509
|
-
[coHost]="coHost.value"
|
|
3510
|
-
[startDirectMessage]="startDirectMessage.value"
|
|
3511
|
-
[directMessageDetails]="directMessageDetails.value"
|
|
3512
|
-
[updateStartDirectMessage]="updateStartDirectMessage"
|
|
3513
|
-
[updateDirectMessageDetails]="updateDirectMessageDetails"
|
|
3514
|
-
[showAlert]="showAlert"
|
|
3515
|
-
[roomName]="roomName.value"
|
|
3516
|
-
[socket]="socket.value"
|
|
3517
|
-
[chatSetting]="chatSetting.value"
|
|
3518
|
-
></app-messages-modal>
|
|
3519
|
-
|
|
3520
|
-
<app-confirm-exit-modal
|
|
3521
|
-
[backgroundColor]="'rgba(181, 233, 229, 0.97)'"
|
|
3522
|
-
[isConfirmExitModalVisible]="isConfirmExitModalVisible.value"
|
|
3523
|
-
[onConfirmExitClose]="onConfirmExitClose"
|
|
3524
|
-
[position]="'topRight'"
|
|
3525
|
-
[member]="member.value"
|
|
3526
|
-
[roomName]="roomName.value"
|
|
3527
|
-
[socket]="socket.value"
|
|
3528
|
-
[islevel]="islevel.value"
|
|
3529
|
-
></app-confirm-exit-modal>
|
|
3530
|
-
|
|
3531
|
-
<app-confirm-here-modal
|
|
3532
|
-
[backgroundColor]="'rgba(181, 233, 229, 0.97)'"
|
|
3533
|
-
[isConfirmHereModalVisible]="isConfirmHereModalVisible.value"
|
|
3534
|
-
[onConfirmHereClose]="onConfirmHereClose"
|
|
3535
|
-
[member]="member.value"
|
|
3536
|
-
[roomName]="roomName.value"
|
|
3537
|
-
[socket]="socket.value"
|
|
3538
|
-
></app-confirm-here-modal>
|
|
3539
|
-
|
|
3540
|
-
<app-share-event-modal
|
|
3541
|
-
[isShareEventModalVisible]="isShareEventModalVisible.value"
|
|
3542
|
-
[onShareEventClose]="onShareEventClose"
|
|
3543
|
-
[roomName]="roomName.value"
|
|
3544
|
-
[islevel]="islevel.value"
|
|
3545
|
-
[adminPasscode]="adminPasscode.value"
|
|
3546
|
-
[eventType]="eventType.value"
|
|
3547
|
-
></app-share-event-modal>
|
|
3548
|
-
|
|
3549
|
-
<app-alert-component
|
|
3550
|
-
[visible]="alertVisible.value"
|
|
3551
|
-
[message]="alertMessage.value"
|
|
3552
|
-
[type]="alertType.value"
|
|
3553
|
-
[duration]="alertDuration.value"
|
|
3554
|
-
[onHide]="onAlertHide"
|
|
3555
|
-
textColor="#ffffff"
|
|
3556
|
-
></app-alert-component>
|
|
3557
|
-
|
|
3558
|
-
<app-loading-modal
|
|
3559
|
-
[isVisible]="isLoadingModalVisible.value"
|
|
3560
|
-
[backgroundColor]="'rgba(217, 227, 234, 0.99)'"
|
|
3561
|
-
displayColor="black"
|
|
3562
|
-
></app-loading-modal>
|
|
3563
|
-
</div>
|
|
3564
|
-
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i80.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i80.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i80.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: AlertComponent, selector: "app-alert-component", inputs: ["visible", "message", "type", "duration", "textColor", "onHide"] }, { kind: "component", type: AudioGrid, selector: "app-audio-grid", inputs: ["componentsToRender"] }, { kind: "component", type: ControlButtonsComponentTouch, selector: "app-control-buttons-component-touch", inputs: ["buttons", "position", "location", "direction", "buttonsContainerStyle", "showAspect"] }, { kind: "component", type: FlexibleGrid, selector: "app-flexible-grid", inputs: ["customWidth", "customHeight", "rows", "columns", "componentsToRender", "backgroundColor"] }, { kind: "component", type: LoadingModal, selector: "app-loading-modal", inputs: ["isVisible", "backgroundColor", "displayColor"] }, { kind: "component", type: ConfirmExitModal, selector: "app-confirm-exit-modal", inputs: ["isConfirmExitModalVisible", "onConfirmExitClose", "position", "backgroundColor", "exitEventOnConfirm", "member", "ban", "roomName", "socket", "islevel"] }, { kind: "component", type: MessagesModal, selector: "app-messages-modal", inputs: ["isMessagesModalVisible", "onMessagesClose", "onSendMessagePress", "messages", "position", "backgroundColor", "activeTabBackgroundColor", "eventType", "member", "islevel", "coHostResponsibility", "coHost", "startDirectMessage", "directMessageDetails", "updateStartDirectMessage", "updateDirectMessageDetails", "showAlert", "roomName", "socket", "chatSetting"] }, { kind: "component", type: ConfirmHereModal, selector: "app-confirm-here-modal", inputs: ["isConfirmHereModalVisible", "position", "backgroundColor", "displayColor", "onConfirmHereClose", "countdownDuration", "socket", "roomName", "member"] }, { kind: "component", type: ShareEventModal, selector: "app-share-event-modal", inputs: ["backgroundColor", "isShareEventModalVisible", "onShareEventClose", "roomName", "adminPasscode", "islevel", "position", "shareButtons", "eventType"] }, { kind: "component", type: MainAspectComponent, selector: "app-main-aspect-component", inputs: ["backgroundColor", "showControls", "containerWidthFraction", "containerHeightFraction", "defaultFraction", "updateIsWideScreen", "updateIsMediumScreen", "updateIsSmallScreen"] }, { kind: "component", type: MainContainerComponent, selector: "app-main-container-component", inputs: ["backgroundColor", "containerWidthFraction", "containerHeightFraction", "marginLeft", "marginRight", "marginTop", "marginBottom", "padding"] }, { kind: "component", type: MainScreenComponent, selector: "app-main-screen-component", inputs: ["mainSize", "doStack", "containerWidthFraction", "containerHeightFraction", "defaultFraction", "showControls", "updateComponentSizes"] }, { kind: "component", type: OtherGridComponent, selector: "app-other-grid-component", inputs: ["backgroundColor", "width", "height", "showAspect", "timeBackgroundColor", "showTimer", "meetingProgressTime"] }] });
|
|
3565
|
-
}
|
|
3566
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: MediasfuChat, decorators: [{
|
|
3567
|
-
type: Component,
|
|
3568
|
-
args: [{ selector: 'app-mediasfu-chat', standalone: true, imports: [
|
|
3569
|
-
RouterOutlet,
|
|
3570
|
-
CommonModule,
|
|
3571
|
-
AlertComponent,
|
|
3572
|
-
AudioGrid,
|
|
3573
|
-
ControlButtonsComponentTouch,
|
|
3574
|
-
FlexibleGrid,
|
|
3575
|
-
LoadingModal,
|
|
3576
|
-
ConfirmExitModal,
|
|
3577
|
-
MessagesModal,
|
|
3578
|
-
ConfirmHereModal,
|
|
3579
|
-
ShareEventModal,
|
|
3580
|
-
WelcomePage,
|
|
3581
|
-
MainAspectComponent,
|
|
3582
|
-
MainContainerComponent,
|
|
3583
|
-
MainScreenComponent,
|
|
3584
|
-
OtherGridComponent,
|
|
3585
|
-
MessageWidget,
|
|
3586
|
-
], template: `
|
|
3587
|
-
<div
|
|
3588
|
-
class="MediaSFU"
|
|
3589
|
-
[ngStyle]="{
|
|
3590
|
-
height: '100vh',
|
|
3591
|
-
width: '100vw',
|
|
3592
|
-
maxWidth: '100vw',
|
|
3593
|
-
maxHeight: '100vh',
|
|
3594
|
-
overflow: 'hidden'
|
|
3595
|
-
}"
|
|
3596
|
-
>
|
|
3597
|
-
<ng-container *ngIf="!validated.value; else mainContent">
|
|
3598
|
-
<ng-container
|
|
3599
|
-
*ngComponentOutlet="
|
|
3600
|
-
PrejoinPageComponent.component;
|
|
3601
|
-
injector: PrejoinPageComponent.injector
|
|
3602
|
-
"
|
|
3603
|
-
>
|
|
3604
|
-
</ng-container>
|
|
3605
|
-
</ng-container>
|
|
3606
|
-
|
|
3607
|
-
<ng-template #mainContent>
|
|
3608
|
-
<app-main-container-component>
|
|
3609
|
-
<app-main-aspect-component
|
|
3610
|
-
[backgroundColor]="'rgba(217, 227, 234, 0.99)'"
|
|
3611
|
-
[defaultFraction]="1 - controlHeight.value"
|
|
3612
|
-
[showControls]="eventType.value === 'webinar' || eventType.value === 'conference'"
|
|
3613
|
-
[updateIsWideScreen]="updateIsWideScreen"
|
|
3614
|
-
[updateIsMediumScreen]="updateIsMediumScreen"
|
|
3615
|
-
[updateIsSmallScreen]="updateIsSmallScreen"
|
|
3616
|
-
>
|
|
3617
|
-
<app-main-screen-component
|
|
3618
|
-
[doStack]="true"
|
|
3619
|
-
[mainSize]="mainHeightWidth.value"
|
|
3620
|
-
[defaultFraction]="1 - controlHeight.value"
|
|
3621
|
-
[showControls]="eventType.value === 'webinar' || eventType.value === 'conference'"
|
|
3622
|
-
[updateComponentSizes]="updateComponentSizes"
|
|
3623
|
-
>
|
|
3624
|
-
<!-- MainGridComponent removed -->
|
|
3625
|
-
|
|
3626
|
-
<!-- OtherGridComponent -->
|
|
3627
|
-
<app-other-grid-component
|
|
3628
|
-
[height]="componentSizes.value.otherHeight"
|
|
3629
|
-
[width]="componentSizes.value.otherWidth"
|
|
3630
|
-
[backgroundColor]="'rgba(217, 227, 234, 0.99)'"
|
|
3631
|
-
[showAspect]="mainHeightWidth.value !== 100"
|
|
3632
|
-
[timeBackgroundColor]="recordState.value"
|
|
3633
|
-
[showTimer]="mainHeightWidth.value === 0"
|
|
3634
|
-
[meetingProgressTime]="meetingProgressTime.value"
|
|
3635
|
-
>
|
|
3636
|
-
<!-- AudioGrid -->
|
|
3637
|
-
<app-audio-grid [componentsToRender]="audioOnlyStreams.value"></app-audio-grid>
|
|
3638
|
-
|
|
3639
|
-
<!-- Control Buttons for Chat -->
|
|
3640
|
-
<app-control-buttons-component-touch
|
|
3641
|
-
[buttons]="controlChatButtons"
|
|
3642
|
-
[position]="'right'"
|
|
3643
|
-
[location]="'bottom'"
|
|
3644
|
-
[direction]="'vertical'"
|
|
3645
|
-
[showAspect]="eventType.value === 'chat'"
|
|
3646
|
-
></app-control-buttons-component-touch>
|
|
3647
|
-
|
|
3648
|
-
<!-- Flexible Grid -->
|
|
3649
|
-
<app-flexible-grid
|
|
3650
|
-
[customWidth]="gridSizes.value.gridWidth!"
|
|
3651
|
-
[customHeight]="gridSizes.value.gridHeight!"
|
|
3652
|
-
[rows]="gridRows.value"
|
|
3653
|
-
[columns]="gridCols.value"
|
|
3654
|
-
[componentsToRender]="otherGridStreams.value[0]"
|
|
3655
|
-
[backgroundColor]="'rgba(217, 227, 234, 0.99)'"
|
|
3656
|
-
></app-flexible-grid>
|
|
3657
|
-
</app-other-grid-component>
|
|
3658
|
-
</app-main-screen-component>
|
|
3659
|
-
</app-main-aspect-component>
|
|
3660
|
-
|
|
3661
|
-
<!-- SubAspectComponent removed -->
|
|
3662
|
-
</app-main-container-component>
|
|
3663
|
-
</ng-template>
|
|
3664
|
-
|
|
3665
|
-
<!-- Modals to include -->
|
|
3666
|
-
<app-messages-modal
|
|
3667
|
-
[backgroundColor]="
|
|
3668
|
-
eventType.value === 'webinar' || eventType.value === 'conference'
|
|
3669
|
-
? '#f5f5f5'
|
|
3670
|
-
: 'rgba(255, 255, 255, 0.25)'
|
|
3671
|
-
"
|
|
3672
|
-
[isMessagesModalVisible]="isMessagesModalVisible.value"
|
|
3673
|
-
[onMessagesClose]="onMessagesClose"
|
|
3674
|
-
[messages]="messages.value"
|
|
3675
|
-
[eventType]="eventType.value"
|
|
3676
|
-
[member]="member.value"
|
|
3677
|
-
[islevel]="islevel.value"
|
|
3678
|
-
[coHostResponsibility]="coHostResponsibility.value"
|
|
3679
|
-
[coHost]="coHost.value"
|
|
3680
|
-
[startDirectMessage]="startDirectMessage.value"
|
|
3681
|
-
[directMessageDetails]="directMessageDetails.value"
|
|
3682
|
-
[updateStartDirectMessage]="updateStartDirectMessage"
|
|
3683
|
-
[updateDirectMessageDetails]="updateDirectMessageDetails"
|
|
3684
|
-
[showAlert]="showAlert"
|
|
3685
|
-
[roomName]="roomName.value"
|
|
3686
|
-
[socket]="socket.value"
|
|
3687
|
-
[chatSetting]="chatSetting.value"
|
|
3688
|
-
></app-messages-modal>
|
|
3689
|
-
|
|
3690
|
-
<app-confirm-exit-modal
|
|
3691
|
-
[backgroundColor]="'rgba(181, 233, 229, 0.97)'"
|
|
3692
|
-
[isConfirmExitModalVisible]="isConfirmExitModalVisible.value"
|
|
3693
|
-
[onConfirmExitClose]="onConfirmExitClose"
|
|
3694
|
-
[position]="'topRight'"
|
|
3695
|
-
[member]="member.value"
|
|
3696
|
-
[roomName]="roomName.value"
|
|
3697
|
-
[socket]="socket.value"
|
|
3698
|
-
[islevel]="islevel.value"
|
|
3699
|
-
></app-confirm-exit-modal>
|
|
3700
|
-
|
|
3701
|
-
<app-confirm-here-modal
|
|
3702
|
-
[backgroundColor]="'rgba(181, 233, 229, 0.97)'"
|
|
3703
|
-
[isConfirmHereModalVisible]="isConfirmHereModalVisible.value"
|
|
3704
|
-
[onConfirmHereClose]="onConfirmHereClose"
|
|
3705
|
-
[member]="member.value"
|
|
3706
|
-
[roomName]="roomName.value"
|
|
3707
|
-
[socket]="socket.value"
|
|
3708
|
-
></app-confirm-here-modal>
|
|
3709
|
-
|
|
3710
|
-
<app-share-event-modal
|
|
3711
|
-
[isShareEventModalVisible]="isShareEventModalVisible.value"
|
|
3712
|
-
[onShareEventClose]="onShareEventClose"
|
|
3713
|
-
[roomName]="roomName.value"
|
|
3714
|
-
[islevel]="islevel.value"
|
|
3715
|
-
[adminPasscode]="adminPasscode.value"
|
|
3716
|
-
[eventType]="eventType.value"
|
|
3717
|
-
></app-share-event-modal>
|
|
3718
|
-
|
|
3719
|
-
<app-alert-component
|
|
3720
|
-
[visible]="alertVisible.value"
|
|
3721
|
-
[message]="alertMessage.value"
|
|
3722
|
-
[type]="alertType.value"
|
|
3723
|
-
[duration]="alertDuration.value"
|
|
3724
|
-
[onHide]="onAlertHide"
|
|
3725
|
-
textColor="#ffffff"
|
|
3726
|
-
></app-alert-component>
|
|
3727
|
-
|
|
3728
|
-
<app-loading-modal
|
|
3729
|
-
[isVisible]="isLoadingModalVisible.value"
|
|
3730
|
-
[backgroundColor]="'rgba(217, 227, 234, 0.99)'"
|
|
3731
|
-
displayColor="black"
|
|
3732
|
-
></app-loading-modal>
|
|
3733
|
-
</div>
|
|
3734
|
-
`, providers: [CookieService] }]
|
|
3735
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i1.UpdateMiniCardsGrid }, { type: i2.MixStreams }, { type: i3.DispStreams }, { type: i4.StopShareScreen }, { type: i5.CheckScreenShare }, { type: i6.StartShareScreen }, { type: i7.RequestScreenShare }, { type: i8.ReorderStreams }, { type: i9.PrepopulateUserMedia }, { type: i10.GetVideos }, { type: i11.RePort }, { type: i12.Trigger }, { type: i13.ConsumerResume }, { type: i14.ConnectSendTransport }, { type: i15.ConnectSendTransportAudio }, { type: i16.ConnectSendTransportVideo }, { type: i17.ConnectSendTransportScreen }, { type: i18.ProcessConsumerTransports }, { type: i19.ResumePauseStreams }, { type: i20.Readjust }, { type: i21.CheckGrid }, { type: i22.GetEstimate }, { type: i23.CalculateRowsAndColumns }, { type: i24.AddVideosGrid }, { type: i25.OnScreenChanges }, { type: i26.ChangeVids }, { type: i27.CompareActiveNames }, { type: i28.CompareScreenStates }, { type: i29.CreateSendTransport }, { type: i30.ResumeSendTransportAudio }, { type: i31.ReceiveAllPipedTransports }, { type: i32.DisconnectSendTransportVideo }, { type: i33.DisconnectSendTransportAudio }, { type: i34.DisconnectSendTransportScreen }, { type: i35.GetPipedProducersAlt }, { type: i36.SignalNewConsumerTransport }, { type: i37.ConnectRecvTransport }, { type: i38.ReUpdateInter }, { type: i39.UpdateParticipantAudioDecibels }, { type: i40.CloseAndResize }, { type: i41.AutoAdjust }, { type: i42.SwitchUserVideoAlt }, { type: i43.SwitchUserVideo }, { type: i44.SwitchUserAudio }, { type: i45.GetDomains }, { type: i46.FormatNumber }, { type: i47.ConnectIps }, { type: i48.CreateDeviceClient }, { type: i49.CaptureCanvasStream }, { type: i50.ResumePauseAudioStreams }, { type: i51.ProcessConsumerTransportsAudio }, { type: i52.LaunchMessages }, { type: i53.LaunchConfirmExit }, { type: i54.StartMeetingProgressTimer }, { type: i55.ProducerMediaPaused }, { type: i56.ProducerMediaResumed }, { type: i57.ProducerMediaClosed }, { type: i58.MeetingEnded }, { type: i59.DisconnectUserSelf }, { type: i60.ReceiveMessage }, { type: i61.MeetingTimeRemaining }, { type: i62.MeetingStillThere }, { type: i63.AllMembers }, { type: i64.AllMembersRest }, { type: i65.Disconnect }, { type: i66.SocketManager }, { type: i67.JoinRoomClient }, { type: i68.UpdateRoomParametersClient }, { type: i69.ClickVideo }, { type: i70.ClickAudio }, { type: i71.ClickScreenShare }, { type: i72.SwitchVideoAlt }, { type: i73.StreamSuccessVideo }, { type: i74.StreamSuccessAudio }, { type: i75.StreamSuccessScreen }, { type: i76.StreamSuccessAudioSwitch }, { type: i77.CheckPermission }, { type: i78.UpdateConsumingDomains }, { type: i79.ReceiveRoomMessages }], propDecorators: { PrejoinPage: [{
|
|
3736
|
-
type: Input
|
|
3737
|
-
}], credentials: [{
|
|
3738
|
-
type: Input
|
|
3739
|
-
}], useLocalUIMode: [{
|
|
3740
|
-
type: Input
|
|
3741
|
-
}], seedData: [{
|
|
3742
|
-
type: Input
|
|
3743
|
-
}], useSeed: [{
|
|
3744
|
-
type: Input
|
|
3745
|
-
}], imgSrc: [{
|
|
3746
|
-
type: Input
|
|
3747
|
-
}], handleResize: [{
|
|
3748
|
-
type: HostListener,
|
|
3749
|
-
args: ['window:resize']
|
|
3750
|
-
}, {
|
|
3751
|
-
type: HostListener,
|
|
3752
|
-
args: ['window:orientationchange']
|
|
3753
|
-
}] } });
|
|
3754
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFzZnUtY2hhdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYXNmdS1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9tZWRpYXNmdS1jb21wb25lbnRzL21lZGlhc2Z1LWNoYXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFFBQVEsRUFFUixLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBFLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsWUFBWSxFQUNaLE9BQU8sRUFDUCxVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixPQUFPLEVBQ1AsWUFBWSxHQUNiLE1BQU0sbUNBQW1DLENBQUM7QUFFM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFN0UseUJBQXlCO0FBQ3pCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZFQUE2RSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUMzRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxpR0FBaUcsQ0FBQztBQUMvSSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyRUFBMkUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2RUFBNkUsQ0FBQztBQUNsSCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtRkFBbUYs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MkIsRUFBRSxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN4RSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN4RCxxQkFBcUIsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM1RCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN0RCxxQkFBcUIsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM1RCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNwRCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN4RCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN4RCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN0RCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN4RCwwQkFBMEIsRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN0RSx1QkFBdUIsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNoRSxzQkFBc0IsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM5RCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNwRCxzQkFBc0IsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM5RCxpQ0FB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QixZQUFZO3dCQUNaLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsc0JBQXNCO3dCQUN0QixtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsYUFBYTtxQkFDZCxZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0pULGFBUVUsQ0FBQyxhQUFhLENBQUM7dXFGQUkxQixXQUFXO3NCQURWLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkE0a0dBLFlBQVk7c0JBRmpCLFlBQVk7dUJBQUMsZUFBZTs7c0JBQzVCLFlBQVk7dUJBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdG9yLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlck91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU29ja2V0IH0gZnJvbSAnc29ja2V0LmlvLWNsaWVudCc7XG5pbXBvcnQge1xuICBmYU1pY3JvcGhvbmVTbGFzaCxcbiAgZmFWaWRlb1NsYXNoLFxuICBmYVBob25lLFxuICBmYUNvbW1lbnRzLFxuICBmYVNoYXJlQWx0LFxuICBmYVN5bmMsXG4gIGZhVmlkZW8sXG4gIGZhTWljcm9waG9uZSxcbn0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcblxuaW1wb3J0IHsgaW5pdGlhbFZhbHVlc1N0YXRlIH0gZnJvbSAnLi4vLi4vbWV0aG9kcy91dGlscy9pbml0aWFsLXZhbHVlcy51dGlsJztcblxuLy8gQ29tcG9uZW50cyBmb3IgZGlzcGxheVxuaW1wb3J0IHsgTWFpbkFzcGVjdENvbXBvbmVudCB9IGZyb20gJy4uL2Rpc3BsYXktY29tcG9uZW50cy9tYWluLWFzcGVjdC1jb21wb25lbnQvbWFpbi1hc3BlY3QtY29tcG9uZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkaW5nTW9kYWwgfSBmcm9tICcuLi9kaXNwbGF5LWNvbXBvbmVudHMvbG9hZGluZy1tb2RhbC9sb2FkaW5nLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb250cm9sQnV0dG9uc0NvbXBvbmVudFRvdWNoIH0gZnJvbSAnLi4vZGlzcGxheS1jb21wb25lbnRzL2NvbnRyb2wtYnV0dG9ucy1jb21wb25lbnQtdG91Y2gvY29udHJvbC1idXR0b25zLWNvbXBvbmVudC10b3VjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3RoZXJHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vZGlzcGxheS1jb21wb25lbnRzL290aGVyLWdyaWQtY29tcG9uZW50L290aGVyLWdyaWQtY29tcG9uZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYWluU2NyZWVuQ29tcG9uZW50IH0gZnJvbSAnLi4vZGlzcGxheS1jb21wb25lbnRzL21haW4tc2NyZWVuLWNvbXBvbmVudC9tYWluLXNjcmVlbi1jb21wb25lbnQuY29tcG9uZW50JztcbmltcG9ydCB7IE1haW5Db250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi9kaXNwbGF5LWNvbXBvbmVudHMvbWFpbi1jb250YWluZXItY29tcG9uZW50L21haW4tY29udGFpbmVyLWNvbXBvbmVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxlcnRDb21wb25lbnQgfSBmcm9tICcuLi9kaXNwbGF5LWNvbXBvbmVudHMvYWxlcnQtY29tcG9uZW50L2FsZXJ0LmNvbXBvbmVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVzc2FnZXNNb2RhbCB9IGZyb20gJy4uL21lc3NhZ2UtY29tcG9uZW50cy9tZXNzYWdlcy1tb2RhbC9tZXNzYWdlcy1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29uZmlybUV4aXRNb2RhbCB9IGZyb20gJy4uL2V4aXQtY29tcG9uZW50cy9jb25maXJtLWV4aXQtbW9kYWwvY29uZmlybS1leGl0LW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb25maXJtSGVyZU1vZGFsIH0gZnJvbSAnLi4vbWlzYy1jb21wb25lbnRzL2NvbmZpcm0taGVyZS1tb2RhbC9jb25maXJtLWhlcmUtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IFNoYXJlRXZlbnRNb2RhbCB9IGZyb20gJy4uL21pc2MtY29tcG9uZW50cy9zaGFyZS1ldmVudC1tb2RhbC9zaGFyZS1ldmVudC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgV2VsY29tZVBhZ2UsXG4gIFdlbGNvbWVQYWdlT3B0aW9ucyxcbn0gZnJvbSAnLi4vbWlzYy1jb21wb25lbnRzL3dlbGNvbWUtcGFnZS93ZWxjb21lLXBhZ2UuY29tcG9uZW50JztcblxuLy8gUGFnaW5hdGlvbiBhbmQgZGlzcGxheSBvZiBtZWRpYVxuaW1wb3J0IHsgRmxleGlibGVHcmlkIH0gZnJvbSAnLi4vZGlzcGxheS1jb21wb25lbnRzL2ZsZXhpYmxlLWdyaWQvZmxleGlibGUtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXVkaW9HcmlkIH0gZnJvbSAnLi4vZGlzcGxheS1jb21wb25lbnRzL2F1ZGlvLWdyaWQvYXVkaW8tZ3JpZC5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBNZXNzYWdlV2lkZ2V0IH0gZnJvbSAnLi4vZGlzcGxheS1jb21wb25lbnRzL2NvbnRyb2wtd2lkZ2V0cy9tZXNzYWdlLXdpZGdldC5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBCdXR0b25Ub3VjaCxcbiAgUmVzcG9uc2VKb2luUm9vbSxcbiAgQ29Ib3N0UmVzcG9uc2liaWxpdHksXG4gIEV2ZW50VHlwZSxcbiAgUGFydGljaXBhbnQsXG4gIENvbnN1bWVTb2NrZXQsXG4gIE1lZXRpbmdSb29tUGFyYW1zLFxuICBWaWRDb25zLFxuICBIUGFyYW1zVHlwZSxcbiAgVlBhcmFtc1R5cGUsXG4gIFNjcmVlblBhcmFtc1R5cGUsXG4gIEFQYXJhbXNUeXBlLFxuICBVc2VyUmVjb3JkaW5nUGFyYW1zLFxuICBTdHJlYW0sXG4gIEF1ZGlvRGVjaWJlbHMsXG4gIFNjcmVlblN0YXRlLFxuICBHcmlkU2l6ZXMsXG4gIEN1c3RvbU1lZGlhQ29tcG9uZW50LFxuICBNZXNzYWdlLFxuICBXYWl0aW5nUm9vbVBhcnRpY2lwYW50LFxuICBDb21wb25lbnRTaXplcyxcbiAgVHJhbnNwb3J0IGFzIFRyYW5zcG9ydFR5cGUsXG4gIFNoYXBlLFxuICBQb2xsLFxuICBCcmVha291dFBhcnRpY2lwYW50LFxuICBXaGl0ZWJvYXJkVXNlcixcbiAgUmVxdWVzdCxcbiAgQWxsTWVtYmVyc0RhdGEsXG4gIEFsbE1lbWJlcnNSZXN0RGF0YSxcbiAgU2VlZERhdGEsXG4gIFVwZGF0ZUNvbnN1bWluZ0RvbWFpbnNEYXRhLFxuICBQcmVKb2luUGFnZU9wdGlvbnMsXG59IGZyb20gJy4uLy4uL0B0eXBlcy90eXBlcyc7XG4vLyBJbXBvcnQgbWV0aG9kcyBmb3IgY29udHJvbFxuaW1wb3J0IHsgTGF1bmNoTWVzc2FnZXMgfSBmcm9tICcuLi8uLi9tZXRob2RzL21lc3NhZ2UtbWV0aG9kcy9sYXVuY2gtbWVzc2FnZXMuc2VydmljZSc7XG5pbXBvcnQgeyBMYXVuY2hDb25maXJtRXhpdCB9IGZyb20gJy4uLy4uL21ldGhvZHMvZXhpdC1tZXRob2RzL2xhdW5jaC1jb25maXJtLWV4aXQuc2VydmljZSc7XG5cbi8vIE1lZGlhc2Z1IGZ1bmN0aW9ucyAtLSBleGFtcGxlc1xuaW1wb3J0IHsgU29ja2V0TWFuYWdlciB9IGZyb20gJy4uLy4uL3NvY2tldHMvc29ja2V0LW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBKb2luUm9vbUNsaWVudCB9IGZyb20gJy4uLy4uL3Byb2R1Y2VyLWNsaWVudC9wcm9kdWNlci1jbGllbnQtZW1pdHMvam9pbi1yb29tLWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFVwZGF0ZVJvb21QYXJhbWV0ZXJzQ2xpZW50IH0gZnJvbSAnLi4vLi4vcHJvZHVjZXItY2xpZW50L3Byb2R1Y2VyLWNsaWVudC1lbWl0cy91cGRhdGUtcm9vbS1wYXJhbWV0ZXJzLWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IENyZWF0ZURldmljZUNsaWVudCB9IGZyb20gJy4uLy4uL3Byb2R1Y2VyLWNsaWVudC9wcm9kdWNlci1jbGllbnQtZW1pdHMvY3JlYXRlLWRldmljZS1jbGllbnQuc2VydmljZSc7XG5cbmltcG9ydCB7IFN3aXRjaFZpZGVvQWx0IH0gZnJvbSAnLi4vLi4vbWV0aG9kcy9zdHJlYW0tbWV0aG9kcy9zd2l0Y2gtdmlkZW8tYWx0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2xpY2tWaWRlbyB9IGZyb20gJy4uLy4uL21ldGhvZHMvc3RyZWFtLW1ldGhvZHMvY2xpY2stdmlkZW8uc2VydmljZSc7XG5pbXBvcnQgeyBDbGlja0F1ZGlvIH0gZnJvbSAnLi4vLi4vbWV0aG9kcy9zdHJlYW0tbWV0aG9kcy9jbGljay1hdWRpby5zZXJ2aWNlJztcbmltcG9ydCB7IENsaWNrU2NyZWVuU2hhcmUgfSBmcm9tICcuLi8uLi9tZXRob2RzL3N0cmVhbS1tZXRob2RzL2NsaWNrLXNjcmVlbi1zaGFyZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0cmVhbVN1Y2Nlc3NWaWRlbyB9IGZyb20gJy4uLy4uL2NvbnN1bWVycy9zdHJlYW0tc3VjY2Vzcy12aWRlby5zZXJ2aWNlJztcbmltcG9ydCB7IFN0cmVhbVN1Y2Nlc3NBdWRpbyB9IGZyb20gJy4uLy4uL2NvbnN1bWVycy9zdHJlYW0tc3VjY2Vzcy1hdWRpby5zZXJ2aWNlJztcbmltcG9ydCB7IFN0cmVhbVN1Y2Nlc3NTY3JlZW4gfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvc3RyZWFtLXN1Y2Nlc3Mtc2NyZWVuLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RyZWFtU3VjY2Vzc0F1ZGlvU3dpdGNoIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL3N0cmVhbS1zdWNjZXNzLWF1ZGlvLXN3aXRjaC5zZXJ2aWNlJztcbmltcG9ydCB7IENoZWNrUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL2NvbnN1bWVycy9jaGVjay1wZXJtaXNzaW9uLnNlcnZpY2UnO1xuXG4vLyBNZWRpYXNmdSBjb25zdW1lciBmdW5jdGlvbnNcbmltcG9ydCB7IFVwZGF0ZU1pbmlDYXJkc0dyaWQgfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvdXBkYXRlLW1pbmktY2FyZHMtZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IE1peFN0cmVhbXMgfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvbWl4LXN0cmVhbXMuc2VydmljZSc7XG5pbXBvcnQgeyBEaXNwU3RyZWFtcyB9IGZyb20gJy4uLy4uL2NvbnN1bWVycy9kaXNwLXN0cmVhbXMuc2VydmljZSc7XG5pbXBvcnQgeyBTdG9wU2hhcmVTY3JlZW4gfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvc3RvcC1zaGFyZS1zY3JlZW4uc2VydmljZSc7XG5pbXBvcnQgeyBDaGVja1NjcmVlblNoYXJlIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL2NoZWNrLXNjcmVlbi1zaGFyZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0YXJ0U2hhcmVTY3JlZW4gfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvc3RhcnQtc2hhcmUtc2NyZWVuLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdFNjcmVlblNoYXJlIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL3JlcXVlc3Qtc2NyZWVuLXNoYXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVvcmRlclN0cmVhbXMgfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvcmVvcmRlci1zdHJlYW1zLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlcG9wdWxhdGVVc2VyTWVkaWEgfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvcHJlcG9wdWxhdGUtdXNlci1tZWRpYS5zZXJ2aWNlJztcbmltcG9ydCB7IEdldFZpZGVvcyB9IGZyb20gJy4uLy4uL2NvbnN1bWVycy9nZXQtdmlkZW9zLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVQb3J0IH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL3JlLXBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBUcmlnZ2VyIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL3RyaWdnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb25zdW1lclJlc3VtZSB9IGZyb20gJy4uLy4uL2NvbnN1bWVycy9jb25zdW1lci1yZXN1bWUuc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0U2VuZFRyYW5zcG9ydEF1ZGlvIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL2Nvbm5lY3Qtc2VuZC10cmFuc3BvcnQtYXVkaW8uc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0U2VuZFRyYW5zcG9ydFZpZGVvIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL2Nvbm5lY3Qtc2VuZC10cmFuc3BvcnQtdmlkZW8uc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0U2VuZFRyYW5zcG9ydFNjcmVlbiB9IGZyb20gJy4uLy4uL2NvbnN1bWVycy9jb25uZWN0LXNlbmQtdHJhbnNwb3J0LXNjcmVlbi5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2Nlc3NDb25zdW1lclRyYW5zcG9ydHMgfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvcHJvY2Vzcy1jb25zdW1lci10cmFuc3BvcnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVzdW1lUGF1c2VTdHJlYW1zIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL3Jlc3VtZS1wYXVzZS1zdHJlYW1zLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVhZGp1c3QgfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvcmVhZGp1c3Quc2VydmljZSc7XG5pbXBvcnQgeyBDaGVja0dyaWQgfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvY2hlY2stZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IEdldEVzdGltYXRlIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL2dldC1lc3RpbWF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IENhbGN1bGF0ZVJvd3NBbmRDb2x1bW5zIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL2NhbGN1bGF0ZS1yb3dzLWFuZC1jb2x1bW5zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWRkVmlkZW9zR3JpZCB9IGZyb20gJy4uLy4uL2NvbnN1bWVycy9hZGQtdmlkZW9zLWdyaWQuc2VydmljZSc7XG5pbXBvcnQgeyBPblNjcmVlbkNoYW5nZXMgfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvb24tc2NyZWVuLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJy4uLy4uL21ldGhvZHMvdXRpbHMvc2xlZXAudXRpbCc7XG5pbXBvcnQgeyBDaGFuZ2VWaWRzIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL2NoYW5nZS12aWRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcGFyZUFjdGl2ZU5hbWVzIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL2NvbXBhcmUtYWN0aXZlLW5hbWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcGFyZVNjcmVlblN0YXRlcyB9IGZyb20gJy4uLy4uL2NvbnN1bWVycy9jb21wYXJlLXNjcmVlbi1zdGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDcmVhdGVTZW5kVHJhbnNwb3J0IH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL2NyZWF0ZS1zZW5kLXRyYW5zcG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc3VtZVNlbmRUcmFuc3BvcnRBdWRpbyB9IGZyb20gJy4uLy4uL2NvbnN1bWVycy9yZXN1bWUtc2VuZC10cmFuc3BvcnQtYXVkaW8uc2VydmljZSc7XG5pbXBvcnQgeyBSZWNlaXZlQWxsUGlwZWRUcmFuc3BvcnRzIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL3JlY2VpdmUtYWxsLXBpcGVkLXRyYW5zcG9ydHMuc2VydmljZSc7XG5pbXBvcnQgeyBEaXNjb25uZWN0U2VuZFRyYW5zcG9ydFZpZGVvIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL2Rpc2Nvbm5lY3Qtc2VuZC10cmFuc3BvcnQtdmlkZW8uc2VydmljZSc7XG5pbXBvcnQgeyBEaXNjb25uZWN0U2VuZFRyYW5zcG9ydEF1ZGlvIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL2Rpc2Nvbm5lY3Qtc2VuZC10cmFuc3BvcnQtYXVkaW8uc2VydmljZSc7XG5pbXBvcnQgeyBEaXNjb25uZWN0U2VuZFRyYW5zcG9ydFNjcmVlbiB9IGZyb20gJy4uLy4uL2NvbnN1bWVycy9kaXNjb25uZWN0LXNlbmQtdHJhbnNwb3J0LXNjcmVlbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbm5lY3RTZW5kVHJhbnNwb3J0IH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL2Nvbm5lY3Qtc2VuZC10cmFuc3BvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBHZXRQaXBlZFByb2R1Y2Vyc0FsdCB9IGZyb20gJy4uLy4uL2NvbnN1bWVycy9nZXQtcGlwZWQtcHJvZHVjZXJzLWFsdC5zZXJ2aWNlJztcbmltcG9ydCB7IFNpZ25hbE5ld0NvbnN1bWVyVHJhbnNwb3J0IH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL3NpZ25hbC1uZXctY29uc3VtZXItdHJhbnNwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdFJlY3ZUcmFuc3BvcnQgfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvY29ubmVjdC1yZWN2LXRyYW5zcG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlVXBkYXRlSW50ZXIgfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvcmUtdXBkYXRlLWludGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXBkYXRlUGFydGljaXBhbnRBdWRpb0RlY2liZWxzIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL3VwZGF0ZS1wYXJ0aWNpcGFudC1hdWRpby1kZWNpYmVscy5zZXJ2aWNlJztcbmltcG9ydCB7IENsb3NlQW5kUmVzaXplIH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL2Nsb3NlLWFuZC1yZXNpemUuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRvQWRqdXN0IH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL2F1dG8tYWRqdXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3dpdGNoVXNlclZpZGVvQWx0IH0gZnJvbSAnLi4vLi4vY29uc3VtZXJzL3N3aXRjaC11c2VyLXZpZGVvLWFsdC5zZXJ2aWNlJztcbmltcG9ydCB7IFN3aXRjaFVzZXJWaWRlbyB9IGZyb20gJy4uLy4uL2NvbnN1bWVycy9zd2l0Y2gtdXNlci12aWRlby5zZXJ2aWNlJztcbmltcG9ydCB7IFN3aXRjaFVzZXJBdWRpbyB9IGZyb20gJy4uLy4uL2NvbnN1bWVycy9zd2l0Y2gtdXNlci1hdWRpby5zZXJ2aWNlJztcbmltcG9ydCB7IFJlY2VpdmVSb29tTWVzc2FnZXMgfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvcmVjZWl2ZS1yb29tLW1lc3NhZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybWF0TnVtYmVyIH0gZnJvbSAnLi4vLi4vbWV0aG9kcy91dGlscy9mb3JtYXQtbnVtYmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdElwcyB9IGZyb20gJy4uLy4uL2NvbnN1bWVycy9jb25uZWN0LWlwcy5zZXJ2aWNlJztcblxuLy8gVXRpbGl0eSBpbXBvcnRzIGZvciBtZWV0aW5nIGFuZCByZWNvcmRpbmcgZnVuY3Rpb25hbGl0eVxuaW1wb3J0IHsgU3RhcnRNZWV0aW5nUHJvZ3Jlc3NUaW1lciB9IGZyb20gJy4uLy4uL21ldGhvZHMvdXRpbHMvbWVldGluZy10aW1lci9zdGFydC1tZWV0aW5nLXByb2dyZXNzLXRpbWVyLnNlcnZpY2UnO1xuXG4vLyBTb2NrZXQgbWV0aG9kcyBmb3IgcGFydGljaXBhbnQgYW5kIG1lZXRpbmcgbWFuYWdlbWVudFxuaW1wb3J0IHsgUHJvZHVjZXJNZWRpYVBhdXNlZCB9IGZyb20gJy4uLy4uL3Byb2R1Y2Vycy9zb2NrZXQtcmVjZWl2ZS1tZXRob2RzL3Byb2R1Y2VyLW1lZGlhLXBhdXNlZC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2R1Y2VyTWVkaWFSZXN1bWVkIH0gZnJvbSAnLi4vLi4vcHJvZHVjZXJzL3NvY2tldC1yZWNlaXZlLW1ldGhvZHMvcHJvZHVjZXItbWVkaWEtcmVzdW1lZC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2R1Y2VyTWVkaWFDbG9zZWQgfSBmcm9tICcuLi8uLi9wcm9kdWNlcnMvc29ja2V0LXJlY2VpdmUtbWV0aG9kcy9wcm9kdWNlci1tZWRpYS1jbG9zZWQuc2VydmljZSc7XG5pbXBvcnQgeyBNZWV0aW5nRW5kZWQgfSBmcm9tICcuLi8uLi9wcm9kdWNlcnMvc29ja2V0LXJlY2VpdmUtbWV0aG9kcy9tZWV0aW5nLWVuZGVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGlzY29ubmVjdFVzZXJTZWxmIH0gZnJvbSAnLi4vLi4vcHJvZHVjZXJzL3NvY2tldC1yZWNlaXZlLW1ldGhvZHMvZGlzY29ubmVjdC11c2VyLXNlbGYuc2VydmljZSc7XG5pbXBvcnQgeyBSZWNlaXZlTWVzc2FnZSB9IGZyb20gJy4uLy4uL3Byb2R1Y2Vycy9zb2NrZXQtcmVjZWl2ZS1tZXRob2RzL3JlY2VpdmUtbWVzc2FnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE1lZXRpbmdUaW1lUmVtYWluaW5nIH0gZnJvbSAnLi4vLi4vcHJvZHVjZXJzL3NvY2tldC1yZWNlaXZlLW1ldGhvZHMvbWVldGluZy10aW1lLXJlbWFpbmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IE1lZXRpbmdTdGlsbFRoZXJlIH0gZnJvbSAnLi4vLi4vcHJvZHVjZXJzL3NvY2tldC1yZWNlaXZlLW1ldGhvZHMvbWVldGluZy1zdGlsbC10aGVyZS5zZXJ2aWNlJztcblxuaW1wb3J0IHsgR2V0RG9tYWlucyB9IGZyb20gJy4uLy4uL3Byb2R1Y2Vycy9zb2NrZXQtcmVjZWl2ZS1tZXRob2RzL2dldC1kb21haW5zLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXBkYXRlQ29uc3VtaW5nRG9tYWlucyB9IGZyb20gJy4uLy4uL3Byb2R1Y2Vycy9zb2NrZXQtcmVjZWl2ZS1tZXRob2RzL3VwZGF0ZS1jb25zdW1pbmctZG9tYWlucy5zZXJ2aWNlJztcbmltcG9ydCB7IEFsbE1lbWJlcnMgfSBmcm9tICcuLi8uLi9wcm9kdWNlcnMvc29ja2V0LXJlY2VpdmUtbWV0aG9kcy9hbGwtbWVtYmVycy5zZXJ2aWNlJztcbmltcG9ydCB7IEFsbE1lbWJlcnNSZXN0IH0gZnJvbSAnLi4vLi4vcHJvZHVjZXJzL3NvY2tldC1yZWNlaXZlLW1ldGhvZHMvYWxsLW1lbWJlcnMtcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IERpc2Nvbm5lY3QgfSBmcm9tICcuLi8uLi9wcm9kdWNlcnMvc29ja2V0LXJlY2VpdmUtbWV0aG9kcy9kaXNjb25uZWN0LnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBDYXB0dXJlQ2FudmFzU3RyZWFtIH0gZnJvbSAnLi4vLi4vbWV0aG9kcy93aGl0ZWJvYXJkLW1ldGhvZHMvY2FwdHVyZS1jYW52YXMtc3RyZWFtLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVzdW1lUGF1c2VBdWRpb1N0cmVhbXMgfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvcmVzdW1lLXBhdXNlLWF1ZGlvLXN0cmVhbXMuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9jZXNzQ29uc3VtZXJUcmFuc3BvcnRzQXVkaW8gfSBmcm9tICcuLi8uLi9jb25zdW1lcnMvcHJvY2Vzcy1jb25zdW1lci10cmFuc3BvcnRzLWF1ZGlvLnNlcnZpY2UnO1xuXG5pbXBvcnQge1xuICBEZXZpY2UsXG4gIFByb2R1Y2VyLFxuICBQcm9kdWNlck9wdGlvbnMsXG4gIFJ0cENhcGFiaWxpdGllcyxcbiAgVHJhbnNwb3J0LFxufSBmcm9tICdtZWRpYXNvdXAtY2xpZW50L2xpYi90eXBlcyc7XG5pbXBvcnQgeyBTZWxmaWVTZWdtZW50YXRpb24gfSBmcm9tICdAbWVkaWFwaXBlL3NlbGZpZV9zZWdtZW50YXRpb24nO1xuXG5leHBvcnQgdHlwZSBNZWRpYXNmdUNoYXRPcHRpb25zID0ge1xuICBQcmVqb2luUGFnZT86IChvcHRpb25zOiBQcmVKb2luUGFnZU9wdGlvbnMgfCBXZWxjb21lUGFnZU9wdGlvbnMpID0+IEhUTUxFbGVtZW50O1xuICBjcmVkZW50aWFscz86IHsgYXBpVXNlck5hbWU6IHN0cmluZzsgYXBpS2V5OiBzdHJpbmcgfTtcbiAgdXNlTG9jYWxVSU1vZGU/OiBib29sZWFuO1xuICBzZWVkRGF0YT86IFNlZWREYXRhO1xuICB1c2VTZWVkPzogYm9vbGVhbjtcbiAgaW1nU3JjPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBNZWRpYXNmdUNoYXQgY29tcG9uZW50IHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgY2hhdC1iYXNlZCBzdHJlYW1pbmcgZXZlbnRzLiBJdCBpbmNsdWRlcyBhIGNvbmRpdGlvbmFsIHByZWpvaW4gc2NyZWVuLCBtYWluIGNvbnRlbnQgd2l0aCBmbGV4aWJsZSBncmlkcyBhbmQgbW9kYWxzLCBhbmQgc3VwcG9ydHMgY2hhdC1yZWxhdGVkIHNldHRpbmdzLlxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBzZWxlY3RvciBhcHAtbWVkaWFzZnUtY2hhdFxuICogQHN0YW5kYWxvbmUgdHJ1ZVxuICogQGltcG9ydHMgW1JvdXRlck91dGxldCwgQ29tbW9uTW9kdWxlLCBBbGVydENvbXBvbmVudCwgQXVkaW9HcmlkLCBDb250cm9sQnV0dG9uc0NvbXBvbmVudFRvdWNoLCBGbGV4aWJsZUdyaWQsIExvYWRpbmdNb2RhbCwgQ29uZmlybUV4aXRNb2RhbCwgTWVzc2FnZXNNb2RhbCwgQ29uZmlybUhlcmVNb2RhbCwgU2hhcmVFdmVudE1vZGFsLCBXZWxjb21lUGFnZSwgTWFpbkFzcGVjdENvbXBvbmVudCwgTWFpbkNvbnRhaW5lckNvbXBvbmVudCwgTWFpblNjcmVlbkNvbXBvbmVudCwgT3RoZXJHcmlkQ29tcG9uZW50LCBNZXNzYWdlV2lkZ2V0XVxuICpcbiAqIEB0ZW1wbGF0ZVxuICogVGhlIHRlbXBsYXRlIGluY2x1ZGVzOlxuICogLSBDb25kaXRpb25hbCByZW5kZXJpbmcgZm9yIHRoZSBQcmVqb2luUGFnZSBjb21wb25lbnQuXG4gKiAtIEEgbWFpbiBjb250YWluZXIgd2l0aCBuZXN0ZWQgY29tcG9uZW50cyBmb3IgY2hhdCBmdW5jdGlvbmFsaXRpZXMsIGluY2x1ZGluZyBhbiBhc3BlY3QgYW5kIHNjcmVlbiBsYXlvdXQuXG4gKiAtIFRoZSBgYXBwLW1haW4tYXNwZWN0LWNvbXBvbmVudGAgZm9yIHNldHRpbmcgZGlzcGxheSBwcm9wZXJ0aWVzIGJhc2VkIG9uIGV2ZW50IHR5cGVzLlxuICogLSBBbiBgYXBwLW90aGVyLWdyaWQtY29tcG9uZW50YCB0aGF0IG1hbmFnZXMgdGhlIGxheW91dCBmb3IgdmlkZW8gYW5kIGF1ZGlvIGNvbnRlbnQuXG4gKiAtIEVtYmVkZGVkIG1vZGFscyBmb3IgbWVzc2FnZXMsIGV4aXQgY29uZmlybWF0aW9uLCBhbmQgc2hhcmUgZXZlbnQgYWN0aW9ucy5cbiAqXG4gKiBAaW5wdXQge2FueX0gUHJlam9pblBhZ2UgLSBDb21wb25lbnQgZm9yIHRoZSBwcmVqb2luIHBhZ2UgKGRlZmF1bHRzIHRvIFdlbGNvbWVQYWdlKS5cbiAqIEBpbnB1dCB7eyBhcGlVc2VyTmFtZTogc3RyaW5nOyBhcGlLZXk6IHN0cmluZyB9fSBjcmVkZW50aWFscyAtIEFQSSBjcmVkZW50aWFscyBmb3IgTWVkaWFTRlUuXG4gKiBAaW5wdXQge2Jvb2xlYW59IHVzZUxvY2FsVUlNb2RlIC0gVG9nZ2xlcyBsb2NhbCBVSSBtb2RlLlxuICogQGlucHV0IHtTZWVkRGF0YX0gc2VlZERhdGEgLSBPcHRpb25hbCBzZWVkIGRhdGEuXG4gKiBAaW5wdXQge2Jvb2xlYW59IHVzZVNlZWQgLSBFbmFibGVzIHVzZSBvZiBzZWVkIGRhdGEuXG4gKiBAaW5wdXQge3N0cmluZ30gaW1nU3JjIC0gSW1hZ2Ugc291cmNlIGZvciBicmFuZGluZyBvciBsb2dvcy5cbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGUgLSBUaGUgdGl0bGUgb2YgdGhlIGNvbXBvbmVudCwgZGVmYXVsdHMgdG8gXCJNZWRpYVNGVS1DaGF0XCIuXG4gKlxuICogQHN0eWxlc1xuICogQ3VzdG9taXphYmxlIHN0eWxlcyBmb3IgbGF5b3V0IGFuZCBvdmVyZmxvdy5cbiAqXG4gKiBAcHJvdmlkZXJzIFtDb29raWVTZXJ2aWNlXSAtIFNlcnZpY2UgZm9yIG1hbmFnaW5nIGNvb2tpZXMgd2l0aGluIHRoZSBjb21wb25lbnQuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAY2xhc3MgTWVkaWFzZnVDaGF0XG4gKiBAaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxuICpcbiAqIEBtZXRob2QgbmdPbkluaXQgLSBJbml0aWFsaXplcyBjb25maWd1cmF0aW9ucyBhbmQgcGFyYW1ldGVycy5cbiAqIEBtZXRob2QgbmdPbkRlc3Ryb3kgLSBIYW5kbGVzIGNsZWFudXAgYW5kIHJlbW92YWwgb2YgZXZlbnQgbGlzdGVuZXJzIG9yIGludGVydmFscy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGFwcC1tZWRpYXNmdS1jaGF0XG4gKiAgIFtQcmVqb2luUGFnZV09XCJDdXN0b21QcmVqb2luQ29tcG9uZW50XCJcbiAqICAgW2NyZWRlbnRpYWxzXT1cInsgYXBpVXNlck5hbWU6ICd1c2VybmFtZScsIGFwaUtleTogJ2FwaWtleScgfVwiXG4gKiAgIFt1c2VMb2NhbFVJTW9kZV09XCJ0cnVlXCJcbiAqICAgW3NlZWREYXRhXT1cInNlZWREYXRhT2JqZWN0XCJcbiAqICAgW3VzZVNlZWRdPVwidHJ1ZVwiXG4gKiAgIGltZ1NyYz1cImh0dHBzOi8vZXhhbXBsZS5jb20vbG9nby5wbmdcIj5cbiAqIDwvYXBwLW1lZGlhc2Z1LWNoYXQ+XG4gKiBgYGBcbiAqL1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tZWRpYXNmdS1jaGF0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFJvdXRlck91dGxldCxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQWxlcnRDb21wb25lbnQsXG4gICAgQXVkaW9HcmlkLFxuICAgIENvbnRyb2xCdXR0b25zQ29tcG9uZW50VG91Y2gsXG4gICAgRmxleGlibGVHcmlkLFxuICAgIExvYWRpbmdNb2RhbCxcbiAgICBDb25maXJtRXhpdE1vZGFsLFxuICAgIE1lc3NhZ2VzTW9kYWwsXG4gICAgQ29uZmlybUhlcmVNb2RhbCxcbiAgICBTaGFyZUV2ZW50TW9kYWwsXG4gICAgV2VsY29tZVBhZ2UsXG4gICAgTWFpbkFzcGVjdENvbXBvbmVudCxcbiAgICBNYWluQ29udGFpbmVyQ29tcG9uZW50LFxuICAgIE1haW5TY3JlZW5Db21wb25lbnQsXG4gICAgT3RoZXJHcmlkQ29tcG9uZW50LFxuICAgIE1lc3NhZ2VXaWRnZXQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJNZWRpYVNGVVwiXG4gICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgIGhlaWdodDogJzEwMHZoJyxcbiAgICAgICAgd2lkdGg6ICcxMDB2dycsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwdncnLFxuICAgICAgICBtYXhIZWlnaHQ6ICcxMDB2aCcsXG4gICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgICAgfVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF2YWxpZGF0ZWQudmFsdWU7IGVsc2UgbWFpbkNvbnRlbnRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0NvbXBvbmVudE91dGxldD1cIlxuICAgICAgICAgICAgUHJlam9pblBhZ2VDb21wb25lbnQuY29tcG9uZW50O1xuICAgICAgICAgICAgaW5qZWN0b3I6IFByZWpvaW5QYWdlQ29tcG9uZW50LmluamVjdG9yXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI21haW5Db250ZW50PlxuICAgICAgICA8YXBwLW1haW4tY29udGFpbmVyLWNvbXBvbmVudD5cbiAgICAgICAgICA8YXBwLW1haW4tYXNwZWN0LWNvbXBvbmVudFxuICAgICAgICAgICAgW2JhY2tncm91bmRDb2xvcl09XCIncmdiYSgyMTcsIDIyNywgMjM0LCAwLjk5KSdcIlxuICAgICAgICAgICAgW2RlZmF1bHRGcmFjdGlvbl09XCIxIC0gY29udHJvbEhlaWdodC52YWx1ZVwiXG4gICAgICAgICAgICBbc2hvd0NvbnRyb2xzXT1cImV2ZW50VHlwZS52YWx1ZSA9PT0gJ3dlYmluYXInIHx8IGV2ZW50VHlwZS52YWx1ZSA9PT0gJ2NvbmZlcmVuY2UnXCJcbiAgICAgICAgICAgIFt1cGRhdGVJc1dpZGVTY3JlZW5dPVwidXBkYXRlSXNXaWRlU2NyZWVuXCJcbiAgICAgICAgICAgIFt1cGRhdGVJc01lZGl1bVNjcmVlbl09XCJ1cGRhdGVJc01lZGl1bVNjcmVlblwiXG4gICAgICAgICAgICBbdXBkYXRlSXNTbWFsbFNjcmVlbl09XCJ1cGRhdGVJc1NtYWxsU2NyZWVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YXBwLW1haW4tc2NyZWVuLWNvbXBvbmVudFxuICAgICAgICAgICAgICBbZG9TdGFja109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW21haW5TaXplXT1cIm1haW5IZWlnaHRXaWR0aC52YWx1ZVwiXG4gICAgICAgICAgICAgIFtkZWZhdWx0RnJhY3Rpb25dPVwiMSAtIGNvbnRyb2xIZWlnaHQudmFsdWVcIlxuICAgICAgICAgICAgICBbc2hvd0NvbnRyb2xzXT1cImV2ZW50VHlwZS52YWx1ZSA9PT0gJ3dlYmluYXInIHx8IGV2ZW50VHlwZS52YWx1ZSA9PT0gJ2NvbmZlcmVuY2UnXCJcbiAgICAgICAgICAgICAgW3VwZGF0ZUNvbXBvbmVudFNpemVzXT1cInVwZGF0ZUNvbXBvbmVudFNpemVzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSBNYWluR3JpZENvbXBvbmVudCByZW1vdmVkIC0tPlxuXG4gICAgICAgICAgICAgIDwhLS0gT3RoZXJHcmlkQ29tcG9uZW50IC0tPlxuICAgICAgICAgICAgICA8YXBwLW90aGVyLWdyaWQtY29tcG9uZW50XG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCJjb21wb25lbnRTaXplcy52YWx1ZS5vdGhlckhlaWdodFwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cImNvbXBvbmVudFNpemVzLnZhbHVlLm90aGVyV2lkdGhcIlxuICAgICAgICAgICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJ3JnYmEoMjE3LCAyMjcsIDIzNCwgMC45OSknXCJcbiAgICAgICAgICAgICAgICBbc2hvd0FzcGVjdF09XCJtYWluSGVpZ2h0V2lkdGgudmFsdWUgIT09IDEwMFwiXG4gICAgICAgICAgICAgICAgW3RpbWVCYWNrZ3JvdW5kQ29sb3JdPVwicmVjb3JkU3RhdGUudmFsdWVcIlxuICAgICAgICAgICAgICAgIFtzaG93VGltZXJdPVwibWFpbkhlaWdodFdpZHRoLnZhbHVlID09PSAwXCJcbiAgICAgICAgICAgICAgICBbbWVldGluZ1Byb2dyZXNzVGltZV09XCJtZWV0aW5nUHJvZ3Jlc3NUaW1lLnZhbHVlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwhLS0gQXVkaW9HcmlkIC0tPlxuICAgICAgICAgICAgICAgIDxhcHAtYXVkaW8tZ3JpZCBbY29tcG9uZW50c1RvUmVuZGVyXT1cImF1ZGlvT25seVN0cmVhbXMudmFsdWVcIj48L2FwcC1hdWRpby1ncmlkPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBDb250cm9sIEJ1dHRvbnMgZm9yIENoYXQgLS0+XG4gICAgICAgICAgICAgICAgPGFwcC1jb250cm9sLWJ1dHRvbnMtY29tcG9uZW50LXRvdWNoXG4gICAgICAgICAgICAgICAgICBbYnV0dG9uc109XCJjb250cm9sQ2hhdEJ1dHRvbnNcIlxuICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cIidyaWdodCdcIlxuICAgICAgICAgICAgICAgICAgW2xvY2F0aW9uXT1cIidib3R0b20nXCJcbiAgICAgICAgICAgICAgICAgIFtkaXJlY3Rpb25dPVwiJ3ZlcnRpY2FsJ1wiXG4gICAgICAgICAgICAgICAgICBbc2hvd0FzcGVjdF09XCJldmVudFR5cGUudmFsdWUgPT09ICdjaGF0J1wiXG4gICAgICAgICAgICAgICAgPjwvYXBwLWNvbnRyb2wtYnV0dG9ucy1jb21wb25lbnQtdG91Y2g+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEZsZXhpYmxlIEdyaWQgLS0+XG4gICAgICAgICAgICAgICAgPGFwcC1mbGV4aWJsZS1ncmlkXG4gICAgICAgICAgICAgICAgICBbY3VzdG9tV2lkdGhdPVwiZ3JpZFNpemVzLnZhbHVlLmdyaWRXaWR0aCFcIlxuICAgICAgICAgICAgICAgICAgW2N1c3RvbUhlaWdodF09XCJncmlkU2l6ZXMudmFsdWUuZ3JpZEhlaWdodCFcIlxuICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiZ3JpZFJvd3MudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiZ3JpZENvbHMudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudHNUb1JlbmRlcl09XCJvdGhlckdyaWRTdHJlYW1zLnZhbHVlWzBdXCJcbiAgICAgICAgICAgICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJ3JnYmEoMjE3LCAyMjcsIDIzNCwgMC45OSknXCJcbiAgICAgICAgICAgICAgICA+PC9hcHAtZmxleGlibGUtZ3JpZD5cbiAgICAgICAgICAgICAgPC9hcHAtb3RoZXItZ3JpZC1jb21wb25lbnQ+XG4gICAgICAgICAgICA8L2FwcC1tYWluLXNjcmVlbi1jb21wb25lbnQ+XG4gICAgICAgICAgPC9hcHAtbWFpbi1hc3BlY3QtY29tcG9uZW50PlxuXG4gICAgICAgICAgPCEtLSBTdWJBc3BlY3RDb21wb25lbnQgcmVtb3ZlZCAtLT5cbiAgICAgICAgPC9hcHAtbWFpbi1jb250YWluZXItY29tcG9uZW50PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPCEtLSBNb2RhbHMgdG8gaW5jbHVkZSAtLT5cbiAgICAgIDxhcHAtbWVzc2FnZXMtbW9kYWxcbiAgICAgICAgW2JhY2tncm91bmRDb2xvcl09XCJcbiAgICAgICAgICBldmVudFR5cGUudmFsdWUgPT09ICd3ZWJpbmFyJyB8fCBldmVudFR5cGUudmFsdWUgPT09ICdjb25mZXJlbmNlJ1xuICAgICAgICAgICAgPyAnI2Y1ZjVmNSdcbiAgICAgICAgICAgIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSknXG4gICAgICAgIFwiXG4gICAgICAgIFtpc01lc3NhZ2VzTW9kYWxWaXNpYmxlXT1cImlzTWVzc2FnZXNNb2RhbFZpc2libGUudmFsdWVcIlxuICAgICAgICBbb25NZXNzYWdlc0Nsb3NlXT1cIm9uTWVzc2FnZXNDbG9zZVwiXG4gICAgICAgIFttZXNzYWdlc109XCJtZXNzYWdlcy52YWx1ZVwiXG4gICAgICAgIFtldmVudFR5cGVdPVwiZXZlbnRUeXBlLnZhbHVlXCJcbiAgICAgICAgW21lbWJlcl09XCJtZW1iZXIudmFsdWVcIlxuICAgICAgICBbaXNsZXZlbF09XCJpc2xldmVsLnZhbHVlXCJcbiAgICAgICAgW2NvSG9zdFJlc3BvbnNpYmlsaXR5XT1cImNvSG9zdFJlc3BvbnNpYmlsaXR5LnZhbHVlXCJcbiAgICAgICAgW2NvSG9zdF09XCJjb0hvc3QudmFsdWVcIlxuICAgICAgICBbc3RhcnREaXJlY3RNZXNzYWdlXT1cInN0YXJ0RGlyZWN0TWVzc2FnZS52YWx1ZVwiXG4gICAgICAgIFtkaXJlY3RNZXNzYWdlRGV0YWlsc109XCJkaXJlY3RNZXNzYWdlRGV0YWlscy52YWx1ZVwiXG4gICAgICAgIFt1cGRhdGVTdGFydERpcmVjdE1lc3NhZ2VdPVwidXBkYXRlU3RhcnREaXJlY3RNZXNzYWdlXCJcbiAgICAgICAgW3VwZGF0ZURpcmVjdE1lc3NhZ2VEZXRhaWxzXT1cInVwZGF0ZURpcmVjdE1lc3NhZ2VEZXRhaWxzXCJcbiAgICAgICAgW3Nob3dBbGVydF09XCJzaG93QWxlcnRcIlxuICAgICAgICBbcm9vbU5hbWVdPVwicm9vbU5hbWUudmFsdWVcIlxuICAgICAgICBbc29ja2V0XT1cInNvY2tldC52YWx1ZVwiXG4gICAgICAgIFtjaGF0U2V0dGluZ109XCJjaGF0U2V0dGluZy52YWx1ZVwiXG4gICAgICA+PC9hcHAtbWVzc2FnZXMtbW9kYWw+XG5cbiAgICAgIDxhcHAtY29uZmlybS1leGl0LW1vZGFsXG4gICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJ3JnYmEoMTgxLCAyMzMsIDIyOSwgMC45NyknXCJcbiAgICAgICAgW2lzQ29uZmlybUV4aXRNb2RhbFZpc2libGVdPVwiaXNDb25maXJtRXhpdE1vZGFsVmlzaWJsZS52YWx1ZVwiXG4gICAgICAgIFtvbkNvbmZpcm1FeGl0Q2xvc2VdPVwib25Db25maXJtRXhpdENsb3NlXCJcbiAgICAgICAgW3Bvc2l0aW9uXT1cIid0b3BSaWdodCdcIlxuICAgICAgICBbbWVtYmVyXT1cIm1lbWJlci52YWx1ZVwiXG4gICAgICAgIFtyb29tTmFtZV09XCJyb29tTmFtZS52YWx1ZVwiXG4gICAgICAgIFtzb2NrZXRdPVwic29ja2V0LnZhbHVlXCJcbiAgICAgICAgW2lzbGV2ZWxdPVwiaXNsZXZlbC52YWx1ZVwiXG4gICAgICA+PC9hcHAtY29uZmlybS1leGl0LW1vZGFsPlxuXG4gICAgICA8YXBwLWNvbmZpcm0taGVyZS1tb2RhbFxuICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cIidyZ2JhKDE4MSwgMjMzLCAyMjksIDAuOTcpJ1wiXG4gICAgICAgIFtpc0NvbmZpcm1IZXJlTW9kYWxWaXNpYmxlXT1cImlzQ29uZmlybUhlcmVNb2RhbFZpc2libGUudmFsdWVcIlxuICAgICAgICBbb25Db25maXJtSGVyZUNsb3NlXT1cIm9uQ29uZmlybUhlcmVDbG9zZVwiXG4gICAgICAgIFttZW1iZXJdPVwibWVtYmVyLnZhbHVlXCJcbiAgICAgICAgW3Jvb21OYW1lXT1cInJvb21OYW1lLnZhbHVlXCJcbiAgICAgICAgW3NvY2tldF09XCJzb2NrZXQudmFsdWVcIlxuICAgICAgPjwvYXBwLWNvbmZpcm0taGVyZS1tb2RhbD5cblxuICAgICAgPGFwcC1zaGFyZS1ldmVudC1tb2RhbFxuICAgICAgICBbaXNTaGFyZUV2ZW50TW9kYWxWaXNpYmxlXT1cImlzU2hhcmVFdmVudE1vZGFsVmlzaWJsZS52YWx1ZVwiXG4gICAgICAgIFtvblNoYXJlRXZlbnRDbG9zZV09XCJvblNoYXJlRXZlbnRDbG9zZVwiXG4gICAgICAgIFtyb29tTmFtZV09XCJyb29tTmFtZS52YWx1ZVwiXG4gICAgICAgIFtpc2xldmVsXT1cImlzbGV2ZWwudmFsdWVcIlxuICAgICAgICBbYWRtaW5QYXNzY29kZV09XCJhZG1pblBhc3Njb2RlLnZhbHVlXCJcbiAgICAgICAgW2V2ZW50VHlwZV09XCJldmVudFR5cGUudmFsdWVcIlxuICAgICAgPjwvYXBwLXNoYXJlLWV2ZW50LW1vZGFsPlxuXG4gICAgICA8YXBwLWFsZXJ0LWNvbXBvbmVudFxuICAgICAgICBbdmlzaWJsZV09XCJhbGVydFZpc2libGUudmFsdWVcIlxuICAgICAgICBbbWVzc2FnZV09XCJhbGVydE1lc3NhZ2UudmFsdWVcIlxuICAgICAgICBbdHlwZV09XCJhbGVydFR5cGUudmFsdWVcIlxuICAgICAgICBbZHVyYXRpb25dPVwiYWxlcnREdXJhdGlvbi52YWx1ZVwiXG4gICAgICAgIFtvbkhpZGVdPVwib25BbGVydEhpZGVcIlxuICAgICAgICB0ZXh0Q29sb3I9XCIjZmZmZmZmXCJcbiAgICAgID48L2FwcC1hbGVydC1jb21wb25lbnQ+XG5cbiAgICAgIDxhcHAtbG9hZGluZy1tb2RhbFxuICAgICAgICBbaXNWaXNpYmxlXT1cImlzTG9hZGluZ01vZGFsVmlzaWJsZS52YWx1ZVwiXG4gICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJ3JnYmEoMjE3LCAyMjcsIDIzNCwgMC45OSknXCJcbiAgICAgICAgZGlzcGxheUNvbG9yPVwiYmxhY2tcIlxuICAgICAgPjwvYXBwLWxvYWRpbmctbW9kYWw+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5NZWRpYVNGVSB7XG4gICAgICAgIC8qIEFkZCBhbnkgY29tcG9uZW50LXNwZWNpZmljIHN0eWxlcyBoZXJlICovXG4gICAgICB9XG4gICAgYCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbQ29va2llU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIE1lZGlhc2Z1Q2hhdCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KClcbiAgUHJlam9pblBhZ2U6IGFueSA9IFdlbGNvbWVQYWdlO1xuICBASW5wdXQoKSBjcmVkZW50aWFsczogeyBhcGlVc2VyTmFtZTogc3RyaW5nOyBhcGlLZXk6IHN0cmluZyB9ID0geyBhcGlVc2VyTmFtZTogJycsIGFwaUtleTogJycgfTtcbiAgQElucHV0KCkgdXNlTG9jYWxVSU1vZGUgPSBmYWxzZTtcbiAgQElucHV0KCkgc2VlZERhdGE/OiBTZWVkRGF0YTtcbiAgQElucHV0KCkgdXNlU2VlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBpbWdTcmMgPSAnaHR0cHM6Ly9tZWRpYXNmdS5jb20vaW1hZ2VzL2xvZ28xOTIucG5nJztcblxuICB0aXRsZSA9ICdNZWRpYVNGVS1DaGF0JztcblxuICBwcml2YXRlIG1haW5IZWlnaHRXaWR0aFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHZhbGlkYXRlZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGlzbGV2ZWxTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBjb0hvc3RTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBTY3JlZW5ib2FyZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlY29yZGluZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwdWJsaWMgdXBkYXRlTWluaUNhcmRzR3JpZDogVXBkYXRlTWluaUNhcmRzR3JpZCxcbiAgICBwdWJsaWMgbWl4U3RyZWFtczogTWl4U3RyZWFtcyxcbiAgICBwdWJsaWMgZGlzcFN0cmVhbXM6IERpc3BTdHJlYW1zLFxuICAgIHB1YmxpYyBzdG9wU2hhcmVTY3JlZW46IFN0b3BTaGFyZVNjcmVlbixcbiAgICBwdWJsaWMgY2hlY2tTY3JlZW5TaGFyZTogQ2hlY2tTY3JlZW5TaGFyZSxcbiAgICBwdWJsaWMgc3RhcnRTaGFyZVNjcmVlbjogU3RhcnRTaGFyZVNjcmVlbixcbiAgICBwdWJsaWMgcmVxdWVzdFNjcmVlblNoYXJlOiBSZXF1ZXN0U2NyZWVuU2hhcmUsXG4gICAgcHVibGljIHJlb3JkZXJTdHJlYW1zOiBSZW9yZGVyU3RyZWFtcyxcbiAgICBwdWJsaWMgcHJlcG9wdWxhdGVVc2VyTWVkaWE6IFByZXBvcHVsYXRlVXNlck1lZGlhLFxuICAgIHB1YmxpYyBnZXRWaWRlb3M6IEdldFZpZGVvcyxcbiAgICBwdWJsaWMgcmVQb3J0OiBSZVBvcnQsXG4gICAgcHVibGljIHRyaWdnZXI6IFRyaWdnZXIsXG4gICAgcHVibGljIGNvbnN1bWVyUmVzdW1lOiBDb25zdW1lclJlc3VtZSxcbiAgICBwdWJsaWMgY29ubmVjdFNlbmRUcmFuc3BvcnQ6IENvbm5lY3RTZW5kVHJhbnNwb3J0LFxuICAgIHB1YmxpYyBjb25uZWN0U2VuZFRyYW5zcG9ydEF1ZGlvOiBDb25uZWN0U2VuZFRyYW5zcG9ydEF1ZGlvLFxuICAgIHB1YmxpYyBjb25uZWN0U2VuZFRyYW5zcG9ydFZpZGVvOiBDb25uZWN0U2VuZFRyYW5zcG9ydFZpZGVvLFxuICAgIHB1YmxpYyBjb25uZWN0U2VuZFRyYW5zcG9ydFNjcmVlbjogQ29ubmVjdFNlbmRUcmFuc3BvcnRTY3JlZW4sXG4gICAgcHVibGljIHByb2Nlc3NDb25zdW1lclRyYW5zcG9ydHM6IFByb2Nlc3NDb25zdW1lclRyYW5zcG9ydHMsXG4gICAgcHVibGljIHJlc3VtZVBhdXNlU3RyZWFtczogUmVzdW1lUGF1c2VTdHJlYW1zLFxuICAgIHB1YmxpYyByZWFkanVzdDogUmVhZGp1c3QsXG4gICAgcHVibGljIGNoZWNrR3JpZDogQ2hlY2tHcmlkLFxuICAgIHB1YmxpYyBnZXRFc3RpbWF0ZTogR2V0RXN0aW1hdGUsXG4gICAgcHVibGljIGNhbGN1bGF0ZVJvd3NBbmRDb2x1bW5zOiBDYWxjdWxhdGVSb3dzQW5kQ29sdW1ucyxcbiAgICBwdWJsaWMgYWRkVmlkZW9zR3JpZDogQWRkVmlkZW9zR3JpZCxcbiAgICBwdWJsaWMgb25TY3JlZW5DaGFuZ2VzOiBPblNjcmVlbkNoYW5nZXMsXG4gICAgcHVibGljIGNoYW5nZVZpZHM6IENoYW5nZVZpZHMsXG4gICAgcHVibGljIGNvbXBhcmVBY3RpdmVOYW1lczogQ29tcGFyZUFjdGl2ZU5hbWVzLFxuICAgIHB1YmxpYyBjb21wYXJlU2NyZWVuU3RhdGVzOiBDb21wYXJlU2NyZWVuU3RhdGVzLFxuICAgIHB1YmxpYyBjcmVhdGVTZW5kVHJhbnNwb3J0OiBDcmVhdGVTZW5kVHJhbnNwb3J0LFxuICAgIHB1YmxpYyByZXN1bWVTZW5kVHJhbnNwb3J0QXVkaW86IFJlc3VtZVNlbmRUcmFuc3BvcnRBdWRpbyxcbiAgICBwdWJsaWMgcmVjZWl2ZUFsbFBpcGVkVHJhbnNwb3J0czogUmVjZWl2ZUFsbFBpcGVkVHJhbnNwb3J0cyxcbiAgICBwdWJsaWMgZGlzY29ubmVjdFNlbmRUcmFuc3BvcnRWaWRlbzogRGlzY29ubmVjdFNlbmRUcmFuc3BvcnRWaWRlbyxcbiAgICBwdWJsaWMgZGlzY29ubmVjdFNlbmRUcmFuc3BvcnRBdWRpbzogRGlzY29ubmVjdFNlbmRUcmFuc3BvcnRBdWRpbyxcbiAgICBwdWJsaWMgZGlzY29ubmVjdFNlbmRUcmFuc3BvcnRTY3JlZW46IERpc2Nvbm5lY3RTZW5kVHJhbnNwb3J0U2NyZWVuLFxuICAgIHB1YmxpYyBnZXRQaXBlZFByb2R1Y2Vyc0FsdDogR2V0UGlwZWRQcm9kdWNlcnNBbHQsXG4gICAgcHVibGljIHNpZ25hbE5ld0NvbnN1bWVyVHJhbnNwb3J0OiBTaWduYWxOZXdDb25zdW1lclRyYW5zcG9ydCxcbiAgICBwdWJsaWMgY29ubmVjdFJlY3ZUcmFuc3BvcnQ6IENvbm5lY3RSZWN2VHJhbnNwb3J0LFxuICAgIHB1YmxpYyByZVVwZGF0ZUludGVyOiBSZVVwZGF0ZUludGVyLFxuICAgIHB1YmxpYyB1cGRhdGVQYXJ0aWNpcGFudEF1ZGlvRGVjaWJlbHM6IFVwZGF0ZVBhcnRpY2lwYW50QXVkaW9EZWNpYmVscyxcbiAgICBwdWJsaWMgY2xvc2VBbmRSZXNpemU6IENsb3NlQW5kUmVzaXplLFxuICAgIHB1YmxpYyBhdXRvQWRqdXN0OiBBdXRvQWRqdXN0LFxuICAgIHB1YmxpYyBzd2l0Y2hVc2VyVmlkZW9BbHQ6IFN3aXRjaFVzZXJWaWRlb0FsdCxcbiAgICBwdWJsaWMgc3dpdGNoVXNlclZpZGVvOiBTd2l0Y2hVc2VyVmlkZW8sXG4gICAgcHVibGljIHN3aXRjaFVzZXJBdWRpbzogU3dpdGNoVXNlckF1ZGlvLFxuICAgIHB1YmxpYyBnZXREb21haW5zOiBHZXREb21haW5zLFxuICAgIHB1YmxpYyBmb3JtYXROdW1iZXI6IEZvcm1hdE51bWJlcixcbiAgICBwdWJsaWMgY29ubmVjdElwczogQ29ubmVjdElwcyxcbiAgICBwdWJsaWMgY3JlYXRlRGV2aWNlQ2xpZW50OiBDcmVhdGVEZXZpY2VDbGllbnQsXG5cbiAgICBwdWJsaWMgY2FwdHVyZUNhbnZhc1N0cmVhbTogQ2FwdHVyZUNhbnZhc1N0cmVhbSxcbiAgICBwdWJsaWMgcmVzdW1lUGF1c2VBdWRpb1N0cmVhbXM6IFJlc3VtZVBhdXNlQXVkaW9TdHJlYW1zLFxuICAgIHB1YmxpYyBwcm9jZXNzQ29uc3VtZXJUcmFuc3BvcnRzQXVkaW86IFByb2Nlc3NDb25zdW1lclRyYW5zcG9ydHNBdWRpbyxcblxuICAgIHB1YmxpYyBsYXVuY2hNZXNzYWdlczogTGF1bmNoTWVzc2FnZXMsXG4gICAgcHVibGljIGxhdW5jaENvbmZpcm1FeGl0OiBMYXVuY2hDb25maXJtRXhpdCxcblxuICAgIHB1YmxpYyBzdGFydE1lZXRpbmdQcm9ncmVzc1RpbWVyOiBTdGFydE1lZXRpbmdQcm9ncmVzc1RpbWVyLFxuXG4gICAgcHVibGljIHByb2R1Y2VyTWVkaWFQYXVzZWQ6IFByb2R1Y2VyTWVkaWFQYXVzZWQsXG4gICAgcHVibGljIHByb2R1Y2VyTWVkaWFSZXN1bWVkOiBQcm9kdWNlck1lZGlhUmVzdW1lZCxcbiAgICBwdWJsaWMgcHJvZHVjZXJNZWRpYUNsb3NlZDogUHJvZHVjZXJNZWRpYUNsb3NlZCxcbiAgICBwdWJsaWMgbWVldGluZ0VuZGVkOiBNZWV0aW5nRW5kZWQsXG4gICAgcHVibGljIGRpc2Nvbm5lY3RVc2VyU2VsZjogRGlzY29ubmVjdFVzZXJTZWxmLFxuICAgIHB1YmxpYyByZWNlaXZlTWVzc2FnZTogUmVjZWl2ZU1lc3NhZ2UsXG4gICAgcHVibGljIG1lZXRpbmdUaW1lUmVtYWluaW5nOiBNZWV0aW5nVGltZVJlbWFpbmluZyxcbiAgICBwdWJsaWMgbWVldGluZ1N0aWxsVGhlcmU6IE1lZXRpbmdTdGlsbFRoZXJlLFxuXG4gICAgcHVibGljIGFsbE1lbWJlcnM6IEFsbE1lbWJlcnMsXG4gICAgcHVibGljIGFsbE1lbWJlcnNSZXN0OiBBbGxNZW1iZXJzUmVzdCxcbiAgICBwdWJsaWMgZGlzY29ubmVjdDogRGlzY29ubmVjdCxcblxuICAgIHB1YmxpYyBzb2NrZXRNYW5hZ2VyOiBTb2NrZXRNYW5hZ2VyLFxuICAgIHB1YmxpYyBqb2luUm9vbUNsaWVudDogSm9pblJvb21DbGllbnQsXG4gICAgcHVibGljIHVwZGF0ZVJvb21QYXJhbWV0ZXJzQ2xpZW50OiBVcGRhdGVSb29tUGFyYW1ldGVyc0NsaWVudCxcbiAgICBwdWJsaWMgY2xpY2tWaWRlbzogQ2xpY2tWaWRlbyxcbiAgICBwdWJsaWMgY2xpY2tBdWRpbzogQ2xpY2tBdWRpbyxcbiAgICBwdWJsaWMgY2xpY2tTY3JlZW5TaGFyZTogQ2xpY2tTY3JlZW5TaGFyZSxcbiAgICBwdWJsaWMgc3dpdGNoVmlkZW9BbHQ6IFN3aXRjaFZpZGVvQWx0LFxuICAgIHB1YmxpYyBzdHJlYW1TdWNjZXNzVmlkZW86IFN0cmVhbVN1Y2Nlc3NWaWRlbyxcbiAgICBwdWJsaWMgc3RyZWFtU3VjY2Vzc0F1ZGlvOiBTdHJlYW1TdWNjZXNzQXVkaW8sXG4gICAgcHVibGljIHN0cmVhbVN1Y2Nlc3NTY3JlZW46IFN0cmVhbVN1Y2Nlc3NTY3JlZW4sXG4gICAgcHVibGljIHN0cmVhbVN1Y2Nlc3NBdWRpb1N3aXRjaDogU3RyZWFtU3VjY2Vzc0F1ZGlvU3dpdGNoLFxuICAgIHB1YmxpYyBjaGVja1Blcm1pc3Npb246IENoZWNrUGVybWlzc2lvbixcblxuICAgIHB1YmxpYyB1cGRhdGVDb25zdW1pbmdEb21haW5zOiBVcGRhdGVDb25zdW1pbmdEb21haW5zLFxuICAgIHB1YmxpYyByZWNlaXZlUm9vbU1lc3NhZ2VzOiBSZWNlaXZlUm9vbU1lc3NhZ2VzLFxuICApIHt9XG5cbiAgY3JlYXRlSW5qZWN0b3IoaW5wdXRzOiBhbnkpIHtcbiAgICBjb25zdCBpbmogPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBPYmplY3Qua2V5cyhpbnB1dHMpLm1hcCgoa2V5KSA9PiAoeyBwcm92aWRlOiBrZXksIHVzZVZhbHVlOiBpbnB1dHNba2V5XSB9KSksXG4gICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3IsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5qO1xuICB9XG5cbiAgLy8gSW5pdGlhbCB2YWx1ZXNcbiAgbWVkaWFTRlVGdW5jdGlvbnMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwZGF0ZU1pbmlDYXJkc0dyaWQ6XG4gICAgICAgIHRoaXMudXBkYXRlTWluaUNhcmRzR3JpZD8udXBkYXRlTWluaUNhcmRzR3JpZCB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgbWl4U3RyZWFtczpcbiAgICAgICAgdGhpcy5taXhTdHJlYW1zPy5taXhTdHJlYW1zIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBkaXNwU3RyZWFtczpcbiAgICAgICAgdGhpcy5kaXNwU3RyZWFtcz8uZGlzcFN0cmVhbXMgfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIHN0b3BTaGFyZVNjcmVlbjpcbiAgICAgICAgdGhpcy5zdG9wU2hhcmVTY3JlZW4/LnN0b3BTaGFyZVNjcmVlbiB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgY2hlY2tTY3JlZW5TaGFyZTpcbiAgICAgICAgdGhpcy5jaGVja1NjcmVlblNoYXJlPy5jaGVja1NjcmVlblNoYXJlIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBzdGFydFNoYXJlU2NyZWVuOlxuICAgICAgICB0aGlzLnN0YXJ0U2hhcmVTY3JlZW4/LnN0YXJ0U2hhcmVTY3JlZW4gfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIHJlcXVlc3RTY3JlZW5TaGFyZTpcbiAgICAgICAgdGhpcy5yZXF1ZXN0U2NyZWVuU2hhcmU/LnJlcXVlc3RTY3JlZW5TaGFyZSB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgcmVvcmRlclN0cmVhbXM6XG4gICAgICAgIHRoaXMucmVvcmRlclN0cmVhbXM/LnJlb3JkZXJTdHJlYW1zIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBwcmVwb3B1bGF0ZVVzZXJNZWRpYTpcbiAgICAgICAgdGhpcy5wcmVwb3B1bGF0ZVVzZXJNZWRpYT8ucHJlcG9wdWxhdGVVc2VyTWVkaWEgfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIGdldFZpZGVvczpcbiAgICAgICAgdGhpcy5nZXRWaWRlb3M/LmdldFZpZGVvcyB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgcmVQb3J0OlxuICAgICAgICB0aGlzLnJlUG9ydD8ucmVQb3J0IHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICB0cmlnZ2VyOlxuICAgICAgICB0aGlzLnRyaWdnZXI/LnRyaWdnZXIgfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIGNvbnN1bWVyUmVzdW1lOlxuICAgICAgICB0aGlzLmNvbnN1bWVyUmVzdW1lPy5jb25zdW1lclJlc3VtZSB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgY29ubmVjdFNlbmRUcmFuc3BvcnQ6XG4gICAgICAgIHRoaXMuY29ubmVjdFNlbmRUcmFuc3BvcnQ/LmNvbm5lY3RTZW5kVHJhbnNwb3J0IHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBjb25uZWN0U2VuZFRyYW5zcG9ydEF1ZGlvOlxuICAgICAgICB0aGlzLmNvbm5lY3RTZW5kVHJhbnNwb3J0QXVkaW8/LmNvbm5lY3RTZW5kVHJhbnNwb3J0QXVkaW8gfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIGNvbm5lY3RTZW5kVHJhbnNwb3J0VmlkZW86XG4gICAgICAgIHRoaXMuY29ubmVjdFNlbmRUcmFuc3BvcnRWaWRlbz8uY29ubmVjdFNlbmRUcmFuc3BvcnRWaWRlbyB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgY29ubmVjdFNlbmRUcmFuc3BvcnRTY3JlZW46XG4gICAgICAgIHRoaXMuY29ubmVjdFNlbmRUcmFuc3BvcnRTY3JlZW4/LmNvbm5lY3RTZW5kVHJhbnNwb3J0U2NyZWVuIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBwcm9jZXNzQ29uc3VtZXJUcmFuc3BvcnRzOlxuICAgICAgICB0aGlzLnByb2Nlc3NDb25zdW1lclRyYW5zcG9ydHM/LnByb2Nlc3NDb25zdW1lclRyYW5zcG9ydHMgfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIHJlc3VtZVBhdXNlU3RyZWFtczpcbiAgICAgICAgdGhpcy5yZXN1bWVQYXVzZVN0cmVhbXM/LnJlc3VtZVBhdXNlU3RyZWFtcyB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgcmVhZGp1c3Q6XG4gICAgICAgIHRoaXMucmVhZGp1c3Q/LnJlYWRqdXN0IHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBjaGVja0dyaWQ6XG4gICAgICAgIHRoaXMuY2hlY2tHcmlkPy5jaGVja0dyaWQgfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIGdldEVzdGltYXRlOlxuICAgICAgICB0aGlzLmdldEVzdGltYXRlPy5nZXRFc3RpbWF0ZSB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgY2FsY3VsYXRlUm93c0FuZENvbHVtbnM6XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlUm93c0FuZENvbHVtbnM/LmNhbGN1bGF0ZVJvd3NBbmRDb2x1bW5zIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBhZGRWaWRlb3NHcmlkOlxuICAgICAgICB0aGlzLmFkZFZpZGVvc0dyaWQ/LmFkZFZpZGVvc0dyaWQgfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIG9uU2NyZWVuQ2hhbmdlczpcbiAgICAgICAgdGhpcy5vblNjcmVlbkNoYW5nZXM/Lm9uU2NyZWVuQ2hhbmdlcyB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgc2xlZXA6XG4gICAgICAgIHNsZWVwIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBjaGFuZ2VWaWRzOlxuICAgICAgICB0aGlzLmNoYW5nZVZpZHM/LmNoYW5nZVZpZHMgfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIGNvbXBhcmVBY3RpdmVOYW1lczpcbiAgICAgICAgdGhpcy5jb21wYXJlQWN0aXZlTmFtZXM/LmNvbXBhcmVBY3RpdmVOYW1lcyB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgY29tcGFyZVNjcmVlblN0YXRlczpcbiAgICAgICAgdGhpcy5jb21wYXJlU2NyZWVuU3RhdGVzPy5jb21wYXJlU2NyZWVuU3RhdGVzIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBjcmVhdGVTZW5kVHJhbnNwb3J0OlxuICAgICAgICB0aGlzLmNyZWF0ZVNlbmRUcmFuc3BvcnQ/LmNyZWF0ZVNlbmRUcmFuc3BvcnQgfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIHJlc3VtZVNlbmRUcmFuc3BvcnRBdWRpbzpcbiAgICAgICAgdGhpcy5yZXN1bWVTZW5kVHJhbnNwb3J0QXVkaW8/LnJlc3VtZVNlbmRUcmFuc3BvcnRBdWRpbyB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgcmVjZWl2ZUFsbFBpcGVkVHJhbnNwb3J0czpcbiAgICAgICAgdGhpcy5yZWNlaXZlQWxsUGlwZWRUcmFuc3BvcnRzPy5yZWNlaXZlQWxsUGlwZWRUcmFuc3BvcnRzIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBkaXNjb25uZWN0U2VuZFRyYW5zcG9ydFZpZGVvOlxuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RTZW5kVHJhbnNwb3J0VmlkZW8/LmRpc2Nvbm5lY3RTZW5kVHJhbnNwb3J0VmlkZW8gfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIGRpc2Nvbm5lY3RTZW5kVHJhbnNwb3J0QXVkaW86XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdFNlbmRUcmFuc3BvcnRBdWRpbz8uZGlzY29ubmVjdFNlbmRUcmFuc3BvcnRBdWRpbyB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgZGlzY29ubmVjdFNlbmRUcmFuc3BvcnRTY3JlZW46XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdFNlbmRUcmFuc3BvcnRTY3JlZW4/LmRpc2Nvbm5lY3RTZW5kVHJhbnNwb3J0U2NyZWVuIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBnZXRQaXBlZFByb2R1Y2Vyc0FsdDpcbiAgICAgICAgdGhpcy5nZXRQaXBlZFByb2R1Y2Vyc0FsdD8uZ2V0UGlwZWRQcm9kdWNlcnNBbHQgfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIHNpZ25hbE5ld0NvbnN1bWVyVHJhbnNwb3J0OlxuICAgICAgICB0aGlzLnNpZ25hbE5ld0NvbnN1bWVyVHJhbnNwb3J0Py5zaWduYWxOZXdDb25zdW1lclRyYW5zcG9ydCB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgY29ubmVjdFJlY3ZUcmFuc3BvcnQ6XG4gICAgICAgIHRoaXMuY29ubmVjdFJlY3ZUcmFuc3BvcnQ/LmNvbm5lY3RSZWN2VHJhbnNwb3J0IHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICByZVVwZGF0ZUludGVyOlxuICAgICAgICB0aGlzLnJlVXBkYXRlSW50ZXI/LnJlVXBkYXRlSW50ZXIgfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIHVwZGF0ZVBhcnRpY2lwYW50QXVkaW9EZWNpYmVsczpcbiAgICAgICAgdGhpcy51cGRhdGVQYXJ0aWNpcGFudEF1ZGlvRGVjaWJlbHM/LnVwZGF0ZVBhcnRpY2lwYW50QXVkaW9EZWNpYmVscyB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgY2xvc2VBbmRSZXNpemU6XG4gICAgICAgIHRoaXMuY2xvc2VBbmRSZXNpemU/LmNsb3NlQW5kUmVzaXplIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBhdXRvQWRqdXN0OlxuICAgICAgICB0aGlzLmF1dG9BZGp1c3Q/LmF1dG9BZGp1c3QgfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIHN3aXRjaFVzZXJWaWRlb0FsdDpcbiAgICAgICAgdGhpcy5zd2l0Y2hVc2VyVmlkZW9BbHQ/LnN3aXRjaFVzZXJWaWRlb0FsdCB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgc3dpdGNoVXNlclZpZGVvOlxuICAgICAgICB0aGlzLnN3aXRjaFVzZXJWaWRlbz8uc3dpdGNoVXNlclZpZGVvIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBzd2l0Y2hVc2VyQXVkaW86XG4gICAgICAgIHRoaXMuc3dpdGNoVXNlckF1ZGlvPy5zd2l0Y2hVc2VyQXVkaW8gfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIGdldERvbWFpbnM6XG4gICAgICAgIHRoaXMuZ2V0RG9tYWlucz8uZ2V0RG9tYWlucyB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgZm9ybWF0TnVtYmVyOlxuICAgICAgICB0aGlzLmZvcm1hdE51bWJlcj8uZm9ybWF0TnVtYmVyIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBjb25uZWN0SXBzOlxuICAgICAgICB0aGlzLmNvbm5lY3RJcHM/LmNvbm5lY3RJcHMgfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIGNyZWF0ZURldmljZUNsaWVudDpcbiAgICAgICAgdGhpcy5jcmVhdGVEZXZpY2VDbGllbnQ/LmNyZWF0ZURldmljZUNsaWVudCB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgY2FwdHVyZUNhbnZhc1N0cmVhbTpcbiAgICAgICAgdGhpcy5jYXB0dXJlQ2FudmFzU3RyZWFtPy5jYXB0dXJlQ2FudmFzU3RyZWFtIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICByZXN1bWVQYXVzZUF1ZGlvU3RyZWFtczpcbiAgICAgICAgdGhpcy5yZXN1bWVQYXVzZUF1ZGlvU3RyZWFtcz8ucmVzdW1lUGF1c2VBdWRpb1N0cmVhbXMgfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIHByb2Nlc3NDb25zdW1lclRyYW5zcG9ydHNBdWRpbzpcbiAgICAgICAgdGhpcy5wcm9jZXNzQ29uc3VtZXJUcmFuc3BvcnRzQXVkaW8/LnByb2Nlc3NDb25zdW1lclRyYW5zcG9ydHNBdWRpbyB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgY2hlY2tQZXJtaXNzaW9uOlxuICAgICAgICB0aGlzLmNoZWNrUGVybWlzc2lvbj8uY2hlY2tQZXJtaXNzaW9uIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBzdHJlYW1TdWNjZXNzVmlkZW86XG4gICAgICAgIHRoaXMuc3RyZWFtU3VjY2Vzc1ZpZGVvPy5zdHJlYW1TdWNjZXNzVmlkZW8gfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIHN0cmVhbVN1Y2Nlc3NBdWRpbzpcbiAgICAgICAgdGhpcy5zdHJlYW1TdWNjZXNzQXVkaW8/LnN0cmVhbVN1Y2Nlc3NBdWRpbyB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgc3RyZWFtU3VjY2Vzc1NjcmVlbjpcbiAgICAgICAgdGhpcy5zdHJlYW1TdWNjZXNzU2NyZWVuPy5zdHJlYW1TdWNjZXNzU2NyZWVuIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBzdHJlYW1TdWNjZXNzQXVkaW9Td2l0Y2g6XG4gICAgICAgIHRoaXMuc3RyZWFtU3VjY2Vzc0F1ZGlvU3dpdGNoPy5zdHJlYW1TdWNjZXNzQXVkaW9Td2l0Y2ggfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIGNsaWNrVmlkZW86XG4gICAgICAgIHRoaXMuY2xpY2tWaWRlbz8uY2xpY2tWaWRlbyB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgY2xpY2tBdWRpbzpcbiAgICAgICAgdGhpcy5jbGlja0F1ZGlvPy5jbGlja0F1ZGlvIHx8XG4gICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ25vbmUnKTtcbiAgICAgICAgfSksXG4gICAgICBjbGlja1NjcmVlblNoYXJlOlxuICAgICAgICB0aGlzLmNsaWNrU2NyZWVuU2hhcmU/LmNsaWNrU2NyZWVuU2hhcmUgfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIHN3aXRjaFZpZGVvQWx0OlxuICAgICAgICB0aGlzLnN3aXRjaFZpZGVvQWx0Py5zd2l0Y2hWaWRlb0FsdCB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgICAgcmVxdWVzdFBlcm1pc3Npb25DYW1lcmE6XG4gICAgICAgIHRoaXMucmVxdWVzdFBlcm1pc3Npb25DYW1lcmEgfHxcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbm9uZScpO1xuICAgICAgICB9KSxcbiAgICAgIHJlcXVlc3RQZXJtaXNzaW9uQXVkaW86XG4gICAgICAgIHRoaXMucmVxdWVzdFBlcm1pc3Npb25BdWRpbyB8fFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdub25lJyk7XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH07XG5cbiAgdmFsaWRhdGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGxvY2FsVUlNb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHNvY2tldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U29ja2V0Pih7fSBhcyBTb2NrZXQpO1xuICByb29tRGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVzcG9uc2VKb2luUm9vbSB8IG51bGw+KG51bGwpO1xuICBkZXZpY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERldmljZSB8IG51bGw+KG51bGwpO1xuICBhcGlLZXkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBhcGlVc2VyTmFtZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIGFwaVRva2VuID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgbGluayA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG5cbiAgcm9vbU5hbWUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBtZW1iZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBhZG1pblBhc3Njb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgaXNsZXZlbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignMScpO1xuICBjb0hvc3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ05vIGNvSG9zdCcpO1xuICBjb0hvc3RSZXNwb25zaWJpbGl0eSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29Ib3N0UmVzcG9uc2liaWxpdHlbXT4oW1xuICAgIHsgbmFtZTogJ3BhcnRpY2lwYW50cycsIHZhbHVlOiBmYWxzZSwgZGVkaWNhdGVkOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogJ21lZGlhJywgdmFsdWU6IGZhbHNlLCBkZWRpY2F0ZWQ6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiAnd2FpdGluZycsIHZhbHVlOiBmYWxzZSwgZGVkaWNhdGVkOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogJ2NoYXQnLCB2YWx1ZTogZmFsc2UsIGRlZGljYXRlZDogZmFsc2UgfSxcbiAgXSk7XG4gIHlvdUFyZUNvSG9zdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICB5b3VBcmVIb3N0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGNvbmZpcm1lZFRvUmVjb3JkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIG1lZXRpbmdEaXNwbGF5VHlwZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignbWVkaWEnKTtcbiAgbWVldGluZ1ZpZGVvT3B0aW1pemVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGV2ZW50VHlwZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RXZlbnRUeXBlPignY2hhdCcpO1xuICBwYXJ0aWNpcGFudHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcnRpY2lwYW50W10+KFtdKTtcbiAgZmlsdGVyZWRQYXJ0aWNpcGFudHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcnRpY2lwYW50W10+KFtdKTtcbiAgcGFydGljaXBhbnRzQ291bnRlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcGFydGljaXBhbnRzRmlsdGVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICBjb25zdW1lX3NvY2tldHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbnN1bWVTb2NrZXRbXT4oW10pO1xuICBydHBDYXBhYmlsaXRpZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJ0cENhcGFiaWxpdGllcyB8IG51bGw+KG51bGwpO1xuICByb29tUmVjdklQcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcbiAgbWVldGluZ1Jvb21QYXJhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lZXRpbmdSb29tUGFyYW1zIHwgbnVsbD4obnVsbCk7XG4gIGl0ZW1QYWdlTGltaXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oNCk7XG4gIGF1ZGlvT25seVJvb20gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgYWRkRm9yQmFzaWMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgc2NyZWVuUGFnZUxpbWl0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDQpO1xuICBzaGFyZVNjcmVlblN0YXJ0ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgc2hhcmVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHRhcmdldE9yaWVudGF0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCdsYW5kc2NhcGUnKTtcbiAgdGFyZ2V0UmVzb2x1dGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignc2QnKTtcbiAgdGFyZ2V0UmVzb2x1dGlvbkhvc3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ3NkJyk7XG4gIHZpZENvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZpZENvbnM+KHsgd2lkdGg6IDY0MCwgaGVpZ2h0OiAzNjAgfSk7XG4gIGZyYW1lUmF0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxMCk7XG4gIGhQYXJhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhQYXJhbXNUeXBlPih7fSBhcyBIUGFyYW1zVHlwZSk7XG4gIHZQYXJhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZQYXJhbXNUeXBlPih7fSBhcyBWUGFyYW1zVHlwZSk7XG4gIHNjcmVlblBhcmFtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2NyZWVuUGFyYW1zVHlwZT4oe30gYXMgU2NyZWVuUGFyYW1zVHlwZSk7XG4gIGFQYXJhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFQYXJhbXNUeXBlPih7fSBhcyBBUGFyYW1zVHlwZSk7XG5cbiAgcmVjb3JkaW5nQXVkaW9QYXVzZXNMaW1pdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcmVjb3JkaW5nQXVkaW9QYXVzZXNDb3VudCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcmVjb3JkaW5nQXVkaW9TdXBwb3J0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlY29yZGluZ0F1ZGlvUGVvcGxlTGltaXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHJlY29yZGluZ0F1ZGlvUGFydGljaXBhbnRzVGltZUxpbWl0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICByZWNvcmRpbmdWaWRlb1BhdXNlc0NvdW50ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICByZWNvcmRpbmdWaWRlb1BhdXNlc0xpbWl0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICByZWNvcmRpbmdWaWRlb1N1cHBvcnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVjb3JkaW5nVmlkZW9QZW9wbGVMaW1pdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNUaW1lTGltaXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHJlY29yZGluZ0FsbFBhcnRpY2lwYW50c1N1cHBvcnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNTdXBwb3J0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlY29yZGluZ0FsbFBhcnRpY2lwYW50c0Z1bGxSb29tU3VwcG9ydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c0Z1bGxSb29tU3VwcG9ydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWNvcmRpbmdQcmVmZXJyZWRPcmllbnRhdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignbGFuZHNjYXBlJyk7XG4gIHJlY29yZGluZ1N1cHBvcnRGb3JPdGhlck9yaWVudGF0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlY29yZGluZ011bHRpRm9ybWF0c1N1cHBvcnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICB1c2VyUmVjb3JkaW5nUGFyYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVc2VyUmVjb3JkaW5nUGFyYW1zPih7XG4gICAgbWFpblNwZWNzOiB7XG4gICAgICBtZWRpYU9wdGlvbnM6ICd2aWRlbycsIC8vICdhdWRpbycsICd2aWRlbydcbiAgICAgIGF1ZGlvT3B0aW9uczogJ2FsbCcsIC8vICdhbGwnLCAnb25TY3JlZW4nLCAnaG9zdCdcbiAgICAgIHZpZGVvT3B0aW9uczogJ2FsbCcsIC8vICdhbGwnLCAnbWFpblNjcmVlbidcbiAgICAgIHZpZGVvVHlwZTogJ2Z1bGxEaXNwbGF5JywgLy8gJ2FsbCcsICdiZXN0RGlzcGxheScsICdmdWxsRGlzcGxheSdcbiAgICAgIHZpZGVvT3B0aW1pemVkOiBmYWxzZSwgLy8gdHJ1ZSwgZmFsc2VcbiAgICAgIHJlY29yZGluZ0Rpc3BsYXlUeXBlOiAnbWVkaWEnLCAvLyAnbWVkaWEnLCAndmlkZW8nLCAnYWxsJ1xuICAgICAgYWRkSExTOiBmYWxzZSwgLy8gdHJ1ZSwgZmFsc2VcbiAgICB9LFxuICAgIGRpc3BTcGVjczoge1xuICAgICAgbmFtZVRhZ3M6IHRydWUsIC8vIHRydWUsIGZhbHNlXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMDAwMDAwJywgLy8gJyMwMDAwMDAnLCAnI2ZmZmZmZidcbiAgICAgIG5hbWVUYWdzQ29sb3I6ICcjZmZmZmZmJywgLy8gJyMwMDAwMDAnLCAnI2ZmZmZmZidcbiAgICAgIG9yaWVudGF0aW9uVmlkZW86ICdwb3J0cmFpdCcsIC8vICdsYW5kc2NhcGUnLCAncG9ydHJhaXQnLCAnYWxsJ1xuICAgIH0sXG4gIH0pO1xuXG4gIGNhblJlY29yZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBzdGFydFJlcG9ydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBlbmRSZXBvcnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVjb3JkVGltZXJJbnRlcnZhbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Tm9kZUpTLlRpbWVvdXQgfCBudWxsPihudWxsKTtcbiAgcmVjb3JkU3RhcnRUaW1lID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICByZWNvcmRFbGFwc2VkVGltZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgaXNUaW1lclJ1bm5pbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgY2FuUGF1c2VSZXN1bWUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVjb3JkQ2hhbmdlU2Vjb25kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxNTAwMCk7XG4gIHBhdXNlTGltaXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHBhdXNlUmVjb3JkQ291bnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIGNhbkxhdW5jaFJlY29yZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHN0b3BMYXVuY2hSZWNvcmQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwYXJ0aWNpcGFudHNBbGwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcnRpY2lwYW50W10+KFtdKTtcblxuICBmaXJzdEFsbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICB1cGRhdGVNYWluV2luZG93ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGZpcnN0X3JvdW5kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGxhbmRTY2FwZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgbG9ja19zY3JlZW4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgc2NyZWVuSWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBhbGxWaWRlb1N0cmVhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PChQYXJ0aWNpcGFudCB8IFN0cmVhbSlbXT4oW10pO1xuICBuZXdMaW1pdGVkU3RyZWFtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8KFBhcnRpY2lwYW50IHwgU3RyZWFtKVtdPihbXSk7XG4gIG5ld0xpbWl0ZWRTdHJlYW1zSURzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuICBhY3RpdmVTb3VuZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG4gIHNjcmVlblNoYXJlSURTdHJlYW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBzY3JlZW5TaGFyZU5hbWVTdHJlYW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBhZG1pbklEU3RyZWFtID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgYWRtaW5OYW1lU3RyZWFtID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgeW91WW91U3RyZWFtID0gbmV3IEJlaGF2aW9yU3ViamVjdDwoUGFydGljaXBhbnQgfCBTdHJlYW0pW10+KFtdKTtcbiAgeW91WW91U3RyZWFtSURzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuICBsb2NhbFN0cmVhbSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVkaWFTdHJlYW0gfCBudWxsPihudWxsKTtcbiAgcmVjb3JkU3RhcnRlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWNvcmRSZXN1bWVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlY29yZFBhdXNlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWNvcmRTdG9wcGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGFkbWluUmVzdHJpY3RTZXR0aW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHZpZGVvUmVxdWVzdFN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgdmlkZW9SZXF1ZXN0VGltZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgdmlkZW9BY3Rpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgbG9jYWxTdHJlYW1WaWRlbyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVkaWFTdHJlYW0gfCBudWxsPihudWxsKTtcbiAgdXNlckRlZmF1bHRWaWRlb0lucHV0RGV2aWNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgY3VycmVudEZhY2luZ01vZGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ3VzZXInKTtcbiAgcHJldkZhY2luZ01vZGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ3VzZXInKTtcbiAgZGVmVmlkZW9JRCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIGFsbG93ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgZGlzcEFjdGl2ZU5hbWVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuICBwX2Rpc3BBY3RpdmVOYW1lcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcbiAgYWN0aXZlTmFtZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG4gIHByZXZBY3RpdmVOYW1lcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcbiAgcF9hY3RpdmVOYW1lcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcbiAgbWVtYmVyc1JlY2VpdmVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGRlZmVyU2NyZWVuUmVjZWl2ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaG9zdEZpcnN0U3dpdGNoID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIG1pY0FjdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBzY3JlZW5BY3Rpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgY2hhdEFjdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBhdWRpb1JlcXVlc3RTdGF0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHNjcmVlblJlcXVlc3RTdGF0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNoYXRSZXF1ZXN0U3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBhdWRpb1JlcXVlc3RUaW1lID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBzY3JlZW5SZXF1ZXN0VGltZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgY2hhdFJlcXVlc3RUaW1lID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICB1cGRhdGVSZXF1ZXN0SW50ZXJ2YWxTZWNvbmRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDI0MCk7XG4gIG9sZFNvdW5kSWRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuICBob3N0TGFiZWwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ0hvc3QnKTtcbiAgbWFpblNjcmVlbkZpbGxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBsb2NhbFN0cmVhbVNjcmVlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVkaWFTdHJlYW0gfCBudWxsPihudWxsKTtcbiAgc2NyZWVuQWxyZWFkeU9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGNoYXRBbHJlYWR5T24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVkaXJlY3RVUkwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBvbGRBbGxTdHJlYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDwoUGFydGljaXBhbnQgfCBTdHJlYW0pW10+KFtdKTtcbiAgYWRtaW5WaWRJRCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHN0cmVhbU5hbWVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTdHJlYW1bXT4oW10pO1xuICBub25fYWxWaWRlb1N0cmVhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcnRpY2lwYW50W10+KFtdKTtcbiAgc29ydEF1ZGlvTG91ZG5lc3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgYXVkaW9EZWNpYmVscyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXVkaW9EZWNpYmVsc1tdPihbXSk7XG4gIG1peGVkX2FsVmlkZW9TdHJlYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDwoUGFydGljaXBhbnQgfCBTdHJlYW0pW10+KFtdKTtcbiAgbm9uX2FsVmlkZW9TdHJlYW1zX211dGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYXJ0aWNpcGFudFtdPihbXSk7XG4gIHBhZ2luYXRlZFN0cmVhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PChQYXJ0aWNpcGFudCB8IFN0cmVhbSlbXVtdPihbXSk7XG4gIGxvY2FsU3RyZWFtQXVkaW8gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lZGlhU3RyZWFtIHwgbnVsbD4obnVsbCk7XG4gIGRlZkF1ZGlvSUQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICB1c2VyRGVmYXVsdEF1ZGlvSW5wdXREZXZpY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICB1c2VyRGVmYXVsdEF1ZGlvT3V0cHV0RGV2aWNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJldkF1ZGlvSW5wdXREZXZpY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcmV2VmlkZW9JbnB1dERldmljZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIGF1ZGlvUGF1c2VkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIG1haW5TY3JlZW5QZXJzb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBhZG1pbk9uTWFpblNjcmVlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBzY3JlZW5TdGF0ZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNjcmVlblN0YXRlW10+KFtcbiAgICB7XG4gICAgICBtYWluU2NyZWVuUGVyc29uOiAnJyxcbiAgICAgIG1haW5TY3JlZW5Qcm9kdWNlcklkOiAnJyxcbiAgICAgIG1haW5TY3JlZW5GaWxsZWQ6IGZhbHNlLFxuICAgICAgYWRtaW5Pbk1haW5TY3JlZW46IGZhbHNlLFxuICAgIH0sXG4gIF0pO1xuICBwcmV2U2NyZWVuU3RhdGVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTY3JlZW5TdGF0ZVtdPihbXG4gICAge1xuICAgICAgbWFpblNjcmVlblBlcnNvbjogJycsXG4gICAgICBtYWluU2NyZWVuUHJvZHVjZXJJZDogJycsXG4gICAgICBtYWluU2NyZWVuRmlsbGVkOiBmYWxzZSxcbiAgICAgIGFkbWluT25NYWluU2NyZWVuOiBmYWxzZSxcbiAgICB9LFxuICBdKTtcbiAgdXBkYXRlRGF0ZVN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgbGFzdFVwZGF0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIG5Gb3JSZWFkanVzdFJlY29yZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgZml4ZWRQYWdlTGltaXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oNCk7XG4gIHJlbW92ZUFsdEdyaWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgbkZvclJlYWRqdXN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICByZW9yZGVySW50ZXJ2YWwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMzAwMDApO1xuICBmYXN0UmVvcmRlckludGVydmFsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDEwMDAwKTtcbiAgbGFzdFJlb3JkZXJUaW1lID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBhdWRTdHJlYW1OYW1lcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RyZWFtW10+KFtdKTtcbiAgY3VycmVudFVzZXJQYWdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBtYWluSGVpZ2h0V2lkdGggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHByZXZNYWluSGVpZ2h0V2lkdGggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odGhpcy5tYWluSGVpZ2h0V2lkdGgudmFsdWUpO1xuICBwcmV2RG9QYWdpbmF0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBkb1BhZ2luYXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHNoYXJlRW5kZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgbFN0cmVhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PChQYXJ0aWNpcGFudCB8IFN0cmVhbSlbXT4oW10pO1xuICBjaGF0UmVmU3RyZWFtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8KFBhcnRpY2lwYW50IHwgU3RyZWFtKVtdPihbXSk7XG4gIGNvbnRyb2xIZWlnaHQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oXG4gICAgdGhpcy5ldmVudFR5cGUudmFsdWUgPT09ICd3ZWJpbmFyJyB8fCB0aGlzLmV2ZW50VHlwZS52YWx1ZSA9PT0gJ2NvbmZlcmVuY2UnID8gMCA6IDAuMDYsXG4gICk7XG4gIGlzV2lkZVNjcmVlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc01lZGl1bVNjcmVlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc1NtYWxsU2NyZWVuID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGFkZEdyaWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgYWRkQWx0R3JpZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBncmlkUm93cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgZ3JpZENvbHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIGFsdEdyaWRSb3dzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBhbHRHcmlkQ29scyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgbnVtYmVyUGFnZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIGN1cnJlbnRTdHJlYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDwoUGFydGljaXBhbnQgfCBTdHJlYW0pW10+KFtdKTtcbiAgc2hvd01pbmlWaWV3ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIG5TdHJlYW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lZGlhU3RyZWFtIHwgbnVsbD4obnVsbCk7XG4gIGRlZmVyX3JlY2VpdmUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgYWxsQXVkaW9TdHJlYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDwoUGFydGljaXBhbnQgfCBTdHJlYW0pW10+KFtdKTtcbiAgcmVtb3RlU2NyZWVuU3RyZWFtID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTdHJlYW1bXT4oW10pO1xuICBzY3JlZW5Qcm9kdWNlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJvZHVjZXIgfCBudWxsPihudWxsKTtcbiAgZ290QWxsVmlkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwYWdpbmF0aW9uSGVpZ2h0V2lkdGggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oNDApO1xuICBwYWdpbmF0aW9uRGlyZWN0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDwnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnPignaG9yaXpvbnRhbCcpO1xuICBncmlkU2l6ZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEdyaWRTaXplcz4oe1xuICAgIGdyaWRXaWR0aDogMCxcbiAgICBncmlkSGVpZ2h0OiAwLFxuICAgIGFsdEdyaWRXaWR0aDogMCxcbiAgICBhbHRHcmlkSGVpZ2h0OiAwLFxuICB9KTtcbiAgc2NyZWVuRm9yY2VGdWxsRGlzcGxheSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBtYWluR3JpZFN0cmVhbSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q3VzdG9tTWVkaWFDb21wb25lbnRbXT4oW10pO1xuICBvdGhlckdyaWRTdHJlYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDdXN0b21NZWRpYUNvbXBvbmVudFtdW10+KFtdKTtcbiAgYXVkaW9Pbmx5U3RyZWFtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q3VzdG9tTWVkaWFDb21wb25lbnRbXT4oW10pO1xuICB2aWRlb0lucHV0cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVkaWFEZXZpY2VJbmZvW10+KFtdKTtcbiAgYXVkaW9JbnB1dHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lZGlhRGV2aWNlSW5mb1tdPihbXSk7XG4gIG1lZXRpbmdQcm9ncmVzc1RpbWUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJzAwOjAwOjAwJyk7XG4gIG1lZXRpbmdFbGFwc2VkVGltZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcmVmX3BhcnRpY2lwYW50cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFydGljaXBhbnRbXT4oW10pO1xuXG4gIHVwZGF0ZVZhbGlkYXRlZCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMudmFsaWRhdGVkLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVNvY2tldCA9ICh2YWx1ZTogU29ja2V0KSA9PiB7XG4gICAgdGhpcy5zb2NrZXQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlRGV2aWNlID0gKHZhbHVlOiBEZXZpY2UgfCBudWxsKSA9PiB7XG4gICAgdGhpcy5kZXZpY2UubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUm9vbURhdGEgPSAodmFsdWU6IFJlc3BvbnNlSm9pblJvb20gfCBudWxsKSA9PiB7XG4gICAgdGhpcy5yb29tRGF0YS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVBcGlLZXkgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMuYXBpS2V5Lm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUFwaVVzZXJOYW1lID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLmFwaVVzZXJOYW1lLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUFwaVRva2VuID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLmFwaVRva2VuLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUxpbmsgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMubGluay5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSb29tTmFtZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5yb29tTmFtZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVNZW1iZXIgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMubWVtYmVyLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUFkbWluUGFzc2NvZGUgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMuYWRtaW5QYXNzY29kZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVJc2xldmVsID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLmlzbGV2ZWwubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQ29Ib3N0ID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLmNvSG9zdC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVDb0hvc3RSZXNwb25zaWJpbGl0eSA9ICh2YWx1ZTogQ29Ib3N0UmVzcG9uc2liaWxpdHlbXSkgPT4ge1xuICAgIHRoaXMuY29Ib3N0UmVzcG9uc2liaWxpdHkubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlWW91QXJlQ29Ib3N0ID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy55b3VBcmVDb0hvc3QubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlWW91QXJlSG9zdCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMueW91QXJlSG9zdC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVDb25maXJtZWRUb1JlY29yZCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuY29uZmlybWVkVG9SZWNvcmQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlTWVldGluZ0Rpc3BsYXlUeXBlID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLm1lZXRpbmdEaXNwbGF5VHlwZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVNZWV0aW5nVmlkZW9PcHRpbWl6ZWQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLm1lZXRpbmdWaWRlb09wdGltaXplZC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVFdmVudFR5cGUgPSAodmFsdWU6IEV2ZW50VHlwZSkgPT4ge1xuICAgIHRoaXMuZXZlbnRUeXBlLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVBhcnRpY2lwYW50cyA9ICh2YWx1ZTogUGFydGljaXBhbnRbXSkgPT4ge1xuICAgIHRoaXMucGFydGljaXBhbnRzLm5leHQodmFsdWUpO1xuICAgIHRoaXMucGFydGljaXBhbnRzQ291bnRlci5uZXh0KHZhbHVlLmxlbmd0aCk7XG4gICAgdGhpcy5maWx0ZXJlZFBhcnRpY2lwYW50cy5uZXh0KHRoaXMucGFydGljaXBhbnRzLnZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVGaWx0ZXJlZFBhcnRpY2lwYW50cyA9ICh2YWx1ZTogUGFydGljaXBhbnRbXSkgPT4ge1xuICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGFudHMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUGFydGljaXBhbnRzQ291bnRlciA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5wYXJ0aWNpcGFudHNDb3VudGVyLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVBhcnRpY2lwYW50c0ZpbHRlciA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5wYXJ0aWNpcGFudHNGaWx0ZXIubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQ29uc3VtZV9zb2NrZXRzID0gKHZhbHVlOiBDb25zdW1lU29ja2V0W10pID0+IHtcbiAgICB0aGlzLmNvbnN1bWVfc29ja2V0cy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSdHBDYXBhYmlsaXRpZXMgPSAodmFsdWU6IFJ0cENhcGFiaWxpdGllcyB8IG51bGwpID0+IHtcbiAgICB0aGlzLnJ0cENhcGFiaWxpdGllcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSb29tUmVjdklQcyA9ICh2YWx1ZTogc3RyaW5nW10pID0+IHtcbiAgICB0aGlzLnJvb21SZWN2SVBzLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZU1lZXRpbmdSb29tUGFyYW1zID0gKHZhbHVlOiBNZWV0aW5nUm9vbVBhcmFtcyB8IG51bGwpID0+IHtcbiAgICB0aGlzLm1lZXRpbmdSb29tUGFyYW1zLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUl0ZW1QYWdlTGltaXQgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuaXRlbVBhZ2VMaW1pdC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVBdWRpb09ubHlSb29tID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5hdWRpb09ubHlSb29tLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUFkZEZvckJhc2ljID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5hZGRGb3JCYXNpYy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVTY3JlZW5QYWdlTGltaXQgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuc2NyZWVuUGFnZUxpbWl0Lm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVNoYXJlU2NyZWVuU3RhcnRlZCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuc2hhcmVTY3JlZW5TdGFydGVkLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVNoYXJlZCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuc2hhcmVkLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVRhcmdldE9yaWVudGF0aW9uID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLnRhcmdldE9yaWVudGF0aW9uLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVRhcmdldFJlc29sdXRpb24gPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMudGFyZ2V0UmVzb2x1dGlvbi5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVUYXJnZXRSZXNvbHV0aW9uSG9zdCA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy50YXJnZXRSZXNvbHV0aW9uSG9zdC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVWaWRDb25zID0gKHZhbHVlOiBWaWRDb25zKSA9PiB7XG4gICAgdGhpcy52aWRDb25zLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUZyYW1lUmF0ZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5mcmFtZVJhdGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlSFBhcmFtcyA9ICh2YWx1ZTogSFBhcmFtc1R5cGUpID0+IHtcbiAgICB0aGlzLmhQYXJhbXMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlVlBhcmFtcyA9ICh2YWx1ZTogVlBhcmFtc1R5cGUpID0+IHtcbiAgICB0aGlzLnZQYXJhbXMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlU2NyZWVuUGFyYW1zID0gKHZhbHVlOiBTY3JlZW5QYXJhbXNUeXBlKSA9PiB7XG4gICAgdGhpcy5zY3JlZW5QYXJhbXMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQVBhcmFtcyA9ICh2YWx1ZTogQVBhcmFtc1R5cGUpID0+IHtcbiAgICB0aGlzLmFQYXJhbXMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkaW5nQXVkaW9QYXVzZXNMaW1pdCA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5yZWNvcmRpbmdBdWRpb1BhdXNlc0xpbWl0Lm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVJlY29yZGluZ0F1ZGlvUGF1c2VzQ291bnQgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMucmVjb3JkaW5nQXVkaW9QYXVzZXNDb3VudC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSZWNvcmRpbmdBdWRpb1N1cHBvcnQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnJlY29yZGluZ0F1ZGlvU3VwcG9ydC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSZWNvcmRpbmdBdWRpb1Blb3BsZUxpbWl0ID0gKHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICB0aGlzLnJlY29yZGluZ0F1ZGlvUGVvcGxlTGltaXQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkaW5nQXVkaW9QYXJ0aWNpcGFudHNUaW1lTGltaXQgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMucmVjb3JkaW5nQXVkaW9QYXJ0aWNpcGFudHNUaW1lTGltaXQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkaW5nVmlkZW9QYXVzZXNDb3VudCA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5yZWNvcmRpbmdWaWRlb1BhdXNlc0NvdW50Lm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVJlY29yZGluZ1ZpZGVvUGF1c2VzTGltaXQgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMucmVjb3JkaW5nVmlkZW9QYXVzZXNMaW1pdC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSZWNvcmRpbmdWaWRlb1N1cHBvcnQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnJlY29yZGluZ1ZpZGVvU3VwcG9ydC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSZWNvcmRpbmdWaWRlb1Blb3BsZUxpbWl0ID0gKHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICB0aGlzLnJlY29yZGluZ1ZpZGVvUGVvcGxlTGltaXQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNUaW1lTGltaXQgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMucmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNUaW1lTGltaXQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkaW5nQWxsUGFydGljaXBhbnRzU3VwcG9ydCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMucmVjb3JkaW5nQWxsUGFydGljaXBhbnRzU3VwcG9ydC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c1N1cHBvcnQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnJlY29yZGluZ1ZpZGVvUGFydGljaXBhbnRzU3VwcG9ydC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSZWNvcmRpbmdBbGxQYXJ0aWNpcGFudHNGdWxsUm9vbVN1cHBvcnQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnJlY29yZGluZ0FsbFBhcnRpY2lwYW50c0Z1bGxSb29tU3VwcG9ydC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c0Z1bGxSb29tU3VwcG9ydCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMucmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNGdWxsUm9vbVN1cHBvcnQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkaW5nUHJlZmVycmVkT3JpZW50YXRpb24gPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMucmVjb3JkaW5nUHJlZmVycmVkT3JpZW50YXRpb24ubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkaW5nU3VwcG9ydEZvck90aGVyT3JpZW50YXRpb24gPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnJlY29yZGluZ1N1cHBvcnRGb3JPdGhlck9yaWVudGF0aW9uLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVJlY29yZGluZ011bHRpRm9ybWF0c1N1cHBvcnQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnJlY29yZGluZ011bHRpRm9ybWF0c1N1cHBvcnQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlVXNlclJlY29yZGluZ1BhcmFtcyA9ICh2YWx1ZTogVXNlclJlY29yZGluZ1BhcmFtcykgPT4ge1xuICAgIHRoaXMudXNlclJlY29yZGluZ1BhcmFtcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVDYW5SZWNvcmQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmNhblJlY29yZC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVTdGFydFJlcG9ydCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuc3RhcnRSZXBvcnQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlRW5kUmVwb3J0ID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5lbmRSZXBvcnQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkVGltZXJJbnRlcnZhbCA9ICh2YWx1ZTogTm9kZUpTLlRpbWVvdXQgfCBudWxsKSA9PiB7XG4gICAgdGhpcy5yZWNvcmRUaW1lckludGVydmFsLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVJlY29yZFN0YXJ0VGltZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5yZWNvcmRTdGFydFRpbWUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkRWxhcHNlZFRpbWUgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMucmVjb3JkRWxhcHNlZFRpbWUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlSXNUaW1lclJ1bm5pbmcgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmlzVGltZXJSdW5uaW5nLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUNhblBhdXNlUmVzdW1lID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5jYW5QYXVzZVJlc3VtZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSZWNvcmRDaGFuZ2VTZWNvbmRzID0gKHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICB0aGlzLnJlY29yZENoYW5nZVNlY29uZHMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUGF1c2VMaW1pdCA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5wYXVzZUxpbWl0Lm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVBhdXNlUmVjb3JkQ291bnQgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMucGF1c2VSZWNvcmRDb3VudC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVDYW5MYXVuY2hSZWNvcmQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmNhbkxhdW5jaFJlY29yZC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVTdG9wTGF1bmNoUmVjb3JkID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5zdG9wTGF1bmNoUmVjb3JkLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVBhcnRpY2lwYW50c0FsbCA9ICh2YWx1ZTogUGFydGljaXBhbnRbXSkgPT4ge1xuICAgIHRoaXMucGFydGljaXBhbnRzQWxsLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUZpcnN0QWxsID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5maXJzdEFsbC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVVcGRhdGVNYWluV2luZG93ID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy51cGRhdGVNYWluV2luZG93Lm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUZpcnN0X3JvdW5kID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5maXJzdF9yb3VuZC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVMYW5kU2NhcGVkID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5sYW5kU2NhcGVkLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUxvY2tfc2NyZWVuID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5sb2NrX3NjcmVlbi5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVTY3JlZW5JZCA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5zY3JlZW5JZC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVBbGxWaWRlb1N0cmVhbXMgPSAodmFsdWU6IChQYXJ0aWNpcGFudCB8IFN0cmVhbSlbXSkgPT4ge1xuICAgIHRoaXMuYWxsVmlkZW9TdHJlYW1zLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZU5ld0xpbWl0ZWRTdHJlYW1zID0gKHZhbHVlOiAoUGFydGljaXBhbnQgfCBTdHJlYW0pW10pID0+IHtcbiAgICB0aGlzLm5ld0xpbWl0ZWRTdHJlYW1zLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZU5ld0xpbWl0ZWRTdHJlYW1zSURzID0gKHZhbHVlOiBzdHJpbmdbXSkgPT4ge1xuICAgIHRoaXMubmV3TGltaXRlZFN0cmVhbXNJRHMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQWN0aXZlU291bmRzID0gKHZhbHVlOiBzdHJpbmdbXSkgPT4ge1xuICAgIHRoaXMuYWN0aXZlU291bmRzLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVNjcmVlblNoYXJlSURTdHJlYW0gPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMuc2NyZWVuU2hhcmVJRFN0cmVhbS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVTY3JlZW5TaGFyZU5hbWVTdHJlYW0gPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMuc2NyZWVuU2hhcmVOYW1lU3RyZWFtLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUFkbWluSURTdHJlYW0gPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMuYWRtaW5JRFN0cmVhbS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVBZG1pbk5hbWVTdHJlYW0gPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMuYWRtaW5OYW1lU3RyZWFtLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVlvdVlvdVN0cmVhbSA9ICh2YWx1ZTogKFBhcnRpY2lwYW50IHwgU3RyZWFtKVtdKSA9PiB7XG4gICAgdGhpcy55b3VZb3VTdHJlYW0ubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlWW91WW91U3RyZWFtSURzID0gKHZhbHVlOiBzdHJpbmdbXSkgPT4ge1xuICAgIHRoaXMueW91WW91U3RyZWFtSURzLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUxvY2FsU3RyZWFtID0gKHZhbHVlOiBNZWRpYVN0cmVhbSB8IG51bGwpID0+IHtcbiAgICB0aGlzLmxvY2FsU3RyZWFtLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVJlY29yZFN0YXJ0ZWQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnJlY29yZFN0YXJ0ZWQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkUmVzdW1lZCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMucmVjb3JkUmVzdW1lZC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSZWNvcmRQYXVzZWQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnJlY29yZFBhdXNlZC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSZWNvcmRTdG9wcGVkID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5yZWNvcmRTdG9wcGVkLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUFkbWluUmVzdHJpY3RTZXR0aW5nID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5hZG1pblJlc3RyaWN0U2V0dGluZy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVWaWRlb1JlcXVlc3RTdGF0ZSA9ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgIHRoaXMudmlkZW9SZXF1ZXN0U3RhdGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlVmlkZW9SZXF1ZXN0VGltZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy52aWRlb1JlcXVlc3RUaW1lLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVZpZGVvQWN0aW9uID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy52aWRlb0FjdGlvbi5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVMb2NhbFN0cmVhbVZpZGVvID0gKHZhbHVlOiBNZWRpYVN0cmVhbSB8IG51bGwpID0+IHtcbiAgICB0aGlzLmxvY2FsU3RyZWFtVmlkZW8ubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlVXNlckRlZmF1bHRWaWRlb0lucHV0RGV2aWNlID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLnVzZXJEZWZhdWx0VmlkZW9JbnB1dERldmljZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVDdXJyZW50RmFjaW5nTW9kZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5jdXJyZW50RmFjaW5nTW9kZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVQcmV2RmFjaW5nTW9kZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5wcmV2RmFjaW5nTW9kZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVEZWZWaWRlb0lEID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLmRlZlZpZGVvSUQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQWxsb3dlZCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuYWxsb3dlZC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVEaXNwQWN0aXZlTmFtZXMgPSAodmFsdWU6IHN0cmluZ1tdKSA9PiB7XG4gICAgdGhpcy5kaXNwQWN0aXZlTmFtZXMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUF9kaXNwQWN0aXZlTmFtZXMgPSAodmFsdWU6IHN0cmluZ1tdKSA9PiB7XG4gICAgdGhpcy5wX2Rpc3BBY3RpdmVOYW1lcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVBY3RpdmVOYW1lcyA9ICh2YWx1ZTogc3RyaW5nW10pID0+IHtcbiAgICB0aGlzLmFjdGl2ZU5hbWVzLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVByZXZBY3RpdmVOYW1lcyA9ICh2YWx1ZTogc3RyaW5nW10pID0+IHtcbiAgICB0aGlzLnByZXZBY3RpdmVOYW1lcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVQX2FjdGl2ZU5hbWVzID0gKHZhbHVlOiBzdHJpbmdbXSkgPT4ge1xuICAgIHRoaXMucF9hY3RpdmVOYW1lcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVNZW1iZXJzUmVjZWl2ZWQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLm1lbWJlcnNSZWNlaXZlZC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVEZWZlclNjcmVlblJlY2VpdmVkID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5kZWZlclNjcmVlblJlY2VpdmVkLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUhvc3RGaXJzdFN3aXRjaCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuaG9zdEZpcnN0U3dpdGNoLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZU1pY0FjdGlvbiA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMubWljQWN0aW9uLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVNjcmVlbkFjdGlvbiA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuc2NyZWVuQWN0aW9uLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUNoYXRBY3Rpb24gPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmNoYXRBY3Rpb24ubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQXVkaW9SZXF1ZXN0U3RhdGUgPSAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICB0aGlzLmF1ZGlvUmVxdWVzdFN0YXRlLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVNjcmVlblJlcXVlc3RTdGF0ZSA9ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgIHRoaXMuc2NyZWVuUmVxdWVzdFN0YXRlLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUNoYXRSZXF1ZXN0U3RhdGUgPSAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICB0aGlzLmNoYXRSZXF1ZXN0U3RhdGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQXVkaW9SZXF1ZXN0VGltZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5hdWRpb1JlcXVlc3RUaW1lLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVNjcmVlblJlcXVlc3RUaW1lID0gKHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICB0aGlzLnNjcmVlblJlcXVlc3RUaW1lLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUNoYXRSZXF1ZXN0VGltZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5jaGF0UmVxdWVzdFRpbWUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlT2xkU291bmRJZHMgPSAodmFsdWU6IHN0cmluZ1tdKSA9PiB7XG4gICAgdGhpcy5vbGRTb3VuZElkcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVIb3N0TGFiZWwgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMuaG9zdExhYmVsLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZU1haW5TY3JlZW5GaWxsZWQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLm1haW5TY3JlZW5GaWxsZWQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlTG9jYWxTdHJlYW1TY3JlZW4gPSAodmFsdWU6IE1lZGlhU3RyZWFtIHwgbnVsbCkgPT4ge1xuICAgIHRoaXMubG9jYWxTdHJlYW1TY3JlZW4ubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlU2NyZWVuQWxyZWFkeU9uID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5zY3JlZW5BbHJlYWR5T24ubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQ2hhdEFscmVhZHlPbiA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuY2hhdEFscmVhZHlPbi5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSZWRpcmVjdFVSTCA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5yZWRpcmVjdFVSTC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVPbGRBbGxTdHJlYW1zID0gKHZhbHVlOiAoUGFydGljaXBhbnQgfCBTdHJlYW0pW10pID0+IHtcbiAgICB0aGlzLm9sZEFsbFN0cmVhbXMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQWRtaW5WaWRJRCA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5hZG1pblZpZElELm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVN0cmVhbU5hbWVzID0gKHZhbHVlOiBTdHJlYW1bXSkgPT4ge1xuICAgIHRoaXMuc3RyZWFtTmFtZXMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlTm9uX2FsVmlkZW9TdHJlYW1zID0gKHZhbHVlOiBQYXJ0aWNpcGFudFtdKSA9PiB7XG4gICAgdGhpcy5ub25fYWxWaWRlb1N0cmVhbXMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlU29ydEF1ZGlvTG91ZG5lc3MgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnNvcnRBdWRpb0xvdWRuZXNzLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUF1ZGlvRGVjaWJlbHMgPSAodmFsdWU6IEF1ZGlvRGVjaWJlbHNbXSkgPT4ge1xuICAgIHRoaXMuYXVkaW9EZWNpYmVscy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVNaXhlZF9hbFZpZGVvU3RyZWFtcyA9ICh2YWx1ZTogKFBhcnRpY2lwYW50IHwgU3RyZWFtKVtdKSA9PiB7XG4gICAgdGhpcy5taXhlZF9hbFZpZGVvU3RyZWFtcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVOb25fYWxWaWRlb1N0cmVhbXNfbXV0ZWQgPSAodmFsdWU6IFBhcnRpY2lwYW50W10pID0+IHtcbiAgICB0aGlzLm5vbl9hbFZpZGVvU3RyZWFtc19tdXRlZC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVQYWdpbmF0ZWRTdHJlYW1zID0gKHZhbHVlOiAoUGFydGljaXBhbnQgfCBTdHJlYW0pW11bXSkgPT4ge1xuICAgIHRoaXMucGFnaW5hdGVkU3RyZWFtcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVMb2NhbFN0cmVhbUF1ZGlvID0gKHZhbHVlOiBNZWRpYVN0cmVhbSB8IG51bGwpID0+IHtcbiAgICB0aGlzLmxvY2FsU3RyZWFtQXVkaW8ubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlRGVmQXVkaW9JRCA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5kZWZBdWRpb0lELm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVVzZXJEZWZhdWx0QXVkaW9JbnB1dERldmljZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy51c2VyRGVmYXVsdEF1ZGlvSW5wdXREZXZpY2UubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlVXNlckRlZmF1bHRBdWRpb091dHB1dERldmljZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy51c2VyRGVmYXVsdEF1ZGlvT3V0cHV0RGV2aWNlLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVByZXZBdWRpb0lucHV0RGV2aWNlID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLnByZXZBdWRpb0lucHV0RGV2aWNlLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVByZXZWaWRlb0lucHV0RGV2aWNlID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLnByZXZWaWRlb0lucHV0RGV2aWNlLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUF1ZGlvUGF1c2VkID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5hdWRpb1BhdXNlZC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVNYWluU2NyZWVuUGVyc29uID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLm1haW5TY3JlZW5QZXJzb24ubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQWRtaW5Pbk1haW5TY3JlZW4gPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmFkbWluT25NYWluU2NyZWVuLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVNjcmVlblN0YXRlcyA9ICh2YWx1ZTogU2NyZWVuU3RhdGVbXSkgPT4ge1xuICAgIHRoaXMuc2NyZWVuU3RhdGVzLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVByZXZTY3JlZW5TdGF0ZXMgPSAodmFsdWU6IFNjcmVlblN0YXRlW10pID0+IHtcbiAgICB0aGlzLnByZXZTY3JlZW5TdGF0ZXMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlVXBkYXRlRGF0ZVN0YXRlID0gKHZhbHVlOiBudW1iZXIgfCBudWxsKSA9PiB7XG4gICAgdGhpcy51cGRhdGVEYXRlU3RhdGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlTGFzdFVwZGF0ZSA9ICh2YWx1ZTogbnVtYmVyIHwgbnVsbCkgPT4ge1xuICAgIHRoaXMubGFzdFVwZGF0ZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVORm9yUmVhZGp1c3RSZWNvcmQgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMubkZvclJlYWRqdXN0UmVjb3JkLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUZpeGVkUGFnZUxpbWl0ID0gKHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICB0aGlzLmZpeGVkUGFnZUxpbWl0Lm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVJlbW92ZUFsdEdyaWQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnJlbW92ZUFsdEdyaWQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlTkZvclJlYWRqdXN0ID0gKHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICB0aGlzLm5Gb3JSZWFkanVzdC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVMYXN0UmVvcmRlclRpbWUgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMubGFzdFJlb3JkZXJUaW1lLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUF1ZFN0cmVhbU5hbWVzID0gKHZhbHVlOiBTdHJlYW1bXSkgPT4ge1xuICAgIHRoaXMuYXVkU3RyZWFtTmFtZXMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQ3VycmVudFVzZXJQYWdlID0gKHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICB0aGlzLmN1cnJlbnRVc2VyUGFnZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVNYWluSGVpZ2h0V2lkdGggPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMubWFpbkhlaWdodFdpZHRoLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVByZXZNYWluSGVpZ2h0V2lkdGggPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMucHJldk1haW5IZWlnaHRXaWR0aC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVQcmV2RG9QYWdpbmF0ZSA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMucHJldkRvUGFnaW5hdGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlRG9QYWdpbmF0ZSA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuZG9QYWdpbmF0ZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVTaGFyZUVuZGVkID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5zaGFyZUVuZGVkLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUxTdHJlYW1zID0gKHZhbHVlOiAoUGFydGljaXBhbnQgfCBTdHJlYW0pW10pID0+IHtcbiAgICB0aGlzLmxTdHJlYW1zLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUNoYXRSZWZTdHJlYW1zID0gKHZhbHVlOiAoUGFydGljaXBhbnQgfCBTdHJlYW0pW10pID0+IHtcbiAgICB0aGlzLmNoYXRSZWZTdHJlYW1zLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUNvbnRyb2xIZWlnaHQgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuY29udHJvbEhlaWdodC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVJc1dpZGVTY3JlZW4gPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmlzV2lkZVNjcmVlbi5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVJc01lZGl1bVNjcmVlbiA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuaXNNZWRpdW1TY3JlZW4ubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlSXNTbWFsbFNjcmVlbiA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuaXNTbWFsbFNjcmVlbi5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVBZGRHcmlkID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5hZGRHcmlkLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUFkZEFsdEdyaWQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmFkZEFsdEdyaWQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlR3JpZFJvd3MgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuZ3JpZFJvd3MubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlR3JpZENvbHMgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuZ3JpZENvbHMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQWx0R3JpZFJvd3MgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuYWx0R3JpZFJvd3MubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQWx0R3JpZENvbHMgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuYWx0R3JpZENvbHMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlTnVtYmVyUGFnZXMgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMubnVtYmVyUGFnZXMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQ3VycmVudFN0cmVhbXMgPSAodmFsdWU6IChQYXJ0aWNpcGFudCB8IFN0cmVhbSlbXSkgPT4ge1xuICAgIHRoaXMuY3VycmVudFN0cmVhbXMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlU2hvd01pbmlWaWV3ID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5zaG93TWluaVZpZXcubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlTlN0cmVhbSA9ICh2YWx1ZTogTWVkaWFTdHJlYW0gfCBudWxsKSA9PiB7XG4gICAgdGhpcy5uU3RyZWFtLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZURlZmVyX3JlY2VpdmUgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmRlZmVyX3JlY2VpdmUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQWxsQXVkaW9TdHJlYW1zID0gKHZhbHVlOiAoUGFydGljaXBhbnQgfCBTdHJlYW0pW10pID0+IHtcbiAgICB0aGlzLmFsbEF1ZGlvU3RyZWFtcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSZW1vdGVTY3JlZW5TdHJlYW0gPSAodmFsdWU6IFN0cmVhbVtdKSA9PiB7XG4gICAgdGhpcy5yZW1vdGVTY3JlZW5TdHJlYW0ubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlU2NyZWVuUHJvZHVjZXIgPSAodmFsdWU6IFByb2R1Y2VyIHwgbnVsbCkgPT4ge1xuICAgIHRoaXMuc2NyZWVuUHJvZHVjZXIubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlR290QWxsVmlkcyA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuZ290QWxsVmlkcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVQYWdpbmF0aW9uSGVpZ2h0V2lkdGggPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMucGFnaW5hdGlvbkhlaWdodFdpZHRoLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVBhZ2luYXRpb25EaXJlY3Rpb24gPSAodmFsdWU6ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcpID0+IHtcbiAgICB0aGlzLnBhZ2luYXRpb25EaXJlY3Rpb24ubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlR3JpZFNpemVzID0gKHZhbHVlOiBHcmlkU2l6ZXMpID0+IHtcbiAgICB0aGlzLmdyaWRTaXplcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVTY3JlZW5Gb3JjZUZ1bGxEaXNwbGF5ID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5zY3JlZW5Gb3JjZUZ1bGxEaXNwbGF5Lm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZU1haW5HcmlkU3RyZWFtID0gKHZhbHVlOiBDdXN0b21NZWRpYUNvbXBvbmVudFtdKSA9PiB7XG4gICAgdGhpcy5tYWluR3JpZFN0cmVhbS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVPdGhlckdyaWRTdHJlYW1zID0gKHZhbHVlOiBDdXN0b21NZWRpYUNvbXBvbmVudFtdW10pID0+IHtcbiAgICB0aGlzLm90aGVyR3JpZFN0cmVhbXMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQXVkaW9Pbmx5U3RyZWFtcyA9ICh2YWx1ZTogQ3VzdG9tTWVkaWFDb21wb25lbnRbXSkgPT4ge1xuICAgIHRoaXMuYXVkaW9Pbmx5U3RyZWFtcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVWaWRlb0lucHV0cyA9ICh2YWx1ZTogTWVkaWFEZXZpY2VJbmZvW10pID0+IHtcbiAgICB0aGlzLnZpZGVvSW5wdXRzLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUF1ZGlvSW5wdXRzID0gKHZhbHVlOiBNZWRpYURldmljZUluZm9bXSkgPT4ge1xuICAgIHRoaXMuYXVkaW9JbnB1dHMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlTWVldGluZ1Byb2dyZXNzVGltZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5tZWV0aW5nUHJvZ3Jlc3NUaW1lLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZU1lZXRpbmdFbGFwc2VkVGltZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5tZWV0aW5nRWxhcHNlZFRpbWUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVmX3BhcnRpY2lwYW50cyA9ICh2YWx1ZTogUGFydGljaXBhbnRbXSkgPT4ge1xuICAgIHRoaXMucmVmX3BhcnRpY2lwYW50cy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICAvLyBNZXNzYWdlc1xuICBtZXNzYWdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVzc2FnZVtdPihbXSk7XG4gIHN0YXJ0RGlyZWN0TWVzc2FnZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBkaXJlY3RNZXNzYWdlRGV0YWlscyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFydGljaXBhbnQgfCBudWxsPihudWxsKTtcbiAgc2hvd01lc3NhZ2VzQmFkZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBFdmVudCBTZXR0aW5nc1xuICBhdWRpb1NldHRpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ2FsbG93Jyk7XG4gIHZpZGVvU2V0dGluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignYWxsb3cnKTtcbiAgc2NyZWVuc2hhcmVTZXR0aW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCdhbGxvdycpO1xuICBjaGF0U2V0dGluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignYWxsb3cnKTtcblxuICAvLyBEaXNwbGF5IFNldHRpbmdzXG4gIGRpc3BsYXlPcHRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ21lZGlhJyk7XG4gIGF1dG9XYXZlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgZm9yY2VGdWxsRGlzcGxheSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByZXZGb3JjZUZ1bGxEaXNwbGF5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByZXZNZWV0aW5nRGlzcGxheVR5cGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ3ZpZGVvJyk7XG5cbiAgLy8gV2FpdGluZyBSb29tXG4gIHdhaXRpbmdSb29tRmlsdGVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgd2FpdGluZ1Jvb21MaXN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxXYWl0aW5nUm9vbVBhcnRpY2lwYW50W10+KFtdKTtcbiAgd2FpdGluZ1Jvb21Db3VudGVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBmaWx0ZXJlZFdhaXRpbmdSb29tTGlzdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8V2FpdGluZ1Jvb21QYXJ0aWNpcGFudFtdPihbXSk7XG5cbiAgLy8gUmVxdWVzdHNcbiAgcmVxdWVzdEZpbHRlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHJlcXVlc3RMaXN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZXF1ZXN0W10+KFtdKTtcbiAgcmVxdWVzdENvdW50ZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIGZpbHRlcmVkUmVxdWVzdExpc3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlcXVlc3RbXT4oW10pO1xuXG4gIC8vIFRvdGFsIFJlcXVlc3RzIGFuZCBXYWl0aW5nIFJvb21cbiAgdG90YWxSZXFXYWl0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuXG4gIC8vIEFsZXJ0c1xuICBhbGVydFZpc2libGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgYWxlcnRNZXNzYWdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgYWxlcnRUeXBlID0gbmV3IEJlaGF2aW9yU3ViamVjdDwnc3VjY2VzcycgfCAnZGFuZ2VyJz4oJ3N1Y2Nlc3MnKTtcbiAgYWxlcnREdXJhdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigzMDAwKTtcblxuICAvLyBQcm9ncmVzcyBUaW1lclxuICBwcm9ncmVzc1RpbWVyVmlzaWJsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByb2dyZXNzVGltZXJWYWx1ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcblxuICAvLyBNZW51IE1vZGFsc1xuICBpc01lbnVNb2RhbFZpc2libGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNSZWNvcmRpbmdNb2RhbFZpc2libGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNTZXR0aW5nc01vZGFsVmlzaWJsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc1JlcXVlc3RzTW9kYWxWaXNpYmxlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGlzV2FpdGluZ01vZGFsVmlzaWJsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc0NvSG9zdE1vZGFsVmlzaWJsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc01lZGlhU2V0dGluZ3NNb2RhbFZpc2libGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNEaXNwbGF5U2V0dGluZ3NNb2RhbFZpc2libGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBPdGhlciBNb2RhbHNcbiAgaXNQYXJ0aWNpcGFudHNNb2RhbFZpc2libGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNNZXNzYWdlc01vZGFsVmlzaWJsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc0NvbmZpcm1FeGl0TW9kYWxWaXNpYmxlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGlzQ29uZmlybUhlcmVNb2RhbFZpc2libGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNTaGFyZUV2ZW50TW9kYWxWaXNpYmxlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGlzTG9hZGluZ01vZGFsVmlzaWJsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIFJlY29yZGluZyBPcHRpb25zXG4gIHJlY29yZGluZ01lZGlhT3B0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPigndmlkZW8nKTtcbiAgcmVjb3JkaW5nQXVkaW9PcHRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCdhbGwnKTtcbiAgcmVjb3JkaW5nVmlkZW9PcHRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCdhbGwnKTtcbiAgcmVjb3JkaW5nVmlkZW9UeXBlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCdmdWxsRGlzcGxheScpO1xuICByZWNvcmRpbmdWaWRlb09wdGltaXplZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWNvcmRpbmdEaXNwbGF5VHlwZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8J3ZpZGVvJyB8ICdtZWRpYScgfCAnYWxsJz4oJ3ZpZGVvJyk7XG4gIHJlY29yZGluZ0FkZEhMUyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlY29yZGluZ05hbWVUYWdzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcmVjb3JkaW5nQmFja2dyb3VuZENvbG9yID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcjODNjMGU5Jyk7XG4gIHJlY29yZGluZ05hbWVUYWdzQ29sb3IgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJyNmZmZmZmYnKTtcbiAgcmVjb3JkaW5nQWRkVGV4dCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWNvcmRpbmdDdXN0b21UZXh0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCdBZGQgVGV4dCcpO1xuICByZWNvcmRpbmdDdXN0b21UZXh0UG9zaXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ3RvcCcpO1xuICByZWNvcmRpbmdDdXN0b21UZXh0Q29sb3IgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJyNmZmZmZmYnKTtcbiAgcmVjb3JkaW5nT3JpZW50YXRpb25WaWRlbyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignbGFuZHNjYXBlJyk7XG4gIGNsZWFyZWRUb1Jlc3VtZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIGNsZWFyZWRUb1JlY29yZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlY29yZFN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCdncmVlbicpO1xuICBzaG93UmVjb3JkQnV0dG9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWNvcmRpbmdQcm9ncmVzc1RpbWUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJzAwOjAwOjAwJyk7XG4gIGF1ZGlvU3dpdGNoaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHZpZGVvU3dpdGNoaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgLy8gTWVkaWEgU3RhdGVzXG4gIHZpZGVvQWxyZWFkeU9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGF1ZGlvQWxyZWFkeU9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgY29tcG9uZW50U2l6ZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbXBvbmVudFNpemVzPih7XG4gICAgbWFpbkhlaWdodDogMCxcbiAgICBvdGhlckhlaWdodDogMCxcbiAgICBtYWluV2lkdGg6IDAsXG4gICAgb3RoZXJXaWR0aDogMCxcbiAgfSk7XG5cbiAgLy8gUGVybWlzc2lvbnNcbiAgaGFzQ2FtZXJhUGVybWlzc2lvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBoYXNBdWRpb1Blcm1pc3Npb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBUcmFuc3BvcnRzXG4gIHRyYW5zcG9ydENyZWF0ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgdHJhbnNwb3J0Q3JlYXRlZFZpZGVvID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHRyYW5zcG9ydENyZWF0ZWRBdWRpbyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICB0cmFuc3BvcnRDcmVhdGVkU2NyZWVuID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByb2R1Y2VyVHJhbnNwb3J0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUcmFuc3BvcnQgfCBudWxsPihudWxsKTtcbiAgdmlkZW9Qcm9kdWNlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJvZHVjZXIgfCBudWxsPihudWxsKTtcbiAgcGFyYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcm9kdWNlck9wdGlvbnM+KHt9IGFzIFByb2R1Y2VyT3B0aW9ucyk7XG4gIHZpZGVvUGFyYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcm9kdWNlck9wdGlvbnM+KHt9IGFzIFByb2R1Y2VyT3B0aW9ucyk7XG4gIGF1ZGlvUGFyYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcm9kdWNlck9wdGlvbnM+KHt9IGFzIFByb2R1Y2VyT3B0aW9ucyk7XG4gIGF1ZGlvUHJvZHVjZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFByb2R1Y2VyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN1bWVyVHJhbnNwb3J0cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VHJhbnNwb3J0VHlwZVtdPihbXSk7XG4gIGNvbnN1bWluZ1RyYW5zcG9ydHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG5cbiAgLy8gUG9sbHNcbiAgcG9sbHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBvbGxbXT4oW10pO1xuICBwb2xsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQb2xsIHwgbnVsbD4obnVsbCk7XG4gIGlzUG9sbE1vZGFsVmlzaWJsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIEJhY2tncm91bmRcbiAgY3VzdG9tSW1hZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBzZWxlY3RlZEltYWdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgc2VnbWVudFZpZGVvID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZWRpYVN0cmVhbSB8IG51bGw+KG51bGwpO1xuICBzZWxmaWVTZWdtZW50YXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlbGZpZVNlZ21lbnRhdGlvbiB8IG51bGw+KG51bGwpO1xuICBwYXVzZVNlZ21lbnRhdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm9jZXNzZWRTdHJlYW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lZGlhU3RyZWFtIHwgbnVsbD4obnVsbCk7XG4gIGtlZXBCYWNrZ3JvdW5kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGJhY2tncm91bmRIYXNDaGFuZ2VkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHZpcnR1YWxTdHJlYW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lZGlhU3RyZWFtIHwgbnVsbD4obnVsbCk7XG4gIG1haW5DYW52YXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIHByZXZLZWVwQmFja2dyb3VuZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBhcHBsaWVkQmFja2dyb3VuZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc0JhY2tncm91bmRNb2RhbFZpc2libGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgYXV0b0NsaWNrQmFja2dyb3VuZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIEJyZWFrb3V0IFJvb21zXG4gIGJyZWFrb3V0Um9vbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJyZWFrb3V0UGFydGljaXBhbnRbXVtdPihbXSk7XG4gIGN1cnJlbnRSb29tSW5kZXggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIGNhblN0YXJ0QnJlYWtvdXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgYnJlYWtPdXRSb29tU3RhcnRlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBicmVha091dFJvb21FbmRlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBob3N0TmV3Um9vbSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigtMSk7XG4gIGxpbWl0ZWRCcmVha1Jvb20gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJyZWFrb3V0UGFydGljaXBhbnRbXT4oW10pO1xuICBtYWluUm9vbXNMZW5ndGggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIG1lbWJlclJvb20gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oLTEpO1xuICBpc0JyZWFrb3V0Um9vbXNNb2RhbFZpc2libGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBXaGl0ZWJvYXJkXG4gIHdoaXRlYm9hcmRVc2VycyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8V2hpdGVib2FyZFVzZXJbXT4oW10pO1xuICBjdXJyZW50V2hpdGVib2FyZEluZGV4ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBjYW5TdGFydFdoaXRlYm9hcmQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgd2hpdGVib2FyZFN0YXJ0ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgd2hpdGVib2FyZEVuZGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHdoaXRlYm9hcmRMaW1pdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPig0KTtcbiAgaXNXaGl0ZWJvYXJkTW9kYWxWaXNpYmxlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGlzQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsVmlzaWJsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBzaGFwZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNoYXBlW10+KFtdKTtcbiAgdXNlSW1hZ2VCYWNrZ3JvdW5kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcmVkb1N0YWNrID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTaGFwZVtdPihbXSk7XG4gIHVuZG9TdGFjayA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcbiAgY2FudmFzU3RyZWFtID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZWRpYVN0cmVhbSB8IG51bGw+KG51bGwpO1xuICBjYW52YXNXaGl0ZWJvYXJkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIVE1MQ2FudmFzRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIC8vIFNjcmVlbmJvYXJkXG4gIGNhbnZhc1NjcmVlbmJvYXJkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIVE1MQ2FudmFzRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBwcm9jZXNzZWRTY3JlZW5TdHJlYW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lZGlhU3RyZWFtIHwgbnVsbD4obnVsbCk7XG4gIGFubm90YXRlU2NyZWVuU3RyZWFtID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIG1haW5TY3JlZW5DYW52YXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGlzU2NyZWVuYm9hcmRNb2RhbFZpc2libGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvL3N0YXRlIHZhcmlhYmxlcyBmb3IgdGhlIGNvbnRyb2wgYnV0dG9uc1xuICBtaWNBY3RpdmUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxuICAgIHRoaXMuYXVkaW9BbHJlYWR5T24udmFsdWUgPyB0aGlzLmF1ZGlvQWxyZWFkeU9uLnZhbHVlIDogZmFsc2UsXG4gICk7XG4gIHZpZGVvQWN0aXZlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihcbiAgICB0aGlzLnZpZGVvQWxyZWFkeU9uLnZhbHVlID8gdGhpcy52aWRlb0FscmVhZHlPbi52YWx1ZSA6IGZhbHNlLFxuICApO1xuICBzY3JlZW5TaGFyZUFjdGl2ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBlbmRDYWxsQWN0aXZlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHBhcnRpY2lwYW50c0FjdGl2ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBtZW51QWN0aXZlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGNvbW1lbnRzQWN0aXZlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgLy8gVXBkYXRlIGZ1bmN0aW9uc1xuICB1cGRhdGVNZXNzYWdlcyA9ICh2YWx1ZTogTWVzc2FnZVtdKSA9PiB7XG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVTdGFydERpcmVjdE1lc3NhZ2UgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnN0YXJ0RGlyZWN0TWVzc2FnZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVEaXJlY3RNZXNzYWdlRGV0YWlscyA9ICh2YWx1ZTogUGFydGljaXBhbnQgfCBudWxsKSA9PiB7XG4gICAgdGhpcy5kaXJlY3RNZXNzYWdlRGV0YWlscy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVTaG93TWVzc2FnZXNCYWRnZSA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuc2hvd01lc3NhZ2VzQmFkZ2UubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQXVkaW9TZXR0aW5nID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLmF1ZGlvU2V0dGluZy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVWaWRlb1NldHRpbmcgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMudmlkZW9TZXR0aW5nLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVNjcmVlbnNoYXJlU2V0dGluZyA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5zY3JlZW5zaGFyZVNldHRpbmcubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQ2hhdFNldHRpbmcgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMuY2hhdFNldHRpbmcubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlRGlzcGxheU9wdGlvbiA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5kaXNwbGF5T3B0aW9uLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUF1dG9XYXZlID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5hdXRvV2F2ZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVGb3JjZUZ1bGxEaXNwbGF5ID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5mb3JjZUZ1bGxEaXNwbGF5Lm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVByZXZGb3JjZUZ1bGxEaXNwbGF5ID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5wcmV2Rm9yY2VGdWxsRGlzcGxheS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVQcmV2TWVldGluZ0Rpc3BsYXlUeXBlID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLnByZXZNZWV0aW5nRGlzcGxheVR5cGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlV2FpdGluZ1Jvb21Db3VudGVyID0gKHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICB0aGlzLndhaXRpbmdSb29tQ291bnRlci5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVXYWl0aW5nUm9vbUZpbHRlciA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy53YWl0aW5nUm9vbUZpbHRlci5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVXYWl0aW5nUm9vbUxpc3QgPSAodmFsdWU6IFdhaXRpbmdSb29tUGFydGljaXBhbnRbXSkgPT4ge1xuICAgIHRoaXMud2FpdGluZ1Jvb21MaXN0Lm5leHQodmFsdWUpO1xuICAgIHRoaXMuZmlsdGVyZWRXYWl0aW5nUm9vbUxpc3QubmV4dCh2YWx1ZSk7XG4gICAgdGhpcy53YWl0aW5nUm9vbUNvdW50ZXIubmV4dCh2YWx1ZS5sZW5ndGgpO1xuICB9O1xuXG4gIG9uV2FpdGluZ1Jvb21DbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLnVwZGF0ZUlzV2FpdGluZ01vZGFsVmlzaWJsZShmYWxzZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVxdWVzdENvdW50ZXIgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMucmVxdWVzdENvdW50ZXIubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVxdWVzdEZpbHRlciA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5yZXF1ZXN0RmlsdGVyLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVJlcXVlc3RMaXN0ID0gKHZhbHVlOiBSZXF1ZXN0W10pID0+IHtcbiAgICB0aGlzLnJlcXVlc3RMaXN0Lm5leHQodmFsdWUpO1xuICAgIHRoaXMuZmlsdGVyZWRSZXF1ZXN0TGlzdC5uZXh0KHZhbHVlKTtcbiAgICB0aGlzLnJlcXVlc3RDb3VudGVyLm5leHQodmFsdWUubGVuZ3RoKTtcbiAgfTtcblxuICBvblJlcXVlc3RDbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLnVwZGF0ZUlzUmVxdWVzdHNNb2RhbFZpc2libGUoZmFsc2UpO1xuICB9O1xuXG4gIHVwZGF0ZVRvdGFsUmVxV2FpdCA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy50b3RhbFJlcVdhaXQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQWxlcnRWaXNpYmxlID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5hbGVydFZpc2libGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQWxlcnRNZXNzYWdlID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLmFsZXJ0TWVzc2FnZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVBbGVydFR5cGUgPSAodmFsdWU6ICdzdWNjZXNzJyB8ICdkYW5nZXInKSA9PiB7XG4gICAgdGhpcy5hbGVydFR5cGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQWxlcnREdXJhdGlvbiA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5hbGVydER1cmF0aW9uLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVByb2dyZXNzVGltZXJWaXNpYmxlID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5wcm9ncmVzc1RpbWVyVmlzaWJsZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVQcm9ncmVzc1RpbWVyVmFsdWUgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMucHJvZ3Jlc3NUaW1lclZhbHVlLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUlzTWVudU1vZGFsVmlzaWJsZSA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuaXNNZW51TW9kYWxWaXNpYmxlLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUlzUmVjb3JkaW5nTW9kYWxWaXNpYmxlID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5pc1JlY29yZGluZ01vZGFsVmlzaWJsZS5uZXh0KHZhbHVlKTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29uZmlybWVkVG9SZWNvcmQoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2xlYXJlZFRvUmVjb3JkLmdldFZhbHVlKCkgJiZcbiAgICAgICAgdGhpcy5jbGVhcmVkVG9SZXN1bWUuZ2V0VmFsdWUoKSAmJlxuICAgICAgICB0aGlzLnJlY29yZFN0YXJ0ZWQuZ2V0VmFsdWUoKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2hvd1JlY29yZEJ1dHRvbnModHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZUlzU2V0dGluZ3NNb2RhbFZpc2libGUgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmlzU2V0dGluZ3NNb2RhbFZpc2libGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlSXNSZXF1ZXN0c01vZGFsVmlzaWJsZSA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuaXNSZXF1ZXN0c01vZGFsVmlzaWJsZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVJc1dhaXRpbmdNb2RhbFZpc2libGUgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmlzV2FpdGluZ01vZGFsVmlzaWJsZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVJc0NvSG9zdE1vZGFsVmlzaWJsZSA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuaXNDb0hvc3RNb2RhbFZpc2libGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlSXNNZWRpYVNldHRpbmdzTW9kYWxWaXNpYmxlID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5pc01lZGlhU2V0dGluZ3NNb2RhbFZpc2libGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlSXNEaXNwbGF5U2V0dGluZ3NNb2RhbFZpc2libGUgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmlzRGlzcGxheVNldHRpbmdzTW9kYWxWaXNpYmxlLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUlzUGFydGljaXBhbnRzTW9kYWxWaXNpYmxlID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5pc1BhcnRpY2lwYW50c01vZGFsVmlzaWJsZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVJc01lc3NhZ2VzTW9kYWxWaXNpYmxlID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5pc01lc3NhZ2VzTW9kYWxWaXNpYmxlLm5leHQodmFsdWUpO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlU2hvd01lc3NhZ2VzQmFkZ2UoZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVJc0NvbmZpcm1FeGl0TW9kYWxWaXNpYmxlID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5pc0NvbmZpcm1FeGl0TW9kYWxWaXNpYmxlLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUlzQ29uZmlybUhlcmVNb2RhbFZpc2libGUgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmlzQ29uZmlybUhlcmVNb2RhbFZpc2libGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlSXNMb2FkaW5nTW9kYWxWaXNpYmxlID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5pc0xvYWRpbmdNb2RhbFZpc2libGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlSXNTaGFyZUV2ZW50TW9kYWxWaXNpYmxlID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5pc1NoYXJlRXZlbnRNb2RhbFZpc2libGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkaW5nTWVkaWFPcHRpb25zID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLnJlY29yZGluZ01lZGlhT3B0aW9ucy5uZXh0KHZhbHVlKTtcbiAgICB0aGlzLmNsZWFyZWRUb1JlY29yZC5uZXh0KGZhbHNlKTtcbiAgfTtcblxuICB1cGRhdGVSZWNvcmRpbmdBdWRpb09wdGlvbnMgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMucmVjb3JkaW5nQXVkaW9PcHRpb25zLm5leHQodmFsdWUpO1xuICAgIHRoaXMuY2xlYXJlZFRvUmVjb3JkLm5leHQoZmFsc2UpO1xuICB9O1xuXG4gIHVwZGF0ZVJlY29yZGluZ1ZpZGVvT3B0aW9ucyA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5yZWNvcmRpbmdWaWRlb09wdGlvbnMubmV4dCh2YWx1ZSk7XG4gICAgdGhpcy5jbGVhcmVkVG9SZWNvcmQubmV4dChmYWxzZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkaW5nVmlkZW9UeXBlID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLnJlY29yZGluZ1ZpZGVvVHlwZS5uZXh0KHZhbHVlKTtcbiAgICB0aGlzLmNsZWFyZWRUb1JlY29yZC5uZXh0KGZhbHNlKTtcbiAgfTtcblxuICB1cGRhdGVSZWNvcmRpbmdWaWRlb09wdGltaXplZCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMucmVjb3JkaW5nVmlkZW9PcHRpbWl6ZWQubmV4dCh2YWx1ZSk7XG4gICAgdGhpcy5jbGVhcmVkVG9SZWNvcmQubmV4dChmYWxzZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkaW5nRGlzcGxheVR5cGUgPSAodmFsdWU6ICd2aWRlbycgfCAnbWVkaWEnIHwgJ2FsbCcpID0+IHtcbiAgICB0aGlzLnJlY29yZGluZ0Rpc3BsYXlUeXBlLm5leHQodmFsdWUpO1xuICAgIHRoaXMuY2xlYXJlZFRvUmVjb3JkLm5leHQoZmFsc2UpO1xuICB9O1xuXG4gIHVwZGF0ZVJlY29yZGluZ0FkZEhMUyA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMucmVjb3JkaW5nQWRkSExTLm5leHQodmFsdWUpO1xuICAgIHRoaXMuY2xlYXJlZFRvUmVjb3JkLm5leHQoZmFsc2UpO1xuICB9O1xuXG4gIHVwZGF0ZVJlY29yZGluZ0FkZFRleHQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnJlY29yZGluZ0FkZFRleHQubmV4dCh2YWx1ZSk7XG4gICAgdGhpcy5jbGVhcmVkVG9SZWNvcmQubmV4dChmYWxzZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkaW5nQ3VzdG9tVGV4dCA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5yZWNvcmRpbmdDdXN0b21UZXh0Lm5leHQodmFsdWUpO1xuICAgIHRoaXMuY2xlYXJlZFRvUmVjb3JkLm5leHQoZmFsc2UpO1xuICB9O1xuXG4gIHVwZGF0ZVJlY29yZGluZ0N1c3RvbVRleHRQb3NpdGlvbiA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5yZWNvcmRpbmdDdXN0b21UZXh0UG9zaXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgdGhpcy5jbGVhcmVkVG9SZWNvcmQubmV4dChmYWxzZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkaW5nQ3VzdG9tVGV4dENvbG9yID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLnJlY29yZGluZ0N1c3RvbVRleHRDb2xvci5uZXh0KHZhbHVlKTtcbiAgICB0aGlzLmNsZWFyZWRUb1JlY29yZC5uZXh0KGZhbHNlKTtcbiAgfTtcblxuICB1cGRhdGVSZWNvcmRpbmdOYW1lVGFncyA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMucmVjb3JkaW5nTmFtZVRhZ3MubmV4dCh2YWx1ZSk7XG4gICAgdGhpcy5jbGVhcmVkVG9SZWNvcmQubmV4dChmYWxzZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkaW5nQmFja2dyb3VuZENvbG9yID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLnJlY29yZGluZ0JhY2tncm91bmRDb2xvci5uZXh0KHZhbHVlKTtcbiAgICB0aGlzLmNsZWFyZWRUb1JlY29yZC5uZXh0KGZhbHNlKTtcbiAgfTtcblxuICB1cGRhdGVSZWNvcmRpbmdOYW1lVGFnc0NvbG9yID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLnJlY29yZGluZ05hbWVUYWdzQ29sb3IubmV4dCh2YWx1ZSk7XG4gICAgdGhpcy5jbGVhcmVkVG9SZWNvcmQubmV4dChmYWxzZSk7XG4gIH07XG5cbiAgdXBkYXRlUmVjb3JkaW5nT3JpZW50YXRpb25WaWRlbyA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5yZWNvcmRpbmdPcmllbnRhdGlvblZpZGVvLm5leHQodmFsdWUpO1xuICAgIHRoaXMuY2xlYXJlZFRvUmVjb3JkLm5leHQoZmFsc2UpO1xuICB9O1xuXG4gIHVwZGF0ZUNsZWFyZWRUb1Jlc3VtZSA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuY2xlYXJlZFRvUmVzdW1lLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUNsZWFyZWRUb1JlY29yZCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuY2xlYXJlZFRvUmVjb3JkLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVJlY29yZFN0YXRlID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAodGhpcy5yZWNvcmRTdGFydGVkLnZhbHVlICYmICF0aGlzLnJlY29yZFN0b3BwZWQudmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5yZWNvcmRQYXVzZWQudmFsdWUpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRTdGF0ZS5uZXh0KCdyZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVjb3JkU3RhdGUubmV4dCgneWVsbG93Jyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVjb3JkU3RhdGUubmV4dCh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMucmVjb3JkU3RhdGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlU2hvd1JlY29yZEJ1dHRvbnMgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnNob3dSZWNvcmRCdXR0b25zLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVJlY29yZGluZ1Byb2dyZXNzVGltZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5yZWNvcmRpbmdQcm9ncmVzc1RpbWUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQXVkaW9Td2l0Y2hpbmcgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmF1ZGlvU3dpdGNoaW5nLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVZpZGVvU3dpdGNoaW5nID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy52aWRlb1N3aXRjaGluZy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVWaWRlb0FscmVhZHlPbiA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMudmlkZW9BbHJlYWR5T24ubmV4dCh2YWx1ZSk7XG4gICAgdGhpcy52aWRlb0FjdGl2ZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVBdWRpb0FscmVhZHlPbiA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuYXVkaW9BbHJlYWR5T24ubmV4dCh2YWx1ZSk7XG4gICAgdGhpcy5taWNBY3RpdmUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQ29tcG9uZW50U2l6ZXMgPSAoc2l6ZXM6IENvbXBvbmVudFNpemVzKSA9PiB7XG4gICAgdGhpcy5jb21wb25lbnRTaXplcy5uZXh0KHNpemVzKTtcbiAgfTtcblxuICB1cGRhdGVIYXNDYW1lcmFQZXJtaXNzaW9uID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5oYXNDYW1lcmFQZXJtaXNzaW9uLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUhhc0F1ZGlvUGVybWlzc2lvbiA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuaGFzQXVkaW9QZXJtaXNzaW9uLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHJlcXVlc3RQZXJtaXNzaW9uQ2FtZXJhKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgLy8gSW1wbGVtZW50IHRoZSByZXF1ZXN0IHBlcm1pc3Npb24gbG9naWMgaGVyZVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJ2dyYW50ZWQnKTtcbiAgfVxuXG4gIHJlcXVlc3RQZXJtaXNzaW9uQXVkaW8oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBJbXBsZW1lbnQgdGhlIHJlcXVlc3QgcGVybWlzc2lvbiBsb2dpYyBoZXJlXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgnZ3JhbnRlZCcpO1xuICB9XG5cbiAgdXBkYXRlVHJhbnNwb3J0Q3JlYXRlZCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMudHJhbnNwb3J0Q3JlYXRlZC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVUcmFuc3BvcnRDcmVhdGVkVmlkZW8gPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnRyYW5zcG9ydENyZWF0ZWRWaWRlby5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVUcmFuc3BvcnRDcmVhdGVkQXVkaW8gPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnRyYW5zcG9ydENyZWF0ZWRBdWRpby5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVUcmFuc3BvcnRDcmVhdGVkU2NyZWVuID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy50cmFuc3BvcnRDcmVhdGVkU2NyZWVuLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVByb2R1Y2VyVHJhbnNwb3J0ID0gKHZhbHVlOiBUcmFuc3BvcnQgfCBudWxsKSA9PiB7XG4gICAgdGhpcy5wcm9kdWNlclRyYW5zcG9ydC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVWaWRlb1Byb2R1Y2VyID0gKHZhbHVlOiBQcm9kdWNlciB8IG51bGwpID0+IHtcbiAgICB0aGlzLnZpZGVvUHJvZHVjZXIubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUGFyYW1zID0gKHZhbHVlOiBQcm9kdWNlck9wdGlvbnMpID0+IHtcbiAgICB0aGlzLnBhcmFtcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVWaWRlb1BhcmFtcyA9ICh2YWx1ZTogUHJvZHVjZXJPcHRpb25zKSA9PiB7XG4gICAgdGhpcy52aWRlb1BhcmFtcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVBdWRpb1BhcmFtcyA9ICh2YWx1ZTogUHJvZHVjZXJPcHRpb25zKSA9PiB7XG4gICAgdGhpcy5hdWRpb1BhcmFtcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVBdWRpb1Byb2R1Y2VyID0gKHZhbHVlOiBQcm9kdWNlciB8IG51bGwpID0+IHtcbiAgICB0aGlzLmF1ZGlvUHJvZHVjZXIubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQ29uc3VtZXJUcmFuc3BvcnRzID0gKHZhbHVlOiBUcmFuc3BvcnRUeXBlW10pID0+IHtcbiAgICB0aGlzLmNvbnN1bWVyVHJhbnNwb3J0cy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVDb25zdW1pbmdUcmFuc3BvcnRzID0gKHZhbHVlOiBzdHJpbmdbXSkgPT4ge1xuICAgIHRoaXMuY29uc3VtaW5nVHJhbnNwb3J0cy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVQb2xscyA9ICh2YWx1ZTogUG9sbFtdKSA9PiB7XG4gICAgdGhpcy5wb2xscy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVQb2xsID0gKHZhbHVlOiBQb2xsIHwgbnVsbCkgPT4ge1xuICAgIHRoaXMucG9sbC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVJc1BvbGxNb2RhbFZpc2libGUgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmlzUG9sbE1vZGFsVmlzaWJsZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVDdXN0b21JbWFnZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5jdXN0b21JbWFnZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVTZWxlY3RlZEltYWdlID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLnNlbGVjdGVkSW1hZ2UubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlU2VnbWVudFZpZGVvID0gKHZhbHVlOiBNZWRpYVN0cmVhbSB8IG51bGwpID0+IHtcbiAgICB0aGlzLnNlZ21lbnRWaWRlby5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVTZWxmaWVTZWdtZW50YXRpb24gPSAodmFsdWU6IFNlbGZpZVNlZ21lbnRhdGlvbiB8IG51bGwpID0+IHtcbiAgICB0aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVQYXVzZVNlZ21lbnRhdGlvbiA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMucGF1c2VTZWdtZW50YXRpb24ubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUHJvY2Vzc2VkU3RyZWFtID0gKHZhbHVlOiBNZWRpYVN0cmVhbSB8IG51bGwpID0+IHtcbiAgICB0aGlzLnByb2Nlc3NlZFN0cmVhbS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVLZWVwQmFja2dyb3VuZCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMua2VlcEJhY2tncm91bmQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQmFja2dyb3VuZEhhc0NoYW5nZWQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmJhY2tncm91bmRIYXNDaGFuZ2VkLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVZpcnR1YWxTdHJlYW0gPSAodmFsdWU6IE1lZGlhU3RyZWFtIHwgbnVsbCkgPT4ge1xuICAgIHRoaXMudmlydHVhbFN0cmVhbS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVNYWluQ2FudmFzID0gKHZhbHVlOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwpID0+IHtcbiAgICB0aGlzLm1haW5DYW52YXMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUHJldktlZXBCYWNrZ3JvdW5kID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5wcmV2S2VlcEJhY2tncm91bmQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQXBwbGllZEJhY2tncm91bmQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmFwcGxpZWRCYWNrZ3JvdW5kLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUlzQmFja2dyb3VuZE1vZGFsVmlzaWJsZSA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuaXNCYWNrZ3JvdW5kTW9kYWxWaXNpYmxlLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUF1dG9DbGlja0JhY2tncm91bmQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmF1dG9DbGlja0JhY2tncm91bmQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQnJlYWtvdXRSb29tcyA9ICh2YWx1ZTogQnJlYWtvdXRQYXJ0aWNpcGFudFtdW10pID0+IHtcbiAgICB0aGlzLmJyZWFrb3V0Um9vbXMubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQ3VycmVudFJvb21JbmRleCA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5jdXJyZW50Um9vbUluZGV4Lm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUNhblN0YXJ0QnJlYWtvdXQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmNhblN0YXJ0QnJlYWtvdXQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQnJlYWtPdXRSb29tU3RhcnRlZCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuYnJlYWtPdXRSb29tU3RhcnRlZC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVCcmVha091dFJvb21FbmRlZCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuYnJlYWtPdXRSb29tRW5kZWQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlSG9zdE5ld1Jvb20gPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuaG9zdE5ld1Jvb20ubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlTGltaXRlZEJyZWFrUm9vbSA9ICh2YWx1ZTogQnJlYWtvdXRQYXJ0aWNpcGFudFtdKSA9PiB7XG4gICAgdGhpcy5saW1pdGVkQnJlYWtSb29tLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZU1haW5Sb29tc0xlbmd0aCA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5tYWluUm9vbXNMZW5ndGgubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlTWVtYmVyUm9vbSA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5tZW1iZXJSb29tLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUlzQnJlYWtvdXRSb29tc01vZGFsVmlzaWJsZSA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuaXNCcmVha291dFJvb21zTW9kYWxWaXNpYmxlLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZVdoaXRlYm9hcmRVc2VycyA9ICh2YWx1ZTogV2hpdGVib2FyZFVzZXJbXSkgPT4ge1xuICAgIHRoaXMud2hpdGVib2FyZFVzZXJzLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUN1cnJlbnRXaGl0ZWJvYXJkSW5kZXggPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuY3VycmVudFdoaXRlYm9hcmRJbmRleC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVDYW5TdGFydFdoaXRlYm9hcmQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmNhblN0YXJ0V2hpdGVib2FyZC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVXaGl0ZWJvYXJkU3RhcnRlZCA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMud2hpdGVib2FyZFN0YXJ0ZWQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlV2hpdGVib2FyZEVuZGVkID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy53aGl0ZWJvYXJkRW5kZWQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlV2hpdGVib2FyZExpbWl0ID0gKHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICB0aGlzLndoaXRlYm9hcmRMaW1pdC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVJc1doaXRlYm9hcmRNb2RhbFZpc2libGUgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmlzV2hpdGVib2FyZE1vZGFsVmlzaWJsZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVJc0NvbmZpZ3VyZVdoaXRlYm9hcmRNb2RhbFZpc2libGUgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmlzQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsVmlzaWJsZS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVTaGFwZXMgPSAodmFsdWU6IFNoYXBlW10pID0+IHtcbiAgICB0aGlzLnNoYXBlcy5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVVc2VJbWFnZUJhY2tncm91bmQgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnVzZUltYWdlQmFja2dyb3VuZC5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVSZWRvU3RhY2sgPSAodmFsdWU6IFNoYXBlW10pID0+IHtcbiAgICB0aGlzLnJlZG9TdGFjay5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVVbmRvU3RhY2sgPSAodmFsdWU6IHN0cmluZ1tdKSA9PiB7XG4gICAgdGhpcy51bmRvU3RhY2submV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQ2FudmFzU3RyZWFtID0gKHZhbHVlOiBNZWRpYVN0cmVhbSB8IG51bGwpID0+IHtcbiAgICB0aGlzLmNhbnZhc1N0cmVhbS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVDYW52YXNXaGl0ZWJvYXJkID0gKHZhbHVlOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwpID0+IHtcbiAgICB0aGlzLmNhbnZhc1doaXRlYm9hcmQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlQ2FudmFzU2NyZWVuYm9hcmQgPSAodmFsdWU6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCkgPT4ge1xuICAgIHRoaXMuY2FudmFzU2NyZWVuYm9hcmQubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlUHJvY2Vzc2VkU2NyZWVuU3RyZWFtID0gKHZhbHVlOiBNZWRpYVN0cmVhbSB8IG51bGwpID0+IHtcbiAgICB0aGlzLnByb2Nlc3NlZFNjcmVlblN0cmVhbS5uZXh0KHZhbHVlKTtcbiAgfTtcblxuICB1cGRhdGVBbm5vdGF0ZVNjcmVlblN0cmVhbSA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuYW5ub3RhdGVTY3JlZW5TdHJlYW0ubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgdXBkYXRlTWFpblNjcmVlbkNhbnZhcyA9ICh2YWx1ZTogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsKSA9PiB7XG4gICAgdGhpcy5tYWluU2NyZWVuQ2FudmFzLm5leHQodmFsdWUpO1xuICB9O1xuXG4gIHVwZGF0ZUlzU2NyZWVuYm9hcmRNb2RhbFZpc2libGUgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmlzU2NyZWVuYm9hcmRNb2RhbFZpc2libGUubmV4dCh2YWx1ZSk7XG4gIH07XG5cbiAgY2hlY2tPcmllbnRhdGlvbiA9ICgpID0+IHtcbiAgICBjb25zdCBpc1BvcnRyYWl0ID0gd2luZG93Lm1hdGNoTWVkaWEoJyhvcmllbnRhdGlvbjogcG9ydHJhaXQpJykubWF0Y2hlcztcbiAgICByZXR1cm4gaXNQb3J0cmFpdCA/ICdwb3J0cmFpdCcgOiAnbGFuZHNjYXBlJztcbiAgfTtcblxuICBzaG93QWxlcnQgPSAoe1xuICAgIG1lc3NhZ2UsXG4gICAgdHlwZSxcbiAgICBkdXJhdGlvbiA9IDMwMDAsXG4gIH06IHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgdHlwZTogJ3N1Y2Nlc3MnIHwgJ2Rhbmdlcic7XG4gICAgZHVyYXRpb24/OiBudW1iZXI7XG4gIH0pID0+IHtcbiAgICB0aGlzLnVwZGF0ZUFsZXJ0TWVzc2FnZShtZXNzYWdlKTtcbiAgICB0aGlzLnVwZGF0ZUFsZXJ0VHlwZSh0eXBlKTtcbiAgICB0aGlzLnVwZGF0ZUFsZXJ0RHVyYXRpb24oZHVyYXRpb24pO1xuICAgIHRoaXMudXBkYXRlQWxlcnRWaXNpYmxlKHRydWUpO1xuICB9O1xuXG4gIGdldEFsbFBhcmFtcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jYWxVSU1vZGU6IHRoaXMubG9jYWxVSU1vZGUudmFsdWUsIC8vIExvY2FsIFVJIG1vZGVcblxuICAgICAgLy8gUm9vbSBEZXRhaWxzXG4gICAgICByb29tTmFtZTogdGhpcy5yb29tTmFtZS52YWx1ZSxcbiAgICAgIG1lbWJlcjogdGhpcy5tZW1iZXIudmFsdWUsXG4gICAgICBhZG1pblBhc3Njb2RlOiB0aGlzLmFkbWluUGFzc2NvZGUudmFsdWUsXG4gICAgICB5b3VBcmVDb0hvc3Q6IHRoaXMueW91QXJlQ29Ib3N0LnZhbHVlLFxuICAgICAgeW91QXJlSG9zdDogdGhpcy55b3VBcmVIb3N0LnZhbHVlLFxuICAgICAgaXNsZXZlbDogdGhpcy5pc2xldmVsLnZhbHVlLFxuICAgICAgY29uZmlybWVkVG9SZWNvcmQ6IHRoaXMuY29uZmlybWVkVG9SZWNvcmQudmFsdWUsXG4gICAgICBtZWV0aW5nRGlzcGxheVR5cGU6IHRoaXMubWVldGluZ0Rpc3BsYXlUeXBlLnZhbHVlLFxuICAgICAgbWVldGluZ1ZpZGVvT3B0aW1pemVkOiB0aGlzLm1lZXRpbmdWaWRlb09wdGltaXplZC52YWx1ZSxcbiAgICAgIGV2ZW50VHlwZTogdGhpcy5ldmVudFR5cGUudmFsdWUsXG4gICAgICBwYXJ0aWNpcGFudHM6IHRoaXMucGFydGljaXBhbnRzLnZhbHVlLFxuICAgICAgZmlsdGVyZWRQYXJ0aWNpcGFudHM6IHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGFudHMudmFsdWUsXG4gICAgICBwYXJ0aWNpcGFudHNDb3VudGVyOiB0aGlzLnBhcnRpY2lwYW50c0NvdW50ZXIudmFsdWUsXG4gICAgICBwYXJ0aWNpcGFudHNGaWx0ZXI6IHRoaXMucGFydGljaXBhbnRzRmlsdGVyLnZhbHVlLFxuXG4gICAgICAvLyBNb3JlIHJvb20gZGV0YWlscyAtIG1lZGlhXG4gICAgICBjb25zdW1lX3NvY2tldHM6IHRoaXMuY29uc3VtZV9zb2NrZXRzLnZhbHVlLFxuICAgICAgcnRwQ2FwYWJpbGl0aWVzOiB0aGlzLnJ0cENhcGFiaWxpdGllcy52YWx1ZSxcbiAgICAgIHJvb21SZWN2SVBzOiB0aGlzLnJvb21SZWN2SVBzLnZhbHVlLFxuICAgICAgbWVldGluZ1Jvb21QYXJhbXM6IHRoaXMubWVldGluZ1Jvb21QYXJhbXMudmFsdWUsXG4gICAgICBpdGVtUGFnZUxpbWl0OiB0aGlzLml0ZW1QYWdlTGltaXQudmFsdWUsXG4gICAgICBhdWRpb09ubHlSb29tOiB0aGlzLmF1ZGlvT25seVJvb20udmFsdWUsXG4gICAgICBhZGRGb3JCYXNpYzogdGhpcy5hZGRGb3JCYXNpYy52YWx1ZSxcbiAgICAgIHNjcmVlblBhZ2VMaW1pdDogdGhpcy5zY3JlZW5QYWdlTGltaXQudmFsdWUsXG4gICAgICBzaGFyZVNjcmVlblN0YXJ0ZWQ6IHRoaXMuc2hhcmVTY3JlZW5TdGFydGVkLnZhbHVlLFxuICAgICAgc2hhcmVkOiB0aGlzLnNoYXJlZC52YWx1ZSxcbiAgICAgIHRhcmdldE9yaWVudGF0aW9uOiB0aGlzLnRhcmdldE9yaWVudGF0aW9uLnZhbHVlLFxuICAgICAgdGFyZ2V0UmVzb2x1dGlvbjogdGhpcy50YXJnZXRSZXNvbHV0aW9uLnZhbHVlLFxuICAgICAgdGFyZ2V0UmVzb2x1dGlvbkhvc3Q6IHRoaXMudGFyZ2V0UmVzb2x1dGlvbkhvc3QudmFsdWUsXG4gICAgICB2aWRDb25zOiB0aGlzLnZpZENvbnMudmFsdWUsXG4gICAgICBmcmFtZVJhdGU6IHRoaXMuZnJhbWVSYXRlLnZhbHVlLFxuICAgICAgaFBhcmFtczogdGhpcy5oUGFyYW1zLnZhbHVlLFxuICAgICAgdlBhcmFtczogdGhpcy52UGFyYW1zLnZhbHVlLFxuICAgICAgc2NyZWVuUGFyYW1zOiB0aGlzLnNjcmVlblBhcmFtcy52YWx1ZSxcbiAgICAgIGFQYXJhbXM6IHRoaXMuYVBhcmFtcy52YWx1ZSxcblxuICAgICAgLy8gTW9yZSByb29tIGRldGFpbHMgLSByZWNvcmRpbmdcbiAgICAgIHJlY29yZGluZ0F1ZGlvUGF1c2VzTGltaXQ6IHRoaXMucmVjb3JkaW5nQXVkaW9QYXVzZXNMaW1pdC52YWx1ZSxcbiAgICAgIHJlY29yZGluZ0F1ZGlvUGF1c2VzQ291bnQ6IHRoaXMucmVjb3JkaW5nQXVkaW9QYXVzZXNDb3VudC52YWx1ZSxcbiAgICAgIHJlY29yZGluZ0F1ZGlvU3VwcG9ydDogdGhpcy5yZWNvcmRpbmdBdWRpb1N1cHBvcnQudmFsdWUsXG4gICAgICByZWNvcmRpbmdBdWRpb1Blb3BsZUxpbWl0OiB0aGlzLnJlY29yZGluZ0F1ZGlvUGVvcGxlTGltaXQudmFsdWUsXG4gICAgICByZWNvcmRpbmdBdWRpb1BhcnRpY2lwYW50c1RpbWVMaW1pdDogdGhpcy5yZWNvcmRpbmdBdWRpb1BhcnRpY2lwYW50c1RpbWVMaW1pdC52YWx1ZSxcbiAgICAgIHJlY29yZGluZ1ZpZGVvUGF1c2VzQ291bnQ6IHRoaXMucmVjb3JkaW5nVmlkZW9QYXVzZXNDb3VudC52YWx1ZSxcbiAgICAgIHJlY29yZGluZ1ZpZGVvUGF1c2VzTGltaXQ6IHRoaXMucmVjb3JkaW5nVmlkZW9QYXVzZXNMaW1pdC52YWx1ZSxcbiAgICAgIHJlY29yZGluZ1ZpZGVvU3VwcG9ydDogdGhpcy5yZWNvcmRpbmdWaWRlb1N1cHBvcnQudmFsdWUsXG4gICAgICByZWNvcmRpbmdWaWRlb1Blb3BsZUxpbWl0OiB0aGlzLnJlY29yZGluZ1ZpZGVvUGVvcGxlTGltaXQudmFsdWUsXG4gICAgICByZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c1RpbWVMaW1pdDogdGhpcy5yZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c1RpbWVMaW1pdC52YWx1ZSxcbiAgICAgIHJlY29yZGluZ0FsbFBhcnRpY2lwYW50c1N1cHBvcnQ6IHRoaXMucmVjb3JkaW5nQWxsUGFydGljaXBhbnRzU3VwcG9ydC52YWx1ZSxcbiAgICAgIHJlY29yZGluZ1ZpZGVvUGFydGljaXBhbnRzU3VwcG9ydDogdGhpcy5yZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c1N1cHBvcnQudmFsdWUsXG4gICAgICByZWNvcmRpbmdBbGxQYXJ0aWNpcGFudHNGdWxsUm9vbVN1cHBvcnQ6IHRoaXMucmVjb3JkaW5nQWxsUGFydGljaXBhbnRzRnVsbFJvb21TdXBwb3J0LnZhbHVlLFxuICAgICAgcmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNGdWxsUm9vbVN1cHBvcnQ6XG4gICAgICAgIHRoaXMucmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNGdWxsUm9vbVN1cHBvcnQudmFsdWUsXG4gICAgICByZWNvcmRpbmdQcmVmZXJyZWRPcmllbnRhdGlvbjogdGhpcy5yZWNvcmRpbmdQcmVmZXJyZWRPcmllbnRhdGlvbi52YWx1ZSxcbiAgICAgIHJlY29yZGluZ1N1cHBvcnRGb3JPdGhlck9yaWVudGF0aW9uOiB0aGlzLnJlY29yZGluZ1N1cHBvcnRGb3JPdGhlck9yaWVudGF0aW9uLnZhbHVlLFxuICAgICAgcmVjb3JkaW5nTXVsdGlGb3JtYXRzU3VwcG9ydDogdGhpcy5yZWNvcmRpbmdNdWx0aUZvcm1hdHNTdXBwb3J0LnZhbHVlLFxuXG4gICAgICB1c2VyUmVjb3JkaW5nUGFyYW1zOiB0aGlzLnVzZXJSZWNvcmRpbmdQYXJhbXMudmFsdWUsXG4gICAgICBjYW5SZWNvcmQ6IHRoaXMuY2FuUmVjb3JkLnZhbHVlLFxuICAgICAgc3RhcnRSZXBvcnQ6IHRoaXMuc3RhcnRSZXBvcnQudmFsdWUsXG4gICAgICBlbmRSZXBvcnQ6IHRoaXMuZW5kUmVwb3J0LnZhbHVlLFxuICAgICAgcmVjb3JkU3RhcnRUaW1lOiB0aGlzLnJlY29yZFN0YXJ0VGltZS52YWx1ZSxcbiAgICAgIHJlY29yZEVsYXBzZWRUaW1lOiB0aGlzLnJlY29yZEVsYXBzZWRUaW1lLnZhbHVlLFxuICAgICAgaXNUaW1lclJ1bm5pbmc6IHRoaXMuaXNUaW1lclJ1bm5pbmcudmFsdWUsXG4gICAgICBjYW5QYXVzZVJlc3VtZTogdGhpcy5jYW5QYXVzZVJlc3VtZS52YWx1ZSxcbiAgICAgIHJlY29yZENoYW5nZVNlY29uZHM6IHRoaXMucmVjb3JkQ2hhbmdlU2Vjb25kcy52YWx1ZSxcbiAgICAgIHBhdXNlTGltaXQ6IHRoaXMucGF1c2VMaW1pdC52YWx1ZSxcbiAgICAgIHBhdXNlUmVjb3JkQ291bnQ6IHRoaXMucGF1c2VSZWNvcmRDb3VudC52YWx1ZSxcbiAgICAgIGNhbkxhdW5jaFJlY29yZDogdGhpcy5jYW5MYXVuY2hSZWNvcmQudmFsdWUsXG4gICAgICBzdG9wTGF1bmNoUmVjb3JkOiB0aGlzLnN0b3BMYXVuY2hSZWNvcmQudmFsdWUsXG5cbiAgICAgIHBhcnRpY2lwYW50c0FsbDogdGhpcy5wYXJ0aWNpcGFudHNBbGwudmFsdWUsXG5cbiAgICAgIGZpcnN0QWxsOiB0aGlzLmZpcnN0QWxsLnZhbHVlLFxuICAgICAgdXBkYXRlTWFpbldpbmRvdzogdGhpcy51cGRhdGVNYWluV2luZG93LnZhbHVlLFxuICAgICAgZmlyc3Rfcm91bmQ6IHRoaXMuZmlyc3Rfcm91bmQudmFsdWUsXG4gICAgICBsYW5kU2NhcGVkOiB0aGlzLmxhbmRTY2FwZWQudmFsdWUsXG4gICAgICBsb2NrX3NjcmVlbjogdGhpcy5sb2NrX3NjcmVlbi52YWx1ZSxcbiAgICAgIHNjcmVlbklkOiB0aGlzLnNjcmVlbklkLnZhbHVlLFxuICAgICAgYWxsVmlkZW9TdHJlYW1zOiB0aGlzLmFsbFZpZGVvU3RyZWFtcy52YWx1ZSxcbiAgICAgIG5ld0xpbWl0ZWRTdHJlYW1zOiB0aGlzLm5ld0xpbWl0ZWRTdHJlYW1zLnZhbHVlLFxuICAgICAgbmV3TGltaXRlZFN0cmVhbXNJRHM6IHRoaXMubmV3TGltaXRlZFN0cmVhbXNJRHMudmFsdWUsXG4gICAgICBhY3RpdmVTb3VuZHM6IHRoaXMuYWN0aXZlU291bmRzLnZhbHVlLFxuICAgICAgc2NyZWVuU2hhcmVJRFN0cmVhbTogdGhpcy5zY3JlZW5TaGFyZUlEU3RyZWFtLnZhbHVlLFxuICAgICAgc2NyZWVuU2hhcmVOYW1lU3RyZWFtOiB0aGlzLnNjcmVlblNoYXJlTmFtZVN0cmVhbS52YWx1ZSxcbiAgICAgIGFkbWluSURTdHJlYW06IHRoaXMuYWRtaW5JRFN0cmVhbS52YWx1ZSxcbiAgICAgIGFkbWluTmFtZVN0cmVhbTogdGhpcy5hZG1pbk5hbWVTdHJlYW0udmFsdWUsXG4gICAgICB5b3VZb3VTdHJlYW06IHRoaXMueW91WW91U3RyZWFtLnZhbHVlLFxuICAgICAgeW91WW91U3RyZWFtSURzOiB0aGlzLnlvdVlvdVN0cmVhbUlEcy52YWx1ZSxcbiAgICAgIGxvY2FsU3RyZWFtOiB0aGlzLmxvY2FsU3RyZWFtLnZhbHVlLFxuICAgICAgcmVjb3JkU3RhcnRlZDogdGhpcy5yZWNvcmRTdGFydGVkLnZhbHVlLFxuICAgICAgcmVjb3JkUmVzdW1lZDogdGhpcy5yZWNvcmRSZXN1bWVkLnZhbHVlLFxuICAgICAgcmVjb3JkUGF1c2VkOiB0aGlzLnJlY29yZFBhdXNlZC52YWx1ZSxcbiAgICAgIHJlY29yZFN0b3BwZWQ6IHRoaXMucmVjb3JkU3RvcHBlZC52YWx1ZSxcbiAgICAgIGFkbWluUmVzdHJpY3RTZXR0aW5nOiB0aGlzLmFkbWluUmVzdHJpY3RTZXR0aW5nLnZhbHVlLFxuICAgICAgdmlkZW9SZXF1ZXN0U3RhdGU6IHRoaXMudmlkZW9SZXF1ZXN0U3RhdGUudmFsdWUsXG4gICAgICB2aWRlb1JlcXVlc3RUaW1lOiB0aGlzLnZpZGVvUmVxdWVzdFRpbWUudmFsdWUsXG4gICAgICB2aWRlb0FjdGlvbjogdGhpcy52aWRlb0FjdGlvbi52YWx1ZSxcbiAgICAgIGxvY2FsU3RyZWFtVmlkZW86IHRoaXMubG9jYWxTdHJlYW1WaWRlby52YWx1ZSxcbiAgICAgIHVzZXJEZWZhdWx0VmlkZW9JbnB1dERldmljZTogdGhpcy51c2VyRGVmYXVsdFZpZGVvSW5wdXREZXZpY2UudmFsdWUsXG4gICAgICBjdXJyZW50RmFjaW5nTW9kZTogdGhpcy5jdXJyZW50RmFjaW5nTW9kZS52YWx1ZSxcbiAgICAgIHByZXZGYWNpbmdNb2RlOiB0aGlzLnByZXZGYWNpbmdNb2RlLnZhbHVlLFxuICAgICAgZGVmVmlkZW9JRDogdGhpcy5kZWZWaWRlb0lELnZhbHVlLFxuICAgICAgYWxsb3dlZDogdGhpcy5hbGxvd2VkLnZhbHVlLFxuICAgICAgZGlzcEFjdGl2ZU5hbWVzOiB0aGlzLmRpc3BBY3RpdmVOYW1lcy52YWx1ZSxcbiAgICAgIHBfZGlzcEFjdGl2ZU5hbWVzOiB0aGlzLnBfZGlzcEFjdGl2ZU5hbWVzLnZhbHVlLFxuICAgICAgYWN0aXZlTmFtZXM6IHRoaXMuYWN0aXZlTmFtZXMudmFsdWUsXG4gICAgICBwcmV2QWN0aXZlTmFtZXM6IHRoaXMucHJldkFjdGl2ZU5hbWVzLnZhbHVlLFxuICAgICAgcF9hY3RpdmVOYW1lczogdGhpcy5wX2FjdGl2ZU5hbWVzLnZhbHVlLFxuICAgICAgbWVtYmVyc1JlY2VpdmVkOiB0aGlzLm1lbWJlcnNSZWNlaXZlZC52YWx1ZSxcbiAgICAgIGRlZmVyU2NyZWVuUmVjZWl2ZWQ6IHRoaXMuZGVmZXJTY3JlZW5SZWNlaXZlZC52YWx1ZSxcbiAgICAgIGhvc3RGaXJzdFN3aXRjaDogdGhpcy5ob3N0Rmlyc3RTd2l0Y2gudmFsdWUsXG4gICAgICBtaWNBY3Rpb246IHRoaXMubWljQWN0aW9uLnZhbHVlLFxuICAgICAgc2NyZWVuQWN0aW9uOiB0aGlzLnNjcmVlbkFjdGlvbi52YWx1ZSxcbiAgICAgIGNoYXRBY3Rpb246IHRoaXMuY2hhdEFjdGlvbi52YWx1ZSxcbiAgICAgIGF1ZGlvUmVxdWVzdFN0YXRlOiB0aGlzLmF1ZGlvUmVxdWVzdFN0YXRlLnZhbHVlLFxuICAgICAgc2NyZWVuUmVxdWVzdFN0YXRlOiB0aGlzLnNjcmVlblJlcXVlc3RTdGF0ZS52YWx1ZSxcbiAgICAgIGNoYXRSZXF1ZXN0U3RhdGU6IHRoaXMuY2hhdFJlcXVlc3RTdGF0ZS52YWx1ZSxcbiAgICAgIGF1ZGlvUmVxdWVzdFRpbWU6IHRoaXMuYXVkaW9SZXF1ZXN0VGltZS52YWx1ZSxcbiAgICAgIHNjcmVlblJlcXVlc3RUaW1lOiB0aGlzLnNjcmVlblJlcXVlc3RUaW1lLnZhbHVlLFxuICAgICAgY2hhdFJlcXVlc3RUaW1lOiB0aGlzLmNoYXRSZXF1ZXN0VGltZS52YWx1ZSxcbiAgICAgIHVwZGF0ZVJlcXVlc3RJbnRlcnZhbFNlY29uZHM6IHRoaXMudXBkYXRlUmVxdWVzdEludGVydmFsU2Vjb25kcy52YWx1ZSxcbiAgICAgIG9sZFNvdW5kSWRzOiB0aGlzLm9sZFNvdW5kSWRzLnZhbHVlLFxuICAgICAgaG9zdExhYmVsOiB0aGlzLmhvc3RMYWJlbC52YWx1ZSxcbiAgICAgIG1haW5TY3JlZW5GaWxsZWQ6IHRoaXMubWFpblNjcmVlbkZpbGxlZC52YWx1ZSxcbiAgICAgIGxvY2FsU3RyZWFtU2NyZWVuOiB0aGlzLmxvY2FsU3RyZWFtU2NyZWVuLnZhbHVlLFxuICAgICAgc2NyZWVuQWxyZWFkeU9uOiB0aGlzLnNjcmVlbkFscmVhZHlPbi52YWx1ZSxcbiAgICAgIGNoYXRBbHJlYWR5T246IHRoaXMuY2hhdEFscmVhZHlPbi52YWx1ZSxcbiAgICAgIHJlZGlyZWN0VVJMOiB0aGlzLnJlZGlyZWN0VVJMLnZhbHVlLFxuICAgICAgb2xkQWxsU3RyZWFtczogdGhpcy5vbGRBbGxTdHJlYW1zLnZhbHVlLFxuICAgICAgYWRtaW5WaWRJRDogdGhpcy5hZG1pblZpZElELnZhbHVlLFxuICAgICAgc3RyZWFtTmFtZXM6IHRoaXMuc3RyZWFtTmFtZXMudmFsdWUsXG4gICAgICBub25fYWxWaWRlb1N0cmVhbXM6IHRoaXMubm9uX2FsVmlkZW9TdHJlYW1zLnZhbHVlLFxuICAgICAgc29ydEF1ZGlvTG91ZG5lc3M6IHRoaXMuc29ydEF1ZGlvTG91ZG5lc3MudmFsdWUsXG4gICAgICBhdWRpb0RlY2liZWxzOiB0aGlzLmF1ZGlvRGVjaWJlbHMudmFsdWUsXG4gICAgICBtaXhlZF9hbFZpZGVvU3RyZWFtczogdGhpcy5taXhlZF9hbFZpZGVvU3RyZWFtcy52YWx1ZSxcbiAgICAgIG5vbl9hbFZpZGVvU3RyZWFtc19tdXRlZDogdGhpcy5ub25fYWxWaWRlb1N0cmVhbXNfbXV0ZWQudmFsdWUsXG4gICAgICBwYWdpbmF0ZWRTdHJlYW1zOiB0aGlzLnBhZ2luYXRlZFN0cmVhbXMudmFsdWUsXG4gICAgICBsb2NhbFN0cmVhbUF1ZGlvOiB0aGlzLmxvY2FsU3RyZWFtQXVkaW8udmFsdWUsXG4gICAgICBkZWZBdWRpb0lEOiB0aGlzLmRlZkF1ZGlvSUQudmFsdWUsXG4gICAgICB1c2VyRGVmYXVsdEF1ZGlvSW5wdXREZXZpY2U6IHRoaXMudXNlckRlZmF1bHRBdWRpb0lucHV0RGV2aWNlLnZhbHVlLFxuICAgICAgdXNlckRlZmF1bHRBdWRpb091dHB1dERldmljZTogdGhpcy51c2VyRGVmYXVsdEF1ZGlvT3V0cHV0RGV2aWNlLnZhbHVlLFxuICAgICAgcHJldkF1ZGlvSW5wdXREZXZpY2U6IHRoaXMucHJldkF1ZGlvSW5wdXREZXZpY2UudmFsdWUsXG4gICAgICBwcmV2VmlkZW9JbnB1dERldmljZTogdGhpcy5wcmV2VmlkZW9JbnB1dERldmljZS52YWx1ZSxcbiAgICAgIGF1ZGlvUGF1c2VkOiB0aGlzLmF1ZGlvUGF1c2VkLnZhbHVlLFxuICAgICAgbWFpblNjcmVlblBlcnNvbjogdGhpcy5tYWluU2NyZWVuUGVyc29uLnZhbHVlLFxuICAgICAgYWRtaW5Pbk1haW5TY3JlZW46IHRoaXMuYWRtaW5Pbk1haW5TY3JlZW4udmFsdWUsXG4gICAgICBzY3JlZW5TdGF0ZXM6IHRoaXMuc2NyZWVuU3RhdGVzLnZhbHVlLFxuICAgICAgcHJldlNjcmVlblN0YXRlczogdGhpcy5wcmV2U2NyZWVuU3RhdGVzLnZhbHVlLFxuICAgICAgdXBkYXRlRGF0ZVN0YXRlOiB0aGlzLnVwZGF0ZURhdGVTdGF0ZS52YWx1ZSxcbiAgICAgIGxhc3RVcGRhdGU6IHRoaXMubGFzdFVwZGF0ZS52YWx1ZSxcbiAgICAgIG5Gb3JSZWFkanVzdFJlY29yZDogdGhpcy5uRm9yUmVhZGp1c3RSZWNvcmQudmFsdWUsXG4gICAgICBmaXhlZFBhZ2VMaW1pdDogdGhpcy5maXhlZFBhZ2VMaW1pdC52YWx1ZSxcbiAgICAgIHJlbW92ZUFsdEdyaWQ6IHRoaXMucmVtb3ZlQWx0R3JpZC52YWx1ZSxcbiAgICAgIG5Gb3JSZWFkanVzdDogdGhpcy5uRm9yUmVhZGp1c3QudmFsdWUsXG4gICAgICBsYXN0UmVvcmRlclRpbWU6IHRoaXMubGFzdFJlb3JkZXJUaW1lLnZhbHVlLFxuICAgICAgcmVvcmRlckludGVydmFsOiB0aGlzLnJlb3JkZXJJbnRlcnZhbC52YWx1ZSxcbiAgICAgIGZhc3RSZW9yZGVySW50ZXJ2YWw6IHRoaXMuZmFzdFJlb3JkZXJJbnRlcnZhbC52YWx1ZSxcbiAgICAgIGF1ZFN0cmVhbU5hbWVzOiB0aGlzLmF1ZFN0cmVhbU5hbWVzLnZhbHVlLFxuICAgICAgY3VycmVudFVzZXJQYWdlOiB0aGlzLmN1cnJlbnRVc2VyUGFnZS52YWx1ZSxcbiAgICAgIG1haW5IZWlnaHRXaWR0aDogdGhpcy5tYWluSGVpZ2h0V2lkdGgudmFsdWUsXG4gICAgICBwcmV2TWFpbkhlaWdodFdpZHRoOiB0aGlzLnByZXZNYWluSGVpZ2h0V2lkdGgudmFsdWUsXG4gICAgICBwcmV2RG9QYWdpbmF0ZTogdGhpcy5wcmV2RG9QYWdpbmF0ZS52YWx1ZSxcbiAgICAgIGRvUGFnaW5hdGU6IHRoaXMuZG9QYWdpbmF0ZS52YWx1ZSxcbiAgICAgIHNoYXJlRW5kZWQ6IHRoaXMuc2hhcmVFbmRlZC52YWx1ZSxcbiAgICAgIGxTdHJlYW1zOiB0aGlzLmxTdHJlYW1zLnZhbHVlLFxuICAgICAgY2hhdFJlZlN0cmVhbXM6IHRoaXMuY2hhdFJlZlN0cmVhbXMudmFsdWUsXG4gICAgICBjb250cm9sSGVpZ2h0OiB0aGlzLmNvbnRyb2xIZWlnaHQudmFsdWUsXG4gICAgICBpc1dpZGVTY3JlZW46IHRoaXMuaXNXaWRlU2NyZWVuLnZhbHVlLFxuICAgICAgaXNNZWRpdW1TY3JlZW46IHRoaXMuaXNNZWRpdW1TY3JlZW4udmFsdWUsXG4gICAgICBpc1NtYWxsU2NyZWVuOiB0aGlzLmlzU21hbGxTY3JlZW4udmFsdWUsXG4gICAgICBhZGRHcmlkOiB0aGlzLmFkZEdyaWQudmFsdWUsXG4gICAgICBhZGRBbHRHcmlkOiB0aGlzLmFkZEFsdEdyaWQudmFsdWUsXG4gICAgICBncmlkUm93czogdGhpcy5ncmlkUm93cy52YWx1ZSxcbiAgICAgIGdyaWRDb2xzOiB0aGlzLmdyaWRDb2xzLnZhbHVlLFxuICAgICAgYWx0R3JpZFJvd3M6IHRoaXMuYWx0R3JpZFJvd3MudmFsdWUsXG4gICAgICBhbHRHcmlkQ29sczogdGhpcy5hbHRHcmlkQ29scy52YWx1ZSxcbiAgICAgIG51bWJlclBhZ2VzOiB0aGlzLm51bWJlclBhZ2VzLnZhbHVlLFxuICAgICAgY3VycmVudFN0cmVhbXM6IHRoaXMuY3VycmVudFN0cmVhbXMudmFsdWUsXG4gICAgICBzaG93TWluaVZpZXc6IHRoaXMuc2hvd01pbmlWaWV3LnZhbHVlLFxuICAgICAgblN0cmVhbTogdGhpcy5uU3RyZWFtLnZhbHVlLFxuICAgICAgZGVmZXJfcmVjZWl2ZTogdGhpcy5kZWZlcl9yZWNlaXZlLnZhbHVlLFxuICAgICAgYWxsQXVkaW9TdHJlYW1zOiB0aGlzLmFsbEF1ZGlvU3RyZWFtcy52YWx1ZSxcbiAgICAgIHNjcmVlblByb2R1Y2VyOiB0aGlzLnNjcmVlblByb2R1Y2VyLnZhbHVlLFxuICAgICAgcmVtb3RlU2NyZWVuU3RyZWFtOiB0aGlzLnJlbW90ZVNjcmVlblN0cmVhbS52YWx1ZSxcbiAgICAgIGdvdEFsbFZpZHM6IHRoaXMuZ290QWxsVmlkcy52YWx1ZSxcbiAgICAgIHBhZ2luYXRpb25IZWlnaHRXaWR0aDogdGhpcy5wYWdpbmF0aW9uSGVpZ2h0V2lkdGgudmFsdWUsXG4gICAgICBwYWdpbmF0aW9uRGlyZWN0aW9uOiB0aGlzLnBhZ2luYXRpb25EaXJlY3Rpb24udmFsdWUsXG4gICAgICBncmlkU2l6ZXM6IHRoaXMuZ3JpZFNpemVzLnZhbHVlLFxuICAgICAgc2NyZWVuRm9yY2VGdWxsRGlzcGxheTogdGhpcy5zY3JlZW5Gb3JjZUZ1bGxEaXNwbGF5LnZhbHVlLFxuICAgICAgbWFpbkdyaWRTdHJlYW06IHRoaXMubWFpbkdyaWRTdHJlYW0udmFsdWUsXG4gICAgICBvdGhlckdyaWRTdHJlYW1zOiB0aGlzLm90aGVyR3JpZFN0cmVhbXMudmFsdWUsXG4gICAgICBhdWRpb09ubHlTdHJlYW1zOiB0aGlzLmF1ZGlvT25seVN0cmVhbXMudmFsdWUsXG4gICAgICB2aWRlb0lucHV0czogdGhpcy52aWRlb0lucHV0cy52YWx1ZSxcbiAgICAgIGF1ZGlvSW5wdXRzOiB0aGlzLmF1ZGlvSW5wdXRzLnZhbHVlLFxuICAgICAgbWVldGluZ1Byb2dyZXNzVGltZTogdGhpcy5tZWV0aW5nUHJvZ3Jlc3NUaW1lLnZhbHVlLFxuICAgICAgbWVldGluZ0VsYXBzZWRUaW1lOiB0aGlzLm1lZXRpbmdFbGFwc2VkVGltZS52YWx1ZSxcblxuICAgICAgcmVmX3BhcnRpY2lwYW50czogdGhpcy5yZWZfcGFydGljaXBhbnRzLnZhbHVlLFxuXG4gICAgICBtZXNzYWdlczogdGhpcy5tZXNzYWdlcy52YWx1ZSxcbiAgICAgIHN0YXJ0RGlyZWN0TWVzc2FnZTogdGhpcy5zdGFydERpcmVjdE1lc3NhZ2UudmFsdWUsXG4gICAgICBkaXJlY3RNZXNzYWdlRGV0YWlsczogdGhpcy5kaXJlY3RNZXNzYWdlRGV0YWlscy52YWx1ZSxcbiAgICAgIGNvSG9zdDogdGhpcy5jb0hvc3QudmFsdWUsXG4gICAgICBjb0hvc3RSZXNwb25zaWJpbGl0eTogdGhpcy5jb0hvc3RSZXNwb25zaWJpbGl0eS52YWx1ZSxcblxuICAgICAgLy8gRXZlbnQgc2V0dGluZ3NcbiAgICAgIGF1ZGlvU2V0dGluZzogdGhpcy5hdWRpb1NldHRpbmcudmFsdWUsXG4gICAgICB2aWRlb1NldHRpbmc6IHRoaXMudmlkZW9TZXR0aW5nLnZhbHVlLFxuICAgICAgc2NyZWVuc2hhcmVTZXR0aW5nOiB0aGlzLnNjcmVlbnNoYXJlU2V0dGluZy52YWx1ZSxcbiAgICAgIGNoYXRTZXR0aW5nOiB0aGlzLmNoYXRTZXR0aW5nLnZhbHVlLFxuXG4gICAgICAvLyBEaXNwbGF5IHNldHRpbmdzXG4gICAgICBhdXRvV2F2ZTogdGhpcy5hdXRvV2F2ZS52YWx1ZSxcbiAgICAgIGZvcmNlRnVsbERpc3BsYXk6IHRoaXMuZm9yY2VGdWxsRGlzcGxheS52YWx1ZSxcbiAgICAgIHByZXZGb3JjZUZ1bGxEaXNwbGF5OiB0aGlzLnByZXZGb3JjZUZ1bGxEaXNwbGF5LnZhbHVlLFxuICAgICAgcHJldk1lZXRpbmdEaXNwbGF5VHlwZTogdGhpcy5wcmV2TWVldGluZ0Rpc3BsYXlUeXBlLnZhbHVlLFxuXG4gICAgICAvLyBXYWl0aW5nIHJvb21cbiAgICAgIHdhaXRpbmdSb29tRmlsdGVyOiB0aGlzLndhaXRpbmdSb29tRmlsdGVyLnZhbHVlLFxuICAgICAgd2FpdGluZ1Jvb21MaXN0OiB0aGlzLndhaXRpbmdSb29tTGlzdC52YWx1ZSxcbiAgICAgIHdhaXRpbmdSb29tQ291bnRlcjogdGhpcy53YWl0aW5nUm9vbUNvdW50ZXIudmFsdWUsXG4gICAgICBmaWx0ZXJlZFdhaXRpbmdSb29tTGlzdDogdGhpcy5maWx0ZXJlZFdhaXRpbmdSb29tTGlzdC52YWx1ZSxcblxuICAgICAgLy8gUmVxdWVzdHNcbiAgICAgIHJlcXVlc3RGaWx0ZXI6IHRoaXMucmVxdWVzdEZpbHRlci52YWx1ZSxcbiAgICAgIHJlcXVlc3RMaXN0OiB0aGlzLnJlcXVlc3RMaXN0LnZhbHVlLFxuICAgICAgcmVxdWVzdENvdW50ZXI6IHRoaXMucmVxdWVzdENvdW50ZXIudmFsdWUsXG4gICAgICBmaWx0ZXJlZFJlcXVlc3RMaXN0OiB0aGlzLmZpbHRlcmVkUmVxdWVzdExpc3QudmFsdWUsXG5cbiAgICAgIC8vIFRvdGFsIHJlcXVlc3RzIGFuZCB3YWl0aW5nIHJvb21cbiAgICAgIHRvdGFsUmVxV2FpdDogdGhpcy50b3RhbFJlcVdhaXQudmFsdWUsXG5cbiAgICAgIC8vIEFsZXJ0c1xuICAgICAgYWxlcnRWaXNpYmxlOiB0aGlzLmFsZXJ0VmlzaWJsZS52YWx1ZSxcbiAgICAgIGFsZXJ0TWVzc2FnZTogdGhpcy5hbGVydE1lc3NhZ2UudmFsdWUsXG4gICAgICBhbGVydFR5cGU6IHRoaXMuYWxlcnRUeXBlLnZhbHVlLFxuICAgICAgYWxlcnREdXJhdGlvbjogdGhpcy5hbGVydER1cmF0aW9uLnZhbHVlLFxuXG4gICAgICAvLyBQcm9ncmVzcyBUaW1lclxuICAgICAgcHJvZ3Jlc3NUaW1lclZpc2libGU6IHRoaXMucHJvZ3Jlc3NUaW1lclZpc2libGUudmFsdWUsXG4gICAgICBwcm9ncmVzc1RpbWVyVmFsdWU6IHRoaXMucHJvZ3Jlc3NUaW1lclZhbHVlLnZhbHVlLFxuXG4gICAgICAvLyBNZW51IG1vZGFsc1xuICAgICAgaXNNZW51TW9kYWxWaXNpYmxlOiB0aGlzLmlzTWVudU1vZGFsVmlzaWJsZS52YWx1ZSxcbiAgICAgIGlzUmVjb3JkaW5nTW9kYWxWaXNpYmxlOiB0aGlzLmlzUmVjb3JkaW5nTW9kYWxWaXNpYmxlLnZhbHVlLFxuICAgICAgaXNTZXR0aW5nc01vZGFsVmlzaWJsZTogdGhpcy5pc1NldHRpbmdzTW9kYWxWaXNpYmxlLnZhbHVlLFxuICAgICAgaXNSZXF1ZXN0c01vZGFsVmlzaWJsZTogdGhpcy5pc1JlcXVlc3RzTW9kYWxWaXNpYmxlLnZhbHVlLFxuICAgICAgaXNXYWl0aW5nTW9kYWxWaXNpYmxlOiB0aGlzLmlzV2FpdGluZ01vZGFsVmlzaWJsZS52YWx1ZSxcbiAgICAgIGlzQ29Ib3N0TW9kYWxWaXNpYmxlOiB0aGlzLmlzQ29Ib3N0TW9kYWxWaXNpYmxlLnZhbHVlLFxuICAgICAgaXNNZWRpYVNldHRpbmdzTW9kYWxWaXNpYmxlOiB0aGlzLmlzTWVkaWFTZXR0aW5nc01vZGFsVmlzaWJsZS52YWx1ZSxcbiAgICAgIGlzRGlzcGxheVNldHRpbmdzTW9kYWxWaXNpYmxlOiB0aGlzLmlzRGlzcGxheVNldHRpbmdzTW9kYWxWaXNpYmxlLnZhbHVlLFxuXG4gICAgICAvLyBPdGhlciBNb2RhbHNcbiAgICAgIGlzUGFydGljaXBhbnRzTW9kYWxWaXNpYmxlOiB0aGlzLmlzUGFydGljaXBhbnRzTW9kYWxWaXNpYmxlLnZhbHVlLFxuICAgICAgaXNNZXNzYWdlc01vZGFsVmlzaWJsZTogdGhpcy5pc01lc3NhZ2VzTW9kYWxWaXNpYmxlLnZhbHVlLFxuICAgICAgaXNDb25maXJtRXhpdE1vZGFsVmlzaWJsZTogdGhpcy5pc0NvbmZpcm1FeGl0TW9kYWxWaXNpYmxlLnZhbHVlLFxuICAgICAgaXNDb25maXJtSGVyZU1vZGFsVmlzaWJsZTogdGhpcy5pc0NvbmZpcm1IZXJlTW9kYWxWaXNpYmxlLnZhbHVlLFxuICAgICAgaXNMb2FkaW5nTW9kYWxWaXNpYmxlOiB0aGlzLmlzTG9hZGluZ01vZGFsVmlzaWJsZS52YWx1ZSxcblxuICAgICAgLy8gUmVjb3JkaW5nIE9wdGlvbnNcbiAgICAgIHJlY29yZGluZ01lZGlhT3B0aW9uczogdGhpcy5yZWNvcmRpbmdNZWRpYU9wdGlvbnMudmFsdWUsXG4gICAgICByZWNvcmRpbmdBdWRpb09wdGlvbnM6IHRoaXMucmVjb3JkaW5nQXVkaW9PcHRpb25zLnZhbHVlLFxuICAgICAgcmVjb3JkaW5nVmlkZW9PcHRpb25zOiB0aGlzLnJlY29yZGluZ1ZpZGVvT3B0aW9ucy52YWx1ZSxcbiAgICAgIHJlY29yZGluZ1ZpZGVvVHlwZTogdGhpcy5yZWNvcmRpbmdWaWRlb1R5cGUudmFsdWUsXG4gICAgICByZWNvcmRpbmdWaWRlb09wdGltaXplZDogdGhpcy5yZWNvcmRpbmdWaWRlb09wdGltaXplZC52YWx1ZSxcbiAgICAgIHJlY29yZGluZ0Rpc3BsYXlUeXBlOiB0aGlzLnJlY29yZGluZ0Rpc3BsYXlUeXBlLnZhbHVlLFxuICAgICAgcmVjb3JkaW5nQWRkSExTOiB0aGlzLnJlY29yZGluZ0FkZEhMUy52YWx1ZSxcbiAgICAgIHJlY29yZGluZ0FkZFRleHQ6IHRoaXMucmVjb3JkaW5nQWRkVGV4dC52YWx1ZSxcbiAgICAgIHJlY29yZGluZ0N1c3RvbVRleHQ6IHRoaXMucmVjb3JkaW5nQ3VzdG9tVGV4dC52YWx1ZSxcbiAgICAgIHJlY29yZGluZ0N1c3RvbVRleHRQb3NpdGlvbjogdGhpcy5yZWNvcmRpbmdDdXN0b21UZXh0UG9zaXRpb24udmFsdWUsXG4gICAgICByZWNvcmRpbmdDdXN0b21UZXh0Q29sb3I6IHRoaXMucmVjb3JkaW5nQ3VzdG9tVGV4dENvbG9yLnZhbHVlLFxuICAgICAgcmVjb3JkaW5nTmFtZVRhZ3M6IHRoaXMucmVjb3JkaW5nTmFtZVRhZ3MudmFsdWUsXG4gICAgICByZWNvcmRpbmdCYWNrZ3JvdW5kQ29sb3I6IHRoaXMucmVjb3JkaW5nQmFja2dyb3VuZENvbG9yLnZhbHVlLFxuICAgICAgcmVjb3JkaW5nTmFtZVRhZ3NDb2xvcjogdGhpcy5yZWNvcmRpbmdOYW1lVGFnc0NvbG9yLnZhbHVlLFxuICAgICAgcmVjb3JkaW5nT3JpZW50YXRpb25WaWRlbzogdGhpcy5yZWNvcmRpbmdPcmllbnRhdGlvblZpZGVvLnZhbHVlLFxuICAgICAgY2xlYXJlZFRvUmVzdW1lOiB0aGlzLmNsZWFyZWRUb1Jlc3VtZS52YWx1ZSxcbiAgICAgIGNsZWFyZWRUb1JlY29yZDogdGhpcy5jbGVhcmVkVG9SZWNvcmQudmFsdWUsXG4gICAgICByZWNvcmRTdGF0ZTogdGhpcy5yZWNvcmRTdGF0ZS52YWx1ZSxcbiAgICAgIHNob3dSZWNvcmRCdXR0b25zOiB0aGlzLnNob3dSZWNvcmRCdXR0b25zLnZhbHVlLFxuICAgICAgcmVjb3JkaW5nUHJvZ3Jlc3NUaW1lOiB0aGlzLnJlY29yZGluZ1Byb2dyZXNzVGltZS52YWx1ZSxcbiAgICAgIGF1ZGlvU3dpdGNoaW5nOiB0aGlzLmF1ZGlvU3dpdGNoaW5nLnZhbHVlLFxuICAgICAgdmlkZW9Td2l0Y2hpbmc6IHRoaXMudmlkZW9Td2l0Y2hpbmcudmFsdWUsXG5cbiAgICAgIC8vIE1lZGlhIHN0YXRlc1xuICAgICAgdmlkZW9BbHJlYWR5T246IHRoaXMudmlkZW9BbHJlYWR5T24udmFsdWUsXG4gICAgICBhdWRpb0FscmVhZHlPbjogdGhpcy5hdWRpb0FscmVhZHlPbi52YWx1ZSxcbiAgICAgIGNvbXBvbmVudFNpemVzOiB0aGlzLmNvbXBvbmVudFNpemVzLnZhbHVlLFxuXG4gICAgICAvLyBQZXJtaXNzaW9uc1xuICAgICAgaGFzQ2FtZXJhUGVybWlzc2lvbjogdGhpcy5oYXNDYW1lcmFQZXJtaXNzaW9uLnZhbHVlLFxuICAgICAgaGFzQXVkaW9QZXJtaXNzaW9uOiB0aGlzLmhhc0F1ZGlvUGVybWlzc2lvbi52YWx1ZSxcblxuICAgICAgLy8gVHJhbnNwb3J0c1xuICAgICAgdHJhbnNwb3J0Q3JlYXRlZDogdGhpcy50cmFuc3BvcnRDcmVhdGVkLnZhbHVlLFxuICAgICAgdHJhbnNwb3J0Q3JlYXRlZFZpZGVvOiB0aGlzLnRyYW5zcG9ydENyZWF0ZWRWaWRlby52YWx1ZSxcbiAgICAgIHRyYW5zcG9ydENyZWF0ZWRBdWRpbzogdGhpcy50cmFuc3BvcnRDcmVhdGVkQXVkaW8udmFsdWUsXG4gICAgICB0cmFuc3BvcnRDcmVhdGVkU2NyZWVuOiB0aGlzLnRyYW5zcG9ydENyZWF0ZWRTY3JlZW4udmFsdWUsXG4gICAgICBwcm9kdWNlclRyYW5zcG9ydDogdGhpcy5wcm9kdWNlclRyYW5zcG9ydC52YWx1ZSxcbiAgICAgIHZpZGVvUHJvZHVjZXI6IHRoaXMudmlkZW9Qcm9kdWNlci52YWx1ZSxcbiAgICAgIHBhcmFtczogdGhpcy5wYXJhbXMudmFsdWUsXG4gICAgICB2aWRlb1BhcmFtczogdGhpcy52aWRlb1BhcmFtcy52YWx1ZSxcbiAgICAgIGF1ZGlvUGFyYW1zOiB0aGlzLmF1ZGlvUGFyYW1zLnZhbHVlLFxuICAgICAgYXVkaW9Qcm9kdWNlcjogdGhpcy5hdWRpb1Byb2R1Y2VyLnZhbHVlLFxuICAgICAgY29uc3VtZXJUcmFuc3BvcnRzOiB0aGlzLmNvbnN1bWVyVHJhbnNwb3J0cy52YWx1ZSxcbiAgICAgIGNvbnN1bWluZ1RyYW5zcG9ydHM6IHRoaXMuY29uc3VtaW5nVHJhbnNwb3J0cy52YWx1ZSxcblxuICAgICAgLy8gUG9sbHNcbiAgICAgIHBvbGxzOiB0aGlzLnBvbGxzLnZhbHVlLFxuICAgICAgcG9sbDogdGhpcy5wb2xsLnZhbHVlLFxuICAgICAgaXNQb2xsTW9kYWxWaXNpYmxlOiB0aGlzLmlzUG9sbE1vZGFsVmlzaWJsZS52YWx1ZSxcblxuICAgICAgLy8gQmFja2dyb3VuZFxuICAgICAgY3VzdG9tSW1hZ2U6IHRoaXMuY3VzdG9tSW1hZ2UudmFsdWUsXG4gICAgICBzZWxlY3RlZEltYWdlOiB0aGlzLnNlbGVjdGVkSW1hZ2UudmFsdWUsXG4gICAgICBzZWdtZW50VmlkZW86IHRoaXMuc2VnbWVudFZpZGVvLnZhbHVlLFxuICAgICAgc2VsZmllU2VnbWVudGF0aW9uOiB0aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi52YWx1ZSxcbiAgICAgIHBhdXNlU2VnbWVudGF0aW9uOiB0aGlzLnBhdXNlU2VnbWVudGF0aW9uLnZhbHVlLFxuICAgICAgcHJvY2Vzc2VkU3RyZWFtOiB0aGlzLnByb2Nlc3NlZFN0cmVhbS52YWx1ZSxcbiAgICAgIGtlZXBCYWNrZ3JvdW5kOiB0aGlzLmtlZXBCYWNrZ3JvdW5kLnZhbHVlLFxuICAgICAgYmFja2dyb3VuZEhhc0NoYW5nZWQ6IHRoaXMuYmFja2dyb3VuZEhhc0NoYW5nZWQudmFsdWUsXG4gICAgICB2aXJ0dWFsU3RyZWFtOiB0aGlzLnZpcnR1YWxTdHJlYW0udmFsdWUsXG4gICAgICBtYWluQ2FudmFzOiB0aGlzLm1haW5DYW52YXMudmFsdWUsXG4gICAgICBwcmV2S2VlcEJhY2tncm91bmQ6IHRoaXMucHJldktlZXBCYWNrZ3JvdW5kLnZhbHVlLFxuICAgICAgYXBwbGllZEJhY2tncm91bmQ6IHRoaXMuYXBwbGllZEJhY2tncm91bmQudmFsdWUsXG4gICAgICBpc0JhY2tncm91bmRNb2RhbFZpc2libGU6IHRoaXMuaXNCYWNrZ3JvdW5kTW9kYWxWaXNpYmxlLnZhbHVlLFxuICAgICAgYXV0b0NsaWNrQmFja2dyb3VuZDogdGhpcy5hdXRvQ2xpY2tCYWNrZ3JvdW5kLnZhbHVlLFxuXG4gICAgICAvLyBCcmVha291dCByb29tc1xuICAgICAgYnJlYWtvdXRSb29tczogdGhpcy5icmVha291dFJvb21zLnZhbHVlLFxuICAgICAgY3VycmVudFJvb21JbmRleDogdGhpcy5jdXJyZW50Um9vbUluZGV4LnZhbHVlLFxuICAgICAgY2FuU3RhcnRCcmVha291dDogdGhpcy5jYW5TdGFydEJyZWFrb3V0LnZhbHVlLFxuICAgICAgYnJlYWtPdXRSb29tU3RhcnRlZDogdGhpcy5icmVha091dFJvb21TdGFydGVkLnZhbHVlLFxuICAgICAgYnJlYWtPdXRSb29tRW5kZWQ6IHRoaXMuYnJlYWtPdXRSb29tRW5kZWQudmFsdWUsXG4gICAgICBob3N0TmV3Um9vbTogdGhpcy5ob3N0TmV3Um9vbS52YWx1ZSxcbiAgICAgIGxpbWl0ZWRCcmVha1Jvb206IHRoaXMubGltaXRlZEJyZWFrUm9vbS52YWx1ZSxcbiAgICAgIG1haW5Sb29tc0xlbmd0aDogdGhpcy5tYWluUm9vbXNMZW5ndGgudmFsdWUsXG4gICAgICBtZW1iZXJSb29tOiB0aGlzLm1lbWJlclJvb20udmFsdWUsXG4gICAgICBpc0JyZWFrb3V0Um9vbXNNb2RhbFZpc2libGU6IHRoaXMuaXNCcmVha291dFJvb21zTW9kYWxWaXNpYmxlLnZhbHVlLFxuXG4gICAgICAvLyBXaGl0ZWJvYXJkXG4gICAgICB3aGl0ZWJvYXJkVXNlcnM6IHRoaXMud2hpdGVib2FyZFVzZXJzLnZhbHVlLFxuICAgICAgY3VycmVudFdoaXRlYm9hcmRJbmRleDogdGhpcy5jdXJyZW50V2hpdGVib2FyZEluZGV4LnZhbHVlLFxuICAgICAgY2FuU3RhcnRXaGl0ZWJvYXJkOiB0aGlzLmNhblN0YXJ0V2hpdGVib2FyZC52YWx1ZSxcbiAgICAgIHdoaXRlYm9hcmRTdGFydGVkOiB0aGlzLndoaXRlYm9hcmRTdGFydGVkLnZhbHVlLFxuICAgICAgd2hpdGVib2FyZEVuZGVkOiB0aGlzLndoaXRlYm9hcmRFbmRlZC52YWx1ZSxcbiAgICAgIHdoaXRlYm9hcmRMaW1pdDogdGhpcy53aGl0ZWJvYXJkTGltaXQudmFsdWUsXG4gICAgICBpc1doaXRlYm9hcmRNb2RhbFZpc2libGU6IHRoaXMuaXNXaGl0ZWJvYXJkTW9kYWxWaXNpYmxlLnZhbHVlLFxuICAgICAgaXNDb25maWd1cmVXaGl0ZWJvYXJkTW9kYWxWaXNpYmxlOiB0aGlzLmlzQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsVmlzaWJsZS52YWx1ZSxcbiAgICAgIHNoYXBlczogdGhpcy5zaGFwZXMudmFsdWUsXG4gICAgICB1c2VJbWFnZUJhY2tncm91bmQ6IHRoaXMudXNlSW1hZ2VCYWNrZ3JvdW5kLnZhbHVlLFxuICAgICAgcmVkb1N0YWNrOiB0aGlzLnJlZG9TdGFjay52YWx1ZSxcbiAgICAgIHVuZG9TdGFjazogdGhpcy51bmRvU3RhY2sudmFsdWUsXG4gICAgICBjYW52YXNTdHJlYW06IHRoaXMuY2FudmFzU3RyZWFtLnZhbHVlLFxuICAgICAgY2FudmFzV2hpdGVib2FyZDogdGhpcy5jYW52YXNXaGl0ZWJvYXJkLnZhbHVlLFxuXG4gICAgICAvLyBTY3JlZW5ib2FyZFxuICAgICAgY2FudmFzU2NyZWVuYm9hcmQ6IHRoaXMuY2FudmFzU2NyZWVuYm9hcmQudmFsdWUsXG4gICAgICBwcm9jZXNzZWRTY3JlZW5TdHJlYW06IHRoaXMucHJvY2Vzc2VkU2NyZWVuU3RyZWFtLnZhbHVlLFxuICAgICAgYW5ub3RhdGVTY3JlZW5TdHJlYW06IHRoaXMuYW5ub3RhdGVTY3JlZW5TdHJlYW0udmFsdWUsXG4gICAgICBtYWluU2NyZWVuQ2FudmFzOiB0aGlzLm1haW5TY3JlZW5DYW52YXMudmFsdWUsXG4gICAgICBpc1NjcmVlbmJvYXJkTW9kYWxWaXNpYmxlOiB0aGlzLmlzU2NyZWVuYm9hcmRNb2RhbFZpc2libGUudmFsdWUsXG5cbiAgICAgIHZhbGlkYXRlZDogdGhpcy52YWxpZGF0ZWQudmFsdWUsXG4gICAgICBkZXZpY2U6IHRoaXMuZGV2aWNlLnZhbHVlLFxuICAgICAgc29ja2V0OiB0aGlzLnNvY2tldC52YWx1ZSxcbiAgICAgIGNoZWNrTWVkaWFQZXJtaXNzaW9uOiBmYWxzZSxcbiAgICAgIG9uV2ViOiB0cnVlLFxuXG4gICAgICAvLyBVcGRhdGUgZnVuY3Rpb25zXG4gICAgICB1cGRhdGVSb29tTmFtZTogdGhpcy51cGRhdGVSb29tTmFtZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlTWVtYmVyOiB0aGlzLnVwZGF0ZU1lbWJlci5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQWRtaW5QYXNzY29kZTogdGhpcy51cGRhdGVBZG1pblBhc3Njb2RlLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVZb3VBcmVDb0hvc3Q6IHRoaXMudXBkYXRlWW91QXJlQ29Ib3N0LmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVZb3VBcmVIb3N0OiB0aGlzLnVwZGF0ZVlvdUFyZUhvc3QuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUlzbGV2ZWw6IHRoaXMudXBkYXRlSXNsZXZlbC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQ29Ib3N0OiB0aGlzLnVwZGF0ZUNvSG9zdC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQ29Ib3N0UmVzcG9uc2liaWxpdHk6IHRoaXMudXBkYXRlQ29Ib3N0UmVzcG9uc2liaWxpdHkuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUNvbmZpcm1lZFRvUmVjb3JkOiB0aGlzLnVwZGF0ZUNvbmZpcm1lZFRvUmVjb3JkLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVNZWV0aW5nRGlzcGxheVR5cGU6IHRoaXMudXBkYXRlTWVldGluZ0Rpc3BsYXlUeXBlLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVNZWV0aW5nVmlkZW9PcHRpbWl6ZWQ6IHRoaXMudXBkYXRlTWVldGluZ1ZpZGVvT3B0aW1pemVkLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVFdmVudFR5cGU6IHRoaXMudXBkYXRlRXZlbnRUeXBlLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVQYXJ0aWNpcGFudHM6IHRoaXMudXBkYXRlUGFydGljaXBhbnRzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVQYXJ0aWNpcGFudHNDb3VudGVyOiB0aGlzLnVwZGF0ZVBhcnRpY2lwYW50c0NvdW50ZXIuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVBhcnRpY2lwYW50c0ZpbHRlcjogdGhpcy51cGRhdGVQYXJ0aWNpcGFudHNGaWx0ZXIuYmluZCh0aGlzKSxcblxuICAgICAgLy8gTW9yZSB1cGRhdGUgZnVuY3Rpb25zIGZvciBtZWRpYSBkZXRhaWxzXG4gICAgICB1cGRhdGVDb25zdW1lX3NvY2tldHM6IHRoaXMudXBkYXRlQ29uc3VtZV9zb2NrZXRzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVSdHBDYXBhYmlsaXRpZXM6IHRoaXMudXBkYXRlUnRwQ2FwYWJpbGl0aWVzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVSb29tUmVjdklQczogdGhpcy51cGRhdGVSb29tUmVjdklQcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlTWVldGluZ1Jvb21QYXJhbXM6IHRoaXMudXBkYXRlTWVldGluZ1Jvb21QYXJhbXMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUl0ZW1QYWdlTGltaXQ6IHRoaXMudXBkYXRlSXRlbVBhZ2VMaW1pdC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQXVkaW9Pbmx5Um9vbTogdGhpcy51cGRhdGVBdWRpb09ubHlSb29tLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVBZGRGb3JCYXNpYzogdGhpcy51cGRhdGVBZGRGb3JCYXNpYy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlU2NyZWVuUGFnZUxpbWl0OiB0aGlzLnVwZGF0ZVNjcmVlblBhZ2VMaW1pdC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlU2hhcmVTY3JlZW5TdGFydGVkOiB0aGlzLnVwZGF0ZVNoYXJlU2NyZWVuU3RhcnRlZC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlU2hhcmVkOiB0aGlzLnVwZGF0ZVNoYXJlZC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlVGFyZ2V0T3JpZW50YXRpb246IHRoaXMudXBkYXRlVGFyZ2V0T3JpZW50YXRpb24uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVRhcmdldFJlc29sdXRpb246IHRoaXMudXBkYXRlVGFyZ2V0UmVzb2x1dGlvbi5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlVGFyZ2V0UmVzb2x1dGlvbkhvc3Q6IHRoaXMudXBkYXRlVGFyZ2V0UmVzb2x1dGlvbkhvc3QuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVZpZENvbnM6IHRoaXMudXBkYXRlVmlkQ29ucy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlRnJhbWVSYXRlOiB0aGlzLnVwZGF0ZUZyYW1lUmF0ZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlSFBhcmFtczogdGhpcy51cGRhdGVIUGFyYW1zLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVWUGFyYW1zOiB0aGlzLnVwZGF0ZVZQYXJhbXMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVNjcmVlblBhcmFtczogdGhpcy51cGRhdGVTY3JlZW5QYXJhbXMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUFQYXJhbXM6IHRoaXMudXBkYXRlQVBhcmFtcy5iaW5kKHRoaXMpLFxuXG4gICAgICAvLyBNb3JlIHVwZGF0ZSBmdW5jdGlvbnMgZm9yIHJlY29yZGluZyBkZXRhaWxzXG4gICAgICB1cGRhdGVSZWNvcmRpbmdBdWRpb1BhdXNlc0xpbWl0OiB0aGlzLnVwZGF0ZVJlY29yZGluZ0F1ZGlvUGF1c2VzTGltaXQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZGluZ0F1ZGlvUGF1c2VzQ291bnQ6IHRoaXMudXBkYXRlUmVjb3JkaW5nQXVkaW9QYXVzZXNDb3VudC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVjb3JkaW5nQXVkaW9TdXBwb3J0OiB0aGlzLnVwZGF0ZVJlY29yZGluZ0F1ZGlvU3VwcG9ydC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVjb3JkaW5nQXVkaW9QZW9wbGVMaW1pdDogdGhpcy51cGRhdGVSZWNvcmRpbmdBdWRpb1Blb3BsZUxpbWl0LmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVSZWNvcmRpbmdBdWRpb1BhcnRpY2lwYW50c1RpbWVMaW1pdDpcbiAgICAgICAgdGhpcy51cGRhdGVSZWNvcmRpbmdBdWRpb1BhcnRpY2lwYW50c1RpbWVMaW1pdC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVjb3JkaW5nVmlkZW9QYXVzZXNDb3VudDogdGhpcy51cGRhdGVSZWNvcmRpbmdWaWRlb1BhdXNlc0NvdW50LmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVSZWNvcmRpbmdWaWRlb1BhdXNlc0xpbWl0OiB0aGlzLnVwZGF0ZVJlY29yZGluZ1ZpZGVvUGF1c2VzTGltaXQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZGluZ1ZpZGVvU3VwcG9ydDogdGhpcy51cGRhdGVSZWNvcmRpbmdWaWRlb1N1cHBvcnQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZGluZ1ZpZGVvUGVvcGxlTGltaXQ6IHRoaXMudXBkYXRlUmVjb3JkaW5nVmlkZW9QZW9wbGVMaW1pdC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNUaW1lTGltaXQ6XG4gICAgICAgIHRoaXMudXBkYXRlUmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNUaW1lTGltaXQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZGluZ0FsbFBhcnRpY2lwYW50c1N1cHBvcnQ6IHRoaXMudXBkYXRlUmVjb3JkaW5nQWxsUGFydGljaXBhbnRzU3VwcG9ydC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNTdXBwb3J0OlxuICAgICAgICB0aGlzLnVwZGF0ZVJlY29yZGluZ1ZpZGVvUGFydGljaXBhbnRzU3VwcG9ydC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVjb3JkaW5nQWxsUGFydGljaXBhbnRzRnVsbFJvb21TdXBwb3J0OlxuICAgICAgICB0aGlzLnVwZGF0ZVJlY29yZGluZ0FsbFBhcnRpY2lwYW50c0Z1bGxSb29tU3VwcG9ydC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNGdWxsUm9vbVN1cHBvcnQ6XG4gICAgICAgIHRoaXMudXBkYXRlUmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNGdWxsUm9vbVN1cHBvcnQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZGluZ1ByZWZlcnJlZE9yaWVudGF0aW9uOiB0aGlzLnVwZGF0ZVJlY29yZGluZ1ByZWZlcnJlZE9yaWVudGF0aW9uLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVSZWNvcmRpbmdTdXBwb3J0Rm9yT3RoZXJPcmllbnRhdGlvbjpcbiAgICAgICAgdGhpcy51cGRhdGVSZWNvcmRpbmdTdXBwb3J0Rm9yT3RoZXJPcmllbnRhdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVjb3JkaW5nTXVsdGlGb3JtYXRzU3VwcG9ydDogdGhpcy51cGRhdGVSZWNvcmRpbmdNdWx0aUZvcm1hdHNTdXBwb3J0LmJpbmQodGhpcyksXG5cbiAgICAgIHVwZGF0ZVVzZXJSZWNvcmRpbmdQYXJhbXM6IHRoaXMudXBkYXRlVXNlclJlY29yZGluZ1BhcmFtcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQ2FuUmVjb3JkOiB0aGlzLnVwZGF0ZUNhblJlY29yZC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlU3RhcnRSZXBvcnQ6IHRoaXMudXBkYXRlU3RhcnRSZXBvcnQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUVuZFJlcG9ydDogdGhpcy51cGRhdGVFbmRSZXBvcnQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZFRpbWVySW50ZXJ2YWw6IHRoaXMudXBkYXRlUmVjb3JkVGltZXJJbnRlcnZhbC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVjb3JkU3RhcnRUaW1lOiB0aGlzLnVwZGF0ZVJlY29yZFN0YXJ0VGltZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVjb3JkRWxhcHNlZFRpbWU6IHRoaXMudXBkYXRlUmVjb3JkRWxhcHNlZFRpbWUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUlzVGltZXJSdW5uaW5nOiB0aGlzLnVwZGF0ZUlzVGltZXJSdW5uaW5nLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVDYW5QYXVzZVJlc3VtZTogdGhpcy51cGRhdGVDYW5QYXVzZVJlc3VtZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVjb3JkQ2hhbmdlU2Vjb25kczogdGhpcy51cGRhdGVSZWNvcmRDaGFuZ2VTZWNvbmRzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVQYXVzZUxpbWl0OiB0aGlzLnVwZGF0ZVBhdXNlTGltaXQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVBhdXNlUmVjb3JkQ291bnQ6IHRoaXMudXBkYXRlUGF1c2VSZWNvcmRDb3VudC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQ2FuTGF1bmNoUmVjb3JkOiB0aGlzLnVwZGF0ZUNhbkxhdW5jaFJlY29yZC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlU3RvcExhdW5jaFJlY29yZDogdGhpcy51cGRhdGVTdG9wTGF1bmNoUmVjb3JkLmJpbmQodGhpcyksXG5cbiAgICAgIHVwZGF0ZVBhcnRpY2lwYW50c0FsbDogdGhpcy51cGRhdGVQYXJ0aWNpcGFudHNBbGwuYmluZCh0aGlzKSxcblxuICAgICAgdXBkYXRlRmlyc3RBbGw6IHRoaXMudXBkYXRlRmlyc3RBbGwuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVVwZGF0ZU1haW5XaW5kb3c6IHRoaXMudXBkYXRlVXBkYXRlTWFpbldpbmRvdy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlRmlyc3Rfcm91bmQ6IHRoaXMudXBkYXRlRmlyc3Rfcm91bmQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUxhbmRTY2FwZWQ6IHRoaXMudXBkYXRlTGFuZFNjYXBlZC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlTG9ja19zY3JlZW46IHRoaXMudXBkYXRlTG9ja19zY3JlZW4uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVNjcmVlbklkOiB0aGlzLnVwZGF0ZVNjcmVlbklkLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVBbGxWaWRlb1N0cmVhbXM6IHRoaXMudXBkYXRlQWxsVmlkZW9TdHJlYW1zLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVOZXdMaW1pdGVkU3RyZWFtczogdGhpcy51cGRhdGVOZXdMaW1pdGVkU3RyZWFtcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlTmV3TGltaXRlZFN0cmVhbXNJRHM6IHRoaXMudXBkYXRlTmV3TGltaXRlZFN0cmVhbXNJRHMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUFjdGl2ZVNvdW5kczogdGhpcy51cGRhdGVBY3RpdmVTb3VuZHMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVNjcmVlblNoYXJlSURTdHJlYW06IHRoaXMudXBkYXRlU2NyZWVuU2hhcmVJRFN0cmVhbS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlU2NyZWVuU2hhcmVOYW1lU3RyZWFtOiB0aGlzLnVwZGF0ZVNjcmVlblNoYXJlTmFtZVN0cmVhbS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQWRtaW5JRFN0cmVhbTogdGhpcy51cGRhdGVBZG1pbklEU3RyZWFtLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVBZG1pbk5hbWVTdHJlYW06IHRoaXMudXBkYXRlQWRtaW5OYW1lU3RyZWFtLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVZb3VZb3VTdHJlYW06IHRoaXMudXBkYXRlWW91WW91U3RyZWFtLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVZb3VZb3VTdHJlYW1JRHM6IHRoaXMudXBkYXRlWW91WW91U3RyZWFtSURzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVMb2NhbFN0cmVhbTogdGhpcy51cGRhdGVMb2NhbFN0cmVhbS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVjb3JkU3RhcnRlZDogdGhpcy51cGRhdGVSZWNvcmRTdGFydGVkLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVSZWNvcmRSZXN1bWVkOiB0aGlzLnVwZGF0ZVJlY29yZFJlc3VtZWQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZFBhdXNlZDogdGhpcy51cGRhdGVSZWNvcmRQYXVzZWQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZFN0b3BwZWQ6IHRoaXMudXBkYXRlUmVjb3JkU3RvcHBlZC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQWRtaW5SZXN0cmljdFNldHRpbmc6IHRoaXMudXBkYXRlQWRtaW5SZXN0cmljdFNldHRpbmcuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVZpZGVvUmVxdWVzdFN0YXRlOiB0aGlzLnVwZGF0ZVZpZGVvUmVxdWVzdFN0YXRlLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVWaWRlb1JlcXVlc3RUaW1lOiB0aGlzLnVwZGF0ZVZpZGVvUmVxdWVzdFRpbWUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVZpZGVvQWN0aW9uOiB0aGlzLnVwZGF0ZVZpZGVvQWN0aW9uLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVMb2NhbFN0cmVhbVZpZGVvOiB0aGlzLnVwZGF0ZUxvY2FsU3RyZWFtVmlkZW8uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVVzZXJEZWZhdWx0VmlkZW9JbnB1dERldmljZTogdGhpcy51cGRhdGVVc2VyRGVmYXVsdFZpZGVvSW5wdXREZXZpY2UuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUN1cnJlbnRGYWNpbmdNb2RlOiB0aGlzLnVwZGF0ZUN1cnJlbnRGYWNpbmdNb2RlLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVQcmV2RmFjaW5nTW9kZTogdGhpcy51cGRhdGVQcmV2RmFjaW5nTW9kZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlRGVmVmlkZW9JRDogdGhpcy51cGRhdGVEZWZWaWRlb0lELmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVBbGxvd2VkOiB0aGlzLnVwZGF0ZUFsbG93ZWQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZURpc3BBY3RpdmVOYW1lczogdGhpcy51cGRhdGVEaXNwQWN0aXZlTmFtZXMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVBfZGlzcEFjdGl2ZU5hbWVzOiB0aGlzLnVwZGF0ZVBfZGlzcEFjdGl2ZU5hbWVzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVBY3RpdmVOYW1lczogdGhpcy51cGRhdGVBY3RpdmVOYW1lcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUHJldkFjdGl2ZU5hbWVzOiB0aGlzLnVwZGF0ZVByZXZBY3RpdmVOYW1lcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUF9hY3RpdmVOYW1lczogdGhpcy51cGRhdGVQX2FjdGl2ZU5hbWVzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVNZW1iZXJzUmVjZWl2ZWQ6IHRoaXMudXBkYXRlTWVtYmVyc1JlY2VpdmVkLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVEZWZlclNjcmVlblJlY2VpdmVkOiB0aGlzLnVwZGF0ZURlZmVyU2NyZWVuUmVjZWl2ZWQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUhvc3RGaXJzdFN3aXRjaDogdGhpcy51cGRhdGVIb3N0Rmlyc3RTd2l0Y2guYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZU1pY0FjdGlvbjogdGhpcy51cGRhdGVNaWNBY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVNjcmVlbkFjdGlvbjogdGhpcy51cGRhdGVTY3JlZW5BY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUNoYXRBY3Rpb246IHRoaXMudXBkYXRlQ2hhdEFjdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQXVkaW9SZXF1ZXN0U3RhdGU6IHRoaXMudXBkYXRlQXVkaW9SZXF1ZXN0U3RhdGUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVNjcmVlblJlcXVlc3RTdGF0ZTogdGhpcy51cGRhdGVTY3JlZW5SZXF1ZXN0U3RhdGUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUNoYXRSZXF1ZXN0U3RhdGU6IHRoaXMudXBkYXRlQ2hhdFJlcXVlc3RTdGF0ZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQXVkaW9SZXF1ZXN0VGltZTogdGhpcy51cGRhdGVBdWRpb1JlcXVlc3RUaW1lLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVTY3JlZW5SZXF1ZXN0VGltZTogdGhpcy51cGRhdGVTY3JlZW5SZXF1ZXN0VGltZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQ2hhdFJlcXVlc3RUaW1lOiB0aGlzLnVwZGF0ZUNoYXRSZXF1ZXN0VGltZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlT2xkU291bmRJZHM6IHRoaXMudXBkYXRlT2xkU291bmRJZHMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUhvc3RMYWJlbDogdGhpcy51cGRhdGVIb3N0TGFiZWwuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZU1haW5TY3JlZW5GaWxsZWQ6IHRoaXMudXBkYXRlTWFpblNjcmVlbkZpbGxlZC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlTG9jYWxTdHJlYW1TY3JlZW46IHRoaXMudXBkYXRlTG9jYWxTdHJlYW1TY3JlZW4uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVNjcmVlbkFscmVhZHlPbjogdGhpcy51cGRhdGVTY3JlZW5BbHJlYWR5T24uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUNoYXRBbHJlYWR5T246IHRoaXMudXBkYXRlQ2hhdEFscmVhZHlPbi5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVkaXJlY3RVUkw6IHRoaXMudXBkYXRlUmVkaXJlY3RVUkwuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZU9sZEFsbFN0cmVhbXM6IHRoaXMudXBkYXRlT2xkQWxsU3RyZWFtcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQWRtaW5WaWRJRDogdGhpcy51cGRhdGVBZG1pblZpZElELmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVTdHJlYW1OYW1lczogdGhpcy51cGRhdGVTdHJlYW1OYW1lcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlTm9uX2FsVmlkZW9TdHJlYW1zOiB0aGlzLnVwZGF0ZU5vbl9hbFZpZGVvU3RyZWFtcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlU29ydEF1ZGlvTG91ZG5lc3M6IHRoaXMudXBkYXRlU29ydEF1ZGlvTG91ZG5lc3MuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUF1ZGlvRGVjaWJlbHM6IHRoaXMudXBkYXRlQXVkaW9EZWNpYmVscy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlTWl4ZWRfYWxWaWRlb1N0cmVhbXM6IHRoaXMudXBkYXRlTWl4ZWRfYWxWaWRlb1N0cmVhbXMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZU5vbl9hbFZpZGVvU3RyZWFtc19tdXRlZDogdGhpcy51cGRhdGVOb25fYWxWaWRlb1N0cmVhbXNfbXV0ZWQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVBhZ2luYXRlZFN0cmVhbXM6IHRoaXMudXBkYXRlUGFnaW5hdGVkU3RyZWFtcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlTG9jYWxTdHJlYW1BdWRpbzogdGhpcy51cGRhdGVMb2NhbFN0cmVhbUF1ZGlvLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVEZWZBdWRpb0lEOiB0aGlzLnVwZGF0ZURlZkF1ZGlvSUQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVVzZXJEZWZhdWx0QXVkaW9JbnB1dERldmljZTogdGhpcy51cGRhdGVVc2VyRGVmYXVsdEF1ZGlvSW5wdXREZXZpY2UuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVVzZXJEZWZhdWx0QXVkaW9PdXRwdXREZXZpY2U6IHRoaXMudXBkYXRlVXNlckRlZmF1bHRBdWRpb091dHB1dERldmljZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUHJldkF1ZGlvSW5wdXREZXZpY2U6IHRoaXMudXBkYXRlUHJldkF1ZGlvSW5wdXREZXZpY2UuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVByZXZWaWRlb0lucHV0RGV2aWNlOiB0aGlzLnVwZGF0ZVByZXZWaWRlb0lucHV0RGV2aWNlLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVBdWRpb1BhdXNlZDogdGhpcy51cGRhdGVBdWRpb1BhdXNlZC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlTWFpblNjcmVlblBlcnNvbjogdGhpcy51cGRhdGVNYWluU2NyZWVuUGVyc29uLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVBZG1pbk9uTWFpblNjcmVlbjogdGhpcy51cGRhdGVBZG1pbk9uTWFpblNjcmVlbi5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlU2NyZWVuU3RhdGVzOiB0aGlzLnVwZGF0ZVNjcmVlblN0YXRlcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUHJldlNjcmVlblN0YXRlczogdGhpcy51cGRhdGVQcmV2U2NyZWVuU3RhdGVzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVVcGRhdGVEYXRlU3RhdGU6IHRoaXMudXBkYXRlVXBkYXRlRGF0ZVN0YXRlLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVMYXN0VXBkYXRlOiB0aGlzLnVwZGF0ZUxhc3RVcGRhdGUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZU5Gb3JSZWFkanVzdFJlY29yZDogdGhpcy51cGRhdGVORm9yUmVhZGp1c3RSZWNvcmQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUZpeGVkUGFnZUxpbWl0OiB0aGlzLnVwZGF0ZUZpeGVkUGFnZUxpbWl0LmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVSZW1vdmVBbHRHcmlkOiB0aGlzLnVwZGF0ZVJlbW92ZUFsdEdyaWQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZU5Gb3JSZWFkanVzdDogdGhpcy51cGRhdGVORm9yUmVhZGp1c3QuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUxhc3RSZW9yZGVyVGltZTogdGhpcy51cGRhdGVMYXN0UmVvcmRlclRpbWUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUF1ZFN0cmVhbU5hbWVzOiB0aGlzLnVwZGF0ZUF1ZFN0cmVhbU5hbWVzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVDdXJyZW50VXNlclBhZ2U6IHRoaXMudXBkYXRlQ3VycmVudFVzZXJQYWdlLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVNYWluSGVpZ2h0V2lkdGg6IHRoaXMudXBkYXRlTWFpbkhlaWdodFdpZHRoLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVQcmV2TWFpbkhlaWdodFdpZHRoOiB0aGlzLnVwZGF0ZVByZXZNYWluSGVpZ2h0V2lkdGguYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVByZXZEb1BhZ2luYXRlOiB0aGlzLnVwZGF0ZVByZXZEb1BhZ2luYXRlLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVEb1BhZ2luYXRlOiB0aGlzLnVwZGF0ZURvUGFnaW5hdGUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVNoYXJlRW5kZWQ6IHRoaXMudXBkYXRlU2hhcmVFbmRlZC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlTFN0cmVhbXM6IHRoaXMudXBkYXRlTFN0cmVhbXMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUNoYXRSZWZTdHJlYW1zOiB0aGlzLnVwZGF0ZUNoYXRSZWZTdHJlYW1zLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVDb250cm9sSGVpZ2h0OiB0aGlzLnVwZGF0ZUNvbnRyb2xIZWlnaHQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUlzV2lkZVNjcmVlbjogdGhpcy51cGRhdGVJc1dpZGVTY3JlZW4uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUlzTWVkaXVtU2NyZWVuOiB0aGlzLnVwZGF0ZUlzTWVkaXVtU2NyZWVuLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVJc1NtYWxsU2NyZWVuOiB0aGlzLnVwZGF0ZUlzU21hbGxTY3JlZW4uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUFkZEdyaWQ6IHRoaXMudXBkYXRlQWRkR3JpZC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQWRkQWx0R3JpZDogdGhpcy51cGRhdGVBZGRBbHRHcmlkLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVHcmlkUm93czogdGhpcy51cGRhdGVHcmlkUm93cy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlR3JpZENvbHM6IHRoaXMudXBkYXRlR3JpZENvbHMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUFsdEdyaWRSb3dzOiB0aGlzLnVwZGF0ZUFsdEdyaWRSb3dzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVBbHRHcmlkQ29sczogdGhpcy51cGRhdGVBbHRHcmlkQ29scy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlTnVtYmVyUGFnZXM6IHRoaXMudXBkYXRlTnVtYmVyUGFnZXMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUN1cnJlbnRTdHJlYW1zOiB0aGlzLnVwZGF0ZUN1cnJlbnRTdHJlYW1zLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVTaG93TWluaVZpZXc6IHRoaXMudXBkYXRlU2hvd01pbmlWaWV3LmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVOU3RyZWFtOiB0aGlzLnVwZGF0ZU5TdHJlYW0uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZURlZmVyX3JlY2VpdmU6IHRoaXMudXBkYXRlRGVmZXJfcmVjZWl2ZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQWxsQXVkaW9TdHJlYW1zOiB0aGlzLnVwZGF0ZUFsbEF1ZGlvU3RyZWFtcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVtb3RlU2NyZWVuU3RyZWFtOiB0aGlzLnVwZGF0ZVJlbW90ZVNjcmVlblN0cmVhbS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlU2NyZWVuUHJvZHVjZXI6IHRoaXMudXBkYXRlU2NyZWVuUHJvZHVjZXIuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUdvdEFsbFZpZHM6IHRoaXMudXBkYXRlR290QWxsVmlkcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUGFnaW5hdGlvbkhlaWdodFdpZHRoOiB0aGlzLnVwZGF0ZVBhZ2luYXRpb25IZWlnaHRXaWR0aC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUGFnaW5hdGlvbkRpcmVjdGlvbjogdGhpcy51cGRhdGVQYWdpbmF0aW9uRGlyZWN0aW9uLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVHcmlkU2l6ZXM6IHRoaXMudXBkYXRlR3JpZFNpemVzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVTY3JlZW5Gb3JjZUZ1bGxEaXNwbGF5OiB0aGlzLnVwZGF0ZVNjcmVlbkZvcmNlRnVsbERpc3BsYXkuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZU1haW5HcmlkU3RyZWFtOiB0aGlzLnVwZGF0ZU1haW5HcmlkU3RyZWFtLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVPdGhlckdyaWRTdHJlYW1zOiB0aGlzLnVwZGF0ZU90aGVyR3JpZFN0cmVhbXMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUF1ZGlvT25seVN0cmVhbXM6IHRoaXMudXBkYXRlQXVkaW9Pbmx5U3RyZWFtcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlVmlkZW9JbnB1dHM6IHRoaXMudXBkYXRlVmlkZW9JbnB1dHMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUF1ZGlvSW5wdXRzOiB0aGlzLnVwZGF0ZUF1ZGlvSW5wdXRzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVNZWV0aW5nUHJvZ3Jlc3NUaW1lOiB0aGlzLnVwZGF0ZU1lZXRpbmdQcm9ncmVzc1RpbWUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZU1lZXRpbmdFbGFwc2VkVGltZTogdGhpcy51cGRhdGVNZWV0aW5nRWxhcHNlZFRpbWUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlZl9wYXJ0aWNpcGFudHM6IHRoaXMudXBkYXRlUmVmX3BhcnRpY2lwYW50cy5iaW5kKHRoaXMpLFxuXG4gICAgICB1cGRhdGVNZXNzYWdlczogdGhpcy51cGRhdGVNZXNzYWdlcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlU3RhcnREaXJlY3RNZXNzYWdlOiB0aGlzLnVwZGF0ZVN0YXJ0RGlyZWN0TWVzc2FnZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlRGlyZWN0TWVzc2FnZURldGFpbHM6IHRoaXMudXBkYXRlRGlyZWN0TWVzc2FnZURldGFpbHMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVNob3dNZXNzYWdlc0JhZGdlOiB0aGlzLnVwZGF0ZVNob3dNZXNzYWdlc0JhZGdlLmJpbmQodGhpcyksXG5cbiAgICAgIC8vIEV2ZW50IHNldHRpbmdzXG4gICAgICB1cGRhdGVBdWRpb1NldHRpbmc6IHRoaXMudXBkYXRlQXVkaW9TZXR0aW5nLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVWaWRlb1NldHRpbmc6IHRoaXMudXBkYXRlVmlkZW9TZXR0aW5nLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVTY3JlZW5zaGFyZVNldHRpbmc6IHRoaXMudXBkYXRlU2NyZWVuc2hhcmVTZXR0aW5nLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVDaGF0U2V0dGluZzogdGhpcy51cGRhdGVDaGF0U2V0dGluZy5iaW5kKHRoaXMpLFxuXG4gICAgICAvLyBEaXNwbGF5IHNldHRpbmdzXG4gICAgICB1cGRhdGVBdXRvV2F2ZTogdGhpcy51cGRhdGVBdXRvV2F2ZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlRm9yY2VGdWxsRGlzcGxheTogdGhpcy51cGRhdGVGb3JjZUZ1bGxEaXNwbGF5LmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVQcmV2Rm9yY2VGdWxsRGlzcGxheTogdGhpcy51cGRhdGVQcmV2Rm9yY2VGdWxsRGlzcGxheS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUHJldk1lZXRpbmdEaXNwbGF5VHlwZTogdGhpcy51cGRhdGVQcmV2TWVldGluZ0Rpc3BsYXlUeXBlLmJpbmQodGhpcyksXG5cbiAgICAgIC8vIFdhaXRpbmcgcm9vbVxuICAgICAgdXBkYXRlV2FpdGluZ1Jvb21GaWx0ZXI6IHRoaXMudXBkYXRlV2FpdGluZ1Jvb21GaWx0ZXIuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVdhaXRpbmdSb29tTGlzdDogdGhpcy51cGRhdGVXYWl0aW5nUm9vbUxpc3QuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVdhaXRpbmdSb29tQ291bnRlcjogdGhpcy51cGRhdGVXYWl0aW5nUm9vbUNvdW50ZXIuYmluZCh0aGlzKSxcblxuICAgICAgLy8gUmVxdWVzdHNcbiAgICAgIHVwZGF0ZVJlcXVlc3RGaWx0ZXI6IHRoaXMudXBkYXRlUmVxdWVzdEZpbHRlci5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVxdWVzdExpc3Q6IHRoaXMudXBkYXRlUmVxdWVzdExpc3QuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlcXVlc3RDb3VudGVyOiB0aGlzLnVwZGF0ZVJlcXVlc3RDb3VudGVyLmJpbmQodGhpcyksXG5cbiAgICAgIC8vIFRvdGFsIHJlcXVlc3RzIGFuZCB3YWl0aW5nIHJvb21cbiAgICAgIHVwZGF0ZVRvdGFsUmVxV2FpdDogdGhpcy51cGRhdGVUb3RhbFJlcVdhaXQuYmluZCh0aGlzKSxcblxuICAgICAgLy8gTWVudSBtb2RhbHNcbiAgICAgIHVwZGF0ZUlzTWVudU1vZGFsVmlzaWJsZTogdGhpcy51cGRhdGVJc01lbnVNb2RhbFZpc2libGUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUlzUmVjb3JkaW5nTW9kYWxWaXNpYmxlOiB0aGlzLnVwZGF0ZUlzUmVjb3JkaW5nTW9kYWxWaXNpYmxlLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVJc1NldHRpbmdzTW9kYWxWaXNpYmxlOiB0aGlzLnVwZGF0ZUlzU2V0dGluZ3NNb2RhbFZpc2libGUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUlzUmVxdWVzdHNNb2RhbFZpc2libGU6IHRoaXMudXBkYXRlSXNSZXF1ZXN0c01vZGFsVmlzaWJsZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlSXNXYWl0aW5nTW9kYWxWaXNpYmxlOiB0aGlzLnVwZGF0ZUlzV2FpdGluZ01vZGFsVmlzaWJsZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlSXNDb0hvc3RNb2RhbFZpc2libGU6IHRoaXMudXBkYXRlSXNDb0hvc3RNb2RhbFZpc2libGUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUlzTWVkaWFTZXR0aW5nc01vZGFsVmlzaWJsZTogdGhpcy51cGRhdGVJc01lZGlhU2V0dGluZ3NNb2RhbFZpc2libGUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUlzRGlzcGxheVNldHRpbmdzTW9kYWxWaXNpYmxlOiB0aGlzLnVwZGF0ZUlzRGlzcGxheVNldHRpbmdzTW9kYWxWaXNpYmxlLmJpbmQodGhpcyksXG5cbiAgICAgIC8vIE90aGVyIG1vZGFsc1xuICAgICAgdXBkYXRlSXNQYXJ0aWNpcGFudHNNb2RhbFZpc2libGU6IHRoaXMudXBkYXRlSXNQYXJ0aWNpcGFudHNNb2RhbFZpc2libGUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUlzTWVzc2FnZXNNb2RhbFZpc2libGU6IHRoaXMudXBkYXRlSXNNZXNzYWdlc01vZGFsVmlzaWJsZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlSXNDb25maXJtRXhpdE1vZGFsVmlzaWJsZTogdGhpcy51cGRhdGVJc0NvbmZpcm1FeGl0TW9kYWxWaXNpYmxlLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVJc0NvbmZpcm1IZXJlTW9kYWxWaXNpYmxlOiB0aGlzLnVwZGF0ZUlzQ29uZmlybUhlcmVNb2RhbFZpc2libGUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUlzTG9hZGluZ01vZGFsVmlzaWJsZTogdGhpcy51cGRhdGVJc0xvYWRpbmdNb2RhbFZpc2libGUuYmluZCh0aGlzKSxcblxuICAgICAgLy8gUmVjb3JkaW5nIE9wdGlvbnNcbiAgICAgIHVwZGF0ZVJlY29yZGluZ01lZGlhT3B0aW9uczogdGhpcy51cGRhdGVSZWNvcmRpbmdNZWRpYU9wdGlvbnMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZGluZ0F1ZGlvT3B0aW9uczogdGhpcy51cGRhdGVSZWNvcmRpbmdBdWRpb09wdGlvbnMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZGluZ1ZpZGVvT3B0aW9uczogdGhpcy51cGRhdGVSZWNvcmRpbmdWaWRlb09wdGlvbnMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZGluZ1ZpZGVvVHlwZTogdGhpcy51cGRhdGVSZWNvcmRpbmdWaWRlb1R5cGUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZGluZ1ZpZGVvT3B0aW1pemVkOiB0aGlzLnVwZGF0ZVJlY29yZGluZ1ZpZGVvT3B0aW1pemVkLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVSZWNvcmRpbmdEaXNwbGF5VHlwZTogdGhpcy51cGRhdGVSZWNvcmRpbmdEaXNwbGF5VHlwZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVjb3JkaW5nQWRkSExTOiB0aGlzLnVwZGF0ZVJlY29yZGluZ0FkZEhMUy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVjb3JkaW5nQWRkVGV4dDogdGhpcy51cGRhdGVSZWNvcmRpbmdBZGRUZXh0LmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVSZWNvcmRpbmdDdXN0b21UZXh0OiB0aGlzLnVwZGF0ZVJlY29yZGluZ0N1c3RvbVRleHQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZGluZ0N1c3RvbVRleHRQb3NpdGlvbjogdGhpcy51cGRhdGVSZWNvcmRpbmdDdXN0b21UZXh0UG9zaXRpb24uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZGluZ0N1c3RvbVRleHRDb2xvcjogdGhpcy51cGRhdGVSZWNvcmRpbmdDdXN0b21UZXh0Q29sb3IuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZGluZ05hbWVUYWdzOiB0aGlzLnVwZGF0ZVJlY29yZGluZ05hbWVUYWdzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVSZWNvcmRpbmdCYWNrZ3JvdW5kQ29sb3I6IHRoaXMudXBkYXRlUmVjb3JkaW5nQmFja2dyb3VuZENvbG9yLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVSZWNvcmRpbmdOYW1lVGFnc0NvbG9yOiB0aGlzLnVwZGF0ZVJlY29yZGluZ05hbWVUYWdzQ29sb3IuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVJlY29yZGluZ09yaWVudGF0aW9uVmlkZW86IHRoaXMudXBkYXRlUmVjb3JkaW5nT3JpZW50YXRpb25WaWRlby5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQ2xlYXJlZFRvUmVzdW1lOiB0aGlzLnVwZGF0ZUNsZWFyZWRUb1Jlc3VtZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQ2xlYXJlZFRvUmVjb3JkOiB0aGlzLnVwZGF0ZUNsZWFyZWRUb1JlY29yZC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUmVjb3JkU3RhdGU6IHRoaXMudXBkYXRlUmVjb3JkU3RhdGUuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVNob3dSZWNvcmRCdXR0b25zOiB0aGlzLnVwZGF0ZVNob3dSZWNvcmRCdXR0b25zLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVSZWNvcmRpbmdQcm9ncmVzc1RpbWU6IHRoaXMudXBkYXRlUmVjb3JkaW5nUHJvZ3Jlc3NUaW1lLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVBdWRpb1N3aXRjaGluZzogdGhpcy51cGRhdGVBdWRpb1N3aXRjaGluZy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlVmlkZW9Td2l0Y2hpbmc6IHRoaXMudXBkYXRlVmlkZW9Td2l0Y2hpbmcuYmluZCh0aGlzKSxcblxuICAgICAgLy8gTWVkaWEgc3RhdGVzXG4gICAgICB1cGRhdGVWaWRlb0FscmVhZHlPbjogdGhpcy51cGRhdGVWaWRlb0FscmVhZHlPbi5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQXVkaW9BbHJlYWR5T246IHRoaXMudXBkYXRlQXVkaW9BbHJlYWR5T24uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUNvbXBvbmVudFNpemVzOiB0aGlzLnVwZGF0ZUNvbXBvbmVudFNpemVzLmJpbmQodGhpcyksXG5cbiAgICAgIC8vIFBlcm1pc3Npb25zXG4gICAgICB1cGRhdGVIYXNDYW1lcmFQZXJtaXNzaW9uOiB0aGlzLnVwZGF0ZUhhc0NhbWVyYVBlcm1pc3Npb24uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUhhc0F1ZGlvUGVybWlzc2lvbjogdGhpcy51cGRhdGVIYXNBdWRpb1Blcm1pc3Npb24uYmluZCh0aGlzKSxcblxuICAgICAgLy8gVHJhbnNwb3J0c1xuICAgICAgdXBkYXRlVHJhbnNwb3J0Q3JlYXRlZDogdGhpcy51cGRhdGVUcmFuc3BvcnRDcmVhdGVkLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVUcmFuc3BvcnRDcmVhdGVkVmlkZW86IHRoaXMudXBkYXRlVHJhbnNwb3J0Q3JlYXRlZFZpZGVvLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVUcmFuc3BvcnRDcmVhdGVkQXVkaW86IHRoaXMudXBkYXRlVHJhbnNwb3J0Q3JlYXRlZEF1ZGlvLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVUcmFuc3BvcnRDcmVhdGVkU2NyZWVuOiB0aGlzLnVwZGF0ZVRyYW5zcG9ydENyZWF0ZWRTY3JlZW4uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVByb2R1Y2VyVHJhbnNwb3J0OiB0aGlzLnVwZGF0ZVByb2R1Y2VyVHJhbnNwb3J0LmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVWaWRlb1Byb2R1Y2VyOiB0aGlzLnVwZGF0ZVZpZGVvUHJvZHVjZXIuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVBhcmFtczogdGhpcy51cGRhdGVQYXJhbXMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVZpZGVvUGFyYW1zOiB0aGlzLnVwZGF0ZVZpZGVvUGFyYW1zLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVBdWRpb1BhcmFtczogdGhpcy51cGRhdGVBdWRpb1BhcmFtcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQXVkaW9Qcm9kdWNlcjogdGhpcy51cGRhdGVBdWRpb1Byb2R1Y2VyLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVDb25zdW1lclRyYW5zcG9ydHM6IHRoaXMudXBkYXRlQ29uc3VtZXJUcmFuc3BvcnRzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVDb25zdW1pbmdUcmFuc3BvcnRzOiB0aGlzLnVwZGF0ZUNvbnN1bWluZ1RyYW5zcG9ydHMuYmluZCh0aGlzKSxcblxuICAgICAgLy8gUG9sbHNcbiAgICAgIHVwZGF0ZVBvbGxzOiB0aGlzLnVwZGF0ZVBvbGxzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVQb2xsOiB0aGlzLnVwZGF0ZVBvbGwuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUlzUG9sbE1vZGFsVmlzaWJsZTogdGhpcy51cGRhdGVJc1BvbGxNb2RhbFZpc2libGUuYmluZCh0aGlzKSxcblxuICAgICAgLy8gQmFja2dyb3VuZFxuICAgICAgdXBkYXRlQ3VzdG9tSW1hZ2U6IHRoaXMudXBkYXRlQ3VzdG9tSW1hZ2UuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVNlbGVjdGVkSW1hZ2U6IHRoaXMudXBkYXRlU2VsZWN0ZWRJbWFnZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlU2VnbWVudFZpZGVvOiB0aGlzLnVwZGF0ZVNlZ21lbnRWaWRlby5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlU2VsZmllU2VnbWVudGF0aW9uOiB0aGlzLnVwZGF0ZVNlbGZpZVNlZ21lbnRhdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUGF1c2VTZWdtZW50YXRpb246IHRoaXMudXBkYXRlUGF1c2VTZWdtZW50YXRpb24uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVByb2Nlc3NlZFN0cmVhbTogdGhpcy51cGRhdGVQcm9jZXNzZWRTdHJlYW0uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUtlZXBCYWNrZ3JvdW5kOiB0aGlzLnVwZGF0ZUtlZXBCYWNrZ3JvdW5kLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVCYWNrZ3JvdW5kSGFzQ2hhbmdlZDogdGhpcy51cGRhdGVCYWNrZ3JvdW5kSGFzQ2hhbmdlZC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlVmlydHVhbFN0cmVhbTogdGhpcy51cGRhdGVWaXJ0dWFsU3RyZWFtLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVNYWluQ2FudmFzOiB0aGlzLnVwZGF0ZU1haW5DYW52YXMuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVByZXZLZWVwQmFja2dyb3VuZDogdGhpcy51cGRhdGVQcmV2S2VlcEJhY2tncm91bmQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUFwcGxpZWRCYWNrZ3JvdW5kOiB0aGlzLnVwZGF0ZUFwcGxpZWRCYWNrZ3JvdW5kLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVJc0JhY2tncm91bmRNb2RhbFZpc2libGU6IHRoaXMudXBkYXRlSXNCYWNrZ3JvdW5kTW9kYWxWaXNpYmxlLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVBdXRvQ2xpY2tCYWNrZ3JvdW5kOiB0aGlzLnVwZGF0ZUF1dG9DbGlja0JhY2tncm91bmQuYmluZCh0aGlzKSxcblxuICAgICAgLy8gQnJlYWtvdXQgcm9vbXNcbiAgICAgIHVwZGF0ZUJyZWFrb3V0Um9vbXM6IHRoaXMudXBkYXRlQnJlYWtvdXRSb29tcy5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQ3VycmVudFJvb21JbmRleDogdGhpcy51cGRhdGVDdXJyZW50Um9vbUluZGV4LmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVDYW5TdGFydEJyZWFrb3V0OiB0aGlzLnVwZGF0ZUNhblN0YXJ0QnJlYWtvdXQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUJyZWFrT3V0Um9vbVN0YXJ0ZWQ6IHRoaXMudXBkYXRlQnJlYWtPdXRSb29tU3RhcnRlZC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlQnJlYWtPdXRSb29tRW5kZWQ6IHRoaXMudXBkYXRlQnJlYWtPdXRSb29tRW5kZWQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUhvc3ROZXdSb29tOiB0aGlzLnVwZGF0ZUhvc3ROZXdSb29tLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVMaW1pdGVkQnJlYWtSb29tOiB0aGlzLnVwZGF0ZUxpbWl0ZWRCcmVha1Jvb20uYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZU1haW5Sb29tc0xlbmd0aDogdGhpcy51cGRhdGVNYWluUm9vbXNMZW5ndGguYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZU1lbWJlclJvb206IHRoaXMudXBkYXRlTWVtYmVyUm9vbS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlSXNCcmVha291dFJvb21zTW9kYWxWaXNpYmxlOiB0aGlzLnVwZGF0ZUlzQnJlYWtvdXRSb29tc01vZGFsVmlzaWJsZS5iaW5kKHRoaXMpLFxuXG4gICAgICAvLyBXaGl0ZWJvYXJkXG4gICAgICB1cGRhdGVXaGl0ZWJvYXJkVXNlcnM6IHRoaXMudXBkYXRlV2hpdGVib2FyZFVzZXJzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVDdXJyZW50V2hpdGVib2FyZEluZGV4OiB0aGlzLnVwZGF0ZUN1cnJlbnRXaGl0ZWJvYXJkSW5kZXguYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZUNhblN0YXJ0V2hpdGVib2FyZDogdGhpcy51cGRhdGVDYW5TdGFydFdoaXRlYm9hcmQuYmluZCh0aGlzKSxcbiAgICAgIHVwZGF0ZVdoaXRlYm9hcmRTdGFydGVkOiB0aGlzLnVwZGF0ZVdoaXRlYm9hcmRTdGFydGVkLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVXaGl0ZWJvYXJkRW5kZWQ6IHRoaXMudXBkYXRlV2hpdGVib2FyZEVuZGVkLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVXaGl0ZWJvYXJkTGltaXQ6IHRoaXMudXBkYXRlV2hpdGVib2FyZExpbWl0LmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVJc1doaXRlYm9hcmRNb2RhbFZpc2libGU6IHRoaXMudXBkYXRlSXNXaGl0ZWJvYXJkTW9kYWxWaXNpYmxlLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVJc0NvbmZpZ3VyZVdoaXRlYm9hcmRNb2RhbFZpc2libGU6XG4gICAgICAgIHRoaXMudXBkYXRlSXNDb25maWd1cmVXaGl0ZWJvYXJkTW9kYWxWaXNpYmxlLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVTaGFwZXM6IHRoaXMudXBkYXRlU2hhcGVzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVVc2VJbWFnZUJhY2tncm91bmQ6IHRoaXMudXBkYXRlVXNlSW1hZ2VCYWNrZ3JvdW5kLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVSZWRvU3RhY2s6IHRoaXMudXBkYXRlUmVkb1N0YWNrLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVVbmRvU3RhY2s6IHRoaXMudXBkYXRlVW5kb1N0YWNrLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVDYW52YXNTdHJlYW06IHRoaXMudXBkYXRlQ2FudmFzU3RyZWFtLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVDYW52YXNXaGl0ZWJvYXJkOiB0aGlzLnVwZGF0ZUNhbnZhc1doaXRlYm9hcmQuYmluZCh0aGlzKSxcblxuICAgICAgLy8gU2NyZWVuYm9hcmRcbiAgICAgIHVwZGF0ZUNhbnZhc1NjcmVlbmJvYXJkOiB0aGlzLnVwZGF0ZUNhbnZhc1NjcmVlbmJvYXJkLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVQcm9jZXNzZWRTY3JlZW5TdHJlYW06IHRoaXMudXBkYXRlUHJvY2Vzc2VkU2NyZWVuU3RyZWFtLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVBbm5vdGF0ZVNjcmVlblN0cmVhbTogdGhpcy51cGRhdGVBbm5vdGF0ZVNjcmVlblN0cmVhbS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlTWFpblNjcmVlbkNhbnZhczogdGhpcy51cGRhdGVNYWluU2NyZWVuQ2FudmFzLmJpbmQodGhpcyksXG4gICAgICB1cGRhdGVJc1NjcmVlbmJvYXJkTW9kYWxWaXNpYmxlOiB0aGlzLnVwZGF0ZUlzU2NyZWVuYm9hcmRNb2RhbFZpc2libGUuYmluZCh0aGlzKSxcblxuICAgICAgLy8gT3RoZXIgZnVuY3Rpb25zXG4gICAgICBjaGVja09yaWVudGF0aW9uOiB0aGlzLmNoZWNrT3JpZW50YXRpb24uYmluZCh0aGlzKSxcblxuICAgICAgdXBkYXRlRGV2aWNlOiB0aGlzLnVwZGF0ZURldmljZS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlU29ja2V0OiB0aGlzLnVwZGF0ZVNvY2tldC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlVmFsaWRhdGVkOiB0aGlzLnVwZGF0ZVZhbGlkYXRlZC5iaW5kKHRoaXMpLFxuXG4gICAgICBzaG93QWxlcnQ6IHRoaXMuc2hvd0FsZXJ0LmJpbmQodGhpcyksXG4gICAgICBnZXRVcGRhdGVkQWxsUGFyYW1zOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGhpcy5nZXRBbGxQYXJhbXMoKSxcbiAgICAgICAgICAuLi50aGlzLm1lZGlhU0ZVRnVuY3Rpb25zKCksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBtZWRpYVNGVVBhcmFtZXRlcnMgPSB7XG4gICAgLi4udGhpcy5nZXRBbGxQYXJhbXMoKSxcbiAgICAuLi50aGlzLm1lZGlhU0ZVRnVuY3Rpb25zKCksXG4gIH07XG5cbiAgZ2V0VXBkYXRlZEFsbFBhcmFtcyA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRBbGxQYXJhbXMoKSxcbiAgICAgIC4uLnRoaXMubWVkaWFTRlVGdW5jdGlvbnMoKSxcbiAgICB9O1xuICB9O1xuXG4gIFByZWpvaW5QYWdlQ29tcG9uZW50OiBhbnkgPSB7XG4gICAgY29tcG9uZW50OiB0aGlzLlByZWpvaW5QYWdlLFxuICAgIGluamVjdG9yOiBudWxsLFxuICB9O1xuXG4gIHVwZGF0ZVByZWpvaW5QYWdlQ29tcG9uZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IFByZWpvaW5Db21wID0ge1xuICAgICAgY29tcG9uZW50OiB0aGlzLlByZWpvaW5QYWdlLFxuICAgICAgaW5qZWN0b3I6IHRoaXMuY3JlYXRlSW5qZWN0b3Ioe1xuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgc2hvd0FsZXJ0OlxuICAgICAgICAgICAgdGhpcy5zaG93QWxlcnQgfHxcbiAgICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzaG93QWxlcnQgbm90IGRlZmluZWQnKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIHVwZGF0ZUlzTG9hZGluZ01vZGFsVmlzaWJsZTogdGhpcy51cGRhdGVJc0xvYWRpbmdNb2RhbFZpc2libGUsXG4gICAgICAgICAgY29ubmVjdFNvY2tldDogdGhpcy5zb2NrZXRNYW5hZ2VyLmNvbm5lY3RTb2NrZXQsXG4gICAgICAgICAgdXBkYXRlU29ja2V0OiB0aGlzLnVwZGF0ZVNvY2tldCxcbiAgICAgICAgICB1cGRhdGVWYWxpZGF0ZWQ6IHRoaXMudXBkYXRlVmFsaWRhdGVkLFxuICAgICAgICAgIHVwZGF0ZUFwaVVzZXJOYW1lOiB0aGlzLnVwZGF0ZUFwaVVzZXJOYW1lLFxuICAgICAgICAgIHVwZGF0ZUFwaVRva2VuOiB0aGlzLnVwZGF0ZUFwaVRva2VuLFxuICAgICAgICAgIHVwZGF0ZUxpbms6IHRoaXMudXBkYXRlTGluayxcbiAgICAgICAgICB1cGRhdGVSb29tTmFtZTogdGhpcy51cGRhdGVSb29tTmFtZSxcbiAgICAgICAgICB1cGRhdGVNZW1iZXI6IHRoaXMudXBkYXRlTWVtYmVyLFxuICAgICAgICB9LFxuICAgICAgICBjcmVkZW50aWFsczogdGhpcy5jcmVkZW50aWFscyxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICB0aGlzLlByZWpvaW5QYWdlQ29tcG9uZW50ID0geyAuLi5QcmVqb2luQ29tcCB9O1xuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLlByZWpvaW5QYWdlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVByZWpvaW5QYWdlQ29tcG9uZW50KCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgaWYgKHRoaXMudmFsaWRhdGVkKSB7XG4gICAgICB0aGlzLmNvbm5lY3RBbmRBZGRTb2NrZXRNZXRob2RzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5tYWluSGVpZ2h0V2lkdGhTdWJzY3JpcHRpb24gPSB0aGlzLm1haW5IZWlnaHRXaWR0aC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVNYWluVmlkZW9TaXplKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRlZFN1YnNjcmlwdGlvbiA9IHRoaXMudmFsaWRhdGVkLnN1YnNjcmliZSgodmFsaWRhdGVkKSA9PiB7XG4gICAgICBpZiAodmFsaWRhdGVkKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlVmFsaWRhdGVkKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5pc2xldmVsU3Vic2NyaXB0aW9uID0gdGhpcy5pc2xldmVsLnN1YnNjcmliZSgoaXNsZXZlbCkgPT4ge1xuICAgICAgaWYgKGlzbGV2ZWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDb250cm9sQ2hhdEJ1dHRvbnMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmNvSG9zdFN1YnNjcmlwdGlvbiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY29Ib3N0LCB0aGlzLmNvSG9zdFJlc3BvbnNpYmlsaXR5XSkuc3Vic2NyaWJlKFxuICAgICAgKFtjb0hvc3QsIGNvSG9zdFJlc3BvbnNpYmlsaXR5XSkgPT4ge1xuICAgICAgICBpZiAoY29Ib3N0IHx8IGNvSG9zdFJlc3BvbnNpYmlsaXR5KSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVDb250cm9sQ2hhdEJ1dHRvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5tZWRpYVNGVVBhcmFtZXRlcnMgPSB7XG4gICAgICAuLi50aGlzLmdldEFsbFBhcmFtcygpLFxuICAgICAgLi4udGhpcy5tZWRpYVNGVUZ1bmN0aW9ucygpLFxuICAgIH07XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5oYW5kbGVSZXNpemUpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHRoaXMuaGFuZGxlUmVzaXplKTtcbiAgICBpZiAodGhpcy5tYWluSGVpZ2h0V2lkdGhTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMubWFpbkhlaWdodFdpZHRoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbGlkYXRlZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy52YWxpZGF0ZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNsZXZlbFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5pc2xldmVsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvSG9zdFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jb0hvc3RTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuU2NyZWVuYm9hcmRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuU2NyZWVuYm9hcmRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVjb3JkaW5nU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlY29yZGluZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZU1haW5WaWRlb1NpemUgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmxvY2tfc2NyZWVuLnZhbHVlICYmICF0aGlzLnNoYXJlZC52YWx1ZSkge1xuICAgICAgdGhpcy5wcmVwb3B1bGF0ZVVzZXJNZWRpYS5wcmVwb3B1bGF0ZVVzZXJNZWRpYSh7XG4gICAgICAgIG5hbWU6IHRoaXMuaG9zdExhYmVsLnZhbHVlLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7IC4uLnRoaXMuZ2V0QWxsUGFyYW1zKCksIC4uLnRoaXMubWVkaWFTRlVGdW5jdGlvbnMoKSB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5maXJzdF9yb3VuZC52YWx1ZSkge1xuICAgICAgICB0aGlzLnByZXBvcHVsYXRlVXNlck1lZGlhLnByZXBvcHVsYXRlVXNlck1lZGlhKHtcbiAgICAgICAgICBuYW1lOiB0aGlzLmhvc3RMYWJlbC52YWx1ZSxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7IC4uLnRoaXMuZ2V0QWxsUGFyYW1zKCksIC4uLnRoaXMubWVkaWFTRlVGdW5jdGlvbnMoKSB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgYXN5bmMgY29ubmVjdEFuZEFkZFNvY2tldE1ldGhvZHMoKSB7XG4gICAgdGhpcy5tZWRpYVNGVVBhcmFtZXRlcnMgPSB7XG4gICAgICAuLi50aGlzLmdldEFsbFBhcmFtcygpLFxuICAgICAgLi4udGhpcy5tZWRpYVNGVUZ1bmN0aW9ucygpLFxuICAgIH07XG4gICAgY29uc3Qgc29ja2V0XyA9IGF3YWl0IHRoaXMuY29ubmVjdF9Tb2NrZXQodGhpcy5hcGlVc2VyTmFtZS52YWx1ZSwgJycsIHRoaXMuYXBpVG9rZW4udmFsdWUpO1xuICAgIGlmIChzb2NrZXRfKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNvY2tldChzb2NrZXRfKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVWYWxpZGF0ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVBbGxWaWRlb1N0cmVhbXMoW1xuICAgICAgeyBwcm9kdWNlcklkOiAneW91eW91Jywgc3RyZWFtOiB1bmRlZmluZWQsIGlkOiAneW91eW91JywgbmFtZTogJ3lvdXlvdScgfSxcbiAgICBdKTtcblxuICAgIHRoaXMudXBkYXRlU3RyZWFtTmFtZXMoW3sgaWQ6ICd5b3V5b3UnLCBuYW1lOiAneW91eW91JywgcHJvZHVjZXJJZDogJycgfV0pO1xuXG4gICAgaWYgKHRoaXMudmFsaWRhdGVkLnZhbHVlKSB7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghdGhpcy5sb2NhbFVJTW9kZS52YWx1ZSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdEFuZEFkZFNvY2tldE1ldGhvZHMoKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUlzTG9hZGluZ01vZGFsVmlzaWJsZSh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUlzTG9hZGluZ01vZGFsVmlzaWJsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBjb25uZWN0QW5kYUFkZFNvY2tldE1ldGhvZHMnLCBlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhcnRNZWV0aW5nUHJvZ3Jlc3NUaW1lci5zdGFydE1lZXRpbmdQcm9ncmVzc1RpbWVyKHtcbiAgICAgICAgc3RhcnRUaW1lOiBEYXRlLm5vdygpIC8gMTAwMCxcbiAgICAgICAgcGFyYW1ldGVyczogeyAuLi50aGlzLmdldEFsbFBhcmFtcygpLCAuLi50aGlzLm1lZGlhU0ZVRnVuY3Rpb25zKCkgfSxcbiAgICAgIH0pO1xuXG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpvcmllbnRhdGlvbmNoYW5nZScpXG4gIGFzeW5jIGhhbmRsZVJlc2l6ZSgpIHtcbiAgICBsZXQgZnJhY3Rpb24gPSAwO1xuXG4gICAgaWYgKFxuICAgICAgd2luZG93LmlubmVySGVpZ2h0IDwgd2luZG93LmlubmVyV2lkdGggJiZcbiAgICAgICh0aGlzLmV2ZW50VHlwZS52YWx1ZSA9PSAnd2ViaW5hcicgfHwgdGhpcy5ldmVudFR5cGUudmFsdWUgPT0gJ2NvbmZlcmVuY2UnKVxuICAgICkge1xuICAgICAgY29uc3QgY3VycmVudEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgIGZyYWN0aW9uID0gTnVtYmVyKCg0MCAvIGN1cnJlbnRIZWlnaHQpLnRvRml4ZWQoMykpO1xuICAgICAgaWYgKGZyYWN0aW9uICE9IHRoaXMuY29udHJvbEhlaWdodC52YWx1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRyb2xIZWlnaHQoTnVtYmVyKGZyYWN0aW9uKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNldCBkZWZhdWx0IGNvbnRyb2wgYnV0dG9uIGhlaWdodCBmb3IgcG9ydHJhaXQgbW9kZSBvciBvdGhlciBldmVudCB0eXBlc1xuICAgICAgY29uc3QgY3VycmVudEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgIGZyYWN0aW9uID0gTnVtYmVyKCg0MCAvIGN1cnJlbnRIZWlnaHQpLnRvRml4ZWQoMykpO1xuICAgICAgZnJhY3Rpb24gPSBOdW1iZXIoZnJhY3Rpb24pO1xuICAgICAgaWYgKGZyYWN0aW9uICE9IHRoaXMuY29udHJvbEhlaWdodC52YWx1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRyb2xIZWlnaHQoTnVtYmVyKGZyYWN0aW9uKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGltZW5zaW9ucyA9IHRoaXMuY29tcHV0ZURpbWVuc2lvbnNNZXRob2Qoe1xuICAgICAgY29udGFpbmVyV2lkdGhGcmFjdGlvbjogMSxcbiAgICAgIGNvbnRhaW5lckhlaWdodEZyYWN0aW9uOiAxLFxuICAgICAgbWFpblNpemU6IHRoaXMubWFpbkhlaWdodFdpZHRoLnZhbHVlLFxuICAgICAgZG9TdGFjazogdHJ1ZSxcbiAgICAgIGRlZmF1bHRGcmFjdGlvbjpcbiAgICAgICAgdGhpcy5ldmVudFR5cGUudmFsdWUgPT0gJ3dlYmluYXInIHx8IHRoaXMuZXZlbnRUeXBlLnZhbHVlID09ICdjb25mZXJlbmNlJ1xuICAgICAgICAgID8gMSAtIGZyYWN0aW9uXG4gICAgICAgICAgOiAxLFxuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVDb21wb25lbnRTaXplcyhkaW1lbnNpb25zKTtcblxuICAgIGNvbnN0IG9yaWVudGF0aW9uID0gdGhpcy5jaGVja09yaWVudGF0aW9uKCk7XG4gICAgaWYgKG9yaWVudGF0aW9uID09ICdwb3J0cmFpdCcpIHtcbiAgICAgIGlmICghdGhpcy5pc1dpZGVTY3JlZW4udmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hhcmVTY3JlZW5TdGFydGVkLnZhbHVlIHx8IHRoaXMuc2hhcmVkLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTY3JlZW5Gb3JjZUZ1bGxEaXNwbGF5KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlcyB0aGUgbWFpbiBncmlkIHZpZXdcbiAgICBhd2FpdCB0aGlzLnByZXBvcHVsYXRlVXNlck1lZGlhLnByZXBvcHVsYXRlVXNlck1lZGlhKHtcbiAgICAgIG5hbWU6IHRoaXMuaG9zdExhYmVsLnZhbHVlLFxuICAgICAgcGFyYW1ldGVyczogeyAuLi50aGlzLmdldEFsbFBhcmFtcygpLCAuLi50aGlzLm1lZGlhU0ZVRnVuY3Rpb25zKCkgfSxcbiAgICB9KTtcbiAgICAvLyBVcGRhdGVzIHRoZSBtaW5pIGdyaWQgdmlld1xuICAgIGF3YWl0IHRoaXMub25TY3JlZW5DaGFuZ2VzLm9uU2NyZWVuQ2hhbmdlcyh7XG4gICAgICBjaGFuZ2VkOiB0cnVlLFxuICAgICAgcGFyYW1ldGVyczogeyAuLi50aGlzLmdldEFsbFBhcmFtcygpLCAuLi50aGlzLm1lZGlhU0ZVRnVuY3Rpb25zKCkgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRpc2Nvbm5lY3RBbGxTb2NrZXRzKGNvbnN1bWVfc29ja2V0czogQ29uc3VtZVNvY2tldFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBzb2NrZXQgb2YgY29uc3VtZV9zb2NrZXRzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpcCA9IE9iamVjdC5rZXlzKHNvY2tldClbMF07XG4gICAgICAgIGF3YWl0IHNvY2tldFtpcF0uZGlzY29ubmVjdCgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5sb2coYEVycm9yIGRpc2Nvbm5lY3Rpbmcgc29ja2V0IHdpdGggSVA6ICR7T2JqZWN0LmtleXMoc29ja2V0KVswXX1gLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2xvc2VBbmRSZXNldCgpIHtcbiAgICAvL2Nsb3NlIGFuZCBjbGVhbiB1cCBhbGwgc29ja2V0cywgbW9kYWxzLC4uLiBhbmQgcmVzZXQgYWxsIHN0YXRlcyB0byBpbml0aWFsIHZhbHVlc1xuXG4gICAgdGhpcy51cGRhdGVJc01lc3NhZ2VzTW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgICB0aGlzLnVwZGF0ZUlzUGFydGljaXBhbnRzTW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgICB0aGlzLnVwZGF0ZUlzV2FpdGluZ01vZGFsVmlzaWJsZShmYWxzZSk7XG4gICAgdGhpcy51cGRhdGVJc1JlcXVlc3RzTW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgICB0aGlzLnVwZGF0ZUlzQ29Ib3N0TW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgICB0aGlzLnVwZGF0ZUlzU2V0dGluZ3NNb2RhbFZpc2libGUoZmFsc2UpO1xuICAgIHRoaXMudXBkYXRlSXNEaXNwbGF5U2V0dGluZ3NNb2RhbFZpc2libGUoZmFsc2UpO1xuICAgIHRoaXMudXBkYXRlSXNNZWRpYVNldHRpbmdzTW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgICB0aGlzLnVwZGF0ZUlzTWVudU1vZGFsVmlzaWJsZShmYWxzZSk7XG4gICAgdGhpcy51cGRhdGVJc1NoYXJlRXZlbnRNb2RhbFZpc2libGUoZmFsc2UpO1xuICAgIHRoaXMudXBkYXRlSXNDb25maXJtRXhpdE1vZGFsVmlzaWJsZShmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5kaXNjb25uZWN0QWxsU29ja2V0cyh0aGlzLmNvbnN1bWVfc29ja2V0cy52YWx1ZSk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVTdGF0ZXNUb0luaXRpYWxWYWx1ZXMoKTtcbiAgICB0aGlzLnVwZGF0ZU1lZXRpbmdQcm9ncmVzc1RpbWUoJzAwOjAwOjAwJyk7XG4gICAgdGhpcy51cGRhdGVNZWV0aW5nRWxhcHNlZFRpbWUoMCk7XG4gICAgdGhpcy51cGRhdGVSZWNvcmRpbmdQcm9ncmVzc1RpbWUoJzAwOjAwOjAwJyk7XG4gICAgdGhpcy51cGRhdGVSZWNvcmRFbGFwc2VkVGltZSgwKTtcbiAgICB0aGlzLnVwZGF0ZVNob3dSZWNvcmRCdXR0b25zKGZhbHNlKTtcblxuICAgIHRoaXMudXBkYXRlSXNDb25maWd1cmVXaGl0ZWJvYXJkTW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgICB0aGlzLnVwZGF0ZUlzV2hpdGVib2FyZE1vZGFsVmlzaWJsZShmYWxzZSk7XG4gICAgdGhpcy51cGRhdGVJc01lbnVNb2RhbFZpc2libGUoZmFsc2UpO1xuICAgIHRoaXMudXBkYXRlSXNSZWNvcmRpbmdNb2RhbFZpc2libGUoZmFsc2UpO1xuICAgIHRoaXMudXBkYXRlSXNQb2xsTW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgICB0aGlzLnVwZGF0ZUlzQnJlYWtvdXRSb29tc01vZGFsVmlzaWJsZShmYWxzZSk7XG4gICAgdGhpcy51cGRhdGVJc0JhY2tncm91bmRNb2RhbFZpc2libGUoZmFsc2UpO1xuICAgIHRoaXMudXBkYXRlSXNMb2FkaW5nTW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgICB0aGlzLnVwZGF0ZUlzQ29uZmlybUhlcmVNb2RhbFZpc2libGUoZmFsc2UpO1xuXG4gICAgYXdhaXQgc2xlZXAoeyBtczogNTAwIH0pO1xuICAgIHRoaXMudXBkYXRlVmFsaWRhdGVkKGZhbHNlKTtcbiAgICAvL2lmIG9uIHdlYiwgcmVsb2FkIHRoZSBwYWdlXG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICB9XG5cbiAgY29tcHV0ZURpbWVuc2lvbnNNZXRob2QgPSAoe1xuICAgIGNvbnRhaW5lcldpZHRoRnJhY3Rpb24gPSAxLFxuICAgIGNvbnRhaW5lckhlaWdodEZyYWN0aW9uID0gMSxcbiAgICBtYWluU2l6ZSxcbiAgICBkb1N0YWNrID0gdHJ1ZSxcbiAgICBkZWZhdWx0RnJhY3Rpb24sXG4gIH06IHtcbiAgICBjb250YWluZXJXaWR0aEZyYWN0aW9uPzogbnVtYmVyO1xuICAgIGNvbnRhaW5lckhlaWdodEZyYWN0aW9uPzogbnVtYmVyO1xuICAgIG1haW5TaXplOiBudW1iZXI7XG4gICAgZG9TdGFjaz86IGJvb2xlYW47XG4gICAgZGVmYXVsdEZyYWN0aW9uOiBudW1iZXI7XG4gIH0pOiBDb21wb25lbnRTaXplcyA9PiB7XG4gICAgY29uc3QgcGFyZW50V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCAqIGNvbnRhaW5lcldpZHRoRnJhY3Rpb247XG4gICAgY29uc3QgcGFyZW50SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0ICogY29udGFpbmVySGVpZ2h0RnJhY3Rpb24gKiBkZWZhdWx0RnJhY3Rpb247XG4gICAgbGV0IGlzV2lkZVNjcmVlbiA9IHBhcmVudFdpZHRoID49IDc2ODtcblxuICAgIGlmICghaXNXaWRlU2NyZWVuICYmIHBhcmVudFdpZHRoID4gMS41ICogcGFyZW50SGVpZ2h0KSB7XG4gICAgICBpc1dpZGVTY3JlZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlSXNXaWRlU2NyZWVuKGlzV2lkZVNjcmVlbik7XG5cbiAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKHtcbiAgICAgIHBhcmVudFdpZHRoLFxuICAgICAgcGFyZW50SGVpZ2h0LFxuICAgICAgaXNXaWRlU2NyZWVuLFxuICAgICAgbWFpblNpemUsXG4gICAgICBkb1N0YWNrLFxuICAgIH0pO1xuICAgIHJldHVybiBkaW1lbnNpb25zO1xuICB9O1xuXG4gIGNhbGN1bGF0ZURpbWVuc2lvbnMoe1xuICAgIHBhcmVudFdpZHRoLFxuICAgIHBhcmVudEhlaWdodCxcbiAgICBpc1dpZGVTY3JlZW4sXG4gICAgbWFpblNpemUsXG4gICAgZG9TdGFjayxcbiAgfToge1xuICAgIHBhcmVudFdpZHRoOiBudW1iZXI7XG4gICAgcGFyZW50SGVpZ2h0OiBudW1iZXI7XG4gICAgaXNXaWRlU2NyZWVuOiBib29sZWFuO1xuICAgIG1haW5TaXplOiBudW1iZXI7XG4gICAgZG9TdGFjazogYm9vbGVhbjtcbiAgfSk6IENvbXBvbmVudFNpemVzIHtcbiAgICBpZiAoZG9TdGFjaykge1xuICAgICAgcmV0dXJuIGlzV2lkZVNjcmVlblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIG1haW5IZWlnaHQ6IE1hdGguZmxvb3IocGFyZW50SGVpZ2h0KSxcbiAgICAgICAgICAgIG90aGVySGVpZ2h0OiBNYXRoLmZsb29yKHBhcmVudEhlaWdodCksXG4gICAgICAgICAgICBtYWluV2lkdGg6IE1hdGguZmxvb3IoKG1haW5TaXplIC8gMTAwKSAqIHBhcmVudFdpZHRoKSxcbiAgICAgICAgICAgIG90aGVyV2lkdGg6IE1hdGguZmxvb3IoKCgxMDAgLSBtYWluU2l6ZSkgLyAxMDApICogcGFyZW50V2lkdGgpLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBtYWluSGVpZ2h0OiBNYXRoLmZsb29yKChtYWluU2l6ZSAvIDEwMCkgKiBwYXJlbnRIZWlnaHQpLFxuICAgICAgICAgICAgb3RoZXJIZWlnaHQ6IE1hdGguZmxvb3IoKCgxMDAgLSBtYWluU2l6ZSkgLyAxMDApICogcGFyZW50SGVpZ2h0KSxcbiAgICAgICAgICAgIG1haW5XaWR0aDogTWF0aC5mbG9vcihwYXJlbnRXaWR0aCksXG4gICAgICAgICAgICBvdGhlcldpZHRoOiBNYXRoLmZsb29yKHBhcmVudFdpZHRoKSxcbiAgICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYWluSGVpZ2h0OiBNYXRoLmZsb29yKHBhcmVudEhlaWdodCksXG4gICAgICAgIG90aGVySGVpZ2h0OiBNYXRoLmZsb29yKHBhcmVudEhlaWdodCksXG4gICAgICAgIG1haW5XaWR0aDogTWF0aC5mbG9vcihwYXJlbnRXaWR0aCksXG4gICAgICAgIG90aGVyV2lkdGg6IE1hdGguZmxvb3IocGFyZW50V2lkdGgpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVPcmllbnRhdGlvbkNoYW5nZSgpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5oYW5kbGVSZXNpemUuYmluZCh0aGlzKSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29yaWVudGF0aW9uY2hhbmdlJywgdGhpcy5oYW5kbGVSZXNpemUuYmluZCh0aGlzKSk7XG4gIH1cblxuICBzZXR1cFJlc2l6ZUxpc3RlbmVyKCkge1xuICAgIHRoaXMuaGFuZGxlUmVzaXplKCk7XG4gIH1cblxuICBvcmllbnRhdGlvbiA9IHdpbmRvdy5pbm5lckhlaWdodCA+IHdpbmRvdy5pbm5lcldpZHRoID8gJ3BvcnRyYWl0JyA6ICdsYW5kc2NhcGUnO1xuXG4gIGFzeW5jIGpvaW5Sb29tKGRhdGE6IHtcbiAgICBzb2NrZXQ6IFNvY2tldDtcbiAgICByb29tTmFtZTogc3RyaW5nO1xuICAgIGlzbGV2ZWw6IHN0cmluZztcbiAgICBtZW1iZXI6IHN0cmluZztcbiAgICBzZWM6IHN0cmluZztcbiAgICBhcGlVc2VyTmFtZTogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxSZXNwb25zZUpvaW5Sb29tIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgc29ja2V0LCByb29tTmFtZSwgaXNsZXZlbCwgbWVtYmVyLCBzZWMsIGFwaVVzZXJOYW1lIH0gPSBkYXRhO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBSZXNwb25zZUpvaW5Sb29tIHwgbnVsbCA9IGF3YWl0IHRoaXMuam9pblJvb21DbGllbnQuam9pblJvb21DbGllbnQoe1xuICAgICAgICBzb2NrZXQsXG4gICAgICAgIHJvb21OYW1lLFxuICAgICAgICBpc2xldmVsLFxuICAgICAgICBtZW1iZXIsXG4gICAgICAgIHNlYyxcbiAgICAgICAgYXBpVXNlck5hbWUsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZygnRXJyb3Igam9pbmluZyByb29tOicsIGVycm9yKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGpvaW4gdGhlIHJvb20uIFBsZWFzZSBjaGVjayB5b3VyIGNvbm5lY3Rpb24gYW5kIHRyeSBhZ2Fpbi4nKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBqb2luX1Jvb20oe1xuICAgIHNvY2tldCxcbiAgICByb29tTmFtZSxcbiAgICBpc2xldmVsLFxuICAgIG1lbWJlcixcbiAgICBzZWMsXG4gICAgYXBpVXNlck5hbWUsXG4gIH06IHtcbiAgICBzb2NrZXQ6IFNvY2tldDtcbiAgICByb29tTmFtZTogc3RyaW5nO1xuICAgIGlzbGV2ZWw6IHN0cmluZztcbiAgICBtZW1iZXI6IHN0cmluZztcbiAgICBzZWM6IHN0cmluZztcbiAgICBhcGlVc2VyTmFtZTogc3RyaW5nO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGF0YTogUmVzcG9uc2VKb2luUm9vbSB8IG51bGwgPSBhd2FpdCB0aGlzLmpvaW5Sb29tKHtcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgcm9vbU5hbWU6IHJvb21OYW1lLFxuICAgICAgaXNsZXZlbDogaXNsZXZlbCxcbiAgICAgIG1lbWJlcjogbWVtYmVyLFxuICAgICAgc2VjOiBzZWMsXG4gICAgICBhcGlVc2VyTmFtZTogYXBpVXNlck5hbWUsXG4gICAgfSk7XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMucm9vbURhdGEubmV4dChkYXRhKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy51cGRhdGVSb29tUGFyYW1ldGVyc0NsaWVudC51cGRhdGVSb29tUGFyYW1ldGVyc0NsaWVudCh7XG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5nZXRBbGxQYXJhbXMoKSxcbiAgICAgICAgICAgIC4uLnRoaXMubWVkaWFTRlVGdW5jdGlvbnMoKSxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGRhdGEuaXNIb3N0KSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVJc2xldmVsKCcyJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVJc2xldmVsKCcxJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5zZWN1cmVDb2RlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVBZG1pblBhc3Njb2RlKGRhdGEuc2VjdXJlQ29kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5ydHBDYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICBjb25zdCBkZXZpY2VfID0gYXdhaXQgdGhpcy5jcmVhdGVEZXZpY2VDbGllbnQuY3JlYXRlRGV2aWNlQ2xpZW50KHtcbiAgICAgICAgICAgIHJ0cENhcGFiaWxpdGllczogZGF0YS5ydHBDYXBhYmlsaXRpZXMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoZGV2aWNlXykge1xuICAgICAgICAgICAgdGhpcy5kZXZpY2UubmV4dChkZXZpY2VfKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvKiBoYW5kbGUgZXJyb3IgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVWYWxpZGF0ZWQoZmFsc2UpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0FsZXJ0ICYmIGRhdGE/LnJlYXNvbikge1xuICAgICAgICAgIHRoaXMuc2hvd0FsZXJ0KHsgbWVzc2FnZTogZGF0YT8ucmVhc29uLCB0eXBlOiAnZGFuZ2VyJywgZHVyYXRpb246IDMwMDAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvKiBoYW5kbGUgZXJyb3IgKi9cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVTdGF0ZXNUb0luaXRpYWxWYWx1ZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgaW5pdGlhbFZhbHVlcyA9IGluaXRpYWxWYWx1ZXNTdGF0ZSBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICAgIGNvbnN0IHVwZGF0ZUZ1bmN0aW9ucyA9IHRoaXMuZ2V0QWxsUGFyYW1zKCkgYXMgdW5rbm93biBhcyB7XG4gICAgICBba2V5OiBzdHJpbmddOiAodmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5pdGlhbFZhbHVlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbml0aWFsVmFsdWVzLCBrZXkpKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZUZ1bmN0aW9uTmFtZSA9IGB1cGRhdGUke2tleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKX1gO1xuICAgICAgICBjb25zdCB1cGRhdGVGdW5jdGlvbiA9IHVwZGF0ZUZ1bmN0aW9uc1t1cGRhdGVGdW5jdGlvbk5hbWVdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdXBkYXRlRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdXBkYXRlRnVuY3Rpb24oaW5pdGlhbFZhbHVlc1trZXldKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8qIGhhbmRsZSBlcnJvciAqL1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBmYU1pY3JvcGhvbmUgPSBmYU1pY3JvcGhvbmU7XG4gIGZhTWljcm9waG9uZVNsYXNoID0gZmFNaWNyb3Bob25lU2xhc2g7XG4gIGZhVmlkZW8gPSBmYVZpZGVvO1xuICBmYVZpZGVvU2xhc2ggPSBmYVZpZGVvU2xhc2g7XG4gIGZhU3luYyA9IGZhU3luYztcbiAgZmFQaG9uZSA9IGZhUGhvbmU7XG4gIGZhU2hhcmVBbHQgPSBmYVNoYXJlQWx0O1xuICBmYUNvbW1lbnRzID0gZmFDb21tZW50cztcblxuICBvbkNsb3NlTWVudU1vZGFsID0gKCkgPT4ge1xuICAgIHRoaXMudXBkYXRlSXNNZW51TW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgfTtcblxuICBvbkV2ZW50U2V0dGluZ3NDbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLnVwZGF0ZUlzU2V0dGluZ3NNb2RhbFZpc2libGUoZmFsc2UpO1xuICB9O1xuXG4gIG9uQ29Ib3N0Q2xvc2UgPSAoKSA9PiB7XG4gICAgdGhpcy51cGRhdGVJc0NvSG9zdE1vZGFsVmlzaWJsZShmYWxzZSk7XG4gIH07XG5cbiAgb25NZWRpYVNldHRpbmdzQ2xvc2UgPSAoKSA9PiB7XG4gICAgdGhpcy51cGRhdGVJc01lZGlhU2V0dGluZ3NNb2RhbFZpc2libGUoZmFsc2UpO1xuICB9O1xuXG4gIG9uRGlzcGxheVNldHRpbmdzQ2xvc2UgPSAoKSA9PiB7XG4gICAgdGhpcy51cGRhdGVJc0Rpc3BsYXlTZXR0aW5nc01vZGFsVmlzaWJsZShmYWxzZSk7XG4gIH07XG5cbiAgb25Qb2xsQ2xvc2UgPSAoKSA9PiB7XG4gICAgdGhpcy51cGRhdGVJc1BvbGxNb2RhbFZpc2libGUoZmFsc2UpO1xuICB9O1xuXG4gIG9uQnJlYWtvdXRSb29tc0Nsb3NlID0gKCkgPT4ge1xuICAgIHRoaXMudXBkYXRlSXNCcmVha291dFJvb21zTW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgfTtcblxuICBvbkNvbmZpZ3VyZVdoaXRlYm9hcmRDbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLnVwZGF0ZUlzQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsVmlzaWJsZShmYWxzZSk7XG4gIH07XG5cbiAgb25NZXNzYWdlc0Nsb3NlID0gKCkgPT4ge1xuICAgIHRoaXMudXBkYXRlSXNNZXNzYWdlc01vZGFsVmlzaWJsZShmYWxzZSk7XG4gIH07XG5cbiAgb25SZWNvcmRpbmdDbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLnVwZGF0ZUlzUmVjb3JkaW5nTW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgfTtcblxuICBvblBhcnRpY2lwYW50c0Nsb3NlID0gKCkgPT4ge1xuICAgIHRoaXMudXBkYXRlSXNQYXJ0aWNpcGFudHNNb2RhbFZpc2libGUoZmFsc2UpO1xuICB9O1xuXG4gIG9uQmFja2dyb3VuZENsb3NlID0gKCkgPT4ge1xuICAgIHRoaXMudXBkYXRlSXNCYWNrZ3JvdW5kTW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgfTtcblxuICBvbkNvbmZpcm1FeGl0Q2xvc2UgPSAoKSA9PiB7XG4gICAgdGhpcy51cGRhdGVJc0NvbmZpcm1FeGl0TW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgfTtcblxuICBvbkNvbmZpcm1IZXJlQ2xvc2UgPSAoKSA9PiB7XG4gICAgdGhpcy51cGRhdGVJc0NvbmZpcm1IZXJlTW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgfTtcblxuICBvblNjcmVlbmJvYXJkQ2xvc2UgPSAoKSA9PiB7XG4gICAgdGhpcy51cGRhdGVJc1NjcmVlbmJvYXJkTW9kYWxWaXNpYmxlKGZhbHNlKTtcbiAgfTtcblxuICBvblNoYXJlRXZlbnRDbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLnVwZGF0ZUlzU2hhcmVFdmVudE1vZGFsVmlzaWJsZShmYWxzZSk7XG4gIH07XG5cbiAgb25BbGVydEhpZGUgPSAoKSA9PiB7XG4gICAgdGhpcy51cGRhdGVBbGVydFZpc2libGUoZmFsc2UpO1xuICB9O1xuXG4gIG1lc3NhZ2VXaWRnZXQgPSB7XG4gICAgY29tcG9uZW50OiBNZXNzYWdlV2lkZ2V0LFxuICAgIGluamVjdG9yOiB0aGlzLmNyZWF0ZUluamVjdG9yKHtcbiAgICAgIGljb246IHRoaXMuZmFDb21tZW50cyxcbiAgICAgIHNob3dCYWRnZTogdGhpcy5zaG93TWVzc2FnZXNCYWRnZS52YWx1ZSxcbiAgICAgIGJhZGdlVmFsdWU6IDEsXG4gICAgICBpY29uQ29sb3I6ICdibGFjaycsXG4gICAgfSksXG4gIH07XG5cbiAgY29udHJvbENoYXRCdXR0b25zOiBCdXR0b25Ub3VjaFtdID0gW107XG5cbiAgY29udHJvbENoYXRCdXR0b25zQXJyYXk6IEJ1dHRvblRvdWNoW10gPSBbXG4gICAge1xuICAgICAgaWNvbjogdGhpcy5mYVNoYXJlQWx0LFxuICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgYWx0ZXJuYXRlSWNvbjogdGhpcy5mYVNoYXJlQWx0LFxuICAgICAgb25QcmVzczogKCkgPT4gdGhpcy51cGRhdGVJc1NoYXJlRXZlbnRNb2RhbFZpc2libGUoIXRoaXMuaXNTaGFyZUV2ZW50TW9kYWxWaXNpYmxlLnZhbHVlKSxcbiAgICAgIGFjdGl2ZUNvbG9yOiAnYmxhY2snLFxuICAgICAgaW5BY3RpdmVDb2xvcjogJ2JsYWNrJyxcbiAgICAgIHNob3c6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBjdXN0b21Db21wb25lbnQ6IHRoaXMubWVzc2FnZVdpZGdldCxcbiAgICAgIG9uUHJlc3M6ICgpID0+XG4gICAgICAgIHRoaXMubGF1bmNoTWVzc2FnZXMubGF1bmNoTWVzc2FnZXMoe1xuICAgICAgICAgIHVwZGF0ZUlzTWVzc2FnZXNNb2RhbFZpc2libGU6IHRoaXMudXBkYXRlSXNNZXNzYWdlc01vZGFsVmlzaWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICAgIGlzTWVzc2FnZXNNb2RhbFZpc2libGU6IHRoaXMuaXNNZXNzYWdlc01vZGFsVmlzaWJsZS52YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICBzaG93OiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgaWNvbjogdGhpcy5mYVN5bmMsXG4gICAgICBhY3RpdmU6IHRydWUsXG4gICAgICBhbHRlcm5hdGVJY29uOiB0aGlzLmZhU3luYyxcbiAgICAgIG9uUHJlc3M6ICgpID0+XG4gICAgICAgIHRoaXMuc3dpdGNoVmlkZW9BbHQuc3dpdGNoVmlkZW9BbHQoe1xuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0QWxsUGFyYW1zKCksXG4gICAgICAgICAgICAuLi50aGlzLm1lZGlhU0ZVRnVuY3Rpb25zKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICBhY3RpdmVDb2xvcjogJ2JsYWNrJyxcbiAgICAgIGluQWN0aXZlQ29sb3I6ICdibGFjaycsXG4gICAgICBzaG93OiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgaWNvbjogdGhpcy5mYVZpZGVvU2xhc2gsXG4gICAgICBhbHRlcm5hdGVJY29uOiB0aGlzLmZhVmlkZW8sXG4gICAgICBhY3RpdmU6ICgpID0+IHRoaXMudmlkZW9BY3RpdmUudmFsdWUsXG4gICAgICBvblByZXNzOiAoKSA9PlxuICAgICAgICB0aGlzLmNsaWNrVmlkZW8uY2xpY2tWaWRlbyh7XG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5nZXRBbGxQYXJhbXMoKSxcbiAgICAgICAgICAgIC4uLnRoaXMubWVkaWFTRlVGdW5jdGlvbnMoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIGFjdGl2ZUNvbG9yOiAnZ3JlZW4nLFxuICAgICAgaW5BY3RpdmVDb2xvcjogJ3JlZCcsXG4gICAgICBzaG93OiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgaWNvbjogdGhpcy5mYU1pY3JvcGhvbmVTbGFzaCxcbiAgICAgIGFsdGVybmF0ZUljb246IHRoaXMuZmFNaWNyb3Bob25lLFxuICAgICAgYWN0aXZlOiAoKSA9PiB0aGlzLm1pY0FjdGl2ZS52YWx1ZSxcbiAgICAgIG9uUHJlc3M6ICgpID0+XG4gICAgICAgIHRoaXMuY2xpY2tBdWRpby5jbGlja0F1ZGlvKHtcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAuLi50aGlzLmdldEFsbFBhcmFtcygpLFxuICAgICAgICAgICAgLi4udGhpcy5tZWRpYVNGVUZ1bmN0aW9ucygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgYWN0aXZlQ29sb3I6ICdncmVlbicsXG4gICAgICBpbkFjdGl2ZUNvbG9yOiAncmVkJyxcbiAgICAgIHNob3c6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBpY29uOiB0aGlzLmZhUGhvbmUsXG4gICAgICBhY3RpdmU6IHRoaXMuZW5kQ2FsbEFjdGl2ZS52YWx1ZSxcbiAgICAgIG9uUHJlc3M6ICgpID0+XG4gICAgICAgIHRoaXMubGF1bmNoQ29uZmlybUV4aXQubGF1bmNoQ29uZmlybUV4aXQoe1xuICAgICAgICAgIHVwZGF0ZUlzQ29uZmlybUV4aXRNb2RhbFZpc2libGU6IHRoaXMudXBkYXRlSXNDb25maXJtRXhpdE1vZGFsVmlzaWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICAgIGlzQ29uZmlybUV4aXRNb2RhbFZpc2libGU6IHRoaXMuaXNDb25maXJtRXhpdE1vZGFsVmlzaWJsZS52YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICBhY3RpdmVDb2xvcjogJ2dyZWVuJyxcbiAgICAgIGluQWN0aXZlQ29sb3I6ICdyZWQnLFxuICAgICAgc2hvdzogdHJ1ZSxcbiAgICB9LFxuICBdO1xuXG4gIHVwZGF0ZUNvbnRyb2xDaGF0QnV0dG9ucygpIHtcbiAgICB0aGlzLmNvbnRyb2xDaGF0QnV0dG9ucyA9IHRoaXMuY29udHJvbENoYXRCdXR0b25zQXJyYXkubWFwKChidXR0b24pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJ1dHRvbixcbiAgICAgICAgc2hvdzogdHlwZW9mIGJ1dHRvbi5zaG93ID09PSAnZnVuY3Rpb24nID8gYnV0dG9uLnNob3coKSA6IGJ1dHRvbi5zaG93LFxuICAgICAgICBhY3RpdmU6IHR5cGVvZiBidXR0b24uYWN0aXZlID09PSAnZnVuY3Rpb24nID8gYnV0dG9uLmFjdGl2ZSgpIDogYnV0dG9uLmFjdGl2ZSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjb25uZWN0X1NvY2tldChcbiAgICBhcGlVc2VyTmFtZTogc3RyaW5nLFxuICAgIGFwaUtleTogc3RyaW5nLFxuICAgIGFwaVRva2VuOiBzdHJpbmcsXG4gICk6IFByb21pc2U8U29ja2V0IHwgbnVsbD4ge1xuICAgIGlmICh0aGlzLnNvY2tldC52YWx1ZSAmJiB0aGlzLnNvY2tldC52YWx1ZS5pZCkge1xuICAgICAgdGhpcy5zb2NrZXQudmFsdWUub24oJ2Rpc2Nvbm5lY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdC5kaXNjb25uZWN0KHtcbiAgICAgICAgICBzaG93QWxlcnQ6IHRoaXMuc2hvd0FsZXJ0LmJpbmQodGhpcyksXG4gICAgICAgICAgcmVkaXJlY3RVUkw6IHRoaXMucmVkaXJlY3RVUkwudmFsdWUsXG4gICAgICAgICAgb25XZWI6IHRydWUsXG4gICAgICAgICAgdXBkYXRlVmFsaWRhdGVkOiB0aGlzLnVwZGF0ZVZhbGlkYXRlZC5iaW5kKHRoaXMpLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMudmlkZW9BbHJlYWR5T24udmFsdWUpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNsaWNrVmlkZW8uY2xpY2tWaWRlbyh7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7IC4uLnRoaXMuZ2V0QWxsUGFyYW1zKCksIC4uLnRoaXMubWVkaWFTRlVGdW5jdGlvbnMoKSB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmF1ZGlvQWxyZWFkeU9uLnZhbHVlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jbGlja0F1ZGlvLmNsaWNrQXVkaW8oe1xuICAgICAgICAgICAgcGFyYW1ldGVyczogeyAuLi50aGlzLmdldEFsbFBhcmFtcygpLCAuLi50aGlzLm1lZGlhU0ZVRnVuY3Rpb25zKCkgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuY2xvc2VBbmRSZXNldCgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc29ja2V0LnZhbHVlLm9uKCdhbGxNZW1iZXJzJywgYXN5bmMgKG1lbWJlcnNEYXRhOiBBbGxNZW1iZXJzRGF0YSkgPT4ge1xuICAgICAgICBpZiAobWVtYmVyc0RhdGEpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFsbE1lbWJlcnMuYWxsTWVtYmVycyh7XG4gICAgICAgICAgICBhcGlVc2VyTmFtZTogYXBpVXNlck5hbWUsXG4gICAgICAgICAgICBhcGlLZXk6ICcnLCAvL25vdCByZWNvbW1lbmRlZCAtIHVzZSBhcGlUb2tlbiBpbnN0ZWFkLiBVc2UgZm9yIHRlc3RpbmcvZGV2ZWxvcG1lbnQgb25seVxuICAgICAgICAgICAgYXBpVG9rZW46IGFwaVRva2VuLFxuICAgICAgICAgICAgbWVtYmVyczogbWVtYmVyc0RhdGEubWVtYmVycyxcbiAgICAgICAgICAgIHJlcXVlc3RzczogbWVtYmVyc0RhdGEucmVxdWVzdHMgPyBtZW1iZXJzRGF0YS5yZXF1ZXN0cyA6IHRoaXMucmVxdWVzdExpc3QudmFsdWUsXG4gICAgICAgICAgICBjb0hvc3RlOiBtZW1iZXJzRGF0YS5jb0hvc3QgPyBtZW1iZXJzRGF0YS5jb0hvc3QgOiB0aGlzLmNvSG9zdC52YWx1ZSxcbiAgICAgICAgICAgIGNvSG9zdFJlczogbWVtYmVyc0RhdGEuY29Ib3N0UmVzcG9uc2liaWxpdGllc1xuICAgICAgICAgICAgICA/IG1lbWJlcnNEYXRhLmNvSG9zdFJlc3BvbnNpYmlsaXRpZXNcbiAgICAgICAgICAgICAgOiB0aGlzLmNvSG9zdFJlc3BvbnNpYmlsaXR5LnZhbHVlLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogeyAuLi50aGlzLmdldEFsbFBhcmFtcygpLCAuLi50aGlzLm1lZGlhU0ZVRnVuY3Rpb25zKCkgfSxcbiAgICAgICAgICAgIGNvbnN1bWVfc29ja2V0czogdGhpcy5jb25zdW1lX3NvY2tldHMudmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNvY2tldC52YWx1ZS5vbignYWxsTWVtYmVyc1Jlc3QnLCBhc3luYyAobWVtYmVyc0RhdGE6IEFsbE1lbWJlcnNSZXN0RGF0YSkgPT4ge1xuICAgICAgICBpZiAobWVtYmVyc0RhdGEpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFsbE1lbWJlcnNSZXN0LmFsbE1lbWJlcnNSZXN0KHtcbiAgICAgICAgICAgIGFwaVVzZXJOYW1lOiBhcGlVc2VyTmFtZSxcbiAgICAgICAgICAgIGFwaUtleTogJycsIC8vIG5vdCByZWNvbW1lbmRlZCAtIHVzZSBhcGlUb2tlbiBpbnN0ZWFkLiBVc2UgZm9yIHRlc3RpbmcvZGV2ZWxvcG1lbnQgb25seVxuICAgICAgICAgICAgbWVtYmVyczogbWVtYmVyc0RhdGEubWVtYmVycyxcbiAgICAgICAgICAgIGFwaVRva2VuOiBhcGlUb2tlbixcbiAgICAgICAgICAgIHNldHRpbmdzOiBtZW1iZXJzRGF0YS5zZXR0aW5ncyxcbiAgICAgICAgICAgIGNvSG9zdGU6IG1lbWJlcnNEYXRhLmNvSG9zdCA/IG1lbWJlcnNEYXRhLmNvSG9zdCA6IHRoaXMuY29Ib3N0LnZhbHVlLFxuICAgICAgICAgICAgY29Ib3N0UmVzOiBtZW1iZXJzRGF0YS5jb0hvc3RSZXNwb25zaWJpbGl0aWVzXG4gICAgICAgICAgICAgID8gbWVtYmVyc0RhdGEuY29Ib3N0UmVzcG9uc2liaWxpdGllc1xuICAgICAgICAgICAgICA6IHRoaXMuY29Ib3N0UmVzcG9uc2liaWxpdHkudmFsdWUsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7IC4uLnRoaXMuZ2V0QWxsUGFyYW1zKCksIC4uLnRoaXMubWVkaWFTRlVGdW5jdGlvbnMoKSB9LFxuICAgICAgICAgICAgY29uc3VtZV9zb2NrZXRzOiB0aGlzLmNvbnN1bWVfc29ja2V0cy52YWx1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc29ja2V0LnZhbHVlLm9uKFxuICAgICAgICAncHJvZHVjZXItbWVkaWEtcGF1c2VkJyxcbiAgICAgICAgYXN5bmMgKHtcbiAgICAgICAgICBwcm9kdWNlcklkLFxuICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgfToge1xuICAgICAgICAgIHByb2R1Y2VySWQ6IHN0cmluZztcbiAgICAgICAgICBraW5kOiAndmlkZW8nIHwgJ2F1ZGlvJyB8ICdzY3JlZW5zaGFyZScgfCAnc2NyZWVuJztcbiAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIH0pID0+IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnByb2R1Y2VyTWVkaWFQYXVzZWQucHJvZHVjZXJNZWRpYVBhdXNlZCh7XG4gICAgICAgICAgICBwcm9kdWNlcklkLFxuICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7IC4uLnRoaXMuZ2V0QWxsUGFyYW1zKCksIC4uLnRoaXMubWVkaWFTRlVGdW5jdGlvbnMoKSB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgdGhpcy5zb2NrZXQudmFsdWUub24oXG4gICAgICAgICdwcm9kdWNlci1tZWRpYS1yZXN1bWVkJyxcbiAgICAgICAgYXN5bmMgKHsga2luZCwgbmFtZSB9OiB7IGtpbmQ6ICdhdWRpbyc7IG5hbWU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm9kdWNlck1lZGlhUmVzdW1lZC5wcm9kdWNlck1lZGlhUmVzdW1lZCh7XG4gICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHsgLi4udGhpcy5nZXRBbGxQYXJhbXMoKSwgLi4udGhpcy5tZWRpYVNGVUZ1bmN0aW9ucygpIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICB0aGlzLnNvY2tldC52YWx1ZS5vbihcbiAgICAgICAgJ3Byb2R1Y2VyLW1lZGlhLWNsb3NlZCcsXG4gICAgICAgIGFzeW5jICh7XG4gICAgICAgICAgcHJvZHVjZXJJZCxcbiAgICAgICAgICBraW5kLFxuICAgICAgICB9OiB7XG4gICAgICAgICAgcHJvZHVjZXJJZDogc3RyaW5nO1xuICAgICAgICAgIGtpbmQ6ICd2aWRlbycgfCAnYXVkaW8nIHwgJ3NjcmVlbnNoYXJlJyB8ICdzY3JlZW4nO1xuICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgaWYgKHByb2R1Y2VySWQgJiYga2luZCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9kdWNlck1lZGlhQ2xvc2VkLnByb2R1Y2VyTWVkaWFDbG9zZWQoe1xuICAgICAgICAgICAgICBwcm9kdWNlcklkLFxuICAgICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7IC4uLnRoaXMuZ2V0QWxsUGFyYW1zKCksIC4uLnRoaXMubWVkaWFTRlVGdW5jdGlvbnMoKSB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgdGhpcy5zb2NrZXQudmFsdWUub24oJ21lZXRpbmdFbmRlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5tZWV0aW5nRW5kZWQubWVldGluZ0VuZGVkKHtcbiAgICAgICAgICBzaG93QWxlcnQ6IHRoaXMuc2hvd0FsZXJ0LmJpbmQodGhpcyksXG4gICAgICAgICAgcmVkaXJlY3RVUkw6IHRoaXMucmVkaXJlY3RVUkwudmFsdWUsXG4gICAgICAgICAgb25XZWI6IHRydWUsXG4gICAgICAgICAgZXZlbnRUeXBlOiB0aGlzLmV2ZW50VHlwZS52YWx1ZSxcbiAgICAgICAgICB1cGRhdGVWYWxpZGF0ZWQ6IHRoaXMudXBkYXRlVmFsaWRhdGVkLmJpbmQodGhpcyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnZpZGVvQWxyZWFkeU9uLnZhbHVlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jbGlja1ZpZGVvLmNsaWNrVmlkZW8oe1xuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAuLi50aGlzLmdldEFsbFBhcmFtcygpLFxuICAgICAgICAgICAgICAuLi50aGlzLm1lZGlhU0ZVRnVuY3Rpb25zKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmF1ZGlvQWxyZWFkeU9uLnZhbHVlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jbGlja0F1ZGlvLmNsaWNrQXVkaW8oe1xuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAuLi50aGlzLmdldEFsbFBhcmFtcygpLFxuICAgICAgICAgICAgICAuLi50aGlzLm1lZGlhU0ZVRnVuY3Rpb25zKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jbG9zZUFuZFJlc2V0KCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zb2NrZXQudmFsdWUub24oJ2Rpc2Nvbm5lY3RVc2VyU2VsZicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kaXNjb25uZWN0VXNlclNlbGYuZGlzY29ubmVjdFVzZXJTZWxmKHtcbiAgICAgICAgICBzb2NrZXQ6IHRoaXMuc29ja2V0LnZhbHVlLFxuICAgICAgICAgIG1lbWJlcjogdGhpcy5tZW1iZXIudmFsdWUsXG4gICAgICAgICAgcm9vbU5hbWU6IHRoaXMucm9vbU5hbWUudmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc29ja2V0LnZhbHVlLm9uKCdyZWNlaXZlTWVzc2FnZScsIGFzeW5jICh7IG1lc3NhZ2UgfTogeyBtZXNzYWdlOiBNZXNzYWdlIH0pID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWNlaXZlTWVzc2FnZS5yZWNlaXZlTWVzc2FnZSh7XG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBtZXNzYWdlczogdGhpcy5tZXNzYWdlcy52YWx1ZSxcbiAgICAgICAgICBwYXJ0aWNpcGFudHNBbGw6IHRoaXMucGFydGljaXBhbnRzQWxsLnZhbHVlLFxuICAgICAgICAgIG1lbWJlcjogdGhpcy5tZW1iZXIudmFsdWUsXG4gICAgICAgICAgZXZlbnRUeXBlOiB0aGlzLmV2ZW50VHlwZS52YWx1ZSxcbiAgICAgICAgICBpc2xldmVsOiB0aGlzLmlzbGV2ZWwudmFsdWUsXG4gICAgICAgICAgY29Ib3N0OiB0aGlzLmNvSG9zdC52YWx1ZSxcbiAgICAgICAgICB1cGRhdGVNZXNzYWdlczogdGhpcy51cGRhdGVNZXNzYWdlcy5iaW5kKHRoaXMpLFxuICAgICAgICAgIHVwZGF0ZVNob3dNZXNzYWdlc0JhZGdlOiB0aGlzLnVwZGF0ZVNob3dNZXNzYWdlc0JhZGdlLmJpbmQodGhpcyksXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc29ja2V0LnZhbHVlLm9uKFxuICAgICAgICAnbWVldGluZ1RpbWVSZW1haW5pbmcnLFxuICAgICAgICBhc3luYyAoeyB0aW1lUmVtYWluaW5nIH06IHsgdGltZVJlbWFpbmluZzogbnVtYmVyIH0pID0+IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLm1lZXRpbmdUaW1lUmVtYWluaW5nLm1lZXRpbmdUaW1lUmVtYWluaW5nKHtcbiAgICAgICAgICAgIHRpbWVSZW1haW5pbmcsXG4gICAgICAgICAgICBzaG93QWxlcnQ6IHRoaXMuc2hvd0FsZXJ0LmJpbmQodGhpcyksXG4gICAgICAgICAgICBldmVudFR5cGU6IHRoaXMuZXZlbnRUeXBlLnZhbHVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgdGhpcy5zb2NrZXQudmFsdWUub24oJ21lZXRpbmdTdGlsbFRoZXJlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0aGlzLm1lZXRpbmdTdGlsbFRoZXJlLm1lZXRpbmdTdGlsbFRoZXJlKHtcbiAgICAgICAgICB1cGRhdGVJc0NvbmZpcm1IZXJlTW9kYWxWaXNpYmxlOiB0aGlzLnVwZGF0ZUlzQ29uZmlybUhlcmVNb2RhbFZpc2libGUuYmluZCh0aGlzKSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zb2NrZXQudmFsdWUub24oXG4gICAgICAgICd1cGRhdGVDb25zdW1pbmdEb21haW5zJyxcbiAgICAgICAgYXN5bmMgKHsgZG9tYWlucywgYWx0X2RvbWFpbnMgfTogVXBkYXRlQ29uc3VtaW5nRG9tYWluc0RhdGEpID0+IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbnN1bWluZ0RvbWFpbnMudXBkYXRlQ29uc3VtaW5nRG9tYWlucyh7XG4gICAgICAgICAgICBkb21haW5zLFxuICAgICAgICAgICAgYWx0X2RvbWFpbnMsXG4gICAgICAgICAgICBhcGlVc2VyTmFtZSxcbiAgICAgICAgICAgIGFwaUtleSxcbiAgICAgICAgICAgIGFwaVRva2VuLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAuLi50aGlzLmdldEFsbFBhcmFtcygpLFxuICAgICAgICAgICAgICAuLi50aGlzLm1lZGlhU0ZVRnVuY3Rpb25zKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgdGhpcy5qb2luX1Jvb20oe1xuICAgICAgICBzb2NrZXQ6IHRoaXMuc29ja2V0LnZhbHVlLFxuICAgICAgICByb29tTmFtZTogdGhpcy5yb29tTmFtZS52YWx1ZSxcbiAgICAgICAgaXNsZXZlbDogdGhpcy5pc2xldmVsLnZhbHVlLFxuICAgICAgICBtZW1iZXI6IHRoaXMubWVtYmVyLnZhbHVlLFxuICAgICAgICBzZWM6IHRoaXMuYXBpVG9rZW4udmFsdWUsXG4gICAgICAgIGFwaVVzZXJOYW1lOiB0aGlzLmFwaVVzZXJOYW1lLnZhbHVlLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aGlzLnJlY2VpdmVSb29tTWVzc2FnZXMucmVjZWl2ZVJvb21NZXNzYWdlcyh7XG4gICAgICAgIHNvY2tldDogdGhpcy5zb2NrZXQudmFsdWUsXG4gICAgICAgIHJvb21OYW1lOiB0aGlzLnJvb21OYW1lLnZhbHVlLFxuICAgICAgICB1cGRhdGVNZXNzYWdlczogdGhpcy51cGRhdGVNZXNzYWdlcy5iaW5kKHRoaXMpLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnByZXBvcHVsYXRlVXNlck1lZGlhLnByZXBvcHVsYXRlVXNlck1lZGlhKHtcbiAgICAgICAgbmFtZTogdGhpcy5ob3N0TGFiZWwudmFsdWUsXG4gICAgICAgIHBhcmFtZXRlcnM6IHsgLi4udGhpcy5nZXRBbGxQYXJhbXMoKSwgLi4udGhpcy5tZWRpYVNGVUZ1bmN0aW9ucygpIH0sXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRoaXMuc29ja2V0LnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|