@dcl/asset-packs 2.16.1 → 2.16.3

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.
Files changed (48) hide show
  1. package/bin/index.js +445 -325
  2. package/catalog.json +92 -0
  3. package/dist/admin-toolkit-ui/Active.d.ts +3 -2
  4. package/dist/admin-toolkit-ui/Active.js +1 -1
  5. package/dist/admin-toolkit-ui/Card.d.ts +2 -1
  6. package/dist/admin-toolkit-ui/Card.js +1 -1
  7. package/dist/admin-toolkit-ui/FeedbackButton.js +2 -2
  8. package/dist/admin-toolkit-ui/Loading.d.ts +3 -2
  9. package/dist/admin-toolkit-ui/Loading.js +1 -1
  10. package/dist/admin-toolkit-ui/ModerationControl/AddUserInput.d.ts +1 -1
  11. package/dist/admin-toolkit-ui/ModerationControl/AddUserInput.js +1 -1
  12. package/dist/admin-toolkit-ui/ModerationControl/BanUserDescription.js +1 -1
  13. package/dist/admin-toolkit-ui/ModerationControl/RemoveAdminConfirmation.js +4 -4
  14. package/dist/admin-toolkit-ui/ModerationControl/UsersList.js +16 -14
  15. package/dist/admin-toolkit-ui/ModerationControl/index.d.ts +0 -7
  16. package/dist/admin-toolkit-ui/ModerationControl/index.js +4 -9
  17. package/dist/admin-toolkit-ui/SmartItemsControl.js +15 -33
  18. package/dist/admin-toolkit-ui/TextAnnouncementsControl.js +14 -12
  19. package/dist/admin-toolkit-ui/VideoControl/DclCast/CompactDclCast.js +7 -9
  20. package/dist/admin-toolkit-ui/VideoControl/DclCast/DclCastInfo.js +4 -3
  21. package/dist/admin-toolkit-ui/VideoControl/DclCast/index.d.ts +0 -14
  22. package/dist/admin-toolkit-ui/VideoControl/DclCast/index.js +32 -136
  23. package/dist/admin-toolkit-ui/VideoControl/DclCast/presentation-detector.d.ts +2 -0
  24. package/dist/admin-toolkit-ui/VideoControl/DclCast/presentation-detector.js +116 -0
  25. package/dist/admin-toolkit-ui/VideoControl/LiveStream/DeleteStreamKey.d.ts +1 -1
  26. package/dist/admin-toolkit-ui/VideoControl/LiveStream/DeleteStreamKey.js +2 -2
  27. package/dist/admin-toolkit-ui/VideoControl/LiveStream/GenerateStreamKey.d.ts +1 -1
  28. package/dist/admin-toolkit-ui/VideoControl/LiveStream/GenerateStreamKey.js +2 -2
  29. package/dist/admin-toolkit-ui/VideoControl/LiveStream/ShowStreamKey.js +5 -4
  30. package/dist/admin-toolkit-ui/VideoControl/LiveStream/index.js +2 -2
  31. package/dist/admin-toolkit-ui/VideoControl/api.d.ts +5 -2
  32. package/dist/admin-toolkit-ui/VideoControl/api.js +22 -12
  33. package/dist/admin-toolkit-ui/VideoControl/index.js +14 -15
  34. package/dist/admin-toolkit-ui/VideoControl/utils.d.ts +2 -0
  35. package/dist/admin-toolkit-ui/VideoControl/utils.js +15 -3
  36. package/dist/admin-toolkit-ui/actions.d.ts +42 -0
  37. package/dist/admin-toolkit-ui/actions.js +138 -0
  38. package/dist/admin-toolkit-ui/admin-message-bus.js +17 -2
  39. package/dist/admin-toolkit-ui/index.d.ts +0 -3
  40. package/dist/admin-toolkit-ui/index.js +20 -93
  41. package/dist/admin-toolkit-ui/store.d.ts +2 -0
  42. package/dist/admin-toolkit-ui/store.js +45 -0
  43. package/dist/admin-toolkit-ui/types.d.ts +22 -5
  44. package/dist/admin-toolkit-ui/types.js +1 -2
  45. package/dist/bin/index.js +445 -325
  46. package/package.json +1 -1
  47. package/dist/admin-toolkit-ui/RewardsControl.d.ts +0 -7
  48. package/dist/admin-toolkit-ui/RewardsControl.js +0 -95
@@ -7,6 +7,7 @@ import { FeedbackButton } from '../../FeedbackButton';
7
7
  import { LIVEKIT_STREAM_SRC } from '../LiveStream';
8
8
  import { VideoControlVolume } from '../VolumeControl';
9
9
  import { createVideoPlayerControls, isDclCast } from '../utils';
10
+ import { setStream } from '../../actions';
10
11
  import { getDclCastStyles, getDclCastColors, getDclCastBackgrounds } from './styles';
11
12
  const ICONS = {
12
13
  get COPY_TO_CLIPBOARD_ICON() {
@@ -30,10 +31,10 @@ const DclCastInfo = ({ state, engine, onResetRoomId, onShowShowcaseModal, onShar
30
31
  ReactEcs.createElement(Label, { value: `Expires in ${state.videoControl.dclCast?.expiresInDays} days`, fontSize: 14, color: colors.gray, uiTransform: styles.marginTopSmall })),
31
32
  video?.src && isDclCast(video.src) ? (ReactEcs.createElement(Button, { id: "dcl_cast_deactivate", value: "<b>Deactivate</b>", variant: "text", fontSize: 16, color: colors.white, uiTransform: styles.activateButton, onMouseDown: () => {
32
33
  controls.setSource('');
33
- state.videoControl.selectedStream = undefined;
34
+ setStream(undefined);
34
35
  } })) : (ReactEcs.createElement(Button, { id: "dcl_cast_activate", value: "<b>Activate</b>", labelTransform: styles.activateButtonLabel, uiTransform: styles.activateButton, fontSize: 16, uiBackground: backgrounds.success, color: colors.black, onMouseDown: () => {
35
36
  controls.setSource(LIVEKIT_STREAM_SRC);
36
- state.videoControl.selectedStream = 'dcl-cast';
37
+ setStream('dcl-cast');
37
38
  } }))),
38
39
  ReactEcs.createElement(UiEntity, { uiTransform: styles.columnContainer },
39
40
  ReactEcs.createElement(UiEntity, { uiTransform: styles.rowCenterSpaceBetween },
@@ -84,4 +85,4 @@ const DclCastInfo = ({ state, engine, onResetRoomId, onShowShowcaseModal, onShar
84
85
  ReactEcs.createElement(Button, { id: "dcl_cast_reset_room_id", value: "<b>Reset Room</b>", variant: "text", fontSize: 16, color: colors.danger, uiTransform: styles.resetButton, onMouseDown: onResetRoomId }))))));
85
86
  };
