@dcl/asset-packs 2.3.1 → 2.4.0

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 (61) hide show
  1. package/bin/index.js +3722 -1596
  2. package/catalog.json +127 -1
  3. package/dist/admin-toolkit-ui/Active.d.ts +11 -0
  4. package/dist/admin-toolkit-ui/Active.js +32 -0
  5. package/dist/admin-toolkit-ui/Button.d.ts +22 -9
  6. package/dist/admin-toolkit-ui/Button.js +45 -28
  7. package/dist/admin-toolkit-ui/Card.d.ts +6 -0
  8. package/dist/admin-toolkit-ui/Card.js +22 -0
  9. package/dist/admin-toolkit-ui/Error.d.ts +9 -0
  10. package/dist/admin-toolkit-ui/Error.js +31 -0
  11. package/dist/admin-toolkit-ui/Header.d.ts +8 -0
  12. package/dist/admin-toolkit-ui/Header.js +17 -0
  13. package/dist/admin-toolkit-ui/Loading.d.ts +11 -0
  14. package/dist/admin-toolkit-ui/Loading.js +31 -0
  15. package/dist/admin-toolkit-ui/ModerationControl/AddUserInput.d.ts +7 -0
  16. package/dist/admin-toolkit-ui/ModerationControl/AddUserInput.js +67 -0
  17. package/dist/admin-toolkit-ui/ModerationControl/AdminList.d.ts +10 -0
  18. package/dist/admin-toolkit-ui/ModerationControl/AdminList.js +192 -0
  19. package/dist/admin-toolkit-ui/ModerationControl/RemoveAdminConfirmation.d.ts +8 -0
  20. package/dist/admin-toolkit-ui/ModerationControl/RemoveAdminConfirmation.js +75 -0
  21. package/dist/admin-toolkit-ui/ModerationControl/api.d.ts +12 -0
  22. package/dist/admin-toolkit-ui/ModerationControl/api.js +28 -0
  23. package/dist/admin-toolkit-ui/ModerationControl/index.d.ts +23 -0
  24. package/dist/admin-toolkit-ui/ModerationControl/index.js +37 -0
  25. package/dist/admin-toolkit-ui/SmartItemsControl.js +34 -56
  26. package/dist/admin-toolkit-ui/TextAnnouncementsControl.js +50 -59
  27. package/dist/admin-toolkit-ui/VideoControl/LiveStream/DeleteStreamKey.d.ts +7 -0
  28. package/dist/admin-toolkit-ui/VideoControl/LiveStream/DeleteStreamKey.js +62 -0
  29. package/dist/admin-toolkit-ui/{VideoControl.d.ts → VideoControl/LiveStream/GenerateStreamKey.d.ts} +2 -3
  30. package/dist/admin-toolkit-ui/VideoControl/LiveStream/GenerateStreamKey.js +41 -0
  31. package/dist/admin-toolkit-ui/VideoControl/LiveStream/ShowStreamKey.d.ts +11 -0
  32. package/dist/admin-toolkit-ui/VideoControl/LiveStream/ShowStreamKey.js +112 -0
  33. package/dist/admin-toolkit-ui/VideoControl/LiveStream/index.d.ts +10 -0
  34. package/dist/admin-toolkit-ui/VideoControl/LiveStream/index.js +62 -0
  35. package/dist/admin-toolkit-ui/VideoControl/VideoUrl.d.ts +9 -0
  36. package/dist/admin-toolkit-ui/VideoControl/VideoUrl.js +125 -0
  37. package/dist/admin-toolkit-ui/VideoControl/VolumeControl.d.ts +8 -0
  38. package/dist/admin-toolkit-ui/VideoControl/VolumeControl.js +82 -0
  39. package/dist/admin-toolkit-ui/VideoControl/api.d.ts +12 -0
  40. package/dist/admin-toolkit-ui/VideoControl/api.js +17 -0
  41. package/dist/admin-toolkit-ui/VideoControl/index.d.ts +28 -0
  42. package/dist/admin-toolkit-ui/VideoControl/index.js +107 -0
  43. package/dist/admin-toolkit-ui/VideoControl/utils.d.ts +28 -0
  44. package/dist/admin-toolkit-ui/VideoControl/utils.js +87 -0
  45. package/dist/admin-toolkit-ui/fetch-utils.d.ts +14 -0
  46. package/dist/admin-toolkit-ui/fetch-utils.js +41 -0
  47. package/dist/admin-toolkit-ui/index.d.ts +11 -0
  48. package/dist/admin-toolkit-ui/index.js +200 -272
  49. package/dist/admin-toolkit-ui/types.d.ts +0 -2
  50. package/dist/admin-toolkit-ui/types.js +1 -1
  51. package/dist/admin-toolkit-ui/utils.d.ts +10 -2
  52. package/dist/admin-toolkit-ui/utils.js +31 -51
  53. package/dist/bin/index.js +3722 -1596
  54. package/dist/definitions.d.ts +18 -17
  55. package/dist/definitions.js +12 -10
  56. package/dist/enums.d.ts +5 -0
  57. package/dist/enums.js +7 -1
  58. package/dist/id.d.ts +2 -4
  59. package/dist/scene-entrypoint.js +1 -1
  60. package/package.json +6 -6
  61. package/dist/admin-toolkit-ui/VideoControl.js +0 -297
@@ -1,6 +1,6 @@
1
1
  import { Color4 } from '@dcl/sdk/math';
2
2
  import ReactEcs, { Label, Button as DCLButton, UiEntity, } from '@dcl/react-ecs';
3
- import { AdminPermissions, getComponents, } from '../definitions';
3
+ import { getComponents, } from '../definitions';
4
4
  import { getScaleUIFactor } from '../ui';
5
5
  import { VideoControl } from './VideoControl';
6
6
  import { TextAnnouncementsControl } from './TextAnnouncementsControl';
@@ -8,18 +8,19 @@ import { SmartItemsControl } from './SmartItemsControl';
8
8
  import { Button } from './Button';
9
9
  import { TextAnnouncements } from './TextAnnouncements';
10
10
  import { CONTENT_URL } from './constants';
11
- import { getSceneDeployment, getSceneOwners } from './utils';
12
11
  import { TabType } from './types';
13
- import { getExplorerComponents } from '../components';
12
+ import { BTN_MODERATION_CONTROL, ModerationControl, moderationControlState } from './ModerationControl';
13
+ import { getSceneAdmins } from './ModerationControl/api';
14
+ import { ModalAdminList } from './ModerationControl/AdminList';
15
+ import { isPreview } from './fetch-utils';
14
16
  export const nextTickFunctions = [];