86
87
  export default DclCastInfo;
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGNsQ2FzdEluZm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9WaWRlb0NvbnRyb2wvRGNsQ2FzdC9EY2xDYXN0SW5mby50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVyRixNQUFNLEtBQUssR0FBRztJQUNaLElBQUksc0JBQXNCO1FBQ3hCLE9BQU8sR0FBRyxhQUFhLEVBQUUsbURBQW1ELENBQUM7SUFDL0UsQ0FBQztJQUNELElBQUksSUFBSTtRQUNOLE9BQU8sR0FBRyxhQUFhLEVBQUUsc0NBQXNDLENBQUM7SUFDbEUsQ0FBQztDQUNGLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQ25CLEtBQUssRUFDTCxNQUFNLEVBQ04sYUFBYSxFQUNiLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsTUFBTSxFQUNOLEtB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QUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFDbkIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQ2xDLFdBQVcsRUFBRSxtQkFBbUIsR0FDaEMsQ0FDSCxDQUNRO2dCQUNYLHVCQUFDLFFBQVEsSUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLGVBQWU7b0JBQzNDLHVCQUFDLE1BQU0sSUFDTCxFQUFFLEVBQUMsZ0NBQWdDLEVBQ25DLEtBQUssRUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLGlCQUFpQjs0QkFDbEMsQ0FBQyxDQUFDLDZCQUE2Qjs0QkFDL0IsQ0FBQyxDQUFDLDJCQUEyQixFQUVqQyxPQUFPLEVBQUMsTUFBTSxFQUNkLFFBQVEsRUFBRSxFQUFFLEVBQ1osS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQ25CLFdBQVcsRUFBRTs0QkFDWCxHQUFHLE1BQU0sQ0FBQyxXQUFXOzRCQUNyQixPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU07eUJBQzlELEVBQ0QsV0FBVyxFQUFFLG1CQUFtQixHQUNoQztvQkFDRix1QkFBQyxNQUFNLElBQ0wsRUFBRSxFQUFDLHdCQUF3QixFQUMzQixLQUFLLEVBQUMsbUJBQW1CLEVBQ3pCLE9BQU8sRUFBQyxNQUFNLEVBQ2QsUUFBUSxFQUFFLEVBQUUsRUFDWixLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFDcEIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQy9CLFdBQVcsRUFBRSxhQUFhLEdBQzFCLENBQ08sQ0FDRixDQUNGLENBQ0YsQ0FDWixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsZUFBZSxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eSwgSUVuZ2luZSB9IGZyb20gJ0BkY2wvZWNzJztcbmltcG9ydCB0eXBlIHsgRGVlcFJlYWRvbmx5T2JqZWN0LCBQQlZpZGVvUGxheWVyIH0gZnJvbSAnQGRjbC9lY3MnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAtLSBSZWFjdEVjcyBpcyByZXF1aXJlZCBmb3IgSlNYIGZhY3RvcnlcbmltcG9ydCBSZWFjdEVjcywgeyBMYWJlbCwgVWlFbnRpdHkgfSBmcm9tICdAZGNsL3JlYWN0LWVjcyc7XG5pbXBvcnQgeyBDb2xvcjQgfSBmcm9tICdAZGNsL3Nkay9tYXRoJztcbmltcG9ydCB7IGNvcHlUb0NsaXBib2FyZCB9IGZyb20gJ35zeXN0ZW0vUmVzdHJpY3RlZEFjdGlvbnMnO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vLi4vQnV0dG9uJztcbmltcG9ydCB7IGdldENvbnRlbnRVcmwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRmVlZGJhY2tCdXR0b24gfSBmcm9tICcuLi8uLi9GZWVkYmFja0J1dHRvbic7XG5pbXBvcnQgdHlwZSB7IFN0YXRlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgTElWRUtJVF9TVFJFQU1fU1JDIH0gZnJvbSAnLi4vTGl2ZVN0cmVhbSc7XG5pbXBvcnQgeyBWaWRlb0NvbnRyb2xWb2x1bWUgfSBmcm9tICcuLi9Wb2x1bWVDb250cm9sJztcbmltcG9ydCB7IGNyZWF0ZVZpZGVvUGxheWVyQ29udHJvbHMsIGlzRGNsQ2FzdCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGdldERjbENhc3RTdHlsZXMsIGdldERjbENhc3RDb2xvcnMsIGdldERjbENhc3RCYWNrZ3JvdW5kcyB9IGZyb20gJy4vc3R5bGVzJztcblxuY29uc3QgSUNPTlMgPSB7XG4gIGdldCBDT1BZX1RPX0NMSVBCT0FSRF9JQ09OKCkge1xuICAgIHJldHVybiBgJHtnZXRDb250ZW50VXJsKCl9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2NvcHktdG8tY2xpcGJvYXJkLnBuZ2A7XG4gIH0sXG4gIGdldCBTVEFSKCkge1xuICAgIHJldHVybiBgJHtnZXRDb250ZW50VXJsKCl9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL3N0YXIucG5nYDtcbiAgfSxcbn07XG5cbmNvbnN0IERjbENhc3RJbmZvID0gKHtcbiAgc3RhdGUsXG4gIGVuZ2luZSxcbiAgb25SZXNldFJvb21JZCxcbiAgb25TaG93U2hvd2Nhc2VNb2RhbCxcbiAgb25TaGFyZVByZXNlbnRhdGlvbixcbiAgZW50aXR5LFxuICB2aWRlbyxcbn06IHtcbiAgc3RhdGU6IFN0YXRlO1xuICBlbmdpbmU6IElFbmdpbmU7XG4gIG9uUmVzZXRSb29tSWQ6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIG9uU2hvd1Nob3djYXNlTW9kYWw6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIG9uU2hhcmVQcmVzZW50YXRpb246ICgpID0+IHZvaWQ7XG4gIGVudGl0eTogRW50aXR5O1xuICB2aWRlbzogRGVlcFJlYWRvbmx5T2JqZWN0PFBCVmlkZW9QbGF5ZXI+IHwgdW5kZWZpbmVkO1xufSkgPT4ge1xuICBjb25zdCBjb250cm9scyA9IGNyZWF0ZVZpZGVvUGxheWVyQ29udHJvbHMoZW50aXR5LCBlbmdpbmUpO1xuICBjb25zdCBzdHlsZXMgPSBnZXREY2xDYXN0U3R5bGVzKCk7XG4gIGNvbnN0IGNvbG9ycyA9IGdldERjbENhc3RDb2xvcnMoKTtcbiAgY29uc3QgYmFja2dyb3VuZHMgPSBnZXREY2xDYXN0QmFja2dyb3VuZHMoKTtcbiAgcmV0dXJuIChcbiAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3N0eWxlcy5mdWxsQ29udGFpbmVyfT5cbiAgICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMubWFpbkJvcmRlcmVkQ29udGFpbmVyfT5cbiAgICAgICAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3N0eWxlcy5oZWFkZXJSb3d9PlxuICAgICAgICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMuY29sdW1uRmxleFN0YXJ0fT5cbiAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgdmFsdWU9eyc8Yj5Sb29tIElEPC9iPid9XG4gICAgICAgICAgICAgICAgZm9udFNpemU9ezI0fVxuICAgICAgICAgICAgICAgIGNvbG9yPXtDb2xvcjQuV2hpdGUoKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgdmFsdWU9e2BFeHBpcmVzIGluICR7c3RhdGUudmlkZW9Db250cm9sLmRjbENhc3Q/LmV4cGlyZXNJbkRheXN9IGRheXNgfVxuICAgICAgICAgICAgICAgIGZvbnRTaXplPXsxNH1cbiAgICAgICAgICAgICAgICBjb2xvcj17Y29sb3JzLmdyYXl9XG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3N0eWxlcy5tYXJnaW5Ub3BTbWFsbH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgICB7dmlkZW8/LnNyYyAmJiBpc0RjbENhc3QodmlkZW8uc3JjKSA/IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiZGNsX2Nhc3RfZGVhY3RpdmF0ZVwiXG4gICAgICAgICAgICAgICAgdmFsdWU9XCI8Yj5EZWFjdGl2YXRlPC9iPlwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIlxuICAgICAgICAgICAgICAgIGZvbnRTaXplPXsxNn1cbiAgICAgICAgICAgICAgICBjb2xvcj17Y29sb3JzLndoaXRlfVxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXtzdHlsZXMuYWN0aXZhdGVCdXR0b259XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xzLnNldFNvdXJjZSgnJyk7XG4gICAgICAgICAgICAgICAgICBzdGF0ZS52aWRlb0NvbnRyb2wuc2VsZWN0ZWRTdHJlYW0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImRjbF9jYXN0X2FjdGl2YXRlXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cIjxiPkFjdGl2YXRlPC9iPlwiXG4gICAgICAgICAgICAgICAgbGFiZWxUcmFuc2Zvcm09e3N0eWxlcy5hY3RpdmF0ZUJ1dHRvbkxhYmVsfVxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXtzdHlsZXMuYWN0aXZhdGVCdXR0b259XG4gICAgICAgICAgICAgICAgZm9udFNpemU9ezE2fVxuICAgICAgICAgICAgICAgIHVpQmFja2dyb3VuZD17YmFja2dyb3VuZHMuc3VjY2Vzc31cbiAgICAgICAgICAgICAgICBjb2xvcj17Y29sb3JzLmJsYWNrfVxuICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb250cm9scy5zZXRTb3VyY2UoTElWRUtJVF9TVFJFQU1fU1JDKTtcbiAgICAgICAgICAgICAgICAgIHN0YXRlLnZpZGVvQ29udHJvbC5zZWxlY3RlZFN0cmVhbSA9ICdkY2wtY2FzdCc7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3N0eWxlcy5jb2x1bW5Db250YWluZXJ9PlxuICAgICAgICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMucm93Q2VudGVyU3BhY2VCZXR3ZWVufT5cbiAgICAgICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXsnPGI+Q2FzdCBzcGVha2VyczwvYj4nfVxuICAgICAgICAgICAgICAgICAgZm9udFNpemU9ezE4fVxuICAgICAgICAgICAgICAgICAgY29sb3I9e2NvbG9ycy53aGl0ZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgICAgICAgdWlUZXh0PXt7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnVGhpcyBsaW5rIGdyYW50cyBzdHJlYW1pbmcgYWNjZXNzLicsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxNCxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy5ncmF5LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICd0b3AtbGVmdCcsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgICAgIDxGZWVkYmFja0J1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiZGNsX2Nhc3RfY29weV9zdHJlYW1fbGlua1wiXG4gICAgICAgICAgICAgICAgdmFsdWU9XCI8Yj5Db3B5IExpbms8L2I+XCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwidGV4dFwiXG4gICAgICAgICAgICAgICAgZm9udFNpemU9ezE4fVxuICAgICAgICAgICAgICAgIGNvbG9yPXtjb2xvcnMud2hpdGV9XG4gICAgICAgICAgICAgICAgaWNvblJpZ2h0PXtJQ09OUy5DT1BZX1RPX0NMSVBCT0FSRF9JQ09OfVxuICAgICAgICAgICAgICAgIGljb25SaWdodFRyYW5zZm9ybT17c3R5bGVzLmljb25TbWFsbH1cbiAgICAgICAgICAgICAgICBsYWJlbFRyYW5zZm9ybT17c3R5bGVzLm1hcmdpblJpZ2h0U21hbGx9XG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3N0eWxlcy5jb3B5TGlua0J1dHRvbn1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc3RhdGUudmlkZW9Db250cm9sLmRjbENhc3Q/LnN0cmVhbUxpbmsgJiZcbiAgICAgICAgICAgICAgICAgICAgY29weVRvQ2xpcGJvYXJkKHtcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzdGF0ZS52aWRlb0NvbnRyb2wuZGNsQ2FzdC5zdHJlYW1MaW5rLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLnNlcGFyYXRvckxpbmV9IC8+XG4gICAgICAgICAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3N0eWxlcy5yb3dDZW50ZXJTcGFjZUJldHdlZW59PlxuICAgICAgICAgICAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3N0eWxlcy50ZXh0SW5mb0NvbnRhaW5lcn0+XG4gICAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17JzxiPlZpZXdlcnM8L2I+J31cbiAgICAgICAgICAgICAgICAgIGZvbnRTaXplPXsxOH1cbiAgICAgICAgICAgICAgICAgIGNvbG9yPXtjb2xvcnMud2hpdGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgICAgICAgIHVpVGV4dD17e1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ1RoaXMgbGluayBncmFudHMgdmlld2luZyBhY2Nlc3MuJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IDE0LFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogY29sb3JzLmdyYXksXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ3RvcC1sZWZ0JyxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgICAgICAgPEZlZWRiYWNrQnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJkY2xfY2FzdF9jb3B5X3dhdGNoZXJfbGlua1wiXG4gICAgICAgICAgICAgICAgdmFsdWU9XCI8Yj5Db3B5IExpbms8L2I+XCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwidGV4dFwiXG4gICAgICAgICAgICAgICAgZm9udFNpemU9ezE4fVxuICAgICAgICAgICAgICAgIGNvbG9yPXtjb2xvcnMud2hpdGV9XG4gICAgICAgICAgICAgICAgaWNvblJpZ2h0PXtJQ09OUy5DT1BZX1RPX0NMSVBCT0FSRF9JQ09OfVxuICAgICAgICAgICAgICAgIGljb25SaWdodFRyYW5zZm9ybT17c3R5bGVzLmljb25TbWFsbH1cbiAgICAgICAgICAgICAgICBsYWJlbFRyYW5zZm9ybT17c3R5bGVzLm1hcmdpblJpZ2h0U21hbGx9XG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3N0eWxlcy5jb3B5TGlua0J1dHRvbn1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc3RhdGUudmlkZW9Db250cm9sLmRjbENhc3Q/LndhdGNoZXJMaW5rICYmXG4gICAgICAgICAgICAgICAgICAgIGNvcHlUb0NsaXBib2FyZCh7XG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3RhdGUudmlkZW9Db250cm9sLmRjbENhc3Qud2F0Y2hlckxpbmssXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLmNvbHVtbldpdGhNYXJnaW5Ub3B9PlxuICAgICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLnZvbHVtZVNob3djYXNlUm93fT5cbiAgICAgICAgICAgIDxWaWRlb0NvbnRyb2xWb2x1bWVcbiAgICAgICAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgICAgICAgIGVudGl0eT17ZW50aXR5fVxuICAgICAgICAgICAgICB2aWRlbz17dmlkZW99XG4gICAgICAgICAgICAgIGxhYmVsPVwiPGI+Q2FzdCBjb250cm9sczwvYj5cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHt2aWRlbz8uc3JjICYmIGlzRGNsQ2FzdCh2aWRlby5zcmMpICYmIChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiZGNsX2Nhc3Rfc2hvd2Nhc2VfbGlzdFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9XCI8Yj5TcGVha2VyczwvYj5cIlxuICAgICAgICAgICAgICAgIGljb249e0lDT05TLlNUQVJ9XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17c3R5bGVzLnN0YXJJY29ufVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIGZvbnRTaXplPXsxNn1cbiAgICAgICAgICAgICAgICBjb2xvcj17Y29sb3JzLndoaXRlfVxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXtzdHlsZXMuc2hvd2Nhc2VCdXR0b259XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249e29uU2hvd1Nob3djYXNlTW9kYWx9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMuY2FzdENvbnRyb2xzUm93fT5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgaWQ9XCJkY2xfY2FzdF9zaGFyZV9wcmVzZW50YXRpb25faWRcIlxuICAgICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgICAgc3RhdGUudmlkZW9Db250cm9sLnByZXNlbnRhdGlvblN0YXRlXG4gICAgICAgICAgICAgICAgICA/ICc8Yj5SZXBsYWNlIFByZXNlbnRhdGlvbjwvYj4nXG4gICAgICAgICAgICAgICAgICA6ICc8Yj5TaGFyZSBQcmVzZW50YXRpb248L2I+J1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgZm9udFNpemU9ezE2fVxuICAgICAgICAgICAgICBjb2xvcj17Y29sb3JzLndoaXRlfVxuICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgIC4uLnN0eWxlcy5yZXNldEJ1dHRvbixcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiB2aWRlbz8uc3JjICYmIGlzRGNsQ2FzdCh2aWRlby5zcmMpID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbk1vdXNlRG93bj17b25TaGFyZVByZXNlbnRhdGlvbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGlkPVwiZGNsX2Nhc3RfcmVzZXRfcm9vbV9pZFwiXG4gICAgICAgICAgICAgIHZhbHVlPVwiPGI+UmVzZXQgUm9vbTwvYj5cIlxuICAgICAgICAgICAgICB2YXJpYW50PVwidGV4dFwiXG4gICAgICAgICAgICAgIGZvbnRTaXplPXsxNn1cbiAgICAgICAgICAgICAgY29sb3I9e2NvbG9ycy5kYW5nZXJ9XG4gICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXtzdHlsZXMucmVzZXRCdXR0b259XG4gICAgICAgICAgICAgIG9uTW91c2VEb3duPXtvblJlc2V0Um9vbUlkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgPC9VaUVudGl0eT5cbiAgICA8L1VpRW50aXR5PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRGNsQ2FzdEluZm87XG4iXX0=
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGNsQ2FzdEluZm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9WaWRlb0NvbnRyb2wvRGNsQ2FzdC9EY2xDYXN0SW5mby50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXJGLE1BQU0sS0FBSyxHQUFHO0lBQ1osSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxHQUFHLGFBQWEsRUFBRSxtREFBbUQsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxHQUFHLGFBQWEsRUFBRSxzQ0FBc0MsQ0FBQztJQUNsRSxDQUFDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sV0FBVyxHQUFHLENBQUMsRUFDbkIsS0FBSyxFQUNMLE1BQU0sRUFDTixhQUFhLEVB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RUFBRSxFQUNaLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUNuQixXQUFXLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFDbEMsV0FBVyxFQUFFLG1CQUFtQixHQUNoQyxDQUNILENBQ1E7Z0JBQ1gsdUJBQUMsUUFBUSxJQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsZUFBZTtvQkFDM0MsdUJBQUMsTUFBTSxJQUNMLEVBQUUsRUFBQyxnQ0FBZ0MsRUFDbkMsS0FBSyxFQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsaUJBQWlCOzRCQUNsQyxDQUFDLENBQUMsNkJBQTZCOzRCQUMvQixDQUFDLENBQUMsMkJBQTJCLEVBRWpDLE9BQU8sRUFBQyxNQUFNLEVBQ2QsUUFBUSxFQUFFLEVBQUUsRUFDWixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFDbkIsV0FBVyxFQUFFOzRCQUNYLEdBQUcsTUFBTSxDQUFDLFdBQVc7NEJBQ3JCLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTt5QkFDOUQsRUFDRCxXQUFXLEVBQUUsbUJBQW1CLEdBQ2hDO29CQUNGLHVCQUFDLE1BQU0sSUFDTCxFQUFFLEVBQUMsd0JBQXdCLEVBQzNCLEtBQUssRUFBQyxtQkFBbUIsRUFDekIsT0FBTyxFQUFDLE1BQU0sRUFDZCxRQUFRLEVBQUUsRUFBRSxFQUNaLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxFQUNwQixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFDL0IsV0FBVyxFQUFFLGFBQWEsR0FDMUIsQ0FDTyxDQUNGLENBQ0YsQ0FDRixDQUNaLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixlQUFlLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5LCBJRW5naW5lIH0gZnJvbSAnQGRjbC9lY3MnO1xuaW1wb3J0IHR5cGUgeyBEZWVwUmVhZG9ubHlPYmplY3QsIFBCVmlkZW9QbGF5ZXIgfSBmcm9tICdAZGNsL2Vjcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzIC0tIFJlYWN0RWNzIGlzIHJlcXVpcmVkIGZvciBKU1ggZmFjdG9yeVxuaW1wb3J0IFJlYWN0RWNzLCB7IExhYmVsLCBVaUVudGl0eSB9IGZyb20gJ0BkY2wvcmVhY3QtZWNzJztcbmltcG9ydCB7IENvbG9yNCB9IGZyb20gJ0BkY2wvc2RrL21hdGgnO1xuaW1wb3J0IHsgY29weVRvQ2xpcGJvYXJkIH0gZnJvbSAnfnN5c3RlbS9SZXN0cmljdGVkQWN0aW9ucyc7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9CdXR0b24nO1xuaW1wb3J0IHsgZ2V0Q29udGVudFVybCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBGZWVkYmFja0J1dHRvbiB9IGZyb20gJy4uLy4uL0ZlZWRiYWNrQnV0dG9uJztcbmltcG9ydCB0eXBlIHsgU3RhdGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBMSVZFS0lUX1NUUkVBTV9TUkMgfSBmcm9tICcuLi9MaXZlU3RyZWFtJztcbmltcG9ydCB7IFZpZGVvQ29udHJvbFZvbHVtZSB9IGZyb20gJy4uL1ZvbHVtZUNvbnRyb2wnO1xuaW1wb3J0IHsgY3JlYXRlVmlkZW9QbGF5ZXJDb250cm9scywgaXNEY2xDYXN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgc2V0U3RyZWFtIH0gZnJvbSAnLi4vLi4vYWN0aW9ucyc7XG5pbXBvcnQgeyBnZXREY2xDYXN0U3R5bGVzLCBnZXREY2xDYXN0Q29sb3JzLCBnZXREY2xDYXN0QmFja2dyb3VuZHMgfSBmcm9tICcuL3N0eWxlcyc7XG5cbmNvbnN0IElDT05TID0ge1xuICBnZXQgQ09QWV9UT19DTElQQk9BUkRfSUNPTigpIHtcbiAgICByZXR1cm4gYCR7Z2V0Q29udGVudFVybCgpfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9jb3B5LXRvLWNsaXBib2FyZC5wbmdgO1xuICB9LFxuICBnZXQgU1RBUigpIHtcbiAgICByZXR1cm4gYCR7Z2V0Q29udGVudFVybCgpfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9zdGFyLnBuZ2A7XG4gIH0sXG59O1xuXG5jb25zdCBEY2xDYXN0SW5mbyA9ICh7XG4gIHN0YXRlLFxuICBlbmdpbmUsXG4gIG9uUmVzZXRSb29tSWQsXG4gIG9uU2hvd1Nob3djYXNlTW9kYWwsXG4gIG9uU2hhcmVQcmVzZW50YXRpb24sXG4gIGVudGl0eSxcbiAgdmlkZW8sXG59OiB7XG4gIHN0YXRlOiBTdGF0ZTtcbiAgZW5naW5lOiBJRW5naW5lO1xuICBvblJlc2V0Um9vbUlkOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBvblNob3dTaG93Y2FzZU1vZGFsOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBvblNoYXJlUHJlc2VudGF0aW9uOiAoKSA9PiB2b2lkO1xuICBlbnRpdHk6IEVudGl0eTtcbiAgdmlkZW86IERlZXBSZWFkb25seU9iamVjdDxQQlZpZGVvUGxheWVyPiB8IHVuZGVmaW5lZDtcbn0pID0+IHtcbiAgY29uc3QgY29udHJvbHMgPSBjcmVhdGVWaWRlb1BsYXllckNvbnRyb2xzKGVudGl0eSwgZW5naW5lKTtcbiAgY29uc3Qgc3R5bGVzID0gZ2V0RGNsQ2FzdFN0eWxlcygpO1xuICBjb25zdCBjb2xvcnMgPSBnZXREY2xDYXN0Q29sb3JzKCk7XG4gIGNvbnN0IGJhY2tncm91bmRzID0gZ2V0RGNsQ2FzdEJhY2tncm91bmRzKCk7XG4gIHJldHVybiAoXG4gICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMuZnVsbENvbnRhaW5lcn0+XG4gICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLm1haW5Cb3JkZXJlZENvbnRhaW5lcn0+XG4gICAgICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMuaGVhZGVyUm93fT5cbiAgICAgICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLmNvbHVtbkZsZXhTdGFydH0+XG4gICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgIHZhbHVlPXsnPGI+Um9vbSBJRDwvYj4nfVxuICAgICAgICAgICAgICAgIGZvbnRTaXplPXsyNH1cbiAgICAgICAgICAgICAgICBjb2xvcj17Q29sb3I0LldoaXRlKCl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgIHZhbHVlPXtgRXhwaXJlcyBpbiAke3N0YXRlLnZpZGVvQ29udHJvbC5kY2xDYXN0Py5leHBpcmVzSW5EYXlzfSBkYXlzYH1cbiAgICAgICAgICAgICAgICBmb250U2l6ZT17MTR9XG4gICAgICAgICAgICAgICAgY29sb3I9e2NvbG9ycy5ncmF5fVxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXtzdHlsZXMubWFyZ2luVG9wU21hbGx9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgICAge3ZpZGVvPy5zcmMgJiYgaXNEY2xDYXN0KHZpZGVvLnNyYykgPyAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImRjbF9jYXN0X2RlYWN0aXZhdGVcIlxuICAgICAgICAgICAgICAgIHZhbHVlPVwiPGI+RGVhY3RpdmF0ZTwvYj5cIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBmb250U2l6ZT17MTZ9XG4gICAgICAgICAgICAgICAgY29sb3I9e2NvbG9ycy53aGl0ZX1cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17c3R5bGVzLmFjdGl2YXRlQnV0dG9ufVxuICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb250cm9scy5zZXRTb3VyY2UoJycpO1xuICAgICAgICAgICAgICAgICAgc2V0U3RyZWFtKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImRjbF9jYXN0X2FjdGl2YXRlXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cIjxiPkFjdGl2YXRlPC9iPlwiXG4gICAgICAgICAgICAgICAgbGFiZWxUcmFuc2Zvcm09e3N0eWxlcy5hY3RpdmF0ZUJ1dHRvbkxhYmVsfVxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXtzdHlsZXMuYWN0aXZhdGVCdXR0b259XG4gICAgICAgICAgICAgICAgZm9udFNpemU9ezE2fVxuICAgICAgICAgICAgICAgIHVpQmFja2dyb3VuZD17YmFja2dyb3VuZHMuc3VjY2Vzc31cbiAgICAgICAgICAgICAgICBjb2xvcj17Y29sb3JzLmJsYWNrfVxuICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb250cm9scy5zZXRTb3VyY2UoTElWRUtJVF9TVFJFQU1fU1JDKTtcbiAgICAgICAgICAgICAgICAgIHNldFN0cmVhbSgnZGNsLWNhc3QnKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLmNvbHVtbkNvbnRhaW5lcn0+XG4gICAgICAgICAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3N0eWxlcy5yb3dDZW50ZXJTcGFjZUJldHdlZW59PlxuICAgICAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgICAgdmFsdWU9eyc8Yj5DYXN0IHNwZWFrZXJzPC9iPid9XG4gICAgICAgICAgICAgICAgICBmb250U2l6ZT17MTh9XG4gICAgICAgICAgICAgICAgICBjb2xvcj17Y29sb3JzLndoaXRlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICAgICAgICB1aVRleHQ9e3tcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdUaGlzIGxpbmsgZ3JhbnRzIHN0cmVhbWluZyBhY2Nlc3MuJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IDE0LFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogY29sb3JzLmdyYXksXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ3RvcC1sZWZ0JyxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgICAgICAgPEZlZWRiYWNrQnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJkY2xfY2FzdF9jb3B5X3N0cmVhbV9saW5rXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cIjxiPkNvcHkgTGluazwvYj5cIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBmb250U2l6ZT17MTh9XG4gICAgICAgICAgICAgICAgY29sb3I9e2NvbG9ycy53aGl0ZX1cbiAgICAgICAgICAgICAgICBpY29uUmlnaHQ9e0lDT05TLkNPUFlfVE9fQ0xJUEJPQVJEX0lDT059XG4gICAgICAgICAgICAgICAgaWNvblJpZ2h0VHJhbnNmb3JtPXtzdHlsZXMuaWNvblNtYWxsfVxuICAgICAgICAgICAgICAgIGxhYmVsVHJhbnNmb3JtPXtzdHlsZXMubWFyZ2luUmlnaHRTbWFsbH1cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17c3R5bGVzLmNvcHlMaW5rQnV0dG9ufVxuICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzdGF0ZS52aWRlb0NvbnRyb2wuZGNsQ2FzdD8uc3RyZWFtTGluayAmJlxuICAgICAgICAgICAgICAgICAgICBjb3B5VG9DbGlwYm9hcmQoe1xuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHN0YXRlLnZpZGVvQ29udHJvbC5kY2xDYXN0LnN0cmVhbUxpbmssXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMuc2VwYXJhdG9yTGluZX0gLz5cbiAgICAgICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLnJvd0NlbnRlclNwYWNlQmV0d2Vlbn0+XG4gICAgICAgICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLnRleHRJbmZvQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXsnPGI+Vmlld2VyczwvYj4nfVxuICAgICAgICAgICAgICAgICAgZm9udFNpemU9ezE4fVxuICAgICAgICAgICAgICAgICAgY29sb3I9e2NvbG9ycy53aGl0ZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgICAgICAgdWlUZXh0PXt7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnVGhpcyBsaW5rIGdyYW50cyB2aWV3aW5nIGFjY2Vzcy4nLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogMTQsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnMuZ3JheSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAndG9wLWxlZnQnLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgICAgICA8RmVlZGJhY2tCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImRjbF9jYXN0X2NvcHlfd2F0Y2hlcl9saW5rXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cIjxiPkNvcHkgTGluazwvYj5cIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBmb250U2l6ZT17MTh9XG4gICAgICAgICAgICAgICAgY29sb3I9e2NvbG9ycy53aGl0ZX1cbiAgICAgICAgICAgICAgICBpY29uUmlnaHQ9e0lDT05TLkNPUFlfVE9fQ0xJUEJPQVJEX0lDT059XG4gICAgICAgICAgICAgICAgaWNvblJpZ2h0VHJhbnNmb3JtPXtzdHlsZXMuaWNvblNtYWxsfVxuICAgICAgICAgICAgICAgIGxhYmVsVHJhbnNmb3JtPXtzdHlsZXMubWFyZ2luUmlnaHRTbWFsbH1cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17c3R5bGVzLmNvcHlMaW5rQnV0dG9ufVxuICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzdGF0ZS52aWRlb0NvbnRyb2wuZGNsQ2FzdD8ud2F0Y2hlckxpbmsgJiZcbiAgICAgICAgICAgICAgICAgICAgY29weVRvQ2xpcGJvYXJkKHtcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzdGF0ZS52aWRlb0NvbnRyb2wuZGNsQ2FzdC53YXRjaGVyTGluayxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMuY29sdW1uV2l0aE1hcmdpblRvcH0+XG4gICAgICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMudm9sdW1lU2hvd2Nhc2VSb3d9PlxuICAgICAgICAgICAgPFZpZGVvQ29udHJvbFZvbHVtZVxuICAgICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAgICAgZW50aXR5PXtlbnRpdHl9XG4gICAgICAgICAgICAgIHZpZGVvPXt2aWRlb31cbiAgICAgICAgICAgICAgbGFiZWw9XCI8Yj5DYXN0IGNvbnRyb2xzPC9iPlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3ZpZGVvPy5zcmMgJiYgaXNEY2xDYXN0KHZpZGVvLnNyYykgJiYgKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJkY2xfY2FzdF9zaG93Y2FzZV9saXN0XCJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cIjxiPlNwZWFrZXJzPC9iPlwiXG4gICAgICAgICAgICAgICAgaWNvbj17SUNPTlMuU1RBUn1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXtzdHlsZXMuc3Rhckljb259XG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgZm9udFNpemU9ezE2fVxuICAgICAgICAgICAgICAgIGNvbG9yPXtjb2xvcnMud2hpdGV9XG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3N0eWxlcy5zaG93Y2FzZUJ1dHRvbn1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17b25TaG93U2hvd2Nhc2VNb2RhbH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3N0eWxlcy5jYXN0Q29udHJvbHNSb3d9PlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBpZD1cImRjbF9jYXN0X3NoYXJlX3ByZXNlbnRhdGlvbl9pZFwiXG4gICAgICAgICAgICAgIHZhbHVlPXtcbiAgICAgICAgICAgICAgICBzdGF0ZS52aWRlb0NvbnRyb2wucHJlc2VudGF0aW9uU3RhdGVcbiAgICAgICAgICAgICAgICAgID8gJzxiPlJlcGxhY2UgUHJlc2VudGF0aW9uPC9iPidcbiAgICAgICAgICAgICAgICAgIDogJzxiPlNoYXJlIFByZXNlbnRhdGlvbjwvYj4nXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIlxuICAgICAgICAgICAgICBmb250U2l6ZT17MTZ9XG4gICAgICAgICAgICAgIGNvbG9yPXtjb2xvcnMud2hpdGV9XG4gICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgLi4uc3R5bGVzLnJlc2V0QnV0dG9uLFxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IHZpZGVvPy5zcmMgJiYgaXNEY2xDYXN0KHZpZGVvLnNyYykgPyAnZmxleCcgOiAnbm9uZScsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uTW91c2VEb3duPXtvblNoYXJlUHJlc2VudGF0aW9ufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgaWQ9XCJkY2xfY2FzdF9yZXNldF9yb29tX2lkXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCI8Yj5SZXNldCBSb29tPC9iPlwiXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgZm9udFNpemU9ezE2fVxuICAgICAgICAgICAgICBjb2xvcj17Y29sb3JzLmRhbmdlcn1cbiAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3N0eWxlcy5yZXNldEJ1dHRvbn1cbiAgICAgICAgICAgICAgb25Nb3VzZURvd249e29uUmVzZXRSb29tSWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICA8L1VpRW50aXR5PlxuICAgIDwvVWlFbnRpdHk+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBEY2xDYXN0SW5mbztcbiJdfQ==
@@ -1,20 +1,6 @@
1
1
  import ReactEcs from '@dcl/react-ecs';
2
2
  import type { DeepReadonlyObject, Entity, IEngine, PBVideoPlayer } from '@dcl/ecs';
3
3
  import type { State } from '../../types';
4
- import { type FlattenedTrack, type Participant } from '../api';
5
- export declare const showcaseState: {
6
- show: boolean;
7
- participants: Participant[];
8
- activeTrackSid: string | undefined;
9
- onSelectTrack: ((track: FlattenedTrack) => void) | undefined;
10
- onSetDefault: (() => void) | undefined;
11
- onClose: (() => void) | undefined;
12
- };
13
- export declare const sharePresentationState: {
14
- show: boolean;
15
- onClose: (() => void) | undefined;
16
- };
17
- export declare function handleGetDclCastInfo(state: State): Promise<import("../api").DclCastResponse | null | undefined>;
18
4
  declare const DclCast: ({ engine, state, entity, video, playerAddress, }: {
19
5
  engine: IEngine;
20
6
  state: State;
@@ -2,13 +2,12 @@ import ReactEcs, { UiEntity } from '@dcl/react-ecs';
2
2
  import { Color4 } from '@dcl/sdk/math';
3
3
  import { getComponents } from '../../../definitions';
4
4
  import { getContentUrl } from '../../constants';
5
- import { setInterval, clearInterval } from '../../utils';
6
5
  import { Button } from '../../Button';
7
6
  import { LoadingDots } from '../../Loading';
8
- import { nextTickFunctions } from '../..';
9
7
  import { LIVEKIT_STREAM_SRC } from '../LiveStream';
10
- import { getDclCastInfo, getActiveStreams, groupTracksByParticipant, resetStreamKey, hasPresentationTrack, subscribeToPresentationTopic, consumePresentationMessages, ensurePresenterRole, } from '../api';
11
- import { createVideoPlayerControls, isDclCast } from '../utils';
8
+ import { getDclCastInfo, getActiveStreams, groupTracksByParticipant, resetStreamKey, ensurePresenterRole, } from '../api';
9
+ import { CAST_SRC_PREFIX, createVideoPlayerControls } from '../utils';
10
+ import { openShowcase, closeShowcase, setShowcaseActiveTrack, openSharePresentation, closeSharePresentation, setStream, setParticipants, setDclCastInfo, minimizeCast, } from '../../actions';
12
11
  import DclCastInfo from './DclCastInfo';
13
12
  import CompactDclCast from './CompactDclCast';
14
13
  import { getDclCastStyles, getDclCastColors } from './styles';
@@ -20,23 +19,7 @@ const ICONS = {
20
19
  return `${getContentUrl()}/admin_toolkit/assets/icons/chevron-up.png`;
21
20
  },
22
21
  };
23
- export const showcaseState = {
24
- show: false,
25
- participants: [],
26
- activeTrackSid: undefined,
27
- onSelectTrack: undefined,
28
- onSetDefault: undefined,
29
- onClose: undefined,
30
- };
31
- export const sharePresentationState = {
32
- show: false,
33
- onClose: undefined,
34
- };
35
- let presentationSubscribed = false;
36
- let consuming = false;
37
- let presentationSystem = null;
38
- let participantPollingSystem = null;
39
- export async function handleGetDclCastInfo(state) {
22
+ async function handleGetDclCastInfo() {
40
23
  const [error, data] = await getDclCastInfo();
41
24
  if (error) {
42
25
  console.error(error);
@@ -44,73 +27,11 @@ export async function handleGetDclCastInfo(state) {
44
27
  }
45
28
  else {
46
29
  if (data) {
47
- state.videoControl.dclCast = data;
30
+ setDclCastInfo(data);
48
31
  return data;
49
32
  }
50
33
  }
51
34
  }
52
- function startPresentationSystem(engine, state) {
53
- if (presentationSystem)
54
- return;
55
- presentationSubscribed = true;
56
- subscribeToPresentationTopic();
57
- const system = () => {
58
- if (consuming)
59
- return;
60
- consuming = true;
61
- consumePresentationMessages()
62
- .then(latestState => {
63
- if (latestState === 'stopped') {
64
- state.videoControl.presentationState = undefined;
65
- }
66
- else if (latestState) {
67
- state.videoControl.presentationState = latestState;
68
- }
69
- })
70
- .catch(() => {
71
- console.log('[DclCast] Failed to consume presentation messages');
72
- })
73
- .finally(() => {
74
- consuming = false;
75
- });
76
- };
77
- engine.addSystem(system);
78
- presentationSystem = system;
79
- }
80
- function stopPresentationSystem(engine, state) {
81
- if (presentationSystem) {
82
- engine.removeSystem(presentationSystem);
83
- presentationSystem = null;
84
- }
85
- state.videoControl.presentationState = undefined;
86
- presentationSubscribed = false;
87
- }
88
- function startParticipantPolling(engine, state) {
89
- if (participantPollingSystem)
90
- return;
91
- const poll = async () => {
92
- const tracks = await getActiveStreams();
93
- if (!tracks)
94
- return;
95
- showcaseState.participants = groupTracksByParticipant(tracks);
96
- const hasPresentation = hasPresentationTrack(tracks);
97
- if (hasPresentation && !presentationSubscribed) {
98
- startPresentationSystem(engine, state);
99
- }
100
- else if (!hasPresentation && presentationSubscribed) {
101
- stopPresentationSystem(engine, state);
102
- }
103
- };
104
- poll();
105
- participantPollingSystem = setInterval(engine, poll, 5000);
106
- }
107
- function stopParticipantPolling(engine, state) {
108
- if (participantPollingSystem) {
109
- clearInterval(engine, participantPollingSystem);
110
- participantPollingSystem = null;
111
- }
112
- stopPresentationSystem(engine, state);
113
- }
114
35
  const DclCast = ({ engine, state, entity, video, playerAddress, }) => {
115
36
  const { VideoControlState } = getComponents(engine);
116
37
  const controls = createVideoPlayerControls(entity, engine);
@@ -122,45 +43,35 @@ const DclCast = ({ engine, state, entity, video, playerAddress, }) => {
122
43
  const latestTracks = await getActiveStreams();
123
44
  if (!latestTracks)
124
45
  return;
125
- console.log('[DclCast] Active tracks:', JSON.stringify(latestTracks, null, 2));
126
- const closeModal = () => {
127
- showcaseState.show = false;
128
- };
129
- showcaseState.participants = groupTracksByParticipant(latestTracks);
130
- showcaseState.onSelectTrack = (track) => {
131
- controls.setSource(track.sid);
132
- showcaseState.activeTrackSid = track.sid;
133
- state.videoControl.selectedStream = 'dcl-cast';
134
- };
135
- showcaseState.onSetDefault = () => {
136
- controls.setSource(LIVEKIT_STREAM_SRC);
137
- showcaseState.activeTrackSid = undefined;
138
- state.videoControl.selectedStream = 'dcl-cast';
139
- };
140
- showcaseState.onClose = closeModal;
141
- nextTickFunctions.push(() => {
142
- showcaseState.show = true;
46
+ setParticipants(groupTracksByParticipant(latestTracks));
47
+ openShowcase({
48
+ onSelectTrack: (track) => {
49
+ controls.setSource(track.sid);
50
+ setShowcaseActiveTrack(track.sid);
51
+ setStream('dcl-cast');
52
+ },
53
+ onSetDefault: () => {
54
+ controls.setSource(LIVEKIT_STREAM_SRC);
55
+ setShowcaseActiveTrack(undefined);
56
+ setStream('dcl-cast');
57
+ },
58
+ onClose: () => closeShowcase(),
143
59
  });
144
60
  };
145
61
  const fetchDclCastInfo = async () => {
146
62
  setIsLoading(true);
147
63
  setError(false);
148
- const result = await handleGetDclCastInfo(state);
64
+ const result = await handleGetDclCastInfo();
149
65
  if (!result) {
150
66
  setError(true);
151
67
  }
152
- else if (video?.src?.startsWith('livekit-video://') && !state.videoControl.selectedStream) {
153
- state.videoControl.selectedStream = 'dcl-cast';
68
+ else if (video?.src?.startsWith(CAST_SRC_PREFIX) && !state.videoControl.selectedStream) {
69
+ setStream('dcl-cast');
154
70
  }
155
71
  setIsLoading(false);
156
72
  };
157
73
  const onSharePresentation = () => {
158
- sharePresentationState.onClose = () => {
159
- sharePresentationState.show = false;
160
- };
161
- nextTickFunctions.push(() => {
162
- sharePresentationState.show = true;
163
- });
74
+ openSharePresentation(() => closeSharePresentation());
164
75
  };
165
76
  const handleResetRoomId = async () => {
166
77
  setIsLoading(true);
@@ -176,31 +87,18 @@ const DclCast = ({ engine, state, entity, video, playerAddress, }) => {
176
87
  }
177
88
  };
178
89
  ReactEcs.useEffect(() => {
179
- fetchDclCastInfo();
180
- if (playerAddress) {
181
- ensurePresenterRole(playerAddress);
182
- }
90
+ fetchDclCastInfo().then(() => {
91
+ if (playerAddress) {
92
+ ensurePresenterRole(playerAddress);
93
+ }
94
+ });
183
95
  }, []);
184
96
  const videoSrc = video?.src;
185
97
  ReactEcs.useEffect(() => {
186
- if (videoSrc?.startsWith('livekit-video://') && !state.videoControl.selectedStream) {
187
- state.videoControl.selectedStream = 'dcl-cast';
98
+ if (videoSrc?.startsWith(CAST_SRC_PREFIX) && !state.videoControl.selectedStream) {
99
+ setStream('dcl-cast');
188
100
  }
189
101
  }, [videoSrc]);
190
- const isCastActive = !!(video?.src && isDclCast(video.src));
191
- ReactEcs.useEffect(() => {
192
- if (isCastActive) {
193
- startParticipantPolling(engine, state);
194
- }
195
- else {
196
- stopParticipantPolling(engine, state);
197
- }
198
- }, [isCastActive]);
199
- ReactEcs.useEffect(() => {
200
- if (state.videoControl.presentationState) {
201
- state.videoControl.isMinimized = true;
202
- }
203
- }, [!!state.videoControl.presentationState]);
204
102
  const isMinimized = state.videoControl.isMinimized;
205
103
  return (ReactEcs.createElement(UiEntity, { uiTransform: styles.fullContainer },
206
104
  ReactEcs.createElement(UiEntity, { uiTransform: { display: isMinimized ? 'flex' : 'none', width: '100%' } },
@@ -222,9 +120,7 @@ const DclCast = ({ engine, state, entity, video, playerAddress, }) => {
222
120
  color: Color4.White(),
223
121
  textAlign: 'middle-left',
224
122
  }, uiTransform: { margin: { left: 10 } } })),
225
- ReactEcs.createElement(UiEntity, { onMouseDown: () => {
226
- state.videoControl.isMinimized = true;
227
- }, uiTransform: styles.chevronButton, uiBackground: {
123
+ ReactEcs.createElement(UiEntity, { onMouseDown: () => minimizeCast(), uiTransform: styles.chevronButton, uiBackground: {
228
124
  textureMode: 'stretch',
229
125
  color: Color4.White(),
230
126
  texture: {
@@ -252,9 +148,9 @@ const DclCast = ({ engine, state, entity, video, playerAddress, }) => {
252
148
  color: Color4.Gray(),
253
149
  } }),
254
150
  ReactEcs.createElement(Button, { id: "dcl_cast_retry", value: "<b>Retry</b>", variant: "secondary", fontSize: 16, color: colors.white, onMouseDown: () => {
255
- handleGetDclCastInfo(state);
151
+ fetchDclCastInfo();
256
152
  }, uiTransform: styles.retryButton }))),
257
153
  !isLoading && !error && (ReactEcs.createElement(DclCastInfo, { state: state, entity: entity, engine: engine, video: video, onResetRoomId: handleResetRoomId, onShowShowcaseModal: onShowShowcaseModal, onSharePresentation: onSharePresentation })))));
258
154
  };
259
155
  export default DclCast;
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9WaWRlb0NvbnRyb2wvRGNsQ2FzdC9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUNMLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsNEJBQTRCLEVBQzVCLDJCQUEyQixFQUMzQixtQkFBbUIsR0FHcEIsTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNoRSxPQUFPLFdBQVcsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTlELE1BQU0sS0FBSyxHQUFHO0lBQ1osSUFBSSxhQUFhO1FBQ2YsT0FBTyxHQUFHLGFB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QUUsTUFBTSxFQUNkLE1BQU0sRUFBRSxNQUFNLEVBQ2QsS0FBSyxFQUFFLEtBQUssRUFDWixhQUFhLEVBQUUsaUJBQWlCLEVBQ2hDLG1CQUFtQixFQUFFLG1CQUFtQixFQUN4QyxtQkFBbUIsRUFBRSxtQkFBbUIsR0FDeEMsQ0FDSCxDQUNRLENBQ0YsQ0FDWixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsZUFBZSxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3RFY3MsIHsgVWlFbnRpdHkgfSBmcm9tICdAZGNsL3JlYWN0LWVjcyc7XG5pbXBvcnQgdHlwZSB7IERlZXBSZWFkb25seU9iamVjdCwgRW50aXR5LCBJRW5naW5lLCBQQlZpZGVvUGxheWVyIH0gZnJvbSAnQGRjbC9lY3MnO1xuaW1wb3J0IHsgQ29sb3I0IH0gZnJvbSAnQGRjbC9zZGsvbWF0aCc7XG5pbXBvcnQgeyBnZXRDb21wb25lbnRzIH0gZnJvbSAnLi4vLi4vLi4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHsgZ2V0Q29udGVudFVybCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IFN0YXRlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgc2V0SW50ZXJ2YWwsIGNsZWFySW50ZXJ2YWwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9CdXR0b24nO1xuaW1wb3J0IHsgTG9hZGluZ0RvdHMgfSBmcm9tICcuLi8uLi9Mb2FkaW5nJztcbmltcG9ydCB7IG5leHRUaWNrRnVuY3Rpb25zIH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgTElWRUtJVF9TVFJFQU1fU1JDIH0gZnJvbSAnLi4vTGl2ZVN0cmVhbSc7XG5pbXBvcnQge1xuICBnZXREY2xDYXN0SW5mbyxcbiAgZ2V0QWN0aXZlU3RyZWFtcyxcbiAgZ3JvdXBUcmFja3NCeVBhcnRpY2lwYW50LFxuICByZXNldFN0cmVhbUtleSxcbiAgaGFzUHJlc2VudGF0aW9uVHJhY2ssXG4gIHN1YnNjcmliZVRvUHJlc2VudGF0aW9uVG9waWMsXG4gIGNvbnN1bWVQcmVzZW50YXRpb25NZXNzYWdlcyxcbiAgZW5zdXJlUHJlc2VudGVyUm9sZSxcbiAgdHlwZSBGbGF0dGVuZWRUcmFjayxcbiAgdHlwZSBQYXJ0aWNpcGFudCxcbn0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IGNyZWF0ZVZpZGVvUGxheWVyQ29udHJvbHMsIGlzRGNsQ2FzdCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBEY2xDYXN0SW5mbyBmcm9tICcuL0RjbENhc3RJbmZvJztcbmltcG9ydCBDb21wYWN0RGNsQ2FzdCBmcm9tICcuL0NvbXBhY3REY2xDYXN0JztcbmltcG9ydCB7IGdldERjbENhc3RTdHlsZXMsIGdldERjbENhc3RDb2xvcnMgfSBmcm9tICcuL3N0eWxlcyc7XG5cbmNvbnN0IElDT05TID0ge1xuICBnZXQgRENMX0NBU1RfSUNPTigpIHtcbiAgICByZXR1cm4gYCR7Z2V0Q29udGVudFVybCgpfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy92aWRlby1jb250cm9sLWRjbC1jYXN0LnBuZ2A7XG4gIH0sXG4gIGdldCBDSEVWUk9OX1VQKCkge1xuICAgIHJldHVybiBgJHtnZXRDb250ZW50VXJsKCl9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2NoZXZyb24tdXAucG5nYDtcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBzaG93Y2FzZVN0YXRlOiB7XG4gIHNob3c6IGJvb2xlYW47XG4gIHBhcnRpY2lwYW50czogUGFydGljaXBhbnRbXTtcbiAgYWN0aXZlVHJhY2tTaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgb25TZWxlY3RUcmFjazogKCh0cmFjazogRmxhdHRlbmVkVHJhY2spID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBvblNldERlZmF1bHQ6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgb25DbG9zZTogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xufSA9IHtcbiAgc2hvdzogZmFsc2UsXG4gIHBhcnRpY2lwYW50czogW10sXG4gIGFjdGl2ZVRyYWNrU2lkOiB1bmRlZmluZWQsXG4gIG9uU2VsZWN0VHJhY2s6IHVuZGVmaW5lZCxcbiAgb25TZXREZWZhdWx0OiB1bmRlZmluZWQsXG4gIG9uQ2xvc2U6IHVuZGVmaW5lZCxcbn07XG5cbmV4cG9ydCBjb25zdCBzaGFyZVByZXNlbnRhdGlvblN0YXRlOiB7XG4gIHNob3c6IGJvb2xlYW47XG4gIG9uQ2xvc2U6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbn0gPSB7XG4gIHNob3c6IGZhbHNlLFxuICBvbkNsb3NlOiB1bmRlZmluZWQsXG59O1xuXG5sZXQgcHJlc2VudGF0aW9uU3Vic2NyaWJlZCA9IGZhbHNlO1xubGV0IGNvbnN1bWluZyA9IGZhbHNlO1xubGV0IHByZXNlbnRhdGlvblN5c3RlbTogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5sZXQgcGFydGljaXBhbnRQb2xsaW5nU3lzdGVtOiAoKGR0OiBudW1iZXIpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVHZXREY2xDYXN0SW5mbyhzdGF0ZTogU3RhdGUpIHtcbiAgY29uc3QgW2Vycm9yLCBkYXRhXSA9IGF3YWl0IGdldERjbENhc3RJbmZvKCk7XG4gIGlmIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBzdGF0ZS52aWRlb0NvbnRyb2wuZGNsQ2FzdCA9IGRhdGE7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RhcnRQcmVzZW50YXRpb25TeXN0ZW0oZW5naW5lOiBJRW5naW5lLCBzdGF0ZTogU3RhdGUpOiB2b2lkIHtcbiAgaWYgKHByZXNlbnRhdGlvblN5c3RlbSkgcmV0dXJuOyAvLyBBbHJlYWR5IHJ1bm5pbmdcbiAgcHJlc2VudGF0aW9uU3Vic2NyaWJlZCA9IHRydWU7XG4gIHN1YnNjcmliZVRvUHJlc2VudGF0aW9uVG9waWMoKTtcblxuICBjb25zdCBzeXN0ZW0gPSAoKSA9PiB7XG4gICAgaWYgKGNvbnN1bWluZykgcmV0dXJuOyAvLyBQcmV2ZW50IGNvbmN1cnJlbnQgcmVxdWVzdHNcbiAgICBjb25zdW1pbmcgPSB0cnVlO1xuICAgIGNvbnN1bWVQcmVzZW50YXRpb25NZXNzYWdlcygpXG4gICAgICAudGhlbihsYXRlc3RTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChsYXRlc3RTdGF0ZSA9PT0gJ3N0b3BwZWQnKSB7XG4gICAgICAgICAgc3RhdGUudmlkZW9Db250cm9sLnByZXNlbnRhdGlvblN0YXRlID0gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgaWYgKGxhdGVzdFN0YXRlKSB7XG4gICAgICAgICAgc3RhdGUudmlkZW9Db250cm9sLnByZXNlbnRhdGlvblN0YXRlID0gbGF0ZXN0U3RhdGU7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAvLyBTaWxlbnRseSBpZ25vcmUg4oCUIHdpbGwgcmV0cnkgbmV4dCBmcmFtZVxuICAgICAgICBjb25zb2xlLmxvZygnW0RjbENhc3RdIEZhaWxlZCB0byBjb25zdW1lIHByZXNlbnRhdGlvbiBtZXNzYWdlcycpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgY29uc3VtaW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfTtcblxuICBlbmdpbmUuYWRkU3lzdGVtKHN5c3RlbSk7XG4gIHByZXNlbnRhdGlvblN5c3RlbSA9IHN5c3RlbTtcbn1cblxuZnVuY3Rpb24gc3RvcFByZXNlbnRhdGlvblN5c3RlbShlbmdpbmU6IElFbmdpbmUsIHN0YXRlOiBTdGF0ZSk6IHZvaWQge1xuICBpZiAocHJlc2VudGF0aW9uU3lzdGVtKSB7XG4gICAgZW5naW5lLnJlbW92ZVN5c3RlbShwcmVzZW50YXRpb25TeXN0ZW0pO1xuICAgIHByZXNlbnRhdGlvblN5c3RlbSA9IG51bGw7XG4gIH1cbiAgc3RhdGUudmlkZW9Db250cm9sLnByZXNlbnRhdGlvblN0YXRlID0gdW5kZWZpbmVkO1xuICBwcmVzZW50YXRpb25TdWJzY3JpYmVkID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0UGFydGljaXBhbnRQb2xsaW5nKGVuZ2luZTogSUVuZ2luZSwgc3RhdGU6IFN0YXRlKTogdm9pZCB7XG4gIGlmIChwYXJ0aWNpcGFudFBvbGxpbmdTeXN0ZW0pIHJldHVybjsgLy8gQWxyZWFkeSBwb2xsaW5nXG5cbiAgY29uc3QgcG9sbCA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0cmFja3MgPSBhd2FpdCBnZXRBY3RpdmVTdHJlYW1zKCk7XG4gICAgaWYgKCF0cmFja3MpIHJldHVybjtcblxuICAgIC8vIERlYnVnOiBsb2cgdHJhY2tzIG9uIGVhY2ggcG9sbCB0byByZXZpZXcgcHJlc2VudGF0aW9uIGJvdCBtZXRhZGF0YVxuICAgIC8vIGNvbnNvbGUubG9nKCdbRGNsQ2FzdF0gUG9sbCB0cmFja3M6JywgSlNPTi5zdHJpbmdpZnkodHJhY2tzLCBudWxsLCAyKSk7XG5cbiAgICAvLyBLZWVwIHNob3djYXNlIG1vZGFsIGRhdGEgZnJlc2hcbiAgICBzaG93Y2FzZVN0YXRlLnBhcnRpY2lwYW50cyA9IGdyb3VwVHJhY2tzQnlQYXJ0aWNpcGFudCh0cmFja3MpO1xuXG4gICAgLy8gQ2hlY2sgZm9yIHByZXNlbnRhdGlvbiB0cmFja1xuICAgIGNvbnN0IGhhc1ByZXNlbnRhdGlvbiA9IGhhc1ByZXNlbnRhdGlvblRyYWNrKHRyYWNrcyk7XG5cbiAgICAvLyBjb25zb2xlLmxvZyhgW0RjbENhc3RdIFByZXNlbnRhdGlvbiB0cmFjayAke2hhc1ByZXNlbnRhdGlvbiA/ICdmb3VuZCcgOiAnbm90IGZvdW5kJ30gaW4gcG9sbGApO1xuXG4gICAgaWYgKGhhc1ByZXNlbnRhdGlvbiAmJiAhcHJlc2VudGF0aW9uU3Vic2NyaWJlZCkge1xuICAgICAgc3RhcnRQcmVzZW50YXRpb25TeXN0ZW0oZW5naW5lLCBzdGF0ZSk7XG4gICAgfSBlbHNlIGlmICghaGFzUHJlc2VudGF0aW9uICYmIHByZXNlbnRhdGlvblN1YnNjcmliZWQpIHtcbiAgICAgIHN0b3BQcmVzZW50YXRpb25TeXN0ZW0oZW5naW5lLCBzdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFBvbGwgaW1tZWRpYXRlbHksIHRoZW4gZXZlcnkgNSBzZWNvbmRzXG4gIHBvbGwoKTtcbiAgcGFydGljaXBhbnRQb2xsaW5nU3lzdGVtID0gc2V0SW50ZXJ2YWwoZW5naW5lLCBwb2xsLCA1MDAwKTtcbn1cblxuZnVuY3Rpb24gc3RvcFBhcnRpY2lwYW50UG9sbGluZyhlbmdpbmU6IElFbmdpbmUsIHN0YXRlOiBTdGF0ZSk6IHZvaWQge1xuICBpZiAocGFydGljaXBhbnRQb2xsaW5nU3lzdGVtKSB7XG4gICAgY2xlYXJJbnRlcnZhbChlbmdpbmUsIHBhcnRpY2lwYW50UG9sbGluZ1N5c3RlbSk7XG4gICAgcGFydGljaXBhbnRQb2xsaW5nU3lzdGVtID0gbnVsbDtcbiAgfVxuICBzdG9wUHJlc2VudGF0aW9uU3lzdGVtKGVuZ2luZSwgc3RhdGUpO1xufVxuXG5jb25zdCBEY2xDYXN0ID0gKHtcbiAgZW5naW5lLFxuICBzdGF0ZSxcbiAgZW50aXR5LFxuICB2aWRlbyxcbiAgcGxheWVyQWRkcmVzcyxcbn06IHtcbiAgZW5naW5lOiBJRW5naW5lO1xuICBzdGF0ZTogU3RhdGU7XG4gIGVudGl0eTogRW50aXR5O1xuICB2aWRlbzogRGVlcFJlYWRvbmx5T2JqZWN0PFBCVmlkZW9QbGF5ZXI+IHwgdW5kZWZpbmVkO1xuICBwbGF5ZXJBZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59KSA9PiB7XG4gIGNvbnN0IHsgVmlkZW9Db250cm9sU3RhdGUgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcbiAgY29uc3QgY29udHJvbHMgPSBjcmVhdGVWaWRlb1BsYXllckNvbnRyb2xzKGVudGl0eSwgZW5naW5lKTtcbiAgY29uc3Qgc3R5bGVzID0gZ2V0RGNsQ2FzdFN0eWxlcygpO1xuICBjb25zdCBjb2xvcnMgPSBnZXREY2xDYXN0Q29sb3JzKCk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSBSZWFjdEVjcy51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gUmVhY3RFY3MudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IG9uU2hvd1Nob3djYXNlTW9kYWwgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbGF0ZXN0VHJhY2tzID0gYXdhaXQgZ2V0QWN0aXZlU3RyZWFtcygpO1xuICAgIGlmICghbGF0ZXN0VHJhY2tzKSByZXR1cm47XG5cbiAgICAvLyBEZWJ1ZzogbG9nIGFsbCB0cmFjayBkYXRhIHRvIHJldmlldyBwcmVzZW50YXRpb24gYm90IG1ldGFkYXRhXG4gICAgY29uc29sZS5sb2coJ1tEY2xDYXN0XSBBY3RpdmUgdHJhY2tzOicsIEpTT04uc3RyaW5naWZ5KGxhdGVzdFRyYWNrcywgbnVsbCwgMikpO1xuXG4gICAgY29uc3QgY2xvc2VNb2RhbCA9ICgpID0+IHtcbiAgICAgIHNob3djYXNlU3RhdGUuc2hvdyA9IGZhbHNlO1xuICAgIH07XG5cbiAgICBzaG93Y2FzZVN0YXRlLnBhcnRpY2lwYW50cyA9IGdyb3VwVHJhY2tzQnlQYXJ0aWNpcGFudChsYXRlc3RUcmFja3MpO1xuXG4gICAgc2hvd2Nhc2VTdGF0ZS5vblNlbGVjdFRyYWNrID0gKHRyYWNrOiBGbGF0dGVuZWRUcmFjaykgPT4ge1xuICAgICAgY29udHJvbHMuc2V0U291cmNlKHRyYWNrLnNpZCk7XG4gICAgICBzaG93Y2FzZVN0YXRlLmFjdGl2ZVRyYWNrU2lkID0gdHJhY2suc2lkO1xuICAgICAgc3RhdGUudmlkZW9Db250cm9sLnNlbGVjdGVkU3RyZWFtID0gJ2RjbC1jYXN0JztcbiAgICB9O1xuXG4gICAgc2hvd2Nhc2VTdGF0ZS5vblNldERlZmF1bHQgPSAoKSA9PiB7XG4gICAgICBjb250cm9scy5zZXRTb3VyY2UoTElWRUtJVF9TVFJFQU1fU1JDKTtcbiAgICAgIHNob3djYXNlU3RhdGUuYWN0aXZlVHJhY2tTaWQgPSB1bmRlZmluZWQ7XG4gICAgICBzdGF0ZS52aWRlb0NvbnRyb2wuc2VsZWN0ZWRTdHJlYW0gPSAnZGNsLWNhc3QnO1xuICAgIH07XG5cbiAgICBzaG93Y2FzZVN0YXRlLm9uQ2xvc2UgPSBjbG9zZU1vZGFsO1xuXG4gICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICBzaG93Y2FzZVN0YXRlLnNob3cgPSB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGZldGNoRGNsQ2FzdEluZm8gPSBhc3luYyAoKSA9PiB7XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIHNldEVycm9yKGZhbHNlKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZUdldERjbENhc3RJbmZvKHN0YXRlKTtcblxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICBzZXRFcnJvcih0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHZpZGVvPy5zcmM/LnN0YXJ0c1dpdGgoJ2xpdmVraXQtdmlkZW86Ly8nKSAmJiAhc3RhdGUudmlkZW9Db250cm9sLnNlbGVjdGVkU3RyZWFtKSB7XG4gICAgICBzdGF0ZS52aWRlb0NvbnRyb2wuc2VsZWN0ZWRTdHJlYW0gPSAnZGNsLWNhc3QnO1xuICAgIH1cblxuICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gIH07XG5cbiAgY29uc3Qgb25TaGFyZVByZXNlbnRhdGlvbiA9ICgpID0+IHtcbiAgICBzaGFyZVByZXNlbnRhdGlvblN0YXRlLm9uQ2xvc2UgPSAoKSA9PiB7XG4gICAgICBzaGFyZVByZXNlbnRhdGlvblN0YXRlLnNob3cgPSBmYWxzZTtcbiAgICB9O1xuICAgIG5leHRUaWNrRnVuY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgICAgc2hhcmVQcmVzZW50YXRpb25TdGF0ZS5zaG93ID0gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZXNldFJvb21JZCA9IGFzeW5jICgpID0+IHtcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgY29uc3QgW2Vycm9yLCBkYXRhXSA9IGF3YWl0IHJlc2V0U3RyZWFtS2V5KCk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgc2V0RXJyb3IodHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZpZGVvQ29udHJvbCA9IFZpZGVvQ29udHJvbFN0YXRlLmdldE11dGFibGUoc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHkpO1xuICAgICAgdmlkZW9Db250cm9sLmVuZHNBdCA9IGRhdGE/LmVuZHNBdDtcbiAgICAgIGZldGNoRGNsQ2FzdEluZm8oKTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3RFY3MudXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaERjbENhc3RJbmZvKCk7XG4gICAgaWYgKHBsYXllckFkZHJlc3MpIHtcbiAgICAgIGVuc3VyZVByZXNlbnRlclJvbGUocGxheWVyQWRkcmVzcyk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgLy8gU3luYyBzZWxlY3RlZFN0cmVhbSB3aGVuIHZpZGVvLnNyYyBhcnJpdmVzIGFmdGVyIG1vdW50IChsYXRlLWpvaW5lciBmaXgpXG4gIGNvbnN0IHZpZGVvU3JjID0gdmlkZW8/LnNyYztcbiAgUmVhY3RFY3MudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodmlkZW9TcmM/LnN0YXJ0c1dpdGgoJ2xpdmVraXQtdmlkZW86Ly8nKSAmJiAhc3RhdGUudmlkZW9Db250cm9sLnNlbGVjdGVkU3RyZWFtKSB7XG4gICAgICBzdGF0ZS52aWRlb0NvbnRyb2wuc2VsZWN0ZWRTdHJlYW0gPSAnZGNsLWNhc3QnO1xuICAgIH1cbiAgfSwgW3ZpZGVvU3JjXSk7XG5cbiAgY29uc3QgaXNDYXN0QWN0aXZlID0gISEodmlkZW8/LnNyYyAmJiBpc0RjbENhc3QodmlkZW8uc3JjKSk7XG5cbiAgUmVhY3RFY3MudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNDYXN0QWN0aXZlKSB7XG4gICAgICBzdGFydFBhcnRpY2lwYW50UG9sbGluZyhlbmdpbmUsIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RvcFBhcnRpY2lwYW50UG9sbGluZyhlbmdpbmUsIHN0YXRlKTtcbiAgICB9XG4gIH0sIFtpc0Nhc3RBY3RpdmVdKTtcblxuICAvLyBBdXRvLW1pbmltaXplIHdoZW4gYSBwcmVzZW50YXRpb24gc3RhcnRzIHNvIHRoZSBjb21wYWN0IHZpZXdcbiAgLy8gKHdpdGggcHJlc2VudGF0aW9uIGNvbnRyb2xzKSBpcyBpbW1lZGlhdGVseSB2aXNpYmxlXG4gIFJlYWN0RWNzLnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN0YXRlLnZpZGVvQ29udHJvbC5wcmVzZW50YXRpb25TdGF0ZSkge1xuICAgICAgc3RhdGUudmlkZW9Db250cm9sLmlzTWluaW1pemVkID0gdHJ1ZTtcbiAgICB9XG4gIH0sIFshIXN0YXRlLnZpZGVvQ29udHJvbC5wcmVzZW50YXRpb25TdGF0ZV0pO1xuXG4gIGNvbnN0IGlzTWluaW1pemVkID0gc3RhdGUudmlkZW9Db250cm9sLmlzTWluaW1pemVkO1xuXG4gIHJldHVybiAoXG4gICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMuZnVsbENvbnRhaW5lcn0+XG4gICAgICB7LyogQ29tcGFjdCBiYXIg4oCUIGFsd2F5cyByZW5kZXJlZCwgdG9nZ2xlZCB2aWEgZGlzcGxheSAqL31cbiAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17eyBkaXNwbGF5OiBpc01pbmltaXplZCA/ICdmbGV4JyA6ICdub25lJywgd2lkdGg6ICcxMDAlJyB9fT5cbiAgICAgICAgPENvbXBhY3REY2xDYXN0XG4gICAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgIGVudGl0eT17ZW50aXR5fVxuICAgICAgICAgIHZpZGVvPXt2aWRlb31cbiAgICAgICAgICBvblNob3dTaG93Y2FzZU1vZGFsPXtvblNob3dTaG93Y2FzZU1vZGFsfVxuICAgICAgICAvPlxuICAgICAgPC9VaUVudGl0eT5cblxuICAgICAgey8qIEZ1bGwgcGFuZWwg4oCUIGFsd2F5cyByZW5kZXJlZCwgdG9nZ2xlZCB2aWEgZGlzcGxheSAqL31cbiAgICAgIDxVaUVudGl0eVxuICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgIGRpc3BsYXk6IGlzTWluaW1pemVkID8gJ25vbmUnIDogJ2ZsZXgnLFxuICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLnJvd0NlbnRlclNwYWNlQmV0d2Vlbn0+XG4gICAgICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMucm93Q2VudGVyfT5cbiAgICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17c3R5bGVzLmhlYWRlckljb259XG4gICAgICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgIHRleHR1cmVNb2RlOiAnc3RyZXRjaCcsXG4gICAgICAgICAgICAgICAgdGV4dHVyZTogeyBzcmM6IElDT05TLkRDTF9DQVNUX0lDT04gfSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgICAgdWlUZXh0PXt7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICc8Yj5EQ0wgQ2FzdDwvYj4nLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAyNCxcbiAgICAgICAgICAgICAgICBjb2xvcjogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnbWlkZGxlLWxlZnQnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17eyBtYXJnaW46IHsgbGVmdDogMTAgfSB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgc3RhdGUudmlkZW9Db250cm9sLmlzTWluaW1pemVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17c3R5bGVzLmNoZXZyb25CdXR0b259XG4gICAgICAgICAgICB1aUJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgdGV4dHVyZU1vZGU6ICdzdHJldGNoJyxcbiAgICAgICAgICAgICAgY29sb3I6IENvbG9yNC5XaGl0ZSgpLFxuICAgICAgICAgICAgICB0ZXh0dXJlOiB7XG4gICAgICAgICAgICAgICAgc3JjOiBJQ09OUy5DSEVWUk9OX1VQLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3N0eWxlcy5mdWxsV2lkdGhXaXRoQm90dG9tTWFyZ2lufT5cbiAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgIHVpVGV4dD17e1xuICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAnVXNlIGEgYnJvd3Nlci1iYXNlZCBEQ0wgQ2FzdCByb29tIHRvIGVhc2lseSBzdHJlYW0gY2FtZXJhIGFuZCBzY3JlZW4gZmVlZCB0byBhIHNjcmVlbiBpbiB5b3VyIHNjZW5lLicsXG4gICAgICAgICAgICAgIGZvbnRTaXplOiAxNixcbiAgICAgICAgICAgICAgY29sb3I6IENvbG9yNC5mcm9tSGV4U3RyaW5nKCcjQTA5QkE4JyksXG5cbiAgICAgICAgICAgICAgdGV4dEFsaWduOiAndG9wLWxlZnQnLFxuICAgICAgICAgICAgICB0ZXh0V3JhcDogJ3dyYXAnLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHVpVHJhbnNmb3JtPXtzdHlsZXMubWFyZ2luQm90dG9tU21hbGx9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAge2lzTG9hZGluZyAmJiAoXG4gICAgICAgICAgPExvYWRpbmdEb3RzXG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17c3R5bGVzLmxvYWRpbmdDb250YWluZXJ9XG4gICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7ZXJyb3IgJiYgKFxuICAgICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLmNvbHVtbkNlbnRlcmVkfT5cbiAgICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgICB1aVRleHQ9e3tcbiAgICAgICAgICAgICAgICB2YWx1ZTogJzxiPkZhaWxlZCB0byBmZXRjaCBEQ0wgQ2FzdCBpbmZvPC9iPicsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDE2LFxuICAgICAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuV2hpdGUoKSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3N0eWxlcy5tYXJnaW5Cb3R0b21TbWFsbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgICAgdWlUZXh0PXt7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICdQbGVhc2UgcmV0cnkuJyxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogMTYsXG4gICAgICAgICAgICAgICAgY29sb3I6IENvbG9yNC5HcmF5KCksXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBpZD1cImRjbF9jYXN0X3JldHJ5XCJcbiAgICAgICAgICAgICAgdmFsdWU9XCI8Yj5SZXRyeTwvYj5cIlxuICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgZm9udFNpemU9ezE2fVxuICAgICAgICAgICAgICBjb2xvcj17Y29sb3JzLndoaXRlfVxuICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZUdldERjbENhc3RJbmZvKHN0YXRlKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3N0eWxlcy5yZXRyeUJ1dHRvbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgKX1cblxuICAgICAgICB7IWlzTG9hZGluZyAmJiAhZXJyb3IgJiYgKFxuICAgICAgICAgIDxEY2xDYXN0SW5mb1xuICAgICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgICAgZW50aXR5PXtlbnRpdHl9XG4gICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAgIHZpZGVvPXt2aWRlb31cbiAgICAgICAgICAgIG9uUmVzZXRSb29tSWQ9e2hhbmRsZVJlc2V0Um9vbUlkfVxuICAgICAgICAgICAgb25TaG93U2hvd2Nhc2VNb2RhbD17b25TaG93U2hvd2Nhc2VNb2RhbH1cbiAgICAgICAgICAgIG9uU2hhcmVQcmVzZW50YXRpb249e29uU2hhcmVQcmVzZW50YXRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvVWlFbnRpdHk+XG4gICAgPC9VaUVudGl0eT5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERjbENhc3Q7XG4iXX0=
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9WaWRlb0NvbnRyb2wvRGNsQ2FzdC9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIsY0FBYyxFQUNkLG1CQUFtQixHQUVwQixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3RFLE9BQU8sRUFDTCxZQUFZLEVBQ1osYUFBYSxFQUNiLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsY0FBYyxFQUNkLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLFdBQVcsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTlELE1BQU0sS0FBSyxHQUFHO0lBQ1osSUFBSSxhQUFhO1FBQ2YsT0FBTyxHQUFHLGFBQWEsRUFBRSx3REFBd0QsQ0FBQztJQUNwRixDQUFDO0lBQ0QsSUFBSSxVQUFVO1FBQ1osT0FBTyxHQUFHLGFBQWEsRUFBRSw0Q0FBNEMsQ0FBQztJQUN4RSxDQUFDO0NBQ0YsQ0FBQztBQUVGLEtBQUssVUFBVSxvQkFBb0I7SUFDakMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLGNBQWMsRUFBRSxDQUFDO0lBQzdDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxFQUNmLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLEtBQUssRUFDTCxhQUFhLEdBT2QsRUFBRSxFQUFFO0lBQ0gsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELE1BQU0sUUFBUSxHQUFHLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRCxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDbEMsTUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNELE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVuRCxNQUFNLG1CQUFtQixHQUFHLEtBQUssSUFBSSxFQUFFO1FBQ3JDLE1BQU0sWUFBWSxHQUFHLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFFMUIsZUFBZSxDQUFDLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDeEQsWUFBWSxDQUFDO1lBQ1gsYUFBYSxFQUFFLENBQUMsS0FBcUIsRUFBRSxFQUFFO2dCQUN2QyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUIsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEIsQ0FBQztZQUNELFlBQVksRUFBRSxHQUFHLEVBQUU7Z0JBQ2pCLFFBQVEsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDdkMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4QixDQUFDO1lBQ0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsRUFBRTtTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRixNQUFNLGdCQUFnQixHQUFHLEtBQUssSUFBSSxFQUFFO1FBQ2xDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxvQkFBb0IsRUFBRSxDQUFDO1FBRTVDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQixDQUFDO2FBQU0sSUFBSSxLQUFLLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekYsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFFRCxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLEVBQUU7UUFDL0IscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUMsQ0FBQztJQUVGLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDbkMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBTSxjQUFjLEVBQUUsQ0FBQztRQUM3QyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUM5RSxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUM7WUFDbkMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFHdEIsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQzNCLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUdQLE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUM7SUFDNUIsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDdEIsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNoRixTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFZixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztJQUVuRCxPQUFPLENBQ0wsdUJBQUMsUUFBUSxJQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsYUFBYTtRQUV6Qyx1QkFBQyxRQUFRLElBQUMsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUM5RSx1QkFBQyxjQUFjLElBQ2IsTUFBTSxFQUFFLE1BQU0sRUFDZCxLQUFLLEVBQUUsS0FBSyxFQUNaLE1BQU0sRUFBRSxNQUFNLEVBQ2QsS0FBSyxFQUFFLEtBQUssRUFDWixtQkFBbUIsRUFBRSxtQkFBbUIsR0FDeEMsQ0FDTztRQUdYLHVCQUFDLFFBQVEsSUFDUCxXQUFXLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNO2dCQUN0QyxhQUFhLEVBQUUsUUFBUTtnQkFDdkIsS0FBSyxFQUFFLE1BQU07YUFDZDtZQUVELHVCQUFDLFFBQVEsSUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLHFCQUFxQjtnQkFDakQsdUJBQUMsUUFBUSxJQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsU0FBUztvQkFDckMsdUJBQUMsUUFBUSxJQUNQLFdBQVcsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUM5QixZQUFZLEVBQUU7NEJBQ1osV0FBVyxFQUFFLFNBQVM7NEJBQ3RCLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFO3lCQUN0QyxHQUNEO29CQUNGLHVCQUFDLFFBQVEsSUFDUCxNQUFNLEVBQUU7NEJBQ04sS0FBSyxFQUFFLGlCQUFpQjs0QkFDeEIsUUFBUSxFQUFFLEVBQUU7NEJBQ1osS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUU7NEJBQ3JCLFNBQVMsRUFBRSxhQUFhO3lCQUN6QixFQUNELFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUNyQyxDQUNPO2dCQUNYLHVCQUFDLFFBQVEsSUFDUCxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQ2pDLFdBQVcsRUFBRSxNQUFNLENBQUMsYUFBYSxFQUNqQyxZQUFZLEVBQUU7d0JBQ1osV0FBVyxFQUFFLFNBQVM7d0JBQ3RCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFO3dCQUNyQixPQUFPLEVBQUU7NEJBQ1AsR0FBRyxFQUFFLEtBQUssQ0FBQyxVQUFVO3lCQUN0QjtxQkFDRixHQUNELENBQ087WUFDWCx1QkFBQyxRQUFRLElBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyx5QkFBeUI7Z0JBQ3JELHVCQUFDLFFBQVEsSUFDUCxNQUFNLEVBQUU7d0JBQ04sS0FBSyxFQUNILHNHQUFzRzt3QkFDeEcsUUFBUSxFQUFFLEVBQUU7d0JBQ1osS0FBSyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO3dCQUV0QyxTQUFTLEVBQUUsVUFBVTt3QkFDckIsUUFBUSxFQUFFLE1BQU07cUJBQ2pCLEVBQ0QsV0FBVyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsR0FDckMsQ0FDTztZQUNWLFNBQVMsSUFBSSxDQUNaLHVCQUFDLFdBQVcsSUFDVixXQUFXLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUNwQyxNQUFNLEVBQUUsTUFBTSxHQUNkLENBQ0g7WUFDQSxLQUFLLElBQUksQ0FDUix1QkFBQyxRQUFRLElBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxjQUFjO2dCQUMxQyx1QkFBQyxRQUFRLElBQ1AsTUFBTSxFQUFFO3dCQUNOLEtBQUssRUFBRSxzQ0FBc0M7d0JBQzdDLFFBQVEsRUFBRSxFQUFFO3dCQUNaLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFO3FCQUN0QixFQUNELFdBQVcsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEdBQ3JDO2dCQUNGLHVCQUFDLFFBQVEsSUFDUCxNQUFNLEVBQUU7d0JBQ04sS0FBSyxFQUFFLGVBQWU7d0JBQ3RCLFFBQVEsRUFBRSxFQUFFO3dCQUNaLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFO3FCQUNyQixHQUNEO2dCQUNGLHVCQUFDLE1BQU0sSUFDTCxFQUFFLEVBQUMsZ0JBQWdCLEVBQ25CLEtBQUssRUFBQyxjQUFjLEVBQ3BCLE9BQU8sRUFBQyxXQUFXLEVBQ25CLFFBQVEsRUFBRSxFQUFFLEVBQ1osS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQ25CLFdBQVcsRUFBRSxHQUFHLEVBQUU7d0JBQ2hCLGdCQUFnQixFQUFFLENBQUM7b0JBQ3JCLENBQUMsRUFDRCxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsR0FDL0IsQ0FDTyxDQUNaO1lBRUEsQ0FBQyxTQUFTLElBQUksQ0FBQyxLQUFLLElBQUksQ0FDdkIsdUJBQUMsV0FBVyxJQUNWLEtBQUssRUFBRSxLQUFLLEVBQ1osTUFBTSxFQUFFLE1BQU0sRUFDZCxNQUFNLEVBQUUsTUFBTSxFQUNkLEtBQUssRUFBRSxLQUFLLEVBQ1osYUFBYSxFQUFFLGlCQUFpQixFQUNoQyxtQkFBbUIsRUFBRSxtQkFBbUIsRUFDeEMsbUJBQW1CLEVBQUUsbUJBQW1CLEdBQ3hDLENBQ0gsQ0FDUSxDQUNGLENBQ1osQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGVBQWUsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0RWNzLCB7IFVpRW50aXR5IH0gZnJvbSAnQGRjbC9yZWFjdC1lY3MnO1xuaW1wb3J0IHR5cGUgeyBEZWVwUmVhZG9ubHlPYmplY3QsIEVudGl0eSwgSUVuZ2luZSwgUEJWaWRlb1BsYXllciB9IGZyb20gJ0BkY2wvZWNzJztcbmltcG9ydCB7IENvbG9yNCB9IGZyb20gJ0BkY2wvc2RrL21hdGgnO1xuaW1wb3J0IHsgZ2V0Q29tcG9uZW50cyB9IGZyb20gJy4uLy4uLy4uL2RlZmluaXRpb25zJztcbmltcG9ydCB7IGdldENvbnRlbnRVcmwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBTdGF0ZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uLy4uL0J1dHRvbic7XG5pbXBvcnQgeyBMb2FkaW5nRG90cyB9IGZyb20gJy4uLy4uL0xvYWRpbmcnO1xuaW1wb3J0IHsgTElWRUtJVF9TVFJFQU1fU1JDIH0gZnJvbSAnLi4vTGl2ZVN0cmVhbSc7XG5pbXBvcnQge1xuICBnZXREY2xDYXN0SW5mbyxcbiAgZ2V0QWN0aXZlU3RyZWFtcyxcbiAgZ3JvdXBUcmFja3NCeVBhcnRpY2lwYW50LFxuICByZXNldFN0cmVhbUtleSxcbiAgZW5zdXJlUHJlc2VudGVyUm9sZSxcbiAgdHlwZSBGbGF0dGVuZWRUcmFjayxcbn0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IENBU1RfU1JDX1BSRUZJWCwgY3JlYXRlVmlkZW9QbGF5ZXJDb250cm9scyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIG9wZW5TaG93Y2FzZSxcbiAgY2xvc2VTaG93Y2FzZSxcbiAgc2V0U2hvd2Nhc2VBY3RpdmVUcmFjayxcbiAgb3BlblNoYXJlUHJlc2VudGF0aW9uLFxuICBjbG9zZVNoYXJlUHJlc2VudGF0aW9uLFxuICBzZXRTdHJlYW0sXG4gIHNldFBhcnRpY2lwYW50cyxcbiAgc2V0RGNsQ2FzdEluZm8sXG4gIG1pbmltaXplQ2FzdCxcbn0gZnJvbSAnLi4vLi4vYWN0aW9ucyc7XG5pbXBvcnQgRGNsQ2FzdEluZm8gZnJvbSAnLi9EY2xDYXN0SW5mbyc7XG5pbXBvcnQgQ29tcGFjdERjbENhc3QgZnJvbSAnLi9Db21wYWN0RGNsQ2FzdCc7XG5pbXBvcnQgeyBnZXREY2xDYXN0U3R5bGVzLCBnZXREY2xDYXN0Q29sb3JzIH0gZnJvbSAnLi9zdHlsZXMnO1xuXG5jb25zdCBJQ09OUyA9IHtcbiAgZ2V0IERDTF9DQVNUX0lDT04oKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvdmlkZW8tY29udHJvbC1kY2wtY2FzdC5wbmdgO1xuICB9LFxuICBnZXQgQ0hFVlJPTl9VUCgpIHtcbiAgICByZXR1cm4gYCR7Z2V0Q29udGVudFVybCgpfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9jaGV2cm9uLXVwLnBuZ2A7XG4gIH0sXG59O1xuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVHZXREY2xDYXN0SW5mbygpIHtcbiAgY29uc3QgW2Vycm9yLCBkYXRhXSA9IGF3YWl0IGdldERjbENhc3RJbmZvKCk7XG4gIGlmIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBzZXREY2xDYXN0SW5mbyhkYXRhKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBEY2xDYXN0ID0gKHtcbiAgZW5naW5lLFxuICBzdGF0ZSxcbiAgZW50aXR5LFxuICB2aWRlbyxcbiAgcGxheWVyQWRkcmVzcyxcbn06IHtcbiAgZW5naW5lOiBJRW5naW5lO1xuICBzdGF0ZTogU3RhdGU7XG4gIGVudGl0eTogRW50aXR5O1xuICB2aWRlbzogRGVlcFJlYWRvbmx5T2JqZWN0PFBCVmlkZW9QbGF5ZXI+IHwgdW5kZWZpbmVkO1xuICBwbGF5ZXJBZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59KSA9PiB7XG4gIGNvbnN0IHsgVmlkZW9Db250cm9sU3RhdGUgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcbiAgY29uc3QgY29udHJvbHMgPSBjcmVhdGVWaWRlb1BsYXllckNvbnRyb2xzKGVudGl0eSwgZW5naW5lKTtcbiAgY29uc3Qgc3R5bGVzID0gZ2V0RGNsQ2FzdFN0eWxlcygpO1xuICBjb25zdCBjb2xvcnMgPSBnZXREY2xDYXN0Q29sb3JzKCk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSBSZWFjdEVjcy51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gUmVhY3RFY3MudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IG9uU2hvd1Nob3djYXNlTW9kYWwgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbGF0ZXN0VHJhY2tzID0gYXdhaXQgZ2V0QWN0aXZlU3RyZWFtcygpO1xuICAgIGlmICghbGF0ZXN0VHJhY2tzKSByZXR1cm47XG5cbiAgICBzZXRQYXJ0aWNpcGFudHMoZ3JvdXBUcmFja3NCeVBhcnRpY2lwYW50KGxhdGVzdFRyYWNrcykpO1xuICAgIG9wZW5TaG93Y2FzZSh7XG4gICAgICBvblNlbGVjdFRyYWNrOiAodHJhY2s6IEZsYXR0ZW5lZFRyYWNrKSA9PiB7XG4gICAgICAgIGNvbnRyb2xzLnNldFNvdXJjZSh0cmFjay5zaWQpO1xuICAgICAgICBzZXRTaG93Y2FzZUFjdGl2ZVRyYWNrKHRyYWNrLnNpZCk7XG4gICAgICAgIHNldFN0cmVhbSgnZGNsLWNhc3QnKTtcbiAgICAgIH0sXG4gICAgICBvblNldERlZmF1bHQ6ICgpID0+IHtcbiAgICAgICAgY29udHJvbHMuc2V0U291cmNlKExJVkVLSVRfU1RSRUFNX1NSQyk7XG4gICAgICAgIHNldFNob3djYXNlQWN0aXZlVHJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgc2V0U3RyZWFtKCdkY2wtY2FzdCcpO1xuICAgICAgfSxcbiAgICAgIG9uQ2xvc2U6ICgpID0+IGNsb3NlU2hvd2Nhc2UoKSxcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBmZXRjaERjbENhc3RJbmZvID0gYXN5bmMgKCkgPT4ge1xuICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICBzZXRFcnJvcihmYWxzZSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVHZXREY2xDYXN0SW5mbygpO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHNldEVycm9yKHRydWUpO1xuICAgIH0gZWxzZSBpZiAodmlkZW8/LnNyYz8uc3RhcnRzV2l0aChDQVNUX1NSQ19QUkVGSVgpICYmICFzdGF0ZS52aWRlb0NvbnRyb2wuc2VsZWN0ZWRTdHJlYW0pIHtcbiAgICAgIHNldFN0cmVhbSgnZGNsLWNhc3QnKTtcbiAgICB9XG5cbiAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICB9O1xuXG4gIGNvbnN0IG9uU2hhcmVQcmVzZW50YXRpb24gPSAoKSA9PiB7XG4gICAgb3BlblNoYXJlUHJlc2VudGF0aW9uKCgpID0+IGNsb3NlU2hhcmVQcmVzZW50YXRpb24oKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVzZXRSb29tSWQgPSBhc3luYyAoKSA9PiB7XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIGNvbnN0IFtlcnJvciwgZGF0YV0gPSBhd2FpdCByZXNldFN0cmVhbUtleSgpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldEVycm9yKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2aWRlb0NvbnRyb2wgPSBWaWRlb0NvbnRyb2xTdGF0ZS5nZXRNdXRhYmxlKHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5KTtcbiAgICAgIHZpZGVvQ29udHJvbC5lbmRzQXQgPSBkYXRhPy5lbmRzQXQ7XG4gICAgICBmZXRjaERjbENhc3RJbmZvKCk7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0RWNzLnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gZW5zdXJlUHJlc2VudGVyUm9sZSByZXF1aXJlcyB0aGUgc3RyZWFtL3Jvb20gdGhhdCBmZXRjaERjbENhc3RJbmZvIGNyZWF0ZXMsXG4gICAgLy8gc28gaXQgbXVzdCBydW4gYWZ0ZXIgdGhhdCBjYWxsIHJlc29sdmVzLCBub3QgaW4gcGFyYWxsZWwgd2l0aCBpdCAoUFIgIzEzNTYpLlxuICAgIGZldGNoRGNsQ2FzdEluZm8oKS50aGVuKCgpID0+IHtcbiAgICAgIGlmIChwbGF5ZXJBZGRyZXNzKSB7XG4gICAgICAgIGVuc3VyZVByZXNlbnRlclJvbGUocGxheWVyQWRkcmVzcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBTeW5jIHNlbGVjdGVkU3RyZWFtIHdoZW4gdmlkZW8uc3JjIGFycml2ZXMgYWZ0ZXIgbW91bnQgKGxhdGUtam9pbmVyIGZpeClcbiAgY29uc3QgdmlkZW9TcmMgPSB2aWRlbz8uc3JjO1xuICBSZWFjdEVjcy51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh2aWRlb1NyYz8uc3RhcnRzV2l0aChDQVNUX1NSQ19QUkVGSVgpICYmICFzdGF0ZS52aWRlb0NvbnRyb2wuc2VsZWN0ZWRTdHJlYW0pIHtcbiAgICAgIHNldFN0cmVhbSgnZGNsLWNhc3QnKTtcbiAgICB9XG4gIH0sIFt2aWRlb1NyY10pO1xuXG4gIGNvbnN0IGlzTWluaW1pemVkID0gc3RhdGUudmlkZW9Db250cm9sLmlzTWluaW1pemVkO1xuXG4gIHJldHVybiAoXG4gICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMuZnVsbENvbnRhaW5lcn0+XG4gICAgICB7LyogQ29tcGFjdCBiYXIg4oCUIGFsd2F5cyByZW5kZXJlZCwgdG9nZ2xlZCB2aWEgZGlzcGxheSAqL31cbiAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17eyBkaXNwbGF5OiBpc01pbmltaXplZCA/ICdmbGV4JyA6ICdub25lJywgd2lkdGg6ICcxMDAlJyB9fT5cbiAgICAgICAgPENvbXBhY3REY2xDYXN0XG4gICAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgIGVudGl0eT17ZW50aXR5fVxuICAgICAgICAgIHZpZGVvPXt2aWRlb31cbiAgICAgICAgICBvblNob3dTaG93Y2FzZU1vZGFsPXtvblNob3dTaG93Y2FzZU1vZGFsfVxuICAgICAgICAvPlxuICAgICAgPC9VaUVudGl0eT5cblxuICAgICAgey8qIEZ1bGwgcGFuZWwg4oCUIGFsd2F5cyByZW5kZXJlZCwgdG9nZ2xlZCB2aWEgZGlzcGxheSAqL31cbiAgICAgIDxVaUVudGl0eVxuICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgIGRpc3BsYXk6IGlzTWluaW1pemVkID8gJ25vbmUnIDogJ2ZsZXgnLFxuICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLnJvd0NlbnRlclNwYWNlQmV0d2Vlbn0+XG4gICAgICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMucm93Q2VudGVyfT5cbiAgICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17c3R5bGVzLmhlYWRlckljb259XG4gICAgICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgIHRleHR1cmVNb2RlOiAnc3RyZXRjaCcsXG4gICAgICAgICAgICAgICAgdGV4dHVyZTogeyBzcmM6IElDT05TLkRDTF9DQVNUX0lDT04gfSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgICAgdWlUZXh0PXt7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICc8Yj5EQ0wgQ2FzdDwvYj4nLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAyNCxcbiAgICAgICAgICAgICAgICBjb2xvcjogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnbWlkZGxlLWxlZnQnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17eyBtYXJnaW46IHsgbGVmdDogMTAgfSB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IG1pbmltaXplQ2FzdCgpfVxuICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3N0eWxlcy5jaGV2cm9uQnV0dG9ufVxuICAgICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICAgIHRleHR1cmVNb2RlOiAnc3RyZXRjaCcsXG4gICAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuV2hpdGUoKSxcbiAgICAgICAgICAgICAgdGV4dHVyZToge1xuICAgICAgICAgICAgICAgIHNyYzogSUNPTlMuQ0hFVlJPTl9VUCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMuZnVsbFdpZHRoV2l0aEJvdHRvbU1hcmdpbn0+XG4gICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICB1aVRleHQ9e3tcbiAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgJ1VzZSBhIGJyb3dzZXItYmFzZWQgRENMIENhc3Qgcm9vbSB0byBlYXNpbHkgc3RyZWFtIGNhbWVyYSBhbmQgc2NyZWVuIGZlZWQgdG8gYSBzY3JlZW4gaW4geW91ciBzY2VuZS4nLFxuICAgICAgICAgICAgICBmb250U2l6ZTogMTYsXG4gICAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuZnJvbUhleFN0cmluZygnI0EwOUJBOCcpLFxuXG4gICAgICAgICAgICAgIHRleHRBbGlnbjogJ3RvcC1sZWZ0JyxcbiAgICAgICAgICAgICAgdGV4dFdyYXA6ICd3cmFwJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17c3R5bGVzLm1hcmdpbkJvdHRvbVNtYWxsfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgIHtpc0xvYWRpbmcgJiYgKFxuICAgICAgICAgIDxMb2FkaW5nRG90c1xuICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3N0eWxlcy5sb2FkaW5nQ29udGFpbmVyfVxuICAgICAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge2Vycm9yICYmIChcbiAgICAgICAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3N0eWxlcy5jb2x1bW5DZW50ZXJlZH0+XG4gICAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgICAgdWlUZXh0PXt7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICc8Yj5GYWlsZWQgdG8gZmV0Y2ggRENMIENhc3QgaW5mbzwvYj4nLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxNixcbiAgICAgICAgICAgICAgICBjb2xvcjogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXtzdHlsZXMubWFyZ2luQm90dG9tU21hbGx9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICAgIHVpVGV4dD17e1xuICAgICAgICAgICAgICAgIHZhbHVlOiAnUGxlYXNlIHJldHJ5LicsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDE2LFxuICAgICAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuR3JheSgpLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgaWQ9XCJkY2xfY2FzdF9yZXRyeVwiXG4gICAgICAgICAgICAgIHZhbHVlPVwiPGI+UmV0cnk8L2I+XCJcbiAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgIGZvbnRTaXplPXsxNn1cbiAgICAgICAgICAgICAgY29sb3I9e2NvbG9ycy53aGl0ZX1cbiAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICBmZXRjaERjbENhc3RJbmZvKCk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXtzdHlsZXMucmV0cnlCdXR0b259XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICl9XG5cbiAgICAgICAgeyFpc0xvYWRpbmcgJiYgIWVycm9yICYmIChcbiAgICAgICAgICA8RGNsQ2FzdEluZm9cbiAgICAgICAgICAgIHN0YXRlPXtzdGF0ZX1cbiAgICAgICAgICAgIGVudGl0eT17ZW50aXR5fVxuICAgICAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgICAgICB2aWRlbz17dmlkZW99XG4gICAgICAgICAgICBvblJlc2V0Um9vbUlkPXtoYW5kbGVSZXNldFJvb21JZH1cbiAgICAgICAgICAgIG9uU2hvd1Nob3djYXNlTW9kYWw9e29uU2hvd1Nob3djYXNlTW9kYWx9XG4gICAgICAgICAgICBvblNoYXJlUHJlc2VudGF0aW9uPXtvblNoYXJlUHJlc2VudGF0aW9ufVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L1VpRW50aXR5PlxuICAgIDwvVWlFbnRpdHk+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBEY2xDYXN0O1xuIl19
@@ -0,0 +1,2 @@
1
+ import type { IEngine } from '@dcl/ecs';
2
+ export declare function startPresentationDetection(engine: IEngine, getIsAdmin: () => boolean, getPlayerAddress: () => string | undefined, onPresentationStarted: () => void, onPresentationEnded: () => void): void;
@@ -0,0 +1,116 @@
1
+ import { clearInterval, setInterval } from '../../utils';
2
+ import { getAdminToolkitVideoControl, getVideoPlayers } from '../utils';
3
+ import { consumePresentationMessages, ensurePresenterRole, getActiveStreams, getDclCastInfo, groupTracksByParticipant, hasPresentationTrack, subscribeToPresentationTopic, } from '../api';
4
+ import { setParticipants, setDclCastInfo, setPresentationState, clearPresentationState, } from '../../actions';
5
+ const POLL_INTERVAL_MS = 1000;
6
+ const CONSUME_INTERVAL_MS = 250;
7
+ let detectionStarted = false;
8
+ let presentationActive = false;
9
+ let presentationEnded = false;
10
+ let startingSystem = false;
11
+ let presentationSystem = null;
12
+ let polling = false;
13
+ let consuming = false;
14
+ function signalPresentationEnded(onPresentationEnded) {
15
+ if (presentationEnded)
16
+ return;
17
+ presentationEnded = true;
18
+ onPresentationEnded();
19
+ }
20
+ async function startPresentationSystem(engine, getPlayerAddress, onPresentationEnded) {
21
+ if (presentationSystem || startingSystem)
22
+ return;
23
+ startingSystem = true;
24
+ try {
25
+ const [, castData] = await getDclCastInfo();
26
+ if (castData)
27
+ setDclCastInfo(castData);
28
+ const address = getPlayerAddress();
29
+ if (!address || !(await ensurePresenterRole(address)))
30
+ return;
31
+ if (!presentationActive)
32
+ return;
33
+ subscribeToPresentationTopic();
34
+ const consume = () => {
35
+ if (consuming)
36
+ return;
37
+ consuming = true;
38
+ consumePresentationMessages()
39
+ .then(latestState => {
40
+ if (!presentationActive)
41
+ return;
42
+ if (latestState === 'stopped') {
43
+ signalPresentationEnded(onPresentationEnded);
44
+ }
45
+ else if (latestState) {
46
+ setPresentationState(latestState);
47
+ }
48
+ })
49
+ .catch(error => {
50
+ console.error('[DclCast] Failed to consume presentation messages', error);
51
+ })
52
+ .finally(() => {
53
+ consuming = false;
54
+ });
55
+ };
56
+ presentationSystem = setInterval(engine, consume, CONSUME_INTERVAL_MS);
57
+ }
58
+ catch (error) {
59
+ console.error('[DclCast] Failed to start presentation system, will retry', error);
60
+ }
61
+ finally {
62
+ startingSystem = false;
63
+ }
64
+ }
65
+ function stopPresentationSystem(engine) {
66
+ if (presentationSystem) {
67
+ clearInterval(engine, presentationSystem);
68
+ presentationSystem = null;
69
+ }
70
+ clearPresentationState();
71
+ }
72
+ function isCastCapableScene(engine) {
73
+ const videoControl = getAdminToolkitVideoControl(engine);
74
+ return !!videoControl?.isEnabled && getVideoPlayers(engine).length > 0;
75
+ }
76
+ export function startPresentationDetection(engine, getIsAdmin, getPlayerAddress, onPresentationStarted, onPresentationEnded) {
77
+ if (detectionStarted)
78
+ return;
79
+ detectionStarted = true;
80
+ const poll = async () => {
81
+ if (!getIsAdmin() || !isCastCapableScene(engine))
82
+ return;
83
+ if (polling)
84
+ return;
85
+ polling = true;
86
+ try {
87
+ const tracks = await getActiveStreams();
88
+ if (!tracks)
89
+ return;
90
+ setParticipants(groupTracksByParticipant(tracks));
91
+ const hasPresentation = hasPresentationTrack(tracks);
92
+ if (hasPresentation) {
93
+ if (!presentationActive) {
94
+ presentationActive = true;
95
+ presentationEnded = false;
96
+ onPresentationStarted();
97
+ }
98
+ await startPresentationSystem(engine, getPlayerAddress, onPresentationEnded);
99
+ }
100
+ else if (presentationActive) {
101
+ presentationActive = false;
102
+ signalPresentationEnded(onPresentationEnded);
103
+ stopPresentationSystem(engine);
104
+ }
105
+ }
106
+ catch (error) {
107
+ console.error('[DclCast] Presentation detection poll failed, will retry', error);
108
+ }
109
+ finally {
110
+ polling = false;
111
+ }
112
+ };
113
+ poll();
114
+ setInterval(engine, poll, POLL_INTERVAL_MS);
115
+ }
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2VudGF0aW9uLWRldGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FkbWluLXRvb2xraXQtdWkvVmlkZW9Db250cm9sL0RjbENhc3QvcHJlc2VudGF0aW9uLWRldGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxlQUFlLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLDRCQUE0QixHQUM3QixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsc0JBQXNCLEdBQ3ZCLE1BQU0sZUFBZSxDQUFDO0FBdUJ2QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUc5QixNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztBQUloQyxJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQVU3QixJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQztBQUMvQixJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQUM5QixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFDM0IsSUFBSSxrQkFBa0IsR0FBa0MsSUFBSSxDQUFDO0FBQzdELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztBQUNwQixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFNdEIsU0FBUyx1QkFBdUIsQ0FBQyxtQkFBK0I7SUFDOUQsSUFBSSxpQkFBaUI7UUFBRSxPQUFPO0lBQzlCLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUN6QixtQkFBbUIsRUFBRSxDQUFDO0FBQ3hCLENBQUM7QUFFRCxLQUFL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QztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBSXBCLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBRWxELE1BQU0sZUFBZSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JELElBQUksZUFBZSxFQUFFLENBQUM7Z0JBSXBCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUN4QixrQkFBa0IsR0FBRyxJQUFJLENBQUM7b0JBQzFCLGlCQUFpQixHQUFHLEtBQUssQ0FBQztvQkFDMUIscUJBQXFCLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQztnQkFHRCxNQUFNLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBQy9FLENBQUM7aUJBQU0sSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUM5QixrQkFBa0IsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQzdDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUdmLE9BQU8sQ0FBQyxLQUFLLENBQUMsMERBQTBELEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkYsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBSUYsSUFBSSxFQUFFLENBQUM7SUFDUCxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElFbmdpbmUgfSBmcm9tICdAZGNsL2Vjcyc7XG5pbXBvcnQgeyBjbGVhckludGVydmFsLCBzZXRJbnRlcnZhbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGdldEFkbWluVG9vbGtpdFZpZGVvQ29udHJvbCwgZ2V0VmlkZW9QbGF5ZXJzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgY29uc3VtZVByZXNlbnRhdGlvbk1lc3NhZ2VzLFxuICBlbnN1cmVQcmVzZW50ZXJSb2xlLFxuICBnZXRBY3RpdmVTdHJlYW1zLFxuICBnZXREY2xDYXN0SW5mbyxcbiAgZ3JvdXBUcmFja3NCeVBhcnRpY2lwYW50LFxuICBoYXNQcmVzZW50YXRpb25UcmFjayxcbiAgc3Vic2NyaWJlVG9QcmVzZW50YXRpb25Ub3BpYyxcbn0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7XG4gIHNldFBhcnRpY2lwYW50cyxcbiAgc2V0RGNsQ2FzdEluZm8sXG4gIHNldFByZXNlbnRhdGlvblN0YXRlLFxuICBjbGVhclByZXNlbnRhdGlvblN0YXRlLFxufSBmcm9tICcuLi8uLi9hY3Rpb25zJztcblxuLy8gQmFja2dyb3VuZCBwcmVzZW50YXRpb24gZGV0ZWN0aW9uLlxuLy9cbi8vIFJ1bnMgYXMgYSBib290LXRpbWUgZW5naW5lIHNlcnZpY2UgKGZvciBhZG1pbnMpIGluc3RlYWQgb2YgYXMgYSBzaWRlIGVmZmVjdCBvZlxuLy8gdGhlIERjbENhc3QgY29tcG9uZW50IG1vdW50aW5nLCBzbyB0aGUgcGFuZWwgY2FuIGF1dG8tb3BlbiByZWdhcmRsZXNzIG9mIHdoaWNoXG4vLyB0YWIgKGlmIGFueSkgdGhlIGFkbWluIGlzIHZpZXdpbmcuIERhdGEgZmxvd3Mgb25lIHdheTpcbi8vICAgZGV0ZWN0b3IgLT4gKGFjdGlvbnMpIC0+IHN0YXRlLnZpZGVvQ29udHJvbCAtPiB2aWV3IGNvbXBvbmVudHMuXG4vLyBJdCBuZXZlciByZWFkcyBvciBhc3NpZ25zIGBzdGF0ZWAgZGlyZWN0bHkg4oCUIGFsbCB3cml0ZXMgZ28gdGhyb3VnaCBhY3Rpb25zLFxuLy8gd2hpY2ggb3duIHRoZSBzdG9yZSBzaW5nbGV0b24uXG4vL1xuLy8gQXV0by1vcGVuIGlzIHRyaWdnZXJlZCBieSB0aGUgcHJlc2VudGF0aW9uIGJvdCdzIExpdmVLaXQgVFJBQ0sgYXBwZWFyaW5nXG4vLyAoaGFzUHJlc2VudGF0aW9uVHJhY2sgb3ZlciBnZXRBY3RpdmVTdHJlYW1zKSDigJQgYSBzaWduYWwgYXZhaWxhYmxlIHRvIGV2ZXJ5IHNjZW5lXG4vLyBwYXJ0aWNpcGFudC4gU2xpZGUtbGV2ZWwgc3RhdGUgKHBhZ2UgY291bnQsIGN1cnJlbnQgc2xpZGUsIHZpZGVvcykgYXJyaXZlc1xuLy8gc2VwYXJhdGVseSBvdmVyIHRoZSAncHJlc2VudGF0aW9uJyBjb21tcyB0b3BpYywgd2hpY2ggdGhlIGJvdCBvbmx5IHNlcnZlcyB0b1xuLy8gcHJlc2VudGVycyDigJQgaGVuY2Ugd2UgcHJvbW90ZSB0aGUgYWRtaW4gYmVmb3JlIHN1YnNjcmliaW5nIChnZXREY2xDYXN0SW5mbyBsYXppbHlcbi8vIGNyZWF0ZXMgdGhlIHJvb20gZW5zdXJlUHJlc2VudGVyUm9sZSBkZXBlbmRzIG9uLCBzbyB0aGUgdHdvIG11c3QgYmUgc2VxdWVuY2VkKS5cblxuLy8gRGV0ZWN0aW9uIHBvbGwgY2FkZW5jZS4gVGhlIHBvbGwgcnVucyBjb250aW51b3VzbHkg4oCUIGl0IG5ldmVyIHN0b3BzIG9uIGRldGVjdCDigJRcbi8vIGJlY2F1c2UgaXQgaXMgdGhlIGF1dGhvcml0YXRpdmUgdGVhcmRvd24vcmUtYXJtIHBhdGggYW5kIHRoZSBvbmx5IGJhY2tzdG9wIGZvciBhblxuLy8gdW5ncmFjZWZ1bCBib3QgZXhpdCB0aGF0IHNlbmRzIG5vIGBwcmVzZW50YXRpb246c3RvcHBlZGAuIEl0cyBjb3N0IChvbmUgcnVudGltZVxuLy8gY2FsbCBwZXIgc2Vjb25kKSBpcyBkd2FyZmVkIGJ5IHRoZSBjb25zdW1lIHN5c3RlbSBiZWxvdywgc28ga2VlcCBpdCBjb250aW51b3VzO1xuLy8gZG8gbm90IFwib3B0aW1pemVcIiBpdCBpbnRvIGEgc3RvcC1vbi1kZXRlY3QsIHdoaWNoIHdvdWxkIHdlZGdlIGRldGVjdGlvbi5cbmNvbnN0IFBPTExfSU5URVJWQUxfTVMgPSAxMDAwO1xuLy8gU3RhdHVzIGNvbnN1bWUgY2FkZW5jZS4gfjRIeiBpcyB2aXN1YWxseSBpbnN0YW50IGZvciBhIHNsaWRlIGNvdW50ZXIgLyB2aWRlbyBzdGF0ZVxuLy8gYW5kIGZhciBjaGVhcGVyIHRoYW4gZHJhaW5pbmcgdGhlIGNvbW1zIHRvcGljIGV2ZXJ5IGZyYW1lLlxuY29uc3QgQ09OU1VNRV9JTlRFUlZBTF9NUyA9IDI1MDtcblxuLy8gQm9vdC1vbmNlIGd1YXJkOiB0aGUgcG9sbCBpcyByZWdpc3RlcmVkIGV4YWN0bHkgb25jZSBwZXIgc2Vzc2lvbiBhbmQgcnVucyBmb3IgdGhlXG4vLyBzY2VuZSdzIGxpZmV0aW1lIChzZWUgdGhlIFBPTExfSU5URVJWQUxfTVMgbm90ZSBhYm92ZSkuXG5sZXQgZGV0ZWN0aW9uU3RhcnRlZCA9IGZhbHNlO1xuXG4vLyBQcmVzZW50YXRpb24gbGlmZWN5Y2xlLiBwcmVzZW50YXRpb25BY3RpdmUgaXMgYW4gZWRnZSB0cmFja2VyIGZvciB0aGUgYm90XG4vLyB0cmFjayAoZHJpdmVzIHRoZSBvbmUtc2hvdCBhdXRvLW9wZW4pOyBwcmVzZW50YXRpb25FbmRlZCBsYXRjaGVzIHRoZSBlbmRcbi8vIGNhbGxiYWNrIHNvIGl0IGZpcmVzIG9uY2UgcGVyIHByZXNlbnRhdGlvbiBldmVuIHRob3VnaCB0d28gcGF0aHMgY2FuIHNpZ25hbFxuLy8gdGhlIGVuZCAoc2VlIHNpZ25hbFByZXNlbnRhdGlvbkVuZGVkKS4gcHJlc2VudGF0aW9uU3lzdGVtIGlzIHRoZSBydW5uaW5nXG4vLyBjb25zdW1lIHN5c3RlbSAobnVsbCA9IG5vdCBydW5uaW5nKSBhbmQgaXMgb25seSBhc3NpZ25lZCBvbiBzdWNjZXNzZnVsIHNldHVwLFxuLy8gc28gYSBmYWlsZWQgc2V0dXAgbmF0dXJhbGx5IHJldHJpZXMgb24gdGhlIG5leHQgcG9sbCB0aWNrLiBzdGFydGluZ1N5c3RlbVxuLy8gZ3VhcmRzIGFnYWluc3QgY29uY3VycmVudCBzZXR1cCB3aGlsZSBhbiBpbi1mbGlnaHQgYXR0ZW1wdCBpcyBhd2FpdGluZywgYW5kXG4vLyBwb2xsaW5nIC8gY29uc3VtaW5nIGd1YXJkIGFnYWluc3QgYSBzbG93IHRpY2sgb3ZlcmxhcHBpbmcgdGhlIG5leHQgb25lLlxubGV0IHByZXNlbnRhdGlvbkFjdGl2ZSA9IGZhbHNlO1xubGV0IHByZXNlbnRhdGlvbkVuZGVkID0gZmFsc2U7XG5sZXQgc3RhcnRpbmdTeXN0ZW0gPSBmYWxzZTtcbmxldCBwcmVzZW50YXRpb25TeXN0ZW06ICgoZHQ6IG51bWJlcikgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbmxldCBwb2xsaW5nID0gZmFsc2U7XG5sZXQgY29uc3VtaW5nID0gZmFsc2U7XG5cbi8vIEZpcmUgdGhlIGVuZCBjYWxsYmFjayBleGFjdGx5IG9uY2UgcGVyIHByZXNlbnRhdGlvbi4gQm90aCB0aGUgYm90J3MgY29tbXNcbi8vIGBwcmVzZW50YXRpb246c3RvcHBlZGAgbWVzc2FnZSAoY29uc3VtZSkgYW5kIHRoZSB0cmFjay1nb25lIHBvbGwgZWRnZSBzaWduYWxcbi8vIHRoZSBlbmQ7IHdpdGhvdXQgdGhpcyBsYXRjaCBkaXNtaXNzUHJlc2VudGF0aW9uIHJ1bnMgdHdpY2Ugb24gYSBncmFjZWZ1bCBzdG9wLlxuLy8gUmVzZXQgb24gdGhlIHN0YXJ0IGVkZ2Ugc28gdGhlIG5leHQgcHJlc2VudGF0aW9uIGNhbiBlbmQgYWdhaW4uXG5mdW5jdGlvbiBzaWduYWxQcmVzZW50YXRpb25FbmRlZChvblByZXNlbnRhdGlvbkVuZGVkOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gIGlmIChwcmVzZW50YXRpb25FbmRlZCkgcmV0dXJuO1xuICBwcmVzZW50YXRpb25FbmRlZCA9IHRydWU7XG4gIG9uUHJlc2VudGF0aW9uRW5kZWQoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRQcmVzZW50YXRpb25TeXN0ZW0oXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgZ2V0UGxheWVyQWRkcmVzczogKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBvblByZXNlbnRhdGlvbkVuZGVkOiAoKSA9PiB2b2lkLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwcmVzZW50YXRpb25TeXN0ZW0gfHwgc3RhcnRpbmdTeXN0ZW0pIHJldHVybjtcbiAgc3RhcnRpbmdTeXN0ZW0gPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgLy8gVGhlIGJvdCBvbmx5IHNlcnZlcyBwcmVzZW50YXRpb246c3RhdGUgdG8gcHJlc2VudGVycywgc28gcHJvbW90ZSB0aGlzIGFkbWluXG4gICAgLy8gZmlyc3QuIGdldERjbENhc3RJbmZvIGxhemlseSBjcmVhdGVzIHRoZSByb29tIGVuc3VyZVByZXNlbnRlclJvbGUgZGVwZW5kcyBvbixcbiAgICAvLyBzbyBpdCBtdXN0IHJlc29sdmUgYmVmb3JlIGVuc3VyZVByZXNlbnRlclJvbGUgKHNlZSBQUiAjMTM1NikuXG4gICAgY29uc3QgWywgY2FzdERhdGFdID0gYXdhaXQgZ2V0RGNsQ2FzdEluZm8oKTtcbiAgICBpZiAoY2FzdERhdGEpIHNldERjbENhc3RJbmZvKGNhc3REYXRhKTtcblxuICAgIC8vIEJhaWwgKGxlYXZpbmcgcHJlc2VudGF0aW9uU3lzdGVtIG51bGwpIGlmIHdlIGNvdWxkbid0IGNvbmZpcm0gcHJlc2VudGVyXG4gICAgLy8gc3RhdHVzIOKAlCB0aGUgY29uc3VtZSBsb29wIHdvdWxkIG90aGVyd2lzZSBydW4gZm9yZXZlciByZWNlaXZpbmcgbm90aGluZyxcbiAgICAvLyB3aXRoIG5vIHJldHJ5LiBUaGUgbmV4dCBwb2xsIHRpY2sgcmUtYXR0ZW1wdHMgdGhlIHdob2xlIHNldHVwLlxuICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRQbGF5ZXJBZGRyZXNzKCk7XG4gICAgaWYgKCFhZGRyZXNzIHx8ICEoYXdhaXQgZW5zdXJlUHJlc2VudGVyUm9sZShhZGRyZXNzKSkpIHJldHVybjtcblxuICAgIC8vIFRoZSBwcmVzZW50YXRpb24gbWF5IGhhdmUgZW5kZWQgd2hpbGUgd2Ugd2VyZSBzZXR0aW5nIHVwIOKAlCBiYWlsIHNvIHdlIGRvbid0XG4gICAgLy8gbGVhdmUgYW4gb3JwaGFuZWQgc3lzdGVtIHJ1bm5pbmcgZm9yIGEgcHJlc2VudGF0aW9uIHRoYXQncyBhbHJlYWR5IGdvbmUuXG4gICAgaWYgKCFwcmVzZW50YXRpb25BY3RpdmUpIHJldHVybjtcblxuICAgIHN1YnNjcmliZVRvUHJlc2VudGF0aW9uVG9waWMoKTtcblxuICAgIC8vIEtlZXAgcHJlc2VudGF0aW9uU3RhdGUgKHNsaWRlIGNvdW50ZXIsIHZpZGVvIHN0YXRlKSBpbiBzeW5jIHdpdGggdGhlIHRvcGljLFxuICAgIC8vIHRocm90dGxlZCB0byBDT05TVU1FX0lOVEVSVkFMX01TIOKAlCBkcmFpbmluZyBldmVyeSBmcmFtZSBpcyBmYXIgbW9yZSB0aGFuIGFcbiAgICAvLyBzbGlkZSBjb3VudGVyIG5lZWRzLiBUaGUgYGNvbnN1bWluZ2AgZ3VhcmQgcHJldmVudHMgb3ZlcmxhcCBpZiBhIGRyYWluXG4gICAgLy8gb3V0bGFzdHMgb25lIGludGVydmFsOyBlYWNoIGRyYWluIHJldHVybnMgdGhlIGxhdGVzdCBzdGF0ZSwgc28gdGhyb3R0bGluZ1xuICAgIC8vIG5ldmVyIGRyb3BzIHRoZSBmaW5hbCBtZXNzYWdlIChpbmNsdWRpbmcgYHByZXNlbnRhdGlvbjpzdG9wcGVkYCkuXG4gICAgY29uc3QgY29uc3VtZSA9ICgpID0+IHtcbiAgICAgIGlmIChjb25zdW1pbmcpIHJldHVybjtcbiAgICAgIGNvbnN1bWluZyA9IHRydWU7XG4gICAgICBjb25zdW1lUHJlc2VudGF0aW9uTWVzc2FnZXMoKVxuICAgICAgICAudGhlbihsYXRlc3RTdGF0ZSA9PiB7XG4gICAgICAgICAgLy8gVGhpcyBwcm9taXNlIGNhbiByZXNvbHZlIGFmdGVyIGEgZmFsbGluZy1lZGdlIHRlYXJkb3duIGNsZWFyZWQgdGhlXG4gICAgICAgICAgLy8gc3RhdGUgKHN0b3BQcmVzZW50YXRpb25TeXN0ZW0pLiBCYWlsIGlmIHRoZSBwcmVzZW50YXRpb24gaXMgbm8gbG9uZ2VyXG4gICAgICAgICAgLy8gYWN0aXZlIHNvIGEgbGF0ZSBkcmFpbiBjYW4ndCByZXBvcHVsYXRlIHN0YWxlIHNsaWRlIGNvbnRyb2xzIHRoYXRcbiAgICAgICAgICAvLyBub3RoaW5nIHdvdWxkIHRoZW4gY2xlYXIuXG4gICAgICAgICAgaWYgKCFwcmVzZW50YXRpb25BY3RpdmUpIHJldHVybjtcbiAgICAgICAgICBpZiAobGF0ZXN0U3RhdGUgPT09ICdzdG9wcGVkJykge1xuICAgICAgICAgICAgc2lnbmFsUHJlc2VudGF0aW9uRW5kZWQob25QcmVzZW50YXRpb25FbmRlZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChsYXRlc3RTdGF0ZSkge1xuICAgICAgICAgICAgc2V0UHJlc2VudGF0aW9uU3RhdGUobGF0ZXN0U3RhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAvLyBjb25zdW1lUHJlc2VudGF0aW9uTWVzc2FnZXMgc3dhbGxvd3MgaXRzIG93biBlcnJvcnMgYW5kIHJlc29sdmVzIHRvXG4gICAgICAgICAgLy8gdW5kZWZpbmVkLCBzbyB0aGlzIG9ubHkgZmlyZXMgb24gYW4gdW5leHBlY3RlZCByZWplY3Rpb24g4oCUIGxvZyBpdFxuICAgICAgICAgIC8vIHJhdGhlciB0aGFuIGRyb3BwaW5nIGl0IHNpbGVudGx5LCB0aGVuIHJldHJ5IG9uIHRoZSBuZXh0IHRpY2suXG4gICAgICAgICAgY29uc29sZS5lcnJvcignW0RjbENhc3RdIEZhaWxlZCB0byBjb25zdW1lIHByZXNlbnRhdGlvbiBtZXNzYWdlcycsIGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGNvbnN1bWluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJlc2VudGF0aW9uU3lzdGVtID0gc2V0SW50ZXJ2YWwoZW5naW5lLCBjb25zdW1lLCBDT05TVU1FX0lOVEVSVkFMX01TKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBTZXR1cCBmYWlsZWQgKGUuZy4gYSBuZXR3b3JrIGNhbGwgcmVqZWN0ZWQpLiBMZWF2ZSBwcmVzZW50YXRpb25TeXN0ZW0gbnVsbFxuICAgIC8vIHNvIHRoZSBuZXh0IHBvbGwgdGljayByZXRyaWVzIGluc3RlYWQgb2Ygd2VkZ2luZyBkZXRlY3Rpb24gcGVybWFuZW50bHkuXG4gICAgY29uc29sZS5lcnJvcignW0RjbENhc3RdIEZhaWxlZCB0byBzdGFydCBwcmVzZW50YXRpb24gc3lzdGVtLCB3aWxsIHJldHJ5JywgZXJyb3IpO1xuICB9IGZpbmFsbHkge1xuICAgIHN0YXJ0aW5nU3lzdGVtID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcFByZXNlbnRhdGlvblN5c3RlbShlbmdpbmU6IElFbmdpbmUpOiB2b2lkIHtcbiAgaWYgKHByZXNlbnRhdGlvblN5c3RlbSkge1xuICAgIGNsZWFySW50ZXJ2YWwoZW5naW5lLCBwcmVzZW50YXRpb25TeXN0ZW0pO1xuICAgIHByZXNlbnRhdGlvblN5c3RlbSA9IG51bGw7XG4gIH1cbiAgY2xlYXJQcmVzZW50YXRpb25TdGF0ZSgpO1xufVxuXG5mdW5jdGlvbiBpc0Nhc3RDYXBhYmxlU2NlbmUoZW5naW5lOiBJRW5naW5lKTogYm9vbGVhbiB7XG4gIGNvbnN0IHZpZGVvQ29udHJvbCA9IGdldEFkbWluVG9vbGtpdFZpZGVvQ29udHJvbChlbmdpbmUpO1xuICByZXR1cm4gISF2aWRlb0NvbnRyb2w/LmlzRW5hYmxlZCAmJiBnZXRWaWRlb1BsYXllcnMoZW5naW5lKS5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRQcmVzZW50YXRpb25EZXRlY3Rpb24oXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgZ2V0SXNBZG1pbjogKCkgPT4gYm9vbGVhbixcbiAgZ2V0UGxheWVyQWRkcmVzczogKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBvblByZXNlbnRhdGlvblN0YXJ0ZWQ6ICgpID0+IHZvaWQsXG4gIG9uUHJlc2VudGF0aW9uRW5kZWQ6ICgpID0+IHZvaWQsXG4pOiB2b2lkIHtcbiAgaWYgKGRldGVjdGlvblN0YXJ0ZWQpIHJldHVybjtcbiAgZGV0ZWN0aW9uU3RhcnRlZCA9IHRydWU7XG5cbiAgY29uc3QgcG9sbCA9IGFzeW5jICgpID0+IHtcbiAgICAvLyBBZG1pbnMgb25seSwgYW5kIG9ubHkgaW4gc2NlbmVzIHdpdGggY2FzdCBzY3JlZW5zLiBSZS1jaGVja2VkIGVhY2ggdGljayBzb1xuICAgIC8vIGRldGVjdGlvbiBiZWdpbnMgYXMgc29vbiBhcyB0aGUgcGxheWVyL2FkbWluIGxpc3QgcmVzb2x2ZXMuXG4gICAgaWYgKCFnZXRJc0FkbWluKCkgfHwgIWlzQ2FzdENhcGFibGVTY2VuZShlbmdpbmUpKSByZXR1cm47XG5cbiAgICAvLyBTa2lwIGlmIGEgcHJldmlvdXMgdGljayBpcyBzdGlsbCBpbiBmbGlnaHQg4oCUIGdldEFjdGl2ZVN0cmVhbXMgYW5kIHRoZSBzeXN0ZW1cbiAgICAvLyBzZXR1cCBpdCB0cmlnZ2VycyBjYW4gb3V0bGFzdCBQT0xMX0lOVEVSVkFMX01TLiBNaXJyb3JzIHRoZSBgY29uc3VtaW5nYCBndWFyZC5cbiAgICBpZiAocG9sbGluZykgcmV0dXJuO1xuICAgIHBvbGxpbmcgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmFja3MgPSBhd2FpdCBnZXRBY3RpdmVTdHJlYW1zKCk7XG4gICAgICBpZiAoIXRyYWNrcykgcmV0dXJuO1xuXG4gICAgICAvLyBLZWVwIHRoZSBTcGVha2VyIFNob3djYXNlIGxpc3QgZnJlc2ggKGFsc28gZHJpdmVzIHRoZSBjb21wYWN0IHZpZXcnc1xuICAgICAgLy8gcHJlc2VudGF0aW9uIGNvbnRyb2xzIHZpYSBwcmVzZW50YXRpb25Cb3RJblJvb20pLlxuICAgICAgc2V0UGFydGljaXBhbnRzKGdyb3VwVHJhY2tzQnlQYXJ0aWNpcGFudCh0cmFja3MpKTtcblxuICAgICAgY29uc3QgaGFzUHJlc2VudGF0aW9uID0gaGFzUHJlc2VudGF0aW9uVHJhY2sodHJhY2tzKTtcbiAgICAgIGlmIChoYXNQcmVzZW50YXRpb24pIHtcbiAgICAgICAgLy8gQXV0by1vcGVuIG9uY2UsIG9uIHRoZSB0cmFjay1hcHBlYXJlZCBlZGdlIOKAlCBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIHRoZVxuICAgICAgICAvLyBjb25zdW1lIHN5c3RlbSBoYXMgZmluaXNoZWQgKG9yIGZhaWxlZCkgaXRzIHNldHVwLCBzbyBhIHNldHVwIHJldHJ5IG5ldmVyXG4gICAgICAgIC8vIHJlLW9wZW5zIHRoZSBwYW5lbCB0aGUgYWRtaW4gbWF5IGhhdmUgc2luY2UgY2xvc2VkLlxuICAgICAgICBpZiAoIXByZXNlbnRhdGlvbkFjdGl2ZSkge1xuICAgICAgICAgIHByZXNlbnRhdGlvbkFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgcHJlc2VudGF0aW9uRW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICBvblByZXNlbnRhdGlvblN0YXJ0ZWQoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFbnN1cmUgdGhlIGNvbnN1bWUgc3lzdGVtIGlzIHJ1bm5pbmcuIFJldHJpZXMgYSBwcmV2aW91c2x5IGZhaWxlZCBzZXR1cFxuICAgICAgICAvLyBiZWNhdXNlIHByZXNlbnRhdGlvblN5c3RlbSBpcyBvbmx5IGFzc2lnbmVkIG9uIHN1Y2Nlc3MuXG4gICAgICAgIGF3YWl0IHN0YXJ0UHJlc2VudGF0aW9uU3lzdGVtKGVuZ2luZSwgZ2V0UGxheWVyQWRkcmVzcywgb25QcmVzZW50YXRpb25FbmRlZCk7XG4gICAgICB9IGVsc2UgaWYgKHByZXNlbnRhdGlvbkFjdGl2ZSkge1xuICAgICAgICBwcmVzZW50YXRpb25BY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgc2lnbmFsUHJlc2VudGF0aW9uRW5kZWQob25QcmVzZW50YXRpb25FbmRlZCk7XG4gICAgICAgIHN0b3BQcmVzZW50YXRpb25TeXN0ZW0oZW5naW5lKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gQSByZWplY3RlZCBuZXR3b3JrIGNhbGwgKGdldEFjdGl2ZVN0cmVhbXMpIG9yIHNldHVwIHN0ZXAgd291bGQgb3RoZXJ3aXNlXG4gICAgICAvLyBzdXJmYWNlIGFzIGFuIHVuaGFuZGxlZCByZWplY3Rpb247IGxvZyBhbmQgcmV0cnkgb24gdGhlIG5leHQgdGljay5cbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tEY2xDYXN0XSBQcmVzZW50YXRpb24gZGV0ZWN0aW9uIHBvbGwgZmFpbGVkLCB3aWxsIHJldHJ5JywgZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBwb2xsaW5nID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIC8vIFBvbGwgaW1tZWRpYXRlbHksIHRoZW4gZXZlcnkgc2Vjb25kLiBUaGUgaGFuZGxlIGlzIGludGVudGlvbmFsbHkgZGlzY2FyZGVkOlxuICAvLyBkZXRlY3Rpb24gcnVucyBmb3IgdGhlIHNjZW5lJ3MgbGlmZXRpbWUgYW5kIGlzIG5ldmVyIHRvcm4gZG93bi5cbiAgcG9sbCgpO1xuICBzZXRJbnRlcnZhbChlbmdpbmUsIHBvbGwsIFBPTExfSU5URVJWQUxfTVMpO1xufVxuIl19