15
- let state = {
17
+ export let scaleFactor;
18
+ export let state = {
16
19
  adminToolkitUiEntity: 0,
17
20
  panelOpen: false,
18
21
  activeTab: TabType.NONE,
19
22
  videoControl: {
20
- shareScreenUrl: undefined,
21
23
  selectedVideoPlayer: undefined,
22
- linkAllVideoPlayers: undefined,
23
24
  },
24
25
  smartItemsControl: {
25
26
  selectedSmartItem: undefined,
@@ -36,17 +37,13 @@ let state = {
36
37
  selectedRewardItem: undefined,
37
38
  },
38
39
  };
39
- let deploymentCache = null;
40
- let sceneOwnersCache = null;
40
+ let sceneAdminsCache = [];
41
41
  const BTN_VIDEO_CONTROL = `${CONTENT_URL}/admin_toolkit/assets/icons/admin-panel-video-control-button.png`;
42
- const BTN_VIDEO_CONTROL_ACTIVE = `${CONTENT_URL}/admin_toolkit/assets/icons/admin-panel-video-control-active-button.png`;
43
42
  const BTN_SMART_ITEM_CONTROL = `${CONTENT_URL}/admin_toolkit/assets/icons/admin-panel-smart-item-control-button.png`;
44
- const BTN_SMART_ITEM_CONTROL_ACTIVE = `${CONTENT_URL}/admin_toolkit/assets/icons/admin-panel-smart-item-control-active-button.png`;
45
43
  const BTN_TEXT_ANNOUNCEMENT_CONTROL = `${CONTENT_URL}/admin_toolkit/assets/icons/admin-panel-text-announcement-control-button.png`;
46
- const BTN_TEXT_ANNOUNCEMENT_CONTROL_ACTIVE = `${CONTENT_URL}/admin_toolkit/assets/icons/admin-panel-text-announcement-control-active-button.png`;
47
44
  const BTN_ADMIN_TOOLKIT_CONTROL = `${CONTENT_URL}/admin_toolkit/assets/icons/admin-panel-control-button.png`;
48
45
  const BTN_ADMIN_TOOLKIT_BACKGROUND = `${CONTENT_URL}/admin_toolkit/assets/backgrounds/admin-tool-background.png`;
49
- const containerBackgroundColor = Color4.create(0, 0, 0, 0.75);
46
+ export const containerBackgroundColor = Color4.create(0, 0, 0, 0.75);
50
47
  const ADMIN_TOOLS_ENTITY = 8000;
51
48
  function getAdminToolkitEntity(engine) {
52
49
  const { AdminTools } = getComponents(engine);
@@ -56,108 +53,30 @@ function getAdminToolkitComponent(engine) {
56
53
  const { AdminTools } = getComponents(engine);
57
54
  return Array.from(engine.getEntitiesWith(AdminTools))[0][1];
58
55
  }
59
- async function initSceneDeployment() {
60
- if (deploymentCache !== null)
56
+ export async function fetchSceneAdmins() {
57
+ const [error, response] = await getSceneAdmins();
58
+ if (error) {
59
+ console.log(JSON.stringify({ error }));
60
+ sceneAdminsCache = [];
61
61
  return;
62
- const deployment = await getSceneDeployment();
63
- if (deployment) {
64
- deploymentCache = {
65
- data: deployment,
66
- deployedBy: deployment.deployedBy.toLowerCase(),
67
- sceneBasePosition: deployment.metadata.scene.base.split(','),
68
- };
69
62
  }
63
+ sceneAdminsCache = (response ?? [])
64
+ .map(($) => ({
65
+ name: $.name,
66
+ address: $.admin,
67
+ role: 'admin',
68
+ verified: !$.name.includes('#'),
69
+ canBeRemoved: !!$.canBeRemoved
70
+ }))
71
+ .sort((a) => a.canBeRemoved ? 1 : -1);
70
72
  }
71
- async function initSceneOwners() {
72
- if (sceneOwnersCache !== null)
73
- return;
74
- const owners = await getSceneOwners();
75
- if (owners.length > 0) {
76
- sceneOwnersCache = owners;
77
- }
78
- }
79
- function getVideoPlayers(engine) {
73
+ export function getSmartItems(engine) {
80
74
  const adminToolkitComponent = getAdminToolkitComponent(engine);
81
- if (!adminToolkitComponent ||
82
- !adminToolkitComponent.videoControl ||
83
- !adminToolkitComponent.videoControl.videoPlayers ||
84
- adminToolkitComponent.videoControl.videoPlayers.length === 0)
85
- return [];
86
- return Array.from(adminToolkitComponent.videoControl.videoPlayers);
87
- }
88
- function getSmartItems(engine) {
89
- const adminToolkitComponent = getAdminToolkitComponent(engine);
90
- if (!adminToolkitComponent ||
91
- !adminToolkitComponent.smartItemsControl ||
92
- !adminToolkitComponent.smartItemsControl.smartItems ||
93
- adminToolkitComponent.smartItemsControl.smartItems.length === 0)
94
- return [];
95
- return Array.from(adminToolkitComponent.smartItemsControl.smartItems);
75
+ return Array.from(adminToolkitComponent.smartItemsControl.smartItems ?? []);
96
76
  }
97
77
  function getRewards(engine) {
98
78
  const adminToolkitComponent = getAdminToolkitComponent(engine);
99
- if (!adminToolkitComponent ||
100
- !adminToolkitComponent.rewardsControl ||
101
- !adminToolkitComponent.rewardsControl.rewardItems ||
102
- adminToolkitComponent.rewardsControl.rewardItems.length === 0)
103
- return [];
104
- return Array.from(adminToolkitComponent.rewardsControl.rewardItems);
105
- }
106
- function syncVideoPlayersState(engine) {
107
- const { VideoControlState } = getComponents(engine);
108
- const { VideoPlayer } = getExplorerComponents(engine);
109
- const videoControlState = VideoControlState.getOrNull(state.adminToolkitUiEntity);
110
- if (!videoControlState?.videoPlayers)
111
- return;
112
- videoControlState.videoPlayers.forEach((controlPlayer) => {
113
- const videoPlayer = VideoPlayer.getMutableOrNull(controlPlayer.entity);
114
- if (!videoPlayer)
115
- return;
116
- if (controlPlayer.src !== undefined &&
117
- videoPlayer.src !== controlPlayer.src) {
118
- videoPlayer.src = controlPlayer.src;
119
- }
120
- if (videoPlayer.playing !== controlPlayer.playing) {
121
- videoPlayer.playing = !!controlPlayer.playing;
122
- }
123
- if (videoPlayer.volume !== controlPlayer.volume) {
124
- videoPlayer.volume = controlPlayer.volume ?? 0;
125
- }
126
- if (controlPlayer.position === -1 && videoPlayer.position === undefined) {
127
- videoPlayer.position = -1;
128
- }
129
- if (videoPlayer.position === -1 && controlPlayer.position === undefined) {
130
- videoPlayer.position = undefined;
131
- }
132
- if (videoPlayer.loop !== controlPlayer.loop) {
133
- videoPlayer.loop = !!controlPlayer.loop;
134
- }
135
- });
136
- }
137
- function initVideoControlSync(engine) {
138
- const { VideoControlState } = getComponents(engine);
139
- const { VideoPlayer } = getExplorerComponents(engine);
140
- const videoPlayers = getVideoPlayers(engine);
141
- let syncVideoPlayers = [];
142
- videoPlayers.forEach((player) => {
143
- const vp = VideoPlayer.getOrNull(player.entity);
144
- if (vp) {
145
- syncVideoPlayers.push({
146
- entity: player.entity,
147
- src: vp.src,
148
- playing: vp.playing,
149
- volume: vp.volume,
150
- position: vp.position,
151
- loop: vp.loop,
152
- });
153
- }
154
- });
155
- VideoControlState.createOrReplace(state.adminToolkitUiEntity, {
156
- videoPlayers: syncVideoPlayers,
157
- });
158
- engine.addSystem(() => {
159
- syncVideoPlayersState(engine);
160
- });
79
+ return Array.from(adminToolkitComponent?.rewardsControl?.rewardItems ?? []);
161
80
  }
162
81
  function initTextAnnouncementSync(engine) {
163
82
  const { TextAnnouncements } = getComponents(engine);
@@ -172,11 +91,12 @@ export async function initializeAdminData(engine, sdkHelpers) {
172
91
  console.log('initializeAdminData');
173
92
  if (!adminDataInitialized) {
174
93
  console.log('initializeAdminData - not initialized');
175
- const { VideoControlState, TextAnnouncements } = getComponents(engine);
176
- await Promise.all([initSceneDeployment(), initSceneOwners()]);
177
- state.adminToolkitUiEntity = engine.addEntity();
178
- initVideoControlSync(engine);
94
+ const { TextAnnouncements, VideoControlState } = getComponents(engine);
95
+ state.adminToolkitUiEntity = getAdminToolkitEntity(engine) ?? engine.addEntity();
179
96
  initTextAnnouncementSync(engine);
97
+ if (!VideoControlState.getOrNull(state.adminToolkitUiEntity)) {
98
+ VideoControlState.create(state.adminToolkitUiEntity);
99
+ }
180
100
  sdkHelpers?.syncEntity?.(state.adminToolkitUiEntity, [VideoControlState.componentId, TextAnnouncements.componentId], ADMIN_TOOLS_ENTITY);
181
101
  engine.addSystem(() => {
182
102
  if (nextTickFunctions.length > 0) {
@@ -186,6 +106,9 @@ export async function initializeAdminData(engine, sdkHelpers) {
186
106
  }
187
107
  }
188
108
  }, Number.POSITIVE_INFINITY);
109
+ await Promise.all([
110
+ fetchSceneAdmins(),
111
+ ]);
189
112
  adminDataInitialized = true;
190
113
  console.log('initializeAdminData - initialized');
191
114
  }
@@ -196,188 +119,193 @@ export function createAdminToolkitUI(engine, pointerEventsSystem, reactBasedUiSy
196
119
  reactBasedUiSystem.setUiRenderer(() => uiComponent(engine, pointerEventsSystem, sdkHelpers, playersHelper));
197
120
  });
198
121
  }
199
- function isSceneDeployer(playerAddress) {
200
- return deploymentCache?.deployedBy === playerAddress.toLowerCase();
201
- }
202
- function isSceneOwner(playerAddress) {
203
- return (sceneOwnersCache || []).includes(playerAddress.toLowerCase());
204
- }
205
122
  function isAllowedAdmin(_engine, adminToolkitEntitie, player) {
206
- const { adminPermissions, authorizedAdminUsers } = adminToolkitEntitie;
207
- if (adminPermissions === AdminPermissions.PUBLIC) {
208
- return true;
209
- }
210
123
  if (!player)
211
124
  return false;
212
125
  const playerAddress = player.userId.toLowerCase();
213
- if (authorizedAdminUsers.me && isSceneDeployer(playerAddress)) {
214
- return true;
215
- }
216
- if (authorizedAdminUsers.sceneOwners && isSceneOwner(playerAddress)) {
217
- return true;
218
- }
219
- if (authorizedAdminUsers.allowList &&
220
- authorizedAdminUsers.adminAllowList.some((wallet) => wallet.toLowerCase() === playerAddress)) {
221
- return true;
222
- }
223
- return false;
126
+ const isAdmin = sceneAdminsCache.find($ => $.address === playerAddress);
127
+ return isAdmin || isPreview();
224
128
  }
225
129
  const uiComponent = (engine, pointerEventsSystem, sdkHelpers, playersHelper) => {
226
- const adminToolkitEntitie = getAdminToolkitComponent(engine);
130
+ const adminToolkitEntity = getAdminToolkitComponent(engine);
227
131
  const player = playersHelper?.getPlayer();
228
- const isPlayerAdmin = isAllowedAdmin(engine, adminToolkitEntitie, player);
229
- const scaleFactor = getScaleUIFactor(engine);
230
- return (ReactEcs.createElement(UiEntity, { uiTransform: {
231
- positionType: 'absolute',
232
- height: '100%',
233
- width: '100%',
234
- } },
235
- isPlayerAdmin ? (ReactEcs.createElement(UiEntity, { uiTransform: {
132
+ const isPlayerAdmin = isAllowedAdmin(engine, adminToolkitEntity, player);
133
+ scaleFactor = getScaleUIFactor(engine);
134
+ return [
135
+ ReactEcs.createElement(UiEntity, { uiTransform: {
236
136
  positionType: 'absolute',
237
- flexDirection: 'row',
238
- position: { top: 80 * scaleFactor, right: 10 * scaleFactor },
137
+ height: '100%',
138
+ width: '100%',
239
139
  } },
240
- ReactEcs.createElement(UiEntity, { uiTransform: {
241
- display: state.panelOpen ? 'flex' : 'none',
242
- width: 500 * scaleFactor,
243
- pointerFilter: 'block',
244
- flexDirection: 'column',
245
- margin: { right: 8 * scaleFactor },
140
+ isPlayerAdmin ? (ReactEcs.createElement(UiEntity, { uiTransform: {
141
+ positionType: 'absolute',
142
+ flexDirection: 'row',
143
+ position: { top: 80 * scaleFactor, right: 10 * scaleFactor },
246
144
  } },
247
145
  ReactEcs.createElement(UiEntity, { uiTransform: {
248
- width: '100%',
249
- height: 50 * scaleFactor,
250
- flexDirection: 'row',
251
- alignItems: 'center',
252
- padding: {
253
- left: 12 * scaleFactor,
254
- right: 12 * scaleFactor,
255
- },
256
- }, uiBackground: { color: containerBackgroundColor } },
257
- ReactEcs.createElement(Label, { value: "Admin Tools", fontSize: 20 * scaleFactor, color: Color4.create(160, 155, 168, 1), uiTransform: { flexGrow: 1 } }),
258
- ReactEcs.createElement(Button, { id: "admin_toolkit_panel_video_control", variant: "text", icon: state.activeTab === TabType.VIDEO_CONTROL
259
- ? BTN_VIDEO_CONTROL_ACTIVE
260
- : BTN_VIDEO_CONTROL, onlyIcon: true, uiTransform: {
261
- display: adminToolkitEntitie.videoControl.isEnabled
262
- ? 'flex'
263
- : 'none',
264
- width: 49 * scaleFactor,
265
- height: 42 * scaleFactor,
266
- margin: { right: 8 * scaleFactor },
267
- alignItems: 'center',
268
- justifyContent: 'center',
269
- }, iconTransform: {
270
- height: '100%',
271
- width: '100%',
272
- }, onMouseDown: () => {
273
- if (state.activeTab !== TabType.VIDEO_CONTROL) {
274
- state.activeTab = TabType.NONE;
275
- nextTickFunctions.push(() => {
276
- state.activeTab = TabType.VIDEO_CONTROL;
277
- });
278
- }
279
- else {
280
- state.activeTab = TabType.NONE;
281
- }
282
- } }),
283
- ReactEcs.createElement(Button, { id: "admin_toolkit_panel_smart_items_control", variant: "text", icon: state.activeTab === TabType.SMART_ITEMS_CONTROL
284
- ? BTN_SMART_ITEM_CONTROL_ACTIVE
285
- : BTN_SMART_ITEM_CONTROL, onlyIcon: true, uiTransform: {
286
- display: adminToolkitEntitie.smartItemsControl.isEnabled
287
- ? 'flex'
288
- : 'none',
289
- width: 49 * scaleFactor,
290
- height: 42 * scaleFactor,
291
- margin: { right: 8 * scaleFactor },
292
- alignItems: 'center',
293
- justifyContent: 'center',
294
- }, iconTransform: {
295
- height: '100%',
146
+ display: state.panelOpen ? 'flex' : 'none',
147
+ width: 500 * scaleFactor,
148
+ pointerFilter: 'block',
149
+ flexDirection: 'column',
150
+ margin: { right: 8 * scaleFactor },
151
+ } },
152
+ ReactEcs.createElement(UiEntity, { uiTransform: {
296
153
  width: '100%',
297
- }, onMouseDown: () => {
298
- if (state.activeTab !== TabType.SMART_ITEMS_CONTROL) {
299
- state.activeTab = TabType.NONE;
300
- nextTickFunctions.push(() => {
301
- state.activeTab = TabType.SMART_ITEMS_CONTROL;
302
- });
303
- }
304
- else {
305
- state.activeTab = TabType.NONE;
306
- }
307
- } }),
308
- ReactEcs.createElement(Button, { id: "admin_toolkit_panel_text_announcement_control", variant: "text", icon: state.activeTab === TabType.TEXT_ANNOUNCEMENT_CONTROL
309
- ? BTN_TEXT_ANNOUNCEMENT_CONTROL_ACTIVE
310
- : BTN_TEXT_ANNOUNCEMENT_CONTROL, onlyIcon: true, uiTransform: {
311
- display: adminToolkitEntitie.textAnnouncementControl.isEnabled
312
- ? 'flex'
313
- : 'none',
314
- width: 49 * scaleFactor,
315
- height: 42 * scaleFactor,
316
- margin: { right: 8 * scaleFactor },
154
+ height: 50 * scaleFactor,
155
+ flexDirection: 'row',
317
156
  alignItems: 'center',
318
- justifyContent: 'center',
319
- }, iconTransform: {
320
- height: '100%',
321
- width: '100%',
322
- }, onMouseDown: () => {
323
- if (state.activeTab !== TabType.TEXT_ANNOUNCEMENT_CONTROL) {
324
- state.activeTab = TabType.NONE;
325
- nextTickFunctions.push(() => {
326
- state.activeTab = TabType.TEXT_ANNOUNCEMENT_CONTROL;
327
- });
328
- }
329
- else {
330
- state.activeTab = TabType.NONE;
331
- }
332
- } })),
333
- state.activeTab !== TabType.NONE ? (ReactEcs.createElement(UiEntity, { uiTransform: {
334
- width: '100%',
335
- margin: {
336
- top: 10 * scaleFactor,
337
- right: 0,
338
- bottom: 0,
339
- left: 0,
340
- },
341
- padding: {
342
- top: 32 * scaleFactor,
343
- right: 32 * scaleFactor,
344
- bottom: 32 * scaleFactor,
345
- left: 32 * scaleFactor,
346
- },
347
- }, uiBackground: { color: containerBackgroundColor } },
157
+ borderRadius: 12 * scaleFactor,
158
+ padding: {
159
+ left: 12 * scaleFactor,
160
+ right: 12 * scaleFactor,
161
+ },
162
+ }, uiBackground: { color: containerBackgroundColor } },
163
+ ReactEcs.createElement(Label, { value: "ADMIN TOOLS", fontSize: 20 * scaleFactor, color: Color4.create(160, 155, 168, 1), uiTransform: { flexGrow: 1 } }),
164
+ ReactEcs.createElement(Button, { id: "admin_toolkit_moderation_control", variant: state.activeTab === TabType.MODERATION_CONTROL
165
+ ? 'primary'
166
+ : 'text', icon: BTN_MODERATION_CONTROL, onlyIcon: true, uiTransform: {
167
+ display: adminToolkitEntity.moderationControl.isEnabled && !isPreview()
168
+ ? 'flex'
169
+ : 'none',
170
+ width: 49 * scaleFactor,
171
+ height: 42 * scaleFactor,
172
+ margin: { right: 8 * scaleFactor },
173
+ alignItems: 'center',
174
+ justifyContent: 'center',
175
+ }, iconBackground: {
176
+ color: state.activeTab === TabType.MODERATION_CONTROL
177
+ ? Color4.Black()
178
+ : Color4.White(),
179
+ }, iconTransform: { height: '100%', width: '100%' }, onMouseDown: () => {
180
+ if (state.activeTab !== TabType.MODERATION_CONTROL) {
181
+ state.activeTab = TabType.NONE;
182
+ nextTickFunctions.push(() => {
183
+ state.activeTab = TabType.MODERATION_CONTROL;
184
+ });
185
+ }
186
+ else {
187
+ state.activeTab = TabType.NONE;
188
+ }
189
+ } }),
190
+ ReactEcs.createElement(Button, { id: "admin_toolkit_panel_video_control", variant: state.activeTab === TabType.VIDEO_CONTROL ? 'primary' : 'text', icon: BTN_VIDEO_CONTROL, iconBackground: {
191
+ color: state.activeTab === TabType.VIDEO_CONTROL
192
+ ? Color4.Black()
193
+ : Color4.White(),
194
+ }, onlyIcon: true, uiTransform: {
195
+ display: adminToolkitEntity.videoControl.isEnabled
196
+ ? 'flex'
197
+ : 'none',
198
+ width: 49 * scaleFactor,
199
+ height: 42 * scaleFactor,
200
+ margin: { right: 8 * scaleFactor },
201
+ alignItems: 'center',
202
+ justifyContent: 'center',
203
+ }, iconTransform: {
204
+ height: '100%',
205
+ width: '100%',
206
+ }, onMouseDown: () => {
207
+ if (state.activeTab !== TabType.VIDEO_CONTROL) {
208
+ state.activeTab = TabType.NONE;
209
+ nextTickFunctions.push(() => {
210
+ state.activeTab = TabType.VIDEO_CONTROL;
211
+ });
212
+ }
213
+ else {
214
+ state.activeTab = TabType.NONE;
215
+ }
216
+ } }),
217
+ ReactEcs.createElement(Button, { id: "admin_toolkit_panel_smart_items_control", variant: state.activeTab === TabType.SMART_ITEMS_CONTROL
218
+ ? 'primary'
219
+ : 'text', icon: BTN_SMART_ITEM_CONTROL, iconBackground: {
220
+ color: state.activeTab === TabType.SMART_ITEMS_CONTROL
221
+ ? Color4.Black()
222
+ : Color4.White(),
223
+ }, onlyIcon: true, uiTransform: {
224
+ display: adminToolkitEntity.smartItemsControl.isEnabled
225
+ ? 'flex'
226
+ : 'none',
227
+ width: 49 * scaleFactor,
228
+ height: 42 * scaleFactor,
229
+ margin: { right: 8 * scaleFactor },
230
+ alignItems: 'center',
231
+ justifyContent: 'center',
232
+ }, iconTransform: {
233
+ height: '100%',
234
+ width: '100%',
235
+ }, onMouseDown: () => {
236
+ if (state.activeTab !== TabType.SMART_ITEMS_CONTROL) {
237
+ state.activeTab = TabType.NONE;
238
+ nextTickFunctions.push(() => {
239
+ state.activeTab = TabType.SMART_ITEMS_CONTROL;
240
+ });
241
+ }
242
+ else {
243
+ state.activeTab = TabType.NONE;
244
+ }
245
+ } }),
246
+ ReactEcs.createElement(Button, { id: "admin_toolkit_panel_text_announcement_control", variant: state.activeTab === TabType.TEXT_ANNOUNCEMENT_CONTROL ? 'primary' : 'text', icon: BTN_TEXT_ANNOUNCEMENT_CONTROL, iconBackground: {
247
+ color: state.activeTab === TabType.TEXT_ANNOUNCEMENT_CONTROL
248
+ ? Color4.Black()
249
+ : Color4.White(),
250
+ }, onlyIcon: true, uiTransform: {
251
+ display: adminToolkitEntity.textAnnouncementControl.isEnabled
252
+ ? 'flex'
253
+ : 'none',
254
+ width: 49 * scaleFactor,
255
+ height: 42 * scaleFactor,
256
+ margin: { right: 8 * scaleFactor },
257
+ alignItems: 'center',
258
+ justifyContent: 'center',
259
+ }, iconTransform: {
260
+ height: '100%',
261
+ width: '100%',
262
+ }, onMouseDown: () => {
263
+ if (state.activeTab !== TabType.TEXT_ANNOUNCEMENT_CONTROL) {
264
+ state.activeTab = TabType.NONE;
265
+ nextTickFunctions.push(() => {
266
+ state.activeTab = TabType.TEXT_ANNOUNCEMENT_CONTROL;
267
+ });
268
+ }
269
+ else {
270
+ state.activeTab = TabType.NONE;
271
+ }
272
+ } })),
348
273
  state.activeTab === TabType.TEXT_ANNOUNCEMENT_CONTROL ? (ReactEcs.createElement(TextAnnouncementsControl, { engine: engine, state: state, player: player })) : null,
349
274
  state.activeTab === TabType.VIDEO_CONTROL ? (ReactEcs.createElement(VideoControl, { engine: engine, state: state })) : null,
350
- state.activeTab === TabType.SMART_ITEMS_CONTROL ? (ReactEcs.createElement(SmartItemsControl, { engine: engine, state: state })) : null)) : null),
351
- ReactEcs.createElement(UiEntity, { uiTransform: {
352
- display: 'flex',
353
- height: 42 * scaleFactor,
354
- width: 42 * scaleFactor,
355
- alignItems: 'center',
356
- alignContent: 'center',
357
- justifyContent: 'center',
358
- pointerFilter: 'block',
359
- }, uiBackground: {
360
- texture: {
361
- src: BTN_ADMIN_TOOLKIT_BACKGROUND,
362
- },
363
- textureMode: 'stretch',
364
- color: Color4.create(1, 1, 1, 1),
365
- } },
366
- ReactEcs.createElement(DCLButton, { value: "", uiTransform: {
367
- height: 40 * scaleFactor,
368
- width: 40 * scaleFactor,
275
+ state.activeTab === TabType.SMART_ITEMS_CONTROL ? (ReactEcs.createElement(SmartItemsControl, { engine: engine, state: state })) : null,
276
+ state.activeTab === TabType.MODERATION_CONTROL && (ReactEcs.createElement(ModerationControl, { engine: engine, player: player }))),
277
+ ReactEcs.createElement(UiEntity, { uiTransform: {
278
+ display: 'flex',
279
+ height: 42 * scaleFactor,
280
+ width: 42 * scaleFactor,
369
281
  alignItems: 'center',
370
282
  alignContent: 'center',
371
283
  justifyContent: 'center',
284
+ pointerFilter: 'block',
372
285
  }, uiBackground: {
373
286
  texture: {
374
- src: BTN_ADMIN_TOOLKIT_CONTROL,
287
+ src: BTN_ADMIN_TOOLKIT_BACKGROUND,
375
288
  },
376
289
  textureMode: 'stretch',
377
290
  color: Color4.create(1, 1, 1, 1),
378
- }, onMouseDown: () => {
379
- state.panelOpen = !state.panelOpen;
380
- } })))) : null,
381
- ReactEcs.createElement(TextAnnouncements, { engine: engine, state: state })));
291
+ } },
292
+ ReactEcs.createElement(DCLButton, { value: "", uiTransform: {
293
+ height: 40 * scaleFactor,
294
+ width: 40 * scaleFactor,
295
+ alignItems: 'center',
296
+ alignContent: 'center',
297
+ justifyContent: 'center',
298
+ }, uiBackground: {
299
+ texture: {
300
+ src: BTN_ADMIN_TOOLKIT_CONTROL,
301
+ },
302
+ textureMode: 'stretch',
303
+ color: Color4.create(1, 1, 1, 1),
304
+ }, onMouseDown: () => {
305
+ state.panelOpen = !state.panelOpen;
306
+ } })))) : null,
307
+ ReactEcs.createElement(TextAnnouncements, { engine: engine, state: state })),
308
+ moderationControlState.showModalAdminList && (ReactEcs.createElement(ModalAdminList, { scaleFactor: scaleFactor, sceneAdmins: sceneAdminsCache ?? [], engine: engine })),
309
+ ];
382
310
  };
383
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN0QyxPQUFPLFFBQVEsRUFBRSxFQUNmLEtBQUssRUFDTCxNQUFNLElBQUksU0FBUyxFQUNuQixRQUFRLEdBRVQsTUFBTSxnQkFBZ0IsQ0FBQTtBQUd2QixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGFBQWEsR0FJZCxNQUFNLGdCQUFnQixDQUFBO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDN0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDNUQsT0FBTyxFQUFTLE9BQU8sRUFBcUIsTUFBTSxTQUFTLENBQUE7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXJELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFtQixFQUFFLENBQUE7QUFFbkQsSUFBSSxLQUFLLEdBQVU7SUFDakIsb0JBQW9CLEVBQUUsQ0FBVztJQUNqQyxTQUFTLEVBQUUsS0FBSztJQUNoQixTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUk7SUFDdkIsWUFBWSxFQUFFO1FB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QUFHLEVBQUU7d0JBQ2hCLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFBO29CQUNwQyxDQUFDLEdBQ0QsQ0FDTyxDQUNGLENBQ1osQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUNSLHVCQUFDLGlCQUFpQixJQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBSSxDQUMxQyxDQUNaLENBQUE7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvcjQgfSBmcm9tICdAZGNsL3Nkay9tYXRoJ1xuaW1wb3J0IFJlYWN0RWNzLCB7XG4gIExhYmVsLFxuICBCdXR0b24gYXMgRENMQnV0dG9uLFxuICBVaUVudGl0eSxcbiAgUmVhY3RCYXNlZFVpU3lzdGVtLFxufSBmcm9tICdAZGNsL3JlYWN0LWVjcydcbmltcG9ydCB7IEVudGl0eSwgSUVuZ2luZSwgUG9pbnRlckV2ZW50c1N5c3RlbSB9IGZyb20gJ0BkY2wvZWNzJ1xuXG5pbXBvcnQge1xuICBBZG1pblBlcm1pc3Npb25zLFxuICBnZXRDb21wb25lbnRzLFxuICBHZXRQbGF5ZXJEYXRhUmVzLFxuICBJUGxheWVyc0hlbHBlcixcbiAgSVNES0hlbHBlcnMsXG59IGZyb20gJy4uL2RlZmluaXRpb25zJ1xuaW1wb3J0IHsgZ2V0U2NhbGVVSUZhY3RvciB9IGZyb20gJy4uL3VpJ1xuaW1wb3J0IHsgVmlkZW9Db250cm9sIH0gZnJvbSAnLi9WaWRlb0NvbnRyb2wnXG5pbXBvcnQgeyBUZXh0QW5ub3VuY2VtZW50c0NvbnRyb2wgfSBmcm9tICcuL1RleHRBbm5vdW5jZW1lbnRzQ29udHJvbCdcbi8vIGltcG9ydCB7IFJld2FyZHNDb250cm9sIH0gZnJvbSAnLi9SZXdhcmRzQ29udHJvbCdcbmltcG9ydCB7IFNtYXJ0SXRlbXNDb250cm9sIH0gZnJvbSAnLi9TbWFydEl0ZW1zQ29udHJvbCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uJ1xuaW1wb3J0IHsgVGV4dEFubm91bmNlbWVudHMgfSBmcm9tICcuL1RleHRBbm5vdW5jZW1lbnRzJ1xuaW1wb3J0IHsgQ09OVEVOVF9VUkwgfSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IGdldFNjZW5lRGVwbG95bWVudCwgZ2V0U2NlbmVPd25lcnMgfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgU3RhdGUsIFRhYlR5cGUsIFNlbGVjdGVkU21hcnRJdGVtIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IGdldEV4cGxvcmVyQ29tcG9uZW50cyB9IGZyb20gJy4uL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBjb25zdCBuZXh0VGlja0Z1bmN0aW9uczogKCgpID0+IHZvaWQpW10gPSBbXVxuXG5sZXQgc3RhdGU6IFN0YXRlID0ge1xuICBhZG1pblRvb2xraXRVaUVudGl0eTogMCBhcyBFbnRpdHksXG4gIHBhbmVsT3BlbjogZmFsc2UsXG4gIGFjdGl2ZVRhYjogVGFiVHlwZS5OT05FLFxuICB2aWRlb0NvbnRyb2w6IHtcbiAgICBzaGFyZVNjcmVlblVybDogdW5kZWZpbmVkLFxuICAgIHNlbGVjdGVkVmlkZW9QbGF5ZXI6IHVuZGVmaW5lZCxcbiAgICBsaW5rQWxsVmlkZW9QbGF5ZXJzOiB1bmRlZmluZWQsXG4gIH0sXG4gIHNtYXJ0SXRlbXNDb250cm9sOiB7XG4gICAgc2VsZWN0ZWRTbWFydEl0ZW06IHVuZGVmaW5lZCxcbiAgICBzbWFydEl0ZW1zOiBuZXcgTWFwPEVudGl0eSwgU2VsZWN0ZWRTbWFydEl0ZW0+KCksXG4gIH0sXG4gIHRleHRBbm5vdW5jZW1lbnRDb250cm9sOiB7XG4gICAgZW50aXR5OiB1bmRlZmluZWQsXG4gICAgdGV4dDogdW5kZWZpbmVkLFxuICAgIG1lc3NhZ2VSYXRlVHJhY2tlcjogbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKSxcbiAgICBhbm5vdW5jZW1lbnRzOiBbXSxcbiAgICBtYXhBbm5vdW5jZW1lbnRzOiA0LFxuICB9LFxuICByZXdhcmRzQ29udHJvbDoge1xuICAgIHNlbGVjdGVkUmV3YXJkSXRlbTogdW5kZWZpbmVkLFxuICB9LFxufVxuXG4vLyBBZGQgY2FjaGUgb2JqZWN0cyBhdCB0aGUgdG9wIGxldmVsXG5sZXQgZGVwbG95bWVudENhY2hlOiB7XG4gIGRhdGE6IGFueVxuICBkZXBsb3llZEJ5Pzogc3RyaW5nXG4gIHNjZW5lQmFzZVBvc2l0aW9uPzogc3RyaW5nW11cbn0gfCBudWxsID0gbnVsbFxuXG5sZXQgc2NlbmVPd25lcnNDYWNoZTogc3RyaW5nW10gfCBudWxsID0gbnVsbFxuXG4vLyBjb25zdCBCVE5fUkVXQVJEU19DT05UUk9MID0gYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2FkbWluLXBhbmVsLXJld2FyZHMtY29udHJvbC1idXR0b24ucG5nYFxuLy8gY29uc3QgQlROX1JFV0FSRFNfQ09OVFJPTF9BQ1RJVkUgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtcmV3YXJkcy1jb250cm9sLWFjdGl2ZS1idXR0b24ucG5nYFxuXG5jb25zdCBCVE5fVklERU9fQ09OVFJPTCA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC12aWRlby1jb250cm9sLWJ1dHRvbi5wbmdgXG5jb25zdCBCVE5fVklERU9fQ09OVFJPTF9BQ1RJVkUgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdmlkZW8tY29udHJvbC1hY3RpdmUtYnV0dG9uLnBuZ2BcblxuY29uc3QgQlROX1NNQVJUX0lURU1fQ09OVFJPTCA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC1zbWFydC1pdGVtLWNvbnRyb2wtYnV0dG9uLnBuZ2BcbmNvbnN0IEJUTl9TTUFSVF9JVEVNX0NPTlRST0xfQUNUSVZFID0gYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2FkbWluLXBhbmVsLXNtYXJ0LWl0ZW0tY29udHJvbC1hY3RpdmUtYnV0dG9uLnBuZ2BcblxuY29uc3QgQlROX1RFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0wgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdGV4dC1hbm5vdW5jZW1lbnQtY29udHJvbC1idXR0b24ucG5nYFxuY29uc3QgQlROX1RFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0xfQUNUSVZFID0gYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2FkbWluLXBhbmVsLXRleHQtYW5ub3VuY2VtZW50LWNvbnRyb2wtYWN0aXZlLWJ1dHRvbi5wbmdgXG5cbmNvbnN0IEJUTl9BRE1JTl9UT09MS0lUX0NPTlRST0wgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtY29udHJvbC1idXR0b24ucG5nYFxuY29uc3QgQlROX0FETUlOX1RPT0xLSVRfQkFDS0dST1VORCA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9iYWNrZ3JvdW5kcy9hZG1pbi10b29sLWJhY2tncm91bmQucG5nYFxuXG5jb25zdCBjb250YWluZXJCYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcjQuY3JlYXRlKDAsIDAsIDAsIDAuNzUpXG5cbi8vIFRoZSBlZGl0b3Igc3RhcnRzIHVzaW5nIGVudGl0aWVzIGZyb20gWzgwMDFdLlxuY29uc3QgQURNSU5fVE9PTFNfRU5USVRZID0gODAwMCBhcyBFbnRpdHlcblxuZnVuY3Rpb24gZ2V0QWRtaW5Ub29sa2l0RW50aXR5KGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCB7IEFkbWluVG9vbHMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKVxuICByZXR1cm4gQXJyYXkuZnJvbShlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKEFkbWluVG9vbHMpKVswXVswXVxufVxuXG5mdW5jdGlvbiBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lOiBJRW5naW5lKSB7XG4gIGNvbnN0IHsgQWRtaW5Ub29scyB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpXG4gIHJldHVybiBBcnJheS5mcm9tKGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoQWRtaW5Ub29scykpWzBdWzFdXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGluaXRTY2VuZURlcGxveW1lbnQoKSB7XG4gIGlmIChkZXBsb3ltZW50Q2FjaGUgIT09IG51bGwpIHJldHVyblxuXG4gIGNvbnN0IGRlcGxveW1lbnQgPSBhd2FpdCBnZXRTY2VuZURlcGxveW1lbnQoKVxuXG4gIGlmIChkZXBsb3ltZW50KSB7XG4gICAgZGVwbG95bWVudENhY2hlID0ge1xuICAgICAgZGF0YTogZGVwbG95bWVudCxcbiAgICAgIGRlcGxveWVkQnk6IGRlcGxveW1lbnQuZGVwbG95ZWRCeS50b0xvd2VyQ2FzZSgpLFxuICAgICAgc2NlbmVCYXNlUG9zaXRpb246IGRlcGxveW1lbnQubWV0YWRhdGEuc2NlbmUuYmFzZS5zcGxpdCgnLCcpLFxuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBpbml0U2NlbmVPd25lcnMoKSB7XG4gIGlmIChzY2VuZU93bmVyc0NhY2hlICE9PSBudWxsKSByZXR1cm5cblxuICBjb25zdCBvd25lcnMgPSBhd2FpdCBnZXRTY2VuZU93bmVycygpXG5cbiAgaWYgKG93bmVycy5sZW5ndGggPiAwKSB7XG4gICAgc2NlbmVPd25lcnNDYWNoZSA9IG93bmVyc1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFZpZGVvUGxheWVycyhlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgYWRtaW5Ub29sa2l0Q29tcG9uZW50ID0gZ2V0QWRtaW5Ub29sa2l0Q29tcG9uZW50KGVuZ2luZSlcblxuICBpZiAoXG4gICAgIWFkbWluVG9vbGtpdENvbXBvbmVudCB8fFxuICAgICFhZG1pblRvb2xraXRDb21wb25lbnQudmlkZW9Db250cm9sIHx8XG4gICAgIWFkbWluVG9vbGtpdENvbXBvbmVudC52aWRlb0NvbnRyb2wudmlkZW9QbGF5ZXJzIHx8XG4gICAgYWRtaW5Ub29sa2l0Q29tcG9uZW50LnZpZGVvQ29udHJvbC52aWRlb1BsYXllcnMubGVuZ3RoID09PSAwXG4gIClcbiAgICByZXR1cm4gW11cblxuICByZXR1cm4gQXJyYXkuZnJvbShhZG1pblRvb2xraXRDb21wb25lbnQudmlkZW9Db250cm9sLnZpZGVvUGxheWVycylcbn1cblxuZnVuY3Rpb24gZ2V0U21hcnRJdGVtcyhlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgYWRtaW5Ub29sa2l0Q29tcG9uZW50ID0gZ2V0QWRtaW5Ub29sa2l0Q29tcG9uZW50KGVuZ2luZSlcblxuICBpZiAoXG4gICAgIWFkbWluVG9vbGtpdENvbXBvbmVudCB8fFxuICAgICFhZG1pblRvb2xraXRDb21wb25lbnQuc21hcnRJdGVtc0NvbnRyb2wgfHxcbiAgICAhYWRtaW5Ub29sa2l0Q29tcG9uZW50LnNtYXJ0SXRlbXNDb250cm9sLnNtYXJ0SXRlbXMgfHxcbiAgICBhZG1pblRvb2xraXRDb21wb25lbnQuc21hcnRJdGVtc0NvbnRyb2wuc21hcnRJdGVtcy5sZW5ndGggPT09IDBcbiAgKVxuICAgIHJldHVybiBbXVxuXG4gIHJldHVybiBBcnJheS5mcm9tKGFkbWluVG9vbGtpdENvbXBvbmVudC5zbWFydEl0ZW1zQ29udHJvbC5zbWFydEl0ZW1zKVxufVxuXG5mdW5jdGlvbiBnZXRSZXdhcmRzKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBhZG1pblRvb2xraXRDb21wb25lbnQgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKVxuXG4gIGlmIChcbiAgICAhYWRtaW5Ub29sa2l0Q29tcG9uZW50IHx8XG4gICAgIWFkbWluVG9vbGtpdENvbXBvbmVudC5yZXdhcmRzQ29udHJvbCB8fFxuICAgICFhZG1pblRvb2xraXRDb21wb25lbnQucmV3YXJkc0NvbnRyb2wucmV3YXJkSXRlbXMgfHxcbiAgICBhZG1pblRvb2xraXRDb21wb25lbnQucmV3YXJkc0NvbnRyb2wucmV3YXJkSXRlbXMubGVuZ3RoID09PSAwXG4gIClcbiAgICByZXR1cm4gW11cblxuICByZXR1cm4gQXJyYXkuZnJvbShhZG1pblRvb2xraXRDb21wb25lbnQucmV3YXJkc0NvbnRyb2wucmV3YXJkSXRlbXMpXG59XG5cbmZ1bmN0aW9uIHN5bmNWaWRlb1BsYXllcnNTdGF0ZShlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBWaWRlb0NvbnRyb2xTdGF0ZSB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpXG4gIGNvbnN0IHsgVmlkZW9QbGF5ZXIgfSA9IGdldEV4cGxvcmVyQ29tcG9uZW50cyhlbmdpbmUpXG5cbiAgY29uc3QgdmlkZW9Db250cm9sU3RhdGUgPSBWaWRlb0NvbnRyb2xTdGF0ZS5nZXRPck51bGwoXG4gICAgc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHksXG4gIClcbiAgaWYgKCF2aWRlb0NvbnRyb2xTdGF0ZT8udmlkZW9QbGF5ZXJzKSByZXR1cm5cblxuICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBwbGF5ZXIgaW4gdGhlIGNvbnRyb2wgc3RhdGVcbiAgdmlkZW9Db250cm9sU3RhdGUudmlkZW9QbGF5ZXJzLmZvckVhY2goKGNvbnRyb2xQbGF5ZXIpID0+IHtcbiAgICBjb25zdCB2aWRlb1BsYXllciA9IFZpZGVvUGxheWVyLmdldE11dGFibGVPck51bGwoXG4gICAgICBjb250cm9sUGxheWVyLmVudGl0eSBhcyBFbnRpdHksXG4gICAgKVxuICAgIGlmICghdmlkZW9QbGF5ZXIpIHJldHVyblxuXG4gICAgLy8gQ2hlY2sgYW5kIHN5bmMgZWFjaCBwcm9wZXJ0eVxuICAgIGlmIChcbiAgICAgIGNvbnRyb2xQbGF5ZXIuc3JjICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHZpZGVvUGxheWVyLnNyYyAhPT0gY29udHJvbFBsYXllci5zcmNcbiAgICApIHtcbiAgICAgIHZpZGVvUGxheWVyLnNyYyA9IGNvbnRyb2xQbGF5ZXIuc3JjXG4gICAgfVxuICAgIGlmICh2aWRlb1BsYXllci5wbGF5aW5nICE9PSBjb250cm9sUGxheWVyLnBsYXlpbmcpIHtcbiAgICAgIHZpZGVvUGxheWVyLnBsYXlpbmcgPSAhIWNvbnRyb2xQbGF5ZXIucGxheWluZ1xuICAgIH1cbiAgICBpZiAodmlkZW9QbGF5ZXIudm9sdW1lICE9PSBjb250cm9sUGxheWVyLnZvbHVtZSkge1xuICAgICAgdmlkZW9QbGF5ZXIudm9sdW1lID0gY29udHJvbFBsYXllci52b2x1bWUgPz8gMFxuICAgIH1cbiAgICBpZiAoY29udHJvbFBsYXllci5wb3NpdGlvbiA9PT0gLTEgJiYgdmlkZW9QbGF5ZXIucG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmlkZW9QbGF5ZXIucG9zaXRpb24gPSAtMVxuICAgIH1cbiAgICBpZiAodmlkZW9QbGF5ZXIucG9zaXRpb24gPT09IC0xICYmIGNvbnRyb2xQbGF5ZXIucG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmlkZW9QbGF5ZXIucG9zaXRpb24gPSB1bmRlZmluZWRcbiAgICB9XG4gICAgaWYgKHZpZGVvUGxheWVyLmxvb3AgIT09IGNvbnRyb2xQbGF5ZXIubG9vcCkge1xuICAgICAgdmlkZW9QbGF5ZXIubG9vcCA9ICEhY29udHJvbFBsYXllci5sb29wXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBpbml0VmlkZW9Db250cm9sU3luYyhlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBWaWRlb0NvbnRyb2xTdGF0ZSB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpXG4gIGNvbnN0IHsgVmlkZW9QbGF5ZXIgfSA9IGdldEV4cGxvcmVyQ29tcG9uZW50cyhlbmdpbmUpXG5cbiAgY29uc3QgdmlkZW9QbGF5ZXJzID0gZ2V0VmlkZW9QbGF5ZXJzKGVuZ2luZSlcblxuICBsZXQgc3luY1ZpZGVvUGxheWVyczogYW55ID0gW11cblxuICB2aWRlb1BsYXllcnMuZm9yRWFjaCgocGxheWVyKSA9PiB7XG4gICAgY29uc3QgdnAgPSBWaWRlb1BsYXllci5nZXRPck51bGwocGxheWVyLmVudGl0eSBhcyBFbnRpdHkpXG4gICAgaWYgKHZwKSB7XG4gICAgICBzeW5jVmlkZW9QbGF5ZXJzLnB1c2goe1xuICAgICAgICBlbnRpdHk6IHBsYXllci5lbnRpdHkgYXMgRW50aXR5LFxuICAgICAgICBzcmM6IHZwLnNyYyxcbiAgICAgICAgcGxheWluZzogdnAucGxheWluZyxcbiAgICAgICAgdm9sdW1lOiB2cC52b2x1bWUsXG4gICAgICAgIHBvc2l0aW9uOiB2cC5wb3NpdGlvbixcbiAgICAgICAgbG9vcDogdnAubG9vcCxcbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG4gIFZpZGVvQ29udHJvbFN0YXRlLmNyZWF0ZU9yUmVwbGFjZShzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSwge1xuICAgIHZpZGVvUGxheWVyczogc3luY1ZpZGVvUGxheWVycyxcbiAgfSlcblxuICAvLyBTZXQgdXAgdGhlIHN5bmMgc3lzdGVtXG4gIGVuZ2luZS5hZGRTeXN0ZW0oKCkgPT4ge1xuICAgIHN5bmNWaWRlb1BsYXllcnNTdGF0ZShlbmdpbmUpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGluaXRUZXh0QW5ub3VuY2VtZW50U3luYyhlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBUZXh0QW5ub3VuY2VtZW50cyB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpXG5cbiAgVGV4dEFubm91bmNlbWVudHMuY3JlYXRlT3JSZXBsYWNlKHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5LCB7XG4gICAgdGV4dDogJycsXG4gICAgYXV0aG9yOiAnJyxcbiAgICBpZDogJydcbiAgfSlcbn1cblxuLy8gSW5pdGlhbGl6ZSBhZG1pbiBkYXRhIGJlZm9yZSBVSSByZW5kZXJpbmdcbmxldCBhZG1pbkRhdGFJbml0aWFsaXplZCA9IGZhbHNlXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZUFkbWluRGF0YShcbiAgZW5naW5lOiBJRW5naW5lLFxuICBzZGtIZWxwZXJzPzogSVNES0hlbHBlcnMsXG4pIHtcbiAgY29uc29sZS5sb2coJ2luaXRpYWxpemVBZG1pbkRhdGEnKVxuICBpZiAoIWFkbWluRGF0YUluaXRpYWxpemVkKSB7XG4gICAgY29uc29sZS5sb2coJ2luaXRpYWxpemVBZG1pbkRhdGEgLSBub3QgaW5pdGlhbGl6ZWQnKVxuICAgIGNvbnN0IHsgVmlkZW9Db250cm9sU3RhdGUsIFRleHRBbm5vdW5jZW1lbnRzIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSlcblxuICAgIC8vIEluaXRpYWxpemUgc2NlbmUgZGF0YVxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtpbml0U2NlbmVEZXBsb3ltZW50KCksIGluaXRTY2VuZU93bmVycygpXSlcblxuICAgIC8vIEluaXRpYWxpemUgQWRtaW5Ub29sa2l0VWlFbnRpdHlcbiAgICBzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBWaWRlb0NvbnRyb2wgc3luYyBjb21wb25lbnRcbiAgICBpbml0VmlkZW9Db250cm9sU3luYyhlbmdpbmUpXG5cbiAgICAvLyBJbml0aWFsaXplIFRleHRBbm5vdW5jZW1lbnRzIHN5bmMgY29tcG9uZW50XG4gICAgaW5pdFRleHRBbm5vdW5jZW1lbnRTeW5jKGVuZ2luZSlcblxuICAgIHNka0hlbHBlcnM/LnN5bmNFbnRpdHk/LihcbiAgICAgIHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5LFxuICAgICAgW1ZpZGVvQ29udHJvbFN0YXRlLmNvbXBvbmVudElkLCBUZXh0QW5ub3VuY2VtZW50cy5jb21wb25lbnRJZF0sXG4gICAgICBBRE1JTl9UT09MU19FTlRJVFksXG4gICAgKVxuXG4gICAgZW5naW5lLmFkZFN5c3RlbSgoKSA9PiB7XG4gICAgICBpZiAobmV4dFRpY2tGdW5jdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBuZXh0VGljayA9IG5leHRUaWNrRnVuY3Rpb25zLnNoaWZ0KClcbiAgICAgICAgaWYgKG5leHRUaWNrKSB7XG4gICAgICAgICAgbmV4dFRpY2soKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKVxuXG4gICAgYWRtaW5EYXRhSW5pdGlhbGl6ZWQgPSB0cnVlXG5cbiAgICBjb25zb2xlLmxvZygnaW5pdGlhbGl6ZUFkbWluRGF0YSAtIGluaXRpYWxpemVkJylcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWRtaW5Ub29sa2l0VUkoXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgcG9pbnRlckV2ZW50c1N5c3RlbTogUG9pbnRlckV2ZW50c1N5c3RlbSxcbiAgcmVhY3RCYXNlZFVpU3lzdGVtOiBSZWFjdEJhc2VkVWlTeXN0ZW0sXG4gIHNka0hlbHBlcnM/OiBJU0RLSGVscGVycyxcbiAgcGxheWVyc0hlbHBlcj86IElQbGF5ZXJzSGVscGVyLFxuKSB7XG4gIC8vIEluaXRpYWxpemUgYWRtaW4gZGF0YSBiZWZvcmUgc2V0dGluZyB1cCB0aGUgVUlcbiAgaW5pdGlhbGl6ZUFkbWluRGF0YShlbmdpbmUsIHNka0hlbHBlcnMpLnRoZW4oKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdjcmVhdGVBZG1pblRvb2xraXRVSSAtIGluaXRpYWxpemVkJylcbiAgICByZWFjdEJhc2VkVWlTeXN0ZW0uc2V0VWlSZW5kZXJlcigoKSA9PlxuICAgICAgdWlDb21wb25lbnQoZW5naW5lLCBwb2ludGVyRXZlbnRzU3lzdGVtLCBzZGtIZWxwZXJzLCBwbGF5ZXJzSGVscGVyKSxcbiAgICApXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGlzU2NlbmVEZXBsb3llcihwbGF5ZXJBZGRyZXNzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlcGxveW1lbnRDYWNoZT8uZGVwbG95ZWRCeSA9PT0gcGxheWVyQWRkcmVzcy50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIGlzU2NlbmVPd25lcihwbGF5ZXJBZGRyZXNzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIChzY2VuZU93bmVyc0NhY2hlIHx8IFtdKS5pbmNsdWRlcyhwbGF5ZXJBZGRyZXNzLnRvTG93ZXJDYXNlKCkpXG59XG5cbmZ1bmN0aW9uIGlzQWxsb3dlZEFkbWluKFxuICBfZW5naW5lOiBJRW5naW5lLFxuICBhZG1pblRvb2xraXRFbnRpdGllOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRBZG1pblRvb2xraXRDb21wb25lbnQ+LFxuICBwbGF5ZXI/OiBHZXRQbGF5ZXJEYXRhUmVzIHwgbnVsbCxcbikge1xuICBjb25zdCB7IGFkbWluUGVybWlzc2lvbnMsIGF1dGhvcml6ZWRBZG1pblVzZXJzIH0gPSBhZG1pblRvb2xraXRFbnRpdGllXG5cbiAgaWYgKGFkbWluUGVybWlzc2lvbnMgPT09IEFkbWluUGVybWlzc2lvbnMuUFVCTElDKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmICghcGxheWVyKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBwbGF5ZXJBZGRyZXNzID0gcGxheWVyLnVzZXJJZC50b0xvd2VyQ2FzZSgpXG5cbiAgLy8gQ2hlY2sgaWYgcGxheWVyIGlzIHRoZSBkZXBsb3llclxuICBpZiAoYXV0aG9yaXplZEFkbWluVXNlcnMubWUgJiYgaXNTY2VuZURlcGxveWVyKHBsYXllckFkZHJlc3MpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHBsYXllciBpcyBhIHNjZW5lIG93bmVyXG4gIGlmIChhdXRob3JpemVkQWRtaW5Vc2Vycy5zY2VuZU93bmVycyAmJiBpc1NjZW5lT3duZXIocGxheWVyQWRkcmVzcykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgcGxheWVyIGlzIGluIHRoZSBhbGxvdyBsaXN0XG4gIGlmIChcbiAgICBhdXRob3JpemVkQWRtaW5Vc2Vycy5hbGxvd0xpc3QgJiZcbiAgICBhdXRob3JpemVkQWRtaW5Vc2Vycy5hZG1pbkFsbG93TGlzdC5zb21lKFxuICAgICAgKHdhbGxldCkgPT4gd2FsbGV0LnRvTG93ZXJDYXNlKCkgPT09IHBsYXllckFkZHJlc3MsXG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmNvbnN0IHVpQ29tcG9uZW50ID0gKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW06IFBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gIHNka0hlbHBlcnM/OiBJU0RLSGVscGVycyxcbiAgcGxheWVyc0hlbHBlcj86IElQbGF5ZXJzSGVscGVyLFxuKSA9PiB7XG4gIGNvbnN0IGFkbWluVG9vbGtpdEVudGl0aWUgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKVxuICBjb25zdCBwbGF5ZXIgPSBwbGF5ZXJzSGVscGVyPy5nZXRQbGF5ZXIoKVxuICBjb25zdCBpc1BsYXllckFkbWluID0gaXNBbGxvd2VkQWRtaW4oZW5naW5lLCBhZG1pblRvb2xraXRFbnRpdGllLCBwbGF5ZXIpXG4gIGNvbnN0IHNjYWxlRmFjdG9yID0gZ2V0U2NhbGVVSUZhY3RvcihlbmdpbmUpXG5cbiAgcmV0dXJuIChcbiAgICA8VWlFbnRpdHlcbiAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogJ2Fic29sdXRlJyxcbiAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtpc1BsYXllckFkbWluID8gKFxuICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgcG9zaXRpb25UeXBlOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICAgICAgICBwb3NpdGlvbjogeyB0b3A6IDgwICogc2NhbGVGYWN0b3IsIHJpZ2h0OiAxMCAqIHNjYWxlRmFjdG9yIH0sXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgZGlzcGxheTogc3RhdGUucGFuZWxPcGVuID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICB3aWR0aDogNTAwICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgIHBvaW50ZXJGaWx0ZXI6ICdibG9jaycsXG4gICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGhlaWdodDogNTAgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiB7XG4gICAgICAgICAgICAgICAgICBsZWZ0OiAxMiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgICAgcmlnaHQ6IDEyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7IGNvbG9yOiBjb250YWluZXJCYWNrZ3JvdW5kQ29sb3IgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJBZG1pbiBUb29sc1wiXG4gICAgICAgICAgICAgICAgZm9udFNpemU9ezIwICogc2NhbGVGYWN0b3J9XG4gICAgICAgICAgICAgICAgY29sb3I9e0NvbG9yNC5jcmVhdGUoMTYwLCAxNTUsIDE2OCwgMSl9XG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3sgZmxleEdyb3c6IDEgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiYWRtaW5fdG9vbGtpdF9wYW5lbF92aWRlb19jb250cm9sXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwidGV4dFwiXG4gICAgICAgICAgICAgICAgaWNvbj17XG4gICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVklERU9fQ09OVFJPTFxuICAgICAgICAgICAgICAgICAgICA/IEJUTl9WSURFT19DT05UUk9MX0FDVElWRVxuICAgICAgICAgICAgICAgICAgICA6IEJUTl9WSURFT19DT05UUk9MXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9ubHlJY29uXG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGFkbWluVG9vbGtpdEVudGl0aWUudmlkZW9Db250cm9sLmlzRW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICA/ICdmbGV4J1xuICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luOiB7IHJpZ2h0OiA4ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5WSURFT19DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJhZG1pbl90b29sa2l0X3BhbmVsX3NtYXJ0X2l0ZW1zX2NvbnRyb2xcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBpY29uPXtcbiAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgID8gQlROX1NNQVJUX0lURU1fQ09OVFJPTF9BQ1RJVkVcbiAgICAgICAgICAgICAgICAgICAgOiBCVE5fU01BUlRfSVRFTV9DT05UUk9MXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9ubHlJY29uXG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGFkbWluVG9vbGtpdEVudGl0aWUuc21hcnRJdGVtc0NvbnRyb2wuaXNFbmFibGVkXG4gICAgICAgICAgICAgICAgICAgID8gJ2ZsZXgnXG4gICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDQ5ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFjdGl2ZVRhYiAhPT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORVxuICAgICAgICAgICAgICAgICAgICBuZXh0VGlja0Z1bmN0aW9ucy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfcGFuZWxfdGV4dF9hbm5vdW5jZW1lbnRfY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIlxuICAgICAgICAgICAgICAgIGljb249e1xuICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlRFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgPyBCVE5fVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTF9BQ1RJVkVcbiAgICAgICAgICAgICAgICAgICAgOiBCVE5fVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvbmx5SWNvblxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhZG1pblRvb2xraXRFbnRpdGllLnRleHRBbm5vdW5jZW1lbnRDb250cm9sLmlzRW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICA/ICdmbGV4J1xuICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luOiB7IHJpZ2h0OiA4ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7LyogPEJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiYWRtaW5fdG9vbGtpdF9wYW5lbF9yZXdhcmRzX2NvbnRyb2xcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBpY29uPXtcbiAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5SRVdBUkRTX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgPyBCVE5fUkVXQVJEU19DT05UUk9MX0FDVElWRVxuICAgICAgICAgICAgICAgICAgICA6IEJUTl9SRVdBUkRTX0NPTlRST0xcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb25seUljb25cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTogYWRtaW5Ub29sa2l0RW50aXRpZS5yZXdhcmRzQ29udHJvbC5pc0VuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgPyAnZmxleCdcbiAgICAgICAgICAgICAgICAgICAgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogNDkgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogJzAnLFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFjdGl2ZVRhYiAhPT0gVGFiVHlwZS5SRVdBUkRTX0NPTlRST0wpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5OT05FXG4gICAgICAgICAgICAgICAgICAgIG5leHRUaWNrRnVuY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuUkVXQVJEU19DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPiAqL31cbiAgICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgICB7c3RhdGUuYWN0aXZlVGFiICE9PSBUYWJUeXBlLk5PTkUgPyAoXG4gICAgICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luOiB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMTAgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMzIgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDMyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzIgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMzIgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICB1aUJhY2tncm91bmQ9e3sgY29sb3I6IGNvbnRhaW5lckJhY2tncm91bmRDb2xvciB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MID8gKFxuICAgICAgICAgICAgICAgICAgPFRleHRBbm5vdW5jZW1lbnRzQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAgICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgICAgICAgICAgICBwbGF5ZXI9e3BsYXllcn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5WSURFT19DT05UUk9MID8gKFxuICAgICAgICAgICAgICAgICAgPFZpZGVvQ29udHJvbCBlbmdpbmU9e2VuZ2luZX0gc3RhdGU9e3N0YXRlfSAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIHtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuU01BUlRfSVRFTVNfQ09OVFJPTCA/IChcbiAgICAgICAgICAgICAgICAgIDxTbWFydEl0ZW1zQ29udHJvbCBlbmdpbmU9e2VuZ2luZX0gc3RhdGU9e3N0YXRlfSAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIHsvKiB7c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlJFV0FSRFNfQ09OVFJPTCA/IChcbiAgICAgICAgICAgICAgICAgIDxSZXdhcmRzQ29udHJvbCBlbmdpbmU9e2VuZ2luZX0gc3RhdGU9e3N0YXRlfSAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfSAqL31cbiAgICAgICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGhlaWdodDogNDIgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgd2lkdGg6IDQyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBhbGlnbkNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIHBvaW50ZXJGaWx0ZXI6ICdibG9jaycsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICAgIHRleHR1cmU6IHtcbiAgICAgICAgICAgICAgICBzcmM6IEJUTl9BRE1JTl9UT09MS0lUX0JBQ0tHUk9VTkQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRleHR1cmVNb2RlOiAnc3RyZXRjaCcsXG4gICAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuY3JlYXRlKDEsIDEsIDEsIDEpLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8RENMQnV0dG9uXG4gICAgICAgICAgICAgIHZhbHVlPVwiXCJcbiAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDQwICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgYWxpZ25Db250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgIHRleHR1cmU6IHtcbiAgICAgICAgICAgICAgICAgIHNyYzogQlROX0FETUlOX1RPT0xLSVRfQ09OVFJPTCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRleHR1cmVNb2RlOiAnc3RyZXRjaCcsXG4gICAgICAgICAgICAgICAgY29sb3I6IENvbG9yNC5jcmVhdGUoMSwgMSwgMSwgMSksXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUucGFuZWxPcGVuID0gIXN0YXRlLnBhbmVsT3BlblxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8VGV4dEFubm91bmNlbWVudHMgZW5naW5lPXtlbmdpbmV9IHN0YXRlPXtzdGF0ZX0gLz5cbiAgICA8L1VpRW50aXR5PlxuICApXG59XG4iXX0=
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN0QyxPQUFPLFFBQVEsRUFBRSxFQUNmLEtBQUssRUFDTCxNQUFNLElBQUksU0FBUyxFQUNuQixRQUFRLEdBRVQsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV2QixPQUFPLEVBQ0wsYUFBYSxHQUlkLE1BQU0sZ0JBQWdCLENBQUE7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sT0FBTyxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ2pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDekMsT0FBTyxFQUFTLE9BQU8sRUFBcUIsTUFBTSxTQUFTLENBQUE7QUFFM0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFjLE1BQU0scUJBQXFCLENBQUE7QUFDbkgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFtQixFQUFFLENBQUE7QUFDbkQsTUFBTSxDQUFDLElBQUksV0FBbUIs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LGlCQUFpQixJQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBSSxDQUMxQztRQUNYLHNCQUFzQixDQUFDLGtCQUFrQixJQUFJLENBQzNDLHVCQUFDLGNBQWMsSUFDYixXQUFXLEVBQUUsV0FBVyxFQUN4QixXQUFXLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxFQUNuQyxNQUFNLEVBQUUsTUFBTSxHQUNkLENBQ0g7S0FDRixDQUFBO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sb3I0IH0gZnJvbSAnQGRjbC9zZGsvbWF0aCdcbmltcG9ydCBSZWFjdEVjcywge1xuICBMYWJlbCxcbiAgQnV0dG9uIGFzIERDTEJ1dHRvbixcbiAgVWlFbnRpdHksXG4gIFJlYWN0QmFzZWRVaVN5c3RlbSxcbn0gZnJvbSAnQGRjbC9yZWFjdC1lY3MnXG5pbXBvcnQgeyBFbnRpdHksIElFbmdpbmUsIFBvaW50ZXJFdmVudHNTeXN0ZW0gfSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB7XG4gIGdldENvbXBvbmVudHMsXG4gIEdldFBsYXllckRhdGFSZXMsXG4gIElQbGF5ZXJzSGVscGVyLFxuICBJU0RLSGVscGVycyxcbn0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnXG5pbXBvcnQgeyBnZXRTY2FsZVVJRmFjdG9yIH0gZnJvbSAnLi4vdWknXG5pbXBvcnQgeyBWaWRlb0NvbnRyb2wgfSBmcm9tICcuL1ZpZGVvQ29udHJvbCdcbmltcG9ydCB7IFRleHRBbm5vdW5jZW1lbnRzQ29udHJvbCB9IGZyb20gJy4vVGV4dEFubm91bmNlbWVudHNDb250cm9sJ1xuaW1wb3J0IHsgU21hcnRJdGVtc0NvbnRyb2wgfSBmcm9tICcuL1NtYXJ0SXRlbXNDb250cm9sJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24nXG5pbXBvcnQgeyBUZXh0QW5ub3VuY2VtZW50cyB9IGZyb20gJy4vVGV4dEFubm91bmNlbWVudHMnXG5pbXBvcnQgeyBDT05URU5UX1VSTCB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgU3RhdGUsIFRhYlR5cGUsIFNlbGVjdGVkU21hcnRJdGVtIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IGdldEV4cGxvcmVyQ29tcG9uZW50cyB9IGZyb20gJy4uL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBCVE5fTU9ERVJBVElPTl9DT05UUk9MLCBNb2RlcmF0aW9uQ29udHJvbCwgbW9kZXJhdGlvbkNvbnRyb2xTdGF0ZSwgU2NlbmVBZG1pbiB9IGZyb20gJy4vTW9kZXJhdGlvbkNvbnRyb2wnXG5pbXBvcnQgeyBnZXRTY2VuZUFkbWlucyB9IGZyb20gJy4vTW9kZXJhdGlvbkNvbnRyb2wvYXBpJ1xuaW1wb3J0IHsgTW9kYWxBZG1pbkxpc3QgfSBmcm9tICcuL01vZGVyYXRpb25Db250cm9sL0FkbWluTGlzdCdcbmltcG9ydCB7IGlzUHJldmlldyB9IGZyb20gJy4vZmV0Y2gtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBuZXh0VGlja0Z1bmN0aW9uczogKCgpID0+IHZvaWQpW10gPSBbXVxuZXhwb3J0IGxldCBzY2FsZUZhY3RvcjogbnVtYmVyXG5cbmV4cG9ydCBsZXQgc3RhdGU6IFN0YXRlID0ge1xuICBhZG1pblRvb2xraXRVaUVudGl0eTogMCBhcyBFbnRpdHksXG4gIHBhbmVsT3BlbjogZmFsc2UsXG4gIGFjdGl2ZVRhYjogVGFiVHlwZS5OT05FLFxuICB2aWRlb0NvbnRyb2w6IHtcbiAgICBzZWxlY3RlZFZpZGVvUGxheWVyOiB1bmRlZmluZWQsXG4gIH0sXG4gIHNtYXJ0SXRlbXNDb250cm9sOiB7XG4gICAgc2VsZWN0ZWRTbWFydEl0ZW06IHVuZGVmaW5lZCxcbiAgICBzbWFydEl0ZW1zOiBuZXcgTWFwPEVudGl0eSwgU2VsZWN0ZWRTbWFydEl0ZW0+KCksXG4gIH0sXG4gIHRleHRBbm5vdW5jZW1lbnRDb250cm9sOiB7XG4gICAgZW50aXR5OiB1bmRlZmluZWQsXG4gICAgdGV4dDogdW5kZWZpbmVkLFxuICAgIG1lc3NhZ2VSYXRlVHJhY2tlcjogbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKSxcbiAgICBhbm5vdW5jZW1lbnRzOiBbXSxcbiAgICBtYXhBbm5vdW5jZW1lbnRzOiA0LFxuICB9LFxuICByZXdhcmRzQ29udHJvbDoge1xuICAgIHNlbGVjdGVkUmV3YXJkSXRlbTogdW5kZWZpbmVkLFxuICB9LFxufVxuXG5sZXQgc2NlbmVBZG1pbnNDYWNoZTogU2NlbmVBZG1pbltdID0gW11cblxuLy8gY29uc3QgQlROX1JFV0FSRFNfQ09OVFJPTCA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC1yZXdhcmRzLWNvbnRyb2wtYnV0dG9uLnBuZ2Bcbi8vIGNvbnN0IEJUTl9SRVdBUkRTX0NPTlRST0xfQUNUSVZFID0gYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2FkbWluLXBhbmVsLXJld2FyZHMtY29udHJvbC1hY3RpdmUtYnV0dG9uLnBuZ2BcblxuY29uc3QgQlROX1ZJREVPX0NPTlRST0wgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdmlkZW8tY29udHJvbC1idXR0b24ucG5nYFxuXG5jb25zdCBCVE5fU01BUlRfSVRFTV9DT05UUk9MID0gYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2FkbWluLXBhbmVsLXNtYXJ0LWl0ZW0tY29udHJvbC1idXR0b24ucG5nYFxuXG5jb25zdCBCVE5fVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTCA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC10ZXh0LWFubm91bmNlbWVudC1jb250cm9sLWJ1dHRvbi5wbmdgXG5cbmNvbnN0IEJUTl9BRE1JTl9UT09MS0lUX0NPTlRST0wgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtY29udHJvbC1idXR0b24ucG5nYFxuY29uc3QgQlROX0FETUlOX1RPT0xLSVRfQkFDS0dST1VORCA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9iYWNrZ3JvdW5kcy9hZG1pbi10b29sLWJhY2tncm91bmQucG5nYFxuXG5leHBvcnQgY29uc3QgY29udGFpbmVyQmFja2dyb3VuZENvbG9yID0gQ29sb3I0LmNyZWF0ZSgwLCAwLCAwLCAwLjc1KVxuXG4vLyBUaGUgZWRpdG9yIHN0YXJ0cyB1c2luZyBlbnRpdGllcyBmcm9tIFs4MDAxXS5cbmNvbnN0IEFETUlOX1RPT0xTX0VOVElUWSA9IDgwMDAgYXMgRW50aXR5XG5cbmZ1bmN0aW9uIGdldEFkbWluVG9vbGtpdEVudGl0eShlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBBZG1pblRvb2xzIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSlcbiAgcmV0dXJuIEFycmF5LmZyb20oZW5naW5lLmdldEVudGl0aWVzV2l0aChBZG1pblRvb2xzKSlbMF1bMF1cbn1cblxuZnVuY3Rpb24gZ2V0QWRtaW5Ub29sa2l0Q29tcG9uZW50KGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCB7IEFkbWluVG9vbHMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKVxuICByZXR1cm4gQXJyYXkuZnJvbShlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKEFkbWluVG9vbHMpKVswXVsxXVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hTY2VuZUFkbWlucygpIHtcbiAgY29uc3QgW2Vycm9yLCByZXNwb25zZV0gPSBhd2FpdCBnZXRTY2VuZUFkbWlucygpXG5cblxuICBpZiAoZXJyb3IpIHtcbiAgICAvLyB1c2VyIGRvZXNudCBoYXZlIHBlcm1pc3Npb25zXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBlcnJvciB9KSlcbiAgICBzY2VuZUFkbWluc0NhY2hlID0gW11cbiAgICByZXR1cm5cbiAgfVxuICBzY2VuZUFkbWluc0NhY2hlID0gKHJlc3BvbnNlID8/IFtdKVxuICAgIC5tYXAoKCQpID0+ICh7XG4gICAgICBuYW1lOiAkLm5hbWUsXG4gICAgICBhZGRyZXNzOiAkLmFkbWluLFxuICAgICAgcm9sZTogJ2FkbWluJyBhcyBjb25zdCxcbiAgICAgIHZlcmlmaWVkOiAhJC5uYW1lLmluY2x1ZGVzKCcjJyksXG4gICAgICBjYW5CZVJlbW92ZWQ6ICEhJC5jYW5CZVJlbW92ZWRcbiAgICB9KSlcbiAgICAuc29ydCgoYSkgPT4gYS5jYW5CZVJlbW92ZWQgPyAxIDogLTEpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbWFydEl0ZW1zKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBhZG1pblRvb2xraXRDb21wb25lbnQgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKVxuXG4gIHJldHVybiBBcnJheS5mcm9tKGFkbWluVG9vbGtpdENvbXBvbmVudC5zbWFydEl0ZW1zQ29udHJvbC5zbWFydEl0ZW1zID8/IFtdKVxufVxuXG5mdW5jdGlvbiBnZXRSZXdhcmRzKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBhZG1pblRvb2xraXRDb21wb25lbnQgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKVxuXG4gIHJldHVybiBBcnJheS5mcm9tKGFkbWluVG9vbGtpdENvbXBvbmVudD8ucmV3YXJkc0NvbnRyb2w/LnJld2FyZEl0ZW1zID8/IFtdKVxufVxuXG5mdW5jdGlvbiBpbml0VGV4dEFubm91bmNlbWVudFN5bmMoZW5naW5lOiBJRW5naW5lKSB7XG4gIGNvbnN0IHsgVGV4dEFubm91bmNlbWVudHMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKVxuXG4gIFRleHRBbm5vdW5jZW1lbnRzLmNyZWF0ZU9yUmVwbGFjZShzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSwge1xuICAgIHRleHQ6ICcnLFxuICAgIGF1dGhvcjogJycsXG4gICAgaWQ6ICcnXG4gIH0pXG59XG5cbi8vIEluaXRpYWxpemUgYWRtaW4gZGF0YSBiZWZvcmUgVUkgcmVuZGVyaW5nXG5sZXQgYWRtaW5EYXRhSW5pdGlhbGl6ZWQgPSBmYWxzZVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVBZG1pbkRhdGEoXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgc2RrSGVscGVycz86IElTREtIZWxwZXJzLFxuKSB7XG4gIGNvbnNvbGUubG9nKCdpbml0aWFsaXplQWRtaW5EYXRhJylcbiAgaWYgKCFhZG1pbkRhdGFJbml0aWFsaXplZCkge1xuICAgIGNvbnNvbGUubG9nKCdpbml0aWFsaXplQWRtaW5EYXRhIC0gbm90IGluaXRpYWxpemVkJylcbiAgICBjb25zdCB7IFRleHRBbm5vdW5jZW1lbnRzLCBWaWRlb0NvbnRyb2xTdGF0ZSB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpXG5cbiAgICAvLyBJbml0aWFsaXplIEFkbWluVG9vbGtpdFVpRW50aXR5XG4gICAgc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHkgPSBnZXRBZG1pblRvb2xraXRFbnRpdHkoZW5naW5lKSA/PyBlbmdpbmUuYWRkRW50aXR5KClcblxuICAgIC8vIEluaXRpYWxpemUgVGV4dEFubm91bmNlbWVudHMgc3luYyBjb21wb25lbnRcbiAgICBpbml0VGV4dEFubm91bmNlbWVudFN5bmMoZW5naW5lKVxuXG4gICAgLy8gLy8gSW5pdGlhbGl6ZSBSZXdhcmRzIHN5bmNcbiAgICAvLyBpbml0UmV3YXJkc1N5bmMoZW5naW5lLCBzZGtIZWxwZXJzKVxuXG4gICAgaWYgKCFWaWRlb0NvbnRyb2xTdGF0ZS5nZXRPck51bGwoc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHkpKSB7XG4gICAgICBWaWRlb0NvbnRyb2xTdGF0ZS5jcmVhdGUoc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHkpXG4gICAgfVxuXG4gICAgc2RrSGVscGVycz8uc3luY0VudGl0eT8uKFxuICAgICAgc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHksXG4gICAgICBbVmlkZW9Db250cm9sU3RhdGUuY29tcG9uZW50SWQsIFRleHRBbm5vdW5jZW1lbnRzLmNvbXBvbmVudElkXSxcbiAgICAgIEFETUlOX1RPT0xTX0VOVElUWSxcbiAgICApXG5cbiAgICBlbmdpbmUuYWRkU3lzdGVtKCgpID0+IHtcbiAgICAgIGlmIChuZXh0VGlja0Z1bmN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRUaWNrID0gbmV4dFRpY2tGdW5jdGlvbnMuc2hpZnQoKVxuICAgICAgICBpZiAobmV4dFRpY2spIHtcbiAgICAgICAgICBuZXh0VGljaygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpXG5cbiAgICAvLyBJbml0aWFsaXplIHNjZW5lIGRhdGFcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBmZXRjaFNjZW5lQWRtaW5zKCksXG4gICAgXSlcblxuICAgIGFkbWluRGF0YUluaXRpYWxpemVkID0gdHJ1ZVxuXG4gICAgY29uc29sZS5sb2coJ2luaXRpYWxpemVBZG1pbkRhdGEgLSBpbml0aWFsaXplZCcpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFkbWluVG9vbGtpdFVJKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW06IFBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gIHJlYWN0QmFzZWRVaVN5c3RlbTogUmVhY3RCYXNlZFVpU3lzdGVtLFxuICBzZGtIZWxwZXJzPzogSVNES0hlbHBlcnMsXG4gIHBsYXllcnNIZWxwZXI/OiBJUGxheWVyc0hlbHBlcixcbikge1xuICAvLyBJbml0aWFsaXplIGFkbWluIGRhdGEgYmVmb3JlIHNldHRpbmcgdXAgdGhlIFVJXG4gIGluaXRpYWxpemVBZG1pbkRhdGEoZW5naW5lLCBzZGtIZWxwZXJzKS50aGVuKCgpID0+IHtcbiAgICBjb25zb2xlLmxvZygnY3JlYXRlQWRtaW5Ub29sa2l0VUkgLSBpbml0aWFsaXplZCcpXG4gICAgcmVhY3RCYXNlZFVpU3lzdGVtLnNldFVpUmVuZGVyZXIoKCkgPT5cbiAgICAgIHVpQ29tcG9uZW50KGVuZ2luZSwgcG9pbnRlckV2ZW50c1N5c3RlbSwgc2RrSGVscGVycywgcGxheWVyc0hlbHBlciksXG4gICAgKVxuICB9KVxufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWRBZG1pbihcbiAgX2VuZ2luZTogSUVuZ2luZSxcbiAgYWRtaW5Ub29sa2l0RW50aXRpZTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0QWRtaW5Ub29sa2l0Q29tcG9uZW50PixcbiAgcGxheWVyOiBHZXRQbGF5ZXJEYXRhUmVzIHwgbnVsbCB8IHVuZGVmaW5lZCxcbikge1xuICBpZiAoIXBsYXllcikgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgcGxheWVyQWRkcmVzcyA9IHBsYXllci51c2VySWQudG9Mb3dlckNhc2UoKVxuICBjb25zdCBpc0FkbWluID0gc2NlbmVBZG1pbnNDYWNoZS5maW5kKCQgPT4gJC5hZGRyZXNzID09PSBwbGF5ZXJBZGRyZXNzKVxuXG4gIHJldHVybiBpc0FkbWluIHx8IGlzUHJldmlldygpXG59XG5cbmNvbnN0IHVpQ29tcG9uZW50ID0gKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW06IFBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gIHNka0hlbHBlcnM/OiBJU0RLSGVscGVycyxcbiAgcGxheWVyc0hlbHBlcj86IElQbGF5ZXJzSGVscGVyLFxuKSA9PiB7XG4gIGNvbnN0IGFkbWluVG9vbGtpdEVudGl0eSA9IGdldEFkbWluVG9vbGtpdENvbXBvbmVudChlbmdpbmUpXG4gIGNvbnN0IHBsYXllciA9IHBsYXllcnNIZWxwZXI/LmdldFBsYXllcigpXG4gIGNvbnN0IGlzUGxheWVyQWRtaW4gPSBpc0FsbG93ZWRBZG1pbihlbmdpbmUsIGFkbWluVG9vbGtpdEVudGl0eSwgcGxheWVyKVxuICBzY2FsZUZhY3RvciA9IGdldFNjYWxlVUlGYWN0b3IoZW5naW5lKVxuXG4gIHJldHVybiBbXG4gICAgPFVpRW50aXR5XG4gICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICBwb3NpdGlvblR5cGU6ICdhYnNvbHV0ZScsXG4gICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7aXNQbGF5ZXJBZG1pbiA/IChcbiAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgIHBvc2l0aW9uVHlwZTogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICAgICAgcG9zaXRpb246IHsgdG9wOiA4MCAqIHNjYWxlRmFjdG9yLCByaWdodDogMTAgKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IHN0YXRlLnBhbmVsT3BlbiA/ICdmbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgd2lkdGg6IDUwMCAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICBwb2ludGVyRmlsdGVyOiAnYmxvY2snLFxuICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgbWFyZ2luOiB7IHJpZ2h0OiA4ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAxMiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IDEyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICByaWdodDogMTIgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB1aUJhY2tncm91bmQ9e3sgY29sb3I6IGNvbnRhaW5lckJhY2tncm91bmRDb2xvciB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICB2YWx1ZT1cIkFETUlOIFRPT0xTXCJcbiAgICAgICAgICAgICAgICBmb250U2l6ZT17MjAgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICAgICAgICBjb2xvcj17Q29sb3I0LmNyZWF0ZSgxNjAsIDE1NSwgMTY4LCAxKX1cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17eyBmbGV4R3JvdzogMSB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJhZG1pbl90b29sa2l0X21vZGVyYXRpb25fY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17XG4gICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuTU9ERVJBVElPTl9DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgID8gJ3ByaW1hcnknXG4gICAgICAgICAgICAgICAgICAgIDogJ3RleHQnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGljb249e0JUTl9NT0RFUkFUSU9OX0NPTlRST0x9XG4gICAgICAgICAgICAgICAgb25seUljb25cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTogYWRtaW5Ub29sa2l0RW50aXR5Lm1vZGVyYXRpb25Db250cm9sLmlzRW5hYmxlZCAmJiAhaXNQcmV2aWV3KClcbiAgICAgICAgICAgICAgICAgICAgPyAnZmxleCdcbiAgICAgICAgICAgICAgICAgICAgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogNDkgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogeyByaWdodDogOCAqIHNjYWxlRmFjdG9yIH0sXG4gICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGljb25CYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICAgICAgICBjb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLk1PREVSQVRJT05fQ09OVFJPTFxuICAgICAgICAgICAgICAgICAgICAgID8gQ29sb3I0LkJsYWNrKClcbiAgICAgICAgICAgICAgICAgICAgICA6IENvbG9yNC5XaGl0ZSgpLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17eyBoZWlnaHQ6ICcxMDAlJywgd2lkdGg6ICcxMDAlJyB9fVxuICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuYWN0aXZlVGFiICE9PSBUYWJUeXBlLk1PREVSQVRJT05fQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5NT0RFUkFUSU9OX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfcGFuZWxfdmlkZW9fY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17XG4gICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCA/ICdwcmltYXJ5JyA6ICd0ZXh0J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpY29uPXtCVE5fVklERU9fQ09OVFJPTH1cbiAgICAgICAgICAgICAgICBpY29uQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5WSURFT19DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgICAgPyBDb2xvcjQuQmxhY2soKVxuICAgICAgICAgICAgICAgICAgICAgIDogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbmx5SWNvblxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhZG1pblRvb2xraXRFbnRpdHkudmlkZW9Db250cm9sLmlzRW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICA/ICdmbGV4J1xuICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luOiB7IHJpZ2h0OiA4ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5WSURFT19DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJhZG1pbl90b29sa2l0X3BhbmVsX3NtYXJ0X2l0ZW1zX2NvbnRyb2xcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9e1xuICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgPyAncHJpbWFyeSdcbiAgICAgICAgICAgICAgICAgICAgOiAndGV4dCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWNvbj17QlROX1NNQVJUX0lURU1fQ09OVFJPTH1cbiAgICAgICAgICAgICAgICBpY29uQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgICAgPyBDb2xvcjQuQmxhY2soKVxuICAgICAgICAgICAgICAgICAgICAgIDogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbmx5SWNvblxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhZG1pblRvb2xraXRFbnRpdHkuc21hcnRJdGVtc0NvbnRyb2wuaXNFbmFibGVkXG4gICAgICAgICAgICAgICAgICAgID8gJ2ZsZXgnXG4gICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDQ5ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFjdGl2ZVRhYiAhPT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORVxuICAgICAgICAgICAgICAgICAgICBuZXh0VGlja0Z1bmN0aW9ucy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfcGFuZWxfdGV4dF9hbm5vdW5jZW1lbnRfY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17XG4gICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTCA/ICdwcmltYXJ5JyA6ICd0ZXh0J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpY29uPXtCVE5fVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTH1cbiAgICAgICAgICAgICAgICBpY29uQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgICAgPyBDb2xvcjQuQmxhY2soKVxuICAgICAgICAgICAgICAgICAgICAgIDogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbmx5SWNvblxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhZG1pblRvb2xraXRFbnRpdHkudGV4dEFubm91bmNlbWVudENvbnRyb2wuaXNFbmFibGVkXG4gICAgICAgICAgICAgICAgICAgID8gJ2ZsZXgnXG4gICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDQ5ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFjdGl2ZVRhYiAhPT0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORVxuICAgICAgICAgICAgICAgICAgICBuZXh0VGlja0Z1bmN0aW9ucy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLlRFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MID8gKFxuICAgICAgICAgICAgICA8VGV4dEFubm91bmNlbWVudHNDb250cm9sXG4gICAgICAgICAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgICAgICAgIHBsYXllcj17cGxheWVyfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlZJREVPX0NPTlRST0wgPyAoXG4gICAgICAgICAgICAgIDxWaWRlb0NvbnRyb2wgZW5naW5lPXtlbmdpbmV9IHN0YXRlPXtzdGF0ZX0gLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MID8gKFxuICAgICAgICAgICAgICA8U21hcnRJdGVtc0NvbnRyb2wgZW5naW5lPXtlbmdpbmV9IHN0YXRlPXtzdGF0ZX0gLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5NT0RFUkFUSU9OX0NPTlRST0wgJiYgKFxuICAgICAgICAgICAgICA8TW9kZXJhdGlvbkNvbnRyb2wgZW5naW5lPXtlbmdpbmV9IHBsYXllcj17cGxheWVyfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBoZWlnaHQ6IDQyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgIHdpZHRoOiA0MiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgYWxpZ25Db250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBwb2ludGVyRmlsdGVyOiAnYmxvY2snLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICB0ZXh0dXJlOiB7XG4gICAgICAgICAgICAgICAgc3JjOiBCVE5fQURNSU5fVE9PTEtJVF9CQUNLR1JPVU5ELFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0ZXh0dXJlTW9kZTogJ3N0cmV0Y2gnLFxuICAgICAgICAgICAgICBjb2xvcjogQ29sb3I0LmNyZWF0ZSgxLCAxLCAxLCAxKSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPERDTEJ1dHRvblxuICAgICAgICAgICAgICB2YWx1ZT1cIlwiXG4gICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgIHdpZHRoOiA0MCAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGFsaWduQ29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB1aUJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICB0ZXh0dXJlOiB7XG4gICAgICAgICAgICAgICAgICBzcmM6IEJUTl9BRE1JTl9UT09MS0lUX0NPTlRST0wsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlTW9kZTogJ3N0cmV0Y2gnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuY3JlYXRlKDEsIDEsIDEsIDEpLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0YXRlLnBhbmVsT3BlbiA9ICFzdGF0ZS5wYW5lbE9wZW5cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICkgOiBudWxsfVxuICAgICAgPFRleHRBbm5vdW5jZW1lbnRzIGVuZ2luZT17ZW5naW5lfSBzdGF0ZT17c3RhdGV9IC8+XG4gICAgPC9VaUVudGl0eT4sXG4gICAgbW9kZXJhdGlvbkNvbnRyb2xTdGF0ZS5zaG93TW9kYWxBZG1pbkxpc3QgJiYgKFxuICAgICAgPE1vZGFsQWRtaW5MaXN0XG4gICAgICAgIHNjYWxlRmFjdG9yPXtzY2FsZUZhY3Rvcn1cbiAgICAgICAgc2NlbmVBZG1pbnM9e3NjZW5lQWRtaW5zQ2FjaGUgPz8gW119XG4gICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgLz5cbiAgICApLFxuICBdXG59XG4iXX0=