tango-app-ui-store-builder 1.0.12 → 1.0.13

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 (34) hide show
  1. package/esm2022/lib/components/fixture-template/fixture-template.component.mjs +9 -23
  2. package/esm2022/lib/components/fixture-template/template-basic-details/template-basic-details.component.mjs +47 -84
  3. package/esm2022/lib/components/fixture-template/template-products/template-products.component.mjs +1 -1
  4. package/esm2022/lib/components/fixture-template/template-vms/template-vms.component.mjs +5 -4
  5. package/esm2022/lib/components/manage-store-plano/manage-store-plano-feedback/manage-store-plano-feedback.component.mjs +3 -3
  6. package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +46 -366
  7. package/esm2022/lib/components/manage-store-plano/plano-rollout/plano-rollout.component.mjs +10 -51
  8. package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +9 -26
  9. package/esm2022/lib/components/manage-store-plano/template-products/template-products.component.mjs +2 -2
  10. package/esm2022/lib/components/manage-store-plano/template-vms/template-vms.component.mjs +73 -101
  11. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +3 -3
  12. package/esm2022/lib/interfaces/fixture-template.interface.mjs +1 -1
  13. package/esm2022/lib/services/store-builder.service.mjs +4 -4
  14. package/esm2022/lib/tango-store-builder.module.mjs +7 -11
  15. package/fesm2022/tango-app-ui-store-builder.mjs +1147 -2524
  16. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  17. package/lib/components/fixture-template/fixture-template.component.d.ts +0 -1
  18. package/lib/components/fixture-template/template-basic-details/template-basic-details.component.d.ts +9 -9
  19. package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +1 -1
  20. package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +1 -1
  21. package/lib/components/manage-store-plano/manage-store-plano.component.d.ts +6 -23
  22. package/lib/components/manage-store-plano/plano-rollout/plano-rollout.component.d.ts +1 -1
  23. package/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.d.ts +6 -7
  24. package/lib/components/manage-store-plano/template-vms/template-vms.component.d.ts +9 -9
  25. package/lib/interfaces/fixture-template.interface.d.ts +2 -2
  26. package/lib/services/store-builder.service.d.ts +1 -1
  27. package/lib/tango-store-builder.module.d.ts +33 -35
  28. package/package.json +1 -1
  29. package/esm2022/lib/components/manage-store-plano/verification-feedback/action-confirm-popup/action-confirm-popup.component.mjs +0 -80
  30. package/esm2022/lib/components/manage-store-plano/verification-feedback/fixture/fixture.component.mjs +0 -375
  31. package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +0 -486
  32. package/lib/components/manage-store-plano/verification-feedback/action-confirm-popup/action-confirm-popup.component.d.ts +0 -21
  33. package/lib/components/manage-store-plano/verification-feedback/fixture/fixture.component.d.ts +0 -48
  34. package/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.d.ts +0 -76
@@ -21,7 +21,7 @@ import * as i10 from "./template-basic-details/template-basic-details.component"
21
21
  import * as i11 from "./template-products/template-products.component";
22
22
  import * as i12 from "./template-vms/template-vms.component";
23
23
  import * as i13 from "../store-plano/store-plano-tree-view/store-plano-tree-view.component";
24
- import * as i14 from "./verification-feedback/verification-feedback.component";
24
+ import * as i14 from "./manage-store-plano-feedback/manage-store-plano-feedback.component";
25
25
  export class ManageStorePlanoComponent {
26
26
  apiService;
27
27
  route;
@@ -36,7 +36,6 @@ export class ManageStorePlanoComponent {
36
36
  cd;
37
37
  canvasRef;
38
38
  containerRef;
39
- noStoreVideoModalRef;
40
39
  onResize() {
41
40
  setTimeout(() => {
42
41
  this.resizeCanvas();
@@ -56,15 +55,12 @@ export class ManageStorePlanoComponent {
56
55
  otherElementsSubscriptions = [];
57
56
  planoData;
58
57
  floorData;
59
- originalFloorData; //used to rollback to original layout state on click cancel while editing.
60
58
  cdnUrl;
61
59
  fixtureTemplates = [];
62
- allFixtures = []; // all fixtures including the master templates for tree view
63
- allFixtureInstances = []; //only the layout fixtures
60
+ allFixtures = [];
64
61
  storeFeedback;
65
62
  selectedFixture;
66
63
  selectedFixtureData;
67
- selectedFixtureFeedback;
68
64
  editFixture = false;
69
65
  editFixtureSection = "basic-details";
70
66
  submitFixture = false;
@@ -92,9 +88,7 @@ export class ManageStorePlanoComponent {
92
88
  { label: "Mirror", value: "Mirror" },
93
89
  { label: "Others", value: "Others" },
94
90
  ];
95
- // isUserInteractedWithCanvas: boolean = false;
96
- activeHighlight = null;
97
- cancelHighlightBlink = false;
91
+ isUserInteractedWithCanvas = false;
98
92
  constructor(apiService, route, fb, gs, titleCase, toastService, modalService, pageInfo, location, router, cd) {
99
93
  this.apiService = apiService;
100
94
  this.route = route;
@@ -227,7 +221,7 @@ export class ManageStorePlanoComponent {
227
221
  this.canvas.on("mouse:wheel", (opt) => {
228
222
  const e = opt.e;
229
223
  if (e.ctrlKey || e.metaKey) {
230
- // this.isUserInteractedWithCanvas = true;
224
+ this.isUserInteractedWithCanvas = true;
231
225
  const delta = e.deltaY;
232
226
  let zoom = this.canvas.getZoom();
233
227
  zoom *= 0.995 ** delta;
@@ -254,7 +248,7 @@ export class ManageStorePlanoComponent {
254
248
  });
255
249
  this.canvas.on("mouse:move", (opt) => {
256
250
  if (isDragging && this.canvas.viewportTransform) {
257
- // this.isUserInteractedWithCanvas = true;
251
+ this.isUserInteractedWithCanvas = true;
258
252
  const e = opt.e;
259
253
  const vpt = this.canvas.viewportTransform;
260
254
  vpt[4] += e.clientX - lastPosX;
@@ -293,21 +287,15 @@ export class ManageStorePlanoComponent {
293
287
  this.submitFixture = false;
294
288
  }, 100);
295
289
  }
296
- async onFixturePageCancel() {
290
+ onFixturePageCancel() {
297
291
  this.submitFixture = false;
298
292
  this.selectedFixtureData = null;
299
293
  this.editFixtureSection = "basic-details";
300
294
  this.editFixture = false;
301
295
  this.layoutForm.disable({ emitEvent: false });
302
- await this.renderFloor(false);
303
- setTimeout(() => {
304
- this.resizeCanvas();
305
- this.fitCanvasToLayoutAnimated();
306
- }, 300);
296
+ this.renderFloor(false);
307
297
  }
308
298
  onFixtureSubmit(event) {
309
- if (!event)
310
- return;
311
299
  if (event?.shelf) {
312
300
  event.shelf = event.shelf.map((shelf, index) => {
313
301
  let findShelf = this.selectedFixtureData.shelfConfig.find((ele) => ele.shelfNumber == index + 1);
@@ -321,12 +309,7 @@ export class ManageStorePlanoComponent {
321
309
  }
322
310
  return shelf;
323
311
  });
324
- this.selectedFixtureData["shelfConfig"] = event?.shelf;
325
- this.selectedFixtureData["description"] = event?.description ?? "";
326
- this.selectedFixtureData["templateGroupName"] =
327
- event?.templateGroupName ?? "";
328
- this.selectedFixtureData.header.label = event?.headerLabel ?? "";
329
- this.selectedFixtureData.footer.label = event?.footerLabel ?? "";
312
+ this.selectedFixtureData.shelfConfig = event.shelf;
330
313
  }
331
314
  else if (event?.section) {
332
315
  event.section.forEach((sec) => {
@@ -341,10 +324,11 @@ export class ManageStorePlanoComponent {
341
324
  });
342
325
  }
343
326
  else if (event?.vmConfig) {
344
- this.selectedFixtureData["vmConfig"] = event?.vmConfig;
327
+ this.selectedFixtureData.vmConfig = event.vmConfig;
345
328
  }
346
329
  else {
347
330
  if (event) {
331
+ // this.floorData = null
348
332
  this.createForm();
349
333
  this.selectedFixtureData = null;
350
334
  this.editFixtureSection = "basic-details";
@@ -353,31 +337,12 @@ export class ManageStorePlanoComponent {
353
337
  }
354
338
  }
355
339
  }
356
- // validateFixtureData() {
357
- // this.fixtureTemplateDetails?.vmConfig?.forEach((vm) => {
358
- // if ((vm?.startYPosition ?? 1) > (this.fixtureTemplateDetails?.shelfConfig?.length ?? 1)) {
359
- // vm.startYPosition = null;
360
- // this.ps.fixtureTemplateErrorTabs.vms = true;
361
- // }
362
- // if ((vm?.endYPosition ?? 1) > (this.fixtureTemplateDetails?.shelfConfig?.length ?? 1)) {
363
- // vm.endYPosition = null;
364
- // this.ps.fixtureTemplateErrorTabs.vms = true;
365
- // }
366
- // });
367
- // }
368
340
  togglePanel(side, action) {
369
341
  if (side === "left") {
370
342
  this.isLeftPanelCollapsed = action ?? !this.isLeftPanelCollapsed;
371
- if (!this.isLeftPanelCollapsed)
372
- this.isRightPanelCollapsed = true;
373
343
  }
374
344
  else {
375
345
  this.isRightPanelCollapsed = action ?? !this.isRightPanelCollapsed;
376
- if (!this.isRightPanelCollapsed)
377
- this.isLeftPanelCollapsed = true;
378
- if (!this.selectedFixtureFeedback) {
379
- this.onChangeFixtureOnFeedbackPanel({});
380
- }
381
346
  }
382
347
  setTimeout(() => {
383
348
  this.resizeCanvas();
@@ -417,11 +382,6 @@ export class ManageStorePlanoComponent {
417
382
  if (checkPublishState) {
418
383
  // this.calculatePublishingState()
419
384
  }
420
- if (this.selectedFixtureFeedback?.fixtureFeedback?.fixtureId) {
421
- this.onChangeFixtureOnFeedbackPanel({
422
- currentFixture: this.selectedFixtureFeedback.fixtureFeedback.fixtureId,
423
- });
424
- }
425
385
  resolve(true);
426
386
  },
427
387
  error: () => {
@@ -693,7 +653,6 @@ export class ManageStorePlanoComponent {
693
653
  for (let i = 0; i < fixtureFeedback.length; i++) {
694
654
  const issue = fixtureFeedback?.[i]?.fixtureAIData;
695
655
  if (issue) {
696
- const targetFixtureId = issue.fixtureId;
697
656
  // for (let j = 0; j < issues.length; j++) {
698
657
  // const fixtures = issue.Details.filter(
699
658
  // (fixture: any) => fixture.status === "pending"
@@ -701,6 +660,7 @@ export class ManageStorePlanoComponent {
701
660
  // for (let j = 0; j < fixtures.length; j++) {
702
661
  // const fixture = fixtures[j];
703
662
  // if (fixture.associatedElementType === 'wall') {
663
+ const targetFixtureId = fixtureFeedback?.[i].fixtureId;
704
664
  for (const wallElement of this.floorData.layoutPolygon) {
705
665
  if (wallElement.elementType !== "wall" ||
706
666
  !Array.isArray(wallElement.fixtures))
@@ -1212,11 +1172,14 @@ export class ManageStorePlanoComponent {
1212
1172
  }
1213
1173
  catch { }
1214
1174
  this.renderFloor();
1215
- // this.selectFixtureFeedback();
1216
1175
  this.isPageLoading = false;
1217
1176
  if (enable) {
1218
1177
  this.layoutForm?.disable({ emitEvent: false });
1219
1178
  }
1179
+ setTimeout(() => {
1180
+ this.resizeCanvas();
1181
+ this.fitCanvasToLayoutAnimated();
1182
+ }, 300);
1220
1183
  },
1221
1184
  error: (err) => {
1222
1185
  this.isPageLoading = false;
@@ -1233,12 +1196,8 @@ export class ManageStorePlanoComponent {
1233
1196
  extractedFixture.push(...(lp.fixtures ?? []));
1234
1197
  });
1235
1198
  this.allFixtures = extractedFixture;
1236
- this.allFixtureInstances = [
1237
- ...this.floorData?.layoutPolygon.flatMap((e) => e.fixtures),
1238
- ...this.floorData?.centerFixture,
1239
- ];
1240
1199
  }
1241
- async renderFloor(update = true) {
1200
+ renderFloor(update = true) {
1242
1201
  this.storeMetrics.fixtureCount = this.floorData.fixtureCount;
1243
1202
  this.storeMetrics.vmCount = this.floorData.vmCount;
1244
1203
  this.drawInitialContent();
@@ -1313,16 +1272,6 @@ export class ManageStorePlanoComponent {
1313
1272
  this.canvas.clear();
1314
1273
  this.reorderFixture(this.floorData);
1315
1274
  await this.drawLayoutElements();
1316
- setTimeout(() => {
1317
- this.resizeCanvas();
1318
- this.fitCanvasToLayoutAnimated();
1319
- }, 300);
1320
- if (this.selectedFixtureFeedback?.fixtureFeedback?.fixtureId &&
1321
- !this.isRightPanelCollapsed &&
1322
- this.activeHighlight) {
1323
- this.canvas.add(this.activeHighlight);
1324
- this.keepHighlightOnTop();
1325
- }
1326
1275
  // this.drawBg();
1327
1276
  }
1328
1277
  getFullLayoutBounds() {
@@ -1345,9 +1294,7 @@ export class ManageStorePlanoComponent {
1345
1294
  };
1346
1295
  }
1347
1296
  fitCanvasToLayoutAnimated(duration = 400) {
1348
- if (!this.canvas)
1349
- return;
1350
- if (this.layoutForm.enabled)
1297
+ if (!this.canvas || this.isUserInteractedWithCanvas)
1351
1298
  return;
1352
1299
  const bounds = this.getFullLayoutBounds();
1353
1300
  if (!bounds.width || !bounds.height)
@@ -2445,8 +2392,17 @@ export class ManageStorePlanoComponent {
2445
2392
  if (this.layoutForm.disabled) {
2446
2393
  this.togglePanel("right", false);
2447
2394
  }
2448
- this.highlightFixture(target);
2449
- this.selectFixtureOnCanvasClick(target, true);
2395
+ if (target) {
2396
+ this.selectedFixture = {
2397
+ fixtureType: target.fixtureType,
2398
+ wallIndex: target.wallIndex,
2399
+ fixtureIndex: target.fixtureIndex,
2400
+ fixtureId: target.fixtureId,
2401
+ issue: target.issue,
2402
+ issueData: target.issueData,
2403
+ vmConfig: target.vmConfig,
2404
+ };
2405
+ }
2450
2406
  });
2451
2407
  fixtureGroup.fixtureType = fixtureData.fixtureType;
2452
2408
  fixtureGroup.wallIndex = fixtureData.associatedElementNumber;
@@ -2739,44 +2695,6 @@ export class ManageStorePlanoComponent {
2739
2695
  canvas.discardActiveObject();
2740
2696
  canvas.requestRenderAll();
2741
2697
  }
2742
- selectFixtureOnCanvasClick(target, collapseTaskInfo = false) {
2743
- if (target) {
2744
- this.selectedFixture = {
2745
- fixtureType: target.fixtureType,
2746
- wallIndex: target.wallIndex,
2747
- fixtureIndex: target.fixtureIndex,
2748
- fixtureId: target.fixtureId,
2749
- issue: target.issue,
2750
- issueData: target.issueData,
2751
- vmConfig: target.vmConfig,
2752
- };
2753
- this.selectFixtureFeedback(this.selectedFixture.fixtureId, collapseTaskInfo);
2754
- }
2755
- }
2756
- selectFixtureFeedback(fixtureId, collapseTaskInfo = false) {
2757
- const currentFixtureFeedback = this.storeFeedback.fixtureData.find((fb) => fb.fixtureId === fixtureId);
2758
- if (currentFixtureFeedback) {
2759
- this.selectedFixtureFeedback = {
2760
- globalComments: this.storeFeedback.fixtureComment,
2761
- fixtureFeedback: {
2762
- ...currentFixtureFeedback,
2763
- FixtureData: structuredClone(this.allFixtureInstances.find((fi) => fi._id === fixtureId)),
2764
- },
2765
- taskInfoToggle: collapseTaskInfo,
2766
- };
2767
- }
2768
- else {
2769
- this.selectedFixtureFeedback = {
2770
- globalComments: [],
2771
- fixtureFeedback: {
2772
- fixtureId: fixtureId,
2773
- FixtureData: structuredClone(this.allFixtureInstances.find((fi) => fi._id === fixtureId)),
2774
- fixtureAIData: null,
2775
- },
2776
- taskInfoToggle: collapseTaskInfo,
2777
- };
2778
- }
2779
- }
2780
2698
  async getFixtureTemplates() {
2781
2699
  const payload = {
2782
2700
  clientId: this.clientId,
@@ -3005,6 +2923,8 @@ export class ManageStorePlanoComponent {
3005
2923
  };
3006
2924
  }
3007
2925
  this.renderFloor(false);
2926
+ // this.drawInitialContent();
2927
+ // this.subscribeToFixtureConfigIdChanges()
3008
2928
  this.publishingState = "layout";
3009
2929
  },
3010
2930
  error: () => {
@@ -3171,93 +3091,6 @@ export class ManageStorePlanoComponent {
3171
3091
  link.download = `${this.planoData.storeName}_${this.floorData.floorName}.png`;
3172
3092
  link.click();
3173
3093
  }
3174
- async handleFeedbackAction(userAction) {
3175
- try {
3176
- let targetFixture = {
3177
- ...(this.floorData.layoutPolygon
3178
- .flatMap((p) => p.fixtures)
3179
- .concat(this.floorData.centerFixture)
3180
- .find((f) => f._id === this.selectedFixture.fixtureId) || null),
3181
- userAction: userAction.action,
3182
- };
3183
- this.selectedFixtureData = { ...targetFixture };
3184
- if (userAction.action === "acceptAi" ||
3185
- userAction.action === "editWithAi") {
3186
- if (userAction.fixtureData.header?.label
3187
- ?.toLowerCase()
3188
- ?.includes("header not identified")) {
3189
- userAction.fixtureData.header.label = targetFixture.header.label;
3190
- }
3191
- targetFixture = {
3192
- ...targetFixture,
3193
- ...userAction.fixtureData,
3194
- header: {
3195
- ...targetFixture.header,
3196
- ...userAction.fixtureData.header,
3197
- },
3198
- };
3199
- targetFixture?.shelfConfig?.forEach((s, index) => {
3200
- if (s.shelfType == "tray" && !s?.originalProductCount) {
3201
- s.trayRows = s.productPerShelf <= 21 ? 3 : 7;
3202
- s.originalProductCount = s.productPerShelf;
3203
- s.productPerShelf = Math.floor(s.productPerShelf / (s.productPerShelf <= 21 ? 3 : 7));
3204
- }
3205
- let shelfZone = this.selectedFixtureData?.shelfConfig.find((shelve) => s.shelfNumber == shelve.shelfNumber);
3206
- if (shelfZone) {
3207
- targetFixture.shelfConfig[index] = { ...shelfZone, ...s };
3208
- }
3209
- else {
3210
- s.zone = "Bottom";
3211
- }
3212
- });
3213
- }
3214
- if (userAction.action === "editWithAi" ||
3215
- userAction.action === "editWithPlano") {
3216
- this.selectedFixtureData = {
3217
- ...targetFixture,
3218
- taskType: "fixture",
3219
- };
3220
- this.selectedFixture.fixtureData = this.selectedFixtureData;
3221
- this.editFixture = true;
3222
- return;
3223
- }
3224
- const feedback = userAction.feedback;
3225
- const answerId = userAction.feedback?.answers?.[0]?._id;
3226
- if (!answerId)
3227
- return;
3228
- const payload = {
3229
- _id: feedback._id,
3230
- answerId: answerId,
3231
- type: userAction.type,
3232
- userAction: userAction.action,
3233
- comments: userAction.remarks,
3234
- taskType: userAction.taskType,
3235
- planoId: userAction.planoId,
3236
- floorId: userAction.floorId,
3237
- };
3238
- const res = await firstValueFrom(this.apiService.updateFixtureComplianceStatus(payload));
3239
- if (!res && userAction.type != "agree")
3240
- return;
3241
- if (userAction.action === "keepPlano") {
3242
- targetFixture = {
3243
- ...targetFixture,
3244
- ...userAction.fixtureData,
3245
- };
3246
- }
3247
- const updateFixturePayload = {
3248
- fixtureId: this.selectedFixture.fixtureId,
3249
- data: targetFixture,
3250
- taskType: "fixture",
3251
- };
3252
- await firstValueFrom(this.apiService.updateStoreFixture(updateFixturePayload));
3253
- this.createForm();
3254
- await this.getStoreFixtures(this.planoData._id);
3255
- }
3256
- catch (error) {
3257
- this.toastService.getErrorToast("Failed to execute user action");
3258
- console.log("@@ ~ handleFeedbackAction [err]:", error);
3259
- }
3260
- }
3261
3094
  async handleApproverResponse(response) {
3262
3095
  if (response.message == "edit") {
3263
3096
  if (this.selectedFixture.fixtureType === "wall") {
@@ -3299,15 +3132,18 @@ export class ManageStorePlanoComponent {
3299
3132
  if (response?.filterByTask?.length > 0 ||
3300
3133
  response?.filterByStatus?.length > 0 ||
3301
3134
  response?.filterByApprovalStatus?.length > 0) {
3135
+ // this.floorData = structuredClone(this.planoData.floors.find((floor: any) => floor._id === this.floorData._id))
3302
3136
  this.getStoreFeedback(this.floorData.planoId, this.floorData._id, response, false);
3303
3137
  return;
3304
3138
  }
3305
3139
  if (response?.reload) {
3140
+ // this.floorData = null;
3306
3141
  this.createForm();
3307
3142
  this.getStoreFixtures(this.planoData._id);
3308
3143
  return;
3309
3144
  }
3310
3145
  if (response?.taskType === "layout" && response?.issueType === "others") {
3146
+ // this.floorData = null;
3311
3147
  this.createForm();
3312
3148
  this.getStoreFixtures(this.planoData._id);
3313
3149
  return;
@@ -3510,6 +3346,7 @@ export class ManageStorePlanoComponent {
3510
3346
  };
3511
3347
  this.apiService.updateStoreFixture(payload).subscribe({
3512
3348
  next: (res) => {
3349
+ // this.floorData = null
3513
3350
  this.createForm();
3514
3351
  this.getStoreFixtures(this.planoData._id);
3515
3352
  },
@@ -3519,6 +3356,7 @@ export class ManageStorePlanoComponent {
3519
3356
  });
3520
3357
  return;
3521
3358
  }
3359
+ // this.floorData = null
3522
3360
  this.createForm();
3523
3361
  this.getStoreFixtures(this.planoData._id);
3524
3362
  },
@@ -3618,6 +3456,7 @@ export class ManageStorePlanoComponent {
3618
3456
  };
3619
3457
  this.apiService.updateStoreFixture(payload).subscribe({
3620
3458
  next: (res) => {
3459
+ // this.floorData = null
3621
3460
  this.createForm();
3622
3461
  this.getStoreFixtures(this.planoData._id);
3623
3462
  },
@@ -3627,6 +3466,7 @@ export class ManageStorePlanoComponent {
3627
3466
  });
3628
3467
  return;
3629
3468
  }
3469
+ // this.floorData = null
3630
3470
  this.createForm();
3631
3471
  this.getStoreFixtures(this.planoData._id);
3632
3472
  },
@@ -4220,6 +4060,7 @@ export class ManageStorePlanoComponent {
4220
4060
  };
4221
4061
  this.apiService.updateStorePlano(payload).subscribe({
4222
4062
  next: (res) => {
4063
+ // this.floorData = null
4223
4064
  this.createForm();
4224
4065
  this.getStoreFixtures(this.planoData._id);
4225
4066
  },
@@ -4390,126 +4231,12 @@ export class ManageStorePlanoComponent {
4390
4231
  getElementNumber(group) {
4391
4232
  return group.get("elementNumber")?.value ?? null;
4392
4233
  }
4393
- highlightFixture(group, blink = false) {
4394
- if (this.layoutForm.enabled)
4395
- return;
4396
- this.removeHighlight();
4397
- this.cancelHighlightBlink = false;
4398
- const center = group.getCenterPoint();
4399
- const realWidth = group.width * group.scaleX;
4400
- const realHeight = group.height * group.scaleY;
4401
- const rect = new fabric.Rect({
4402
- left: center.x,
4403
- top: center.y,
4404
- width: realWidth + 8,
4405
- height: realHeight + 8,
4406
- rx: 5,
4407
- ry: 5,
4408
- stroke: "#00aaff",
4409
- strokeWidth: 3,
4410
- fill: "transparent",
4411
- selectable: false,
4412
- evented: false,
4413
- originX: "center",
4414
- originY: "center",
4415
- angle: group.angle || 0,
4416
- opacity: blink ? 0 : 1,
4417
- });
4418
- this.canvas.add(rect);
4419
- this.canvas.moveObjectTo(rect, this.canvas.getObjects().length - 1);
4420
- this.canvas.requestRenderAll();
4421
- this.activeHighlight = rect;
4422
- // --- No blinking needed ---
4423
- if (!blink)
4424
- return;
4425
- let cycles = 0;
4426
- const blinkOnce = () => {
4427
- if (this.cancelHighlightBlink) {
4428
- this.removeHighlight();
4429
- return;
4430
- }
4431
- rect.animate({ opacity: 1 }, {
4432
- duration: 200,
4433
- onChange: () => this.canvas.requestRenderAll(),
4434
- onComplete: () => {
4435
- if (this.cancelHighlightBlink) {
4436
- this.removeHighlight();
4437
- return;
4438
- }
4439
- rect.animate({ opacity: 0 }, {
4440
- duration: 200,
4441
- onChange: () => this.canvas.requestRenderAll(),
4442
- onComplete: () => {
4443
- if (this.cancelHighlightBlink) {
4444
- this.removeHighlight();
4445
- return;
4446
- }
4447
- cycles++;
4448
- if (cycles < 20) {
4449
- blinkOnce();
4450
- }
4451
- else {
4452
- if (!this.cancelHighlightBlink) {
4453
- rect.set({ opacity: 1 });
4454
- this.canvas.requestRenderAll();
4455
- }
4456
- }
4457
- },
4458
- });
4459
- },
4460
- });
4461
- };
4462
- blinkOnce();
4463
- }
4464
- removeHighlight() {
4465
- this.cancelHighlightBlink = true;
4466
- if (this.activeHighlight) {
4467
- this.canvas.remove(this.activeHighlight);
4468
- this.activeHighlight = null;
4469
- this.canvas.requestRenderAll();
4470
- }
4234
+ clearCanvas() {
4235
+ this.canvas.clear();
4471
4236
  }
4472
- keepHighlightOnTop = () => {
4473
- if (!this.activeHighlight)
4474
- return;
4475
- const objs = this.canvas.getObjects();
4476
- this.canvas.moveObjectTo(this.activeHighlight, objs.length - 1);
4477
- };
4478
- onChangeFixtureOnFeedbackPanel({ currentFixture, action, }, collapseTaskInfo = false) {
4479
- let indexToSelect = currentFixture
4480
- ? this.allFixtureInstances.findIndex((f) => f._id === currentFixture)
4481
- : 0;
4482
- if (action === "next") {
4483
- if (indexToSelect == this.allFixtureInstances.length - 1) {
4484
- indexToSelect = 0;
4485
- }
4486
- else {
4487
- indexToSelect++;
4488
- }
4489
- }
4490
- else if (action === "previous") {
4491
- if (indexToSelect == 0) {
4492
- indexToSelect = this.allFixtureInstances.length - 1;
4493
- }
4494
- else {
4495
- indexToSelect--;
4496
- }
4497
- }
4498
- else if (!currentFixture && !action) {
4499
- indexToSelect = 0;
4500
- }
4501
- const fixtureIdToSelect = this.allFixtureInstances[indexToSelect]?._id;
4502
- const actionFixture = this.canvas
4503
- .getObjects()
4504
- .find((obj) => obj.objType === "fixture" && obj.fixtureId === fixtureIdToSelect);
4505
- if (!actionFixture)
4506
- return;
4507
- setTimeout(() => {
4508
- this.resizeCanvas();
4509
- this.fitCanvasToLayoutAnimated();
4510
- }, 300);
4511
- this.highlightFixture(actionFixture);
4512
- this.selectFixtureOnCanvasClick(actionFixture, collapseTaskInfo);
4237
+ ngOnDestroy() {
4238
+ this.destroy$.next(true);
4239
+ this.destroy$.complete();
4513
4240
  }
4514
4241
  revokeTask() {
4515
4242
  const payload = {
@@ -4598,67 +4325,20 @@ export class ManageStorePlanoComponent {
4598
4325
  }
4599
4326
  });
4600
4327
  }
4601
- async goToStoreTourPage() {
4602
- try {
4603
- const res = await firstValueFrom(this.apiService.getPlanoStoreVideoParams({
4604
- storeId: this.planoData.storeId,
4605
- }));
4606
- if (res?.data) {
4607
- let params = res?.data;
4608
- const urlTree = this.router.createUrlTree(["/manage/trax/gallery"], {
4609
- queryParams: params,
4610
- });
4611
- const url = this.router.serializeUrl(urlTree);
4612
- window.open(url, "_blank");
4613
- }
4614
- else {
4615
- this.openNoVideoFoundModal();
4616
- return;
4617
- }
4618
- }
4619
- catch (error) {
4620
- this.openNoVideoFoundModal();
4621
- console.log("@@ ~ goToStoreTourPage [ERR]:", error);
4622
- }
4623
- }
4624
- async openNoVideoFoundModal() {
4625
- try {
4626
- await this.modalService.open(this.noStoreVideoModalRef, {
4627
- centered: true,
4628
- }).result;
4629
- }
4630
- catch (err) { }
4631
- }
4632
- goToStoreCameraPage() {
4633
- const urlTree = this.router.createUrlTree(["/manage/stores/cameras"], {
4634
- queryParams: {
4635
- storeId: this.planoData.storeId,
4636
- },
4637
- });
4638
- const url = this.router.serializeUrl(urlTree);
4639
- window.open(url, "_blank");
4640
- }
4641
- ngOnDestroy() {
4642
- this.destroy$.next(true);
4643
- this.destroy$.complete();
4644
- }
4645
4328
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ManageStorePlanoComponent, deps: [{ token: i1.StoreBuilderService }, { token: i2.ActivatedRoute }, { token: i3.FormBuilder }, { token: i4.GlobalStateService }, { token: i5.TitleCasePipe }, { token: i6.ToastService }, { token: i7.NgbModal }, { token: i4.PageInfoService }, { token: i5.Location }, { token: i2.Router }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
4646
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ManageStorePlanoComponent, selector: "lib-manage-store-plano", host: { listeners: { "window:resize": "onResize()" } }, providers: [TitleCasePipe], viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["baseCanvas"], descendants: true }, { propertyName: "containerRef", first: true, predicate: ["canvasContainer"], descendants: true }, { propertyName: "noStoreVideoModalRef", first: true, predicate: ["noStoreVideo"], descendants: true }], ngImport: i0, template: "<section id=\"manage-plano\">\r\n <!-- Loading State -->\r\n <div *ngIf=\"isPageLoading\" class=\"row\">\r\n <div class=\"col-12 m-0\">\r\n <ng-container *ngTemplateOutlet=\"headerSkeleton\"></ng-container>\r\n </div>\r\n <div class=\"col-3\">\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n </div>\r\n <div class=\"col-6\">\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n </div>\r\n <div class=\"col-3\">\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- Content -->\r\n <div [ngClass]=\"{ 'd-none': isPageLoading }\">\r\n <!-- Header Accordion -->\r\n <div id=\"header\" ngbAccordion #accordion=\"ngbAccordion\" class=\"my-4\">\r\n <div ngbAccordionItem=\"details\" [collapsed]=\"false\">\r\n <div ngbAccordionHeader class=\"d-flex justify-content-between align-items-center px-6 py-3\">\r\n <div class=\"d-flex gap-4 align-items-center\">\r\n <h2 class=\"title\">{{ planoData?.storeName }} - Plano</h2>\r\n <lib-reactive-select *ngIf=\"planoData?.floors?.length\" [formControl]=\"selectedFloorId\" [idField]=\"'_id'\"\r\n [nameField]=\"'floorName'\" [data]=\"planoData.floors\">\r\n </lib-reactive-select>\r\n <div class=\"cus-btn\" (click)=\"goToStoreTourPage()\">\r\n View store tour\r\n\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_408_16498)\">\r\n <path\r\n d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\"\r\n stroke=\"#33B5FF\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M5 4L8 6L5 8V4Z\" stroke=\"#33B5FF\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_408_16498\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n </div>\r\n <div class=\"cus-btn\" (click)=\"goToStoreCameraPage()\">\r\n View camera\r\n\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_422_36321)\">\r\n <path\r\n d=\"M9 6.5V9.5C9 9.76522 8.89464 10.0196 8.70711 10.2071C8.51957 10.3946 8.26522 10.5 8 10.5H2.5C2.23478 10.5 1.98043 10.3946 1.79289 10.2071C1.60536 10.0196 1.5 9.76522 1.5 9.5V4C1.5 3.73478 1.60536 3.48043 1.79289 3.29289C1.98043 3.10536 2.23478 3 2.5 3H5.5M7.5 1.5H10.5M10.5 1.5V4.5M10.5 1.5L5 7\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_422_36321\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center gap-4\">\r\n <div *ngIf=\"!editFixture\" class=\"updateClass\">Last Update: {{floorData?.updatedAt}}</div>\r\n\r\n <div class=\"d-flex gap-4 align-items-center\">\r\n <!-- Edit Fixture Mode -->\r\n <ng-container *ngIf=\"editFixture\">\r\n <button type=\"button\" class=\"btn btn-outline text-nowrap\" (click)=\"onFixturePageCancel()\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary text-nowrap\" (click)=\"onFixtureSave()\">\r\n Save & Close\r\n </button>\r\n </ng-container>\r\n\r\n <!-- Normal Mode -->\r\n <ng-container *ngIf=\"!editFixture && !['taskAssigned'].includes(taskStyle.fixture.class)\">\r\n <!-- Publish Buttons -->\r\n <button *ngIf=\"publishingState === 'layout'\" type=\"button\" class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" [disabled]=\"disabledPublish\">\r\n Publish Layout Verification\r\n </button>\r\n <button *ngIf=\"publishingState === 'layout-redo'\" type=\"button\" class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" [disabled]=\"disabledPublish\">\r\n Publish Layout Redo\r\n </button>\r\n <button *ngIf=\"publishingState === 'fixture'\" type=\"button\" class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" [disabled]=\"disabledPublish\">\r\n Publish Fixture Verification\r\n </button>\r\n <button *ngIf=\"publishingState === 'fixture-redo'\" type=\"button\" class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" [disabled]=\"disabledPublish\">\r\n Publish Fixture Redo\r\n </button>\r\n <button *ngIf=\"publishingState === 'vm'\" type=\"button\" class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" [disabled]=\"disabledPublish\">\r\n Publish VM Verification\r\n </button>\r\n <button *ngIf=\"publishingState === 'vm-redo'\" type=\"button\" class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" [disabled]=\"disabledPublish\">\r\n Publish VM Redo\r\n </button>\r\n </ng-container>\r\n\r\n <!-- Revoke Button -->\r\n <button (click)=\"revokeTask()\" *ngIf=\"['taskAssigned'].includes(taskStyle.fixture.class) && !editFixture\"\r\n class=\"btn btn-red d-flex align-items-center\">\r\n <svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_640_5594)\">\r\n <path\r\n d=\"M6.66669 10.0013H13.3334M18.3334 10.0013C18.3334 14.6037 14.6024 18.3346 10 18.3346C5.39765 18.3346 1.66669 14.6037 1.66669 10.0013C1.66669 5.39893 5.39765 1.66797 10 1.66797C14.6024 1.66797 18.3334 5.39893 18.3334 10.0013Z\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_640_5594\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n Revoke\r\n </button>\r\n\r\n <button ngbAccordionButton></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <div id=\"header\" class=\"row mx-0 gap-3\">\r\n <!-- Plano Completion -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3 class=\"d-flex align-items-center gap-2\">\r\n Plano Completion %\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"\r\n ngbTooltip=\"% of overall planogram completion\">\r\n <g clip-path=\"url(#clip0_1517_129805)\">\r\n <path\r\n d=\"M9 12V9M9 6H9.0075M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1517_129805\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </h3>\r\n <div class=\"row align-items-center mt-2\">\r\n <div class=\"col-9\">\r\n <div class=\"progress\" style=\"height: 4px\">\r\n <div class=\"progress-bar\" [ngClass]=\"\r\n taskInfo?.planoProgress <= 50\r\n ? 'bg-warning'\r\n : taskInfo?.planoProgress === 75\r\n ? 'bg-primary'\r\n : 'bg-success'\r\n \" role=\"progressbar\" [style]=\"'width:' + taskInfo?.planoProgress + '%'\"\r\n [attr.aria-valuenow]=\"taskInfo?.planoProgress\" aria-valuemin=\"0\" aria-valuemax=\"100\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3\">{{ taskInfo?.planoProgress }}%</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Layout -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3><b>{{ storeMetrics.floorCount }}</b> Layout</h3>\r\n <div class=\"indicator mt-2\" [ngClass]=\"taskStyle.layout.class\">\r\n <span class=\"me-2\" [hidden]=\"taskStyle.layout.name !== 'Redo'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4984_27569)\">\r\n <path\r\n d=\"M0.5 2.00077V5.00077M0.5 5.00077H3.5M0.5 5.00077L2.82 2.82077C3.35737 2.28313 4.02219 1.89037 4.7524 1.67916C5.48262 1.46794 6.25445 1.44515 6.99586 1.6129C7.73727 1.78065 8.4241 2.13349 8.99227 2.63848C9.56043 3.14347 9.99142 3.78416 10.245 4.50077M11.5 10.0008V7.00077M11.5 7.00077H8.5M11.5 7.00077L9.18 9.18077C8.64263 9.71841 7.97781 10.1112 7.2476 10.3224C6.51738 10.5336 5.74555 10.5564 5.00414 10.3886C4.26273 10.2209 3.5759 9.86805 3.00773 9.36306C2.43957 8.85807 2.00858 8.21738 1.755 7.50077\"\r\n stroke=\"#7A5AF8\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4984_27569\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span [hidden]=\"taskStyle.layout.name !== 'Flagged'\" class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2 7.5C2 7.5 2.5 7 4 7C5.5 7 6.5 8 8 8C9.5 8 10 7.5 10 7.5V1.5C10 1.5 9.5 2 8 2C6.5 2 5.5 1 4 1C2.5 1 2 1.5 2 1.5V7.5ZM2 7.5V11\"\r\n stroke=\"#B42318\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n {{ taskStyle.layout.name }}\r\n </div>\r\n </div>\r\n\r\n <!-- Fixtures -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3><b>{{ storeMetrics.fixtureCount }}</b> Fixtures</h3>\r\n <div class=\"indicator mt-2\" [ngClass]=\"taskStyle.fixture.class\">\r\n <span class=\"me-2\" [hidden]=\"taskStyle.fixture.name !== 'Redo'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4984_27569)\">\r\n <path\r\n d=\"M0.5 2.00077V5.00077M0.5 5.00077H3.5M0.5 5.00077L2.82 2.82077C3.35737 2.28313 4.02219 1.89037 4.7524 1.67916C5.48262 1.46794 6.25445 1.44515 6.99586 1.6129C7.73727 1.78065 8.4241 2.13349 8.99227 2.63848C9.56043 3.14347 9.99142 3.78416 10.245 4.50077M11.5 10.0008V7.00077M11.5 7.00077H8.5M11.5 7.00077L9.18 9.18077C8.64263 9.71841 7.97781 10.1112 7.2476 10.3224C6.51738 10.5336 5.74555 10.5564 5.00414 10.3886C4.26273 10.2209 3.5759 9.86805 3.00773 9.36306C2.43957 8.85807 2.00858 8.21738 1.755 7.50077\"\r\n stroke=\"#7A5AF8\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4984_27569\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span [hidden]=\"taskStyle.fixture.name !== 'Flagged'\" class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2 7.5C2 7.5 2.5 7 4 7C5.5 7 6.5 8 8 8C9.5 8 10 7.5 10 7.5V1.5C10 1.5 9.5 2 8 2C6.5 2 5.5 1 4 1C2.5 1 2 1.5 2 1.5V7.5ZM2 7.5V11\"\r\n stroke=\"#B42318\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n {{ taskStyle.fixture.name }}\r\n </div>\r\n </div>\r\n\r\n <!-- Visual Merchandise -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3><b>{{ storeMetrics.vmCount }}</b> Visual Merchandise</h3>\r\n <div class=\"indicator mt-2\" [ngClass]=\"taskStyle.vm.class\">\r\n <span class=\"me-2\" [hidden]=\"taskStyle.vm.name !== 'Redo'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4984_27569)\">\r\n <path\r\n d=\"M0.5 2.00077V5.00077M0.5 5.00077H3.5M0.5 5.00077L2.82 2.82077C3.35737 2.28313 4.02219 1.89037 4.7524 1.67916C5.48262 1.46794 6.25445 1.44515 6.99586 1.6129C7.73727 1.78065 8.4241 2.13349 8.99227 2.63848C9.56043 3.14347 9.99142 3.78416 10.245 4.50077M11.5 10.0008V7.00077M11.5 7.00077H8.5M11.5 7.00077L9.18 9.18077C8.64263 9.71841 7.97781 10.1112 7.2476 10.3224C6.51738 10.5336 5.74555 10.5564 5.00414 10.3886C4.26273 10.2209 3.5759 9.86805 3.00773 9.36306C2.43957 8.85807 2.00858 8.21738 1.755 7.50077\"\r\n stroke=\"#7A5AF8\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4984_27569\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span [hidden]=\"taskStyle.vm.name !== 'Flagged'\" class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2 7.5C2 7.5 2.5 7 4 7C5.5 7 6.5 8 8 8C9.5 8 10 7.5 10 7.5V1.5C10 1.5 9.5 2 8 2C6.5 2 5.5 1 4 1C2.5 1 2 1.5 2 1.5V7.5ZM2 7.5V11\"\r\n stroke=\"#B42318\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n {{ taskStyle.vm.name }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div id=\"body\" class=\"row\">\r\n <!-- Left Column -->\r\n <div [ngClass]=\"{ 'collapsed-col': isLeftPanelCollapsed, 'col-3': !isLeftPanelCollapsed,'d-none': editFixture }\">\r\n <div class=\"s-card\">\r\n <form [ngClass]=\"{ 'd-none': isLeftPanelCollapsed }\" [formGroup]=\"layoutForm\">\r\n <div ngbAccordion accordion=\"NgbAccordion\">\r\n <!-- Walls Section -->\r\n <ng-container *ngIf=\"getFormWalls.controls.length; else addWallAction\">\r\n <ng-container formArrayName=\"walls\">\r\n <ng-container *ngFor=\"let group of getFormWalls.controls; let i = index\">\r\n <div [formGroupName]=\"i\" [ngbAccordionItem]=\"i.toString()\" class=\"mb-5\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button type=\"button\" class=\"mainheading p-0\" ngbAccordionButton>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"me-2 wall-label\">\r\n {{ group.get(\"elementType\")?.value | titlecase }} {{ group.get(\"elementNumber\")?.value }}\r\n </span>\r\n\r\n @if(layoutForm.enabled){\r\n <span class=\"me-1\" ngbTooltip=\"Rotate this wall.\"\r\n (click)=\"rotateWall(getElementNumber(group)!); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\"\r\n fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M3.73735 8.25011C4.12193 8.24362 4.44377 8.52776 4.49338 8.89998L4.4999 8.98735L4.50262 9.15516C4.58434 11.5741 6.57243 13.5 9 13.5C9.14022 13.5 9.27951 13.4936 9.41756 13.4809L9.21967 13.2803C8.92678 12.9874 8.92678 12.5126 9.21967 12.2197C9.51257 11.9268 9.98744 11.9268 10.2803 12.2197L11.7803 13.7197C12.0732 14.0126 12.0732 14.4874 11.7803 14.7803L10.2803 16.2803C9.98744 16.5732 9.51257 16.5732 9.21967 16.2803C8.92678 15.9874 8.92678 15.5126 9.21967 15.2197L9.45837 14.9827C9.30646 14.9942 9.15359 15 9 15C5.82653 15 3.21665 12.5321 3.0125 9.38289L3.00315 9.19314L3.00011 9.01265C2.99312 8.59849 3.3232 8.25709 3.73735 8.25011ZM8.78033 1.71967C9.0507 1.99003 9.07149 2.41546 8.84272 2.70967L8.78033 2.78033L8.54187 3.01726C8.69371 3.00578 8.8465 3 9 3C12.3137 3 15 5.68629 15 9C15 9.41421 14.6642 9.75 14.25 9.75C13.8358 9.75 13.5 9.41421 13.5 9C13.5 6.51472 11.4853 4.5 9 4.5C8.8597 4.5 8.72034 4.5064 8.58221 4.51909L8.78033 4.71967C9.07323 5.01256 9.07323 5.48744 8.78033 5.78033C8.50997 6.05069 8.08455 6.07149 7.79033 5.84272L7.71967 5.78033L6.21967 4.28033C5.94931 4.00997 5.92851 3.58454 6.15728 3.29033L6.21967 3.21967L7.71967 1.71967C8.01257 1.42678 8.48744 1.42678 8.78033 1.71967Z\"\r\n fill=\"#475467\" stroke=\"#475467\" stroke-width=\"0.00064\" />\r\n </svg>\r\n </span>\r\n <span class=\"me-1\" ngbTooltip=\"Insert new wall below.\"\r\n (click)=\"addNewWall(getElementNumber(group)!); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_62_8)\">\r\n <path\r\n d=\"M9 9.75C11.0707 9.75 12.75 11.4293 12.75 13.5C12.75 15.5708 11.0707 17.25 9 17.25C6.92925 17.25 5.25 15.5708 5.25 13.5C5.25 11.4293 6.92925 9.75 9 9.75ZM9.75 11.25H8.25V12.7493L6.75 12.75V14.25L8.25 14.2493V15.75H9.75V14.2493L11.25 14.25V12.75L9.75 12.7493V11.25ZM15 2.25C15.414 2.25 15.75 2.586 15.75 3V7.5C15.75 7.914 15.414 8.25 15 8.25H3C2.586 8.25 2.25 7.914 2.25 7.5V3C2.25 2.586 2.586 2.25 3 2.25H15ZM3.75 3.75V6.75H14.25V3.75H3.75Z\"\r\n fill=\"#475467\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_62_8\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span class=\"me-1\" ngbTooltip=\"Remove this wall and its fixtures.\"\r\n (click)=\"deleteWall(getElementNumber(group)!); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_63_25)\">\r\n <path\r\n d=\"M10.7094 1.5C11.3551 1.5 11.9283 1.91314 12.1324 2.52565L12.5406 3.75H15C15.4142 3.75 15.75 4.08579 15.75 4.5C15.75 4.9142 15.4142 5.24999 15 5.25L14.9981 5.30344L14.3476 14.4103C14.2635 15.5878 13.2838 16.5 12.1034 16.5H5.89668C4.71624 16.5 3.7365 15.5878 3.6524 14.4103L3.00191 5.30344C3.00062 5.28551 2.99998 5.26769 2.99997 5.25C2.58577 5.24999 2.25 4.9142 2.25 4.5C2.25 4.08579 2.58579 3.75 3 3.75H5.45943L5.86754 2.52565C6.07172 1.91314 6.64493 1.5 7.29057 1.5H10.7094ZM13.4981 5.25H4.50191L5.14858 14.3034C5.17662 14.696 5.5032 15 5.89668 15H12.1034C12.4968 15 12.8234 14.696 12.8514 14.3034L13.4981 5.25ZM7.5 7.5C7.88464 7.5 8.20163 7.78952 8.24495 8.16253L8.25 8.25V12C8.25 12.4142 7.91422 12.75 7.5 12.75C7.11537 12.75 6.79837 12.4605 6.75505 12.0875L6.75 12V8.25C6.75 7.83578 7.08578 7.5 7.5 7.5ZM10.5 7.5C10.9142 7.5 11.25 7.83578 11.25 8.25V12C11.25 12.4142 10.9142 12.75 10.5 12.75C10.0858 12.75 9.75 12.4142 9.75 12V8.25C9.75 7.83578 10.0858 7.5 10.5 7.5ZM10.7094 3H7.29057L7.04057 3.75H10.9595L10.7094 3Z\"\r\n fill=\"#F32B2B\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_63_25\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n }\r\n </div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"ps-0 pe-0\">\r\n <ng-template>\r\n <div style=\"min-height: 50px\" dndDropzone (dndDrop)=\"onDrop($event, i)\">\r\n <!-- Fixtures -->\r\n <ng-container *ngIf=\"getFormFixtures(i).controls.length\">\r\n <div formArrayName=\"fixtures\">\r\n <ng-container *ngFor=\"let fixture of getFormFixtures(i).controls; let j = index\">\r\n <div dndDropzone (dndDrop)=\"onDrop($event, i, j)\" [formGroupName]=\"j\"\r\n [dndDraggable]=\"{ wallIndex: i, fixtureIndex: j }\" [dndEffectAllowed]=\"'all'\"\r\n class=\"row g-0 mb-5\" [dndDisableDragIf]=\"layoutForm.disabled\">\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-center justify-content-center h-100\">\r\n <svg dndDragImageRef\r\n [style]=\"{ cursor: layoutForm.disabled ? 'default' : 'move', opacity: '0.5' }\"\r\n width=\"25px\" viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"m 4.496094 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 0 0\"\r\n fill=\"grey\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-10\">\r\n <lib-reactive-select formControlName=\"fixtureConfigId\" [idField]=\"'_id'\"\r\n [nameField]=\"'name'\" [data]=\"fixtureTemplates\" [label]=\"'Fixture ' + (j + 1)\"\r\n [subTextField]=\"'subtext'\" [search]=\"true\">\r\n </lib-reactive-select>\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg (click)=\"removeFixture('wall', j, i)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\"\r\n viewBox=\"0 0 10 10\" fill=\"none\">\r\n <path d=\"M9 1L1 9M1 1L9 9\" stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end\">\r\n <a class=\"link-btn\" [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewFixture('wall', i)\">\r\n Add fixture\r\n </a>\r\n </div>\r\n\r\n <hr style=\"border-top: 1px dashed #000000;\" />\r\n\r\n <!-- Other Elements -->\r\n <ng-container *ngIf=\"getWallOtherElements(i).controls.length\">\r\n <div formArrayName=\"otherElements\">\r\n <ng-container *ngFor=\"let fixture of getWallOtherElements(i).controls; let j = index\">\r\n <div [formGroupName]=\"j\" class=\"row g-0 mb-5\">\r\n <div class=\"col-11\">\r\n <label class=\"form-label mb-1\">Element {{ j + 1 }}</label>\r\n\r\n <!-- Dropdown bound to 'type' -->\r\n <lib-reactive-select [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"otherElementList\" [id]=\"'elementLabel' + j\" formControlName=\"type\">\r\n </lib-reactive-select>\r\n\r\n <!-- Show custom text input only when 'Others' is selected -->\r\n <input *ngIf=\"(fixture.get('type')?.value) === 'Others'\" type=\"text\"\r\n class=\"form-control mt-2\" formControlName=\"customName\"\r\n placeholder=\"Enter custom element name\" />\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg (click)=\"removeOtherElement('wall', j, i)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\"\r\n viewBox=\"0 0 10 10\" fill=\"none\">\r\n <path d=\"M9 1L1 9M1 1L9 9\" stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end\">\r\n <a class=\"link-btn\" [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewOtherElements('wall', i)\">\r\n Add element\r\n </a>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #addWallAction>\r\n <button (click)=\"addNewWall(0)\" [class.disabled-click]=\"layoutForm.disabled\"\r\n class=\"btn btn-secondary w-100 p-2\">\r\n Insert new wall\r\n </button>\r\n </ng-template>\r\n\r\n <hr style=\"border-top: 1px dashed #000000;\" />\r\n\r\n <!-- Floor Section -->\r\n <div [ngbAccordionItem]=\"'floor'\" class=\"mb-5\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button type=\"button\" class=\"mainheading p-0\" ngbAccordionButton>\r\n <span class=\"me-2 wall-label\">Floor</span>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"ps-0 pe-0\">\r\n <ng-template>\r\n <div style=\"min-height: 50px\" dndDropzone (dndDrop)=\"onDrop($event, 'floor')\">\r\n <!-- Floor Fixtures -->\r\n <ng-container *ngIf=\"getFormFloorFixtures.controls.length\">\r\n <div formArrayName=\"floorFixtures\">\r\n <ng-container *ngFor=\"let fixture of getFormFloorFixtures.controls; let j = index\">\r\n <div dndDropzone (dndDrop)=\"onDrop($event, 'floor', j)\" [formGroupName]=\"j\"\r\n [dndDraggable]=\"{ wallIndex: 'floor', fixtureIndex: j }\" [dndEffectAllowed]=\"'all'\"\r\n [dndDisableDragIf]=\"layoutForm.disabled\" class=\"row g-0 mb-5\">\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-center justify-content-center h-100\">\r\n <svg dndDragImageRef style=\"cursor: move; opacity: 0.5\" width=\"25px\"\r\n viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"m 4.496094 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 0 0\"\r\n fill=\"grey\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-10\">\r\n <lib-reactive-select formControlName=\"fixtureConfigId\" [idField]=\"'_id'\"\r\n [nameField]=\"'name'\" [data]=\"fixtureTemplates\" [label]=\"'Fixture ' + (j + 1)\"\r\n [search]=\"true\" [subTextField]=\"'subtext'\">\r\n </lib-reactive-select>\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg (click)=\"removeFixture('floor', j)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\" xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\r\n <path d=\"M9 1L1 9M1 1L9 9\" stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end\">\r\n <a class=\"link-btn\" [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewFixture('floor')\">\r\n Add fixture\r\n </a>\r\n </div>\r\n\r\n <hr style=\"border-top: 1px dashed #000000;\" />\r\n\r\n <!-- Floor Other Elements -->\r\n <ng-container *ngIf=\"getFormFloorOtherElements.controls.length\">\r\n <div formArrayName=\"floorOtherElements\">\r\n <ng-container *ngFor=\"let fixture of getFormFloorOtherElements.controls; let j = index\">\r\n <div [formGroupName]=\"j\" class=\"row g-0 mb-5\">\r\n <div class=\"col-11\">\r\n <label class=\"form-label mb-1\">Element {{ j + 1 }}</label>\r\n\r\n <!-- Dropdown for type -->\r\n <lib-reactive-select [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"otherElementList\" [id]=\"'floorElementLabel' + j\" formControlName=\"type\">\r\n </lib-reactive-select>\r\n\r\n <!-- Conditional input for custom name -->\r\n <input *ngIf=\"(fixture.get('type')?.value) === 'Others'\" type=\"text\"\r\n class=\"form-control mt-2\" formControlName=\"customName\"\r\n placeholder=\"Enter custom element name\" />\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg (click)=\"removeOtherElement('floor', j)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\" xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\r\n <path d=\"M9 1L1 9M1 1L9 9\" stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end\">\r\n <a class=\"link-btn\" [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewOtherElements('floor')\">\r\n Add element\r\n </a>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Center Column -->\r\n <div class=\"col overflow-hidden position-relative\" [ngClass]=\"{ 'd-none': editFixture }\">\r\n <div id=\"canvas-card\" class=\"c-card position-relative\" #canvasContainer>\r\n <!-- Canvas View -->\r\n <div [ngClass]=\"{ 'd-none': selectedView === 'tree' }\">\r\n <canvas id=\"base-canvas\" #baseCanvas></canvas>\r\n </div>\r\n\r\n <!-- Tree View -->\r\n <div *ngIf=\"selectedView === 'tree'\" class=\"w-100\">\r\n <store-plano-tree-view [allFixture]=\"allFixtures\"></store-plano-tree-view>\r\n </div>\r\n\r\n <!-- Top Controls -->\r\n <div style=\"top: 24px; left: 26px; position: absolute;\" id=\"segment-btn\" class=\"pb-5\">\r\n <div class=\"w-100 d-flex justify-content-start gap-4\">\r\n <ul class=\"nav nav-tabs custom-tabs d-flex\" style=\"width: 200px; margin: 0\">\r\n <li class=\"nav-item flex-fill\">\r\n <button class=\"nav-link w-100 h-100\" [class.active]=\"selectedView === 'detail'\"\r\n (click)=\"selectedView = 'detail'\">\r\n Detail View\r\n </button>\r\n </li>\r\n <li class=\"nav-item flex-fill\">\r\n <button class=\"nav-link w-100 h-100\" [class.active]=\"selectedView === 'tree'\"\r\n (click)=\"selectedView = 'tree'\">\r\n Tree View\r\n </button>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <!-- Entrance Button -->\r\n <div *ngIf=\"layoutForm.enabled\" ngbTooltip=\"You can add up to two entrances.\" style=\"top: 24px; right: 190px\"\r\n class=\"position-absolute\" [disableTooltip]=\"getEntrances?.length < 2\">\r\n <button type=\"button\" class=\"btn btn-outline d-flex align-items-center gap-3 bg-white shadow-sm\"\r\n [disabled]=\"getEntrances?.length >= 2\" (click)=\"addNewEntrance()\">\r\n Add Entrance\r\n </button>\r\n </div>\r\n\r\n <!-- Edit Button -->\r\n <button *ngIf=\"layoutForm.disabled\"\r\n [disabled]=\"disableEdit || ['taskAssigned','reviewPending'].includes(taskStyle.fixture.class)\"\r\n style=\"top: 24px; right: 164px\" type=\"button\"\r\n class=\"btn btn-outline d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"onClickEdit()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1322_5325)\">\r\n <path\r\n d=\"M14.1667 2.49993C14.3856 2.28106 14.6455 2.10744 14.9314 1.98899C15.2174 1.87054 15.5239 1.80957 15.8334 1.80957C16.1429 1.80957 16.4494 1.87054 16.7354 1.98899C17.0214 2.10744 17.2812 2.28106 17.5001 2.49993C17.719 2.7188 17.8926 2.97863 18.011 3.2646C18.1295 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1295 4.78262 18.011 5.06859C17.8926 5.35455 17.719 5.61439 17.5001 5.83326L6.25008 17.0833L1.66675 18.3333L2.91675 13.7499L14.1667 2.49993Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1322_5325\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n Edit\r\n </button>\r\n\r\n <!-- Rotate Button -->\r\n <button style=\"top: 24px; right: 94px\" type=\"button\" *ngIf=\"layoutForm.disabled\"\r\n class=\"btn btn-outline d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"rotateCanvas(canvas,90)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 26 26\" fill=\"none\">\r\n <path\r\n d=\"M6.36265 7.17887L7.17625 6.36287L5.90425 5.09207L5.08945 5.90567L6.36265 7.17887ZM15.671 6.36407L19.6379 10.3309L20.9099 9.05769L16.9442 5.09087L15.671 6.36407ZM19.6379 18.8257L18.8243 19.6393L20.0963 20.9101L20.9099 20.0977L19.6379 18.8257ZM10.3295 19.6393L6.36265 15.6725L5.09065 16.9457L9.05626 20.9113L10.3295 19.6393ZM18.8243 19.6393C17.6543 20.8081 16.8407 21.6193 16.1459 22.1497C15.4715 22.6645 15.0155 22.8289 14.5763 22.8289V24.6289C15.5675 24.6289 16.4027 24.2173 17.2367 23.5813C18.0503 22.9609 18.9635 22.0453 20.0963 20.9125L18.8243 19.6393ZM9.05626 20.9113C10.1891 22.0453 11.1023 22.9597 11.9159 23.5813C12.7499 24.2173 13.5851 24.6289 14.5763 24.6289V22.8289C14.1371 22.8289 13.6823 22.6645 13.0067 22.1497C12.3119 21.6193 11.4983 20.8081 10.3295 19.6393L9.05626 20.9113ZM19.6379 10.3309C20.8067 11.4997 21.6179 12.3133 22.1483 13.0081C22.6631 13.6837 22.8275 14.1385 22.8275 14.5777H24.6275C24.6275 13.5865 24.2159 12.7513 23.5799 11.9173C22.9595 11.1037 22.0427 10.1905 20.9099 9.05769L19.6379 10.3309ZM20.9099 20.0977C22.0439 18.9637 22.9583 18.0517 23.5799 17.2381C24.2159 16.4041 24.6275 15.5689 24.6275 14.5777H22.8275C22.8275 15.0169 22.6631 15.4729 22.1483 16.1473C21.6179 16.8421 20.8067 17.6557 19.6379 18.8257L20.9099 20.0977ZM7.17625 6.36287C8.34625 5.19407 9.15985 4.38167 9.85465 3.85127C10.529 3.33647 10.985 3.17327 11.4242 3.17327V1.37207C10.433 1.37207 9.59785 1.78367 8.76385 2.41967C7.94905 3.04127 7.03705 3.95567 5.90425 5.08847L7.17625 6.36287ZM16.9442 5.09087C15.8114 3.95687 14.8982 3.04127 14.0846 2.41967C13.2506 1.78367 12.4154 1.37207 11.4242 1.37207V3.17327C11.8634 3.17327 12.3182 3.33647 12.9938 3.85127C13.6886 4.38167 14.5022 5.19287 15.671 6.36167L16.9442 5.09087ZM5.08945 5.90327C3.95665 7.03607 3.04225 7.94807 2.42065 8.76287C1.78465 9.59687 1.37305 10.4321 1.37305 11.4233H3.17305C3.17305 10.9841 3.33745 10.5281 3.85225 9.85367C4.38265 9.15887 5.19385 8.34527 6.36265 7.17527L5.08945 5.90327ZM6.36265 15.6713C5.19385 14.5013 4.38265 13.6877 3.85225 12.9929C3.33745 12.3185 3.17305 11.8625 3.17305 11.4233H1.37305C1.37305 12.4145 1.78465 13.2497 2.42065 14.0837C3.04225 14.8973 3.95665 15.8105 5.08945 16.9433L6.36265 15.6713Z\"\r\n fill=\"#1D2939\" />\r\n <path d=\"M23.2 6.9832L25 8.2C25 4.582 22.4056 1.5796 19 1M2.8 19.0168L1 17.8C1 21.418 3.5944 24.4204 7 25\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- Submit Button -->\r\n <button *ngIf=\"!layoutForm.disabled\" style=\"top: 24px; right: 94px;padding: 9px 20px !important;\"\r\n type=\"button\" class=\"btn btn-primary d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"updateLayout(true)\">\r\n Submit\r\n </button>\r\n\r\n <!-- Download Button -->\r\n <button style=\"top: 24px; right: 26px\" type=\"button\"\r\n class=\"btn btn-outline d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"downloadCanvas()\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"#000000\" stroke-width=\"0.24000000000000005\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\"\r\n stroke-width=\"0.384\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path\r\n d=\"M12.5535 16.5061C12.4114 16.6615 12.2106 16.75 12 16.75C11.7894 16.75 11.5886 16.6615 11.4465 16.5061L7.44648 12.1311C7.16698 11.8254 7.18822 11.351 7.49392 11.0715C7.79963 10.792 8.27402 10.8132 8.55352 11.1189L11.25 14.0682V3C11.25 2.58579 11.5858 2.25 12 2.25C12.4142 2.25 12.75 2.58579 12.75 3V14.0682L15.4465 11.1189C15.726 10.8132 16.2004 10.792 16.5061 11.0715C16.8118 11.351 16.833 11.8254 16.5535 12.1311L12.5535 16.5061Z\"\r\n fill=\"#1D2939\"></path>\r\n <path\r\n d=\"M3.75 15C3.75 14.5858 3.41422 14.25 3 14.25C2.58579 14.25 2.25 14.5858 2.25 15V15.0549C2.24998 16.4225 2.24996 17.5248 2.36652 18.3918C2.48754 19.2919 2.74643 20.0497 3.34835 20.6516C3.95027 21.2536 4.70814 21.5125 5.60825 21.6335C6.47522 21.75 7.57754 21.75 8.94513 21.75H15.0549C16.4225 21.75 17.5248 21.75 18.3918 21.6335C19.2919 21.5125 20.0497 21.2536 20.6517 20.6516C21.2536 20.0497 21.5125 19.2919 21.6335 18.3918C21.75 17.5248 21.75 16.4225 21.75 15.0549V15C21.75 14.5858 21.4142 14.25 21 14.25C20.5858 14.25 20.25 14.5858 20.25 15C20.25 16.4354 20.2484 17.4365 20.1469 18.1919C20.0482 18.9257 19.8678 19.3142 19.591 19.591C19.3142 19.8678 18.9257 20.0482 18.1919 20.1469C17.4365 20.2484 16.4354 20.25 15 20.25H9C7.56459 20.25 6.56347 20.2484 5.80812 20.1469C5.07435 20.0482 4.68577 19.8678 4.40901 19.591C4.13225 19.3142 3.9518 18.9257 3.85315 18.1919C3.75159 17.4365 3.75 16.4354 3.75 15Z\"\r\n fill=\"#1D2939\"></path>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- Panel Collapse Handlers -->\r\n <div class=\"collapse-handler left\" (click)=\"togglePanel('left')\">\r\n <svg *ngIf=\"!isLeftPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27308 12.636L4.63672 8.99964L8.27308 5.36328M13.364 12.636L9.72763 8.99964L13.364 5.36328\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"isLeftPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72692 5.36399L13.3633 9.00036L9.72692 12.6367M4.63601 5.36399L8.27237 9.00036L4.63601 12.6367\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"collapse-handler right\" (click)=\"togglePanel('right')\">\r\n <svg *ngIf=\"isRightPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27308 12.636L4.63672 8.99964L8.27308 5.36328M13.364 12.636L9.72763 8.99964L13.364 5.36328\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"!isRightPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72692 5.36399L13.3633 9.00036L9.72692 12.6367M4.63601 5.36399L8.27237 9.00036L4.63601 12.6367\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <!-- Edit Fixture Body -->\r\n <div class=\"col\" [ngClass]=\"{ 'd-none': !editFixture }\">\r\n <div id=\"edit-body\" class=\"row\">\r\n <ul class=\"mx-3 my-5 nav nav-pills\" role=\"tablist\">\r\n <li class=\"nav-item cursor-pointer\" role=\"presentation\">\r\n <a (click)=\"submitFixture = false; editFixtureSection = 'basic-details'\"\r\n [ngClass]=\"editFixtureSection === 'basic-details' ? 'active' : ''\" class=\"nav-link\" role=\"tab\">\r\n Basic details\r\n </a>\r\n </li>\r\n <li class=\"nav-item cursor-pointer\" role=\"presentation\">\r\n <a (click)=\"submitFixture = false; editFixtureSection = 'products'\"\r\n [ngClass]=\"editFixtureSection === 'products' ? 'active' : ''\" class=\"nav-link\" role=\"tab\">\r\n Products\r\n </a>\r\n </li>\r\n <li class=\"nav-item cursor-pointer\" role=\"presentation\">\r\n <a (click)=\"submitFixture = false; editFixtureSection = 'vms'\"\r\n [ngClass]=\"editFixtureSection === 'vms' ? 'active' : ''\" class=\"nav-link\" role=\"tab\">\r\n Visual Merchandise\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <div class=\"col\">\r\n <ng-container *ngIf=\"editFixtureSection === 'basic-details'\">\r\n <lib-instance-basic-details [fixtureData]=\"selectedFixtureData\" [editMode]=\"true\"\r\n [isSubmitted]=\"submitFixture\" (submitEvent)=\"onFixtureSubmit($event)\">\r\n </lib-instance-basic-details>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"editFixtureSection === 'products'\">\r\n <lib-instance-products [fixtureData]=\"selectedFixtureData\" [editMode]=\"true\" [isSubmitted]=\"submitFixture\"\r\n (submitEvent)=\"onFixtureSubmit($event)\">\r\n </lib-instance-products>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"editFixtureSection === 'vms'\">\r\n <lib-instance-vms [fixtureData]=\"selectedFixtureData\" [editMode]=\"true\" [isSubmitted]=\"submitFixture\"\r\n (submitEvent)=\"onFixtureSubmit($event)\">\r\n </lib-instance-vms>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- <div class=\"col-3\" [style]=\"{'min-width': '660px'}\">\r\n <ng-container *ngTemplateOutlet=\"feedbackCol\"></ng-container>\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{ 'collapsed-col': isRightPanelCollapsed, 'col-3': !isRightPanelCollapsed }\"\r\n [style]=\"{'min-width': isRightPanelCollapsed ? '0' : '664px'}\">\r\n <ng-container *ngTemplateOutlet=\"feedbackCol\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</section>\r\n\r\n<!-- Templates -->\r\n<ng-template #feedbackCol>\r\n <div class=\"s-card\" [ngStyle]=\"{'margin-top':editFixture ? '72px' : '0px'}\">\r\n <!-- <app-manage-store-plano-feedback [ngClass]=\"{ 'd-none': isRightPanelCollapsed && !editFixture}\"\r\n [currentPlano]=\"floorData\" [storeFeedback]=\"storeFeedback\" [selectedIssue]=\"selectedFixture\"\r\n (isApproved)=\"handleApproverResponse($event)\">\r\n </app-manage-store-plano-feedback> -->\r\n\r\n <lib-verification-feedback [floorData]=\"floorData\" [ngClass]=\"{ 'd-none': isRightPanelCollapsed && !editFixture}\"\r\n [feedbackDetails]=\"selectedFixtureFeedback\" (changeFixture)=\"onChangeFixtureOnFeedbackPanel($event,true)\"\r\n [totalFixtures]=\"allFixtureInstances\" [cdn]=\"cdnUrl\" (action)=\"handleFeedbackAction($event)\"\r\n [showAction]=\"!editFixture\"></lib-verification-feedback>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #headerSkeleton>\r\n <div class=\"row m-0 g-0 loader d-flex justify-content-center align-items-center overflow-hidden\">\r\n <div class=\"shimmer w-100 p-4 rounded\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke mt-0 animate title\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #skeletonLoader>\r\n <div class=\"row loader d-flex justify-content-center align-items-center overflow-hidden\">\r\n <div class=\"shimmer rounded\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<ng-template #noStoreVideo let-modal>\r\n <div class=\"modal-body\">\r\n <div>\r\n <h2 class=\"mb-3\">No Store Video Found</h2>\r\n <p>The video will be available once a request is raised and the store submits a complete store video.</p>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"modal.close()\">Close</button>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;width:345px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .block{border:1px solid #98a2b3;padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}::ng-deep .backgroundImg{background-color:#f9fafb!important}::ng-deep .accordion .accordion-button.backgroundImg:not(.collapsed){background-color:#f9fafb!important}::ng-deep .accordion-body{padding:10px 20px 20px}.s-card{position:relative;box-sizing:border-box;border-radius:8px;background:#fff;padding:20px 16px;height:75dvh;overflow-y:auto;overflow-x:visible}.c-card{border-radius:8px;background:#fff;padding:20px 16px;height:75dvh;overflow:hidden;width:100%}.h-card{border-radius:8px;background:#fff;padding:20px 16px;min-height:20dvh}.wall-label{color:var(--Gray-600, #475467);font-family:Inter;font-size:14px;font-style:normal;font-weight:600}img{width:100%;height:100%;object-fit:cover;display:block}#header .title{color:var(--Gray-800, #1d2939);font-size:16px;font-weight:600;line-height:24px;margin:0}#header .cus-btn{color:#009bf3;background:#eaf8ff;padding:4px 10px;border-radius:16px;font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%;text-align:center;cursor:pointer}#header .cus-btn:hover{background:#e2f5ff}.loader .shimmer{height:100%!important}.collapse-handler{position:absolute;height:32px;width:32px;display:flex;justify-content:center;align-items:center;border-radius:50%;background:#fff;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;cursor:pointer;top:12px}.collapse-handler.right{right:0}.collapse-handler.left{left:0}.collapsed-col{transition:all .3s ease;width:40px!important}[class^=col]{transition:all .3s ease}#segment-btn .custom-tabs{border-radius:8px;border:1px solid var(--Gray-300, #d0d5dd);overflow:hidden;margin-bottom:24px}#segment-btn .custom-tabs .nav-link{border-radius:0%;color:#495057;padding:.75rem 1rem;background-color:#fff;text-align:center;border-right:1px solid var(--Gray-300, #d0d5dd);transition:all ease .2s;font-weight:500}#segment-btn .custom-tabs .nav-link.active{background:var(--Primary-500, #33b5ff);color:#fff}#segment-btn .nav-tabs .nav-link{border:none;margin:0}#segment-btn .nav-item{text-align:center}#segment-btn .nav-item:last-child .nav-link{border:none}.link-btn{color:#33b5ff;cursor:pointer;font-weight:500}.link-btn:hover{color:#33b5ff;text-decoration:underline!important}.btn-red{border-radius:8px!important;border:1px solid #fef3f2!important;background:#fef3f2!important;box-shadow:0 1px 2px #1018280d!important;padding:10px 18px!important;color:#b42318!important;font-size:16px!important;font-weight:600!important}.updateClass{font-family:Inter;font-weight:400;font-size:14px;line-height:20px;letter-spacing:0%;color:#667085}\n"], dependencies: [{ kind: "component", type: i8.ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "subTextField", "searchField", "label", "data", "action", "search", "prefix", "actionLabel"], outputs: ["actionClick"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i7.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i7.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i7.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i7.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i7.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i7.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i7.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "directive", type: i9.DndDraggableDirective, selector: "[dndDraggable]", inputs: ["dndDraggable", "dndEffectAllowed", "dndType", "dndDraggingClass", "dndDraggingSourceClass", "dndDraggableDisabledClass", "dndDragImageOffsetFunction", "dndDisableIf", "dndDisableDragIf"], outputs: ["dndStart", "dndDrag", "dndEnd", "dndMoved", "dndCopied", "dndLinked", "dndCanceled"] }, { kind: "directive", type: i9.DndDropzoneDirective, selector: "[dndDropzone]", inputs: ["dndDropzone", "dndEffectAllowed", "dndAllowExternal", "dndHorizontal", "dndDragoverClass", "dndDropzoneDisabledClass", "dndDisableIf", "dndDisableDropIf"], outputs: ["dndDragover", "dndDrop"] }, { kind: "directive", type: i9.DndDragImageRefDirective, selector: "[dndDragImageRef]" }, { kind: "component", type: i10.InstanceBasicDetailsComponent, selector: "lib-instance-basic-details", inputs: ["fixtureData", "editMode", "isSubmitted"], outputs: ["submitEvent"] }, { kind: "component", type: i11.InstanceProductsComponent, selector: "lib-instance-products", inputs: ["fixtureData", "editMode", "isSubmitted", "isRollout"], outputs: ["submitEvent"] }, { kind: "component", type: i12.InstanceVmsComponent, selector: "lib-instance-vms", inputs: ["fixtureData", "editMode", "isSubmitted", "isRollout"], outputs: ["submitEvent"] }, { kind: "component", type: i13.StorePlanoTreeViewComponent, selector: "store-plano-tree-view", inputs: ["allFixture"], outputs: ["selectedInstance"] }, { kind: "component", type: i14.VerificationFeedbackComponent, selector: "lib-verification-feedback", inputs: ["floorData", "totalFixtures", "feedbackDetails", "cdn", "showAction"], outputs: ["changeFixture", "action"] }, { kind: "pipe", type: i5.TitleCasePipe, name: "titlecase" }] });
4329
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ManageStorePlanoComponent, selector: "lib-manage-store-plano", host: { listeners: { "window:resize": "onResize()" } }, providers: [TitleCasePipe], viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["baseCanvas"], descendants: true }, { propertyName: "containerRef", first: true, predicate: ["canvasContainer"], descendants: true }], ngImport: i0, template: "<section id=\"manage-plano\">\r\n <!-- Loading State -->\r\n <div *ngIf=\"isPageLoading\" class=\"row\">\r\n <div class=\"col-12 m-0\">\r\n <ng-container *ngTemplateOutlet=\"headerSkeleton\"></ng-container>\r\n </div>\r\n <div class=\"col-3\">\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n </div>\r\n <div class=\"col-6\">\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n </div>\r\n <div class=\"col-3\">\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- Content -->\r\n <div [ngClass]=\"{ 'd-none': isPageLoading }\">\r\n <!-- Header Accordion -->\r\n <div id=\"header\" ngbAccordion #accordion=\"ngbAccordion\" class=\"my-4\">\r\n <div ngbAccordionItem=\"details\" [collapsed]=\"false\">\r\n <div ngbAccordionHeader class=\"d-flex justify-content-between align-items-center px-6 py-3\">\r\n <div class=\"d-flex gap-4 align-items-center\">\r\n <h2 class=\"title\">{{ planoData?.storeName }} - Plano</h2>\r\n <lib-reactive-select \r\n *ngIf=\"planoData?.floors?.length\" \r\n [formControl]=\"selectedFloorId\" \r\n [idField]=\"'_id'\"\r\n [nameField]=\"'floorName'\" \r\n [data]=\"planoData.floors\">\r\n </lib-reactive-select>\r\n </div>\r\n \r\n <div class=\"d-flex align-items-center gap-4\">\r\n <div *ngIf=\"!editFixture\" class=\"updateClass\">Last Update: {{floorData?.updatedAt}}</div>\r\n \r\n <div class=\"d-flex gap-4 align-items-center\">\r\n <!-- Edit Fixture Mode -->\r\n <ng-container *ngIf=\"editFixture\">\r\n <button type=\"button\" class=\"btn btn-outline text-nowrap\" (click)=\"onFixturePageCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary text-nowrap\" (click)=\"onFixtureSave()\">Save & Close</button>\r\n </ng-container>\r\n\r\n <!-- Normal Mode -->\r\n <ng-container *ngIf=\"!editFixture && !['taskAssigned'].includes(taskStyle.fixture.class)\">\r\n <!-- Publish Buttons -->\r\n <button \r\n *ngIf=\"publishingState === 'layout'\" \r\n type=\"button\" \r\n class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" \r\n [disabled]=\"disabledPublish\">\r\n Publish Layout Verification\r\n </button>\r\n <button \r\n *ngIf=\"publishingState === 'layout-redo'\" \r\n type=\"button\" \r\n class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" \r\n [disabled]=\"disabledPublish\">\r\n Publish Layout Redo\r\n </button>\r\n <button \r\n *ngIf=\"publishingState === 'fixture'\" \r\n type=\"button\" \r\n class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" \r\n [disabled]=\"disabledPublish\">\r\n Publish Fixture Verification\r\n </button>\r\n <button \r\n *ngIf=\"publishingState === 'fixture-redo'\" \r\n type=\"button\" \r\n class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" \r\n [disabled]=\"disabledPublish\">\r\n Publish Fixture Redo\r\n </button>\r\n <button \r\n *ngIf=\"publishingState === 'vm'\" \r\n type=\"button\" \r\n class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" \r\n [disabled]=\"disabledPublish\">\r\n Publish VM Verification\r\n </button>\r\n <button \r\n *ngIf=\"publishingState === 'vm-redo'\" \r\n type=\"button\" \r\n class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" \r\n [disabled]=\"disabledPublish\">\r\n Publish VM Redo\r\n </button>\r\n </ng-container>\r\n\r\n <!-- Revoke Button -->\r\n <button \r\n (click)=\"revokeTask()\" \r\n *ngIf=\"['taskAssigned'].includes(taskStyle.fixture.class) && !editFixture\"\r\n class=\"btn btn-red d-flex align-items-center\">\r\n <svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_640_5594)\">\r\n <path\r\n d=\"M6.66669 10.0013H13.3334M18.3334 10.0013C18.3334 14.6037 14.6024 18.3346 10 18.3346C5.39765 18.3346 1.66669 14.6037 1.66669 10.0013C1.66669 5.39893 5.39765 1.66797 10 1.66797C14.6024 1.66797 18.3334 5.39893 18.3334 10.0013Z\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_640_5594\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n Revoke\r\n </button>\r\n \r\n <button ngbAccordionButton></button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <div id=\"header\" class=\"row mx-0 gap-3\">\r\n <!-- Plano Completion -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3 class=\"d-flex align-items-center gap-2\">\r\n Plano Completion %\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"\r\n ngbTooltip=\"% of overall planogram completion\">\r\n <g clip-path=\"url(#clip0_1517_129805)\">\r\n <path\r\n d=\"M9 12V9M9 6H9.0075M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1517_129805\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </h3>\r\n <div class=\"row align-items-center mt-2\">\r\n <div class=\"col-9\">\r\n <div class=\"progress\" style=\"height: 4px\">\r\n <div \r\n class=\"progress-bar\" \r\n [ngClass]=\"\r\n taskInfo?.planoProgress <= 50\r\n ? 'bg-warning'\r\n : taskInfo?.planoProgress === 75\r\n ? 'bg-primary'\r\n : 'bg-success'\r\n \" \r\n role=\"progressbar\" \r\n [style]=\"'width:' + taskInfo?.planoProgress + '%'\"\r\n [attr.aria-valuenow]=\"taskInfo?.planoProgress\" \r\n aria-valuemin=\"0\" \r\n aria-valuemax=\"100\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3\">{{ taskInfo?.planoProgress }}%</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Layout -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3><b>{{ storeMetrics.floorCount }}</b> Layout</h3>\r\n <div class=\"indicator mt-2\" [ngClass]=\"taskStyle.layout.class\">\r\n <span class=\"me-2\" [hidden]=\"taskStyle.layout.name !== 'Redo'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4984_27569)\">\r\n <path\r\n d=\"M0.5 2.00077V5.00077M0.5 5.00077H3.5M0.5 5.00077L2.82 2.82077C3.35737 2.28313 4.02219 1.89037 4.7524 1.67916C5.48262 1.46794 6.25445 1.44515 6.99586 1.6129C7.73727 1.78065 8.4241 2.13349 8.99227 2.63848C9.56043 3.14347 9.99142 3.78416 10.245 4.50077M11.5 10.0008V7.00077M11.5 7.00077H8.5M11.5 7.00077L9.18 9.18077C8.64263 9.71841 7.97781 10.1112 7.2476 10.3224C6.51738 10.5336 5.74555 10.5564 5.00414 10.3886C4.26273 10.2209 3.5759 9.86805 3.00773 9.36306C2.43957 8.85807 2.00858 8.21738 1.755 7.50077\"\r\n stroke=\"#7A5AF8\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4984_27569\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span [hidden]=\"taskStyle.layout.name !== 'Flagged'\" class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2 7.5C2 7.5 2.5 7 4 7C5.5 7 6.5 8 8 8C9.5 8 10 7.5 10 7.5V1.5C10 1.5 9.5 2 8 2C6.5 2 5.5 1 4 1C2.5 1 2 1.5 2 1.5V7.5ZM2 7.5V11\"\r\n stroke=\"#B42318\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n {{ taskStyle.layout.name }}\r\n </div>\r\n </div>\r\n\r\n <!-- Fixtures -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3><b>{{ storeMetrics.fixtureCount }}</b> Fixtures</h3>\r\n <div class=\"indicator mt-2\" [ngClass]=\"taskStyle.fixture.class\">\r\n <span class=\"me-2\" [hidden]=\"taskStyle.fixture.name !== 'Redo'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4984_27569)\">\r\n <path\r\n d=\"M0.5 2.00077V5.00077M0.5 5.00077H3.5M0.5 5.00077L2.82 2.82077C3.35737 2.28313 4.02219 1.89037 4.7524 1.67916C5.48262 1.46794 6.25445 1.44515 6.99586 1.6129C7.73727 1.78065 8.4241 2.13349 8.99227 2.63848C9.56043 3.14347 9.99142 3.78416 10.245 4.50077M11.5 10.0008V7.00077M11.5 7.00077H8.5M11.5 7.00077L9.18 9.18077C8.64263 9.71841 7.97781 10.1112 7.2476 10.3224C6.51738 10.5336 5.74555 10.5564 5.00414 10.3886C4.26273 10.2209 3.5759 9.86805 3.00773 9.36306C2.43957 8.85807 2.00858 8.21738 1.755 7.50077\"\r\n stroke=\"#7A5AF8\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4984_27569\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span [hidden]=\"taskStyle.fixture.name !== 'Flagged'\" class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2 7.5C2 7.5 2.5 7 4 7C5.5 7 6.5 8 8 8C9.5 8 10 7.5 10 7.5V1.5C10 1.5 9.5 2 8 2C6.5 2 5.5 1 4 1C2.5 1 2 1.5 2 1.5V7.5ZM2 7.5V11\"\r\n stroke=\"#B42318\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n {{ taskStyle.fixture.name }}\r\n </div>\r\n </div>\r\n\r\n <!-- Visual Merchandise -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3><b>{{ storeMetrics.vmCount }}</b> Visual Merchandise</h3>\r\n <div class=\"indicator mt-2\" [ngClass]=\"taskStyle.vm.class\">\r\n <span class=\"me-2\" [hidden]=\"taskStyle.vm.name !== 'Redo'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4984_27569)\">\r\n <path\r\n d=\"M0.5 2.00077V5.00077M0.5 5.00077H3.5M0.5 5.00077L2.82 2.82077C3.35737 2.28313 4.02219 1.89037 4.7524 1.67916C5.48262 1.46794 6.25445 1.44515 6.99586 1.6129C7.73727 1.78065 8.4241 2.13349 8.99227 2.63848C9.56043 3.14347 9.99142 3.78416 10.245 4.50077M11.5 10.0008V7.00077M11.5 7.00077H8.5M11.5 7.00077L9.18 9.18077C8.64263 9.71841 7.97781 10.1112 7.2476 10.3224C6.51738 10.5336 5.74555 10.5564 5.00414 10.3886C4.26273 10.2209 3.5759 9.86805 3.00773 9.36306C2.43957 8.85807 2.00858 8.21738 1.755 7.50077\"\r\n stroke=\"#7A5AF8\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4984_27569\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span [hidden]=\"taskStyle.vm.name !== 'Flagged'\" class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2 7.5C2 7.5 2.5 7 4 7C5.5 7 6.5 8 8 8C9.5 8 10 7.5 10 7.5V1.5C10 1.5 9.5 2 8 2C6.5 2 5.5 1 4 1C2.5 1 2 1.5 2 1.5V7.5ZM2 7.5V11\"\r\n stroke=\"#B42318\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n {{ taskStyle.vm.name }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div id=\"body\" class=\"row\" [ngClass]=\"{ 'd-none': editFixture }\">\r\n <!-- Left Column -->\r\n <div [ngClass]=\"{ 'collapsed-col': isLeftPanelCollapsed, 'col-3': !isLeftPanelCollapsed }\">\r\n <div class=\"s-card\">\r\n <form [ngClass]=\"{ 'd-none': isLeftPanelCollapsed }\" [formGroup]=\"layoutForm\">\r\n <div ngbAccordion accordion=\"NgbAccordion\">\r\n <!-- Walls Section -->\r\n <ng-container *ngIf=\"getFormWalls.controls.length; else addWallAction\">\r\n <ng-container formArrayName=\"walls\">\r\n <ng-container *ngFor=\"let group of getFormWalls.controls; let i = index\">\r\n <div [formGroupName]=\"i\" [ngbAccordionItem]=\"i.toString()\" class=\"mb-5\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button type=\"button\" class=\"mainheading p-0\" ngbAccordionButton>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"me-2 wall-label\">\r\n {{ group.get(\"elementType\")?.value | titlecase }} {{ group.get(\"elementNumber\")?.value }}\r\n </span>\r\n \r\n @if(layoutForm.enabled){\r\n <span class=\"me-1\" ngbTooltip=\"Rotate this wall.\"\r\n (click)=\"rotateWall(getElementNumber(group)!); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M3.73735 8.25011C4.12193 8.24362 4.44377 8.52776 4.49338 8.89998L4.4999 8.98735L4.50262 9.15516C4.58434 11.5741 6.57243 13.5 9 13.5C9.14022 13.5 9.27951 13.4936 9.41756 13.4809L9.21967 13.2803C8.92678 12.9874 8.92678 12.5126 9.21967 12.2197C9.51257 11.9268 9.98744 11.9268 10.2803 12.2197L11.7803 13.7197C12.0732 14.0126 12.0732 14.4874 11.7803 14.7803L10.2803 16.2803C9.98744 16.5732 9.51257 16.5732 9.21967 16.2803C8.92678 15.9874 8.92678 15.5126 9.21967 15.2197L9.45837 14.9827C9.30646 14.9942 9.15359 15 9 15C5.82653 15 3.21665 12.5321 3.0125 9.38289L3.00315 9.19314L3.00011 9.01265C2.99312 8.59849 3.3232 8.25709 3.73735 8.25011ZM8.78033 1.71967C9.0507 1.99003 9.07149 2.41546 8.84272 2.70967L8.78033 2.78033L8.54187 3.01726C8.69371 3.00578 8.8465 3 9 3C12.3137 3 15 5.68629 15 9C15 9.41421 14.6642 9.75 14.25 9.75C13.8358 9.75 13.5 9.41421 13.5 9C13.5 6.51472 11.4853 4.5 9 4.5C8.8597 4.5 8.72034 4.5064 8.58221 4.51909L8.78033 4.71967C9.07323 5.01256 9.07323 5.48744 8.78033 5.78033C8.50997 6.05069 8.08455 6.07149 7.79033 5.84272L7.71967 5.78033L6.21967 4.28033C5.94931 4.00997 5.92851 3.58454 6.15728 3.29033L6.21967 3.21967L7.71967 1.71967C8.01257 1.42678 8.48744 1.42678 8.78033 1.71967Z\"\r\n fill=\"#475467\" stroke=\"#475467\" stroke-width=\"0.00064\" />\r\n </svg>\r\n </span>\r\n <span class=\"me-1\" ngbTooltip=\"Insert new wall below.\"\r\n (click)=\"addNewWall(getElementNumber(group)!); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_62_8)\">\r\n <path\r\n d=\"M9 9.75C11.0707 9.75 12.75 11.4293 12.75 13.5C12.75 15.5708 11.0707 17.25 9 17.25C6.92925 17.25 5.25 15.5708 5.25 13.5C5.25 11.4293 6.92925 9.75 9 9.75ZM9.75 11.25H8.25V12.7493L6.75 12.75V14.25L8.25 14.2493V15.75H9.75V14.2493L11.25 14.25V12.75L9.75 12.7493V11.25ZM15 2.25C15.414 2.25 15.75 2.586 15.75 3V7.5C15.75 7.914 15.414 8.25 15 8.25H3C2.586 8.25 2.25 7.914 2.25 7.5V3C2.25 2.586 2.586 2.25 3 2.25H15ZM3.75 3.75V6.75H14.25V3.75H3.75Z\"\r\n fill=\"#475467\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_62_8\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span class=\"me-1\" ngbTooltip=\"Remove this wall and its fixtures.\"\r\n (click)=\"deleteWall(getElementNumber(group)!); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_63_25)\">\r\n <path\r\n d=\"M10.7094 1.5C11.3551 1.5 11.9283 1.91314 12.1324 2.52565L12.5406 3.75H15C15.4142 3.75 15.75 4.08579 15.75 4.5C15.75 4.9142 15.4142 5.24999 15 5.25L14.9981 5.30344L14.3476 14.4103C14.2635 15.5878 13.2838 16.5 12.1034 16.5H5.89668C4.71624 16.5 3.7365 15.5878 3.6524 14.4103L3.00191 5.30344C3.00062 5.28551 2.99998 5.26769 2.99997 5.25C2.58577 5.24999 2.25 4.9142 2.25 4.5C2.25 4.08579 2.58579 3.75 3 3.75H5.45943L5.86754 2.52565C6.07172 1.91314 6.64493 1.5 7.29057 1.5H10.7094ZM13.4981 5.25H4.50191L5.14858 14.3034C5.17662 14.696 5.5032 15 5.89668 15H12.1034C12.4968 15 12.8234 14.696 12.8514 14.3034L13.4981 5.25ZM7.5 7.5C7.88464 7.5 8.20163 7.78952 8.24495 8.16253L8.25 8.25V12C8.25 12.4142 7.91422 12.75 7.5 12.75C7.11537 12.75 6.79837 12.4605 6.75505 12.0875L6.75 12V8.25C6.75 7.83578 7.08578 7.5 7.5 7.5ZM10.5 7.5C10.9142 7.5 11.25 7.83578 11.25 8.25V12C11.25 12.4142 10.9142 12.75 10.5 12.75C10.0858 12.75 9.75 12.4142 9.75 12V8.25C9.75 7.83578 10.0858 7.5 10.5 7.5ZM10.7094 3H7.29057L7.04057 3.75H10.9595L10.7094 3Z\"\r\n fill=\"#F32B2B\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_63_25\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n }\r\n </div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"ps-0 pe-0\">\r\n <ng-template>\r\n <div style=\"min-height: 50px\" dndDropzone (dndDrop)=\"onDrop($event, i)\">\r\n <!-- Fixtures -->\r\n <ng-container *ngIf=\"getFormFixtures(i).controls.length\">\r\n <div formArrayName=\"fixtures\">\r\n <ng-container *ngFor=\"let fixture of getFormFixtures(i).controls; let j = index\">\r\n <div \r\n dndDropzone \r\n (dndDrop)=\"onDrop($event, i, j)\" \r\n [formGroupName]=\"j\"\r\n [dndDraggable]=\"{ wallIndex: i, fixtureIndex: j }\" \r\n [dndEffectAllowed]=\"'all'\"\r\n class=\"row g-0 mb-5\" \r\n [dndDisableDragIf]=\"layoutForm.disabled\">\r\n \r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-center justify-content-center h-100\">\r\n <svg \r\n dndDragImageRef\r\n [style]=\"{ cursor: layoutForm.disabled ? 'default' : 'move', opacity: '0.5' }\"\r\n width=\"25px\" \r\n viewBox=\"0 0 16 16\" \r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"m 4.496094 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 0 0\"\r\n fill=\"grey\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-10\">\r\n <lib-reactive-select \r\n formControlName=\"fixtureConfigId\" \r\n [idField]=\"'_id'\"\r\n [nameField]=\"'name'\" \r\n [data]=\"fixtureTemplates\" \r\n [label]=\"'Fixture ' + (j + 1)\"\r\n [subTextField]=\"'subtext'\" \r\n [search]=\"true\">\r\n </lib-reactive-select>\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg \r\n (click)=\"removeFixture('wall', j, i)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\"\r\n xmlns=\"http://www.w3.org/2000/svg\" \r\n width=\"10\" \r\n height=\"10\"\r\n viewBox=\"0 0 10 10\" \r\n fill=\"none\">\r\n <path \r\n d=\"M9 1L1 9M1 1L9 9\" \r\n stroke=\"#344054\" \r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\" \r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n \r\n <div class=\"d-flex justify-content-end\">\r\n <a \r\n class=\"link-btn\" \r\n [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewFixture('wall', i)\">\r\n Add fixture\r\n </a>\r\n </div>\r\n \r\n <hr style=\"border-top: 1px dashed #000000;\" />\r\n \r\n <!-- Other Elements -->\r\n <ng-container *ngIf=\"getWallOtherElements(i).controls.length\">\r\n <div formArrayName=\"otherElements\">\r\n <ng-container *ngFor=\"let fixture of getWallOtherElements(i).controls; let j = index\">\r\n <div [formGroupName]=\"j\" class=\"row g-0 mb-5\">\r\n <div class=\"col-11\">\r\n <label class=\"form-label mb-1\">Element {{ j + 1 }}</label>\r\n\r\n <!-- Dropdown bound to 'type' -->\r\n <lib-reactive-select \r\n [idField]=\"'value'\" \r\n [nameField]=\"'label'\"\r\n [data]=\"otherElementList\" \r\n [id]=\"'elementLabel' + j\" \r\n formControlName=\"type\">\r\n </lib-reactive-select>\r\n\r\n <!-- Show custom text input only when 'Others' is selected -->\r\n <input \r\n *ngIf=\"(fixture.get('type')?.value) === 'Others'\" \r\n type=\"text\"\r\n class=\"form-control mt-2\" \r\n formControlName=\"customName\"\r\n placeholder=\"Enter custom element name\" />\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg \r\n (click)=\"removeOtherElement('wall', j, i)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\"\r\n xmlns=\"http://www.w3.org/2000/svg\" \r\n width=\"10\" \r\n height=\"10\"\r\n viewBox=\"0 0 10 10\" \r\n fill=\"none\">\r\n <path \r\n d=\"M9 1L1 9M1 1L9 9\" \r\n stroke=\"#344054\" \r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\" \r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n \r\n <div class=\"d-flex justify-content-end\">\r\n <a \r\n class=\"link-btn\" \r\n [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewOtherElements('wall', i)\">\r\n Add element\r\n </a>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #addWallAction>\r\n <button \r\n (click)=\"addNewWall(0)\" \r\n [class.disabled-click]=\"layoutForm.disabled\"\r\n class=\"btn btn-secondary w-100 p-2\">\r\n Insert new wall\r\n </button>\r\n </ng-template>\r\n\r\n <hr style=\"border-top: 1px dashed #000000;\" />\r\n \r\n <!-- Floor Section -->\r\n <div [ngbAccordionItem]=\"'floor'\" class=\"mb-5\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button type=\"button\" class=\"mainheading p-0\" ngbAccordionButton>\r\n <span class=\"me-2 wall-label\">Floor</span>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"ps-0 pe-0\">\r\n <ng-template>\r\n <div style=\"min-height: 50px\" dndDropzone (dndDrop)=\"onDrop($event, 'floor')\">\r\n <!-- Floor Fixtures -->\r\n <ng-container *ngIf=\"getFormFloorFixtures.controls.length\">\r\n <div formArrayName=\"floorFixtures\">\r\n <ng-container *ngFor=\"let fixture of getFormFloorFixtures.controls; let j = index\">\r\n <div \r\n dndDropzone \r\n (dndDrop)=\"onDrop($event, 'floor', j)\" \r\n [formGroupName]=\"j\"\r\n [dndDraggable]=\"{ wallIndex: 'floor', fixtureIndex: j }\" \r\n [dndEffectAllowed]=\"'all'\"\r\n [dndDisableDragIf]=\"layoutForm.disabled\"\r\n class=\"row g-0 mb-5\">\r\n \r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-center justify-content-center h-100\">\r\n <svg \r\n dndDragImageRef \r\n style=\"cursor: move; opacity: 0.5\" \r\n width=\"25px\"\r\n viewBox=\"0 0 16 16\" \r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"m 4.496094 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 0 0\"\r\n fill=\"grey\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-10\">\r\n <lib-reactive-select \r\n formControlName=\"fixtureConfigId\" \r\n [idField]=\"'_id'\"\r\n [nameField]=\"'name'\" \r\n [data]=\"fixtureTemplates\" \r\n [label]=\"'Fixture ' + (j + 1)\"\r\n [search]=\"true\" \r\n [subTextField]=\"'subtext'\">\r\n </lib-reactive-select>\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg \r\n (click)=\"removeFixture('floor', j)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\" \r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"10\" \r\n height=\"10\" \r\n viewBox=\"0 0 10 10\" \r\n fill=\"none\">\r\n <path \r\n d=\"M9 1L1 9M1 1L9 9\" \r\n stroke=\"#344054\" \r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\" \r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n \r\n <div class=\"d-flex justify-content-end\">\r\n <a \r\n class=\"link-btn\" \r\n [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewFixture('floor')\">\r\n Add fixture\r\n </a>\r\n </div>\r\n \r\n <hr style=\"border-top: 1px dashed #000000;\" />\r\n \r\n <!-- Floor Other Elements -->\r\n <ng-container *ngIf=\"getFormFloorOtherElements.controls.length\">\r\n <div formArrayName=\"floorOtherElements\">\r\n <ng-container *ngFor=\"let fixture of getFormFloorOtherElements.controls; let j = index\">\r\n <div [formGroupName]=\"j\" class=\"row g-0 mb-5\">\r\n <div class=\"col-11\">\r\n <label class=\"form-label mb-1\">Element {{ j + 1 }}</label>\r\n\r\n <!-- Dropdown for type -->\r\n <lib-reactive-select \r\n [idField]=\"'value'\" \r\n [nameField]=\"'label'\"\r\n [data]=\"otherElementList\" \r\n [id]=\"'floorElementLabel' + j\" \r\n formControlName=\"type\">\r\n </lib-reactive-select>\r\n\r\n <!-- Conditional input for custom name -->\r\n <input \r\n *ngIf=\"(fixture.get('type')?.value) === 'Others'\" \r\n type=\"text\"\r\n class=\"form-control mt-2\" \r\n formControlName=\"customName\"\r\n placeholder=\"Enter custom element name\" />\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg \r\n (click)=\"removeOtherElement('floor', j)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\" \r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"10\" \r\n height=\"10\" \r\n viewBox=\"0 0 10 10\" \r\n fill=\"none\">\r\n <path \r\n d=\"M9 1L1 9M1 1L9 9\" \r\n stroke=\"#344054\" \r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\" \r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end\">\r\n <a \r\n class=\"link-btn\" \r\n [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewOtherElements('floor')\">\r\n Add element\r\n </a>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Center Column -->\r\n <div class=\"col overflow-hidden position-relative\">\r\n <div id=\"canvas-card\" class=\"c-card position-relative\" #canvasContainer>\r\n <!-- Canvas View -->\r\n <div [ngClass]=\"{ 'd-none': selectedView === 'tree' }\">\r\n <canvas id=\"base-canvas\" #baseCanvas></canvas>\r\n </div>\r\n \r\n <!-- Tree View -->\r\n <div *ngIf=\"selectedView === 'tree'\" class=\"w-100\">\r\n <store-plano-tree-view [allFixture]=\"allFixtures\"></store-plano-tree-view>\r\n </div>\r\n \r\n <!-- Top Controls -->\r\n <div style=\"top: 24px; left: 26px; position: absolute;\" id=\"segment-btn\" class=\"pb-5\">\r\n <div class=\"w-100 d-flex justify-content-start gap-4\">\r\n <ul class=\"nav nav-tabs custom-tabs d-flex\" style=\"width: 200px; margin: 0\">\r\n <li class=\"nav-item flex-fill\">\r\n <button \r\n class=\"nav-link w-100 h-100\" \r\n [class.active]=\"selectedView === 'detail'\"\r\n (click)=\"selectedView = 'detail'\">\r\n Detail View\r\n </button>\r\n </li>\r\n <li class=\"nav-item flex-fill\">\r\n <button \r\n class=\"nav-link w-100 h-100\" \r\n [class.active]=\"selectedView === 'tree'\"\r\n (click)=\"selectedView = 'tree'\">\r\n Tree View\r\n </button>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <!-- Entrance Button -->\r\n <div \r\n *ngIf=\"layoutForm.enabled\" \r\n ngbTooltip=\"You can add up to two entrances.\" \r\n style=\"top: 24px; right: 190px\"\r\n class=\"position-absolute\" \r\n [disableTooltip]=\"getEntrances?.length < 2\">\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-outline d-flex align-items-center gap-3 bg-white shadow-sm\"\r\n [disabled]=\"getEntrances?.length >= 2\" \r\n (click)=\"addNewEntrance()\">\r\n Add Entrance\r\n </button>\r\n </div>\r\n\r\n <!-- Edit Button -->\r\n <button \r\n *ngIf=\"layoutForm.disabled\"\r\n [disabled]=\"disableEdit || ['taskAssigned'].includes(taskStyle.fixture.class)\"\r\n style=\"top: 24px; right: 164px\" \r\n type=\"button\"\r\n class=\"btn btn-outline d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"onClickEdit()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1322_5325)\">\r\n <path\r\n d=\"M14.1667 2.49993C14.3856 2.28106 14.6455 2.10744 14.9314 1.98899C15.2174 1.87054 15.5239 1.80957 15.8334 1.80957C16.1429 1.80957 16.4494 1.87054 16.7354 1.98899C17.0214 2.10744 17.2812 2.28106 17.5001 2.49993C17.719 2.7188 17.8926 2.97863 18.011 3.2646C18.1295 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1295 4.78262 18.011 5.06859C17.8926 5.35455 17.719 5.61439 17.5001 5.83326L6.25008 17.0833L1.66675 18.3333L2.91675 13.7499L14.1667 2.49993Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1322_5325\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n Edit\r\n </button>\r\n\r\n <!-- Rotate Button -->\r\n <button \r\n style=\"top: 24px; right: 94px\" \r\n type=\"button\" \r\n *ngIf=\"layoutForm.disabled\"\r\n class=\"btn btn-outline d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"rotateCanvas(canvas,90)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 26 26\" fill=\"none\">\r\n <path\r\n d=\"M6.36265 7.17887L7.17625 6.36287L5.90425 5.09207L5.08945 5.90567L6.36265 7.17887ZM15.671 6.36407L19.6379 10.3309L20.9099 9.05769L16.9442 5.09087L15.671 6.36407ZM19.6379 18.8257L18.8243 19.6393L20.0963 20.9101L20.9099 20.0977L19.6379 18.8257ZM10.3295 19.6393L6.36265 15.6725L5.09065 16.9457L9.05626 20.9113L10.3295 19.6393ZM18.8243 19.6393C17.6543 20.8081 16.8407 21.6193 16.1459 22.1497C15.4715 22.6645 15.0155 22.8289 14.5763 22.8289V24.6289C15.5675 24.6289 16.4027 24.2173 17.2367 23.5813C18.0503 22.9609 18.9635 22.0453 20.0963 20.9125L18.8243 19.6393ZM9.05626 20.9113C10.1891 22.0453 11.1023 22.9597 11.9159 23.5813C12.7499 24.2173 13.5851 24.6289 14.5763 24.6289V22.8289C14.1371 22.8289 13.6823 22.6645 13.0067 22.1497C12.3119 21.6193 11.4983 20.8081 10.3295 19.6393L9.05626 20.9113ZM19.6379 10.3309C20.8067 11.4997 21.6179 12.3133 22.1483 13.0081C22.6631 13.6837 22.8275 14.1385 22.8275 14.5777H24.6275C24.6275 13.5865 24.2159 12.7513 23.5799 11.9173C22.9595 11.1037 22.0427 10.1905 20.9099 9.05769L19.6379 10.3309ZM20.9099 20.0977C22.0439 18.9637 22.9583 18.0517 23.5799 17.2381C24.2159 16.4041 24.6275 15.5689 24.6275 14.5777H22.8275C22.8275 15.0169 22.6631 15.4729 22.1483 16.1473C21.6179 16.8421 20.8067 17.6557 19.6379 18.8257L20.9099 20.0977ZM7.17625 6.36287C8.34625 5.19407 9.15985 4.38167 9.85465 3.85127C10.529 3.33647 10.985 3.17327 11.4242 3.17327V1.37207C10.433 1.37207 9.59785 1.78367 8.76385 2.41967C7.94905 3.04127 7.03705 3.95567 5.90425 5.08847L7.17625 6.36287ZM16.9442 5.09087C15.8114 3.95687 14.8982 3.04127 14.0846 2.41967C13.2506 1.78367 12.4154 1.37207 11.4242 1.37207V3.17327C11.8634 3.17327 12.3182 3.33647 12.9938 3.85127C13.6886 4.38167 14.5022 5.19287 15.671 6.36167L16.9442 5.09087ZM5.08945 5.90327C3.95665 7.03607 3.04225 7.94807 2.42065 8.76287C1.78465 9.59687 1.37305 10.4321 1.37305 11.4233H3.17305C3.17305 10.9841 3.33745 10.5281 3.85225 9.85367C4.38265 9.15887 5.19385 8.34527 6.36265 7.17527L5.08945 5.90327ZM6.36265 15.6713C5.19385 14.5013 4.38265 13.6877 3.85225 12.9929C3.33745 12.3185 3.17305 11.8625 3.17305 11.4233H1.37305C1.37305 12.4145 1.78465 13.2497 2.42065 14.0837C3.04225 14.8973 3.95665 15.8105 5.08945 16.9433L6.36265 15.6713Z\"\r\n fill=\"#1D2939\" />\r\n <path d=\"M23.2 6.9832L25 8.2C25 4.582 22.4056 1.5796 19 1M2.8 19.0168L1 17.8C1 21.418 3.5944 24.4204 7 25\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- Submit Button -->\r\n <button \r\n *ngIf=\"!layoutForm.disabled\" \r\n style=\"top: 24px; right: 94px;padding: 9px 20px !important;\"\r\n type=\"button\" \r\n class=\"btn btn-primary d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"updateLayout(true)\">\r\n Submit\r\n </button>\r\n\r\n <!-- Download Button -->\r\n <button \r\n style=\"top: 24px; right: 26px\" \r\n type=\"button\"\r\n class=\"btn btn-outline d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"downloadCanvas()\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"#000000\" stroke-width=\"0.24000000000000005\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\"\r\n stroke-width=\"0.384\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path\r\n d=\"M12.5535 16.5061C12.4114 16.6615 12.2106 16.75 12 16.75C11.7894 16.75 11.5886 16.6615 11.4465 16.5061L7.44648 12.1311C7.16698 11.8254 7.18822 11.351 7.49392 11.0715C7.79963 10.792 8.27402 10.8132 8.55352 11.1189L11.25 14.0682V3C11.25 2.58579 11.5858 2.25 12 2.25C12.4142 2.25 12.75 2.58579 12.75 3V14.0682L15.4465 11.1189C15.726 10.8132 16.2004 10.792 16.5061 11.0715C16.8118 11.351 16.833 11.8254 16.5535 12.1311L12.5535 16.5061Z\"\r\n fill=\"#1D2939\"></path>\r\n <path\r\n d=\"M3.75 15C3.75 14.5858 3.41422 14.25 3 14.25C2.58579 14.25 2.25 14.5858 2.25 15V15.0549C2.24998 16.4225 2.24996 17.5248 2.36652 18.3918C2.48754 19.2919 2.74643 20.0497 3.34835 20.6516C3.95027 21.2536 4.70814 21.5125 5.60825 21.6335C6.47522 21.75 7.57754 21.75 8.94513 21.75H15.0549C16.4225 21.75 17.5248 21.75 18.3918 21.6335C19.2919 21.5125 20.0497 21.2536 20.6517 20.6516C21.2536 20.0497 21.5125 19.2919 21.6335 18.3918C21.75 17.5248 21.75 16.4225 21.75 15.0549V15C21.75 14.5858 21.4142 14.25 21 14.25C20.5858 14.25 20.25 14.5858 20.25 15C20.25 16.4354 20.2484 17.4365 20.1469 18.1919C20.0482 18.9257 19.8678 19.3142 19.591 19.591C19.3142 19.8678 18.9257 20.0482 18.1919 20.1469C17.4365 20.2484 16.4354 20.25 15 20.25H9C7.56459 20.25 6.56347 20.2484 5.80812 20.1469C5.07435 20.0482 4.68577 19.8678 4.40901 19.591C4.13225 19.3142 3.9518 18.9257 3.85315 18.1919C3.75159 17.4365 3.75 16.4354 3.75 15Z\"\r\n fill=\"#1D2939\"></path>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- Panel Collapse Handlers -->\r\n <div class=\"collapse-handler left\" (click)=\"togglePanel('left')\">\r\n <svg *ngIf=\"!isLeftPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27308 12.636L4.63672 8.99964L8.27308 5.36328M13.364 12.636L9.72763 8.99964L13.364 5.36328\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"isLeftPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72692 5.36399L13.3633 9.00036L9.72692 12.6367M4.63601 5.36399L8.27237 9.00036L4.63601 12.6367\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n \r\n <div class=\"collapse-handler right\" (click)=\"togglePanel('right')\">\r\n <svg *ngIf=\"isRightPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27308 12.636L4.63672 8.99964L8.27308 5.36328M13.364 12.636L9.72763 8.99964L13.364 5.36328\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"!isRightPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72692 5.36399L13.3633 9.00036L9.72692 12.6367M4.63601 5.36399L8.27237 9.00036L4.63601 12.6367\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Column -->\r\n <div [ngClass]=\"{ 'collapsed-col': isRightPanelCollapsed, 'col-3': !isRightPanelCollapsed }\">\r\n <ng-container *ngTemplateOutlet=\"feedbackCol\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- Edit Fixture Body -->\r\n <div id=\"edit-body\" class=\"row\" [ngClass]=\"{ 'd-none': !editFixture }\">\r\n <ul class=\"mx-3 my-5 nav nav-pills\" role=\"tablist\">\r\n <li class=\"nav-item cursor-pointer\" role=\"presentation\">\r\n <a \r\n (click)=\"submitFixture = false; editFixtureSection = 'basic-details'\"\r\n [ngClass]=\"editFixtureSection === 'basic-details' ? 'active' : ''\" \r\n class=\"nav-link\" \r\n role=\"tab\">\r\n Basic details\r\n </a>\r\n </li>\r\n <li class=\"nav-item cursor-pointer\" role=\"presentation\">\r\n <a \r\n (click)=\"submitFixture = false; editFixtureSection = 'products'\"\r\n [ngClass]=\"editFixtureSection === 'products' ? 'active' : ''\" \r\n class=\"nav-link\" \r\n role=\"tab\">\r\n Products\r\n </a>\r\n </li>\r\n <li class=\"nav-item cursor-pointer\" role=\"presentation\">\r\n <a \r\n (click)=\"submitFixture = false; editFixtureSection = 'vms'\"\r\n [ngClass]=\"editFixtureSection === 'vms' ? 'active' : ''\" \r\n class=\"nav-link\" \r\n role=\"tab\">\r\n Visual Merchandise\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <div class=\"col-9\">\r\n <ng-container *ngIf=\"editFixtureSection === 'basic-details'\">\r\n <lib-instance-basic-details \r\n [fixtureData]=\"selectedFixtureData\" \r\n [editMode]=\"true\"\r\n [isSubmitted]=\"submitFixture\" \r\n (submitEvent)=\"onFixtureSubmit($event)\">\r\n </lib-instance-basic-details>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"editFixtureSection === 'products'\">\r\n <lib-instance-products \r\n [fixtureData]=\"selectedFixtureData\" \r\n [editMode]=\"true\" \r\n [isSubmitted]=\"submitFixture\"\r\n (submitEvent)=\"onFixtureSubmit($event)\">\r\n </lib-instance-products>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"editFixtureSection === 'vms'\">\r\n <lib-instance-vms \r\n [fixtureData]=\"selectedFixtureData\" \r\n [editMode]=\"true\" \r\n [isSubmitted]=\"submitFixture\"\r\n (submitEvent)=\"onFixtureSubmit($event)\">\r\n </lib-instance-vms>\r\n </ng-container>\r\n </div>\r\n \r\n <div class=\"col-3\">\r\n <ng-container *ngTemplateOutlet=\"feedbackCol\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n\r\n<!-- Templates -->\r\n<ng-template #feedbackCol>\r\n <div class=\"s-card\">\r\n <app-manage-store-plano-feedback \r\n [ngClass]=\"{ 'd-none': isRightPanelCollapsed && !editFixture}\" \r\n [currentPlano]=\"floorData\"\r\n [storeFeedback]=\"storeFeedback\" \r\n [selectedIssue]=\"selectedFixture\"\r\n (isApproved)=\"handleApproverResponse($event)\">\r\n </app-manage-store-plano-feedback>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #headerSkeleton>\r\n <div class=\"row m-0 g-0 loader d-flex justify-content-center align-items-center overflow-hidden\">\r\n <div class=\"shimmer w-100 p-4 rounded\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke mt-0 animate title\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #skeletonLoader>\r\n <div class=\"row loader d-flex justify-content-center align-items-center overflow-hidden\">\r\n <div class=\"shimmer rounded\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;width:345px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .block{border:1px solid #98a2b3;padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}::ng-deep .backgroundImg{background-color:#f9fafb!important}::ng-deep .accordion .accordion-button.backgroundImg:not(.collapsed){background-color:#f9fafb!important}::ng-deep .accordion-body{padding:10px 20px 20px}.s-card{position:relative;box-sizing:border-box;border-radius:8px;background:#fff;padding:20px 16px;height:75dvh;overflow-y:auto;overflow-x:visible}.c-card{border-radius:8px;background:#fff;padding:20px 16px;height:75dvh;overflow:hidden;width:100%}.h-card{border-radius:8px;background:#fff;padding:20px 16px;min-height:20dvh}.wall-label{color:var(--Gray-600, #475467);font-family:Inter;font-size:14px;font-style:normal;font-weight:600}img{width:100%;height:100%;object-fit:cover;display:block}#header .title{color:var(--Gray-800, #1d2939);font-size:16px;font-weight:600;line-height:24px;margin:0}.loader .shimmer{height:100%!important}.collapse-handler{position:absolute;height:32px;width:32px;display:flex;justify-content:center;align-items:center;border-radius:50%;background:#fff;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;cursor:pointer;top:12px}.collapse-handler.right{right:0}.collapse-handler.left{left:0}.collapsed-col{transition:all .3s ease;width:40px!important}[class^=col]{transition:all .3s ease}#segment-btn .custom-tabs{border-radius:8px;border:1px solid var(--Gray-300, #d0d5dd);overflow:hidden;margin-bottom:24px}#segment-btn .custom-tabs .nav-link{border-radius:0%;color:#495057;padding:.75rem 1rem;background-color:#fff;text-align:center;border-right:1px solid var(--Gray-300, #d0d5dd);transition:all ease .2s;font-weight:500}#segment-btn .custom-tabs .nav-link.active{background:var(--Primary-500, #33b5ff);color:#fff}#segment-btn .nav-tabs .nav-link{border:none;margin:0}#segment-btn .nav-item{text-align:center}#segment-btn .nav-item:last-child .nav-link{border:none}.link-btn{color:#33b5ff;cursor:pointer;font-weight:500}.link-btn:hover{color:#33b5ff;text-decoration:underline!important}.btn-red{border-radius:8px!important;border:1px solid #fef3f2!important;background:#fef3f2!important;box-shadow:0 1px 2px #1018280d!important;padding:10px 18px!important;color:#b42318!important;font-size:16px!important;font-weight:600!important}.updateClass{font-family:Inter;font-weight:400;font-size:14px;line-height:20px;letter-spacing:0%;color:#667085}\n"], dependencies: [{ kind: "component", type: i8.ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "subTextField", "searchField", "label", "data", "action", "search", "prefix", "actionLabel"], outputs: ["actionClick"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i7.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i7.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i7.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i7.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i7.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i7.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i7.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "directive", type: i9.DndDraggableDirective, selector: "[dndDraggable]", inputs: ["dndDraggable", "dndEffectAllowed", "dndType", "dndDraggingClass", "dndDraggingSourceClass", "dndDraggableDisabledClass", "dndDragImageOffsetFunction", "dndDisableIf", "dndDisableDragIf"], outputs: ["dndStart", "dndDrag", "dndEnd", "dndMoved", "dndCopied", "dndLinked", "dndCanceled"] }, { kind: "directive", type: i9.DndDropzoneDirective, selector: "[dndDropzone]", inputs: ["dndDropzone", "dndEffectAllowed", "dndAllowExternal", "dndHorizontal", "dndDragoverClass", "dndDropzoneDisabledClass", "dndDisableIf", "dndDisableDropIf"], outputs: ["dndDragover", "dndDrop"] }, { kind: "directive", type: i9.DndDragImageRefDirective, selector: "[dndDragImageRef]" }, { kind: "component", type: i10.InstanceBasicDetailsComponent, selector: "lib-instance-basic-details", inputs: ["fixtureData", "editMode", "isSubmitted"], outputs: ["submitEvent"] }, { kind: "component", type: i11.InstanceProductsComponent, selector: "lib-instance-products", inputs: ["fixtureData", "editMode", "isSubmitted", "isRollout"], outputs: ["submitEvent"] }, { kind: "component", type: i12.InstanceVmsComponent, selector: "lib-instance-vms", inputs: ["fixtureData", "editMode", "isSubmitted", "isRollout"], outputs: ["submitEvent"] }, { kind: "component", type: i13.StorePlanoTreeViewComponent, selector: "store-plano-tree-view", inputs: ["allFixture"], outputs: ["selectedInstance"] }, { kind: "component", type: i14.ManageStorePlanoFeedbackComponent, selector: "app-manage-store-plano-feedback", inputs: ["currentPlano", "storeFeedback", "selectedIssue"], outputs: ["isApproved"] }, { kind: "pipe", type: i5.TitleCasePipe, name: "titlecase" }] });
4647
4330
  }
4648
4331
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ManageStorePlanoComponent, decorators: [{
4649
4332
  type: Component,
4650
- args: [{ selector: "lib-manage-store-plano", providers: [TitleCasePipe], template: "<section id=\"manage-plano\">\r\n <!-- Loading State -->\r\n <div *ngIf=\"isPageLoading\" class=\"row\">\r\n <div class=\"col-12 m-0\">\r\n <ng-container *ngTemplateOutlet=\"headerSkeleton\"></ng-container>\r\n </div>\r\n <div class=\"col-3\">\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n </div>\r\n <div class=\"col-6\">\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n </div>\r\n <div class=\"col-3\">\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- Content -->\r\n <div [ngClass]=\"{ 'd-none': isPageLoading }\">\r\n <!-- Header Accordion -->\r\n <div id=\"header\" ngbAccordion #accordion=\"ngbAccordion\" class=\"my-4\">\r\n <div ngbAccordionItem=\"details\" [collapsed]=\"false\">\r\n <div ngbAccordionHeader class=\"d-flex justify-content-between align-items-center px-6 py-3\">\r\n <div class=\"d-flex gap-4 align-items-center\">\r\n <h2 class=\"title\">{{ planoData?.storeName }} - Plano</h2>\r\n <lib-reactive-select *ngIf=\"planoData?.floors?.length\" [formControl]=\"selectedFloorId\" [idField]=\"'_id'\"\r\n [nameField]=\"'floorName'\" [data]=\"planoData.floors\">\r\n </lib-reactive-select>\r\n <div class=\"cus-btn\" (click)=\"goToStoreTourPage()\">\r\n View store tour\r\n\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_408_16498)\">\r\n <path\r\n d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\"\r\n stroke=\"#33B5FF\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M5 4L8 6L5 8V4Z\" stroke=\"#33B5FF\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_408_16498\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n </div>\r\n <div class=\"cus-btn\" (click)=\"goToStoreCameraPage()\">\r\n View camera\r\n\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_422_36321)\">\r\n <path\r\n d=\"M9 6.5V9.5C9 9.76522 8.89464 10.0196 8.70711 10.2071C8.51957 10.3946 8.26522 10.5 8 10.5H2.5C2.23478 10.5 1.98043 10.3946 1.79289 10.2071C1.60536 10.0196 1.5 9.76522 1.5 9.5V4C1.5 3.73478 1.60536 3.48043 1.79289 3.29289C1.98043 3.10536 2.23478 3 2.5 3H5.5M7.5 1.5H10.5M10.5 1.5V4.5M10.5 1.5L5 7\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_422_36321\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center gap-4\">\r\n <div *ngIf=\"!editFixture\" class=\"updateClass\">Last Update: {{floorData?.updatedAt}}</div>\r\n\r\n <div class=\"d-flex gap-4 align-items-center\">\r\n <!-- Edit Fixture Mode -->\r\n <ng-container *ngIf=\"editFixture\">\r\n <button type=\"button\" class=\"btn btn-outline text-nowrap\" (click)=\"onFixturePageCancel()\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary text-nowrap\" (click)=\"onFixtureSave()\">\r\n Save & Close\r\n </button>\r\n </ng-container>\r\n\r\n <!-- Normal Mode -->\r\n <ng-container *ngIf=\"!editFixture && !['taskAssigned'].includes(taskStyle.fixture.class)\">\r\n <!-- Publish Buttons -->\r\n <button *ngIf=\"publishingState === 'layout'\" type=\"button\" class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" [disabled]=\"disabledPublish\">\r\n Publish Layout Verification\r\n </button>\r\n <button *ngIf=\"publishingState === 'layout-redo'\" type=\"button\" class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" [disabled]=\"disabledPublish\">\r\n Publish Layout Redo\r\n </button>\r\n <button *ngIf=\"publishingState === 'fixture'\" type=\"button\" class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" [disabled]=\"disabledPublish\">\r\n Publish Fixture Verification\r\n </button>\r\n <button *ngIf=\"publishingState === 'fixture-redo'\" type=\"button\" class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" [disabled]=\"disabledPublish\">\r\n Publish Fixture Redo\r\n </button>\r\n <button *ngIf=\"publishingState === 'vm'\" type=\"button\" class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" [disabled]=\"disabledPublish\">\r\n Publish VM Verification\r\n </button>\r\n <button *ngIf=\"publishingState === 'vm-redo'\" type=\"button\" class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" [disabled]=\"disabledPublish\">\r\n Publish VM Redo\r\n </button>\r\n </ng-container>\r\n\r\n <!-- Revoke Button -->\r\n <button (click)=\"revokeTask()\" *ngIf=\"['taskAssigned'].includes(taskStyle.fixture.class) && !editFixture\"\r\n class=\"btn btn-red d-flex align-items-center\">\r\n <svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_640_5594)\">\r\n <path\r\n d=\"M6.66669 10.0013H13.3334M18.3334 10.0013C18.3334 14.6037 14.6024 18.3346 10 18.3346C5.39765 18.3346 1.66669 14.6037 1.66669 10.0013C1.66669 5.39893 5.39765 1.66797 10 1.66797C14.6024 1.66797 18.3334 5.39893 18.3334 10.0013Z\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_640_5594\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n Revoke\r\n </button>\r\n\r\n <button ngbAccordionButton></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <div id=\"header\" class=\"row mx-0 gap-3\">\r\n <!-- Plano Completion -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3 class=\"d-flex align-items-center gap-2\">\r\n Plano Completion %\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"\r\n ngbTooltip=\"% of overall planogram completion\">\r\n <g clip-path=\"url(#clip0_1517_129805)\">\r\n <path\r\n d=\"M9 12V9M9 6H9.0075M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1517_129805\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </h3>\r\n <div class=\"row align-items-center mt-2\">\r\n <div class=\"col-9\">\r\n <div class=\"progress\" style=\"height: 4px\">\r\n <div class=\"progress-bar\" [ngClass]=\"\r\n taskInfo?.planoProgress <= 50\r\n ? 'bg-warning'\r\n : taskInfo?.planoProgress === 75\r\n ? 'bg-primary'\r\n : 'bg-success'\r\n \" role=\"progressbar\" [style]=\"'width:' + taskInfo?.planoProgress + '%'\"\r\n [attr.aria-valuenow]=\"taskInfo?.planoProgress\" aria-valuemin=\"0\" aria-valuemax=\"100\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3\">{{ taskInfo?.planoProgress }}%</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Layout -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3><b>{{ storeMetrics.floorCount }}</b> Layout</h3>\r\n <div class=\"indicator mt-2\" [ngClass]=\"taskStyle.layout.class\">\r\n <span class=\"me-2\" [hidden]=\"taskStyle.layout.name !== 'Redo'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4984_27569)\">\r\n <path\r\n d=\"M0.5 2.00077V5.00077M0.5 5.00077H3.5M0.5 5.00077L2.82 2.82077C3.35737 2.28313 4.02219 1.89037 4.7524 1.67916C5.48262 1.46794 6.25445 1.44515 6.99586 1.6129C7.73727 1.78065 8.4241 2.13349 8.99227 2.63848C9.56043 3.14347 9.99142 3.78416 10.245 4.50077M11.5 10.0008V7.00077M11.5 7.00077H8.5M11.5 7.00077L9.18 9.18077C8.64263 9.71841 7.97781 10.1112 7.2476 10.3224C6.51738 10.5336 5.74555 10.5564 5.00414 10.3886C4.26273 10.2209 3.5759 9.86805 3.00773 9.36306C2.43957 8.85807 2.00858 8.21738 1.755 7.50077\"\r\n stroke=\"#7A5AF8\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4984_27569\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span [hidden]=\"taskStyle.layout.name !== 'Flagged'\" class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2 7.5C2 7.5 2.5 7 4 7C5.5 7 6.5 8 8 8C9.5 8 10 7.5 10 7.5V1.5C10 1.5 9.5 2 8 2C6.5 2 5.5 1 4 1C2.5 1 2 1.5 2 1.5V7.5ZM2 7.5V11\"\r\n stroke=\"#B42318\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n {{ taskStyle.layout.name }}\r\n </div>\r\n </div>\r\n\r\n <!-- Fixtures -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3><b>{{ storeMetrics.fixtureCount }}</b> Fixtures</h3>\r\n <div class=\"indicator mt-2\" [ngClass]=\"taskStyle.fixture.class\">\r\n <span class=\"me-2\" [hidden]=\"taskStyle.fixture.name !== 'Redo'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4984_27569)\">\r\n <path\r\n d=\"M0.5 2.00077V5.00077M0.5 5.00077H3.5M0.5 5.00077L2.82 2.82077C3.35737 2.28313 4.02219 1.89037 4.7524 1.67916C5.48262 1.46794 6.25445 1.44515 6.99586 1.6129C7.73727 1.78065 8.4241 2.13349 8.99227 2.63848C9.56043 3.14347 9.99142 3.78416 10.245 4.50077M11.5 10.0008V7.00077M11.5 7.00077H8.5M11.5 7.00077L9.18 9.18077C8.64263 9.71841 7.97781 10.1112 7.2476 10.3224C6.51738 10.5336 5.74555 10.5564 5.00414 10.3886C4.26273 10.2209 3.5759 9.86805 3.00773 9.36306C2.43957 8.85807 2.00858 8.21738 1.755 7.50077\"\r\n stroke=\"#7A5AF8\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4984_27569\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span [hidden]=\"taskStyle.fixture.name !== 'Flagged'\" class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2 7.5C2 7.5 2.5 7 4 7C5.5 7 6.5 8 8 8C9.5 8 10 7.5 10 7.5V1.5C10 1.5 9.5 2 8 2C6.5 2 5.5 1 4 1C2.5 1 2 1.5 2 1.5V7.5ZM2 7.5V11\"\r\n stroke=\"#B42318\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n {{ taskStyle.fixture.name }}\r\n </div>\r\n </div>\r\n\r\n <!-- Visual Merchandise -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3><b>{{ storeMetrics.vmCount }}</b> Visual Merchandise</h3>\r\n <div class=\"indicator mt-2\" [ngClass]=\"taskStyle.vm.class\">\r\n <span class=\"me-2\" [hidden]=\"taskStyle.vm.name !== 'Redo'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4984_27569)\">\r\n <path\r\n d=\"M0.5 2.00077V5.00077M0.5 5.00077H3.5M0.5 5.00077L2.82 2.82077C3.35737 2.28313 4.02219 1.89037 4.7524 1.67916C5.48262 1.46794 6.25445 1.44515 6.99586 1.6129C7.73727 1.78065 8.4241 2.13349 8.99227 2.63848C9.56043 3.14347 9.99142 3.78416 10.245 4.50077M11.5 10.0008V7.00077M11.5 7.00077H8.5M11.5 7.00077L9.18 9.18077C8.64263 9.71841 7.97781 10.1112 7.2476 10.3224C6.51738 10.5336 5.74555 10.5564 5.00414 10.3886C4.26273 10.2209 3.5759 9.86805 3.00773 9.36306C2.43957 8.85807 2.00858 8.21738 1.755 7.50077\"\r\n stroke=\"#7A5AF8\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4984_27569\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span [hidden]=\"taskStyle.vm.name !== 'Flagged'\" class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2 7.5C2 7.5 2.5 7 4 7C5.5 7 6.5 8 8 8C9.5 8 10 7.5 10 7.5V1.5C10 1.5 9.5 2 8 2C6.5 2 5.5 1 4 1C2.5 1 2 1.5 2 1.5V7.5ZM2 7.5V11\"\r\n stroke=\"#B42318\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n {{ taskStyle.vm.name }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div id=\"body\" class=\"row\">\r\n <!-- Left Column -->\r\n <div [ngClass]=\"{ 'collapsed-col': isLeftPanelCollapsed, 'col-3': !isLeftPanelCollapsed,'d-none': editFixture }\">\r\n <div class=\"s-card\">\r\n <form [ngClass]=\"{ 'd-none': isLeftPanelCollapsed }\" [formGroup]=\"layoutForm\">\r\n <div ngbAccordion accordion=\"NgbAccordion\">\r\n <!-- Walls Section -->\r\n <ng-container *ngIf=\"getFormWalls.controls.length; else addWallAction\">\r\n <ng-container formArrayName=\"walls\">\r\n <ng-container *ngFor=\"let group of getFormWalls.controls; let i = index\">\r\n <div [formGroupName]=\"i\" [ngbAccordionItem]=\"i.toString()\" class=\"mb-5\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button type=\"button\" class=\"mainheading p-0\" ngbAccordionButton>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"me-2 wall-label\">\r\n {{ group.get(\"elementType\")?.value | titlecase }} {{ group.get(\"elementNumber\")?.value }}\r\n </span>\r\n\r\n @if(layoutForm.enabled){\r\n <span class=\"me-1\" ngbTooltip=\"Rotate this wall.\"\r\n (click)=\"rotateWall(getElementNumber(group)!); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\"\r\n fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M3.73735 8.25011C4.12193 8.24362 4.44377 8.52776 4.49338 8.89998L4.4999 8.98735L4.50262 9.15516C4.58434 11.5741 6.57243 13.5 9 13.5C9.14022 13.5 9.27951 13.4936 9.41756 13.4809L9.21967 13.2803C8.92678 12.9874 8.92678 12.5126 9.21967 12.2197C9.51257 11.9268 9.98744 11.9268 10.2803 12.2197L11.7803 13.7197C12.0732 14.0126 12.0732 14.4874 11.7803 14.7803L10.2803 16.2803C9.98744 16.5732 9.51257 16.5732 9.21967 16.2803C8.92678 15.9874 8.92678 15.5126 9.21967 15.2197L9.45837 14.9827C9.30646 14.9942 9.15359 15 9 15C5.82653 15 3.21665 12.5321 3.0125 9.38289L3.00315 9.19314L3.00011 9.01265C2.99312 8.59849 3.3232 8.25709 3.73735 8.25011ZM8.78033 1.71967C9.0507 1.99003 9.07149 2.41546 8.84272 2.70967L8.78033 2.78033L8.54187 3.01726C8.69371 3.00578 8.8465 3 9 3C12.3137 3 15 5.68629 15 9C15 9.41421 14.6642 9.75 14.25 9.75C13.8358 9.75 13.5 9.41421 13.5 9C13.5 6.51472 11.4853 4.5 9 4.5C8.8597 4.5 8.72034 4.5064 8.58221 4.51909L8.78033 4.71967C9.07323 5.01256 9.07323 5.48744 8.78033 5.78033C8.50997 6.05069 8.08455 6.07149 7.79033 5.84272L7.71967 5.78033L6.21967 4.28033C5.94931 4.00997 5.92851 3.58454 6.15728 3.29033L6.21967 3.21967L7.71967 1.71967C8.01257 1.42678 8.48744 1.42678 8.78033 1.71967Z\"\r\n fill=\"#475467\" stroke=\"#475467\" stroke-width=\"0.00064\" />\r\n </svg>\r\n </span>\r\n <span class=\"me-1\" ngbTooltip=\"Insert new wall below.\"\r\n (click)=\"addNewWall(getElementNumber(group)!); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_62_8)\">\r\n <path\r\n d=\"M9 9.75C11.0707 9.75 12.75 11.4293 12.75 13.5C12.75 15.5708 11.0707 17.25 9 17.25C6.92925 17.25 5.25 15.5708 5.25 13.5C5.25 11.4293 6.92925 9.75 9 9.75ZM9.75 11.25H8.25V12.7493L6.75 12.75V14.25L8.25 14.2493V15.75H9.75V14.2493L11.25 14.25V12.75L9.75 12.7493V11.25ZM15 2.25C15.414 2.25 15.75 2.586 15.75 3V7.5C15.75 7.914 15.414 8.25 15 8.25H3C2.586 8.25 2.25 7.914 2.25 7.5V3C2.25 2.586 2.586 2.25 3 2.25H15ZM3.75 3.75V6.75H14.25V3.75H3.75Z\"\r\n fill=\"#475467\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_62_8\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span class=\"me-1\" ngbTooltip=\"Remove this wall and its fixtures.\"\r\n (click)=\"deleteWall(getElementNumber(group)!); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_63_25)\">\r\n <path\r\n d=\"M10.7094 1.5C11.3551 1.5 11.9283 1.91314 12.1324 2.52565L12.5406 3.75H15C15.4142 3.75 15.75 4.08579 15.75 4.5C15.75 4.9142 15.4142 5.24999 15 5.25L14.9981 5.30344L14.3476 14.4103C14.2635 15.5878 13.2838 16.5 12.1034 16.5H5.89668C4.71624 16.5 3.7365 15.5878 3.6524 14.4103L3.00191 5.30344C3.00062 5.28551 2.99998 5.26769 2.99997 5.25C2.58577 5.24999 2.25 4.9142 2.25 4.5C2.25 4.08579 2.58579 3.75 3 3.75H5.45943L5.86754 2.52565C6.07172 1.91314 6.64493 1.5 7.29057 1.5H10.7094ZM13.4981 5.25H4.50191L5.14858 14.3034C5.17662 14.696 5.5032 15 5.89668 15H12.1034C12.4968 15 12.8234 14.696 12.8514 14.3034L13.4981 5.25ZM7.5 7.5C7.88464 7.5 8.20163 7.78952 8.24495 8.16253L8.25 8.25V12C8.25 12.4142 7.91422 12.75 7.5 12.75C7.11537 12.75 6.79837 12.4605 6.75505 12.0875L6.75 12V8.25C6.75 7.83578 7.08578 7.5 7.5 7.5ZM10.5 7.5C10.9142 7.5 11.25 7.83578 11.25 8.25V12C11.25 12.4142 10.9142 12.75 10.5 12.75C10.0858 12.75 9.75 12.4142 9.75 12V8.25C9.75 7.83578 10.0858 7.5 10.5 7.5ZM10.7094 3H7.29057L7.04057 3.75H10.9595L10.7094 3Z\"\r\n fill=\"#F32B2B\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_63_25\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n }\r\n </div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"ps-0 pe-0\">\r\n <ng-template>\r\n <div style=\"min-height: 50px\" dndDropzone (dndDrop)=\"onDrop($event, i)\">\r\n <!-- Fixtures -->\r\n <ng-container *ngIf=\"getFormFixtures(i).controls.length\">\r\n <div formArrayName=\"fixtures\">\r\n <ng-container *ngFor=\"let fixture of getFormFixtures(i).controls; let j = index\">\r\n <div dndDropzone (dndDrop)=\"onDrop($event, i, j)\" [formGroupName]=\"j\"\r\n [dndDraggable]=\"{ wallIndex: i, fixtureIndex: j }\" [dndEffectAllowed]=\"'all'\"\r\n class=\"row g-0 mb-5\" [dndDisableDragIf]=\"layoutForm.disabled\">\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-center justify-content-center h-100\">\r\n <svg dndDragImageRef\r\n [style]=\"{ cursor: layoutForm.disabled ? 'default' : 'move', opacity: '0.5' }\"\r\n width=\"25px\" viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"m 4.496094 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 0 0\"\r\n fill=\"grey\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-10\">\r\n <lib-reactive-select formControlName=\"fixtureConfigId\" [idField]=\"'_id'\"\r\n [nameField]=\"'name'\" [data]=\"fixtureTemplates\" [label]=\"'Fixture ' + (j + 1)\"\r\n [subTextField]=\"'subtext'\" [search]=\"true\">\r\n </lib-reactive-select>\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg (click)=\"removeFixture('wall', j, i)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\"\r\n viewBox=\"0 0 10 10\" fill=\"none\">\r\n <path d=\"M9 1L1 9M1 1L9 9\" stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end\">\r\n <a class=\"link-btn\" [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewFixture('wall', i)\">\r\n Add fixture\r\n </a>\r\n </div>\r\n\r\n <hr style=\"border-top: 1px dashed #000000;\" />\r\n\r\n <!-- Other Elements -->\r\n <ng-container *ngIf=\"getWallOtherElements(i).controls.length\">\r\n <div formArrayName=\"otherElements\">\r\n <ng-container *ngFor=\"let fixture of getWallOtherElements(i).controls; let j = index\">\r\n <div [formGroupName]=\"j\" class=\"row g-0 mb-5\">\r\n <div class=\"col-11\">\r\n <label class=\"form-label mb-1\">Element {{ j + 1 }}</label>\r\n\r\n <!-- Dropdown bound to 'type' -->\r\n <lib-reactive-select [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"otherElementList\" [id]=\"'elementLabel' + j\" formControlName=\"type\">\r\n </lib-reactive-select>\r\n\r\n <!-- Show custom text input only when 'Others' is selected -->\r\n <input *ngIf=\"(fixture.get('type')?.value) === 'Others'\" type=\"text\"\r\n class=\"form-control mt-2\" formControlName=\"customName\"\r\n placeholder=\"Enter custom element name\" />\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg (click)=\"removeOtherElement('wall', j, i)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\"\r\n viewBox=\"0 0 10 10\" fill=\"none\">\r\n <path d=\"M9 1L1 9M1 1L9 9\" stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end\">\r\n <a class=\"link-btn\" [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewOtherElements('wall', i)\">\r\n Add element\r\n </a>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #addWallAction>\r\n <button (click)=\"addNewWall(0)\" [class.disabled-click]=\"layoutForm.disabled\"\r\n class=\"btn btn-secondary w-100 p-2\">\r\n Insert new wall\r\n </button>\r\n </ng-template>\r\n\r\n <hr style=\"border-top: 1px dashed #000000;\" />\r\n\r\n <!-- Floor Section -->\r\n <div [ngbAccordionItem]=\"'floor'\" class=\"mb-5\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button type=\"button\" class=\"mainheading p-0\" ngbAccordionButton>\r\n <span class=\"me-2 wall-label\">Floor</span>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"ps-0 pe-0\">\r\n <ng-template>\r\n <div style=\"min-height: 50px\" dndDropzone (dndDrop)=\"onDrop($event, 'floor')\">\r\n <!-- Floor Fixtures -->\r\n <ng-container *ngIf=\"getFormFloorFixtures.controls.length\">\r\n <div formArrayName=\"floorFixtures\">\r\n <ng-container *ngFor=\"let fixture of getFormFloorFixtures.controls; let j = index\">\r\n <div dndDropzone (dndDrop)=\"onDrop($event, 'floor', j)\" [formGroupName]=\"j\"\r\n [dndDraggable]=\"{ wallIndex: 'floor', fixtureIndex: j }\" [dndEffectAllowed]=\"'all'\"\r\n [dndDisableDragIf]=\"layoutForm.disabled\" class=\"row g-0 mb-5\">\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-center justify-content-center h-100\">\r\n <svg dndDragImageRef style=\"cursor: move; opacity: 0.5\" width=\"25px\"\r\n viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"m 4.496094 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 0 0\"\r\n fill=\"grey\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-10\">\r\n <lib-reactive-select formControlName=\"fixtureConfigId\" [idField]=\"'_id'\"\r\n [nameField]=\"'name'\" [data]=\"fixtureTemplates\" [label]=\"'Fixture ' + (j + 1)\"\r\n [search]=\"true\" [subTextField]=\"'subtext'\">\r\n </lib-reactive-select>\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg (click)=\"removeFixture('floor', j)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\" xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\r\n <path d=\"M9 1L1 9M1 1L9 9\" stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end\">\r\n <a class=\"link-btn\" [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewFixture('floor')\">\r\n Add fixture\r\n </a>\r\n </div>\r\n\r\n <hr style=\"border-top: 1px dashed #000000;\" />\r\n\r\n <!-- Floor Other Elements -->\r\n <ng-container *ngIf=\"getFormFloorOtherElements.controls.length\">\r\n <div formArrayName=\"floorOtherElements\">\r\n <ng-container *ngFor=\"let fixture of getFormFloorOtherElements.controls; let j = index\">\r\n <div [formGroupName]=\"j\" class=\"row g-0 mb-5\">\r\n <div class=\"col-11\">\r\n <label class=\"form-label mb-1\">Element {{ j + 1 }}</label>\r\n\r\n <!-- Dropdown for type -->\r\n <lib-reactive-select [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"otherElementList\" [id]=\"'floorElementLabel' + j\" formControlName=\"type\">\r\n </lib-reactive-select>\r\n\r\n <!-- Conditional input for custom name -->\r\n <input *ngIf=\"(fixture.get('type')?.value) === 'Others'\" type=\"text\"\r\n class=\"form-control mt-2\" formControlName=\"customName\"\r\n placeholder=\"Enter custom element name\" />\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg (click)=\"removeOtherElement('floor', j)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\" xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\r\n <path d=\"M9 1L1 9M1 1L9 9\" stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end\">\r\n <a class=\"link-btn\" [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewOtherElements('floor')\">\r\n Add element\r\n </a>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Center Column -->\r\n <div class=\"col overflow-hidden position-relative\" [ngClass]=\"{ 'd-none': editFixture }\">\r\n <div id=\"canvas-card\" class=\"c-card position-relative\" #canvasContainer>\r\n <!-- Canvas View -->\r\n <div [ngClass]=\"{ 'd-none': selectedView === 'tree' }\">\r\n <canvas id=\"base-canvas\" #baseCanvas></canvas>\r\n </div>\r\n\r\n <!-- Tree View -->\r\n <div *ngIf=\"selectedView === 'tree'\" class=\"w-100\">\r\n <store-plano-tree-view [allFixture]=\"allFixtures\"></store-plano-tree-view>\r\n </div>\r\n\r\n <!-- Top Controls -->\r\n <div style=\"top: 24px; left: 26px; position: absolute;\" id=\"segment-btn\" class=\"pb-5\">\r\n <div class=\"w-100 d-flex justify-content-start gap-4\">\r\n <ul class=\"nav nav-tabs custom-tabs d-flex\" style=\"width: 200px; margin: 0\">\r\n <li class=\"nav-item flex-fill\">\r\n <button class=\"nav-link w-100 h-100\" [class.active]=\"selectedView === 'detail'\"\r\n (click)=\"selectedView = 'detail'\">\r\n Detail View\r\n </button>\r\n </li>\r\n <li class=\"nav-item flex-fill\">\r\n <button class=\"nav-link w-100 h-100\" [class.active]=\"selectedView === 'tree'\"\r\n (click)=\"selectedView = 'tree'\">\r\n Tree View\r\n </button>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <!-- Entrance Button -->\r\n <div *ngIf=\"layoutForm.enabled\" ngbTooltip=\"You can add up to two entrances.\" style=\"top: 24px; right: 190px\"\r\n class=\"position-absolute\" [disableTooltip]=\"getEntrances?.length < 2\">\r\n <button type=\"button\" class=\"btn btn-outline d-flex align-items-center gap-3 bg-white shadow-sm\"\r\n [disabled]=\"getEntrances?.length >= 2\" (click)=\"addNewEntrance()\">\r\n Add Entrance\r\n </button>\r\n </div>\r\n\r\n <!-- Edit Button -->\r\n <button *ngIf=\"layoutForm.disabled\"\r\n [disabled]=\"disableEdit || ['taskAssigned','reviewPending'].includes(taskStyle.fixture.class)\"\r\n style=\"top: 24px; right: 164px\" type=\"button\"\r\n class=\"btn btn-outline d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"onClickEdit()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1322_5325)\">\r\n <path\r\n d=\"M14.1667 2.49993C14.3856 2.28106 14.6455 2.10744 14.9314 1.98899C15.2174 1.87054 15.5239 1.80957 15.8334 1.80957C16.1429 1.80957 16.4494 1.87054 16.7354 1.98899C17.0214 2.10744 17.2812 2.28106 17.5001 2.49993C17.719 2.7188 17.8926 2.97863 18.011 3.2646C18.1295 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1295 4.78262 18.011 5.06859C17.8926 5.35455 17.719 5.61439 17.5001 5.83326L6.25008 17.0833L1.66675 18.3333L2.91675 13.7499L14.1667 2.49993Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1322_5325\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n Edit\r\n </button>\r\n\r\n <!-- Rotate Button -->\r\n <button style=\"top: 24px; right: 94px\" type=\"button\" *ngIf=\"layoutForm.disabled\"\r\n class=\"btn btn-outline d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"rotateCanvas(canvas,90)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 26 26\" fill=\"none\">\r\n <path\r\n d=\"M6.36265 7.17887L7.17625 6.36287L5.90425 5.09207L5.08945 5.90567L6.36265 7.17887ZM15.671 6.36407L19.6379 10.3309L20.9099 9.05769L16.9442 5.09087L15.671 6.36407ZM19.6379 18.8257L18.8243 19.6393L20.0963 20.9101L20.9099 20.0977L19.6379 18.8257ZM10.3295 19.6393L6.36265 15.6725L5.09065 16.9457L9.05626 20.9113L10.3295 19.6393ZM18.8243 19.6393C17.6543 20.8081 16.8407 21.6193 16.1459 22.1497C15.4715 22.6645 15.0155 22.8289 14.5763 22.8289V24.6289C15.5675 24.6289 16.4027 24.2173 17.2367 23.5813C18.0503 22.9609 18.9635 22.0453 20.0963 20.9125L18.8243 19.6393ZM9.05626 20.9113C10.1891 22.0453 11.1023 22.9597 11.9159 23.5813C12.7499 24.2173 13.5851 24.6289 14.5763 24.6289V22.8289C14.1371 22.8289 13.6823 22.6645 13.0067 22.1497C12.3119 21.6193 11.4983 20.8081 10.3295 19.6393L9.05626 20.9113ZM19.6379 10.3309C20.8067 11.4997 21.6179 12.3133 22.1483 13.0081C22.6631 13.6837 22.8275 14.1385 22.8275 14.5777H24.6275C24.6275 13.5865 24.2159 12.7513 23.5799 11.9173C22.9595 11.1037 22.0427 10.1905 20.9099 9.05769L19.6379 10.3309ZM20.9099 20.0977C22.0439 18.9637 22.9583 18.0517 23.5799 17.2381C24.2159 16.4041 24.6275 15.5689 24.6275 14.5777H22.8275C22.8275 15.0169 22.6631 15.4729 22.1483 16.1473C21.6179 16.8421 20.8067 17.6557 19.6379 18.8257L20.9099 20.0977ZM7.17625 6.36287C8.34625 5.19407 9.15985 4.38167 9.85465 3.85127C10.529 3.33647 10.985 3.17327 11.4242 3.17327V1.37207C10.433 1.37207 9.59785 1.78367 8.76385 2.41967C7.94905 3.04127 7.03705 3.95567 5.90425 5.08847L7.17625 6.36287ZM16.9442 5.09087C15.8114 3.95687 14.8982 3.04127 14.0846 2.41967C13.2506 1.78367 12.4154 1.37207 11.4242 1.37207V3.17327C11.8634 3.17327 12.3182 3.33647 12.9938 3.85127C13.6886 4.38167 14.5022 5.19287 15.671 6.36167L16.9442 5.09087ZM5.08945 5.90327C3.95665 7.03607 3.04225 7.94807 2.42065 8.76287C1.78465 9.59687 1.37305 10.4321 1.37305 11.4233H3.17305C3.17305 10.9841 3.33745 10.5281 3.85225 9.85367C4.38265 9.15887 5.19385 8.34527 6.36265 7.17527L5.08945 5.90327ZM6.36265 15.6713C5.19385 14.5013 4.38265 13.6877 3.85225 12.9929C3.33745 12.3185 3.17305 11.8625 3.17305 11.4233H1.37305C1.37305 12.4145 1.78465 13.2497 2.42065 14.0837C3.04225 14.8973 3.95665 15.8105 5.08945 16.9433L6.36265 15.6713Z\"\r\n fill=\"#1D2939\" />\r\n <path d=\"M23.2 6.9832L25 8.2C25 4.582 22.4056 1.5796 19 1M2.8 19.0168L1 17.8C1 21.418 3.5944 24.4204 7 25\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- Submit Button -->\r\n <button *ngIf=\"!layoutForm.disabled\" style=\"top: 24px; right: 94px;padding: 9px 20px !important;\"\r\n type=\"button\" class=\"btn btn-primary d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"updateLayout(true)\">\r\n Submit\r\n </button>\r\n\r\n <!-- Download Button -->\r\n <button style=\"top: 24px; right: 26px\" type=\"button\"\r\n class=\"btn btn-outline d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"downloadCanvas()\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"#000000\" stroke-width=\"0.24000000000000005\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\"\r\n stroke-width=\"0.384\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path\r\n d=\"M12.5535 16.5061C12.4114 16.6615 12.2106 16.75 12 16.75C11.7894 16.75 11.5886 16.6615 11.4465 16.5061L7.44648 12.1311C7.16698 11.8254 7.18822 11.351 7.49392 11.0715C7.79963 10.792 8.27402 10.8132 8.55352 11.1189L11.25 14.0682V3C11.25 2.58579 11.5858 2.25 12 2.25C12.4142 2.25 12.75 2.58579 12.75 3V14.0682L15.4465 11.1189C15.726 10.8132 16.2004 10.792 16.5061 11.0715C16.8118 11.351 16.833 11.8254 16.5535 12.1311L12.5535 16.5061Z\"\r\n fill=\"#1D2939\"></path>\r\n <path\r\n d=\"M3.75 15C3.75 14.5858 3.41422 14.25 3 14.25C2.58579 14.25 2.25 14.5858 2.25 15V15.0549C2.24998 16.4225 2.24996 17.5248 2.36652 18.3918C2.48754 19.2919 2.74643 20.0497 3.34835 20.6516C3.95027 21.2536 4.70814 21.5125 5.60825 21.6335C6.47522 21.75 7.57754 21.75 8.94513 21.75H15.0549C16.4225 21.75 17.5248 21.75 18.3918 21.6335C19.2919 21.5125 20.0497 21.2536 20.6517 20.6516C21.2536 20.0497 21.5125 19.2919 21.6335 18.3918C21.75 17.5248 21.75 16.4225 21.75 15.0549V15C21.75 14.5858 21.4142 14.25 21 14.25C20.5858 14.25 20.25 14.5858 20.25 15C20.25 16.4354 20.2484 17.4365 20.1469 18.1919C20.0482 18.9257 19.8678 19.3142 19.591 19.591C19.3142 19.8678 18.9257 20.0482 18.1919 20.1469C17.4365 20.2484 16.4354 20.25 15 20.25H9C7.56459 20.25 6.56347 20.2484 5.80812 20.1469C5.07435 20.0482 4.68577 19.8678 4.40901 19.591C4.13225 19.3142 3.9518 18.9257 3.85315 18.1919C3.75159 17.4365 3.75 16.4354 3.75 15Z\"\r\n fill=\"#1D2939\"></path>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- Panel Collapse Handlers -->\r\n <div class=\"collapse-handler left\" (click)=\"togglePanel('left')\">\r\n <svg *ngIf=\"!isLeftPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27308 12.636L4.63672 8.99964L8.27308 5.36328M13.364 12.636L9.72763 8.99964L13.364 5.36328\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"isLeftPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72692 5.36399L13.3633 9.00036L9.72692 12.6367M4.63601 5.36399L8.27237 9.00036L4.63601 12.6367\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"collapse-handler right\" (click)=\"togglePanel('right')\">\r\n <svg *ngIf=\"isRightPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27308 12.636L4.63672 8.99964L8.27308 5.36328M13.364 12.636L9.72763 8.99964L13.364 5.36328\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"!isRightPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72692 5.36399L13.3633 9.00036L9.72692 12.6367M4.63601 5.36399L8.27237 9.00036L4.63601 12.6367\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <!-- Edit Fixture Body -->\r\n <div class=\"col\" [ngClass]=\"{ 'd-none': !editFixture }\">\r\n <div id=\"edit-body\" class=\"row\">\r\n <ul class=\"mx-3 my-5 nav nav-pills\" role=\"tablist\">\r\n <li class=\"nav-item cursor-pointer\" role=\"presentation\">\r\n <a (click)=\"submitFixture = false; editFixtureSection = 'basic-details'\"\r\n [ngClass]=\"editFixtureSection === 'basic-details' ? 'active' : ''\" class=\"nav-link\" role=\"tab\">\r\n Basic details\r\n </a>\r\n </li>\r\n <li class=\"nav-item cursor-pointer\" role=\"presentation\">\r\n <a (click)=\"submitFixture = false; editFixtureSection = 'products'\"\r\n [ngClass]=\"editFixtureSection === 'products' ? 'active' : ''\" class=\"nav-link\" role=\"tab\">\r\n Products\r\n </a>\r\n </li>\r\n <li class=\"nav-item cursor-pointer\" role=\"presentation\">\r\n <a (click)=\"submitFixture = false; editFixtureSection = 'vms'\"\r\n [ngClass]=\"editFixtureSection === 'vms' ? 'active' : ''\" class=\"nav-link\" role=\"tab\">\r\n Visual Merchandise\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <div class=\"col\">\r\n <ng-container *ngIf=\"editFixtureSection === 'basic-details'\">\r\n <lib-instance-basic-details [fixtureData]=\"selectedFixtureData\" [editMode]=\"true\"\r\n [isSubmitted]=\"submitFixture\" (submitEvent)=\"onFixtureSubmit($event)\">\r\n </lib-instance-basic-details>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"editFixtureSection === 'products'\">\r\n <lib-instance-products [fixtureData]=\"selectedFixtureData\" [editMode]=\"true\" [isSubmitted]=\"submitFixture\"\r\n (submitEvent)=\"onFixtureSubmit($event)\">\r\n </lib-instance-products>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"editFixtureSection === 'vms'\">\r\n <lib-instance-vms [fixtureData]=\"selectedFixtureData\" [editMode]=\"true\" [isSubmitted]=\"submitFixture\"\r\n (submitEvent)=\"onFixtureSubmit($event)\">\r\n </lib-instance-vms>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- <div class=\"col-3\" [style]=\"{'min-width': '660px'}\">\r\n <ng-container *ngTemplateOutlet=\"feedbackCol\"></ng-container>\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{ 'collapsed-col': isRightPanelCollapsed, 'col-3': !isRightPanelCollapsed }\"\r\n [style]=\"{'min-width': isRightPanelCollapsed ? '0' : '664px'}\">\r\n <ng-container *ngTemplateOutlet=\"feedbackCol\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</section>\r\n\r\n<!-- Templates -->\r\n<ng-template #feedbackCol>\r\n <div class=\"s-card\" [ngStyle]=\"{'margin-top':editFixture ? '72px' : '0px'}\">\r\n <!-- <app-manage-store-plano-feedback [ngClass]=\"{ 'd-none': isRightPanelCollapsed && !editFixture}\"\r\n [currentPlano]=\"floorData\" [storeFeedback]=\"storeFeedback\" [selectedIssue]=\"selectedFixture\"\r\n (isApproved)=\"handleApproverResponse($event)\">\r\n </app-manage-store-plano-feedback> -->\r\n\r\n <lib-verification-feedback [floorData]=\"floorData\" [ngClass]=\"{ 'd-none': isRightPanelCollapsed && !editFixture}\"\r\n [feedbackDetails]=\"selectedFixtureFeedback\" (changeFixture)=\"onChangeFixtureOnFeedbackPanel($event,true)\"\r\n [totalFixtures]=\"allFixtureInstances\" [cdn]=\"cdnUrl\" (action)=\"handleFeedbackAction($event)\"\r\n [showAction]=\"!editFixture\"></lib-verification-feedback>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #headerSkeleton>\r\n <div class=\"row m-0 g-0 loader d-flex justify-content-center align-items-center overflow-hidden\">\r\n <div class=\"shimmer w-100 p-4 rounded\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke mt-0 animate title\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #skeletonLoader>\r\n <div class=\"row loader d-flex justify-content-center align-items-center overflow-hidden\">\r\n <div class=\"shimmer rounded\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<ng-template #noStoreVideo let-modal>\r\n <div class=\"modal-body\">\r\n <div>\r\n <h2 class=\"mb-3\">No Store Video Found</h2>\r\n <p>The video will be available once a request is raised and the store submits a complete store video.</p>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"modal.close()\">Close</button>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;width:345px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .block{border:1px solid #98a2b3;padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}::ng-deep .backgroundImg{background-color:#f9fafb!important}::ng-deep .accordion .accordion-button.backgroundImg:not(.collapsed){background-color:#f9fafb!important}::ng-deep .accordion-body{padding:10px 20px 20px}.s-card{position:relative;box-sizing:border-box;border-radius:8px;background:#fff;padding:20px 16px;height:75dvh;overflow-y:auto;overflow-x:visible}.c-card{border-radius:8px;background:#fff;padding:20px 16px;height:75dvh;overflow:hidden;width:100%}.h-card{border-radius:8px;background:#fff;padding:20px 16px;min-height:20dvh}.wall-label{color:var(--Gray-600, #475467);font-family:Inter;font-size:14px;font-style:normal;font-weight:600}img{width:100%;height:100%;object-fit:cover;display:block}#header .title{color:var(--Gray-800, #1d2939);font-size:16px;font-weight:600;line-height:24px;margin:0}#header .cus-btn{color:#009bf3;background:#eaf8ff;padding:4px 10px;border-radius:16px;font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%;text-align:center;cursor:pointer}#header .cus-btn:hover{background:#e2f5ff}.loader .shimmer{height:100%!important}.collapse-handler{position:absolute;height:32px;width:32px;display:flex;justify-content:center;align-items:center;border-radius:50%;background:#fff;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;cursor:pointer;top:12px}.collapse-handler.right{right:0}.collapse-handler.left{left:0}.collapsed-col{transition:all .3s ease;width:40px!important}[class^=col]{transition:all .3s ease}#segment-btn .custom-tabs{border-radius:8px;border:1px solid var(--Gray-300, #d0d5dd);overflow:hidden;margin-bottom:24px}#segment-btn .custom-tabs .nav-link{border-radius:0%;color:#495057;padding:.75rem 1rem;background-color:#fff;text-align:center;border-right:1px solid var(--Gray-300, #d0d5dd);transition:all ease .2s;font-weight:500}#segment-btn .custom-tabs .nav-link.active{background:var(--Primary-500, #33b5ff);color:#fff}#segment-btn .nav-tabs .nav-link{border:none;margin:0}#segment-btn .nav-item{text-align:center}#segment-btn .nav-item:last-child .nav-link{border:none}.link-btn{color:#33b5ff;cursor:pointer;font-weight:500}.link-btn:hover{color:#33b5ff;text-decoration:underline!important}.btn-red{border-radius:8px!important;border:1px solid #fef3f2!important;background:#fef3f2!important;box-shadow:0 1px 2px #1018280d!important;padding:10px 18px!important;color:#b42318!important;font-size:16px!important;font-weight:600!important}.updateClass{font-family:Inter;font-weight:400;font-size:14px;line-height:20px;letter-spacing:0%;color:#667085}\n"] }]
4333
+ args: [{ selector: "lib-manage-store-plano", providers: [TitleCasePipe], template: "<section id=\"manage-plano\">\r\n <!-- Loading State -->\r\n <div *ngIf=\"isPageLoading\" class=\"row\">\r\n <div class=\"col-12 m-0\">\r\n <ng-container *ngTemplateOutlet=\"headerSkeleton\"></ng-container>\r\n </div>\r\n <div class=\"col-3\">\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n </div>\r\n <div class=\"col-6\">\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n </div>\r\n <div class=\"col-3\">\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- Content -->\r\n <div [ngClass]=\"{ 'd-none': isPageLoading }\">\r\n <!-- Header Accordion -->\r\n <div id=\"header\" ngbAccordion #accordion=\"ngbAccordion\" class=\"my-4\">\r\n <div ngbAccordionItem=\"details\" [collapsed]=\"false\">\r\n <div ngbAccordionHeader class=\"d-flex justify-content-between align-items-center px-6 py-3\">\r\n <div class=\"d-flex gap-4 align-items-center\">\r\n <h2 class=\"title\">{{ planoData?.storeName }} - Plano</h2>\r\n <lib-reactive-select \r\n *ngIf=\"planoData?.floors?.length\" \r\n [formControl]=\"selectedFloorId\" \r\n [idField]=\"'_id'\"\r\n [nameField]=\"'floorName'\" \r\n [data]=\"planoData.floors\">\r\n </lib-reactive-select>\r\n </div>\r\n \r\n <div class=\"d-flex align-items-center gap-4\">\r\n <div *ngIf=\"!editFixture\" class=\"updateClass\">Last Update: {{floorData?.updatedAt}}</div>\r\n \r\n <div class=\"d-flex gap-4 align-items-center\">\r\n <!-- Edit Fixture Mode -->\r\n <ng-container *ngIf=\"editFixture\">\r\n <button type=\"button\" class=\"btn btn-outline text-nowrap\" (click)=\"onFixturePageCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary text-nowrap\" (click)=\"onFixtureSave()\">Save & Close</button>\r\n </ng-container>\r\n\r\n <!-- Normal Mode -->\r\n <ng-container *ngIf=\"!editFixture && !['taskAssigned'].includes(taskStyle.fixture.class)\">\r\n <!-- Publish Buttons -->\r\n <button \r\n *ngIf=\"publishingState === 'layout'\" \r\n type=\"button\" \r\n class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" \r\n [disabled]=\"disabledPublish\">\r\n Publish Layout Verification\r\n </button>\r\n <button \r\n *ngIf=\"publishingState === 'layout-redo'\" \r\n type=\"button\" \r\n class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" \r\n [disabled]=\"disabledPublish\">\r\n Publish Layout Redo\r\n </button>\r\n <button \r\n *ngIf=\"publishingState === 'fixture'\" \r\n type=\"button\" \r\n class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" \r\n [disabled]=\"disabledPublish\">\r\n Publish Fixture Verification\r\n </button>\r\n <button \r\n *ngIf=\"publishingState === 'fixture-redo'\" \r\n type=\"button\" \r\n class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" \r\n [disabled]=\"disabledPublish\">\r\n Publish Fixture Redo\r\n </button>\r\n <button \r\n *ngIf=\"publishingState === 'vm'\" \r\n type=\"button\" \r\n class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" \r\n [disabled]=\"disabledPublish\">\r\n Publish VM Verification\r\n </button>\r\n <button \r\n *ngIf=\"publishingState === 'vm-redo'\" \r\n type=\"button\" \r\n class=\"btn btn-primary text-nowrap\"\r\n (click)=\"assignTask()\" \r\n [disabled]=\"disabledPublish\">\r\n Publish VM Redo\r\n </button>\r\n </ng-container>\r\n\r\n <!-- Revoke Button -->\r\n <button \r\n (click)=\"revokeTask()\" \r\n *ngIf=\"['taskAssigned'].includes(taskStyle.fixture.class) && !editFixture\"\r\n class=\"btn btn-red d-flex align-items-center\">\r\n <svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_640_5594)\">\r\n <path\r\n d=\"M6.66669 10.0013H13.3334M18.3334 10.0013C18.3334 14.6037 14.6024 18.3346 10 18.3346C5.39765 18.3346 1.66669 14.6037 1.66669 10.0013C1.66669 5.39893 5.39765 1.66797 10 1.66797C14.6024 1.66797 18.3334 5.39893 18.3334 10.0013Z\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_640_5594\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n Revoke\r\n </button>\r\n \r\n <button ngbAccordionButton></button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <div id=\"header\" class=\"row mx-0 gap-3\">\r\n <!-- Plano Completion -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3 class=\"d-flex align-items-center gap-2\">\r\n Plano Completion %\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"\r\n ngbTooltip=\"% of overall planogram completion\">\r\n <g clip-path=\"url(#clip0_1517_129805)\">\r\n <path\r\n d=\"M9 12V9M9 6H9.0075M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1517_129805\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </h3>\r\n <div class=\"row align-items-center mt-2\">\r\n <div class=\"col-9\">\r\n <div class=\"progress\" style=\"height: 4px\">\r\n <div \r\n class=\"progress-bar\" \r\n [ngClass]=\"\r\n taskInfo?.planoProgress <= 50\r\n ? 'bg-warning'\r\n : taskInfo?.planoProgress === 75\r\n ? 'bg-primary'\r\n : 'bg-success'\r\n \" \r\n role=\"progressbar\" \r\n [style]=\"'width:' + taskInfo?.planoProgress + '%'\"\r\n [attr.aria-valuenow]=\"taskInfo?.planoProgress\" \r\n aria-valuemin=\"0\" \r\n aria-valuemax=\"100\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3\">{{ taskInfo?.planoProgress }}%</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Layout -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3><b>{{ storeMetrics.floorCount }}</b> Layout</h3>\r\n <div class=\"indicator mt-2\" [ngClass]=\"taskStyle.layout.class\">\r\n <span class=\"me-2\" [hidden]=\"taskStyle.layout.name !== 'Redo'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4984_27569)\">\r\n <path\r\n d=\"M0.5 2.00077V5.00077M0.5 5.00077H3.5M0.5 5.00077L2.82 2.82077C3.35737 2.28313 4.02219 1.89037 4.7524 1.67916C5.48262 1.46794 6.25445 1.44515 6.99586 1.6129C7.73727 1.78065 8.4241 2.13349 8.99227 2.63848C9.56043 3.14347 9.99142 3.78416 10.245 4.50077M11.5 10.0008V7.00077M11.5 7.00077H8.5M11.5 7.00077L9.18 9.18077C8.64263 9.71841 7.97781 10.1112 7.2476 10.3224C6.51738 10.5336 5.74555 10.5564 5.00414 10.3886C4.26273 10.2209 3.5759 9.86805 3.00773 9.36306C2.43957 8.85807 2.00858 8.21738 1.755 7.50077\"\r\n stroke=\"#7A5AF8\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4984_27569\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span [hidden]=\"taskStyle.layout.name !== 'Flagged'\" class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2 7.5C2 7.5 2.5 7 4 7C5.5 7 6.5 8 8 8C9.5 8 10 7.5 10 7.5V1.5C10 1.5 9.5 2 8 2C6.5 2 5.5 1 4 1C2.5 1 2 1.5 2 1.5V7.5ZM2 7.5V11\"\r\n stroke=\"#B42318\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n {{ taskStyle.layout.name }}\r\n </div>\r\n </div>\r\n\r\n <!-- Fixtures -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3><b>{{ storeMetrics.fixtureCount }}</b> Fixtures</h3>\r\n <div class=\"indicator mt-2\" [ngClass]=\"taskStyle.fixture.class\">\r\n <span class=\"me-2\" [hidden]=\"taskStyle.fixture.name !== 'Redo'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4984_27569)\">\r\n <path\r\n d=\"M0.5 2.00077V5.00077M0.5 5.00077H3.5M0.5 5.00077L2.82 2.82077C3.35737 2.28313 4.02219 1.89037 4.7524 1.67916C5.48262 1.46794 6.25445 1.44515 6.99586 1.6129C7.73727 1.78065 8.4241 2.13349 8.99227 2.63848C9.56043 3.14347 9.99142 3.78416 10.245 4.50077M11.5 10.0008V7.00077M11.5 7.00077H8.5M11.5 7.00077L9.18 9.18077C8.64263 9.71841 7.97781 10.1112 7.2476 10.3224C6.51738 10.5336 5.74555 10.5564 5.00414 10.3886C4.26273 10.2209 3.5759 9.86805 3.00773 9.36306C2.43957 8.85807 2.00858 8.21738 1.755 7.50077\"\r\n stroke=\"#7A5AF8\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4984_27569\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span [hidden]=\"taskStyle.fixture.name !== 'Flagged'\" class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2 7.5C2 7.5 2.5 7 4 7C5.5 7 6.5 8 8 8C9.5 8 10 7.5 10 7.5V1.5C10 1.5 9.5 2 8 2C6.5 2 5.5 1 4 1C2.5 1 2 1.5 2 1.5V7.5ZM2 7.5V11\"\r\n stroke=\"#B42318\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n {{ taskStyle.fixture.name }}\r\n </div>\r\n </div>\r\n\r\n <!-- Visual Merchandise -->\r\n <div style=\"cursor: unset;\" class=\"col filter-tab\">\r\n <h3><b>{{ storeMetrics.vmCount }}</b> Visual Merchandise</h3>\r\n <div class=\"indicator mt-2\" [ngClass]=\"taskStyle.vm.class\">\r\n <span class=\"me-2\" [hidden]=\"taskStyle.vm.name !== 'Redo'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4984_27569)\">\r\n <path\r\n d=\"M0.5 2.00077V5.00077M0.5 5.00077H3.5M0.5 5.00077L2.82 2.82077C3.35737 2.28313 4.02219 1.89037 4.7524 1.67916C5.48262 1.46794 6.25445 1.44515 6.99586 1.6129C7.73727 1.78065 8.4241 2.13349 8.99227 2.63848C9.56043 3.14347 9.99142 3.78416 10.245 4.50077M11.5 10.0008V7.00077M11.5 7.00077H8.5M11.5 7.00077L9.18 9.18077C8.64263 9.71841 7.97781 10.1112 7.2476 10.3224C6.51738 10.5336 5.74555 10.5564 5.00414 10.3886C4.26273 10.2209 3.5759 9.86805 3.00773 9.36306C2.43957 8.85807 2.00858 8.21738 1.755 7.50077\"\r\n stroke=\"#7A5AF8\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4984_27569\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span [hidden]=\"taskStyle.vm.name !== 'Flagged'\" class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2 7.5C2 7.5 2.5 7 4 7C5.5 7 6.5 8 8 8C9.5 8 10 7.5 10 7.5V1.5C10 1.5 9.5 2 8 2C6.5 2 5.5 1 4 1C2.5 1 2 1.5 2 1.5V7.5ZM2 7.5V11\"\r\n stroke=\"#B42318\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n {{ taskStyle.vm.name }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div id=\"body\" class=\"row\" [ngClass]=\"{ 'd-none': editFixture }\">\r\n <!-- Left Column -->\r\n <div [ngClass]=\"{ 'collapsed-col': isLeftPanelCollapsed, 'col-3': !isLeftPanelCollapsed }\">\r\n <div class=\"s-card\">\r\n <form [ngClass]=\"{ 'd-none': isLeftPanelCollapsed }\" [formGroup]=\"layoutForm\">\r\n <div ngbAccordion accordion=\"NgbAccordion\">\r\n <!-- Walls Section -->\r\n <ng-container *ngIf=\"getFormWalls.controls.length; else addWallAction\">\r\n <ng-container formArrayName=\"walls\">\r\n <ng-container *ngFor=\"let group of getFormWalls.controls; let i = index\">\r\n <div [formGroupName]=\"i\" [ngbAccordionItem]=\"i.toString()\" class=\"mb-5\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button type=\"button\" class=\"mainheading p-0\" ngbAccordionButton>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"me-2 wall-label\">\r\n {{ group.get(\"elementType\")?.value | titlecase }} {{ group.get(\"elementNumber\")?.value }}\r\n </span>\r\n \r\n @if(layoutForm.enabled){\r\n <span class=\"me-1\" ngbTooltip=\"Rotate this wall.\"\r\n (click)=\"rotateWall(getElementNumber(group)!); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M3.73735 8.25011C4.12193 8.24362 4.44377 8.52776 4.49338 8.89998L4.4999 8.98735L4.50262 9.15516C4.58434 11.5741 6.57243 13.5 9 13.5C9.14022 13.5 9.27951 13.4936 9.41756 13.4809L9.21967 13.2803C8.92678 12.9874 8.92678 12.5126 9.21967 12.2197C9.51257 11.9268 9.98744 11.9268 10.2803 12.2197L11.7803 13.7197C12.0732 14.0126 12.0732 14.4874 11.7803 14.7803L10.2803 16.2803C9.98744 16.5732 9.51257 16.5732 9.21967 16.2803C8.92678 15.9874 8.92678 15.5126 9.21967 15.2197L9.45837 14.9827C9.30646 14.9942 9.15359 15 9 15C5.82653 15 3.21665 12.5321 3.0125 9.38289L3.00315 9.19314L3.00011 9.01265C2.99312 8.59849 3.3232 8.25709 3.73735 8.25011ZM8.78033 1.71967C9.0507 1.99003 9.07149 2.41546 8.84272 2.70967L8.78033 2.78033L8.54187 3.01726C8.69371 3.00578 8.8465 3 9 3C12.3137 3 15 5.68629 15 9C15 9.41421 14.6642 9.75 14.25 9.75C13.8358 9.75 13.5 9.41421 13.5 9C13.5 6.51472 11.4853 4.5 9 4.5C8.8597 4.5 8.72034 4.5064 8.58221 4.51909L8.78033 4.71967C9.07323 5.01256 9.07323 5.48744 8.78033 5.78033C8.50997 6.05069 8.08455 6.07149 7.79033 5.84272L7.71967 5.78033L6.21967 4.28033C5.94931 4.00997 5.92851 3.58454 6.15728 3.29033L6.21967 3.21967L7.71967 1.71967C8.01257 1.42678 8.48744 1.42678 8.78033 1.71967Z\"\r\n fill=\"#475467\" stroke=\"#475467\" stroke-width=\"0.00064\" />\r\n </svg>\r\n </span>\r\n <span class=\"me-1\" ngbTooltip=\"Insert new wall below.\"\r\n (click)=\"addNewWall(getElementNumber(group)!); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_62_8)\">\r\n <path\r\n d=\"M9 9.75C11.0707 9.75 12.75 11.4293 12.75 13.5C12.75 15.5708 11.0707 17.25 9 17.25C6.92925 17.25 5.25 15.5708 5.25 13.5C5.25 11.4293 6.92925 9.75 9 9.75ZM9.75 11.25H8.25V12.7493L6.75 12.75V14.25L8.25 14.2493V15.75H9.75V14.2493L11.25 14.25V12.75L9.75 12.7493V11.25ZM15 2.25C15.414 2.25 15.75 2.586 15.75 3V7.5C15.75 7.914 15.414 8.25 15 8.25H3C2.586 8.25 2.25 7.914 2.25 7.5V3C2.25 2.586 2.586 2.25 3 2.25H15ZM3.75 3.75V6.75H14.25V3.75H3.75Z\"\r\n fill=\"#475467\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_62_8\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span class=\"me-1\" ngbTooltip=\"Remove this wall and its fixtures.\"\r\n (click)=\"deleteWall(getElementNumber(group)!); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_63_25)\">\r\n <path\r\n d=\"M10.7094 1.5C11.3551 1.5 11.9283 1.91314 12.1324 2.52565L12.5406 3.75H15C15.4142 3.75 15.75 4.08579 15.75 4.5C15.75 4.9142 15.4142 5.24999 15 5.25L14.9981 5.30344L14.3476 14.4103C14.2635 15.5878 13.2838 16.5 12.1034 16.5H5.89668C4.71624 16.5 3.7365 15.5878 3.6524 14.4103L3.00191 5.30344C3.00062 5.28551 2.99998 5.26769 2.99997 5.25C2.58577 5.24999 2.25 4.9142 2.25 4.5C2.25 4.08579 2.58579 3.75 3 3.75H5.45943L5.86754 2.52565C6.07172 1.91314 6.64493 1.5 7.29057 1.5H10.7094ZM13.4981 5.25H4.50191L5.14858 14.3034C5.17662 14.696 5.5032 15 5.89668 15H12.1034C12.4968 15 12.8234 14.696 12.8514 14.3034L13.4981 5.25ZM7.5 7.5C7.88464 7.5 8.20163 7.78952 8.24495 8.16253L8.25 8.25V12C8.25 12.4142 7.91422 12.75 7.5 12.75C7.11537 12.75 6.79837 12.4605 6.75505 12.0875L6.75 12V8.25C6.75 7.83578 7.08578 7.5 7.5 7.5ZM10.5 7.5C10.9142 7.5 11.25 7.83578 11.25 8.25V12C11.25 12.4142 10.9142 12.75 10.5 12.75C10.0858 12.75 9.75 12.4142 9.75 12V8.25C9.75 7.83578 10.0858 7.5 10.5 7.5ZM10.7094 3H7.29057L7.04057 3.75H10.9595L10.7094 3Z\"\r\n fill=\"#F32B2B\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_63_25\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n }\r\n </div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"ps-0 pe-0\">\r\n <ng-template>\r\n <div style=\"min-height: 50px\" dndDropzone (dndDrop)=\"onDrop($event, i)\">\r\n <!-- Fixtures -->\r\n <ng-container *ngIf=\"getFormFixtures(i).controls.length\">\r\n <div formArrayName=\"fixtures\">\r\n <ng-container *ngFor=\"let fixture of getFormFixtures(i).controls; let j = index\">\r\n <div \r\n dndDropzone \r\n (dndDrop)=\"onDrop($event, i, j)\" \r\n [formGroupName]=\"j\"\r\n [dndDraggable]=\"{ wallIndex: i, fixtureIndex: j }\" \r\n [dndEffectAllowed]=\"'all'\"\r\n class=\"row g-0 mb-5\" \r\n [dndDisableDragIf]=\"layoutForm.disabled\">\r\n \r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-center justify-content-center h-100\">\r\n <svg \r\n dndDragImageRef\r\n [style]=\"{ cursor: layoutForm.disabled ? 'default' : 'move', opacity: '0.5' }\"\r\n width=\"25px\" \r\n viewBox=\"0 0 16 16\" \r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"m 4.496094 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 0 0\"\r\n fill=\"grey\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-10\">\r\n <lib-reactive-select \r\n formControlName=\"fixtureConfigId\" \r\n [idField]=\"'_id'\"\r\n [nameField]=\"'name'\" \r\n [data]=\"fixtureTemplates\" \r\n [label]=\"'Fixture ' + (j + 1)\"\r\n [subTextField]=\"'subtext'\" \r\n [search]=\"true\">\r\n </lib-reactive-select>\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg \r\n (click)=\"removeFixture('wall', j, i)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\"\r\n xmlns=\"http://www.w3.org/2000/svg\" \r\n width=\"10\" \r\n height=\"10\"\r\n viewBox=\"0 0 10 10\" \r\n fill=\"none\">\r\n <path \r\n d=\"M9 1L1 9M1 1L9 9\" \r\n stroke=\"#344054\" \r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\" \r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n \r\n <div class=\"d-flex justify-content-end\">\r\n <a \r\n class=\"link-btn\" \r\n [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewFixture('wall', i)\">\r\n Add fixture\r\n </a>\r\n </div>\r\n \r\n <hr style=\"border-top: 1px dashed #000000;\" />\r\n \r\n <!-- Other Elements -->\r\n <ng-container *ngIf=\"getWallOtherElements(i).controls.length\">\r\n <div formArrayName=\"otherElements\">\r\n <ng-container *ngFor=\"let fixture of getWallOtherElements(i).controls; let j = index\">\r\n <div [formGroupName]=\"j\" class=\"row g-0 mb-5\">\r\n <div class=\"col-11\">\r\n <label class=\"form-label mb-1\">Element {{ j + 1 }}</label>\r\n\r\n <!-- Dropdown bound to 'type' -->\r\n <lib-reactive-select \r\n [idField]=\"'value'\" \r\n [nameField]=\"'label'\"\r\n [data]=\"otherElementList\" \r\n [id]=\"'elementLabel' + j\" \r\n formControlName=\"type\">\r\n </lib-reactive-select>\r\n\r\n <!-- Show custom text input only when 'Others' is selected -->\r\n <input \r\n *ngIf=\"(fixture.get('type')?.value) === 'Others'\" \r\n type=\"text\"\r\n class=\"form-control mt-2\" \r\n formControlName=\"customName\"\r\n placeholder=\"Enter custom element name\" />\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg \r\n (click)=\"removeOtherElement('wall', j, i)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\"\r\n xmlns=\"http://www.w3.org/2000/svg\" \r\n width=\"10\" \r\n height=\"10\"\r\n viewBox=\"0 0 10 10\" \r\n fill=\"none\">\r\n <path \r\n d=\"M9 1L1 9M1 1L9 9\" \r\n stroke=\"#344054\" \r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\" \r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n \r\n <div class=\"d-flex justify-content-end\">\r\n <a \r\n class=\"link-btn\" \r\n [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewOtherElements('wall', i)\">\r\n Add element\r\n </a>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #addWallAction>\r\n <button \r\n (click)=\"addNewWall(0)\" \r\n [class.disabled-click]=\"layoutForm.disabled\"\r\n class=\"btn btn-secondary w-100 p-2\">\r\n Insert new wall\r\n </button>\r\n </ng-template>\r\n\r\n <hr style=\"border-top: 1px dashed #000000;\" />\r\n \r\n <!-- Floor Section -->\r\n <div [ngbAccordionItem]=\"'floor'\" class=\"mb-5\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button type=\"button\" class=\"mainheading p-0\" ngbAccordionButton>\r\n <span class=\"me-2 wall-label\">Floor</span>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"ps-0 pe-0\">\r\n <ng-template>\r\n <div style=\"min-height: 50px\" dndDropzone (dndDrop)=\"onDrop($event, 'floor')\">\r\n <!-- Floor Fixtures -->\r\n <ng-container *ngIf=\"getFormFloorFixtures.controls.length\">\r\n <div formArrayName=\"floorFixtures\">\r\n <ng-container *ngFor=\"let fixture of getFormFloorFixtures.controls; let j = index\">\r\n <div \r\n dndDropzone \r\n (dndDrop)=\"onDrop($event, 'floor', j)\" \r\n [formGroupName]=\"j\"\r\n [dndDraggable]=\"{ wallIndex: 'floor', fixtureIndex: j }\" \r\n [dndEffectAllowed]=\"'all'\"\r\n [dndDisableDragIf]=\"layoutForm.disabled\"\r\n class=\"row g-0 mb-5\">\r\n \r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-center justify-content-center h-100\">\r\n <svg \r\n dndDragImageRef \r\n style=\"cursor: move; opacity: 0.5\" \r\n width=\"25px\"\r\n viewBox=\"0 0 16 16\" \r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"m 4.496094 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m -6 6 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 6 0 c -0.832032 0 -1.5 0.671875 -1.5 1.5 s 0.667968 1.5 1.5 1.5 c 0.828125 0 1.5 -0.671875 1.5 -1.5 s -0.671875 -1.5 -1.5 -1.5 z m 0 0\"\r\n fill=\"grey\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-10\">\r\n <lib-reactive-select \r\n formControlName=\"fixtureConfigId\" \r\n [idField]=\"'_id'\"\r\n [nameField]=\"'name'\" \r\n [data]=\"fixtureTemplates\" \r\n [label]=\"'Fixture ' + (j + 1)\"\r\n [search]=\"true\" \r\n [subTextField]=\"'subtext'\">\r\n </lib-reactive-select>\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg \r\n (click)=\"removeFixture('floor', j)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\" \r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"10\" \r\n height=\"10\" \r\n viewBox=\"0 0 10 10\" \r\n fill=\"none\">\r\n <path \r\n d=\"M9 1L1 9M1 1L9 9\" \r\n stroke=\"#344054\" \r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\" \r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n \r\n <div class=\"d-flex justify-content-end\">\r\n <a \r\n class=\"link-btn\" \r\n [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewFixture('floor')\">\r\n Add fixture\r\n </a>\r\n </div>\r\n \r\n <hr style=\"border-top: 1px dashed #000000;\" />\r\n \r\n <!-- Floor Other Elements -->\r\n <ng-container *ngIf=\"getFormFloorOtherElements.controls.length\">\r\n <div formArrayName=\"floorOtherElements\">\r\n <ng-container *ngFor=\"let fixture of getFormFloorOtherElements.controls; let j = index\">\r\n <div [formGroupName]=\"j\" class=\"row g-0 mb-5\">\r\n <div class=\"col-11\">\r\n <label class=\"form-label mb-1\">Element {{ j + 1 }}</label>\r\n\r\n <!-- Dropdown for type -->\r\n <lib-reactive-select \r\n [idField]=\"'value'\" \r\n [nameField]=\"'label'\"\r\n [data]=\"otherElementList\" \r\n [id]=\"'floorElementLabel' + j\" \r\n formControlName=\"type\">\r\n </lib-reactive-select>\r\n\r\n <!-- Conditional input for custom name -->\r\n <input \r\n *ngIf=\"(fixture.get('type')?.value) === 'Others'\" \r\n type=\"text\"\r\n class=\"form-control mt-2\" \r\n formControlName=\"customName\"\r\n placeholder=\"Enter custom element name\" />\r\n </div>\r\n\r\n <div class=\"col-1\">\r\n <div class=\"d-flex align-items-end justify-content-center h-100\"\r\n [class.disabled-click]=\"layoutForm.disabled\">\r\n <svg \r\n (click)=\"removeOtherElement('floor', j)\"\r\n style=\"cursor: pointer; margin-bottom: 18px\" \r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"10\" \r\n height=\"10\" \r\n viewBox=\"0 0 10 10\" \r\n fill=\"none\">\r\n <path \r\n d=\"M9 1L1 9M1 1L9 9\" \r\n stroke=\"#344054\" \r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\" \r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end\">\r\n <a \r\n class=\"link-btn\" \r\n [class.disabled-click]=\"layoutForm.disabled\"\r\n (click)=\"addNewOtherElements('floor')\">\r\n Add element\r\n </a>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Center Column -->\r\n <div class=\"col overflow-hidden position-relative\">\r\n <div id=\"canvas-card\" class=\"c-card position-relative\" #canvasContainer>\r\n <!-- Canvas View -->\r\n <div [ngClass]=\"{ 'd-none': selectedView === 'tree' }\">\r\n <canvas id=\"base-canvas\" #baseCanvas></canvas>\r\n </div>\r\n \r\n <!-- Tree View -->\r\n <div *ngIf=\"selectedView === 'tree'\" class=\"w-100\">\r\n <store-plano-tree-view [allFixture]=\"allFixtures\"></store-plano-tree-view>\r\n </div>\r\n \r\n <!-- Top Controls -->\r\n <div style=\"top: 24px; left: 26px; position: absolute;\" id=\"segment-btn\" class=\"pb-5\">\r\n <div class=\"w-100 d-flex justify-content-start gap-4\">\r\n <ul class=\"nav nav-tabs custom-tabs d-flex\" style=\"width: 200px; margin: 0\">\r\n <li class=\"nav-item flex-fill\">\r\n <button \r\n class=\"nav-link w-100 h-100\" \r\n [class.active]=\"selectedView === 'detail'\"\r\n (click)=\"selectedView = 'detail'\">\r\n Detail View\r\n </button>\r\n </li>\r\n <li class=\"nav-item flex-fill\">\r\n <button \r\n class=\"nav-link w-100 h-100\" \r\n [class.active]=\"selectedView === 'tree'\"\r\n (click)=\"selectedView = 'tree'\">\r\n Tree View\r\n </button>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <!-- Entrance Button -->\r\n <div \r\n *ngIf=\"layoutForm.enabled\" \r\n ngbTooltip=\"You can add up to two entrances.\" \r\n style=\"top: 24px; right: 190px\"\r\n class=\"position-absolute\" \r\n [disableTooltip]=\"getEntrances?.length < 2\">\r\n <button \r\n type=\"button\" \r\n class=\"btn btn-outline d-flex align-items-center gap-3 bg-white shadow-sm\"\r\n [disabled]=\"getEntrances?.length >= 2\" \r\n (click)=\"addNewEntrance()\">\r\n Add Entrance\r\n </button>\r\n </div>\r\n\r\n <!-- Edit Button -->\r\n <button \r\n *ngIf=\"layoutForm.disabled\"\r\n [disabled]=\"disableEdit || ['taskAssigned'].includes(taskStyle.fixture.class)\"\r\n style=\"top: 24px; right: 164px\" \r\n type=\"button\"\r\n class=\"btn btn-outline d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"onClickEdit()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1322_5325)\">\r\n <path\r\n d=\"M14.1667 2.49993C14.3856 2.28106 14.6455 2.10744 14.9314 1.98899C15.2174 1.87054 15.5239 1.80957 15.8334 1.80957C16.1429 1.80957 16.4494 1.87054 16.7354 1.98899C17.0214 2.10744 17.2812 2.28106 17.5001 2.49993C17.719 2.7188 17.8926 2.97863 18.011 3.2646C18.1295 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1295 4.78262 18.011 5.06859C17.8926 5.35455 17.719 5.61439 17.5001 5.83326L6.25008 17.0833L1.66675 18.3333L2.91675 13.7499L14.1667 2.49993Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1322_5325\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n Edit\r\n </button>\r\n\r\n <!-- Rotate Button -->\r\n <button \r\n style=\"top: 24px; right: 94px\" \r\n type=\"button\" \r\n *ngIf=\"layoutForm.disabled\"\r\n class=\"btn btn-outline d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"rotateCanvas(canvas,90)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 26 26\" fill=\"none\">\r\n <path\r\n d=\"M6.36265 7.17887L7.17625 6.36287L5.90425 5.09207L5.08945 5.90567L6.36265 7.17887ZM15.671 6.36407L19.6379 10.3309L20.9099 9.05769L16.9442 5.09087L15.671 6.36407ZM19.6379 18.8257L18.8243 19.6393L20.0963 20.9101L20.9099 20.0977L19.6379 18.8257ZM10.3295 19.6393L6.36265 15.6725L5.09065 16.9457L9.05626 20.9113L10.3295 19.6393ZM18.8243 19.6393C17.6543 20.8081 16.8407 21.6193 16.1459 22.1497C15.4715 22.6645 15.0155 22.8289 14.5763 22.8289V24.6289C15.5675 24.6289 16.4027 24.2173 17.2367 23.5813C18.0503 22.9609 18.9635 22.0453 20.0963 20.9125L18.8243 19.6393ZM9.05626 20.9113C10.1891 22.0453 11.1023 22.9597 11.9159 23.5813C12.7499 24.2173 13.5851 24.6289 14.5763 24.6289V22.8289C14.1371 22.8289 13.6823 22.6645 13.0067 22.1497C12.3119 21.6193 11.4983 20.8081 10.3295 19.6393L9.05626 20.9113ZM19.6379 10.3309C20.8067 11.4997 21.6179 12.3133 22.1483 13.0081C22.6631 13.6837 22.8275 14.1385 22.8275 14.5777H24.6275C24.6275 13.5865 24.2159 12.7513 23.5799 11.9173C22.9595 11.1037 22.0427 10.1905 20.9099 9.05769L19.6379 10.3309ZM20.9099 20.0977C22.0439 18.9637 22.9583 18.0517 23.5799 17.2381C24.2159 16.4041 24.6275 15.5689 24.6275 14.5777H22.8275C22.8275 15.0169 22.6631 15.4729 22.1483 16.1473C21.6179 16.8421 20.8067 17.6557 19.6379 18.8257L20.9099 20.0977ZM7.17625 6.36287C8.34625 5.19407 9.15985 4.38167 9.85465 3.85127C10.529 3.33647 10.985 3.17327 11.4242 3.17327V1.37207C10.433 1.37207 9.59785 1.78367 8.76385 2.41967C7.94905 3.04127 7.03705 3.95567 5.90425 5.08847L7.17625 6.36287ZM16.9442 5.09087C15.8114 3.95687 14.8982 3.04127 14.0846 2.41967C13.2506 1.78367 12.4154 1.37207 11.4242 1.37207V3.17327C11.8634 3.17327 12.3182 3.33647 12.9938 3.85127C13.6886 4.38167 14.5022 5.19287 15.671 6.36167L16.9442 5.09087ZM5.08945 5.90327C3.95665 7.03607 3.04225 7.94807 2.42065 8.76287C1.78465 9.59687 1.37305 10.4321 1.37305 11.4233H3.17305C3.17305 10.9841 3.33745 10.5281 3.85225 9.85367C4.38265 9.15887 5.19385 8.34527 6.36265 7.17527L5.08945 5.90327ZM6.36265 15.6713C5.19385 14.5013 4.38265 13.6877 3.85225 12.9929C3.33745 12.3185 3.17305 11.8625 3.17305 11.4233H1.37305C1.37305 12.4145 1.78465 13.2497 2.42065 14.0837C3.04225 14.8973 3.95665 15.8105 5.08945 16.9433L6.36265 15.6713Z\"\r\n fill=\"#1D2939\" />\r\n <path d=\"M23.2 6.9832L25 8.2C25 4.582 22.4056 1.5796 19 1M2.8 19.0168L1 17.8C1 21.418 3.5944 24.4204 7 25\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- Submit Button -->\r\n <button \r\n *ngIf=\"!layoutForm.disabled\" \r\n style=\"top: 24px; right: 94px;padding: 9px 20px !important;\"\r\n type=\"button\" \r\n class=\"btn btn-primary d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"updateLayout(true)\">\r\n Submit\r\n </button>\r\n\r\n <!-- Download Button -->\r\n <button \r\n style=\"top: 24px; right: 26px\" \r\n type=\"button\"\r\n class=\"btn btn-outline d-flex align-items-center gap-3 position-absolute bg-white shadow-sm\"\r\n (click)=\"downloadCanvas()\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"#000000\" stroke-width=\"0.24000000000000005\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\"\r\n stroke-width=\"0.384\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path\r\n d=\"M12.5535 16.5061C12.4114 16.6615 12.2106 16.75 12 16.75C11.7894 16.75 11.5886 16.6615 11.4465 16.5061L7.44648 12.1311C7.16698 11.8254 7.18822 11.351 7.49392 11.0715C7.79963 10.792 8.27402 10.8132 8.55352 11.1189L11.25 14.0682V3C11.25 2.58579 11.5858 2.25 12 2.25C12.4142 2.25 12.75 2.58579 12.75 3V14.0682L15.4465 11.1189C15.726 10.8132 16.2004 10.792 16.5061 11.0715C16.8118 11.351 16.833 11.8254 16.5535 12.1311L12.5535 16.5061Z\"\r\n fill=\"#1D2939\"></path>\r\n <path\r\n d=\"M3.75 15C3.75 14.5858 3.41422 14.25 3 14.25C2.58579 14.25 2.25 14.5858 2.25 15V15.0549C2.24998 16.4225 2.24996 17.5248 2.36652 18.3918C2.48754 19.2919 2.74643 20.0497 3.34835 20.6516C3.95027 21.2536 4.70814 21.5125 5.60825 21.6335C6.47522 21.75 7.57754 21.75 8.94513 21.75H15.0549C16.4225 21.75 17.5248 21.75 18.3918 21.6335C19.2919 21.5125 20.0497 21.2536 20.6517 20.6516C21.2536 20.0497 21.5125 19.2919 21.6335 18.3918C21.75 17.5248 21.75 16.4225 21.75 15.0549V15C21.75 14.5858 21.4142 14.25 21 14.25C20.5858 14.25 20.25 14.5858 20.25 15C20.25 16.4354 20.2484 17.4365 20.1469 18.1919C20.0482 18.9257 19.8678 19.3142 19.591 19.591C19.3142 19.8678 18.9257 20.0482 18.1919 20.1469C17.4365 20.2484 16.4354 20.25 15 20.25H9C7.56459 20.25 6.56347 20.2484 5.80812 20.1469C5.07435 20.0482 4.68577 19.8678 4.40901 19.591C4.13225 19.3142 3.9518 18.9257 3.85315 18.1919C3.75159 17.4365 3.75 16.4354 3.75 15Z\"\r\n fill=\"#1D2939\"></path>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- Panel Collapse Handlers -->\r\n <div class=\"collapse-handler left\" (click)=\"togglePanel('left')\">\r\n <svg *ngIf=\"!isLeftPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27308 12.636L4.63672 8.99964L8.27308 5.36328M13.364 12.636L9.72763 8.99964L13.364 5.36328\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"isLeftPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72692 5.36399L13.3633 9.00036L9.72692 12.6367M4.63601 5.36399L8.27237 9.00036L4.63601 12.6367\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n \r\n <div class=\"collapse-handler right\" (click)=\"togglePanel('right')\">\r\n <svg *ngIf=\"isRightPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27308 12.636L4.63672 8.99964L8.27308 5.36328M13.364 12.636L9.72763 8.99964L13.364 5.36328\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"!isRightPanelCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72692 5.36399L13.3633 9.00036L9.72692 12.6367M4.63601 5.36399L8.27237 9.00036L4.63601 12.6367\"\r\n stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Column -->\r\n <div [ngClass]=\"{ 'collapsed-col': isRightPanelCollapsed, 'col-3': !isRightPanelCollapsed }\">\r\n <ng-container *ngTemplateOutlet=\"feedbackCol\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- Edit Fixture Body -->\r\n <div id=\"edit-body\" class=\"row\" [ngClass]=\"{ 'd-none': !editFixture }\">\r\n <ul class=\"mx-3 my-5 nav nav-pills\" role=\"tablist\">\r\n <li class=\"nav-item cursor-pointer\" role=\"presentation\">\r\n <a \r\n (click)=\"submitFixture = false; editFixtureSection = 'basic-details'\"\r\n [ngClass]=\"editFixtureSection === 'basic-details' ? 'active' : ''\" \r\n class=\"nav-link\" \r\n role=\"tab\">\r\n Basic details\r\n </a>\r\n </li>\r\n <li class=\"nav-item cursor-pointer\" role=\"presentation\">\r\n <a \r\n (click)=\"submitFixture = false; editFixtureSection = 'products'\"\r\n [ngClass]=\"editFixtureSection === 'products' ? 'active' : ''\" \r\n class=\"nav-link\" \r\n role=\"tab\">\r\n Products\r\n </a>\r\n </li>\r\n <li class=\"nav-item cursor-pointer\" role=\"presentation\">\r\n <a \r\n (click)=\"submitFixture = false; editFixtureSection = 'vms'\"\r\n [ngClass]=\"editFixtureSection === 'vms' ? 'active' : ''\" \r\n class=\"nav-link\" \r\n role=\"tab\">\r\n Visual Merchandise\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <div class=\"col-9\">\r\n <ng-container *ngIf=\"editFixtureSection === 'basic-details'\">\r\n <lib-instance-basic-details \r\n [fixtureData]=\"selectedFixtureData\" \r\n [editMode]=\"true\"\r\n [isSubmitted]=\"submitFixture\" \r\n (submitEvent)=\"onFixtureSubmit($event)\">\r\n </lib-instance-basic-details>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"editFixtureSection === 'products'\">\r\n <lib-instance-products \r\n [fixtureData]=\"selectedFixtureData\" \r\n [editMode]=\"true\" \r\n [isSubmitted]=\"submitFixture\"\r\n (submitEvent)=\"onFixtureSubmit($event)\">\r\n </lib-instance-products>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"editFixtureSection === 'vms'\">\r\n <lib-instance-vms \r\n [fixtureData]=\"selectedFixtureData\" \r\n [editMode]=\"true\" \r\n [isSubmitted]=\"submitFixture\"\r\n (submitEvent)=\"onFixtureSubmit($event)\">\r\n </lib-instance-vms>\r\n </ng-container>\r\n </div>\r\n \r\n <div class=\"col-3\">\r\n <ng-container *ngTemplateOutlet=\"feedbackCol\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n\r\n<!-- Templates -->\r\n<ng-template #feedbackCol>\r\n <div class=\"s-card\">\r\n <app-manage-store-plano-feedback \r\n [ngClass]=\"{ 'd-none': isRightPanelCollapsed && !editFixture}\" \r\n [currentPlano]=\"floorData\"\r\n [storeFeedback]=\"storeFeedback\" \r\n [selectedIssue]=\"selectedFixture\"\r\n (isApproved)=\"handleApproverResponse($event)\">\r\n </app-manage-store-plano-feedback>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #headerSkeleton>\r\n <div class=\"row m-0 g-0 loader d-flex justify-content-center align-items-center overflow-hidden\">\r\n <div class=\"shimmer w-100 p-4 rounded\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke mt-0 animate title\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #skeletonLoader>\r\n <div class=\"row loader d-flex justify-content-center align-items-center overflow-hidden\">\r\n <div class=\"shimmer rounded\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;width:345px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .block{border:1px solid #98a2b3;padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}::ng-deep .backgroundImg{background-color:#f9fafb!important}::ng-deep .accordion .accordion-button.backgroundImg:not(.collapsed){background-color:#f9fafb!important}::ng-deep .accordion-body{padding:10px 20px 20px}.s-card{position:relative;box-sizing:border-box;border-radius:8px;background:#fff;padding:20px 16px;height:75dvh;overflow-y:auto;overflow-x:visible}.c-card{border-radius:8px;background:#fff;padding:20px 16px;height:75dvh;overflow:hidden;width:100%}.h-card{border-radius:8px;background:#fff;padding:20px 16px;min-height:20dvh}.wall-label{color:var(--Gray-600, #475467);font-family:Inter;font-size:14px;font-style:normal;font-weight:600}img{width:100%;height:100%;object-fit:cover;display:block}#header .title{color:var(--Gray-800, #1d2939);font-size:16px;font-weight:600;line-height:24px;margin:0}.loader .shimmer{height:100%!important}.collapse-handler{position:absolute;height:32px;width:32px;display:flex;justify-content:center;align-items:center;border-radius:50%;background:#fff;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;cursor:pointer;top:12px}.collapse-handler.right{right:0}.collapse-handler.left{left:0}.collapsed-col{transition:all .3s ease;width:40px!important}[class^=col]{transition:all .3s ease}#segment-btn .custom-tabs{border-radius:8px;border:1px solid var(--Gray-300, #d0d5dd);overflow:hidden;margin-bottom:24px}#segment-btn .custom-tabs .nav-link{border-radius:0%;color:#495057;padding:.75rem 1rem;background-color:#fff;text-align:center;border-right:1px solid var(--Gray-300, #d0d5dd);transition:all ease .2s;font-weight:500}#segment-btn .custom-tabs .nav-link.active{background:var(--Primary-500, #33b5ff);color:#fff}#segment-btn .nav-tabs .nav-link{border:none;margin:0}#segment-btn .nav-item{text-align:center}#segment-btn .nav-item:last-child .nav-link{border:none}.link-btn{color:#33b5ff;cursor:pointer;font-weight:500}.link-btn:hover{color:#33b5ff;text-decoration:underline!important}.btn-red{border-radius:8px!important;border:1px solid #fef3f2!important;background:#fef3f2!important;box-shadow:0 1px 2px #1018280d!important;padding:10px 18px!important;color:#b42318!important;font-size:16px!important;font-weight:600!important}.updateClass{font-family:Inter;font-weight:400;font-size:14px;line-height:20px;letter-spacing:0%;color:#667085}\n"] }]
4651
4334
  }], ctorParameters: () => [{ type: i1.StoreBuilderService }, { type: i2.ActivatedRoute }, { type: i3.FormBuilder }, { type: i4.GlobalStateService }, { type: i5.TitleCasePipe }, { type: i6.ToastService }, { type: i7.NgbModal }, { type: i4.PageInfoService }, { type: i5.Location }, { type: i2.Router }, { type: i0.ChangeDetectorRef }], propDecorators: { canvasRef: [{
4652
4335
  type: ViewChild,
4653
4336
  args: ["baseCanvas"]
4654
4337
  }], containerRef: [{
4655
4338
  type: ViewChild,
4656
4339
  args: ["canvasContainer"]
4657
- }], noStoreVideoModalRef: [{
4658
- type: ViewChild,
4659
- args: ["noStoreVideo"]
4660
4340
  }], onResize: [{
4661
4341
  type: HostListener,
4662
4342
  args: ["window:resize"]
4663
4343
  }] } });
4664
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXN0b3JlLXBsYW5vLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby9tYW5hZ2Utc3RvcmUtcGxhbm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvbWFuYWdlLXN0b3JlLXBsYW5vL21hbmFnZS1zdG9yZS1wbGFuby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVULFlBQVksRUFJWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTFELE9BQU8sRUFHTCxXQUFXLEVBRVgsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUNMLE9BQU8sRUFFUCxZQUFZLEVBQ1osY0FBYyxFQUNkLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFHZCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQU1qQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUN4SCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCMUcsTUFBTSxPQUFPLHlCQUF5QjtJQTJGMUI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQWpHVixTQUFTLENBQWlDO0lBQ1osWUFBWSxDQUE4QjtJQUM3QyxvQkFBb0IsQ0FBb0I7SUFHbkUsUUFBUTtRQUNOLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRXpCLFFBQVEsQ0FBUztJQUVqQixNQUFNLENBQWlCO0lBQ3ZCLFNBQVMsR0FBVyxDQUFDLENBQUM7SUFDdEIsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUNuQixjQUFjLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUQsWUFBWSxHQUFHLElBQUksR0FBRyxFQUFxQyxDQUFDO0lBRTVELFVBQVUsQ0FBWTtJQUN0QixlQUFlLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEMsMEJBQTBCLEdBQW1CLEVBQUUsQ0FBQztJQUNoRCw4QkFBOEIsR0FBbUIsRUFBRSxDQUFDO0lBQ3BELDBCQUEwQixHQUFtQixFQUFFLENBQUM7SUFFaEQsU0FBUyxDQUFNO0lBRWYsU0FBUyxDQUFNO0lBQ04saUJBQWlCLENBQU0sQ0FBQywwRUFBMEU7SUFFM0csTUFBTSxDQUFTO0lBQ2YsZ0JBQWdCLEdBQVUsRUFBRSxDQUFDO0lBQzdCLFdBQVcsR0FBVSxFQUFFLENBQUMsQ0FBQyw0REFBNEQ7SUFDckYsbUJBQW1CLEdBQVUsRUFBRSxDQUFDLENBQUMsMEJBQTBCO0lBQzNELGFBQWEsQ0FBTTtJQUVuQixlQUFlLENBQU07SUFDckIsbUJBQW1CLENBQU07SUFDekIsdUJBQXVCLENBQU07SUFDN0IsV0FBVyxHQUFZLEtBQUssQ0FBQztJQUM3QixrQkFBa0IsR0FBeUMsZUFBZSxDQUFDO0lBQzNFLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFFdEIsWUFBWSxHQUFHO1FBQ2IsVUFBVSxFQUFFLENBQUM7UUFDYixZQUFZLEVBQUUsQ0FBQztRQUNmLE9BQU8sRUFBRSxDQUFDO0tBQ1gsQ0FBQztJQUVGLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFDOUIscUJBQXFCLEdBQVksSUFBSSxDQUFDO0lBQ3RDLG9CQUFvQixHQUFZLElBQUksQ0FBQztJQUNyQyxZQUFZLEdBQXNCLFFBQVEsQ0FBQztJQUUzQyxlQUFlLEdBUU4sRUFBRSxDQUFDO0lBQ1osZUFBZSxHQUFZLEtBQUssQ0FBQztJQUNqQyxXQUFXLEdBQVksSUFBSSxDQUFDO0lBQzVCLFFBQVEsQ0FBTTtJQUNkLFNBQVMsR0FBRztRQUNWLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtRQUN2RCxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7UUFDeEQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO0tBQ3BELENBQUM7SUFFRixnQkFBZ0IsR0FBaUI7UUFDL0IsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7UUFDOUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFO1FBQ3hELEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1FBQ3BDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO0tBQ3JDLENBQUM7SUFFRiwrQ0FBK0M7SUFFdkMsZUFBZSxHQUF1QixJQUFJLENBQUM7SUFDM0Msb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBRXJDLFlBQ1UsVUFBK0IsRUFDL0IsS0FBcUIsRUFDckIsRUFBZSxFQUNmLEVBQXNCLEVBQ3RCLFNBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLFlBQXNCLEVBQ3RCLFFBQXlCLEVBQ3pCLFFBQWtCLEVBQ2xCLE1BQWMsRUFDZCxFQUFxQjtRQVZyQixlQUFVLEdBQVYsVUFBVSxDQUFxQjtRQUMvQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBZTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUU3QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNqRSxJQUFJLENBQUM7Z0JBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjO2FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDeEIsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0wsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBVyxDQUNqRCxDQUFDO2dCQUNGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxFQUFFLE1BQU0sQ0FBQzthQUNwQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7YUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxNQUFNLEVBQUUsT0FBTyxFQUFFO2dCQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLE1BQU0sRUFBRSxPQUFPLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO2lCQUMzQzthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQzNDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FDakMsQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5RCxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQ3hCLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUN4QixTQUFTLENBQUMsUUFBUSxFQUFFLENBQ3JCLENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUU7WUFDN0QsdUJBQXVCLEVBQUUsSUFBSTtZQUM3QixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLG1CQUFtQixFQUFFLENBQUM7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFhLEVBQUUsaUJBQWlCLENBQUM7YUFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN2QixTQUFTLENBQUMsS0FBSyxFQUFFLENBQU0sRUFBRSxFQUFFO1lBQzFCLE1BQU0sUUFBUSxHQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFFL0IsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUN0QixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQztZQUVuQyxNQUFNLFFBQVEsR0FDWixNQUFNLEtBQUssT0FBTyxJQUFJLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQztZQUVuRSxJQUFJLFFBQVEsRUFBRTtnQkFDWixNQUFNLElBQUksR0FBRyxRQUFRLEVBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQztnQkFFMUMsTUFBTSxhQUFhLEdBQUc7b0JBQ3BCLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSTtvQkFDaEIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHO29CQUNmLEtBQUssRUFBRSxRQUFRLENBQUMsY0FBYyxFQUFFO29CQUNoQyxNQUFNLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRTtvQkFDbEMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO29CQUNyQixXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUk7aUJBQzNCLENBQUM7Z0JBRUYsUUFBUSxJQUFJLEVBQUU7b0JBQ1osS0FBSyxNQUFNLENBQUMsQ0FBQzt3QkFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDN0IsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQzt3QkFFdEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUNqQyxJQUFJLENBQUMsTUFBTSxFQUNYLGFBQWEsQ0FBQyxDQUFDLEVBQ2YsYUFBYSxDQUFDLENBQUMsRUFDZixJQUFJLENBQUMsYUFBYSxFQUNsQixhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksRUFDMUIsYUFBYSxDQUFDLFdBQVcsQ0FDMUIsQ0FBQzt3QkFFRCxPQUFlLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQzt3QkFDakMsT0FBZSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO3dCQUVsRCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDckMsTUFBTTtxQkFDUDtvQkFFRCxLQUFLLFFBQVEsQ0FBQyxDQUFDO3dCQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUM3QixhQUFhLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUs7NEJBQzlDLGFBQWEsQ0FBQyxLQUFLLENBQUM7d0JBRXRCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDOUMsSUFBSSxDQUFDLE1BQU0sRUFDWCxhQUFhLENBQUMsQ0FBQyxFQUNmLGFBQWEsQ0FBQyxDQUFDLEVBQ2YsYUFBYSxDQUFDLEtBQUssRUFDbkIsYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQ3ZCLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN4QixhQUFhLENBQUMsV0FBVyxDQUMxQixDQUFDO3dCQUVELFFBQWdCLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQzt3QkFDcEMsUUFBZ0IsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQzt3QkFFbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3RDLE1BQU07cUJBQ1A7b0JBRUQsS0FBSyxVQUFVLENBQUMsQ0FBQzt3QkFDZixNQUFNO3FCQUNQO29CQUVELEtBQUssU0FBUyxDQUFDLENBQUM7d0JBQ2QsTUFBTTtxQkFDUDtvQkFFRDt3QkFDRSxNQUFNO2lCQUNUO2dCQUVELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzthQUNoQztZQUVELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFekIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUN4QixLQUFLLEVBQUUsU0FBUyxDQUFDLFdBQVcsR0FBRyxFQUFFO1lBRWpDLE1BQU0sRUFBRSxTQUFTLENBQUMsWUFBWSxHQUFHLEVBQUU7U0FDcEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUE4QixFQUFFLEVBQUU7WUFDL0QsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUVoQixJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtnQkFDMUIsMENBQTBDO2dCQUMxQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQyxJQUFJLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQztnQkFFdkIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXhDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUNyQjtvQkFDRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU87b0JBQ1osQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPO2lCQUNHLEVBQ2pCLElBQUksQ0FDTCxDQUFDO2dCQUVGLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDZixVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQzlCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUNyQixRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQzthQUN0QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDeEMsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtnQkFDL0MsMENBQTBDO2dCQUMxQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNoQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO2dCQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUM7Z0JBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMvQixRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDckIsUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7YUFDdEI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7WUFDOUIsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7WUFDM0I7Z0JBQ0UsS0FBSyxFQUFFLFdBQVc7Z0JBQ2xCLElBQUksRUFBRSxxQ0FBcUM7Z0JBQzNDLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFdBQVcsRUFBRSxLQUFLO2FBQ25CO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsV0FBVyxFQUFFLElBQUk7YUFDbEI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLDREQUE0RDtRQUM1RCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDN0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUI7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsZUFBZSxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDOUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDbkMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUVuQixJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDaEIsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxLQUFVLEVBQUUsRUFBRTtnQkFDdkQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ3ZELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQzNDLENBQUM7Z0JBQ0YsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsS0FBSyxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztpQkFDcEM7cUJBQU07b0JBQ0wsSUFBSSxPQUFPLEdBQ1QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNoRCxDQUFDO29CQUNKLE9BQU8sQ0FBQyxXQUFXLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztvQkFDaEMsS0FBSyxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztpQkFDbEM7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQztZQUNuRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUM7Z0JBQzNDLEtBQUssRUFBRSxpQkFBaUIsSUFBSSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDakUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUM7U0FDbEU7YUFBTSxJQUFJLEtBQUssRUFBRSxPQUFPLEVBQUU7WUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakMsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUMxQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM1QixDQUFDO2dCQUNGLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7b0JBQzNELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUU7d0JBQ3RDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQzt3QkFDdEIsS0FBSyxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQzt3QkFDOUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDO3FCQUM3QztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTSxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssRUFBRSxRQUFRLENBQUM7U0FDeEQ7YUFBTTtZQUNMLElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGVBQWUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQzVDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsNEJBQTRCO0lBQzVCLDZEQUE2RDtJQUM3RCxpR0FBaUc7SUFDakcsa0NBQWtDO0lBQ2xDLHFEQUFxRDtJQUNyRCxRQUFRO0lBRVIsK0ZBQStGO0lBQy9GLGdDQUFnQztJQUNoQyxxREFBcUQ7SUFDckQsUUFBUTtJQUNSLFFBQVE7SUFDUixJQUFJO0lBRUosV0FBVyxDQUFDLElBQXNCLEVBQUUsTUFBZ0I7UUFDbEQsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQ25CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFDakUsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0I7Z0JBQUUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztTQUNuRTthQUFNO1lBQ0wsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztZQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQjtnQkFBRSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBRWxFLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN6QztTQUNGO1FBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNuQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsZ0JBQWdCLENBQ2QsT0FBZSxFQUNmLE9BQWUsRUFDZixNQUFXLEVBQ1gsb0JBQTZCLElBQUk7UUFFakMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLElBQUksR0FBUTtnQkFDZCxPQUFPLEVBQUUsT0FBTztnQkFDaEIsT0FBTyxFQUFFLE9BQU87YUFDakIsQ0FBQztZQUNGLElBQUksTUFBTSxFQUFFO2dCQUNWLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7YUFDL0I7WUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDL0MsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFRLEVBQUUsRUFBRTtvQkFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUM5QixJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTt3QkFDaEMsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDdkQ7eUJBQU07d0JBQ0wsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ3RDO29CQUVELElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFO3dCQUNqQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztxQkFDbkQ7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNqQztvQkFFRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTt3QkFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ3pDO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDNUI7b0JBRUQsSUFBSSxpQkFBaUIsRUFBRTt3QkFDckIsa0NBQWtDO3FCQUNuQztvQkFFRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFO3dCQUM1RCxJQUFJLENBQUMsOEJBQThCLENBQUM7NEJBQ2xDLGNBQWMsRUFDWixJQUFJLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLFNBQVM7eUJBQ3pELENBQUMsQ0FBQztxQkFDSjtvQkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtvQkFDVixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO29CQUNsRSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDaEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFcEMsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO29CQUNqQixXQUFXLEdBQUcsSUFBSSxDQUFDO2lCQUNwQjthQUNGO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFO1lBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVoRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7b0JBQ2pCLFdBQVcsR0FBRyxJQUFJLENBQUM7aUJBQ3BCO2FBQ0Y7U0FDRjtRQUVELElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDekI7YUFBTTtZQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQzFCO1FBRUQsaUNBQWlDO1FBQ2pDLG9DQUFvQztRQUNwQyxZQUFZO1FBQ1osSUFBSTtRQUVKLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FDL0MsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUNuQyxDQUFDO1FBQ0YsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUNoRCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxTQUFTLENBQ3BDLENBQUM7UUFDRixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQzNDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FDL0IsQ0FBQztRQUNGLElBQ0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFVBQVU7WUFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLFVBQVU7WUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFDcEM7WUFDQSxJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQztTQUNuQzthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBRTtZQUNwRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUNFLE1BQU07Z0JBQ04sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxjQUFjLElBQUksVUFBVSxDQUFDO29CQUNqRSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQ3JCO2dCQUNBLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO2FBQ2xDO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO1lBQ2pDLElBQ0UsV0FBVztnQkFDWCxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxRQUFRO29CQUM5QixXQUFXLENBQUMsY0FBYyxJQUFJLFVBQVUsQ0FBQztvQkFDekMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxFQUMxQjtnQkFDQSxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRO29CQUM3QyxDQUFDLENBQUMsY0FBYztvQkFDaEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQzthQUNmO1NBQ0Y7UUFDRCxTQUFTO1FBQ1Qsb0NBQW9DO1FBQ3BDLGdJQUFnSTtRQUNoSSw0Q0FBNEM7UUFDNUMsTUFBTTtRQUNOLElBQUk7UUFFSiwyQ0FBMkM7UUFDM0Msb0dBQW9HO1FBRXBHLHFHQUFxRztRQUVyRyxnQ0FBZ0M7UUFDaEMsd0NBQXdDO1FBQ3hDLGFBQWE7UUFDYixNQUFNO1FBRU4sNkJBQTZCO1FBRTdCLGtEQUFrRDtRQUNsRCw0REFBNEQ7UUFFNUQsa0RBQWtEO1FBQ2xELG1DQUFtQztRQUNuQyxnREFBZ0Q7UUFFaEQsK0VBQStFO1FBQy9FLGdDQUFnQztRQUNoQyxtQkFBbUI7UUFDbkIsWUFBWTtRQUVaLFVBQVU7UUFDVixRQUFRO1FBRVIsOEJBQThCO1FBQzlCLDRCQUE0QjtRQUM1QixrREFBa0Q7UUFDbEQsbUNBQW1DO1FBQ25DLGdEQUFnRDtRQUVoRCwrRUFBK0U7UUFDL0UsZ0NBQWdDO1FBQ2hDLG1CQUFtQjtRQUNuQixZQUFZO1FBRVosVUFBVTtRQUNWLFFBQVE7UUFFUiw4QkFBOEI7UUFDOUIsTUFBTTtRQUVOLHVCQUF1QjtRQUN2Qiw2Q0FBNkM7UUFDN0MsYUFBYTtRQUNiLE1BQU07UUFFTixxQ0FBcUM7UUFDckMsSUFBSTtRQUVKLCtDQUErQztRQUMvQyxnSEFBZ0g7UUFDaEgsNkJBQTZCO1FBRTdCLDJFQUEyRTtRQUMzRSx1Q0FBdUM7UUFDdkMsYUFBYTtRQUNiLE1BQU07UUFFTixvRkFBb0Y7UUFFcEYsMEJBQTBCO1FBQzFCLG9DQUFvQztRQUNwQyw4Q0FBOEM7UUFDOUMsNkVBQTZFO1FBQzdFLDhCQUE4QjtRQUM5QixpQkFBaUI7UUFDakIsVUFBVTtRQUNWLFFBQVE7UUFDUixNQUFNO1FBRU4sdUJBQXVCO1FBQ3ZCLDRDQUE0QztRQUM1QyxhQUFhO1FBQ2IsTUFBTTtRQUVOLG9DQUFvQztRQUNwQyxJQUFJO1FBRUosc0lBQXNJO1FBQ3RJLG9DQUFvQztRQUNwQyxJQUFJO0lBQ04sQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsZUFBdUI7UUFDdkMsT0FBTyxNQUFNLGNBQWMsQ0FDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FDcEQsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQUMsYUFBb0I7UUFDOUMsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FDdkMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUN6QyxDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUN0RCxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNLENBQ2pELENBQUM7UUFFRixJQUFJLGNBQWMsRUFBRTtZQUNsQixNQUFNLE1BQU0sR0FBRyxjQUFjLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDO1lBRXBELElBQUksTUFBTSxFQUFFO2dCQUNWLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUN0QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRXhCLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxjQUFjLEVBQUU7d0JBQ3RDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUNuQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQy9DLENBQUM7d0JBRUYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQ3hDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFFNUIsTUFBTSxRQUFRLEdBQVEsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUMxQyxPQUFPLENBQUMsZUFBZSxDQUN4QixDQUFDOzRCQUVGLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0NBQ2IsT0FBTzs2QkFDUjs0QkFFRCxNQUFNLFNBQVMsR0FBRyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDOzRCQUUvQyxNQUFNLFlBQVksR0FBRztnQ0FDbkIsR0FBRyxRQUFRLEVBQUUsSUFBSTtnQ0FDakIsZUFBZSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRztnQ0FDcEMsR0FBRyxFQUFFLFNBQVM7Z0NBQ2QsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtnQ0FDNUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO2dDQUNoQyxLQUFLLEVBQUUsSUFBSTtnQ0FDWCxLQUFLLEVBQUUsSUFBSTtnQ0FDWCxTQUFTLEVBQUUsT0FBTztnQ0FDbEIsUUFBUSxFQUFFLFFBQVE7NkJBQ25CLENBQUM7NEJBRUYsMkpBQTJKOzRCQUUzSixJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsS0FBSyxNQUFNLEVBQUU7Z0NBQzVDLElBQUksU0FBaUIsQ0FBQztnQ0FFdEIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDO2dDQUNyRCxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFO29DQUN2QyxTQUFTLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztpQ0FDakM7cUNBQU0sSUFBSSxZQUFZLElBQUksQ0FBQyxFQUFFO29DQUM1QixTQUFTLEdBQUcsQ0FBQyxDQUFDO2lDQUNmO3FDQUFNO29DQUNMLFNBQVMsR0FBRyxZQUFZLENBQUM7aUNBQzFCO2dDQUVELE1BQU0sZUFBZSxHQUFRLFlBQVksQ0FBQyxJQUFJLENBQzVDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FDZixPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU07b0NBQzlCLE9BQU8sQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUN0QyxDQUFDLFFBQVEsQ0FBQztnQ0FDWCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsOEJBQThCLENBQUM7Z0NBRS9ELElBQUksZUFBZSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUU7b0NBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYTt5Q0FDekIsSUFBSSxDQUNILENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FDZixPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU07d0NBQzlCLE9BQU8sQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUN0Qzt5Q0FDQSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO29DQUMvQiwyREFBMkQ7aUNBQzVEO3FDQUFNLElBQUksZUFBZSxJQUFJLENBQUMsRUFBRTtvQ0FDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO3lDQUN6QixJQUFJLENBQ0gsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUNmLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTTt3Q0FDOUIsT0FBTyxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ3RDO3lDQUNBLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7b0NBQ2xDLGdFQUFnRTtpQ0FDakU7cUNBQU07b0NBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO3lDQUN6QixJQUFJLENBQ0gsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUNmLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTTt3Q0FDOUIsT0FBTyxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ3RDO3lDQUNBLFFBQVEsQ0FBQyxNQUFNLENBQUMsZUFBZSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7b0NBQ3pELGtGQUFrRjtpQ0FDbkY7NkJBQ0Y7aUNBQU0sSUFBSSxPQUFPLENBQUMscUJBQXFCLEtBQUssT0FBTyxFQUFFO2dDQUNwRCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsOEJBQThCLENBQUM7Z0NBRS9ELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRTtvQ0FDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO29DQUNoRCxnREFBZ0Q7aUNBQ2pEO3FDQUFNLElBQUksZUFBZSxJQUFJLENBQUMsRUFBRTtvQ0FDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO29DQUNuRCxxREFBcUQ7aUNBQ3REO3FDQUFNO29DQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FDakMsZUFBZSxHQUFHLENBQUMsRUFDbkIsQ0FBQyxFQUNELFlBQVksQ0FDYixDQUFDO29DQUNGLHVFQUF1RTtpQ0FDeEU7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7b0JBRUQsSUFDRSxLQUFLLENBQUMsU0FBUyxLQUFLLGdCQUFnQjt3QkFDcEMsS0FBSyxDQUFDLFNBQVMsS0FBSyxpQkFBaUIsRUFDckM7d0JBQ0EsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ25DLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FDL0MsQ0FBQzt3QkFFRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDeEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUU1QixrREFBa0Q7NEJBQ2xELE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7NEJBRTFDLEtBQUssTUFBTSxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUU7Z0NBQ3RELElBQ0UsV0FBVyxDQUFDLFdBQVcsS0FBSyxNQUFNO29DQUNsQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztvQ0FFcEMsU0FBUztnQ0FFWCxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDakQsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssZUFBZSxDQUN0QyxDQUFDO2dDQUVGLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQyxFQUFFO29DQUN2QixXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHO3dDQUNuQyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO3dDQUNyQyxLQUFLLEVBQUUsSUFBSTt3Q0FDWCxTQUFTLEVBQUUsTUFBTTt3Q0FDakIsUUFBUSxFQUFFLFFBQVE7cUNBQ25CLENBQUM7b0NBRUYsTUFBTTtpQ0FDUDs2QkFDRjs0QkFDRCxJQUFJOzRCQUNKLHdEQUF3RDs0QkFDeEQsNkNBQTZDOzRCQUU3QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQzs0QkFFcEQsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FDM0MsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssZUFBZSxDQUN0QyxDQUFDOzRCQUVGLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQyxFQUFFO2dDQUN2QixjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUc7b0NBQzdCLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQztvQ0FDL0IsS0FBSyxFQUFFLElBQUk7b0NBQ1gsU0FBUyxFQUFFLE1BQU07b0NBQ2pCLFFBQVEsRUFBRSxRQUFRO2lDQUNuQixDQUFDOzZCQUNIO3lCQUNGO3dCQUVELElBQUk7cUJBQ0w7aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLGFBQW9CO1FBQ3pDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQzFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FDMUMsQ0FBQztRQUNGLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FDcEQsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksU0FBUyxDQUN0QyxDQUFDO1FBQ0YsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMvQyxNQUFNLEtBQUssR0FBRyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUM7Z0JBRWxELElBQUksS0FBSyxFQUFFO29CQUNULE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7b0JBRXhDLDRDQUE0QztvQkFFNUMseUNBQXlDO29CQUN6QyxtREFBbUQ7b0JBQ25ELEtBQUs7b0JBRUwsOENBQThDO29CQUM5QywrQkFBK0I7b0JBRS9CLGtEQUFrRDtvQkFFbEQsS0FBSyxNQUFNLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRTt3QkFDdEQsSUFDRSxXQUFXLENBQUMsV0FBVyxLQUFLLE1BQU07NEJBQ2xDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDOzRCQUVwQyxTQUFTO3dCQUVYLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUNqRCxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxlQUFlLENBQ3RDLENBQUM7d0JBRUYsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUU7NEJBQ3ZCLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUc7Z0NBQ25DLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7Z0NBQ3JDLEtBQUssRUFBRSxLQUFLO2dDQUNaLFNBQVMsRUFBRSxLQUFLO2dDQUNoQixRQUFRLEVBQUUsU0FBUztnQ0FDbkIsTUFBTSxFQUNKLENBQUMsZUFBZSxFQUFFLE1BQU0sSUFBSSxRQUFRO29DQUNsQyxlQUFlLEVBQUUsVUFBVSxDQUFDO29DQUM5QixlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNO29DQUN4QyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTTtvQ0FDNUMsQ0FBQyxDQUFDLEVBQUU7Z0NBQ1IsTUFBTSxFQUFFLGVBQWUsRUFBRSxNQUFNO2dDQUMvQixVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU07NkJBQ3BDLENBQUM7NEJBRUYsTUFBTTt5QkFDUDtxQkFDRjtvQkFDRCxJQUFJO29CQUNKLHdEQUF3RDtvQkFDeEQsNkNBQTZDO29CQUU3QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQztvQkFFcEQsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FDM0MsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssZUFBZSxDQUN0QyxDQUFDO29CQUVGLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQyxFQUFFO3dCQUN2QixjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUc7NEJBQzdCLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQzs0QkFDL0IsS0FBSyxFQUFFLEtBQUs7NEJBQ1osU0FBUyxFQUFFLEtBQUs7NEJBQ2hCLFFBQVEsRUFBRSxTQUFTOzRCQUNuQixNQUFNLEVBQ0osQ0FBQyxlQUFlLEVBQUUsTUFBTSxJQUFJLFFBQVE7Z0NBQ2xDLGVBQWUsRUFBRSxVQUFVLENBQUM7Z0NBQzlCLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU07Z0NBQ3hDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNO2dDQUM1QyxDQUFDLENBQUMsRUFBRTs0QkFDUixNQUFNLEVBQUUsZUFBZSxFQUFFLE1BQU07NEJBQy9CLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTTt5QkFDcEMsQ0FBQztxQkFDSDtvQkFDRCxJQUFJO29CQUNKLElBQUk7aUJBQ0w7Z0JBQ0QsSUFBSTthQUNMO1NBQ0Y7SUFDSCxDQUFDO0lBRUQseUJBQXlCLENBQUMsYUFBb0I7UUFDNUMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FDMUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUMxQyxDQUFDO1FBQ0YsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMvQyxNQUFNLE1BQU0sR0FBRyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7Z0JBRTFELElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRTtvQkFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3RDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFFeEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ25DLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FDL0MsQ0FBQzt3QkFFRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDeEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUU1QixrREFBa0Q7NEJBQ2xELE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7NEJBRTFDLEtBQUssTUFBTSxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUU7Z0NBQ3RELElBQ0UsV0FBVyxDQUFDLFdBQVcsS0FBSyxNQUFNO29DQUNsQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztvQ0FFcEMsU0FBUztnQ0FFWCxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDakQsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssZUFBZSxDQUN0QyxDQUFDO2dDQUVGLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQyxFQUFFO29DQUN2QixXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHO3dDQUNuQyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO3dDQUNyQyxLQUFLLEVBQUUsSUFBSTt3Q0FDWCxTQUFTLEVBQUUsTUFBTTt3Q0FDakIsUUFBUSxFQUFFLFNBQVM7cUNBQ3BCLENBQUM7b0NBRUYsTUFBTTtpQ0FDUDs2QkFDRjs0QkFDRCxJQUFJOzRCQUNKLHdEQUF3RDs0QkFDeEQsNkNBQTZDOzRCQUU3QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQzs0QkFFcEQsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FDM0MsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssZUFBZSxDQUN0QyxDQUFDOzRCQUVGLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQyxFQUFFO2dDQUN2QixjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUc7b0NBQzdCLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQztvQ0FDL0IsS0FBSyxFQUFFLElBQUk7b0NBQ1gsU0FBUyxFQUFFLE1BQU07b0NBQ2pCLFFBQVEsRUFBRSxTQUFTO2lDQUNwQixDQUFDOzZCQUNIO3lCQUNGO3FCQUNGO2lCQUNGO2dCQUNELElBQUk7YUFDTDtTQUNGO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLGFBQW9CO1FBQ3BDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQzFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FDckMsQ0FBQztRQUVGLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0MsTUFBTSxNQUFNLEdBQUcsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDO2dCQUUxRCxJQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUU7b0JBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUN0QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBRXhCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUNuQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQy9DLENBQUM7d0JBRUYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQ3hDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFFNUIsa0RBQWtEOzRCQUNsRCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDOzRCQUUxQyxLQUFLLE1BQU0sV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFO2dDQUN0RCxJQUNFLFdBQVcsQ0FBQyxXQUFXLEtBQUssTUFBTTtvQ0FDbEMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7b0NBRXBDLFNBQVM7Z0NBRVgsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQ2pELENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLGVBQWUsQ0FDdEMsQ0FBQztnQ0FFRixJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsRUFBRTtvQ0FDdkIsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRzt3Q0FDbkMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQzt3Q0FDckMsS0FBSyxFQUFFLElBQUk7d0NBQ1gsU0FBUyxFQUFFLE1BQU07d0NBQ2pCLFFBQVEsRUFBRSxJQUFJO3FDQUNmLENBQUM7b0NBRUYsTUFBTTtpQ0FDUDs2QkFDRjs0QkFDRCxJQUFJOzRCQUNKLHdEQUF3RDs0QkFDeEQsNkNBQTZDOzRCQUU3QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQzs0QkFFcEQsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FDM0MsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssZUFBZSxDQUN0QyxDQUFDOzRCQUVGLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQyxFQUFFO2dDQUN2QixjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUc7b0NBQzdCLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQztvQ0FDL0IsS0FBSyxFQUFFLElBQUk7b0NBQ1gsU0FBUyxFQUFFLE1BQU07b0NBQ2pCLFFBQVEsRUFBRSxJQUFJO2lDQUNmLENBQUM7NkJBQ0g7eUJBQ0Y7cUJBQ0Y7b0JBQ0QsSUFBSTtpQkFDTDthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQ2YsWUFBaUIsRUFDakIsV0FBZ0IsRUFDaEIsWUFBb0IsRUFDcEIsV0FBbUI7UUFFbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRWxFLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUN2QixXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM1RDtJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxTQUFjO1FBQy9CLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNyQixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDN0MsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUN2RSxFQUFFLFFBQVEsQ0FBQztRQUNaLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQ25DLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLEdBQUcsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsRUFDbkQsQ0FBQyxDQUNGLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUNuQyxDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM3RCxDQUFDLENBQ0YsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM3QyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLENBQ3ZFLEVBQUUsUUFBUSxDQUFDO1FBQ1osTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDNUQsQ0FBQyxDQUNGLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUNuQyxDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixHQUFHLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLEVBQ3BELENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzdDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FDdkUsRUFBRSxRQUFRLENBQUM7UUFDWixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUNuQyxDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixHQUFHLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLEVBQ25ELENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDN0QsQ0FBQyxDQUNGLENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDN0MsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUN2RSxFQUFFLFFBQVEsQ0FBQztRQUNaLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQ25DLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzVELENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUNwRCxDQUFDLENBQ0YsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM3QyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLENBQ3ZFLEVBQUUsUUFBUSxDQUFDO1FBQ1osTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDNUQsQ0FBQyxDQUNGLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUNuQyxDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixHQUFHLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLEVBQ3BELENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQztRQUMxQyxNQUFNLFVBQVUsR0FDZCxTQUFTLENBQUMsTUFBTTtZQUNoQixTQUFTLENBQUMsTUFBTSxDQUNkLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzVELENBQUMsQ0FDRixDQUFDO1FBQ0osTUFBTSxVQUFVLEdBQ2QsQ0FBQztZQUNELFNBQVMsQ0FBQyxNQUFNLENBQ2QsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDN0QsQ0FBQyxDQUNGLENBQUM7UUFDSixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFckIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2xFLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUNyQixZQUFZLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FDL0IsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDNUQsQ0FBQyxDQUNGLENBQUM7U0FDSDtRQUVELElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQzFDLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUMxQyxZQUFZLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FDL0IsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDNUQsQ0FBQyxDQUNGLENBQUM7YUFDSDtpQkFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7Z0JBQzVCLFlBQVksSUFBSSxVQUFVLENBQUMsTUFBTSxDQUMvQixDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM1RCxDQUFDLENBQ0YsQ0FBQzthQUNIO2lCQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtnQkFDNUIsWUFBWSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQy9CLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzVELENBQUMsQ0FDRixDQUFDO2FBQ0g7U0FDRjtRQUVELHdCQUF3QjtRQUN4Qix5SUFBeUk7UUFDekksSUFBSTtRQUVKLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3pCLFdBQVcsRUFDWCxVQUFVLEVBQ1YsV0FBVyxHQUFHLFdBQVcsR0FBRyxTQUFTLENBQ3RDLENBQUM7UUFDRixJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDckIsWUFBWSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQy9CLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzdELENBQUMsQ0FDRixDQUFDO1NBQ0g7UUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDckIsWUFBWSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQy9CLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzdELENBQUMsQ0FDRixDQUFDO1NBQ0g7UUFFRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDcEIsWUFBWTtnQkFDVixDQUFDO29CQUNELFNBQVMsQ0FBQyxNQUFNLENBQ2QsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDN0QsQ0FBQyxDQUNGLENBQUM7U0FDTDtRQUVELFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDL0MsSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsRUFBRTtnQkFDakUsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2xEO2lCQUFNLElBQ0wsT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNO2dCQUM5QixPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsRUFDM0I7Z0JBQ0EsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2xEO2lCQUFNLElBQ0wsT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNO2dCQUM5QixPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsRUFDM0I7Z0JBQ0EsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2xEO2lCQUFNLElBQ0wsQ0FBQyxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU07Z0JBQzdCLENBQUMsT0FBTyxDQUFDLGFBQWEsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDL0QsQ0FBQyxPQUFPLENBQUMsV0FBVyxLQUFLLFVBQVUsSUFBSSxPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FBQyxFQUNuRTtnQkFDQSxJQUFJLFFBQVEsR0FBRyxVQUFVLEVBQUUsTUFBTTtvQkFDL0IsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7d0JBQ3ZCLFVBQVUsQ0FBQyxNQUFNLENBQ2YsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDN0QsQ0FBQyxDQUNGO29CQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRU4sTUFBTSxRQUFRLEdBQUcsVUFBVSxFQUFFLE1BQU07b0JBQ2pDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO3dCQUN2QixVQUFVLENBQUMsTUFBTSxDQUNmLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzdELENBQUMsQ0FDRjtvQkFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVOLE1BQU0sS0FBSyxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUM7Z0JBQ2xDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFFckQsTUFBTSxPQUFPLEdBQUcsUUFBUSxLQUFLLENBQUMsQ0FBQztnQkFDL0IsTUFBTSxPQUFPLEdBQUcsUUFBUSxLQUFLLENBQUMsQ0FBQztnQkFFL0IsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUM7Z0JBQ3ZCLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQztnQkFFdkIsSUFBSSxPQUFPLElBQUksT0FBTyxFQUFFO29CQUN0QixPQUFPLEdBQUcsT0FBTyxHQUFHLGNBQWMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO2lCQUN2RDtxQkFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDOUIsT0FBTyxHQUFHLFFBQVEsQ0FBQztvQkFDbkIsT0FBTyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7b0JBQ3pCLGNBQWMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO2lCQUNqQztxQkFBTSxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sRUFBRTtvQkFDOUIsT0FBTyxHQUFHLFFBQVEsQ0FBQztvQkFDbkIsT0FBTyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7b0JBQ3pCLGNBQWMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO2lCQUNqQztxQkFBTTtvQkFDTCxjQUFjLEdBQUcsVUFBVSxDQUFDO2lCQUM3QjtnQkFFRCxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxhQUFhLEtBQUssQ0FBQyxFQUFFO29CQUNqRSxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzdDO3FCQUFNLElBQ0wsT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNO29CQUM5QixPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsRUFDM0I7b0JBQ0EsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUM3QztxQkFBTSxJQUNMLE9BQU8sQ0FBQyxXQUFXLEtBQUssVUFBVTtvQkFDbEMsT0FBTyxDQUFDLGFBQWEsS0FBSyxDQUFDLEVBQzNCO29CQUNBLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDcEQ7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDL0MsSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsRUFBRTtnQkFDakUsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDakIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxDQUFTLEVBQUUsRUFBRTtvQkFDbkQsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzdELElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTt3QkFDckIsUUFBUSxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO3FCQUN6RDtvQkFDRCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdkQsT0FBTyxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztvQkFDdkMsT0FBTyxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FBQztvQkFDcEMsT0FBTyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7b0JBRTdCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO3dCQUNsQiwyQ0FBMkM7d0JBQzNDLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO3FCQUNoRTt5QkFBTTt3QkFDTCxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzt3QkFDN0IsT0FBTyxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQztxQkFDL0M7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTSxJQUNMLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTTtnQkFDOUIsT0FBTyxDQUFDLGFBQWEsS0FBSyxDQUFDLEVBQzNCO2dCQUNBLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDekMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUN2RSxFQUFFLFFBQVEsQ0FBQztnQkFDWixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLENBQVMsRUFBRSxFQUFFO29CQUNuRCxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDOUQsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO3dCQUNyQixRQUFRLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7cUJBQzFEO29CQUNELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FDMUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUN2RCxDQUFDO29CQUNGLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdkQsT0FBTyxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztvQkFDdkMsT0FBTyxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FBQztvQkFDcEMsT0FBTyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7b0JBRTdCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO3dCQUNsQiwyQ0FBMkM7d0JBQzNDLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO3FCQUNoRTt5QkFBTTt3QkFDTCxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzt3QkFDN0IsT0FBTyxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQztxQkFDL0M7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTSxJQUNMLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTTtnQkFDOUIsT0FBTyxDQUFDLGFBQWEsS0FBSyxDQUFDLEVBQzNCO2dCQUNBLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUN6QyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLENBQ3ZFLEVBQUUsUUFBUSxDQUFDO2dCQUNaLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLENBQVMsRUFBRSxFQUFFO29CQUNuRCxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDN0QsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO3dCQUNyQixRQUFRLElBQUksT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7cUJBQ3pEO29CQUNELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdkQsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUMxQyxRQUFRLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQ3hELENBQUM7b0JBQ0YsT0FBTyxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztvQkFDdkMsT0FBTyxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FBQztvQkFDcEMsT0FBTyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7b0JBRTdCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO3dCQUNsQiwyQ0FBMkM7d0JBQzNDLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO3FCQUNoRTt5QkFBTTt3QkFDTCxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzt3QkFDN0IsT0FBTyxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQztxQkFDL0M7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTSxJQUNMLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTTtnQkFDOUIsT0FBTyxDQUFDLGFBQWEsS0FBSyxDQUFDLEVBQzNCO2dCQUNBLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksUUFBUSxHQUNWLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUMxQixDQUFDLElBQVMsRUFBRSxFQUFFLENBQ1osSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLENBQzFELEVBQUUsUUFBUTtvQkFDWCxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDMUIsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUNaLElBQUksQ0FBQyxXQUFXLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUM5RCxFQUFFLFFBQVEsQ0FBQztnQkFFZCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxDQUFTLEVBQUUsRUFBRTtvQkFDbkQsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2RCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQzFDLFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUM5RCxDQUFDO29CQUNGLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUM7b0JBQ3ZDLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUM7b0JBQ3BDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO29CQUU3QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTt3QkFDbEIsMkNBQTJDO3dCQUMzQyxPQUFPLENBQUMsOEJBQThCLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztxQkFDaEU7eUJBQU07d0JBQ0wsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7d0JBQzdCLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUM7cUJBQy9DO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU0sSUFDTCxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU07Z0JBQzlCLE9BQU8sQ0FBQyxhQUFhLEtBQUssQ0FBQyxFQUMzQjtnQkFDQSxJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLENBQVMsRUFBRSxFQUFFO29CQUNuRCxRQUFRO3dCQUNOLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDOzRCQUNsRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztvQkFDL0MsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2RCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZELE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUM7b0JBQ3ZDLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUM7b0JBQ3BDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO29CQUU3QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTt3QkFDbEIsMkNBQTJDO3dCQUMzQyxPQUFPLENBQUMsOEJBQThCLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztxQkFDaEU7eUJBQU07d0JBQ0wsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7d0JBQzdCLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUM7cUJBQy9DO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU1QyxJQUFJLG9CQUFvQixHQUFHLENBQUMsQ0FBQztRQUU3QixTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUM5RCxNQUFNLE1BQU0sR0FDVixZQUFZLEdBQUcsQ0FBQztnQkFDaEIsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFDMUUsTUFBTSxNQUFNLEdBQ1YsWUFBWSxHQUFHLENBQUM7Z0JBQ2hCLFNBQVMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFFN0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQUcsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXpDLE1BQU0sUUFBUSxHQUNaLE1BQU0sR0FBRyxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sUUFBUSxHQUNaLE1BQU0sR0FBRyxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBRXJFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2RCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkQsT0FBTyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7WUFFOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7Z0JBQ2xCLDJDQUEyQztnQkFDM0MsT0FBTyxDQUFDLDhCQUE4QixHQUFHLG9CQUFvQixFQUFFLENBQUM7YUFDakU7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUM7YUFDL0M7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsU0FBYztRQUMzQixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFFdEIsUUFBUTtRQUNSLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDL0MsSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU0sRUFBRTtnQkFDbEMsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7Z0JBRTVCLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7b0JBQ3hDLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUM7b0JBQ3ZDLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO29CQUN4RCxPQUFPLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztvQkFFN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7d0JBQ2xCLDJDQUEyQzt3QkFDM0MsT0FBTyxDQUFDLDhCQUE4QixHQUFHLG1CQUFtQixFQUFFLENBQUM7cUJBQ2hFO3lCQUFNO3dCQUNMLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO3dCQUM3QixPQUFPLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO3FCQUMvQztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCx3QkFBd0I7UUFDeEIsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDN0IsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUMvQyxPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztZQUU5QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDbEIsMkNBQTJDO2dCQUMzQyxPQUFPLENBQUMsOEJBQThCLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQzthQUNqRTtpQkFBTTtnQkFDTCxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDN0IsT0FBTyxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQzthQUMvQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDM0MsQ0FBQztJQUVELG9EQUFvRDtJQUM1QyxlQUFlLENBQUMsYUFBcUI7UUFDM0MsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQ3hDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsYUFBYSxLQUFLLGFBQWEsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFFRCw4REFBOEQ7SUFDdEQsZUFBZSxDQUNyQixTQUFpQjtRQUVqQixJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRTVCLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLElBQUksRUFBRSxFQUFFO1lBQ3pELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ25DLEtBQUssTUFBTSxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtvQkFDdEMsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLFNBQVM7d0JBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7aUJBQ3BFO2FBQ0Y7U0FDRjtRQUVELEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLElBQUksRUFBRSxFQUFFO1lBQ3pELElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxTQUFTO2dCQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUMzRTtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsT0FBZSxFQUFFLFNBQWtCLElBQUk7UUFDNUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7WUFDakMsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVO2FBQ1osZ0JBQWdCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDbkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDO1lBQ1QsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFRLEVBQUUsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO29CQUNuQyxPQUFPO2lCQUNSO2dCQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtvQkFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQzlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDckIsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQ25ELENBQ0YsQ0FBQztpQkFDSDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6RDtnQkFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDaEQsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7Z0JBRTlELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixJQUFJO29CQUNGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQzt3QkFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQzt3QkFDNUQsSUFBSSxDQUFDLGdCQUFnQixDQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQ2xCLEVBQUUsQ0FDSDtxQkFDRixDQUFDLENBQUM7aUJBQ0o7Z0JBQUMsTUFBTSxHQUFFO2dCQUVWLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFFbkIsZ0NBQWdDO2dCQUVoQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxNQUFNLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztpQkFDaEQ7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQzNELENBQUM7U0FDRixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsU0FBYztRQUMvQixNQUFNLGdCQUFnQixHQUFHO1lBQ3ZCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsZUFBZSxJQUFJLEVBQUUsQ0FBQztZQUNyQyxHQUFHLENBQUMsU0FBUyxFQUFFLGFBQWEsSUFBSSxFQUFFLENBQUM7U0FDcEMsQ0FBQztRQUVGLFNBQVMsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUU7WUFDNUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxHQUFHLGdCQUFnQixDQUFDO1FBRXBDLElBQUksQ0FBQyxtQkFBbUIsR0FBRztZQUN6QixHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUNoRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYTtTQUNqQyxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBa0IsSUFBSTtRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUNuRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUVsQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDakQsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sRUFBRTtvQkFDL0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO3dCQUN0QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7d0JBQzdCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtxQkFDbEMsQ0FBQyxDQUFDO29CQUVILElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7d0JBQ3JDLElBQUksT0FBTyxFQUFFLFdBQVcsS0FBSyxPQUFPOzRCQUFFLE9BQU87d0JBQzdDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7NEJBQ3JDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVzs0QkFDaEMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlOzRCQUN4QyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7eUJBQ2pCLENBQUMsQ0FBQzt3QkFDRixRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDN0QsQ0FBQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTt3QkFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7NEJBQzdCLElBQUksRUFBRTtnQ0FDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxXQUFXLENBQUM7b0NBQzVELENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVztvQ0FDakIsQ0FBQyxDQUFDLFFBQVE7NkJBQ2I7NEJBQ0QsVUFBVSxFQUFFO2dDQUNWLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQztvQ0FDNUQsQ0FBQyxDQUFDLEVBQUU7b0NBQ0osQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXOzZCQUNwQjt5QkFDRixDQUFDLENBQUM7d0JBQ0YsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzlELENBQUMsQ0FBQyxDQUFDO29CQUVILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNsQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO29CQUNyRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO3dCQUNyQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7d0JBQ2hDLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZTt3QkFDeEMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO3FCQUNqQixDQUFDLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFlLENBQUMsSUFBSSxDQUN0RCxZQUFZLENBQ2IsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNsRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQzt3QkFDN0IsSUFBSSxFQUFFOzRCQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQztnQ0FDNUQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXO2dDQUNqQixDQUFDLENBQUMsUUFBUTt5QkFDYjt3QkFDRCxVQUFVLEVBQUU7NEJBQ1YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDO2dDQUM1RCxDQUFDLENBQUMsRUFBRTtnQ0FDSixDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVc7eUJBQ3BCO3FCQUNGLENBQUMsQ0FBQztvQkFFRixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBZSxDQUFDLElBQUksQ0FDM0QsUUFBUSxDQUNULENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRWhDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDbkMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRVIsSUFDRSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLFNBQVM7WUFDeEQsQ0FBQyxJQUFJLENBQUMscUJBQXFCO1lBQzNCLElBQUksQ0FBQyxlQUFlLEVBQ3BCO1lBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzNCO1FBQ0QsaUJBQWlCO0lBQ25CLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBRXJFLElBQUksSUFBSSxHQUFHLFFBQVEsRUFDakIsSUFBSSxHQUFHLFFBQVEsRUFDZixJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQ2hCLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUVuQixLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRTtZQUN6QixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDL0M7UUFFRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUk7WUFDVixHQUFHLEVBQUUsSUFBSTtZQUNULEtBQUssRUFBRSxJQUFJLEdBQUcsSUFBSTtZQUNsQixNQUFNLEVBQUUsSUFBSSxHQUFHLElBQUk7U0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxRQUFRLEdBQUcsR0FBRztRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXpCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUVwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUU1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFeEMsbUNBQW1DO1FBQ25DLE1BQU0sTUFBTSxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLGNBQWM7UUFFakUsMkNBQTJDO1FBQzNDLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN4QyxDQUFDO1FBRW5CLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxTQUFTO1FBQ3BDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxTQUFTO1FBRXBDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLFdBQVc7UUFDdkYsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsV0FBVztRQUV2RixpREFBaUQ7UUFDakQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWtCLENBQWtCLENBQUM7UUFFdEUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDbEIsVUFBVSxFQUFFLENBQUM7WUFDYixRQUFRLEVBQUUsQ0FBQztZQUNYLFFBQVE7WUFDUixNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTtZQUNyQyxRQUFRLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRTtnQkFDMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBa0IsQ0FBQztnQkFFM0MsNEJBQTRCO2dCQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDNUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQzVELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUM1RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFFNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2pDLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQjtRQUN0QixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXBELElBQUksSUFBSSxDQUFDO1lBRVQsT0FBTyxDQUFDLGdCQUFnQixLQUFLO2dCQUMzQixDQUFDLEVBQUUsQ0FBQztnQkFDSixDQUFDLEVBQUUsQ0FBQztnQkFDSixJQUFJLEVBQUUsSUFBSTthQUNYLENBQUM7WUFFRixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbEUsSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU0sRUFBRTtnQkFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDbEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQzthQUN2RTtpQkFBTSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssVUFBVSxFQUFFO2dCQUM3QyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsWUFBWSxDQUNmLElBQUksQ0FBQyxNQUFNLEVBQ1gsQ0FBQyxFQUNELENBQUMsRUFDRCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFNBQVMsRUFDVCxPQUFPLENBQ1IsQ0FBQzthQUNIO1lBRUQsSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU0sRUFBRTtnQkFDbEMsTUFBTSxhQUFhLEdBQW1CLEVBQUUsQ0FBQztnQkFFekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNsRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNyQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUMxQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUM5QixDQUFDO29CQUNGLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3JCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQzFCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQzlCLENBQUM7b0JBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDakMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFDakMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FDakMsQ0FBQztvQkFDRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNoQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUNoQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUNoQyxDQUFDO29CQUVGLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FDdkMsSUFBSSxDQUFDLE1BQU0sRUFDWCxDQUFDLEVBQ0QsQ0FBQyxFQUNELGFBQWEsRUFDYixZQUFZLEVBQ1osT0FBTyxDQUNSLENBQUM7b0JBQ0YsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUEwQixDQUFDLENBQUM7aUJBQ2hEO2dCQUVELElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN6QixhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUVwRCxNQUFNLGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxhQUFhLENBQUMsRUFBRTt3QkFDL0QsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLFVBQVUsRUFBRSxJQUFJO3dCQUNoQixjQUFjLEVBQUUsSUFBSTtxQkFDckIsQ0FBQyxDQUFDO29CQUVILGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQ2hDO2dCQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDdkQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUMvRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQy9ELE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7b0JBQzlDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3JCLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQ3RDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3RDLENBQUM7b0JBQ0YsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDckIsWUFBWSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFDckMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDckMsQ0FBQztvQkFFRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQ2hELElBQUksQ0FBQyxNQUFNLEVBQ1gsQ0FBQyxFQUNELENBQUMsRUFDRCxDQUFDLEVBQ0QsQ0FBQyxFQUNELENBQUMsRUFDRCxZQUFZLENBQ2IsQ0FBQztvQkFFRixrREFBa0Q7aUJBQ25EO2FBQ0Y7U0FDRjtRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDckIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFDMUIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDOUIsQ0FBQztZQUNGLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3JCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQzFCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQzlCLENBQUM7WUFDRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNqQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUNqQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUNqQyxDQUFDO1lBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDaEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFDaEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDaEMsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FDcEIsSUFBSSxDQUFDLE1BQU0sRUFDWCxDQUFDLEVBQ0QsQ0FBQyxFQUNELGFBQWEsRUFDYixZQUFZLEVBQ1osT0FBTyxDQUNSLENBQUM7U0FDSDtRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9ELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvRCxNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3JCLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQ3RDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3RDLENBQUM7WUFDRixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNyQixZQUFZLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUNyQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUNyQyxDQUFDO1lBRUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUNoRCxJQUFJLENBQUMsTUFBTSxFQUNYLENBQUMsRUFDRCxDQUFDLEVBQ0QsQ0FBQyxFQUNELENBQUMsRUFDRCxDQUFDLEVBQ0QsWUFBWSxDQUNiLENBQUM7U0FDSDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQ1osTUFBcUIsRUFDckIsQ0FBUyxFQUNULENBQVMsRUFDVCxNQUFjLEVBQ2QsS0FBYSxFQUNiLFdBQWdCO1FBRWhCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqQixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDNUIsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDO1FBQzlCLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM3QixJQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFDN0QsV0FBVyxDQUFDLGFBQ2QsRUFBRSxDQUFDO1FBRUgsTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQzNCLElBQUksRUFBRSxDQUFDO1lBQ1AsR0FBRyxFQUFFLENBQUM7WUFDTixLQUFLO1lBQ0wsTUFBTTtZQUNOLEVBQUUsRUFBRSxNQUFNO1lBQ1YsRUFBRSxFQUFFLE1BQU07WUFDVixJQUFJLEVBQUUsU0FBUztZQUNmLE1BQU0sRUFBRSxXQUFXO1lBQ25CLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDMUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUMzQixNQUFNLFVBQVUsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBRWxDLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDeEMsSUFBSSxFQUFFLE9BQU87WUFDYixHQUFHLEVBQUUsT0FBTztZQUNaLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLE9BQU87WUFDbkIsVUFBVSxFQUFFLEtBQUs7WUFDakIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7WUFDakIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsVUFBVSxFQUFFLEtBQUs7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sUUFBUSxHQUFvQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVoRCxJQUFJLFVBQVUsRUFBRTtZQUNkLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQ25DLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNwQixNQUFNLFlBQVksR0FBRyxPQUFPLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFakQsSUFBSSxZQUFZLEdBQUcsU0FBUyxHQUFHLFNBQVMsRUFBRTtnQkFDeEMsUUFBUSxDQUFDLElBQUksQ0FDWCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsRUFBRTtvQkFDM0QsTUFBTSxFQUFFLFVBQVU7b0JBQ2xCLFdBQVcsRUFBRSxDQUFDO29CQUNkLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLEVBQ0YsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDO29CQUNsQixJQUFJLEVBQUUsT0FBTztvQkFDYixHQUFHLEVBQUUsU0FBUztvQkFDZCxLQUFLLEVBQUUsU0FBUztvQkFDaEIsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLEtBQUssRUFBRSxDQUFDO29CQUNSLElBQUksRUFBRSxVQUFVO29CQUNoQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQ0gsQ0FBQzthQUNIO1lBRUQsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUVuQyxJQUFJLGVBQWUsR0FBRyxpQkFBaUIsR0FBRyxTQUFTLEVBQUU7Z0JBQ25ELFFBQVEsQ0FBQyxJQUFJLENBQ1gsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUNiLENBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsRUFDdEQ7b0JBQ0UsTUFBTSxFQUFFLFVBQVU7b0JBQ2xCLFdBQVcsRUFBRSxDQUFDO29CQUNkLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUNGLEVBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDO29CQUNsQixJQUFJLEVBQUUsT0FBTztvQkFDYixHQUFHLEVBQUUsZUFBZTtvQkFDcEIsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLE1BQU0sRUFBRSxTQUFTO29CQUNqQixLQUFLLEVBQUUsR0FBRztvQkFDVixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLE9BQU8sRUFBRSxLQUFLO29CQUNkLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQ0gsQ0FBQzthQUNIO1NBQ0Y7YUFBTTtZQUNMLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQ25DLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztZQUMxQixNQUFNLGFBQWEsR0FBRyxPQUFPLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFbEQsSUFBSSxhQUFhLEdBQUcsZUFBZSxHQUFHLFNBQVMsRUFBRTtnQkFDL0MsUUFBUSxDQUFDLElBQUksQ0FDWCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsRUFBRTtvQkFDbEUsTUFBTSxFQUFFLFVBQVU7b0JBQ2xCLFdBQVcsRUFBRSxDQUFDO29CQUNkLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLEVBQ0YsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDO29CQUNsQixJQUFJLEVBQUUsZUFBZTtvQkFDckIsR0FBRyxFQUFFLE9BQU87b0JBQ1osS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLE1BQU0sRUFBRSxTQUFTO29CQUNqQixLQUFLLEVBQUUsQ0FBQyxFQUFFO29CQUNWLElBQUksRUFBRSxVQUFVO29CQUNoQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQ0gsQ0FBQzthQUNIO1lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckQsTUFBTSxjQUFjLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUVqQyxJQUFJLGNBQWMsR0FBRyxnQkFBZ0IsR0FBRyxTQUFTLEVBQUU7Z0JBQ2pELFFBQVEsQ0FBQyxJQUFJLENBQ1gsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUNiLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsRUFDcEQ7b0JBQ0UsTUFBTSxFQUFFLFVBQVU7b0JBQ2xCLFdBQVcsRUFBRSxDQUFDO29CQUNkLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUNGLEVBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDO29CQUNsQixJQUFJLEVBQUUsY0FBYztvQkFDcEIsR0FBRyxFQUFFLE9BQU87b0JBQ1osS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLE1BQU0sRUFBRSxTQUFTO29CQUNqQixLQUFLLEVBQUUsRUFBRTtvQkFDVCxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixVQUFVLEVBQUUsS0FBSztpQkFDbEIsQ0FBQyxDQUNILENBQUM7YUFDSDtTQUNGO1FBRUQsTUFBTSxhQUFhLEdBQUc7O2FBRWIsQ0FBQztRQUVWLElBQUksU0FBUyxHQUFRLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRW5FLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQ3hDLFNBQVMsQ0FBQyxPQUFPLEVBQ2pCLFNBQVMsQ0FBQyxPQUFPLENBQ2xCLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sV0FBVyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFL0IsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTFCLElBQUksVUFBVSxFQUFFO1lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDVixJQUFJLEVBQUUsV0FBVztnQkFDakIsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQ1YsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLE9BQU8sRUFBRSxRQUFRO2FBQ2xCLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNWLElBQUksRUFBRSxXQUFXO2dCQUNqQixHQUFHLEVBQUUsV0FBVztnQkFDaEIsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLE9BQU8sRUFBRSxRQUFRO2FBQ2xCLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNWLE9BQU8sRUFBRSxLQUFLO1lBQ2QsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFLElBQUk7WUFDYixXQUFXLEVBQUUsU0FBUztTQUN2QixDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzlCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUU7Z0JBQ3pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDekI7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBQ3JDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDO1lBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXZCLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDdkMsSUFBSSxFQUFFLENBQUM7WUFDUCxHQUFHLEVBQUUsQ0FBQztZQUNOLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFlBQVksRUFBRSxVQUFVO1lBQ3hCLFlBQVksRUFBRSxDQUFDLFVBQVU7WUFDekIsc0JBQXNCO1lBQ3RCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU87WUFDbkMsT0FBTyxFQUFFLElBQUk7WUFDYixXQUFXLEVBQUUsU0FBUztZQUN0QixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7WUFDeEIsY0FBYyxFQUFFLElBQUk7U0FDckIsQ0FHQSxDQUFDO1FBRUYsS0FBSyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO1FBRXpCLHFDQUFxQztRQUNyQyx3Q0FBd0M7UUFDeEMsb0RBQW9EO1FBQ3BELDRFQUE0RTtRQUM1RSwyQ0FBMkM7UUFFM0MsbUNBQW1DO1FBQ25DLHNCQUFzQjtRQUN0QixpQkFBaUI7UUFDakIsd0JBQXdCO1FBQ3hCLHlDQUF5QztRQUN6QyxtREFBbUQ7UUFDbkQsV0FBVztRQUNYLG9DQUFvQztRQUVwQyw4Q0FBOEM7UUFDOUMsc0RBQXNEO1FBRXRELHlEQUF5RDtRQUN6RCwyQkFBMkI7UUFDM0IsMEJBQTBCO1FBQzFCLDhCQUE4QjtRQUM5QixVQUFVO1FBRVYsbUNBQW1DO1FBQ25DLHVEQUF1RDtRQUN2RCxzREFBc0Q7UUFDdEQscUNBQXFDO1FBQ3JDLDRDQUE0QztRQUU1QyxvRUFBb0U7UUFDcEUsNERBQTREO1FBQzVELDJEQUEyRDtRQUMzRCwwREFBMEQ7UUFFMUQsMENBQTBDO1FBQzFDLDJEQUEyRDtRQUMzRCwwREFBMEQ7UUFDMUQsK0JBQStCO1FBRS9CLHNDQUFzQztRQUN0Qyw0REFBNEQ7UUFDNUQsTUFBTTtRQUNOLE1BQU07UUFFTiwyQ0FBMkM7UUFDM0MsaUNBQWlDO1FBQ2pDLDBCQUEwQjtRQUMxQixTQUFTO1FBQ1QsNERBQTREO1FBQzVELDhDQUE4QztRQUM5QywrQ0FBK0M7UUFDL0MsNENBQTRDO1FBQzVDLFNBQVM7UUFDVCxlQUFlO1FBQ2Ysb0NBQW9DO1FBQ3BDLGtCQUFrQjtRQUNsQixrQkFBa0I7UUFDbEIsb0NBQW9DO1FBQ3BDLFNBQVM7UUFDVCxRQUFRO1FBRVIsMENBQTBDO1FBQzFDLGtDQUFrQztRQUNsQyw4REFBOEQ7UUFDOUQsa0JBQWtCO1FBQ2xCLHlEQUF5RDtRQUN6RCxpQ0FBaUM7UUFDakMsT0FBTztRQUVQLGlFQUFpRTtRQUNqRSxrREFBa0Q7UUFDbEQsK0JBQStCO1FBQy9CLG9DQUFvQztRQUNwQyxzQ0FBc0M7UUFDdEMsU0FBUztRQUNULCtCQUErQjtRQUMvQixvQ0FBb0M7UUFDcEMsc0NBQXNDO1FBQ3RDLFNBQVM7UUFDVCwyQ0FBMkM7UUFDM0MsMkNBQTJDO1FBQzNDLHlDQUF5QztRQUN6QyxTQUFTO1FBQ1QsMENBQTBDO1FBQzFDLDBDQUEwQztRQUMxQyx3Q0FBd0M7UUFDeEMsU0FBUztRQUVULDhCQUE4QjtRQUM5QixxQkFBcUI7UUFDckIsV0FBVztRQUNYLFdBQVc7UUFDWCx1QkFBdUI7UUFDdkIsc0JBQXNCO1FBQ3RCLGdCQUFnQjtRQUNoQixTQUFTO1FBQ1QsTUFBTTtRQUNOLCtCQUErQjtRQUMvQixLQUFLO1FBRUwsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQixnQ0FBZ0M7UUFDaEMsSUFBSyxXQUFtQixFQUFFLFFBQVEsRUFBRTtZQUNsQyxJQUFJO2dCQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDaEM7WUFBQyxNQUFNLEdBQUU7WUFDVixPQUFRLFdBQW1CLENBQUMsUUFBUSxDQUFDO1NBQ3RDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FDZixNQUFxQixFQUNyQixDQUFTLEVBQ1QsQ0FBUyxFQUNULE1BQWMsRUFDZCxLQUFhLEVBQ2IsV0FBZ0I7UUFFaEIsSUFBSSxZQUFpQixDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUM5RCxZQUFZLEdBQUc7Z0JBQ2IsT0FBTyxFQUNMLFdBQVcsQ0FBQyxNQUFNLElBQUksRUFBRSxJQUFJLFdBQVcsQ0FBQyxVQUFVLElBQUksUUFBUTtvQkFDNUQsQ0FBQyxDQUFDLFNBQVM7b0JBQ1gsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksT0FBTzt3QkFDL0IsQ0FBQyxDQUFDLFNBQVM7d0JBQ1gsQ0FBQyxDQUFDLFNBQVM7Z0JBQ2YsSUFBSSxFQUNGLFdBQVcsQ0FBQyxNQUFNLElBQUksRUFBRSxJQUFJLFdBQVcsQ0FBQyxVQUFVLElBQUksUUFBUTtvQkFDNUQsQ0FBQyxDQUFDLFNBQVM7b0JBQ1gsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksT0FBTzt3QkFDL0IsQ0FBQyxDQUFDLFNBQVM7d0JBQ1gsQ0FBQyxDQUFDLFNBQVM7Z0JBQ2YsTUFBTSxFQUNKLFdBQVcsQ0FBQyxNQUFNLElBQUksRUFBRSxJQUFJLFdBQVcsQ0FBQyxVQUFVLElBQUksUUFBUTtvQkFDNUQsQ0FBQyxDQUFDLFNBQVM7b0JBQ1gsQ0FBQyxDQUFDLFNBQVM7YUFDaEIsQ0FBQztTQUNIO1FBQ0QsSUFBSSxXQUFXLENBQUMsV0FBVyxLQUFLLE9BQU87WUFBRSxPQUFPO1FBQ2hELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqQixNQUFNLGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDcEMsSUFBSSxFQUFFLENBQUM7WUFDUCxHQUFHLEVBQUUsQ0FBQztZQUNOLEtBQUssRUFBRSxLQUFLO1lBQ1osTUFBTSxFQUFFLE1BQU07WUFDZCxFQUFFLEVBQUUsTUFBTTtZQUNWLEVBQUUsRUFBRSxNQUFNO1lBQ1YsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLElBQUksU0FBUztZQUMxQyxXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUUsT0FBTztTQUNkLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDOUIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFckMsTUFBTSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ25DLElBQUksRUFBRSxJQUFJO1lBQ1YsR0FBRyxFQUFFLElBQUk7WUFDVCxLQUFLLEVBQUUsUUFBUTtZQUNmLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLEVBQUUsRUFBRSxNQUFNO1lBQ1YsRUFBRSxFQUFFLE1BQU07WUFDVixNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sSUFBSSxTQUFTO1lBQzFDLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLElBQUksRUFBRSxPQUFPO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQ2pDLEtBQUssSUFBSSxHQUFHLE1BQU0sSUFBSSxJQUFJO1lBQ3BCLElBQUksR0FBRyxRQUFRLEdBQUcsTUFBTSxJQUFJLElBQUk7WUFDaEMsSUFBSSxHQUFHLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLFFBQVEsSUFBSSxJQUFJLEdBQUcsTUFBTTtZQUMzRCxJQUFJLEdBQUcsUUFBUSxJQUFJLElBQUksR0FBRyxjQUFjO1lBQ3hDLElBQUksSUFBSSxJQUFJLEdBQUcsY0FBYztZQUM3QixJQUFJLElBQUksSUFBSSxHQUFHLE1BQU07WUFDckIsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsTUFBTSxJQUFJLElBQUksSUFBSSxFQUMvQztZQUNFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxJQUFJLFNBQVM7WUFDMUMsV0FBVyxFQUFFLElBQUk7WUFDakIsSUFBSSxFQUFFLGFBQWE7U0FDcEIsQ0FDRixDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUNoQyxXQUNFLFdBQVcsQ0FBQyw4QkFBOEI7WUFDeEMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyw4QkFBOEI7Z0JBQzFDLENBQUMsV0FBVyxFQUFFLGFBQWE7b0JBQ3pCLENBQUMsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLGFBQWE7b0JBQ3RDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDVCxDQUFDLENBQUMsS0FDTixFQUFFLEVBQ0Y7WUFDRSxJQUFJLEVBQUUsSUFBSSxHQUFHLFFBQVEsR0FBRyxDQUFDO1lBQ3pCLEdBQUcsRUFBRSxJQUFJLEdBQUcsY0FBYyxHQUFHLENBQUM7WUFDOUIsUUFBUSxFQUFFLENBQUM7WUFDWCxVQUFVLEVBQUUsT0FBTztZQUNuQixVQUFVLEVBQUUsS0FBSztZQUNqQixJQUFJLEVBQUUsU0FBUztZQUNmLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLEtBQUssRUFBRSxRQUFRO1lBQ2YsTUFBTSxFQUFFLGNBQWM7WUFDdEIsU0FBUyxFQUFFLFFBQVE7U0FDcEIsQ0FDRixDQUFDO1FBRUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLGNBQWMsQ0FBQztRQUV6QyxNQUFNLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQ3BDLEtBQUssSUFBSSxJQUFJLFVBQVU7UUFDckIsSUFBSSxHQUFHLFFBQVEsSUFBSSxVQUFVO1FBQzdCLElBQUksR0FBRyxRQUFRLElBQUksVUFBVSxHQUFHLGNBQWMsR0FBRyxNQUFNO1FBQ3ZELElBQUksR0FBRyxRQUFRLElBQUksVUFBVSxHQUFHLGNBQWMsSUFDOUMsSUFBSSxHQUFHLFFBQVEsR0FBRyxNQUNwQixJQUFJLFVBQVUsR0FBRyxjQUFjO1FBQzdCLElBQUksR0FBRyxNQUFNLElBQUksVUFBVSxHQUFHLGNBQWM7UUFDNUMsSUFBSSxJQUFJLFVBQVUsR0FBRyxjQUFjLElBQUksSUFBSSxJQUMzQyxVQUFVLEdBQUcsY0FBYyxHQUFHLE1BQ2hDO1FBQ0UsSUFBSSxJQUFJLFVBQVUsSUFBSSxFQUN4QjtZQUNFLElBQUksRUFBRSxTQUFTO1lBQ2YsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLElBQUksU0FBUztZQUMxQyxXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUNGLENBQUM7UUFFRixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDakIsSUFBSSxVQUFVLENBQUM7UUFFZixNQUFNLFdBQVcsR0FBRyxHQUFHLFdBQVcsRUFBRSxXQUFXLE1BQU0sV0FBVyxFQUFFLFlBQVksQ0FBQyxLQUFLLElBQUksV0FBVyxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV6SCxNQUFNLGdCQUFnQixHQUFHLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FDbkMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUM5QixJQUFJLEVBQUUsSUFBSSxHQUFHLFFBQVEsR0FBRyxDQUFDO1lBQ3pCLEdBQUcsRUFBRSxVQUFVLEdBQUcsY0FBYyxHQUFHLENBQUM7WUFDcEMsUUFBUSxFQUFFLEVBQUU7WUFDWixVQUFVLEVBQUUsT0FBTztZQUNuQixVQUFVLEVBQUUsS0FBSztZQUNqQixJQUFJLEVBQUUsU0FBUztZQUNmLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLFNBQVMsRUFBRSxRQUFRO1lBQ25CLEtBQUssRUFBRSxRQUFRO1NBQ2hCLENBQUMsQ0FBQztRQUVMLEdBQUc7WUFDRCxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsUUFBUSxJQUFJLEdBQUcsQ0FBQztTQUNqQixRQUFRLFVBQVUsQ0FBQyxNQUFNLEdBQUcsY0FBYyxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUU7UUFFN0QsTUFBTSxRQUFRLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUM5QixNQUFNLFNBQVMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFcEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ25DLElBQUksRUFBRSxJQUFJO1lBQ1YsR0FBRyxFQUFFLElBQUk7WUFDVCxLQUFLLEVBQUUsUUFBUTtZQUNmLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLEVBQUUsRUFBRSxNQUFNO1lBQ1YsRUFBRSxFQUFFLE1BQU07WUFDVixNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sSUFBSSxTQUFTO1lBQzFDLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLElBQUksRUFBRSxPQUFPO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUM7UUFDbkQsTUFBTSxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQztRQUV2QixNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQzlCLEtBQUssSUFBSSxHQUFHLE1BQU0sSUFBSSxTQUFTO1lBQ3pCLElBQUksR0FBRyxRQUFRLEdBQUcsTUFBTSxJQUFJLFNBQVM7WUFDckMsSUFBSSxHQUFHLFFBQVEsSUFBSSxTQUFTLElBQUksSUFBSSxHQUFHLFFBQVEsSUFDbkQsU0FBUyxHQUFHLE1BQ2Q7WUFDTSxJQUFJLEdBQUcsUUFBUSxJQUFJLFNBQVMsR0FBRyxTQUFTO1lBQ3hDLElBQUksSUFBSSxTQUFTLEdBQUcsU0FBUztZQUM3QixJQUFJLElBQUksU0FBUyxHQUFHLE1BQU07WUFDMUIsSUFBSSxJQUFJLFNBQVMsSUFBSSxJQUFJLEdBQUcsTUFBTSxJQUFJLFNBQVMsSUFBSSxFQUN6RDtZQUNFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSTtnQkFDdEIsQ0FBQyxDQUFDLFlBQVksRUFBRSxJQUFJO2dCQUNwQixDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUs7b0JBQ25CLENBQUMsQ0FBQyxTQUFTO29CQUNYLENBQUMsQ0FBQyxTQUFTO1lBQ2IsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPO2dCQUMzQixDQUFDLENBQUMsWUFBWSxFQUFFLE9BQU87Z0JBQ3ZCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSztvQkFDbkIsQ0FBQyxDQUFDLFNBQVM7b0JBQ1gsQ0FBQyxDQUFDLFNBQVM7WUFDYixXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUNGLENBQUM7UUFFRixNQUFNLFlBQVksR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQ3JDLEdBQUcsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFDL0Q7WUFDRSxJQUFJLEVBQUUsSUFBSSxHQUFHLFFBQVEsR0FBRyxDQUFDO1lBQ3pCLEdBQUcsRUFBRSxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUM7WUFDOUIsUUFBUSxFQUFFLENBQUM7WUFDWCxVQUFVLEVBQUUsT0FBTztZQUNuQixVQUFVLEVBQUUsS0FBSztZQUNqQixJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQzVDLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLEtBQUssRUFBRSxRQUFRO1lBQ2YsTUFBTSxFQUFFLFNBQVM7WUFDakIsU0FBUyxFQUFFLFFBQVE7U0FDcEIsQ0FDRixDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE1BQU0sV0FBVyxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBRTlDLElBQUksV0FBVyxDQUFDLHNCQUFzQixLQUFLLElBQUksRUFBRTtZQUMvQyxNQUFNLElBQUksR0FBRyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBRW5DLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDNUIsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLHFCQUFxQjtnQkFDckIsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPO29CQUMzQixDQUFDLENBQUMsWUFBWSxFQUFFLE9BQU87b0JBQ3ZCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSzt3QkFDbkIsQ0FBQyxDQUFDLFNBQVM7d0JBQ1gsQ0FBQyxDQUFDLFNBQVM7Z0JBQ2IsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLElBQUksRUFBRSxPQUFPO2FBQ2QsQ0FBQyxDQUFDO1lBRUgsTUFBTSxJQUFJLEdBQUcsV0FBVyxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFOUQsa0VBQWtFO1lBQ2xFLE1BQU0sWUFBWSxHQUFHLFFBQVEsR0FBRyxHQUFHLENBQUM7WUFDcEMsTUFBTSxhQUFhLEdBQUcsV0FBVyxHQUFHLEdBQUcsQ0FBQztZQUN4QyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFFbkIsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQzFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJLEdBQUcsUUFBUSxHQUFHLENBQUM7Z0JBQ3pCLEdBQUcsRUFBRSxJQUFJLEdBQUcsV0FBVyxHQUFHLENBQUM7Z0JBQzNCLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixPQUFPLEVBQUUsUUFBUTtnQkFDakIsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLFFBQVEsRUFBRSxFQUFFO2dCQUNaLFVBQVUsRUFBRSxPQUFPO2dCQUNuQixVQUFVLEVBQUUsS0FBSztnQkFDakIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLElBQUksRUFBRSxNQUFNO2dCQUNaLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixPQUFPLEVBQUUsS0FBSzthQUNmLENBQUMsQ0FBQztZQUVMLElBQUksV0FBVyxHQUFHLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sV0FBVyxDQUFDLE1BQU0sR0FBRyxhQUFhLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRTtnQkFDM0QsVUFBVSxJQUFJLEdBQUcsQ0FBQztnQkFDbEIsV0FBVyxHQUFHLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ2hEO1lBRUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sVUFBVSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDakMsSUFBSSxFQUFFLElBQUksR0FBRyxRQUFRLEdBQUcsQ0FBQztnQkFDekIsR0FBRyxFQUFFLElBQUksR0FBRyxXQUFXLEdBQUcsQ0FBQztnQkFDM0IsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLEtBQU0sQ0FBQyxHQUFHLE9BQU87Z0JBQzNELE1BQU0sRUFBRSxXQUFXLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQztnQkFDekMsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLEVBQUUsRUFBRSxDQUFDO2dCQUNMLEVBQUUsRUFBRSxDQUFDO2FBQ04sQ0FBQyxDQUFDO1lBRUgsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQzlDO2FBQU0sSUFBSSxXQUFXLENBQUMsc0JBQXNCLEtBQUssSUFBSSxFQUFFO1lBQ3RELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ25DLE1BQU0sSUFBSSxHQUFHLFNBQVMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBRTdDLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDNUIsSUFBSSxFQUFFLElBQUk7b0JBQ1YsR0FBRyxFQUFFLElBQUk7b0JBQ1QsS0FBSyxFQUFFLFFBQVE7b0JBQ2YsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTzt3QkFDM0IsQ0FBQyxDQUFDLFlBQVksRUFBRSxPQUFPO3dCQUN2QixDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUs7NEJBQ25CLENBQUMsQ0FBQyxTQUFTOzRCQUNYLENBQUMsQ0FBQyxTQUFTO29CQUNiLFdBQVcsRUFBRSxJQUFJO29CQUNqQixJQUFJLEVBQUUsT0FBTztpQkFDZCxDQUFDLENBQUM7Z0JBRUgsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFcEIsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLE1BQU0sRUFBRTtvQkFDckQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7b0JBQzVELE1BQU0sVUFBVSxHQUFHLFNBQVMsR0FBRyxRQUFRLENBQUM7b0JBRXhDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDO3dCQUVwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQzlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUNyQzs0QkFDRSxNQUFNLEVBQUUsTUFBTTs0QkFDZCxXQUFXLEVBQUUsR0FBRzs0QkFDaEIsVUFBVSxFQUFFLEtBQUs7NEJBQ2pCLE9BQU8sRUFBRSxLQUFLO3lCQUNmLENBQ0YsQ0FBQzt3QkFFRixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUN4QjtpQkFDRjtnQkFFRCxNQUFNLElBQUksR0FDUixXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFbkUsb0RBQW9EO2dCQUNwRCxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztnQkFDNUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLGlCQUFpQixDQUFDLENBQUM7Z0JBQy9ELE1BQU0sYUFBYSxHQUFHLFNBQVMsR0FBRyxHQUFHLENBQUM7Z0JBQ3RDLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztnQkFFdkIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUM1QixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO29CQUNqQixRQUFRLEVBQUUsWUFBWTtvQkFDdEIsVUFBVSxFQUFFLE9BQU87b0JBQ25CLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQUM7Z0JBRUwsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBRXBDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksRUFBRTtvQkFDeEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO29CQUN2QixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7b0JBQ2hCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBRTNCLE9BQU8sT0FBTyxHQUFHLFFBQVEsRUFBRTt3QkFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDcEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDO3dCQUNuRCxRQUFRLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQUU7NEJBQ3hDLFFBQVEsR0FBRyxNQUFNLENBQUM7eUJBQ25COzZCQUFNOzRCQUNMLE9BQU8sR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO3lCQUN0QjtxQkFDRjtvQkFDRCxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUNqRSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUNqQztnQkFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ2pDLElBQUksRUFBRSxJQUFJLEdBQUcsUUFBUSxHQUFHLENBQUM7b0JBQ3pCLEdBQUcsRUFBRSxJQUFJLEdBQUcsU0FBUyxHQUFHLENBQUM7b0JBQ3pCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsS0FBSyxFQUFFLFFBQVE7b0JBQ2YsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQztvQkFDMUQsSUFBSSxFQUFFLDBCQUEwQjtvQkFDaEMsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLE9BQU8sRUFBRSxLQUFLO29CQUNkLEVBQUUsRUFBRSxDQUFDO29CQUNMLEVBQUUsRUFBRSxDQUFDO2lCQUNOLENBQUMsQ0FBQztnQkFFSCxNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUM3QyxJQUFJLEVBQUUsSUFBSSxHQUFHLFFBQVEsR0FBRyxDQUFDO29CQUN6QixHQUFHLEVBQUUsSUFBSSxHQUFHLFNBQVMsR0FBRyxDQUFDO29CQUN6QixPQUFPLEVBQUUsUUFBUTtvQkFDakIsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsT0FBTztvQkFDbkIsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLElBQUksRUFBRSxNQUFNO29CQUNaLFVBQVUsRUFBRSxLQUFLO29CQUNqQixPQUFPLEVBQUUsS0FBSztpQkFDZixDQUFDLENBQUM7Z0JBRUgsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDckM7U0FDRjthQUFNLElBQUksV0FBVyxDQUFDLHNCQUFzQixLQUFLLElBQUksRUFBRTtZQUN0RCxNQUFNLGdCQUFnQixHQUF1QyxFQUFFLENBQUM7WUFFaEUsSUFBSSxZQUFZLEdBQWtCLElBQUksQ0FBQztZQUV2QyxLQUFLLE1BQU0sS0FBSyxJQUFJLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzNDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDO2dCQUNyQyxJQUFJLElBQUksS0FBSyxZQUFZLEVBQUU7b0JBQ3pCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2xELFlBQVksR0FBRyxJQUFJLENBQUM7aUJBQ3JCO3FCQUFNO29CQUNMLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNuRTthQUNGO1lBRUQsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7WUFFMUIsS0FBSyxNQUFNLEtBQUssSUFBSSxnQkFBZ0IsRUFBRTtnQkFDcEMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLEdBQUcsS0FBSyxDQUFDO2dCQUVoRCxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztnQkFDMUMsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztnQkFFMUMsTUFBTSxTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDaEUsTUFBTSxZQUFZLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxXQUFXLENBQUM7Z0JBRXpELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM5QyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLE1BQU0sSUFBSSxHQUFHLFNBQVMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFFN0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO3dCQUNoQyxJQUFJLEVBQUUsSUFBSTt3QkFDVixHQUFHLEVBQUUsSUFBSTt3QkFDVCxLQUFLLEVBQUUsUUFBUTt3QkFDZixNQUFNLEVBQUUsU0FBUzt3QkFDakIsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPOzRCQUMzQixDQUFDLENBQUMsWUFBWSxFQUFFLE9BQU87NEJBQ3ZCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSztnQ0FDbkIsQ0FBQyxDQUFDLFNBQVM7Z0NBQ1gsQ0FBQyxDQUFDLFNBQVM7d0JBQ2IsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLElBQUksRUFBRSxPQUFPO3FCQUNkLENBQUMsQ0FBQztvQkFFSCxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUV4QixJQUFJLFNBQVMsQ0FBQyxTQUFTLEtBQUssTUFBTSxFQUFFO3dCQUNsQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQzt3QkFDekMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUM7d0JBRXZELE1BQU0sVUFBVSxHQUFHLFNBQVMsR0FBRyxRQUFRLENBQUM7d0JBQ3hDLE1BQU0sYUFBYSxHQUFHLFFBQVEsR0FBRyxlQUFlLENBQUM7d0JBRWpELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDOzRCQUVwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQzlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUNyQztnQ0FDRSxNQUFNLEVBQUUsTUFBTTtnQ0FDZCxXQUFXLEVBQUUsR0FBRztnQ0FDaEIsVUFBVSxFQUFFLEtBQUs7Z0NBQ2pCLE9BQU8sRUFBRSxLQUFLOzZCQUNmLENBQ0YsQ0FBQzs0QkFFRixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3lCQUN4Qjt3QkFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUN4QyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQzs0QkFFdkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUNsQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxTQUFTLENBQUMsRUFDdEM7Z0NBQ0UsTUFBTSxFQUFFLE1BQU07Z0NBQ2QsV0FBVyxFQUFFLEdBQUc7Z0NBQ2hCLFVBQVUsRUFBRSxLQUFLO2dDQUNqQixPQUFPLEVBQUUsS0FBSzs2QkFDZixDQUNGLENBQUM7NEJBRUYsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzt5QkFDNUI7cUJBQ0Y7b0JBRUQsaUJBQWlCLEVBQUUsQ0FBQztpQkFDckI7Z0JBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUNyQyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxHQUFHLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFDbkQ7b0JBQ0UsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPO3dCQUMzQixDQUFDLENBQUMsWUFBWSxFQUFFLE9BQU87d0JBQ3ZCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSzs0QkFDbkIsQ0FBQyxDQUFDLFNBQVM7NEJBQ1gsQ0FBQyxDQUFDLFNBQVM7b0JBQ2IsV0FBVyxFQUFFLENBQUM7b0JBQ2QsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLE9BQU8sRUFBRSxLQUFLO2lCQUNmLENBQ0YsQ0FBQztnQkFFRixPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUU5QixJQUFJLFdBQVcsQ0FBQyxXQUFXLEtBQUssTUFBTSxFQUFFO29CQUN0QyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7b0JBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7d0JBQ3pDLElBQUksRUFBRSxJQUFJLEdBQUcsUUFBUSxHQUFHLFlBQVk7d0JBQ3BDLEdBQUcsRUFBRSxZQUFZO3dCQUNqQixRQUFRLEVBQUUsQ0FBQzt3QkFDWCxVQUFVLEVBQUUsT0FBTzt3QkFDbkIsVUFBVSxFQUFFLEtBQUs7d0JBQ2pCLElBQUksRUFBRSxTQUFTO3dCQUNmLE9BQU8sRUFBRSxPQUFPO3dCQUNoQixPQUFPLEVBQUUsUUFBUTt3QkFDakIsS0FBSyxFQUFFLFFBQVEsR0FBRyxDQUFDO3dCQUNuQixTQUFTLEVBQUUsT0FBTztxQkFDbkIsQ0FBQyxDQUFDO29CQUVILE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3pCO2dCQUVELE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLFlBQVksR0FBRyxTQUFTLEdBQUcsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUVoRSxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUVoQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ2hDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTt3QkFDaEQsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDM0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsTUFBTSxFQUFFO29CQUM3QixNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM1QyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7b0JBQ2xCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQztvQkFDOUIsTUFBTSxTQUFTLEdBQUcsUUFBUSxHQUFHLEdBQUcsQ0FBQztvQkFDakMsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO29CQUV6QixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7b0JBQ2pCLElBQUksV0FBVyxDQUFDO29CQUVoQixNQUFNLGFBQWEsR0FBRyxDQUFDLEVBQU8sRUFBRSxFQUFFO3dCQUNoQyxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7NEJBQzlCLFFBQVEsRUFBRSxFQUFFOzRCQUNaLFVBQVUsRUFBRSxPQUFPOzRCQUNuQixVQUFVLEVBQUUsS0FBSzs0QkFDakIsS0FBSyxFQUFFLFlBQVk7NEJBQ25CLFNBQVMsRUFBRSxRQUFROzRCQUNuQixPQUFPLEVBQUUsUUFBUTs0QkFDakIsT0FBTyxFQUFFLFFBQVE7NEJBQ2pCLElBQUksRUFBRSxTQUFTOzRCQUNmLFVBQVUsRUFBRSxLQUFLOzRCQUNqQixPQUFPLEVBQUUsS0FBSzs0QkFDZCxJQUFJLEVBQUUsWUFBWTs0QkFDbEIsR0FBRyxFQUFFLFlBQVk7eUJBQ2xCLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUM7b0JBRUYsR0FBRzt3QkFDRCxXQUFXLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUN0QyxRQUFRLElBQUksR0FBRyxDQUFDO3FCQUNqQixRQUFRLFdBQVcsQ0FBQyxNQUFNLEdBQUcsYUFBYSxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUU7b0JBRTdELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxlQUFlLEVBQUUsR0FBRyxPQUFPLENBQUM7b0JBRTNELE1BQU0sZUFBZSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQzt3QkFDdEMsSUFBSSxFQUFFLFlBQVk7d0JBQ2xCLEdBQUcsRUFBRSxZQUFZO3dCQUNqQixPQUFPLEVBQUUsUUFBUTt3QkFDakIsT0FBTyxFQUFFLFFBQVE7d0JBQ2pCLEtBQUssRUFBRSxTQUFTO3dCQUNoQixNQUFNLEVBQUUsVUFBVTt3QkFDbEIsSUFBSSxFQUFFLDBCQUEwQjt3QkFDaEMsVUFBVSxFQUFFLEtBQUs7d0JBQ2pCLE9BQU8sRUFBRSxLQUFLO3dCQUNkLEVBQUUsRUFBRSxDQUFDO3dCQUNMLEVBQUUsRUFBRSxDQUFDO3FCQUNOLENBQUMsQ0FBQztvQkFFSCxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztpQkFDNUM7YUFDRjtTQUNGO1FBRUQsSUFBSSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTtZQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BELE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRW5DLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztnQkFFckMsTUFBTSxTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDM0QsTUFBTSxlQUFlLEdBQUcsU0FBUyxHQUFHLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFaEUsSUFBSSxVQUFVLEdBQVcsZUFBZSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsR0FBVyxTQUFTLENBQUM7Z0JBRTFCLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtvQkFDdEMsVUFBVSxHQUFHLGVBQWUsR0FBRyxDQUFDLENBQUM7b0JBRWpDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRTt3QkFDaEIsS0FBSyxLQUFLOzRCQUNSLENBQUMsR0FBRyxTQUFTLENBQUM7NEJBQ2QsTUFBTTt3QkFDUixLQUFLLFFBQVE7NEJBQ1gsQ0FBQyxHQUFHLFNBQVMsR0FBRyxVQUFVLENBQUM7NEJBQzNCLE1BQU07d0JBQ1IsS0FBSyxRQUFROzRCQUNYLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQzs0QkFDL0IsTUFBTTt3QkFDUjs0QkFDRSxDQUFDLEdBQUcsU0FBUyxDQUFDO3FCQUNqQjtpQkFDRjtnQkFFRCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ2IsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDO2dCQUVyQixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtvQkFDdkMsS0FBSyxHQUFHLFFBQVEsQ0FBQztvQkFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQztpQkFDVjtxQkFBTTtvQkFDTCxNQUFNLFlBQVksR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO29CQUNsQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUU7d0JBQ2hCLEtBQUssTUFBTTs0QkFDVCxLQUFLLEdBQUcsWUFBWSxDQUFDOzRCQUNyQixDQUFDLEdBQUcsSUFBSSxDQUFDOzRCQUNULE1BQU07d0JBQ1IsS0FBSyxRQUFROzRCQUNYLEtBQUssR0FBRyxZQUFZLENBQUM7NEJBQ3JCLENBQUMsR0FBRyxJQUFJLEdBQUcsWUFBWSxDQUFDOzRCQUN4QixNQUFNO3dCQUNSLEtBQUssT0FBTzs0QkFDVixLQUFLLEdBQUcsWUFBWSxDQUFDOzRCQUNyQixDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUM7NEJBQzVCLE1BQU07d0JBQ1I7NEJBQ0UsS0FBSyxHQUFHLFFBQVEsQ0FBQzs0QkFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQztxQkFDWjtpQkFDRjtnQkFFRCxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7b0JBQ2pCLElBQUk7d0JBQ0YsTUFBTSxPQUFPLEdBQVEsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FDbkQsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQ2hEOzRCQUNFLFdBQVcsRUFBRSxXQUFXO3lCQUN6QixDQUNGLENBQUM7d0JBRUYsT0FBTyxDQUFDLEdBQUcsQ0FBQzs0QkFDVixJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDOzRCQUNuQixHQUFHLEVBQUUsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDOzRCQUN2QixPQUFPLEVBQUUsUUFBUTs0QkFDakIsT0FBTyxFQUFFLFFBQVE7NEJBQ2pCLE1BQU0sRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQU07NEJBQzlCLE1BQU0sRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU87NEJBQ3BDLFVBQVUsRUFBRSxLQUFLOzRCQUNqQixPQUFPLEVBQUUsS0FBSzt5QkFDZixDQUFDLENBQUM7d0JBRUgsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDdkI7b0JBQUMsT0FBTyxHQUFHLEVBQUU7d0JBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO3FCQUNwRTtpQkFDRjtxQkFBTTtvQkFDTCxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7d0JBQzVCLElBQUksRUFBRSxDQUFDO3dCQUNQLEdBQUcsRUFBRSxDQUFDO3dCQUNOLEtBQUs7d0JBQ0wsTUFBTSxFQUFFLFVBQVU7d0JBQ2xCLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxJQUFJLFNBQVM7d0JBQ3ZDLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixPQUFPLEVBQUUsS0FBSztxQkFDZixDQUFDLENBQUM7b0JBRUgsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO29CQUNqQixJQUFJLE1BQU0sQ0FBQztvQkFFWCxNQUFNLFlBQVksR0FBRyxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQ2xDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRTt3QkFDbEMsSUFBSSxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQzt3QkFDbkIsR0FBRyxFQUFFLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQzt3QkFDdkIsT0FBTyxFQUFFLFFBQVE7d0JBQ2pCLE9BQU8sRUFBRSxRQUFRO3dCQUNqQixRQUFRLEVBQUUsRUFBRTt3QkFDWixVQUFVLEVBQUUsT0FBTzt3QkFDbkIsVUFBVSxFQUFFLEtBQUs7d0JBQ2pCLElBQUksRUFBRSxPQUFPO3dCQUNiLFNBQVMsRUFBRSxRQUFRO3dCQUNuQixLQUFLLEVBQUUsS0FBSzt3QkFDWixVQUFVLEVBQUUsS0FBSzt3QkFDakIsT0FBTyxFQUFFLEtBQUs7cUJBQ2YsQ0FBQyxDQUFDO29CQUVMLEdBQUc7d0JBQ0QsTUFBTSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDaEMsUUFBUSxJQUFJLEdBQUcsQ0FBQztxQkFDakIsUUFBUSxNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO29CQUVyRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztpQkFDN0I7YUFDRjtTQUNGO1FBRUQsTUFBTSxRQUFRLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRCxNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQzdCLEtBQUssSUFBSSxJQUFJLFFBQVE7WUFDZixJQUFJLEdBQUcsUUFBUSxJQUFJLFFBQVE7WUFDM0IsSUFBSSxHQUFHLFFBQVEsSUFBSSxRQUFRLEdBQUcsU0FBUyxHQUFHLE1BQU07WUFDaEQsSUFBSSxHQUFHLFFBQVEsSUFBSSxRQUFRLEdBQUcsU0FBUyxJQUMzQyxJQUFJLEdBQUcsUUFBUSxHQUFHLE1BQ3BCLElBQUksUUFBUSxHQUFHLFNBQVM7WUFDbEIsSUFBSSxHQUFHLE1BQU0sSUFBSSxRQUFRLEdBQUcsU0FBUztZQUNyQyxJQUFJLElBQUksUUFBUSxHQUFHLFNBQVMsSUFBSSxJQUFJLElBQ3hDLFFBQVEsR0FBRyxTQUFTLEdBQUcsTUFDekI7WUFDTSxJQUFJLElBQUksUUFBUSxJQUFJLEVBQzFCO1lBQ0UsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJO2dCQUN0QixDQUFDLENBQUMsWUFBWSxFQUFFLElBQUk7Z0JBQ3BCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSztvQkFDbkIsQ0FBQyxDQUFDLFNBQVM7b0JBQ1gsQ0FBQyxDQUFDLFNBQVM7WUFDYixNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU87Z0JBQzNCLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTztnQkFDdkIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLO29CQUNuQixDQUFDLENBQUMsU0FBUztvQkFDWCxDQUFDLENBQUMsU0FBUztZQUNiLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQ0YsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FDcEMsR0FBRyxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUMvRDtZQUNFLElBQUksRUFBRSxJQUFJLEdBQUcsUUFBUSxHQUFHLENBQUM7WUFDekIsR0FBRyxFQUFFLFFBQVEsR0FBRyxTQUFTLEdBQUcsQ0FBQztZQUM3QixRQUFRLEVBQUUsQ0FBQztZQUNYLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7WUFDakIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsS0FBSyxFQUFFLFFBQVE7WUFDZixNQUFNLEVBQUUsU0FBUztTQUNsQixDQUNGLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUN4QyxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUV2RCxNQUFNLGVBQWUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDdEMsSUFBSSxFQUFFLE9BQU87WUFDYixHQUFHLEVBQUUsT0FBTztZQUNaLEtBQUssRUFBRSxXQUFXO1lBQ2xCLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLEVBQUUsRUFBRSxNQUFNO1lBQ1YsRUFBRSxFQUFFLE1BQU07WUFDVixNQUFNLEVBQUUsYUFBYTtZQUNyQixJQUFJLEVBQUUsYUFBYTtTQUNwQixDQUFDLENBQUM7UUFFSCxNQUFNLGlCQUFpQixHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FDMUMsYUFBYSxXQUFXLENBQUMsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLFdBQVcsQ0FBQyxlQUFlLFdBQVcsV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFDbEk7WUFDRSxJQUFJLEVBQUUsT0FBTyxHQUFHLFdBQVcsR0FBRyxDQUFDO1lBQy9CLEdBQUcsRUFBRSxPQUFPLEdBQUcsWUFBWSxHQUFHLENBQUM7WUFDL0IsUUFBUSxFQUFFLENBQUM7WUFDWCxVQUFVLEVBQUUsT0FBTztZQUNuQixVQUFVLEVBQUUsS0FBSztZQUNqQixJQUFJLEVBQUUsTUFBTTtZQUNaLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLFNBQVMsRUFBRSxRQUFRO1lBQ25CLEtBQUssRUFBRSxXQUFXO1lBQ2xCLE1BQU0sRUFBRSxZQUFZO1NBQ3JCLENBQ0YsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHOzs7O2FBSVQsQ0FBQztRQUVWLElBQUksU0FBUyxHQUFRLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRS9ELElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQ3hDLFNBQVMsQ0FBQyxPQUFPLEVBQ2pCLFNBQVMsQ0FBQyxPQUFPLENBQ2xCLENBQUM7UUFFRixPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ1YsTUFBTSxFQUFFLENBQUM7WUFDVCxNQUFNLEVBQUUsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUU7WUFDcEIsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFO1lBQ1gsT0FBTyxFQUFFLEtBQUs7WUFDZCxVQUFVLEVBQUUsS0FBSztZQUNqQixPQUFPLEVBQUUsSUFBSTtZQUNiLFdBQVcsRUFBRSxTQUFTO1NBQ3ZCLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRTtnQkFDekMsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN6QjtZQUNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO2dCQUFFLE9BQU87WUFFckMsSUFBSSxDQUFDLGVBQWUsR0FBRztnQkFDckIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxXQUFXO2dCQUNwQyxTQUFTLEVBQUUsV0FBVyxDQUFDLHVCQUF1QjtnQkFDOUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyw4QkFBOEI7Z0JBQ3hELFNBQVMsRUFBRSxXQUFXLENBQUMsR0FBRzthQUMzQixDQUFDO1lBRUYsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUU7Z0JBQy9DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDNUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQ3JFLENBQUM7Z0JBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUNqRSxDQUFDO2dCQUNGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUM7YUFDcEM7aUJBQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsS0FBSyxPQUFPLEVBQUU7Z0JBQ3ZELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDL0MsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQ2pFLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQzthQUNwQztZQUNELE9BQU8sSUFBSSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsQ0FBQztZQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDNUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQ25DO1lBQ0UsYUFBYTtZQUNiLFlBQVk7WUFDWixXQUFXO1lBQ1gsT0FBTztZQUNQLGNBQWM7WUFDZCxVQUFVO1lBQ1YsWUFBWTtZQUNaLFFBQVE7WUFDUixZQUFZO1lBQ1osR0FBRyxPQUFPO1lBQ1YsT0FBTztZQUNQLFdBQVc7WUFDWCxlQUFlO1lBQ2YsaUJBQWlCO1lBQ2pCLE9BQU87U0FDUixFQUNEO1lBQ0UsSUFBSSxFQUFFLENBQUM7WUFDUCxHQUFHLEVBQUUsQ0FBQztZQUNOLE9BQU8sRUFBRSxJQUFJO1lBQ2IsV0FBVyxFQUFFLFNBQVM7WUFDdEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTztZQUNuQyxZQUFZLEVBQUUsSUFBSTtZQUNsQixZQUFZLEVBQUUsSUFBSTtZQUNsQixjQUFjLEVBQUUsSUFBSTtZQUNwQixvREFBb0Q7WUFDcEQscURBQXFEO1lBQ3JELDZHQUE2RztZQUM3RyxnSEFBZ0g7WUFDaEgsS0FBSyxFQUFFLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLElBQUksQ0FBQztTQUNoRCxDQVdGLENBQUM7UUFFRixJQUNFLENBQUMsV0FBVyxFQUFFLEtBQUs7WUFDbkIsQ0FBQyxXQUFXLEVBQUUsY0FBYztZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFDdkI7WUFDQSxZQUFZLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztZQUNILFlBQVksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFO2dCQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxZQUFZLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQzFDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDbEM7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILFlBQVksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQztRQUNuRCxZQUFZLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQztRQUM3RCxZQUFZLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQztRQUN2RSxZQUFZLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFDekMsWUFBWSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ3ZDLFlBQVksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUMvQyxZQUFZLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDN0MsWUFBWSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQzdDLFlBQVksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBRWpDLDJDQUEyQztRQUMzQyxvQ0FBb0M7UUFDcEMseURBQXlEO1FBRXpELHdDQUF3QztRQUN4Qyw4Q0FBOEM7UUFDOUMsNkJBQTZCO1FBQzdCLHNDQUFzQztRQUN0QyxvQ0FBb0M7UUFDcEMsTUFBTTtRQUNOLCtDQUErQztRQUMvQyw2Q0FBNkM7UUFDN0MsbUVBQW1FO1FBQ25FLGtFQUFrRTtRQUNsRSxnRUFBZ0U7UUFDaEUsb0NBQW9DO1FBQ3BDLGtDQUFrQztRQUNsQyxNQUFNO1FBRU4sTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV6QixnQ0FBZ0M7UUFDaEMsSUFBSyxXQUFtQixFQUFFLFFBQVEsRUFBRTtZQUNsQyxJQUFJO2dCQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDaEM7WUFBQyxNQUFNLEdBQUU7WUFDVixPQUFRLFdBQW1CLENBQUMsUUFBUSxDQUFDO1NBQ3RDO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELFlBQVksQ0FDVixNQUFxQixFQUNyQixDQUFTLEVBQ1QsQ0FBUyxFQUNULEtBQWEsRUFDYixNQUFjLEVBQ2QsVUFBa0IsRUFDbEIsV0FBZ0I7UUFFaEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLFVBQVUsQ0FBQztRQUVyQyxNQUFNLFFBQVEsR0FBRztZQUNmLE9BQU87WUFDUCxLQUFLLFNBQVMsSUFBSTtZQUNsQixLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0IsS0FBSyxLQUFLLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxQixLQUFLLFNBQVMsSUFBSSxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QyxLQUFLLFNBQVMsSUFBSSxNQUFNLEVBQUU7WUFDMUIsT0FBTyxNQUFNLEVBQUU7WUFDZixHQUFHO1NBQ0osQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFWixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3RDLElBQUksRUFBRSxTQUFTO1lBQ2YsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7UUFFSCxNQUFNLGFBQWEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdkMsVUFBVSxFQUFFLE9BQU87WUFDbkIsVUFBVSxFQUFFLE1BQU07WUFDbEIsSUFBSSxFQUFFLE9BQU87WUFDYixLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQ1YsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7WUFDakIsSUFBSSxFQUFFLEVBQUU7WUFDUixHQUFHLEVBQUUsTUFBTSxHQUFHLENBQUM7WUFDZixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFDLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxhQUFhLEVBQUU7WUFDckMsTUFBTSxLQUFLLEdBQUcsYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQztTQUM5QztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUM1QyxJQUFJLEVBQUUsQ0FBQztZQUNQLEdBQUcsRUFBRSxDQUFDO1lBQ04sVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTztZQUNuQyxZQUFZLEVBQUUsSUFBSTtZQUNsQixZQUFZLEVBQUUsSUFBSTtZQUNsQixlQUFlLEVBQUUsSUFBSTtZQUNyQixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7U0FDekIsQ0FHQSxDQUFDO1FBRUYsS0FBSyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO1FBRXpCLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELDBCQUEwQixDQUN4QixNQUFxQixFQUNyQixDQUFTLEVBQ1QsQ0FBUyxFQUNULENBQVMsRUFDVCxLQUFhLEVBQ2IsTUFBYyxFQUNkLE9BQVk7UUFFWixNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDM0IsS0FBSztZQUNMLE1BQU07WUFDTixFQUFFLEVBQUUsQ0FBQztZQUNMLEVBQUUsRUFBRSxDQUFDO1lBQ0wsSUFBSSxFQUFFLFNBQVM7WUFDZixNQUFNLEVBQUUsU0FBUztZQUNqQixXQUFXLEVBQUUsQ0FBQztZQUNkLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1NBQ2xCLENBQUMsQ0FBQztRQUVILE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQ25ELEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQztZQUNoQixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7WUFDakIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsUUFBUSxFQUFFLEtBQUs7WUFDZixlQUFlLEVBQUUsSUFBSTtTQUN0QixDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFMUMsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUyxHQUFHLEtBQUssQ0FBQyxDQUFDO1NBQzlDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQzNDLElBQUksRUFBRSxDQUFDO1lBQ1AsR0FBRyxFQUFFLENBQUM7WUFDTixLQUFLLEVBQUUsQ0FBQztZQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU87WUFDbkMsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7U0FDbEIsQ0FHQSxDQUFDO1FBRUYsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUM7UUFDekIsS0FBSyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7UUFFckIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQixJQUFLLE9BQWUsRUFBRSxRQUFRLEVBQUU7WUFDOUIsSUFBSTtnQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ2hDO1lBQUMsTUFBTSxHQUFFO1lBQ1YsT0FBUSxPQUFlLENBQUMsUUFBUSxDQUFDO1NBQ2xDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTTtRQUNKLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDN0MsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUM5RCxDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM3QyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxNQUFNLENBQzlELENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekQsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3pCLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYTtZQUN4QixHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDdkIsS0FBSyxFQUFFLEtBQUs7WUFDWixNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxTQUFTO1lBQ2YsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsaUNBQWlDO1FBQy9CLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7UUFFckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2hELE1BQU0sU0FBUyxHQUFHLE9BQW9CLENBQUM7WUFDdkMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQWMsQ0FBQztZQUU3RCxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbkQsTUFBTSxZQUFZLEdBQUcsY0FBMkIsQ0FBQztnQkFDakQsTUFBTSxHQUFHLEdBQUcsWUFBWTtxQkFDckIsR0FBRyxDQUFDLGlCQUFpQixDQUFDO29CQUN2QixFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDNUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDckQsQ0FBQyxDQUFDLENBQUM7Z0JBRUwsSUFBSSxHQUFHO29CQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9ELE1BQU0sWUFBWSxHQUFHLGNBQTJCLENBQUM7WUFDakQsTUFBTSxHQUFHLEdBQUcsWUFBWTtpQkFDckIsR0FBRyxDQUFDLGlCQUFpQixDQUFDO2dCQUN2QixFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDNUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxDQUFDO1lBRUwsSUFBSSxHQUFHO2dCQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsK0JBQStCO1FBQzdCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7UUFFckMsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzdDLE1BQU0sU0FBUyxHQUFHLE9BQW9CLENBQUM7WUFDdkMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQWMsQ0FBQztZQUUvRCxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRTtnQkFDN0MsTUFBTSxZQUFZLEdBQUcsSUFBaUIsQ0FBQztnQkFDdkMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQWdCLENBQUM7Z0JBQzVELE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQWdCLENBQUM7Z0JBRXhFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDaEQsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUNWLEVBQUUsQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLO29CQUN0RCxFQUFFLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxDQUM3RCxDQUFDO2dCQUNGLE1BQU0sVUFBVSxHQUFHLFFBQVEsRUFBRSxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLFVBQVU7b0JBQUUsT0FBTztnQkFFeEIsK0JBQStCO2dCQUMvQixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsWUFBWTtxQkFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQzlCLFNBQVMsQ0FBQyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtvQkFDOUIsOEZBQThGO29CQUM5RixVQUFVLENBQUMsV0FBVzt3QkFDcEIsUUFBUSxLQUFLLFFBQVE7NEJBQ25CLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLElBQUksUUFBUTs0QkFDdEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQkFDZixJQUFJLENBQUMsNkJBQTZCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2pELENBQUMsQ0FBQyxDQUFDO2dCQUVMLDJFQUEyRTtnQkFDM0UsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsWUFBWTtxQkFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQzlCLFNBQVMsQ0FBQyxDQUFDLE1BQWMsRUFBRSxFQUFFO29CQUM1QixJQUFJLFdBQVcsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO3dCQUNsQyxVQUFVLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUNoRDtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFFTCxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMzRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzVELE1BQU0sWUFBWSxHQUFHLElBQWlCLENBQUM7WUFDdkMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQWdCLENBQUM7WUFDNUQsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBZ0IsQ0FBQztZQUN4RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxVQUFVO2dCQUFFLE9BQU87WUFFeEIsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFlBQVk7aUJBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUMsQ0FBQyxRQUFnQixFQUFFLEVBQUU7Z0JBQzlCLFVBQVUsQ0FBQyxXQUFXO29CQUNwQixRQUFRLEtBQUssUUFBUTt3QkFDbkIsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEtBQUssSUFBSSxRQUFRO3dCQUN0QyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUNmLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztZQUVMLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLFlBQVk7aUJBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxXQUFXLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtvQkFDbEMsVUFBVSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7b0JBQ2hDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDaEQ7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVMLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDZCQUE2QixDQUFDLFVBQWU7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTTthQUN0QixVQUFVLEVBQUU7YUFDWixJQUFJLENBQ0gsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsRUFBRSxPQUFPLEtBQUssUUFBUSxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLFVBQVUsQ0FBQyxHQUFHLENBQ3pELENBQUM7UUFFWCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFDbkIsS0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7UUFFeEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM3QyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxFQUFFLElBQUksS0FBSyxTQUFTLENBQ1osQ0FBQztRQUU5QyxJQUFJLE9BQU8sRUFBRTtZQUNWLE9BQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFxQixFQUFFLFFBQWdCO1FBQ2xELElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNwQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRW5ELGlFQUFpRTtRQUNqRSxNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVsQyxxRUFBcUU7UUFDckUsTUFBTSxNQUFNLEdBQVEsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixPQUFPO1NBQ1I7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFbkIsOERBQThEO1FBQzlELE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxNQUFXLEVBQUUsbUJBQTRCLEtBQUs7UUFDdkUsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsZUFBZSxHQUFHO2dCQUNyQixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7Z0JBQy9CLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztnQkFDM0IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO2dCQUNqQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7Z0JBQzNCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO2dCQUMzQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7YUFDMUIsQ0FBQztZQUVGLElBQUksQ0FBQyxxQkFBcUIsQ0FDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQzlCLGdCQUFnQixDQUNqQixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsU0FBaUIsRUFBRSxtQkFBNEIsS0FBSztRQUN4RSxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDaEUsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUN4QyxDQUFDO1FBRUYsSUFBSSxzQkFBc0IsRUFBRTtZQUMxQixJQUFJLENBQUMsdUJBQXVCLEdBQUc7Z0JBQzdCLGNBQWMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWM7Z0JBQ2pELGVBQWUsRUFBRTtvQkFDZixHQUFHLHNCQUFzQjtvQkFDekIsV0FBVyxFQUFFLGVBQWUsQ0FDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FDakU7aUJBQ0Y7Z0JBQ0QsY0FBYyxFQUFFLGdCQUFnQjthQUNqQyxDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyx1QkFBdUIsR0FBRztnQkFDN0IsY0FBYyxFQUFFLEVBQUU7Z0JBQ2xCLGVBQWUsRUFBRTtvQkFDZixTQUFTLEVBQUUsU0FBUztvQkFDcEIsV0FBVyxFQUFFLGVBQWUsQ0FDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FDakU7b0JBQ0QsYUFBYSxFQUFFLElBQUk7aUJBQ3BCO2dCQUNELGNBQWMsRUFBRSxnQkFBZ0I7YUFDakMsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUI7UUFDdkIsTUFBTSxPQUFPLEdBQUc7WUFDZCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDeEIsQ0FBQztRQUVGLElBQUk7WUFDRixNQUFNLEdBQUcsR0FBUSxNQUFNLGNBQWMsQ0FDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQ3pDLENBQUM7WUFDRixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDO1lBRXZCLElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0JBQzFDLE9BQU87d0JBQ0wsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHO3dCQUNWLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxXQUFXLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUU7d0JBQ3pFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7cUJBQzdDLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzNEO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQzlCLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsYUFBYSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7U0FDdEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFjLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFjLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUkseUJBQXlCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQWMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQzFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxLQUFLLFVBQVUsQ0FDN0MsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxTQUFpQjtRQUNwQyxPQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBZTthQUMvQyxFQUFFLENBQUMsU0FBUyxDQUFDO2FBQ2IsR0FBRyxDQUFDLGVBQWUsQ0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxlQUFlLENBQUMsU0FBaUI7UUFDL0IsT0FBUSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQWU7YUFDL0MsRUFBRSxDQUFDLFNBQVMsQ0FBQzthQUNiLEdBQUcsQ0FBQyxVQUFVLENBQWMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUF1QjtRQUNuRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUN6QixXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLGFBQWEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekUsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQixhQUFhLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQ2pDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFlBQVksQ0FBQyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUF1QjtRQUNyRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUN6QixXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLGVBQWUsRUFBRTtnQkFDZixlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdEMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3RCO1lBQ0QsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM3QyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBaUIsRUFBRSxTQUFvQztRQUNsRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDckMsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNyQixNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsK0JBQStCO1FBQ3RFLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyw2QkFBNkI7UUFFbkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFFNUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUM5QixNQUFNLENBQUMsSUFBSSxDQUNULENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUMsYUFBYSxLQUFLLEdBQUcsQ0FDbkUsQ0FBQztRQUVKLE1BQU0sTUFBTSxHQUFHLFNBQVMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEQsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBRXpFLGlEQUFpRDtRQUNqRCx1Q0FBdUM7UUFDdkMsaURBQWlEO1FBQ2pELElBQUksaUJBQWlCLEtBQUssQ0FBQyxJQUFJLGlCQUFpQixLQUFLLENBQUMsRUFBRTtZQUN0RCxJQUFJLEVBQUU7Z0JBQUUsRUFBRSxDQUFDLFFBQVEsSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDO1lBQzdDLElBQUksRUFBRTtnQkFBRSxFQUFFLENBQUMsUUFBUSxJQUFJLE1BQU0sR0FBRyxZQUFZLENBQUM7WUFFN0MsSUFBSSxFQUFFLEVBQUU7Z0JBQ04sRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtvQkFDOUIsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUM7d0JBQ25CLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsWUFBWSxDQUFDO2dCQUN6RCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxpREFBaUQ7UUFDakQsOENBQThDO1FBQzlDLGlEQUFpRDtRQUNqRCxJQUNFLGlCQUFpQixLQUFLLENBQUM7WUFDdkIsaUJBQWlCLEtBQUssQ0FBQztZQUN2QixpQkFBaUIsS0FBSyxDQUFDLEVBQ3ZCO1lBQ0EsSUFBSSxFQUFFO2dCQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksTUFBTSxHQUFHLGFBQWEsQ0FBQztZQUU5QyxJQUFJLEVBQUUsRUFBRTtnQkFDTixFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFO29CQUM5QixFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDbkIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUM7Z0JBQzFELENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxNQUFNLFNBQVMsR0FBRyxRQUFRLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQztZQUMxQyxNQUFNLFVBQVUsR0FBRyxFQUFFLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQztZQUNyQyxNQUFNLFVBQVUsR0FBRyxFQUFFLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQztZQUVyQyw2Q0FBNkM7WUFDN0MsSUFBSSxDQUFDLGlCQUFpQixLQUFLLENBQUMsSUFBSSxpQkFBaUIsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzlELEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQyxDQUFDO2FBQ3BFO1lBRUQsNkNBQTZDO1lBQzdDLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLElBQUksaUJBQWlCLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM5RCxFQUFFLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUMsQ0FBQztnQkFFbkUsSUFBSSxFQUFFLEVBQUU7b0JBQ04sRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTt3QkFDOUIsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUM7NEJBQ25CLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO29CQUMxRCxDQUFDLENBQUMsQ0FBQztpQkFDSjthQUNGO1lBRUQsbURBQW1EO1lBQ25ELE1BQU0sU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksU0FBUyxHQUFHLEVBQUcsQ0FBQyxRQUFRLEVBQUU7Z0JBQzVCLElBQUksRUFBRSxFQUFFO29CQUNOLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FDM0IsRUFBRSxDQUFDLFFBQVEsR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFHLENBQUMsUUFBUSxDQUFDLENBQ3pDLENBQUM7aUJBQ0g7YUFDRjtTQUNGO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYSxDQUNYLFdBQTZCLEVBQzdCLFlBQW9CLEVBQ3BCLFNBQWtCO1FBRWxCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUVyQyxJQUFJLFdBQVcsS0FBSyxNQUFNLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFeEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEQsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN2QztTQUNGO2FBQU0sSUFBSSxXQUFXLEtBQUssT0FBTyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFakQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7U0FDRjtRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELGtCQUFrQixDQUNoQixXQUE2QixFQUM3QixZQUFvQixFQUNwQixTQUFrQjtRQUVsQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFckMsSUFBSSxXQUFXLEtBQUssTUFBTSxFQUFFO1lBQzFCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFN0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEQsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM1QztTQUNGO2FBQU0sSUFBSSxXQUFXLEtBQUssT0FBTyxFQUFFO1lBQ2xDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFdEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7U0FDRjtRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELHFCQUFxQixDQUNuQixRQUFnQixFQUNoQixXQUE2QixFQUM3QixZQUFvQixFQUNwQixTQUFrQjtRQUVsQixJQUFJLENBQUMsVUFBVTthQUNaLGtCQUFrQixDQUFDLFFBQVEsQ0FBQzthQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUM7WUFDVCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxXQUFXLEtBQUssTUFBTSxFQUFFO29CQUMxQixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUM5QixNQUFNLFNBQVMsR0FBRyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO29CQUMvQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO3dCQUNyQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVc7d0JBQ3JDLGVBQWUsRUFBRSxZQUFZLENBQUMsR0FBRzt3QkFDakMsR0FBRyxFQUFFLFNBQVM7cUJBQ2YsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxlQUFlLENBQUMsU0FBVSxDQUFDLENBQUMsVUFBVSxDQUN6QyxZQUFZLEVBQ1osWUFBWSxDQUNiLENBQUM7b0JBQ0YsTUFBTSxXQUFXLEdBQUc7d0JBQ2xCLEdBQUcsWUFBWTt3QkFDZixlQUFlLEVBQUUsWUFBWSxDQUFDLEdBQUc7d0JBQ2pDLEdBQUcsRUFBRSxTQUFTO3FCQUNmLENBQUM7b0JBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFVLEdBQUcsQ0FBQyxDQUFFLENBQUM7b0JBQ3RELE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUc7d0JBQy9CLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7d0JBQ2pDLEdBQUcsV0FBVzt3QkFDZCxjQUFjLEVBQUUsSUFBSTtxQkFDckIsQ0FBQztpQkFDSDtxQkFBTSxJQUFJLFdBQVcsS0FBSyxPQUFPLEVBQUU7b0JBQ2xDLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQzlCLE1BQU0sU0FBUyxHQUFHLE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7b0JBQy9DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7d0JBQ3JDLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVzt3QkFDckMsZUFBZSxFQUFFLFlBQVksQ0FBQyxHQUFHO3dCQUNqQyxHQUFHLEVBQUUsU0FBUztxQkFDZixDQUFDLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFlLENBQUMsVUFBVSxDQUM1RCxZQUFZLEVBQ1osWUFBWSxDQUNiLENBQUM7b0JBQ0YsTUFBTSxXQUFXLEdBQUc7d0JBQ2xCLEdBQUcsWUFBWTt3QkFDZixlQUFlLEVBQUUsWUFBWSxDQUFDLEdBQUc7d0JBQ2pDLEdBQUcsRUFBRSxTQUFTO3FCQUNmLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUc7d0JBQzNDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO3dCQUM3QyxHQUFHLFdBQVc7d0JBQ2QsY0FBYyxFQUFFLElBQUk7cUJBQ3JCLENBQUM7aUJBQ0g7Z0JBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7WUFDbEMsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUMvRCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU0sQ0FDSixLQUFVLEVBQ1Ysb0JBQXNDLEVBQ3RDLHVCQUFnQztRQUVoQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUNyQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQztRQUNqRCxNQUFNLGtCQUFrQixHQUFHLG9CQUFvQixLQUFLLE9BQU8sQ0FBQztRQUU1RCxNQUFNLGVBQWUsR0FBYyxhQUFhO1lBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CO1lBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV6QyxNQUFNLG9CQUFvQixHQUFjLGtCQUFrQjtZQUN4RCxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQjtZQUMzQixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBOEIsQ0FBQyxDQUFDO1FBRXpELE1BQU0sY0FBYyxHQUFHLGFBQWE7WUFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYTtZQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLENBQ2pFLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUV0QixNQUFNLG1CQUFtQixHQUFHLGtCQUFrQjtZQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO1lBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLENBQUMsWUFBWTtpQkFDZCxFQUFFLENBQUMsb0JBQThCLENBQUM7aUJBQ2xDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLENBQy9CLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUV0QixNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUM1QyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQ2YsT0FBTyxDQUFDLEdBQUcsS0FBSyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUMzRSxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQ2pCLHVCQUF1QixLQUFLLFNBQVM7WUFDbkMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FDM0IsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUNmLE9BQU8sQ0FBQyxHQUFHO2dCQUNYLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUM7b0JBQzFELEVBQUUsS0FBSyxDQUNaO1lBQ0gsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztRQUVsQyxNQUFNLFNBQVMsR0FBRztZQUNoQixhQUFhLEVBQUUsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLGFBQWE7WUFDMUQsOEJBQThCLEVBQzVCLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyw4QkFBOEI7U0FDL0QsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxhQUFhO1lBQy9ELDhCQUE4QixFQUM1QixtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyw4QkFBOEI7U0FDcEUsQ0FBQztRQUVGLElBQUksY0FBYyxLQUFLLG1CQUFtQixFQUFFO1lBQzFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDLGFBQWE7Z0JBQzlDLFNBQVMsQ0FBQyxhQUFhLENBQUM7WUFDMUIsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUMsOEJBQThCO2dCQUMvRCxTQUFTLENBQUMsOEJBQThCLENBQUM7WUFDM0MsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1lBQ3RFLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyw4QkFBOEI7Z0JBQzFELFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQztTQUM1QzthQUFNO1lBQ0wsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1lBQ3RFLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyw4QkFBOEI7Z0JBQzFELFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQztTQUM1QztRQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsZUFBZSxDQUFDLFFBQVEsRUFDeEIsb0JBQW9CLENBQUMsUUFBUSxFQUM3QixJQUFJLENBQUMsWUFBWSxFQUNqQixhQUFhLENBQ2QsQ0FBQztRQUVGLElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsYUFBYSxDQUNkLENBQUM7UUFFRiwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4Qiw2QkFBNkI7UUFDN0IsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDO0lBQ2xDLENBQUM7SUFDRCxVQUFVO0lBQ1YseUJBQXlCO0lBQ3pCLDRDQUE0QztJQUM1QyxxQ0FBcUM7SUFDckMsTUFBTTtJQUNOLHlDQUF5QztJQUN6Qyw0REFBNEQ7SUFDNUQsaUVBQWlFO0lBRWpFLHFEQUFxRDtJQUNyRCxrQ0FBa0M7SUFDbEMsb0RBQW9EO0lBRXBELCtEQUErRDtJQUMvRCxrQ0FBa0M7SUFDbEMsOERBQThEO0lBRTlELHlDQUF5QztJQUN6QyxxQ0FBcUM7SUFDckMsOEJBQThCO0lBQzlCLGlGQUFpRjtJQUNqRiwyQkFBMkI7SUFFM0IsbURBQW1EO0lBQ25ELHFDQUFxQztJQUNyQyw4QkFBOEI7SUFDOUIsNEJBQTRCO0lBQzVCLGdEQUFnRDtJQUNoRCx5Q0FBeUM7SUFDekMsMkJBQTJCO0lBRTNCLG9EQUFvRDtJQUNwRCx3QkFBd0I7SUFDeEIsd0JBQXdCO0lBQ3hCLHVFQUF1RTtJQUN2RSxPQUFPO0lBRVAsMEJBQTBCO0lBQzFCLDRDQUE0QztJQUM1Qyx5Q0FBeUM7SUFDekMsOEJBQThCO0lBQzlCLDhCQUE4QjtJQUM5QiwyRUFBMkU7SUFDM0Usd0JBQXdCO0lBQ3hCLFlBQVk7SUFDWix1Q0FBdUM7SUFFdkMsd0JBQXdCO0lBQ3hCLGtFQUFrRTtJQUNsRSxzQ0FBc0M7SUFDdEMsc0VBQXNFO0lBQ3RFLE9BQU87SUFDUCx3QkFBd0I7SUFDeEIsdUVBQXVFO0lBQ3ZFLHNDQUFzQztJQUN0QywyRUFBMkU7SUFDM0UsT0FBTztJQUVQLGtEQUFrRDtJQUNsRCx5REFBeUQ7SUFDekQsaUNBQWlDO0lBQ2pDLDBFQUEwRTtJQUMxRSxrREFBa0Q7SUFDbEQsNkVBQTZFO0lBQzdFLHFFQUFxRTtJQUNyRSxrREFBa0Q7SUFDbEQsYUFBYTtJQUNiLDZFQUE2RTtJQUM3RSxxRUFBcUU7SUFDckUsa0RBQWtEO0lBQ2xELE1BQU07SUFFTiw0QkFBNEI7SUFDNUIsZ0NBQWdDO0lBQ2hDLHFDQUFxQztJQUNyQywrQkFBK0I7SUFDL0Isb0JBQW9CO0lBQ3BCLE9BQU87SUFFUCw0QkFBNEI7SUFDNUIsc0JBQXNCO0lBQ3RCLDJCQUEyQjtJQUMzQixxQkFBcUI7SUFDckIsb0JBQW9CO0lBQ3BCLE9BQU87SUFFUCxnREFBZ0Q7SUFDaEQsNkJBQTZCO0lBQzdCLGtDQUFrQztJQUNsQyxnREFBZ0Q7SUFDaEQscUNBQXFDO0lBQ3JDLElBQUk7SUFFSixjQUFjO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUV6QixNQUFNLGdCQUFnQixHQUFHO1lBQ3ZCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBa0I7U0FDakIsQ0FBQztRQUVuQixJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ3BDLE1BQU0sRUFBRSxLQUFLO1lBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztZQUNmLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztZQUNuQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsVUFBVSxFQUFFLENBQUM7U0FDZCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFbkQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLE1BQU0sQ0FBQztRQUM5RSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFVBQWU7UUFDeEMsSUFBSTtZQUNGLElBQUksYUFBYSxHQUFRO2dCQUN2QixHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO3FCQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7cUJBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQztxQkFDcEMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDO2dCQUN0RSxVQUFVLEVBQUUsVUFBVSxDQUFDLE1BQU07YUFDOUIsQ0FBQztZQUVGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLEdBQUcsYUFBYSxFQUFFLENBQUM7WUFFaEQsSUFDRSxVQUFVLENBQUMsTUFBTSxLQUFLLFVBQVU7Z0JBQ2hDLFVBQVUsQ0FBQyxNQUFNLEtBQUssWUFBWSxFQUNsQztnQkFDQSxJQUNFLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUs7b0JBQ2xDLEVBQUUsV0FBVyxFQUFFO29CQUNmLEVBQUUsUUFBUSxDQUFDLHVCQUF1QixDQUFDLEVBQ3JDO29CQUNBLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztpQkFDbEU7Z0JBRUQsYUFBYSxHQUFHO29CQUNkLEdBQUcsYUFBYTtvQkFDaEIsR0FBRyxVQUFVLENBQUMsV0FBVztvQkFDekIsTUFBTSxFQUFFO3dCQUNOLEdBQUcsYUFBYSxDQUFDLE1BQU07d0JBQ3ZCLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNO3FCQUNqQztpQkFDRixDQUFDO2dCQUVGLGFBQWEsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEtBQWEsRUFBRSxFQUFFO29CQUM1RCxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixFQUFFO3dCQUNyRCxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDN0MsQ0FBQyxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUM7d0JBQzNDLENBQUMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDNUIsQ0FBQyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN0RCxDQUFDO3FCQUNIO29CQUVELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUN4RCxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUNyRCxDQUFDO29CQUVGLElBQUksU0FBUyxFQUFFO3dCQUNiLGFBQWEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO3FCQUMzRDt5QkFBTTt3QkFDTCxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztxQkFDbkI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUVELElBQ0UsVUFBVSxDQUFDLE1BQU0sS0FBSyxZQUFZO2dCQUNsQyxVQUFVLENBQUMsTUFBTSxLQUFLLGVBQWUsRUFDckM7Z0JBQ0EsSUFBSSxDQUFDLG1CQUFtQixHQUFHO29CQUN6QixHQUFHLGFBQWE7b0JBQ2hCLFFBQVEsRUFBRSxTQUFTO2lCQUNwQixDQUFDO2dCQUVGLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztnQkFFNUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLE9BQU87YUFDUjtZQUVELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFFckMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7WUFDeEQsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUV0QixNQUFNLE9BQU8sR0FBRztnQkFDZCxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7Z0JBQ2pCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7Z0JBQ3JCLFVBQVUsRUFBRSxVQUFVLENBQUMsTUFBTTtnQkFDN0IsUUFBUSxFQUFFLFVBQVUsQ0FBQyxPQUFPO2dCQUM1QixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7Z0JBQzdCLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztnQkFDM0IsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO2FBQzVCLENBQUM7WUFFRixNQUFNLEdBQUcsR0FBRyxNQUFNLGNBQWMsQ0FDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsQ0FDdkQsQ0FBQztZQUVGLElBQUksQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxPQUFPO2dCQUFFLE9BQU87WUFFL0MsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtnQkFDckMsYUFBYSxHQUFHO29CQUNkLEdBQUcsYUFBYTtvQkFDaEIsR0FBRyxVQUFVLENBQUMsV0FBVztpQkFDMUIsQ0FBQzthQUNIO1lBRUQsTUFBTSxvQkFBb0IsR0FBRztnQkFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUztnQkFDekMsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLFFBQVEsRUFBRSxTQUFTO2FBQ3BCLENBQUM7WUFFRixNQUFNLGNBQWMsQ0FDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUN6RCxDQUFDO1lBRUYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakQ7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLCtCQUErQixDQUFDLENBQUM7WUFDakUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN4RDtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCLENBQUMsUUFBYTtRQUN4QyxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksTUFBTSxFQUFFO1lBQzlCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEtBQUssTUFBTSxFQUFFO2dCQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzVDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUNyRSxDQUFDO2dCQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FDakUsQ0FBQztnQkFDRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDO2FBQ3BDO2lCQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEtBQUssT0FBTyxFQUFFO2dCQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQy9DLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUNqRSxDQUFDO2dCQUNGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUM7YUFDcEM7WUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsS0FBYSxFQUFFLEVBQUU7Z0JBQzlELElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLEVBQUU7b0JBQzdELEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxLQUFLLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztvQkFDbkQsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUNoQyxLQUFLLENBQUMsZUFBZSxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzlELENBQUM7aUJBQ0g7Z0JBQ0QsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ3ZELENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQ3pELENBQUM7Z0JBQ0YsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO2lCQUMvRDtxQkFBTTtvQkFDTCxLQUFLLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztpQkFDdkI7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQ0UsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSztnQkFDM0IsRUFBRSxXQUFXLEVBQUU7Z0JBQ2YsRUFBRSxRQUFRLENBQUMsdUJBQXVCLENBQUMsRUFDckM7Z0JBQ0EsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUM3QjtZQUNELElBQUksQ0FBQyxtQkFBbUIsR0FBRztnQkFDekIsR0FBRyxJQUFJLENBQUMsbUJBQW1CO2dCQUMzQixHQUFHLFFBQVEsQ0FBQyxJQUFJO2FBQ2pCLENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDNUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFFeEIsT0FBTztTQUNSO1FBRUQsSUFDRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sR0FBRyxDQUFDO1lBQ2xDLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSxHQUFHLENBQUM7WUFDcEMsUUFBUSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQzVDO1lBQ0EsSUFBSSxDQUFDLGdCQUFnQixDQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQ2xCLFFBQVEsRUFDUixLQUFLLENBQ04sQ0FBQztZQUNGLE9BQU87U0FDUjtRQUVELElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUMsT0FBTztTQUNSO1FBRUQsSUFBSSxRQUFRLEVBQUUsUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLEVBQUUsU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUN2RSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUMsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLFFBQVEsS0FBSyxRQUFRLEVBQUU7WUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUNuRCxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRyxDQUN6QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUV0QixNQUFNLE1BQU0sR0FBRyxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FDcEMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FDbEQsQ0FBQztZQUVGLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU87WUFFcEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzlCLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxPQUFPLENBQy9DLENBQUM7WUFFRixJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPO1lBRW5CLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUMvQixDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsU0FBUyxDQUNuRCxDQUFDO1lBRUYsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUVwQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFO2dCQUMvQixNQUFNLElBQUksR0FBRztvQkFDWCxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7b0JBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsR0FBRztvQkFDcEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHO29CQUNsQixTQUFTLEVBQUUsTUFBTSxDQUFDLEdBQUc7b0JBQ3JCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtvQkFDbkIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO29CQUMzQixRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRO29CQUV2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU87b0JBQzFCLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTztpQkFDM0IsQ0FBQztnQkFFRixJQUFJLENBQUMsVUFBVSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDNUQsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ1osSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTs0QkFDN0IsSUFBSSxLQUFLLEVBQUUsU0FBUyxLQUFLLGNBQWMsRUFBRTtnQ0FDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7b0NBQ3BELE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7d0NBQ3hDLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRTs0Q0FDbEQsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7eUNBQ3ZCO29DQUNILENBQUMsQ0FBQyxDQUFDO2dDQUNMLENBQUMsQ0FBQyxDQUFDO2dDQUNILElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO29DQUNwRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUU7d0NBQ2xELE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO3FDQUN2QjtnQ0FDSCxDQUFDLENBQUMsQ0FBQztnQ0FDSCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0NBQ3BCLE9BQU87NkJBQ1I7NEJBRUQsSUFBSSxLQUFLLEVBQUUsU0FBUyxLQUFLLGdCQUFnQixFQUFFO2dDQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtvQ0FDcEQsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDeEMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUNmLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQ2pELENBQUM7Z0NBQ0osQ0FBQyxDQUFDLENBQUM7Z0NBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO29DQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQ2xDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FDZixPQUFPLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUNqRCxDQUFDO2dDQUVKLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQ0FDcEIsT0FBTzs2QkFDUjs0QkFFRCxJQUFJLEtBQUssRUFBRSxTQUFTLEtBQUssaUJBQWlCLEVBQUU7Z0NBQzFDLE1BQU0sRUFDSixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLDBCQUEwQixFQUMxQixpQ0FBaUMsR0FDbEMsR0FBRyxNQUFNLENBQUM7Z0NBRVgsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixLQUFLLE9BQU8sQ0FBQztnQ0FDL0QsTUFBTSxrQkFBa0IsR0FBRyx3QkFBd0IsS0FBSyxPQUFPLENBQUM7Z0NBRWhFLE1BQU0sVUFBVSxHQUFHLGFBQWE7b0NBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWE7b0NBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQy9CLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FDVixFQUFFLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxxQkFBcUI7d0NBQy9DLEVBQUUsQ0FBQyxhQUFhLEtBQUssTUFBTSxDQUFDLHVCQUF1QixDQUN0RCxFQUFFLFFBQVEsQ0FBQztnQ0FFaEIsTUFBTSxlQUFlLEdBQUcsa0JBQWtCO29DQUN4QyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO29DQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUMvQixDQUFDLEVBQU8sRUFBRSxFQUFFLENBQ1YsRUFBRSxDQUFDLFdBQVcsS0FBSyx3QkFBd0I7d0NBQzNDLEVBQUUsQ0FBQyxhQUFhLEtBQUssMEJBQTBCLENBQ2xELEVBQUUsUUFBUSxDQUFDO2dDQUVoQixJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsZUFBZTtvQ0FBRSxPQUFPO2dDQUU1QyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUN0QyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQ2hDLENBQUM7Z0NBQ0YsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDO29DQUFFLE9BQU87Z0NBRS9CLE1BQU0sbUJBQW1CLEdBQUcsZUFBZTtxQ0FDeEMsR0FBRyxDQUFDLENBQUMsT0FBWSxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQ0FDakMsT0FBTztvQ0FDUCxhQUFhLEVBQUUsQ0FBQztpQ0FDakIsQ0FBQyxDQUFDO3FDQUNGLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dDQUV4QyxJQUFJLGdCQUF3QixDQUFDO2dDQUU3QixJQUFJLGlDQUFpQyxJQUFJLENBQUMsRUFBRTtvQ0FDMUMsZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxJQUFJLENBQUMsQ0FBQztpQ0FDL0Q7cUNBQU0sSUFDTCxpQ0FBaUMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLEVBQzlEO29DQUNBLGdCQUFnQjt3Q0FDZCxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7NENBQzdDLEVBQUUsYUFBYSxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUM7aUNBQy9DO3FDQUFNO29DQUNMLGdCQUFnQjt3Q0FDZCxtQkFBbUIsQ0FBQyxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7NENBQ3hELEVBQUUsYUFBYSxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUM7aUNBQy9DO2dDQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsVUFBVSxFQUNWLGVBQWUsRUFDZixXQUFXLEVBQ1gsZ0JBQWdCLENBQ2pCLENBQUM7Z0NBRUYsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0NBQ3ZELFlBQVksQ0FBQyxxQkFBcUIsR0FBRyx3QkFBd0IsQ0FBQztnQ0FDOUQsWUFBWSxDQUFDLHVCQUF1QjtvQ0FDbEMsMEJBQTBCLENBQUM7Z0NBQzdCLFlBQVksQ0FBQyw4QkFBOEI7b0NBQ3pDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztnQ0FFdkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dDQUNwQixPQUFPOzZCQUNSO3lCQUNGO3dCQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO3dCQUN0QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM1QyxDQUFDO2lCQUNGLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxJQUFJLFFBQVEsRUFBRSxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FDcEQsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FDekMsQ0FBQztZQUNGLElBQUksQ0FBQyxRQUFRO2dCQUFFLE9BQU87WUFFdEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQ3BDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxRQUFRLENBQ2xELENBQUM7WUFDRixJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBRXBCLG1GQUFtRjtZQUVuRixzQkFBc0I7WUFFdEIsd0ZBQXdGO1lBRXhGLHVCQUF1QjtZQUV2QixJQUFJLGFBQWEsR0FBUSxJQUFJLENBQUM7WUFFOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQ3BELE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7b0JBQ3hDLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRTt3QkFDbEQsYUFBYSxHQUFHLE9BQU8sQ0FBQztxQkFDekI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO2dCQUNwRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUU7b0JBQ2xELGFBQWEsR0FBRyxPQUFPLENBQUM7aUJBQ3pCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxxQ0FBcUM7WUFDckMsTUFBTSxJQUFJLEdBQUc7Z0JBQ1gsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHO2dCQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLEdBQUc7Z0JBQ3BCLHNCQUFzQjtnQkFDdEIseUJBQXlCO2dCQUN6QixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ25CLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtnQkFDM0IsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO2dCQUMzQixPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU87Z0JBQzFCLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTzthQUMzQixDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzVELElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNaLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7d0JBQzdCLDZDQUE2Qzt3QkFDN0Msc0JBQXNCO3dCQUN0Qix3QkFBd0I7d0JBQ3hCLCtDQUErQzt3QkFDL0MsdUNBQXVDO3dCQUN2QyxvQkFBb0I7d0JBQ3BCLE1BQU07d0JBRU4sZ0RBQWdEO3dCQUNoRCxzQkFBc0I7d0JBQ3RCLHdCQUF3Qjt3QkFDeEIseUNBQXlDO3dCQUN6Qyx1Q0FBdUM7d0JBQ3ZDLG9CQUFvQjt3QkFDcEIsTUFBTTt3QkFFTixpREFBaUQ7d0JBQ2pELHNCQUFzQjt3QkFDdEIsd0JBQXdCO3dCQUN4Qix1Q0FBdUM7d0JBQ3ZDLG9CQUFvQjt3QkFDcEIsTUFBTTt3QkFDTiwrRkFBK0Y7d0JBQy9GLHFEQUFxRDt3QkFDckQsOENBQThDO3dCQUM5Qyw4Q0FBOEM7d0JBQzlDLDRDQUE0Qzt3QkFDNUMsK0NBQStDO3dCQUMvQyxRQUFRO3dCQUVSLDhEQUE4RDt3QkFDOUQsOENBQThDO3dCQUM5QywyQ0FBMkM7d0JBQzNDLGlCQUFpQjt3QkFDakIsUUFBUTt3QkFFUixzQkFBc0I7d0JBQ3RCLHdCQUF3Qjt3QkFDeEIsa0NBQWtDO3dCQUNsQyxvQkFBb0I7d0JBQ3BCLE1BQU07d0JBRU4sSUFBSTt3QkFFSixJQUFJO3dCQUNKLElBQ0UsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxLQUFLOzRCQUN2QyxFQUFFLFdBQVcsRUFBRTs0QkFDZixFQUFFLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQzs0QkFDQSxPQUFPLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7eUJBQ3pDO3dCQUNELE1BQU0sT0FBTyxHQUFHOzRCQUNkLFNBQVMsRUFBRSxhQUFhLENBQUMsR0FBRzs0QkFDNUIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0I7NEJBQy9CLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTt5QkFDNUIsQ0FBQzt3QkFFRixJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQzs0QkFDcEQsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0NBQ1osSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dDQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDNUMsQ0FBQzs0QkFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO2dDQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLENBQUM7NEJBQzlELENBQUM7eUJBQ0YsQ0FBQyxDQUFDO3dCQUNILE9BQU87cUJBQ1I7b0JBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUMsQ0FBQztnQkFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO29CQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQzNELENBQUM7YUFDRixDQUFDLENBQUM7WUFDSCxJQUFJO1NBQ0w7UUFFRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsUUFBUSxLQUFLLElBQUksRUFBRTtZQUMzQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQy9DLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQ3pDLENBQUM7WUFDRixJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBRXRCLE1BQU0sTUFBTSxHQUFHLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUNwQyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsUUFBUSxDQUNsRCxDQUFDO1lBRUYsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUVwQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDOUIsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLE9BQU8sQ0FDL0MsQ0FBQztZQUVGLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU87WUFFbkIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQy9CLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxTQUFTLENBQ25ELENBQUM7WUFFRixJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBRXBCLElBQUksYUFBYSxHQUFRLElBQUksQ0FBQztZQUU5QixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtnQkFDcEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtvQkFDeEMsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFO3dCQUNsRCxhQUFhLEdBQUcsT0FBTyxDQUFDO3FCQUN6QjtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQ3BELElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRTtvQkFDbEQsYUFBYSxHQUFHLE9BQU8sQ0FBQztpQkFDekI7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUU7Z0JBQy9CLE1BQU0sSUFBSSxHQUFHO29CQUNYLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRztvQkFDakIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHO29CQUNwQixPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUc7b0JBQ2xCLFNBQVMsRUFBRSxNQUFNLENBQUMsR0FBRztvQkFDckIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO29CQUNuQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7b0JBQzNCLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVE7b0JBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTztvQkFDMUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPO2lCQUMzQixDQUFDO2dCQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUM1RCxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTt3QkFDWixJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFOzRCQUM3QixJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssV0FBVyxFQUFFO2dDQUNuQyxhQUFhLEdBQUc7b0NBQ2QsR0FBRyxhQUFhO29DQUNoQixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7b0NBQy9CLFFBQVEsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7b0NBQ3pELEtBQUssRUFBRSxLQUFLO2lDQUNiLENBQUM7NkJBQ0g7aUNBQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtnQ0FDeEMsTUFBTSxPQUFPLEdBQUcsYUFBYSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtvQ0FDekQsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ25DLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FDaEIsRUFBRSxDQUFDLGNBQWMsSUFBSSxRQUFRLENBQUMsY0FBYzt3Q0FDNUMsRUFBRSxDQUFDLFlBQVksSUFBSSxRQUFRLENBQUMsWUFBWTt3Q0FDeEMsRUFBRSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSTt3Q0FDeEIsRUFBRSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsS0FBSzt3Q0FDMUIsRUFBRSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsS0FBSyxDQUM3QixDQUFDO2dDQUNKLENBQUMsQ0FBQyxDQUFDO2dDQUVILGFBQWEsR0FBRztvQ0FDZCxHQUFHLGFBQWE7b0NBQ2hCLFFBQVEsRUFBRSxPQUFPO29DQUNqQixLQUFLLEVBQUUsS0FBSztpQ0FDYixDQUFDOzZCQUNIO2lDQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxZQUFZLEVBQUU7Z0NBQzNDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUNoRCxDQUFDLEVBQU8sRUFBRSxFQUFFO29DQUNWLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUNuQyxDQUFDO29DQUNGLElBQUksS0FBSyxFQUFFO3dDQUNULE9BQU87NENBQ0wsR0FBRyxFQUFFOzRDQUNMLGNBQWMsRUFBRSxLQUFLLENBQUMsaUJBQWlCOzRDQUN2QyxZQUFZLEVBQUUsS0FBSyxDQUFDLGVBQWU7NENBQ25DLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUTs0Q0FDckIsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFROzRDQUNyQixRQUFRLEVBQUUsS0FBSyxDQUFDLFdBQVc7eUNBQzVCLENBQUM7cUNBQ0g7b0NBQ0QsT0FBTyxFQUFFLENBQUM7Z0NBQ1osQ0FBQyxDQUNGLENBQUM7Z0NBRUYsYUFBYSxHQUFHO29DQUNkLEdBQUcsYUFBYTtvQ0FDaEIsUUFBUSxFQUFFLGVBQWU7b0NBQ3pCLEtBQUssRUFBRSxLQUFLO2lDQUNiLENBQUM7NkJBQ0g7NEJBRUQsTUFBTSxPQUFPLEdBQUc7Z0NBQ2QsU0FBUyxFQUFFLGFBQWEsQ0FBQyxHQUFHO2dDQUM1QixJQUFJLEVBQUUsYUFBYTs2QkFDcEIsQ0FBQzs0QkFFRixJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQ0FDcEQsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7b0NBQ1osSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29DQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQ0FDNUMsQ0FBQztnQ0FDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO29DQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLENBQUM7Z0NBQzlELENBQUM7NkJBQ0YsQ0FBQyxDQUFDOzRCQUNILE9BQU87eUJBQ1I7d0JBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO3dCQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDNUMsQ0FBQztvQkFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO3dCQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUM7b0JBQzNELENBQUM7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUF1QixFQUFFLFlBQTBCO1FBQ25FLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxJQUFLLEdBQUcsU0FBUyxDQUFDLElBQUssQ0FBQztRQUNyRCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBSSxHQUFHLFNBQVMsQ0FBQyxHQUFJLENBQUM7UUFFbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztZQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELHFCQUFxQixDQUNuQixHQUFrQixFQUNsQixHQUFpRTtRQUVqRSxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbkMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRVgsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUU7WUFDeEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztTQUMzQjtRQUNELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ3RCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDekI7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFDakQsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ2pELEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0RDtRQUVELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUssR0FBRyxFQUFFLENBQUM7WUFDMUIsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBSSxHQUFHLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDakI7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxRQUF1QjtRQUM3QyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyw2QkFBNkI7UUFFbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU07YUFDeEIsVUFBVSxFQUFFO2FBQ1osTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzRCxNQUFNLFVBQVUsR0FBRyxDQUNqQixDQUErRCxFQUMvRCxDQUFTLEVBQ1QsRUFBRTtZQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN0QyxDQUFDLENBQUM7UUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRTtZQUN4QyxPQUFPLENBQUMsQ0FDTixDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUk7Z0JBQzFCLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSTtnQkFDMUIsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHO2dCQUN6QixDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FDMUIsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUVGLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNoRCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXRELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQy9CLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMzQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3RELE9BQU8sY0FBYyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsU0FBaUI7UUFDMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM1QyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ3pFLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUNsQjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDaEI7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVLENBQUMsU0FBaUI7UUFDMUIsTUFBTSxPQUFPLEdBQUc7WUFDZCxXQUFXLEVBQUUsTUFBTTtZQUNuQixRQUFRLEVBQUUsRUFBRTtZQUNaLElBQUksRUFBRSxJQUFJO1lBQ1YsU0FBUyxFQUFFLE9BQU87WUFDbEIsS0FBSyxFQUFFLENBQUM7WUFDUixhQUFhLEVBQUUsU0FBUyxHQUFHLENBQUM7WUFDNUIsZ0JBQWdCLEVBQUU7Z0JBQ2hCLENBQUMsRUFBRSxDQUFDO2dCQUNKLENBQUMsRUFBRSxDQUFDO2dCQUNKLElBQUksRUFBRSxJQUFJO2FBQ1g7WUFDRCxRQUFRLEVBQUUsRUFBRTtZQUNaLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FDeEQsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUNaLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUNsRSxDQUFDO1FBRUYsbUNBQW1DO1FBQ25DLFFBQVE7UUFDUixzREFBc0Q7UUFDdEQsdURBQXVEO1FBQ3ZELHVFQUF1RTtRQUN2RSw2Q0FBNkM7UUFDN0Msb0RBQW9EO1FBQ3BELG9EQUFvRDtRQUNwRCxnRUFBZ0U7UUFDaEUsK0RBQStEO1FBQy9ELGFBQWE7UUFFYixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sU0FBUyxHQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FDakMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEtBQUssVUFBVSxDQUM3QyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFFakIsTUFBTSxXQUFXLEdBQUc7WUFDbEIsV0FBVyxFQUFFLFVBQVU7WUFDdkIsUUFBUSxFQUFFLENBQUM7WUFDWCxJQUFJLEVBQUUsSUFBSTtZQUNWLFNBQVMsRUFBRSxJQUFJO1lBQ2YsS0FBSyxFQUFFLENBQUM7WUFDUixhQUFhLEVBQUUsU0FBUyxHQUFHLENBQUM7WUFDNUIsZ0JBQWdCLEVBQUU7Z0JBQ2hCLENBQUMsRUFBRSxDQUFDO2dCQUNKLENBQUMsRUFBRSxDQUFDO2dCQUNKLElBQUksRUFBRSxJQUFJO2FBQ1g7WUFDRCxRQUFRLEVBQUUsRUFBRTtZQUNaLGFBQWEsRUFBRSxFQUFFO1NBQ2xCLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQTZCLEVBQUUsU0FBa0I7UUFDbkUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3JDLE1BQU0sUUFBUSxHQUFRLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0UsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNuQyxNQUFNLFNBQVMsR0FBRyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQy9DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDckMsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXO1lBQ3JDLGVBQWUsRUFBRSxZQUFZLENBQUMsR0FBRztZQUNqQyxHQUFHLEVBQUUsU0FBUztTQUNmLENBQUMsQ0FBQztRQUVILE1BQU0sV0FBVyxHQUFHO1lBQ2xCLEdBQUcsWUFBWTtZQUNmLGVBQWUsRUFBRSxZQUFZLENBQUMsR0FBRztZQUNqQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQzVDLEdBQUcsRUFBRSxTQUFTO1lBQ2QsY0FBYyxFQUFFLElBQUk7WUFDcEIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBRUYsSUFBSSxXQUFXLEtBQUssTUFBTSxFQUFFO1lBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXRELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3JCLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQ3BDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQ3BDLENBQUM7WUFDRixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVwQyxJQUFJLFFBQVEsRUFBRTtnQkFDWixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFFdEMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ3JDLE1BQU0sUUFBUSxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBRTVDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFNUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLE1BQU0sU0FBUyxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVwRCxNQUFNLFNBQVMsR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRW5ELFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO2dCQUMzQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztnQkFDM0MsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7YUFDL0M7WUFFQSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxTQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFlLENBQUMsSUFBSSxDQUNsRSxZQUFZLENBQ2IsQ0FBQztZQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDbEU7YUFBTSxJQUFJLFdBQVcsS0FBSyxPQUFPLEVBQUU7WUFDbEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDbEMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFDcEMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDcEMsQ0FBQztZQUVGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ25DLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQ3JDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3JDLENBQUM7WUFFRixpQ0FBaUM7WUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUN4QyxjQUFjLEVBQ2QsZUFBZSxDQUNoQixDQUFDO1lBRUYsSUFBSSxTQUFTLEVBQUU7Z0JBQ2Isb0RBQW9EO2dCQUNwRCxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDcEUsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDckU7aUJBQU07Z0JBQ0wsV0FBVztnQkFDWCxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDcEM7WUFFQSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBeUIsRUFBRSxTQUFrQjtRQUMvRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFckMsTUFBTSxPQUFPLEdBQUc7WUFDZCxHQUFHLEVBQUUsT0FBTyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDakMsV0FBVyxFQUFFLGFBQWE7WUFDMUIsV0FBVyxFQUFFLE9BQU87WUFDcEIsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ3RELG1CQUFtQixFQUFFO2dCQUNuQixLQUFLLEVBQUUsQ0FBQztnQkFDUixJQUFJLEVBQUUsSUFBSTthQUNYO1lBQ0Qsa0JBQWtCLEVBQUU7Z0JBQ2xCLEtBQUssRUFBRSxDQUFDO2dCQUNSLElBQUksRUFBRSxJQUFJO2FBQ1g7U0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFFdkMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDckIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFDakMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FDakMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3JCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQ2hDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQ2hDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNsQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLGFBQWEsQ0FBQztZQUM1QyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDakIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxPQUFPLElBQUksTUFBTSxFQUFFO1lBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RELElBQUksUUFBUSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQ2pDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUU1QyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2xELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQztnQkFDbkIsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sU0FBUyxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFbkQsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ25DLENBQUMsR0FBRyxRQUFRLENBQUM7YUFDZDtZQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUNyQix1QkFBdUIsRUFBRSxTQUFVLEdBQUcsQ0FBQztnQkFDdkMscUJBQXFCLEVBQUUsTUFBTTthQUM5QixDQUFDLENBQUM7WUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxTQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFlLENBQUMsSUFBSSxDQUN2RSxhQUFhLENBQ2QsQ0FBQztZQUNGLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDN0Q7YUFBTSxJQUFJLE9BQU8sS0FBSyxPQUFPLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQWUsQ0FBQyxJQUFJLENBQzNELGFBQWEsQ0FDZCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDbkU7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQy9DLElBQUksQ0FBQyxNQUFNLEVBQ1gsQ0FBQyxFQUNELENBQUMsRUFDRCxDQUFDLEVBQ0QsQ0FBQyxFQUNELENBQUMsRUFDRCxPQUFPLENBQ1IsQ0FBQztRQUVGLGNBQWM7UUFDZCxJQUFJO1lBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ2hDO1FBQUMsTUFBTSxHQUFFO1FBRVYsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELG1CQUFtQixDQUFDLGFBQXFCLEVBQUUsY0FBc0I7UUFDL0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUVqQyx1QkFBdUI7UUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDMUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRS9DLDhCQUE4QjtRQUM5QixNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxpQkFBaUI7UUFDbEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4RCxrQkFBa0I7UUFDbEIsS0FBSyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFBRSxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ3ZELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRTtnQkFDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFFcEMsTUFBTSxDQUFDLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRTNDLE1BQU0sUUFBUSxHQUFHO29CQUNmLElBQUksRUFBRSxDQUFDO29CQUNQLEdBQUcsRUFBRSxDQUFDO29CQUNOLEtBQUssRUFBRSxhQUFhO29CQUNwQixNQUFNLEVBQUUsY0FBYztpQkFDdkIsQ0FBQztnQkFFRixrQkFBa0I7Z0JBQ2xCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDdEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUNuQyxPQUFPLENBQUMsQ0FDTixJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUs7d0JBQzFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSTt3QkFDdEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNO3dCQUN6QyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FDdEMsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNmLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQ2pCO2FBQ0Y7U0FDRjtRQUVELE9BQU8sSUFBSSxDQUFDLENBQUMsc0JBQXNCO0lBQ3JDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRTtnQkFDakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQVMsQ0FBQztnQkFDckQsSUFBSSxNQUFNLElBQUssTUFBYyxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUU7b0JBQ3BELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztpQkFDdkI7Z0JBRUQsSUFBSSxNQUFNLElBQUssTUFBYyxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7b0JBQ2hELElBQUksTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7d0JBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztxQkFDOUM7aUJBQ0Y7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7UUFDWixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBUyxDQUFDO1FBRXBELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFO1lBQzNDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FDOUMsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUNWLEVBQUUsQ0FBQyxXQUFXLEtBQUssVUFBVTtnQkFDN0IsRUFBRSxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FDakQsQ0FBQztZQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDVixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3hCO1lBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQWlCO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDNUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLEdBQUcsQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUNoRSxDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07WUFDbkQsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFBRSxPQUFPO1FBRWhELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FDOUMsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLEVBQUUsQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUN6RSxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQ3BELENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FDdkMsQ0FBQztRQUVGLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDOUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDBCQUEwQixDQUN4QixDQUFnQixFQUNoQixDQUFnQixFQUNoQixZQUFvQixDQUFDO1FBRXJCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFcEMsT0FBTyxDQUFDLENBQ04sQ0FDRSxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxTQUFTLElBQUkseUJBQXlCO1lBQ3BGLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSx3QkFBd0I7WUFDbkYsT0FBTyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxJQUFJLGVBQWU7WUFDekUsT0FBTyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUN2RCxDQUFDLGVBQWU7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxTQUFpQjtRQUt4QyxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFO1lBQ2xELElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDdkQsS0FBSyxNQUFNLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO29CQUN0QyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFO3dCQUM3QixPQUFPOzRCQUNMLHVCQUF1QixFQUFFLE9BQU8sQ0FBQyx1QkFBdUIsSUFBSSxJQUFJOzRCQUNoRSxxQkFBcUIsRUFBRSxPQUFPLENBQUMscUJBQXFCLElBQUksSUFBSTs0QkFDNUQsYUFBYSxFQUFFLE9BQU8sQ0FBQyxTQUFTO3lCQUNqQyxDQUFDO3FCQUNIO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhLEVBQUUsSUFBWSxFQUFFLEdBQUcsR0FBRyxHQUFHO1FBQzdDLElBQUksTUFBYyxDQUFDO1FBRW5CLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUNqQixNQUFNLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQy9CO2FBQU0sSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ3hCLE1BQU0sR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztTQUMzQjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1NBQ3hEO1FBRUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBYyxFQUFFLElBQVksRUFBRSxHQUFHLEdBQUcsR0FBRztRQUNoRCxJQUFJLEtBQWEsQ0FBQztRQUVsQiw0RkFBNEY7UUFFNUYsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ2pCLEtBQUssR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDL0I7YUFBTSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDeEIsS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztTQUM3QjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1NBQ3hEO1FBRUQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUk7WUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRTtnQkFDdkUsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7WUFDSCxPQUFPLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztTQUN6RTtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCO1FBQ3JCLElBQUk7WUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRTtnQkFDbkUsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7WUFFSCxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQztZQUNqRCxRQUFRLENBQUMsaUJBQWlCLENBQUMsV0FBVztnQkFDcEMsNEZBQTRGLENBQUM7WUFFL0YsT0FBTyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUM7U0FDekU7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsUUFBYztRQUNyQyxNQUFNLGtCQUFrQixHQUN0QixRQUFRO1lBQ1IsSUFBSSxDQUFDLE1BQU07aUJBQ1IsVUFBVSxFQUFFO2lCQUNaLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUUsR0FBVyxDQUFDLFNBQVMsQ0FBQztpQkFDdkMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNiLEVBQUUsRUFBRyxHQUFXLENBQUMsU0FBUztnQkFDMUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJO2dCQUNYLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRztnQkFDVixLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDO2FBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ1IsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUV6QixLQUFLLE1BQU0sT0FBTyxJQUFJLGtCQUFrQixFQUFFO1lBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRTtnQkFDckIsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7Z0JBQ25DLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO2dCQUNuQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7YUFDckIsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtZQUMvQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ3BCLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQztnQkFDM0MsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7YUFDcEQ7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQzlDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUU7Z0JBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVDLElBQUksZ0JBQWdCLEVBQUU7b0JBQ3BCLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO29CQUMzQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQztvQkFDM0MsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7aUJBQ3BEO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw4QkFBOEI7UUFDNUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTTthQUNqQyxVQUFVLEVBQUU7YUFDWixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFFLEdBQVcsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDO2FBQ2xELEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNiLEVBQUUsRUFBRyxHQUFXLENBQUMsSUFBSSxFQUFFLEdBQUc7WUFDMUIsS0FBSyxFQUFHLEdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVztZQUNyQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUk7WUFDWCxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUc7WUFDVixLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDO1lBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQ3RELE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO1NBQ3pELENBQUMsQ0FBQyxDQUFDO1FBRU4sTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBR25CLENBQUM7UUFDSixLQUFLLE1BQU0sS0FBSyxJQUFJLGdCQUFnQixFQUFFO1lBQ3BDLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFDWixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7b0JBQ25CLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO29CQUNqQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztvQkFDakMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO29CQUNsQixDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU07b0JBQ2YsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLO2lCQUNmLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtnQkFDL0MsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLElBQUksZUFBZSxFQUFFO29CQUNuQixFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQztvQkFDMUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO29CQUNsRCxFQUFFLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUM7b0JBQ2pELEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQztpQkFDakQ7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDOUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtnQkFDcEMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLElBQUksZUFBZSxFQUFFO29CQUNuQixFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQztvQkFDMUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO29CQUNsRCxFQUFFLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUM7b0JBQ2pELEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQztpQkFDakQ7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTTthQUNyQixVQUFVLEVBQUU7YUFDWixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFFLEdBQVcsQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDO2FBQ2hELEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ1gsT0FBTztnQkFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztnQkFDbkMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7Z0JBQ3JDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDO2dCQUN6RCxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksQ0FBQztnQkFDM0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2dCQUNoQixXQUFXLEVBQUcsR0FBVyxDQUFDLElBQUk7YUFDL0IsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUwsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUV6QixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRTtZQUN2QixNQUFNLENBQUMsR0FBRyxDQUNSLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsRUFDbEUsSUFBSSxDQUFDLElBQUksQ0FDUCxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXO2dCQUM1RCxHQUFHLENBQUMsV0FBVyxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FDbkUsQ0FDRixDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUM5QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNqRSxJQUFJLE9BQU8sRUFBRTtnQkFDWCxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUN4QixDQUFDLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7YUFDNUI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx5QkFBeUI7UUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU07YUFDckIsVUFBVSxFQUFFO2FBQ1osTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBRSxHQUFXLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQzthQUNwRCxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNYLE9BQU87Z0JBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7Z0JBQ25DLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO2dCQUNyQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxDQUFDO2dCQUNsRCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7Z0JBQ2hCLFdBQVcsRUFBRyxHQUFXLENBQUMsSUFBSTthQUMvQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFTCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRXpCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQzNCLE1BQU0sQ0FBQyxHQUFHLENBQ1IsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxFQUMxRSxJQUFJLENBQUMsSUFBSSxDQUNQLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDTixHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsS0FBSyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVc7Z0JBQ2hFLEdBQUcsQ0FBQyxXQUFXLENBQUMsYUFBYSxLQUFLLFFBQVEsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUN2RSxDQUNGLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQzlDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLElBQUksV0FBVyxFQUFFO2dCQUNmLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDO2dCQUN2QyxDQUFDLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLENBQUMsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQzthQUNoQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBb0IsS0FBSztRQUMxQyxJQUFJLFFBQVEsRUFBRTtZQUNaLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hCLE9BQU87YUFDUjtZQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLGVBQWUsRUFBRTtnQkFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDO2FBQ3BDO1NBQ0Y7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUNwRCxPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUN4QyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUNyRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWE7YUFDeEQsTUFBTSxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDekMsR0FBRyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDcEIsTUFBTSxFQUFFLHFCQUFxQixFQUFFLHVCQUF1QixFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQy9ELE9BQU8sQ0FBQztZQUNWLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwQyxNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUc7WUFDM0IsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3BCLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNsRCxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDWixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDN0QsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxPQUFPLEdBQVE7WUFDbkIsSUFBSSxFQUFFLEtBQUs7WUFDWCxhQUFhLEVBQUUsRUFBRTtZQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTO1lBQy9CLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVE7WUFDakMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRztTQUM1QixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLFFBQVEsRUFBRTtZQUNyQyxzQkFBc0I7WUFDdEIsT0FBTyxDQUFDLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQztZQUM5QyxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUN0QjthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxhQUFhLEVBQUU7WUFDakQsT0FBTyxDQUFDLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQztZQUM5QyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNwQixPQUFPLENBQUMsTUFBTTtnQkFDWixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDekMsQ0FBQyxNQUFNLENBQUM7U0FDWjthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUU7WUFDN0MsT0FBTyxDQUFDLGFBQWEsR0FBRyxzQkFBc0IsQ0FBQztZQUMvQyxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUN0QjthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxjQUFjLEVBQUU7WUFDbEQsT0FBTyxDQUFDLGFBQWEsR0FBRyxzQkFBc0IsQ0FBQztZQUMvQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNwQixPQUFPLENBQUMsTUFBTTtnQkFDWixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDMUMsQ0FBQyxNQUFNLENBQUM7U0FDWjthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLEVBQUU7WUFDeEMsT0FBTyxDQUFDLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQztZQUMxQyxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUN0QjthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUU7WUFDN0MsT0FBTyxDQUFDLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQztZQUMxQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNwQixPQUFPLENBQUMsTUFBTTtnQkFDWixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1NBQzFFO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUU7WUFDakUsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsSUFBSTtZQUNWLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSw4QkFBOEI7U0FDbkUsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3ZELFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBQy9DLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDOUIsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRTtnQkFDOUIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztnQkFDcEMsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRTtvQkFDdEMsUUFBUSxHQUFHLElBQUksQ0FBQztpQkFDakI7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLGNBQWMsRUFBRTtvQkFDM0MsUUFBUSxHQUFHLFNBQVMsQ0FBQztpQkFDdEI7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLGFBQWEsRUFBRTtvQkFDMUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztpQkFDckI7Z0JBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFO29CQUM1QyxJQUFJLGNBQWMsR0FBRzt3QkFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRzt3QkFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTzt3QkFDL0IsUUFBUSxFQUFFLFFBQVE7d0JBQ2xCLE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUTtxQkFDekIsQ0FBQztvQkFDRixJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzt3QkFDNUQsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUUsR0FBRSxDQUFDO3FCQUN2QixDQUFDLENBQUM7aUJBQ0o7Z0JBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUM1QyxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTt3QkFDakIsSUFBSSxHQUFHLEVBQUUsTUFBTSxLQUFLLFNBQVMsRUFBRTs0QkFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUM3RCxJQUFJLENBQUMsZ0JBQWdCLENBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFDbEIsRUFBRSxDQUNILENBQUM7NEJBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzt5QkFDdkQ7b0JBQ0gsQ0FBQztvQkFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO3dCQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLENBQUM7b0JBQzVELENBQUM7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRWhDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQ3ZCLDJDQUEyQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUNsRyxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQVksRUFBRSxPQUFZO1FBQ3BDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRztnQkFDZixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7Z0JBQ2hELE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtnQkFDeEQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO2FBQ3BELENBQUM7WUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDMUQsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO3dCQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQzt3QkFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDO3dCQUMxQixJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTs0QkFDL0MsOEJBQThCOzRCQUM5QixvREFBb0Q7NEJBQ3BELElBQUk7NEJBQ0osSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRTtnQ0FDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQzs2QkFDcEQ7NEJBQ0QsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRTtnQ0FDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7NkJBQzVDO3dCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO3FCQUNqQztvQkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtvQkFDVixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO29CQUM5RCxNQUFNLEVBQUUsQ0FBQztnQkFDWCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVM7UUFDakIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzVFLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFDRSxJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVE7Z0JBQ3ZCLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEVBQzVEO2dCQUNBLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQzthQUNqRDtpQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksU0FBUyxFQUFFO2dCQUN0RSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsQ0FBQzthQUMzRDtpQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksVUFBVSxFQUFFO2dCQUN2RSxPQUFPLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUM7YUFDeEQ7aUJBQU07Z0JBQ0wsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDbkMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO2lCQUNoRDtxQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ3RCLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztpQkFDOUM7Z0JBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO2FBQ3pEO1NBQ0Y7UUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQVU7UUFDekIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUM7SUFDbkQsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQVUsRUFBRSxRQUFpQixLQUFLO1FBQ2pELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUNwQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztRQUVsQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQU0sR0FBRyxLQUFLLENBQUMsTUFBTyxDQUFDO1FBQy9DLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU8sQ0FBQztRQUVqRCxNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDM0IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2QsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2IsS0FBSyxFQUFFLFNBQVMsR0FBRyxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxVQUFVLEdBQUcsQ0FBQztZQUN0QixFQUFFLEVBQUUsQ0FBQztZQUNMLEVBQUUsRUFBRSxDQUFDO1lBQ0wsTUFBTSxFQUFFLFNBQVM7WUFDakIsV0FBVyxFQUFFLENBQUM7WUFDZCxJQUFJLEVBQUUsYUFBYTtZQUNuQixVQUFVLEVBQUUsS0FBSztZQUNqQixPQUFPLEVBQUUsS0FBSztZQUNkLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUM7WUFDdkIsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFFNUIsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUVuQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFZixNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsT0FBTzthQUNSO1lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FDVixFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFDZDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDOUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtvQkFDZixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTt3QkFDN0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUN2QixPQUFPO3FCQUNSO29CQUVELElBQUksQ0FBQyxPQUFPLENBQ1YsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQ2Q7d0JBQ0UsUUFBUSxFQUFFLEdBQUc7d0JBQ2IsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7d0JBQzlDLFVBQVUsRUFBRSxHQUFHLEVBQUU7NEJBQ2YsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0NBQzdCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQ0FDdkIsT0FBTzs2QkFDUjs0QkFFRCxNQUFNLEVBQUUsQ0FBQzs0QkFDVCxJQUFJLE1BQU0sR0FBRyxFQUFFLEVBQUU7Z0NBQ2YsU0FBUyxFQUFFLENBQUM7NkJBQ2I7aUNBQU07Z0NBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtvQ0FDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29DQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7aUNBQ2hDOzZCQUNGO3dCQUNILENBQUM7cUJBQ0YsQ0FDRixDQUFDO2dCQUNKLENBQUM7YUFDRixDQUNGLENBQUM7UUFDSixDQUFDLENBQUM7UUFFRixTQUFTLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFRCxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlO1lBQUUsT0FBTztRQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDLENBQUM7SUFFRiw4QkFBOEIsQ0FDNUIsRUFDRSxjQUFjLEVBQ2QsTUFBTSxHQUlQLEVBQ0QsbUJBQTRCLEtBQUs7UUFFakMsSUFBSSxhQUFhLEdBQUcsY0FBYztZQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxjQUFjLENBQUM7WUFDMUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVOLElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRTtZQUNyQixJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDeEQsYUFBYSxHQUFHLENBQUMsQ0FBQzthQUNuQjtpQkFBTTtnQkFDTCxhQUFhLEVBQUUsQ0FBQzthQUNqQjtTQUNGO2FBQU0sSUFBSSxNQUFNLEtBQUssVUFBVSxFQUFFO1lBQ2hDLElBQUksYUFBYSxJQUFJLENBQUMsRUFBRTtnQkFDdEIsYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQ3JEO2lCQUFNO2dCQUNMLGFBQWEsRUFBRSxDQUFDO2FBQ2pCO1NBQ0Y7YUFBTSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3JDLGFBQWEsR0FBRyxDQUFDLENBQUM7U0FDbkI7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUM7UUFFdkUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU07YUFDOUIsVUFBVSxFQUFFO2FBQ1osSUFBSSxDQUNILENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxHQUFHLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLGlCQUFpQixDQUN2QyxDQUFDO1FBRWhDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUUzQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ25DLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVSLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELFVBQVU7UUFDUixNQUFNLE9BQU8sR0FBUTtZQUNuQixJQUFJLEVBQUUsS0FBSztZQUNYLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVM7WUFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTtZQUNqQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHO1lBQzNCLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87U0FDaEMsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxRQUFRLEVBQUU7WUFDckMsT0FBTyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7WUFDeEIsc0JBQXNCO1lBQ3RCLE9BQU8sQ0FBQyxhQUFhLEdBQUcscUJBQXFCLENBQUM7WUFDOUMsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDdEI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssYUFBYSxFQUFFO1lBQ2pELE9BQU8sQ0FBQyxhQUFhLEdBQUcscUJBQXFCLENBQUM7WUFDOUMsT0FBTyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7WUFDeEIsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7U0FDckI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQzdDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsc0JBQXNCLENBQUM7WUFDL0MsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7WUFDekIsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDdEI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYyxFQUFFO1lBQ2xELE9BQU8sQ0FBQyxhQUFhLEdBQUcsc0JBQXNCLENBQUM7WUFDL0MsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7WUFDekIsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7U0FDckI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxFQUFFO1lBQ3hDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLENBQUM7WUFDMUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDcEIsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDdEI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQzdDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLENBQUM7WUFDMUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDcEIsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7U0FDckI7UUFDRCxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FDOUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FDdkMsRUFBRSxNQUFNLENBQUM7UUFFVixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNoRSxRQUFRLEVBQUUsSUFBSTtZQUNkLElBQUksRUFBRSxJQUFJO1lBQ1YsVUFBVSxFQUFFLElBQUk7WUFDaEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsV0FBVyxFQUFFLHFCQUFxQixFQUFFLDhCQUE4QjtTQUNuRSxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDdkQsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7UUFDL0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM5QixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFO2dCQUM5QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO2dCQUNwQyxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO29CQUN0QyxRQUFRLEdBQUcsSUFBSSxDQUFDO2lCQUNqQjtnQkFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYyxFQUFFO29CQUMzQyxRQUFRLEdBQUcsU0FBUyxDQUFDO2lCQUN0QjtnQkFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssYUFBYSxFQUFFO29CQUMxQyxRQUFRLEdBQUcsUUFBUSxDQUFDO2lCQUNyQjtnQkFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUU7b0JBQzVDLElBQUksY0FBYyxHQUFHO3dCQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHO3dCQUMzQixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO3dCQUMvQixRQUFRLEVBQUUsUUFBUTt3QkFDbEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRO3FCQUN6QixDQUFDO29CQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDO3dCQUM1RCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRSxHQUFFLENBQUM7cUJBQ3ZCLENBQUMsQ0FBQztpQkFDSjtnQkFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQzVDLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO3dCQUNqQixJQUFJLEdBQUcsRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFOzRCQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzdELElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQzt5QkFDakQ7b0JBQ0gsQ0FBQztvQkFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO3dCQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLENBQUM7b0JBQzVELENBQUM7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCO1FBQ3JCLElBQUk7WUFDRixNQUFNLEdBQUcsR0FBUSxNQUFNLGNBQWMsQ0FDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDdkMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTzthQUNoQyxDQUFDLENBQ0gsQ0FBQztZQUVGLElBQUksR0FBRyxFQUFFLElBQUksRUFBRTtnQkFDYixJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDO2dCQUN2QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQUU7b0JBQ2xFLFdBQVcsRUFBRSxNQUFNO2lCQUNwQixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzVCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUM3QixPQUFPO2FBQ1I7U0FDRjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNyRDtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCO1FBQ3pCLElBQUk7WUFDRixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDdEQsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUMsTUFBTSxDQUFDO1NBQ1g7UUFBQyxPQUFPLEdBQVEsRUFBRSxHQUFFO0lBQ3ZCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO1lBQ3BFLFdBQVcsRUFBRTtnQkFDWCxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO2FBQ2hDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7d0dBeDNMVSx5QkFBeUI7NEZBQXpCLHlCQUF5Qix5R0FGekIsQ0FBQyxhQUFhLENBQUMsNFVDMUQ1QixxdnZEQXF6QmM7OzRGRHp2QkQseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHdCQUF3QixhQUd2QixDQUFDLGFBQWEsQ0FBQzt3V0FNMUIsU0FBUztzQkFEUixTQUFTO3VCQUFDLFlBQVk7Z0JBRU8sWUFBWTtzQkFBekMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ0Qsb0JBQW9CO3NCQUE5QyxTQUFTO3VCQUFDLGNBQWM7Z0JBR3pCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHsgTG9jYXRpb24sIFRpdGxlQ2FzZVBpcGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIEZvcm1BcnJheSxcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIFN1YmplY3QsXHJcbiAgU3Vic2NyaXB0aW9uLFxyXG4gIGRlYm91bmNlVGltZSxcclxuICBmaXJzdFZhbHVlRnJvbSxcclxuICBmcm9tRXZlbnQsXHJcbiAgdGFrZVVudGlsLFxyXG59IGZyb20gXCJyeGpzXCI7XHJcblxyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5pbXBvcnQgKiBhcyBmYWJyaWMgZnJvbSBcImZhYnJpY1wiO1xyXG5cclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLXNoYXJlZFwiO1xyXG5cclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGF5b3V0RWRpdENvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9wb3B1cHMvbGF5b3V0LWVkaXQtY29uZmlybWF0aW9uL2xheW91dC1lZGl0LWNvbmZpcm1hdGlvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUHVibGlzaHRhc2tQb3B1cENvbXBvbmVudCB9IGZyb20gXCIuL3B1Ymxpc2h0YXNrLXBvcHVwL3B1Ymxpc2h0YXNrLXBvcHVwLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBTdG9yZVRhc2tSZXZva2VDb21wb25lbnQgfSBmcm9tIFwiLi9zdG9yZS10YXNrLXJldm9rZS9zdG9yZS10YXNrLXJldm9rZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRGVsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL3BvcHVwcy9kZWxldGUtY29uZmlybWF0aW9uL2RlbGV0ZS1jb25maXJtYXRpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERyb3Bkb3duSUYgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9wbGFuby1nZW5lcmFsLmludGVyZmFjZVwiO1xyXG5cclxudHlwZSBCb3VuZEZpeHR1cmVHcm91cCA9IHtcclxuICBmaXh0dXJlR3JvdXA6IGZhYnJpYy5Hcm91cDtcclxuICBvZmZzZXRYOiBudW1iZXI7XHJcbiAgb2Zmc2V0WTogbnVtYmVyO1xyXG4gIF90ZW1wT2xkVG9wPzogbnVtYmVyO1xyXG4gIF90ZW1wT2xkTGVmdD86IG51bWJlcjtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi1tYW5hZ2Utc3RvcmUtcGxhbm9cIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL21hbmFnZS1zdG9yZS1wbGFuby5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vbWFuYWdlLXN0b3JlLXBsYW5vLmNvbXBvbmVudC5zY3NzXCIsXHJcbiAgcHJvdmlkZXJzOiBbVGl0bGVDYXNlUGlwZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYW5hZ2VTdG9yZVBsYW5vQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdFxyXG57XHJcbiAgQFZpZXdDaGlsZChcImJhc2VDYW52YXNcIilcclxuICBjYW52YXNSZWYhOiBFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKFwiY2FudmFzQ29udGFpbmVyXCIpIGNvbnRhaW5lclJlZiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoXCJub1N0b3JlVmlkZW9cIikgbm9TdG9yZVZpZGVvTW9kYWxSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxyXG4gIG9uUmVzaXplKCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzaXplQ2FudmFzKCk7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG5cclxuICBjYW52YXMhOiBmYWJyaWMuQ2FudmFzO1xyXG4gIHpvb21MZXZlbDogbnVtYmVyID0gMTtcclxuICB3YWxsVGhpY2tuZXNzID0gMzA7XHJcbiAgdmVydGljYWxNYXJnaW4gPSAoMS4yNSAvIDEwMCkgKiB0aGlzLnRvUGl4ZWxzKDE1MjQsIFwibW1cIik7XHJcbiAgd2FsbEJpbmRpbmdzID0gbmV3IE1hcDxmYWJyaWMuR3JvdXAsIEJvdW5kRml4dHVyZUdyb3VwW10+KCk7XHJcblxyXG4gIGxheW91dEZvcm06IEZvcm1Hcm91cDtcclxuICBzZWxlY3RlZEZsb29ySWQgPSBuZXcgRm9ybUNvbnRyb2woXCJcIik7XHJcbiAgZml4dHVyZUNvbmZpZ1N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgZml4dHVyZVRlbXBsYXRlSWRTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIG90aGVyRWxlbWVudHNTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBwbGFub0RhdGE6IGFueTtcclxuXHJcbiAgZmxvb3JEYXRhOiBhbnk7XHJcbiAgcmVhZG9ubHkgb3JpZ2luYWxGbG9vckRhdGE6IGFueTsgLy91c2VkIHRvIHJvbGxiYWNrIHRvIG9yaWdpbmFsIGxheW91dCBzdGF0ZSBvbiBjbGljayBjYW5jZWwgd2hpbGUgZWRpdGluZy5cclxuXHJcbiAgY2RuVXJsOiBzdHJpbmc7XHJcbiAgZml4dHVyZVRlbXBsYXRlczogYW55W10gPSBbXTtcclxuICBhbGxGaXh0dXJlczogYW55W10gPSBbXTsgLy8gYWxsIGZpeHR1cmVzIGluY2x1ZGluZyB0aGUgbWFzdGVyIHRlbXBsYXRlcyBmb3IgdHJlZSB2aWV3XHJcbiAgYWxsRml4dHVyZUluc3RhbmNlczogYW55W10gPSBbXTsgLy9vbmx5IHRoZSBsYXlvdXQgZml4dHVyZXNcclxuICBzdG9yZUZlZWRiYWNrOiBhbnk7XHJcblxyXG4gIHNlbGVjdGVkRml4dHVyZTogYW55O1xyXG4gIHNlbGVjdGVkRml4dHVyZURhdGE6IGFueTtcclxuICBzZWxlY3RlZEZpeHR1cmVGZWVkYmFjazogYW55O1xyXG4gIGVkaXRGaXh0dXJlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZWRpdEZpeHR1cmVTZWN0aW9uOiBcImJhc2ljLWRldGFpbHNcIiB8IFwicHJvZHVjdHNcIiB8IFwidm1zXCIgPSBcImJhc2ljLWRldGFpbHNcIjtcclxuICBzdWJtaXRGaXh0dXJlID0gZmFsc2U7XHJcblxyXG4gIHN0b3JlTWV0cmljcyA9IHtcclxuICAgIGZsb29yQ291bnQ6IDAsXHJcbiAgICBmaXh0dXJlQ291bnQ6IDAsXHJcbiAgICB2bUNvdW50OiAwLFxyXG4gIH07XHJcblxyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzUmlnaHRQYW5lbENvbGxhcHNlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNMZWZ0UGFuZWxDb2xsYXBzZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNlbGVjdGVkVmlldzogXCJ0cmVlXCIgfCBcImRldGFpbFwiID0gXCJkZXRhaWxcIjtcclxuXHJcbiAgcHVibGlzaGluZ1N0YXRlOlxyXG4gICAgfCBcImxheW91dFwiXHJcbiAgICB8IFwibGF5b3V0LXJlZG9cIlxyXG4gICAgfCBcImZpeHR1cmVcIlxyXG4gICAgfCBcImZpeHR1cmUtcmVkb1wiXHJcbiAgICB8IFwidm1cIlxyXG4gICAgfCBcInZtLXJlZG9cIlxyXG4gICAgfCBcImNvbXBsZXRlXCJcclxuICAgIHwgXCJcIiA9IFwiXCI7XHJcbiAgZGlzYWJsZWRQdWJsaXNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlzYWJsZUVkaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHRhc2tJbmZvOiBhbnk7XHJcbiAgdGFza1N0eWxlID0ge1xyXG4gICAgbGF5b3V0OiB7IG5hbWU6IFwiWWV0IFRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH0sXHJcbiAgICBmaXh0dXJlOiB7IG5hbWU6IFwiWWV0IFRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH0sXHJcbiAgICB2bTogeyBuYW1lOiBcIllldCBUbyBBc3NpZ25cIiwgY2xhc3M6IFwieWV0VG9Bc3NpZ25cIiB9LFxyXG4gIH07XHJcblxyXG4gIG90aGVyRWxlbWVudExpc3Q6IERyb3Bkb3duSUZbXSA9IFtcclxuICAgIHsgbGFiZWw6IFwiUE9TIENvdW50ZXJcIiwgdmFsdWU6IFwiUE9TIENvdW50ZXJcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJEaXNjdXNzaW9uIFRhYmxlXCIsIHZhbHVlOiBcIkRpc2N1c3Npb24gVGFibGVcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJNaXJyb3JcIiwgdmFsdWU6IFwiTWlycm9yXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiT3RoZXJzXCIsIHZhbHVlOiBcIk90aGVyc1wiIH0sXHJcbiAgXTtcclxuXHJcbiAgLy8gaXNVc2VySW50ZXJhY3RlZFdpdGhDYW52YXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBhY3RpdmVIaWdobGlnaHQ6IGZhYnJpYy5SZWN0IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBjYW5jZWxIaWdobGlnaHRCbGluayA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXBpU2VydmljZTogU3RvcmVCdWlsZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRpdGxlQ2FzZTogVGl0bGVDYXNlUGlwZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIHBhZ2VJbmZvOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcblxyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB0aGlzLmNkblVybCA9IGUucGxhbm9ncmFtQ0ROO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuXHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZShhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBoZWFkZXJEYXRhID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSBhcyBzdHJpbmdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gaGVhZGVyRGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgaWYgKHBhcmFtcz8ucGxhbm9JZCkge1xyXG4gICAgICAgICAgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHBhcmFtcz8ucGxhbm9JZCk7XHJcbiAgICAgICAgICBpZiAocGFyYW1zPy5mbG9vcklkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhID0geyBfaWQ6IHBhcmFtcz8uZmxvb3JJZCB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEZsb29ySWQudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoaWQpID0+IHtcclxuICAgICAgdGhpcy5mbG9vckRhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgdGhpcy5mbG9vckRhdGEgPSB0aGlzLnBsYW5vRGF0YT8uZmxvb3JzPy5maW5kKFxyXG4gICAgICAgIChmbG9vcjogYW55KSA9PiBmbG9vci5faWQgPT09IGlkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucmVuZGVyRmxvb3IoKTtcclxuICAgICAgdGhpcy5nZXRTdG9yZUZlZWRiYWNrKHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsIHRoaXMuZmxvb3JEYXRhLl9pZCwge30pO1xyXG4gICAgICB0aGlzLnRhc2tEZXRhaWxzKHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsIHRoaXMuZmxvb3JEYXRhLl9pZCk7XHJcbiAgICAgIHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgY29uc3QgbmV3UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcclxuICAgICAgbmV3UGFyYW1zLnNldChcInBsYW5vSWRcIiwgdGhpcy5mbG9vckRhdGEucGxhbm9JZCk7XHJcbiAgICAgIG5ld1BhcmFtcy5zZXQoXCJmbG9vcklkXCIsIHRoaXMuZmxvb3JEYXRhLl9pZCk7XHJcblxyXG4gICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsXHJcbiAgICAgICAgbmV3UGFyYW1zLnRvU3RyaW5nKClcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZsb29ySWQuc2V0VmFsdWUodGhpcy5mbG9vckRhdGEuX2lkLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcyA9IG5ldyBmYWJyaWMuQ2FudmFzKHRoaXMuY2FudmFzUmVmPy5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgIHNlbGVjdGlvbkZ1bGx5Q29udGFpbmVkOiB0cnVlLFxyXG4gICAgICBwZXJQaXhlbFRhcmdldEZpbmQ6IHRydWUsXHJcbiAgICAgIHRhcmdldEZpbmRUb2xlcmFuY2U6IDUsXHJcbiAgICB9KTtcclxuXHJcbiAgICBmcm9tRXZlbnQodGhpcy5jYW52YXMgYXMgYW55LCBcIm9iamVjdDptb2RpZmllZFwiKVxyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcclxuICAgICAgLnN1YnNjcmliZShhc3luYyAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbW92ZWRPYmo6IGFueSA9IGUudGFyZ2V0O1xyXG5cclxuICAgICAgICBpZiAoIW1vdmVkT2JqKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgYWN0aW9uID0gZS50cmFuc2Zvcm0/LmFjdGlvbjtcclxuXHJcbiAgICAgICAgY29uc3QgaXNSZXNpemUgPVxyXG4gICAgICAgICAgYWN0aW9uID09PSBcInNjYWxlXCIgfHwgYWN0aW9uID09PSBcInNjYWxlWFwiIHx8IGFjdGlvbiA9PT0gXCJzY2FsZVlcIjtcclxuXHJcbiAgICAgICAgaWYgKGlzUmVzaXplKSB7XHJcbiAgICAgICAgICBjb25zdCB0eXBlID0gbW92ZWRPYmo/Lm9ialR5cGUgPz8gXCJncm91cFwiO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRDb25maWcgPSB7XHJcbiAgICAgICAgICAgIHg6IG1vdmVkT2JqLmxlZnQsXHJcbiAgICAgICAgICAgIHk6IG1vdmVkT2JqLnRvcCxcclxuICAgICAgICAgICAgd2lkdGg6IG1vdmVkT2JqLmdldFNjYWxlZFdpZHRoKCksXHJcbiAgICAgICAgICAgIGhlaWdodDogbW92ZWRPYmouZ2V0U2NhbGVkSGVpZ2h0KCksXHJcbiAgICAgICAgICAgIGFuZ2xlOiBtb3ZlZE9iai5hbmdsZSxcclxuICAgICAgICAgICAgZWxlbWVudERhdGE6IG1vdmVkT2JqLmRhdGEsXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwid2FsbFwiOiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKG1vdmVkT2JqKTtcclxuICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhLmFuZ2xlID0gdXBkYXRlZENvbmZpZy5hbmdsZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3V2FsbCA9IGF3YWl0IHRoaXMuZHJhd1dhbGwoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcueCxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcueSxcclxuICAgICAgICAgICAgICAgIHRoaXMud2FsbFRoaWNrbmVzcyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcud2lkdGggLSAwLjI3LFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIChuZXdXYWxsIGFzIGFueSkub2JqVHlwZSA9IFwid2FsbFwiO1xyXG4gICAgICAgICAgICAgIChuZXdXYWxsIGFzIGFueSkuZGF0YSA9IHVwZGF0ZWRDb25maWcuZWxlbWVudERhdGE7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChuZXdXYWxsKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2FzZSBcIm90aGVyc1wiOiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKG1vdmVkT2JqKTtcclxuICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPVxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5hbmdsZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3T3RoZXIgPSB0aGlzLmRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLngsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLnksXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmFuZ2xlLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy53aWR0aCAtIDIsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmhlaWdodCAtIDIsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgKG5ld090aGVyIGFzIGFueSkub2JqVHlwZSA9IFwib3RoZXJzXCI7XHJcbiAgICAgICAgICAgICAgKG5ld090aGVyIGFzIGFueSkuZGF0YSA9IHVwZGF0ZWRDb25maWcuZWxlbWVudERhdGE7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChuZXdPdGhlcik7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNhc2UgXCJlbnRyYW5jZVwiOiB7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNhc2UgXCJmaXh0dXJlXCI6IHtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVdhbGxDb29yZGluYXRlcygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRml4dHVyZUNvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVPdGhlckVsZW1lbnRzQ29vcmRpbmF0ZXMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUVudHJhbmNlQ29vcmRpbmF0ZXMoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXR1cFpvb21IYW5kbGVycygpO1xyXG5cclxuICAgIHRoaXMubGlzdGVuVG9EZWxldGVLZXkoKTtcclxuICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJsZWZ0XCIsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmVzaXplQ2FudmFzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXJSZWYubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMuY2FudmFzLnNldERpbWVuc2lvbnMoe1xyXG4gICAgICB3aWR0aDogY29udGFpbmVyLmNsaWVudFdpZHRoIC0gNTAsXHJcblxyXG4gICAgICBoZWlnaHQ6IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgLSA0MCxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0dXBab29tSGFuZGxlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOndoZWVsXCIsIChvcHQ6IGZhYnJpYy5URXZlbnQ8V2hlZWxFdmVudD4pID0+IHtcclxuICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG5cclxuICAgICAgaWYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHtcclxuICAgICAgICAvLyB0aGlzLmlzVXNlckludGVyYWN0ZWRXaXRoQ2FudmFzID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBkZWx0YSA9IGUuZGVsdGFZO1xyXG4gICAgICAgIGxldCB6b29tID0gdGhpcy5jYW52YXMuZ2V0Wm9vbSgpO1xyXG4gICAgICAgIHpvb20gKj0gMC45OTUgKiogZGVsdGE7XHJcblxyXG4gICAgICAgIHpvb20gPSBNYXRoLm1heCgwLjIsIE1hdGgubWluKHpvb20sIDMpKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHg6IGUub2Zmc2V0WCxcclxuICAgICAgICAgICAgeTogZS5vZmZzZXRZLFxyXG4gICAgICAgICAgfSBhcyBmYWJyaWMuUG9pbnQsXHJcbiAgICAgICAgICB6b29tXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICBsZXQgbGFzdFBvc1ggPSAwO1xyXG4gICAgbGV0IGxhc3RQb3NZID0gMDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOmRvd25cIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghb3B0LnRhcmdldCkge1xyXG4gICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuICAgICAgICBsYXN0UG9zWCA9IGUuY2xpZW50WDtcclxuICAgICAgICBsYXN0UG9zWSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTptb3ZlXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXNEcmFnZ2luZyAmJiB0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSkge1xyXG4gICAgICAgIC8vIHRoaXMuaXNVc2VySW50ZXJhY3RlZFdpdGhDYW52YXMgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuICAgICAgICBjb25zdCB2cHQgPSB0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybTtcclxuICAgICAgICB2cHRbNF0gKz0gZS5jbGllbnRYIC0gbGFzdFBvc1g7XHJcbiAgICAgICAgdnB0WzVdICs9IGUuY2xpZW50WSAtIGxhc3RQb3NZO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICBsYXN0UG9zWCA9IGUuY2xpZW50WDtcclxuICAgICAgICBsYXN0UG9zWSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTp1cFwiLCAoKSA9PiB7XHJcbiAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jYW52YXMuc2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFnZURhdGEoKSB7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldFRpdGxlKFwiTWFuYWdlIFN0b3JlIFBsYW5vXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRCcmVhZGNydW1icyhbXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogXCJQbGFub2dyYW1cIixcclxuICAgICAgICBwYXRoOiBcIi9tYW5hZ2UvcGxhbm9ncmFtL21hbmFnZS1wbGFub2dyYW1zXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlwiLFxyXG4gICAgICAgIHBhdGg6IFwiXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBvbkZpeHR1cmVTYXZlKCkge1xyXG4gICAgdGhpcy5zdWJtaXRGaXh0dXJlID0gdHJ1ZTtcclxuICAgIC8vIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS50YXNrVHlwZSA9IHRoaXMucHVibGlzaGluZ1N0YXRlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3VibWl0Rml4dHVyZSA9IGZhbHNlO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uRml4dHVyZVBhZ2VDYW5jZWwoKSB7XHJcbiAgICB0aGlzLnN1Ym1pdEZpeHR1cmUgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgICB0aGlzLmVkaXRGaXh0dXJlU2VjdGlvbiA9IFwiYmFzaWMtZGV0YWlsc1wiO1xyXG4gICAgdGhpcy5lZGl0Rml4dHVyZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5sYXlvdXRGb3JtLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgYXdhaXQgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzaXplQ2FudmFzKCk7XHJcbiAgICAgIHRoaXMuZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZCgpO1xyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcblxyXG4gIG9uRml4dHVyZVN1Ym1pdChldmVudDogYW55KSB7XHJcbiAgICBpZiAoIWV2ZW50KSByZXR1cm47XHJcblxyXG4gICAgaWYgKGV2ZW50Py5zaGVsZikge1xyXG4gICAgICBldmVudC5zaGVsZiA9IGV2ZW50LnNoZWxmLm1hcCgoc2hlbGY6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBmaW5kU2hlbGYgPSB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuc2hlbGZDb25maWcuZmluZChcclxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlLnNoZWxmTnVtYmVyID09IGluZGV4ICsgMVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGZpbmRTaGVsZikge1xyXG4gICAgICAgICAgc2hlbGYgPSB7IC4uLmZpbmRTaGVsZiwgLi4uc2hlbGYgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGRldGFpbHMgPVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuc2hlbGZDb25maWdbXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnLmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgIGRldGFpbHMuc2hlbGZOdW1iZXIgPSBpbmRleCArIDE7XHJcbiAgICAgICAgICBzaGVsZiA9IHsgLi4uZGV0YWlscywgLi4uc2hlbGYgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNoZWxmO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YVtcInNoZWxmQ29uZmlnXCJdID0gZXZlbnQ/LnNoZWxmO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGFbXCJkZXNjcmlwdGlvblwiXSA9IGV2ZW50Py5kZXNjcmlwdGlvbiA/PyBcIlwiO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGFbXCJ0ZW1wbGF0ZUdyb3VwTmFtZVwiXSA9XHJcbiAgICAgICAgZXZlbnQ/LnRlbXBsYXRlR3JvdXBOYW1lID8/IFwiXCI7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5oZWFkZXIubGFiZWwgPSBldmVudD8uaGVhZGVyTGFiZWwgPz8gXCJcIjtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLmZvb3Rlci5sYWJlbCA9IGV2ZW50Py5mb290ZXJMYWJlbCA/PyBcIlwiO1xyXG4gICAgfSBlbHNlIGlmIChldmVudD8uc2VjdGlvbikge1xyXG4gICAgICBldmVudC5zZWN0aW9uLmZvckVhY2goKHNlYzogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IG51bWJlciA9IHNlYz8uc2hlbHZlcz8ubWFwKChlbGU6IGFueSkgPT5cclxuICAgICAgICAgIHBhcnNlSW50KGVsZS5zcGxpdChcIiBcIilbMV0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGE/LnNoZWxmQ29uZmlnLmZvckVhY2goKHNoZWxmOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChudW1iZXIuaW5jbHVkZXMoc2hlbGYuc2hlbGZOdW1iZXIpKSB7XHJcbiAgICAgICAgICAgIHNoZWxmLnpvbmUgPSBzZWMuem9uZTtcclxuICAgICAgICAgICAgc2hlbGYucHJvZHVjdEJyYW5kTmFtZSA9IHNlYy5wcm9kdWN0QnJhbmROYW1lO1xyXG4gICAgICAgICAgICBzaGVsZi5wcm9kdWN0Q2F0ZWdvcnkgPSBzZWMucHJvZHVjdENhdGVnb3J5O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQ/LnZtQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YVtcInZtQ29uZmlnXCJdID0gZXZlbnQ/LnZtQ29uZmlnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgICAgICB0aGlzLmVkaXRGaXh0dXJlU2VjdGlvbiA9IFwiYmFzaWMtZGV0YWlsc1wiO1xyXG4gICAgICAgIHRoaXMuZWRpdEZpeHR1cmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdldFN0b3JlRml4dHVyZXModGhpcy5wbGFub0RhdGE/Ll9pZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICAgdmFsaWRhdGVGaXh0dXJlRGF0YSgpIHtcclxuICAvLyAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8udm1Db25maWc/LmZvckVhY2goKHZtKSA9PiB7XHJcbiAgLy8gICAgIGlmICgodm0/LnN0YXJ0WVBvc2l0aW9uID8/IDEpID4gKHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/Lmxlbmd0aCA/PyAxKSkge1xyXG4gIC8vICAgICAgIHZtLnN0YXJ0WVBvc2l0aW9uID0gbnVsbDtcclxuICAvLyAgICAgICB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZUVycm9yVGFicy52bXMgPSB0cnVlO1xyXG4gIC8vICAgICB9XHJcblxyXG4gIC8vICAgICBpZiAoKHZtPy5lbmRZUG9zaXRpb24gPz8gMSkgPiAodGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubGVuZ3RoID8/IDEpKSB7XHJcbiAgLy8gICAgICAgdm0uZW5kWVBvc2l0aW9uID0gbnVsbDtcclxuICAvLyAgICAgICB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZUVycm9yVGFicy52bXMgPSB0cnVlO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIHRvZ2dsZVBhbmVsKHNpZGU6IFwibGVmdFwiIHwgXCJyaWdodFwiLCBhY3Rpb24/OiBib29sZWFuKSB7XHJcbiAgICBpZiAoc2lkZSA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZCA9IGFjdGlvbiA/PyAhdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZDtcclxuICAgICAgaWYgKCF0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkKSB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCA9IGFjdGlvbiA/PyAhdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQ7XHJcbiAgICAgIGlmICghdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQpIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQgPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRml4dHVyZUZlZWRiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZUZpeHR1cmVPbkZlZWRiYWNrUGFuZWwoe30pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzaXplQ2FudmFzKCk7XHJcbiAgICAgIHRoaXMuZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZCgpO1xyXG4gICAgfSwgNDAwKTtcclxuICB9XHJcblxyXG4gIGdldFN0b3JlRmVlZGJhY2soXHJcbiAgICBwbGFub0lkOiBzdHJpbmcsXHJcbiAgICBmbG9vcklkOiBzdHJpbmcsXHJcbiAgICBmaWx0ZXI6IGFueSxcclxuICAgIGNoZWNrUHVibGlzaFN0YXRlOiBib29sZWFuID0gdHJ1ZVxyXG4gICkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgbGV0IGRhdGE6IGFueSA9IHtcclxuICAgICAgICBwbGFub0lkOiBwbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IGZsb29ySWQsXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChmaWx0ZXIpIHtcclxuICAgICAgICBkYXRhID0geyAuLi5kYXRhLCAuLi5maWx0ZXIgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldFN0b3JlRmVlZGJhY2soZGF0YSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVGZWVkYmFjayA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgaWYgKHJlcy5kYXRhPy5sYXlvdXREYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzTGF5b3V0RmVlZGJhY2socmVzLmRhdGEubGF5b3V0RGF0YSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NMYXlvdXRGZWVkYmFjayhbXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlcy5kYXRhPy5maXh0dXJlRGF0YT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0ZpeHR1cmVGZWVkYmFjayhyZXMuZGF0YS5maXh0dXJlRGF0YSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NGaXh0dXJlRmVlZGJhY2soW10pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChyZXMuZGF0YT8uVm1EYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzVm1GZWVkYmFjayhyZXMuZGF0YS5WbURhdGEpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzVm1GZWVkYmFjayhbXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGNoZWNrUHVibGlzaFN0YXRlKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuY2FsY3VsYXRlUHVibGlzaGluZ1N0YXRlKClcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmVGZWVkYmFjaz8uZml4dHVyZUZlZWRiYWNrPy5maXh0dXJlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUZpeHR1cmVPbkZlZWRiYWNrUGFuZWwoe1xyXG4gICAgICAgICAgICAgIGN1cnJlbnRGaXh0dXJlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVGZWVkYmFjay5maXh0dXJlRmVlZGJhY2suZml4dHVyZUlkLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBmZXRjaCBzdG9yZSBmZWVkYmFja1wiKTtcclxuICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVQdWJsaXNoaW5nU3RhdGUoKSB7XHJcbiAgICBsZXQgZGlzYWJsZUVkaXQgPSBmYWxzZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbltpXTtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50LmZpeHR1cmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IGVsZW1lbnQuZml4dHVyZXNbal07XHJcblxyXG4gICAgICAgIGlmIChmaXh0dXJlLmlzc3VlKSB7XHJcbiAgICAgICAgICBkaXNhYmxlRWRpdCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlW2ldO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZS5pc3N1ZSkge1xyXG4gICAgICAgICAgZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChkaXNhYmxlRWRpdCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVFZGl0ID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUVkaXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy5mbG9vckRhdGEuaXNFZGl0ZWQpIHtcclxuICAgIC8vICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAnbGF5b3V0J1xyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9XHJcblxyXG4gICAgbGV0IGxheW91dERhdGEgPSB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZmluZChcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUudHlwZSA9PSBcImxheW91dFwiXHJcbiAgICApO1xyXG4gICAgbGV0IGZpeHR1cmVEYXRhID0gdGhpcy50YXNrSW5mbz8udGFza0RldGFpbHM/LmZpbmQoXHJcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlLnR5cGUgPT0gXCJmaXh0dXJlXCJcclxuICAgICk7XHJcbiAgICBsZXQgdm1EYXRhID0gdGhpcy50YXNrSW5mbz8udGFza0RldGFpbHM/LmZpbmQoXHJcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlLnR5cGUgPT0gXCJ2bVwiXHJcbiAgICApO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnRhc2tTdHlsZS5sYXlvdXQubmFtZSA9PSBcIkFwcHJvdmVkXCIgJiZcclxuICAgICAgdGhpcy50YXNrU3R5bGUuZml4dHVyZS5uYW1lID09IFwiQXBwcm92ZWRcIiAmJlxyXG4gICAgICB0aGlzLnRhc2tTdHlsZS52bS5uYW1lID09IFwiQXBwcm92ZWRcIlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJjb21wbGV0ZVwiO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnRhc2tTdHlsZS5maXh0dXJlLm5hbWUgPT0gXCJBcHByb3ZlZFwiKSB7XHJcbiAgICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJ2bVwiO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdm1EYXRhICYmXHJcbiAgICAgICAgKCh2bURhdGEuc3RhdHVzID09IFwic3VibWl0XCIgJiYgdm1EYXRhLmZlZWRiYWNrU3RhdHVzID09IFwiZGlzYWdyZWVcIikgfHxcclxuICAgICAgICAgIHZtRGF0YT8ucmVkb1N0YXR1cylcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcInZtLXJlZG9cIjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImZpeHR1cmVcIjtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGZpeHR1cmVEYXRhICYmXHJcbiAgICAgICAgKChmaXh0dXJlRGF0YS5zdGF0dXMgPT0gXCJzdWJtaXRcIiAmJlxyXG4gICAgICAgICAgZml4dHVyZURhdGEuZmVlZGJhY2tTdGF0dXMgPT0gXCJkaXNhZ3JlZVwiKSB8fFxyXG4gICAgICAgICAgZml4dHVyZURhdGE/LnJlZG9TdGF0dXMpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gIXRoaXMuZmxvb3JEYXRhLmlzRWRpdGVkXHJcbiAgICAgICAgICA/IFwiZml4dHVyZS1yZWRvXCJcclxuICAgICAgICAgIDogXCJmaXh0dXJlXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9ICdsYXlvdXQnXHJcbiAgICAvLyAgIGlmIChsYXlvdXREYXRhICYmICgobGF5b3V0RGF0YS5zdGF0dXMgPT0gXCJzdWJtaXRcIiAmJiBsYXlvdXREYXRhLmZlZWRiYWNrU3RhdHVzID09IFwiZGlzYWdyZWVcIikgfHwgbGF5b3V0RGF0YT8ucmVkb1N0YXR1cykpIHtcclxuICAgIC8vICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9ICdsYXlvdXQtcmVkbyc7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy5zdG9yZUZlZWRiYWNrPy5WbURhdGEubGVuZ3RoKSB7XHJcbiAgICAvLyAgIGNvbnN0IHZtRmVlZGJhY2sgPSB0aGlzLnN0b3JlRmVlZGJhY2s/LlZtRGF0YS5maWx0ZXIoKGZlZWRiYWNrOiBhbnkpID0+IGZlZWRiYWNrLnR5cGUgPT09ICd2bScpXHJcblxyXG4gICAgLy8gICBjb25zdCBhbGxGaXh0dXJlc0NvbXBsZXRlZCA9IHZtRmVlZGJhY2suZXZlcnkoKGZlZWRiYWNrOiBhbnkpID0+IGZlZWRiYWNrLnN0YXR1cyA9PT0gJ2NvbXBsZXRlJylcclxuXHJcbiAgICAvLyAgIGlmIChhbGxGaXh0dXJlc0NvbXBsZXRlZCkge1xyXG4gICAgLy8gICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gJ2NvbXBsZXRlJ1xyXG4gICAgLy8gICAgIHJldHVyblxyXG4gICAgLy8gICB9XHJcblxyXG4gICAgLy8gICBsZXQgaGFzRGlzYWdyZWUgPSBmYWxzZTtcclxuXHJcbiAgICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgdm1GZWVkYmFjay5sZW5ndGg7IGkrKykge1xyXG4gICAgLy8gICAgIGNvbnN0IGlzc3VlcyA9IHZtRmVlZGJhY2s/LltpXT8uYW5zd2Vycz8uWzBdPy5pc3N1ZXM7XHJcblxyXG4gICAgLy8gICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpc3N1ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgIC8vICAgICAgICAgY29uc3QgaXNzdWUgPSBpc3N1ZXNbal07XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGRldGFpbHMgPSBpc3N1ZT8uRGV0YWlscyB8fCBbXTtcclxuXHJcbiAgICAvLyAgICAgICAgIGlmIChkZXRhaWxzLnNvbWUoKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5zdGF0dXMgPT09ICdkaXNhZ3JlZScpKSB7XHJcbiAgICAvLyAgICAgICAgICAgaGFzRGlzYWdyZWUgPSB0cnVlO1xyXG4gICAgLy8gICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuXHJcbiAgICAvLyAgICAgaWYgKGhhc0Rpc2FncmVlKSBicmVhaztcclxuICAgIC8vICAgICBpZiAoaXNzdWVzPy5sZW5ndGgpIHtcclxuICAgIC8vICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaXNzdWVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGlzc3VlID0gaXNzdWVzW2pdO1xyXG4gICAgLy8gICAgICAgICBjb25zdCBkZXRhaWxzID0gaXNzdWU/LkRldGFpbHMgfHwgW107XHJcblxyXG4gICAgLy8gICAgICAgICBpZiAoZGV0YWlscy5zb21lKChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuc3RhdHVzID09PSAnZGlzYWdyZWUnKSkge1xyXG4gICAgLy8gICAgICAgICAgIGhhc0Rpc2FncmVlID0gdHJ1ZTtcclxuICAgIC8vICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy8gICAgIGlmIChoYXNEaXNhZ3JlZSkgYnJlYWs7XHJcbiAgICAvLyAgIH1cclxuXHJcbiAgICAvLyAgIGlmIChoYXNEaXNhZ3JlZSkge1xyXG4gICAgLy8gICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gJ2ZpeHR1cmUtcmVkbyc7XHJcbiAgICAvLyAgICAgcmV0dXJuXHJcbiAgICAvLyAgIH1cclxuXHJcbiAgICAvLyAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gJ2ZpeHR1cmUnXHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gaWYgKHRoaXMuc3RvcmVGZWVkYmFjaz8ubGF5b3V0RGF0YS5sZW5ndGgpIHtcclxuICAgIC8vICAgY29uc3QgbGF5b3V0RmVlZGJhY2sgPSB0aGlzLnN0b3JlRmVlZGJhY2s/LmxheW91dERhdGEuZmlsdGVyKChmZWVkYmFjazogYW55KSA9PiBmZWVkYmFjay50eXBlID09PSAnbGF5b3V0JylcclxuICAgIC8vICAgbGV0IGhhc0Rpc2FncmVlID0gZmFsc2U7XHJcblxyXG4gICAgLy8gICBpZiAobGF5b3V0RmVlZGJhY2tbbGF5b3V0RmVlZGJhY2subGVuZ3RoIC0gMV0uc3RhdHVzID09PSAnY29tcGxldGUnKSB7XHJcbiAgICAvLyAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAnZml4dHVyZSdcclxuICAgIC8vICAgICByZXR1cm5cclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgY29uc3QgaXNzdWVzID0gbGF5b3V0RmVlZGJhY2tbbGF5b3V0RmVlZGJhY2subGVuZ3RoIC0gMV0/LmFuc3dlcnM/LlswXT8uaXNzdWVzO1xyXG5cclxuICAgIC8vICAgaWYgKGlzc3Vlcz8ubGVuZ3RoKSB7XHJcbiAgICAvLyAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBpc3N1ZXMpIHtcclxuICAgIC8vICAgICAgIGNvbnN0IGRldGFpbHMgPSBpc3N1ZT8uRGV0YWlscyB8fCBbXTtcclxuICAgIC8vICAgICAgIGlmIChkZXRhaWxzLnNvbWUoKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5zdGF0dXMgPT09ICdkaXNhZ3JlZScpKSB7XHJcbiAgICAvLyAgICAgICAgIGhhc0Rpc2FncmVlID0gdHJ1ZTtcclxuICAgIC8vICAgICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9XHJcblxyXG4gICAgLy8gICBpZiAoaGFzRGlzYWdyZWUpIHtcclxuICAgIC8vICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9ICdsYXlvdXQtcmVkbyc7XHJcbiAgICAvLyAgICAgcmV0dXJuXHJcbiAgICAvLyAgIH1cclxuXHJcbiAgICAvLyAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gJ2xheW91dCdcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAoKCF0aGlzLnN0b3JlRmVlZGJhY2s/LmxheW91dERhdGE/Lmxlbmd0aCAmJiAhdGhpcy5zdG9yZUZlZWRiYWNrPy5maXh0dXJlRGF0YT8ubGVuZ3RoICYmICF0aGlzLnN0b3JlRmVlZGJhY2s/LlZtRGF0YT8ubGVuZ3RoKSkge1xyXG4gICAgLy8gICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9ICdsYXlvdXQnXHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRUZW1wbGF0ZShmaXh0dXJlQ29uZmlnSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0Rml4dHVyZVRlbXBsYXRlKGZpeHR1cmVDb25maWdJZClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwcm9jZXNzTGF5b3V0RmVlZGJhY2soc3RvcmVGZWVkYmFjazogYW55W10pIHtcclxuICAgIGNvbnN0IGxheW91dEZlZWRiYWNrID0gc3RvcmVGZWVkYmFjay5maW5kKFxyXG4gICAgICAoZmVlZGJhY2spID0+IGZlZWRiYWNrLnR5cGUgPT09IFwibGF5b3V0XCJcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgd2FsbEVsZW1lbnRzID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maWx0ZXIoXHJcbiAgICAgIChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChsYXlvdXRGZWVkYmFjaykge1xyXG4gICAgICBjb25zdCBpc3N1ZXMgPSBsYXlvdXRGZWVkYmFjaz8uYW5zd2Vycz8uWzBdPy5pc3N1ZXM7XHJcblxyXG4gICAgICBpZiAoaXNzdWVzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpc3N1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzc3VlID0gaXNzdWVzW2ldO1xyXG5cclxuICAgICAgICAgIGlmIChpc3N1ZS5pc3N1ZVR5cGUgPT09IFwiZXh0cmFGaXh0dXJlXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZXMgPSBpc3N1ZS5EZXRhaWxzLmZpbHRlcihcclxuICAgICAgICAgICAgICAoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCJcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZml4dHVyZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlID0gZml4dHVyZXNbal07XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlOiBhbnkgPSBhd2FpdCB0aGlzLmdldFRlbXBsYXRlKFxyXG4gICAgICAgICAgICAgICAgZml4dHVyZS5maXh0dXJlQ29uZmlnSWRcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoIXRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlSWQgPSBgbmV3LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBnaG9zdEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi50ZW1wbGF0ZT8uZGF0YSxcclxuICAgICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGU/LmRhdGE/Ll9pZCxcclxuICAgICAgICAgICAgICAgIF9pZDogZml4dHVyZUlkLFxyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQb3NpdGlvbjogeyB4OiAwLCB5OiAwLCB1bml0OiBcImZ0XCIgfSxcclxuICAgICAgICAgICAgICAgIHNoZWxmQ29uZmlnOiBmaXh0dXJlLnNoZWxmQ29uZmlnLFxyXG4gICAgICAgICAgICAgICAgZ2hvc3Q6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBpc3N1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGlzc3VlRGF0YTogZml4dHVyZSxcclxuICAgICAgICAgICAgICAgIHRhc2tUeXBlOiBcImxheW91dFwiLFxyXG4gICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgIC8vIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHsgZml4dHVyZU5hbWU6IGdob3N0Rml4dHVyZS5maXh0dXJlTmFtZSwgZml4dHVyZUNvbmZpZ0lkOiBnaG9zdEZpeHR1cmUuZml4dHVyZUNvbmZpZ0lkLCBfaWQ6IGdob3N0Rml4dHVyZS5faWQgfSk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCB3YWxsSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NvY1dhbGxOdW0gPSBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFzc29jV2FsbE51bSA+PSB3YWxsRWxlbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHdhbGxJbmRleCA9IHdhbGxFbGVtZW50cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFzc29jV2FsbE51bSA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHdhbGxJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB3YWxsSW5kZXggPSBhc3NvY1dhbGxOdW07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudEZpeHR1cmVzOiBhbnkgPSB3YWxsRWxlbWVudHMuZmluZChcclxuICAgICAgICAgICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gd2FsbEluZGV4XHJcbiAgICAgICAgICAgICAgICApLmZpeHR1cmVzO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXNzb2NGaXh0dXJlTnVtID0gZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGFzc29jRml4dHVyZU51bSA+IGVsZW1lbnRGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvblxyXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSB3YWxsSW5kZXhcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpeHR1cmVzLnB1c2goZ2hvc3RGaXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZXRGb3JtRml4dHVyZXMod2FsbEluZGV4ISAtIDEpLnB1c2goZml4dHVyZUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXNzb2NGaXh0dXJlTnVtIDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvblxyXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSB3YWxsSW5kZXhcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpeHR1cmVzLnVuc2hpZnQoZ2hvc3RGaXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZXRGb3JtRml4dHVyZXMod2FsbEluZGV4ISAtIDEpLmluc2VydCgwLCBmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvblxyXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSB3YWxsSW5kZXhcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpeHR1cmVzLnNwbGljZShhc3NvY0ZpeHR1cmVOdW0gLSAxLCAwLCBnaG9zdEZpeHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEZvcm1GaXh0dXJlcyh3YWxsSW5kZXghIC0gMSkuaW5zZXJ0KGFzc29jRml4dHVyZU51bSAtIDEsIGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NvY0ZpeHR1cmVOdW0gPSBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYXNzb2NGaXh0dXJlTnVtID4gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5wdXNoKGdob3N0Rml4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXMucHVzaChmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhc3NvY0ZpeHR1cmVOdW0gPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLnVuc2hpZnQoZ2hvc3RGaXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlcy5pbnNlcnQoMCwgZml4dHVyZUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuc3BsaWNlKFxyXG4gICAgICAgICAgICAgICAgICAgIGFzc29jRml4dHVyZU51bSAtIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgICAgICBnaG9zdEZpeHR1cmVcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlcy5pbnNlcnQoYXNzb2NGaXh0dXJlTnVtIC0gMSwgZml4dHVyZUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGlzc3VlLmlzc3VlVHlwZSA9PT0gXCJmaXh0dXJlTWlzc2luZ1wiIHx8XHJcbiAgICAgICAgICAgIGlzc3VlLmlzc3VlVHlwZSA9PT0gXCJmaXh0dXJlTWlzbWF0Y2hcIlxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVzID0gaXNzdWUuRGV0YWlscy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGZpeHR1cmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZSA9IGZpeHR1cmVzW2pdO1xyXG5cclxuICAgICAgICAgICAgICAvLyBpZiAoZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09ICd3YWxsJykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldEZpeHR1cmVJZCA9IGZpeHR1cmUuZml4dHVyZUlkO1xyXG5cclxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHdhbGxFbGVtZW50IG9mIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24pIHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgd2FsbEVsZW1lbnQuZWxlbWVudFR5cGUgIT09IFwid2FsbFwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHdhbGxFbGVtZW50LmZpeHR1cmVzKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlSW5kZXggPSB3YWxsRWxlbWVudC5maXh0dXJlcy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChmOiBhbnkpID0+IGYuX2lkID09PSB0YXJnZXRGaXh0dXJlSWRcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZpeHR1cmVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgd2FsbEVsZW1lbnQuZml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi53YWxsRWxlbWVudC5maXh0dXJlc1tmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlRGF0YTogaXNzdWVzLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhc2tUeXBlOiBcImxheW91dFwiLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAvLyBlbHNlIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gJ2Zsb29yJykge1xyXG4gICAgICAgICAgICAgIC8vIGNvbnN0IHRhcmdldEZpeHR1cmVJZCA9IGZpeHR1cmUuZml4dHVyZUlkO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBjZW50ZXJGaXh0dXJlcyA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmU7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJbmRleCA9IGNlbnRlckZpeHR1cmVzLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgIChmOiBhbnkpID0+IGYuX2lkID09PSB0YXJnZXRGaXh0dXJlSWRcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZml4dHVyZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgY2VudGVyRml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgLi4uY2VudGVyRml4dHVyZXNbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgaXNzdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIGlzc3VlRGF0YTogaXNzdWVzLFxyXG4gICAgICAgICAgICAgICAgICB0YXNrVHlwZTogXCJsYXlvdXRcIixcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzRml4dHVyZUZlZWRiYWNrKHN0b3JlRmVlZGJhY2s6IGFueVtdKSB7XHJcbiAgICBjb25zdCBmaXh0dXJlRmVlZGJhY2sgPSBzdG9yZUZlZWRiYWNrLmZpbHRlcihcclxuICAgICAgKGZlZWRiYWNrKSA9PiBmZWVkYmFjay50eXBlID09PSBcImZpeHR1cmVcIlxyXG4gICAgKTtcclxuICAgIGxldCBmaW5kRml4dHVyZVRhc2sgPSB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZmluZChcclxuICAgICAgKHRhc2s6IGFueSkgPT4gdGFzay50eXBlID09IFwiZml4dHVyZVwiXHJcbiAgICApO1xyXG4gICAgaWYgKGZpeHR1cmVGZWVkYmFjay5sZW5ndGgpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXh0dXJlRmVlZGJhY2subGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBpc3N1ZSA9IGZpeHR1cmVGZWVkYmFjaz8uW2ldPy5maXh0dXJlQUlEYXRhO1xyXG5cclxuICAgICAgICBpZiAoaXNzdWUpIHtcclxuICAgICAgICAgIGNvbnN0IHRhcmdldEZpeHR1cmVJZCA9IGlzc3VlLmZpeHR1cmVJZDtcclxuXHJcbiAgICAgICAgICAvLyBmb3IgKGxldCBqID0gMDsgaiA8IGlzc3Vlcy5sZW5ndGg7IGorKykge1xyXG5cclxuICAgICAgICAgIC8vIGNvbnN0IGZpeHR1cmVzID0gaXNzdWUuRGV0YWlscy5maWx0ZXIoXHJcbiAgICAgICAgICAvLyAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuc3RhdHVzID09PSBcInBlbmRpbmdcIlxyXG4gICAgICAgICAgLy8gKTtcclxuXHJcbiAgICAgICAgICAvLyBmb3IgKGxldCBqID0gMDsgaiA8IGZpeHR1cmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAvLyBjb25zdCBmaXh0dXJlID0gZml4dHVyZXNbal07XHJcblxyXG4gICAgICAgICAgLy8gaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSAnd2FsbCcpIHtcclxuXHJcbiAgICAgICAgICBmb3IgKGNvbnN0IHdhbGxFbGVtZW50IG9mIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24pIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHdhbGxFbGVtZW50LmVsZW1lbnRUeXBlICE9PSBcIndhbGxcIiB8fFxyXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHdhbGxFbGVtZW50LmZpeHR1cmVzKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlSW5kZXggPSB3YWxsRWxlbWVudC5maXh0dXJlcy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRhcmdldEZpeHR1cmVJZFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGZpeHR1cmVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICB3YWxsRWxlbWVudC5maXh0dXJlc1tmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgICAgLi4ud2FsbEVsZW1lbnQuZml4dHVyZXNbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAgIGlzc3VlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGlzc3VlRGF0YTogaXNzdWUsXHJcbiAgICAgICAgICAgICAgICB0YXNrVHlwZTogXCJmaXh0dXJlXCIsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6XHJcbiAgICAgICAgICAgICAgICAgIChmaW5kRml4dHVyZVRhc2s/LnN0YXR1cyA9PSBcInN1Ym1pdFwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgZmluZEZpeHR1cmVUYXNrPy5yZWRvU3RhdHVzKSAmJlxyXG4gICAgICAgICAgICAgICAgICBmaXh0dXJlRmVlZGJhY2s/LltpXT8uYW5zd2Vycz8uWzBdPy5zdGF0dXNcclxuICAgICAgICAgICAgICAgICAgICA/IGZpeHR1cmVGZWVkYmFjaz8uW2ldPy5hbnN3ZXJzPy5bMF0/LnN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIixcclxuICAgICAgICAgICAgICAgIGJyZWFjaDogZmluZEZpeHR1cmVUYXNrPy5icmVhY2gsXHJcbiAgICAgICAgICAgICAgICB0YXNrU3RhdHVzOiBmaW5kRml4dHVyZVRhc2s/LnN0YXR1cyxcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgLy8gZWxzZSBpZiAoZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09ICdmbG9vcicpIHtcclxuICAgICAgICAgIC8vIGNvbnN0IHRhcmdldEZpeHR1cmVJZCA9IGZpeHR1cmUuZml4dHVyZUlkO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNlbnRlckZpeHR1cmVzID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZTtcclxuXHJcbiAgICAgICAgICBjb25zdCBmaXh0dXJlSW5kZXggPSBjZW50ZXJGaXh0dXJlcy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgIChmOiBhbnkpID0+IGYuX2lkID09PSB0YXJnZXRGaXh0dXJlSWRcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaWYgKGZpeHR1cmVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY2VudGVyRml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAuLi5jZW50ZXJGaXh0dXJlc1tmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgIGlzc3VlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBpc3N1ZURhdGE6IGlzc3VlLFxyXG4gICAgICAgICAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgICAgICAgICAgICBzdGF0dXM6XHJcbiAgICAgICAgICAgICAgICAoZmluZEZpeHR1cmVUYXNrPy5zdGF0dXMgPT0gXCJzdWJtaXRcIiB8fFxyXG4gICAgICAgICAgICAgICAgICBmaW5kRml4dHVyZVRhc2s/LnJlZG9TdGF0dXMpICYmXHJcbiAgICAgICAgICAgICAgICBmaXh0dXJlRmVlZGJhY2s/LltpXT8uYW5zd2Vycz8uWzBdPy5zdGF0dXNcclxuICAgICAgICAgICAgICAgICAgPyBmaXh0dXJlRmVlZGJhY2s/LltpXT8uYW5zd2Vycz8uWzBdPy5zdGF0dXNcclxuICAgICAgICAgICAgICAgICAgOiBcIlwiLFxyXG4gICAgICAgICAgICAgIGJyZWFjaDogZmluZEZpeHR1cmVUYXNrPy5icmVhY2gsXHJcbiAgICAgICAgICAgICAgdGFza1N0YXR1czogZmluZEZpeHR1cmVUYXNrPy5zdGF0dXMsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0ZpeHR1cmVGZWVkYmFja09sZChzdG9yZUZlZWRiYWNrOiBhbnlbXSkge1xyXG4gICAgY29uc3QgZml4dHVyZUZlZWRiYWNrID0gc3RvcmVGZWVkYmFjay5maWx0ZXIoXHJcbiAgICAgIChmZWVkYmFjaykgPT4gZmVlZGJhY2sudHlwZSA9PT0gXCJmaXh0dXJlXCJcclxuICAgICk7XHJcbiAgICBpZiAoZml4dHVyZUZlZWRiYWNrLmxlbmd0aCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpeHR1cmVGZWVkYmFjay5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGlzc3VlcyA9IGZpeHR1cmVGZWVkYmFjaz8uW2ldPy5hbnN3ZXJzPy5bMF0/Lmlzc3VlcztcclxuXHJcbiAgICAgICAgaWYgKGlzc3Vlcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGlzc3Vlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCBpc3N1ZSA9IGlzc3Vlc1tqXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVzID0gaXNzdWUuRGV0YWlscy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGZpeHR1cmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZSA9IGZpeHR1cmVzW2pdO1xyXG5cclxuICAgICAgICAgICAgICAvLyBpZiAoZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09ICd3YWxsJykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldEZpeHR1cmVJZCA9IGZpeHR1cmUuZml4dHVyZUlkO1xyXG5cclxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHdhbGxFbGVtZW50IG9mIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24pIHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgd2FsbEVsZW1lbnQuZWxlbWVudFR5cGUgIT09IFwid2FsbFwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHdhbGxFbGVtZW50LmZpeHR1cmVzKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlSW5kZXggPSB3YWxsRWxlbWVudC5maXh0dXJlcy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChmOiBhbnkpID0+IGYuX2lkID09PSB0YXJnZXRGaXh0dXJlSWRcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZpeHR1cmVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgd2FsbEVsZW1lbnQuZml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi53YWxsRWxlbWVudC5maXh0dXJlc1tmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlRGF0YTogaXNzdWVzLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgLy8gZWxzZSBpZiAoZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09ICdmbG9vcicpIHtcclxuICAgICAgICAgICAgICAvLyBjb25zdCB0YXJnZXRGaXh0dXJlSWQgPSBmaXh0dXJlLmZpeHR1cmVJZDtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgY2VudGVyRml4dHVyZXMgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlSW5kZXggPSBjZW50ZXJGaXh0dXJlcy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAoZjogYW55KSA9PiBmLl9pZCA9PT0gdGFyZ2V0Rml4dHVyZUlkXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZpeHR1cmVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNlbnRlckZpeHR1cmVzW2ZpeHR1cmVJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLmNlbnRlckZpeHR1cmVzW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgICAgIGlzc3VlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IGlzc3VlcyxcclxuICAgICAgICAgICAgICAgICAgdGFza1R5cGU6IFwiZml4dHVyZVwiLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzVm1GZWVkYmFjayhzdG9yZUZlZWRiYWNrOiBhbnlbXSkge1xyXG4gICAgY29uc3QgZml4dHVyZUZlZWRiYWNrID0gc3RvcmVGZWVkYmFjay5maWx0ZXIoXHJcbiAgICAgIChmZWVkYmFjaykgPT4gZmVlZGJhY2sudHlwZSA9PT0gXCJ2bVwiXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChmaXh0dXJlRmVlZGJhY2subGVuZ3RoKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZUZlZWRiYWNrLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgaXNzdWVzID0gZml4dHVyZUZlZWRiYWNrPy5baV0/LmFuc3dlcnM/LlswXT8uaXNzdWVzO1xyXG5cclxuICAgICAgICBpZiAoaXNzdWVzPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaXNzdWVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzc3VlID0gaXNzdWVzW2pdO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZXMgPSBpc3N1ZS5EZXRhaWxzLmZpbHRlcihcclxuICAgICAgICAgICAgICAoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCJcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZml4dHVyZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlID0gZml4dHVyZXNbal07XHJcblxyXG4gICAgICAgICAgICAgIC8vIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gJ3dhbGwnKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0Rml4dHVyZUlkID0gZml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgd2FsbEVsZW1lbnQgb2YgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICB3YWxsRWxlbWVudC5lbGVtZW50VHlwZSAhPT0gXCJ3YWxsXCIgfHxcclxuICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkod2FsbEVsZW1lbnQuZml4dHVyZXMpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJbmRleCA9IHdhbGxFbGVtZW50LmZpeHR1cmVzLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRhcmdldEZpeHR1cmVJZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZml4dHVyZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICB3YWxsRWxlbWVudC5maXh0dXJlc1tmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLndhbGxFbGVtZW50LmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgdGFza1R5cGU6IFwidm1cIixcclxuICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgLy8gZWxzZSBpZiAoZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09ICdmbG9vcicpIHtcclxuICAgICAgICAgICAgICAvLyBjb25zdCB0YXJnZXRGaXh0dXJlSWQgPSBmaXh0dXJlLmZpeHR1cmVJZDtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgY2VudGVyRml4dHVyZXMgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlSW5kZXggPSBjZW50ZXJGaXh0dXJlcy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAoZjogYW55KSA9PiBmLl9pZCA9PT0gdGFyZ2V0Rml4dHVyZUlkXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZpeHR1cmVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNlbnRlckZpeHR1cmVzW2ZpeHR1cmVJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLmNlbnRlckZpeHR1cmVzW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgICAgIGlzc3VlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IGlzc3VlcyxcclxuICAgICAgICAgICAgICAgICAgdGFza1R5cGU6IFwidm1cIixcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFuc2ZlckFycmF5SXRlbTxUID0gYW55PihcclxuICAgIGN1cnJlbnRBcnJheTogVFtdLFxyXG4gICAgdGFyZ2V0QXJyYXk6IFRbXSxcclxuICAgIGN1cnJlbnRJbmRleDogbnVtYmVyLFxyXG4gICAgdGFyZ2V0SW5kZXg6IG51bWJlclxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgZnJvbSA9IE1hdGgubWF4KDAsIE1hdGgubWluKGN1cnJlbnRBcnJheS5sZW5ndGggLSAxLCBjdXJyZW50SW5kZXgpKTtcclxuICAgIGNvbnN0IHRvID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGFyZ2V0QXJyYXkubGVuZ3RoLCB0YXJnZXRJbmRleCkpO1xyXG5cclxuICAgIGlmIChjdXJyZW50QXJyYXkubGVuZ3RoKSB7XHJcbiAgICAgIHRhcmdldEFycmF5LnNwbGljZSh0bywgMCwgY3VycmVudEFycmF5LnNwbGljZShmcm9tLCAxKVswXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW9yZGVyRml4dHVyZU1ldGEoZmxvb3JEYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IG1tVG9GZWV0ID0gMzA1O1xyXG4gICAgY29uc3QgdzFGaXh0dXJlcyA9IGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICh3YWxsOiBhbnkpID0+IHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHdhbGwuZWxlbWVudE51bWJlciA9PT0gMVxyXG4gICAgKT8uZml4dHVyZXM7XHJcbiAgICBjb25zdCB3MUZpeHR1cmVzWCA9IHcxRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAoc3VtOiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICBzdW0gKyBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0LFxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gICAgY29uc3QgdzFGaXh0dXJlc1kgPSB3MUZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICBjb25zdCB3MkZpeHR1cmVzID0gZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKHdhbGw6IGFueSkgPT4gd2FsbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgd2FsbC5lbGVtZW50TnVtYmVyID09PSAyXHJcbiAgICApPy5maXh0dXJlcztcclxuICAgIGNvbnN0IHcyRml4dHVyZXNYID0gdzJGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICBjb25zdCB3MkZpeHR1cmVzWSA9IHcyRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAoc3VtOiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICBzdW0gKyBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCxcclxuICAgICAgMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHczRml4dHVyZXMgPSBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAod2FsbDogYW55KSA9PiB3YWxsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3YWxsLmVsZW1lbnROdW1iZXIgPT09IDNcclxuICAgICk/LmZpeHR1cmVzO1xyXG4gICAgY29uc3QgdzNGaXh0dXJlc1ggPSB3M0ZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgKHN1bTogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgc3VtICsgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCxcclxuICAgICAgMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHczRml4dHVyZXNZID0gdzNGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gICAgY29uc3QgdzRGaXh0dXJlcyA9IGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICh3YWxsOiBhbnkpID0+IHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHdhbGwuZWxlbWVudE51bWJlciA9PT0gNFxyXG4gICAgKT8uZml4dHVyZXM7XHJcbiAgICBjb25zdCB3NEZpeHR1cmVzWCA9IHc0Rml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gICAgY29uc3QgdzRGaXh0dXJlc1kgPSB3NEZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgKHN1bTogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgc3VtICsgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQsXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICBjb25zdCB3NUZpeHR1cmVzID0gZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKHdhbGw6IGFueSkgPT4gd2FsbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgd2FsbC5lbGVtZW50TnVtYmVyID09PSA1XHJcbiAgICApPy5maXh0dXJlcztcclxuICAgIGNvbnN0IHc1Rml4dHVyZXNYID0gdzVGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICBjb25zdCB3NUZpeHR1cmVzWSA9IHc1Rml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAoc3VtOiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICBzdW0gKyBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCxcclxuICAgICAgMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IGNGaXh0dXJlcyA9IGZsb29yRGF0YS5jZW50ZXJGaXh0dXJlO1xyXG4gICAgY29uc3QgY0ZpeHR1cmVzWCA9XHJcbiAgICAgIGNGaXh0dXJlcy5sZW5ndGggKlxyXG4gICAgICBjRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgICAwXHJcbiAgICAgICk7XHJcbiAgICBjb25zdCBjRml4dHVyZXNZID1cclxuICAgICAgMiAqXHJcbiAgICAgIGNGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgICAwXHJcbiAgICAgICk7XHJcbiAgICBjb25zdCBlbnRyYW5jZVkgPSAxMDtcclxuXHJcbiAgICBsZXQgbWluWERpc3RhbmNlID0gTWF0aC5tYXgodzFGaXh0dXJlc1gsIGNGaXh0dXJlc1gsIHczRml4dHVyZXNYKTtcclxuICAgIGlmICh3MkZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICBtaW5YRGlzdGFuY2UgKz0gdzJGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAgIDBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodzRGaXh0dXJlcy5sZW5ndGggfHwgdzVGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgaWYgKHc0Rml4dHVyZXMubGVuZ3RoICYmIHc1Rml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgbWluWERpc3RhbmNlICs9IHc1Rml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmICh3NEZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICAgIG1pblhEaXN0YW5jZSArPSB3NEZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAodzVGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgICBtaW5YRGlzdGFuY2UgKz0gdzVGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgICAgIDBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYoY0ZpeHR1cmVzLmxlbmd0aCl7XHJcbiAgICAvLyAgIG1pblhEaXN0YW5jZSArPSAyICogKGNGaXh0dXJlcy5yZWR1Y2UoKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+IE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCksIDApKVxyXG4gICAgLy8gfVxyXG5cclxuICAgIGxldCBtaW5ZRGlzdGFuY2UgPSBNYXRoLm1heChcclxuICAgICAgdzJGaXh0dXJlc1ksXHJcbiAgICAgIGNGaXh0dXJlc1ksXHJcbiAgICAgIHc0Rml4dHVyZXNZICsgdzVGaXh0dXJlc1kgKyBlbnRyYW5jZVlcclxuICAgICk7XHJcbiAgICBpZiAodzFGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgbWluWURpc3RhbmNlICs9IHcxRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgMFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3M0ZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICBtaW5ZRGlzdGFuY2UgKz0gdzNGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgICAwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgbWluWURpc3RhbmNlICs9XHJcbiAgICAgICAgMiAqXHJcbiAgICAgICAgY0ZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgICAgIDBcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSAxKSB7XHJcbiAgICAgICAgZWxlbWVudC5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byhtaW5YRGlzdGFuY2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSAyXHJcbiAgICAgICkge1xyXG4gICAgICAgIGVsZW1lbnQuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28obWluWURpc3RhbmNlKTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gM1xyXG4gICAgICApIHtcclxuICAgICAgICBlbGVtZW50LmRpc3RhbmNlID0gdGhpcy5yb3VuZFRvVHdvKG1pblhEaXN0YW5jZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgICAoZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSA0IHx8IGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gNSkpIHx8XHJcbiAgICAgICAgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIiAmJiBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDEpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCB3NExlbmd0aCA9IHc0Rml4dHVyZXM/Lmxlbmd0aFxyXG4gICAgICAgICAgPyAodzRGaXh0dXJlcy5sZW5ndGggKyAxKSAqXHJcbiAgICAgICAgICAgIHc0Rml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICA6IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IHc1TGVuZ3RoID0gdzVGaXh0dXJlcz8ubGVuZ3RoXHJcbiAgICAgICAgICA/ICh3NUZpeHR1cmVzLmxlbmd0aCArIDEpICpcclxuICAgICAgICAgICAgdzVGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIDogMDtcclxuXHJcbiAgICAgICAgY29uc3QgdXNlZFkgPSB3NExlbmd0aCArIHc1TGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ1kgPSBNYXRoLm1heChtaW5ZRGlzdGFuY2UgLSB1c2VkWSwgMCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHc0RW1wdHkgPSB3NExlbmd0aCA9PT0gMDtcclxuICAgICAgICBjb25zdCB3NUVtcHR5ID0gdzVMZW5ndGggPT09IDA7XHJcblxyXG4gICAgICAgIGxldCBlbnRyYW5jZUxlbmd0aCA9IDA7XHJcbiAgICAgICAgbGV0IHc0RmluYWwgPSB3NExlbmd0aDtcclxuICAgICAgICBsZXQgdzVGaW5hbCA9IHc1TGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAodzRFbXB0eSAmJiB3NUVtcHR5KSB7XHJcbiAgICAgICAgICB3NEZpbmFsID0gdzVGaW5hbCA9IGVudHJhbmNlTGVuZ3RoID0gbWluWURpc3RhbmNlIC8gMztcclxuICAgICAgICB9IGVsc2UgaWYgKHc0RW1wdHkgJiYgIXc1RW1wdHkpIHtcclxuICAgICAgICAgIHc1RmluYWwgPSB3NUxlbmd0aDtcclxuICAgICAgICAgIHc0RmluYWwgPSByZW1haW5pbmdZIC8gMjtcclxuICAgICAgICAgIGVudHJhbmNlTGVuZ3RoID0gcmVtYWluaW5nWSAvIDI7XHJcbiAgICAgICAgfSBlbHNlIGlmICghdzRFbXB0eSAmJiB3NUVtcHR5KSB7XHJcbiAgICAgICAgICB3NEZpbmFsID0gdzRMZW5ndGg7XHJcbiAgICAgICAgICB3NUZpbmFsID0gcmVtYWluaW5nWSAvIDI7XHJcbiAgICAgICAgICBlbnRyYW5jZUxlbmd0aCA9IHJlbWFpbmluZ1kgLyAyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBlbnRyYW5jZUxlbmd0aCA9IHJlbWFpbmluZ1k7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSA0KSB7XHJcbiAgICAgICAgICBlbGVtZW50LmRpc3RhbmNlID0gdGhpcy5yb3VuZFRvVHdvKHc0RmluYWwpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSA1XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBlbGVtZW50LmRpc3RhbmNlID0gdGhpcy5yb3VuZFRvVHdvKHc1RmluYWwpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIgJiZcclxuICAgICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZWxlbWVudC5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byhlbnRyYW5jZUxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgZml4dHVyZU51bWJlciA9IDE7XHJcblxyXG4gICAgZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDEpIHtcclxuICAgICAgICBsZXQgd2FsbEFzc29jaWF0ZWRJbmRleCA9IDE7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRYID0gMDtcclxuICAgICAgICBsZXQgY3VycmVudFkgPSAwO1xyXG4gICAgICAgIGVsZW1lbnQuZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGN1cnJlbnRYID0gKGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpICogaTtcclxuICAgICAgICAgIGlmICh3NUZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjdXJyZW50WCArPSBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLnJvdW5kVG9Ud28oY3VycmVudFgpO1xyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB0aGlzLnJvdW5kVG9Ud28oY3VycmVudFkpO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPSBcIndhbGxcIjtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIgPSAxO1xyXG4gICAgICAgICAgZml4dHVyZS5maXh0dXJlVHlwZSA9IFwid2FsbFwiO1xyXG5cclxuICAgICAgICAgIGlmICghZml4dHVyZS5naG9zdCkge1xyXG4gICAgICAgICAgICAvLyBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBmaXh0dXJlTnVtYmVyKys7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gd2FsbEFzc29jaWF0ZWRJbmRleCsrO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZml4dHVyZS5maXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSAyXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCB3YWxsQXNzb2NpYXRlZEluZGV4ID0gMTtcclxuICAgICAgICBsZXQgY3VycmVudFggPSBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAgICAgKHdhbGw6IGFueSkgPT4gd2FsbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgd2FsbC5lbGVtZW50TnVtYmVyID09PSAxXHJcbiAgICAgICAgKT8uZGlzdGFuY2U7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRZID0gMDtcclxuICAgICAgICBlbGVtZW50LmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjdXJyZW50WSA9IChmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCkgKiBpO1xyXG4gICAgICAgICAgaWYgKHcxRml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRZICs9IGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLnJvdW5kVG9Ud28oXHJcbiAgICAgICAgICAgIGN1cnJlbnRYIC0gZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5yb3VuZFRvVHdvKGN1cnJlbnRZKTtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID0gXCJ3YWxsXCI7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyID0gMjtcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcIndhbGxcIjtcclxuXHJcbiAgICAgICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IHdhbGxBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gM1xyXG4gICAgICApIHtcclxuICAgICAgICBsZXQgd2FsbEFzc29jaWF0ZWRJbmRleCA9IDE7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRYID0gMDtcclxuICAgICAgICBsZXQgY3VycmVudFkgPSBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAgICAgKHdhbGw6IGFueSkgPT4gd2FsbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgd2FsbC5lbGVtZW50TnVtYmVyID09PSAyXHJcbiAgICAgICAgKT8uZGlzdGFuY2U7XHJcbiAgICAgICAgZWxlbWVudC5maXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgY3VycmVudFggPSAoZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCkgKiBpO1xyXG4gICAgICAgICAgaWYgKHc0Rml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRYICs9IGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCA9IHRoaXMucm91bmRUb1R3byhjdXJyZW50WCk7XHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSA9IHRoaXMucm91bmRUb1R3byhcclxuICAgICAgICAgICAgY3VycmVudFkgLSBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID0gXCJ3YWxsXCI7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyID0gMztcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcIndhbGxcIjtcclxuXHJcbiAgICAgICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IHdhbGxBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gNFxyXG4gICAgICApIHtcclxuICAgICAgICBsZXQgd2FsbEFzc29jaWF0ZWRJbmRleCA9IDE7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRYID0gMDtcclxuICAgICAgICBsZXQgY3VycmVudFkgPVxyXG4gICAgICAgICAgZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgICAgICAgKHdhbGw6IGFueSkgPT5cclxuICAgICAgICAgICAgICB3YWxsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3YWxsLmVsZW1lbnROdW1iZXIgPT09IDVcclxuICAgICAgICAgICk/LmRpc3RhbmNlICtcclxuICAgICAgICAgIGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgICAgICh3YWxsOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgd2FsbC5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiICYmIHdhbGwuZWxlbWVudE51bWJlciA9PT0gMVxyXG4gICAgICAgICAgKT8uZGlzdGFuY2U7XHJcblxyXG4gICAgICAgIGVsZW1lbnQuZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54ID0gdGhpcy5yb3VuZFRvVHdvKGN1cnJlbnRYKTtcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5yb3VuZFRvVHdvKFxyXG4gICAgICAgICAgICBjdXJyZW50WSArIChmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCkgKiBpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPSBcIndhbGxcIjtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIgPSA0O1xyXG4gICAgICAgICAgZml4dHVyZS5maXh0dXJlVHlwZSA9IFwid2FsbFwiO1xyXG5cclxuICAgICAgICAgIGlmICghZml4dHVyZS5naG9zdCkge1xyXG4gICAgICAgICAgICAvLyBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBmaXh0dXJlTnVtYmVyKys7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gd2FsbEFzc29jaWF0ZWRJbmRleCsrO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZml4dHVyZS5maXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSA1XHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCB3YWxsQXNzb2NpYXRlZEluZGV4ID0gMTtcclxuICAgICAgICBsZXQgY3VycmVudFggPSAwO1xyXG4gICAgICAgIGxldCBjdXJyZW50WSA9IDA7XHJcbiAgICAgICAgZWxlbWVudC5maXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgY3VycmVudFkgPVxyXG4gICAgICAgICAgICAoZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpICogaSArXHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0O1xyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLnJvdW5kVG9Ud28oY3VycmVudFgpO1xyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB0aGlzLnJvdW5kVG9Ud28oY3VycmVudFkpO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPSBcIndhbGxcIjtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIgPSA1O1xyXG4gICAgICAgICAgZml4dHVyZS5maXh0dXJlVHlwZSA9IFwid2FsbFwiO1xyXG5cclxuICAgICAgICAgIGlmICghZml4dHVyZS5naG9zdCkge1xyXG4gICAgICAgICAgICAvLyBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBmaXh0dXJlTnVtYmVyKys7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gd2FsbEFzc29jaWF0ZWRJbmRleCsrO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZml4dHVyZS5maXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBtYXhGaXh0dXJlc1BlclJvdyA9IGZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmxlbmd0aCAvIDI7XHJcbiAgICBjb25zdCB0b3RhbFJvd3MgPSAyO1xyXG4gICAgY29uc3QgY2VudGVyUm93ID0gTWF0aC5mbG9vcih0b3RhbFJvd3MgLyAyKTtcclxuXHJcbiAgICBsZXQgZmxvb3JBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG5cclxuICAgIGZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmZvckVhY2goKGZpeHR1cmU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICBjb25zdCBzdGFydFggPVxyXG4gICAgICAgIG1pblhEaXN0YW5jZSAvIDIgLVxyXG4gICAgICAgIChtYXhGaXh0dXJlc1BlclJvdyAvIDIpICogKGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpO1xyXG4gICAgICBjb25zdCBzdGFydFkgPVxyXG4gICAgICAgIG1pbllEaXN0YW5jZSAvIDIgLVxyXG4gICAgICAgIGNlbnRlclJvdyAqIChmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCk7XHJcblxyXG4gICAgICBjb25zdCBjb2xJbmRleCA9IE1hdGguZmxvb3IoaW5kZXggLyAyKTtcclxuICAgICAgY29uc3Qgcm93SW5kZXggPSBpbmRleCAlIDIgPT09IDAgPyAxIDogMDtcclxuXHJcbiAgICAgIGNvbnN0IGN1cnJlbnRYID1cclxuICAgICAgICBzdGFydFggKyBjb2xJbmRleCAqIChmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KTtcclxuICAgICAgY29uc3QgY3VycmVudFkgPVxyXG4gICAgICAgIHN0YXJ0WSArIHJvd0luZGV4ICogKGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0KTtcclxuXHJcbiAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54ID0gdGhpcy5yb3VuZFRvVHdvKGN1cnJlbnRYKTtcclxuICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB0aGlzLnJvdW5kVG9Ud28oY3VycmVudFkpO1xyXG4gICAgICBmaXh0dXJlLmZpeHR1cmVUeXBlID0gXCJmbG9vclwiO1xyXG5cclxuICAgICAgaWYgKCFmaXh0dXJlLmdob3N0KSB7XHJcbiAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gZmxvb3JBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZW9yZGVyRml4dHVyZShmbG9vckRhdGE6IGFueSkge1xyXG4gICAgbGV0IGZpeHR1cmVOdW1iZXIgPSAxO1xyXG5cclxuICAgIC8vIFdhbGxzXHJcbiAgICBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgbGV0IHdhbGxBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG5cclxuICAgICAgICBlbGVtZW50LmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPSBcIndhbGxcIjtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIgPSBlbGVtZW50LmVsZW1lbnROdW1iZXI7XHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVUeXBlID0gXCJ3YWxsXCI7XHJcblxyXG4gICAgICAgICAgaWYgKCFmaXh0dXJlLmdob3N0KSB7XHJcbiAgICAgICAgICAgIC8vIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IGZpeHR1cmVOdW1iZXIrKztcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSB3YWxsQXNzb2NpYXRlZEluZGV4Kys7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENlbnRlciBmbG9vciBmaXh0dXJlc1xyXG4gICAgbGV0IGZsb29yQXNzb2NpYXRlZEluZGV4ID0gMTtcclxuICAgIGZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICBmaXh0dXJlLmZpeHR1cmVUeXBlID0gXCJmbG9vclwiO1xyXG5cclxuICAgICAgaWYgKCFmaXh0dXJlLmdob3N0KSB7XHJcbiAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gZmxvb3JBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRFbGVtZW50VmFsdWUoZ3JvdXA6IGFueSkge1xyXG4gICAgcmV0dXJuIGdyb3VwLmdldChcImVsZW1lbnROdW1iZXJcIik/LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gSGVscGVyOiBnZXQgd2FsbCBtZXRhIGJ5IGVsZW1lbnQgbnVtYmVyICgxLWJhc2VkKVxyXG4gIHByaXZhdGUgZ2V0V2FsbEJ5TnVtYmVyKGVsZW1lbnROdW1iZXI6IG51bWJlcik6IGFueSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5mbG9vckRhdGE/LmxheW91dFBvbHlnb24/LmZpbmQoXHJcbiAgICAgICh3OiBhbnkpID0+IHcuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHcuZWxlbWVudE51bWJlciA9PT0gZWxlbWVudE51bWJlclxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIEhlbHBlcjogZmluZCBmaXh0dXJlIGJ5IGlkIGFjcm9zcyB3YWxscyBhbmQgY2VudGVyIGZpeHR1cmVzXHJcbiAgcHJpdmF0ZSBmaW5kRml4dHVyZUJ5SWQoXHJcbiAgICBmaXh0dXJlSWQ6IHN0cmluZ1xyXG4gICk6IHsgZml4dHVyZTogYW55OyBwYXJlbnQ/OiBhbnkgfSB8IG51bGwge1xyXG4gICAgaWYgKCFmaXh0dXJlSWQpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLmZsb29yRGF0YT8ubGF5b3V0UG9seWdvbiA/PyBbXSkge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50LmZpeHR1cmVzKSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiBlbGVtZW50LmZpeHR1cmVzKSB7XHJcbiAgICAgICAgICBpZiAoZml4dHVyZS5faWQgPT09IGZpeHR1cmVJZCkgcmV0dXJuIHsgZml4dHVyZSwgcGFyZW50OiBlbGVtZW50IH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBmaXh0dXJlIG9mIHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlID8/IFtdKSB7XHJcbiAgICAgIGlmIChmaXh0dXJlLl9pZCA9PT0gZml4dHVyZUlkKSByZXR1cm4geyBmaXh0dXJlLCBwYXJlbnQ6IHRoaXMuZmxvb3JEYXRhIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICByb3VuZFRvVHdvKG51bTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZChudW0gKiAxMDApIC8gMTAwO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0U3RvcmVGaXh0dXJlcyhzdG9yZUlkOiBzdHJpbmcsIGVuYWJsZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAoIXRoaXMuZml4dHVyZVRlbXBsYXRlcy5sZW5ndGgpIHtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRGaXh0dXJlVGVtcGxhdGVzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IG51bGw7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2VcclxuICAgICAgLmdldFN0b3JlRml4dHVyZXMoeyBpZDogW3N0b3JlSWRdLCB0cmVlVmlldzogdHJ1ZSB9KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyZXM/LmRhdGE/LlswXT8uZmxvb3JzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucGxhbm9EYXRhID0gc3RydWN0dXJlZENsb25lKHJlcy5kYXRhWzBdKTtcclxuICAgICAgICAgIGlmICh0aGlzLmZsb29yRGF0YT8uX2lkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhID0gc3RydWN0dXJlZENsb25lKFxyXG4gICAgICAgICAgICAgIHJlcy5kYXRhWzBdLmZsb29ycy5maW5kKFxyXG4gICAgICAgICAgICAgICAgKGZsb29yOiBhbnkpID0+IGZsb29yPy5faWQgPT09IHRoaXMuZmxvb3JEYXRhPy5faWRcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShyZXMuZGF0YVswXS5mbG9vcnNbMF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5leHRyYWN0QWxsRml4dHVyZXModGhpcy5mbG9vckRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29ySWQuc2V0VmFsdWUodGhpcy5mbG9vckRhdGEuX2lkLCB7XHJcbiAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnN0b3JlTWV0cmljcy5mbG9vckNvdW50ID0gdGhpcy5wbGFub0RhdGE/LmZsb29ycz8ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIHRoaXMuZGlzYWJsZUVkaXQgPSBmYWxzZTtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcclxuICAgICAgICAgICAgICB0aGlzLnRhc2tEZXRhaWxzKHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsIHRoaXMuZmxvb3JEYXRhLl9pZCksXHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRTdG9yZUZlZWRiYWNrKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEucGxhbm9JZCxcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgICAgICAgICAgIHt9XHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICB9IGNhdGNoIHt9XHJcblxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJGbG9vcigpO1xyXG5cclxuICAgICAgICAgIC8vIHRoaXMuc2VsZWN0Rml4dHVyZUZlZWRiYWNrKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoZW5hYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGF5b3V0Rm9ybT8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzUGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gZmV0Y2ggcGxhbm9cIik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBleHRyYWN0QWxsRml4dHVyZXMoZmxvb3JEYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IGV4dHJhY3RlZEZpeHR1cmUgPSBbXHJcbiAgICAgIC4uLihmbG9vckRhdGE/Lm1hc3RlclRlbXBsYXRlcyA/PyBbXSksXHJcbiAgICAgIC4uLihmbG9vckRhdGE/LmNlbnRlckZpeHR1cmUgPz8gW10pLFxyXG4gICAgXTtcclxuXHJcbiAgICBmbG9vckRhdGE/LmxheW91dFBvbHlnb24/LmZvckVhY2goKGxwOiBhbnkpID0+IHtcclxuICAgICAgZXh0cmFjdGVkRml4dHVyZS5wdXNoKC4uLihscC5maXh0dXJlcyA/PyBbXSkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hbGxGaXh0dXJlcyA9IGV4dHJhY3RlZEZpeHR1cmU7XHJcblxyXG4gICAgdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzID0gW1xyXG4gICAgICAuLi50aGlzLmZsb29yRGF0YT8ubGF5b3V0UG9seWdvbi5mbGF0TWFwKChlOiBhbnkpID0+IGUuZml4dHVyZXMpLFxyXG4gICAgICAuLi50aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZSxcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJGbG9vcih1cGRhdGU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLnN0b3JlTWV0cmljcy5maXh0dXJlQ291bnQgPSB0aGlzLmZsb29yRGF0YS5maXh0dXJlQ291bnQ7XHJcbiAgICB0aGlzLnN0b3JlTWV0cmljcy52bUNvdW50ID0gdGhpcy5mbG9vckRhdGEudm1Db3VudDtcclxuICAgIHRoaXMuZHJhd0luaXRpYWxDb250ZW50KCk7XHJcbiAgICBpZiAodXBkYXRlKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG5cclxuICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3YWxsOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAod2FsbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgIGNvbnN0IHdhbGxJdGVtID0gdGhpcy5wYXRjaFdhbGxFbGVtZW50cyh7XHJcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlOiB3YWxsLmVsZW1lbnRUeXBlLFxyXG4gICAgICAgICAgICBlbGVtZW50TnVtYmVyOiB3YWxsLmVsZW1lbnROdW1iZXIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB3YWxsLmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZml4dHVyZT8uZml4dHVyZU5hbWUgPT09IFwic3BhY2VcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSB0aGlzLnBhdGNoRml4dHVyZSh7XHJcbiAgICAgICAgICAgICAgZml4dHVyZU5hbWU6IGZpeHR1cmUuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgICAgZml4dHVyZUNvbmZpZ0lkOiBmaXh0dXJlLmZpeHR1cmVDb25maWdJZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmUuX2lkLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgKHdhbGxJdGVtLmdldChcImZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheSkucHVzaChmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgd2FsbC5vdGhlckVsZW1lbnRzPy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICAgIHR5cGU6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMub3RoZXJFbGVtZW50TGlzdC5zb21lKChvKSA9PiBvLnZhbHVlID09PSBlbGUuZml4dHVyZU5hbWUpXHJcbiAgICAgICAgICAgICAgICAgID8gZWxlLmZpeHR1cmVOYW1lXHJcbiAgICAgICAgICAgICAgICAgIDogXCJPdGhlcnNcIixcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIGN1c3RvbU5hbWU6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMub3RoZXJFbGVtZW50TGlzdC5zb21lKChvKSA9PiBvLnZhbHVlID09PSBlbGUuZml4dHVyZU5hbWUpXHJcbiAgICAgICAgICAgICAgICAgID8gXCJcIlxyXG4gICAgICAgICAgICAgICAgICA6IGVsZS5maXh0dXJlTmFtZSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgKHdhbGxJdGVtLmdldChcIm90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5KS5wdXNoKGVsZUdyb3VwKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuZ2V0Rm9ybVdhbGxzLnB1c2god2FsbEl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmU/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gdGhpcy5wYXRjaEZpeHR1cmUoe1xyXG4gICAgICAgICAgICBmaXh0dXJlTmFtZTogZml4dHVyZS5maXh0dXJlTmFtZSxcclxuICAgICAgICAgICAgZml4dHVyZUNvbmZpZ0lkOiBmaXh0dXJlLmZpeHR1cmVDb25maWdJZCxcclxuICAgICAgICAgICAgX2lkOiBmaXh0dXJlLl9pZCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vckZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheSkucHVzaChcclxuICAgICAgICAgICAgZml4dHVyZUdyb3VwXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5mbG9vckRhdGE/Lm90aGVyRWxlbWVudHM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZWxlR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgdHlwZTogW1xyXG4gICAgICAgICAgICAgIHRoaXMub3RoZXJFbGVtZW50TGlzdC5zb21lKChvKSA9PiBvLnZhbHVlID09PSBlbGUuZml4dHVyZU5hbWUpXHJcbiAgICAgICAgICAgICAgICA/IGVsZS5maXh0dXJlTmFtZVxyXG4gICAgICAgICAgICAgICAgOiBcIk90aGVyc1wiLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBjdXN0b21OYW1lOiBbXHJcbiAgICAgICAgICAgICAgdGhpcy5vdGhlckVsZW1lbnRMaXN0LnNvbWUoKG8pID0+IG8udmFsdWUgPT09IGVsZS5maXh0dXJlTmFtZSlcclxuICAgICAgICAgICAgICAgID8gXCJcIlxyXG4gICAgICAgICAgICAgICAgOiBlbGUuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yT3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goXHJcbiAgICAgICAgICAgIGVsZUdyb3VwXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpYmVUb0ZpeHR1cmVDb25maWdJZENoYW5nZXMoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG9PdGhlckVsZW1lbnRzQ2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0luaXRpYWxDb250ZW50KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jYW52YXMuY2xlYXIoKTtcclxuICAgIHRoaXMucmVvcmRlckZpeHR1cmUodGhpcy5mbG9vckRhdGEpO1xyXG4gICAgYXdhaXQgdGhpcy5kcmF3TGF5b3V0RWxlbWVudHMoKTtcclxuICAgIFxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzaXplQ2FudmFzKCk7XHJcbiAgICAgIHRoaXMuZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZCgpO1xyXG4gICAgfSwgMzAwKTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRmVlZGJhY2s/LmZpeHR1cmVGZWVkYmFjaz8uZml4dHVyZUlkICYmXHJcbiAgICAgICF0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCAmJlxyXG4gICAgICB0aGlzLmFjdGl2ZUhpZ2hsaWdodFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuY2FudmFzLmFkZCh0aGlzLmFjdGl2ZUhpZ2hsaWdodCk7XHJcbiAgICAgIHRoaXMua2VlcEhpZ2hsaWdodE9uVG9wKCk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmRyYXdCZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGdWxsTGF5b3V0Qm91bmRzKCkge1xyXG4gICAgY29uc3Qgb2JqZWN0cyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIGlmICghb2JqZWN0cy5sZW5ndGgpIHJldHVybiB7IGxlZnQ6IDAsIHRvcDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xyXG5cclxuICAgIGxldCBtaW5YID0gSW5maW5pdHksXHJcbiAgICAgIG1pblkgPSBJbmZpbml0eSxcclxuICAgICAgbWF4WCA9IC1JbmZpbml0eSxcclxuICAgICAgbWF4WSA9IC1JbmZpbml0eTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IG9iaiBvZiBvYmplY3RzKSB7XHJcbiAgICAgIGNvbnN0IHJlY3QgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCByZWN0LmxlZnQpO1xyXG4gICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcmVjdC50b3ApO1xyXG4gICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCk7XHJcbiAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsZWZ0OiBtaW5YLFxyXG4gICAgICB0b3A6IG1pblksXHJcbiAgICAgIHdpZHRoOiBtYXhYIC0gbWluWCxcclxuICAgICAgaGVpZ2h0OiBtYXhZIC0gbWluWSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQoZHVyYXRpb24gPSA0MDApIHtcclxuICAgIGlmICghdGhpcy5jYW52YXMpIHJldHVybjtcclxuXHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEZ1bGxMYXlvdXRCb3VuZHMoKTtcclxuICAgIGlmICghYm91bmRzLndpZHRoIHx8ICFib3VuZHMuaGVpZ2h0KSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY2FudmFzVyA9IHRoaXMuY2FudmFzLmdldFdpZHRoKCk7XHJcbiAgICBjb25zdCBjYW52YXNIID0gdGhpcy5jYW52YXMuZ2V0SGVpZ2h0KCk7XHJcblxyXG4gICAgLy8gRmluYWwgem9vbSB0byBmaXQgKHdpdGggcGFkZGluZylcclxuICAgIGNvbnN0IHNjYWxlWCA9IGNhbnZhc1cgLyBib3VuZHMud2lkdGg7XHJcbiAgICBjb25zdCBzY2FsZVkgPSBjYW52YXNIIC8gYm91bmRzLmhlaWdodDtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1pbihzY2FsZVgsIHNjYWxlWSkgKiAwLjk7IC8vIHBhZGRpbmcgMTAlXHJcblxyXG4gICAgLy8gRGVzaXJlZCB2aWV3cG9ydCBvZmZzZXQgdG8gY2VudGVyIGxheW91dFxyXG4gICAgY29uc3QgdGFyZ2V0VnB0ID0gW1xyXG4gICAgICAuLi4odGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0gfHwgWzEsIDAsIDAsIDEsIDAsIDBdKSxcclxuICAgIF0gYXMgZmFicmljLlRNYXQyRDtcclxuXHJcbiAgICB0YXJnZXRWcHRbMF0gPSB0YXJnZXRab29tOyAvLyBzY2FsZVhcclxuICAgIHRhcmdldFZwdFszXSA9IHRhcmdldFpvb207IC8vIHNjYWxlWVxyXG5cclxuICAgIHRhcmdldFZwdFs0XSA9IGNhbnZhc1cgLyAyIC0gKGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoIC8gMikgKiB0YXJnZXRab29tOyAvLyBjZW50ZXIgWFxyXG4gICAgdGFyZ2V0VnB0WzVdID0gY2FudmFzSCAvIDIgLSAoYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLyAyKSAqIHRhcmdldFpvb207IC8vIGNlbnRlciBZXHJcblxyXG4gICAgLy8gQ3VycmVudCB2aWV3cG9ydCAoc3RhcnRpbmcgcG9pbnQgb2YgYW5pbWF0aW9uKVxyXG4gICAgY29uc3Qgc3RhcnRWcHQgPSBbLi4udGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0hXSBhcyBmYWJyaWMuVE1hdDJEO1xyXG5cclxuICAgIGZhYnJpYy51dGlsLmFuaW1hdGUoe1xyXG4gICAgICBzdGFydFZhbHVlOiAwLFxyXG4gICAgICBlbmRWYWx1ZTogMSxcclxuICAgICAgZHVyYXRpb24sXHJcbiAgICAgIGVhc2luZzogZmFicmljLnV0aWwuZWFzZS5lYXNlT3V0Q3ViaWMsXHJcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZwdCA9IHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtITtcclxuXHJcbiAgICAgICAgLy8gSW50ZXJwb2xhdGUgbWF0cml4IHZhbHVlc1xyXG4gICAgICAgIHZwdFswXSA9IHN0YXJ0VnB0WzBdICsgKHRhcmdldFZwdFswXSAtIHN0YXJ0VnB0WzBdKSAqIHZhbHVlO1xyXG4gICAgICAgIHZwdFszXSA9IHN0YXJ0VnB0WzNdICsgKHRhcmdldFZwdFszXSAtIHN0YXJ0VnB0WzNdKSAqIHZhbHVlO1xyXG4gICAgICAgIHZwdFs0XSA9IHN0YXJ0VnB0WzRdICsgKHRhcmdldFZwdFs0XSAtIHN0YXJ0VnB0WzRdKSAqIHZhbHVlO1xyXG4gICAgICAgIHZwdFs1XSA9IHN0YXJ0VnB0WzVdICsgKHRhcmdldFZwdFs1XSAtIHN0YXJ0VnB0WzVdKSAqIHZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdMYXlvdXRFbGVtZW50cygpIHtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbltpbmRleF07XHJcblxyXG4gICAgICBsZXQgd2FsbDtcclxuXHJcbiAgICAgIGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbiA/Pz0ge1xyXG4gICAgICAgIHg6IDAsXHJcbiAgICAgICAgeTogMCxcclxuICAgICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueCwgZWxlbWVudC51bml0KTtcclxuICAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksIGVsZW1lbnQudW5pdCk7XHJcblxyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLndhbGxUaGlja25lc3M7XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQuZGlzdGFuY2UsIGVsZW1lbnQudW5pdCk7XHJcbiAgICAgICAgd2FsbCA9IGF3YWl0IHRoaXMuZHJhd1dhbGwodGhpcy5jYW52YXMsIHgsIHksIGhlaWdodCwgd2lkdGgsIGVsZW1lbnQpO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIikge1xyXG4gICAgICAgIGNvbnN0IGFycm93V2lkdGggPSA4MDtcclxuICAgICAgICBjb25zdCBhcnJvd0hlaWdodCA9IDc1O1xyXG4gICAgICAgIGNvbnN0IGFycm93QmFzZSA9IDQwO1xyXG4gICAgICAgIHRoaXMuZHJhd0VudHJhbmNlKFxyXG4gICAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICB4LFxyXG4gICAgICAgICAgeSxcclxuICAgICAgICAgIGFycm93V2lkdGgsXHJcbiAgICAgICAgICBhcnJvd0hlaWdodCxcclxuICAgICAgICAgIGFycm93QmFzZSxcclxuICAgICAgICAgIGVsZW1lbnRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXBzOiBmYWJyaWMuR3JvdXBbXSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQ/LmZpeHR1cmVzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3QgZml4dHVyZSA9IGVsZW1lbnQuZml4dHVyZXNbal07XHJcbiAgICAgICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLngsXHJcbiAgICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55LFxyXG4gICAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGZpeHR1cmVIZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgZml4dHVyZVdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXRcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgY29uc3QgZml4dHVyZU9iaiA9IGF3YWl0IHRoaXMuZHJhd0ZpeHR1cmUoXHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgICAgICB4LFxyXG4gICAgICAgICAgICB5LFxyXG4gICAgICAgICAgICBmaXh0dXJlSGVpZ2h0LFxyXG4gICAgICAgICAgICBmaXh0dXJlV2lkdGgsXHJcbiAgICAgICAgICAgIGZpeHR1cmVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBmaXh0dXJlR3JvdXBzLnB1c2goZml4dHVyZU9iaiBhcyBmYWJyaWMuR3JvdXApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQuaXNMb2NrZWQgJiYgd2FsbCkge1xyXG4gICAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKHdhbGwpO1xyXG4gICAgICAgICAgZml4dHVyZUdyb3Vwcy5mb3JFYWNoKChmKSA9PiB0aGlzLmNhbnZhcy5yZW1vdmUoZikpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkR3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFt3YWxsLCAuLi5maXh0dXJlR3JvdXBzXSwge1xyXG4gICAgICAgICAgICBoYXNDb250cm9sczogdHJ1ZSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb21iaW5lZEdyb3VwLnNldCh7IGlzTG9ja2VkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgdGhpcy5jYW52YXMuYWRkKGNvbWJpbmVkR3JvdXApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50Py5vdGhlckVsZW1lbnRzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3Qgb3RoZXJFbGVtZW50ID0gZWxlbWVudC5vdGhlckVsZW1lbnRzW2pdO1xyXG4gICAgICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueCwgXCJmdFwiKTtcclxuICAgICAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksIFwiZnRcIik7XHJcbiAgICAgICAgICBjb25zdCBhID0gb3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24uYW5nbGU7XHJcbiAgICAgICAgICBjb25zdCBoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGZpeHR1cmVPYmogPSB0aGlzLmRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKFxyXG4gICAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgICAgeCxcclxuICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgYSxcclxuICAgICAgICAgICAgdyxcclxuICAgICAgICAgICAgaCxcclxuICAgICAgICAgICAgb3RoZXJFbGVtZW50XHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIGVsZW1lbnRzR3JvdXAucHVzaChmaXh0dXJlT2JqIGFzIGZhYnJpYy5Hcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZT8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbaV07XHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54LFxyXG4gICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0XHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55LFxyXG4gICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0XHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGZpeHR1cmVIZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBmaXh0dXJlV2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXRcclxuICAgICAgKTtcclxuICAgICAgYXdhaXQgdGhpcy5kcmF3Rml4dHVyZShcclxuICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICB4LFxyXG4gICAgICAgIHksXHJcbiAgICAgICAgZml4dHVyZUhlaWdodCxcclxuICAgICAgICBmaXh0dXJlV2lkdGgsXHJcbiAgICAgICAgZml4dHVyZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5mbG9vckRhdGE/Lm90aGVyRWxlbWVudHM/Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgIGNvbnN0IG90aGVyRWxlbWVudCA9IHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHNbal07XHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLngsIFwiZnRcIik7XHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksIFwiZnRcIik7XHJcbiAgICAgIGNvbnN0IGEgPSBvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcclxuICAgICAgY29uc3QgaCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljV2lkdGgudW5pdFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZml4dHVyZU9iaiA9IHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgeCxcclxuICAgICAgICB5LFxyXG4gICAgICAgIGEsXHJcbiAgICAgICAgdyxcclxuICAgICAgICBoLFxyXG4gICAgICAgIG90aGVyRWxlbWVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd1dhbGwoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBlbGVtZW50RGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICBjb25zdCByYWRpdXMgPSA1O1xyXG4gICAgY29uc3QgZmlsbENvbG9yID0gXCIjRjZGQ0ZGXCI7XHJcbiAgICBjb25zdCBzdHJva2VDb2xvciA9IFwiI0QwRDVERFwiO1xyXG4gICAgY29uc3QgbGFiZWxDb2xvciA9IFwiIzAwOUJGM1wiO1xyXG4gICAgbGV0IHRleHQgPSBgJHt0aGlzLnRpdGxlQ2FzZS50cmFuc2Zvcm0oZWxlbWVudERhdGEuZWxlbWVudFR5cGUpfSAke1xyXG4gICAgICBlbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyXHJcbiAgICB9YDtcclxuXHJcbiAgICBjb25zdCB3YWxsID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogMCxcclxuICAgICAgdG9wOiAwLFxyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBmaWxsOiBmaWxsQ29sb3IsXHJcbiAgICAgIHN0cm9rZTogc3Ryb2tlQ29sb3IsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgc3Ryb2tlVW5pZm9ybTogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlclggPSB3aWR0aCAvIDI7XHJcbiAgICBjb25zdCBjZW50ZXJZID0gaGVpZ2h0IC8gMjtcclxuICAgIGNvbnN0IGlzVmVydGljYWwgPSBoZWlnaHQgPiB3aWR0aDtcclxuXHJcbiAgICBjb25zdCBsYWJlbCA9IG5ldyBmYWJyaWMuRmFicmljVGV4dCh0ZXh0LCB7XHJcbiAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgZm9udFNpemU6IDEwLFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIGFuZ2xlOiBpc1ZlcnRpY2FsID8gLTkwIDogMCxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBhcnJvd0hlYWQgPSA1O1xyXG4gICAgY29uc3QgZWxlbWVudHM6IGZhYnJpYy5PYmplY3RbXSA9IFt3YWxsLCBsYWJlbF07XHJcblxyXG4gICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgY29uc3QgdGV4dFdpZHRoID0gbGFiZWwud2lkdGggfHwgMDtcclxuICAgICAgY29uc3QgdG9wQXJyb3dZID0gNTtcclxuICAgICAgY29uc3QgdG9wQXJyb3dFbmRZID0gY2VudGVyWSAtIHRleHRXaWR0aCAvIDIgLSA1O1xyXG5cclxuICAgICAgaWYgKHRvcEFycm93RW5kWSA+IHRvcEFycm93WSArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoW2NlbnRlclgsIHRvcEFycm93WSwgY2VudGVyWCwgdG9wQXJyb3dFbmRZXSwge1xyXG4gICAgICAgICAgICBzdHJva2U6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgICAgICAgIHRvcDogdG9wQXJyb3dZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiYm90dG9tXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBib3R0b21BcnJvd1N0YXJ0WSA9IGNlbnRlclkgKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgYm90dG9tQXJyb3dFbmRZID0gaGVpZ2h0IC0gNTtcclxuXHJcbiAgICAgIGlmIChib3R0b21BcnJvd0VuZFkgPiBib3R0b21BcnJvd1N0YXJ0WSArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgIFtjZW50ZXJYLCBib3R0b21BcnJvd1N0YXJ0WSwgY2VudGVyWCwgYm90dG9tQXJyb3dFbmRZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiBjZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IGJvdHRvbUFycm93RW5kWSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiAxODAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwidG9wXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSBsYWJlbC53aWR0aCB8fCAwO1xyXG4gICAgICBjb25zdCBsZWZ0QXJyb3dTdGFydFggPSA1O1xyXG4gICAgICBjb25zdCBsZWZ0QXJyb3dFbmRYID0gY2VudGVyWCAtIHRleHRXaWR0aCAvIDIgLSA1O1xyXG5cclxuICAgICAgaWYgKGxlZnRBcnJvd0VuZFggPiBsZWZ0QXJyb3dTdGFydFggKyBhcnJvd0hlYWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5MaW5lKFtsZWZ0QXJyb3dTdGFydFgsIGNlbnRlclksIGxlZnRBcnJvd0VuZFgsIGNlbnRlclldLCB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogbGVmdEFycm93U3RhcnRYLFxyXG4gICAgICAgICAgICB0b3A6IGNlbnRlclksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogLTkwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcmlnaHRBcnJvd1N0YXJ0WCA9IGNlbnRlclggKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgcmlnaHRBcnJvd0VuZFggPSB3aWR0aCAtIDU7XHJcblxyXG4gICAgICBpZiAocmlnaHRBcnJvd0VuZFggPiByaWdodEFycm93U3RhcnRYICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgW3JpZ2h0QXJyb3dTdGFydFgsIGNlbnRlclksIHJpZ2h0QXJyb3dFbmRYLCBjZW50ZXJZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiByaWdodEFycm93RW5kWCxcclxuICAgICAgICAgICAgdG9wOiBjZW50ZXJZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDkwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxvY2tTdmdTdHJpbmcgPSBgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgIDxwYXRoIGQ9XCJNNyAxMVY3QzcgNS42NzM5MiA3LjUyNjc4IDQuNDAyMTUgOC40NjQ0NyAzLjQ2NDQ3QzkuNDAyMTUgMi41MjY3OCAxMC42NzM5IDIgMTIgMkMxMy4zMjYxIDIgMTQuNTk3OSAyLjUyNjc4IDE1LjUzNTUgMy40NjQ0N0MxNi40NzMyIDQuNDAyMTUgMTcgNS42NzM5MiAxNyA3VjExTTUgMTFIMTlDMjAuMTA0NiAxMSAyMSAxMS44OTU0IDIxIDEzVjIwQzIxIDIxLjEwNDYgMjAuMTA0NiAyMiAxOSAyMkg1QzMuODk1NDMgMjIgMyAyMS4xMDQ2IDMgMjBWMTNDMyAxMS44OTU0IDMuODk1NDMgMTEgNSAxMVpcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgPC9zdmc+YDtcclxuXHJcbiAgICBsZXQgbG9hZGVkU1ZHOiBhbnkgPSBhd2FpdCBmYWJyaWMubG9hZFNWR0Zyb21TdHJpbmcobG9ja1N2Z1N0cmluZyk7XHJcblxyXG4gICAgbGV0IGxvY2tTdmcgPSBmYWJyaWMudXRpbC5ncm91cFNWR0VsZW1lbnRzKFxyXG4gICAgICBsb2FkZWRTVkcub2JqZWN0cyxcclxuICAgICAgbG9hZGVkU1ZHLm9wdGlvbnNcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgd2FsbENlbnRlclggPSB3aWR0aCAvIDI7XHJcbiAgICBjb25zdCB3YWxsQ2VudGVyWSA9IGhlaWdodCAvIDI7XHJcblxyXG4gICAgbG9ja1N2Zy5zY2FsZVRvV2lkdGgoMjApO1xyXG4gICAgbG9ja1N2Zy5zY2FsZVRvSGVpZ2h0KDIwKTtcclxuXHJcbiAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICBsb2NrU3ZnLnNldCh7XHJcbiAgICAgICAgbGVmdDogd2FsbENlbnRlclgsXHJcbiAgICAgICAgdG9wOiB3YWxsQ2VudGVyWSxcclxuICAgICAgICBhbmdsZTogLTkwLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsb2NrU3ZnLnNldCh7XHJcbiAgICAgICAgbGVmdDogd2FsbENlbnRlclgsXHJcbiAgICAgICAgdG9wOiB3YWxsQ2VudGVyWSxcclxuICAgICAgICBhbmdsZTogMCxcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxvY2tTdmcuc2V0KHtcclxuICAgICAgdmlzaWJsZTogZmFsc2UsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBsb2NrU3ZnLm9uKFwibW91c2Vkb3duXCIsIChvcHQpID0+IHtcclxuICAgICAgaWYgKG9wdCAmJiBvcHQuZSAmJiBvcHQuZS5zdG9wUHJvcGFnYXRpb24pIHtcclxuICAgICAgICBvcHQuZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgIGVsZW1lbnREYXRhLmlzTG9ja2VkID0gIWVsZW1lbnREYXRhPy5pc0xvY2tlZDtcclxuICAgICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBlbGVtZW50cy5wdXNoKGxvY2tTdmcpO1xyXG5cclxuICAgIGNvbnN0IGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChlbGVtZW50cywge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIGhhc0NvbnRyb2xzOiB0cnVlLFxyXG4gICAgICBsb2NrU2NhbGluZ1g6IGlzVmVydGljYWwsXHJcbiAgICAgIGxvY2tTY2FsaW5nWTogIWlzVmVydGljYWwsXHJcbiAgICAgIC8vIGxvY2tSb3RhdGlvbjogdHJ1ZSxcclxuICAgICAgc2VsZWN0YWJsZTogdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgICAgYW5nbGU6IGVsZW1lbnREYXRhLmFuZ2xlLFxyXG4gICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgICBkYXRhOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm9ialR5cGUgPSBlbGVtZW50RGF0YS5lbGVtZW50VHlwZTtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50RGF0YTtcclxuXHJcbiAgICAvLyBncm91cC5vbihcIm1vZGlmaWVkXCIsIChlOiBhbnkpID0+IHtcclxuICAgIC8vICAgY29uc3QgYWN0aW9uID0gZS50cmFuc2Zvcm0/LmFjdGlvbjtcclxuICAgIC8vICAgaWYgKGFjdGlvbiA9PT0gXCJkcmFnXCIgfHwgYWN0aW9uID09PSBcInJvdGF0ZVwiKSB7XHJcbiAgICAvLyAgICAgY29uc3Qgd2FsbEZpeHR1cmVJZHMgPSBlbGVtZW50RGF0YT8uZml4dHVyZXM/Lm1hcCgoZTogYW55KSA9PiBlLl9pZCk7XHJcbiAgICAvLyAgICAgaWYgKCF3YWxsRml4dHVyZUlkcz8ubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgLy8gICAgIGNvbnN0IGZpeHR1cmVzID0gdGhpcy5jYW52YXNcclxuICAgIC8vICAgICAgIC5nZXRPYmplY3RzKClcclxuICAgIC8vICAgICAgIC5maWx0ZXIoXHJcbiAgICAvLyAgICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgIC8vICAgICAgICAgICBvYmoub2JqVHlwZSA9PT0gXCJmaXh0dXJlXCIgJiZcclxuICAgIC8vICAgICAgICAgICB3YWxsRml4dHVyZUlkcy5pbmNsdWRlcyhvYmouZml4dHVyZUlkKVxyXG4gICAgLy8gICAgICAgKTtcclxuICAgIC8vICAgICBpZiAoIWZpeHR1cmVzLmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIC8vICAgICAvLyBSZW1vdmUgZXhpc3RpbmcgZml4dHVyZXMgdGVtcG9yYXJpbHlcclxuICAgIC8vICAgICBmaXh0dXJlcy5mb3JFYWNoKChmKSA9PiB0aGlzLmNhbnZhcy5yZW1vdmUoZikpO1xyXG5cclxuICAgIC8vICAgICBjb25zdCBjb21iaW5lZEdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChmaXh0dXJlcywge1xyXG4gICAgLy8gICAgICAgaGFzQ29udHJvbHM6IHRydWUsXHJcbiAgICAvLyAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxyXG4gICAgLy8gICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICAvLyAgICAgfSk7XHJcblxyXG4gICAgLy8gICAgIC8vIHdhbGwncyBwb3NpdGlvbiBhbmQgYW5nbGVcclxuICAgIC8vICAgICBjb25zdCB4MCA9IHRoaXMuZnJvbVBpeGVscyhlLnRhcmdldC5sZWZ0LCBcImZ0XCIpO1xyXG4gICAgLy8gICAgIGNvbnN0IHkwID0gdGhpcy5mcm9tUGl4ZWxzKGUudGFyZ2V0LnRvcCwgXCJmdFwiKTtcclxuICAgIC8vICAgICBjb25zdCBhID0gZS50YXJnZXQuYW5nbGUgfHwgMDtcclxuICAgIC8vICAgICBjb25zdCBhbmdsZVJhZCA9IChhICogTWF0aC5QSSkgLyAxODA7XHJcblxyXG4gICAgLy8gICAgIC8vIEluc3RlYWQgb2Ygd2FsbCBlbmQsIHVzZSB3YWxsIHN0YXJ0ICsgcGVycGVuZGljdWxhciBvZmZzZXRcclxuICAgIC8vICAgICBjb25zdCBvZmZzZXQgPSAxOyAvLyBwZXJwZW5kaWN1bGFyIGRpc3RhbmNlIGZyb20gd2FsbFxyXG4gICAgLy8gICAgIGNvbnN0IGZ4X29mZnNldCA9IHgwICsgb2Zmc2V0ICogLU1hdGguc2luKGFuZ2xlUmFkKTtcclxuICAgIC8vICAgICBjb25zdCBmeV9vZmZzZXQgPSB5MCArIG9mZnNldCAqIE1hdGguY29zKGFuZ2xlUmFkKTtcclxuXHJcbiAgICAvLyAgICAgLy8gQ29udmVydCBiYWNrIHRvIHBpeGVscyBhbmQgYXBwbHlcclxuICAgIC8vICAgICBjb21iaW5lZEdyb3VwLmxlZnQgPSB0aGlzLnRvUGl4ZWxzKGZ4X29mZnNldCwgXCJmdFwiKTtcclxuICAgIC8vICAgICBjb21iaW5lZEdyb3VwLnRvcCA9IHRoaXMudG9QaXhlbHMoZnlfb2Zmc2V0LCBcImZ0XCIpO1xyXG4gICAgLy8gICAgIGNvbWJpbmVkR3JvdXAuYW5nbGUgPSBhO1xyXG5cclxuICAgIC8vICAgICB0aGlzLmNhbnZhcy5hZGQoY29tYmluZWRHcm91cCk7XHJcbiAgICAvLyAgICAgdW5ncm91cFByZXNlcnZlUG9zaXRpb25zKGNvbWJpbmVkR3JvdXAsIHRoaXMuY2FudmFzKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgLy8gY29uc3QgdW5ncm91cFByZXNlcnZlUG9zaXRpb25zID0gYXN5bmMgKFxyXG4gICAgLy8gICBjb21iaW5lZEdyb3VwOiBmYWJyaWMuR3JvdXAsXHJcbiAgICAvLyAgIGNhbnZhczogZmFicmljLkNhbnZhc1xyXG4gICAgLy8gKSA9PiB7XHJcbiAgICAvLyAgIGNvbnN0IGl0ZW1zID0gY29tYmluZWRHcm91cC5nZXRPYmplY3RzKCkubWFwKChvYmopID0+IHtcclxuICAgIC8vICAgICBjb25zdCBhYnMgPSBmYWJyaWMudXRpbC50cmFuc2Zvcm1Qb2ludChcclxuICAgIC8vICAgICAgIG5ldyBmYWJyaWMuUG9pbnQob2JqLmxlZnQhLCBvYmoudG9wISksXHJcbiAgICAvLyAgICAgICBjb21iaW5lZEdyb3VwLmNhbGNUcmFuc2Zvcm1NYXRyaXgoKVxyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgICAgcmV0dXJuIHtcclxuICAgIC8vICAgICAgIGlkOiAob2JqIGFzIGFueSkuZml4dHVyZUlkLFxyXG4gICAgLy8gICAgICAgeDogYWJzLngsXHJcbiAgICAvLyAgICAgICB5OiBhYnMueSxcclxuICAgIC8vICAgICAgIGFuZ2xlOiBjb21iaW5lZEdyb3VwLmFuZ2xlLFxyXG4gICAgLy8gICAgIH07XHJcbiAgICAvLyAgIH0pO1xyXG5cclxuICAgIC8vICAgdGhpcy51cGRhdGVGaXh0dXJlQ29vcmRpbmF0ZXMoaXRlbXMpO1xyXG4gICAgLy8gICBjYW52YXMucmVtb3ZlKGNvbWJpbmVkR3JvdXApO1xyXG4gICAgLy8gICBjb25zdCB3YWxsVG9SZXJlbmRlciA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgIC8vICAgICAoZTogYW55KSA9PlxyXG4gICAgLy8gICAgICAgZS5lbGVtZW50TnVtYmVyID09PSBlbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyICYmXHJcbiAgICAvLyAgICAgICBlLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIlxyXG4gICAgLy8gICApO1xyXG5cclxuICAgIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3YWxsVG9SZXJlbmRlcj8uZml4dHVyZXM/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAvLyAgICAgY29uc3QgZml4dHVyZSA9IHdhbGxUb1JlcmVuZGVyLmZpeHR1cmVzW2ldO1xyXG4gICAgLy8gICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgLy8gICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLngsXHJcbiAgICAvLyAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdFxyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAvLyAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSxcclxuICAgIC8vICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0XHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vICAgICBjb25zdCBmaXh0dXJlSGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgIC8vICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgIC8vICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0XHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vICAgICBjb25zdCBmaXh0dXJlV2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgLy8gICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAvLyAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICAvLyAgICAgKTtcclxuXHJcbiAgICAvLyAgICAgYXdhaXQgdGhpcy5kcmF3Rml4dHVyZShcclxuICAgIC8vICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgLy8gICAgICAgeCxcclxuICAgIC8vICAgICAgIHksXHJcbiAgICAvLyAgICAgICBmaXh0dXJlSGVpZ2h0LFxyXG4gICAgLy8gICAgICAgZml4dHVyZVdpZHRoLFxyXG4gICAgLy8gICAgICAgZml4dHVyZVxyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgIC8vIH07XHJcblxyXG4gICAgY2FudmFzLmFkZChncm91cCk7XHJcblxyXG4gICAgLy8gSWYgbmV3bHkgYWRkZWQsIGZvY3VzIGl0IG9uY2VcclxuICAgIGlmICgoZWxlbWVudERhdGEgYXMgYW55KT8ubmV3QWRkZWQpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmNhbnZhcy5zZXRBY3RpdmVPYmplY3QoZ3JvdXApO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfSBjYXRjaCB7fVxyXG4gICAgICBkZWxldGUgKGVsZW1lbnREYXRhIGFzIGFueSkubmV3QWRkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0ZpeHR1cmUoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBmaXh0dXJlRGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICBsZXQgZml4dHVyZUNvbG9yOiBhbnk7XHJcbiAgICBpZiAoW1wiZml4dHVyZVwiLCBcImZpeHR1cmUtcmVkb1wiXS5pbmNsdWRlcyh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSkpIHtcclxuICAgICAgZml4dHVyZUNvbG9yID0ge1xyXG4gICAgICAgIHByaW1hcnk6XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5zdGF0dXMgPT0gXCJcIiAmJiBmaXh0dXJlRGF0YS50YXNrU3RhdHVzID09IFwic3VibWl0XCJcclxuICAgICAgICAgICAgPyBcIiNhNWE2YThcIlxyXG4gICAgICAgICAgICA6IGZpeHR1cmVEYXRhLnN0YXR1cyA9PSBcImFncmVlXCJcclxuICAgICAgICAgICAgPyBcIiM2Q0U5QTZcIlxyXG4gICAgICAgICAgICA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIGZpbGw6XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5zdGF0dXMgPT0gXCJcIiAmJiBmaXh0dXJlRGF0YS50YXNrU3RhdHVzID09IFwic3VibWl0XCJcclxuICAgICAgICAgICAgPyBcIiNmM2Y0ZjhcIlxyXG4gICAgICAgICAgICA6IGZpeHR1cmVEYXRhLnN0YXR1cyA9PSBcImFncmVlXCJcclxuICAgICAgICAgICAgPyBcIiM2Q0U5QTZcIlxyXG4gICAgICAgICAgICA6IFwiI0VBRjhGRlwiLFxyXG4gICAgICAgIHZtRmlsbDpcclxuICAgICAgICAgIGZpeHR1cmVEYXRhLnN0YXR1cyA9PSBcIlwiICYmIGZpeHR1cmVEYXRhLnRhc2tTdGF0dXMgPT0gXCJzdWJtaXRcIlxyXG4gICAgICAgICAgICA/IFwiI2E1YTZhOFwiXHJcbiAgICAgICAgICAgIDogXCIjNjkzOEVGXCIsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoZml4dHVyZURhdGEuZml4dHVyZU5hbWUgPT09IFwic3BhY2VcIikgcmV0dXJuO1xyXG4gICAgY29uc3QgcmFkaXVzID0gNTtcclxuICAgIGNvbnN0IG1haW5Db250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdG9wV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgdG9wWCA9IHggKyAod2lkdGggLSB0b3BXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgdG9wWSA9IHkgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgIGNvbnN0IHRvcENvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHRvcFgsXHJcbiAgICAgIHRvcDogdG9wWSxcclxuICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRvcEhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBpbm5lckJveEhlaWdodCA9IHRvcEhlaWdodCAvIDI7XHJcbiAgICBjb25zdCBpbm5lclRvcEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFxyXG4gICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGggLSByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZfSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3RvcFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICBRICR7dG9wWH0gJHt0b3BZfSAke3RvcFggKyByYWRpdXN9ICR7dG9wWX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgdG9wVGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYEZpeHR1cmUgJHtcclxuICAgICAgICBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgID8gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyICtcclxuICAgICAgICAgICAgKGZpeHR1cmVEYXRhPy5maXh0dXJlTnVtYmVyXHJcbiAgICAgICAgICAgICAgPyBcIiAtIEZYLVwiICsgZml4dHVyZURhdGEuZml4dHVyZU51bWJlclxyXG4gICAgICAgICAgICAgIDogXCJcIilcclxuICAgICAgICAgIDogXCJuZXdcIlxyXG4gICAgICB9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiB0b3BZICsgaW5uZXJCb3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBpbm5lckJveEhlaWdodCxcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc2Vjb25kQm94WSA9IHRvcFkgKyBpbm5lckJveEhlaWdodDtcclxuXHJcbiAgICBjb25zdCBpbm5lckJvdHRvbUJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHt0b3BYfSAke3NlY29uZEJveFl9IFxyXG4gICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZfSBcclxuICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke1xyXG4gICAgICAgIHRvcFggKyB0b3BXaWR0aCAtIHJhZGl1c1xyXG4gICAgICB9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgIEwgJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7dG9wWH0gJHtcclxuICAgICAgICBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgfSBcclxuICAgIEwgJHt0b3BYfSAke3NlY29uZEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogXCIjMzQ0MDU0XCIsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgbGV0IGZvbnRTaXplID0gNTtcclxuICAgIGxldCBib3R0b21UZXh0O1xyXG5cclxuICAgIGNvbnN0IHRleHRDb250ZW50ID0gYCR7Zml4dHVyZURhdGE/LmZpeHR1cmVOYW1lfSAtICR7Zml4dHVyZURhdGE/LmZpeHR1cmVXaWR0aC52YWx1ZX0gJHtmaXh0dXJlRGF0YT8uZml4dHVyZVdpZHRoLnVuaXR9YDtcclxuXHJcbiAgICBjb25zdCBjcmVhdGVCb3R0b21UZXh0ID0gKGZzOiBhbnkpID0+XHJcbiAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0Q29udGVudCwge1xyXG4gICAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBmaWxsOiBcIiNGRkZGRkZcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgZG8ge1xyXG4gICAgICBib3R0b21UZXh0ID0gY3JlYXRlQm90dG9tVGV4dChmb250U2l6ZSk7XHJcbiAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgIH0gd2hpbGUgKGJvdHRvbVRleHQuaGVpZ2h0ID4gaW5uZXJCb3hIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICBjb25zdCBtaWRXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRYID0geCArICh3aWR0aCAtIG1pZFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBtaWRZID0gdG9wWSArIHRvcEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgY29uc3QgbWlkQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgdG9wOiBtaWRZLFxyXG4gICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgIGhlaWdodDogbWlkSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNoZWxmQ291bnQgPSBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8ubGVuZ3RoO1xyXG4gICAgY29uc3QgYm94SGVpZ2h0ID0gbWlkSGVpZ2h0IC8gKHNoZWxmQ291bnQgKyAyKTtcclxuICAgIGNvbnN0IGZpcnN0Qm94WSA9IG1pZFk7XHJcblxyXG4gICAgY29uc3QgZmlyc3RCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGggLSByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WX0gJHttaWRYICsgbWlkV2lkdGh9ICR7XHJcbiAgICAgICAgZmlyc3RCb3hZICsgcmFkaXVzXHJcbiAgICAgIH0gXHJcbiAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgTCAke21pZFh9ICR7Zmlyc3RCb3hZICsgcmFkaXVzfSBcclxuICAgICAgICBRICR7bWlkWH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogZml4dHVyZUNvbG9yPy5maWxsXHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgOiBcIiNFQUY4RkZcIixcclxuICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgIDogXCIjNkJDQUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZmlyc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgJHtmaXh0dXJlRGF0YT8uaGVhZGVyPy5sYWJlbCA/IGZpeHR1cmVEYXRhLmhlYWRlci5sYWJlbCA6IFwiXCJ9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBmaXJzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA3LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgIGZpbGw6IGZpeHR1cmVEYXRhLmlzc3VlID8gXCIjZmZmXCIgOiBcIiMxMDE4MjhcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzaGVsdmVzID0gW107XHJcbiAgICBjb25zdCBzaGVsZkhlaWdodCA9IG1pZEhlaWdodCAtIDIgKiBib3hIZWlnaHQ7XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDFcIikge1xyXG4gICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0O1xyXG5cclxuICAgICAgY29uc3Qgc2hlbGYgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IHNoZWxmSGVpZ2h0LFxyXG4gICAgICAgIC8vIHN0cm9rZTogJyM1MUMxRkYnLFxyXG4gICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgdGV4dCA9IGZpeHR1cmVEYXRhPy5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiICsgXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgICAvLyBXcmFwIHRleHQgd2l0aGluIGZpeHR1cmUgd2lkdGggYW5kIHNocmluayB0byBmaXQgdmVydGljYWwgc3BhY2VcclxuICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBzaGVsZkhlaWdodCAqIDAuODtcclxuICAgICAgbGV0IGZvbnRTaXplTDEgPSA2O1xyXG5cclxuICAgICAgY29uc3QgY3JlYXRlV3JhcHBlZFRleHRib3ggPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICBuZXcgZmFicmljLlRleHRib3godGV4dCwge1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBsZXQgd3JhcHBlZFRleHQgPSBjcmVhdGVXcmFwcGVkVGV4dGJveChmb250U2l6ZUwxKTtcclxuICAgICAgd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemVMMSA+IDIpIHtcclxuICAgICAgICBmb250U2l6ZUwxIC09IDAuNTtcclxuICAgICAgICB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGJveFkgKyBzaGVsZkhlaWdodCAvIDIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBNYXRoLm1pbihtYXhUZXh0V2lkdGgsIHdyYXBwZWRUZXh0LndpZHRoISkgKyBwYWRkaW5nLFxyXG4gICAgICAgIGhlaWdodDogd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyAyLFxyXG4gICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgcng6IDEsXHJcbiAgICAgICAgcnk6IDEsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmLCBiYWNrZ3JvdW5kLCB3cmFwcGVkVGV4dCk7XHJcbiAgICB9IGVsc2UgaWYgKGZpeHR1cmVEYXRhLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDJcIikge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoZWxmQ291bnQ7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoaSArIDEpO1xyXG5cclxuICAgICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGYpO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZURhdGEuc2hlbGZDb25maWc/LltpXS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5baV0udHJheVJvd3MgfHwgMTtcclxuICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGV4dCA9XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8uW2ldLnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgLy8gTDI6IFNpbmdsZS1saW5lIGVsbGlwc2lzIGFnYWluc3QgZnVsbCBzaGVsZiB3aWR0aFxyXG4gICAgICAgIGNvbnN0IGhvcml6b250YWxQYWRkaW5nID0gNjtcclxuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBNYXRoLm1heCgwLCBtaWRXaWR0aCAtIGhvcml6b250YWxQYWRkaW5nKTtcclxuICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gYm94SGVpZ2h0ICogMC44O1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb250U2l6ZSA9IDU7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lYXN1cmUgPSAodDogc3RyaW5nKSA9PlxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UZXh0KHQsIHtcclxuICAgICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBkaXNwbGF5VGV4dCA9IHRleHQ7XHJcbiAgICAgICAgbGV0IG1lYXN1cmVkID0gbWVhc3VyZShkaXNwbGF5VGV4dCk7XHJcblxyXG4gICAgICAgIGlmICgobWVhc3VyZWQud2lkdGggPz8gMCkgPiBtYXhUZXh0V2lkdGgpIHtcclxuICAgICAgICAgIGNvbnN0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuICAgICAgICAgIGxldCBsZWZ0SWR4ID0gMDtcclxuICAgICAgICAgIGxldCByaWdodElkeCA9IHRleHQubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIHdoaWxlIChsZWZ0SWR4IDwgcmlnaHRJZHgpIHtcclxuICAgICAgICAgICAgY29uc3QgbWlkSWR4ID0gTWF0aC5mbG9vcigobGVmdElkeCArIHJpZ2h0SWR4KSAvIDIpO1xyXG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0ZXh0LnNsaWNlKDAsIG1pZElkeCkgKyBlbGxpcHNpcztcclxuICAgICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGNhbmRpZGF0ZSk7XHJcbiAgICAgICAgICAgIGlmICgobWVhc3VyZWQud2lkdGggPz8gMCkgPiBtYXhUZXh0V2lkdGgpIHtcclxuICAgICAgICAgICAgICByaWdodElkeCA9IG1pZElkeDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsZWZ0SWR4ID0gbWlkSWR4ICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGlzcGxheVRleHQgPSB0ZXh0LnNsaWNlKDAsIE1hdGgubWF4KDAsIGxlZnRJZHggLSAxKSkgKyBlbGxpcHNpcztcclxuICAgICAgICAgIG1lYXN1cmVkID0gbWVhc3VyZShkaXNwbGF5VGV4dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IE1hdGgubWluKG1heFRleHRIZWlnaHQsIG1lYXN1cmVkLmhlaWdodCA/PyAxMCkgKyAyLFxyXG4gICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICByeDogMSxcclxuICAgICAgICAgIHJ5OiAxLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBmaW5hbFRleHQgPSBuZXcgZmFicmljLlRleHQoZGlzcGxheVRleHQsIHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKGJhY2tncm91bmQsIGZpbmFsVGV4dCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMM1wiKSB7XHJcbiAgICAgIGNvbnN0IHNlcXVlbnRpYWxHcm91cHM6IHsgem9uZTogc3RyaW5nOyBzaGVsdmVzOiBhbnlbXSB9W10gPSBbXTtcclxuXHJcbiAgICAgIGxldCBwcmV2aW91c1pvbmU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBzaGVsZiBvZiBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZykge1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSBzaGVsZi56b25lIHx8IFwiVW5rbm93blwiO1xyXG4gICAgICAgIGlmICh6b25lICE9PSBwcmV2aW91c1pvbmUpIHtcclxuICAgICAgICAgIHNlcXVlbnRpYWxHcm91cHMucHVzaCh7IHpvbmUsIHNoZWx2ZXM6IFtzaGVsZl0gfSk7XHJcbiAgICAgICAgICBwcmV2aW91c1pvbmUgPSB6b25lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzW3NlcXVlbnRpYWxHcm91cHMubGVuZ3RoIC0gMV0uc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBjdXJyZW50U2hlbGZJbmRleCA9IDA7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHNlcXVlbnRpYWxHcm91cHMpIHtcclxuICAgICAgICBjb25zdCB7IHpvbmUsIHNoZWx2ZXM6IHNoZWx2ZXNJbkdyb3VwIH0gPSBncm91cDtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBTdGFydEluZGV4ID0gY3VycmVudFNoZWxmSW5kZXg7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBMZW5ndGggPSBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwVG9wWSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChncm91cFN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICBjb25zdCBncm91cEJvdHRvbVkgPSBncm91cFRvcFkgKyBib3hIZWlnaHQgKiBncm91cExlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3Qgc2hlbGZEYXRhID0gc2hlbHZlc0luR3JvdXBbal07XHJcbiAgICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGN1cnJlbnRTaGVsZkluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2hlbGZSZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgICA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmUmVjdCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNoZWxmRGF0YS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYXlSb3dzID0gc2hlbGZEYXRhLnRyYXlSb3dzIHx8IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RQZXJTaGVsZiA9IHNoZWxmRGF0YS5wcm9kdWN0UGVyU2hlbGYgfHwgMDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uU3BhY2luZyA9IG1pZFdpZHRoIC8gcHJvZHVjdFBlclNoZWxmO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgciA9IDE7IHIgPCB0cmF5Um93czsgcisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgW21pZFgsIGxpbmVZLCBtaWRYICsgbWlkV2lkdGgsIGxpbmVZXSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAxOyBjIDwgcHJvZHVjdFBlclNoZWxmOyBjKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5lWCA9IG1pZFggKyBjICogY29sdW1uU3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgW2xpbmVYLCBib3hZLCBsaW5lWCwgYm94WSArIGJveEhlaWdodF0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godmVydGljYWxMaW5lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGN1cnJlbnRTaGVsZkluZGV4Kys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBncm91cEJvdHRvbUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICBbbWlkWCwgZ3JvdXBCb3R0b21ZLCBtaWRYICsgbWlkV2lkdGgsIGdyb3VwQm90dG9tWV0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICAgIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKGdyb3VwQm90dG9tTGluZSk7XHJcblxyXG4gICAgICAgIGlmIChmaXh0dXJlRGF0YS5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgIGNvbnN0IGxhYmVsUGFkZGluZyA9IDI7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBuZXcgZmFicmljLlRleHRib3goem9uZSwge1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLSBsYWJlbFBhZGRpbmcsXHJcbiAgICAgICAgICAgIHRvcDogZ3JvdXBCb3R0b21ZLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBcIiM3MDcwNzBcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJyaWdodFwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImJvdHRvbVwiLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwicmlnaHRcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChsYWJlbFRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJYID0gbWlkWCArIG1pZFdpZHRoIC8gMjtcclxuICAgICAgICBjb25zdCBncm91cENlbnRlclkgPSBncm91cFRvcFkgKyAoZ3JvdXBCb3R0b21ZIC0gZ3JvdXBUb3BZKSAvIDI7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25CcmFuZHMgPSBuZXcgU2V0KCk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXNJbkdyb3VwPy5mb3JFYWNoKChzaGVsZikgPT4ge1xyXG4gICAgICAgICAgc2hlbGYucHJvZHVjdEJyYW5kTmFtZT8uZm9yRWFjaCgoYnJhbmQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBzZWN0aW9uQnJhbmRzLmFkZChicmFuZCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKFsuLi5zZWN0aW9uQnJhbmRzXS5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IHRleHQgPSBbLi4uc2VjdGlvbkJyYW5kc10uam9pbihcIiArIFwiKTtcclxuICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICBjb25zdCByZWN0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSAyMDtcclxuXHJcbiAgICAgICAgICBsZXQgZm9udFNpemUgPSA2O1xyXG4gICAgICAgICAgbGV0IHdyYXBwZWRUZXh0O1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNyZWF0ZVRleHRib3ggPSAoZnM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNDAwXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgd3JhcHBlZFRleHQgPSBjcmVhdGVUZXh0Ym94KGZvbnRTaXplKTtcclxuICAgICAgICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgICAgICAgfSB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHJlY3RIZWlnaHQgPSB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIHBhZGRpbmc7XHJcblxyXG4gICAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJUZXh0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IHJlY3RXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiByZWN0SGVpZ2h0LFxyXG4gICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICByeTogMSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChncm91cENlbnRlclRleHQsIHdyYXBwZWRUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGE/LnZtQ29uZmlnPy5sZW5ndGgpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXh0dXJlRGF0YS52bUNvbmZpZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHZtID0gZml4dHVyZURhdGEudm1Db25maWdbaV07XHJcblxyXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB2bS5zdGFydFlQb3NpdGlvbiAtIDE7XHJcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSB2bS5lbmRZUG9zaXRpb24gLSAxO1xyXG5cclxuICAgICAgICBjb25zdCBzaGVsZlRvcFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoc3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgIGNvbnN0IHNoZWxmSGVpZ2h0U3BhbiA9IGJveEhlaWdodCAqIChlbmRJbmRleCAtIHN0YXJ0SW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgbGV0IHZtSGVpZ2h0UHg6IG51bWJlciA9IHNoZWxmSGVpZ2h0U3BhbjtcclxuICAgICAgICBsZXQgeTogbnVtYmVyID0gc2hlbGZUb3BZO1xyXG5cclxuICAgICAgICBpZiAodm0ueVpvbmUgJiYgdm0ueVpvbmUgIT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICB2bUhlaWdodFB4ID0gc2hlbGZIZWlnaHRTcGFuIC8gMztcclxuXHJcbiAgICAgICAgICBzd2l0Y2ggKHZtLnlab25lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0b3BcIjpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWSArIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZICsgMiAqIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB4ID0gbWlkWDtcclxuICAgICAgICBsZXQgd2lkdGggPSBtaWRXaWR0aDtcclxuXHJcbiAgICAgICAgaWYgKCF2bS54Wm9uZSB8fCB2bS54Wm9uZSA9PT0gXCJzdHJldGNoXCIpIHtcclxuICAgICAgICAgIHdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgc2VjdGlvbldpZHRoID0gbWlkV2lkdGggLyAzO1xyXG4gICAgICAgICAgc3dpdGNoICh2bS54Wm9uZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwibGVmdFwiOlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFggKyBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJyaWdodFwiOlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYICsgMiAqIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICB3aWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZtLnZtSW1hZ2VVcmwpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZtSW1hZ2U6IGFueSA9IGF3YWl0IGZhYnJpYy5GYWJyaWNJbWFnZS5mcm9tVVJMKFxyXG4gICAgICAgICAgICAgIGAke3RoaXMuY2RuVXJsfSR7dm0udm1JbWFnZVVybH0/dj0ke0RhdGUubm93KCl9YCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB2bUltYWdlLnNldCh7XHJcbiAgICAgICAgICAgICAgbGVmdDogeCArIHdpZHRoIC8gMixcclxuICAgICAgICAgICAgICB0b3A6IHkgKyB2bUhlaWdodFB4IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgc2NhbGVYOiB3aWR0aCAvIHZtSW1hZ2Uud2lkdGghLFxyXG4gICAgICAgICAgICAgIHNjYWxlWTogdm1IZWlnaHRQeCAvIHZtSW1hZ2UuaGVpZ2h0ISxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2godm1JbWFnZSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgbG9hZGluZyBpbWFnZSBmb3IgVk06ICR7dm0udm1JbWFnZVVybH1gLCBlcnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCB2bUJveCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgICAgIHRvcDogeSxcclxuICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogdm1IZWlnaHRQeCxcclxuICAgICAgICAgICAgZmlsbDogZml4dHVyZUNvbG9yPy52bUZpbGwgPz8gXCIjNjkzOEVGXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGxldCBmb250U2l6ZSA9IDU7XHJcbiAgICAgICAgICBsZXQgdm1UZXh0O1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNyZWF0ZVZtVGV4dCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICBuZXcgZmFicmljLlRleHRib3godm0udm1OYW1lIHx8IFwiXCIsIHtcclxuICAgICAgICAgICAgICBsZWZ0OiB4ICsgd2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgIHRvcDogeSArIHZtSGVpZ2h0UHggLyAyLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgdm1UZXh0ID0gY3JlYXRlVm1UZXh0KGZvbnRTaXplKTtcclxuICAgICAgICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgICAgICAgfSB3aGlsZSAodm1UZXh0LmhlaWdodCA+IHZtSGVpZ2h0UHggJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2godm1Cb3gsIHZtVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGFzdEJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoc2hlbGZDb3VudCArIDEpO1xyXG4gICAgY29uc3QgbGFzdEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHttaWRYfSAke2xhc3RCb3hZfSBcclxuICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZfSBcclxuICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke1xyXG4gICAgICAgIG1pZFggKyBtaWRXaWR0aCAtIHJhZGl1c1xyXG4gICAgICB9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgIEwgJHttaWRYICsgcmFkaXVzfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICBRICR7bWlkWH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHttaWRYfSAke1xyXG4gICAgICAgIGxhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgIH0gXHJcbiAgICAgICAgTCAke21pZFh9ICR7bGFzdEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogZml4dHVyZUNvbG9yPy5maWxsXHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgPyBcIiNGRUU0RTJcIlxyXG4gICAgICAgICAgOiBcIiNFQUY4RkZcIixcclxuICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgIDogXCIjNkJDQUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbGFzdEJveFRleHQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgIGAke2ZpeHR1cmVEYXRhPy5mb290ZXI/LmxhYmVsID8gZml4dHVyZURhdGEuZm9vdGVyLmxhYmVsIDogXCJcIn1gLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGxhc3RCb3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICBoZWlndGg6IGJveEhlaWdodCxcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBib3R0b21XaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IGJvdHRvbUhlaWdodCA9ICgzIC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IGJvdHRvbVggPSB4ICsgKHdpZHRoIC0gYm90dG9tV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IGJvdHRvbVkgPSBtaWRZICsgbWlkSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICBjb25zdCBib3R0b21Db250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiBib3R0b21YLFxyXG4gICAgICB0b3A6IGJvdHRvbVksXHJcbiAgICAgIHdpZHRoOiBib3R0b21XaWR0aCxcclxuICAgICAgaGVpZ2h0OiBib3R0b21IZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBib3R0b21UZXh0Q29udGVudCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYFNoZWx2ZXMgLSAke2ZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5sZW5ndGh9IC4gUHJvZHVjdHMgLSAgJHtmaXh0dXJlRGF0YS5maXh0dXJlQ2FwYWNpdHl9IC4gVk0gLSAke2ZpeHR1cmVEYXRhLnZtQ29uZmlnPy5sZW5ndGh9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IGJvdHRvbVggKyBib3R0b21XaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBib3R0b21ZICsgYm90dG9tSGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBib3R0b21XaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGJvdHRvbUhlaWdodCxcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzdmdTdHJpbmcgPSBgXHJcbiAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICA8cmVjdCB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiByeD1cIjEyXCIgZmlsbD1cIndoaXRlXCIvPlxyXG4gICAgICA8cGF0aCBkPVwiTTE0Ljk5OTggNi42MDAwMUMxNS4xNTc0IDYuNDQyNDMgMTUuMzQ0NSA2LjMxNzQyIDE1LjU1MDQgNi4yMzIxNEMxNS43NTYzIDYuMTQ2ODUgMTUuOTc3IDYuMTAyOTYgMTYuMTk5OCA2LjEwMjk2QzE2LjQyMjcgNi4xMDI5NiAxNi42NDM0IDYuMTQ2ODUgMTYuODQ5MiA2LjIzMjE0QzE3LjA1NTEgNi4zMTc0MiAxNy4yNDIyIDYuNDQyNDMgMTcuMzk5OCA2LjYwMDAxQzE3LjU1NzQgNi43NTc2IDE3LjY4MjQgNi45NDQ2OCAxNy43Njc3IDcuMTUwNThDMTcuODUzIDcuMzU2NDggMTcuODk2OSA3LjU3NzE1IDE3Ljg5NjkgNy44MDAwMUMxNy44OTY5IDguMDIyODggMTcuODUzIDguMjQzNTUgMTcuNzY3NyA4LjQ0OTQ1QzE3LjY4MjQgOC42NTUzNSAxNy41NTc0IDguODQyNDMgMTcuMzk5OCA5LjAwMDAxTDkuMjk5ODIgMTcuMUw1Ljk5OTgyIDE4TDYuODk5ODIgMTQuN0wxNC45OTk4IDYuNjAwMDFaXCIgc3Ryb2tlPVwiIzFEMjkzOVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgPC9zdmc+YDtcclxuXHJcbiAgICBsZXQgbG9hZGVkU1ZHOiBhbnkgPSBhd2FpdCBmYWJyaWMubG9hZFNWR0Zyb21TdHJpbmcoc3ZnU3RyaW5nKTtcclxuXHJcbiAgICBsZXQgZWRpdFN2ZyA9IGZhYnJpYy51dGlsLmdyb3VwU1ZHRWxlbWVudHMoXHJcbiAgICAgIGxvYWRlZFNWRy5vYmplY3RzLFxyXG4gICAgICBsb2FkZWRTVkcub3B0aW9uc1xyXG4gICAgKTtcclxuXHJcbiAgICBlZGl0U3ZnLnNldCh7XHJcbiAgICAgIHNjYWxlWDogMSxcclxuICAgICAgc2NhbGVZOiAxLFxyXG4gICAgICBsZWZ0OiB4ICsgd2lkdGggLSAzMCxcclxuICAgICAgdG9wOiB5ICsgMTQsXHJcbiAgICAgIHZpc2libGU6IGZhbHNlLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogdHJ1ZSwgLy8gYWxsb3cgZXZlbnRzXHJcbiAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGVkaXRTdmcub24oXCJtb3VzZWRvd25cIiwgKG9wdCkgPT4ge1xyXG4gICAgICBpZiAob3B0ICYmIG9wdC5lICYmIG9wdC5lLnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgIG9wdC5lLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgIGZpeHR1cmVUeXBlOiBmaXh0dXJlRGF0YS5maXh0dXJlVHlwZSxcclxuICAgICAgICB3YWxsSW5kZXg6IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyLFxyXG4gICAgICAgIGZpeHR1cmVJbmRleDogZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyLFxyXG4gICAgICAgIGZpeHR1cmVJZDogZml4dHVyZURhdGEuX2lkLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgIGNvbnN0IHdhbGwgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgICAod2FsbDogYW55KSA9PiB3YWxsLmVsZW1lbnROdW1iZXIgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLndhbGxJbmRleFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IHdhbGwuZml4dHVyZXMuZmluZChcclxuICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuX2lkID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlSWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IGZpeHR1cmU7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZVR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmZpbmQoXHJcbiAgICAgICAgICAoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLl9pZCA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZUlkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBmaXh0dXJlO1xyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSB0aGlzPy5zZWxlY3RlZEZpeHR1cmVEYXRhPy50YXNrVHlwZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZURhdGEgPSB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGE7XHJcbiAgICAgIHRoaXMuZWRpdEZpeHR1cmUgPSB0cnVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZml4dHVyZUdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChcclxuICAgICAgW1xyXG4gICAgICAgIG1haW5Db250YWluZXIsXHJcbiAgICAgICAgdG9wQ29udGFpbmVyLFxyXG4gICAgICAgIGlubmVyVG9wQm94LFxyXG4gICAgICAgIHRvcFRleHQsXHJcbiAgICAgICAgaW5uZXJCb3R0b21Cb3gsXHJcbiAgICAgICAgYm90dG9tVGV4dCxcclxuICAgICAgICBtaWRDb250YWluZXIsXHJcbiAgICAgICAgZmlyc3RCb3gsXHJcbiAgICAgICAgZmlyc3RCb3hUZXh0LFxyXG4gICAgICAgIC4uLnNoZWx2ZXMsXHJcbiAgICAgICAgbGFzdEJveCxcclxuICAgICAgICBsYXN0Qm94VGV4dCxcclxuICAgICAgICBib3R0b21Db250YWluZXIsXHJcbiAgICAgICAgYm90dG9tVGV4dENvbnRlbnQsXHJcbiAgICAgICAgZWRpdFN2ZyxcclxuICAgICAgXSxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgICAgIHNlbGVjdGFibGU6IHRoaXMubGF5b3V0Rm9ybS5lbmFibGVkLFxyXG4gICAgICAgIGxvY2tTY2FsaW5nWDogdHJ1ZSxcclxuICAgICAgICBsb2NrU2NhbGluZ1k6IHRydWUsXHJcbiAgICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICAgICAgLy8gaGFzQ29udHJvbHM6IGZpeHR1cmVEYXRhLmZpeHR1cmVUeXBlID09PSBcImZsb29yXCIsXHJcbiAgICAgICAgLy8gbG9ja1JvdGF0aW9uOiBmaXh0dXJlRGF0YS5maXh0dXJlVHlwZSAhPT0gXCJmbG9vclwiLFxyXG4gICAgICAgIC8vIGxvY2tNb3ZlbWVudFg6IGN1cnJlbnRGaXh0dXJlSW5mbz8ud2FsbERpcmVjdGlvbiA9PT0gJ3VwJyB8fCBjdXJyZW50Rml4dHVyZUluZm8/LndhbGxEaXJlY3Rpb24gPT09ICdkb3duJyxcclxuICAgICAgICAvLyBsb2NrTW92ZW1lbnRZOiBjdXJyZW50Rml4dHVyZUluZm8/LndhbGxEaXJlY3Rpb24gPT09ICdyaWdodCcgfHwgY3VycmVudEZpeHR1cmVJbmZvPy53YWxsRGlyZWN0aW9uID09PSAnbGVmdCcsXHJcbiAgICAgICAgYW5nbGU6IGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24/LmFuZ2xlID8/IDAsXHJcbiAgICAgIH1cclxuICAgICkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICB3YWxsSW5kZXg6IG51bWJlcjtcclxuICAgICAgZml4dHVyZUluZGV4OiBudW1iZXI7XHJcbiAgICAgIGZpeHR1cmVJZDogc3RyaW5nO1xyXG4gICAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCI7XHJcbiAgICAgIGlzc3VlOiBib29sZWFuO1xyXG4gICAgICBpc3N1ZURhdGE6IGFueTtcclxuICAgICAgdGFza1R5cGU6IHN0cmluZztcclxuICAgICAgdm1Db25maWc6IFtdO1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChcclxuICAgICAgIWZpeHR1cmVEYXRhPy5pc3N1ZSAmJlxyXG4gICAgICAhZml4dHVyZURhdGE/LnVuc2F2ZWRDaGFuZ2VzICYmXHJcbiAgICAgIHRoaXMubGF5b3V0Rm9ybS5lbmFibGVkXHJcbiAgICApIHtcclxuICAgICAgZml4dHVyZUdyb3VwLm9uKFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBlZGl0U3ZnLnNldChcInZpc2libGVcIiwgdHJ1ZSk7XHJcbiAgICAgICAgY2FudmFzLnJlbmRlckFsbCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgZml4dHVyZUdyb3VwLm9uKFwibW91c2VvdXRcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGVkaXRTdmcuc2V0KFwidmlzaWJsZVwiLCBmYWxzZSk7XHJcbiAgICAgICAgY2FudmFzLnJlbmRlckFsbCgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmaXh0dXJlR3JvdXAub24oXCJtb3VzZWRvd25cIiwgKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVQYW5lbChcInJpZ2h0XCIsIGZhbHNlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5oaWdobGlnaHRGaXh0dXJlKHRhcmdldCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0Rml4dHVyZU9uQ2FudmFzQ2xpY2sodGFyZ2V0LCB0cnVlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZpeHR1cmVHcm91cC5maXh0dXJlVHlwZSA9IGZpeHR1cmVEYXRhLmZpeHR1cmVUeXBlO1xyXG4gICAgZml4dHVyZUdyb3VwLndhbGxJbmRleCA9IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyO1xyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVJbmRleCA9IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjtcclxuICAgIGZpeHR1cmVHcm91cC5maXh0dXJlSWQgPSBmaXh0dXJlRGF0YS5faWQ7XHJcbiAgICBmaXh0dXJlR3JvdXAuaXNzdWUgPSBmaXh0dXJlRGF0YS5pc3N1ZTtcclxuICAgIGZpeHR1cmVHcm91cC5pc3N1ZURhdGEgPSBmaXh0dXJlRGF0YS5pc3N1ZURhdGE7XHJcbiAgICBmaXh0dXJlR3JvdXAudGFza1R5cGUgPSBmaXh0dXJlRGF0YS50YXNrVHlwZTtcclxuICAgIGZpeHR1cmVHcm91cC52bUNvbmZpZyA9IGZpeHR1cmVEYXRhLnZtQ29uZmlnO1xyXG4gICAgZml4dHVyZUdyb3VwLm9ialR5cGUgPSBcImZpeHR1cmVcIjtcclxuXHJcbiAgICAvLyB0aGlzLmNhbnZhcy5vbihcIm9iamVjdDptb3ZpbmdcIiwgKGUpID0+IHtcclxuICAgIC8vICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgYW55O1xyXG4gICAgLy8gICBpZiAoIXRhcmdldCB8fCB0YXJnZXQub2JqVHlwZSAhPT0gXCJmaXh0dXJlXCIpIHJldHVybjtcclxuXHJcbiAgICAvLyAgIGNvbnN0IGFuZ2xlRGVnID0gdGFyZ2V0LmFuZ2xlIHx8IDA7XHJcbiAgICAvLyAgIGNvbnN0IGFuZ2xlID0gKGFuZ2xlRGVnICogTWF0aC5QSSkgLyAxODA7XHJcbiAgICAvLyAgIGlmICghdGFyZ2V0Ll9sYXN0TGVmdCkge1xyXG4gICAgLy8gICAgIHRhcmdldC5fbGFzdExlZnQgPSB0YXJnZXQubGVmdDtcclxuICAgIC8vICAgICB0YXJnZXQuX2xhc3RUb3AgPSB0YXJnZXQudG9wO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIGNvbnN0IGR4ID0gdGFyZ2V0LmxlZnQgLSB0YXJnZXQuX2xhc3RMZWZ0O1xyXG4gICAgLy8gICBjb25zdCBkeSA9IHRhcmdldC50b3AgLSB0YXJnZXQuX2xhc3RUb3A7XHJcbiAgICAvLyAgIGNvbnN0IHByb2plY3RlZCA9IGR4ICogTWF0aC5jb3MoYW5nbGUpICsgZHkgKiBNYXRoLnNpbihhbmdsZSk7XHJcbiAgICAvLyAgIHRhcmdldC5sZWZ0ID0gdGFyZ2V0Ll9sYXN0TGVmdCArIHByb2plY3RlZCAqIE1hdGguY29zKGFuZ2xlKTtcclxuICAgIC8vICAgdGFyZ2V0LnRvcCA9IHRhcmdldC5fbGFzdFRvcCArIHByb2plY3RlZCAqIE1hdGguc2luKGFuZ2xlKTtcclxuICAgIC8vICAgdGFyZ2V0Ll9sYXN0TGVmdCA9IHRhcmdldC5sZWZ0O1xyXG4gICAgLy8gICB0YXJnZXQuX2xhc3RUb3AgPSB0YXJnZXQudG9wO1xyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgY2FudmFzLmFkZChmaXh0dXJlR3JvdXApO1xyXG5cclxuICAgIC8vIElmIG5ld2x5IGFkZGVkLCBmb2N1cyBpdCBvbmNlXHJcbiAgICBpZiAoKGZpeHR1cmVEYXRhIGFzIGFueSk/Lm5ld0FkZGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHt9XHJcbiAgICAgIGRlbGV0ZSAoZml4dHVyZURhdGEgYXMgYW55KS5uZXdBZGRlZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZml4dHVyZUdyb3VwO1xyXG4gIH1cclxuXHJcbiAgZHJhd0VudHJhbmNlKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgYXJyb3dXaWR0aDogbnVtYmVyLFxyXG4gICAgZWxlbWVudERhdGE6IGFueVxyXG4gICkge1xyXG4gICAgY29uc3QgYm9keVdpZHRoID0gd2lkdGggLSBhcnJvd1dpZHRoO1xyXG5cclxuICAgIGNvbnN0IHBhdGhEYXRhID0gW1xyXG4gICAgICBgTSAwIDBgLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gMGAsXHJcbiAgICAgIGBMICR7Ym9keVdpZHRofSAkey1oZWlnaHQgLyAyfWAsXHJcbiAgICAgIGBMICR7d2lkdGh9ICR7aGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHtoZWlnaHQgKyBoZWlnaHQgLyAyfWAsXHJcbiAgICAgIGBMICR7Ym9keVdpZHRofSAke2hlaWdodH1gLFxyXG4gICAgICBgTCAwICR7aGVpZ2h0fWAsXHJcbiAgICAgIGBaYCxcclxuICAgIF0uam9pbihcIiBcIik7XHJcblxyXG4gICAgY29uc3QgYXJyb3cgPSBuZXcgZmFicmljLlBhdGgocGF0aERhdGEsIHtcclxuICAgICAgZmlsbDogXCIjMDNBOUY0XCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBoZWlnaHQgLSA2O1xyXG4gICAgY29uc3QgdGV4dCA9IG5ldyBmYWJyaWMuVGV4dChcIkVudHJhbmNlXCIsIHtcclxuICAgICAgZm9udEZhbWlseTogXCJBcmlhbFwiLFxyXG4gICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICBhbmdsZTogLTkwLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICBsZWZ0OiAxNSxcclxuICAgICAgdG9wOiBoZWlnaHQgLyAyLFxyXG4gICAgICBmb250U2l6ZTogMjAsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRleHRCb3VuZHMgPSB0ZXh0LmdldEJvdW5kaW5nUmVjdCgpO1xyXG4gICAgaWYgKHRleHRCb3VuZHMuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCkge1xyXG4gICAgICBjb25zdCBzY2FsZSA9IG1heFRleHRIZWlnaHQgLyB0ZXh0Qm91bmRzLmhlaWdodDtcclxuICAgICAgdGV4dC5zZXQoXCJmb250U2l6ZVwiLCB0ZXh0LmZvbnRTaXplISAqIHNjYWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoW2Fycm93LCB0ZXh0XSwge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIHNlbGVjdGFibGU6IHRoaXMubGF5b3V0Rm9ybS5lbmFibGVkLFxyXG4gICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nWTogdHJ1ZSxcclxuICAgICAgbG9ja1NjYWxpbmdGbGlwOiB0cnVlLFxyXG4gICAgICBhbmdsZTogZWxlbWVudERhdGEuYW5nbGUsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gZWxlbWVudERhdGEuZWxlbWVudFR5cGU7XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudERhdGE7XHJcblxyXG4gICAgY2FudmFzLmFkZChncm91cCk7XHJcbiAgfVxyXG5cclxuICBkcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGE6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIGVsZW1lbnQ6IGFueVxyXG4gICk6IGZhYnJpYy5Hcm91cCB7XHJcbiAgICBjb25zdCByZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgd2lkdGgsXHJcbiAgICAgIGhlaWdodCxcclxuICAgICAgcng6IDIsXHJcbiAgICAgIHJ5OiAyLFxyXG4gICAgICBmaWxsOiBcIiNEQUYxRkZcIixcclxuICAgICAgc3Ryb2tlOiBcIiM2QkNBRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KGVsZW1lbnQuZml4dHVyZU5hbWUsIHtcclxuICAgICAgd2lkdGg6IHdpZHRoIC0gOCxcclxuICAgICAgZm9udFNpemU6IDE0LFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgIGVkaXRhYmxlOiBmYWxzZSxcclxuICAgICAgc3BsaXRCeUdyYXBoZW1lOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdGV4dEJvdW5kcyA9IHRleHQuZ2V0Qm91bmRpbmdSZWN0KCk7XHJcblxyXG4gICAgaWYgKHRleHRCb3VuZHMuaGVpZ2h0ID4gaGVpZ2h0IC0gOCkge1xyXG4gICAgICBjb25zdCBzY2FsZSA9IChoZWlnaHQgLSA4KSAvIHRleHRCb3VuZHMuaGVpZ2h0O1xyXG4gICAgICB0ZXh0LnNldChcImZvbnRTaXplXCIsIHRleHQuZm9udFNpemUhICogc2NhbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbcmVjdCwgdGV4dF0sIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBhbmdsZTogYSxcclxuICAgICAgc2VsZWN0YWJsZTogdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gXCJvdGhlcnNcIjtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50O1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG5cclxuICAgIGlmICgoZWxlbWVudCBhcyBhbnkpPy5uZXdBZGRlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChncm91cCk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHt9XHJcbiAgICAgIGRlbGV0ZSAoZWxlbWVudCBhcyBhbnkpLm5ld0FkZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIGRyYXdCZygpIHtcclxuICAgIGNvbnN0IHdhbGwxID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAoZTogYW55KSA9PiBlLmVsZW1lbnROdW1iZXIgPT09IDEgJiYgZS5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCJcclxuICAgICk7XHJcbiAgICBjb25zdCB3YWxsMiA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKGU6IGFueSkgPT4gZS5lbGVtZW50TnVtYmVyID09PSAyICYmIGUuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiXHJcbiAgICApO1xyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKHdhbGwxLmRpc3RhbmNlLCB3YWxsMS51bml0KTtcclxuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMudG9QaXhlbHMod2FsbDIuZGlzdGFuY2UsIHdhbGwyLnVuaXQpO1xyXG5cclxuICAgIGNvbnN0IGJnID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogdGhpcy53YWxsVGhpY2tuZXNzLFxyXG4gICAgICB0b3A6IHRoaXMud2FsbFRoaWNrbmVzcyxcclxuICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgZmlsbDogXCIjZWFlY2YwXCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLmFkZChiZyk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZW1vdmUoYmcpO1xyXG4gICAgdGhpcy5jYW52YXMuaW5zZXJ0QXQoMCwgYmcpO1xyXG4gICAgdGhpcy5jYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBzdWJzY3JpYmVUb0ZpeHR1cmVDb25maWdJZENoYW5nZXMoKSB7XHJcbiAgICB0aGlzLmZpeHR1cmVDb25maWdTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy5maXh0dXJlQ29uZmlnU3Vic2NyaXB0aW9ucyA9IFtdO1xyXG5cclxuICAgIHRoaXMuZ2V0Rm9ybVdhbGxzLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wsIGkpID0+IHtcclxuICAgICAgY29uc3Qgd2FsbEdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgIGNvbnN0IGZpeHR1cmVzQXJyYXkgPSB3YWxsR3JvdXAuZ2V0KFwiZml4dHVyZXNcIikgYXMgRm9ybUFycmF5O1xyXG5cclxuICAgICAgZml4dHVyZXNBcnJheS5jb250cm9scy5mb3JFYWNoKChmaXh0dXJlQ29udHJvbCwgaikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IGZpeHR1cmVDb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBjb25zdCBzdWIgPSBmaXh0dXJlR3JvdXBcclxuICAgICAgICAgIC5nZXQoXCJmaXh0dXJlQ29uZmlnSWRcIilcclxuICAgICAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgobmV3VmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VGaXh0dXJlVGVtcGxhdGUobmV3VmFsdWUsIFwid2FsbFwiLCBqLCBpKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoc3ViKSB0aGlzLmZpeHR1cmVDb25maWdTdWJzY3JpcHRpb25zLnB1c2goc3ViKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzLmNvbnRyb2xzLmZvckVhY2goKGZpeHR1cmVDb250cm9sLCBrKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IGZpeHR1cmVDb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgY29uc3Qgc3ViID0gZml4dHVyZUdyb3VwXHJcbiAgICAgICAgLmdldChcImZpeHR1cmVDb25maWdJZFwiKVxyXG4gICAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKG5ld1ZhbHVlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZUZpeHR1cmVUZW1wbGF0ZShuZXdWYWx1ZSwgXCJmbG9vclwiLCBrKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChzdWIpIHRoaXMuZml4dHVyZUNvbmZpZ1N1YnNjcmlwdGlvbnMucHVzaChzdWIpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdWJzY3JpYmVUb090aGVyRWxlbWVudHNDaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5vdGhlckVsZW1lbnRzU3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yj8udW5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLm90aGVyRWxlbWVudHNTdWJzY3JpcHRpb25zID0gW107XHJcblxyXG4gICAgLy8gV2FsbC1sZXZlbCBvdGhlckVsZW1lbnRzIGxhYmVsIHN1YnNjcmlwdGlvbnNcclxuICAgIHRoaXMuZ2V0Rm9ybVdhbGxzLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IHtcclxuICAgICAgY29uc3Qgd2FsbEdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgIGNvbnN0IG90aGVyQXJyYXkgPSB3YWxsR3JvdXAuZ2V0KFwib3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXk7XHJcblxyXG4gICAgICBvdGhlckFycmF5LmNvbnRyb2xzLmZvckVhY2goKGN0cmwsIG90aGVySWR4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudEdyb3VwID0gY3RybCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgY29uc3QgdHlwZUNvbnRyb2wgPSBlbGVtZW50R3JvdXAuZ2V0KFwidHlwZVwiKSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgICBjb25zdCBjdXN0b21OYW1lQ29udHJvbCA9IGVsZW1lbnRHcm91cC5nZXQoXCJjdXN0b21OYW1lXCIpIGFzIEZvcm1Db250cm9sO1xyXG5cclxuICAgICAgICBjb25zdCB3YWxsTWV0YSA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgICAgIChlbDogYW55KSA9PlxyXG4gICAgICAgICAgICBlbC5lbGVtZW50VHlwZSA9PT0gd2FsbEdyb3VwLmdldChcImVsZW1lbnRUeXBlXCIpPy52YWx1ZSAmJlxyXG4gICAgICAgICAgICBlbC5lbGVtZW50TnVtYmVyID09PSB3YWxsR3JvdXAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWYgPSB3YWxsTWV0YT8ub3RoZXJFbGVtZW50cz8uW290aGVySWR4XTtcclxuICAgICAgICBpZiAoIWVsZW1lbnRSZWYpIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gd2hlbiB0eXBlIGNoYW5nZXMgKGRyb3Bkb3duKVxyXG4gICAgICAgIGNvbnN0IHN1YlR5cGUgPSB0eXBlQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgLy8gaWYgdXNlciBwaWNrcyBcIk90aGVyc1wiLCBwcmVmZXIgY3VzdG9tTmFtZSBpZiBwcmVzZW50LCBvdGhlcndpc2Ugc2V0IGZpeHR1cmVOYW1lIHRvIFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgZWxlbWVudFJlZi5maXh0dXJlTmFtZSA9XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQgPT09IFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgICAgID8gY3VzdG9tTmFtZUNvbnRyb2w/LnZhbHVlIHx8IFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgICAgIDogc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZik7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gd2hlbiBjdXN0b21OYW1lIGNoYW5nZXMgKHRleHQgaW5wdXQgdmlzaWJsZSBvbmx5IHdoZW4gdHlwZSA9PT0gJ090aGVycycpXHJcbiAgICAgICAgY29uc3Qgc3ViQ3VzdG9tID0gY3VzdG9tTmFtZUNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChjdXN0b206IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAodHlwZUNvbnRyb2wudmFsdWUgPT09IFwiT3RoZXJzXCIpIHtcclxuICAgICAgICAgICAgICBlbGVtZW50UmVmLmZpeHR1cmVOYW1lID0gY3VzdG9tO1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm90aGVyRWxlbWVudHNTdWJzY3JpcHRpb25zLnB1c2goc3ViVHlwZSwgc3ViQ3VzdG9tKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBGbG9vci1sZXZlbCBvdGhlckVsZW1lbnRzIGxhYmVsIHN1YnNjcmlwdGlvbnNcclxuICAgIHRoaXMuZ2V0Rm9ybUZsb29yT3RoZXJFbGVtZW50cy5jb250cm9scy5mb3JFYWNoKChjdHJsLCBpZHgpID0+IHtcclxuICAgICAgY29uc3QgZWxlbWVudEdyb3VwID0gY3RybCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgIGNvbnN0IHR5cGVDb250cm9sID0gZWxlbWVudEdyb3VwLmdldChcInR5cGVcIikgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgIGNvbnN0IGN1c3RvbU5hbWVDb250cm9sID0gZWxlbWVudEdyb3VwLmdldChcImN1c3RvbU5hbWVcIikgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnRSZWYgPSB0aGlzLmZsb29yRGF0YT8ub3RoZXJFbGVtZW50cz8uW2lkeF07XHJcbiAgICAgIGlmICghZWxlbWVudFJlZikgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3Qgc3ViVHlwZSA9IHR5cGVDb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBlbGVtZW50UmVmLmZpeHR1cmVOYW1lID1cclxuICAgICAgICAgICAgc2VsZWN0ZWQgPT09IFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgICA/IGN1c3RvbU5hbWVDb250cm9sPy52YWx1ZSB8fCBcIk90aGVyc1wiXHJcbiAgICAgICAgICAgICAgOiBzZWxlY3RlZDtcclxuICAgICAgICAgIHRoaXMudXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBzdWJDdXN0b20gPSBjdXN0b21OYW1lQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoY3VzdG9tOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGlmICh0eXBlQ29udHJvbC52YWx1ZSA9PT0gXCJPdGhlcnNcIikge1xyXG4gICAgICAgICAgICBlbGVtZW50UmVmLmZpeHR1cmVOYW1lID0gY3VzdG9tO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbnZhc090aGVyRWxlbWVudExhYmVsKGVsZW1lbnRSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5vdGhlckVsZW1lbnRzU3Vic2NyaXB0aW9ucy5wdXNoKHN1YlR5cGUsIHN1YkN1c3RvbSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUNhbnZhc090aGVyRWxlbWVudExhYmVsKGVsZW1lbnRSZWY6IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLmNhbnZhcykgcmV0dXJuO1xyXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maW5kKFxyXG4gICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgIG9iaj8ub2JqVHlwZSA9PT0gXCJvdGhlcnNcIiAmJiBvYmo/LmRhdGEuX2lkID09PSBlbGVtZW50UmVmLl9pZFxyXG4gICAgICApIGFzIGFueTtcclxuXHJcbiAgICBpZiAoIWdyb3VwKSByZXR1cm47XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudFJlZjtcclxuXHJcbiAgICBjb25zdCB0ZXh0T2JqID0gKGdyb3VwLmdldE9iamVjdHMoKSB8fCBbXSkuZmluZChcclxuICAgICAgKG86IGFueSkgPT4gbz8udHlwZSA9PT0gXCJ0ZXh0XCIgfHwgbz8udHlwZSA9PT0gXCJ0ZXh0Ym94XCJcclxuICAgICkgYXMgZmFicmljLlRleHQgfCBmYWJyaWMuVGV4dGJveCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAodGV4dE9iaikge1xyXG4gICAgICAodGV4dE9iaiBhcyBhbnkpLnNldCh7IHRleHQ6IGVsZW1lbnRSZWYuZml4dHVyZU5hbWUgfSk7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJvdGF0ZUNhbnZhcyhjYW52YXM6IGZhYnJpYy5DYW52YXMsIGFuZ2xlRGVnOiBudW1iZXIpIHtcclxuICAgIGlmICghY2FudmFzKSByZXR1cm47XHJcbiAgICBjb25zdCBhbGxPYmplY3RzID0gY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIGlmICghYWxsT2JqZWN0cyB8fCBhbGxPYmplY3RzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENyZWF0ZSBhbiBBY3RpdmVTZWxlY3Rpb24gY29udGFpbmluZyBhbGwgb2JqZWN0cyBvbiB0aGUgY2FudmFzXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBuZXcgZmFicmljLkFjdGl2ZVNlbGVjdGlvbihhbGxPYmplY3RzIGFzIGFueSwgeyBjYW52YXMgfSk7XHJcbiAgICBjYW52YXMuc2V0QWN0aXZlT2JqZWN0KHNlbGVjdGlvbik7XHJcblxyXG4gICAgLy8gUm90YXRlIHRoZSBBY3RpdmVTZWxlY3Rpb24gZGlyZWN0bHkgKHdvcmtzIGxpa2UgYSB0ZW1wb3JhcnkgZ3JvdXApXHJcbiAgICBjb25zdCBhY3RpdmU6IGFueSA9IGNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKTtcclxuICAgIGlmICghYWN0aXZlKSB7XHJcbiAgICAgIGNhbnZhcy5kaXNjYXJkQWN0aXZlT2JqZWN0KCk7XHJcbiAgICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50QW5nbGUgPSBhY3RpdmUuYW5nbGUgfHwgMDtcclxuICAgIGFjdGl2ZS5yb3RhdGUoY3VycmVudEFuZ2xlICsgYW5nbGVEZWcpO1xyXG4gICAgYWN0aXZlLnNldENvb3JkcygpO1xyXG5cclxuICAgIC8vIENsZWFyIHNlbGVjdGlvbiBidXQga2VlcCByb3RhdGVkIHBvc2l0aW9ucyBvZiBjaGlsZCBvYmplY3RzXHJcbiAgICBjYW52YXMuZGlzY2FyZEFjdGl2ZU9iamVjdCgpO1xyXG4gICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEZpeHR1cmVPbkNhbnZhc0NsaWNrKHRhcmdldDogYW55LCBjb2xsYXBzZVRhc2tJbmZvOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7XHJcbiAgICAgICAgZml4dHVyZVR5cGU6IHRhcmdldC5maXh0dXJlVHlwZSxcclxuICAgICAgICB3YWxsSW5kZXg6IHRhcmdldC53YWxsSW5kZXgsXHJcbiAgICAgICAgZml4dHVyZUluZGV4OiB0YXJnZXQuZml4dHVyZUluZGV4LFxyXG4gICAgICAgIGZpeHR1cmVJZDogdGFyZ2V0LmZpeHR1cmVJZCxcclxuICAgICAgICBpc3N1ZTogdGFyZ2V0Lmlzc3VlLFxyXG4gICAgICAgIGlzc3VlRGF0YTogdGFyZ2V0Lmlzc3VlRGF0YSxcclxuICAgICAgICB2bUNvbmZpZzogdGFyZ2V0LnZtQ29uZmlnLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3RGaXh0dXJlRmVlZGJhY2soXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZUlkLFxyXG4gICAgICAgIGNvbGxhcHNlVGFza0luZm9cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdEZpeHR1cmVGZWVkYmFjayhmaXh0dXJlSWQ6IHN0cmluZywgY29sbGFwc2VUYXNrSW5mbzogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBjdXJyZW50Rml4dHVyZUZlZWRiYWNrID0gdGhpcy5zdG9yZUZlZWRiYWNrLmZpeHR1cmVEYXRhLmZpbmQoXHJcbiAgICAgIChmYjogYW55KSA9PiBmYi5maXh0dXJlSWQgPT09IGZpeHR1cmVJZFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoY3VycmVudEZpeHR1cmVGZWVkYmFjaykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZUZlZWRiYWNrID0ge1xyXG4gICAgICAgIGdsb2JhbENvbW1lbnRzOiB0aGlzLnN0b3JlRmVlZGJhY2suZml4dHVyZUNvbW1lbnQsXHJcbiAgICAgICAgZml4dHVyZUZlZWRiYWNrOiB7XHJcbiAgICAgICAgICAuLi5jdXJyZW50Rml4dHVyZUZlZWRiYWNrLFxyXG4gICAgICAgICAgRml4dHVyZURhdGE6IHN0cnVjdHVyZWRDbG9uZShcclxuICAgICAgICAgICAgdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLmZpbmQoKGZpOiBhbnkpID0+IGZpLl9pZCA9PT0gZml4dHVyZUlkKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRhc2tJbmZvVG9nZ2xlOiBjb2xsYXBzZVRhc2tJbmZvLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVGZWVkYmFjayA9IHtcclxuICAgICAgICBnbG9iYWxDb21tZW50czogW10sXHJcbiAgICAgICAgZml4dHVyZUZlZWRiYWNrOiB7XHJcbiAgICAgICAgICBmaXh0dXJlSWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgIEZpeHR1cmVEYXRhOiBzdHJ1Y3R1cmVkQ2xvbmUoXHJcbiAgICAgICAgICAgIHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcy5maW5kKChmaTogYW55KSA9PiBmaS5faWQgPT09IGZpeHR1cmVJZClcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBmaXh0dXJlQUlEYXRhOiBudWxsLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGFza0luZm9Ub2dnbGU6IGNvbGxhcHNlVGFza0luZm8sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRGaXh0dXJlVGVtcGxhdGVzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICB9O1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldEFsbFRlbXBsYXRlcyhwYXlsb2FkKVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBkYXRhID0gcmVzPy5kYXRhO1xyXG5cclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZXMgPSBkYXRhLm1hcCgodDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBfaWQ6IHQuX2lkLFxyXG4gICAgICAgICAgICBuYW1lOiBgJHt0LmZpeHR1cmVOYW1lfSAtICR7dC5maXh0dXJlV2lkdGgudmFsdWV9ICR7dC5maXh0dXJlV2lkdGgudW5pdH1gLFxyXG4gICAgICAgICAgICBzdWJ0ZXh0OiBgJHt0LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIsIFwiKX1gLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIGZpeHR1cmUgdGVtcGxhdGVzOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGb3JtKCkge1xyXG4gICAgdGhpcy5sYXlvdXRGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHdhbGxzOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgICAgZmxvb3JGaXh0dXJlczogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICAgIGZsb29yT3RoZXJFbGVtZW50czogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRGb3JtV2FsbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRGb3JtLmdldChcIndhbGxzXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRGb3JtRmxvb3JGaXh0dXJlcygpIHtcclxuICAgIHJldHVybiB0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JGaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0Rm9ybUZsb29yT3RoZXJFbGVtZW50cygpIHtcclxuICAgIHJldHVybiB0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JPdGhlckVsZW1lbnRzXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRFbnRyYW5jZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mbG9vckRhdGE/LmxheW91dFBvbHlnb24/LmZpbHRlcihcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFdhbGxPdGhlckVsZW1lbnRzKHdhbGxJbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJ3YWxsc1wiKSBhcyBGb3JtQXJyYXkpXHJcbiAgICAgIC5hdCh3YWxsSW5kZXgpXHJcbiAgICAgIC5nZXQoXCJvdGhlckVsZW1lbnRzXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1GaXh0dXJlcyh3YWxsSW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuICh0aGlzLmxheW91dEZvcm0uZ2V0KFwid2FsbHNcIikgYXMgRm9ybUFycmF5KVxyXG4gICAgICAuYXQod2FsbEluZGV4KVxyXG4gICAgICAuZ2V0KFwiZml4dHVyZXNcIikgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcGF0Y2hXYWxsRWxlbWVudHMoeyBlbGVtZW50VHlwZSwgZWxlbWVudE51bWJlciB9OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGVsZW1lbnRUeXBlOiBbZWxlbWVudFR5cGUgPyBlbGVtZW50VHlwZSA6IFwiXCIsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGVsZW1lbnROdW1iZXI6IFtlbGVtZW50TnVtYmVyID8gZWxlbWVudE51bWJlciA6IDAsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGZpeHR1cmVzOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgICAgb3RoZXJFbGVtZW50czogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpdGVtO1xyXG4gIH1cclxuXHJcbiAgcGF0Y2hGaXh0dXJlKHsgZml4dHVyZU5hbWUsIGZpeHR1cmVDb25maWdJZCwgX2lkIH06IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgZml4dHVyZU5hbWU6IFtmaXh0dXJlTmFtZSA/IGZpeHR1cmVOYW1lIDogXCJcIiwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgZml4dHVyZUNvbmZpZ0lkOiBbXHJcbiAgICAgICAgZml4dHVyZUNvbmZpZ0lkID8gZml4dHVyZUNvbmZpZ0lkIDogXCJcIixcclxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIF0sXHJcbiAgICAgIF9pZDogW19pZCA/IF9pZCA6IFwiXCIsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpdGVtO1xyXG4gIH1cclxuXHJcbiAgYWRkV2FsbFNwYWNlKHdhbGxJbmRleDogbnVtYmVyLCBvcGVyYXRpb246IFwiaW5jcmVtZW50XCIgfCBcImRlY3JlbWVudFwiKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICBjb25zdCBjbGlja2VkV2FsbE51bWJlciA9IHdhbGxJbmRleCArIDE7XHJcbiAgICBjb25zdCBtbVRvRmVldCA9IDMwNTtcclxuICAgIGNvbnN0IGZpeHR1cmVIZWlnaHQgPSAxNTI0IC8gbW1Ub0ZlZXQ7IC8vIH41IGZ0IChob3Jpem9udGFsIGluY3JlbWVudClcclxuICAgIGNvbnN0IGZpeHR1cmVXaWR0aCA9IDEyMjAgLyBtbVRvRmVldDsgLy8gfjQgZnQgKHZlcnRpY2FsIGluY3JlbWVudClcclxuXHJcbiAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uO1xyXG5cclxuICAgIGNvbnN0IGdldFdhbGwgPSAobnVtOiBudW1iZXIpID0+XHJcbiAgICAgIGxheW91dC5maW5kKFxyXG4gICAgICAgIChlbDogYW55KSA9PiBlbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgZWwuZWxlbWVudE51bWJlciA9PT0gbnVtXHJcbiAgICAgICk7XHJcblxyXG4gICAgY29uc3QgYW1vdW50ID0gb3BlcmF0aW9uID09PSBcImluY3JlbWVudFwiID8gMSA6IC0xO1xyXG5cclxuICAgIGNvbnN0IHcxID0gZ2V0V2FsbCgxKTtcclxuICAgIGNvbnN0IHcyID0gZ2V0V2FsbCgyKTtcclxuICAgIGNvbnN0IHczID0gZ2V0V2FsbCgzKTtcclxuICAgIGNvbnN0IHc0ID0gZ2V0V2FsbCg0KTtcclxuICAgIGNvbnN0IHc1ID0gZ2V0V2FsbCg1KTtcclxuICAgIGNvbnN0IGVudHJhbmNlID0gbGF5b3V0LmZpbmQoKGVsOiBhbnkpID0+IGVsLmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIpO1xyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEhvcml6b250YWwgZ3Jvd3RoICAoV2FsbC0xIC8gV2FsbC0zKVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgaWYgKGNsaWNrZWRXYWxsTnVtYmVyID09PSAxIHx8IGNsaWNrZWRXYWxsTnVtYmVyID09PSAzKSB7XHJcbiAgICAgIGlmICh3MSkgdzEuZGlzdGFuY2UgKz0gYW1vdW50ICogZml4dHVyZVdpZHRoO1xyXG4gICAgICBpZiAodzMpIHczLmRpc3RhbmNlICs9IGFtb3VudCAqIGZpeHR1cmVXaWR0aDtcclxuXHJcbiAgICAgIGlmICh3Mikge1xyXG4gICAgICAgIHcyLmZpeHR1cmVzLmZvckVhY2goKGZ4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGZ4LnJlbGF0aXZlUG9zaXRpb24ueCA9XHJcbiAgICAgICAgICAgIChmeC5yZWxhdGl2ZVBvc2l0aW9uLnggfHwgMCkgKyBhbW91bnQgKiBmaXh0dXJlV2lkdGg7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBWZXJ0aWNhbCBncm93dGggIChXYWxsLTIgLyBXYWxsLTQgLyBXYWxsLTUpXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpZiAoXHJcbiAgICAgIGNsaWNrZWRXYWxsTnVtYmVyID09PSAyIHx8XHJcbiAgICAgIGNsaWNrZWRXYWxsTnVtYmVyID09PSA0IHx8XHJcbiAgICAgIGNsaWNrZWRXYWxsTnVtYmVyID09PSA1XHJcbiAgICApIHtcclxuICAgICAgaWYgKHcyKSB3Mi5kaXN0YW5jZSArPSBhbW91bnQgKiBmaXh0dXJlSGVpZ2h0O1xyXG5cclxuICAgICAgaWYgKHczKSB7XHJcbiAgICAgICAgdzMuZml4dHVyZXMuZm9yRWFjaCgoZng6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZngucmVsYXRpdmVQb3NpdGlvbi55ID1cclxuICAgICAgICAgICAgKGZ4LnJlbGF0aXZlUG9zaXRpb24ueSB8fCAwKSArIGFtb3VudCAqIGZpeHR1cmVIZWlnaHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGVudHJhbmNlWSA9IGVudHJhbmNlPy5kaXN0YW5jZSB8fCAwO1xyXG4gICAgICBjb25zdCBleGlzdGluZ1c0ID0gdzQ/LmRpc3RhbmNlIHx8IDA7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nVzUgPSB3NT8uZGlzdGFuY2UgfHwgMDtcclxuXHJcbiAgICAgIC8vIEdyb3cgd2FsbC00IGlmIHdlIGNsaWNrZWQgd2FsbC00IE9SIHdhbGwtMlxyXG4gICAgICBpZiAoKGNsaWNrZWRXYWxsTnVtYmVyID09PSA0IHx8IGNsaWNrZWRXYWxsTnVtYmVyID09PSAyKSAmJiB3NCkge1xyXG4gICAgICAgIHc0LmRpc3RhbmNlID0gdGhpcy5yb3VuZFRvVHdvKGV4aXN0aW5nVzQgKyBhbW91bnQgKiBmaXh0dXJlSGVpZ2h0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gR3JvdyB3YWxsLTUgaWYgd2UgY2xpY2tlZCB3YWxsLTUgT1Igd2FsbC0yXHJcbiAgICAgIGlmICgoY2xpY2tlZFdhbGxOdW1iZXIgPT09IDUgfHwgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDIpICYmIHc1KSB7XHJcbiAgICAgICAgdzUuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28oZXhpc3RpbmdXNSArIGFtb3VudCAqIGZpeHR1cmVIZWlnaHQpO1xyXG5cclxuICAgICAgICBpZiAodzQpIHtcclxuICAgICAgICAgIHc0LmZpeHR1cmVzLmZvckVhY2goKGZ4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgZngucmVsYXRpdmVQb3NpdGlvbi55ID1cclxuICAgICAgICAgICAgICAoZngucmVsYXRpdmVQb3NpdGlvbi55IHx8IDApICsgYW1vdW50ICogZml4dHVyZUhlaWdodDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUHJldmVudCBvdmVyZmxvdzogc2hyaW5rIGJhY2sgaWYgdG90YWwgPiB3MiBzaXplXHJcbiAgICAgIGNvbnN0IHRvdGFsVXNlZCA9IGVudHJhbmNlWSArICh3ND8uZGlzdGFuY2UgfHwgMCkgKyAodzU/LmRpc3RhbmNlIHx8IDApO1xyXG4gICAgICBpZiAodG90YWxVc2VkID4gdzIhLmRpc3RhbmNlKSB7XHJcbiAgICAgICAgaWYgKHc1KSB7XHJcbiAgICAgICAgICB3NS5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byhcclxuICAgICAgICAgICAgdzUuZGlzdGFuY2UgLSAodG90YWxVc2VkIC0gdzIhLmRpc3RhbmNlKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUZpeHR1cmUoXHJcbiAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCIsXHJcbiAgICBmaXh0dXJlSW5kZXg6IG51bWJlcixcclxuICAgIHdhbGxJbmRleD86IG51bWJlclxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgdGhpcy5nZXRGb3JtRml4dHVyZXMod2FsbEluZGV4ISkucmVtb3ZlQXQoZml4dHVyZUluZGV4KTtcclxuXHJcbiAgICAgIGNvbnN0IHdhbGwgPSB0aGlzLmdldFdhbGxCeU51bWJlcih3YWxsSW5kZXghICsgMSk7XHJcbiAgICAgIGlmICh3YWxsICYmIEFycmF5LmlzQXJyYXkod2FsbC5maXh0dXJlcykpIHtcclxuICAgICAgICB3YWxsLmZpeHR1cmVzLnNwbGljZShmaXh0dXJlSW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGZpeHR1cmVUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlcy5yZW1vdmVBdChmaXh0dXJlSW5kZXgpO1xyXG5cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZSkpIHtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLnNwbGljZShmaXh0dXJlSW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwibGF5b3V0XCI7XHJcbiAgfVxyXG5cclxuICByZW1vdmVPdGhlckVsZW1lbnQoXHJcbiAgICBlbGVtZW50VHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCIsXHJcbiAgICBlbGVtZW50SW5kZXg6IG51bWJlcixcclxuICAgIHdhbGxJbmRleD86IG51bWJlclxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChlbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgdGhpcy5nZXRXYWxsT3RoZXJFbGVtZW50cyh3YWxsSW5kZXghKS5yZW1vdmVBdChlbGVtZW50SW5kZXgpO1xyXG5cclxuICAgICAgY29uc3Qgd2FsbCA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKTtcclxuICAgICAgaWYgKHdhbGwgJiYgQXJyYXkuaXNBcnJheSh3YWxsLm90aGVyRWxlbWVudHMpKSB7XHJcbiAgICAgICAgd2FsbC5vdGhlckVsZW1lbnRzLnNwbGljZShlbGVtZW50SW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnRUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgdGhpcy5nZXRGb3JtRmxvb3JPdGhlckVsZW1lbnRzLnJlbW92ZUF0KGVsZW1lbnRJbmRleCk7XHJcblxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzKSkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMuc3BsaWNlKGVsZW1lbnRJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJsYXlvdXRcIjtcclxuICB9XHJcblxyXG4gIGNoYW5nZUZpeHR1cmVUZW1wbGF0ZShcclxuICAgIGNvbmZpZ0lkOiBzdHJpbmcsXHJcbiAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCIsXHJcbiAgICBmaXh0dXJlSW5kZXg6IG51bWJlcixcclxuICAgIHdhbGxJbmRleD86IG51bWJlclxyXG4gICkge1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlXHJcbiAgICAgIC5nZXRGaXh0dXJlVGVtcGxhdGUoY29uZmlnSWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlRGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlSWQgPSBgbmV3LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSB0aGlzLnBhdGNoRml4dHVyZSh7XHJcbiAgICAgICAgICAgICAgZml4dHVyZU5hbWU6IHRlbXBsYXRlRGF0YS5maXh0dXJlTmFtZSxcclxuICAgICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlRGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1GaXh0dXJlcyh3YWxsSW5kZXghKS5zZXRDb250cm9sKFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVJbmRleCxcclxuICAgICAgICAgICAgICBmaXh0dXJlR3JvdXBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgLi4udGVtcGxhdGVEYXRhLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgd2FsbFJlZiA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKSE7XHJcbiAgICAgICAgICAgIHdhbGxSZWYuZml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAuLi53YWxsUmVmLmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgLi4uZml4dHVyZURhdGEsXHJcbiAgICAgICAgICAgICAgdW5zYXZlZENoYW5nZXM6IHRydWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpeHR1cmVUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJZCA9IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgICAgICAgICBmaXh0dXJlTmFtZTogdGVtcGxhdGVEYXRhLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICh0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JGaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXkpLnNldENvbnRyb2woXHJcbiAgICAgICAgICAgICAgZml4dHVyZUluZGV4LFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVHcm91cFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlRGF0YSA9IHtcclxuICAgICAgICAgICAgICAuLi50ZW1wbGF0ZURhdGEsXHJcbiAgICAgICAgICAgICAgZml4dHVyZUNvbmZpZ0lkOiB0ZW1wbGF0ZURhdGEuX2lkLFxyXG4gICAgICAgICAgICAgIF9pZDogZml4dHVyZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlW2ZpeHR1cmVJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVtmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgIC4uLmZpeHR1cmVEYXRhLFxyXG4gICAgICAgICAgICAgIHVuc2F2ZWRDaGFuZ2VzOiB0cnVlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImxheW91dFwiO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gZmV0Y2ggdGVtcGxhdGVzXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25Ecm9wKFxyXG4gICAgZXZlbnQ6IGFueSxcclxuICAgIGRlc3RpbmF0aW9uV2FsbEluZGV4OiBudW1iZXIgfCBcImZsb29yXCIsXHJcbiAgICBkZXN0aW5hdGlvbkZpeHR1cmVJbmRleD86IG51bWJlclxyXG4gICkge1xyXG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGE7XHJcblxyXG4gICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgaXNTb3VyY2VGbG9vciA9IGRhdGEud2FsbEluZGV4ID09PSBcImZsb29yXCI7XHJcbiAgICBjb25zdCBpc0Rlc3RpbmF0aW9uRmxvb3IgPSBkZXN0aW5hdGlvbldhbGxJbmRleCA9PT0gXCJmbG9vclwiO1xyXG5cclxuICAgIGNvbnN0IHNvdXJjZUZvcm1BcnJheTogRm9ybUFycmF5ID0gaXNTb3VyY2VGbG9vclxyXG4gICAgICA/IHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXNcclxuICAgICAgOiB0aGlzLmdldEZvcm1GaXh0dXJlcyhkYXRhLndhbGxJbmRleCk7XHJcblxyXG4gICAgY29uc3QgZGVzdGluYXRpb25Gb3JtQXJyYXk6IEZvcm1BcnJheSA9IGlzRGVzdGluYXRpb25GbG9vclxyXG4gICAgICA/IHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXNcclxuICAgICAgOiB0aGlzLmdldEZvcm1GaXh0dXJlcyhkZXN0aW5hdGlvbldhbGxJbmRleCBhcyBudW1iZXIpO1xyXG5cclxuICAgIGNvbnN0IHNvdXJjZVdhbGxNZXRhID0gaXNTb3VyY2VGbG9vclxyXG4gICAgICA/IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVcclxuICAgICAgOiB0aGlzLmdldFdhbGxCeU51bWJlcihcclxuICAgICAgICAgIHRoaXMuZ2V0Rm9ybVdhbGxzLmF0KGRhdGEud2FsbEluZGV4KS5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZVxyXG4gICAgICAgICk/LmZpeHR1cmVzID8/IFtdO1xyXG5cclxuICAgIGNvbnN0IGRlc3RpbmF0aW9uV2FsbE1ldGEgPSBpc0Rlc3RpbmF0aW9uRmxvb3JcclxuICAgICAgPyB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlXHJcbiAgICAgIDogdGhpcy5nZXRXYWxsQnlOdW1iZXIoXHJcbiAgICAgICAgICB0aGlzLmdldEZvcm1XYWxsc1xyXG4gICAgICAgICAgICAuYXQoZGVzdGluYXRpb25XYWxsSW5kZXggYXMgbnVtYmVyKVxyXG4gICAgICAgICAgICAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWVcclxuICAgICAgICApPy5maXh0dXJlcyA/PyBbXTtcclxuXHJcbiAgICBjb25zdCBzRml4dHVyZUluZGV4ID0gc291cmNlV2FsbE1ldGEuZmluZEluZGV4KFxyXG4gICAgICAoZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIGZpeHR1cmUuX2lkID09PSBzb3VyY2VGb3JtQXJyYXkuYXQoZGF0YS5maXh0dXJlSW5kZXgpPy5nZXQoXCJfaWRcIik/LnZhbHVlXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGRGaXh0dXJlSW5kZXggPVxyXG4gICAgICBkZXN0aW5hdGlvbkZpeHR1cmVJbmRleCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgPyBkZXN0aW5hdGlvbldhbGxNZXRhLmZpbmRJbmRleChcclxuICAgICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgICAgICBmaXh0dXJlLl9pZCA9PT1cclxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbkZvcm1BcnJheS5hdChkZXN0aW5hdGlvbkZpeHR1cmVJbmRleCk/LmdldChcIl9pZFwiKVxyXG4gICAgICAgICAgICAgICAgPy52YWx1ZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIDogZGVzdGluYXRpb25Gb3JtQXJyYXkubGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IHNQb3NpdGlvbiA9IHtcclxuICAgICAgZml4dHVyZU51bWJlcjogc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlcixcclxuICAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOlxyXG4gICAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcixcclxuICAgIH07XHJcbiAgICBjb25zdCBkUG9zaXRpb24gPSB7XHJcbiAgICAgIGZpeHR1cmVOdW1iZXI6IGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlcixcclxuICAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOlxyXG4gICAgICAgIGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoc291cmNlV2FsbE1ldGEgPT09IGRlc3RpbmF0aW9uV2FsbE1ldGEpIHtcclxuICAgICAgZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5maXh0dXJlTnVtYmVyID1cclxuICAgICAgICBzUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAgICAgZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPVxyXG4gICAgICAgIHNQb3NpdGlvbi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmZpeHR1cmVOdW1iZXIgPSBkUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID1cclxuICAgICAgICBkUG9zaXRpb24uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlciA9IGRQb3NpdGlvbi5maXh0dXJlTnVtYmVyO1xyXG4gICAgICBzb3VyY2VXYWxsTWV0YVtzRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPVxyXG4gICAgICAgIGRQb3NpdGlvbi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmFuc2ZlckFycmF5SXRlbShcclxuICAgICAgc291cmNlRm9ybUFycmF5LmNvbnRyb2xzLFxyXG4gICAgICBkZXN0aW5hdGlvbkZvcm1BcnJheS5jb250cm9scyxcclxuICAgICAgZGF0YS5maXh0dXJlSW5kZXgsXHJcbiAgICAgIGRGaXh0dXJlSW5kZXhcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy50cmFuc2ZlckFycmF5SXRlbShcclxuICAgICAgc291cmNlV2FsbE1ldGEsXHJcbiAgICAgIGRlc3RpbmF0aW9uV2FsbE1ldGEsXHJcbiAgICAgIHNGaXh0dXJlSW5kZXgsXHJcbiAgICAgIGRGaXh0dXJlSW5kZXhcclxuICAgICk7XHJcblxyXG4gICAgLy8gdGhpcy5yZW9yZGVyRml4dHVyZU1ldGEodGhpcy5mbG9vckRhdGEpO1xyXG4gICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICAvLyB0aGlzLmRyYXdJbml0aWFsQ29udGVudCgpO1xyXG4gICAgLy8gdGhpcy5zdWJzY3JpYmVUb0ZpeHR1cmVDb25maWdJZENoYW5nZXMoKVxyXG4gICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImxheW91dFwiO1xyXG4gIH1cclxuICAvLyBvbkRyb3AoXHJcbiAgLy8gICBldmVudDogRG5kRHJvcEV2ZW50LFxyXG4gIC8vICAgZGVzdGluYXRpb25XYWxsSW5kZXg6IG51bWJlciB8IFwiZmxvb3JcIixcclxuICAvLyAgIGRlc3RpbmF0aW9uRml4dHVyZUluZGV4PzogbnVtYmVyXHJcbiAgLy8gKSB7XHJcbiAgLy8gICBpZih0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuICAvLyAgIGNvbnN0IGlzU291cmNlRmxvb3IgPSBldmVudC5kYXRhLndhbGxJbmRleCA9PT0gXCJmbG9vclwiO1xyXG4gIC8vICAgY29uc3QgaXNEZXN0aW5hdGlvbkZsb29yID0gZGVzdGluYXRpb25XYWxsSW5kZXggPT09IFwiZmxvb3JcIjtcclxuXHJcbiAgLy8gICBjb25zdCBzb3VyY2VGb3JtQXJyYXk6IEZvcm1BcnJheSA9IGlzU291cmNlRmxvb3JcclxuICAvLyAgICAgPyB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzXHJcbiAgLy8gICAgIDogdGhpcy5nZXRGb3JtRml4dHVyZXMoZXZlbnQuZGF0YS53YWxsSW5kZXgpO1xyXG5cclxuICAvLyAgIGNvbnN0IGRlc3RpbmF0aW9uRm9ybUFycmF5OiBGb3JtQXJyYXkgPSBpc0Rlc3RpbmF0aW9uRmxvb3JcclxuICAvLyAgICAgPyB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzXHJcbiAgLy8gICAgIDogdGhpcy5nZXRGb3JtRml4dHVyZXMoZGVzdGluYXRpb25XYWxsSW5kZXggYXMgbnVtYmVyKTtcclxuXHJcbiAgLy8gICBjb25zdCBzb3VyY2VXYWxsTWV0YSA9IGlzU291cmNlRmxvb3JcclxuICAvLyAgICAgPyB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlXHJcbiAgLy8gICAgIDogdGhpcy5nZXRXYWxsQnlOdW1iZXIoXHJcbiAgLy8gICAgICAgICB0aGlzLmdldEZvcm1XYWxscy5hdChldmVudC5kYXRhLndhbGxJbmRleCkuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWVcclxuICAvLyAgICAgICApPy5maXh0dXJlcyA/PyBbXTtcclxuXHJcbiAgLy8gICBjb25zdCBkZXN0aW5hdGlvbldhbGxNZXRhID0gaXNEZXN0aW5hdGlvbkZsb29yXHJcbiAgLy8gICAgID8gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVxyXG4gIC8vICAgICA6IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKFxyXG4gIC8vICAgICAgICAgdGhpcy5nZXRGb3JtV2FsbHNcclxuICAvLyAgICAgICAgICAgLmF0KGRlc3RpbmF0aW9uV2FsbEluZGV4IGFzIG51bWJlcilcclxuICAvLyAgICAgICAgICAgLmdldChcImVsZW1lbnROdW1iZXJcIik/LnZhbHVlXHJcbiAgLy8gICAgICAgKT8uZml4dHVyZXMgPz8gW107XHJcblxyXG4gIC8vICAgY29uc3Qgc0ZpeHR1cmVJbmRleCA9IHNvdXJjZVdhbGxNZXRhLmZpbmRJbmRleChcclxuICAvLyAgICAgKGZpeHR1cmU6IGFueSkgPT5cclxuICAvLyAgICAgICBmaXh0dXJlLl9pZCA9PT1cclxuICAvLyAgICAgICBzb3VyY2VGb3JtQXJyYXkuYXQoZXZlbnQuZGF0YS5maXh0dXJlSW5kZXgpPy5nZXQoXCJfaWRcIik/LnZhbHVlXHJcbiAgLy8gICApO1xyXG5cclxuICAvLyAgIGNvbnN0IGRGaXh0dXJlSW5kZXggPVxyXG4gIC8vICAgICBkZXN0aW5hdGlvbkZpeHR1cmVJbmRleCAhPT0gdW5kZWZpbmVkXHJcbiAgLy8gICAgICAgPyBkZXN0aW5hdGlvbldhbGxNZXRhLmZpbmRJbmRleChcclxuICAvLyAgICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT5cclxuICAvLyAgICAgICAgICAgICBmaXh0dXJlLl9pZCA9PT1cclxuICAvLyAgICAgICAgICAgICBkZXN0aW5hdGlvbkZvcm1BcnJheS5hdChkZXN0aW5hdGlvbkZpeHR1cmVJbmRleCk/LmdldChcIl9pZFwiKVxyXG4gIC8vICAgICAgICAgICAgICAgPy52YWx1ZVxyXG4gIC8vICAgICAgICAgKVxyXG4gIC8vICAgICAgIDogZGVzdGluYXRpb25Gb3JtQXJyYXkubGVuZ3RoO1xyXG5cclxuICAvLyAgIGNvbnN0IHNQb3NpdGlvbiA9IHtcclxuICAvLyAgICAgZml4dHVyZU51bWJlcjogc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlcixcclxuICAvLyAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOlxyXG4gIC8vICAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcixcclxuICAvLyAgIH07XHJcbiAgLy8gICBjb25zdCBkUG9zaXRpb24gPSB7XHJcbiAgLy8gICAgIGZpeHR1cmVOdW1iZXI6IGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlcixcclxuICAvLyAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOlxyXG4gIC8vICAgICAgIGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyLFxyXG4gIC8vICAgfTtcclxuXHJcbiAgLy8gICBpZiAoc291cmNlV2FsbE1ldGEgPT09IGRlc3RpbmF0aW9uV2FsbE1ldGEpIHtcclxuICAvLyAgICAgZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5maXh0dXJlTnVtYmVyID1cclxuICAvLyAgICAgICBzUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAvLyAgICAgZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPVxyXG4gIC8vICAgICAgIHNQb3NpdGlvbi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgLy8gICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmZpeHR1cmVOdW1iZXIgPSBkUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAvLyAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID1cclxuICAvLyAgICAgICBkUG9zaXRpb24uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlciA9IGRQb3NpdGlvbi5maXh0dXJlTnVtYmVyO1xyXG4gIC8vICAgICBzb3VyY2VXYWxsTWV0YVtzRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPVxyXG4gIC8vICAgICAgIGRQb3NpdGlvbi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgdGhpcy50cmFuc2ZlckFycmF5SXRlbShcclxuICAvLyAgICAgc291cmNlRm9ybUFycmF5LmNvbnRyb2xzLFxyXG4gIC8vICAgICBkZXN0aW5hdGlvbkZvcm1BcnJheS5jb250cm9scyxcclxuICAvLyAgICAgZXZlbnQuZGF0YS5maXh0dXJlSW5kZXgsXHJcbiAgLy8gICAgIGRGaXh0dXJlSW5kZXhcclxuICAvLyAgICk7XHJcblxyXG4gIC8vICAgdGhpcy50cmFuc2ZlckFycmF5SXRlbShcclxuICAvLyAgICAgc291cmNlV2FsbE1ldGEsXHJcbiAgLy8gICAgIGRlc3RpbmF0aW9uV2FsbE1ldGEsXHJcbiAgLy8gICAgIHNGaXh0dXJlSW5kZXgsXHJcbiAgLy8gICAgIGRGaXh0dXJlSW5kZXhcclxuICAvLyAgICk7XHJcblxyXG4gIC8vICAgLy8gdGhpcy5yZW9yZGVyRml4dHVyZU1ldGEodGhpcy5mbG9vckRhdGEpO1xyXG4gIC8vICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgLy8gICAvLyB0aGlzLmRyYXdJbml0aWFsQ29udGVudCgpO1xyXG4gIC8vICAgLy8gdGhpcy5zdWJzY3JpYmVUb0ZpeHR1cmVDb25maWdJZENoYW5nZXMoKVxyXG4gIC8vICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImxheW91dFwiO1xyXG4gIC8vIH1cclxuXHJcbiAgZG93bmxvYWRDYW52YXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuY2FudmFzKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgb3JpZ2luYWxWaWV3cG9ydCA9IFtcclxuICAgICAgLi4udGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0hLFxyXG4gICAgXSBhcyBmYWJyaWMuVE1hdDJEO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLnNldFZpZXdwb3J0VHJhbnNmb3JtKFsxLCAwLCAwLCAxLCAwLCAwXSk7XHJcblxyXG4gICAgY29uc3QgYm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcblxyXG4gICAgY29uc3QgZGF0YVVSTCA9IHRoaXMuY2FudmFzLnRvRGF0YVVSTCh7XHJcbiAgICAgIGZvcm1hdDogXCJwbmdcIixcclxuICAgICAgbGVmdDogYm91bmRzLmxlZnQsXHJcbiAgICAgIHRvcDogYm91bmRzLnRvcCxcclxuICAgICAgd2lkdGg6IGJvdW5kcy53aWR0aCxcclxuICAgICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0LFxyXG4gICAgICBtdWx0aXBsaWVyOiAyLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuc2V0Vmlld3BvcnRUcmFuc2Zvcm0ob3JpZ2luYWxWaWV3cG9ydCk7XHJcblxyXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgbGluay5ocmVmID0gZGF0YVVSTDtcclxuICAgIGxpbmsuZG93bmxvYWQgPSBgJHt0aGlzLnBsYW5vRGF0YS5zdG9yZU5hbWV9XyR7dGhpcy5mbG9vckRhdGEuZmxvb3JOYW1lfS5wbmdgO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaGFuZGxlRmVlZGJhY2tBY3Rpb24odXNlckFjdGlvbjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgdGFyZ2V0Rml4dHVyZTogYW55ID0ge1xyXG4gICAgICAgIC4uLih0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uXHJcbiAgICAgICAgICAuZmxhdE1hcCgocDogYW55KSA9PiBwLmZpeHR1cmVzKVxyXG4gICAgICAgICAgLmNvbmNhdCh0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlKVxyXG4gICAgICAgICAgLmZpbmQoKGY6IGFueSkgPT4gZi5faWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCkgfHwgbnVsbCksXHJcbiAgICAgICAgdXNlckFjdGlvbjogdXNlckFjdGlvbi5hY3Rpb24sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSB7IC4uLnRhcmdldEZpeHR1cmUgfTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB1c2VyQWN0aW9uLmFjdGlvbiA9PT0gXCJhY2NlcHRBaVwiIHx8XHJcbiAgICAgICAgdXNlckFjdGlvbi5hY3Rpb24gPT09IFwiZWRpdFdpdGhBaVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHVzZXJBY3Rpb24uZml4dHVyZURhdGEuaGVhZGVyPy5sYWJlbFxyXG4gICAgICAgICAgICA/LnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgPy5pbmNsdWRlcyhcImhlYWRlciBub3QgaWRlbnRpZmllZFwiKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdXNlckFjdGlvbi5maXh0dXJlRGF0YS5oZWFkZXIubGFiZWwgPSB0YXJnZXRGaXh0dXJlLmhlYWRlci5sYWJlbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRhcmdldEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAuLi50YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgLi4udXNlckFjdGlvbi5maXh0dXJlRGF0YSxcclxuICAgICAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgICAgICAuLi50YXJnZXRGaXh0dXJlLmhlYWRlcixcclxuICAgICAgICAgICAgLi4udXNlckFjdGlvbi5maXh0dXJlRGF0YS5oZWFkZXIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRhcmdldEZpeHR1cmU/LnNoZWxmQ29uZmlnPy5mb3JFYWNoKChzOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGlmIChzLnNoZWxmVHlwZSA9PSBcInRyYXlcIiAmJiAhcz8ub3JpZ2luYWxQcm9kdWN0Q291bnQpIHtcclxuICAgICAgICAgICAgcy50cmF5Um93cyA9IHMucHJvZHVjdFBlclNoZWxmIDw9IDIxID8gMyA6IDc7XHJcbiAgICAgICAgICAgIHMub3JpZ2luYWxQcm9kdWN0Q291bnQgPSBzLnByb2R1Y3RQZXJTaGVsZjtcclxuICAgICAgICAgICAgcy5wcm9kdWN0UGVyU2hlbGYgPSBNYXRoLmZsb29yKFxyXG4gICAgICAgICAgICAgIHMucHJvZHVjdFBlclNoZWxmIC8gKHMucHJvZHVjdFBlclNoZWxmIDw9IDIxID8gMyA6IDcpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IHNoZWxmWm9uZSA9IHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YT8uc2hlbGZDb25maWcuZmluZChcclxuICAgICAgICAgICAgKHNoZWx2ZTogYW55KSA9PiBzLnNoZWxmTnVtYmVyID09IHNoZWx2ZS5zaGVsZk51bWJlclxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBpZiAoc2hlbGZab25lKSB7XHJcbiAgICAgICAgICAgIHRhcmdldEZpeHR1cmUuc2hlbGZDb25maWdbaW5kZXhdID0geyAuLi5zaGVsZlpvbmUsIC4uLnMgfTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHMuem9uZSA9IFwiQm90dG9tXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB1c2VyQWN0aW9uLmFjdGlvbiA9PT0gXCJlZGl0V2l0aEFpXCIgfHxcclxuICAgICAgICB1c2VyQWN0aW9uLmFjdGlvbiA9PT0gXCJlZGl0V2l0aFBsYW5vXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0ge1xyXG4gICAgICAgICAgLi4udGFyZ2V0Rml4dHVyZSxcclxuICAgICAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlRGF0YSA9IHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YTtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0Rml4dHVyZSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBmZWVkYmFjayA9IHVzZXJBY3Rpb24uZmVlZGJhY2s7XHJcblxyXG4gICAgICBjb25zdCBhbnN3ZXJJZCA9IHVzZXJBY3Rpb24uZmVlZGJhY2s/LmFuc3dlcnM/LlswXT8uX2lkO1xyXG4gICAgICBpZiAoIWFuc3dlcklkKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgIF9pZDogZmVlZGJhY2suX2lkLFxyXG4gICAgICAgIGFuc3dlcklkOiBhbnN3ZXJJZCxcclxuICAgICAgICB0eXBlOiB1c2VyQWN0aW9uLnR5cGUsXHJcbiAgICAgICAgdXNlckFjdGlvbjogdXNlckFjdGlvbi5hY3Rpb24sXHJcbiAgICAgICAgY29tbWVudHM6IHVzZXJBY3Rpb24ucmVtYXJrcyxcclxuICAgICAgICB0YXNrVHlwZTogdXNlckFjdGlvbi50YXNrVHlwZSxcclxuICAgICAgICBwbGFub0lkOiB1c2VyQWN0aW9uLnBsYW5vSWQsXHJcbiAgICAgICAgZmxvb3JJZDogdXNlckFjdGlvbi5mbG9vcklkLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZUZpeHR1cmVDb21wbGlhbmNlU3RhdHVzKHBheWxvYWQpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoIXJlcyAmJiB1c2VyQWN0aW9uLnR5cGUgIT0gXCJhZ3JlZVwiKSByZXR1cm47XHJcblxyXG4gICAgICBpZiAodXNlckFjdGlvbi5hY3Rpb24gPT09IFwia2VlcFBsYW5vXCIpIHtcclxuICAgICAgICB0YXJnZXRGaXh0dXJlID0ge1xyXG4gICAgICAgICAgLi4udGFyZ2V0Rml4dHVyZSxcclxuICAgICAgICAgIC4uLnVzZXJBY3Rpb24uZml4dHVyZURhdGEsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdXBkYXRlRml4dHVyZVBheWxvYWQgPSB7XHJcbiAgICAgICAgZml4dHVyZUlkOiB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlSWQsXHJcbiAgICAgICAgZGF0YTogdGFyZ2V0Rml4dHVyZSxcclxuICAgICAgICB0YXNrVHlwZTogXCJmaXh0dXJlXCIsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlU3RvcmVGaXh0dXJlKHVwZGF0ZUZpeHR1cmVQYXlsb2FkKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyh0aGlzLnBsYW5vRGF0YS5faWQpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBleGVjdXRlIHVzZXIgYWN0aW9uXCIpO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkBAIH4gaGFuZGxlRmVlZGJhY2tBY3Rpb24gW2Vycl06XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGhhbmRsZUFwcHJvdmVyUmVzcG9uc2UocmVzcG9uc2U6IGFueSkge1xyXG4gICAgaWYgKHJlc3BvbnNlLm1lc3NhZ2UgPT0gXCJlZGl0XCIpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgIGNvbnN0IHdhbGwgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgICAod2FsbDogYW55KSA9PiB3YWxsLmVsZW1lbnROdW1iZXIgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLndhbGxJbmRleFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IHdhbGwuZml4dHVyZXMuZmluZChcclxuICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuX2lkID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlSWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IGZpeHR1cmU7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZVR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmZpbmQoXHJcbiAgICAgICAgICAoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLl9pZCA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZUlkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBmaXh0dXJlO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3BvbnNlLmRhdGEuc2hlbGZDb25maWcuZm9yRWFjaCgoc2hlbGY6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGlmIChzaGVsZi5zaGVsZlR5cGUgPT0gXCJ0cmF5XCIgJiYgIXNoZWxmPy5vcmlnaW5hbFByb2R1Y3RDb3VudCkge1xyXG4gICAgICAgICAgc2hlbGYudHJheVJvd3MgPSBzaGVsZi5wcm9kdWN0UGVyU2hlbGYgPD0gMjEgPyAzIDogNztcclxuICAgICAgICAgIHNoZWxmLm9yaWdpbmFsUHJvZHVjdENvdW50ID0gc2hlbGYucHJvZHVjdFBlclNoZWxmO1xyXG4gICAgICAgICAgc2hlbGYucHJvZHVjdFBlclNoZWxmID0gTWF0aC5mbG9vcihcclxuICAgICAgICAgICAgc2hlbGYucHJvZHVjdFBlclNoZWxmIC8gKHNoZWxmLnByb2R1Y3RQZXJTaGVsZiA8PSAyMSA/IDMgOiA3KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHNoZWxmWm9uZSA9IHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5zaGVsZkNvbmZpZy5maW5kKFxyXG4gICAgICAgICAgKHNoZWx2ZTogYW55KSA9PiBzaGVsZi5zaGVsZk51bWJlciA9PSBzaGVsdmUuc2hlbGZOdW1iZXJcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChzaGVsZlpvbmUpIHtcclxuICAgICAgICAgIHJlc3BvbnNlLmRhdGEuc2hlbGZDb25maWdbaW5kZXhdID0geyAuLi5zaGVsZlpvbmUsIC4uLnNoZWxmIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNoZWxmLnpvbmUgPSBcIkJvdHRvbVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICByZXNwb25zZT8uZGF0YT8uaGVhZGVyPy5sYWJlbFxyXG4gICAgICAgICAgPy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICA/LmluY2x1ZGVzKFwiaGVhZGVyIG5vdCBpZGVudGlmaWVkXCIpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGRlbGV0ZSByZXNwb25zZS5kYXRhLmhlYWRlcjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSB7XHJcbiAgICAgICAgLi4udGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLFxyXG4gICAgICAgIC4uLnJlc3BvbnNlLmRhdGEsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVEYXRhID0gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhO1xyXG4gICAgICB0aGlzLmVkaXRGaXh0dXJlID0gdHJ1ZTtcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHJlc3BvbnNlPy5maWx0ZXJCeVRhc2s/Lmxlbmd0aCA+IDAgfHxcclxuICAgICAgcmVzcG9uc2U/LmZpbHRlckJ5U3RhdHVzPy5sZW5ndGggPiAwIHx8XHJcbiAgICAgIHJlc3BvbnNlPy5maWx0ZXJCeUFwcHJvdmFsU3RhdHVzPy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5nZXRTdG9yZUZlZWRiYWNrKFxyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgICAgIHJlc3BvbnNlLFxyXG4gICAgICAgIGZhbHNlXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVzcG9uc2U/LnJlbG9hZCkge1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHRoaXMucGxhbm9EYXRhLl9pZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVzcG9uc2U/LnRhc2tUeXBlID09PSBcImxheW91dFwiICYmIHJlc3BvbnNlPy5pc3N1ZVR5cGUgPT09IFwib3RoZXJzXCIpIHtcclxuICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgIHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyh0aGlzLnBsYW5vRGF0YS5faWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlPy50YXNrVHlwZSA9PT0gXCJsYXlvdXRcIikge1xyXG4gICAgICBjb25zdCBmZWVkYmFjayA9IHRoaXMuc3RvcmVGZWVkYmFjaz8ubGF5b3V0RGF0YT8uZmluZChcclxuICAgICAgICAodGFzazogYW55KSA9PiB0YXNrLl9pZCA9PT0gcmVzcG9uc2UuX2lkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghZmVlZGJhY2spIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGFuc3dlciA9IGZlZWRiYWNrPy5hbnN3ZXJzPy5maW5kKFxyXG4gICAgICAgIChhbnN3ZXI6IGFueSkgPT4gYW5zd2VyLl9pZCA9PT0gcmVzcG9uc2UuYW5zd2VySWRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghYW5zd2VyKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBpc3N1ZSA9IGFuc3dlci5pc3N1ZXMuZmluZChcclxuICAgICAgICAoaXNzdWU6IGFueSkgPT4gaXNzdWUuX2lkID09PSByZXNwb25zZS5pc3N1ZUlkXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoIWlzc3VlKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBkZXRhaWwgPSBpc3N1ZS5EZXRhaWxzLmZpbmQoXHJcbiAgICAgICAgKGRldGFpbDogYW55KSA9PiBkZXRhaWwuX2lkID09PSByZXNwb25zZS5EZXRhaWxzSWRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghZGV0YWlsKSByZXR1cm47XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmU/Lmlzc3VlKSB7XHJcbiAgICAgICAgY29uc3QgbWV0YSA9IHtcclxuICAgICAgICAgIF9pZDogZmVlZGJhY2suX2lkLFxyXG4gICAgICAgICAgYW5zd2VySWQ6IGFuc3dlci5faWQsXHJcbiAgICAgICAgICBpc3N1ZUlkOiBpc3N1ZS5faWQsXHJcbiAgICAgICAgICBEZXRhaWxzSWQ6IGRldGFpbC5faWQsXHJcbiAgICAgICAgICB0eXBlOiByZXNwb25zZS50eXBlLFxyXG4gICAgICAgICAgY29tbWVudHM6IHJlc3BvbnNlLmNvbW1lbnRzLFxyXG4gICAgICAgICAgdGFza1R5cGU6IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLnRhc2tUeXBlLFxyXG5cclxuICAgICAgICAgIHBsYW5vSWQ6IHJlc3BvbnNlPy5wbGFub0lkLFxyXG4gICAgICAgICAgZmxvb3JJZDogcmVzcG9uc2U/LmZsb29ySWQsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZUZpeHR1cmVDb21wbGlhbmNlU3RhdHVzKG1ldGEpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSBcImFncmVlXCIpIHtcclxuICAgICAgICAgICAgICBpZiAoaXNzdWU/Lmlzc3VlVHlwZSA9PT0gXCJleHRyYUZpeHR1cmVcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudC5maXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZml4dHVyZS5faWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZml4dHVyZS5naG9zdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmaXh0dXJlLl9pZCA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZS5naG9zdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAoaXNzdWU/Lmlzc3VlVHlwZSA9PT0gXCJmaXh0dXJlTWlzc2luZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmZpeHR1cmVzID0gZWxlbWVudC5maXh0dXJlcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgIGZpeHR1cmUuX2lkICE9PSB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlSWRcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZSA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmU/LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAoZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgZml4dHVyZS5faWQgIT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAoaXNzdWU/Lmlzc3VlVHlwZSA9PT0gXCJmaXh0dXJlTWlzbWF0Y2hcIikge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgICAgICAgICBmaXh0dXJlSWQsXHJcbiAgICAgICAgICAgICAgICAgIG5ld2Fzc29jaWF0ZWRFbGVtZW50VHlwZSxcclxuICAgICAgICAgICAgICAgICAgbmV3YXNzb2NpYXRlZEVsZW1lbnROdW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgIG5ld2Fzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcixcclxuICAgICAgICAgICAgICAgIH0gPSBkZXRhaWw7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNTb3VyY2VGbG9vciA9IGRldGFpbC5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09IFwiZmxvb3JcIjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzRGVzdGluYXRpb25GbG9vciA9IG5ld2Fzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gXCJmbG9vclwiO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZU1ldGEgPSBpc1NvdXJjZUZsb29yXHJcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVxyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgIChlbDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5lbGVtZW50VHlwZSA9PT0gZGV0YWlsLmFzc29jaWF0ZWRFbGVtZW50VHlwZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5lbGVtZW50TnVtYmVyID09PSBkZXRhaWwuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICApPy5maXh0dXJlcztcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZXN0aW5hdGlvbk1ldGEgPSBpc0Rlc3RpbmF0aW9uRmxvb3JcclxuICAgICAgICAgICAgICAgICAgPyB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlXHJcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgKGVsOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmVsZW1lbnRUeXBlID09PSBuZXdhc3NvY2lhdGVkRWxlbWVudFR5cGUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwuZWxlbWVudE51bWJlciA9PT0gbmV3YXNzb2NpYXRlZEVsZW1lbnROdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICApPy5maXh0dXJlcztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZU1ldGEgfHwgIWRlc3RpbmF0aW9uTWV0YSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUluZGV4ID0gc291cmNlTWV0YS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChmOiBhbnkpID0+IGYuX2lkID09PSBmaXh0dXJlSWRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlSW5kZXggPT09IC0xKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9uR2hvc3REZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uTWV0YVxyXG4gICAgICAgICAgICAgICAgICAubWFwKChmaXh0dXJlOiBhbnksIGk6IG51bWJlcikgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSW5kZXg6IGksXHJcbiAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChmOiBhbnkpID0+ICFmLmZpeHR1cmUuZ2hvc3QpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBkZXN0aW5hdGlvbkluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5ld2Fzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSW5kZXggPSBub25HaG9zdERlc3RpbmF0aW9uWzBdPy5vcmlnaW5hbEluZGV4ID8/IDA7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICBuZXdhc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPiBub25HaG9zdERlc3RpbmF0aW9uLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSW5kZXggPVxyXG4gICAgICAgICAgICAgICAgICAgIG5vbkdob3N0RGVzdGluYXRpb25bbm9uR2hvc3REZXN0aW5hdGlvbi5sZW5ndGhdXHJcbiAgICAgICAgICAgICAgICAgICAgICA/Lm9yaWdpbmFsSW5kZXggPz8gZGVzdGluYXRpb25NZXRhLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSW5kZXggPVxyXG4gICAgICAgICAgICAgICAgICAgIG5vbkdob3N0RGVzdGluYXRpb25bbmV3YXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyIC0gMV1cclxuICAgICAgICAgICAgICAgICAgICAgID8ub3JpZ2luYWxJbmRleCA/PyBkZXN0aW5hdGlvbk1ldGEubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmZXJBcnJheUl0ZW0oXHJcbiAgICAgICAgICAgICAgICAgIHNvdXJjZU1ldGEsXHJcbiAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTWV0YSxcclxuICAgICAgICAgICAgICAgICAgc291cmNlSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSW5kZXhcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbW92ZWRGaXh0dXJlID0gZGVzdGluYXRpb25NZXRhW2Rlc3RpbmF0aW9uSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgbW92ZWRGaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9IG5ld2Fzc29jaWF0ZWRFbGVtZW50VHlwZTtcclxuICAgICAgICAgICAgICAgIG1vdmVkRml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlciA9XHJcbiAgICAgICAgICAgICAgICAgIG5ld2Fzc29jaWF0ZWRFbGVtZW50TnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgbW92ZWRGaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9XHJcbiAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSW5kZXggKyAxO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldFN0b3JlRml4dHVyZXModGhpcy5wbGFub0RhdGEuX2lkKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVzcG9uc2U/LnRhc2tUeXBlID09PSBcImZpeHR1cmVcIikge1xyXG4gICAgICBjb25zdCBmZWVkYmFjayA9IHRoaXMuc3RvcmVGZWVkYmFjaz8uZml4dHVyZURhdGE/LmZpbmQoXHJcbiAgICAgICAgKHRhc2s6IGFueSkgPT4gdGFzay5faWQgPT09IHJlc3BvbnNlLl9pZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWZlZWRiYWNrKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBhbnN3ZXIgPSBmZWVkYmFjaz8uYW5zd2Vycz8uZmluZChcclxuICAgICAgICAoYW5zd2VyOiBhbnkpID0+IGFuc3dlci5faWQgPT09IHJlc3BvbnNlLmFuc3dlcklkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghYW5zd2VyKSByZXR1cm47XHJcblxyXG4gICAgICAvLyBjb25zdCBpc3N1ZSA9IGFuc3dlci5pc3N1ZXMuZmluZCgoaXNzdWU6IGFueSkgPT4gaXNzdWUuX2lkID09PSByZXNwb25zZS5pc3N1ZUlkKVxyXG5cclxuICAgICAgLy8gaWYgKCFpc3N1ZSkgcmV0dXJuO1xyXG5cclxuICAgICAgLy8gY29uc3QgZGV0YWlsID0gaXNzdWUuRGV0YWlscy5maW5kKChkZXRhaWw6IGFueSkgPT4gZGV0YWlsLl9pZCA9PT0gcmVzcG9uc2UuRGV0YWlsc0lkKVxyXG5cclxuICAgICAgLy8gaWYgKCFkZXRhaWwpIHJldHVybjtcclxuXHJcbiAgICAgIGxldCB0YXJnZXRGaXh0dXJlOiBhbnkgPSBudWxsO1xyXG5cclxuICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBlbGVtZW50LmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGZpeHR1cmUuX2lkID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlSWQpIHtcclxuICAgICAgICAgICAgdGFyZ2V0Rml4dHVyZSA9IGZpeHR1cmU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChmaXh0dXJlLl9pZCA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZUlkKSB7XHJcbiAgICAgICAgICB0YXJnZXRGaXh0dXJlID0gZml4dHVyZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlPy5pc3N1ZSkge1xyXG4gICAgICBjb25zdCBtZXRhID0ge1xyXG4gICAgICAgIF9pZDogZmVlZGJhY2suX2lkLFxyXG4gICAgICAgIGFuc3dlcklkOiBhbnN3ZXIuX2lkLFxyXG4gICAgICAgIC8vIGlzc3VlSWQ6IGlzc3VlLl9pZCxcclxuICAgICAgICAvLyBEZXRhaWxzSWQ6IGRldGFpbC5faWQsXHJcbiAgICAgICAgdHlwZTogcmVzcG9uc2UudHlwZSxcclxuICAgICAgICBjb21tZW50czogcmVzcG9uc2UuY29tbWVudHMsXHJcbiAgICAgICAgdGFza1R5cGU6IHJlc3BvbnNlLnRhc2tUeXBlLFxyXG4gICAgICAgIHBsYW5vSWQ6IHJlc3BvbnNlPy5wbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IHJlc3BvbnNlPy5mbG9vcklkLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlRml4dHVyZUNvbXBsaWFuY2VTdGF0dXMobWV0YSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gXCJhZ3JlZVwiKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIChpc3N1ZS5pc3N1ZVR5cGUgPT09ICdjYXRlZ29yeVdyb25nJykge1xyXG4gICAgICAgICAgICAvLyAgIHRhcmdldEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgIC8vICAgICAuLi50YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgICAvLyAgICAgZml4dHVyZUNvbmZpZ0lkOiBkZXRhaWwuZml4dHVyZUNvbmZpZ0lkLFxyXG4gICAgICAgICAgICAvLyAgICAgc2hlbGZDb25maWc6IGRldGFpbC5zaGVsZkNvbmZpZyxcclxuICAgICAgICAgICAgLy8gICAgIGlzc3VlOiBmYWxzZSxcclxuICAgICAgICAgICAgLy8gICB9XHJcblxyXG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKGlzc3VlLmlzc3VlVHlwZSA9PT0gJ3NpemVXcm9uZycpIHtcclxuICAgICAgICAgICAgLy8gICB0YXJnZXRGaXh0dXJlID0ge1xyXG4gICAgICAgICAgICAvLyAgICAgLi4udGFyZ2V0Rml4dHVyZSxcclxuICAgICAgICAgICAgLy8gICAgIGZpeHR1cmVXaWR0aDogZGV0YWlsLmZpeHR1cmVXaWR0aCxcclxuICAgICAgICAgICAgLy8gICAgIHNoZWxmQ29uZmlnOiBkZXRhaWwuc2hlbGZDb25maWcsXHJcbiAgICAgICAgICAgIC8vICAgICBpc3N1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIC8vICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gfSBlbHNlIGlmIChpc3N1ZS5pc3N1ZVR5cGUgPT09ICdzaGVsZldyb25nJykge1xyXG4gICAgICAgICAgICAvLyAgIHRhcmdldEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgIC8vICAgICAuLi50YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgICAvLyAgICAgc2hlbGZDb25maWc6IGRldGFpbC5zaGVsZkNvbmZpZyxcclxuICAgICAgICAgICAgLy8gICAgIGlzc3VlOiBmYWxzZSxcclxuICAgICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAoaXNzdWUuaXNzdWVUeXBlID09PSAnYnJhbmRXcm9uZycgfHwgaXNzdWUuaXNzdWVUeXBlID09PSAncHJvZHVjdGNhdGVnb3J5V3JvbmcnKSB7XHJcbiAgICAgICAgICAgIC8vICAgY29uc3Qgc291cmNlU2hlbHZlcyA9IHRhcmdldEZpeHR1cmUuc2hlbGZDb25maWc7XHJcbiAgICAgICAgICAgIC8vICAgY29uc3QgdGFyZ2V0U2hlbHZlcyA9IGRldGFpbC5zaGVsZkNvbmZpZztcclxuICAgICAgICAgICAgLy8gICBjb25zdCB0YXJnZXRNYXAgPSBuZXcgTWFwPG51bWJlciwgYW55PigpO1xyXG4gICAgICAgICAgICAvLyAgIHRhcmdldFNoZWx2ZXMuZm9yRWFjaCgoc2hlbGY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgdGFyZ2V0TWFwLnNldChzaGVsZi5zaGVsZk51bWJlciwgc2hlbGYpO1xyXG4gICAgICAgICAgICAvLyAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gICBjb25zdCBtZXJnZWRTaGVsdmVzID0gc291cmNlU2hlbHZlcy5tYXAoKHNoZWxmOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgLy8gICAgIHJldHVybiB0YXJnZXRNYXAuaGFzKHNoZWxmLnNoZWxmTnVtYmVyKVxyXG4gICAgICAgICAgICAvLyAgICAgICA/IHRhcmdldE1hcC5nZXQoc2hlbGYuc2hlbGZOdW1iZXIpXHJcbiAgICAgICAgICAgIC8vICAgICAgIDogc2hlbGY7XHJcbiAgICAgICAgICAgIC8vICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyAgIHRhcmdldEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgIC8vICAgICAuLi50YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgICAvLyAgICAgc2hlbGZDb25maWc6IG1lcmdlZFNoZWx2ZXMsXHJcbiAgICAgICAgICAgIC8vICAgICBpc3N1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIC8vICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgcmVzcG9uc2U/LmZpeHR1cmVBaURldGFpbHM/LmhlYWRlcj8ubGFiZWxcclxuICAgICAgICAgICAgICAgID8udG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgPy5pbmNsdWRlcyhcImhlYWRlciBub3QgaWRlbnRpZmllZFwiKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBkZWxldGUgcmVzcG9uc2UuZml4dHVyZUFpRGV0YWlscy5oZWFkZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICBmaXh0dXJlSWQ6IHRhcmdldEZpeHR1cmUuX2lkLFxyXG4gICAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLmZpeHR1cmVBaURldGFpbHMsXHJcbiAgICAgICAgICAgICAgdGFza1R5cGU6IHJlc3BvbnNlLnRhc2tUeXBlLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZVN0b3JlRml4dHVyZShwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHRoaXMucGxhbm9EYXRhLl9pZCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byB1cGRhdGUgZml4dHVyZVwiKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgICAgICAgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHRoaXMucGxhbm9EYXRhLl9pZCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byB1cGRhdGUgdGFza1wiKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZT8udGFza1R5cGUgPT09IFwidm1cIikge1xyXG4gICAgICBjb25zdCBmZWVkYmFjayA9IHRoaXMuc3RvcmVGZWVkYmFjaz8uVm1EYXRhPy5maW5kKFxyXG4gICAgICAgICh0YXNrOiBhbnkpID0+IHRhc2suX2lkID09PSByZXNwb25zZS5faWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKCFmZWVkYmFjaykgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgYW5zd2VyID0gZmVlZGJhY2s/LmFuc3dlcnM/LmZpbmQoXHJcbiAgICAgICAgKGFuc3dlcjogYW55KSA9PiBhbnN3ZXIuX2lkID09PSByZXNwb25zZS5hbnN3ZXJJZFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKCFhbnN3ZXIpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGlzc3VlID0gYW5zd2VyLmlzc3Vlcy5maW5kKFxyXG4gICAgICAgIChpc3N1ZTogYW55KSA9PiBpc3N1ZS5faWQgPT09IHJlc3BvbnNlLmlzc3VlSWRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghaXNzdWUpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGRldGFpbCA9IGlzc3VlLkRldGFpbHMuZmluZChcclxuICAgICAgICAoZGV0YWlsOiBhbnkpID0+IGRldGFpbC5faWQgPT09IHJlc3BvbnNlLkRldGFpbHNJZFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKCFkZXRhaWwpIHJldHVybjtcclxuXHJcbiAgICAgIGxldCB0YXJnZXRGaXh0dXJlOiBhbnkgPSBudWxsO1xyXG5cclxuICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBlbGVtZW50LmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGZpeHR1cmUuX2lkID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlSWQpIHtcclxuICAgICAgICAgICAgdGFyZ2V0Rml4dHVyZSA9IGZpeHR1cmU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChmaXh0dXJlLl9pZCA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZUlkKSB7XHJcbiAgICAgICAgICB0YXJnZXRGaXh0dXJlID0gZml4dHVyZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlPy5pc3N1ZSkge1xyXG4gICAgICAgIGNvbnN0IG1ldGEgPSB7XHJcbiAgICAgICAgICBfaWQ6IGZlZWRiYWNrLl9pZCxcclxuICAgICAgICAgIGFuc3dlcklkOiBhbnN3ZXIuX2lkLFxyXG4gICAgICAgICAgaXNzdWVJZDogaXNzdWUuX2lkLFxyXG4gICAgICAgICAgRGV0YWlsc0lkOiBkZXRhaWwuX2lkLFxyXG4gICAgICAgICAgdHlwZTogcmVzcG9uc2UudHlwZSxcclxuICAgICAgICAgIGNvbW1lbnRzOiByZXNwb25zZS5jb21tZW50cyxcclxuICAgICAgICAgIHRhc2tUeXBlOiB0aGlzLnNlbGVjdGVkRml4dHVyZS50YXNrVHlwZSxcclxuICAgICAgICAgIHBsYW5vSWQ6IHJlc3BvbnNlPy5wbGFub0lkLFxyXG4gICAgICAgICAgZmxvb3JJZDogcmVzcG9uc2U/LmZsb29ySWQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlRml4dHVyZUNvbXBsaWFuY2VTdGF0dXMobWV0YSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09IFwiYWdyZWVcIikge1xyXG4gICAgICAgICAgICAgIGlmIChpc3N1ZS5pc3N1ZVR5cGUgPT09IFwiVm1NaXNzaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLnRhcmdldEZpeHR1cmUsXHJcbiAgICAgICAgICAgICAgICAgIHNoZWxmQ29uZmlnOiBkZXRhaWwuc2hlbGZDb25maWcsXHJcbiAgICAgICAgICAgICAgICAgIHZtQ29uZmlnOiBbLi4udGFyZ2V0Rml4dHVyZS52bUNvbmZpZywgLi4uZGV0YWlsLnZtQ29uZmlnXSxcclxuICAgICAgICAgICAgICAgICAgaXNzdWU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzc3VlLmlzc3VlVHlwZSA9PT0gXCJleHRyYVZtXCIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZtQXJyYXkgPSB0YXJnZXRGaXh0dXJlPy52bUNvbmZpZy5maWx0ZXIoKHZtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuICEoZGV0YWlsPy52bUNvbmZpZyB8fCBbXSkuc29tZShcclxuICAgICAgICAgICAgICAgICAgICAocmVtb3ZlVm06IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgIHZtLnN0YXJ0WVBvc2l0aW9uID09IHJlbW92ZVZtLnN0YXJ0WVBvc2l0aW9uICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICB2bS5lbmRZUG9zaXRpb24gPT0gcmVtb3ZlVm0uZW5kWVBvc2l0aW9uICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICB2bS52bUlkID09IHJlbW92ZVZtLnZtSWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIHZtLnhab25lID09IHJlbW92ZVZtLnhab25lICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICB2bS55Wm9uZSA9PSByZW1vdmVWbS55Wm9uZVxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0Rml4dHVyZSA9IHtcclxuICAgICAgICAgICAgICAgICAgLi4udGFyZ2V0Rml4dHVyZSxcclxuICAgICAgICAgICAgICAgICAgdm1Db25maWc6IHZtQXJyYXksXHJcbiAgICAgICAgICAgICAgICAgIGlzc3VlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc3N1ZS5pc3N1ZVR5cGUgPT09IFwiVm1NaXNtYXRjaFwiKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVm1Db25maWcgPSB0YXJnZXRGaXh0dXJlLnZtQ29uZmlnLm1hcChcclxuICAgICAgICAgICAgICAgICAgKHZtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IGRldGFpbC52bUNvbmZpZy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgKGR2bTogYW55KSA9PiBkdm0udm1JZCA9PT0gdm0udm1JZFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi52bSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRZUG9zaXRpb246IG1hdGNoLm5ld3N0YXJ0WVBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRZUG9zaXRpb246IG1hdGNoLm5ld2VuZFlQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgeFpvbmU6IG1hdGNoLm5ld3hab25lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB5Wm9uZTogbWF0Y2gubmV3eVpvbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBtYXRjaC5uZXdwb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2bTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0YXJnZXRGaXh0dXJlID0ge1xyXG4gICAgICAgICAgICAgICAgICAuLi50YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgICAgICAgICB2bUNvbmZpZzogdXBkYXRlZFZtQ29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICBpc3N1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICAgIGZpeHR1cmVJZDogdGFyZ2V0Rml4dHVyZS5faWQsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVTdG9yZUZpeHR1cmUocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyh0aGlzLnBsYW5vRGF0YS5faWQpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gdXBkYXRlIGZpeHR1cmVcIik7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyh0aGlzLnBsYW5vRGF0YS5faWQpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gdXBkYXRlIHRhc2tcIik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiaW5kRml4dHVyZVRvV2FsbCh3YWxsR3JvdXA6IGZhYnJpYy5Hcm91cCwgZml4dHVyZUdyb3VwOiBmYWJyaWMuR3JvdXApIHtcclxuICAgIGNvbnN0IG9mZnNldFggPSBmaXh0dXJlR3JvdXAubGVmdCEgLSB3YWxsR3JvdXAubGVmdCE7XHJcbiAgICBjb25zdCBvZmZzZXRZID0gZml4dHVyZUdyb3VwLnRvcCEgLSB3YWxsR3JvdXAudG9wITtcclxuXHJcbiAgICBpZiAoIXRoaXMud2FsbEJpbmRpbmdzLmhhcyh3YWxsR3JvdXApKSB0aGlzLndhbGxCaW5kaW5ncy5zZXQod2FsbEdyb3VwLCBbXSk7XHJcbiAgICB0aGlzLndhbGxCaW5kaW5ncy5nZXQod2FsbEdyb3VwKSEucHVzaCh7IGZpeHR1cmVHcm91cCwgb2Zmc2V0WCwgb2Zmc2V0WSB9KTtcclxuICB9XHJcblxyXG4gIGtlZXBXaXRoaW5Cb3VuZGluZ0JveChcclxuICAgIG9iajogZmFicmljLk9iamVjdCxcclxuICAgIGJveDogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9XHJcbiAgKSB7XHJcbiAgICBjb25zdCByZWN0ID0gb2JqLmdldEJvdW5kaW5nUmVjdCgpO1xyXG4gICAgbGV0IGR4ID0gMDtcclxuICAgIGxldCBkeSA9IDA7XHJcblxyXG4gICAgaWYgKHJlY3QubGVmdCA8IGJveC5sZWZ0KSB7XHJcbiAgICAgIGR4ID0gYm94LmxlZnQgLSByZWN0LmxlZnQ7XHJcbiAgICB9XHJcbiAgICBpZiAocmVjdC50b3AgPCBib3gudG9wKSB7XHJcbiAgICAgIGR5ID0gYm94LnRvcCAtIHJlY3QudG9wO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlY3QubGVmdCArIHJlY3Qud2lkdGggPiBib3gubGVmdCArIGJveC53aWR0aCkge1xyXG4gICAgICBkeCA9IGJveC5sZWZ0ICsgYm94LndpZHRoIC0gKHJlY3QubGVmdCArIHJlY3Qud2lkdGgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlY3QudG9wICsgcmVjdC5oZWlnaHQgPiBib3gudG9wICsgYm94LmhlaWdodCkge1xyXG4gICAgICBkeSA9IGJveC50b3AgKyBib3guaGVpZ2h0IC0gKHJlY3QudG9wICsgcmVjdC5oZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkeCAhPT0gMCB8fCBkeSAhPT0gMCkge1xyXG4gICAgICBvYmoubGVmdCA9IG9iai5sZWZ0ISArIGR4O1xyXG4gICAgICBvYmoudG9wID0gb2JqLnRvcCEgKyBkeTtcclxuICAgICAgb2JqLnNldENvb3JkcygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBpc092ZXJsYXBwaW5nQW55Rml4dHVyZShtb3ZlZE9iajogZmFicmljLk9iamVjdCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgQlVGRkVSX1BYID0gNDsgLy8gb3ZlcmxhcCB0b2xlcmFuY2UgcGVyIHNpZGVcclxuXHJcbiAgICBjb25zdCBvYmplY3RzID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqICE9PSBtb3ZlZE9iaiAmJiBvYmouZml4dHVyZUlkKTtcclxuXHJcbiAgICBjb25zdCBzaHJpbmtSZWN0ID0gKFxyXG4gICAgICByOiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0sXHJcbiAgICAgIGI6IG51bWJlclxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMCwgci53aWR0aCAtIDIgKiBiKTtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMCwgci5oZWlnaHQgLSAyICogYik7XHJcbiAgICAgIGNvbnN0IGxlZnQgPSByLmxlZnQgKyBiO1xyXG4gICAgICBjb25zdCB0b3AgPSByLnRvcCArIGI7XHJcbiAgICAgIHJldHVybiB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCByZWN0c0ludGVyc2VjdCA9IChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gIShcclxuICAgICAgICBhLmxlZnQgKyBhLndpZHRoIDw9IGIubGVmdCB8fFxyXG4gICAgICAgIGIubGVmdCArIGIud2lkdGggPD0gYS5sZWZ0IHx8XHJcbiAgICAgICAgYS50b3AgKyBhLmhlaWdodCA8PSBiLnRvcCB8fFxyXG4gICAgICAgIGIudG9wICsgYi5oZWlnaHQgPD0gYS50b3BcclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgbW92ZWRSZWN0UmF3ID0gbW92ZWRPYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICBjb25zdCBtb3ZlZFJlY3QgPSBzaHJpbmtSZWN0KG1vdmVkUmVjdFJhdywgQlVGRkVSX1BYKTtcclxuXHJcbiAgICByZXR1cm4gb2JqZWN0cy5zb21lKChvYmo6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBvdGhlclJlY3RSYXcgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgIGNvbnN0IG90aGVyUmVjdCA9IHNocmlua1JlY3Qob3RoZXJSZWN0UmF3LCBCVUZGRVJfUFgpO1xyXG4gICAgICByZXR1cm4gcmVjdHNJbnRlcnNlY3QobW92ZWRSZWN0LCBvdGhlclJlY3QpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByb3RhdGVXYWxsKGVsZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB3YWxsID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsLmVsZW1lbnROdW1iZXIgPT09IGVsZU51bWJlclxyXG4gICAgKTtcclxuICAgIGlmICh3YWxsLmFuZ2xlICsgOTAgPCAzNjApIHtcclxuICAgICAgd2FsbC5hbmdsZSArPSA5MDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdhbGwuYW5nbGUgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcih0cnVlKTtcclxuICB9XHJcblxyXG4gIGFkZE5ld1dhbGwoZWxlTnVtYmVyOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IG5ld1dhbGwgPSB7XHJcbiAgICAgIGVsZW1lbnRUeXBlOiBcIndhbGxcIixcclxuICAgICAgZGlzdGFuY2U6IDE1LFxyXG4gICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIGRpcmVjdGlvbjogXCJyaWdodFwiLFxyXG4gICAgICBhbmdsZTogMCxcclxuICAgICAgZWxlbWVudE51bWJlcjogZWxlTnVtYmVyICsgMSxcclxuICAgICAgcmVsYXRpdmVQb3NpdGlvbjoge1xyXG4gICAgICAgIHg6IDAsXHJcbiAgICAgICAgeTogMCxcclxuICAgICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZpeHR1cmVzOiBbXSxcclxuICAgICAgb3RoZXJFbGVtZW50czogW10sXHJcbiAgICAgIG5ld0FkZGVkOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpbnNlcnRJbmRleCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZEluZGV4KFxyXG4gICAgICAod2FsbDogYW55KSA9PlxyXG4gICAgICAgIHdhbGwuZWxlbWVudE51bWJlciA9PT0gZWxlTnVtYmVyICYmIHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiXHJcbiAgICApO1xyXG5cclxuICAgIC8vIC8vIENlbnRlciB0aGUgbmV3IHdhbGwgb24gY2FudmFzXHJcbiAgICAvLyB0cnkge1xyXG4gICAgLy8gICBjb25zdCBjYW52YXNDZW50ZXJYID0gdGhpcy5jYW52YXMuZ2V0V2lkdGgoKSAvIDI7XHJcbiAgICAvLyAgIGNvbnN0IGNhbnZhc0NlbnRlclkgPSB0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKSAvIDI7XHJcbiAgICAvLyAgIGNvbnN0IHdhbGxXaWR0aFB4ID0gdGhpcy50b1BpeGVscyhuZXdXYWxsLmRpc3RhbmNlLCBuZXdXYWxsLnVuaXQpO1xyXG4gICAgLy8gICBjb25zdCB3YWxsSGVpZ2h0UHggPSB0aGlzLndhbGxUaGlja25lc3M7XHJcbiAgICAvLyAgIGNvbnN0IGxlZnRQeCA9IGNhbnZhc0NlbnRlclggLSB3YWxsV2lkdGhQeCAvIDI7XHJcbiAgICAvLyAgIGNvbnN0IHRvcFB4ID0gY2FudmFzQ2VudGVyWSAtIHdhbGxIZWlnaHRQeCAvIDI7XHJcbiAgICAvLyAgIG5ld1dhbGwucmVsYXRpdmVQb3NpdGlvbi54ID0gdGhpcy5mcm9tUGl4ZWxzKGxlZnRQeCwgXCJmdFwiKTtcclxuICAgIC8vICAgbmV3V2FsbC5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB0aGlzLmZyb21QaXhlbHModG9wUHgsIFwiZnRcIik7XHJcbiAgICAvLyB9IGNhdGNoIHt9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5zcGxpY2UoaW5zZXJ0SW5kZXggKyAxLCAwLCBuZXdXYWxsKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVdhbGxFbGVtZW50TnVtYmVyKCk7XHJcbiAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gICAgdGhpcy51cGRhdGVXYWxsQ29vcmRpbmF0ZXMoKTtcclxuICB9XHJcblxyXG4gIGFkZE5ld0VudHJhbmNlKCkge1xyXG4gICAgY29uc3QgZWxlTnVtYmVyID1cclxuICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maWx0ZXIoXHJcbiAgICAgICAgKGVsZTogYW55KSA9PiBlbGUuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIlxyXG4gICAgICApPy5sZW5ndGggPz8gMDtcclxuXHJcbiAgICBjb25zdCBuZXdFbnRyYW5jZSA9IHtcclxuICAgICAgZWxlbWVudFR5cGU6IFwiZW50cmFuY2VcIixcclxuICAgICAgZGlzdGFuY2U6IDYsXHJcbiAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgZGlyZWN0aW9uOiBcInVwXCIsXHJcbiAgICAgIGFuZ2xlOiAwLFxyXG4gICAgICBlbGVtZW50TnVtYmVyOiBlbGVOdW1iZXIgKyAxLFxyXG4gICAgICByZWxhdGl2ZVBvc2l0aW9uOiB7XHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwLFxyXG4gICAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgfSxcclxuICAgICAgZml4dHVyZXM6IFtdLFxyXG4gICAgICBvdGhlckVsZW1lbnRzOiBbXSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5wdXNoKG5ld0VudHJhbmNlKTtcclxuICAgIHRoaXMucmVuZGVyRmxvb3IodHJ1ZSk7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMudXBkYXRlRW50cmFuY2VDb29yZGluYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkTmV3Rml4dHVyZShmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCIsIHdhbGxJbmRleD86IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgdGVtcGxhdGU6IGFueSA9IGF3YWl0IHRoaXMuZ2V0VGVtcGxhdGUodGhpcy5maXh0dXJlVGVtcGxhdGVzWzBdLl9pZCk7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZURhdGEgPSB0ZW1wbGF0ZS5kYXRhO1xyXG4gICAgY29uc3QgZml4dHVyZUlkID0gYG5ldy0ke2NyeXB0by5yYW5kb21VVUlEKCl9YDtcclxuICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgZml4dHVyZU5hbWU6IHRlbXBsYXRlRGF0YS5maXh0dXJlTmFtZSxcclxuICAgICAgZml4dHVyZUNvbmZpZ0lkOiB0ZW1wbGF0ZURhdGEuX2lkLFxyXG4gICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGZpeHR1cmVEYXRhID0ge1xyXG4gICAgICAuLi50ZW1wbGF0ZURhdGEsXHJcbiAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgcmVsYXRpdmVQb3NpdGlvbjogeyB4OiAwLCB5OiAwLCB1bml0OiBcImZ0XCIgfSxcclxuICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICAgIHVuc2F2ZWRDaGFuZ2VzOiB0cnVlLFxyXG4gICAgICBuZXdBZGRlZDogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGZpeHR1cmVUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICBjb25zdCB3YWxsRGF0YSA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKTtcclxuXHJcbiAgICAgIGNvbnN0IHcgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICBmaXh0dXJlRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudW5pdFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB3cCA9IHRoaXMuZnJvbVBpeGVscyh3LCBcImZ0XCIpO1xyXG5cclxuICAgICAgaWYgKHdhbGxEYXRhKSB7XHJcbiAgICAgICAgY29uc3QgeDAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLng7XHJcbiAgICAgICAgY29uc3QgeTAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnk7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gd2FsbERhdGEuZGlzdGFuY2UgLSB3cDtcclxuXHJcbiAgICAgICAgY29uc3QgYW5nbGVEZWcgPSB3YWxsRGF0YS5hbmdsZSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IGFuZ2xlUmFkID0gKGFuZ2xlRGVnICogTWF0aC5QSSkgLyAxODA7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ4ID0geDAgKyBsZW5ndGggKiBNYXRoLmNvcyhhbmdsZVJhZCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ5ID0geTAgKyBsZW5ndGggKiBNYXRoLnNpbihhbmdsZVJhZCk7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMTtcclxuICAgICAgICBjb25zdCBmeF9vZmZzZXQgPSBmeCArIG9mZnNldCAqIC1NYXRoLnNpbihhbmdsZVJhZCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ5X29mZnNldCA9IGZ5ICsgb2Zmc2V0ICogTWF0aC5jb3MoYW5nbGVSYWQpO1xyXG5cclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnggPSBmeF9vZmZzZXQ7XHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi55ID0gZnlfb2Zmc2V0O1xyXG4gICAgICAgIGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPSBhbmdsZURlZztcclxuICAgICAgfVxyXG5cclxuICAgICAgKHRoaXMuZ2V0Rm9ybVdhbGxzLmF0KHdhbGxJbmRleCEpLmdldChcImZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheSkucHVzaChcclxuICAgICAgICBmaXh0dXJlR3JvdXBcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpPy5maXh0dXJlcy5wdXNoKGZpeHR1cmVEYXRhKTtcclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZVR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICBjb25zdCBmaXh0dXJlV2lkdGhQeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlSGVpZ2h0UHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0XHJcbiAgICAgICk7XHJcblxyXG4gICAgICAvLyBUcnkgdG8gZmluZCBlbXB0eSBjZW50ZXIgc3BhY2VcclxuICAgICAgY29uc3QgZW1wdHlTcG90ID0gdGhpcy5maW5kRW1wdHlDZW50ZXJTcG90KFxyXG4gICAgICAgIGZpeHR1cmVXaWR0aFB4LFxyXG4gICAgICAgIGZpeHR1cmVIZWlnaHRQeFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKGVtcHR5U3BvdCkge1xyXG4gICAgICAgIC8vIENvbnZlcnQgYmFjayB0byBmdCBzaW5jZSB5b3VyIHN0cnVjdHVyZSBzdG9yZXMgZnRcclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLmZyb21QaXhlbHMoZW1wdHlTcG90LngsIFwiZnRcIik7XHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5mcm9tUGl4ZWxzKGVtcHR5U3BvdC55LCBcImZ0XCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGZhbGxiYWNrXHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi54ID0gMDtcclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yRml4dHVyZXNcIikgYXMgRm9ybUFycmF5KS5wdXNoKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUucHVzaChmaXh0dXJlRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwibGF5b3V0XCI7XHJcbiAgICB0aGlzLnVwZGF0ZUZpeHR1cmVDb29yZGluYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3T3RoZXJFbGVtZW50cyhwb3NUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIiwgd2FsbEluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcG9zRGF0YSA9IHtcclxuICAgICAgX2lkOiBgbmV3LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gLFxyXG4gICAgICBmaXh0dXJlTmFtZTogYFBPUyBDb3VudGVyYCxcclxuICAgICAgZml4dHVyZVR5cGU6IFwib3RoZXJcIixcclxuICAgICAgcmVsYXRpdmVQb3NpdGlvbjogeyB4OiAwLCB5OiAwLCBhbmdsZTogMCwgdW5pdDogXCJmdFwiIH0sXHJcbiAgICAgIGZpeHR1cmVTdGF0aWNMZW5ndGg6IHtcclxuICAgICAgICB2YWx1ZTogMyxcclxuICAgICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZpeHR1cmVTdGF0aWNXaWR0aDoge1xyXG4gICAgICAgIHZhbHVlOiA1LFxyXG4gICAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgbGV0IHggPSBwb3NEYXRhLnJlbGF0aXZlUG9zaXRpb24ueDtcclxuICAgIGxldCB5ID0gcG9zRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnk7XHJcbiAgICBsZXQgYSA9IHBvc0RhdGEucmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcclxuXHJcbiAgICBjb25zdCBoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgcG9zRGF0YS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICBwb3NEYXRhLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBwb3NEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgcG9zRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudW5pdFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBuZXdPdGhlckdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHR5cGU6IFtwb3NEYXRhLmZpeHR1cmVOYW1lIHx8IFwiUE9TIENvdW50ZXJcIl0sIC8vIGRlZmF1bHQgc2VsZWN0ZWQgbGFiZWxcclxuICAgICAgY3VzdG9tTmFtZTogW1wiXCJdLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHBvc1R5cGUgPT0gXCJ3YWxsXCIpIHtcclxuICAgICAgY29uc3Qgd2FsbERhdGEgPSB0aGlzLmdldFdhbGxCeU51bWJlcih3YWxsSW5kZXghICsgMSk7XHJcbiAgICAgIGlmICh3YWxsRGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHgwID0gd2FsbERhdGEucmVsYXRpdmVQb3NpdGlvbi54O1xyXG4gICAgICAgIGNvbnN0IHkwID0gd2FsbERhdGEucmVsYXRpdmVQb3NpdGlvbi55O1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHdhbGxEYXRhLmRpc3RhbmNlO1xyXG4gICAgICAgIGNvbnN0IGFuZ2xlRGVnID0gd2FsbERhdGEuYW5nbGUgfHwgMDtcclxuICAgICAgICBjb25zdCBhbmdsZVJhZCA9IChhbmdsZURlZyAqIE1hdGguUEkpIC8gMTgwO1xyXG5cclxuICAgICAgICBjb25zdCBmeCA9IHgwICsgKGxlbmd0aCAvIDIpICogTWF0aC5jb3MoYW5nbGVSYWQpO1xyXG4gICAgICAgIGNvbnN0IGZ5ID0geTAgKyAobGVuZ3RoIC8gMikgKiBNYXRoLnNpbihhbmdsZVJhZCk7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMi41O1xyXG4gICAgICAgIGNvbnN0IGZ4X29mZnNldCA9IGZ4ICsgb2Zmc2V0ICogLU1hdGguc2luKGFuZ2xlUmFkKTtcclxuICAgICAgICBjb25zdCBmeV9vZmZzZXQgPSBmeSArIG9mZnNldCAqIE1hdGguY29zKGFuZ2xlUmFkKTtcclxuXHJcbiAgICAgICAgeCA9IHRoaXMudG9QaXhlbHMoZnhfb2Zmc2V0LCBcImZ0XCIpO1xyXG4gICAgICAgIHkgPSB0aGlzLnRvUGl4ZWxzKGZ5X29mZnNldCwgXCJmdFwiKTtcclxuICAgICAgICBhID0gYW5nbGVEZWc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIE9iamVjdC5hc3NpZ24ocG9zRGF0YSwge1xyXG4gICAgICAgIGFzc29jaWF0ZWRFbGVtZW50TnVtYmVyOiB3YWxsSW5kZXghICsgMSxcclxuICAgICAgICBhc3NvY2lhdGVkRWxlbWVudFR5cGU6IFwid2FsbFwiLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgICh0aGlzLmdldEZvcm1XYWxscy5hdCh3YWxsSW5kZXghKS5nZXQoXCJvdGhlckVsZW1lbnRzXCIpIGFzIEZvcm1BcnJheSkucHVzaChcclxuICAgICAgICBuZXdPdGhlckdyb3VwXHJcbiAgICAgICk7XHJcbiAgICAgIHdhbGxEYXRhLm90aGVyRWxlbWVudHMucHVzaCh7IC4uLnBvc0RhdGEsIG5ld0FkZGVkOiB0cnVlIH0pO1xyXG4gICAgfSBlbHNlIGlmIChwb3NUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vck90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICAgIG5ld090aGVyR3JvdXBcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cy5wdXNoKHsgLi4ucG9zRGF0YSwgbmV3QWRkZWQ6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVjdEdyb3VwID0gdGhpcy5kcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChcclxuICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgIHgsXHJcbiAgICAgIHksXHJcbiAgICAgIGEsXHJcbiAgICAgIHcsXHJcbiAgICAgIGgsXHJcbiAgICAgIHBvc0RhdGFcclxuICAgICk7XHJcblxyXG4gICAgLy8gbWFrZSBhY3RpdmVcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChyZWN0R3JvdXApO1xyXG4gICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICB9IGNhdGNoIHt9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpYmVUb090aGVyRWxlbWVudHNDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZU90aGVyRWxlbWVudHNDb29yZGluYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgZmluZEVtcHR5Q2VudGVyU3BvdChvYmplY3RXaWR0aFB4OiBudW1iZXIsIG9iamVjdEhlaWdodFB4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IG9iamVjdHMgPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCk7XHJcbiAgICBpZiAoIW9iamVjdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAvLyAxLiBHZXQgbGF5b3V0IGJvdW5kc1xyXG4gICAgY29uc3QgYm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcbiAgICBjb25zdCBjZW50ZXJYID0gYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLyAyO1xyXG4gICAgY29uc3QgY2VudGVyWSA9IGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC8gMjtcclxuXHJcbiAgICAvLyAyLiBTcGlyYWwgc2VhcmNoIHBhcmFtZXRlcnNcclxuICAgIGNvbnN0IHN0ZXAgPSAyMDsgLy8gZ3JpZCBzdGVwIChweClcclxuICAgIGNvbnN0IG1heFJhZGl1cyA9IE1hdGgubWF4KGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XHJcblxyXG4gICAgLy8gU3BpcmFsIG91dHdhcmRzXHJcbiAgICBmb3IgKGxldCByYWRpdXMgPSAwOyByYWRpdXMgPCBtYXhSYWRpdXM7IHJhZGl1cyArPSBzdGVwKSB7XHJcbiAgICAgIGZvciAobGV0IGFuZ2xlID0gMDsgYW5nbGUgPCAzNjA7IGFuZ2xlICs9IDMwKSB7XHJcbiAgICAgICAgY29uc3QgcmFkID0gKGFuZ2xlICogTWF0aC5QSSkgLyAxODA7XHJcblxyXG4gICAgICAgIGNvbnN0IHggPSBjZW50ZXJYICsgcmFkaXVzICogTWF0aC5jb3MocmFkKTtcclxuICAgICAgICBjb25zdCB5ID0gY2VudGVyWSArIHJhZGl1cyAqIE1hdGguc2luKHJhZCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRlc3RSZWN0ID0ge1xyXG4gICAgICAgICAgbGVmdDogeCxcclxuICAgICAgICAgIHRvcDogeSxcclxuICAgICAgICAgIHdpZHRoOiBvYmplY3RXaWR0aFB4LFxyXG4gICAgICAgICAgaGVpZ2h0OiBvYmplY3RIZWlnaHRQeCxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBDaGVjayBjb2xsaXNpb25cclxuICAgICAgICBjb25zdCBpbnRlcnNlY3RzID0gb2JqZWN0cy5zb21lKChvYmopID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlY3QgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgICAgICByZXR1cm4gIShcclxuICAgICAgICAgICAgcmVjdC5sZWZ0ID4gdGVzdFJlY3QubGVmdCArIHRlc3RSZWN0LndpZHRoIHx8XHJcbiAgICAgICAgICAgIHJlY3QubGVmdCArIHJlY3Qud2lkdGggPCB0ZXN0UmVjdC5sZWZ0IHx8XHJcbiAgICAgICAgICAgIHJlY3QudG9wID4gdGVzdFJlY3QudG9wICsgdGVzdFJlY3QuaGVpZ2h0IHx8XHJcbiAgICAgICAgICAgIHJlY3QudG9wICsgcmVjdC5oZWlnaHQgPCB0ZXN0UmVjdC50b3BcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICghaW50ZXJzZWN0cykge1xyXG4gICAgICAgICAgcmV0dXJuIHsgeCwgeSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsOyAvLyBubyBlbXB0eSBhcmVhIGZvdW5kXHJcbiAgfVxyXG5cclxuICBsaXN0ZW5Ub0RlbGV0ZUtleSgpIHtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB7XHJcbiAgICAgIGlmIChlLmtleSA9PT0gXCJEZWxldGVcIiAmJiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCkge1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuY2FudmFzPy5nZXRBY3RpdmVPYmplY3QoKSBhcyBhbnk7XHJcbiAgICAgICAgaWYgKGFjdGl2ZSAmJiAoYWN0aXZlIGFzIGFueSkub2JqVHlwZSA9PT0gXCJlbnRyYW5jZVwiKSB7XHJcbiAgICAgICAgICB0aGlzLmRlbGV0ZUVudHJhbmNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYWN0aXZlICYmIChhY3RpdmUgYXMgYW55KS5vYmpUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgICAgaWYgKGFjdGl2ZT8uZGF0YT8uZWxlbWVudE51bWJlcikge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVdhbGwoYWN0aXZlPy5kYXRhPy5lbGVtZW50TnVtYmVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlRW50cmFuY2UoKSB7XHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKSBhcyBhbnk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZSAmJiBhY3RpdmUub2JqVHlwZSA9PT0gXCJlbnRyYW5jZVwiKSB7XHJcbiAgICAgIGNvbnN0IGkgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmRJbmRleChcclxuICAgICAgICAoZWw6IGFueSkgPT5cclxuICAgICAgICAgIGVsLmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIgJiZcclxuICAgICAgICAgIGVsLmVsZW1lbnROdW1iZXIgPT09IGFjdGl2ZS5kYXRhLmVsZW1lbnROdW1iZXJcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChpID49IDApIHtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLnNwbGljZShpLCAxKTtcclxuICAgICAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGRlbGV0ZVdhbGwoZWxlTnVtYmVyOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHdhbGwgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgIChlbGU6IGFueSkgPT5cclxuICAgICAgICBlbGUuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsZS5lbGVtZW50TnVtYmVyID09PSBlbGVOdW1iZXJcclxuICAgICk7XHJcbiAgICBpZiAod2FsbC5maXh0dXJlcy5sZW5ndGggfHwgd2FsbC5vdGhlckVsZW1lbnRzLmxlbmd0aClcclxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jb25maXJtRGVsZXRlV2FsbCgpKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGkgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmRJbmRleChcclxuICAgICAgKGVsOiBhbnkpID0+IGVsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBlbC5lbGVtZW50TnVtYmVyID09PSBlbGVOdW1iZXJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5zcGxpY2UoaSwgMSk7XHJcbiAgICB0aGlzLnVwZGF0ZVdhbGxFbGVtZW50TnVtYmVyKCk7XHJcbiAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVXYWxsRWxlbWVudE51bWJlcigpIHtcclxuICAgIGNvbnN0IG9ubHlXYWxscyA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24/LmZpbHRlcihcclxuICAgICAgKGVsOiBhbnkpID0+IGVsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIlxyXG4gICAgKTtcclxuXHJcbiAgICBvbmx5V2FsbHM/LmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICBpdGVtLmVsZW1lbnROdW1iZXIgPSBpbmRleCArIDE7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlzT3ZlcmxhcHBpbmdXaXRoVG9sZXJhbmNlKFxyXG4gICAgYTogZmFicmljLk9iamVjdCxcclxuICAgIGI6IGZhYnJpYy5PYmplY3QsXHJcbiAgICB0b2xlcmFuY2U6IG51bWJlciA9IDBcclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGFCb3VuZHMgPSBhLmdldEJvdW5kaW5nUmVjdCgpO1xyXG4gICAgY29uc3QgYkJvdW5kcyA9IGIuZ2V0Qm91bmRpbmdSZWN0KCk7XHJcblxyXG4gICAgcmV0dXJuICEoXHJcbiAgICAgIChcclxuICAgICAgICBhQm91bmRzLmxlZnQgPiBiQm91bmRzLmxlZnQgKyBiQm91bmRzLndpZHRoIC0gdG9sZXJhbmNlIHx8IC8vIGEgaXMgdG8gdGhlIHJpZ2h0IG9mIGJcclxuICAgICAgICBhQm91bmRzLmxlZnQgKyBhQm91bmRzLndpZHRoIC0gdG9sZXJhbmNlIDwgYkJvdW5kcy5sZWZ0IHx8IC8vIGEgaXMgdG8gdGhlIGxlZnQgb2YgYlxyXG4gICAgICAgIGFCb3VuZHMudG9wID4gYkJvdW5kcy50b3AgKyBiQm91bmRzLmhlaWdodCAtIHRvbGVyYW5jZSB8fCAvLyBhIGlzIGJlbG93IGJcclxuICAgICAgICBhQm91bmRzLnRvcCArIGFCb3VuZHMuaGVpZ2h0IC0gdG9sZXJhbmNlIDwgYkJvdW5kcy50b3BcclxuICAgICAgKSAvLyBhIGlzIGFib3ZlIGJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3NvY2lhdGVkRWxlbWVudEluZm8oZml4dHVyZUlkOiBzdHJpbmcpOiB7XHJcbiAgICBhc3NvY2lhdGVkRWxlbWVudE51bWJlcjogbnVtYmVyO1xyXG4gICAgYXNzb2NpYXRlZEVsZW1lbnRUeXBlOiBzdHJpbmc7XHJcbiAgICB3YWxsRGlyZWN0aW9uOiBzdHJpbmc7XHJcbiAgfSB8IG51bGwge1xyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24pIHtcclxuICAgICAgaWYgKGVsZW1lbnQuZml4dHVyZXMgJiYgQXJyYXkuaXNBcnJheShlbGVtZW50LmZpeHR1cmVzKSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiBlbGVtZW50LmZpeHR1cmVzKSB7XHJcbiAgICAgICAgICBpZiAoZml4dHVyZS5faWQgPT09IGZpeHR1cmVJZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGFzc29jaWF0ZWRFbGVtZW50TnVtYmVyOiBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyID8/IG51bGwsXHJcbiAgICAgICAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnRUeXBlOiBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA/PyBudWxsLFxyXG4gICAgICAgICAgICAgIHdhbGxEaXJlY3Rpb246IGVsZW1lbnQuZGlyZWN0aW9uLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICB0b1BpeGVscyh2YWx1ZTogbnVtYmVyLCB1bml0OiBzdHJpbmcsIGRwaSA9IDIuOCkge1xyXG4gICAgbGV0IHBpeGVsczogbnVtYmVyO1xyXG5cclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgcGl4ZWxzID0gKHZhbHVlIC8gMjUuNCkgKiBkcGk7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICBwaXhlbHMgPSB2YWx1ZSAqIDEyICogZHBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE51bWJlcihwaXhlbHMudG9GaXhlZCg0KSk7XHJcbiAgfVxyXG5cclxuICBmcm9tUGl4ZWxzKHBpeGVsczogbnVtYmVyLCB1bml0OiBzdHJpbmcsIGRwaSA9IDIuOCk6IG51bWJlciB7XHJcbiAgICBsZXQgdmFsdWU6IG51bWJlcjtcclxuXHJcbiAgICAvLyBwaXhlbHMgPSBwaXhlbHMgPj0gdGhpcy53YWxsVGhpY2tuZXNzID8gcGl4ZWxzIC0gdGhpcy53YWxsVGhpY2tuZXNzIDogdGhpcy53YWxsVGhpY2tuZXNzO1xyXG5cclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgdmFsdWUgPSAocGl4ZWxzIC8gZHBpKSAqIDI1LjQ7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICB2YWx1ZSA9IHBpeGVscyAvICgxMiAqIGRwaSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB1bml0LiBVc2UgJ21tJyBvciAnZnQnLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlLnRvRml4ZWQoNCkpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29uZmlybUVkaXQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTGF5b3V0RWRpdENvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPGJvb2xlYW4+KChyZXN1bHQpID0+IHJlc3VsdCA9PT0gXCJva1wiKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbmZpcm1EZWxldGVXYWxsKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gXCJEZWxldGUgd2FsbFwiO1xyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgd2FsbCBhbG9uZyB3aXRoIGl0cyBhc3NvY2lhdGVkIGZpeHR1cmVzIGFuZCBlbGVtZW50cz9cIjtcclxuXHJcbiAgICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjxib29sZWFuPigocmVzdWx0KSA9PiByZXN1bHQgPT09IFwib2tcIik7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGaXh0dXJlQ29vcmRpbmF0ZXMoZml4dHVyZXM/OiBhbnkpIHtcclxuICAgIGNvbnN0IGZpeHR1cmVzRnJvbUNhbnZhcyA9XHJcbiAgICAgIGZpeHR1cmVzID8/XHJcbiAgICAgIHRoaXMuY2FudmFzXHJcbiAgICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAgIC5maWx0ZXIoKG9iaikgPT4gKG9iaiBhcyBhbnkpLmZpeHR1cmVJZClcclxuICAgICAgICAubWFwKChvYmopID0+ICh7XHJcbiAgICAgICAgICBpZDogKG9iaiBhcyBhbnkpLmZpeHR1cmVJZCxcclxuICAgICAgICAgIHg6IG9iai5sZWZ0LFxyXG4gICAgICAgICAgeTogb2JqLnRvcCxcclxuICAgICAgICAgIGFuZ2xlOiBvYmo/LmFuZ2xlID8/IDAsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgY29uc3QgcG9zTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiBmaXh0dXJlc0Zyb21DYW52YXMpIHtcclxuICAgICAgcG9zTWFwLnNldChmaXh0dXJlLmlkLCB7XHJcbiAgICAgICAgeDogdGhpcy5mcm9tUGl4ZWxzKGZpeHR1cmUueCwgXCJmdFwiKSxcclxuICAgICAgICB5OiB0aGlzLmZyb21QaXhlbHMoZml4dHVyZS55LCBcImZ0XCIpLFxyXG4gICAgICAgIGFuZ2xlOiBmaXh0dXJlLmFuZ2xlLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmZvckVhY2goKGNmOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgbGF0ZXN0Rml4dHVyZVBvcyA9IHBvc01hcC5nZXQoY2YuX2lkKTtcclxuICAgICAgaWYgKGxhdGVzdEZpeHR1cmVQb3MpIHtcclxuICAgICAgICBjZi5yZWxhdGl2ZVBvc2l0aW9uLnggPSBsYXRlc3RGaXh0dXJlUG9zLng7XHJcbiAgICAgICAgY2YucmVsYXRpdmVQb3NpdGlvbi55ID0gbGF0ZXN0Rml4dHVyZVBvcy55O1xyXG4gICAgICAgIGNmLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPSBsYXRlc3RGaXh0dXJlUG9zLmFuZ2xlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKHc6IGFueSkgPT4ge1xyXG4gICAgICB3Py5maXh0dXJlcz8uZm9yRWFjaCgod2Y6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdEZpeHR1cmVQb3MgPSBwb3NNYXAuZ2V0KHdmLl9pZCk7XHJcbiAgICAgICAgaWYgKGxhdGVzdEZpeHR1cmVQb3MpIHtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24ueCA9IGxhdGVzdEZpeHR1cmVQb3MueDtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24ueSA9IGxhdGVzdEZpeHR1cmVQb3MueTtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPSBsYXRlc3RGaXh0dXJlUG9zLmFuZ2xlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU90aGVyRWxlbWVudHNDb29yZGluYXRlcygpIHtcclxuICAgIGNvbnN0IG90aGVyc0Zyb21DYW52YXMgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoKG9iaikgPT4gKG9iaiBhcyBhbnkpLm9ialR5cGUgPT09IFwib3RoZXJzXCIpXHJcbiAgICAgIC5tYXAoKG9iaikgPT4gKHtcclxuICAgICAgICBpZDogKG9iaiBhcyBhbnkpLmRhdGE/Ll9pZCxcclxuICAgICAgICBsYWJlbDogKG9iaiBhcyBhbnkpLmRhdGE/LmZpeHR1cmVOYW1lLFxyXG4gICAgICAgIHg6IG9iai5sZWZ0LFxyXG4gICAgICAgIHk6IG9iai50b3AsXHJcbiAgICAgICAgYW5nbGU6IG9iaj8uYW5nbGUgPz8gMCxcclxuICAgICAgICB3aWR0aDogdGhpcy5mcm9tUGl4ZWxzKG9iai5nZXRTY2FsZWRXaWR0aCgpIC0gMiwgXCJmdFwiKSxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkSGVpZ2h0KCkgLSAyLCBcImZ0XCIpLFxyXG4gICAgICB9KSk7XHJcblxyXG4gICAgY29uc3QgcG9zTWFwID0gbmV3IE1hcDxcclxuICAgICAgc3RyaW5nLFxyXG4gICAgICB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyBhbmdsZTogbnVtYmVyOyBoOiBudW1iZXI7IHc6IG51bWJlciB9XHJcbiAgICA+KCk7XHJcbiAgICBmb3IgKGNvbnN0IG90aGVyIG9mIG90aGVyc0Zyb21DYW52YXMpIHtcclxuICAgICAgaWYgKG90aGVyLmlkKSB7XHJcbiAgICAgICAgcG9zTWFwLnNldChvdGhlci5pZCwge1xyXG4gICAgICAgICAgeDogdGhpcy5mcm9tUGl4ZWxzKG90aGVyLngsIFwiZnRcIiksXHJcbiAgICAgICAgICB5OiB0aGlzLmZyb21QaXhlbHMob3RoZXIueSwgXCJmdFwiKSxcclxuICAgICAgICAgIGFuZ2xlOiBvdGhlci5hbmdsZSxcclxuICAgICAgICAgIGg6IG90aGVyLmhlaWdodCxcclxuICAgICAgICAgIHc6IG90aGVyLndpZHRoLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cykpIHtcclxuICAgICAgdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cy5mb3JFYWNoKChlbDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0T3RoZXJzUG9zID0gcG9zTWFwLmdldChlbC5faWQpO1xyXG4gICAgICAgIGlmIChsYXRlc3RPdGhlcnNQb3MpIHtcclxuICAgICAgICAgIGVsLnJlbGF0aXZlUG9zaXRpb24ueCA9IGxhdGVzdE90aGVyc1Bvcy54O1xyXG4gICAgICAgICAgZWwucmVsYXRpdmVQb3NpdGlvbi55ID0gbGF0ZXN0T3RoZXJzUG9zLnk7XHJcbiAgICAgICAgICBlbC5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gbGF0ZXN0T3RoZXJzUG9zLmFuZ2xlO1xyXG4gICAgICAgICAgZWwuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSA9IGxhdGVzdE90aGVyc1Bvcy5oO1xyXG4gICAgICAgICAgZWwuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlID0gbGF0ZXN0T3RoZXJzUG9zLnc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKHc6IGFueSkgPT4ge1xyXG4gICAgICB3Py5vdGhlckVsZW1lbnRzPy5mb3JFYWNoKCh3ZjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0T3RoZXJzUG9zID0gcG9zTWFwLmdldCh3Zi5faWQpO1xyXG4gICAgICAgIGlmIChsYXRlc3RPdGhlcnNQb3MpIHtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24ueCA9IGxhdGVzdE90aGVyc1Bvcy54O1xyXG4gICAgICAgICAgd2YucmVsYXRpdmVQb3NpdGlvbi55ID0gbGF0ZXN0T3RoZXJzUG9zLnk7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gbGF0ZXN0T3RoZXJzUG9zLmFuZ2xlO1xyXG4gICAgICAgICAgd2YuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSA9IGxhdGVzdE90aGVyc1Bvcy5oO1xyXG4gICAgICAgICAgd2YuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlID0gbGF0ZXN0T3RoZXJzUG9zLnc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlV2FsbENvb3JkaW5hdGVzKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbHRlcigob2JqKSA9PiAob2JqIGFzIGFueSkub2JqVHlwZSA9PT0gXCJ3YWxsXCIpXHJcbiAgICAgIC5tYXAoKG9iaikgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB0b3A6IHRoaXMuZnJvbVBpeGVscyhvYmoudG9wLCBcImZ0XCIpLFxyXG4gICAgICAgICAgbGVmdDogdGhpcy5mcm9tUGl4ZWxzKG9iai5sZWZ0LCBcImZ0XCIpLFxyXG4gICAgICAgICAgd2lkdGg6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkV2lkdGgoKSAtIDAuMjcsIFwiZnRcIiksXHJcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkSGVpZ2h0KCkgLSAwLjI3LCBcImZ0XCIpLFxyXG4gICAgICAgICAgYW5nbGU6IG9iai5hbmdsZSxcclxuICAgICAgICAgIGVsZW1lbnREYXRhOiAob2JqIGFzIGFueSkuZGF0YSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBjb25zdCBwb3NNYXAgPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCB3YWxsIG9mIGRhdGEpIHtcclxuICAgICAgcG9zTWFwLnNldChcclxuICAgICAgICBgJHt3YWxsLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlfSR7d2FsbC5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyfWAsXHJcbiAgICAgICAgZGF0YS5maW5kKFxyXG4gICAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgICAgb2JqLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlID09PSB3YWxsLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlICYmXHJcbiAgICAgICAgICAgIG9iai5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyID09PSB3YWxsLmVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXJcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3OiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgd2FsbFBvcyA9IHBvc01hcC5nZXQoYCR7dy5lbGVtZW50VHlwZX0ke3cuZWxlbWVudE51bWJlcn1gKTtcclxuICAgICAgaWYgKHdhbGxQb3MpIHtcclxuICAgICAgICB3LnJlbGF0aXZlUG9zaXRpb24ueCA9IHdhbGxQb3MubGVmdDtcclxuICAgICAgICB3LnJlbGF0aXZlUG9zaXRpb24ueSA9IHdhbGxQb3MudG9wO1xyXG4gICAgICAgIHcuYW5nbGUgPSB3YWxsUG9zLmFuZ2xlO1xyXG4gICAgICAgIHcuZGlzdGFuY2UgPSB3YWxsUG9zLndpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUVudHJhbmNlQ29vcmRpbmF0ZXMoKSB7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKChvYmopID0+IChvYmogYXMgYW55KS5vYmpUeXBlID09PSBcImVudHJhbmNlXCIpXHJcbiAgICAgIC5tYXAoKG9iaikgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB0b3A6IHRoaXMuZnJvbVBpeGVscyhvYmoudG9wLCBcImZ0XCIpLFxyXG4gICAgICAgICAgbGVmdDogdGhpcy5mcm9tUGl4ZWxzKG9iai5sZWZ0LCBcImZ0XCIpLFxyXG4gICAgICAgICAgd2lkdGg6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkV2lkdGgoKSwgXCJmdFwiKSxcclxuICAgICAgICAgIGFuZ2xlOiBvYmouYW5nbGUsXHJcbiAgICAgICAgICBlbGVtZW50RGF0YTogKG9iaiBhcyBhbnkpLmRhdGEsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgY29uc3QgcG9zTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZW50cmFuY2Ugb2YgZGF0YSkge1xyXG4gICAgICBwb3NNYXAuc2V0KFxyXG4gICAgICAgIGAke2VudHJhbmNlLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlfSR7ZW50cmFuY2UuZWxlbWVudERhdGEuZWxlbWVudE51bWJlcn1gLFxyXG4gICAgICAgIGRhdGEuZmluZChcclxuICAgICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICAgIG9iai5lbGVtZW50RGF0YS5lbGVtZW50VHlwZSA9PT0gZW50cmFuY2UuZWxlbWVudERhdGEuZWxlbWVudFR5cGUgJiZcclxuICAgICAgICAgICAgb2JqLmVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXIgPT09IGVudHJhbmNlLmVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXJcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgZW50cmFuY2VQb3MgPSBwb3NNYXAuZ2V0KGAke3cuZWxlbWVudFR5cGV9JHt3LmVsZW1lbnROdW1iZXJ9YCk7XHJcbiAgICAgIGlmIChlbnRyYW5jZVBvcykge1xyXG4gICAgICAgIHcucmVsYXRpdmVQb3NpdGlvbi54ID0gZW50cmFuY2VQb3MubGVmdDtcclxuICAgICAgICB3LnJlbGF0aXZlUG9zaXRpb24ueSA9IGVudHJhbmNlUG9zLnRvcDtcclxuICAgICAgICB3LmFuZ2xlID0gZW50cmFuY2VQb3MuYW5nbGU7XHJcbiAgICAgICAgdy5kaXN0YW5jZSA9IGVudHJhbmNlUG9zLndpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUxheW91dChlZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoZWRpdE1vZGUpIHtcclxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jb25maXJtRWRpdCgpKSkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRQdWJsaXNoID0gdGhpcy50YXNrSW5mby5kaXNhYmxlZDtcclxuICAgICAgICB0aGlzLmxheW91dEZvcm0uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnRhc2tTdHlsZS5maXh0dXJlLmNsYXNzID09IFwicmV2aWV3UGVuZGluZ1wiKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFB1Ymxpc2ggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGVsZW1lbnQuZml4dHVyZXMgPSBlbGVtZW50LmZpeHR1cmVzLmZpbHRlcihcclxuICAgICAgICAoZml4dHVyZTogYW55KSA9PiAhZml4dHVyZT8uZ2hvc3QgJiYgZml4dHVyZS5maXh0dXJlTmFtZSAhPT0gXCJzcGFjZVwiXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlXHJcbiAgICAgIC5maWx0ZXIoKGZpeHR1cmU6IGFueSkgPT4gIWZpeHR1cmU/Lmdob3N0KVxyXG4gICAgICAubWFwKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB7IGFzc29jaWF0ZWRFbGVtZW50VHlwZSwgYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIsIC4uLnJlc3QgfSA9XHJcbiAgICAgICAgICBmaXh0dXJlO1xyXG4gICAgICAgIHJldHVybiByZXN0O1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMucmVvcmRlckZpeHR1cmUodGhpcy5mbG9vckRhdGEpO1xyXG5cclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgZGF0YTogdGhpcy5mbG9vckRhdGEsXHJcbiAgICAgIGVkaXRNb2RlOiBlZGl0TW9kZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZVN0b3JlUGxhbm8ocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgICAgIHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyh0aGlzLnBsYW5vRGF0YS5faWQpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gdXBkYXRlIGxheW91dFwiKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXNzaWduVGFzaygpIHtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgcmVkbzogZmFsc2UsXHJcbiAgICAgIGNoZWNrTGlzdE5hbWU6IFwiXCIsXHJcbiAgICAgIHN0b3JlOiB0aGlzLnBsYW5vRGF0YS5zdG9yZU5hbWUsXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLnBsYW5vRGF0YS5jbGllbnRJZCxcclxuICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJsYXlvdXRcIikge1xyXG4gICAgICAvLyB0aGlzLnVwZGF0ZUxheW91dCgpXHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiTGF5b3V0IFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwibGF5b3V0LXJlZG9cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkxheW91dCBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gdHJ1ZTtcclxuICAgICAgcGF5bG9hZC50YXNrSWQgPVxyXG4gICAgICAgIHRoaXMuc3RvcmVGZWVkYmFjay5sYXlvdXREYXRhW1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUZlZWRiYWNrLmxheW91dERhdGEubGVuZ3RoIC0gMVxyXG4gICAgICAgIF0udGFza0lkO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJGaXh0dXJlIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwiZml4dHVyZS1yZWRvXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJGaXh0dXJlIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSB0cnVlO1xyXG4gICAgICBwYXlsb2FkLnRhc2tJZCA9XHJcbiAgICAgICAgdGhpcy5zdG9yZUZlZWRiYWNrLmZpeHR1cmVEYXRhW1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUZlZWRiYWNrLmZpeHR1cmVEYXRhLmxlbmd0aCAtIDFcclxuICAgICAgICBdLnRhc2tJZDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwidm1cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIlZNIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwidm0tcmVkb1wiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiVk0gVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IHRydWU7XHJcbiAgICAgIHBheWxvYWQudGFza0lkID1cclxuICAgICAgICB0aGlzLnN0b3JlRmVlZGJhY2suVm1EYXRhW3RoaXMuc3RvcmVGZWVkYmFjay5WbURhdGEubGVuZ3RoIC0gMV0udGFza0lkO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFB1Ymxpc2h0YXNrUG9wdXBDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgc2Nyb2xsYWJsZTogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgIHdpbmRvd0NsYXNzOiBcImN1c3RvbS1oZWlnaHQtbW9kYWxcIiwgLy8gPC0tIEFkZCBhIGN1c3RvbSBjbGFzcyBoZXJlXHJcbiAgICB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0aGlzLnB1Ymxpc2hpbmdTdGF0ZTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmlucHV0RGF0YSA9IHBheWxvYWQ7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInN1Ym1pdFwiKSB7XHJcbiAgICAgICAgbGV0IHRhc2tUeXBlID0gdGhpcy5wdWJsaXNoaW5nU3RhdGU7XHJcbiAgICAgICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcInZtLXJlZG9cIikge1xyXG4gICAgICAgICAgdGFza1R5cGUgPSBcInZtXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlLXJlZG9cIikge1xyXG4gICAgICAgICAgdGFza1R5cGUgPSBcImZpeHR1cmVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImxheW91dC1yZWRvXCIpIHtcclxuICAgICAgICAgIHRhc2tUeXBlID0gXCJsYXlvdXRcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC5jb21tZW50cyAmJiByZXN1bHQuY29tbWVudHMgIT0gXCJcIikge1xyXG4gICAgICAgICAgbGV0IGNvbW1lbnRQYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBmbG9vcklkOiB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgICAgICAgIHBsYW5vSWQ6IHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICAgICAgICAgIHRhc2tUeXBlOiB0YXNrVHlwZSxcclxuICAgICAgICAgICAgY29tbWVudDogcmVzdWx0LmNvbW1lbnRzLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVHbG9iYWxDb21tZW50KGNvbW1lbnRQYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHt9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5jcmVhdGVUYXNrKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMudGFza0RldGFpbHModGhpcy5mbG9vckRhdGEucGxhbm9JZCwgdGhpcy5mbG9vckRhdGEuX2lkKTtcclxuICAgICAgICAgICAgICB0aGlzLmdldFN0b3JlRmVlZGJhY2soXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgICAgICAgICAgICAge31cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChyZXM/LmRhdGE/Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBwdWJsaXNoIHRhc2tcIik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tFZGl0KCkge1xyXG4gICAgaWYgKHRoaXMudGFza1N0eWxlLmZpeHR1cmUubmFtZSAhPT0gXCJBcHByb3ZlZFwiKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJyaWdodFwiLCB0cnVlKTtcclxuICAgICAgdGhpcy50b2dnbGVQYW5lbChcImxlZnRcIiwgZmFsc2UpO1xyXG5cclxuICAgICAgdGhpcy5kaXNhYmxlZFB1Ymxpc2ggPSB0cnVlO1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgdGhpcy5sYXlvdXRGb3JtLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIHRoaXMucmVuZGVyRmxvb3IoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXHJcbiAgICAgICAgYG1hbmFnZS9wbGFub2dyYW0vbWFuYWdlLXJvbGxvdXQ/cGxhbm9JZD0ke3RoaXMuZmxvb3JEYXRhLnBsYW5vSWR9JmZsb29ySWQ9JHt0aGlzLmZsb29yRGF0YS5faWR9YFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdGFza0RldGFpbHMocGxhbm9JZDogYW55LCBmbG9vcklkOiBhbnkpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMudGFza0luZm8gPSB7fTtcclxuICAgICAgdGhpcy50YXNrU3R5bGUgPSB7XHJcbiAgICAgICAgbGF5b3V0OiB7IG5hbWU6IFwiQXBwcm92ZWRcIiwgY2xhc3M6IFwiY29tcGxldGVkXCIgfSxcclxuICAgICAgICBmaXh0dXJlOiB7IG5hbWU6IFwiWWV0IFRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH0sXHJcbiAgICAgICAgdm06IHsgbmFtZTogXCJZZXQgVG8gQXNzaWduXCIsIGNsYXNzOiBcInlldFRvQXNzaWduXCIgfSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldFRhc2tJbmZvKHsgcGxhbm9JZCwgZmxvb3JJZCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFB1Ymxpc2ggPSByZXM/LmRhdGE/LmRpc2FibGVkIHx8IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnRhc2tJbmZvID0gcmVzPy5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAvLyBpZiAoZWxlLnR5cGUgPT0gXCJsYXlvdXRcIikge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMudGFza1N0eWxlLmxheW91dCA9IHRoaXMuZ2V0U3RhdHVzKFwibGF5b3V0XCIpO1xyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICBpZiAoZWxlLnR5cGUgPT0gXCJmaXh0dXJlXCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGFza1N0eWxlLmZpeHR1cmUgPSB0aGlzLmdldFN0YXR1cyhcImZpeHR1cmVcIik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChlbGUudHlwZSA9PSBcImZpeHR1cmVcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrU3R5bGUudm0gPSB0aGlzLnRhc2tTdHlsZS5maXh0dXJlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlUHVibGlzaGluZ1N0YXRlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gZ2V0IHRhc2sgZGV0YWlsc1wiKTtcclxuICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0dXModHlwZTogYW55KSB7XHJcbiAgICBsZXQgZGF0YSA9IHRoaXMudGFza0luZm8/LnRhc2tEZXRhaWxzPy5maW5kKChlbGU6IGFueSkgPT4gZWxlLnR5cGUgPT0gdHlwZSk7XHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZGF0YS5zdGF0dXMgPT0gXCJzdWJtaXRcIiAmJlxyXG4gICAgICAgIChkYXRhLmZlZWRiYWNrU3RhdHVzID09IFwiY29tcGxldGVcIiB8fCAhZGF0YT8uZmVlZGJhY2tTdGF0dXMpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB7IG5hbWU6IFwiQXBwcm92ZWRcIiwgY2xhc3M6IFwiY29tcGxldGVkXCIgfTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLnN0YXR1cyA9PSBcInN1Ym1pdFwiICYmIGRhdGEuZmVlZGJhY2tTdGF0dXMgPT0gXCJwZW5kaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4geyBuYW1lOiBcIlJldmlldyBQZW5kaW5nXCIsIGNsYXNzOiBcInJldmlld1BlbmRpbmdcIiB9O1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEuc3RhdHVzID09IFwic3VibWl0XCIgJiYgZGF0YS5mZWVkYmFja1N0YXR1cyA9PSBcImRpc2FncmVlXCIpIHtcclxuICAgICAgICByZXR1cm4geyBuYW1lOiBcIllldCB0byBBc3NpZ25cIiwgY2xhc3M6IFwieWV0VG9Bc3NpZ25cIiB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChkYXRhLnJlZG9TdGF0dXMgJiYgIWRhdGEuYnJlYWNoKSB7XHJcbiAgICAgICAgICByZXR1cm4geyBuYW1lOiBcIlJlZG9cIiwgY2xhc3M6IFwidGFza0Fzc2lnbmVkXCIgfTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEuYnJlYWNoKSB7XHJcbiAgICAgICAgICByZXR1cm4geyBuYW1lOiBcIkZsYWdnZWRcIiwgY2xhc3M6IFwiZmxhZ2dlZFwiIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IG5hbWU6IFwiVGFzayBBc3NpZ25lZFwiLCBjbGFzczogXCJ0YXNrQXNzaWduZWRcIiB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBuYW1lOiBcIllldCB0byBBc3NpZ25cIiwgY2xhc3M6IFwieWV0VG9Bc3NpZ25cIiB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0RWxlbWVudE51bWJlcihncm91cDogYW55KTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gZ3JvdXAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWUgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIGhpZ2hsaWdodEZpeHR1cmUoZ3JvdXA6IGFueSwgYmxpbms6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5lbmFibGVkKSByZXR1cm47XHJcbiAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodCgpO1xyXG4gICAgdGhpcy5jYW5jZWxIaWdobGlnaHRCbGluayA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlciA9IGdyb3VwLmdldENlbnRlclBvaW50KCk7XHJcblxyXG4gICAgY29uc3QgcmVhbFdpZHRoID0gZ3JvdXAud2lkdGghICogZ3JvdXAuc2NhbGVYITtcclxuICAgIGNvbnN0IHJlYWxIZWlnaHQgPSBncm91cC5oZWlnaHQhICogZ3JvdXAuc2NhbGVZITtcclxuXHJcbiAgICBjb25zdCByZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogY2VudGVyLngsXHJcbiAgICAgIHRvcDogY2VudGVyLnksXHJcbiAgICAgIHdpZHRoOiByZWFsV2lkdGggKyA4LCAvLyBjb25zaXN0ZW50IHBhZGRpbmdcclxuICAgICAgaGVpZ2h0OiByZWFsSGVpZ2h0ICsgOCxcclxuICAgICAgcng6IDUsXHJcbiAgICAgIHJ5OiA1LFxyXG4gICAgICBzdHJva2U6IFwiIzAwYWFmZlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMyxcclxuICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIGFuZ2xlOiBncm91cC5hbmdsZSB8fCAwLFxyXG4gICAgICBvcGFjaXR5OiBibGluayA/IDAgOiAxLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuYWRkKHJlY3QpO1xyXG4gICAgdGhpcy5jYW52YXMubW92ZU9iamVjdFRvKHJlY3QsIHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5sZW5ndGggLSAxKTtcclxuICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuXHJcbiAgICB0aGlzLmFjdGl2ZUhpZ2hsaWdodCA9IHJlY3Q7XHJcblxyXG4gICAgLy8gLS0tIE5vIGJsaW5raW5nIG5lZWRlZCAtLS1cclxuICAgIGlmICghYmxpbmspIHJldHVybjtcclxuXHJcbiAgICBsZXQgY3ljbGVzID0gMDtcclxuXHJcbiAgICBjb25zdCBibGlua09uY2UgPSAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlY3QuYW5pbWF0ZShcclxuICAgICAgICB7IG9wYWNpdHk6IDEgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgb25DaGFuZ2U6ICgpID0+IHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKSxcclxuICAgICAgICAgIG9uQ29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmspIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVjdC5hbmltYXRlKFxyXG4gICAgICAgICAgICAgIHsgb3BhY2l0eTogMCB9LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogKCkgPT4gdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpLFxyXG4gICAgICAgICAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYW5jZWxIaWdobGlnaHRCbGluaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICBjeWNsZXMrKztcclxuICAgICAgICAgICAgICAgICAgaWYgKGN5Y2xlcyA8IDIwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmxpbmtPbmNlKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZWN0LnNldCh7IG9wYWNpdHk6IDEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBibGlua09uY2UoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUhpZ2hsaWdodCgpIHtcclxuICAgIHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmsgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlSGlnaGxpZ2h0KSB7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlbW92ZSh0aGlzLmFjdGl2ZUhpZ2hsaWdodCk7XHJcbiAgICAgIHRoaXMuYWN0aXZlSGlnaGxpZ2h0ID0gbnVsbDtcclxuICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAga2VlcEhpZ2hsaWdodE9uVG9wID0gKCkgPT4ge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZUhpZ2hsaWdodCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgb2JqcyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIHRoaXMuY2FudmFzLm1vdmVPYmplY3RUbyh0aGlzLmFjdGl2ZUhpZ2hsaWdodCwgb2Jqcy5sZW5ndGggLSAxKTtcclxuICB9O1xyXG5cclxuICBvbkNoYW5nZUZpeHR1cmVPbkZlZWRiYWNrUGFuZWwoXHJcbiAgICB7XHJcbiAgICAgIGN1cnJlbnRGaXh0dXJlLFxyXG4gICAgICBhY3Rpb24sXHJcbiAgICB9OiB7XHJcbiAgICAgIGN1cnJlbnRGaXh0dXJlPzogc3RyaW5nO1xyXG4gICAgICBhY3Rpb24/OiBcIm5leHRcIiB8IFwicHJldmlvdXNcIjtcclxuICAgIH0sXHJcbiAgICBjb2xsYXBzZVRhc2tJbmZvOiBib29sZWFuID0gZmFsc2VcclxuICApIHtcclxuICAgIGxldCBpbmRleFRvU2VsZWN0ID0gY3VycmVudEZpeHR1cmVcclxuICAgICAgPyB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMuZmluZEluZGV4KChmOiBhbnkpID0+IGYuX2lkID09PSBjdXJyZW50Rml4dHVyZSlcclxuICAgICAgOiAwO1xyXG5cclxuICAgIGlmIChhY3Rpb24gPT09IFwibmV4dFwiKSB7XHJcbiAgICAgIGlmIChpbmRleFRvU2VsZWN0ID09IHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgaW5kZXhUb1NlbGVjdCA9IDA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5kZXhUb1NlbGVjdCsrO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJwcmV2aW91c1wiKSB7XHJcbiAgICAgIGlmIChpbmRleFRvU2VsZWN0ID09IDApIHtcclxuICAgICAgICBpbmRleFRvU2VsZWN0ID0gdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLmxlbmd0aCAtIDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5kZXhUb1NlbGVjdC0tO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFjdXJyZW50Rml4dHVyZSAmJiAhYWN0aW9uKSB7XHJcbiAgICAgIGluZGV4VG9TZWxlY3QgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpeHR1cmVJZFRvU2VsZWN0ID0gdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzW2luZGV4VG9TZWxlY3RdPy5faWQ7XHJcblxyXG4gICAgY29uc3QgYWN0aW9uRml4dHVyZSA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbmQoXHJcbiAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgb2JqLm9ialR5cGUgPT09IFwiZml4dHVyZVwiICYmIG9iai5maXh0dXJlSWQgPT09IGZpeHR1cmVJZFRvU2VsZWN0XHJcbiAgICAgICkgYXMgZmFicmljLkdyb3VwIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmICghYWN0aW9uRml4dHVyZSkgcmV0dXJuO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlc2l6ZUNhbnZhcygpO1xyXG4gICAgICB0aGlzLmZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQoKTtcclxuICAgIH0sIDMwMCk7XHJcblxyXG4gICAgdGhpcy5oaWdobGlnaHRGaXh0dXJlKGFjdGlvbkZpeHR1cmUpO1xyXG4gICAgdGhpcy5zZWxlY3RGaXh0dXJlT25DYW52YXNDbGljayhhY3Rpb25GaXh0dXJlLCBjb2xsYXBzZVRhc2tJbmZvKTtcclxuICB9XHJcblxyXG4gIHJldm9rZVRhc2soKSB7XHJcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIHJlZG86IGZhbHNlLFxyXG4gICAgICBjaGVja0xpc3ROYW1lOiBcIlwiLFxyXG4gICAgICBzdG9yZTogdGhpcy5wbGFub0RhdGEuc3RvcmVOYW1lLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5wbGFub0RhdGEuY2xpZW50SWQsXHJcbiAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgcGxhbm9JZDogdGhpcy5mbG9vckRhdGEucGxhbm9JZCxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImxheW91dFwiKSB7XHJcbiAgICAgIHBheWxvYWQudHlwZSA9IFwibGF5b3V0XCI7XHJcbiAgICAgIC8vIHRoaXMudXBkYXRlTGF5b3V0KClcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJMYXlvdXQgVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJsYXlvdXQtcmVkb1wiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiTGF5b3V0IFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnR5cGUgPSBcImxheW91dFwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJGaXh0dXJlIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnR5cGUgPSBcImZpeHR1cmVcIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImZpeHR1cmUtcmVkb1wiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiRml4dHVyZSBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC50eXBlID0gXCJmaXh0dXJlXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcInZtXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJWTSBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC50eXBlID0gXCJ2bVwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwidm0tcmVkb1wiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiVk0gVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQudHlwZSA9IFwidm1cIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHBheWxvYWQudGFza0lkID0gdGhpcy50YXNrSW5mbz8udGFza0RldGFpbHMuZmluZChcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUudHlwZSA9PSBwYXlsb2FkLnR5cGVcclxuICAgICk/LnRhc2tJZDtcclxuXHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oU3RvcmVUYXNrUmV2b2tlQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICBzaXplOiBcIm1kXCIsXHJcbiAgICAgIHNjcm9sbGFibGU6IHRydWUsXHJcbiAgICAgIGJhY2tkcm9wOiBcInN0YXRpY1wiLFxyXG4gICAgICB3aW5kb3dDbGFzczogXCJjdXN0b20taGVpZ2h0LW1vZGFsXCIsIC8vIDwtLSBBZGQgYSBjdXN0b20gY2xhc3MgaGVyZVxyXG4gICAgfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50eXBlID0gdGhpcy5wdWJsaXNoaW5nU3RhdGU7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5pbnB1dERhdGEgPSBwYXlsb2FkO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJzdWJtaXRcIikge1xyXG4gICAgICAgIGxldCB0YXNrVHlwZSA9IHRoaXMucHVibGlzaGluZ1N0YXRlO1xyXG4gICAgICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJ2bS1yZWRvXCIpIHtcclxuICAgICAgICAgIHRhc2tUeXBlID0gXCJ2bVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwiZml4dHVyZS1yZWRvXCIpIHtcclxuICAgICAgICAgIHRhc2tUeXBlID0gXCJmaXh0dXJlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJsYXlvdXQtcmVkb1wiKSB7XHJcbiAgICAgICAgICB0YXNrVHlwZSA9IFwibGF5b3V0XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQuY29tbWVudHMgJiYgcmVzdWx0LmNvbW1lbnRzICE9IFwiXCIpIHtcclxuICAgICAgICAgIGxldCBjb21tZW50UGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgICAgICAgICBwbGFub0lkOiB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgICAgICAgICB0YXNrVHlwZTogdGFza1R5cGUsXHJcbiAgICAgICAgICAgIGNvbW1lbnQ6IHJlc3VsdC5jb21tZW50cyxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlR2xvYmFsQ29tbWVudChjb21tZW50UGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7fSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UucmV2b2tlVGFzayhwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICAgICB0aGlzLnRhc2tEZXRhaWxzKHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsIHRoaXMuZmxvb3JEYXRhLl9pZCk7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KHJlcz8ubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIHB1Ymxpc2ggdGFza1wiKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ29Ub1N0b3JlVG91clBhZ2UoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRQbGFub1N0b3JlVmlkZW9QYXJhbXMoe1xyXG4gICAgICAgICAgc3RvcmVJZDogdGhpcy5wbGFub0RhdGEuc3RvcmVJZCxcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHJlcz8uZGF0YSkge1xyXG4gICAgICAgIGxldCBwYXJhbXMgPSByZXM/LmRhdGE7XHJcbiAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoW1wiL21hbmFnZS90cmF4L2dhbGxlcnlcIl0sIHtcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBwYXJhbXMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKHVybFRyZWUpO1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vcGVuTm9WaWRlb0ZvdW5kTW9kYWwoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMub3Blbk5vVmlkZW9Gb3VuZE1vZGFsKCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBnb1RvU3RvcmVUb3VyUGFnZSBbRVJSXTpcIiwgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb3Blbk5vVmlkZW9Gb3VuZE1vZGFsKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLm5vU3RvcmVWaWRlb01vZGFsUmVmLCB7XHJcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIH0pLnJlc3VsdDtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7fVxyXG4gIH1cclxuXHJcbiAgZ29Ub1N0b3JlQ2FtZXJhUGFnZSgpIHtcclxuICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtcIi9tYW5hZ2Uvc3RvcmVzL2NhbWVyYXNcIl0sIHtcclxuICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICBzdG9yZUlkOiB0aGlzLnBsYW5vRGF0YS5zdG9yZUlkLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdXJsID0gdGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKHVybFRyZWUpO1xyXG4gICAgd2luZG93Lm9wZW4odXJsLCBcIl9ibGFua1wiKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBpZD1cIm1hbmFnZS1wbGFub1wiPlxyXG4gIDwhLS0gTG9hZGluZyBTdGF0ZSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiaXNQYWdlTG9hZGluZ1wiIGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG0tMFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyU2tlbGV0b25cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza2VsZXRvbkxvYWRlclwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNrZWxldG9uTG9hZGVyXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2tlbGV0b25Mb2FkZXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIENvbnRlbnQgLS0+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBpc1BhZ2VMb2FkaW5nIH1cIj5cclxuICAgIDwhLS0gSGVhZGVyIEFjY29yZGlvbiAtLT5cclxuICAgIDxkaXYgaWQ9XCJoZWFkZXJcIiBuZ2JBY2NvcmRpb24gI2FjY29yZGlvbj1cIm5nYkFjY29yZGlvblwiIGNsYXNzPVwibXktNFwiPlxyXG4gICAgICA8ZGl2IG5nYkFjY29yZGlvbkl0ZW09XCJkZXRhaWxzXCIgW2NvbGxhcHNlZF09XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uSGVhZGVyIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBweC02IHB5LTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxoMiBjbGFzcz1cInRpdGxlXCI+e3sgcGxhbm9EYXRhPy5zdG9yZU5hbWUgfX0gLSBQbGFubzwvaDI+XHJcbiAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0ICpuZ0lmPVwicGxhbm9EYXRhPy5mbG9vcnM/Lmxlbmd0aFwiIFtmb3JtQ29udHJvbF09XCJzZWxlY3RlZEZsb29ySWRcIiBbaWRGaWVsZF09XCInX2lkJ1wiXHJcbiAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInZmxvb3JOYW1lJ1wiIFtkYXRhXT1cInBsYW5vRGF0YS5mbG9vcnNcIj5cclxuICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzLWJ0blwiIChjbGljayk9XCJnb1RvU3RvcmVUb3VyUGFnZSgpXCI+XHJcbiAgICAgICAgICAgICAgVmlldyBzdG9yZSB0b3VyXHJcblxyXG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MDhfMTY0OTgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzMzQjVGRlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNSA0TDggNkw1IDhWNFpcIiBzdHJva2U9XCIjMzNCNUZGXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQwOF8xNjQ5OFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cy1idG5cIiAoY2xpY2spPVwiZ29Ub1N0b3JlQ2FtZXJhUGFnZSgpXCI+XHJcbiAgICAgICAgICAgICAgVmlldyBjYW1lcmFcclxuXHJcbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQyMl8zNjMyMSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTkgNi41VjkuNUM5IDkuNzY1MjIgOC44OTQ2NCAxMC4wMTk2IDguNzA3MTEgMTAuMjA3MUM4LjUxOTU3IDEwLjM5NDYgOC4yNjUyMiAxMC41IDggMTAuNUgyLjVDMi4yMzQ3OCAxMC41IDEuOTgwNDMgMTAuMzk0NiAxLjc5Mjg5IDEwLjIwNzFDMS42MDUzNiAxMC4wMTk2IDEuNSA5Ljc2NTIyIDEuNSA5LjVWNEMxLjUgMy43MzQ3OCAxLjYwNTM2IDMuNDgwNDMgMS43OTI4OSAzLjI5Mjg5QzEuOTgwNDMgMy4xMDUzNiAyLjIzNDc4IDMgMi41IDNINS41TTcuNSAxLjVIMTAuNU0xMC41IDEuNVY0LjVNMTAuNSAxLjVMNSA3XCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80MjJfMzYzMjFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTRcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFlZGl0Rml4dHVyZVwiIGNsYXNzPVwidXBkYXRlQ2xhc3NcIj5MYXN0IFVwZGF0ZToge3tmbG9vckRhdGE/LnVwZGF0ZWRBdH19PC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC00IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gRWRpdCBGaXh0dXJlIE1vZGUgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaXh0dXJlXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB0ZXh0LW5vd3JhcFwiIChjbGljayk9XCJvbkZpeHR1cmVQYWdlQ2FuY2VsKClcIj5cclxuICAgICAgICAgICAgICAgICAgQ2FuY2VsXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCIgKGNsaWNrKT1cIm9uRml4dHVyZVNhdmUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICBTYXZlICYgQ2xvc2VcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIE5vcm1hbCBNb2RlIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZWRpdEZpeHR1cmUgJiYgIVsndGFza0Fzc2lnbmVkJ10uaW5jbHVkZXModGFza1N0eWxlLmZpeHR1cmUuY2xhc3MpXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFB1Ymxpc2ggQnV0dG9ucyAtLT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJwdWJsaXNoaW5nU3RhdGUgPT09ICdsYXlvdXQnXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgUHVibGlzaCBMYXlvdXQgVmVyaWZpY2F0aW9uXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJwdWJsaXNoaW5nU3RhdGUgPT09ICdsYXlvdXQtcmVkbydcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXNzaWduVGFzaygpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkUHVibGlzaFwiPlxyXG4gICAgICAgICAgICAgICAgICBQdWJsaXNoIExheW91dCBSZWRvXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJwdWJsaXNoaW5nU3RhdGUgPT09ICdmaXh0dXJlJ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhc3NpZ25UYXNrKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRQdWJsaXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgIFB1Ymxpc2ggRml4dHVyZSBWZXJpZmljYXRpb25cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PT0gJ2ZpeHR1cmUtcmVkbydcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXNzaWduVGFzaygpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkUHVibGlzaFwiPlxyXG4gICAgICAgICAgICAgICAgICBQdWJsaXNoIEZpeHR1cmUgUmVkb1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicHVibGlzaGluZ1N0YXRlID09PSAndm0nXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgUHVibGlzaCBWTSBWZXJpZmljYXRpb25cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PT0gJ3ZtLXJlZG8nXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgUHVibGlzaCBWTSBSZWRvXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBSZXZva2UgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInJldm9rZVRhc2soKVwiICpuZ0lmPVwiWyd0YXNrQXNzaWduZWQnXS5pbmNsdWRlcyh0YXNrU3R5bGUuZml4dHVyZS5jbGFzcykgJiYgIWVkaXRGaXh0dXJlXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1yZWQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm1lLTJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNjQwXzU1OTQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi42NjY2OSAxMC4wMDEzSDEzLjMzMzRNMTguMzMzNCAxMC4wMDEzQzE4LjMzMzQgMTQuNjAzNyAxNC42MDI0IDE4LjMzNDYgMTAgMTguMzM0NkM1LjM5NzY1IDE4LjMzNDYgMS42NjY2OSAxNC42MDM3IDEuNjY2NjkgMTAuMDAxM0MxLjY2NjY5IDUuMzk4OTMgNS4zOTc2NSAxLjY2Nzk3IDEwIDEuNjY3OTdDMTQuNjAyNCAxLjY2Nzk3IDE4LjMzMzQgNS4zOTg5MyAxOC4zMzM0IDEwLjAwMTNaXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNCNDIzMThcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF82NDBfNTU5NFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIFJldm9rZVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG5nYkFjY29yZGlvbkJ1dHRvbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgPGRpdiBpZD1cImhlYWRlclwiIGNsYXNzPVwicm93IG14LTAgZ2FwLTNcIj5cclxuICAgICAgICAgICAgICA8IS0tIFBsYW5vIENvbXBsZXRpb24gLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImN1cnNvcjogdW5zZXQ7XCIgY2xhc3M9XCJjb2wgZmlsdGVyLXRhYlwiPlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICBQbGFubyBDb21wbGV0aW9uICVcclxuICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiJSBvZiBvdmVyYWxsIHBsYW5vZ3JhbSBjb21wbGV0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xNTE3XzEyOTgwNSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOSAxMlY5TTkgNkg5LjAwNzVNMTYuNSA5QzE2LjUgMTMuMTQyMSAxMy4xNDIxIDE2LjUgOSAxNi41QzQuODU3ODYgMTYuNSAxLjUgMTMuMTQyMSAxLjUgOUMxLjUgNC44NTc4NiA0Ljg1Nzg2IDEuNSA5IDEuNUMxMy4xNDIxIDEuNSAxNi41IDQuODU3ODYgMTYuNSA5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNTE3XzEyOTgwNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCIgc3R5bGU9XCJoZWlnaHQ6IDRweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhclwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tJbmZvPy5wbGFub1Byb2dyZXNzIDw9IDUwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdiZy13YXJuaW5nJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0YXNrSW5mbz8ucGxhbm9Qcm9ncmVzcyA9PT0gNzVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2JnLXByaW1hcnknXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdiZy1zdWNjZXNzJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiByb2xlPVwicHJvZ3Jlc3NiYXJcIiBbc3R5bGVdPVwiJ3dpZHRoOicgKyB0YXNrSW5mbz8ucGxhbm9Qcm9ncmVzcyArICclJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwidGFza0luZm8/LnBsYW5vUHJvZ3Jlc3NcIiBhcmlhLXZhbHVlbWluPVwiMFwiIGFyaWEtdmFsdWVtYXg9XCIxMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+e3sgdGFza0luZm8/LnBsYW5vUHJvZ3Jlc3MgfX0lPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBMYXlvdXQgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImN1cnNvcjogdW5zZXQ7XCIgY2xhc3M9XCJjb2wgZmlsdGVyLXRhYlwiPlxyXG4gICAgICAgICAgICAgICAgPGgzPjxiPnt7IHN0b3JlTWV0cmljcy5mbG9vckNvdW50IH19PC9iPiBMYXlvdXQ8L2gzPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZGljYXRvciBtdC0yXCIgW25nQ2xhc3NdPVwidGFza1N0eWxlLmxheW91dC5jbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTJcIiBbaGlkZGVuXT1cInRhc2tTdHlsZS5sYXlvdXQubmFtZSAhPT0gJ1JlZG8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQ5ODRfMjc1NjkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0wLjUgMi4wMDA3N1Y1LjAwMDc3TTAuNSA1LjAwMDc3SDMuNU0wLjUgNS4wMDA3N0wyLjgyIDIuODIwNzdDMy4zNTczNyAyLjI4MzEzIDQuMDIyMTkgMS44OTAzNyA0Ljc1MjQgMS42NzkxNkM1LjQ4MjYyIDEuNDY3OTQgNi4yNTQ0NSAxLjQ0NTE1IDYuOTk1ODYgMS42MTI5QzcuNzM3MjcgMS43ODA2NSA4LjQyNDEgMi4xMzM0OSA4Ljk5MjI3IDIuNjM4NDhDOS41NjA0MyAzLjE0MzQ3IDkuOTkxNDIgMy43ODQxNiAxMC4yNDUgNC41MDA3N00xMS41IDEwLjAwMDhWNy4wMDA3N00xMS41IDcuMDAwNzdIOC41TTExLjUgNy4wMDA3N0w5LjE4IDkuMTgwNzdDOC42NDI2MyA5LjcxODQxIDcuOTc3ODEgMTAuMTExMiA3LjI0NzYgMTAuMzIyNEM2LjUxNzM4IDEwLjUzMzYgNS43NDU1NSAxMC41NTY0IDUuMDA0MTQgMTAuMzg4NkM0LjI2MjczIDEwLjIyMDkgMy41NzU5IDkuODY4MDUgMy4wMDc3MyA5LjM2MzA2QzIuNDM5NTcgOC44NTgwNyAyLjAwODU4IDguMjE3MzggMS43NTUgNy41MDA3N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzdBNUFGOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDk4NF8yNzU2OVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCJ0YXNrU3R5bGUubGF5b3V0Lm5hbWUgIT09ICdGbGFnZ2VkJ1wiIGNsYXNzPVwibWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yIDcuNUMyIDcuNSAyLjUgNyA0IDdDNS41IDcgNi41IDggOCA4QzkuNSA4IDEwIDcuNSAxMCA3LjVWMS41QzEwIDEuNSA5LjUgMiA4IDJDNi41IDIgNS41IDEgNCAxQzIuNSAxIDIgMS41IDIgMS41VjcuNVpNMiA3LjVWMTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7eyB0YXNrU3R5bGUubGF5b3V0Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEZpeHR1cmVzIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjdXJzb3I6IHVuc2V0O1wiIGNsYXNzPVwiY29sIGZpbHRlci10YWJcIj5cclxuICAgICAgICAgICAgICAgIDxoMz48Yj57eyBzdG9yZU1ldHJpY3MuZml4dHVyZUNvdW50IH19PC9iPiBGaXh0dXJlczwvaDM+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5kaWNhdG9yIG10LTJcIiBbbmdDbGFzc109XCJ0YXNrU3R5bGUuZml4dHVyZS5jbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTJcIiBbaGlkZGVuXT1cInRhc2tTdHlsZS5maXh0dXJlLm5hbWUgIT09ICdSZWRvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80OTg0XzI3NTY5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMC41IDIuMDAwNzdWNS4wMDA3N00wLjUgNS4wMDA3N0gzLjVNMC41IDUuMDAwNzdMMi44MiAyLjgyMDc3QzMuMzU3MzcgMi4yODMxMyA0LjAyMjE5IDEuODkwMzcgNC43NTI0IDEuNjc5MTZDNS40ODI2MiAxLjQ2Nzk0IDYuMjU0NDUgMS40NDUxNSA2Ljk5NTg2IDEuNjEyOUM3LjczNzI3IDEuNzgwNjUgOC40MjQxIDIuMTMzNDkgOC45OTIyNyAyLjYzODQ4QzkuNTYwNDMgMy4xNDM0NyA5Ljk5MTQyIDMuNzg0MTYgMTAuMjQ1IDQuNTAwNzdNMTEuNSAxMC4wMDA4VjcuMDAwNzdNMTEuNSA3LjAwMDc3SDguNU0xMS41IDcuMDAwNzdMOS4xOCA5LjE4MDc3QzguNjQyNjMgOS43MTg0MSA3Ljk3NzgxIDEwLjExMTIgNy4yNDc2IDEwLjMyMjRDNi41MTczOCAxMC41MzM2IDUuNzQ1NTUgMTAuNTU2NCA1LjAwNDE0IDEwLjM4ODZDNC4yNjI3MyAxMC4yMjA5IDMuNTc1OSA5Ljg2ODA1IDMuMDA3NzMgOS4zNjMwNkMyLjQzOTU3IDguODU4MDcgMi4wMDg1OCA4LjIxNzM4IDEuNzU1IDcuNTAwNzdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM3QTVBRjhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQ5ODRfMjc1NjlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwidGFza1N0eWxlLmZpeHR1cmUubmFtZSAhPT0gJ0ZsYWdnZWQnXCIgY2xhc3M9XCJtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIgNy41QzIgNy41IDIuNSA3IDQgN0M1LjUgNyA2LjUgOCA4IDhDOS41IDggMTAgNy41IDEwIDcuNVYxLjVDMTAgMS41IDkuNSAyIDggMkM2LjUgMiA1LjUgMSA0IDFDMi41IDEgMiAxLjUgMiAxLjVWNy41Wk0yIDcuNVYxMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNCNDIzMThcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHRhc2tTdHlsZS5maXh0dXJlLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFZpc3VhbCBNZXJjaGFuZGlzZSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY3Vyc29yOiB1bnNldDtcIiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgICAgICAgICAgICA8aDM+PGI+e3sgc3RvcmVNZXRyaWNzLnZtQ291bnQgfX08L2I+IFZpc3VhbCBNZXJjaGFuZGlzZTwvaDM+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5kaWNhdG9yIG10LTJcIiBbbmdDbGFzc109XCJ0YXNrU3R5bGUudm0uY2xhc3NcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yXCIgW2hpZGRlbl09XCJ0YXNrU3R5bGUudm0ubmFtZSAhPT0gJ1JlZG8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQ5ODRfMjc1NjkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0wLjUgMi4wMDA3N1Y1LjAwMDc3TTAuNSA1LjAwMDc3SDMuNU0wLjUgNS4wMDA3N0wyLjgyIDIuODIwNzdDMy4zNTczNyAyLjI4MzEzIDQuMDIyMTkgMS44OTAzNyA0Ljc1MjQgMS42NzkxNkM1LjQ4MjYyIDEuNDY3OTQgNi4yNTQ0NSAxLjQ0NTE1IDYuOTk1ODYgMS42MTI5QzcuNzM3MjcgMS43ODA2NSA4LjQyNDEgMi4xMzM0OSA4Ljk5MjI3IDIuNjM4NDhDOS41NjA0MyAzLjE0MzQ3IDkuOTkxNDIgMy43ODQxNiAxMC4yNDUgNC41MDA3N00xMS41IDEwLjAwMDhWNy4wMDA3N00xMS41IDcuMDAwNzdIOC41TTExLjUgNy4wMDA3N0w5LjE4IDkuMTgwNzdDOC42NDI2MyA5LjcxODQxIDcuOTc3ODEgMTAuMTExMiA3LjI0NzYgMTAuMzIyNEM2LjUxNzM4IDEwLjUzMzYgNS43NDU1NSAxMC41NTY0IDUuMDA0MTQgMTAuMzg4NkM0LjI2MjczIDEwLjIyMDkgMy41NzU5IDkuODY4MDUgMy4wMDc3MyA5LjM2MzA2QzIuNDM5NTcgOC44NTgwNyAyLjAwODU4IDguMjE3MzggMS43NTUgNy41MDA3N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzdBNUFGOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDk4NF8yNzU2OVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCJ0YXNrU3R5bGUudm0ubmFtZSAhPT0gJ0ZsYWdnZWQnXCIgY2xhc3M9XCJtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIgNy41QzIgNy41IDIuNSA3IDQgN0M1LjUgNyA2LjUgOCA4IDhDOS41IDggMTAgNy41IDEwIDcuNVYxLjVDMTAgMS41IDkuNSAyIDggMkM2LjUgMiA1LjUgMSA0IDFDMi41IDEgMiAxLjUgMiAxLjVWNy41Wk0yIDcuNVYxMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNCNDIzMThcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHRhc2tTdHlsZS52bS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEJvZHkgLS0+XHJcbiAgICA8ZGl2IGlkPVwiYm9keVwiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDwhLS0gTGVmdCBDb2x1bW4gLS0+XHJcbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnY29sbGFwc2VkLWNvbCc6IGlzTGVmdFBhbmVsQ29sbGFwc2VkLCAnY29sLTMnOiAhaXNMZWZ0UGFuZWxDb2xsYXBzZWQsJ2Qtbm9uZSc6IGVkaXRGaXh0dXJlICB9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInMtY2FyZFwiPlxyXG4gICAgICAgICAgPGZvcm0gW25nQ2xhc3NdPVwieyAnZC1ub25lJzogaXNMZWZ0UGFuZWxDb2xsYXBzZWQgfVwiIFtmb3JtR3JvdXBdPVwibGF5b3V0Rm9ybVwiPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbiBhY2NvcmRpb249XCJOZ2JBY2NvcmRpb25cIj5cclxuICAgICAgICAgICAgICA8IS0tIFdhbGxzIFNlY3Rpb24gLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1XYWxscy5jb250cm9scy5sZW5ndGg7IGVsc2UgYWRkV2FsbEFjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtQXJyYXlOYW1lPVwid2FsbHNcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ2V0Rm9ybVdhbGxzLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09XCJpXCIgW25nYkFjY29yZGlvbkl0ZW1dPVwiaS50b1N0cmluZygpXCIgY2xhc3M9XCJtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1haW5oZWFkaW5nIHAtMFwiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yIHdhbGwtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ3JvdXAuZ2V0KFwiZWxlbWVudFR5cGVcIik/LnZhbHVlIHwgdGl0bGVjYXNlIH19IHt7IGdyb3VwLmdldChcImVsZW1lbnROdW1iZXJcIik/LnZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGxheW91dEZvcm0uZW5hYmxlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMVwiIG5nYlRvb2x0aXA9XCJSb3RhdGUgdGhpcyB3YWxsLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJvdGF0ZVdhbGwoZ2V0RWxlbWVudE51bWJlcihncm91cCkhKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTMuNzM3MzUgOC4yNTAxMUM0LjEyMTkzIDguMjQzNjIgNC40NDM3NyA4LjUyNzc2IDQuNDkzMzggOC44OTk5OEw0LjQ5OTkgOC45ODczNUw0LjUwMjYyIDkuMTU1MTZDNC41ODQzNCAxMS41NzQxIDYuNTcyNDMgMTMuNSA5IDEzLjVDOS4xNDAyMiAxMy41IDkuMjc5NTEgMTMuNDkzNiA5LjQxNzU2IDEzLjQ4MDlMOS4yMTk2NyAxMy4yODAzQzguOTI2NzggMTIuOTg3NCA4LjkyNjc4IDEyLjUxMjYgOS4yMTk2NyAxMi4yMTk3QzkuNTEyNTcgMTEuOTI2OCA5Ljk4NzQ0IDExLjkyNjggMTAuMjgwMyAxMi4yMTk3TDExLjc4MDMgMTMuNzE5N0MxMi4wNzMyIDE0LjAxMjYgMTIuMDczMiAxNC40ODc0IDExLjc4MDMgMTQuNzgwM0wxMC4yODAzIDE2LjI4MDNDOS45ODc0NCAxNi41NzMyIDkuNTEyNTcgMTYuNTczMiA5LjIxOTY3IDE2LjI4MDNDOC45MjY3OCAxNS45ODc0IDguOTI2NzggMTUuNTEyNiA5LjIxOTY3IDE1LjIxOTdMOS40NTgzNyAxNC45ODI3QzkuMzA2NDYgMTQuOTk0MiA5LjE1MzU5IDE1IDkgMTVDNS44MjY1MyAxNSAzLjIxNjY1IDEyLjUzMjEgMy4wMTI1IDkuMzgyODlMMy4wMDMxNSA5LjE5MzE0TDMuMDAwMTEgOS4wMTI2NUMyLjk5MzEyIDguNTk4NDkgMy4zMjMyIDguMjU3MDkgMy43MzczNSA4LjI1MDExWk04Ljc4MDMzIDEuNzE5NjdDOS4wNTA3IDEuOTkwMDMgOS4wNzE0OSAyLjQxNTQ2IDguODQyNzIgMi43MDk2N0w4Ljc4MDMzIDIuNzgwMzNMOC41NDE4NyAzLjAxNzI2QzguNjkzNzEgMy4wMDU3OCA4Ljg0NjUgMyA5IDNDMTIuMzEzNyAzIDE1IDUuNjg2MjkgMTUgOUMxNSA5LjQxNDIxIDE0LjY2NDIgOS43NSAxNC4yNSA5Ljc1QzEzLjgzNTggOS43NSAxMy41IDkuNDE0MjEgMTMuNSA5QzEzLjUgNi41MTQ3MiAxMS40ODUzIDQuNSA5IDQuNUM4Ljg1OTcgNC41IDguNzIwMzQgNC41MDY0IDguNTgyMjEgNC41MTkwOUw4Ljc4MDMzIDQuNzE5NjdDOS4wNzMyMyA1LjAxMjU2IDkuMDczMjMgNS40ODc0NCA4Ljc4MDMzIDUuNzgwMzNDOC41MDk5NyA2LjA1MDY5IDguMDg0NTUgNi4wNzE0OSA3Ljc5MDMzIDUuODQyNzJMNy43MTk2NyA1Ljc4MDMzTDYuMjE5NjcgNC4yODAzM0M1Ljk0OTMxIDQuMDA5OTcgNS45Mjg1MSAzLjU4NDU0IDYuMTU3MjggMy4yOTAzM0w2LjIxOTY3IDMuMjE5NjdMNy43MTk2NyAxLjcxOTY3QzguMDEyNTcgMS40MjY3OCA4LjQ4NzQ0IDEuNDI2NzggOC43ODAzMyAxLjcxOTY3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNDc1NDY3XCIgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjAuMDAwNjRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMVwiIG5nYlRvb2x0aXA9XCJJbnNlcnQgbmV3IHdhbGwgYmVsb3cuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkTmV3V2FsbChnZXRFbGVtZW50TnVtYmVyKGdyb3VwKSEpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzYyXzgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05IDkuNzVDMTEuMDcwNyA5Ljc1IDEyLjc1IDExLjQyOTMgMTIuNzUgMTMuNUMxMi43NSAxNS41NzA4IDExLjA3MDcgMTcuMjUgOSAxNy4yNUM2LjkyOTI1IDE3LjI1IDUuMjUgMTUuNTcwOCA1LjI1IDEzLjVDNS4yNSAxMS40MjkzIDYuOTI5MjUgOS43NSA5IDkuNzVaTTkuNzUgMTEuMjVIOC4yNVYxMi43NDkzTDYuNzUgMTIuNzVWMTQuMjVMOC4yNSAxNC4yNDkzVjE1Ljc1SDkuNzVWMTQuMjQ5M0wxMS4yNSAxNC4yNVYxMi43NUw5Ljc1IDEyLjc0OTNWMTEuMjVaTTE1IDIuMjVDMTUuNDE0IDIuMjUgMTUuNzUgMi41ODYgMTUuNzUgM1Y3LjVDMTUuNzUgNy45MTQgMTUuNDE0IDguMjUgMTUgOC4yNUgzQzIuNTg2IDguMjUgMi4yNSA3LjkxNCAyLjI1IDcuNVYzQzIuMjUgMi41ODYgMi41ODYgMi4yNSAzIDIuMjVIMTVaTTMuNzUgMy43NVY2Ljc1SDE0LjI1VjMuNzVIMy43NVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNDc1NDY3XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF82Ml84XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTFcIiBuZ2JUb29sdGlwPVwiUmVtb3ZlIHRoaXMgd2FsbCBhbmQgaXRzIGZpeHR1cmVzLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVdhbGwoZ2V0RWxlbWVudE51bWJlcihncm91cCkhKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF82M18yNSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwLjcwOTQgMS41QzExLjM1NTEgMS41IDExLjkyODMgMS45MTMxNCAxMi4xMzI0IDIuNTI1NjVMMTIuNTQwNiAzLjc1SDE1QzE1LjQxNDIgMy43NSAxNS43NSA0LjA4NTc5IDE1Ljc1IDQuNUMxNS43NSA0LjkxNDIgMTUuNDE0MiA1LjI0OTk5IDE1IDUuMjVMMTQuOTk4MSA1LjMwMzQ0TDE0LjM0NzYgMTQuNDEwM0MxNC4yNjM1IDE1LjU4NzggMTMuMjgzOCAxNi41IDEyLjEwMzQgMTYuNUg1Ljg5NjY4QzQuNzE2MjQgMTYuNSAzLjczNjUgMTUuNTg3OCAzLjY1MjQgMTQuNDEwM0wzLjAwMTkxIDUuMzAzNDRDMy4wMDA2MiA1LjI4NTUxIDIuOTk5OTggNS4yNjc2OSAyLjk5OTk3IDUuMjVDMi41ODU3NyA1LjI0OTk5IDIuMjUgNC45MTQyIDIuMjUgNC41QzIuMjUgNC4wODU3OSAyLjU4NTc5IDMuNzUgMyAzLjc1SDUuNDU5NDNMNS44Njc1NCAyLjUyNTY1QzYuMDcxNzIgMS45MTMxNCA2LjY0NDkzIDEuNSA3LjI5MDU3IDEuNUgxMC43MDk0Wk0xMy40OTgxIDUuMjVINC41MDE5MUw1LjE0ODU4IDE0LjMwMzRDNS4xNzY2MiAxNC42OTYgNS41MDMyIDE1IDUuODk2NjggMTVIMTIuMTAzNEMxMi40OTY4IDE1IDEyLjgyMzQgMTQuNjk2IDEyLjg1MTQgMTQuMzAzNEwxMy40OTgxIDUuMjVaTTcuNSA3LjVDNy44ODQ2NCA3LjUgOC4yMDE2MyA3Ljc4OTUyIDguMjQ0OTUgOC4xNjI1M0w4LjI1IDguMjVWMTJDOC4yNSAxMi40MTQyIDcuOTE0MjIgMTIuNzUgNy41IDEyLjc1QzcuMTE1MzcgMTIuNzUgNi43OTgzNyAxMi40NjA1IDYuNzU1MDUgMTIuMDg3NUw2Ljc1IDEyVjguMjVDNi43NSA3LjgzNTc4IDcuMDg1NzggNy41IDcuNSA3LjVaTTEwLjUgNy41QzEwLjkxNDIgNy41IDExLjI1IDcuODM1NzggMTEuMjUgOC4yNVYxMkMxMS4yNSAxMi40MTQyIDEwLjkxNDIgMTIuNzUgMTAuNSAxMi43NUMxMC4wODU4IDEyLjc1IDkuNzUgMTIuNDE0MiA5Ljc1IDEyVjguMjVDOS43NSA3LjgzNTc4IDEwLjA4NTggNy41IDEwLjUgNy41Wk0xMC43MDk0IDNINy4yOTA1N0w3LjA0MDU3IDMuNzVIMTAuOTU5NUwxMC43MDk0IDNaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0YzMkIyQlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNjNfMjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHkgY2xhc3M9XCJwcy0wIHBlLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWluLWhlaWdodDogNTBweFwiIGRuZERyb3B6b25lIChkbmREcm9wKT1cIm9uRHJvcCgkZXZlbnQsIGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRml4dHVyZXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRGb3JtRml4dHVyZXMoaSkuY29udHJvbHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwiZml4dHVyZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpeHR1cmUgb2YgZ2V0Rm9ybUZpeHR1cmVzKGkpLmNvbnRyb2xzOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZG5kRHJvcHpvbmUgKGRuZERyb3ApPVwib25Ecm9wKCRldmVudCwgaSwgailcIiBbZm9ybUdyb3VwTmFtZV09XCJqXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZG5kRHJhZ2dhYmxlXT1cInsgd2FsbEluZGV4OiBpLCBmaXh0dXJlSW5kZXg6IGogfVwiIFtkbmRFZmZlY3RBbGxvd2VkXT1cIidhbGwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdyBnLTAgbWItNVwiIFtkbmREaXNhYmxlRHJhZ0lmXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgZG5kRHJhZ0ltYWdlUmVmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInsgY3Vyc29yOiBsYXlvdXRGb3JtLmRpc2FibGVkID8gJ2RlZmF1bHQnIDogJ21vdmUnLCBvcGFjaXR5OiAnMC41JyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjI1cHhcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwibSA0LjQ5NjA5NCAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSA2IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIC02IDYgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDYgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gLTYgNiBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gNiAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSAwIDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImdyZXlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJmaXh0dXJlQ29uZmlnSWRcIiBbaWRGaWVsZF09XCInX2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lRmllbGRdPVwiJ25hbWUnXCIgW2RhdGFdPVwiZml4dHVyZVRlbXBsYXRlc1wiIFtsYWJlbF09XCInRml4dHVyZSAnICsgKGogKyAxKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdWJUZXh0RmllbGRdPVwiJ3N1YnRleHQnXCIgW3NlYXJjaF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1lbmQganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cInJlbW92ZUZpeHR1cmUoJ3dhbGwnLCBqLCBpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IG1hcmdpbi1ib3R0b206IDE4cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTAgMTBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAxTDEgOU0xIDFMOSA5XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImxpbmstYnRuXCIgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5ld0ZpeHR1cmUoJ3dhbGwnLCBpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGZpeHR1cmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIHN0eWxlPVwiYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjMDAwMDAwO1wiIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE90aGVyIEVsZW1lbnRzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0V2FsbE90aGVyRWxlbWVudHMoaSkuY29udHJvbHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwib3RoZXJFbGVtZW50c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZml4dHVyZSBvZiBnZXRXYWxsT3RoZXJFbGVtZW50cyhpKS5jb250cm9sczsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBOYW1lXT1cImpcIiBjbGFzcz1cInJvdyBnLTAgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPkVsZW1lbnQge3sgaiArIDEgfX08L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gYm91bmQgdG8gJ3R5cGUnIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cIm90aGVyRWxlbWVudExpc3RcIiBbaWRdPVwiJ2VsZW1lbnRMYWJlbCcgKyBqXCIgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2hvdyBjdXN0b20gdGV4dCBpbnB1dCBvbmx5IHdoZW4gJ090aGVycycgaXMgc2VsZWN0ZWQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCIoZml4dHVyZS5nZXQoJ3R5cGUnKT8udmFsdWUpID09PSAnT3RoZXJzJ1wiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbXQtMlwiIGZvcm1Db250cm9sTmFtZT1cImN1c3RvbU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGN1c3RvbSBlbGVtZW50IG5hbWVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtZW5kIGp1c3RpZnktY29udGVudC1jZW50ZXIgaC0xMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJyZW1vdmVPdGhlckVsZW1lbnQoJ3dhbGwnLCBqLCBpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IG1hcmdpbi1ib3R0b206IDE4cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTAgMTBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAxTDEgOU0xIDFMOSA5XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImxpbmstYnRuXCIgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5ld090aGVyRWxlbWVudHMoJ3dhbGwnLCBpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGVsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhZGRXYWxsQWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkTmV3V2FsbCgwKVwiIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSB3LTEwMCBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgSW5zZXJ0IG5ldyB3YWxsXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICA8aHIgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggZGFzaGVkICMwMDAwMDA7XCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBGbG9vciBTZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgW25nYkFjY29yZGlvbkl0ZW1dPVwiJ2Zsb29yJ1wiIGNsYXNzPVwibWItNVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtYWluaGVhZGluZyBwLTBcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yIHdhbGwtbGFiZWxcIj5GbG9vcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keSBjbGFzcz1cInBzLTAgcGUtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtaW4taGVpZ2h0OiA1MHB4XCIgZG5kRHJvcHpvbmUgKGRuZERyb3ApPVwib25Ecm9wKCRldmVudCwgJ2Zsb29yJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGbG9vciBGaXh0dXJlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1GbG9vckZpeHR1cmVzLmNvbnRyb2xzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cImZsb29yRml4dHVyZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpeHR1cmUgb2YgZ2V0Rm9ybUZsb29yRml4dHVyZXMuY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkbmREcm9wem9uZSAoZG5kRHJvcCk9XCJvbkRyb3AoJGV2ZW50LCAnZmxvb3InLCBqKVwiIFtmb3JtR3JvdXBOYW1lXT1cImpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkbmREcmFnZ2FibGVdPVwieyB3YWxsSW5kZXg6ICdmbG9vcicsIGZpeHR1cmVJbmRleDogaiB9XCIgW2RuZEVmZmVjdEFsbG93ZWRdPVwiJ2FsbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkbmREaXNhYmxlRHJhZ0lmXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIiBjbGFzcz1cInJvdyBnLTAgbWItNVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBkbmREcmFnSW1hZ2VSZWYgc3R5bGU9XCJjdXJzb3I6IG1vdmU7IG9wYWNpdHk6IDAuNVwiIHdpZHRoPVwiMjVweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIm0gNC40OTYwOTQgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gNiAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSAtNiA2IGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSA2IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIC02IDYgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDYgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gMCAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJncmV5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiZml4dHVyZUNvbmZpZ0lkXCIgW2lkRmllbGRdPVwiJ19pZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIiduYW1lJ1wiIFtkYXRhXT1cImZpeHR1cmVUZW1wbGF0ZXNcIiBbbGFiZWxdPVwiJ0ZpeHR1cmUgJyArIChqICsgMSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoXT1cInRydWVcIiBbc3ViVGV4dEZpZWxkXT1cIidzdWJ0ZXh0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtZW5kIGp1c3RpZnktY29udGVudC1jZW50ZXIgaC0xMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJyZW1vdmVGaXh0dXJlKCdmbG9vcicsIGopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgbWFyZ2luLWJvdHRvbTogMThweFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgMTAgMTBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAxTDEgOU0xIDFMOSA5XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImxpbmstYnRuXCIgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5ld0ZpeHR1cmUoJ2Zsb29yJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBmaXh0dXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxociBzdHlsZT1cImJvcmRlci10b3A6IDFweCBkYXNoZWQgIzAwMDAwMDtcIiAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGbG9vciBPdGhlciBFbGVtZW50cyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1GbG9vck90aGVyRWxlbWVudHMuY29udHJvbHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwiZmxvb3JPdGhlckVsZW1lbnRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaXh0dXJlIG9mIGdldEZvcm1GbG9vck90aGVyRWxlbWVudHMuY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09XCJqXCIgY2xhc3M9XCJyb3cgZy0wIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTExXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5FbGVtZW50IHt7IGogKyAxIH19PC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERyb3Bkb3duIGZvciB0eXBlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cIm90aGVyRWxlbWVudExpc3RcIiBbaWRdPVwiJ2Zsb29yRWxlbWVudExhYmVsJyArIGpcIiBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDb25kaXRpb25hbCBpbnB1dCBmb3IgY3VzdG9tIG5hbWUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCIoZml4dHVyZS5nZXQoJ3R5cGUnKT8udmFsdWUpID09PSAnT3RoZXJzJ1wiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbXQtMlwiIGZvcm1Db250cm9sTmFtZT1cImN1c3RvbU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGN1c3RvbSBlbGVtZW50IG5hbWVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtZW5kIGp1c3RpZnktY29udGVudC1jZW50ZXIgaC0xMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJyZW1vdmVPdGhlckVsZW1lbnQoJ2Zsb29yJywgailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBtYXJnaW4tYm90dG9tOiAxOHB4XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCAxMCAxMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDFMMSA5TTEgMUw5IDlcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibGluay1idG5cIiBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkTmV3T3RoZXJFbGVtZW50cygnZmxvb3InKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGVsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBDZW50ZXIgQ29sdW1uIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIG92ZXJmbG93LWhpZGRlbiBwb3NpdGlvbi1yZWxhdGl2ZVwiIFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6IGVkaXRGaXh0dXJlIH1cIj5cclxuICAgICAgICA8ZGl2IGlkPVwiY2FudmFzLWNhcmRcIiBjbGFzcz1cImMtY2FyZCBwb3NpdGlvbi1yZWxhdGl2ZVwiICNjYW52YXNDb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tIENhbnZhcyBWaWV3IC0tPlxyXG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBzZWxlY3RlZFZpZXcgPT09ICd0cmVlJyB9XCI+XHJcbiAgICAgICAgICAgIDxjYW52YXMgaWQ9XCJiYXNlLWNhbnZhc1wiICNiYXNlQ2FudmFzPjwvY2FudmFzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBUcmVlIFZpZXcgLS0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRWaWV3ID09PSAndHJlZSdcIiBjbGFzcz1cInctMTAwXCI+XHJcbiAgICAgICAgICAgIDxzdG9yZS1wbGFuby10cmVlLXZpZXcgW2FsbEZpeHR1cmVdPVwiYWxsRml4dHVyZXNcIj48L3N0b3JlLXBsYW5vLXRyZWUtdmlldz5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gVG9wIENvbnRyb2xzIC0tPlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cInRvcDogMjRweDsgbGVmdDogMjZweDsgcG9zaXRpb246IGFic29sdXRlO1wiIGlkPVwic2VnbWVudC1idG5cIiBjbGFzcz1cInBiLTVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgZ2FwLTRcIj5cclxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY3VzdG9tLXRhYnMgZC1mbGV4XCIgc3R5bGU9XCJ3aWR0aDogMjAwcHg7IG1hcmdpbjogMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gZmxleC1maWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJuYXYtbGluayB3LTEwMCBoLTEwMFwiIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRWaWV3ID09PSAnZGV0YWlsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9ICdkZXRhaWwnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRGV0YWlsIFZpZXdcclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gZmxleC1maWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJuYXYtbGluayB3LTEwMCBoLTEwMFwiIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRWaWV3ID09PSAndHJlZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZFZpZXcgPSAndHJlZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICBUcmVlIFZpZXdcclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBFbnRyYW5jZSBCdXR0b24gLS0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGF5b3V0Rm9ybS5lbmFibGVkXCIgbmdiVG9vbHRpcD1cIllvdSBjYW4gYWRkIHVwIHRvIHR3byBlbnRyYW5jZXMuXCIgc3R5bGU9XCJ0b3A6IDI0cHg7IHJpZ2h0OiAxOTBweFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIiBbZGlzYWJsZVRvb2x0aXBdPVwiZ2V0RW50cmFuY2VzPy5sZW5ndGggPCAyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgYmctd2hpdGUgc2hhZG93LXNtXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0RW50cmFuY2VzPy5sZW5ndGggPj0gMlwiIChjbGljayk9XCJhZGROZXdFbnRyYW5jZSgpXCI+XHJcbiAgICAgICAgICAgICAgQWRkIEVudHJhbmNlXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBFZGl0IEJ1dHRvbiAtLT5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVFZGl0IHx8IFsndGFza0Fzc2lnbmVkJywncmV2aWV3UGVuZGluZyddLmluY2x1ZGVzKHRhc2tTdHlsZS5maXh0dXJlLmNsYXNzKVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwidG9wOiAyNHB4OyByaWdodDogMTY0cHhcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBwb3NpdGlvbi1hYnNvbHV0ZSBiZy13aGl0ZSBzaGFkb3ctc21cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0VkaXQoKVwiPlxyXG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzEzMjJfNTMyNSlcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuMTY2NyAyLjQ5OTkzQzE0LjM4NTYgMi4yODEwNiAxNC42NDU1IDIuMTA3NDQgMTQuOTMxNCAxLjk4ODk5QzE1LjIxNzQgMS44NzA1NCAxNS41MjM5IDEuODA5NTcgMTUuODMzNCAxLjgwOTU3QzE2LjE0MjkgMS44MDk1NyAxNi40NDk0IDEuODcwNTQgMTYuNzM1NCAxLjk4ODk5QzE3LjAyMTQgMi4xMDc0NCAxNy4yODEyIDIuMjgxMDYgMTcuNTAwMSAyLjQ5OTkzQzE3LjcxOSAyLjcxODggMTcuODkyNiAyLjk3ODYzIDE4LjAxMSAzLjI2NDZDMTguMTI5NSAzLjU1MDU3IDE4LjE5MDQgMy44NTcwNiAxOC4xOTA0IDQuMTY2NTlDMTguMTkwNCA0LjQ3NjEyIDE4LjEyOTUgNC43ODI2MiAxOC4wMTEgNS4wNjg1OUMxNy44OTI2IDUuMzU0NTUgMTcuNzE5IDUuNjE0MzkgMTcuNTAwMSA1LjgzMzI2TDYuMjUwMDggMTcuMDgzM0wxLjY2Njc1IDE4LjMzMzNMMi45MTY3NSAxMy43NDk5TDE0LjE2NjcgMi40OTk5M1pcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTMyMl81MzI1XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIEVkaXRcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDwhLS0gUm90YXRlIEJ1dHRvbiAtLT5cclxuICAgICAgICAgIDxidXR0b24gc3R5bGU9XCJ0b3A6IDI0cHg7IHJpZ2h0OiA5NHB4XCIgdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgcG9zaXRpb24tYWJzb2x1dGUgYmctd2hpdGUgc2hhZG93LXNtXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInJvdGF0ZUNhbnZhcyhjYW52YXMsOTApXCI+XHJcbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjJcIiBoZWlnaHQ9XCIyMlwiIHZpZXdCb3g9XCIwIDAgMjYgMjZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICBkPVwiTTYuMzYyNjUgNy4xNzg4N0w3LjE3NjI1IDYuMzYyODdMNS45MDQyNSA1LjA5MjA3TDUuMDg5NDUgNS45MDU2N0w2LjM2MjY1IDcuMTc4ODdaTTE1LjY3MSA2LjM2NDA3TDE5LjYzNzkgMTAuMzMwOUwyMC45MDk5IDkuMDU3NjlMMTYuOTQ0MiA1LjA5MDg3TDE1LjY3MSA2LjM2NDA3Wk0xOS42Mzc5IDE4LjgyNTdMMTguODI0MyAxOS42MzkzTDIwLjA5NjMgMjAuOTEwMUwyMC45MDk5IDIwLjA5NzdMMTkuNjM3OSAxOC44MjU3Wk0xMC4zMjk1IDE5LjYzOTNMNi4zNjI2NSAxNS42NzI1TDUuMDkwNjUgMTYuOTQ1N0w5LjA1NjI2IDIwLjkxMTNMMTAuMzI5NSAxOS42MzkzWk0xOC44MjQzIDE5LjYzOTNDMTcuNjU0MyAyMC44MDgxIDE2Ljg0MDcgMjEuNjE5MyAxNi4xNDU5IDIyLjE0OTdDMTUuNDcxNSAyMi42NjQ1IDE1LjAxNTUgMjIuODI4OSAxNC41NzYzIDIyLjgyODlWMjQuNjI4OUMxNS41Njc1IDI0LjYyODkgMTYuNDAyNyAyNC4yMTczIDE3LjIzNjcgMjMuNTgxM0MxOC4wNTAzIDIyLjk2MDkgMTguOTYzNSAyMi4wNDUzIDIwLjA5NjMgMjAuOTEyNUwxOC44MjQzIDE5LjYzOTNaTTkuMDU2MjYgMjAuOTExM0MxMC4xODkxIDIyLjA0NTMgMTEuMTAyMyAyMi45NTk3IDExLjkxNTkgMjMuNTgxM0MxMi43NDk5IDI0LjIxNzMgMTMuNTg1MSAyNC42Mjg5IDE0LjU3NjMgMjQuNjI4OVYyMi44Mjg5QzE0LjEzNzEgMjIuODI4OSAxMy42ODIzIDIyLjY2NDUgMTMuMDA2NyAyMi4xNDk3QzEyLjMxMTkgMjEuNjE5MyAxMS40OTgzIDIwLjgwODEgMTAuMzI5NSAxOS42MzkzTDkuMDU2MjYgMjAuOTExM1pNMTkuNjM3OSAxMC4zMzA5QzIwLjgwNjcgMTEuNDk5NyAyMS42MTc5IDEyLjMxMzMgMjIuMTQ4MyAxMy4wMDgxQzIyLjY2MzEgMTMuNjgzNyAyMi44Mjc1IDE0LjEzODUgMjIuODI3NSAxNC41Nzc3SDI0LjYyNzVDMjQuNjI3NSAxMy41ODY1IDI0LjIxNTkgMTIuNzUxMyAyMy41Nzk5IDExLjkxNzNDMjIuOTU5NSAxMS4xMDM3IDIyLjA0MjcgMTAuMTkwNSAyMC45MDk5IDkuMDU3NjlMMTkuNjM3OSAxMC4zMzA5Wk0yMC45MDk5IDIwLjA5NzdDMjIuMDQzOSAxOC45NjM3IDIyLjk1ODMgMTguMDUxNyAyMy41Nzk5IDE3LjIzODFDMjQuMjE1OSAxNi40MDQxIDI0LjYyNzUgMTUuNTY4OSAyNC42Mjc1IDE0LjU3NzdIMjIuODI3NUMyMi44Mjc1IDE1LjAxNjkgMjIuNjYzMSAxNS40NzI5IDIyLjE0ODMgMTYuMTQ3M0MyMS42MTc5IDE2Ljg0MjEgMjAuODA2NyAxNy42NTU3IDE5LjYzNzkgMTguODI1N0wyMC45MDk5IDIwLjA5NzdaTTcuMTc2MjUgNi4zNjI4N0M4LjM0NjI1IDUuMTk0MDcgOS4xNTk4NSA0LjM4MTY3IDkuODU0NjUgMy44NTEyN0MxMC41MjkgMy4zMzY0NyAxMC45ODUgMy4xNzMyNyAxMS40MjQyIDMuMTczMjdWMS4zNzIwN0MxMC40MzMgMS4zNzIwNyA5LjU5Nzg1IDEuNzgzNjcgOC43NjM4NSAyLjQxOTY3QzcuOTQ5MDUgMy4wNDEyNyA3LjAzNzA1IDMuOTU1NjcgNS45MDQyNSA1LjA4ODQ3TDcuMTc2MjUgNi4zNjI4N1pNMTYuOTQ0MiA1LjA5MDg3QzE1LjgxMTQgMy45NTY4NyAxNC44OTgyIDMuMDQxMjcgMTQuMDg0NiAyLjQxOTY3QzEzLjI1MDYgMS43ODM2NyAxMi40MTU0IDEuMzcyMDcgMTEuNDI0MiAxLjM3MjA3VjMuMTczMjdDMTEuODYzNCAzLjE3MzI3IDEyLjMxODIgMy4zMzY0NyAxMi45OTM4IDMuODUxMjdDMTMuNjg4NiA0LjM4MTY3IDE0LjUwMjIgNS4xOTI4NyAxNS42NzEgNi4zNjE2N0wxNi45NDQyIDUuMDkwODdaTTUuMDg5NDUgNS45MDMyN0MzLjk1NjY1IDcuMDM2MDcgMy4wNDIyNSA3Ljk0ODA3IDIuNDIwNjUgOC43NjI4N0MxLjc4NDY1IDkuNTk2ODcgMS4zNzMwNSAxMC40MzIxIDEuMzczMDUgMTEuNDIzM0gzLjE3MzA1QzMuMTczMDUgMTAuOTg0MSAzLjMzNzQ1IDEwLjUyODEgMy44NTIyNSA5Ljg1MzY3QzQuMzgyNjUgOS4xNTg4NyA1LjE5Mzg1IDguMzQ1MjcgNi4zNjI2NSA3LjE3NTI3TDUuMDg5NDUgNS45MDMyN1pNNi4zNjI2NSAxNS42NzEzQzUuMTkzODUgMTQuNTAxMyA0LjM4MjY1IDEzLjY4NzcgMy44NTIyNSAxMi45OTI5QzMuMzM3NDUgMTIuMzE4NSAzLjE3MzA1IDExLjg2MjUgMy4xNzMwNSAxMS40MjMzSDEuMzczMDVDMS4zNzMwNSAxMi40MTQ1IDEuNzg0NjUgMTMuMjQ5NyAyLjQyMDY1IDE0LjA4MzdDMy4wNDIyNSAxNC44OTczIDMuOTU2NjUgMTUuODEwNSA1LjA4OTQ1IDE2Ljk0MzNMNi4zNjI2NSAxNS42NzEzWlwiXHJcbiAgICAgICAgICAgICAgICBmaWxsPVwiIzFEMjkzOVwiIC8+XHJcbiAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMy4yIDYuOTgzMkwyNSA4LjJDMjUgNC41ODIgMjIuNDA1NiAxLjU3OTYgMTkgMU0yLjggMTkuMDE2OEwxIDE3LjhDMSAyMS40MTggMy41OTQ0IDI0LjQyMDQgNyAyNVwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCIjMUQyOTM5XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPCEtLSBTdWJtaXQgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFsYXlvdXRGb3JtLmRpc2FibGVkXCIgc3R5bGU9XCJ0b3A6IDI0cHg7IHJpZ2h0OiA5NHB4O3BhZGRpbmc6IDlweCAyMHB4ICFpbXBvcnRhbnQ7XCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgcG9zaXRpb24tYWJzb2x1dGUgYmctd2hpdGUgc2hhZG93LXNtXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZUxheW91dCh0cnVlKVwiPlxyXG4gICAgICAgICAgICBTdWJtaXRcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDwhLS0gRG93bmxvYWQgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgPGJ1dHRvbiBzdHlsZT1cInRvcDogMjRweDsgcmlnaHQ6IDI2cHhcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBwb3NpdGlvbi1hYnNvbHV0ZSBiZy13aGl0ZSBzaGFkb3ctc21cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRDYW52YXMoKVwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjJcIiBoZWlnaHQ9XCIyMlwiIHZpZXdCb3g9XCIwIDAgMjYgMjZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDAwMDBcIiBzdHJva2Utd2lkdGg9XCIwLjI0MDAwMDAwMDAwMDAwMDA1XCI+XHJcbiAgICAgICAgICAgICAgPGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+XHJcbiAgICAgICAgICAgICAgPGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2U9XCIjQ0NDQ0NDXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjAuMzg0XCI+PC9nPlxyXG4gICAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgZD1cIk0xMi41NTM1IDE2LjUwNjFDMTIuNDExNCAxNi42NjE1IDEyLjIxMDYgMTYuNzUgMTIgMTYuNzVDMTEuNzg5NCAxNi43NSAxMS41ODg2IDE2LjY2MTUgMTEuNDQ2NSAxNi41MDYxTDcuNDQ2NDggMTIuMTMxMUM3LjE2Njk4IDExLjgyNTQgNy4xODgyMiAxMS4zNTEgNy40OTM5MiAxMS4wNzE1QzcuNzk5NjMgMTAuNzkyIDguMjc0MDIgMTAuODEzMiA4LjU1MzUyIDExLjExODlMMTEuMjUgMTQuMDY4MlYzQzExLjI1IDIuNTg1NzkgMTEuNTg1OCAyLjI1IDEyIDIuMjVDMTIuNDE0MiAyLjI1IDEyLjc1IDIuNTg1NzkgMTIuNzUgM1YxNC4wNjgyTDE1LjQ0NjUgMTEuMTE4OUMxNS43MjYgMTAuODEzMiAxNi4yMDA0IDEwLjc5MiAxNi41MDYxIDExLjA3MTVDMTYuODExOCAxMS4zNTEgMTYuODMzIDExLjgyNTQgMTYuNTUzNSAxMi4xMzExTDEyLjU1MzUgMTYuNTA2MVpcIlxyXG4gICAgICAgICAgICAgICAgICBmaWxsPVwiIzFEMjkzOVwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMy43NSAxNUMzLjc1IDE0LjU4NTggMy40MTQyMiAxNC4yNSAzIDE0LjI1QzIuNTg1NzkgMTQuMjUgMi4yNSAxNC41ODU4IDIuMjUgMTVWMTUuMDU0OUMyLjI0OTk4IDE2LjQyMjUgMi4yNDk5NiAxNy41MjQ4IDIuMzY2NTIgMTguMzkxOEMyLjQ4NzU0IDE5LjI5MTkgMi43NDY0MyAyMC4wNDk3IDMuMzQ4MzUgMjAuNjUxNkMzLjk1MDI3IDIxLjI1MzYgNC43MDgxNCAyMS41MTI1IDUuNjA4MjUgMjEuNjMzNUM2LjQ3NTIyIDIxLjc1IDcuNTc3NTQgMjEuNzUgOC45NDUxMyAyMS43NUgxNS4wNTQ5QzE2LjQyMjUgMjEuNzUgMTcuNTI0OCAyMS43NSAxOC4zOTE4IDIxLjYzMzVDMTkuMjkxOSAyMS41MTI1IDIwLjA0OTcgMjEuMjUzNiAyMC42NTE3IDIwLjY1MTZDMjEuMjUzNiAyMC4wNDk3IDIxLjUxMjUgMTkuMjkxOSAyMS42MzM1IDE4LjM5MThDMjEuNzUgMTcuNTI0OCAyMS43NSAxNi40MjI1IDIxLjc1IDE1LjA1NDlWMTVDMjEuNzUgMTQuNTg1OCAyMS40MTQyIDE0LjI1IDIxIDE0LjI1QzIwLjU4NTggMTQuMjUgMjAuMjUgMTQuNTg1OCAyMC4yNSAxNUMyMC4yNSAxNi40MzU0IDIwLjI0ODQgMTcuNDM2NSAyMC4xNDY5IDE4LjE5MTlDMjAuMDQ4MiAxOC45MjU3IDE5Ljg2NzggMTkuMzE0MiAxOS41OTEgMTkuNTkxQzE5LjMxNDIgMTkuODY3OCAxOC45MjU3IDIwLjA0ODIgMTguMTkxOSAyMC4xNDY5QzE3LjQzNjUgMjAuMjQ4NCAxNi40MzU0IDIwLjI1IDE1IDIwLjI1SDlDNy41NjQ1OSAyMC4yNSA2LjU2MzQ3IDIwLjI0ODQgNS44MDgxMiAyMC4xNDY5QzUuMDc0MzUgMjAuMDQ4MiA0LjY4NTc3IDE5Ljg2NzggNC40MDkwMSAxOS41OTFDNC4xMzIyNSAxOS4zMTQyIDMuOTUxOCAxOC45MjU3IDMuODUzMTUgMTguMTkxOUMzLjc1MTU5IDE3LjQzNjUgMy43NSAxNi40MzU0IDMuNzUgMTVaXCJcclxuICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxRDI5MzlcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFBhbmVsIENvbGxhcHNlIEhhbmRsZXJzIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzZS1oYW5kbGVyIGxlZnRcIiAoY2xpY2spPVwidG9nZ2xlUGFuZWwoJ2xlZnQnKVwiPlxyXG4gICAgICAgICAgPHN2ZyAqbmdJZj1cIiFpc0xlZnRQYW5lbENvbGxhcHNlZFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk04LjI3MzA4IDEyLjYzNkw0LjYzNjcyIDguOTk5NjRMOC4yNzMwOCA1LjM2MzI4TTEzLjM2NCAxMi42MzZMOS43Mjc2MyA4Ljk5OTY0TDEzLjM2NCA1LjM2MzI4XCJcclxuICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS40NTQ1NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc0xlZnRQYW5lbENvbGxhcHNlZFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk05LjcyNjkyIDUuMzYzOTlMMTMuMzYzMyA5LjAwMDM2TDkuNzI2OTIgMTIuNjM2N000LjYzNjAxIDUuMzYzOTlMOC4yNzIzNyA5LjAwMDM2TDQuNjM2MDEgMTIuNjM2N1wiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzZS1oYW5kbGVyIHJpZ2h0XCIgKGNsaWNrKT1cInRvZ2dsZVBhbmVsKCdyaWdodCcpXCI+XHJcbiAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNSaWdodFBhbmVsQ29sbGFwc2VkXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTguMjczMDggMTIuNjM2TDQuNjM2NzIgOC45OTk2NEw4LjI3MzA4IDUuMzYzMjhNMTMuMzY0IDEyLjYzNkw5LjcyNzYzIDguOTk5NjRMMTMuMzY0IDUuMzYzMjhcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjQ1NDU1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPHN2ZyAqbmdJZj1cIiFpc1JpZ2h0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS43MjY5MiA1LjM2Mzk5TDEzLjM2MzMgOS4wMDAzNkw5LjcyNjkyIDEyLjYzNjdNNC42MzYwMSA1LjM2Mzk5TDguMjcyMzcgOS4wMDAzNkw0LjYzNjAxIDEyLjYzNjdcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjQ1NDU1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gRWRpdCBGaXh0dXJlIEJvZHkgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiAhZWRpdEZpeHR1cmUgfVwiPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJlZGl0LWJvZHlcIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPHVsIGNsYXNzPVwibXgtMyBteS01IG5hdiBuYXYtcGlsbHNcIiByb2xlPVwidGFibGlzdFwiPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBjdXJzb3ItcG9pbnRlclwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cclxuICAgICAgICAgICAgICA8YSAoY2xpY2spPVwic3VibWl0Rml4dHVyZSA9IGZhbHNlOyBlZGl0Rml4dHVyZVNlY3Rpb24gPSAnYmFzaWMtZGV0YWlscydcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZWRpdEZpeHR1cmVTZWN0aW9uID09PSAnYmFzaWMtZGV0YWlscycgPyAnYWN0aXZlJyA6ICcnXCIgY2xhc3M9XCJuYXYtbGlua1wiIHJvbGU9XCJ0YWJcIj5cclxuICAgICAgICAgICAgICAgIEJhc2ljIGRldGFpbHNcclxuICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGN1cnNvci1wb2ludGVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gICAgICAgICAgICAgIDxhIChjbGljayk9XCJzdWJtaXRGaXh0dXJlID0gZmFsc2U7IGVkaXRGaXh0dXJlU2VjdGlvbiA9ICdwcm9kdWN0cydcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZWRpdEZpeHR1cmVTZWN0aW9uID09PSAncHJvZHVjdHMnID8gJ2FjdGl2ZScgOiAnJ1wiIGNsYXNzPVwibmF2LWxpbmtcIiByb2xlPVwidGFiXCI+XHJcbiAgICAgICAgICAgICAgICBQcm9kdWN0c1xyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gY3Vyc29yLXBvaW50ZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInN1Ym1pdEZpeHR1cmUgPSBmYWxzZTsgZWRpdEZpeHR1cmVTZWN0aW9uID0gJ3ZtcydcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZWRpdEZpeHR1cmVTZWN0aW9uID09PSAndm1zJyA/ICdhY3RpdmUnIDogJydcIiBjbGFzcz1cIm5hdi1saW5rXCIgcm9sZT1cInRhYlwiPlxyXG4gICAgICAgICAgICAgICAgVmlzdWFsIE1lcmNoYW5kaXNlXHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICdiYXNpYy1kZXRhaWxzJ1wiPlxyXG4gICAgICAgICAgICAgIDxsaWItaW5zdGFuY2UtYmFzaWMtZGV0YWlscyBbZml4dHVyZURhdGFdPVwic2VsZWN0ZWRGaXh0dXJlRGF0YVwiIFtlZGl0TW9kZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtpc1N1Ym1pdHRlZF09XCJzdWJtaXRGaXh0dXJlXCIgKHN1Ym1pdEV2ZW50KT1cIm9uRml4dHVyZVN1Ym1pdCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9saWItaW5zdGFuY2UtYmFzaWMtZGV0YWlscz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdEZpeHR1cmVTZWN0aW9uID09PSAncHJvZHVjdHMnXCI+XHJcbiAgICAgICAgICAgICAgPGxpYi1pbnN0YW5jZS1wcm9kdWN0cyBbZml4dHVyZURhdGFdPVwic2VsZWN0ZWRGaXh0dXJlRGF0YVwiIFtlZGl0TW9kZV09XCJ0cnVlXCIgW2lzU3VibWl0dGVkXT1cInN1Ym1pdEZpeHR1cmVcIlxyXG4gICAgICAgICAgICAgICAgKHN1Ym1pdEV2ZW50KT1cIm9uRml4dHVyZVN1Ym1pdCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9saWItaW5zdGFuY2UtcHJvZHVjdHM+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaXh0dXJlU2VjdGlvbiA9PT0gJ3ZtcydcIj5cclxuICAgICAgICAgICAgICA8bGliLWluc3RhbmNlLXZtcyBbZml4dHVyZURhdGFdPVwic2VsZWN0ZWRGaXh0dXJlRGF0YVwiIFtlZGl0TW9kZV09XCJ0cnVlXCIgW2lzU3VibWl0dGVkXT1cInN1Ym1pdEZpeHR1cmVcIlxyXG4gICAgICAgICAgICAgICAgKHN1Ym1pdEV2ZW50KT1cIm9uRml4dHVyZVN1Ym1pdCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9saWItaW5zdGFuY2Utdm1zPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC0zXCIgW3N0eWxlXT1cInsnbWluLXdpZHRoJzogJzY2MHB4J31cIj5cclxuICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmVlZGJhY2tDb2xcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnY29sbGFwc2VkLWNvbCc6IGlzUmlnaHRQYW5lbENvbGxhcHNlZCwgJ2NvbC0zJzogIWlzUmlnaHRQYW5lbENvbGxhcHNlZCB9XCJcclxuICAgICAgICBbc3R5bGVdPVwieydtaW4td2lkdGgnOiBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPyAnMCcgOiAnNjY0cHgnfVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmZWVkYmFja0NvbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG5cclxuPCEtLSBUZW1wbGF0ZXMgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZmVlZGJhY2tDb2w+XHJcbiAgPGRpdiBjbGFzcz1cInMtY2FyZFwiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6ZWRpdEZpeHR1cmUgPyAnNzJweCcgOiAnMHB4J31cIj5cclxuICAgIDwhLS0gPGFwcC1tYW5hZ2Utc3RvcmUtcGxhbm8tZmVlZGJhY2sgW25nQ2xhc3NdPVwieyAnZC1ub25lJzogaXNSaWdodFBhbmVsQ29sbGFwc2VkICYmICFlZGl0Rml4dHVyZX1cIlxyXG4gICAgICBbY3VycmVudFBsYW5vXT1cImZsb29yRGF0YVwiIFtzdG9yZUZlZWRiYWNrXT1cInN0b3JlRmVlZGJhY2tcIiBbc2VsZWN0ZWRJc3N1ZV09XCJzZWxlY3RlZEZpeHR1cmVcIlxyXG4gICAgICAoaXNBcHByb3ZlZCk9XCJoYW5kbGVBcHByb3ZlclJlc3BvbnNlKCRldmVudClcIj5cclxuICAgIDwvYXBwLW1hbmFnZS1zdG9yZS1wbGFuby1mZWVkYmFjaz4gLS0+XHJcblxyXG4gICAgPGxpYi12ZXJpZmljYXRpb24tZmVlZGJhY2sgW2Zsb29yRGF0YV09XCJmbG9vckRhdGFcIiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgJiYgIWVkaXRGaXh0dXJlfVwiXHJcbiAgICAgIFtmZWVkYmFja0RldGFpbHNdPVwic2VsZWN0ZWRGaXh0dXJlRmVlZGJhY2tcIiAoY2hhbmdlRml4dHVyZSk9XCJvbkNoYW5nZUZpeHR1cmVPbkZlZWRiYWNrUGFuZWwoJGV2ZW50LHRydWUpXCJcclxuICAgICAgW3RvdGFsRml4dHVyZXNdPVwiYWxsRml4dHVyZUluc3RhbmNlc1wiIFtjZG5dPVwiY2RuVXJsXCIgKGFjdGlvbik9XCJoYW5kbGVGZWVkYmFja0FjdGlvbigkZXZlbnQpXCJcclxuICAgICAgW3Nob3dBY3Rpb25dPVwiIWVkaXRGaXh0dXJlXCI+PC9saWItdmVyaWZpY2F0aW9uLWZlZWRiYWNrPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNoZWFkZXJTa2VsZXRvbj5cclxuICA8ZGl2IGNsYXNzPVwicm93IG0tMCBnLTAgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyIHctMTAwIHAtNCByb3VuZGVkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBtdC0wIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc2tlbGV0b25Mb2FkZXI+XHJcbiAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNoaW1tZXIgcm91bmRlZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICA8YnIgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG48bmctdGVtcGxhdGUgI25vU3RvcmVWaWRlbyBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxoMiBjbGFzcz1cIm1iLTNcIj5ObyBTdG9yZSBWaWRlbyBGb3VuZDwvaDI+XHJcbiAgICAgIDxwPlRoZSB2aWRlbyB3aWxsIGJlIGF2YWlsYWJsZSBvbmNlIGEgcmVxdWVzdCBpcyByYWlzZWQgYW5kIHRoZSBzdG9yZSBzdWJtaXRzIGEgY29tcGxldGUgc3RvcmUgdmlkZW8uPC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiAoY2xpY2spPVwibW9kYWwuY2xvc2UoKVwiPkNsb3NlPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
4344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXN0b3JlLXBsYW5vLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby9tYW5hZ2Utc3RvcmUtcGxhbm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvbWFuYWdlLXN0b3JlLXBsYW5vL21hbmFnZS1zdG9yZS1wbGFuby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVULFlBQVksRUFHWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTFELE9BQU8sRUFHTCxXQUFXLEVBRVgsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUNMLE9BQU8sRUFFUCxZQUFZLEVBQ1osY0FBYyxFQUNkLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFHZCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQU1qQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUN4SCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCMUcsTUFBTSxPQUFPLHlCQUF5QjtJQWtGMUI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQXhGVixTQUFTLENBQWlDO0lBQ1osWUFBWSxDQUE4QjtJQUd4RSxRQUFRO1FBQ04sVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFFekIsUUFBUSxDQUFTO0lBRWpCLE1BQU0sQ0FBaUI7SUFDdkIsU0FBUyxHQUFXLENBQUMsQ0FBQztJQUN0QixhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQ25CLGNBQWMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXFDLENBQUM7SUFFNUQsVUFBVSxDQUFZO0lBQ3RCLGVBQWUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QywwQkFBMEIsR0FBbUIsRUFBRSxDQUFDO0lBQ2hELDhCQUE4QixHQUFtQixFQUFFLENBQUM7SUFDcEQsMEJBQTBCLEdBQW1CLEVBQUUsQ0FBQztJQUVoRCxTQUFTLENBQU07SUFDZixTQUFTLENBQU07SUFDZixNQUFNLENBQVM7SUFDZixnQkFBZ0IsR0FBVSxFQUFFLENBQUM7SUFDN0IsV0FBVyxHQUFVLEVBQUUsQ0FBQztJQUN4QixhQUFhLENBQU07SUFFbkIsZUFBZSxDQUFNO0lBQ3JCLG1CQUFtQixDQUFNO0lBQ3pCLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0Isa0JBQWtCLEdBQXlDLGVBQWUsQ0FBQztJQUMzRSxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBRXRCLFlBQVksR0FBRztRQUNiLFVBQVUsRUFBRSxDQUFDO1FBQ2IsWUFBWSxFQUFFLENBQUM7UUFDZixPQUFPLEVBQUUsQ0FBQztLQUNYLENBQUM7SUFFRixhQUFhLEdBQVksSUFBSSxDQUFDO0lBQzlCLHFCQUFxQixHQUFZLElBQUksQ0FBQztJQUN0QyxvQkFBb0IsR0FBWSxJQUFJLENBQUM7SUFDckMsWUFBWSxHQUFzQixRQUFRLENBQUM7SUFFM0MsZUFBZSxHQVFOLEVBQUUsQ0FBQztJQUNaLGVBQWUsR0FBWSxLQUFLLENBQUM7SUFDakMsV0FBVyxHQUFZLElBQUksQ0FBQztJQUM1QixRQUFRLENBQU07SUFDZCxTQUFTLEdBQUc7UUFDVixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7UUFDdkQsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO1FBQ3hELEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtLQUNwRCxDQUFDO0lBRUYsZ0JBQWdCLEdBQWlCO1FBQy9CLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO1FBQzlDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRTtRQUN4RCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtRQUNwQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtLQUNyQyxDQUFDO0lBRUYsMEJBQTBCLEdBQVksS0FBSyxDQUFDO0lBRTVDLFlBQ1UsVUFBK0IsRUFDL0IsS0FBcUIsRUFDckIsRUFBZSxFQUNmLEVBQXNCLEVBQ3RCLFNBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLFlBQXNCLEVBQ3RCLFFBQXlCLEVBQ3pCLFFBQWtCLEVBQ2xCLE1BQWMsRUFDZCxFQUFxQjtRQVZyQixlQUFVLEdBQVYsVUFBVSxDQUFxQjtRQUMvQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBZTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUU3QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNqRSxJQUFJLENBQUM7Z0JBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjO2FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDeEIsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0wsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBVyxDQUNqRCxDQUFDO2dCQUNGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxFQUFFLE1BQU0sQ0FBQzthQUNwQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7YUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxNQUFNLEVBQUUsT0FBTyxFQUFFO2dCQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLE1BQU0sRUFBRSxPQUFPLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO2lCQUMzQzthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQzNDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FDakMsQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5RCxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQ3hCLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUN4QixTQUFTLENBQUMsUUFBUSxFQUFFLENBQ3JCLENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUU7WUFDN0QsdUJBQXVCLEVBQUUsSUFBSTtZQUM3QixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLG1CQUFtQixFQUFFLENBQUM7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFhLEVBQUUsaUJBQWlCLENBQUM7YUFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN2QixTQUFTLENBQUMsS0FBSyxFQUFFLENBQU0sRUFBRSxFQUFFO1lBQzFCLE1BQU0sUUFBUSxHQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFFL0IsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUN0QixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQztZQUVuQyxNQUFNLFFBQVEsR0FDWixNQUFNLEtBQUssT0FBTyxJQUFJLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQztZQUVuRSxJQUFJLFFBQVEsRUFBRTtnQkFDWixNQUFNLElBQUksR0FBRyxRQUFRLEVBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQztnQkFFMUMsTUFBTSxhQUFhLEdBQUc7b0JBQ3BCLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSTtvQkFDaEIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHO29CQUNmLEtBQUssRUFBRSxRQUFRLENBQUMsY0FBYyxFQUFFO29CQUNoQyxNQUFNLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRTtvQkFDbEMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO29CQUNyQixXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUk7aUJBQzNCLENBQUM7Z0JBRUYsUUFBUSxJQUFJLEVBQUU7b0JBQ1osS0FBSyxNQUFNLENBQUMsQ0FBQzt3QkFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDN0IsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQzt3QkFFdEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUNqQyxJQUFJLENBQUMsTUFBTSxFQUNYLGFBQWEsQ0FBQyxDQUFDLEVBQ2YsYUFBYSxDQUFDLENBQUMsRUFDZixJQUFJLENBQUMsYUFBYSxFQUNsQixhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksRUFDMUIsYUFBYSxDQUFDLFdBQVcsQ0FDMUIsQ0FBQzt3QkFFRCxPQUFlLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQzt3QkFDakMsT0FBZSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO3dCQUVsRCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDckMsTUFBTTtxQkFDUDtvQkFFRCxLQUFLLFFBQVEsQ0FBQyxDQUFDO3dCQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUM3QixhQUFhLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUs7NEJBQzlDLGFBQWEsQ0FBQyxLQUFLLENBQUM7d0JBRXRCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDOUMsSUFBSSxDQUFDLE1BQU0sRUFDWCxhQUFhLENBQUMsQ0FBQyxFQUNmLGFBQWEsQ0FBQyxDQUFDLEVBQ2YsYUFBYSxDQUFDLEtBQUssRUFDbkIsYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQ3ZCLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN4QixhQUFhLENBQUMsV0FBVyxDQUMxQixDQUFDO3dCQUVELFFBQWdCLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQzt3QkFDcEMsUUFBZ0IsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQzt3QkFFbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3RDLE1BQU07cUJBQ1A7b0JBRUQsS0FBSyxVQUFVLENBQUMsQ0FBQzt3QkFDZixNQUFNO3FCQUNQO29CQUVELEtBQUssU0FBUyxDQUFDLENBQUM7d0JBQ2QsTUFBTTtxQkFDUDtvQkFFRDt3QkFDRSxNQUFNO2lCQUNUO2dCQUVELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzthQUNoQztZQUVELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFekIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUN4QixLQUFLLEVBQUUsU0FBUyxDQUFDLFdBQVcsR0FBRyxFQUFFO1lBRWpDLE1BQU0sRUFBRSxTQUFTLENBQUMsWUFBWSxHQUFHLEVBQUU7U0FDcEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUE4QixFQUFFLEVBQUU7WUFDL0QsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUVoQixJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtnQkFDMUIsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQztnQkFDdkMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDdkIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUM7Z0JBRXZCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUV4QyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDckI7b0JBQ0UsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPO29CQUNaLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTztpQkFDRyxFQUNqQixJQUFJLENBQ0wsQ0FBQztnQkFFRixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ25CLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUNyQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2YsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUM5QixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNoQixRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDckIsUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7YUFDdEI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3hDLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7Z0JBQy9DLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7Z0JBQzFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztnQkFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO2dCQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQy9CLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUNyQixRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQzthQUN0QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUM5QixVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUMzQjtnQkFDRSxLQUFLLEVBQUUsV0FBVztnQkFDbEIsSUFBSSxFQUFFLHFDQUFxQztnQkFDM0MsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsV0FBVyxFQUFFLEtBQUs7YUFDbkI7WUFDRDtnQkFDRSxLQUFLLEVBQUUsRUFBRTtnQkFDVCxJQUFJLEVBQUUsRUFBRTtnQkFDUixRQUFRLEVBQUUsS0FBSztnQkFDZixXQUFXLEVBQUUsSUFBSTthQUNsQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsNERBQTREO1FBQzVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUM3QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGVBQWUsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLElBQUksS0FBSyxFQUFFLEtBQUssRUFBRTtZQUNoQixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBVSxFQUFFLEtBQVUsRUFBRSxFQUFFO2dCQUN2RCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDdkQsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksS0FBSyxHQUFHLENBQUMsQ0FDM0MsQ0FBQztnQkFDRixJQUFJLFNBQVMsRUFBRTtvQkFDYixLQUFLLEdBQUcsRUFBRSxHQUFHLFNBQVMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO2lCQUNwQztxQkFBTTtvQkFDTCxJQUFJLE9BQU8sR0FDVCxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUNsQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ2hELENBQUM7b0JBQ0osT0FBTyxDQUFDLFdBQVcsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUNoQyxLQUFLLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO2lCQUNsQztnQkFDRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1NBQ3BEO2FBQU0sSUFBSSxLQUFLLEVBQUUsT0FBTyxFQUFFO1lBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDMUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDNUIsQ0FBQztnQkFDRixJQUFJLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUMzRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFO3dCQUN0QyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7d0JBQ3RCLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7d0JBQzlDLEtBQUssQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQztxQkFDN0M7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU0sSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFO1lBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztTQUNwRDthQUFNO1lBQ0wsSUFBSSxLQUFLLEVBQUU7Z0JBQ1Qsd0JBQXdCO2dCQUN4QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxlQUFlLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUM1QztTQUNGO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFzQixFQUFFLE1BQWdCO1FBQ2xELElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUNuQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1NBQ2xFO2FBQU07WUFDTCxJQUFJLENBQUMscUJBQXFCLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1NBQ3BFO1FBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNuQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsZ0JBQWdCLENBQ2QsT0FBZSxFQUNmLE9BQWUsRUFDZixNQUFXLEVBQ1gsb0JBQTZCLElBQUk7UUFFakMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLElBQUksR0FBUTtnQkFDZCxPQUFPLEVBQUUsT0FBTztnQkFDaEIsT0FBTyxFQUFFLE9BQU87YUFDakIsQ0FBQztZQUNGLElBQUksTUFBTSxFQUFFO2dCQUNWLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7YUFDL0I7WUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDL0MsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFRLEVBQUUsRUFBRTtvQkFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUM5QixJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTt3QkFDaEMsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDdkQ7eUJBQU07d0JBQ0wsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ3RDO29CQUVELElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFO3dCQUNqQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztxQkFDbkQ7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNqQztvQkFFRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTt3QkFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ3pDO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDNUI7b0JBRUQsSUFBSSxpQkFBaUIsRUFBRTt3QkFDckIsa0NBQWtDO3FCQUNuQztvQkFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtvQkFDVixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO29CQUNsRSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDaEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFcEMsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO29CQUNqQixXQUFXLEdBQUcsSUFBSSxDQUFDO2lCQUNwQjthQUNGO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFO1lBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVoRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7b0JBQ2pCLFdBQVcsR0FBRyxJQUFJLENBQUM7aUJBQ3BCO2FBQ0Y7U0FDRjtRQUVELElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDekI7YUFBTTtZQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQzFCO1FBRUQsaUNBQWlDO1FBQ2pDLG9DQUFvQztRQUNwQyxZQUFZO1FBQ1osSUFBSTtRQUVKLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FDL0MsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUNuQyxDQUFDO1FBQ0YsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUNoRCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxTQUFTLENBQ3BDLENBQUM7UUFDRixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQzNDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FDL0IsQ0FBQztRQUNGLElBQ0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFVBQVU7WUFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLFVBQVU7WUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFDcEM7WUFDQSxJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQztTQUNuQzthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBRTtZQUNwRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUNFLE1BQU07Z0JBQ04sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxjQUFjLElBQUksVUFBVSxDQUFDO29CQUNqRSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQ3JCO2dCQUNBLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO2FBQ2xDO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO1lBQ2pDLElBQ0UsV0FBVztnQkFDWCxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxRQUFRO29CQUM5QixXQUFXLENBQUMsY0FBYyxJQUFJLFVBQVUsQ0FBQztvQkFDekMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxFQUMxQjtnQkFDQSxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRO29CQUM3QyxDQUFDLENBQUMsY0FBYztvQkFDaEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQzthQUNmO1NBQ0Y7UUFDRCxTQUFTO1FBQ1Qsb0NBQW9DO1FBQ3BDLGdJQUFnSTtRQUNoSSw0Q0FBNEM7UUFDNUMsTUFBTTtRQUNOLElBQUk7UUFFSiwyQ0FBMkM7UUFDM0Msb0dBQW9HO1FBRXBHLHFHQUFxRztRQUVyRyxnQ0FBZ0M7UUFDaEMsd0NBQXdDO1FBQ3hDLGFBQWE7UUFDYixNQUFNO1FBRU4sNkJBQTZCO1FBRTdCLGtEQUFrRDtRQUNsRCw0REFBNEQ7UUFFNUQsa0RBQWtEO1FBQ2xELG1DQUFtQztRQUNuQyxnREFBZ0Q7UUFFaEQsK0VBQStFO1FBQy9FLGdDQUFnQztRQUNoQyxtQkFBbUI7UUFDbkIsWUFBWTtRQUVaLFVBQVU7UUFDVixRQUFRO1FBRVIsOEJBQThCO1FBQzlCLDRCQUE0QjtRQUM1QixrREFBa0Q7UUFDbEQsbUNBQW1DO1FBQ25DLGdEQUFnRDtRQUVoRCwrRUFBK0U7UUFDL0UsZ0NBQWdDO1FBQ2hDLG1CQUFtQjtRQUNuQixZQUFZO1FBRVosVUFBVTtRQUNWLFFBQVE7UUFFUiw4QkFBOEI7UUFDOUIsTUFBTTtRQUVOLHVCQUF1QjtRQUN2Qiw2Q0FBNkM7UUFDN0MsYUFBYTtRQUNiLE1BQU07UUFFTixxQ0FBcUM7UUFDckMsSUFBSTtRQUVKLCtDQUErQztRQUMvQyxnSEFBZ0g7UUFDaEgsNkJBQTZCO1FBRTdCLDJFQUEyRTtRQUMzRSx1Q0FBdUM7UUFDdkMsYUFBYTtRQUNiLE1BQU07UUFFTixvRkFBb0Y7UUFFcEYsMEJBQTBCO1FBQzFCLG9DQUFvQztRQUNwQyw4Q0FBOEM7UUFDOUMsNkVBQTZFO1FBQzdFLDhCQUE4QjtRQUM5QixpQkFBaUI7UUFDakIsVUFBVTtRQUNWLFFBQVE7UUFDUixNQUFNO1FBRU4sdUJBQXVCO1FBQ3ZCLDRDQUE0QztRQUM1QyxhQUFhO1FBQ2IsTUFBTTtRQUVOLG9DQUFvQztRQUNwQyxJQUFJO1FBRUosc0lBQXNJO1FBQ3RJLG9DQUFvQztRQUNwQyxJQUFJO0lBQ04sQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsZUFBdUI7UUFDdkMsT0FBTyxNQUFNLGNBQWMsQ0FDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FDcEQsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQUMsYUFBb0I7UUFDOUMsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FDdkMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUN6QyxDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUN0RCxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNLENBQ2pELENBQUM7UUFFRixJQUFJLGNBQWMsRUFBRTtZQUNsQixNQUFNLE1BQU0sR0FBRyxjQUFjLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDO1lBRXBELElBQUksTUFBTSxFQUFFO2dCQUNWLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUN0QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRXhCLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxjQUFjLEVBQUU7d0JBQ3RDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUNuQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQy9DLENBQUM7d0JBRUYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQ3hDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFFNUIsTUFBTSxRQUFRLEdBQVEsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUMxQyxPQUFPLENBQUMsZUFBZSxDQUN4QixDQUFDOzRCQUVGLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0NBQ2IsT0FBTzs2QkFDUjs0QkFFRCxNQUFNLFNBQVMsR0FBRyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDOzRCQUUvQyxNQUFNLFlBQVksR0FBRztnQ0FDbkIsR0FBRyxRQUFRLEVBQUUsSUFBSTtnQ0FDakIsZUFBZSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRztnQ0FDcEMsR0FBRyxFQUFFLFNBQVM7Z0NBQ2QsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtnQ0FDNUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO2dDQUNoQyxLQUFLLEVBQUUsSUFBSTtnQ0FDWCxLQUFLLEVBQUUsSUFBSTtnQ0FDWCxTQUFTLEVBQUUsT0FBTztnQ0FDbEIsUUFBUSxFQUFFLFFBQVE7NkJBQ25CLENBQUM7NEJBRUYsMkpBQTJKOzRCQUUzSixJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsS0FBSyxNQUFNLEVBQUU7Z0NBQzVDLElBQUksU0FBaUIsQ0FBQztnQ0FFdEIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDO2dDQUNyRCxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFO29DQUN2QyxTQUFTLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztpQ0FDakM7cUNBQU0sSUFBSSxZQUFZLElBQUksQ0FBQyxFQUFFO29DQUM1QixTQUFTLEdBQUcsQ0FBQyxDQUFDO2lDQUNmO3FDQUFNO29DQUNMLFNBQVMsR0FBRyxZQUFZLENBQUM7aUNBQzFCO2dDQUVELE1BQU0sZUFBZSxHQUFRLFlBQVksQ0FBQyxJQUFJLENBQzVDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FDZixPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU07b0NBQzlCLE9BQU8sQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUN0QyxDQUFDLFFBQVEsQ0FBQztnQ0FDWCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsOEJBQThCLENBQUM7Z0NBRS9ELElBQUksZUFBZSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUU7b0NBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYTt5Q0FDekIsSUFBSSxDQUNILENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FDZixPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU07d0NBQzlCLE9BQU8sQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUN0Qzt5Q0FDQSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO29DQUMvQiwyREFBMkQ7aUNBQzVEO3FDQUFNLElBQUksZUFBZSxJQUFJLENBQUMsRUFBRTtvQ0FDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO3lDQUN6QixJQUFJLENBQ0gsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUNmLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTTt3Q0FDOUIsT0FBTyxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ3RDO3lDQUNBLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7b0NBQ2xDLGdFQUFnRTtpQ0FDakU7cUNBQU07b0NBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO3lDQUN6QixJQUFJLENBQ0gsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUNmLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTTt3Q0FDOUIsT0FBTyxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ3RDO3lDQUNBLFFBQVEsQ0FBQyxNQUFNLENBQUMsZUFBZSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7b0NBQ3pELGtGQUFrRjtpQ0FDbkY7NkJBQ0Y7aUNBQU0sSUFBSSxPQUFPLENBQUMscUJBQXFCLEtBQUssT0FBTyxFQUFFO2dDQUNwRCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsOEJBQThCLENBQUM7Z0NBRS9ELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRTtvQ0FDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO29DQUNoRCxnREFBZ0Q7aUNBQ2pEO3FDQUFNLElBQUksZUFBZSxJQUFJLENBQUMsRUFBRTtvQ0FDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO29DQUNuRCxxREFBcUQ7aUNBQ3REO3FDQUFNO29DQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FDakMsZUFBZSxHQUFHLENBQUMsRUFDbkIsQ0FBQyxFQUNELFlBQVksQ0FDYixDQUFDO29DQUNGLHVFQUF1RTtpQ0FDeEU7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7b0JBRUQsSUFDRSxLQUFLLENBQUMsU0FBUyxLQUFLLGdCQUFnQjt3QkFDcEMsS0FBSyxDQUFDLFNBQVMsS0FBSyxpQkFBaUIsRUFDckM7d0JBQ0EsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ25DLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FDL0MsQ0FBQzt3QkFFRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDeEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUU1QixrREFBa0Q7NEJBQ2xELE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7NEJBRTFDLEtBQUssTUFBTSxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUU7Z0NBQ3RELElBQ0UsV0FBVyxDQUFDLFdBQVcsS0FBSyxNQUFNO29DQUNsQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztvQ0FFcEMsU0FBUztnQ0FFWCxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDakQsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssZUFBZSxDQUN0QyxDQUFDO2dDQUVGLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQyxFQUFFO29DQUN2QixXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHO3dDQUNuQyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO3dDQUNyQyxLQUFLLEVBQUUsSUFBSTt3Q0FDWCxTQUFTLEVBQUUsTUFBTTt3Q0FDakIsUUFBUSxFQUFFLFFBQVE7cUNBQ25CLENBQUM7b0NBRUYsTUFBTTtpQ0FDUDs2QkFDRjs0QkFDRCxJQUFJOzRCQUNKLHdEQUF3RDs0QkFDeEQsNkNBQTZDOzRCQUU3QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQzs0QkFFcEQsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FDM0MsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssZUFBZSxDQUN0QyxDQUFDOzRCQUVGLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQyxFQUFFO2dDQUN2QixjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUc7b0NBQzdCLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQztvQ0FDL0IsS0FBSyxFQUFFLElBQUk7b0NBQ1gsU0FBUyxFQUFFLE1BQU07b0NBQ2pCLFFBQVEsRUFBRSxRQUFRO2lDQUNuQixDQUFDOzZCQUNIO3lCQUNGO3dCQUVELElBQUk7cUJBQ0w7aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLGFBQW9CO1FBQ3pDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQzFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FDMUMsQ0FBQztRQUNGLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FDcEQsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksU0FBUyxDQUN0QyxDQUFDO1FBQ0YsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMvQyxNQUFNLEtBQUssR0FBRyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUM7Z0JBRWxELElBQUksS0FBSyxFQUFFO29CQUNULDRDQUE0QztvQkFFNUMseUNBQXlDO29CQUN6QyxtREFBbUQ7b0JBQ25ELEtBQUs7b0JBRUwsOENBQThDO29CQUM5QywrQkFBK0I7b0JBRS9CLGtEQUFrRDtvQkFDbEQsTUFBTSxlQUFlLEdBQUcsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUV2RCxLQUFLLE1BQU0sV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFO3dCQUN0RCxJQUNFLFdBQVcsQ0FBQyxXQUFXLEtBQUssTUFBTTs0QkFDbEMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7NEJBRXBDLFNBQVM7d0JBRVgsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQ2pELENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLGVBQWUsQ0FDdEMsQ0FBQzt3QkFFRixJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsRUFBRTs0QkFDdkIsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRztnQ0FDbkMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztnQ0FDckMsS0FBSyxFQUFFLEtBQUs7Z0NBQ1osU0FBUyxFQUFFLEtBQUs7Z0NBQ2hCLFFBQVEsRUFBRSxTQUFTO2dDQUNuQixNQUFNLEVBQ0osQ0FBQyxlQUFlLEVBQUUsTUFBTSxJQUFJLFFBQVE7b0NBQ2xDLGVBQWUsRUFBRSxVQUFVLENBQUM7b0NBQzlCLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU07b0NBQ3hDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNO29DQUM1QyxDQUFDLENBQUMsRUFBRTtnQ0FDUixNQUFNLEVBQUUsZUFBZSxFQUFFLE1BQU07Z0NBQy9CLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTTs2QkFDcEMsQ0FBQzs0QkFFRixNQUFNO3lCQUNQO3FCQUNGO29CQUNELElBQUk7b0JBQ0osd0RBQXdEO29CQUN4RCw2Q0FBNkM7b0JBRTdDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO29CQUVwRCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsU0FBUyxDQUMzQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxlQUFlLENBQ3RDLENBQUM7b0JBRUYsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUU7d0JBQ3ZCLGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBRzs0QkFDN0IsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDOzRCQUMvQixLQUFLLEVBQUUsS0FBSzs0QkFDWixTQUFTLEVBQUUsS0FBSzs0QkFDaEIsUUFBUSxFQUFFLFNBQVM7NEJBQ25CLE1BQU0sRUFDSixDQUFDLGVBQWUsRUFBRSxNQUFNLElBQUksUUFBUTtnQ0FDbEMsZUFBZSxFQUFFLFVBQVUsQ0FBQztnQ0FDOUIsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTTtnQ0FDeEMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU07Z0NBQzVDLENBQUMsQ0FBQyxFQUFFOzRCQUNSLE1BQU0sRUFBRSxlQUFlLEVBQUUsTUFBTTs0QkFDL0IsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNO3lCQUNwQyxDQUFDO3FCQUNIO29CQUNELElBQUk7b0JBQ0osSUFBSTtpQkFDTDtnQkFDRCxJQUFJO2FBQ0w7U0FDRjtJQUNILENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxhQUFvQjtRQUM1QyxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUMxQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLENBQzFDLENBQUM7UUFDRixJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9DLE1BQU0sTUFBTSxHQUFHLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztnQkFFMUQsSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFO29CQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUV4QixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUMvQyxDQUFDO3dCQUVGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUN4QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBRTVCLGtEQUFrRDs0QkFDbEQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQzs0QkFFMUMsS0FBSyxNQUFNLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRTtnQ0FDdEQsSUFDRSxXQUFXLENBQUMsV0FBVyxLQUFLLE1BQU07b0NBQ2xDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO29DQUVwQyxTQUFTO2dDQUVYLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUNqRCxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxlQUFlLENBQ3RDLENBQUM7Z0NBRUYsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0NBQ3ZCLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUc7d0NBQ25DLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7d0NBQ3JDLEtBQUssRUFBRSxJQUFJO3dDQUNYLFNBQVMsRUFBRSxNQUFNO3dDQUNqQixRQUFRLEVBQUUsU0FBUztxQ0FDcEIsQ0FBQztvQ0FFRixNQUFNO2lDQUNQOzZCQUNGOzRCQUNELElBQUk7NEJBQ0osd0RBQXdEOzRCQUN4RCw2Q0FBNkM7NEJBRTdDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDOzRCQUVwRCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsU0FBUyxDQUMzQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxlQUFlLENBQ3RDLENBQUM7NEJBRUYsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0NBQ3ZCLGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBRztvQ0FDN0IsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDO29DQUMvQixLQUFLLEVBQUUsSUFBSTtvQ0FDWCxTQUFTLEVBQUUsTUFBTTtvQ0FDakIsUUFBUSxFQUFFLFNBQVM7aUNBQ3BCLENBQUM7NkJBQ0g7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsSUFBSTthQUNMO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsYUFBb0I7UUFDcEMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FDMUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUNyQyxDQUFDO1FBRUYsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMvQyxNQUFNLE1BQU0sR0FBRyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7Z0JBRTFELElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRTtvQkFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3RDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFFeEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ25DLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FDL0MsQ0FBQzt3QkFFRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDeEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUU1QixrREFBa0Q7NEJBQ2xELE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7NEJBRTFDLEtBQUssTUFBTSxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUU7Z0NBQ3RELElBQ0UsV0FBVyxDQUFDLFdBQVcsS0FBSyxNQUFNO29DQUNsQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztvQ0FFcEMsU0FBUztnQ0FFWCxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDakQsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssZUFBZSxDQUN0QyxDQUFDO2dDQUVGLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQyxFQUFFO29DQUN2QixXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHO3dDQUNuQyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO3dDQUNyQyxLQUFLLEVBQUUsSUFBSTt3Q0FDWCxTQUFTLEVBQUUsTUFBTTt3Q0FDakIsUUFBUSxFQUFFLElBQUk7cUNBQ2YsQ0FBQztvQ0FFRixNQUFNO2lDQUNQOzZCQUNGOzRCQUNELElBQUk7NEJBQ0osd0RBQXdEOzRCQUN4RCw2Q0FBNkM7NEJBRTdDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDOzRCQUVwRCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsU0FBUyxDQUMzQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxlQUFlLENBQ3RDLENBQUM7NEJBRUYsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0NBQ3ZCLGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBRztvQ0FDN0IsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDO29DQUMvQixLQUFLLEVBQUUsSUFBSTtvQ0FDWCxTQUFTLEVBQUUsTUFBTTtvQ0FDakIsUUFBUSxFQUFFLElBQUk7aUNBQ2YsQ0FBQzs2QkFDSDt5QkFDRjtxQkFDRjtvQkFDRCxJQUFJO2lCQUNMO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FDZixZQUFpQixFQUNqQixXQUFnQixFQUNoQixZQUFvQixFQUNwQixXQUFtQjtRQUVuQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFbEUsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVEO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLFNBQWM7UUFDL0IsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM3QyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLENBQ3ZFLEVBQUUsUUFBUSxDQUFDO1FBQ1osTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUNuRCxDQUFDLENBQ0YsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQ25DLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzdELENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzdDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FDdkUsRUFBRSxRQUFRLENBQUM7UUFDWixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUNuQyxDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM1RCxDQUFDLENBQ0YsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQ25DLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLEdBQUcsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsRUFDcEQsQ0FBQyxDQUNGLENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDN0MsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUN2RSxFQUFFLFFBQVEsQ0FBQztRQUNaLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQ25DLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLEdBQUcsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsRUFDbkQsQ0FBQyxDQUNGLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUNuQyxDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM3RCxDQUFDLENBQ0YsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM3QyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLENBQ3ZFLEVBQUUsUUFBUSxDQUFDO1FBQ1osTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDNUQsQ0FBQyxDQUNGLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUNuQyxDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixHQUFHLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLEVBQ3BELENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzdDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FDdkUsRUFBRSxRQUFRLENBQUM7UUFDWixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUNuQyxDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM1RCxDQUFDLENBQ0YsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQ25DLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLEdBQUcsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsRUFDcEQsQ0FBQyxDQUNGLENBQUM7UUFDRixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUNkLFNBQVMsQ0FBQyxNQUFNO1lBQ2hCLFNBQVMsQ0FBQyxNQUFNLENBQ2QsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDNUQsQ0FBQyxDQUNGLENBQUM7UUFDSixNQUFNLFVBQVUsR0FDZCxDQUFDO1lBQ0QsU0FBUyxDQUFDLE1BQU0sQ0FDZCxDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM3RCxDQUFDLENBQ0YsQ0FBQztRQUNKLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVyQixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ3JCLFlBQVksSUFBSSxVQUFVLENBQUMsTUFBTSxDQUMvQixDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM1RCxDQUFDLENBQ0YsQ0FBQztTQUNIO1FBRUQsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDMUMsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7Z0JBQzFDLFlBQVksSUFBSSxVQUFVLENBQUMsTUFBTSxDQUMvQixDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM1RCxDQUFDLENBQ0YsQ0FBQzthQUNIO2lCQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtnQkFDNUIsWUFBWSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQy9CLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzVELENBQUMsQ0FDRixDQUFDO2FBQ0g7aUJBQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUM1QixZQUFZLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FDL0IsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDNUQsQ0FBQyxDQUNGLENBQUM7YUFDSDtTQUNGO1FBRUQsd0JBQXdCO1FBQ3hCLHlJQUF5STtRQUN6SSxJQUFJO1FBRUosSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDekIsV0FBVyxFQUNYLFVBQVUsRUFDVixXQUFXLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FDdEMsQ0FBQztRQUNGLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUNyQixZQUFZLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FDL0IsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDN0QsQ0FBQyxDQUNGLENBQUM7U0FDSDtRQUVELElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUNyQixZQUFZLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FDL0IsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDN0QsQ0FBQyxDQUNGLENBQUM7U0FDSDtRQUVELElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUNwQixZQUFZO2dCQUNWLENBQUM7b0JBQ0QsU0FBUyxDQUFDLE1BQU0sQ0FDZCxDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM3RCxDQUFDLENBQ0YsQ0FBQztTQUNMO1FBRUQsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUMvQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxhQUFhLEtBQUssQ0FBQyxFQUFFO2dCQUNqRSxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDbEQ7aUJBQU0sSUFDTCxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU07Z0JBQzlCLE9BQU8sQ0FBQyxhQUFhLEtBQUssQ0FBQyxFQUMzQjtnQkFDQSxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDbEQ7aUJBQU0sSUFDTCxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU07Z0JBQzlCLE9BQU8sQ0FBQyxhQUFhLEtBQUssQ0FBQyxFQUMzQjtnQkFDQSxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDbEQ7aUJBQU0sSUFDTCxDQUFDLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTTtnQkFDN0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMvRCxDQUFDLE9BQU8sQ0FBQyxXQUFXLEtBQUssVUFBVSxJQUFJLE9BQU8sQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQ25FO2dCQUNBLElBQUksUUFBUSxHQUFHLFVBQVUsRUFBRSxNQUFNO29CQUMvQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzt3QkFDdkIsVUFBVSxDQUFDLE1BQU0sQ0FDZixDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM3RCxDQUFDLENBQ0Y7b0JBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFTixNQUFNLFFBQVEsR0FBRyxVQUFVLEVBQUUsTUFBTTtvQkFDakMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7d0JBQ3ZCLFVBQVUsQ0FBQyxNQUFNLENBQ2YsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDN0QsQ0FBQyxDQUNGO29CQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRU4sTUFBTSxLQUFLLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQztnQkFDbEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUVyRCxNQUFNLE9BQU8sR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixNQUFNLE9BQU8sR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDO2dCQUUvQixJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQztnQkFDdkIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDO2dCQUV2QixJQUFJLE9BQU8sSUFBSSxPQUFPLEVBQUU7b0JBQ3RCLE9BQU8sR0FBRyxPQUFPLEdBQUcsY0FBYyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7aUJBQ3ZEO3FCQUFNLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUM5QixPQUFPLEdBQUcsUUFBUSxDQUFDO29CQUNuQixPQUFPLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztvQkFDekIsY0FBYyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7aUJBQ2pDO3FCQUFNLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxFQUFFO29CQUM5QixPQUFPLEdBQUcsUUFBUSxDQUFDO29CQUNuQixPQUFPLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztvQkFDekIsY0FBYyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7aUJBQ2pDO3FCQUFNO29CQUNMLGNBQWMsR0FBRyxVQUFVLENBQUM7aUJBQzdCO2dCQUVELElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLGFBQWEsS0FBSyxDQUFDLEVBQUU7b0JBQ2pFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDN0M7cUJBQU0sSUFDTCxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU07b0JBQzlCLE9BQU8sQ0FBQyxhQUFhLEtBQUssQ0FBQyxFQUMzQjtvQkFDQSxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzdDO3FCQUFNLElBQ0wsT0FBTyxDQUFDLFdBQVcsS0FBSyxVQUFVO29CQUNsQyxPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsRUFDM0I7b0JBQ0EsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUNwRDthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFFdEIsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUMvQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxhQUFhLEtBQUssQ0FBQyxFQUFFO2dCQUNqRSxJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLENBQVMsRUFBRSxFQUFFO29CQUNuRCxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDN0QsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO3dCQUNyQixRQUFRLElBQUksT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7cUJBQ3pEO29CQUNELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdkQsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2RCxPQUFPLENBQUMscUJBQXFCLEdBQUcsTUFBTSxDQUFDO29CQUN2QyxPQUFPLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO29CQUNwQyxPQUFPLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztvQkFFN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7d0JBQ2xCLDJDQUEyQzt3QkFDM0MsT0FBTyxDQUFDLDhCQUE4QixHQUFHLG1CQUFtQixFQUFFLENBQUM7cUJBQ2hFO3lCQUFNO3dCQUNMLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO3dCQUM3QixPQUFPLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO3FCQUMvQztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNLElBQ0wsT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNO2dCQUM5QixPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsRUFDM0I7Z0JBQ0EsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUN6QyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLENBQ3ZFLEVBQUUsUUFBUSxDQUFDO2dCQUNaLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDakIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsQ0FBUyxFQUFFLEVBQUU7b0JBQ25ELFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM5RCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7d0JBQ3JCLFFBQVEsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztxQkFDMUQ7b0JBQ0QsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUMxQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQ3ZELENBQUM7b0JBQ0YsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2RCxPQUFPLENBQUMscUJBQXFCLEdBQUcsTUFBTSxDQUFDO29CQUN2QyxPQUFPLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO29CQUNwQyxPQUFPLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztvQkFFN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7d0JBQ2xCLDJDQUEyQzt3QkFDM0MsT0FBTyxDQUFDLDhCQUE4QixHQUFHLG1CQUFtQixFQUFFLENBQUM7cUJBQ2hFO3lCQUFNO3dCQUNMLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO3dCQUM3QixPQUFPLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO3FCQUMvQztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNLElBQ0wsT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNO2dCQUM5QixPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsRUFDM0I7Z0JBQ0EsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDakIsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3pDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FDdkUsRUFBRSxRQUFRLENBQUM7Z0JBQ1osT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsQ0FBUyxFQUFFLEVBQUU7b0JBQ25ELFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM3RCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7d0JBQ3JCLFFBQVEsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztxQkFDekQ7b0JBQ0QsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2RCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQzFDLFFBQVEsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FDeEQsQ0FBQztvQkFDRixPQUFPLENBQUMscUJBQXFCLEdBQUcsTUFBTSxDQUFDO29CQUN2QyxPQUFPLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO29CQUNwQyxPQUFPLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztvQkFFN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7d0JBQ2xCLDJDQUEyQzt3QkFDM0MsT0FBTyxDQUFDLDhCQUE4QixHQUFHLG1CQUFtQixFQUFFLENBQUM7cUJBQ2hFO3lCQUFNO3dCQUNMLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO3dCQUM3QixPQUFPLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO3FCQUMvQztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNLElBQ0wsT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNO2dCQUM5QixPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsRUFDM0I7Z0JBQ0EsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDakIsSUFBSSxRQUFRLEdBQ1YsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzFCLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FDWixJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FDMUQsRUFBRSxRQUFRO29CQUNYLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUMxQixDQUFDLElBQVMsRUFBRSxFQUFFLENBQ1osSUFBSSxDQUFDLFdBQVcsS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLENBQzlELEVBQUUsUUFBUSxDQUFDO2dCQUVkLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLENBQVMsRUFBRSxFQUFFO29CQUNuRCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FDMUMsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQzlELENBQUM7b0JBQ0YsT0FBTyxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztvQkFDdkMsT0FBTyxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FBQztvQkFDcEMsT0FBTyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7b0JBRTdCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO3dCQUNsQiwyQ0FBMkM7d0JBQzNDLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO3FCQUNoRTt5QkFBTTt3QkFDTCxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzt3QkFDN0IsT0FBTyxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQztxQkFDL0M7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTSxJQUNMLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTTtnQkFDOUIsT0FBTyxDQUFDLGFBQWEsS0FBSyxDQUFDLEVBQzNCO2dCQUNBLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDakIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsQ0FBUyxFQUFFLEVBQUU7b0JBQ25ELFFBQVE7d0JBQ04sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7NEJBQ2xELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO29CQUMvQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdkQsT0FBTyxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztvQkFDdkMsT0FBTyxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FBQztvQkFDcEMsT0FBTyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7b0JBRTdCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO3dCQUNsQiwyQ0FBMkM7d0JBQzNDLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO3FCQUNoRTt5QkFBTTt3QkFDTCxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzt3QkFDN0IsT0FBTyxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQztxQkFDL0M7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDN0QsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTVDLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBRTdCLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEtBQWEsRUFBRSxFQUFFO1lBQzlELE1BQU0sTUFBTSxHQUNWLFlBQVksR0FBRyxDQUFDO2dCQUNoQixDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQztZQUMxRSxNQUFNLE1BQU0sR0FDVixZQUFZLEdBQUcsQ0FBQztnQkFDaEIsU0FBUyxHQUFHLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQztZQUU3RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2QyxNQUFNLFFBQVEsR0FBRyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFekMsTUFBTSxRQUFRLEdBQ1osTUFBTSxHQUFHLFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFDcEUsTUFBTSxRQUFRLEdBQ1osTUFBTSxHQUFHLFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFFckUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2RCxPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztZQUU5QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDbEIsMkNBQTJDO2dCQUMzQyxPQUFPLENBQUMsOEJBQThCLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQzthQUNqRTtpQkFBTTtnQkFDTCxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDN0IsT0FBTyxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQzthQUMvQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxTQUFjO1FBQzNCLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztRQUV0QixRQUFRO1FBQ1IsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUMvQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTSxFQUFFO2dCQUNsQyxJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQztnQkFFNUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtvQkFDeEMsT0FBTyxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztvQkFDdkMsT0FBTyxDQUFDLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7b0JBQ3hELE9BQU8sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO29CQUU3QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTt3QkFDbEIsMkNBQTJDO3dCQUMzQyxPQUFPLENBQUMsOEJBQThCLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztxQkFDaEU7eUJBQU07d0JBQ0wsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7d0JBQzdCLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUM7cUJBQy9DO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILHdCQUF3QjtRQUN4QixJQUFJLG9CQUFvQixHQUFHLENBQUMsQ0FBQztRQUM3QixTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO1lBQy9DLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1lBRTlCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO2dCQUNsQiwyQ0FBMkM7Z0JBQzNDLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO2FBQ2pFO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUM3QixPQUFPLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO2FBQy9DO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVU7UUFDeEIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUMzQyxDQUFDO0lBRUQsb0RBQW9EO0lBQzVDLGVBQWUsQ0FBQyxhQUFxQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FDeEMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxhQUFhLEtBQUssYUFBYSxDQUMxRSxDQUFDO0lBQ0osQ0FBQztJQUVELDhEQUE4RDtJQUN0RCxlQUFlLENBQ3JCLFNBQWlCO1FBRWpCLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFNUIsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsSUFBSSxFQUFFLEVBQUU7WUFDekQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDbkMsS0FBSyxNQUFNLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO29CQUN0QyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUzt3QkFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztpQkFDcEU7YUFDRjtTQUNGO1FBRUQsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsSUFBSSxFQUFFLEVBQUU7WUFDekQsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLFNBQVM7Z0JBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQzNFO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFlLEVBQUUsU0FBa0IsSUFBSTtRQUM1RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtZQUNqQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVU7YUFDWixnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNuRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUM7WUFDVCxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQVEsRUFBRSxFQUFFO2dCQUN2QixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7b0JBQ25DLE9BQU87aUJBQ1I7Z0JBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO29CQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FDOUIsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNyQixDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FDbkQsQ0FDRixDQUFDO2lCQUNIO3FCQUFNO29CQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3pEO2dCQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNoRCxTQUFTLEVBQUUsS0FBSztpQkFDakIsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztnQkFFOUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLElBQUk7b0JBQ0YsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO3dCQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO3dCQUM1RCxJQUFJLENBQUMsZ0JBQWdCLENBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFDbEIsRUFBRSxDQUNIO3FCQUNGLENBQUMsQ0FBQztpQkFDSjtnQkFBQyxNQUFNLEdBQUU7Z0JBRVYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUVuQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxNQUFNLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztpQkFDaEQ7Z0JBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2dCQUNuQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDVixDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQzNELENBQUM7U0FDRixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsU0FBYztRQUMvQixNQUFNLGdCQUFnQixHQUFHO1lBQ3ZCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsZUFBZSxJQUFJLEVBQUUsQ0FBQztZQUNyQyxHQUFHLENBQUMsU0FBUyxFQUFFLGFBQWEsSUFBSSxFQUFFLENBQUM7U0FDcEMsQ0FBQztRQUVGLFNBQVMsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUU7WUFDNUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxHQUFHLGdCQUFnQixDQUFDO0lBQ3RDLENBQUM7SUFFRCxXQUFXLENBQUMsU0FBa0IsSUFBSTtRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUNuRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUVsQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDakQsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sRUFBRTtvQkFDL0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO3dCQUN0QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7d0JBQzdCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtxQkFDbEMsQ0FBQyxDQUFDO29CQUVILElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7d0JBQ3JDLElBQUksT0FBTyxFQUFFLFdBQVcsS0FBSyxPQUFPOzRCQUFFLE9BQU87d0JBQzdDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7NEJBQ3JDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVzs0QkFDaEMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlOzRCQUN4QyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7eUJBQ2pCLENBQUMsQ0FBQzt3QkFDRixRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDN0QsQ0FBQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTt3QkFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7NEJBQzdCLElBQUksRUFBRTtnQ0FDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxXQUFXLENBQUM7b0NBQzVELENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVztvQ0FDakIsQ0FBQyxDQUFDLFFBQVE7NkJBQ2I7NEJBQ0QsVUFBVSxFQUFFO2dDQUNWLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQztvQ0FDNUQsQ0FBQyxDQUFDLEVBQUU7b0NBQ0osQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXOzZCQUNwQjt5QkFDRixDQUFDLENBQUM7d0JBQ0YsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzlELENBQUMsQ0FBQyxDQUFDO29CQUVILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNsQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO29CQUNyRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO3dCQUNyQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7d0JBQ2hDLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZTt3QkFDeEMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO3FCQUNqQixDQUFDLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFlLENBQUMsSUFBSSxDQUN0RCxZQUFZLENBQ2IsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNsRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQzt3QkFDN0IsSUFBSSxFQUFFOzRCQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQztnQ0FDNUQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXO2dDQUNqQixDQUFDLENBQUMsUUFBUTt5QkFDYjt3QkFDRCxVQUFVLEVBQUU7NEJBQ1YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDO2dDQUM1RCxDQUFDLENBQUMsRUFBRTtnQ0FDSixDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVc7eUJBQ3BCO3FCQUNGLENBQUMsQ0FBQztvQkFFRixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBZSxDQUFDLElBQUksQ0FDM0QsUUFBUSxDQUNULENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2hDLGlCQUFpQjtJQUNuQixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUVyRSxJQUFJLElBQUksR0FBRyxRQUFRLEVBQ2pCLElBQUksR0FBRyxRQUFRLEVBQ2YsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUNoQixJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFFbkIsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUU7WUFDekIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ25DLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQy9DO1FBRUQsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJO1lBQ1YsR0FBRyxFQUFFLElBQUk7WUFDVCxLQUFLLEVBQUUsSUFBSSxHQUFHLElBQUk7WUFDbEIsTUFBTSxFQUFFLElBQUksR0FBRyxJQUFJO1NBQ3BCLENBQUM7SUFDSixDQUFDO0lBRU8seUJBQXlCLENBQUMsUUFBUSxHQUFHLEdBQUc7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLDBCQUEwQjtZQUFFLE9BQU87UUFFNUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXhDLG1DQUFtQztRQUNuQyxNQUFNLE1BQU0sR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUN0QyxNQUFNLE1BQU0sR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxjQUFjO1FBRWpFLDJDQUEyQztRQUMzQyxNQUFNLFNBQVMsR0FBRztZQUNoQixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDeEMsQ0FBQztRQUVuQixTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsU0FBUztRQUNwQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsU0FBUztRQUVwQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxXQUFXO1FBQ3ZGLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLFdBQVc7UUFFdkYsaURBQWlEO1FBQ2pELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFrQixDQUFrQixDQUFDO1FBRXRFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2xCLFVBQVUsRUFBRSxDQUFDO1lBQ2IsUUFBUSxFQUFFLENBQUM7WUFDWCxRQUFRO1lBQ1IsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFDckMsUUFBUSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7Z0JBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWtCLENBQUM7Z0JBRTNDLDRCQUE0QjtnQkFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQzVELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUM1RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDNUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBRTVELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNqQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0I7UUFDdEIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN4RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVwRCxJQUFJLElBQUksQ0FBQztZQUVULE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSztnQkFDM0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ0osQ0FBQyxFQUFFLENBQUM7Z0JBQ0osSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDO1lBRUYsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWxFLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUU7Z0JBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVELElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDdkU7aUJBQU0sSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRTtnQkFDN0MsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFlBQVksQ0FDZixJQUFJLENBQUMsTUFBTSxFQUNYLENBQUMsRUFDRCxDQUFDLEVBQ0QsVUFBVSxFQUNWLFdBQVcsRUFDWCxTQUFTLEVBQ1QsT0FBTyxDQUNSLENBQUM7YUFDSDtZQUVELElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUU7Z0JBQ2xDLE1BQU0sYUFBYSxHQUFtQixFQUFFLENBQUM7Z0JBRXpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDbEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDcEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDckIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFDMUIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDOUIsQ0FBQztvQkFDRixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNyQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUMxQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUM5QixDQUFDO29CQUNGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ2pDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQ2pDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ2pDLENBQUM7b0JBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDaEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFDaEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDaEMsQ0FBQztvQkFFRixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQ3ZDLElBQUksQ0FBQyxNQUFNLEVBQ1gsQ0FBQyxFQUNELENBQUMsRUFDRCxhQUFhLEVBQ2IsWUFBWSxFQUNaLE9BQU8sQ0FDUixDQUFDO29CQUNGLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBMEIsQ0FBQyxDQUFDO2lCQUNoRDtnQkFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO29CQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDekIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFcEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsYUFBYSxDQUFDLEVBQUU7d0JBQy9ELFdBQVcsRUFBRSxJQUFJO3dCQUNqQixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsY0FBYyxFQUFFLElBQUk7cUJBQ3JCLENBQUMsQ0FBQztvQkFFSCxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUNoQztnQkFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3ZELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDL0QsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUMvRCxNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO29CQUM5QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNyQixZQUFZLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUN0QyxZQUFZLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUN0QyxDQUFDO29CQUNGLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3JCLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQ3JDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQ3JDLENBQUM7b0JBRUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUNoRCxJQUFJLENBQUMsTUFBTSxFQUNYLENBQUMsRUFDRCxDQUFDLEVBQ0QsQ0FBQyxFQUNELENBQUMsRUFDRCxDQUFDLEVBQ0QsWUFBWSxDQUNiLENBQUM7b0JBRUYsa0RBQWtEO2lCQUNuRDthQUNGO1NBQ0Y7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzlELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3JCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQzFCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQzlCLENBQUM7WUFDRixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNyQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUMxQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUM5QixDQUFDO1lBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDakMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFDakMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FDakMsQ0FBQztZQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ2hDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQ2hDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQ2hDLENBQUM7WUFDRixNQUFNLElBQUksQ0FBQyxXQUFXLENBQ3BCLElBQUksQ0FBQyxNQUFNLEVBQ1gsQ0FBQyxFQUNELENBQUMsRUFDRCxhQUFhLEVBQ2IsWUFBWSxFQUNaLE9BQU8sQ0FDUixDQUFDO1NBQ0g7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzlELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDL0QsTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztZQUM5QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNyQixZQUFZLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUN0QyxZQUFZLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUN0QyxDQUFDO1lBQ0YsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDckIsWUFBWSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFDckMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDckMsQ0FBQztZQUVGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDaEQsSUFBSSxDQUFDLE1BQU0sRUFDWCxDQUFDLEVBQ0QsQ0FBQyxFQUNELENBQUMsRUFDRCxDQUFDLEVBQ0QsQ0FBQyxFQUNELFlBQVksQ0FDYixDQUFDO1NBQ0g7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUNaLE1BQXFCLEVBQ3JCLENBQVMsRUFDVCxDQUFTLEVBQ1QsTUFBYyxFQUNkLEtBQWEsRUFDYixXQUFnQjtRQUVoQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDakIsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzVCLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUM5QixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDN0IsSUFBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQzdELFdBQVcsQ0FBQyxhQUNkLEVBQUUsQ0FBQztRQUVILE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQztZQUMzQixJQUFJLEVBQUUsQ0FBQztZQUNQLEdBQUcsRUFBRSxDQUFDO1lBQ04sS0FBSztZQUNMLE1BQU07WUFDTixFQUFFLEVBQUUsTUFBTTtZQUNWLEVBQUUsRUFBRSxNQUFNO1lBQ1YsSUFBSSxFQUFFLFNBQVM7WUFDZixNQUFNLEVBQUUsV0FBVztZQUNuQixXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsS0FBSztZQUNqQixhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sT0FBTyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDM0IsTUFBTSxVQUFVLEdBQUcsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUVsQyxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ3hDLElBQUksRUFBRSxPQUFPO1lBQ2IsR0FBRyxFQUFFLE9BQU87WUFDWixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLElBQUksRUFBRSxVQUFVO1lBQ2hCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLFVBQVUsRUFBRSxLQUFLO1NBQ2xCLENBQUMsQ0FBQztRQUVILE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNwQixNQUFNLFFBQVEsR0FBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFaEQsSUFBSSxVQUFVLEVBQUU7WUFDZCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNuQyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDcEIsTUFBTSxZQUFZLEdBQUcsT0FBTyxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWpELElBQUksWUFBWSxHQUFHLFNBQVMsR0FBRyxTQUFTLEVBQUU7Z0JBQ3hDLFFBQVEsQ0FBQyxJQUFJLENBQ1gsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQUU7b0JBQzNELE1BQU0sRUFBRSxVQUFVO29CQUNsQixXQUFXLEVBQUUsQ0FBQztvQkFDZCxVQUFVLEVBQUUsS0FBSztpQkFDbEIsQ0FBQyxFQUNGLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQztvQkFDbEIsSUFBSSxFQUFFLE9BQU87b0JBQ2IsR0FBRyxFQUFFLFNBQVM7b0JBQ2QsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLE1BQU0sRUFBRSxTQUFTO29CQUNqQixLQUFLLEVBQUUsQ0FBQztvQkFDUixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixVQUFVLEVBQUUsS0FBSztpQkFDbEIsQ0FBQyxDQUNILENBQUM7YUFDSDtZQUVELE1BQU0saUJBQWlCLEdBQUcsT0FBTyxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RELE1BQU0sZUFBZSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFFbkMsSUFBSSxlQUFlLEdBQUcsaUJBQWlCLEdBQUcsU0FBUyxFQUFFO2dCQUNuRCxRQUFRLENBQUMsSUFBSSxDQUNYLElBQUksTUFBTSxDQUFDLElBQUksQ0FDYixDQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLEVBQ3REO29CQUNFLE1BQU0sRUFBRSxVQUFVO29CQUNsQixXQUFXLEVBQUUsQ0FBQztvQkFDZCxVQUFVLEVBQUUsS0FBSztpQkFDbEIsQ0FDRixFQUNELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQztvQkFDbEIsSUFBSSxFQUFFLE9BQU87b0JBQ2IsR0FBRyxFQUFFLGVBQWU7b0JBQ3BCLEtBQUssRUFBRSxTQUFTO29CQUNoQixNQUFNLEVBQUUsU0FBUztvQkFDakIsS0FBSyxFQUFFLEdBQUc7b0JBQ1YsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixPQUFPLEVBQUUsS0FBSztvQkFDZCxVQUFVLEVBQUUsS0FBSztpQkFDbEIsQ0FBQyxDQUNILENBQUM7YUFDSDtTQUNGO2FBQU07WUFDTCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNuQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7WUFDMUIsTUFBTSxhQUFhLEdBQUcsT0FBTyxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWxELElBQUksYUFBYSxHQUFHLGVBQWUsR0FBRyxTQUFTLEVBQUU7Z0JBQy9DLFFBQVEsQ0FBQyxJQUFJLENBQ1gsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLEVBQUU7b0JBQ2xFLE1BQU0sRUFBRSxVQUFVO29CQUNsQixXQUFXLEVBQUUsQ0FBQztvQkFDZCxVQUFVLEVBQUUsS0FBSztpQkFDbEIsQ0FBQyxFQUNGLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQztvQkFDbEIsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLEdBQUcsRUFBRSxPQUFPO29CQUNaLEtBQUssRUFBRSxTQUFTO29CQUNoQixNQUFNLEVBQUUsU0FBUztvQkFDakIsS0FBSyxFQUFFLENBQUMsRUFBRTtvQkFDVixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixVQUFVLEVBQUUsS0FBSztpQkFDbEIsQ0FBQyxDQUNILENBQUM7YUFDSDtZQUVELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sY0FBYyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7WUFFakMsSUFBSSxjQUFjLEdBQUcsZ0JBQWdCLEdBQUcsU0FBUyxFQUFFO2dCQUNqRCxRQUFRLENBQUMsSUFBSSxDQUNYLElBQUksTUFBTSxDQUFDLElBQUksQ0FDYixDQUFDLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLEVBQ3BEO29CQUNFLE1BQU0sRUFBRSxVQUFVO29CQUNsQixXQUFXLEVBQUUsQ0FBQztvQkFDZCxVQUFVLEVBQUUsS0FBSztpQkFDbEIsQ0FDRixFQUNELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQztvQkFDbEIsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLEdBQUcsRUFBRSxPQUFPO29CQUNaLEtBQUssRUFBRSxTQUFTO29CQUNoQixNQUFNLEVBQUUsU0FBUztvQkFDakIsS0FBSyxFQUFFLEVBQUU7b0JBQ1QsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUMsQ0FDSCxDQUFDO2FBQ0g7U0FDRjtRQUVELE1BQU0sYUFBYSxHQUFHOzthQUViLENBQUM7UUFFVixJQUFJLFNBQVMsR0FBUSxNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVuRSxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUN4QyxTQUFTLENBQUMsT0FBTyxFQUNqQixTQUFTLENBQUMsT0FBTyxDQUNsQixDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUM5QixNQUFNLFdBQVcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRS9CLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUxQixJQUFJLFVBQVUsRUFBRTtZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUNWLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixPQUFPLEVBQUUsUUFBUTthQUNsQixDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDVixJQUFJLEVBQUUsV0FBVztnQkFDakIsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLEtBQUssRUFBRSxDQUFDO2dCQUNSLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixPQUFPLEVBQUUsUUFBUTthQUNsQixDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDVixPQUFPLEVBQUUsS0FBSztZQUNkLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsV0FBVyxFQUFFLFNBQVM7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM5QixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFO2dCQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQ3pCO1lBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUNyQyxXQUFXLENBQUMsUUFBUSxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQztZQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2QixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ3ZDLElBQUksRUFBRSxDQUFDO1lBQ1AsR0FBRyxFQUFFLENBQUM7WUFDTixXQUFXLEVBQUUsSUFBSTtZQUNqQixZQUFZLEVBQUUsVUFBVTtZQUN4QixZQUFZLEVBQUUsQ0FBQyxVQUFVO1lBQ3pCLHNCQUFzQjtZQUN0QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPO1lBQ25DLE9BQU8sRUFBRSxJQUFJO1lBQ2IsV0FBVyxFQUFFLFNBQVM7WUFDdEIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLO1lBQ3hCLGNBQWMsRUFBRSxJQUFJO1NBQ3JCLENBR0EsQ0FBQztRQUVGLEtBQUssQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQztRQUN4QyxLQUFLLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztRQUV6QixxQ0FBcUM7UUFDckMsd0NBQXdDO1FBQ3hDLG9EQUFvRDtRQUNwRCw0RUFBNEU7UUFDNUUsMkNBQTJDO1FBRTNDLG1DQUFtQztRQUNuQyxzQkFBc0I7UUFDdEIsaUJBQWlCO1FBQ2pCLHdCQUF3QjtRQUN4Qix5Q0FBeUM7UUFDekMsbURBQW1EO1FBQ25ELFdBQVc7UUFDWCxvQ0FBb0M7UUFFcEMsOENBQThDO1FBQzlDLHNEQUFzRDtRQUV0RCx5REFBeUQ7UUFDekQsMkJBQTJCO1FBQzNCLDBCQUEwQjtRQUMxQiw4QkFBOEI7UUFDOUIsVUFBVTtRQUVWLG1DQUFtQztRQUNuQyx1REFBdUQ7UUFDdkQsc0RBQXNEO1FBQ3RELHFDQUFxQztRQUNyQyw0Q0FBNEM7UUFFNUMsb0VBQW9FO1FBQ3BFLDREQUE0RDtRQUM1RCwyREFBMkQ7UUFDM0QsMERBQTBEO1FBRTFELDBDQUEwQztRQUMxQywyREFBMkQ7UUFDM0QsMERBQTBEO1FBQzFELCtCQUErQjtRQUUvQixzQ0FBc0M7UUFDdEMsNERBQTREO1FBQzVELE1BQU07UUFDTixNQUFNO1FBRU4sMkNBQTJDO1FBQzNDLGlDQUFpQztRQUNqQywwQkFBMEI7UUFDMUIsU0FBUztRQUNULDREQUE0RDtRQUM1RCw4Q0FBOEM7UUFDOUMsK0NBQStDO1FBQy9DLDRDQUE0QztRQUM1QyxTQUFTO1FBQ1QsZUFBZTtRQUNmLG9DQUFvQztRQUNwQyxrQkFBa0I7UUFDbEIsa0JBQWtCO1FBQ2xCLG9DQUFvQztRQUNwQyxTQUFTO1FBQ1QsUUFBUTtRQUVSLDBDQUEwQztRQUMxQyxrQ0FBa0M7UUFDbEMsOERBQThEO1FBQzlELGtCQUFrQjtRQUNsQix5REFBeUQ7UUFDekQsaUNBQWlDO1FBQ2pDLE9BQU87UUFFUCxpRUFBaUU7UUFDakUsa0RBQWtEO1FBQ2xELCtCQUErQjtRQUMvQixvQ0FBb0M7UUFDcEMsc0NBQXNDO1FBQ3RDLFNBQVM7UUFDVCwrQkFBK0I7UUFDL0Isb0NBQW9DO1FBQ3BDLHNDQUFzQztRQUN0QyxTQUFTO1FBQ1QsMkNBQTJDO1FBQzNDLDJDQUEyQztRQUMzQyx5Q0FBeUM7UUFDekMsU0FBUztRQUNULDBDQUEwQztRQUMxQywwQ0FBMEM7UUFDMUMsd0NBQXdDO1FBQ3hDLFNBQVM7UUFFVCw4QkFBOEI7UUFDOUIscUJBQXFCO1FBQ3JCLFdBQVc7UUFDWCxXQUFXO1FBQ1gsdUJBQXVCO1FBQ3ZCLHNCQUFzQjtRQUN0QixnQkFBZ0I7UUFDaEIsU0FBUztRQUNULE1BQU07UUFDTiwrQkFBK0I7UUFDL0IsS0FBSztRQUVMLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEIsZ0NBQWdDO1FBQ2hDLElBQUssV0FBbUIsRUFBRSxRQUFRLEVBQUU7WUFDbEMsSUFBSTtnQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ2hDO1lBQUMsTUFBTSxHQUFFO1lBQ1YsT0FBUSxXQUFtQixDQUFDLFFBQVEsQ0FBQztTQUN0QztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQ2YsTUFBcUIsRUFDckIsQ0FBUyxFQUNULENBQVMsRUFDVCxNQUFjLEVBQ2QsS0FBYSxFQUNiLFdBQWdCO1FBRWhCLElBQUksWUFBaUIsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDOUQsWUFBWSxHQUFHO2dCQUNiLE9BQU8sRUFDTCxXQUFXLENBQUMsTUFBTSxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsVUFBVSxJQUFJLFFBQVE7b0JBQzVELENBQUMsQ0FBQyxTQUFTO29CQUNYLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLE9BQU87d0JBQy9CLENBQUMsQ0FBQyxTQUFTO3dCQUNYLENBQUMsQ0FBQyxTQUFTO2dCQUNmLElBQUksRUFDRixXQUFXLENBQUMsTUFBTSxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsVUFBVSxJQUFJLFFBQVE7b0JBQzVELENBQUMsQ0FBQyxTQUFTO29CQUNYLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLE9BQU87d0JBQy9CLENBQUMsQ0FBQyxTQUFTO3dCQUNYLENBQUMsQ0FBQyxTQUFTO2dCQUNmLE1BQU0sRUFDSixXQUFXLENBQUMsTUFBTSxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsVUFBVSxJQUFJLFFBQVE7b0JBQzVELENBQUMsQ0FBQyxTQUFTO29CQUNYLENBQUMsQ0FBQyxTQUFTO2FBQ2hCLENBQUM7U0FDSDtRQUNELElBQUksV0FBVyxDQUFDLFdBQVcsS0FBSyxPQUFPO1lBQUUsT0FBTztRQUNoRCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDakIsTUFBTSxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3BDLElBQUksRUFBRSxDQUFDO1lBQ1AsR0FBRyxFQUFFLENBQUM7WUFDTixLQUFLLEVBQUUsS0FBSztZQUNaLE1BQU0sRUFBRSxNQUFNO1lBQ2QsRUFBRSxFQUFFLE1BQU07WUFDVixFQUFFLEVBQUUsTUFBTTtZQUNWLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxJQUFJLFNBQVM7WUFDMUMsV0FBVyxFQUFFLElBQUk7WUFDakIsSUFBSSxFQUFFLE9BQU87U0FDZCxDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQzlCLE1BQU0sU0FBUyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRXJDLE1BQU0sWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQztZQUNuQyxJQUFJLEVBQUUsSUFBSTtZQUNWLEdBQUcsRUFBRSxJQUFJO1lBQ1QsS0FBSyxFQUFFLFFBQVE7WUFDZixNQUFNLEVBQUUsU0FBUztZQUNqQixFQUFFLEVBQUUsTUFBTTtZQUNWLEVBQUUsRUFBRSxNQUFNO1lBQ1YsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLElBQUksU0FBUztZQUMxQyxXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUUsT0FBTztTQUNkLENBQUMsQ0FBQztRQUVILE1BQU0sY0FBYyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUNqQyxLQUFLLElBQUksR0FBRyxNQUFNLElBQUksSUFBSTtZQUNwQixJQUFJLEdBQUcsUUFBUSxHQUFHLE1BQU0sSUFBSSxJQUFJO1lBQ2hDLElBQUksR0FBRyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxRQUFRLElBQUksSUFBSSxHQUFHLE1BQU07WUFDM0QsSUFBSSxHQUFHLFFBQVEsSUFBSSxJQUFJLEdBQUcsY0FBYztZQUN4QyxJQUFJLElBQUksSUFBSSxHQUFHLGNBQWM7WUFDN0IsSUFBSSxJQUFJLElBQUksR0FBRyxNQUFNO1lBQ3JCLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLE1BQU0sSUFBSSxJQUFJLElBQUksRUFDL0M7WUFDRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sSUFBSSxTQUFTO1lBQzFDLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLElBQUksRUFBRSxhQUFhO1NBQ3BCLENBQ0YsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FDaEMsV0FDRSxXQUFXLENBQUMsOEJBQThCO1lBQ3hDLENBQUMsQ0FBQyxXQUFXLENBQUMsOEJBQThCO2dCQUMxQyxDQUFDLFdBQVcsRUFBRSxhQUFhO29CQUN6QixDQUFDLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxhQUFhO29CQUN0QyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1QsQ0FBQyxDQUFDLEtBQ04sRUFBRSxFQUNGO1lBQ0UsSUFBSSxFQUFFLElBQUksR0FBRyxRQUFRLEdBQUcsQ0FBQztZQUN6QixHQUFHLEVBQUUsSUFBSSxHQUFHLGNBQWMsR0FBRyxDQUFDO1lBQzlCLFFBQVEsRUFBRSxDQUFDO1lBQ1gsVUFBVSxFQUFFLE9BQU87WUFDbkIsVUFBVSxFQUFFLEtBQUs7WUFDakIsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsUUFBUTtZQUNqQixPQUFPLEVBQUUsUUFBUTtZQUNqQixLQUFLLEVBQUUsUUFBUTtZQUNmLE1BQU0sRUFBRSxjQUFjO1lBQ3RCLFNBQVMsRUFBRSxRQUFRO1NBQ3BCLENBQ0YsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxjQUFjLENBQUM7UUFFekMsTUFBTSxjQUFjLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUNwQyxLQUFLLElBQUksSUFBSSxVQUFVO1FBQ3JCLElBQUksR0FBRyxRQUFRLElBQUksVUFBVTtRQUM3QixJQUFJLEdBQUcsUUFBUSxJQUFJLFVBQVUsR0FBRyxjQUFjLEdBQUcsTUFBTTtRQUN2RCxJQUFJLEdBQUcsUUFBUSxJQUFJLFVBQVUsR0FBRyxjQUFjLElBQzlDLElBQUksR0FBRyxRQUFRLEdBQUcsTUFDcEIsSUFBSSxVQUFVLEdBQUcsY0FBYztRQUM3QixJQUFJLEdBQUcsTUFBTSxJQUFJLFVBQVUsR0FBRyxjQUFjO1FBQzVDLElBQUksSUFBSSxVQUFVLEdBQUcsY0FBYyxJQUFJLElBQUksSUFDM0MsVUFBVSxHQUFHLGNBQWMsR0FBRyxNQUNoQztRQUNFLElBQUksSUFBSSxVQUFVLElBQUksRUFDeEI7WUFDRSxJQUFJLEVBQUUsU0FBUztZQUNmLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxJQUFJLFNBQVM7WUFDMUMsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FDRixDQUFDO1FBRUYsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksVUFBVSxDQUFDO1FBRWYsTUFBTSxXQUFXLEdBQUcsR0FBRyxXQUFXLEVBQUUsV0FBVyxNQUFNLFdBQVcsRUFBRSxZQUFZLENBQUMsS0FBSyxJQUFJLFdBQVcsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFekgsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQ25DLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDOUIsSUFBSSxFQUFFLElBQUksR0FBRyxRQUFRLEdBQUcsQ0FBQztZQUN6QixHQUFHLEVBQUUsVUFBVSxHQUFHLGNBQWMsR0FBRyxDQUFDO1lBQ3BDLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLE9BQU87WUFDbkIsVUFBVSxFQUFFLEtBQUs7WUFDakIsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsUUFBUTtZQUNqQixPQUFPLEVBQUUsUUFBUTtZQUNqQixTQUFTLEVBQUUsUUFBUTtZQUNuQixLQUFLLEVBQUUsUUFBUTtTQUNoQixDQUFDLENBQUM7UUFFTCxHQUFHO1lBQ0QsVUFBVSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hDLFFBQVEsSUFBSSxHQUFHLENBQUM7U0FDakIsUUFBUSxVQUFVLENBQUMsTUFBTSxHQUFHLGNBQWMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO1FBRTdELE1BQU0sUUFBUSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDOUIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRXBELE1BQU0sWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQztZQUNuQyxJQUFJLEVBQUUsSUFBSTtZQUNWLEdBQUcsRUFBRSxJQUFJO1lBQ1QsS0FBSyxFQUFFLFFBQVE7WUFDZixNQUFNLEVBQUUsU0FBUztZQUNqQixFQUFFLEVBQUUsTUFBTTtZQUNWLEVBQUUsRUFBRSxNQUFNO1lBQ1YsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLElBQUksU0FBUztZQUMxQyxXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUUsT0FBTztTQUNkLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO1FBQ25ELE1BQU0sU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUM5QixLQUFLLElBQUksR0FBRyxNQUFNLElBQUksU0FBUztZQUN6QixJQUFJLEdBQUcsUUFBUSxHQUFHLE1BQU0sSUFBSSxTQUFTO1lBQ3JDLElBQUksR0FBRyxRQUFRLElBQUksU0FBUyxJQUFJLElBQUksR0FBRyxRQUFRLElBQ25ELFNBQVMsR0FBRyxNQUNkO1lBQ00sSUFBSSxHQUFHLFFBQVEsSUFBSSxTQUFTLEdBQUcsU0FBUztZQUN4QyxJQUFJLElBQUksU0FBUyxHQUFHLFNBQVM7WUFDN0IsSUFBSSxJQUFJLFNBQVMsR0FBRyxNQUFNO1lBQzFCLElBQUksSUFBSSxTQUFTLElBQUksSUFBSSxHQUFHLE1BQU0sSUFBSSxTQUFTLElBQUksRUFDekQ7WUFDRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUk7Z0JBQ3RCLENBQUMsQ0FBQyxZQUFZLEVBQUUsSUFBSTtnQkFDcEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLO29CQUNuQixDQUFDLENBQUMsU0FBUztvQkFDWCxDQUFDLENBQUMsU0FBUztZQUNiLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTztnQkFDM0IsQ0FBQyxDQUFDLFlBQVksRUFBRSxPQUFPO2dCQUN2QixDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUs7b0JBQ25CLENBQUMsQ0FBQyxTQUFTO29CQUNYLENBQUMsQ0FBQyxTQUFTO1lBQ2IsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FDRixDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUNyQyxHQUFHLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQy9EO1lBQ0UsSUFBSSxFQUFFLElBQUksR0FBRyxRQUFRLEdBQUcsQ0FBQztZQUN6QixHQUFHLEVBQUUsU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDO1lBQzlCLFFBQVEsRUFBRSxDQUFDO1lBQ1gsVUFBVSxFQUFFLE9BQU87WUFDbkIsVUFBVSxFQUFFLEtBQUs7WUFDakIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUztZQUM1QyxPQUFPLEVBQUUsUUFBUTtZQUNqQixPQUFPLEVBQUUsUUFBUTtZQUNqQixLQUFLLEVBQUUsUUFBUTtZQUNmLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLFNBQVMsRUFBRSxRQUFRO1NBQ3BCLENBQ0YsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixNQUFNLFdBQVcsR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUU5QyxJQUFJLFdBQVcsQ0FBQyxzQkFBc0IsS0FBSyxJQUFJLEVBQUU7WUFDL0MsTUFBTSxJQUFJLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUVuQyxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLElBQUksRUFBRSxJQUFJO2dCQUNWLEdBQUcsRUFBRSxJQUFJO2dCQUNULEtBQUssRUFBRSxRQUFRO2dCQUNmLE1BQU0sRUFBRSxXQUFXO2dCQUNuQixxQkFBcUI7Z0JBQ3JCLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTztvQkFDM0IsQ0FBQyxDQUFDLFlBQVksRUFBRSxPQUFPO29CQUN2QixDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUs7d0JBQ25CLENBQUMsQ0FBQyxTQUFTO3dCQUNYLENBQUMsQ0FBQyxTQUFTO2dCQUNiLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixJQUFJLEVBQUUsT0FBTzthQUNkLENBQUMsQ0FBQztZQUVILE1BQU0sSUFBSSxHQUFHLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRTlELGtFQUFrRTtZQUNsRSxNQUFNLFlBQVksR0FBRyxRQUFRLEdBQUcsR0FBRyxDQUFDO1lBQ3BDLE1BQU0sYUFBYSxHQUFHLFdBQVcsR0FBRyxHQUFHLENBQUM7WUFDeEMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBRW5CLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUMxQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUN2QixJQUFJLEVBQUUsSUFBSSxHQUFHLFFBQVEsR0FBRyxDQUFDO2dCQUN6QixHQUFHLEVBQUUsSUFBSSxHQUFHLFdBQVcsR0FBRyxDQUFDO2dCQUMzQixPQUFPLEVBQUUsUUFBUTtnQkFDakIsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLEtBQUssRUFBRSxZQUFZO2dCQUNuQixRQUFRLEVBQUUsRUFBRTtnQkFDWixVQUFVLEVBQUUsT0FBTztnQkFDbkIsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixJQUFJLEVBQUUsTUFBTTtnQkFDWixVQUFVLEVBQUUsS0FBSztnQkFDakIsT0FBTyxFQUFFLEtBQUs7YUFDZixDQUFDLENBQUM7WUFFTCxJQUFJLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuRCxPQUFPLFdBQVcsQ0FBQyxNQUFNLEdBQUcsYUFBYSxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUU7Z0JBQzNELFVBQVUsSUFBSSxHQUFHLENBQUM7Z0JBQ2xCLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNoRDtZQUVELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNsQixNQUFNLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLElBQUksRUFBRSxJQUFJLEdBQUcsUUFBUSxHQUFHLENBQUM7Z0JBQ3pCLEdBQUcsRUFBRSxJQUFJLEdBQUcsV0FBVyxHQUFHLENBQUM7Z0JBQzNCLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixPQUFPLEVBQUUsUUFBUTtnQkFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxLQUFNLENBQUMsR0FBRyxPQUFPO2dCQUMzRCxNQUFNLEVBQUUsV0FBVyxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUM7Z0JBQ3pDLElBQUksRUFBRSwwQkFBMEI7Z0JBQ2hDLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixPQUFPLEVBQUUsS0FBSztnQkFDZCxFQUFFLEVBQUUsQ0FBQztnQkFDTCxFQUFFLEVBQUUsQ0FBQzthQUNOLENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUM5QzthQUFNLElBQUksV0FBVyxDQUFDLHNCQUFzQixLQUFLLElBQUksRUFBRTtZQUN0RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNuQyxNQUFNLElBQUksR0FBRyxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUU3QyxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQzVCLElBQUksRUFBRSxJQUFJO29CQUNWLEdBQUcsRUFBRSxJQUFJO29CQUNULEtBQUssRUFBRSxRQUFRO29CQUNmLE1BQU0sRUFBRSxTQUFTO29CQUNqQixNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU87d0JBQzNCLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTzt3QkFDdkIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLOzRCQUNuQixDQUFDLENBQUMsU0FBUzs0QkFDWCxDQUFDLENBQUMsU0FBUztvQkFDYixXQUFXLEVBQUUsSUFBSTtvQkFDakIsSUFBSSxFQUFFLE9BQU87aUJBQ2QsQ0FBQyxDQUFDO2dCQUVILE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXBCLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxNQUFNLEVBQUU7b0JBQ3JELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO29CQUM1RCxNQUFNLFVBQVUsR0FBRyxTQUFTLEdBQUcsUUFBUSxDQUFDO29CQUV4QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQzt3QkFFcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUM5QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFDckM7NEJBQ0UsTUFBTSxFQUFFLE1BQU07NEJBQ2QsV0FBVyxFQUFFLEdBQUc7NEJBQ2hCLFVBQVUsRUFBRSxLQUFLOzRCQUNqQixPQUFPLEVBQUUsS0FBSzt5QkFDZixDQUNGLENBQUM7d0JBRUYsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBRUQsTUFBTSxJQUFJLEdBQ1IsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBRW5FLG9EQUFvRDtnQkFDcEQsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLGFBQWEsR0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFDO2dCQUN0QyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBRXZCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtvQkFDakIsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFVBQVUsRUFBRSxPQUFPO29CQUNuQixVQUFVLEVBQUUsS0FBSztpQkFDbEIsQ0FBQyxDQUFDO2dCQUVMLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDdkIsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUVwQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQUU7b0JBQ3hDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDdkIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO29CQUNoQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUUzQixPQUFPLE9BQU8sR0FBRyxRQUFRLEVBQUU7d0JBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQ3BELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQzt3QkFDbkQsUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxFQUFFOzRCQUN4QyxRQUFRLEdBQUcsTUFBTSxDQUFDO3lCQUNuQjs2QkFBTTs0QkFDTCxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQzt5QkFDdEI7cUJBQ0Y7b0JBQ0QsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztvQkFDakUsUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDakM7Z0JBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNqQyxJQUFJLEVBQUUsSUFBSSxHQUFHLFFBQVEsR0FBRyxDQUFDO29CQUN6QixHQUFHLEVBQUUsSUFBSSxHQUFHLFNBQVMsR0FBRyxDQUFDO29CQUN6QixPQUFPLEVBQUUsUUFBUTtvQkFDakIsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLEtBQUssRUFBRSxRQUFRO29CQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUM7b0JBQzFELElBQUksRUFBRSwwQkFBMEI7b0JBQ2hDLFVBQVUsRUFBRSxLQUFLO29CQUNqQixPQUFPLEVBQUUsS0FBSztvQkFDZCxFQUFFLEVBQUUsQ0FBQztvQkFDTCxFQUFFLEVBQUUsQ0FBQztpQkFDTixDQUFDLENBQUM7Z0JBRUgsTUFBTSxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtvQkFDN0MsSUFBSSxFQUFFLElBQUksR0FBRyxRQUFRLEdBQUcsQ0FBQztvQkFDekIsR0FBRyxFQUFFLElBQUksR0FBRyxTQUFTLEdBQUcsQ0FBQztvQkFDekIsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixRQUFRLEVBQUUsWUFBWTtvQkFDdEIsVUFBVSxFQUFFLE9BQU87b0JBQ25CLFVBQVUsRUFBRSxLQUFLO29CQUNqQixJQUFJLEVBQUUsTUFBTTtvQkFDWixVQUFVLEVBQUUsS0FBSztvQkFDakIsT0FBTyxFQUFFLEtBQUs7aUJBQ2YsQ0FBQyxDQUFDO2dCQUVILE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ3JDO1NBQ0Y7YUFBTSxJQUFJLFdBQVcsQ0FBQyxzQkFBc0IsS0FBSyxJQUFJLEVBQUU7WUFDdEQsTUFBTSxnQkFBZ0IsR0FBdUMsRUFBRSxDQUFDO1lBRWhFLElBQUksWUFBWSxHQUFrQixJQUFJLENBQUM7WUFFdkMsS0FBSyxNQUFNLEtBQUssSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUMzQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQztnQkFDckMsSUFBSSxJQUFJLEtBQUssWUFBWSxFQUFFO29CQUN6QixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNsRCxZQUFZLEdBQUcsSUFBSSxDQUFDO2lCQUNyQjtxQkFBTTtvQkFDTCxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDbkU7YUFDRjtZQUVELElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1lBRTFCLEtBQUssTUFBTSxLQUFLLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ3BDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxHQUFHLEtBQUssQ0FBQztnQkFFaEQsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUM7Z0JBQzFDLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7Z0JBRTFDLE1BQU0sU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU0sWUFBWSxHQUFHLFNBQVMsR0FBRyxTQUFTLEdBQUcsV0FBVyxDQUFDO2dCQUV6RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDOUMsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxNQUFNLElBQUksR0FBRyxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBRTdELE1BQU0sU0FBUyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQzt3QkFDaEMsSUFBSSxFQUFFLElBQUk7d0JBQ1YsR0FBRyxFQUFFLElBQUk7d0JBQ1QsS0FBSyxFQUFFLFFBQVE7d0JBQ2YsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTzs0QkFDM0IsQ0FBQyxDQUFDLFlBQVksRUFBRSxPQUFPOzRCQUN2QixDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUs7Z0NBQ25CLENBQUMsQ0FBQyxTQUFTO2dDQUNYLENBQUMsQ0FBQyxTQUFTO3dCQUNiLFdBQVcsRUFBRSxJQUFJO3dCQUNqQixJQUFJLEVBQUUsT0FBTztxQkFDZCxDQUFDLENBQUM7b0JBRUgsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFFeEIsSUFBSSxTQUFTLENBQUMsU0FBUyxLQUFLLE1BQU0sRUFBRTt3QkFDbEMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7d0JBQ3pDLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDO3dCQUV2RCxNQUFNLFVBQVUsR0FBRyxTQUFTLEdBQUcsUUFBUSxDQUFDO3dCQUN4QyxNQUFNLGFBQWEsR0FBRyxRQUFRLEdBQUcsZUFBZSxDQUFDO3dCQUVqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQzs0QkFFcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUM5QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFDckM7Z0NBQ0UsTUFBTSxFQUFFLE1BQU07Z0NBQ2QsV0FBVyxFQUFFLEdBQUc7Z0NBQ2hCLFVBQVUsRUFBRSxLQUFLO2dDQUNqQixPQUFPLEVBQUUsS0FBSzs2QkFDZixDQUNGLENBQUM7NEJBRUYsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt5QkFDeEI7d0JBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUM7NEJBRXZDLE1BQU0sWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FDbEMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQ3RDO2dDQUNFLE1BQU0sRUFBRSxNQUFNO2dDQUNkLFdBQVcsRUFBRSxHQUFHO2dDQUNoQixVQUFVLEVBQUUsS0FBSztnQ0FDakIsT0FBTyxFQUFFLEtBQUs7NkJBQ2YsQ0FDRixDQUFDOzRCQUVGLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7eUJBQzVCO3FCQUNGO29CQUVELGlCQUFpQixFQUFFLENBQUM7aUJBQ3JCO2dCQUVELE1BQU0sZUFBZSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FDckMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksR0FBRyxRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQ25EO29CQUNFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTzt3QkFDM0IsQ0FBQyxDQUFDLFlBQVksRUFBRSxPQUFPO3dCQUN2QixDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUs7NEJBQ25CLENBQUMsQ0FBQyxTQUFTOzRCQUNYLENBQUMsQ0FBQyxTQUFTO29CQUNiLFdBQVcsRUFBRSxDQUFDO29CQUNkLFVBQVUsRUFBRSxLQUFLO29CQUNqQixPQUFPLEVBQUUsS0FBSztpQkFDZixDQUNGLENBQUM7Z0JBRUYsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFFOUIsSUFBSSxXQUFXLENBQUMsV0FBVyxLQUFLLE1BQU0sRUFBRTtvQkFDdEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO29CQUN2QixNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO3dCQUN6QyxJQUFJLEVBQUUsSUFBSSxHQUFHLFFBQVEsR0FBRyxZQUFZO3dCQUNwQyxHQUFHLEVBQUUsWUFBWTt3QkFDakIsUUFBUSxFQUFFLENBQUM7d0JBQ1gsVUFBVSxFQUFFLE9BQU87d0JBQ25CLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixJQUFJLEVBQUUsU0FBUzt3QkFDZixPQUFPLEVBQUUsT0FBTzt3QkFDaEIsT0FBTyxFQUFFLFFBQVE7d0JBQ2pCLEtBQUssRUFBRSxRQUFRLEdBQUcsQ0FBQzt3QkFDbkIsU0FBUyxFQUFFLE9BQU87cUJBQ25CLENBQUMsQ0FBQztvQkFFSCxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN6QjtnQkFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDekMsTUFBTSxZQUFZLEdBQUcsU0FBUyxHQUFHLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFaEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFFaEMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNoQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7d0JBQ2hELGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzNCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLE1BQU0sRUFBRTtvQkFDN0IsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDNUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDO29CQUNsQixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUM7b0JBQzlCLE1BQU0sU0FBUyxHQUFHLFFBQVEsR0FBRyxHQUFHLENBQUM7b0JBQ2pDLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztvQkFFekIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO29CQUNqQixJQUFJLFdBQVcsQ0FBQztvQkFFaEIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxFQUFPLEVBQUUsRUFBRTt3QkFDaEMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFOzRCQUM5QixRQUFRLEVBQUUsRUFBRTs0QkFDWixVQUFVLEVBQUUsT0FBTzs0QkFDbkIsVUFBVSxFQUFFLEtBQUs7NEJBQ2pCLEtBQUssRUFBRSxZQUFZOzRCQUNuQixTQUFTLEVBQUUsUUFBUTs0QkFDbkIsT0FBTyxFQUFFLFFBQVE7NEJBQ2pCLE9BQU8sRUFBRSxRQUFROzRCQUNqQixJQUFJLEVBQUUsU0FBUzs0QkFDZixVQUFVLEVBQUUsS0FBSzs0QkFDakIsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsSUFBSSxFQUFFLFlBQVk7NEJBQ2xCLEdBQUcsRUFBRSxZQUFZO3lCQUNsQixDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDO29CQUVGLEdBQUc7d0JBQ0QsV0FBVyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDdEMsUUFBUSxJQUFJLEdBQUcsQ0FBQztxQkFDakIsUUFBUSxXQUFXLENBQUMsTUFBTSxHQUFHLGFBQWEsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO29CQUU3RCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFDO29CQUUzRCxNQUFNLGVBQWUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7d0JBQ3RDLElBQUksRUFBRSxZQUFZO3dCQUNsQixHQUFHLEVBQUUsWUFBWTt3QkFDakIsT0FBTyxFQUFFLFFBQVE7d0JBQ2pCLE9BQU8sRUFBRSxRQUFRO3dCQUNqQixLQUFLLEVBQUUsU0FBUzt3QkFDaEIsTUFBTSxFQUFFLFVBQVU7d0JBQ2xCLElBQUksRUFBRSwwQkFBMEI7d0JBQ2hDLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixPQUFPLEVBQUUsS0FBSzt3QkFDZCxFQUFFLEVBQUUsQ0FBQzt3QkFDTCxFQUFFLEVBQUUsQ0FBQztxQkFDTixDQUFDLENBQUM7b0JBRUgsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQzVDO2FBQ0Y7U0FDRjtRQUVELElBQUksV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7WUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNwRCxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVuQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztnQkFDekMsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBRXJDLE1BQU0sU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELE1BQU0sZUFBZSxHQUFHLFNBQVMsR0FBRyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBRWhFLElBQUksVUFBVSxHQUFXLGVBQWUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLEdBQVcsU0FBUyxDQUFDO2dCQUUxQixJQUFJLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7b0JBQ3RDLFVBQVUsR0FBRyxlQUFlLEdBQUcsQ0FBQyxDQUFDO29CQUVqQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUU7d0JBQ2hCLEtBQUssS0FBSzs0QkFDUixDQUFDLEdBQUcsU0FBUyxDQUFDOzRCQUNkLE1BQU07d0JBQ1IsS0FBSyxRQUFROzRCQUNYLENBQUMsR0FBRyxTQUFTLEdBQUcsVUFBVSxDQUFDOzRCQUMzQixNQUFNO3dCQUNSLEtBQUssUUFBUTs0QkFDWCxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7NEJBQy9CLE1BQU07d0JBQ1I7NEJBQ0UsQ0FBQyxHQUFHLFNBQVMsQ0FBQztxQkFDakI7aUJBQ0Y7Z0JBRUQsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUNiLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQztnQkFFckIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7b0JBQ3ZDLEtBQUssR0FBRyxRQUFRLENBQUM7b0JBQ2pCLENBQUMsR0FBRyxJQUFJLENBQUM7aUJBQ1Y7cUJBQU07b0JBQ0wsTUFBTSxZQUFZLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztvQkFDbEMsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFO3dCQUNoQixLQUFLLE1BQU07NEJBQ1QsS0FBSyxHQUFHLFlBQVksQ0FBQzs0QkFDckIsQ0FBQyxHQUFHLElBQUksQ0FBQzs0QkFDVCxNQUFNO3dCQUNSLEtBQUssUUFBUTs0QkFDWCxLQUFLLEdBQUcsWUFBWSxDQUFDOzRCQUNyQixDQUFDLEdBQUcsSUFBSSxHQUFHLFlBQVksQ0FBQzs0QkFDeEIsTUFBTTt3QkFDUixLQUFLLE9BQU87NEJBQ1YsS0FBSyxHQUFHLFlBQVksQ0FBQzs0QkFDckIsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDOzRCQUM1QixNQUFNO3dCQUNSOzRCQUNFLEtBQUssR0FBRyxRQUFRLENBQUM7NEJBQ2pCLENBQUMsR0FBRyxJQUFJLENBQUM7cUJBQ1o7aUJBQ0Y7Z0JBRUQsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFO29CQUNqQixJQUFJO3dCQUNGLE1BQU0sT0FBTyxHQUFRLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQ25ELEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsVUFBVSxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUNoRDs0QkFDRSxXQUFXLEVBQUUsV0FBVzt5QkFDekIsQ0FDRixDQUFDO3dCQUVGLE9BQU8sQ0FBQyxHQUFHLENBQUM7NEJBQ1YsSUFBSSxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQzs0QkFDbkIsR0FBRyxFQUFFLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQzs0QkFDdkIsT0FBTyxFQUFFLFFBQVE7NEJBQ2pCLE9BQU8sRUFBRSxRQUFROzRCQUNqQixNQUFNLEVBQUUsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFNOzRCQUM5QixNQUFNLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFPOzRCQUNwQyxVQUFVLEVBQUUsS0FBSzs0QkFDakIsT0FBTyxFQUFFLEtBQUs7eUJBQ2YsQ0FBQyxDQUFDO3dCQUVILE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQ3ZCO29CQUFDLE9BQU8sR0FBRyxFQUFFO3dCQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztxQkFDcEU7aUJBQ0Y7cUJBQU07b0JBQ0wsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO3dCQUM1QixJQUFJLEVBQUUsQ0FBQzt3QkFDUCxHQUFHLEVBQUUsQ0FBQzt3QkFDTixLQUFLO3dCQUNMLE1BQU0sRUFBRSxVQUFVO3dCQUNsQixJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sSUFBSSxTQUFTO3dCQUN2QyxVQUFVLEVBQUUsS0FBSzt3QkFDakIsT0FBTyxFQUFFLEtBQUs7cUJBQ2YsQ0FBQyxDQUFDO29CQUVILElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztvQkFDakIsSUFBSSxNQUFNLENBQUM7b0JBRVgsTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUNsQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUU7d0JBQ2xDLElBQUksRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUM7d0JBQ25CLEdBQUcsRUFBRSxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUM7d0JBQ3ZCLE9BQU8sRUFBRSxRQUFRO3dCQUNqQixPQUFPLEVBQUUsUUFBUTt3QkFDakIsUUFBUSxFQUFFLEVBQUU7d0JBQ1osVUFBVSxFQUFFLE9BQU87d0JBQ25CLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixJQUFJLEVBQUUsT0FBTzt3QkFDYixTQUFTLEVBQUUsUUFBUTt3QkFDbkIsS0FBSyxFQUFFLEtBQUs7d0JBQ1osVUFBVSxFQUFFLEtBQUs7d0JBQ2pCLE9BQU8sRUFBRSxLQUFLO3FCQUNmLENBQUMsQ0FBQztvQkFFTCxHQUFHO3dCQUNELE1BQU0sR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ2hDLFFBQVEsSUFBSSxHQUFHLENBQUM7cUJBQ2pCLFFBQVEsTUFBTSxDQUFDLE1BQU0sR0FBRyxVQUFVLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTtvQkFFckQsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQzdCO2FBQ0Y7U0FDRjtRQUVELE1BQU0sUUFBUSxHQUFHLFNBQVMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUM3QixLQUFLLElBQUksSUFBSSxRQUFRO1lBQ2YsSUFBSSxHQUFHLFFBQVEsSUFBSSxRQUFRO1lBQzNCLElBQUksR0FBRyxRQUFRLElBQUksUUFBUSxHQUFHLFNBQVMsR0FBRyxNQUFNO1lBQ2hELElBQUksR0FBRyxRQUFRLElBQUksUUFBUSxHQUFHLFNBQVMsSUFDM0MsSUFBSSxHQUFHLFFBQVEsR0FBRyxNQUNwQixJQUFJLFFBQVEsR0FBRyxTQUFTO1lBQ2xCLElBQUksR0FBRyxNQUFNLElBQUksUUFBUSxHQUFHLFNBQVM7WUFDckMsSUFBSSxJQUFJLFFBQVEsR0FBRyxTQUFTLElBQUksSUFBSSxJQUN4QyxRQUFRLEdBQUcsU0FBUyxHQUFHLE1BQ3pCO1lBQ00sSUFBSSxJQUFJLFFBQVEsSUFBSSxFQUMxQjtZQUNFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSTtnQkFDdEIsQ0FBQyxDQUFDLFlBQVksRUFBRSxJQUFJO2dCQUNwQixDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUs7b0JBQ25CLENBQUMsQ0FBQyxTQUFTO29CQUNYLENBQUMsQ0FBQyxTQUFTO1lBQ2IsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPO2dCQUMzQixDQUFDLENBQUMsWUFBWSxFQUFFLE9BQU87Z0JBQ3ZCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSztvQkFDbkIsQ0FBQyxDQUFDLFNBQVM7b0JBQ1gsQ0FBQyxDQUFDLFNBQVM7WUFDYixXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUNGLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQ3BDLEdBQUcsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFDL0Q7WUFDRSxJQUFJLEVBQUUsSUFBSSxHQUFHLFFBQVEsR0FBRyxDQUFDO1lBQ3pCLEdBQUcsRUFBRSxRQUFRLEdBQUcsU0FBUyxHQUFHLENBQUM7WUFDN0IsUUFBUSxFQUFFLENBQUM7WUFDWCxVQUFVLEVBQUUsT0FBTztZQUNuQixVQUFVLEVBQUUsS0FBSztZQUNqQixJQUFJLEVBQUUsU0FBUztZQUNmLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLFNBQVMsRUFBRSxRQUFRO1lBQ25CLEtBQUssRUFBRSxRQUFRO1lBQ2YsTUFBTSxFQUFFLFNBQVM7U0FDbEIsQ0FDRixDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDeEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFdkQsTUFBTSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3RDLElBQUksRUFBRSxPQUFPO1lBQ2IsR0FBRyxFQUFFLE9BQU87WUFDWixLQUFLLEVBQUUsV0FBVztZQUNsQixNQUFNLEVBQUUsWUFBWTtZQUNwQixFQUFFLEVBQUUsTUFBTTtZQUNWLEVBQUUsRUFBRSxNQUFNO1lBQ1YsTUFBTSxFQUFFLGFBQWE7WUFDckIsSUFBSSxFQUFFLGFBQWE7U0FDcEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQzFDLGFBQWEsV0FBVyxDQUFDLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixXQUFXLENBQUMsZUFBZSxXQUFXLFdBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQ2xJO1lBQ0UsSUFBSSxFQUFFLE9BQU8sR0FBRyxXQUFXLEdBQUcsQ0FBQztZQUMvQixHQUFHLEVBQUUsT0FBTyxHQUFHLFlBQVksR0FBRyxDQUFDO1lBQy9CLFFBQVEsRUFBRSxDQUFDO1lBQ1gsVUFBVSxFQUFFLE9BQU87WUFDbkIsVUFBVSxFQUFFLEtBQUs7WUFDakIsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsUUFBUTtZQUNqQixPQUFPLEVBQUUsUUFBUTtZQUNqQixTQUFTLEVBQUUsUUFBUTtZQUNuQixLQUFLLEVBQUUsV0FBVztZQUNsQixNQUFNLEVBQUUsWUFBWTtTQUNyQixDQUNGLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRzs7OzthQUlULENBQUM7UUFFVixJQUFJLFNBQVMsR0FBUSxNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUvRCxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUN4QyxTQUFTLENBQUMsT0FBTyxFQUNqQixTQUFTLENBQUMsT0FBTyxDQUNsQixDQUFDO1FBRUYsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNWLE1BQU0sRUFBRSxDQUFDO1lBQ1QsTUFBTSxFQUFFLENBQUM7WUFDVCxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFO1lBQ3BCLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRTtZQUNYLE9BQU8sRUFBRSxLQUFLO1lBQ2QsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFLElBQUk7WUFDYixXQUFXLEVBQUUsU0FBUztTQUN2QixDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzlCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUU7Z0JBQ3pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDekI7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBRXJDLElBQUksQ0FBQyxlQUFlLEdBQUc7Z0JBQ3JCLFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVztnQkFDcEMsU0FBUyxFQUFFLFdBQVcsQ0FBQyx1QkFBdUI7Z0JBQzlDLFlBQVksRUFBRSxXQUFXLENBQUMsOEJBQThCO2dCQUN4RCxTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7YUFDM0IsQ0FBQztZQUVGLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEtBQUssTUFBTSxFQUFFO2dCQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzVDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUNyRSxDQUFDO2dCQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FDakUsQ0FBQztnQkFDRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDO2FBQ3BDO2lCQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEtBQUssT0FBTyxFQUFFO2dCQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQy9DLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUNqRSxDQUFDO2dCQUNGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUM7YUFDcEM7WUFDRCxPQUFPLElBQUksRUFBRSxtQkFBbUIsRUFBRSxRQUFRLENBQUM7WUFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQzVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUNuQztZQUNFLGFBQWE7WUFDYixZQUFZO1lBQ1osV0FBVztZQUNYLE9BQU87WUFDUCxjQUFjO1lBQ2QsVUFBVTtZQUNWLFlBQVk7WUFDWixRQUFRO1lBQ1IsWUFBWTtZQUNaLEdBQUcsT0FBTztZQUNWLE9BQU87WUFDUCxXQUFXO1lBQ1gsZUFBZTtZQUNmLGlCQUFpQjtZQUNqQixPQUFPO1NBQ1IsRUFDRDtZQUNFLElBQUksRUFBRSxDQUFDO1lBQ1AsR0FBRyxFQUFFLENBQUM7WUFDTixPQUFPLEVBQUUsSUFBSTtZQUNiLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU87WUFDbkMsWUFBWSxFQUFFLElBQUk7WUFDbEIsWUFBWSxFQUFFLElBQUk7WUFDbEIsY0FBYyxFQUFFLElBQUk7WUFDcEIsb0RBQW9EO1lBQ3BELHFEQUFxRDtZQUNyRCw2R0FBNkc7WUFDN0csZ0hBQWdIO1lBQ2hILEtBQUssRUFBRSxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxJQUFJLENBQUM7U0FDaEQsQ0FXRixDQUFDO1FBRUYsSUFDRSxDQUFDLFdBQVcsRUFBRSxLQUFLO1lBQ25CLENBQUMsV0FBVyxFQUFFLGNBQWM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQ3ZCO1lBQ0EsWUFBWSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUU7Z0JBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM3QixNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRTtnQkFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzlCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsWUFBWSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUMxQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ2xDO1lBQ0QsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLGVBQWUsR0FBRztvQkFDckIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO29CQUMvQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7b0JBQzNCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtvQkFDakMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO29CQUMzQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7b0JBQ25CLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztvQkFDM0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO2lCQUMxQixDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILFlBQVksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQztRQUNuRCxZQUFZLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQztRQUM3RCxZQUFZLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQztRQUN2RSxZQUFZLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFDekMsWUFBWSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ3ZDLFlBQVksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUMvQyxZQUFZLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDN0MsWUFBWSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQzdDLFlBQVksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBRWpDLDJDQUEyQztRQUMzQyxvQ0FBb0M7UUFDcEMseURBQXlEO1FBRXpELHdDQUF3QztRQUN4Qyw4Q0FBOEM7UUFDOUMsNkJBQTZCO1FBQzdCLHNDQUFzQztRQUN0QyxvQ0FBb0M7UUFDcEMsTUFBTTtRQUNOLCtDQUErQztRQUMvQyw2Q0FBNkM7UUFDN0MsbUVBQW1FO1FBQ25FLGtFQUFrRTtRQUNsRSxnRUFBZ0U7UUFDaEUsb0NBQW9DO1FBQ3BDLGtDQUFrQztRQUNsQyxNQUFNO1FBRU4sTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV6QixnQ0FBZ0M7UUFDaEMsSUFBSyxXQUFtQixFQUFFLFFBQVEsRUFBRTtZQUNsQyxJQUFJO2dCQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDaEM7WUFBQyxNQUFNLEdBQUU7WUFDVixPQUFRLFdBQW1CLENBQUMsUUFBUSxDQUFDO1NBQ3RDO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELFlBQVksQ0FDVixNQUFxQixFQUNyQixDQUFTLEVBQ1QsQ0FBUyxFQUNULEtBQWEsRUFDYixNQUFjLEVBQ2QsVUFBa0IsRUFDbEIsV0FBZ0I7UUFFaEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLFVBQVUsQ0FBQztRQUVyQyxNQUFNLFFBQVEsR0FBRztZQUNmLE9BQU87WUFDUCxLQUFLLFNBQVMsSUFBSTtZQUNsQixLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0IsS0FBSyxLQUFLLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxQixLQUFLLFNBQVMsSUFBSSxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QyxLQUFLLFNBQVMsSUFBSSxNQUFNLEVBQUU7WUFDMUIsT0FBTyxNQUFNLEVBQUU7WUFDZixHQUFHO1NBQ0osQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFWixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3RDLElBQUksRUFBRSxTQUFTO1lBQ2YsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7UUFFSCxNQUFNLGFBQWEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdkMsVUFBVSxFQUFFLE9BQU87WUFDbkIsVUFBVSxFQUFFLE1BQU07WUFDbEIsSUFBSSxFQUFFLE9BQU87WUFDYixLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQ1YsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7WUFDakIsSUFBSSxFQUFFLEVBQUU7WUFDUixHQUFHLEVBQUUsTUFBTSxHQUFHLENBQUM7WUFDZixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFDLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxhQUFhLEVBQUU7WUFDckMsTUFBTSxLQUFLLEdBQUcsYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQztTQUM5QztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUM1QyxJQUFJLEVBQUUsQ0FBQztZQUNQLEdBQUcsRUFBRSxDQUFDO1lBQ04sVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTztZQUNuQyxZQUFZLEVBQUUsSUFBSTtZQUNsQixZQUFZLEVBQUUsSUFBSTtZQUNsQixlQUFlLEVBQUUsSUFBSTtZQUNyQixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7U0FDekIsQ0FHQSxDQUFDO1FBRUYsS0FBSyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO1FBRXpCLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELDBCQUEwQixDQUN4QixNQUFxQixFQUNyQixDQUFTLEVBQ1QsQ0FBUyxFQUNULENBQVMsRUFDVCxLQUFhLEVBQ2IsTUFBYyxFQUNkLE9BQVk7UUFFWixNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDM0IsS0FBSztZQUNMLE1BQU07WUFDTixFQUFFLEVBQUUsQ0FBQztZQUNMLEVBQUUsRUFBRSxDQUFDO1lBQ0wsSUFBSSxFQUFFLFNBQVM7WUFDZixNQUFNLEVBQUUsU0FBUztZQUNqQixXQUFXLEVBQUUsQ0FBQztZQUNkLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1NBQ2xCLENBQUMsQ0FBQztRQUVILE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQ25ELEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQztZQUNoQixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7WUFDakIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsUUFBUSxFQUFFLEtBQUs7WUFDZixlQUFlLEVBQUUsSUFBSTtTQUN0QixDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFMUMsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUyxHQUFHLEtBQUssQ0FBQyxDQUFDO1NBQzlDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQzNDLElBQUksRUFBRSxDQUFDO1lBQ1AsR0FBRyxFQUFFLENBQUM7WUFDTixLQUFLLEVBQUUsQ0FBQztZQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU87WUFDbkMsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7U0FDbEIsQ0FHQSxDQUFDO1FBRUYsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUM7UUFDekIsS0FBSyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7UUFFckIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQixJQUFLLE9BQWUsRUFBRSxRQUFRLEVBQUU7WUFDOUIsSUFBSTtnQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ2hDO1lBQUMsTUFBTSxHQUFFO1lBQ1YsT0FBUSxPQUFlLENBQUMsUUFBUSxDQUFDO1NBQ2xDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTTtRQUNKLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDN0MsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUM5RCxDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM3QyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxNQUFNLENBQzlELENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekQsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3pCLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYTtZQUN4QixHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDdkIsS0FBSyxFQUFFLEtBQUs7WUFDWixNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxTQUFTO1lBQ2YsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsaUNBQWlDO1FBQy9CLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7UUFFckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2hELE1BQU0sU0FBUyxHQUFHLE9BQW9CLENBQUM7WUFDdkMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQWMsQ0FBQztZQUU3RCxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbkQsTUFBTSxZQUFZLEdBQUcsY0FBMkIsQ0FBQztnQkFDakQsTUFBTSxHQUFHLEdBQUcsWUFBWTtxQkFDckIsR0FBRyxDQUFDLGlCQUFpQixDQUFDO29CQUN2QixFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDNUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDckQsQ0FBQyxDQUFDLENBQUM7Z0JBRUwsSUFBSSxHQUFHO29CQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9ELE1BQU0sWUFBWSxHQUFHLGNBQTJCLENBQUM7WUFDakQsTUFBTSxHQUFHLEdBQUcsWUFBWTtpQkFDckIsR0FBRyxDQUFDLGlCQUFpQixDQUFDO2dCQUN2QixFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDNUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxDQUFDO1lBRUwsSUFBSSxHQUFHO2dCQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsK0JBQStCO1FBQzdCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7UUFFckMsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzdDLE1BQU0sU0FBUyxHQUFHLE9BQW9CLENBQUM7WUFDdkMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQWMsQ0FBQztZQUUvRCxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRTtnQkFDN0MsTUFBTSxZQUFZLEdBQUcsSUFBaUIsQ0FBQztnQkFDdkMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQWdCLENBQUM7Z0JBQzVELE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQWdCLENBQUM7Z0JBRXhFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDaEQsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUNWLEVBQUUsQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLO29CQUN0RCxFQUFFLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxDQUM3RCxDQUFDO2dCQUNGLE1BQU0sVUFBVSxHQUFHLFFBQVEsRUFBRSxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLFVBQVU7b0JBQUUsT0FBTztnQkFFeEIsK0JBQStCO2dCQUMvQixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsWUFBWTtxQkFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQzlCLFNBQVMsQ0FBQyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtvQkFDOUIsOEZBQThGO29CQUM5RixVQUFVLENBQUMsV0FBVzt3QkFDcEIsUUFBUSxLQUFLLFFBQVE7NEJBQ25CLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLElBQUksUUFBUTs0QkFDdEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQkFDZixJQUFJLENBQUMsNkJBQTZCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2pELENBQUMsQ0FBQyxDQUFDO2dCQUVMLDJFQUEyRTtnQkFDM0UsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsWUFBWTtxQkFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQzlCLFNBQVMsQ0FBQyxDQUFDLE1BQWMsRUFBRSxFQUFFO29CQUM1QixJQUFJLFdBQVcsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO3dCQUNsQyxVQUFVLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUNoRDtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFFTCxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMzRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzVELE1BQU0sWUFBWSxHQUFHLElBQWlCLENBQUM7WUFDdkMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQWdCLENBQUM7WUFDNUQsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBZ0IsQ0FBQztZQUN4RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxVQUFVO2dCQUFFLE9BQU87WUFFeEIsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFlBQVk7aUJBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUMsQ0FBQyxRQUFnQixFQUFFLEVBQUU7Z0JBQzlCLFVBQVUsQ0FBQyxXQUFXO29CQUNwQixRQUFRLEtBQUssUUFBUTt3QkFDbkIsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEtBQUssSUFBSSxRQUFRO3dCQUN0QyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUNmLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztZQUVMLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLFlBQVk7aUJBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxXQUFXLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtvQkFDbEMsVUFBVSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7b0JBQ2hDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDaEQ7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVMLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDZCQUE2QixDQUFDLFVBQWU7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTTthQUN0QixVQUFVLEVBQUU7YUFDWixJQUFJLENBQ0gsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsRUFBRSxPQUFPLEtBQUssUUFBUSxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLFVBQVUsQ0FBQyxHQUFHLENBQ3pELENBQUM7UUFFWCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFDbkIsS0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7UUFFeEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM3QyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxFQUFFLElBQUksS0FBSyxTQUFTLENBQ1osQ0FBQztRQUU5QyxJQUFJLE9BQU8sRUFBRTtZQUNWLE9BQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFxQixFQUFFLFFBQWdCO1FBQ2xELElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNwQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRW5ELGlFQUFpRTtRQUNqRSxNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVsQyxxRUFBcUU7UUFDckUsTUFBTSxNQUFNLEdBQVEsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixPQUFPO1NBQ1I7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFbkIsOERBQThEO1FBQzlELE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CO1FBQ3ZCLE1BQU0sT0FBTyxHQUFHO1lBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLENBQUM7UUFFRixJQUFJO1lBQ0YsTUFBTSxHQUFHLEdBQVEsTUFBTSxjQUFjLENBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUN6QyxDQUFDO1lBQ0YsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQztZQUV2QixJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO29CQUMxQyxPQUFPO3dCQUNMLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRzt3QkFDVixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsV0FBVyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO3dCQUN6RSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO3FCQUM3QyxDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMzRDtJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUM5QixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hCLGFBQWEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBYyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLG9CQUFvQjtRQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBYyxDQUFDO0lBQzNELENBQUM7SUFFRCxJQUFJLHlCQUF5QjtRQUMzQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFjLENBQUM7SUFDaEUsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUMxQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsS0FBSyxVQUFVLENBQzdDLENBQUM7SUFDSixDQUFDO0lBRUQsb0JBQW9CLENBQUMsU0FBaUI7UUFDcEMsT0FBUSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQWU7YUFDL0MsRUFBRSxDQUFDLFNBQVMsQ0FBQzthQUNiLEdBQUcsQ0FBQyxlQUFlLENBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsZUFBZSxDQUFDLFNBQWlCO1FBQy9CLE9BQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFlO2FBQy9DLEVBQUUsQ0FBQyxTQUFTLENBQUM7YUFDYixHQUFHLENBQUMsVUFBVSxDQUFjLENBQUM7SUFDbEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBdUI7UUFDbkUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDekIsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRSxhQUFhLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0IsYUFBYSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztTQUNqQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxZQUFZLENBQUMsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBdUI7UUFDckUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDekIsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRSxlQUFlLEVBQUU7Z0JBQ2YsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUN0QjtZQUNELEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDN0MsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBWSxDQUFDLFNBQWlCLEVBQUUsU0FBb0M7UUFDbEUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3JDLE1BQU0saUJBQWlCLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDckIsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLCtCQUErQjtRQUN0RSxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsNkJBQTZCO1FBRW5FLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO1FBRTVDLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FDOUIsTUFBTSxDQUFDLElBQUksQ0FDVCxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLGFBQWEsS0FBSyxHQUFHLENBQ25FLENBQUM7UUFFSixNQUFNLE1BQU0sR0FBRyxTQUFTLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWxELE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsS0FBSyxVQUFVLENBQUMsQ0FBQztRQUV6RSxpREFBaUQ7UUFDakQsdUNBQXVDO1FBQ3ZDLGlEQUFpRDtRQUNqRCxJQUFJLGlCQUFpQixLQUFLLENBQUMsSUFBSSxpQkFBaUIsS0FBSyxDQUFDLEVBQUU7WUFDdEQsSUFBSSxFQUFFO2dCQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQztZQUM3QyxJQUFJLEVBQUU7Z0JBQUUsRUFBRSxDQUFDLFFBQVEsSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDO1lBRTdDLElBQUksRUFBRSxFQUFFO2dCQUNOLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUU7b0JBQzlCLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUNuQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLFlBQVksQ0FBQztnQkFDekQsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsaURBQWlEO1FBQ2pELDhDQUE4QztRQUM5QyxpREFBaUQ7UUFDakQsSUFDRSxpQkFBaUIsS0FBSyxDQUFDO1lBQ3ZCLGlCQUFpQixLQUFLLENBQUM7WUFDdkIsaUJBQWlCLEtBQUssQ0FBQyxFQUN2QjtZQUNBLElBQUksRUFBRTtnQkFBRSxFQUFFLENBQUMsUUFBUSxJQUFJLE1BQU0sR0FBRyxhQUFhLENBQUM7WUFFOUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ04sRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtvQkFDOUIsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUM7d0JBQ25CLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO2dCQUMxRCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsTUFBTSxTQUFTLEdBQUcsUUFBUSxFQUFFLFFBQVEsSUFBSSxDQUFDLENBQUM7WUFDMUMsTUFBTSxVQUFVLEdBQUcsRUFBRSxFQUFFLFFBQVEsSUFBSSxDQUFDLENBQUM7WUFDckMsTUFBTSxVQUFVLEdBQUcsRUFBRSxFQUFFLFFBQVEsSUFBSSxDQUFDLENBQUM7WUFFckMsNkNBQTZDO1lBQzdDLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLElBQUksaUJBQWlCLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM5RCxFQUFFLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUMsQ0FBQzthQUNwRTtZQUVELDZDQUE2QztZQUM3QyxJQUFJLENBQUMsaUJBQWlCLEtBQUssQ0FBQyxJQUFJLGlCQUFpQixLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDOUQsRUFBRSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDLENBQUM7Z0JBRW5FLElBQUksRUFBRSxFQUFFO29CQUNOLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUU7d0JBQzlCLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDOzRCQUNuQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQztvQkFDMUQsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7YUFDRjtZQUVELG1EQUFtRDtZQUNuRCxNQUFNLFNBQVMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN4RSxJQUFJLFNBQVMsR0FBRyxFQUFHLENBQUMsUUFBUSxFQUFFO2dCQUM1QixJQUFJLEVBQUUsRUFBRTtvQkFDTixFQUFFLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQzNCLEVBQUUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxTQUFTLEdBQUcsRUFBRyxDQUFDLFFBQVEsQ0FBQyxDQUN6QyxDQUFDO2lCQUNIO2FBQ0Y7U0FDRjtRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWEsQ0FDWCxXQUE2QixFQUM3QixZQUFvQixFQUNwQixTQUFrQjtRQUVsQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFckMsSUFBSSxXQUFXLEtBQUssTUFBTSxFQUFFO1lBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXhELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xELElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdkM7U0FDRjthQUFNLElBQUksV0FBVyxLQUFLLE9BQU8sRUFBRTtZQUNsQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRWpELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3REO1NBQ0Y7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxrQkFBa0IsQ0FDaEIsV0FBNkIsRUFDN0IsWUFBb0IsRUFDcEIsU0FBa0I7UUFFbEIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRXJDLElBQUksV0FBVyxLQUFLLE1BQU0sRUFBRTtZQUMxQixJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRTdELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xELElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUM3QyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDNUM7U0FDRjthQUFNLElBQUksV0FBVyxLQUFLLE9BQU8sRUFBRTtZQUNsQyxJQUFJLENBQUMseUJBQXlCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXRELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3REO1NBQ0Y7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxxQkFBcUIsQ0FDbkIsUUFBZ0IsRUFDaEIsV0FBNkIsRUFDN0IsWUFBb0IsRUFDcEIsU0FBa0I7UUFFbEIsSUFBSSxDQUFDLFVBQVU7YUFDWixrQkFBa0IsQ0FBQyxRQUFRLENBQUM7YUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDO1lBQ1QsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksV0FBVyxLQUFLLE1BQU0sRUFBRTtvQkFDMUIsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztvQkFDOUIsTUFBTSxTQUFTLEdBQUcsT0FBTyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztvQkFDL0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQzt3QkFDckMsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXO3dCQUNyQyxlQUFlLEVBQUUsWUFBWSxDQUFDLEdBQUc7d0JBQ2pDLEdBQUcsRUFBRSxTQUFTO3FCQUNmLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FDekMsWUFBWSxFQUNaLFlBQVksQ0FDYixDQUFDO29CQUNGLE1BQU0sV0FBVyxHQUFHO3dCQUNsQixHQUFHLFlBQVk7d0JBQ2YsZUFBZSxFQUFFLFlBQVksQ0FBQyxHQUFHO3dCQUNqQyxHQUFHLEVBQUUsU0FBUztxQkFDZixDQUFDO29CQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBVSxHQUFHLENBQUMsQ0FBRSxDQUFDO29CQUN0RCxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHO3dCQUMvQixHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO3dCQUNqQyxHQUFHLFdBQVc7d0JBQ2QsY0FBYyxFQUFFLElBQUk7cUJBQ3JCLENBQUM7aUJBQ0g7cUJBQU0sSUFBSSxXQUFXLEtBQUssT0FBTyxFQUFFO29CQUNsQyxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUM5QixNQUFNLFNBQVMsR0FBRyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO29CQUMvQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO3dCQUNyQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVc7d0JBQ3JDLGVBQWUsRUFBRSxZQUFZLENBQUMsR0FBRzt3QkFDakMsR0FBRyxFQUFFLFNBQVM7cUJBQ2YsQ0FBQyxDQUFDO29CQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBZSxDQUFDLFVBQVUsQ0FDNUQsWUFBWSxFQUNaLFlBQVksQ0FDYixDQUFDO29CQUNGLE1BQU0sV0FBVyxHQUFHO3dCQUNsQixHQUFHLFlBQVk7d0JBQ2YsZUFBZSxFQUFFLFlBQVksQ0FBQyxHQUFHO3dCQUNqQyxHQUFHLEVBQUUsU0FBUztxQkFDZixDQUFDO29CQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHO3dCQUMzQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQzt3QkFDN0MsR0FBRyxXQUFXO3dCQUNkLGNBQWMsRUFBRSxJQUFJO3FCQUNyQixDQUFDO2lCQUNIO2dCQUVELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hCLDZCQUE2QjtnQkFDN0IsMkNBQTJDO2dCQUMzQyxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQztZQUNsQyxDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQy9ELENBQUM7U0FDRixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsTUFBTSxDQUNKLEtBQVUsRUFDVixvQkFBc0MsRUFDdEMsdUJBQWdDO1FBRWhDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3JDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDO1FBQ2pELE1BQU0sa0JBQWtCLEdBQUcsb0JBQW9CLEtBQUssT0FBTyxDQUFDO1FBRTVELE1BQU0sZUFBZSxHQUFjLGFBQWE7WUFDOUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0I7WUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpDLE1BQU0sb0JBQW9CLEdBQWMsa0JBQWtCO1lBQ3hELENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CO1lBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUE4QixDQUFDLENBQUM7UUFFekQsTUFBTSxjQUFjLEdBQUcsYUFBYTtZQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO1lBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssQ0FDakUsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDO1FBRXRCLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCO1lBQzVDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWE7WUFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQ2xCLElBQUksQ0FBQyxZQUFZO2lCQUNkLEVBQUUsQ0FBQyxvQkFBOEIsQ0FBQztpQkFDbEMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssQ0FDL0IsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDO1FBRXRCLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQzVDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FDZixPQUFPLENBQUMsR0FBRyxLQUFLLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQzNFLENBQUM7UUFFRixNQUFNLGFBQWEsR0FDakIsdUJBQXVCLEtBQUssU0FBUztZQUNuQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUMzQixDQUFDLE9BQVksRUFBRSxFQUFFLENBQ2YsT0FBTyxDQUFDLEdBQUc7Z0JBQ1gsb0JBQW9CLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQztvQkFDMUQsRUFBRSxLQUFLLENBQ1o7WUFDSCxDQUFDLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO1FBRWxDLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLGFBQWEsRUFBRSxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMsYUFBYTtZQUMxRCw4QkFBOEIsRUFDNUIsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLDhCQUE4QjtTQUMvRCxDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUc7WUFDaEIsYUFBYSxFQUFFLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDLGFBQWE7WUFDL0QsOEJBQThCLEVBQzVCLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDLDhCQUE4QjtTQUNwRSxDQUFDO1FBRUYsSUFBSSxjQUFjLEtBQUssbUJBQW1CLEVBQUU7WUFDMUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUMsYUFBYTtnQkFDOUMsU0FBUyxDQUFDLGFBQWEsQ0FBQztZQUMxQixtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyw4QkFBOEI7Z0JBQy9ELFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQztZQUMzQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7WUFDdEUsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLDhCQUE4QjtnQkFDMUQsU0FBUyxDQUFDLDhCQUE4QixDQUFDO1NBQzVDO2FBQU07WUFDTCxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7WUFDdEUsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLDhCQUE4QjtnQkFDMUQsU0FBUyxDQUFDLDhCQUE4QixDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUNwQixlQUFlLENBQUMsUUFBUSxFQUN4QixvQkFBb0IsQ0FBQyxRQUFRLEVBQzdCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLGFBQWEsQ0FDZCxDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixDQUNwQixjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixhQUFhLENBQ2QsQ0FBQztRQUVGLDJDQUEyQztRQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLDZCQUE2QjtRQUM3QiwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUNELFVBQVU7SUFDVix5QkFBeUI7SUFDekIsNENBQTRDO0lBQzVDLHFDQUFxQztJQUNyQyxNQUFNO0lBQ04seUNBQXlDO0lBQ3pDLDREQUE0RDtJQUM1RCxpRUFBaUU7SUFFakUscURBQXFEO0lBQ3JELGtDQUFrQztJQUNsQyxvREFBb0Q7SUFFcEQsK0RBQStEO0lBQy9ELGtDQUFrQztJQUNsQyw4REFBOEQ7SUFFOUQseUNBQXlDO0lBQ3pDLHFDQUFxQztJQUNyQyw4QkFBOEI7SUFDOUIsaUZBQWlGO0lBQ2pGLDJCQUEyQjtJQUUzQixtREFBbUQ7SUFDbkQscUNBQXFDO0lBQ3JDLDhCQUE4QjtJQUM5Qiw0QkFBNEI7SUFDNUIsZ0RBQWdEO0lBQ2hELHlDQUF5QztJQUN6QywyQkFBMkI7SUFFM0Isb0RBQW9EO0lBQ3BELHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIsdUVBQXVFO0lBQ3ZFLE9BQU87SUFFUCwwQkFBMEI7SUFDMUIsNENBQTRDO0lBQzVDLHlDQUF5QztJQUN6Qyw4QkFBOEI7SUFDOUIsOEJBQThCO0lBQzlCLDJFQUEyRTtJQUMzRSx3QkFBd0I7SUFDeEIsWUFBWTtJQUNaLHVDQUF1QztJQUV2Qyx3QkFBd0I7SUFDeEIsa0VBQWtFO0lBQ2xFLHNDQUFzQztJQUN0QyxzRUFBc0U7SUFDdEUsT0FBTztJQUNQLHdCQUF3QjtJQUN4Qix1RUFBdUU7SUFDdkUsc0NBQXNDO0lBQ3RDLDJFQUEyRTtJQUMzRSxPQUFPO0lBRVAsa0RBQWtEO0lBQ2xELHlEQUF5RDtJQUN6RCxpQ0FBaUM7SUFDakMsMEVBQTBFO0lBQzFFLGtEQUFrRDtJQUNsRCw2RUFBNkU7SUFDN0UscUVBQXFFO0lBQ3JFLGtEQUFrRDtJQUNsRCxhQUFhO0lBQ2IsNkVBQTZFO0lBQzdFLHFFQUFxRTtJQUNyRSxrREFBa0Q7SUFDbEQsTUFBTTtJQUVOLDRCQUE0QjtJQUM1QixnQ0FBZ0M7SUFDaEMscUNBQXFDO0lBQ3JDLCtCQUErQjtJQUMvQixvQkFBb0I7SUFDcEIsT0FBTztJQUVQLDRCQUE0QjtJQUM1QixzQkFBc0I7SUFDdEIsMkJBQTJCO0lBQzNCLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIsT0FBTztJQUVQLGdEQUFnRDtJQUNoRCw2QkFBNkI7SUFDN0Isa0NBQWtDO0lBQ2xDLGdEQUFnRDtJQUNoRCxxQ0FBcUM7SUFDckMsSUFBSTtJQUVKLGNBQWM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXpCLE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFrQjtTQUNqQixDQUFDO1FBRW5CLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDcEMsTUFBTSxFQUFFLEtBQUs7WUFDYixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHO1lBQ2YsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ25CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtZQUNyQixVQUFVLEVBQUUsQ0FBQztTQUNkLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUVuRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsTUFBTSxDQUFDO1FBQzlFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCLENBQUMsUUFBYTtRQUN4QyxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksTUFBTSxFQUFFO1lBQzlCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEtBQUssTUFBTSxFQUFFO2dCQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzVDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUNyRSxDQUFDO2dCQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FDakUsQ0FBQztnQkFDRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDO2FBQ3BDO2lCQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEtBQUssT0FBTyxFQUFFO2dCQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQy9DLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUNqRSxDQUFDO2dCQUNGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUM7YUFDcEM7WUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsS0FBYSxFQUFFLEVBQUU7Z0JBQzlELElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLEVBQUU7b0JBQzdELEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxLQUFLLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztvQkFDbkQsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUNoQyxLQUFLLENBQUMsZUFBZSxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzlELENBQUM7aUJBQ0g7Z0JBQ0QsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ3ZELENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQ3pELENBQUM7Z0JBQ0YsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO2lCQUMvRDtxQkFBTTtvQkFDTCxLQUFLLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztpQkFDdkI7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQ0UsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSztnQkFDM0IsRUFBRSxXQUFXLEVBQUU7Z0JBQ2YsRUFBRSxRQUFRLENBQUMsdUJBQXVCLENBQUMsRUFDckM7Z0JBQ0EsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUM3QjtZQUNELElBQUksQ0FBQyxtQkFBbUIsR0FBRztnQkFDekIsR0FBRyxJQUFJLENBQUMsbUJBQW1CO2dCQUMzQixHQUFHLFFBQVEsQ0FBQyxJQUFJO2FBQ2pCLENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDNUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFFeEIsT0FBTztTQUNSO1FBQ0QsSUFDRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sR0FBRyxDQUFDO1lBQ2xDLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSxHQUFHLENBQUM7WUFDcEMsUUFBUSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQzVDO1lBQ0EsaUhBQWlIO1lBQ2pILElBQUksQ0FBQyxnQkFBZ0IsQ0FDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUNsQixRQUFRLEVBQ1IsS0FBSyxDQUNOLENBQUM7WUFDRixPQUFPO1NBQ1I7UUFFRCxJQUFJLFFBQVEsRUFBRSxNQUFNLEVBQUU7WUFDcEIseUJBQXlCO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLFFBQVEsRUFBRSxRQUFRLEtBQUssUUFBUSxJQUFJLFFBQVEsRUFBRSxTQUFTLEtBQUssUUFBUSxFQUFFO1lBQ3ZFLHlCQUF5QjtZQUN6QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUMsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLFFBQVEsS0FBSyxRQUFRLEVBQUU7WUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUNuRCxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRyxDQUN6QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUV0QixNQUFNLE1BQU0sR0FBRyxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FDcEMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FDbEQsQ0FBQztZQUVGLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU87WUFFcEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzlCLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxPQUFPLENBQy9DLENBQUM7WUFFRixJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPO1lBRW5CLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUMvQixDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsU0FBUyxDQUNuRCxDQUFDO1lBRUYsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUVwQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFO2dCQUMvQixNQUFNLElBQUksR0FBRztvQkFDWCxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7b0JBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsR0FBRztvQkFDcEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHO29CQUNsQixTQUFTLEVBQUUsTUFBTSxDQUFDLEdBQUc7b0JBQ3JCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtvQkFDbkIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO29CQUMzQixRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRO29CQUV2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU87b0JBQzFCLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTztpQkFDM0IsQ0FBQztnQkFFRixJQUFJLENBQUMsVUFBVSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDNUQsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ1osSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTs0QkFDN0IsSUFBSSxLQUFLLEVBQUUsU0FBUyxLQUFLLGNBQWMsRUFBRTtnQ0FDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7b0NBQ3BELE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7d0NBQ3hDLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRTs0Q0FDbEQsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7eUNBQ3ZCO29DQUNILENBQUMsQ0FBQyxDQUFDO2dDQUNMLENBQUMsQ0FBQyxDQUFDO2dDQUNILElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO29DQUNwRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUU7d0NBQ2xELE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO3FDQUN2QjtnQ0FDSCxDQUFDLENBQUMsQ0FBQztnQ0FDSCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0NBQ3BCLE9BQU87NkJBQ1I7NEJBRUQsSUFBSSxLQUFLLEVBQUUsU0FBUyxLQUFLLGdCQUFnQixFQUFFO2dDQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtvQ0FDcEQsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDeEMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUNmLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQ2pELENBQUM7Z0NBQ0osQ0FBQyxDQUFDLENBQUM7Z0NBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO29DQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQ2xDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FDZixPQUFPLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUNqRCxDQUFDO2dDQUVKLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQ0FDcEIsT0FBTzs2QkFDUjs0QkFFRCxJQUFJLEtBQUssRUFBRSxTQUFTLEtBQUssaUJBQWlCLEVBQUU7Z0NBQzFDLE1BQU0sRUFDSixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLDBCQUEwQixFQUMxQixpQ0FBaUMsR0FDbEMsR0FBRyxNQUFNLENBQUM7Z0NBRVgsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixLQUFLLE9BQU8sQ0FBQztnQ0FDL0QsTUFBTSxrQkFBa0IsR0FBRyx3QkFBd0IsS0FBSyxPQUFPLENBQUM7Z0NBRWhFLE1BQU0sVUFBVSxHQUFHLGFBQWE7b0NBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWE7b0NBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQy9CLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FDVixFQUFFLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxxQkFBcUI7d0NBQy9DLEVBQUUsQ0FBQyxhQUFhLEtBQUssTUFBTSxDQUFDLHVCQUF1QixDQUN0RCxFQUFFLFFBQVEsQ0FBQztnQ0FFaEIsTUFBTSxlQUFlLEdBQUcsa0JBQWtCO29DQUN4QyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO29DQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUMvQixDQUFDLEVBQU8sRUFBRSxFQUFFLENBQ1YsRUFBRSxDQUFDLFdBQVcsS0FBSyx3QkFBd0I7d0NBQzNDLEVBQUUsQ0FBQyxhQUFhLEtBQUssMEJBQTBCLENBQ2xELEVBQUUsUUFBUSxDQUFDO2dDQUVoQixJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsZUFBZTtvQ0FBRSxPQUFPO2dDQUU1QyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUN0QyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQ2hDLENBQUM7Z0NBQ0YsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDO29DQUFFLE9BQU87Z0NBRS9CLE1BQU0sbUJBQW1CLEdBQUcsZUFBZTtxQ0FDeEMsR0FBRyxDQUFDLENBQUMsT0FBWSxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQ0FDakMsT0FBTztvQ0FDUCxhQUFhLEVBQUUsQ0FBQztpQ0FDakIsQ0FBQyxDQUFDO3FDQUNGLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dDQUV4QyxJQUFJLGdCQUF3QixDQUFDO2dDQUU3QixJQUFJLGlDQUFpQyxJQUFJLENBQUMsRUFBRTtvQ0FDMUMsZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxJQUFJLENBQUMsQ0FBQztpQ0FDL0Q7cUNBQU0sSUFDTCxpQ0FBaUMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLEVBQzlEO29DQUNBLGdCQUFnQjt3Q0FDZCxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7NENBQzdDLEVBQUUsYUFBYSxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUM7aUNBQy9DO3FDQUFNO29DQUNMLGdCQUFnQjt3Q0FDZCxtQkFBbUIsQ0FBQyxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7NENBQ3hELEVBQUUsYUFBYSxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUM7aUNBQy9DO2dDQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsVUFBVSxFQUNWLGVBQWUsRUFDZixXQUFXLEVBQ1gsZ0JBQWdCLENBQ2pCLENBQUM7Z0NBRUYsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0NBQ3ZELFlBQVksQ0FBQyxxQkFBcUIsR0FBRyx3QkFBd0IsQ0FBQztnQ0FDOUQsWUFBWSxDQUFDLHVCQUF1QjtvQ0FDbEMsMEJBQTBCLENBQUM7Z0NBQzdCLFlBQVksQ0FBQyw4QkFBOEI7b0NBQ3pDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztnQ0FFdkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dDQUNwQixPQUFPOzZCQUNSO3lCQUNGO3dCQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO3dCQUN0QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM1QyxDQUFDO2lCQUNGLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxJQUFJLFFBQVEsRUFBRSxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FDcEQsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FDekMsQ0FBQztZQUNGLElBQUksQ0FBQyxRQUFRO2dCQUFFLE9BQU87WUFFdEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQ3BDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxRQUFRLENBQ2xELENBQUM7WUFDRixJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBRXBCLG1GQUFtRjtZQUVuRixzQkFBc0I7WUFFdEIsd0ZBQXdGO1lBRXhGLHVCQUF1QjtZQUV2QixJQUFJLGFBQWEsR0FBUSxJQUFJLENBQUM7WUFFOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQ3BELE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7b0JBQ3hDLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRTt3QkFDbEQsYUFBYSxHQUFHLE9BQU8sQ0FBQztxQkFDekI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO2dCQUNwRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUU7b0JBQ2xELGFBQWEsR0FBRyxPQUFPLENBQUM7aUJBQ3pCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxxQ0FBcUM7WUFDckMsTUFBTSxJQUFJLEdBQUc7Z0JBQ1gsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHO2dCQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLEdBQUc7Z0JBQ3BCLHNCQUFzQjtnQkFDdEIseUJBQXlCO2dCQUN6QixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ25CLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtnQkFDM0IsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO2dCQUMzQixPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU87Z0JBQzFCLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTzthQUMzQixDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzVELElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNaLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7d0JBQzdCLDZDQUE2Qzt3QkFDN0Msc0JBQXNCO3dCQUN0Qix3QkFBd0I7d0JBQ3hCLCtDQUErQzt3QkFDL0MsdUNBQXVDO3dCQUN2QyxvQkFBb0I7d0JBQ3BCLE1BQU07d0JBRU4sZ0RBQWdEO3dCQUNoRCxzQkFBc0I7d0JBQ3RCLHdCQUF3Qjt3QkFDeEIseUNBQXlDO3dCQUN6Qyx1Q0FBdUM7d0JBQ3ZDLG9CQUFvQjt3QkFDcEIsTUFBTTt3QkFFTixpREFBaUQ7d0JBQ2pELHNCQUFzQjt3QkFDdEIsd0JBQXdCO3dCQUN4Qix1Q0FBdUM7d0JBQ3ZDLG9CQUFvQjt3QkFDcEIsTUFBTTt3QkFDTiwrRkFBK0Y7d0JBQy9GLHFEQUFxRDt3QkFDckQsOENBQThDO3dCQUM5Qyw4Q0FBOEM7d0JBQzlDLDRDQUE0Qzt3QkFDNUMsK0NBQStDO3dCQUMvQyxRQUFRO3dCQUVSLDhEQUE4RDt3QkFDOUQsOENBQThDO3dCQUM5QywyQ0FBMkM7d0JBQzNDLGlCQUFpQjt3QkFDakIsUUFBUTt3QkFFUixzQkFBc0I7d0JBQ3RCLHdCQUF3Qjt3QkFDeEIsa0NBQWtDO3dCQUNsQyxvQkFBb0I7d0JBQ3BCLE1BQU07d0JBRU4sSUFBSTt3QkFFSixJQUFJO3dCQUNKLElBQ0UsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxLQUFLOzRCQUN2QyxFQUFFLFdBQVcsRUFBRTs0QkFDZixFQUFFLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQzs0QkFDQSxPQUFPLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7eUJBQ3pDO3dCQUNELE1BQU0sT0FBTyxHQUFHOzRCQUNkLFNBQVMsRUFBRSxhQUFhLENBQUMsR0FBRzs0QkFDNUIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0I7NEJBQy9CLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTt5QkFDNUIsQ0FBQzt3QkFFRixJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQzs0QkFDcEQsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0NBQ1osd0JBQXdCO2dDQUN4QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0NBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUM1QyxDQUFDOzRCQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7Z0NBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsQ0FBQzs0QkFDOUQsQ0FBQzt5QkFDRixDQUFDLENBQUM7d0JBQ0gsT0FBTztxQkFDUjtvQkFFRCx3QkFBd0I7b0JBQ3hCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVDLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtvQkFDVixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsSUFBSTtTQUNMO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUMvQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRyxDQUN6QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUV0QixNQUFNLE1BQU0sR0FBRyxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FDcEMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FDbEQsQ0FBQztZQUVGLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU87WUFFcEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzlCLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxPQUFPLENBQy9DLENBQUM7WUFFRixJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPO1lBRW5CLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUMvQixDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsU0FBUyxDQUNuRCxDQUFDO1lBRUYsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUVwQixJQUFJLGFBQWEsR0FBUSxJQUFJLENBQUM7WUFFOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQ3BELE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7b0JBQ3hDLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRTt3QkFDbEQsYUFBYSxHQUFHLE9BQU8sQ0FBQztxQkFDekI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO2dCQUNwRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUU7b0JBQ2xELGFBQWEsR0FBRyxPQUFPLENBQUM7aUJBQ3pCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFO2dCQUMvQixNQUFNLElBQUksR0FBRztvQkFDWCxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7b0JBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsR0FBRztvQkFDcEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHO29CQUNsQixTQUFTLEVBQUUsTUFBTSxDQUFDLEdBQUc7b0JBQ3JCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtvQkFDbkIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO29CQUMzQixRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRO29CQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU87b0JBQzFCLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTztpQkFDM0IsQ0FBQztnQkFDRixJQUFJLENBQUMsVUFBVSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDNUQsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ1osSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTs0QkFDN0IsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtnQ0FDbkMsYUFBYSxHQUFHO29DQUNkLEdBQUcsYUFBYTtvQ0FDaEIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO29DQUMvQixRQUFRLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO29DQUN6RCxLQUFLLEVBQUUsS0FBSztpQ0FDYixDQUFDOzZCQUNIO2lDQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7Z0NBQ3hDLE1BQU0sT0FBTyxHQUFHLGFBQWEsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUU7b0NBQ3pELE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNuQyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQ2hCLEVBQUUsQ0FBQyxjQUFjLElBQUksUUFBUSxDQUFDLGNBQWM7d0NBQzVDLEVBQUUsQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLFlBQVk7d0NBQ3hDLEVBQUUsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUk7d0NBQ3hCLEVBQUUsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLEtBQUs7d0NBQzFCLEVBQUUsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLEtBQUssQ0FDN0IsQ0FBQztnQ0FDSixDQUFDLENBQUMsQ0FBQztnQ0FFSCxhQUFhLEdBQUc7b0NBQ2QsR0FBRyxhQUFhO29DQUNoQixRQUFRLEVBQUUsT0FBTztvQ0FDakIsS0FBSyxFQUFFLEtBQUs7aUNBQ2IsQ0FBQzs2QkFDSDtpQ0FBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssWUFBWSxFQUFFO2dDQUMzQyxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDaEQsQ0FBQyxFQUFPLEVBQUUsRUFBRTtvQ0FDVixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLElBQUksQ0FDbkMsQ0FBQztvQ0FDRixJQUFJLEtBQUssRUFBRTt3Q0FDVCxPQUFPOzRDQUNMLEdBQUcsRUFBRTs0Q0FDTCxjQUFjLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjs0Q0FDdkMsWUFBWSxFQUFFLEtBQUssQ0FBQyxlQUFlOzRDQUNuQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFFBQVE7NENBQ3JCLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUTs0Q0FDckIsUUFBUSxFQUFFLEtBQUssQ0FBQyxXQUFXO3lDQUM1QixDQUFDO3FDQUNIO29DQUNELE9BQU8sRUFBRSxDQUFDO2dDQUNaLENBQUMsQ0FDRixDQUFDO2dDQUVGLGFBQWEsR0FBRztvQ0FDZCxHQUFHLGFBQWE7b0NBQ2hCLFFBQVEsRUFBRSxlQUFlO29DQUN6QixLQUFLLEVBQUUsS0FBSztpQ0FDYixDQUFDOzZCQUNIOzRCQUVELE1BQU0sT0FBTyxHQUFHO2dDQUNkLFNBQVMsRUFBRSxhQUFhLENBQUMsR0FBRztnQ0FDNUIsSUFBSSxFQUFFLGFBQWE7NkJBQ3BCLENBQUM7NEJBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0NBQ3BELElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29DQUNaLHdCQUF3QjtvQ0FDeEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29DQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQ0FDNUMsQ0FBQztnQ0FDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO29DQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLENBQUM7Z0NBQzlELENBQUM7NkJBQ0YsQ0FBQyxDQUFDOzRCQUNILE9BQU87eUJBQ1I7d0JBRUQsd0JBQXdCO3dCQUN4QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM1QyxDQUFDO29CQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7d0JBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQztvQkFDM0QsQ0FBQztpQkFDRixDQUFDLENBQUM7YUFDSjtTQUNGO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLFNBQXVCLEVBQUUsWUFBMEI7UUFDbkUsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLElBQUssR0FBRyxTQUFTLENBQUMsSUFBSyxDQUFDO1FBQ3JELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFJLEdBQUcsU0FBUyxDQUFDLEdBQUksQ0FBQztRQUVuRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQscUJBQXFCLENBQ25CLEdBQWtCLEVBQ2xCLEdBQWlFO1FBRWpFLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNuQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFWCxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRTtZQUN4QixFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDdEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUN6QjtRQUNELElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRTtZQUNqRCxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEQ7UUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDakQsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3REO1FBRUQsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDeEIsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSyxHQUFHLEVBQUUsQ0FBQztZQUMxQixHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNqQjtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELHVCQUF1QixDQUFDLFFBQXVCO1FBQzdDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLDZCQUE2QjtRQUVsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTTthQUN4QixVQUFVLEVBQUU7YUFDWixNQUFNLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTNELE1BQU0sVUFBVSxHQUFHLENBQ2pCLENBQStELEVBQy9ELENBQVMsRUFDVCxFQUFFO1lBQ0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0MsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDeEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDdEIsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFO1lBQ3hDLE9BQU8sQ0FBQyxDQUNOLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSTtnQkFDMUIsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJO2dCQUMxQixDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUc7Z0JBQ3pCLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUMxQixDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ2hELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFdEQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDL0IsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdEQsT0FBTyxjQUFjLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxTQUFpQjtRQUMxQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzVDLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FDekUsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1NBQ2xCO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUNoQjtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELFVBQVUsQ0FBQyxTQUFpQjtRQUMxQixNQUFNLE9BQU8sR0FBRztZQUNkLFdBQVcsRUFBRSxNQUFNO1lBQ25CLFFBQVEsRUFBRSxFQUFFO1lBQ1osSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsT0FBTztZQUNsQixLQUFLLEVBQUUsQ0FBQztZQUNSLGFBQWEsRUFBRSxTQUFTLEdBQUcsQ0FBQztZQUM1QixnQkFBZ0IsRUFBRTtnQkFDaEIsQ0FBQyxFQUFFLENBQUM7Z0JBQ0osQ0FBQyxFQUFFLENBQUM7Z0JBQ0osSUFBSSxFQUFFLElBQUk7YUFDWDtZQUNELFFBQVEsRUFBRSxFQUFFO1lBQ1osYUFBYSxFQUFFLEVBQUU7WUFDakIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUN4RCxDQUFDLElBQVMsRUFBRSxFQUFFLENBQ1osSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNLENBQ2xFLENBQUM7UUFFRixtQ0FBbUM7UUFDbkMsUUFBUTtRQUNSLHNEQUFzRDtRQUN0RCx1REFBdUQ7UUFDdkQsdUVBQXVFO1FBQ3ZFLDZDQUE2QztRQUM3QyxvREFBb0Q7UUFDcEQsb0RBQW9EO1FBQ3BELGdFQUFnRTtRQUNoRSwrREFBK0Q7UUFDL0QsYUFBYTtRQUViLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVqRSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxTQUFTLEdBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUNqQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsS0FBSyxVQUFVLENBQzdDLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRztZQUNsQixXQUFXLEVBQUUsVUFBVTtZQUN2QixRQUFRLEVBQUUsQ0FBQztZQUNYLElBQUksRUFBRSxJQUFJO1lBQ1YsU0FBUyxFQUFFLElBQUk7WUFDZixLQUFLLEVBQUUsQ0FBQztZQUNSLGFBQWEsRUFBRSxTQUFTLEdBQUcsQ0FBQztZQUM1QixnQkFBZ0IsRUFBRTtnQkFDaEIsQ0FBQyxFQUFFLENBQUM7Z0JBQ0osQ0FBQyxFQUFFLENBQUM7Z0JBQ0osSUFBSSxFQUFFLElBQUk7YUFDWDtZQUNELFFBQVEsRUFBRSxFQUFFO1lBQ1osYUFBYSxFQUFFLEVBQUU7U0FDbEIsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBNkIsRUFBRSxTQUFrQjtRQUNuRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDckMsTUFBTSxRQUFRLEdBQVEsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRSxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ25DLE1BQU0sU0FBUyxHQUFHLE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7UUFDL0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNyQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVc7WUFDckMsZUFBZSxFQUFFLFlBQVksQ0FBQyxHQUFHO1lBQ2pDLEdBQUcsRUFBRSxTQUFTO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxXQUFXLEdBQUc7WUFDbEIsR0FBRyxZQUFZO1lBQ2YsZUFBZSxFQUFFLFlBQVksQ0FBQyxHQUFHO1lBQ2pDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDNUMsR0FBRyxFQUFFLFNBQVM7WUFDZCxjQUFjLEVBQUUsSUFBSTtZQUNwQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7UUFFRixJQUFJLFdBQVcsS0FBSyxNQUFNLEVBQUU7WUFDMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFdEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDckIsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFDcEMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDcEMsQ0FBQztZQUNGLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRXBDLElBQUksUUFBUSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUV0QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztnQkFDckMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFFNUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUU1QyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzVDLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDakIsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRXBELE1BQU0sU0FBUyxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFbkQsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7Z0JBQzNDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO2dCQUMzQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQzthQUMvQztZQUVBLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFNBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQWUsQ0FBQyxJQUFJLENBQ2xFLFlBQVksQ0FDYixDQUFDO1lBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNsRTthQUFNLElBQUksV0FBVyxLQUFLLE9BQU8sRUFBRTtZQUNsQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNsQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUNwQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUNwQyxDQUFDO1lBRUYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDbkMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFDckMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FDckMsQ0FBQztZQUVGLGlDQUFpQztZQUNqQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQ3hDLGNBQWMsRUFDZCxlQUFlLENBQ2hCLENBQUM7WUFFRixJQUFJLFNBQVMsRUFBRTtnQkFDYixvREFBb0Q7Z0JBQ3BELFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNwRSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNyRTtpQkFBTTtnQkFDTCxXQUFXO2dCQUNYLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNwQztZQUVBLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDaEQ7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxPQUF5QixFQUFFLFNBQWtCO1FBQy9ELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUVyQyxNQUFNLE9BQU8sR0FBRztZQUNkLEdBQUcsRUFBRSxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNqQyxXQUFXLEVBQUUsYUFBYTtZQUMxQixXQUFXLEVBQUUsT0FBTztZQUNwQixnQkFBZ0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDdEQsbUJBQW1CLEVBQUU7Z0JBQ25CLEtBQUssRUFBRSxDQUFDO2dCQUNSLElBQUksRUFBRSxJQUFJO2FBQ1g7WUFDRCxrQkFBa0IsRUFBRTtnQkFDbEIsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLElBQUk7YUFDWDtTQUNGLENBQUM7UUFFRixJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUV2QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNyQixPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUNqQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUNqQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDckIsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFDaEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDaEMsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2xDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksYUFBYSxDQUFDO1lBQzVDLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQztTQUNqQixDQUFDLENBQUM7UUFFSCxJQUFJLE9BQU8sSUFBSSxNQUFNLEVBQUU7WUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdEQsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDakMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ3JDLE1BQU0sUUFBUSxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBRTVDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNsRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbEQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDO2dCQUNuQixNQUFNLFNBQVMsR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEQsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVuRCxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ25DLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDbkMsQ0FBQyxHQUFHLFFBQVEsQ0FBQzthQUNkO1lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ3JCLHVCQUF1QixFQUFFLFNBQVUsR0FBRyxDQUFDO2dCQUN2QyxxQkFBcUIsRUFBRSxNQUFNO2FBQzlCLENBQUMsQ0FBQztZQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFNBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQWUsQ0FBQyxJQUFJLENBQ3ZFLGFBQWEsQ0FDZCxDQUFDO1lBQ0YsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUM3RDthQUFNLElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRTtZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBZSxDQUFDLElBQUksQ0FDM0QsYUFBYSxDQUNkLENBQUM7WUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNuRTtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDL0MsSUFBSSxDQUFDLE1BQU0sRUFDWCxDQUFDLEVBQ0QsQ0FBQyxFQUNELENBQUMsRUFDRCxDQUFDLEVBQ0QsQ0FBQyxFQUNELE9BQU8sQ0FDUixDQUFDO1FBRUYsY0FBYztRQUNkLElBQUk7WUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDaEM7UUFBQyxNQUFNLEdBQUU7UUFFVixJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsYUFBcUIsRUFBRSxjQUFzQjtRQUMvRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRWpDLHVCQUF1QjtRQUN2QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMxQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFL0MsOEJBQThCO1FBQzlCLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQjtRQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXhELGtCQUFrQjtRQUNsQixLQUFLLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsU0FBUyxFQUFFLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFDdkQsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFO2dCQUM1QyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUVwQyxNQUFNLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFM0MsTUFBTSxRQUFRLEdBQUc7b0JBQ2YsSUFBSSxFQUFFLENBQUM7b0JBQ1AsR0FBRyxFQUFFLENBQUM7b0JBQ04sS0FBSyxFQUFFLGFBQWE7b0JBQ3BCLE1BQU0sRUFBRSxjQUFjO2lCQUN2QixDQUFDO2dCQUVGLGtCQUFrQjtnQkFDbEIsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUN0QyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ25DLE9BQU8sQ0FBQyxDQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSzt3QkFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJO3dCQUN0QyxJQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU07d0JBQ3pDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUN0QyxDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ2YsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDakI7YUFDRjtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUMsQ0FBQyxzQkFBc0I7SUFDckMsQ0FBQztJQUVELGlCQUFpQjtRQUNmLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFO2dCQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBUyxDQUFDO2dCQUNyRCxJQUFJLE1BQU0sSUFBSyxNQUFjLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRTtvQkFDcEQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUN2QjtnQkFFRCxJQUFJLE1BQU0sSUFBSyxNQUFjLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtvQkFDaEQsSUFBSSxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRTt3QkFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO3FCQUM5QztpQkFDRjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFTLENBQUM7UUFFcEQsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUU7WUFDM0MsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUM5QyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQ1YsRUFBRSxDQUFDLFdBQVcsS0FBSyxVQUFVO2dCQUM3QixFQUFFLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUNqRCxDQUFDO1lBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEI7WUFFRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBaUI7UUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM1QyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsR0FBRyxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksR0FBRyxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ2hFLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtZQUNuRCxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUFFLE9BQU87UUFFaEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUM5QyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ3pFLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FDcEQsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUN2QyxDQUFDO1FBRUYsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUM5QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMEJBQTBCLENBQ3hCLENBQWdCLEVBQ2hCLENBQWdCLEVBQ2hCLFlBQW9CLENBQUM7UUFFckIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUVwQyxPQUFPLENBQUMsQ0FDTixDQUNFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFHLFNBQVMsSUFBSSx5QkFBeUI7WUFDcEYsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLHdCQUF3QjtZQUNuRixPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLElBQUksZUFBZTtZQUN6RSxPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQ3ZELENBQUMsZUFBZTtTQUNsQixDQUFDO0lBQ0osQ0FBQztJQUVELHdCQUF3QixDQUFDLFNBQWlCO1FBS3hDLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUU7WUFDbEQsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN2RCxLQUFLLE1BQU0sT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7b0JBQ3RDLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7d0JBQzdCLE9BQU87NEJBQ0wsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLHVCQUF1QixJQUFJLElBQUk7NEJBQ2hFLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsSUFBSSxJQUFJOzRCQUM1RCxhQUFhLEVBQUUsT0FBTyxDQUFDLFNBQVM7eUJBQ2pDLENBQUM7cUJBQ0g7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWEsRUFBRSxJQUFZLEVBQUUsR0FBRyxHQUFHLEdBQUc7UUFDN0MsSUFBSSxNQUFjLENBQUM7UUFFbkIsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ2pCLE1BQU0sR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDL0I7YUFBTSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDeEIsTUFBTSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO1NBQzNCO2FBQU07WUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7U0FDeEQ7UUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLEdBQUcsR0FBRyxHQUFHO1FBQ2hELElBQUksS0FBYSxDQUFDO1FBRWxCLDRGQUE0RjtRQUU1RixJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDakIsS0FBSyxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUMvQjthQUFNLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUN4QixLQUFLLEdBQUcsTUFBTSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQzdCO2FBQU07WUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7U0FDeEQ7UUFFRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsSUFBSTtZQUNGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFO2dCQUN2RSxRQUFRLEVBQUUsSUFBSTthQUNmLENBQUMsQ0FBQztZQUNILE9BQU8sTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDO1NBQ3pFO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUI7UUFDckIsSUFBSTtZQUNGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFO2dCQUNuRSxRQUFRLEVBQUUsSUFBSTthQUNmLENBQUMsQ0FBQztZQUVILFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDO1lBQ2pELFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXO2dCQUNwQyw0RkFBNEYsQ0FBQztZQUUvRixPQUFPLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztTQUN6RTtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxRQUFjO1FBQ3JDLE1BQU0sa0JBQWtCLEdBQ3RCLFFBQVE7WUFDUixJQUFJLENBQUMsTUFBTTtpQkFDUixVQUFVLEVBQUU7aUJBQ1osTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBRSxHQUFXLENBQUMsU0FBUyxDQUFDO2lCQUN2QyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2IsRUFBRSxFQUFHLEdBQVcsQ0FBQyxTQUFTO2dCQUMxQixDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUk7Z0JBQ1gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHO2dCQUNWLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUM7YUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDUixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRXpCLEtBQUssTUFBTSxPQUFPLElBQUksa0JBQWtCLEVBQUU7WUFDeEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFO2dCQUNyQixDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztnQkFDbkMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7Z0JBQ25DLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSzthQUNyQixDQUFDLENBQUM7U0FDSjtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFO1lBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsSUFBSSxnQkFBZ0IsRUFBRTtnQkFDcEIsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQzthQUNwRDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDOUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtnQkFDL0IsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxnQkFBZ0IsRUFBRTtvQkFDcEIsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7b0JBQzNDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO29CQUMzQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQztpQkFDcEQ7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDhCQUE4QjtRQUM1QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNO2FBQ2pDLFVBQVUsRUFBRTthQUNaLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUUsR0FBVyxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUM7YUFDbEQsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2IsRUFBRSxFQUFHLEdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRztZQUMxQixLQUFLLEVBQUcsR0FBVyxDQUFDLElBQUksRUFBRSxXQUFXO1lBQ3JDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSTtZQUNYLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRztZQUNWLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUM7WUFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7WUFDdEQsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7U0FDekQsQ0FBQyxDQUFDLENBQUM7UUFFTixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFHbkIsQ0FBQztRQUNKLEtBQUssTUFBTSxLQUFLLElBQUksZ0JBQWdCLEVBQUU7WUFDcEMsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFO2dCQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRTtvQkFDbkIsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7b0JBQ2pDLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO29CQUNqQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7b0JBQ2xCLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTTtvQkFDZixDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUs7aUJBQ2YsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFO2dCQUMvQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxlQUFlLEVBQUU7b0JBQ25CLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQztvQkFDMUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDO29CQUMxQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7b0JBQ2xELEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQztvQkFDakQsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDO2lCQUNqRDtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUM5QyxDQUFDLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFO2dCQUNwQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxlQUFlLEVBQUU7b0JBQ25CLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQztvQkFDMUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDO29CQUMxQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7b0JBQ2xELEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQztvQkFDakQsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDO2lCQUNqRDtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNO2FBQ3JCLFVBQVUsRUFBRTthQUNaLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUUsR0FBVyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUM7YUFDaEQsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDWCxPQUFPO2dCQUNMLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO2dCQUNuQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztnQkFDckMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLENBQUM7Z0JBQ3pELE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDO2dCQUMzRCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7Z0JBQ2hCLFdBQVcsRUFBRyxHQUFXLENBQUMsSUFBSTthQUMvQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFTCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRXpCLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLENBQ1IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxFQUNsRSxJQUFJLENBQUMsSUFBSSxDQUNQLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDTixHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVc7Z0JBQzVELEdBQUcsQ0FBQyxXQUFXLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUNuRSxDQUNGLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQzlDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLElBQUksT0FBTyxFQUFFO2dCQUNYLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQzthQUM1QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTTthQUNyQixVQUFVLEVBQUU7YUFDWixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFFLEdBQVcsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDO2FBQ3BELEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ1gsT0FBTztnQkFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztnQkFDbkMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7Z0JBQ3JDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLENBQUM7Z0JBQ2xELEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztnQkFDaEIsV0FBVyxFQUFHLEdBQVcsQ0FBQyxJQUFJO2FBQy9CLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVMLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFFekIsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDM0IsTUFBTSxDQUFDLEdBQUcsQ0FDUixHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLEVBQzFFLElBQUksQ0FBQyxJQUFJLENBQ1AsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVztnQkFDaEUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEtBQUssUUFBUSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQ3ZFLENBQ0YsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDOUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDckUsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUN4QyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7Z0JBQ3ZDLENBQUMsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO2FBQ2hDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFvQixLQUFLO1FBQzFDLElBQUksUUFBUSxFQUFFO1lBQ1osSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsT0FBTzthQUNSO1lBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksZUFBZSxFQUFFO2dCQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUM7YUFDcEM7U0FDRjtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO1lBQ3BELE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ3hDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQ3JFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYTthQUN4RCxNQUFNLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQzthQUN6QyxHQUFHLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUNwQixNQUFNLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FDL0QsT0FBTyxDQUFDO1lBQ1YsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXBDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRztZQUMzQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDcEIsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2xELElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNaLHdCQUF3QjtnQkFDeEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQzdELENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVTtRQUNSLE1BQU0sT0FBTyxHQUFRO1lBQ25CLElBQUksRUFBRSxLQUFLO1lBQ1gsYUFBYSxFQUFFLEVBQUU7WUFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUztZQUMvQixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRO1lBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUc7U0FDNUIsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxRQUFRLEVBQUU7WUFDckMsc0JBQXNCO1lBQ3RCLE9BQU8sQ0FBQyxhQUFhLEdBQUcscUJBQXFCLENBQUM7WUFDOUMsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDdEI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssYUFBYSxFQUFFO1lBQ2pELE9BQU8sQ0FBQyxhQUFhLEdBQUcscUJBQXFCLENBQUM7WUFDOUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDcEIsT0FBTyxDQUFDLE1BQU07Z0JBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ3pDLENBQUMsTUFBTSxDQUFDO1NBQ1o7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQzdDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsc0JBQXNCLENBQUM7WUFDL0MsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDdEI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYyxFQUFFO1lBQ2xELE9BQU8sQ0FBQyxhQUFhLEdBQUcsc0JBQXNCLENBQUM7WUFDL0MsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDcEIsT0FBTyxDQUFDLE1BQU07Z0JBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQzFDLENBQUMsTUFBTSxDQUFDO1NBQ1o7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxFQUFFO1lBQ3hDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLENBQUM7WUFDMUMsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDdEI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQzdDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLENBQUM7WUFDMUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDcEIsT0FBTyxDQUFDLE1BQU07Z0JBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUMxRTtRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQ2pFLFFBQVEsRUFBRSxJQUFJO1lBQ2QsSUFBSSxFQUFFLElBQUk7WUFDVixVQUFVLEVBQUUsSUFBSTtZQUNoQixRQUFRLEVBQUUsUUFBUTtZQUNsQixXQUFXLEVBQUUscUJBQXFCLEVBQUUsOEJBQThCO1NBQ25FLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUN2RCxRQUFRLENBQUMsaUJBQWlCLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUMvQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzlCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUU7Z0JBQzlCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBQ3BDLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUU7b0JBQ3RDLFFBQVEsR0FBRyxJQUFJLENBQUM7aUJBQ2pCO2dCQUNELElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxjQUFjLEVBQUU7b0JBQzNDLFFBQVEsR0FBRyxTQUFTLENBQUM7aUJBQ3RCO2dCQUNELElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxhQUFhLEVBQUU7b0JBQzFDLFFBQVEsR0FBRyxRQUFRLENBQUM7aUJBQ3JCO2dCQUNELElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRTtvQkFDNUMsSUFBSSxjQUFjLEdBQUc7d0JBQ25CLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUc7d0JBQzNCLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87d0JBQy9CLFFBQVEsRUFBRSxRQUFRO3dCQUNsQixPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVE7cUJBQ3pCLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLENBQUM7d0JBQzVELElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFLEdBQUUsQ0FBQztxQkFDdkIsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDNUMsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7d0JBQ2pCLElBQUksR0FBRyxFQUFFLE1BQU0sS0FBSyxTQUFTLEVBQUU7NEJBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDN0QsSUFBSSxDQUFDLGdCQUFnQixDQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQ2xCLEVBQUUsQ0FDSCxDQUFDOzRCQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7eUJBQ3ZEO29CQUNILENBQUM7b0JBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTt3QkFDVixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO29CQUM1RCxDQUFDO2lCQUNGLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtZQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVoQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7YUFBTTtZQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUN2QiwyQ0FBMkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDbEcsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFZLEVBQUUsT0FBWTtRQUNwQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUc7Z0JBQ2YsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO2dCQUNoRCxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7Z0JBQ3hELEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTthQUNwRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzFELElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRTt3QkFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUM7d0JBQ3BELElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQzt3QkFDMUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7NEJBQy9DLDhCQUE4Qjs0QkFDOUIsb0RBQW9EOzRCQUNwRCxJQUFJOzRCQUNKLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxTQUFTLEVBQUU7Z0NBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7NkJBQ3BEOzRCQUNELElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxTQUFTLEVBQUU7Z0NBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDOzZCQUM1Qzt3QkFDSCxDQUFDLENBQUMsQ0FBQzt3QkFDSCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztxQkFDakM7b0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQixDQUFDO2dCQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsNEJBQTRCLENBQUMsQ0FBQztvQkFDOUQsTUFBTSxFQUFFLENBQUM7Z0JBQ1gsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFTO1FBQ2pCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztRQUM1RSxJQUFJLElBQUksRUFBRTtZQUNSLElBQ0UsSUFBSSxDQUFDLE1BQU0sSUFBSSxRQUFRO2dCQUN2QixDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksVUFBVSxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxFQUM1RDtnQkFDQSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7YUFDakQ7aUJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLFNBQVMsRUFBRTtnQkFDdEUsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUM7YUFDM0Q7aUJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLFVBQVUsRUFBRTtnQkFDdkUsT0FBTyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxDQUFDO2FBQ3hEO2lCQUFNO2dCQUNMLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ25DLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQztpQkFDaEQ7cUJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUN0QixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7aUJBQzlDO2dCQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQzthQUN6RDtTQUNGO1FBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDO0lBQ25ELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFVBQVU7UUFDUixNQUFNLE9BQU8sR0FBUTtZQUNuQixJQUFJLEVBQUUsS0FBSztZQUNYLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVM7WUFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTtZQUNqQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHO1lBQzNCLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87U0FDaEMsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxRQUFRLEVBQUU7WUFDckMsT0FBTyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7WUFDeEIsc0JBQXNCO1lBQ3RCLE9BQU8sQ0FBQyxhQUFhLEdBQUcscUJBQXFCLENBQUM7WUFDOUMsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDdEI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssYUFBYSxFQUFFO1lBQ2pELE9BQU8sQ0FBQyxhQUFhLEdBQUcscUJBQXFCLENBQUM7WUFDOUMsT0FBTyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7WUFDeEIsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7U0FDckI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQzdDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsc0JBQXNCLENBQUM7WUFDL0MsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7WUFDekIsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDdEI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYyxFQUFFO1lBQ2xELE9BQU8sQ0FBQyxhQUFhLEdBQUcsc0JBQXNCLENBQUM7WUFDL0MsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7WUFDekIsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7U0FDckI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxFQUFFO1lBQ3hDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLENBQUM7WUFDMUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDcEIsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDdEI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQzdDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLENBQUM7WUFDMUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDcEIsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7U0FDckI7UUFDRCxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FDOUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FDdkMsRUFBRSxNQUFNLENBQUM7UUFFVixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNoRSxRQUFRLEVBQUUsSUFBSTtZQUNkLElBQUksRUFBRSxJQUFJO1lBQ1YsVUFBVSxFQUFFLElBQUk7WUFDaEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsV0FBVyxFQUFFLHFCQUFxQixFQUFFLDhCQUE4QjtTQUNuRSxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDdkQsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7UUFDL0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM5QixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFO2dCQUM5QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO2dCQUNwQyxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO29CQUN0QyxRQUFRLEdBQUcsSUFBSSxDQUFDO2lCQUNqQjtnQkFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYyxFQUFFO29CQUMzQyxRQUFRLEdBQUcsU0FBUyxDQUFDO2lCQUN0QjtnQkFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssYUFBYSxFQUFFO29CQUMxQyxRQUFRLEdBQUcsUUFBUSxDQUFDO2lCQUNyQjtnQkFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUU7b0JBQzVDLElBQUksY0FBYyxHQUFHO3dCQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHO3dCQUMzQixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO3dCQUMvQixRQUFRLEVBQUUsUUFBUTt3QkFDbEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRO3FCQUN6QixDQUFDO29CQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDO3dCQUM1RCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRSxHQUFFLENBQUM7cUJBQ3ZCLENBQUMsQ0FBQztpQkFDSjtnQkFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQzVDLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO3dCQUNqQixJQUFJLEdBQUcsRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFOzRCQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzdELElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQzt5QkFDakQ7b0JBQ0gsQ0FBQztvQkFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO3dCQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLENBQUM7b0JBQzVELENBQUM7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBNzlLVSx5QkFBeUI7NEZBQXpCLHlCQUF5Qix5R0FGekIsQ0FBQyxhQUFhLENBQUMscU9DekQ1Qiw4Z3pEQWs1QmM7OzRGRHYxQkQseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHdCQUF3QixhQUd2QixDQUFDLGFBQWEsQ0FBQzt3V0FNMUIsU0FBUztzQkFEUixTQUFTO3VCQUFDLFlBQVk7Z0JBRU8sWUFBWTtzQkFBekMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBRzVCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHsgTG9jYXRpb24sIFRpdGxlQ2FzZVBpcGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIEZvcm1BcnJheSxcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIFN1YmplY3QsXHJcbiAgU3Vic2NyaXB0aW9uLFxyXG4gIGRlYm91bmNlVGltZSxcclxuICBmaXJzdFZhbHVlRnJvbSxcclxuICBmcm9tRXZlbnQsXHJcbiAgdGFrZVVudGlsLFxyXG59IGZyb20gXCJyeGpzXCI7XHJcblxyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5pbXBvcnQgKiBhcyBmYWJyaWMgZnJvbSBcImZhYnJpY1wiO1xyXG5cclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLXNoYXJlZFwiO1xyXG5cclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGF5b3V0RWRpdENvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9wb3B1cHMvbGF5b3V0LWVkaXQtY29uZmlybWF0aW9uL2xheW91dC1lZGl0LWNvbmZpcm1hdGlvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUHVibGlzaHRhc2tQb3B1cENvbXBvbmVudCB9IGZyb20gXCIuL3B1Ymxpc2h0YXNrLXBvcHVwL3B1Ymxpc2h0YXNrLXBvcHVwLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBTdG9yZVRhc2tSZXZva2VDb21wb25lbnQgfSBmcm9tIFwiLi9zdG9yZS10YXNrLXJldm9rZS9zdG9yZS10YXNrLXJldm9rZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRGVsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL3BvcHVwcy9kZWxldGUtY29uZmlybWF0aW9uL2RlbGV0ZS1jb25maXJtYXRpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERyb3Bkb3duSUYgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9wbGFuby1nZW5lcmFsLmludGVyZmFjZVwiO1xyXG5cclxudHlwZSBCb3VuZEZpeHR1cmVHcm91cCA9IHtcclxuICBmaXh0dXJlR3JvdXA6IGZhYnJpYy5Hcm91cDtcclxuICBvZmZzZXRYOiBudW1iZXI7XHJcbiAgb2Zmc2V0WTogbnVtYmVyO1xyXG4gIF90ZW1wT2xkVG9wPzogbnVtYmVyO1xyXG4gIF90ZW1wT2xkTGVmdD86IG51bWJlcjtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi1tYW5hZ2Utc3RvcmUtcGxhbm9cIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL21hbmFnZS1zdG9yZS1wbGFuby5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vbWFuYWdlLXN0b3JlLXBsYW5vLmNvbXBvbmVudC5zY3NzXCIsXHJcbiAgcHJvdmlkZXJzOiBbVGl0bGVDYXNlUGlwZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYW5hZ2VTdG9yZVBsYW5vQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdFxyXG57XHJcbiAgQFZpZXdDaGlsZChcImJhc2VDYW52YXNcIilcclxuICBjYW52YXNSZWYhOiBFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKFwiY2FudmFzQ29udGFpbmVyXCIpIGNvbnRhaW5lclJlZiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG5cclxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxyXG4gIG9uUmVzaXplKCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzaXplQ2FudmFzKCk7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG5cclxuICBjYW52YXMhOiBmYWJyaWMuQ2FudmFzO1xyXG4gIHpvb21MZXZlbDogbnVtYmVyID0gMTtcclxuICB3YWxsVGhpY2tuZXNzID0gMzA7XHJcbiAgdmVydGljYWxNYXJnaW4gPSAoMS4yNSAvIDEwMCkgKiB0aGlzLnRvUGl4ZWxzKDE1MjQsIFwibW1cIik7XHJcbiAgd2FsbEJpbmRpbmdzID0gbmV3IE1hcDxmYWJyaWMuR3JvdXAsIEJvdW5kRml4dHVyZUdyb3VwW10+KCk7XHJcblxyXG4gIGxheW91dEZvcm06IEZvcm1Hcm91cDtcclxuICBzZWxlY3RlZEZsb29ySWQgPSBuZXcgRm9ybUNvbnRyb2woXCJcIik7XHJcbiAgZml4dHVyZUNvbmZpZ1N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgZml4dHVyZVRlbXBsYXRlSWRTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIG90aGVyRWxlbWVudHNTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBwbGFub0RhdGE6IGFueTtcclxuICBmbG9vckRhdGE6IGFueTtcclxuICBjZG5Vcmw6IHN0cmluZztcclxuICBmaXh0dXJlVGVtcGxhdGVzOiBhbnlbXSA9IFtdO1xyXG4gIGFsbEZpeHR1cmVzOiBhbnlbXSA9IFtdO1xyXG4gIHN0b3JlRmVlZGJhY2s6IGFueTtcclxuXHJcbiAgc2VsZWN0ZWRGaXh0dXJlOiBhbnk7XHJcbiAgc2VsZWN0ZWRGaXh0dXJlRGF0YTogYW55O1xyXG4gIGVkaXRGaXh0dXJlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZWRpdEZpeHR1cmVTZWN0aW9uOiBcImJhc2ljLWRldGFpbHNcIiB8IFwicHJvZHVjdHNcIiB8IFwidm1zXCIgPSBcImJhc2ljLWRldGFpbHNcIjtcclxuICBzdWJtaXRGaXh0dXJlID0gZmFsc2U7XHJcblxyXG4gIHN0b3JlTWV0cmljcyA9IHtcclxuICAgIGZsb29yQ291bnQ6IDAsXHJcbiAgICBmaXh0dXJlQ291bnQ6IDAsXHJcbiAgICB2bUNvdW50OiAwLFxyXG4gIH07XHJcblxyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzUmlnaHRQYW5lbENvbGxhcHNlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNMZWZ0UGFuZWxDb2xsYXBzZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNlbGVjdGVkVmlldzogXCJ0cmVlXCIgfCBcImRldGFpbFwiID0gXCJkZXRhaWxcIjtcclxuXHJcbiAgcHVibGlzaGluZ1N0YXRlOlxyXG4gICAgfCBcImxheW91dFwiXHJcbiAgICB8IFwibGF5b3V0LXJlZG9cIlxyXG4gICAgfCBcImZpeHR1cmVcIlxyXG4gICAgfCBcImZpeHR1cmUtcmVkb1wiXHJcbiAgICB8IFwidm1cIlxyXG4gICAgfCBcInZtLXJlZG9cIlxyXG4gICAgfCBcImNvbXBsZXRlXCJcclxuICAgIHwgXCJcIiA9IFwiXCI7XHJcbiAgZGlzYWJsZWRQdWJsaXNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlzYWJsZUVkaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHRhc2tJbmZvOiBhbnk7XHJcbiAgdGFza1N0eWxlID0ge1xyXG4gICAgbGF5b3V0OiB7IG5hbWU6IFwiWWV0IFRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH0sXHJcbiAgICBmaXh0dXJlOiB7IG5hbWU6IFwiWWV0IFRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH0sXHJcbiAgICB2bTogeyBuYW1lOiBcIllldCBUbyBBc3NpZ25cIiwgY2xhc3M6IFwieWV0VG9Bc3NpZ25cIiB9LFxyXG4gIH07XHJcblxyXG4gIG90aGVyRWxlbWVudExpc3Q6IERyb3Bkb3duSUZbXSA9IFtcclxuICAgIHsgbGFiZWw6IFwiUE9TIENvdW50ZXJcIiwgdmFsdWU6IFwiUE9TIENvdW50ZXJcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJEaXNjdXNzaW9uIFRhYmxlXCIsIHZhbHVlOiBcIkRpc2N1c3Npb24gVGFibGVcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJNaXJyb3JcIiwgdmFsdWU6IFwiTWlycm9yXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiT3RoZXJzXCIsIHZhbHVlOiBcIk90aGVyc1wiIH0sXHJcbiAgXTtcclxuXHJcbiAgaXNVc2VySW50ZXJhY3RlZFdpdGhDYW52YXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6IFN0b3JlQnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0aXRsZUNhc2U6IFRpdGxlQ2FzZVBpcGUsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG5cclxuICAgIHRoaXMuZ3MuZW52aXJvbm1lbnQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZSkgdGhpcy5jZG5VcmwgPSBlLnBsYW5vZ3JhbUNETjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldFBhZ2VEYXRhKCk7XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGE/LmNsaWVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xyXG4gICAgICAgIGlmIChwYXJhbXM/LnBsYW5vSWQpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyhwYXJhbXM/LnBsYW5vSWQpO1xyXG4gICAgICAgICAgaWYgKHBhcmFtcz8uZmxvb3JJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YSA9IHsgX2lkOiBwYXJhbXM/LmZsb29ySWQgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRGbG9vcklkLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGlkKSA9PiB7XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhID0gbnVsbDtcclxuICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhID0gdGhpcy5wbGFub0RhdGE/LmZsb29ycz8uZmluZChcclxuICAgICAgICAoZmxvb3I6IGFueSkgPT4gZmxvb3IuX2lkID09PSBpZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJlbmRlckZsb29yKCk7XHJcbiAgICAgIHRoaXMuZ2V0U3RvcmVGZWVkYmFjayh0aGlzLmZsb29yRGF0YS5wbGFub0lkLCB0aGlzLmZsb29yRGF0YS5faWQsIHt9KTtcclxuICAgICAgdGhpcy50YXNrRGV0YWlscyh0aGlzLmZsb29yRGF0YS5wbGFub0lkLCB0aGlzLmZsb29yRGF0YS5faWQpO1xyXG4gICAgICB0aGlzLmxheW91dEZvcm0uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIGNvbnN0IG5ld1BhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XHJcbiAgICAgIG5ld1BhcmFtcy5zZXQoXCJwbGFub0lkXCIsIHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQpO1xyXG4gICAgICBuZXdQYXJhbXMuc2V0KFwiZmxvb3JJZFwiLCB0aGlzLmZsb29yRGF0YS5faWQpO1xyXG5cclxuICAgICAgdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoXHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLFxyXG4gICAgICAgIG5ld1BhcmFtcy50b1N0cmluZygpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vcklkLnNldFZhbHVlKHRoaXMuZmxvb3JEYXRhLl9pZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMgPSBuZXcgZmFicmljLkNhbnZhcyh0aGlzLmNhbnZhc1JlZj8ubmF0aXZlRWxlbWVudCwge1xyXG4gICAgICBzZWxlY3Rpb25GdWxseUNvbnRhaW5lZDogdHJ1ZSxcclxuICAgICAgcGVyUGl4ZWxUYXJnZXRGaW5kOiB0cnVlLFxyXG4gICAgICB0YXJnZXRGaW5kVG9sZXJhbmNlOiA1LFxyXG4gICAgfSk7XHJcblxyXG4gICAgZnJvbUV2ZW50KHRoaXMuY2FudmFzIGFzIGFueSwgXCJvYmplY3Q6bW9kaWZpZWRcIilcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG1vdmVkT2JqOiBhbnkgPSBlLnRhcmdldDtcclxuXHJcbiAgICAgICAgaWYgKCFtb3ZlZE9iaikgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGUudHJhbnNmb3JtPy5hY3Rpb247XHJcblxyXG4gICAgICAgIGNvbnN0IGlzUmVzaXplID1cclxuICAgICAgICAgIGFjdGlvbiA9PT0gXCJzY2FsZVwiIHx8IGFjdGlvbiA9PT0gXCJzY2FsZVhcIiB8fCBhY3Rpb24gPT09IFwic2NhbGVZXCI7XHJcblxyXG4gICAgICAgIGlmIChpc1Jlc2l6ZSkge1xyXG4gICAgICAgICAgY29uc3QgdHlwZSA9IG1vdmVkT2JqPy5vYmpUeXBlID8/IFwiZ3JvdXBcIjtcclxuXHJcbiAgICAgICAgICBjb25zdCB1cGRhdGVkQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB4OiBtb3ZlZE9iai5sZWZ0LFxyXG4gICAgICAgICAgICB5OiBtb3ZlZE9iai50b3AsXHJcbiAgICAgICAgICAgIHdpZHRoOiBtb3ZlZE9iai5nZXRTY2FsZWRXaWR0aCgpLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IG1vdmVkT2JqLmdldFNjYWxlZEhlaWdodCgpLFxyXG4gICAgICAgICAgICBhbmdsZTogbW92ZWRPYmouYW5nbGUsXHJcbiAgICAgICAgICAgIGVsZW1lbnREYXRhOiBtb3ZlZE9iai5kYXRhLFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIndhbGxcIjoge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZShtb3ZlZE9iaik7XHJcbiAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YS5hbmdsZSA9IHVwZGF0ZWRDb25maWcuYW5nbGU7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IG5ld1dhbGwgPSBhd2FpdCB0aGlzLmRyYXdXYWxsKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLngsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLnksXHJcbiAgICAgICAgICAgICAgICB0aGlzLndhbGxUaGlja25lc3MsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLndpZHRoIC0gMC4yNyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcuZWxlbWVudERhdGFcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAobmV3V2FsbCBhcyBhbnkpLm9ialR5cGUgPSBcIndhbGxcIjtcclxuICAgICAgICAgICAgICAobmV3V2FsbCBhcyBhbnkpLmRhdGEgPSB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRBY3RpdmVPYmplY3QobmV3V2FsbCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNhc2UgXCJvdGhlcnNcIjoge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZShtb3ZlZE9iaik7XHJcbiAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YS5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID1cclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcuYW5nbGU7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IG5ld090aGVyID0gdGhpcy5kcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy54LFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy55LFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5hbmdsZSxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcud2lkdGggLSAyLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5oZWlnaHQgLSAyLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIChuZXdPdGhlciBhcyBhbnkpLm9ialR5cGUgPSBcIm90aGVyc1wiO1xyXG4gICAgICAgICAgICAgIChuZXdPdGhlciBhcyBhbnkpLmRhdGEgPSB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRBY3RpdmVPYmplY3QobmV3T3RoZXIpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjYXNlIFwiZW50cmFuY2VcIjoge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjYXNlIFwiZml4dHVyZVwiOiB7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVXYWxsQ29vcmRpbmF0ZXMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZpeHR1cmVDb29yZGluYXRlcygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlT3RoZXJFbGVtZW50c0Nvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVFbnRyYW5jZUNvb3JkaW5hdGVzKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2V0dXBab29tSGFuZGxlcnMoKTtcclxuXHJcbiAgICB0aGlzLmxpc3RlblRvRGVsZXRlS2V5KCk7XHJcbiAgICB0aGlzLnRvZ2dsZVBhbmVsKFwibGVmdFwiLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlc2l6ZUNhbnZhcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLmNhbnZhcy5zZXREaW1lbnNpb25zKHtcclxuICAgICAgd2lkdGg6IGNvbnRhaW5lci5jbGllbnRXaWR0aCAtIDUwLFxyXG5cclxuICAgICAgaGVpZ2h0OiBjb250YWluZXIuY2xpZW50SGVpZ2h0IC0gNDAsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIHNldHVwWm9vbUhhbmRsZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTp3aGVlbFwiLCAob3B0OiBmYWJyaWMuVEV2ZW50PFdoZWVsRXZlbnQ+KSA9PiB7XHJcbiAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuXHJcbiAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSB7XHJcbiAgICAgICAgdGhpcy5pc1VzZXJJbnRlcmFjdGVkV2l0aENhbnZhcyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZGVsdGEgPSBlLmRlbHRhWTtcclxuICAgICAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgICAgICB6b29tICo9IDAuOTk1ICoqIGRlbHRhO1xyXG5cclxuICAgICAgICB6b29tID0gTWF0aC5tYXgoMC4yLCBNYXRoLm1pbih6b29tLCAzKSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FudmFzLnpvb21Ub1BvaW50KFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB4OiBlLm9mZnNldFgsXHJcbiAgICAgICAgICAgIHk6IGUub2Zmc2V0WSxcclxuICAgICAgICAgIH0gYXMgZmFicmljLlBvaW50LFxyXG4gICAgICAgICAgem9vbVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgbGV0IGxhc3RQb3NYID0gMDtcclxuICAgIGxldCBsYXN0UG9zWSA9IDA7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTpkb3duXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIW9wdC50YXJnZXQpIHtcclxuICAgICAgICBpc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5zZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6bW92ZVwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGlzRHJhZ2dpbmcgJiYgdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0pIHtcclxuICAgICAgICB0aGlzLmlzVXNlckludGVyYWN0ZWRXaXRoQ2FudmFzID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgY29uc3QgdnB0ID0gdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm07XHJcbiAgICAgICAgdnB0WzRdICs9IGUuY2xpZW50WCAtIGxhc3RQb3NYO1xyXG4gICAgICAgIHZwdFs1XSArPSBlLmNsaWVudFkgLSBsYXN0UG9zWTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6dXBcIiwgKCkgPT4ge1xyXG4gICAgICBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2FudmFzLnNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFBhZ2VEYXRhKCkge1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRUaXRsZShcIk1hbmFnZSBTdG9yZSBQbGFub1wiKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiUGxhbm9ncmFtXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2UtcGxhbm9ncmFtc1wiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogXCJcIixcclxuICAgICAgICBwYXRoOiBcIlwiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgb25GaXh0dXJlU2F2ZSgpIHtcclxuICAgIHRoaXMuc3VibWl0Rml4dHVyZSA9IHRydWU7XHJcbiAgICAvLyB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEudGFza1R5cGUgPSB0aGlzLnB1Ymxpc2hpbmdTdGF0ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnN1Ym1pdEZpeHR1cmUgPSBmYWxzZTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBvbkZpeHR1cmVQYWdlQ2FuY2VsKCkge1xyXG4gICAgdGhpcy5zdWJtaXRGaXh0dXJlID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgdGhpcy5lZGl0Rml4dHVyZVNlY3Rpb24gPSBcImJhc2ljLWRldGFpbHNcIjtcclxuICAgIHRoaXMuZWRpdEZpeHR1cmUgPSBmYWxzZTtcclxuICAgIHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgb25GaXh0dXJlU3VibWl0KGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudD8uc2hlbGYpIHtcclxuICAgICAgZXZlbnQuc2hlbGYgPSBldmVudC5zaGVsZi5tYXAoKHNoZWxmOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgZmluZFNoZWxmID0gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnLmZpbmQoXHJcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZS5zaGVsZk51bWJlciA9PSBpbmRleCArIDFcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChmaW5kU2hlbGYpIHtcclxuICAgICAgICAgIHNoZWxmID0geyAuLi5maW5kU2hlbGYsIC4uLnNoZWxmIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBkZXRhaWxzID1cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnW1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5zaGVsZkNvbmZpZy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICBkZXRhaWxzLnNoZWxmTnVtYmVyID0gaW5kZXggKyAxO1xyXG4gICAgICAgICAgc2hlbGYgPSB7IC4uLmRldGFpbHMsIC4uLnNoZWxmIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzaGVsZjtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5zaGVsZkNvbmZpZyA9IGV2ZW50LnNoZWxmO1xyXG4gICAgfSBlbHNlIGlmIChldmVudD8uc2VjdGlvbikge1xyXG4gICAgICBldmVudC5zZWN0aW9uLmZvckVhY2goKHNlYzogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IG51bWJlciA9IHNlYz8uc2hlbHZlcz8ubWFwKChlbGU6IGFueSkgPT5cclxuICAgICAgICAgIHBhcnNlSW50KGVsZS5zcGxpdChcIiBcIilbMV0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGE/LnNoZWxmQ29uZmlnLmZvckVhY2goKHNoZWxmOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChudW1iZXIuaW5jbHVkZXMoc2hlbGYuc2hlbGZOdW1iZXIpKSB7XHJcbiAgICAgICAgICAgIHNoZWxmLnpvbmUgPSBzZWMuem9uZTtcclxuICAgICAgICAgICAgc2hlbGYucHJvZHVjdEJyYW5kTmFtZSA9IHNlYy5wcm9kdWN0QnJhbmROYW1lO1xyXG4gICAgICAgICAgICBzaGVsZi5wcm9kdWN0Q2F0ZWdvcnkgPSBzZWMucHJvZHVjdENhdGVnb3J5O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQ/LnZtQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS52bUNvbmZpZyA9IGV2ZW50LnZtQ29uZmlnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgLy8gdGhpcy5mbG9vckRhdGEgPSBudWxsXHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgICAgICB0aGlzLmVkaXRGaXh0dXJlU2VjdGlvbiA9IFwiYmFzaWMtZGV0YWlsc1wiO1xyXG4gICAgICAgIHRoaXMuZWRpdEZpeHR1cmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdldFN0b3JlRml4dHVyZXModGhpcy5wbGFub0RhdGE/Ll9pZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZVBhbmVsKHNpZGU6IFwibGVmdFwiIHwgXCJyaWdodFwiLCBhY3Rpb24/OiBib29sZWFuKSB7XHJcbiAgICBpZiAoc2lkZSA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZCA9IGFjdGlvbiA/PyAhdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkID0gYWN0aW9uID8/ICF0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZDtcclxuICAgIH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlc2l6ZUNhbnZhcygpO1xyXG4gICAgICB0aGlzLmZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQoKTtcclxuICAgIH0sIDQwMCk7XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZUZlZWRiYWNrKFxyXG4gICAgcGxhbm9JZDogc3RyaW5nLFxyXG4gICAgZmxvb3JJZDogc3RyaW5nLFxyXG4gICAgZmlsdGVyOiBhbnksXHJcbiAgICBjaGVja1B1Ymxpc2hTdGF0ZTogYm9vbGVhbiA9IHRydWVcclxuICApIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGxldCBkYXRhOiBhbnkgPSB7XHJcbiAgICAgICAgcGxhbm9JZDogcGxhbm9JZCxcclxuICAgICAgICBmbG9vcklkOiBmbG9vcklkLFxyXG4gICAgICB9O1xyXG4gICAgICBpZiAoZmlsdGVyKSB7XHJcbiAgICAgICAgZGF0YSA9IHsgLi4uZGF0YSwgLi4uZmlsdGVyIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRTdG9yZUZlZWRiYWNrKGRhdGEpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlRmVlZGJhY2sgPSByZXMuZGF0YTtcclxuICAgICAgICAgIGlmIChyZXMuZGF0YT8ubGF5b3V0RGF0YT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc0xheW91dEZlZWRiYWNrKHJlcy5kYXRhLmxheW91dERhdGEpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzTGF5b3V0RmVlZGJhY2soW10pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChyZXMuZGF0YT8uZml4dHVyZURhdGE/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NGaXh0dXJlRmVlZGJhY2socmVzLmRhdGEuZml4dHVyZURhdGEpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRml4dHVyZUZlZWRiYWNrKFtdKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocmVzLmRhdGE/LlZtRGF0YT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1ZtRmVlZGJhY2socmVzLmRhdGEuVm1EYXRhKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1ZtRmVlZGJhY2soW10pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChjaGVja1B1Ymxpc2hTdGF0ZSkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLmNhbGN1bGF0ZVB1Ymxpc2hpbmdTdGF0ZSgpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGZldGNoIHN0b3JlIGZlZWRiYWNrXCIpO1xyXG4gICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVB1Ymxpc2hpbmdTdGF0ZSgpIHtcclxuICAgIGxldCBkaXNhYmxlRWRpdCA9IGZhbHNlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2ldO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQuZml4dHVyZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlID0gZWxlbWVudC5maXh0dXJlc1tqXTtcclxuXHJcbiAgICAgICAgaWYgKGZpeHR1cmUuaXNzdWUpIHtcclxuICAgICAgICAgIGRpc2FibGVFZGl0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbaV07XHJcblxyXG4gICAgICAgIGlmIChmaXh0dXJlLmlzc3VlKSB7XHJcbiAgICAgICAgICBkaXNhYmxlRWRpdCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRpc2FibGVFZGl0KSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNhYmxlRWRpdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmICh0aGlzLmZsb29yRGF0YS5pc0VkaXRlZCkge1xyXG4gICAgLy8gICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9ICdsYXlvdXQnXHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuXHJcbiAgICBsZXQgbGF5b3V0RGF0YSA9IHRoaXMudGFza0luZm8/LnRhc2tEZXRhaWxzPy5maW5kKFxyXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZS50eXBlID09IFwibGF5b3V0XCJcclxuICAgICk7XHJcbiAgICBsZXQgZml4dHVyZURhdGEgPSB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZmluZChcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUudHlwZSA9PSBcImZpeHR1cmVcIlxyXG4gICAgKTtcclxuICAgIGxldCB2bURhdGEgPSB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZmluZChcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUudHlwZSA9PSBcInZtXCJcclxuICAgICk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudGFza1N0eWxlLmxheW91dC5uYW1lID09IFwiQXBwcm92ZWRcIiAmJlxyXG4gICAgICB0aGlzLnRhc2tTdHlsZS5maXh0dXJlLm5hbWUgPT0gXCJBcHByb3ZlZFwiICYmXHJcbiAgICAgIHRoaXMudGFza1N0eWxlLnZtLm5hbWUgPT0gXCJBcHByb3ZlZFwiXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImNvbXBsZXRlXCI7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudGFza1N0eWxlLmZpeHR1cmUubmFtZSA9PSBcIkFwcHJvdmVkXCIpIHtcclxuICAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcInZtXCI7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB2bURhdGEgJiZcclxuICAgICAgICAoKHZtRGF0YS5zdGF0dXMgPT0gXCJzdWJtaXRcIiAmJiB2bURhdGEuZmVlZGJhY2tTdGF0dXMgPT0gXCJkaXNhZ3JlZVwiKSB8fFxyXG4gICAgICAgICAgdm1EYXRhPy5yZWRvU3RhdHVzKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwidm0tcmVkb1wiO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwiZml4dHVyZVwiO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZml4dHVyZURhdGEgJiZcclxuICAgICAgICAoKGZpeHR1cmVEYXRhLnN0YXR1cyA9PSBcInN1Ym1pdFwiICYmXHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5mZWVkYmFja1N0YXR1cyA9PSBcImRpc2FncmVlXCIpIHx8XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YT8ucmVkb1N0YXR1cylcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAhdGhpcy5mbG9vckRhdGEuaXNFZGl0ZWRcclxuICAgICAgICAgID8gXCJmaXh0dXJlLXJlZG9cIlxyXG4gICAgICAgICAgOiBcImZpeHR1cmVcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gJ2xheW91dCdcclxuICAgIC8vICAgaWYgKGxheW91dERhdGEgJiYgKChsYXlvdXREYXRhLnN0YXR1cyA9PSBcInN1Ym1pdFwiICYmIGxheW91dERhdGEuZmVlZGJhY2tTdGF0dXMgPT0gXCJkaXNhZ3JlZVwiKSB8fCBsYXlvdXREYXRhPy5yZWRvU3RhdHVzKSkge1xyXG4gICAgLy8gICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gJ2xheW91dC1yZWRvJztcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmICh0aGlzLnN0b3JlRmVlZGJhY2s/LlZtRGF0YS5sZW5ndGgpIHtcclxuICAgIC8vICAgY29uc3Qgdm1GZWVkYmFjayA9IHRoaXMuc3RvcmVGZWVkYmFjaz8uVm1EYXRhLmZpbHRlcigoZmVlZGJhY2s6IGFueSkgPT4gZmVlZGJhY2sudHlwZSA9PT0gJ3ZtJylcclxuXHJcbiAgICAvLyAgIGNvbnN0IGFsbEZpeHR1cmVzQ29tcGxldGVkID0gdm1GZWVkYmFjay5ldmVyeSgoZmVlZGJhY2s6IGFueSkgPT4gZmVlZGJhY2suc3RhdHVzID09PSAnY29tcGxldGUnKVxyXG5cclxuICAgIC8vICAgaWYgKGFsbEZpeHR1cmVzQ29tcGxldGVkKSB7XHJcbiAgICAvLyAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAnY29tcGxldGUnXHJcbiAgICAvLyAgICAgcmV0dXJuXHJcbiAgICAvLyAgIH1cclxuXHJcbiAgICAvLyAgIGxldCBoYXNEaXNhZ3JlZSA9IGZhbHNlO1xyXG5cclxuICAgIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2bUZlZWRiYWNrLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAvLyAgICAgY29uc3QgaXNzdWVzID0gdm1GZWVkYmFjaz8uW2ldPy5hbnN3ZXJzPy5bMF0/Lmlzc3VlcztcclxuXHJcbiAgICAvLyAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGlzc3Vlcy5sZW5ndGg7IGorKykge1xyXG4gICAgLy8gICAgICAgICBjb25zdCBpc3N1ZSA9IGlzc3Vlc1tqXTtcclxuICAgIC8vICAgICAgICAgY29uc3QgZGV0YWlscyA9IGlzc3VlPy5EZXRhaWxzIHx8IFtdO1xyXG5cclxuICAgIC8vICAgICAgICAgaWYgKGRldGFpbHMuc29tZSgoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLnN0YXR1cyA9PT0gJ2Rpc2FncmVlJykpIHtcclxuICAgIC8vICAgICAgICAgICBoYXNEaXNhZ3JlZSA9IHRydWU7XHJcbiAgICAvLyAgICAgICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgICBpZiAoaGFzRGlzYWdyZWUpIGJyZWFrO1xyXG4gICAgLy8gICAgIGlmIChpc3N1ZXM/Lmxlbmd0aCkge1xyXG4gICAgLy8gICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpc3N1ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgIC8vICAgICAgICAgY29uc3QgaXNzdWUgPSBpc3N1ZXNbal07XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGRldGFpbHMgPSBpc3N1ZT8uRGV0YWlscyB8fCBbXTtcclxuXHJcbiAgICAvLyAgICAgICAgIGlmIChkZXRhaWxzLnNvbWUoKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5zdGF0dXMgPT09ICdkaXNhZ3JlZScpKSB7XHJcbiAgICAvLyAgICAgICAgICAgaGFzRGlzYWdyZWUgPSB0cnVlO1xyXG4gICAgLy8gICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuXHJcbiAgICAvLyAgICAgaWYgKGhhc0Rpc2FncmVlKSBicmVhaztcclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgaWYgKGhhc0Rpc2FncmVlKSB7XHJcbiAgICAvLyAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAnZml4dHVyZS1yZWRvJztcclxuICAgIC8vICAgICByZXR1cm5cclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAnZml4dHVyZSdcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy5zdG9yZUZlZWRiYWNrPy5sYXlvdXREYXRhLmxlbmd0aCkge1xyXG4gICAgLy8gICBjb25zdCBsYXlvdXRGZWVkYmFjayA9IHRoaXMuc3RvcmVGZWVkYmFjaz8ubGF5b3V0RGF0YS5maWx0ZXIoKGZlZWRiYWNrOiBhbnkpID0+IGZlZWRiYWNrLnR5cGUgPT09ICdsYXlvdXQnKVxyXG4gICAgLy8gICBsZXQgaGFzRGlzYWdyZWUgPSBmYWxzZTtcclxuXHJcbiAgICAvLyAgIGlmIChsYXlvdXRGZWVkYmFja1tsYXlvdXRGZWVkYmFjay5sZW5ndGggLSAxXS5zdGF0dXMgPT09ICdjb21wbGV0ZScpIHtcclxuICAgIC8vICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9ICdmaXh0dXJlJ1xyXG4gICAgLy8gICAgIHJldHVyblxyXG4gICAgLy8gICB9XHJcblxyXG4gICAgLy8gICBjb25zdCBpc3N1ZXMgPSBsYXlvdXRGZWVkYmFja1tsYXlvdXRGZWVkYmFjay5sZW5ndGggLSAxXT8uYW5zd2Vycz8uWzBdPy5pc3N1ZXM7XHJcblxyXG4gICAgLy8gICBpZiAoaXNzdWVzPy5sZW5ndGgpIHtcclxuICAgIC8vICAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGlzc3Vlcykge1xyXG4gICAgLy8gICAgICAgY29uc3QgZGV0YWlscyA9IGlzc3VlPy5EZXRhaWxzIHx8IFtdO1xyXG4gICAgLy8gICAgICAgaWYgKGRldGFpbHMuc29tZSgoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLnN0YXR1cyA9PT0gJ2Rpc2FncmVlJykpIHtcclxuICAgIC8vICAgICAgICAgaGFzRGlzYWdyZWUgPSB0cnVlO1xyXG4gICAgLy8gICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuXHJcbiAgICAvLyAgIGlmIChoYXNEaXNhZ3JlZSkge1xyXG4gICAgLy8gICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gJ2xheW91dC1yZWRvJztcclxuICAgIC8vICAgICByZXR1cm5cclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAnbGF5b3V0J1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmICgoIXRoaXMuc3RvcmVGZWVkYmFjaz8ubGF5b3V0RGF0YT8ubGVuZ3RoICYmICF0aGlzLnN0b3JlRmVlZGJhY2s/LmZpeHR1cmVEYXRhPy5sZW5ndGggJiYgIXRoaXMuc3RvcmVGZWVkYmFjaz8uVm1EYXRhPy5sZW5ndGgpKSB7XHJcbiAgICAvLyAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gJ2xheW91dCdcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFRlbXBsYXRlKGZpeHR1cmVDb25maWdJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRGaXh0dXJlVGVtcGxhdGUoZml4dHVyZUNvbmZpZ0lkKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHByb2Nlc3NMYXlvdXRGZWVkYmFjayhzdG9yZUZlZWRiYWNrOiBhbnlbXSkge1xyXG4gICAgY29uc3QgbGF5b3V0RmVlZGJhY2sgPSBzdG9yZUZlZWRiYWNrLmZpbmQoXHJcbiAgICAgIChmZWVkYmFjaykgPT4gZmVlZGJhY2sudHlwZSA9PT0gXCJsYXlvdXRcIlxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB3YWxsRWxlbWVudHMgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbHRlcihcclxuICAgICAgKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCJcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGxheW91dEZlZWRiYWNrKSB7XHJcbiAgICAgIGNvbnN0IGlzc3VlcyA9IGxheW91dEZlZWRiYWNrPy5hbnN3ZXJzPy5bMF0/Lmlzc3VlcztcclxuXHJcbiAgICAgIGlmIChpc3N1ZXMpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzc3Vlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXNzdWUgPSBpc3N1ZXNbaV07XHJcblxyXG4gICAgICAgICAgaWYgKGlzc3VlLmlzc3VlVHlwZSA9PT0gXCJleHRyYUZpeHR1cmVcIikge1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlcyA9IGlzc3VlLkRldGFpbHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuc3RhdHVzID09PSBcInBlbmRpbmdcIlxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBmaXh0dXJlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSBmaXh0dXJlc1tqXTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgdGVtcGxhdGU6IGFueSA9IGF3YWl0IHRoaXMuZ2V0VGVtcGxhdGUoXHJcbiAgICAgICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVDb25maWdJZFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghdGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJZCA9IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGdob3N0Rml4dHVyZSA9IHtcclxuICAgICAgICAgICAgICAgIC4uLnRlbXBsYXRlPy5kYXRhLFxyXG4gICAgICAgICAgICAgICAgZml4dHVyZUNvbmZpZ0lkOiB0ZW1wbGF0ZT8uZGF0YT8uX2lkLFxyXG4gICAgICAgICAgICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBvc2l0aW9uOiB7IHg6IDAsIHk6IDAsIHVuaXQ6IFwiZnRcIiB9LFxyXG4gICAgICAgICAgICAgICAgc2hlbGZDb25maWc6IGZpeHR1cmUuc2hlbGZDb25maWcsXHJcbiAgICAgICAgICAgICAgICBnaG9zdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGlzc3VlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaXNzdWVEYXRhOiBmaXh0dXJlLFxyXG4gICAgICAgICAgICAgICAgdGFza1R5cGU6IFwibGF5b3V0XCIsXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gY29uc3QgZml4dHVyZUdyb3VwID0gdGhpcy5wYXRjaEZpeHR1cmUoeyBmaXh0dXJlTmFtZTogZ2hvc3RGaXh0dXJlLmZpeHR1cmVOYW1lLCBmaXh0dXJlQ29uZmlnSWQ6IGdob3N0Rml4dHVyZS5maXh0dXJlQ29uZmlnSWQsIF9pZDogZ2hvc3RGaXh0dXJlLl9pZCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHdhbGxJbmRleDogbnVtYmVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGFzc29jV2FsbE51bSA9IGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXNzb2NXYWxsTnVtID49IHdhbGxFbGVtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgd2FsbEluZGV4ID0gd2FsbEVsZW1lbnRzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXNzb2NXYWxsTnVtIDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgd2FsbEluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHdhbGxJbmRleCA9IGFzc29jV2FsbE51bTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50Rml4dHVyZXM6IGFueSA9IHdhbGxFbGVtZW50cy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSB3YWxsSW5kZXhcclxuICAgICAgICAgICAgICAgICkuZml4dHVyZXM7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NvY0ZpeHR1cmVOdW0gPSBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYXNzb2NGaXh0dXJlTnVtID4gZWxlbWVudEZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IHdhbGxJbmRleFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAuZml4dHVyZXMucHVzaChnaG9zdEZpeHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEZvcm1GaXh0dXJlcyh3YWxsSW5kZXghIC0gMSkucHVzaChmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhc3NvY0ZpeHR1cmVOdW0gPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IHdhbGxJbmRleFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAuZml4dHVyZXMudW5zaGlmdChnaG9zdEZpeHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEZvcm1GaXh0dXJlcyh3YWxsSW5kZXghIC0gMSkuaW5zZXJ0KDAsIGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IHdhbGxJbmRleFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAuZml4dHVyZXMuc3BsaWNlKGFzc29jRml4dHVyZU51bSAtIDEsIDAsIGdob3N0Rml4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEgLSAxKS5pbnNlcnQoYXNzb2NGaXh0dXJlTnVtIC0gMSwgZml4dHVyZUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFzc29jRml4dHVyZU51bSA9IGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhc3NvY0ZpeHR1cmVOdW0gPiB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLnB1c2goZ2hvc3RGaXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlcy5wdXNoKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFzc29jRml4dHVyZU51bSA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUudW5zaGlmdChnaG9zdEZpeHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzLmluc2VydCgwLCBmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5zcGxpY2UoXHJcbiAgICAgICAgICAgICAgICAgICAgYXNzb2NGaXh0dXJlTnVtIC0gMSxcclxuICAgICAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGdob3N0Rml4dHVyZVxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzLmluc2VydChhc3NvY0ZpeHR1cmVOdW0gLSAxLCBmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXNzdWUuaXNzdWVUeXBlID09PSBcImZpeHR1cmVNaXNzaW5nXCIgfHxcclxuICAgICAgICAgICAgaXNzdWUuaXNzdWVUeXBlID09PSBcImZpeHR1cmVNaXNtYXRjaFwiXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZXMgPSBpc3N1ZS5EZXRhaWxzLmZpbHRlcihcclxuICAgICAgICAgICAgICAoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCJcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZml4dHVyZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlID0gZml4dHVyZXNbal07XHJcblxyXG4gICAgICAgICAgICAgIC8vIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gJ3dhbGwnKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0Rml4dHVyZUlkID0gZml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgd2FsbEVsZW1lbnQgb2YgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICB3YWxsRWxlbWVudC5lbGVtZW50VHlwZSAhPT0gXCJ3YWxsXCIgfHxcclxuICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkod2FsbEVsZW1lbnQuZml4dHVyZXMpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJbmRleCA9IHdhbGxFbGVtZW50LmZpeHR1cmVzLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRhcmdldEZpeHR1cmVJZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZml4dHVyZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICB3YWxsRWxlbWVudC5maXh0dXJlc1tmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLndhbGxFbGVtZW50LmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgdGFza1R5cGU6IFwibGF5b3V0XCIsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgIC8vIGVsc2UgaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSAnZmxvb3InKSB7XHJcbiAgICAgICAgICAgICAgLy8gY29uc3QgdGFyZ2V0Rml4dHVyZUlkID0gZml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGNlbnRlckZpeHR1cmVzID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gY2VudGVyRml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRhcmdldEZpeHR1cmVJZFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjZW50ZXJGaXh0dXJlc1tmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgICAgICAuLi5jZW50ZXJGaXh0dXJlc1tmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICBpc3N1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZXMsXHJcbiAgICAgICAgICAgICAgICAgIHRhc2tUeXBlOiBcImxheW91dFwiLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2Nlc3NGaXh0dXJlRmVlZGJhY2soc3RvcmVGZWVkYmFjazogYW55W10pIHtcclxuICAgIGNvbnN0IGZpeHR1cmVGZWVkYmFjayA9IHN0b3JlRmVlZGJhY2suZmlsdGVyKFxyXG4gICAgICAoZmVlZGJhY2spID0+IGZlZWRiYWNrLnR5cGUgPT09IFwiZml4dHVyZVwiXHJcbiAgICApO1xyXG4gICAgbGV0IGZpbmRGaXh0dXJlVGFzayA9IHRoaXMudGFza0luZm8/LnRhc2tEZXRhaWxzPy5maW5kKFxyXG4gICAgICAodGFzazogYW55KSA9PiB0YXNrLnR5cGUgPT0gXCJmaXh0dXJlXCJcclxuICAgICk7XHJcbiAgICBpZiAoZml4dHVyZUZlZWRiYWNrLmxlbmd0aCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpeHR1cmVGZWVkYmFjay5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGlzc3VlID0gZml4dHVyZUZlZWRiYWNrPy5baV0/LmZpeHR1cmVBSURhdGE7XHJcblxyXG4gICAgICAgIGlmIChpc3N1ZSkge1xyXG4gICAgICAgICAgLy8gZm9yIChsZXQgaiA9IDA7IGogPCBpc3N1ZXMubGVuZ3RoOyBqKyspIHtcclxuXHJcbiAgICAgICAgICAvLyBjb25zdCBmaXh0dXJlcyA9IGlzc3VlLkRldGFpbHMuZmlsdGVyKFxyXG4gICAgICAgICAgLy8gICAoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCJcclxuICAgICAgICAgIC8vICk7XHJcblxyXG4gICAgICAgICAgLy8gZm9yIChsZXQgaiA9IDA7IGogPCBmaXh0dXJlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgLy8gY29uc3QgZml4dHVyZSA9IGZpeHR1cmVzW2pdO1xyXG5cclxuICAgICAgICAgIC8vIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gJ3dhbGwnKSB7XHJcbiAgICAgICAgICBjb25zdCB0YXJnZXRGaXh0dXJlSWQgPSBmaXh0dXJlRmVlZGJhY2s/LltpXS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgZm9yIChjb25zdCB3YWxsRWxlbWVudCBvZiB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB3YWxsRWxlbWVudC5lbGVtZW50VHlwZSAhPT0gXCJ3YWxsXCIgfHxcclxuICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheSh3YWxsRWxlbWVudC5maXh0dXJlcylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gd2FsbEVsZW1lbnQuZml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgIChmOiBhbnkpID0+IGYuX2lkID09PSB0YXJnZXRGaXh0dXJlSWRcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgd2FsbEVsZW1lbnQuZml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgIC4uLndhbGxFbGVtZW50LmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgICBpc3N1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IGlzc3VlLFxyXG4gICAgICAgICAgICAgICAgdGFza1R5cGU6IFwiZml4dHVyZVwiLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOlxyXG4gICAgICAgICAgICAgICAgICAoZmluZEZpeHR1cmVUYXNrPy5zdGF0dXMgPT0gXCJzdWJtaXRcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbmRGaXh0dXJlVGFzaz8ucmVkb1N0YXR1cykgJiZcclxuICAgICAgICAgICAgICAgICAgZml4dHVyZUZlZWRiYWNrPy5baV0/LmFuc3dlcnM/LlswXT8uc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgPyBmaXh0dXJlRmVlZGJhY2s/LltpXT8uYW5zd2Vycz8uWzBdPy5zdGF0dXNcclxuICAgICAgICAgICAgICAgICAgICA6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBicmVhY2g6IGZpbmRGaXh0dXJlVGFzaz8uYnJlYWNoLFxyXG4gICAgICAgICAgICAgICAgdGFza1N0YXR1czogZmluZEZpeHR1cmVUYXNrPy5zdGF0dXMsXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIC8vIGVsc2UgaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSAnZmxvb3InKSB7XHJcbiAgICAgICAgICAvLyBjb25zdCB0YXJnZXRGaXh0dXJlSWQgPSBmaXh0dXJlLmZpeHR1cmVJZDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjZW50ZXJGaXh0dXJlcyA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmU7XHJcblxyXG4gICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gY2VudGVyRml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAoZjogYW55KSA9PiBmLl9pZCA9PT0gdGFyZ2V0Rml4dHVyZUlkXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNlbnRlckZpeHR1cmVzW2ZpeHR1cmVJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgLi4uY2VudGVyRml4dHVyZXNbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICBpc3N1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZSxcclxuICAgICAgICAgICAgICB0YXNrVHlwZTogXCJmaXh0dXJlXCIsXHJcbiAgICAgICAgICAgICAgc3RhdHVzOlxyXG4gICAgICAgICAgICAgICAgKGZpbmRGaXh0dXJlVGFzaz8uc3RhdHVzID09IFwic3VibWl0XCIgfHxcclxuICAgICAgICAgICAgICAgICAgZmluZEZpeHR1cmVUYXNrPy5yZWRvU3RhdHVzKSAmJlxyXG4gICAgICAgICAgICAgICAgZml4dHVyZUZlZWRiYWNrPy5baV0/LmFuc3dlcnM/LlswXT8uc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgID8gZml4dHVyZUZlZWRiYWNrPy5baV0/LmFuc3dlcnM/LlswXT8uc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgIDogXCJcIixcclxuICAgICAgICAgICAgICBicmVhY2g6IGZpbmRGaXh0dXJlVGFzaz8uYnJlYWNoLFxyXG4gICAgICAgICAgICAgIHRhc2tTdGF0dXM6IGZpbmRGaXh0dXJlVGFzaz8uc3RhdHVzLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2Nlc3NGaXh0dXJlRmVlZGJhY2tPbGQoc3RvcmVGZWVkYmFjazogYW55W10pIHtcclxuICAgIGNvbnN0IGZpeHR1cmVGZWVkYmFjayA9IHN0b3JlRmVlZGJhY2suZmlsdGVyKFxyXG4gICAgICAoZmVlZGJhY2spID0+IGZlZWRiYWNrLnR5cGUgPT09IFwiZml4dHVyZVwiXHJcbiAgICApO1xyXG4gICAgaWYgKGZpeHR1cmVGZWVkYmFjay5sZW5ndGgpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXh0dXJlRmVlZGJhY2subGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBpc3N1ZXMgPSBmaXh0dXJlRmVlZGJhY2s/LltpXT8uYW5zd2Vycz8uWzBdPy5pc3N1ZXM7XHJcblxyXG4gICAgICAgIGlmIChpc3N1ZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpc3N1ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXNzdWUgPSBpc3N1ZXNbal07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlcyA9IGlzc3VlLkRldGFpbHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuc3RhdHVzID09PSBcInBlbmRpbmdcIlxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBmaXh0dXJlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSBmaXh0dXJlc1tqXTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSAnd2FsbCcpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0YXJnZXRGaXh0dXJlSWQgPSBmaXh0dXJlLmZpeHR1cmVJZDtcclxuXHJcbiAgICAgICAgICAgICAgZm9yIChjb25zdCB3YWxsRWxlbWVudCBvZiB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHdhbGxFbGVtZW50LmVsZW1lbnRUeXBlICE9PSBcIndhbGxcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheSh3YWxsRWxlbWVudC5maXh0dXJlcylcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gd2FsbEVsZW1lbnQuZml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAoZjogYW55KSA9PiBmLl9pZCA9PT0gdGFyZ2V0Rml4dHVyZUlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgIHdhbGxFbGVtZW50LmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ud2FsbEVsZW1lbnQuZml4dHVyZXNbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IGlzc3VlcyxcclxuICAgICAgICAgICAgICAgICAgICB0YXNrVHlwZTogXCJmaXh0dXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgIC8vIGVsc2UgaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSAnZmxvb3InKSB7XHJcbiAgICAgICAgICAgICAgLy8gY29uc3QgdGFyZ2V0Rml4dHVyZUlkID0gZml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGNlbnRlckZpeHR1cmVzID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gY2VudGVyRml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRhcmdldEZpeHR1cmVJZFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjZW50ZXJGaXh0dXJlc1tmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgICAgICAuLi5jZW50ZXJGaXh0dXJlc1tmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICBpc3N1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZXMsXHJcbiAgICAgICAgICAgICAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc1ZtRmVlZGJhY2soc3RvcmVGZWVkYmFjazogYW55W10pIHtcclxuICAgIGNvbnN0IGZpeHR1cmVGZWVkYmFjayA9IHN0b3JlRmVlZGJhY2suZmlsdGVyKFxyXG4gICAgICAoZmVlZGJhY2spID0+IGZlZWRiYWNrLnR5cGUgPT09IFwidm1cIlxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoZml4dHVyZUZlZWRiYWNrLmxlbmd0aCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpeHR1cmVGZWVkYmFjay5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGlzc3VlcyA9IGZpeHR1cmVGZWVkYmFjaz8uW2ldPy5hbnN3ZXJzPy5bMF0/Lmlzc3VlcztcclxuXHJcbiAgICAgICAgaWYgKGlzc3Vlcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGlzc3Vlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCBpc3N1ZSA9IGlzc3Vlc1tqXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVzID0gaXNzdWUuRGV0YWlscy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGZpeHR1cmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZSA9IGZpeHR1cmVzW2pdO1xyXG5cclxuICAgICAgICAgICAgICAvLyBpZiAoZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09ICd3YWxsJykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldEZpeHR1cmVJZCA9IGZpeHR1cmUuZml4dHVyZUlkO1xyXG5cclxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHdhbGxFbGVtZW50IG9mIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24pIHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgd2FsbEVsZW1lbnQuZWxlbWVudFR5cGUgIT09IFwid2FsbFwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHdhbGxFbGVtZW50LmZpeHR1cmVzKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlSW5kZXggPSB3YWxsRWxlbWVudC5maXh0dXJlcy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChmOiBhbnkpID0+IGYuX2lkID09PSB0YXJnZXRGaXh0dXJlSWRcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZpeHR1cmVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgd2FsbEVsZW1lbnQuZml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi53YWxsRWxlbWVudC5maXh0dXJlc1tmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlRGF0YTogaXNzdWVzLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhc2tUeXBlOiBcInZtXCIsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgIC8vIGVsc2UgaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSAnZmxvb3InKSB7XHJcbiAgICAgICAgICAgICAgLy8gY29uc3QgdGFyZ2V0Rml4dHVyZUlkID0gZml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGNlbnRlckZpeHR1cmVzID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gY2VudGVyRml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRhcmdldEZpeHR1cmVJZFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjZW50ZXJGaXh0dXJlc1tmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgICAgICAuLi5jZW50ZXJGaXh0dXJlc1tmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICBpc3N1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZXMsXHJcbiAgICAgICAgICAgICAgICAgIHRhc2tUeXBlOiBcInZtXCIsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdHJhbnNmZXJBcnJheUl0ZW08VCA9IGFueT4oXHJcbiAgICBjdXJyZW50QXJyYXk6IFRbXSxcclxuICAgIHRhcmdldEFycmF5OiBUW10sXHJcbiAgICBjdXJyZW50SW5kZXg6IG51bWJlcixcclxuICAgIHRhcmdldEluZGV4OiBudW1iZXJcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGZyb20gPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjdXJyZW50QXJyYXkubGVuZ3RoIC0gMSwgY3VycmVudEluZGV4KSk7XHJcbiAgICBjb25zdCB0byA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRhcmdldEFycmF5Lmxlbmd0aCwgdGFyZ2V0SW5kZXgpKTtcclxuXHJcbiAgICBpZiAoY3VycmVudEFycmF5Lmxlbmd0aCkge1xyXG4gICAgICB0YXJnZXRBcnJheS5zcGxpY2UodG8sIDAsIGN1cnJlbnRBcnJheS5zcGxpY2UoZnJvbSwgMSlbMF0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVvcmRlckZpeHR1cmVNZXRhKGZsb29yRGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBtbVRvRmVldCA9IDMwNTtcclxuICAgIGNvbnN0IHcxRml4dHVyZXMgPSBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAod2FsbDogYW55KSA9PiB3YWxsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3YWxsLmVsZW1lbnROdW1iZXIgPT09IDFcclxuICAgICk/LmZpeHR1cmVzO1xyXG4gICAgY29uc3QgdzFGaXh0dXJlc1ggPSB3MUZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgKHN1bTogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgc3VtICsgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCxcclxuICAgICAgMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHcxRml4dHVyZXNZID0gdzFGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gICAgY29uc3QgdzJGaXh0dXJlcyA9IGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICh3YWxsOiBhbnkpID0+IHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHdhbGwuZWxlbWVudE51bWJlciA9PT0gMlxyXG4gICAgKT8uZml4dHVyZXM7XHJcbiAgICBjb25zdCB3MkZpeHR1cmVzWCA9IHcyRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gICAgY29uc3QgdzJGaXh0dXJlc1kgPSB3MkZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgKHN1bTogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgc3VtICsgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQsXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICBjb25zdCB3M0ZpeHR1cmVzID0gZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKHdhbGw6IGFueSkgPT4gd2FsbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgd2FsbC5lbGVtZW50TnVtYmVyID09PSAzXHJcbiAgICApPy5maXh0dXJlcztcclxuICAgIGNvbnN0IHczRml4dHVyZXNYID0gdzNGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgIChzdW06IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIHN1bSArIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQsXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICBjb25zdCB3M0ZpeHR1cmVzWSA9IHczRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHc0Rml4dHVyZXMgPSBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAod2FsbDogYW55KSA9PiB3YWxsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3YWxsLmVsZW1lbnROdW1iZXIgPT09IDRcclxuICAgICk/LmZpeHR1cmVzO1xyXG4gICAgY29uc3QgdzRGaXh0dXJlc1ggPSB3NEZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHc0Rml4dHVyZXNZID0gdzRGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgIChzdW06IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIHN1bSArIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0LFxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gICAgY29uc3QgdzVGaXh0dXJlcyA9IGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICh3YWxsOiBhbnkpID0+IHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHdhbGwuZWxlbWVudE51bWJlciA9PT0gNVxyXG4gICAgKT8uZml4dHVyZXM7XHJcbiAgICBjb25zdCB3NUZpeHR1cmVzWCA9IHc1Rml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gICAgY29uc3QgdzVGaXh0dXJlc1kgPSB3NUZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgKHN1bTogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgc3VtICsgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQsXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICBjb25zdCBjRml4dHVyZXMgPSBmbG9vckRhdGEuY2VudGVyRml4dHVyZTtcclxuICAgIGNvbnN0IGNGaXh0dXJlc1ggPVxyXG4gICAgICBjRml4dHVyZXMubGVuZ3RoICpcclxuICAgICAgY0ZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgMFxyXG4gICAgICApO1xyXG4gICAgY29uc3QgY0ZpeHR1cmVzWSA9XHJcbiAgICAgIDIgKlxyXG4gICAgICBjRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgMFxyXG4gICAgICApO1xyXG4gICAgY29uc3QgZW50cmFuY2VZID0gMTA7XHJcblxyXG4gICAgbGV0IG1pblhEaXN0YW5jZSA9IE1hdGgubWF4KHcxRml4dHVyZXNYLCBjRml4dHVyZXNYLCB3M0ZpeHR1cmVzWCk7XHJcbiAgICBpZiAodzJGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgbWluWERpc3RhbmNlICs9IHcyRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgICAwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHc0Rml4dHVyZXMubGVuZ3RoIHx8IHc1Rml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgIGlmICh3NEZpeHR1cmVzLmxlbmd0aCAmJiB3NUZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICAgIG1pblhEaXN0YW5jZSArPSB3NUZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAodzRGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgICBtaW5YRGlzdGFuY2UgKz0gdzRGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgICAgIDBcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKHc1Rml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgbWluWERpc3RhbmNlICs9IHc1Rml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmKGNGaXh0dXJlcy5sZW5ndGgpe1xyXG4gICAgLy8gICBtaW5YRGlzdGFuY2UgKz0gMiAqIChjRml4dHVyZXMucmVkdWNlKChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PiBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpLCAwKSlcclxuICAgIC8vIH1cclxuXHJcbiAgICBsZXQgbWluWURpc3RhbmNlID0gTWF0aC5tYXgoXHJcbiAgICAgIHcyRml4dHVyZXNZLFxyXG4gICAgICBjRml4dHVyZXNZLFxyXG4gICAgICB3NEZpeHR1cmVzWSArIHc1Rml4dHVyZXNZICsgZW50cmFuY2VZXHJcbiAgICApO1xyXG4gICAgaWYgKHcxRml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgIG1pbllEaXN0YW5jZSArPSB3MUZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAgIDBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodzNGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgbWluWURpc3RhbmNlICs9IHczRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgMFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjRml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgIG1pbllEaXN0YW5jZSArPVxyXG4gICAgICAgIDIgKlxyXG4gICAgICAgIGNGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gMSkge1xyXG4gICAgICAgIGVsZW1lbnQuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28obWluWERpc3RhbmNlKTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gMlxyXG4gICAgICApIHtcclxuICAgICAgICBlbGVtZW50LmRpc3RhbmNlID0gdGhpcy5yb3VuZFRvVHdvKG1pbllEaXN0YW5jZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDNcclxuICAgICAgKSB7XHJcbiAgICAgICAgZWxlbWVudC5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byhtaW5YRGlzdGFuY2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgICAgKGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gNCB8fCBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDUpKSB8fFxyXG4gICAgICAgIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIgJiYgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSAxKVxyXG4gICAgICApIHtcclxuICAgICAgICBsZXQgdzRMZW5ndGggPSB3NEZpeHR1cmVzPy5sZW5ndGhcclxuICAgICAgICAgID8gKHc0Rml4dHVyZXMubGVuZ3RoICsgMSkgKlxyXG4gICAgICAgICAgICB3NEZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgOiAwO1xyXG5cclxuICAgICAgICBjb25zdCB3NUxlbmd0aCA9IHc1Rml4dHVyZXM/Lmxlbmd0aFxyXG4gICAgICAgICAgPyAodzVGaXh0dXJlcy5sZW5ndGggKyAxKSAqXHJcbiAgICAgICAgICAgIHc1Rml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICA6IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IHVzZWRZID0gdzRMZW5ndGggKyB3NUxlbmd0aDtcclxuICAgICAgICBjb25zdCByZW1haW5pbmdZID0gTWF0aC5tYXgobWluWURpc3RhbmNlIC0gdXNlZFksIDApO1xyXG5cclxuICAgICAgICBjb25zdCB3NEVtcHR5ID0gdzRMZW5ndGggPT09IDA7XHJcbiAgICAgICAgY29uc3QgdzVFbXB0eSA9IHc1TGVuZ3RoID09PSAwO1xyXG5cclxuICAgICAgICBsZXQgZW50cmFuY2VMZW5ndGggPSAwO1xyXG4gICAgICAgIGxldCB3NEZpbmFsID0gdzRMZW5ndGg7XHJcbiAgICAgICAgbGV0IHc1RmluYWwgPSB3NUxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKHc0RW1wdHkgJiYgdzVFbXB0eSkge1xyXG4gICAgICAgICAgdzRGaW5hbCA9IHc1RmluYWwgPSBlbnRyYW5jZUxlbmd0aCA9IG1pbllEaXN0YW5jZSAvIDM7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3NEVtcHR5ICYmICF3NUVtcHR5KSB7XHJcbiAgICAgICAgICB3NUZpbmFsID0gdzVMZW5ndGg7XHJcbiAgICAgICAgICB3NEZpbmFsID0gcmVtYWluaW5nWSAvIDI7XHJcbiAgICAgICAgICBlbnRyYW5jZUxlbmd0aCA9IHJlbWFpbmluZ1kgLyAyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXc0RW1wdHkgJiYgdzVFbXB0eSkge1xyXG4gICAgICAgICAgdzRGaW5hbCA9IHc0TGVuZ3RoO1xyXG4gICAgICAgICAgdzVGaW5hbCA9IHJlbWFpbmluZ1kgLyAyO1xyXG4gICAgICAgICAgZW50cmFuY2VMZW5ndGggPSByZW1haW5pbmdZIC8gMjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZW50cmFuY2VMZW5ndGggPSByZW1haW5pbmdZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gNCkge1xyXG4gICAgICAgICAgZWxlbWVudC5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byh3NEZpbmFsKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gNVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZWxlbWVudC5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byh3NUZpbmFsKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiICYmXHJcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDFcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGVsZW1lbnQuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28oZW50cmFuY2VMZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGZpeHR1cmVOdW1iZXIgPSAxO1xyXG5cclxuICAgIGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSAxKSB7XHJcbiAgICAgICAgbGV0IHdhbGxBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG4gICAgICAgIGxldCBjdXJyZW50WCA9IDA7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRZID0gMDtcclxuICAgICAgICBlbGVtZW50LmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjdXJyZW50WCA9IChmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KSAqIGk7XHJcbiAgICAgICAgICBpZiAodzVGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY3VycmVudFggKz0gZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54ID0gdGhpcy5yb3VuZFRvVHdvKGN1cnJlbnRYKTtcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5yb3VuZFRvVHdvKGN1cnJlbnRZKTtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID0gXCJ3YWxsXCI7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyID0gMTtcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcIndhbGxcIjtcclxuXHJcbiAgICAgICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IHdhbGxBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gMlxyXG4gICAgICApIHtcclxuICAgICAgICBsZXQgd2FsbEFzc29jaWF0ZWRJbmRleCA9IDE7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRYID0gZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgICAgICh3YWxsOiBhbnkpID0+IHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHdhbGwuZWxlbWVudE51bWJlciA9PT0gMVxyXG4gICAgICAgICk/LmRpc3RhbmNlO1xyXG4gICAgICAgIGxldCBjdXJyZW50WSA9IDA7XHJcbiAgICAgICAgZWxlbWVudC5maXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgY3VycmVudFkgPSAoZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpICogaTtcclxuICAgICAgICAgIGlmICh3MUZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjdXJyZW50WSArPSBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54ID0gdGhpcy5yb3VuZFRvVHdvKFxyXG4gICAgICAgICAgICBjdXJyZW50WCAtIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSA9IHRoaXMucm91bmRUb1R3byhjdXJyZW50WSk7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9IFwid2FsbFwiO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlciA9IDI7XHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVUeXBlID0gXCJ3YWxsXCI7XHJcblxyXG4gICAgICAgICAgaWYgKCFmaXh0dXJlLmdob3N0KSB7XHJcbiAgICAgICAgICAgIC8vIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IGZpeHR1cmVOdW1iZXIrKztcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSB3YWxsQXNzb2NpYXRlZEluZGV4Kys7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDNcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IHdhbGxBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG4gICAgICAgIGxldCBjdXJyZW50WCA9IDA7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRZID0gZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgICAgICh3YWxsOiBhbnkpID0+IHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHdhbGwuZWxlbWVudE51bWJlciA9PT0gMlxyXG4gICAgICAgICk/LmRpc3RhbmNlO1xyXG4gICAgICAgIGVsZW1lbnQuZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGN1cnJlbnRYID0gKGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpICogaTtcclxuICAgICAgICAgIGlmICh3NEZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjdXJyZW50WCArPSBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLnJvdW5kVG9Ud28oY3VycmVudFgpO1xyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB0aGlzLnJvdW5kVG9Ud28oXHJcbiAgICAgICAgICAgIGN1cnJlbnRZIC0gZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9IFwid2FsbFwiO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlciA9IDM7XHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVUeXBlID0gXCJ3YWxsXCI7XHJcblxyXG4gICAgICAgICAgaWYgKCFmaXh0dXJlLmdob3N0KSB7XHJcbiAgICAgICAgICAgIC8vIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IGZpeHR1cmVOdW1iZXIrKztcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSB3YWxsQXNzb2NpYXRlZEluZGV4Kys7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDRcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IHdhbGxBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG4gICAgICAgIGxldCBjdXJyZW50WCA9IDA7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRZID1cclxuICAgICAgICAgIGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgICAgICh3YWxsOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgd2FsbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgd2FsbC5lbGVtZW50TnVtYmVyID09PSA1XHJcbiAgICAgICAgICApPy5kaXN0YW5jZSArXHJcbiAgICAgICAgICBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAgICAgICAod2FsbDogYW55KSA9PlxyXG4gICAgICAgICAgICAgIHdhbGwuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIiAmJiB3YWxsLmVsZW1lbnROdW1iZXIgPT09IDFcclxuICAgICAgICAgICk/LmRpc3RhbmNlO1xyXG5cclxuICAgICAgICBlbGVtZW50LmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCA9IHRoaXMucm91bmRUb1R3byhjdXJyZW50WCk7XHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSA9IHRoaXMucm91bmRUb1R3byhcclxuICAgICAgICAgICAgY3VycmVudFkgKyAoZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpICogaVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID0gXCJ3YWxsXCI7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyID0gNDtcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcIndhbGxcIjtcclxuXHJcbiAgICAgICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IHdhbGxBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gNVxyXG4gICAgICApIHtcclxuICAgICAgICBsZXQgd2FsbEFzc29jaWF0ZWRJbmRleCA9IDE7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRYID0gMDtcclxuICAgICAgICBsZXQgY3VycmVudFkgPSAwO1xyXG4gICAgICAgIGVsZW1lbnQuZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGN1cnJlbnRZID1cclxuICAgICAgICAgICAgKGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0KSAqIGkgK1xyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldDtcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54ID0gdGhpcy5yb3VuZFRvVHdvKGN1cnJlbnRYKTtcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5yb3VuZFRvVHdvKGN1cnJlbnRZKTtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID0gXCJ3YWxsXCI7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyID0gNTtcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcIndhbGxcIjtcclxuXHJcbiAgICAgICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IHdhbGxBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgbWF4Rml4dHVyZXNQZXJSb3cgPSBmbG9vckRhdGEuY2VudGVyRml4dHVyZS5sZW5ndGggLyAyO1xyXG4gICAgY29uc3QgdG90YWxSb3dzID0gMjtcclxuICAgIGNvbnN0IGNlbnRlclJvdyA9IE1hdGguZmxvb3IodG90YWxSb3dzIC8gMik7XHJcblxyXG4gICAgbGV0IGZsb29yQXNzb2NpYXRlZEluZGV4ID0gMTtcclxuXHJcbiAgICBmbG9vckRhdGEuY2VudGVyRml4dHVyZS5mb3JFYWNoKChmaXh0dXJlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3Qgc3RhcnRYID1cclxuICAgICAgICBtaW5YRGlzdGFuY2UgLyAyIC1cclxuICAgICAgICAobWF4Rml4dHVyZXNQZXJSb3cgLyAyKSAqIChmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KTtcclxuICAgICAgY29uc3Qgc3RhcnRZID1cclxuICAgICAgICBtaW5ZRGlzdGFuY2UgLyAyIC1cclxuICAgICAgICBjZW50ZXJSb3cgKiAoZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpO1xyXG5cclxuICAgICAgY29uc3QgY29sSW5kZXggPSBNYXRoLmZsb29yKGluZGV4IC8gMik7XHJcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gaW5kZXggJSAyID09PSAwID8gMSA6IDA7XHJcblxyXG4gICAgICBjb25zdCBjdXJyZW50WCA9XHJcbiAgICAgICAgc3RhcnRYICsgY29sSW5kZXggKiAoZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCk7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRZID1cclxuICAgICAgICBzdGFydFkgKyByb3dJbmRleCAqIChmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCk7XHJcblxyXG4gICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCA9IHRoaXMucm91bmRUb1R3byhjdXJyZW50WCk7XHJcbiAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5yb3VuZFRvVHdvKGN1cnJlbnRZKTtcclxuICAgICAgZml4dHVyZS5maXh0dXJlVHlwZSA9IFwiZmxvb3JcIjtcclxuXHJcbiAgICAgIGlmICghZml4dHVyZS5naG9zdCkge1xyXG4gICAgICAgIC8vIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IGZpeHR1cmVOdW1iZXIrKztcclxuICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IGZsb29yQXNzb2NpYXRlZEluZGV4Kys7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVvcmRlckZpeHR1cmUoZmxvb3JEYXRhOiBhbnkpIHtcclxuICAgIGxldCBmaXh0dXJlTnVtYmVyID0gMTtcclxuXHJcbiAgICAvLyBXYWxsc1xyXG4gICAgZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgIGxldCB3YWxsQXNzb2NpYXRlZEluZGV4ID0gMTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5maXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID0gXCJ3YWxsXCI7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyID0gZWxlbWVudC5lbGVtZW50TnVtYmVyO1xyXG4gICAgICAgICAgZml4dHVyZS5maXh0dXJlVHlwZSA9IFwid2FsbFwiO1xyXG5cclxuICAgICAgICAgIGlmICghZml4dHVyZS5naG9zdCkge1xyXG4gICAgICAgICAgICAvLyBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBmaXh0dXJlTnVtYmVyKys7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gd2FsbEFzc29jaWF0ZWRJbmRleCsrO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZml4dHVyZS5maXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDZW50ZXIgZmxvb3IgZml4dHVyZXNcclxuICAgIGxldCBmbG9vckFzc29jaWF0ZWRJbmRleCA9IDE7XHJcbiAgICBmbG9vckRhdGEuY2VudGVyRml4dHVyZS5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgZml4dHVyZS5maXh0dXJlVHlwZSA9IFwiZmxvb3JcIjtcclxuXHJcbiAgICAgIGlmICghZml4dHVyZS5naG9zdCkge1xyXG4gICAgICAgIC8vIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IGZpeHR1cmVOdW1iZXIrKztcclxuICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IGZsb29yQXNzb2NpYXRlZEluZGV4Kys7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RWxlbWVudFZhbHVlKGdyb3VwOiBhbnkpIHtcclxuICAgIHJldHVybiBncm91cC5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIEhlbHBlcjogZ2V0IHdhbGwgbWV0YSBieSBlbGVtZW50IG51bWJlciAoMS1iYXNlZClcclxuICBwcml2YXRlIGdldFdhbGxCeU51bWJlcihlbGVtZW50TnVtYmVyOiBudW1iZXIpOiBhbnkgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uPy5maW5kKFxyXG4gICAgICAodzogYW55KSA9PiB3LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3LmVsZW1lbnROdW1iZXIgPT09IGVsZW1lbnROdW1iZXJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXI6IGZpbmQgZml4dHVyZSBieSBpZCBhY3Jvc3Mgd2FsbHMgYW5kIGNlbnRlciBmaXh0dXJlc1xyXG4gIHByaXZhdGUgZmluZEZpeHR1cmVCeUlkKFxyXG4gICAgZml4dHVyZUlkOiBzdHJpbmdcclxuICApOiB7IGZpeHR1cmU6IGFueTsgcGFyZW50PzogYW55IH0gfCBudWxsIHtcclxuICAgIGlmICghZml4dHVyZUlkKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5mbG9vckRhdGE/LmxheW91dFBvbHlnb24gPz8gW10pIHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudC5maXh0dXJlcykpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGZpeHR1cmUgb2YgZWxlbWVudC5maXh0dXJlcykge1xyXG4gICAgICAgICAgaWYgKGZpeHR1cmUuX2lkID09PSBmaXh0dXJlSWQpIHJldHVybiB7IGZpeHR1cmUsIHBhcmVudDogZWxlbWVudCB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZSA/PyBbXSkge1xyXG4gICAgICBpZiAoZml4dHVyZS5faWQgPT09IGZpeHR1cmVJZCkgcmV0dXJuIHsgZml4dHVyZSwgcGFyZW50OiB0aGlzLmZsb29yRGF0YSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcm91bmRUb1R3byhudW06IG51bWJlcikge1xyXG4gICAgcmV0dXJuIE1hdGgucm91bmQobnVtICogMTAwKSAvIDEwMDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFN0b3JlRml4dHVyZXMoc3RvcmVJZDogc3RyaW5nLCBlbmFibGU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLmlzUGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKCF0aGlzLmZpeHR1cmVUZW1wbGF0ZXMubGVuZ3RoKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Rml4dHVyZVRlbXBsYXRlcygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSBudWxsO1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlXHJcbiAgICAgIC5nZXRTdG9yZUZpeHR1cmVzKHsgaWQ6IFtzdG9yZUlkXSwgdHJlZVZpZXc6IHRydWUgfSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICghcmVzPy5kYXRhPy5bMF0/LmZsb29ycz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnBsYW5vRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShyZXMuZGF0YVswXSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5mbG9vckRhdGE/Ll9pZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShcclxuICAgICAgICAgICAgICByZXMuZGF0YVswXS5mbG9vcnMuZmluZChcclxuICAgICAgICAgICAgICAgIChmbG9vcjogYW55KSA9PiBmbG9vcj8uX2lkID09PSB0aGlzLmZsb29yRGF0YT8uX2lkXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUocmVzLmRhdGFbMF0uZmxvb3JzWzBdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZXh0cmFjdEFsbEZpeHR1cmVzKHRoaXMuZmxvb3JEYXRhKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vcklkLnNldFZhbHVlKHRoaXMuZmxvb3JEYXRhLl9pZCwge1xyXG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zdG9yZU1ldHJpY3MuZmxvb3JDb3VudCA9IHRoaXMucGxhbm9EYXRhPy5mbG9vcnM/Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVFZGl0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICAgICAgICAgICAgdGhpcy50YXNrRGV0YWlscyh0aGlzLmZsb29yRGF0YS5wbGFub0lkLCB0aGlzLmZsb29yRGF0YS5faWQpLFxyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmVGZWVkYmFjayhcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgICB7fVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgfSBjYXRjaCB7fVxyXG5cclxuICAgICAgICAgIHRoaXMucmVuZGVyRmxvb3IoKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmlzUGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChlbmFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sYXlvdXRGb3JtPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZUNhbnZhcygpO1xyXG4gICAgICAgICAgICB0aGlzLmZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQoKTtcclxuICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzUGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gZmV0Y2ggcGxhbm9cIik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBleHRyYWN0QWxsRml4dHVyZXMoZmxvb3JEYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IGV4dHJhY3RlZEZpeHR1cmUgPSBbXHJcbiAgICAgIC4uLihmbG9vckRhdGE/Lm1hc3RlclRlbXBsYXRlcyA/PyBbXSksXHJcbiAgICAgIC4uLihmbG9vckRhdGE/LmNlbnRlckZpeHR1cmUgPz8gW10pLFxyXG4gICAgXTtcclxuXHJcbiAgICBmbG9vckRhdGE/LmxheW91dFBvbHlnb24/LmZvckVhY2goKGxwOiBhbnkpID0+IHtcclxuICAgICAgZXh0cmFjdGVkRml4dHVyZS5wdXNoKC4uLihscC5maXh0dXJlcyA/PyBbXSkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hbGxGaXh0dXJlcyA9IGV4dHJhY3RlZEZpeHR1cmU7XHJcbiAgfVxyXG5cclxuICByZW5kZXJGbG9vcih1cGRhdGU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLnN0b3JlTWV0cmljcy5maXh0dXJlQ291bnQgPSB0aGlzLmZsb29yRGF0YS5maXh0dXJlQ291bnQ7XHJcbiAgICB0aGlzLnN0b3JlTWV0cmljcy52bUNvdW50ID0gdGhpcy5mbG9vckRhdGEudm1Db3VudDtcclxuICAgIHRoaXMuZHJhd0luaXRpYWxDb250ZW50KCk7XHJcbiAgICBpZiAodXBkYXRlKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG5cclxuICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3YWxsOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAod2FsbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgIGNvbnN0IHdhbGxJdGVtID0gdGhpcy5wYXRjaFdhbGxFbGVtZW50cyh7XHJcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlOiB3YWxsLmVsZW1lbnRUeXBlLFxyXG4gICAgICAgICAgICBlbGVtZW50TnVtYmVyOiB3YWxsLmVsZW1lbnROdW1iZXIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB3YWxsLmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZml4dHVyZT8uZml4dHVyZU5hbWUgPT09IFwic3BhY2VcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSB0aGlzLnBhdGNoRml4dHVyZSh7XHJcbiAgICAgICAgICAgICAgZml4dHVyZU5hbWU6IGZpeHR1cmUuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgICAgZml4dHVyZUNvbmZpZ0lkOiBmaXh0dXJlLmZpeHR1cmVDb25maWdJZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmUuX2lkLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgKHdhbGxJdGVtLmdldChcImZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheSkucHVzaChmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgd2FsbC5vdGhlckVsZW1lbnRzPy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICAgIHR5cGU6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMub3RoZXJFbGVtZW50TGlzdC5zb21lKChvKSA9PiBvLnZhbHVlID09PSBlbGUuZml4dHVyZU5hbWUpXHJcbiAgICAgICAgICAgICAgICAgID8gZWxlLmZpeHR1cmVOYW1lXHJcbiAgICAgICAgICAgICAgICAgIDogXCJPdGhlcnNcIixcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIGN1c3RvbU5hbWU6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMub3RoZXJFbGVtZW50TGlzdC5zb21lKChvKSA9PiBvLnZhbHVlID09PSBlbGUuZml4dHVyZU5hbWUpXHJcbiAgICAgICAgICAgICAgICAgID8gXCJcIlxyXG4gICAgICAgICAgICAgICAgICA6IGVsZS5maXh0dXJlTmFtZSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgKHdhbGxJdGVtLmdldChcIm90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5KS5wdXNoKGVsZUdyb3VwKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuZ2V0Rm9ybVdhbGxzLnB1c2god2FsbEl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmU/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gdGhpcy5wYXRjaEZpeHR1cmUoe1xyXG4gICAgICAgICAgICBmaXh0dXJlTmFtZTogZml4dHVyZS5maXh0dXJlTmFtZSxcclxuICAgICAgICAgICAgZml4dHVyZUNvbmZpZ0lkOiBmaXh0dXJlLmZpeHR1cmVDb25maWdJZCxcclxuICAgICAgICAgICAgX2lkOiBmaXh0dXJlLl9pZCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vckZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheSkucHVzaChcclxuICAgICAgICAgICAgZml4dHVyZUdyb3VwXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5mbG9vckRhdGE/Lm90aGVyRWxlbWVudHM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZWxlR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgdHlwZTogW1xyXG4gICAgICAgICAgICAgIHRoaXMub3RoZXJFbGVtZW50TGlzdC5zb21lKChvKSA9PiBvLnZhbHVlID09PSBlbGUuZml4dHVyZU5hbWUpXHJcbiAgICAgICAgICAgICAgICA/IGVsZS5maXh0dXJlTmFtZVxyXG4gICAgICAgICAgICAgICAgOiBcIk90aGVyc1wiLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBjdXN0b21OYW1lOiBbXHJcbiAgICAgICAgICAgICAgdGhpcy5vdGhlckVsZW1lbnRMaXN0LnNvbWUoKG8pID0+IG8udmFsdWUgPT09IGVsZS5maXh0dXJlTmFtZSlcclxuICAgICAgICAgICAgICAgID8gXCJcIlxyXG4gICAgICAgICAgICAgICAgOiBlbGUuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yT3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goXHJcbiAgICAgICAgICAgIGVsZUdyb3VwXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpYmVUb0ZpeHR1cmVDb25maWdJZENoYW5nZXMoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG9PdGhlckVsZW1lbnRzQ2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0luaXRpYWxDb250ZW50KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jYW52YXMuY2xlYXIoKTtcclxuICAgIHRoaXMucmVvcmRlckZpeHR1cmUodGhpcy5mbG9vckRhdGEpO1xyXG4gICAgYXdhaXQgdGhpcy5kcmF3TGF5b3V0RWxlbWVudHMoKTtcclxuICAgIC8vIHRoaXMuZHJhd0JnKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZ1bGxMYXlvdXRCb3VuZHMoKSB7XHJcbiAgICBjb25zdCBvYmplY3RzID0gdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpO1xyXG4gICAgaWYgKCFvYmplY3RzLmxlbmd0aCkgcmV0dXJuIHsgbGVmdDogMCwgdG9wOiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XHJcblxyXG4gICAgbGV0IG1pblggPSBJbmZpbml0eSxcclxuICAgICAgbWluWSA9IEluZmluaXR5LFxyXG4gICAgICBtYXhYID0gLUluZmluaXR5LFxyXG4gICAgICBtYXhZID0gLUluZmluaXR5O1xyXG5cclxuICAgIGZvciAoY29uc3Qgb2JqIG9mIG9iamVjdHMpIHtcclxuICAgICAgY29uc3QgcmVjdCA9IG9iai5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHJlY3QubGVmdCk7XHJcbiAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCByZWN0LnRvcCk7XHJcbiAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCByZWN0LmxlZnQgKyByZWN0LndpZHRoKTtcclxuICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHJlY3QudG9wICsgcmVjdC5oZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxlZnQ6IG1pblgsXHJcbiAgICAgIHRvcDogbWluWSxcclxuICAgICAgd2lkdGg6IG1heFggLSBtaW5YLFxyXG4gICAgICBoZWlnaHQ6IG1heFkgLSBtaW5ZLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZChkdXJhdGlvbiA9IDQwMCkge1xyXG4gICAgaWYgKCF0aGlzLmNhbnZhcyB8fCB0aGlzLmlzVXNlckludGVyYWN0ZWRXaXRoQ2FudmFzKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgYm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcbiAgICBpZiAoIWJvdW5kcy53aWR0aCB8fCAhYm91bmRzLmhlaWdodCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGNhbnZhc1cgPSB0aGlzLmNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgY29uc3QgY2FudmFzSCA9IHRoaXMuY2FudmFzLmdldEhlaWdodCgpO1xyXG5cclxuICAgIC8vIEZpbmFsIHpvb20gdG8gZml0ICh3aXRoIHBhZGRpbmcpXHJcbiAgICBjb25zdCBzY2FsZVggPSBjYW52YXNXIC8gYm91bmRzLndpZHRoO1xyXG4gICAgY29uc3Qgc2NhbGVZID0gY2FudmFzSCAvIGJvdW5kcy5oZWlnaHQ7XHJcbiAgICBjb25zdCB0YXJnZXRab29tID0gTWF0aC5taW4oc2NhbGVYLCBzY2FsZVkpICogMC45OyAvLyBwYWRkaW5nIDEwJVxyXG5cclxuICAgIC8vIERlc2lyZWQgdmlld3BvcnQgb2Zmc2V0IHRvIGNlbnRlciBsYXlvdXRcclxuICAgIGNvbnN0IHRhcmdldFZwdCA9IFtcclxuICAgICAgLi4uKHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtIHx8IFsxLCAwLCAwLCAxLCAwLCAwXSksXHJcbiAgICBdIGFzIGZhYnJpYy5UTWF0MkQ7XHJcblxyXG4gICAgdGFyZ2V0VnB0WzBdID0gdGFyZ2V0Wm9vbTsgLy8gc2NhbGVYXHJcbiAgICB0YXJnZXRWcHRbM10gPSB0YXJnZXRab29tOyAvLyBzY2FsZVlcclxuXHJcbiAgICB0YXJnZXRWcHRbNF0gPSBjYW52YXNXIC8gMiAtIChib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAvIDIpICogdGFyZ2V0Wm9vbTsgLy8gY2VudGVyIFhcclxuICAgIHRhcmdldFZwdFs1XSA9IGNhbnZhc0ggLyAyIC0gKGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC8gMikgKiB0YXJnZXRab29tOyAvLyBjZW50ZXIgWVxyXG5cclxuICAgIC8vIEN1cnJlbnQgdmlld3BvcnQgKHN0YXJ0aW5nIHBvaW50IG9mIGFuaW1hdGlvbilcclxuICAgIGNvbnN0IHN0YXJ0VnB0ID0gWy4uLnRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtIV0gYXMgZmFicmljLlRNYXQyRDtcclxuXHJcbiAgICBmYWJyaWMudXRpbC5hbmltYXRlKHtcclxuICAgICAgc3RhcnRWYWx1ZTogMCxcclxuICAgICAgZW5kVmFsdWU6IDEsXHJcbiAgICAgIGR1cmF0aW9uLFxyXG4gICAgICBlYXNpbmc6IGZhYnJpYy51dGlsLmVhc2UuZWFzZU91dEN1YmljLFxyXG4gICAgICBvbkNoYW5nZTogKHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICBjb25zdCB2cHQgPSB0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSE7XHJcblxyXG4gICAgICAgIC8vIEludGVycG9sYXRlIG1hdHJpeCB2YWx1ZXNcclxuICAgICAgICB2cHRbMF0gPSBzdGFydFZwdFswXSArICh0YXJnZXRWcHRbMF0gLSBzdGFydFZwdFswXSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbM10gPSBzdGFydFZwdFszXSArICh0YXJnZXRWcHRbM10gLSBzdGFydFZwdFszXSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbNF0gPSBzdGFydFZwdFs0XSArICh0YXJnZXRWcHRbNF0gLSBzdGFydFZwdFs0XSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbNV0gPSBzdGFydFZwdFs1XSArICh0YXJnZXRWcHRbNV0gLSBzdGFydFZwdFs1XSkgKiB2YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3TGF5b3V0RWxlbWVudHMoKSB7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25baW5kZXhdO1xyXG5cclxuICAgICAgbGV0IHdhbGw7XHJcblxyXG4gICAgICBlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24gPz89IHtcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDAsXHJcbiAgICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLngsIGVsZW1lbnQudW5pdCk7XHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBlbGVtZW50LnVuaXQpO1xyXG5cclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy53YWxsVGhpY2tuZXNzO1xyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhlbGVtZW50LmRpc3RhbmNlLCBlbGVtZW50LnVuaXQpO1xyXG4gICAgICAgIHdhbGwgPSBhd2FpdCB0aGlzLmRyYXdXYWxsKHRoaXMuY2FudmFzLCB4LCB5LCBoZWlnaHQsIHdpZHRoLCBlbGVtZW50KTtcclxuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIpIHtcclxuICAgICAgICBjb25zdCBhcnJvd1dpZHRoID0gODA7XHJcbiAgICAgICAgY29uc3QgYXJyb3dIZWlnaHQgPSA3NTtcclxuICAgICAgICBjb25zdCBhcnJvd0Jhc2UgPSA0MDtcclxuICAgICAgICB0aGlzLmRyYXdFbnRyYW5jZShcclxuICAgICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgICAgeCxcclxuICAgICAgICAgIHksXHJcbiAgICAgICAgICBhcnJvd1dpZHRoLFxyXG4gICAgICAgICAgYXJyb3dIZWlnaHQsXHJcbiAgICAgICAgICBhcnJvd0Jhc2UsXHJcbiAgICAgICAgICBlbGVtZW50XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwczogZmFicmljLkdyb3VwW10gPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50Py5maXh0dXJlcz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSBlbGVtZW50LmZpeHR1cmVzW2pdO1xyXG4gICAgICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54LFxyXG4gICAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSxcclxuICAgICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnVuaXRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBmaXh0dXJlSGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGZpeHR1cmVXaWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGZpeHR1cmVPYmogPSBhd2FpdCB0aGlzLmRyYXdGaXh0dXJlKFxyXG4gICAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgICAgeCxcclxuICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgZml4dHVyZUhlaWdodCxcclxuICAgICAgICAgICAgZml4dHVyZVdpZHRoLFxyXG4gICAgICAgICAgICBmaXh0dXJlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgZml4dHVyZUdyb3Vwcy5wdXNoKGZpeHR1cmVPYmogYXMgZmFicmljLkdyb3VwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50LmlzTG9ja2VkICYmIHdhbGwpIHtcclxuICAgICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZSh3YWxsKTtcclxuICAgICAgICAgIGZpeHR1cmVHcm91cHMuZm9yRWFjaCgoZikgPT4gdGhpcy5jYW52YXMucmVtb3ZlKGYpKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBjb21iaW5lZEdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbd2FsbCwgLi4uZml4dHVyZUdyb3Vwc10sIHtcclxuICAgICAgICAgICAgaGFzQ29udHJvbHM6IHRydWUsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgY29tYmluZWRHcm91cC5zZXQoeyBpc0xvY2tlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgIHRoaXMuY2FudmFzLmFkZChjb21iaW5lZEdyb3VwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWxlbWVudD8ub3RoZXJFbGVtZW50cz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IG90aGVyRWxlbWVudCA9IGVsZW1lbnQub3RoZXJFbGVtZW50c1tqXTtcclxuICAgICAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLngsIFwiZnRcIik7XHJcbiAgICAgICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBcImZ0XCIpO1xyXG4gICAgICAgICAgY29uc3QgYSA9IG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlO1xyXG4gICAgICAgICAgY29uc3QgaCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljV2lkdGgudW5pdFxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBmaXh0dXJlT2JqID0gdGhpcy5kcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChcclxuICAgICAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgIGEsXHJcbiAgICAgICAgICAgIHcsXHJcbiAgICAgICAgICAgIGgsXHJcbiAgICAgICAgICAgIG90aGVyRWxlbWVudFxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAvLyBlbGVtZW50c0dyb3VwLnB1c2goZml4dHVyZU9iaiBhcyBmYWJyaWMuR3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmU/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlW2ldO1xyXG4gICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCxcclxuICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSxcclxuICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBmaXh0dXJlSGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXRcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgZml4dHVyZVdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICAgICk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZHJhd0ZpeHR1cmUoXHJcbiAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgeCxcclxuICAgICAgICB5LFxyXG4gICAgICAgIGZpeHR1cmVIZWlnaHQsXHJcbiAgICAgICAgZml4dHVyZVdpZHRoLFxyXG4gICAgICAgIGZpeHR1cmVcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICBjb25zdCBvdGhlckVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzW2pdO1xyXG4gICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBcImZ0XCIpO1xyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBcImZ0XCIpO1xyXG4gICAgICBjb25zdCBhID0gb3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24uYW5nbGU7XHJcbiAgICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXRcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGZpeHR1cmVPYmogPSB0aGlzLmRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKFxyXG4gICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgIHgsXHJcbiAgICAgICAgeSxcclxuICAgICAgICBhLFxyXG4gICAgICAgIHcsXHJcbiAgICAgICAgaCxcclxuICAgICAgICBvdGhlckVsZW1lbnRcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdXYWxsKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgZWxlbWVudERhdGE6IGFueVxyXG4gICkge1xyXG4gICAgY29uc3QgcmFkaXVzID0gNTtcclxuICAgIGNvbnN0IGZpbGxDb2xvciA9IFwiI0Y2RkNGRlwiO1xyXG4gICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSBcIiNEMEQ1RERcIjtcclxuICAgIGNvbnN0IGxhYmVsQ29sb3IgPSBcIiMwMDlCRjNcIjtcclxuICAgIGxldCB0ZXh0ID0gYCR7dGhpcy50aXRsZUNhc2UudHJhbnNmb3JtKGVsZW1lbnREYXRhLmVsZW1lbnRUeXBlKX0gJHtcclxuICAgICAgZWxlbWVudERhdGEuZWxlbWVudE51bWJlclxyXG4gICAgfWA7XHJcblxyXG4gICAgY29uc3Qgd2FsbCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IDAsXHJcbiAgICAgIHRvcDogMCxcclxuICAgICAgd2lkdGgsXHJcbiAgICAgIGhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgZmlsbDogZmlsbENvbG9yLFxyXG4gICAgICBzdHJva2U6IHN0cm9rZUNvbG9yLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIHN0cm9rZVVuaWZvcm06IHRydWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBjZW50ZXJYID0gd2lkdGggLyAyO1xyXG4gICAgY29uc3QgY2VudGVyWSA9IGhlaWdodCAvIDI7XHJcbiAgICBjb25zdCBpc1ZlcnRpY2FsID0gaGVpZ2h0ID4gd2lkdGg7XHJcblxyXG4gICAgY29uc3QgbGFiZWwgPSBuZXcgZmFicmljLkZhYnJpY1RleHQodGV4dCwge1xyXG4gICAgICBsZWZ0OiBjZW50ZXJYLFxyXG4gICAgICB0b3A6IGNlbnRlclksXHJcbiAgICAgIGZvbnRTaXplOiAxMCxcclxuICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICBhbmdsZTogaXNWZXJ0aWNhbCA/IC05MCA6IDAsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYXJyb3dIZWFkID0gNTtcclxuICAgIGNvbnN0IGVsZW1lbnRzOiBmYWJyaWMuT2JqZWN0W10gPSBbd2FsbCwgbGFiZWxdO1xyXG5cclxuICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGxhYmVsLndpZHRoIHx8IDA7XHJcbiAgICAgIGNvbnN0IHRvcEFycm93WSA9IDU7XHJcbiAgICAgIGNvbnN0IHRvcEFycm93RW5kWSA9IGNlbnRlclkgLSB0ZXh0V2lkdGggLyAyIC0gNTtcclxuXHJcbiAgICAgIGlmICh0b3BBcnJvd0VuZFkgPiB0b3BBcnJvd1kgKyBhcnJvd0hlYWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5MaW5lKFtjZW50ZXJYLCB0b3BBcnJvd1ksIGNlbnRlclgsIHRvcEFycm93RW5kWV0sIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiBjZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IHRvcEFycm93WSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiAwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImJvdHRvbVwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgYm90dG9tQXJyb3dTdGFydFkgPSBjZW50ZXJZICsgdGV4dFdpZHRoIC8gMiArIDU7XHJcbiAgICAgIGNvbnN0IGJvdHRvbUFycm93RW5kWSA9IGhlaWdodCAtIDU7XHJcblxyXG4gICAgICBpZiAoYm90dG9tQXJyb3dFbmRZID4gYm90dG9tQXJyb3dTdGFydFkgKyBhcnJvd0hlYWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICBbY2VudGVyWCwgYm90dG9tQXJyb3dTdGFydFksIGNlbnRlclgsIGJvdHRvbUFycm93RW5kWV0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBzdHJva2U6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogY2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiBib3R0b21BcnJvd0VuZFksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogMTgwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcInRvcFwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdGV4dFdpZHRoID0gbGFiZWwud2lkdGggfHwgMDtcclxuICAgICAgY29uc3QgbGVmdEFycm93U3RhcnRYID0gNTtcclxuICAgICAgY29uc3QgbGVmdEFycm93RW5kWCA9IGNlbnRlclggLSB0ZXh0V2lkdGggLyAyIC0gNTtcclxuXHJcbiAgICAgIGlmIChsZWZ0QXJyb3dFbmRYID4gbGVmdEFycm93U3RhcnRYICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShbbGVmdEFycm93U3RhcnRYLCBjZW50ZXJZLCBsZWZ0QXJyb3dFbmRYLCBjZW50ZXJZXSwge1xyXG4gICAgICAgICAgICBzdHJva2U6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGxlZnRBcnJvd1N0YXJ0WCxcclxuICAgICAgICAgICAgdG9wOiBjZW50ZXJZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IC05MCxcclxuICAgICAgICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHJpZ2h0QXJyb3dTdGFydFggPSBjZW50ZXJYICsgdGV4dFdpZHRoIC8gMiArIDU7XHJcbiAgICAgIGNvbnN0IHJpZ2h0QXJyb3dFbmRYID0gd2lkdGggLSA1O1xyXG5cclxuICAgICAgaWYgKHJpZ2h0QXJyb3dFbmRYID4gcmlnaHRBcnJvd1N0YXJ0WCArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgIFtyaWdodEFycm93U3RhcnRYLCBjZW50ZXJZLCByaWdodEFycm93RW5kWCwgY2VudGVyWV0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBzdHJva2U6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogcmlnaHRBcnJvd0VuZFgsXHJcbiAgICAgICAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiA5MCxcclxuICAgICAgICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsb2NrU3ZnU3RyaW5nID0gYDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICA8cGF0aCBkPVwiTTcgMTFWN0M3IDUuNjczOTIgNy41MjY3OCA0LjQwMjE1IDguNDY0NDcgMy40NjQ0N0M5LjQwMjE1IDIuNTI2NzggMTAuNjczOSAyIDEyIDJDMTMuMzI2MSAyIDE0LjU5NzkgMi41MjY3OCAxNS41MzU1IDMuNDY0NDdDMTYuNDczMiA0LjQwMjE1IDE3IDUuNjczOTIgMTcgN1YxMU01IDExSDE5QzIwLjEwNDYgMTEgMjEgMTEuODk1NCAyMSAxM1YyMEMyMSAyMS4xMDQ2IDIwLjEwNDYgMjIgMTkgMjJINUMzLjg5NTQzIDIyIDMgMjEuMTA0NiAzIDIwVjEzQzMgMTEuODk1NCAzLjg5NTQzIDExIDUgMTFaXCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgIDwvc3ZnPmA7XHJcblxyXG4gICAgbGV0IGxvYWRlZFNWRzogYW55ID0gYXdhaXQgZmFicmljLmxvYWRTVkdGcm9tU3RyaW5nKGxvY2tTdmdTdHJpbmcpO1xyXG5cclxuICAgIGxldCBsb2NrU3ZnID0gZmFicmljLnV0aWwuZ3JvdXBTVkdFbGVtZW50cyhcclxuICAgICAgbG9hZGVkU1ZHLm9iamVjdHMsXHJcbiAgICAgIGxvYWRlZFNWRy5vcHRpb25zXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHdhbGxDZW50ZXJYID0gd2lkdGggLyAyO1xyXG4gICAgY29uc3Qgd2FsbENlbnRlclkgPSBoZWlnaHQgLyAyO1xyXG5cclxuICAgIGxvY2tTdmcuc2NhbGVUb1dpZHRoKDIwKTtcclxuICAgIGxvY2tTdmcuc2NhbGVUb0hlaWdodCgyMCk7XHJcblxyXG4gICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgbG9ja1N2Zy5zZXQoe1xyXG4gICAgICAgIGxlZnQ6IHdhbGxDZW50ZXJYLFxyXG4gICAgICAgIHRvcDogd2FsbENlbnRlclksXHJcbiAgICAgICAgYW5nbGU6IC05MCxcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbG9ja1N2Zy5zZXQoe1xyXG4gICAgICAgIGxlZnQ6IHdhbGxDZW50ZXJYLFxyXG4gICAgICAgIHRvcDogd2FsbENlbnRlclksXHJcbiAgICAgICAgYW5nbGU6IDAsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2NrU3ZnLnNldCh7XHJcbiAgICAgIHZpc2libGU6IGZhbHNlLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgbG9ja1N2Zy5vbihcIm1vdXNlZG93blwiLCAob3B0KSA9PiB7XHJcbiAgICAgIGlmIChvcHQgJiYgb3B0LmUgJiYgb3B0LmUuc3RvcFByb3BhZ2F0aW9uKSB7XHJcbiAgICAgICAgb3B0LmUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgICBlbGVtZW50RGF0YS5pc0xvY2tlZCA9ICFlbGVtZW50RGF0YT8uaXNMb2NrZWQ7XHJcbiAgICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZWxlbWVudHMucHVzaChsb2NrU3ZnKTtcclxuXHJcbiAgICBjb25zdCBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoZWxlbWVudHMsIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBoYXNDb250cm9sczogdHJ1ZSxcclxuICAgICAgbG9ja1NjYWxpbmdYOiBpc1ZlcnRpY2FsLFxyXG4gICAgICBsb2NrU2NhbGluZ1k6ICFpc1ZlcnRpY2FsLFxyXG4gICAgICAvLyBsb2NrUm90YXRpb246IHRydWUsXHJcbiAgICAgIHNlbGVjdGFibGU6IHRoaXMubGF5b3V0Rm9ybS5lbmFibGVkLFxyXG4gICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICAgIGFuZ2xlOiBlbGVtZW50RGF0YS5hbmdsZSxcclxuICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gZWxlbWVudERhdGEuZWxlbWVudFR5cGU7XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudERhdGE7XHJcblxyXG4gICAgLy8gZ3JvdXAub24oXCJtb2RpZmllZFwiLCAoZTogYW55KSA9PiB7XHJcbiAgICAvLyAgIGNvbnN0IGFjdGlvbiA9IGUudHJhbnNmb3JtPy5hY3Rpb247XHJcbiAgICAvLyAgIGlmIChhY3Rpb24gPT09IFwiZHJhZ1wiIHx8IGFjdGlvbiA9PT0gXCJyb3RhdGVcIikge1xyXG4gICAgLy8gICAgIGNvbnN0IHdhbGxGaXh0dXJlSWRzID0gZWxlbWVudERhdGE/LmZpeHR1cmVzPy5tYXAoKGU6IGFueSkgPT4gZS5faWQpO1xyXG4gICAgLy8gICAgIGlmICghd2FsbEZpeHR1cmVJZHM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIC8vICAgICBjb25zdCBmaXh0dXJlcyA9IHRoaXMuY2FudmFzXHJcbiAgICAvLyAgICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAvLyAgICAgICAuZmlsdGVyKFxyXG4gICAgLy8gICAgICAgICAob2JqOiBhbnkpID0+XHJcbiAgICAvLyAgICAgICAgICAgb2JqLm9ialR5cGUgPT09IFwiZml4dHVyZVwiICYmXHJcbiAgICAvLyAgICAgICAgICAgd2FsbEZpeHR1cmVJZHMuaW5jbHVkZXMob2JqLmZpeHR1cmVJZClcclxuICAgIC8vICAgICAgICk7XHJcbiAgICAvLyAgICAgaWYgKCFmaXh0dXJlcy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICAvLyAgICAgLy8gUmVtb3ZlIGV4aXN0aW5nIGZpeHR1cmVzIHRlbXBvcmFyaWx5XHJcbiAgICAvLyAgICAgZml4dHVyZXMuZm9yRWFjaCgoZikgPT4gdGhpcy5jYW52YXMucmVtb3ZlKGYpKTtcclxuXHJcbiAgICAvLyAgICAgY29uc3QgY29tYmluZWRHcm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoZml4dHVyZXMsIHtcclxuICAgIC8vICAgICAgIGhhc0NvbnRyb2xzOiB0cnVlLFxyXG4gICAgLy8gICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcclxuICAgIC8vICAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgLy8gICAgIH0pO1xyXG5cclxuICAgIC8vICAgICAvLyB3YWxsJ3MgcG9zaXRpb24gYW5kIGFuZ2xlXHJcbiAgICAvLyAgICAgY29uc3QgeDAgPSB0aGlzLmZyb21QaXhlbHMoZS50YXJnZXQubGVmdCwgXCJmdFwiKTtcclxuICAgIC8vICAgICBjb25zdCB5MCA9IHRoaXMuZnJvbVBpeGVscyhlLnRhcmdldC50b3AsIFwiZnRcIik7XHJcbiAgICAvLyAgICAgY29uc3QgYSA9IGUudGFyZ2V0LmFuZ2xlIHx8IDA7XHJcbiAgICAvLyAgICAgY29uc3QgYW5nbGVSYWQgPSAoYSAqIE1hdGguUEkpIC8gMTgwO1xyXG5cclxuICAgIC8vICAgICAvLyBJbnN0ZWFkIG9mIHdhbGwgZW5kLCB1c2Ugd2FsbCBzdGFydCArIHBlcnBlbmRpY3VsYXIgb2Zmc2V0XHJcbiAgICAvLyAgICAgY29uc3Qgb2Zmc2V0ID0gMTsgLy8gcGVycGVuZGljdWxhciBkaXN0YW5jZSBmcm9tIHdhbGxcclxuICAgIC8vICAgICBjb25zdCBmeF9vZmZzZXQgPSB4MCArIG9mZnNldCAqIC1NYXRoLnNpbihhbmdsZVJhZCk7XHJcbiAgICAvLyAgICAgY29uc3QgZnlfb2Zmc2V0ID0geTAgKyBvZmZzZXQgKiBNYXRoLmNvcyhhbmdsZVJhZCk7XHJcblxyXG4gICAgLy8gICAgIC8vIENvbnZlcnQgYmFjayB0byBwaXhlbHMgYW5kIGFwcGx5XHJcbiAgICAvLyAgICAgY29tYmluZWRHcm91cC5sZWZ0ID0gdGhpcy50b1BpeGVscyhmeF9vZmZzZXQsIFwiZnRcIik7XHJcbiAgICAvLyAgICAgY29tYmluZWRHcm91cC50b3AgPSB0aGlzLnRvUGl4ZWxzKGZ5X29mZnNldCwgXCJmdFwiKTtcclxuICAgIC8vICAgICBjb21iaW5lZEdyb3VwLmFuZ2xlID0gYTtcclxuXHJcbiAgICAvLyAgICAgdGhpcy5jYW52YXMuYWRkKGNvbWJpbmVkR3JvdXApO1xyXG4gICAgLy8gICAgIHVuZ3JvdXBQcmVzZXJ2ZVBvc2l0aW9ucyhjb21iaW5lZEdyb3VwLCB0aGlzLmNhbnZhcyk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG5cclxuICAgIC8vIGNvbnN0IHVuZ3JvdXBQcmVzZXJ2ZVBvc2l0aW9ucyA9IGFzeW5jIChcclxuICAgIC8vICAgY29tYmluZWRHcm91cDogZmFicmljLkdyb3VwLFxyXG4gICAgLy8gICBjYW52YXM6IGZhYnJpYy5DYW52YXNcclxuICAgIC8vICkgPT4ge1xyXG4gICAgLy8gICBjb25zdCBpdGVtcyA9IGNvbWJpbmVkR3JvdXAuZ2V0T2JqZWN0cygpLm1hcCgob2JqKSA9PiB7XHJcbiAgICAvLyAgICAgY29uc3QgYWJzID0gZmFicmljLnV0aWwudHJhbnNmb3JtUG9pbnQoXHJcbiAgICAvLyAgICAgICBuZXcgZmFicmljLlBvaW50KG9iai5sZWZ0ISwgb2JqLnRvcCEpLFxyXG4gICAgLy8gICAgICAgY29tYmluZWRHcm91cC5jYWxjVHJhbnNmb3JtTWF0cml4KClcclxuICAgIC8vICAgICApO1xyXG4gICAgLy8gICAgIHJldHVybiB7XHJcbiAgICAvLyAgICAgICBpZDogKG9iaiBhcyBhbnkpLmZpeHR1cmVJZCxcclxuICAgIC8vICAgICAgIHg6IGFicy54LFxyXG4gICAgLy8gICAgICAgeTogYWJzLnksXHJcbiAgICAvLyAgICAgICBhbmdsZTogY29tYmluZWRHcm91cC5hbmdsZSxcclxuICAgIC8vICAgICB9O1xyXG4gICAgLy8gICB9KTtcclxuXHJcbiAgICAvLyAgIHRoaXMudXBkYXRlRml4dHVyZUNvb3JkaW5hdGVzKGl0ZW1zKTtcclxuICAgIC8vICAgY2FudmFzLnJlbW92ZShjb21iaW5lZEdyb3VwKTtcclxuICAgIC8vICAgY29uc3Qgd2FsbFRvUmVyZW5kZXIgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAvLyAgICAgKGU6IGFueSkgPT5cclxuICAgIC8vICAgICAgIGUuZWxlbWVudE51bWJlciA9PT0gZWxlbWVudERhdGEuZWxlbWVudE51bWJlciAmJlxyXG4gICAgLy8gICAgICAgZS5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCJcclxuICAgIC8vICAgKTtcclxuXHJcbiAgICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgd2FsbFRvUmVyZW5kZXI/LmZpeHR1cmVzPy5sZW5ndGg7IGkrKykge1xyXG4gICAgLy8gICAgIGNvbnN0IGZpeHR1cmUgPSB3YWxsVG9SZXJlbmRlci5maXh0dXJlc1tpXTtcclxuICAgIC8vICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgIC8vICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54LFxyXG4gICAgLy8gICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnVuaXRcclxuICAgIC8vICAgICApO1xyXG4gICAgLy8gICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgLy8gICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnksXHJcbiAgICAvLyAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdFxyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgICAgY29uc3QgZml4dHVyZUhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAvLyAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAvLyAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdFxyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgICAgY29uc3QgZml4dHVyZVdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgIC8vICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgLy8gICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudW5pdFxyXG4gICAgLy8gICAgICk7XHJcblxyXG4gICAgLy8gICAgIGF3YWl0IHRoaXMuZHJhd0ZpeHR1cmUoXHJcbiAgICAvLyAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgIC8vICAgICAgIHgsXHJcbiAgICAvLyAgICAgICB5LFxyXG4gICAgLy8gICAgICAgZml4dHVyZUhlaWdodCxcclxuICAgIC8vICAgICAgIGZpeHR1cmVXaWR0aCxcclxuICAgIC8vICAgICAgIGZpeHR1cmVcclxuICAgIC8vICAgICApO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAvLyB9O1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG5cclxuICAgIC8vIElmIG5ld2x5IGFkZGVkLCBmb2N1cyBpdCBvbmNlXHJcbiAgICBpZiAoKGVsZW1lbnREYXRhIGFzIGFueSk/Lm5ld0FkZGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KGdyb3VwKTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0gY2F0Y2gge31cclxuICAgICAgZGVsZXRlIChlbGVtZW50RGF0YSBhcyBhbnkpLm5ld0FkZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdGaXh0dXJlKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgZml4dHVyZURhdGE6IGFueVxyXG4gICkge1xyXG4gICAgbGV0IGZpeHR1cmVDb2xvcjogYW55O1xyXG4gICAgaWYgKFtcImZpeHR1cmVcIiwgXCJmaXh0dXJlLXJlZG9cIl0uaW5jbHVkZXModGhpcy5wdWJsaXNoaW5nU3RhdGUpKSB7XHJcbiAgICAgIGZpeHR1cmVDb2xvciA9IHtcclxuICAgICAgICBwcmltYXJ5OlxyXG4gICAgICAgICAgZml4dHVyZURhdGEuc3RhdHVzID09IFwiXCIgJiYgZml4dHVyZURhdGEudGFza1N0YXR1cyA9PSBcInN1Ym1pdFwiXHJcbiAgICAgICAgICAgID8gXCIjYTVhNmE4XCJcclxuICAgICAgICAgICAgOiBmaXh0dXJlRGF0YS5zdGF0dXMgPT0gXCJhZ3JlZVwiXHJcbiAgICAgICAgICAgID8gXCIjNkNFOUE2XCJcclxuICAgICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICBmaWxsOlxyXG4gICAgICAgICAgZml4dHVyZURhdGEuc3RhdHVzID09IFwiXCIgJiYgZml4dHVyZURhdGEudGFza1N0YXR1cyA9PSBcInN1Ym1pdFwiXHJcbiAgICAgICAgICAgID8gXCIjZjNmNGY4XCJcclxuICAgICAgICAgICAgOiBmaXh0dXJlRGF0YS5zdGF0dXMgPT0gXCJhZ3JlZVwiXHJcbiAgICAgICAgICAgID8gXCIjNkNFOUE2XCJcclxuICAgICAgICAgICAgOiBcIiNFQUY4RkZcIixcclxuICAgICAgICB2bUZpbGw6XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5zdGF0dXMgPT0gXCJcIiAmJiBmaXh0dXJlRGF0YS50YXNrU3RhdHVzID09IFwic3VibWl0XCJcclxuICAgICAgICAgICAgPyBcIiNhNWE2YThcIlxyXG4gICAgICAgICAgICA6IFwiIzY5MzhFRlwiLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGZpeHR1cmVEYXRhLmZpeHR1cmVOYW1lID09PSBcInNwYWNlXCIpIHJldHVybjtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDU7XHJcbiAgICBjb25zdCBtYWluQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRvcFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IHRvcFggPSB4ICsgKHdpZHRoIC0gdG9wV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IHRvcFkgPSB5ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICBjb25zdCB0b3BDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiB0b3BYLFxyXG4gICAgICB0b3A6IHRvcFksXHJcbiAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgaGVpZ2h0OiB0b3BIZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgaW5uZXJCb3hIZWlnaHQgPSB0b3BIZWlnaHQgLyAyO1xyXG4gICAgY29uc3QgaW5uZXJUb3BCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzfSAke3RvcFl9IFxyXG4gICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgIEwgJHt0b3BYfSAke3RvcFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgUSAke3RvcFh9ICR7dG9wWX0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHRvcFRleHQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgIGBGaXh0dXJlICR7XHJcbiAgICAgICAgZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyXHJcbiAgICAgICAgICA/IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciArXHJcbiAgICAgICAgICAgIChmaXh0dXJlRGF0YT8uZml4dHVyZU51bWJlclxyXG4gICAgICAgICAgICAgID8gXCIgLSBGWC1cIiArIGZpeHR1cmVEYXRhLmZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgICAgICA6IFwiXCIpXHJcbiAgICAgICAgICA6IFwibmV3XCJcclxuICAgICAgfWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogdG9wWSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogaW5uZXJCb3hIZWlnaHQsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHNlY29uZEJveFkgPSB0b3BZICsgaW5uZXJCb3hIZWlnaHQ7XHJcblxyXG4gICAgY29uc3QgaW5uZXJCb3R0b21Cb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBcclxuICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHtcclxuICAgICAgICB0b3BYICsgdG9wV2lkdGggLSByYWRpdXNcclxuICAgICAgfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICBMICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgUSAke3RvcFh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke3RvcFh9ICR7XHJcbiAgICAgICAgc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgIH0gXHJcbiAgICBMICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IFwiIzM0NDA1NFwiLFxyXG4gICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGxldCBmb250U2l6ZSA9IDU7XHJcbiAgICBsZXQgYm90dG9tVGV4dDtcclxuXHJcbiAgICBjb25zdCB0ZXh0Q29udGVudCA9IGAke2ZpeHR1cmVEYXRhPy5maXh0dXJlTmFtZX0gLSAke2ZpeHR1cmVEYXRhPy5maXh0dXJlV2lkdGgudmFsdWV9ICR7Zml4dHVyZURhdGE/LmZpeHR1cmVXaWR0aC51bml0fWA7XHJcblxyXG4gICAgY29uc3QgY3JlYXRlQm90dG9tVGV4dCA9IChmczogYW55KSA9PlxyXG4gICAgICBuZXcgZmFicmljLlRleHRib3godGV4dENvbnRlbnQsIHtcclxuICAgICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgZmlsbDogXCIjRkZGRkZGXCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGRvIHtcclxuICAgICAgYm90dG9tVGV4dCA9IGNyZWF0ZUJvdHRvbVRleHQoZm9udFNpemUpO1xyXG4gICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICB9IHdoaWxlIChib3R0b21UZXh0LmhlaWdodCA+IGlubmVyQm94SGVpZ2h0ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgY29uc3QgbWlkV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCBtaWRIZWlnaHQgPSAoNzcgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgbWlkWCA9IHggKyAod2lkdGggLSBtaWRXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgbWlkWSA9IHRvcFkgKyB0b3BIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgIGNvbnN0IG1pZENvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgIHRvcDogbWlkWSxcclxuICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IG1pZEhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzaGVsZkNvdW50ID0gZml4dHVyZURhdGEuc2hlbGZDb25maWc/Lmxlbmd0aDtcclxuICAgIGNvbnN0IGJveEhlaWdodCA9IG1pZEhlaWdodCAvIChzaGVsZkNvdW50ICsgMik7XHJcbiAgICBjb25zdCBmaXJzdEJveFkgPSBtaWRZO1xyXG5cclxuICAgIGNvbnN0IGZpcnN0Qm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBgTSAke21pZFggKyByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRoIC0gcmFkaXVzfSAke2ZpcnN0Qm94WX0gXHJcbiAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIG1pZFdpZHRofSAke1xyXG4gICAgICAgIGZpcnN0Qm94WSArIHJhZGl1c1xyXG4gICAgICB9IFxyXG4gICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICBMICR7bWlkWH0gJHtmaXJzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIHJhZGl1c30gXHJcbiAgICAgICAgUSAke21pZFh9ICR7Zmlyc3RCb3hZfSAke21pZFggKyByYWRpdXN9ICR7Zmlyc3RCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LmZpbGxcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgIDogXCIjRUFGOEZGXCIsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICA6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGZpcnN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYCR7Zml4dHVyZURhdGE/LmhlYWRlcj8ubGFiZWwgPyBmaXh0dXJlRGF0YS5oZWFkZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogZmlyc3RCb3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNyxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICBmaWxsOiBmaXh0dXJlRGF0YS5pc3N1ZSA/IFwiI2ZmZlwiIDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc2hlbHZlcyA9IFtdO1xyXG4gICAgY29uc3Qgc2hlbGZIZWlnaHQgPSBtaWRIZWlnaHQgLSAyICogYm94SGVpZ2h0O1xyXG5cclxuICAgIGlmIChmaXh0dXJlRGF0YS5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwxXCIpIHtcclxuICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodDtcclxuXHJcbiAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBzaGVsZkhlaWdodCxcclxuICAgICAgICAvLyBzdHJva2U6ICcjNTFDMUZGJyxcclxuICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHRleHQgPSBmaXh0dXJlRGF0YT8ucHJvZHVjdEJyYW5kTmFtZT8uam9pbihcIiArIFwiKSB8fCBcIlwiO1xyXG5cclxuICAgICAgLy8gV3JhcCB0ZXh0IHdpdGhpbiBmaXh0dXJlIHdpZHRoIGFuZCBzaHJpbmsgdG8gZml0IHZlcnRpY2FsIHNwYWNlXHJcbiAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IG1pZFdpZHRoICogMC45O1xyXG4gICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gc2hlbGZIZWlnaHQgKiAwLjg7XHJcbiAgICAgIGxldCBmb250U2l6ZUwxID0gNjtcclxuXHJcbiAgICAgIGNvbnN0IGNyZWF0ZVdyYXBwZWRUZXh0Ym94ID0gKGZzOiBudW1iZXIpID0+XHJcbiAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBzaGVsZkhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgbGV0IHdyYXBwZWRUZXh0ID0gY3JlYXRlV3JhcHBlZFRleHRib3goZm9udFNpemVMMSk7XHJcbiAgICAgIHdoaWxlICh3cmFwcGVkVGV4dC5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0ICYmIGZvbnRTaXplTDEgPiAyKSB7XHJcbiAgICAgICAgZm9udFNpemVMMSAtPSAwLjU7XHJcbiAgICAgICAgd3JhcHBlZFRleHQgPSBjcmVhdGVXcmFwcGVkVGV4dGJveChmb250U2l6ZUwxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBib3hZICsgc2hlbGZIZWlnaHQgLyAyLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogTWF0aC5taW4obWF4VGV4dFdpZHRoLCB3cmFwcGVkVGV4dC53aWR0aCEpICsgcGFkZGluZyxcclxuICAgICAgICBoZWlnaHQ6IHdyYXBwZWRUZXh0LmdldFNjYWxlZEhlaWdodCgpICsgMixcclxuICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIHJ4OiAxLFxyXG4gICAgICAgIHJ5OiAxLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHNoZWx2ZXMucHVzaChzaGVsZiwgYmFja2dyb3VuZCwgd3JhcHBlZFRleHQpO1xyXG4gICAgfSBlbHNlIGlmIChmaXh0dXJlRGF0YS5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwyXCIpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGVsZkNvdW50OyBpKyspIHtcclxuICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGkgKyAxKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2hlbGYgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuXHJcbiAgICAgICAgaWYgKGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5baV0uc2hlbGZUeXBlID09PSBcInRyYXlcIikge1xyXG4gICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8uW2ldLnRyYXlSb3dzIHx8IDE7XHJcbiAgICAgICAgICBjb25zdCByb3dTcGFjaW5nID0gYm94SGVpZ2h0IC8gdHJheVJvd3M7XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgciA9IDE7IHIgPCB0cmF5Um93czsgcisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdHJheUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgW21pZFgsIGxpbmVZLCBtaWRYICsgbWlkV2lkdGgsIGxpbmVZXSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHRyYXlMaW5lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRleHQgPVxyXG4gICAgICAgICAgZml4dHVyZURhdGEuc2hlbGZDb25maWc/LltpXS5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiICsgXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgICAgIC8vIEwyOiBTaW5nbGUtbGluZSBlbGxpcHNpcyBhZ2FpbnN0IGZ1bGwgc2hlbGYgd2lkdGhcclxuICAgICAgICBjb25zdCBob3Jpem9udGFsUGFkZGluZyA9IDY7XHJcbiAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gTWF0aC5tYXgoMCwgbWlkV2lkdGggLSBob3Jpem9udGFsUGFkZGluZyk7XHJcbiAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IGJveEhlaWdodCAqIDAuODtcclxuICAgICAgICBjb25zdCBiYXNlRm9udFNpemUgPSA1O1xyXG5cclxuICAgICAgICBjb25zdCBtZWFzdXJlID0gKHQ6IHN0cmluZykgPT5cclxuICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dCh0LCB7XHJcbiAgICAgICAgICAgIGZvbnRTaXplOiBiYXNlRm9udFNpemUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgZGlzcGxheVRleHQgPSB0ZXh0O1xyXG4gICAgICAgIGxldCBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG5cclxuICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICBjb25zdCBlbGxpcHNpcyA9IFwiLi4uXCI7XHJcbiAgICAgICAgICBsZXQgbGVmdElkeCA9IDA7XHJcbiAgICAgICAgICBsZXQgcmlnaHRJZHggPSB0ZXh0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICB3aGlsZSAobGVmdElkeCA8IHJpZ2h0SWR4KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pZElkeCA9IE1hdGguZmxvb3IoKGxlZnRJZHggKyByaWdodElkeCkgLyAyKTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdGV4dC5zbGljZSgwLCBtaWRJZHgpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICAgIG1lYXN1cmVkID0gbWVhc3VyZShjYW5kaWRhdGUpO1xyXG4gICAgICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgcmlnaHRJZHggPSBtaWRJZHg7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGVmdElkeCA9IG1pZElkeCArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRpc3BsYXlUZXh0ID0gdGV4dC5zbGljZSgwLCBNYXRoLm1heCgwLCBsZWZ0SWR4IC0gMSkpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbihtYXhUZXh0SGVpZ2h0LCBtZWFzdXJlZC5oZWlnaHQgPz8gMTApICsgMixcclxuICAgICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgcng6IDEsXHJcbiAgICAgICAgICByeTogMSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgZmluYWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0KGRpc3BsYXlUZXh0LCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChiYWNrZ3JvdW5kLCBmaW5hbFRleHQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGZpeHR1cmVEYXRhLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDNcIikge1xyXG4gICAgICBjb25zdCBzZXF1ZW50aWFsR3JvdXBzOiB7IHpvbmU6IHN0cmluZzsgc2hlbHZlczogYW55W10gfVtdID0gW107XHJcblxyXG4gICAgICBsZXQgcHJldmlvdXNab25lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgIGZvciAoY29uc3Qgc2hlbGYgb2YgZml4dHVyZURhdGEuc2hlbGZDb25maWcpIHtcclxuICAgICAgICBjb25zdCB6b25lID0gc2hlbGYuem9uZSB8fCBcIlVua25vd25cIjtcclxuICAgICAgICBpZiAoem9uZSAhPT0gcHJldmlvdXNab25lKSB7XHJcbiAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzLnB1c2goeyB6b25lLCBzaGVsdmVzOiBbc2hlbGZdIH0pO1xyXG4gICAgICAgICAgcHJldmlvdXNab25lID0gem9uZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2VxdWVudGlhbEdyb3Vwc1tzZXF1ZW50aWFsR3JvdXBzLmxlbmd0aCAtIDFdLnNoZWx2ZXMucHVzaChzaGVsZik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY3VycmVudFNoZWxmSW5kZXggPSAwO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBncm91cCBvZiBzZXF1ZW50aWFsR3JvdXBzKSB7XHJcbiAgICAgICAgY29uc3QgeyB6b25lLCBzaGVsdmVzOiBzaGVsdmVzSW5Hcm91cCB9ID0gZ3JvdXA7XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwU3RhcnRJbmRleCA9IGN1cnJlbnRTaGVsZkluZGV4O1xyXG4gICAgICAgIGNvbnN0IGdyb3VwTGVuZ3RoID0gc2hlbHZlc0luR3JvdXAubGVuZ3RoO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cFRvcFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoZ3JvdXBTdGFydEluZGV4ICsgMSk7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21ZID0gZ3JvdXBUb3BZICsgYm94SGVpZ2h0ICogZ3JvdXBMZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2hlbHZlc0luR3JvdXAubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IHNoZWxmRGF0YSA9IHNoZWx2ZXNJbkdyb3VwW2pdO1xyXG4gICAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChjdXJyZW50U2hlbGZJbmRleCArIDEpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHNoZWxmUmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZlJlY3QpO1xyXG5cclxuICAgICAgICAgIGlmIChzaGVsZkRhdGEuc2hlbGZUeXBlID09PSBcInRyYXlcIikge1xyXG4gICAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IHNoZWxmRGF0YS50cmF5Um93cyB8fCAwO1xyXG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0UGVyU2hlbGYgPSBzaGVsZkRhdGEucHJvZHVjdFBlclNoZWxmIHx8IDA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByb3dTcGFjaW5nID0gYm94SGVpZ2h0IC8gdHJheVJvd3M7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtblNwYWNpbmcgPSBtaWRXaWR0aCAvIHByb2R1Y3RQZXJTaGVsZjtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHIgPSAxOyByIDwgdHJheVJvd3M7IHIrKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgIFttaWRYLCBsaW5lWSwgbWlkWCArIG1pZFdpZHRoLCBsaW5lWV0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMTsgYyA8IHByb2R1Y3RQZXJTaGVsZjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGluZVggPSBtaWRYICsgYyAqIGNvbHVtblNwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgIFtsaW5lWCwgYm94WSwgbGluZVgsIGJveFkgKyBib3hIZWlnaHRdLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZlcnRpY2FsTGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjdXJyZW50U2hlbGZJbmRleCsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21MaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgW21pZFgsIGdyb3VwQm90dG9tWSwgbWlkWCArIG1pZFdpZHRoLCBncm91cEJvdHRvbVldLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgICA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChncm91cEJvdHRvbUxpbmUpO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZURhdGEuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KHpvbmUsIHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC0gbGFiZWxQYWRkaW5nLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQm90dG9tWSxcclxuICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgZmlsbDogXCIjNzA3MDcwXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwicmlnaHRcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2gobGFiZWxUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWCA9IG1pZFggKyBtaWRXaWR0aCAvIDI7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJZID0gZ3JvdXBUb3BZICsgKGdyb3VwQm90dG9tWSAtIGdyb3VwVG9wWSkgLyAyO1xyXG5cclxuICAgICAgICBjb25zdCBzZWN0aW9uQnJhbmRzID0gbmV3IFNldCgpO1xyXG5cclxuICAgICAgICBzaGVsdmVzSW5Hcm91cD8uZm9yRWFjaCgoc2hlbGYpID0+IHtcclxuICAgICAgICAgIHNoZWxmLnByb2R1Y3RCcmFuZE5hbWU/LmZvckVhY2goKGJyYW5kOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgc2VjdGlvbkJyYW5kcy5hZGQoYnJhbmQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChbLi4uc2VjdGlvbkJyYW5kc10ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gWy4uLnNlY3Rpb25CcmFuZHNdLmpvaW4oXCIgKyBcIik7XHJcbiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgY29uc3QgcmVjdFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gMjA7XHJcblxyXG4gICAgICAgICAgbGV0IGZvbnRTaXplID0gNjtcclxuICAgICAgICAgIGxldCB3cmFwcGVkVGV4dDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVUZXh0Ym94ID0gKGZzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjQwMFwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBsZWZ0OiBncm91cENlbnRlclgsXHJcbiAgICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlVGV4dGJveChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgIH0gd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICBjb25zdCByZWN0SGVpZ2h0ID0gd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyBwYWRkaW5nO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyVGV4dCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiByZWN0V2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByeDogMSxcclxuICAgICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goZ3JvdXBDZW50ZXJUZXh0LCB3cmFwcGVkVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhPy52bUNvbmZpZz8ubGVuZ3RoKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZURhdGEudm1Db25maWcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB2bSA9IGZpeHR1cmVEYXRhLnZtQ29uZmlnW2ldO1xyXG5cclxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdm0uc3RhcnRZUG9zaXRpb24gLSAxO1xyXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdm0uZW5kWVBvc2l0aW9uIC0gMTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2hlbGZUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICBjb25zdCBzaGVsZkhlaWdodFNwYW4gPSBib3hIZWlnaHQgKiAoZW5kSW5kZXggLSBzdGFydEluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgIGxldCB2bUhlaWdodFB4OiBudW1iZXIgPSBzaGVsZkhlaWdodFNwYW47XHJcbiAgICAgICAgbGV0IHk6IG51bWJlciA9IHNoZWxmVG9wWTtcclxuXHJcbiAgICAgICAgaWYgKHZtLnlab25lICYmIHZtLnlab25lICE9PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgdm1IZWlnaHRQeCA9IHNoZWxmSGVpZ2h0U3BhbiAvIDM7XHJcblxyXG4gICAgICAgICAgc3dpdGNoICh2bS55Wm9uZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwidG9wXCI6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFkgKyB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWSArIDIgKiB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgeCA9IG1pZFg7XHJcbiAgICAgICAgbGV0IHdpZHRoID0gbWlkV2lkdGg7XHJcblxyXG4gICAgICAgIGlmICghdm0ueFpvbmUgfHwgdm0ueFpvbmUgPT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICB3aWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHNlY3Rpb25XaWR0aCA9IG1pZFdpZHRoIC8gMztcclxuICAgICAgICAgIHN3aXRjaCAodm0ueFpvbmUpIHtcclxuICAgICAgICAgICAgY2FzZSBcImxlZnRcIjpcclxuICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYICsgc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicmlnaHRcIjpcclxuICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWCArIDIgKiBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2bS52bUltYWdlVXJsKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB2bUltYWdlOiBhbnkgPSBhd2FpdCBmYWJyaWMuRmFicmljSW1hZ2UuZnJvbVVSTChcclxuICAgICAgICAgICAgICBgJHt0aGlzLmNkblVybH0ke3ZtLnZtSW1hZ2VVcmx9P3Y9JHtEYXRlLm5vdygpfWAsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IFwiYW5vbnltb3VzXCIsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdm1JbWFnZS5zZXQoe1xyXG4gICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiB5ICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIHNjYWxlWDogd2lkdGggLyB2bUltYWdlLndpZHRoISxcclxuICAgICAgICAgICAgICBzY2FsZVk6IHZtSGVpZ2h0UHggLyB2bUltYWdlLmhlaWdodCEsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZtSW1hZ2UpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGxvYWRpbmcgaW1hZ2UgZm9yIFZNOiAke3ZtLnZtSW1hZ2VVcmx9YCwgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgdm1Cb3ggPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHZtSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgIGZpbGw6IGZpeHR1cmVDb2xvcj8udm1GaWxsID8/IFwiIzY5MzhFRlwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBsZXQgZm9udFNpemUgPSA1O1xyXG4gICAgICAgICAgbGV0IHZtVGV4dDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVWbVRleHQgPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHZtLnZtTmFtZSB8fCBcIlwiLCB7XHJcbiAgICAgICAgICAgICAgbGVmdDogeCArIHdpZHRoIC8gMixcclxuICAgICAgICAgICAgICB0b3A6IHkgKyB2bUhlaWdodFB4IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHZtVGV4dCA9IGNyZWF0ZVZtVGV4dChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgIH0gd2hpbGUgKHZtVGV4dC5oZWlnaHQgPiB2bUhlaWdodFB4ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKHZtQm94LCB2bVRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxhc3RCb3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHNoZWxmQ291bnQgKyAxKTtcclxuICAgIGNvbnN0IGxhc3RCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHtcclxuICAgICAgICBtaWRYICsgbWlkV2lkdGggLSByYWRpdXNcclxuICAgICAgfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICBMICR7bWlkWCArIHJhZGl1c30gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgUSAke21pZFh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9ICR7bWlkWH0gJHtcclxuICAgICAgICBsYXN0Qm94WSArIGJveEhlaWdodCAtIHJhZGl1c1xyXG4gICAgICB9IFxyXG4gICAgICAgIEwgJHttaWRYfSAke2xhc3RCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LmZpbGxcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgID8gXCIjRkVFNEUyXCJcclxuICAgICAgICAgIDogXCIjRUFGOEZGXCIsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICA6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGxhc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgJHtmaXh0dXJlRGF0YT8uZm9vdGVyPy5sYWJlbCA/IGZpeHR1cmVEYXRhLmZvb3Rlci5sYWJlbCA6IFwiXCJ9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBsYXN0Qm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgaGVpZ3RoOiBib3hIZWlnaHQsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYm90dG9tV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCBib3R0b21IZWlnaHQgPSAoMyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBib3R0b21YID0geCArICh3aWR0aCAtIGJvdHRvbVdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBib3R0b21ZID0gbWlkWSArIG1pZEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgY29uc3QgYm90dG9tQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogYm90dG9tWCxcclxuICAgICAgdG9wOiBib3R0b21ZLFxyXG4gICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYm90dG9tVGV4dENvbnRlbnQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgIGBTaGVsdmVzIC0gJHtmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8ubGVuZ3RofSAuIFByb2R1Y3RzIC0gICR7Zml4dHVyZURhdGEuZml4dHVyZUNhcGFjaXR5fSAuIFZNIC0gJHtmaXh0dXJlRGF0YS52bUNvbmZpZz8ubGVuZ3RofWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBib3R0b21YICsgYm90dG9tV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogYm90dG9tWSArIGJvdHRvbUhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBib3R0b21IZWlnaHQsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc3ZnU3RyaW5nID0gYFxyXG4gICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgPHJlY3Qgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgcng9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgPHBhdGggZD1cIk0xNC45OTk4IDYuNjAwMDFDMTUuMTU3NCA2LjQ0MjQzIDE1LjM0NDUgNi4zMTc0MiAxNS41NTA0IDYuMjMyMTRDMTUuNzU2MyA2LjE0Njg1IDE1Ljk3NyA2LjEwMjk2IDE2LjE5OTggNi4xMDI5NkMxNi40MjI3IDYuMTAyOTYgMTYuNjQzNCA2LjE0Njg1IDE2Ljg0OTIgNi4yMzIxNEMxNy4wNTUxIDYuMzE3NDIgMTcuMjQyMiA2LjQ0MjQzIDE3LjM5OTggNi42MDAwMUMxNy41NTc0IDYuNzU3NiAxNy42ODI0IDYuOTQ0NjggMTcuNzY3NyA3LjE1MDU4QzE3Ljg1MyA3LjM1NjQ4IDE3Ljg5NjkgNy41NzcxNSAxNy44OTY5IDcuODAwMDFDMTcuODk2OSA4LjAyMjg4IDE3Ljg1MyA4LjI0MzU1IDE3Ljc2NzcgOC40NDk0NUMxNy42ODI0IDguNjU1MzUgMTcuNTU3NCA4Ljg0MjQzIDE3LjM5OTggOS4wMDAwMUw5LjI5OTgyIDE3LjFMNS45OTk4MiAxOEw2Ljg5OTgyIDE0LjdMMTQuOTk5OCA2LjYwMDAxWlwiIHN0cm9rZT1cIiMxRDI5MzlcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgIDwvc3ZnPmA7XHJcblxyXG4gICAgbGV0IGxvYWRlZFNWRzogYW55ID0gYXdhaXQgZmFicmljLmxvYWRTVkdGcm9tU3RyaW5nKHN2Z1N0cmluZyk7XHJcblxyXG4gICAgbGV0IGVkaXRTdmcgPSBmYWJyaWMudXRpbC5ncm91cFNWR0VsZW1lbnRzKFxyXG4gICAgICBsb2FkZWRTVkcub2JqZWN0cyxcclxuICAgICAgbG9hZGVkU1ZHLm9wdGlvbnNcclxuICAgICk7XHJcblxyXG4gICAgZWRpdFN2Zy5zZXQoe1xyXG4gICAgICBzY2FsZVg6IDEsXHJcbiAgICAgIHNjYWxlWTogMSxcclxuICAgICAgbGVmdDogeCArIHdpZHRoIC0gMzAsXHJcbiAgICAgIHRvcDogeSArIDE0LFxyXG4gICAgICB2aXNpYmxlOiBmYWxzZSxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsIC8vIGFsbG93IGV2ZW50c1xyXG4gICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBlZGl0U3ZnLm9uKFwibW91c2Vkb3duXCIsIChvcHQpID0+IHtcclxuICAgICAgaWYgKG9wdCAmJiBvcHQuZSAmJiBvcHQuZS5zdG9wUHJvcGFnYXRpb24pIHtcclxuICAgICAgICBvcHQuZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IHtcclxuICAgICAgICBmaXh0dXJlVHlwZTogZml4dHVyZURhdGEuZml4dHVyZVR5cGUsXHJcbiAgICAgICAgd2FsbEluZGV4OiBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudE51bWJlcixcclxuICAgICAgICBmaXh0dXJlSW5kZXg6IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcixcclxuICAgICAgICBmaXh0dXJlSWQ6IGZpeHR1cmVEYXRhLl9pZCxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICBjb25zdCB3YWxsID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAgICAgKHdhbGw6IGFueSkgPT4gd2FsbC5lbGVtZW50TnVtYmVyID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZS53YWxsSW5kZXhcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSB3YWxsLmZpeHR1cmVzLmZpbmQoXHJcbiAgICAgICAgICAoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLl9pZCA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZUlkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBmaXh0dXJlO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5maW5kKFxyXG4gICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5faWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gZml4dHVyZTtcclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgdGhpcz8uc2VsZWN0ZWRGaXh0dXJlRGF0YT8udGFza1R5cGU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVEYXRhID0gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhO1xyXG4gICAgICB0aGlzLmVkaXRGaXh0dXJlID0gdHJ1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoXHJcbiAgICAgIFtcclxuICAgICAgICBtYWluQ29udGFpbmVyLFxyXG4gICAgICAgIHRvcENvbnRhaW5lcixcclxuICAgICAgICBpbm5lclRvcEJveCxcclxuICAgICAgICB0b3BUZXh0LFxyXG4gICAgICAgIGlubmVyQm90dG9tQm94LFxyXG4gICAgICAgIGJvdHRvbVRleHQsXHJcbiAgICAgICAgbWlkQ29udGFpbmVyLFxyXG4gICAgICAgIGZpcnN0Qm94LFxyXG4gICAgICAgIGZpcnN0Qm94VGV4dCxcclxuICAgICAgICAuLi5zaGVsdmVzLFxyXG4gICAgICAgIGxhc3RCb3gsXHJcbiAgICAgICAgbGFzdEJveFRleHQsXHJcbiAgICAgICAgYm90dG9tQ29udGFpbmVyLFxyXG4gICAgICAgIGJvdHRvbVRleHRDb250ZW50LFxyXG4gICAgICAgIGVkaXRTdmcsXHJcbiAgICAgIF0sXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgIHRvcDogeSxcclxuICAgICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgICAgICBzZWxlY3RhYmxlOiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCxcclxuICAgICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgICAgbG9ja1NjYWxpbmdZOiB0cnVlLFxyXG4gICAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgICAgIC8vIGhhc0NvbnRyb2xzOiBmaXh0dXJlRGF0YS5maXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiLFxyXG4gICAgICAgIC8vIGxvY2tSb3RhdGlvbjogZml4dHVyZURhdGEuZml4dHVyZVR5cGUgIT09IFwiZmxvb3JcIixcclxuICAgICAgICAvLyBsb2NrTW92ZW1lbnRYOiBjdXJyZW50Rml4dHVyZUluZm8/LndhbGxEaXJlY3Rpb24gPT09ICd1cCcgfHwgY3VycmVudEZpeHR1cmVJbmZvPy53YWxsRGlyZWN0aW9uID09PSAnZG93bicsXHJcbiAgICAgICAgLy8gbG9ja01vdmVtZW50WTogY3VycmVudEZpeHR1cmVJbmZvPy53YWxsRGlyZWN0aW9uID09PSAncmlnaHQnIHx8IGN1cnJlbnRGaXh0dXJlSW5mbz8ud2FsbERpcmVjdGlvbiA9PT0gJ2xlZnQnLFxyXG4gICAgICAgIGFuZ2xlOiBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uPy5hbmdsZSA/PyAwLFxyXG4gICAgICB9XHJcbiAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgd2FsbEluZGV4OiBudW1iZXI7XHJcbiAgICAgIGZpeHR1cmVJbmRleDogbnVtYmVyO1xyXG4gICAgICBmaXh0dXJlSWQ6IHN0cmluZztcclxuICAgICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiO1xyXG4gICAgICBpc3N1ZTogYm9vbGVhbjtcclxuICAgICAgaXNzdWVEYXRhOiBhbnk7XHJcbiAgICAgIHRhc2tUeXBlOiBzdHJpbmc7XHJcbiAgICAgIHZtQ29uZmlnOiBbXTtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICFmaXh0dXJlRGF0YT8uaXNzdWUgJiZcclxuICAgICAgIWZpeHR1cmVEYXRhPy51bnNhdmVkQ2hhbmdlcyAmJlxyXG4gICAgICB0aGlzLmxheW91dEZvcm0uZW5hYmxlZFxyXG4gICAgKSB7XHJcbiAgICAgIGZpeHR1cmVHcm91cC5vbihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZWRpdFN2Zy5zZXQoXCJ2aXNpYmxlXCIsIHRydWUpO1xyXG4gICAgICAgIGNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGZpeHR1cmVHcm91cC5vbihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBlZGl0U3ZnLnNldChcInZpc2libGVcIiwgZmFsc2UpO1xyXG4gICAgICAgIGNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZml4dHVyZUdyb3VwLm9uKFwibW91c2Vkb3duXCIsIChldmVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkge1xyXG4gICAgICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJyaWdodFwiLCBmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhcmdldCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgICAgZml4dHVyZVR5cGU6IHRhcmdldC5maXh0dXJlVHlwZSxcclxuICAgICAgICAgIHdhbGxJbmRleDogdGFyZ2V0LndhbGxJbmRleCxcclxuICAgICAgICAgIGZpeHR1cmVJbmRleDogdGFyZ2V0LmZpeHR1cmVJbmRleCxcclxuICAgICAgICAgIGZpeHR1cmVJZDogdGFyZ2V0LmZpeHR1cmVJZCxcclxuICAgICAgICAgIGlzc3VlOiB0YXJnZXQuaXNzdWUsXHJcbiAgICAgICAgICBpc3N1ZURhdGE6IHRhcmdldC5pc3N1ZURhdGEsXHJcbiAgICAgICAgICB2bUNvbmZpZzogdGFyZ2V0LnZtQ29uZmlnLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGZpeHR1cmVHcm91cC5maXh0dXJlVHlwZSA9IGZpeHR1cmVEYXRhLmZpeHR1cmVUeXBlO1xyXG4gICAgZml4dHVyZUdyb3VwLndhbGxJbmRleCA9IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyO1xyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVJbmRleCA9IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjtcclxuICAgIGZpeHR1cmVHcm91cC5maXh0dXJlSWQgPSBmaXh0dXJlRGF0YS5faWQ7XHJcbiAgICBmaXh0dXJlR3JvdXAuaXNzdWUgPSBmaXh0dXJlRGF0YS5pc3N1ZTtcclxuICAgIGZpeHR1cmVHcm91cC5pc3N1ZURhdGEgPSBmaXh0dXJlRGF0YS5pc3N1ZURhdGE7XHJcbiAgICBmaXh0dXJlR3JvdXAudGFza1R5cGUgPSBmaXh0dXJlRGF0YS50YXNrVHlwZTtcclxuICAgIGZpeHR1cmVHcm91cC52bUNvbmZpZyA9IGZpeHR1cmVEYXRhLnZtQ29uZmlnO1xyXG4gICAgZml4dHVyZUdyb3VwLm9ialR5cGUgPSBcImZpeHR1cmVcIjtcclxuXHJcbiAgICAvLyB0aGlzLmNhbnZhcy5vbihcIm9iamVjdDptb3ZpbmdcIiwgKGUpID0+IHtcclxuICAgIC8vICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgYW55O1xyXG4gICAgLy8gICBpZiAoIXRhcmdldCB8fCB0YXJnZXQub2JqVHlwZSAhPT0gXCJmaXh0dXJlXCIpIHJldHVybjtcclxuXHJcbiAgICAvLyAgIGNvbnN0IGFuZ2xlRGVnID0gdGFyZ2V0LmFuZ2xlIHx8IDA7XHJcbiAgICAvLyAgIGNvbnN0IGFuZ2xlID0gKGFuZ2xlRGVnICogTWF0aC5QSSkgLyAxODA7XHJcbiAgICAvLyAgIGlmICghdGFyZ2V0Ll9sYXN0TGVmdCkge1xyXG4gICAgLy8gICAgIHRhcmdldC5fbGFzdExlZnQgPSB0YXJnZXQubGVmdDtcclxuICAgIC8vICAgICB0YXJnZXQuX2xhc3RUb3AgPSB0YXJnZXQudG9wO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIGNvbnN0IGR4ID0gdGFyZ2V0LmxlZnQgLSB0YXJnZXQuX2xhc3RMZWZ0O1xyXG4gICAgLy8gICBjb25zdCBkeSA9IHRhcmdldC50b3AgLSB0YXJnZXQuX2xhc3RUb3A7XHJcbiAgICAvLyAgIGNvbnN0IHByb2plY3RlZCA9IGR4ICogTWF0aC5jb3MoYW5nbGUpICsgZHkgKiBNYXRoLnNpbihhbmdsZSk7XHJcbiAgICAvLyAgIHRhcmdldC5sZWZ0ID0gdGFyZ2V0Ll9sYXN0TGVmdCArIHByb2plY3RlZCAqIE1hdGguY29zKGFuZ2xlKTtcclxuICAgIC8vICAgdGFyZ2V0LnRvcCA9IHRhcmdldC5fbGFzdFRvcCArIHByb2plY3RlZCAqIE1hdGguc2luKGFuZ2xlKTtcclxuICAgIC8vICAgdGFyZ2V0Ll9sYXN0TGVmdCA9IHRhcmdldC5sZWZ0O1xyXG4gICAgLy8gICB0YXJnZXQuX2xhc3RUb3AgPSB0YXJnZXQudG9wO1xyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgY2FudmFzLmFkZChmaXh0dXJlR3JvdXApO1xyXG5cclxuICAgIC8vIElmIG5ld2x5IGFkZGVkLCBmb2N1cyBpdCBvbmNlXHJcbiAgICBpZiAoKGZpeHR1cmVEYXRhIGFzIGFueSk/Lm5ld0FkZGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHt9XHJcbiAgICAgIGRlbGV0ZSAoZml4dHVyZURhdGEgYXMgYW55KS5uZXdBZGRlZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZml4dHVyZUdyb3VwO1xyXG4gIH1cclxuXHJcbiAgZHJhd0VudHJhbmNlKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgYXJyb3dXaWR0aDogbnVtYmVyLFxyXG4gICAgZWxlbWVudERhdGE6IGFueVxyXG4gICkge1xyXG4gICAgY29uc3QgYm9keVdpZHRoID0gd2lkdGggLSBhcnJvd1dpZHRoO1xyXG5cclxuICAgIGNvbnN0IHBhdGhEYXRhID0gW1xyXG4gICAgICBgTSAwIDBgLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gMGAsXHJcbiAgICAgIGBMICR7Ym9keVdpZHRofSAkey1oZWlnaHQgLyAyfWAsXHJcbiAgICAgIGBMICR7d2lkdGh9ICR7aGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHtoZWlnaHQgKyBoZWlnaHQgLyAyfWAsXHJcbiAgICAgIGBMICR7Ym9keVdpZHRofSAke2hlaWdodH1gLFxyXG4gICAgICBgTCAwICR7aGVpZ2h0fWAsXHJcbiAgICAgIGBaYCxcclxuICAgIF0uam9pbihcIiBcIik7XHJcblxyXG4gICAgY29uc3QgYXJyb3cgPSBuZXcgZmFicmljLlBhdGgocGF0aERhdGEsIHtcclxuICAgICAgZmlsbDogXCIjMDNBOUY0XCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBoZWlnaHQgLSA2O1xyXG4gICAgY29uc3QgdGV4dCA9IG5ldyBmYWJyaWMuVGV4dChcIkVudHJhbmNlXCIsIHtcclxuICAgICAgZm9udEZhbWlseTogXCJBcmlhbFwiLFxyXG4gICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICBhbmdsZTogLTkwLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICBsZWZ0OiAxNSxcclxuICAgICAgdG9wOiBoZWlnaHQgLyAyLFxyXG4gICAgICBmb250U2l6ZTogMjAsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRleHRCb3VuZHMgPSB0ZXh0LmdldEJvdW5kaW5nUmVjdCgpO1xyXG4gICAgaWYgKHRleHRCb3VuZHMuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCkge1xyXG4gICAgICBjb25zdCBzY2FsZSA9IG1heFRleHRIZWlnaHQgLyB0ZXh0Qm91bmRzLmhlaWdodDtcclxuICAgICAgdGV4dC5zZXQoXCJmb250U2l6ZVwiLCB0ZXh0LmZvbnRTaXplISAqIHNjYWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoW2Fycm93LCB0ZXh0XSwge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIHNlbGVjdGFibGU6IHRoaXMubGF5b3V0Rm9ybS5lbmFibGVkLFxyXG4gICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nWTogdHJ1ZSxcclxuICAgICAgbG9ja1NjYWxpbmdGbGlwOiB0cnVlLFxyXG4gICAgICBhbmdsZTogZWxlbWVudERhdGEuYW5nbGUsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gZWxlbWVudERhdGEuZWxlbWVudFR5cGU7XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudERhdGE7XHJcblxyXG4gICAgY2FudmFzLmFkZChncm91cCk7XHJcbiAgfVxyXG5cclxuICBkcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGE6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIGVsZW1lbnQ6IGFueVxyXG4gICk6IGZhYnJpYy5Hcm91cCB7XHJcbiAgICBjb25zdCByZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgd2lkdGgsXHJcbiAgICAgIGhlaWdodCxcclxuICAgICAgcng6IDIsXHJcbiAgICAgIHJ5OiAyLFxyXG4gICAgICBmaWxsOiBcIiNEQUYxRkZcIixcclxuICAgICAgc3Ryb2tlOiBcIiM2QkNBRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KGVsZW1lbnQuZml4dHVyZU5hbWUsIHtcclxuICAgICAgd2lkdGg6IHdpZHRoIC0gOCxcclxuICAgICAgZm9udFNpemU6IDE0LFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgIGVkaXRhYmxlOiBmYWxzZSxcclxuICAgICAgc3BsaXRCeUdyYXBoZW1lOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdGV4dEJvdW5kcyA9IHRleHQuZ2V0Qm91bmRpbmdSZWN0KCk7XHJcblxyXG4gICAgaWYgKHRleHRCb3VuZHMuaGVpZ2h0ID4gaGVpZ2h0IC0gOCkge1xyXG4gICAgICBjb25zdCBzY2FsZSA9IChoZWlnaHQgLSA4KSAvIHRleHRCb3VuZHMuaGVpZ2h0O1xyXG4gICAgICB0ZXh0LnNldChcImZvbnRTaXplXCIsIHRleHQuZm9udFNpemUhICogc2NhbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbcmVjdCwgdGV4dF0sIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBhbmdsZTogYSxcclxuICAgICAgc2VsZWN0YWJsZTogdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gXCJvdGhlcnNcIjtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50O1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG5cclxuICAgIGlmICgoZWxlbWVudCBhcyBhbnkpPy5uZXdBZGRlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChncm91cCk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHt9XHJcbiAgICAgIGRlbGV0ZSAoZWxlbWVudCBhcyBhbnkpLm5ld0FkZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIGRyYXdCZygpIHtcclxuICAgIGNvbnN0IHdhbGwxID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAoZTogYW55KSA9PiBlLmVsZW1lbnROdW1iZXIgPT09IDEgJiYgZS5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCJcclxuICAgICk7XHJcbiAgICBjb25zdCB3YWxsMiA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKGU6IGFueSkgPT4gZS5lbGVtZW50TnVtYmVyID09PSAyICYmIGUuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiXHJcbiAgICApO1xyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKHdhbGwxLmRpc3RhbmNlLCB3YWxsMS51bml0KTtcclxuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMudG9QaXhlbHMod2FsbDIuZGlzdGFuY2UsIHdhbGwyLnVuaXQpO1xyXG5cclxuICAgIGNvbnN0IGJnID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogdGhpcy53YWxsVGhpY2tuZXNzLFxyXG4gICAgICB0b3A6IHRoaXMud2FsbFRoaWNrbmVzcyxcclxuICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgZmlsbDogXCIjZWFlY2YwXCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLmFkZChiZyk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZW1vdmUoYmcpO1xyXG4gICAgdGhpcy5jYW52YXMuaW5zZXJ0QXQoMCwgYmcpO1xyXG4gICAgdGhpcy5jYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBzdWJzY3JpYmVUb0ZpeHR1cmVDb25maWdJZENoYW5nZXMoKSB7XHJcbiAgICB0aGlzLmZpeHR1cmVDb25maWdTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy5maXh0dXJlQ29uZmlnU3Vic2NyaXB0aW9ucyA9IFtdO1xyXG5cclxuICAgIHRoaXMuZ2V0Rm9ybVdhbGxzLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wsIGkpID0+IHtcclxuICAgICAgY29uc3Qgd2FsbEdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgIGNvbnN0IGZpeHR1cmVzQXJyYXkgPSB3YWxsR3JvdXAuZ2V0KFwiZml4dHVyZXNcIikgYXMgRm9ybUFycmF5O1xyXG5cclxuICAgICAgZml4dHVyZXNBcnJheS5jb250cm9scy5mb3JFYWNoKChmaXh0dXJlQ29udHJvbCwgaikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IGZpeHR1cmVDb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBjb25zdCBzdWIgPSBmaXh0dXJlR3JvdXBcclxuICAgICAgICAgIC5nZXQoXCJmaXh0dXJlQ29uZmlnSWRcIilcclxuICAgICAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgobmV3VmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VGaXh0dXJlVGVtcGxhdGUobmV3VmFsdWUsIFwid2FsbFwiLCBqLCBpKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoc3ViKSB0aGlzLmZpeHR1cmVDb25maWdTdWJzY3JpcHRpb25zLnB1c2goc3ViKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzLmNvbnRyb2xzLmZvckVhY2goKGZpeHR1cmVDb250cm9sLCBrKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IGZpeHR1cmVDb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgY29uc3Qgc3ViID0gZml4dHVyZUdyb3VwXHJcbiAgICAgICAgLmdldChcImZpeHR1cmVDb25maWdJZFwiKVxyXG4gICAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKG5ld1ZhbHVlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZUZpeHR1cmVUZW1wbGF0ZShuZXdWYWx1ZSwgXCJmbG9vclwiLCBrKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChzdWIpIHRoaXMuZml4dHVyZUNvbmZpZ1N1YnNjcmlwdGlvbnMucHVzaChzdWIpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdWJzY3JpYmVUb090aGVyRWxlbWVudHNDaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5vdGhlckVsZW1lbnRzU3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yj8udW5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLm90aGVyRWxlbWVudHNTdWJzY3JpcHRpb25zID0gW107XHJcblxyXG4gICAgLy8gV2FsbC1sZXZlbCBvdGhlckVsZW1lbnRzIGxhYmVsIHN1YnNjcmlwdGlvbnNcclxuICAgIHRoaXMuZ2V0Rm9ybVdhbGxzLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IHtcclxuICAgICAgY29uc3Qgd2FsbEdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgIGNvbnN0IG90aGVyQXJyYXkgPSB3YWxsR3JvdXAuZ2V0KFwib3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXk7XHJcblxyXG4gICAgICBvdGhlckFycmF5LmNvbnRyb2xzLmZvckVhY2goKGN0cmwsIG90aGVySWR4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudEdyb3VwID0gY3RybCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgY29uc3QgdHlwZUNvbnRyb2wgPSBlbGVtZW50R3JvdXAuZ2V0KFwidHlwZVwiKSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgICBjb25zdCBjdXN0b21OYW1lQ29udHJvbCA9IGVsZW1lbnRHcm91cC5nZXQoXCJjdXN0b21OYW1lXCIpIGFzIEZvcm1Db250cm9sO1xyXG5cclxuICAgICAgICBjb25zdCB3YWxsTWV0YSA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgICAgIChlbDogYW55KSA9PlxyXG4gICAgICAgICAgICBlbC5lbGVtZW50VHlwZSA9PT0gd2FsbEdyb3VwLmdldChcImVsZW1lbnRUeXBlXCIpPy52YWx1ZSAmJlxyXG4gICAgICAgICAgICBlbC5lbGVtZW50TnVtYmVyID09PSB3YWxsR3JvdXAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWYgPSB3YWxsTWV0YT8ub3RoZXJFbGVtZW50cz8uW290aGVySWR4XTtcclxuICAgICAgICBpZiAoIWVsZW1lbnRSZWYpIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gd2hlbiB0eXBlIGNoYW5nZXMgKGRyb3Bkb3duKVxyXG4gICAgICAgIGNvbnN0IHN1YlR5cGUgPSB0eXBlQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgLy8gaWYgdXNlciBwaWNrcyBcIk90aGVyc1wiLCBwcmVmZXIgY3VzdG9tTmFtZSBpZiBwcmVzZW50LCBvdGhlcndpc2Ugc2V0IGZpeHR1cmVOYW1lIHRvIFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgZWxlbWVudFJlZi5maXh0dXJlTmFtZSA9XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQgPT09IFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgICAgID8gY3VzdG9tTmFtZUNvbnRyb2w/LnZhbHVlIHx8IFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgICAgIDogc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZik7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gd2hlbiBjdXN0b21OYW1lIGNoYW5nZXMgKHRleHQgaW5wdXQgdmlzaWJsZSBvbmx5IHdoZW4gdHlwZSA9PT0gJ090aGVycycpXHJcbiAgICAgICAgY29uc3Qgc3ViQ3VzdG9tID0gY3VzdG9tTmFtZUNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChjdXN0b206IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAodHlwZUNvbnRyb2wudmFsdWUgPT09IFwiT3RoZXJzXCIpIHtcclxuICAgICAgICAgICAgICBlbGVtZW50UmVmLmZpeHR1cmVOYW1lID0gY3VzdG9tO1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm90aGVyRWxlbWVudHNTdWJzY3JpcHRpb25zLnB1c2goc3ViVHlwZSwgc3ViQ3VzdG9tKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBGbG9vci1sZXZlbCBvdGhlckVsZW1lbnRzIGxhYmVsIHN1YnNjcmlwdGlvbnNcclxuICAgIHRoaXMuZ2V0Rm9ybUZsb29yT3RoZXJFbGVtZW50cy5jb250cm9scy5mb3JFYWNoKChjdHJsLCBpZHgpID0+IHtcclxuICAgICAgY29uc3QgZWxlbWVudEdyb3VwID0gY3RybCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgIGNvbnN0IHR5cGVDb250cm9sID0gZWxlbWVudEdyb3VwLmdldChcInR5cGVcIikgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgIGNvbnN0IGN1c3RvbU5hbWVDb250cm9sID0gZWxlbWVudEdyb3VwLmdldChcImN1c3RvbU5hbWVcIikgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnRSZWYgPSB0aGlzLmZsb29yRGF0YT8ub3RoZXJFbGVtZW50cz8uW2lkeF07XHJcbiAgICAgIGlmICghZWxlbWVudFJlZikgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3Qgc3ViVHlwZSA9IHR5cGVDb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBlbGVtZW50UmVmLmZpeHR1cmVOYW1lID1cclxuICAgICAgICAgICAgc2VsZWN0ZWQgPT09IFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgICA/IGN1c3RvbU5hbWVDb250cm9sPy52YWx1ZSB8fCBcIk90aGVyc1wiXHJcbiAgICAgICAgICAgICAgOiBzZWxlY3RlZDtcclxuICAgICAgICAgIHRoaXMudXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBzdWJDdXN0b20gPSBjdXN0b21OYW1lQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoY3VzdG9tOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGlmICh0eXBlQ29udHJvbC52YWx1ZSA9PT0gXCJPdGhlcnNcIikge1xyXG4gICAgICAgICAgICBlbGVtZW50UmVmLmZpeHR1cmVOYW1lID0gY3VzdG9tO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbnZhc090aGVyRWxlbWVudExhYmVsKGVsZW1lbnRSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5vdGhlckVsZW1lbnRzU3Vic2NyaXB0aW9ucy5wdXNoKHN1YlR5cGUsIHN1YkN1c3RvbSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUNhbnZhc090aGVyRWxlbWVudExhYmVsKGVsZW1lbnRSZWY6IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLmNhbnZhcykgcmV0dXJuO1xyXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maW5kKFxyXG4gICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgIG9iaj8ub2JqVHlwZSA9PT0gXCJvdGhlcnNcIiAmJiBvYmo/LmRhdGEuX2lkID09PSBlbGVtZW50UmVmLl9pZFxyXG4gICAgICApIGFzIGFueTtcclxuXHJcbiAgICBpZiAoIWdyb3VwKSByZXR1cm47XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudFJlZjtcclxuXHJcbiAgICBjb25zdCB0ZXh0T2JqID0gKGdyb3VwLmdldE9iamVjdHMoKSB8fCBbXSkuZmluZChcclxuICAgICAgKG86IGFueSkgPT4gbz8udHlwZSA9PT0gXCJ0ZXh0XCIgfHwgbz8udHlwZSA9PT0gXCJ0ZXh0Ym94XCJcclxuICAgICkgYXMgZmFicmljLlRleHQgfCBmYWJyaWMuVGV4dGJveCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAodGV4dE9iaikge1xyXG4gICAgICAodGV4dE9iaiBhcyBhbnkpLnNldCh7IHRleHQ6IGVsZW1lbnRSZWYuZml4dHVyZU5hbWUgfSk7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJvdGF0ZUNhbnZhcyhjYW52YXM6IGZhYnJpYy5DYW52YXMsIGFuZ2xlRGVnOiBudW1iZXIpIHtcclxuICAgIGlmICghY2FudmFzKSByZXR1cm47XHJcbiAgICBjb25zdCBhbGxPYmplY3RzID0gY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIGlmICghYWxsT2JqZWN0cyB8fCBhbGxPYmplY3RzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENyZWF0ZSBhbiBBY3RpdmVTZWxlY3Rpb24gY29udGFpbmluZyBhbGwgb2JqZWN0cyBvbiB0aGUgY2FudmFzXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBuZXcgZmFicmljLkFjdGl2ZVNlbGVjdGlvbihhbGxPYmplY3RzIGFzIGFueSwgeyBjYW52YXMgfSk7XHJcbiAgICBjYW52YXMuc2V0QWN0aXZlT2JqZWN0KHNlbGVjdGlvbik7XHJcblxyXG4gICAgLy8gUm90YXRlIHRoZSBBY3RpdmVTZWxlY3Rpb24gZGlyZWN0bHkgKHdvcmtzIGxpa2UgYSB0ZW1wb3JhcnkgZ3JvdXApXHJcbiAgICBjb25zdCBhY3RpdmU6IGFueSA9IGNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKTtcclxuICAgIGlmICghYWN0aXZlKSB7XHJcbiAgICAgIGNhbnZhcy5kaXNjYXJkQWN0aXZlT2JqZWN0KCk7XHJcbiAgICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50QW5nbGUgPSBhY3RpdmUuYW5nbGUgfHwgMDtcclxuICAgIGFjdGl2ZS5yb3RhdGUoY3VycmVudEFuZ2xlICsgYW5nbGVEZWcpO1xyXG4gICAgYWN0aXZlLnNldENvb3JkcygpO1xyXG5cclxuICAgIC8vIENsZWFyIHNlbGVjdGlvbiBidXQga2VlcCByb3RhdGVkIHBvc2l0aW9ucyBvZiBjaGlsZCBvYmplY3RzXHJcbiAgICBjYW52YXMuZGlzY2FyZEFjdGl2ZU9iamVjdCgpO1xyXG4gICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEZpeHR1cmVUZW1wbGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgIH07XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzOiBhbnkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0QWxsVGVtcGxhdGVzKHBheWxvYWQpXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSByZXM/LmRhdGE7XHJcblxyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlcyA9IGRhdGEubWFwKCh0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIF9pZDogdC5faWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGAke3QuZml4dHVyZU5hbWV9IC0gJHt0LmZpeHR1cmVXaWR0aC52YWx1ZX0gJHt0LmZpeHR1cmVXaWR0aC51bml0fWAsXHJcbiAgICAgICAgICAgIHN1YnRleHQ6IGAke3QucHJvZHVjdEJyYW5kTmFtZT8uam9pbihcIiwgXCIpfWAsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgZml4dHVyZSB0ZW1wbGF0ZXM6XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZUZvcm0oKSB7XHJcbiAgICB0aGlzLmxheW91dEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgd2FsbHM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICBmbG9vckZpeHR1cmVzOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgICAgZmxvb3JPdGhlckVsZW1lbnRzOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldEZvcm1XYWxscygpIHtcclxuICAgIHJldHVybiB0aGlzLmxheW91dEZvcm0uZ2V0KFwid2FsbHNcIikgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldEZvcm1GbG9vckZpeHR1cmVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vckZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRGb3JtRmxvb3JPdGhlckVsZW1lbnRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vck90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldEVudHJhbmNlcygpIHtcclxuICAgIHJldHVybiB0aGlzLmZsb29yRGF0YT8ubGF5b3V0UG9seWdvbj8uZmlsdGVyKFxyXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZS5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0V2FsbE90aGVyRWxlbWVudHMod2FsbEluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiAodGhpcy5sYXlvdXRGb3JtLmdldChcIndhbGxzXCIpIGFzIEZvcm1BcnJheSlcclxuICAgICAgLmF0KHdhbGxJbmRleClcclxuICAgICAgLmdldChcIm90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJ3YWxsc1wiKSBhcyBGb3JtQXJyYXkpXHJcbiAgICAgIC5hdCh3YWxsSW5kZXgpXHJcbiAgICAgIC5nZXQoXCJmaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwYXRjaFdhbGxFbGVtZW50cyh7IGVsZW1lbnRUeXBlLCBlbGVtZW50TnVtYmVyIH06IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgZWxlbWVudFR5cGU6IFtlbGVtZW50VHlwZSA/IGVsZW1lbnRUeXBlIDogXCJcIiwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgZWxlbWVudE51bWJlcjogW2VsZW1lbnROdW1iZXIgPyBlbGVtZW50TnVtYmVyIDogMCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgZml4dHVyZXM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICBvdGhlckVsZW1lbnRzOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGl0ZW07XHJcbiAgfVxyXG5cclxuICBwYXRjaEZpeHR1cmUoeyBmaXh0dXJlTmFtZSwgZml4dHVyZUNvbmZpZ0lkLCBfaWQgfTogUmVjb3JkPHN0cmluZywgYW55Pikge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBmaXh0dXJlTmFtZTogW2ZpeHR1cmVOYW1lID8gZml4dHVyZU5hbWUgOiBcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBmaXh0dXJlQ29uZmlnSWQ6IFtcclxuICAgICAgICBmaXh0dXJlQ29uZmlnSWQgPyBmaXh0dXJlQ29uZmlnSWQgOiBcIlwiLFxyXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgXSxcclxuICAgICAgX2lkOiBbX2lkID8gX2lkIDogXCJcIiwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGl0ZW07XHJcbiAgfVxyXG5cclxuICBhZGRXYWxsU3BhY2Uod2FsbEluZGV4OiBudW1iZXIsIG9wZXJhdGlvbjogXCJpbmNyZW1lbnRcIiB8IFwiZGVjcmVtZW50XCIpIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuICAgIGNvbnN0IGNsaWNrZWRXYWxsTnVtYmVyID0gd2FsbEluZGV4ICsgMTtcclxuICAgIGNvbnN0IG1tVG9GZWV0ID0gMzA1O1xyXG4gICAgY29uc3QgZml4dHVyZUhlaWdodCA9IDE1MjQgLyBtbVRvRmVldDsgLy8gfjUgZnQgKGhvcml6b250YWwgaW5jcmVtZW50KVxyXG4gICAgY29uc3QgZml4dHVyZVdpZHRoID0gMTIyMCAvIG1tVG9GZWV0OyAvLyB+NCBmdCAodmVydGljYWwgaW5jcmVtZW50KVxyXG5cclxuICAgIGNvbnN0IGxheW91dCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb247XHJcblxyXG4gICAgY29uc3QgZ2V0V2FsbCA9IChudW06IG51bWJlcikgPT5cclxuICAgICAgbGF5b3V0LmZpbmQoXHJcbiAgICAgICAgKGVsOiBhbnkpID0+IGVsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBlbC5lbGVtZW50TnVtYmVyID09PSBudW1cclxuICAgICAgKTtcclxuXHJcbiAgICBjb25zdCBhbW91bnQgPSBvcGVyYXRpb24gPT09IFwiaW5jcmVtZW50XCIgPyAxIDogLTE7XHJcblxyXG4gICAgY29uc3QgdzEgPSBnZXRXYWxsKDEpO1xyXG4gICAgY29uc3QgdzIgPSBnZXRXYWxsKDIpO1xyXG4gICAgY29uc3QgdzMgPSBnZXRXYWxsKDMpO1xyXG4gICAgY29uc3QgdzQgPSBnZXRXYWxsKDQpO1xyXG4gICAgY29uc3QgdzUgPSBnZXRXYWxsKDUpO1xyXG4gICAgY29uc3QgZW50cmFuY2UgPSBsYXlvdXQuZmluZCgoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIik7XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gSG9yaXpvbnRhbCBncm93dGggIChXYWxsLTEgLyBXYWxsLTMpXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpZiAoY2xpY2tlZFdhbGxOdW1iZXIgPT09IDEgfHwgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDMpIHtcclxuICAgICAgaWYgKHcxKSB3MS5kaXN0YW5jZSArPSBhbW91bnQgKiBmaXh0dXJlV2lkdGg7XHJcbiAgICAgIGlmICh3MykgdzMuZGlzdGFuY2UgKz0gYW1vdW50ICogZml4dHVyZVdpZHRoO1xyXG5cclxuICAgICAgaWYgKHcyKSB7XHJcbiAgICAgICAgdzIuZml4dHVyZXMuZm9yRWFjaCgoZng6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZngucmVsYXRpdmVQb3NpdGlvbi54ID1cclxuICAgICAgICAgICAgKGZ4LnJlbGF0aXZlUG9zaXRpb24ueCB8fCAwKSArIGFtb3VudCAqIGZpeHR1cmVXaWR0aDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIFZlcnRpY2FsIGdyb3d0aCAgKFdhbGwtMiAvIFdhbGwtNCAvIFdhbGwtNSlcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGlmIChcclxuICAgICAgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDIgfHxcclxuICAgICAgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDQgfHxcclxuICAgICAgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDVcclxuICAgICkge1xyXG4gICAgICBpZiAodzIpIHcyLmRpc3RhbmNlICs9IGFtb3VudCAqIGZpeHR1cmVIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAodzMpIHtcclxuICAgICAgICB3My5maXh0dXJlcy5mb3JFYWNoKChmeDogYW55KSA9PiB7XHJcbiAgICAgICAgICBmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgPVxyXG4gICAgICAgICAgICAoZngucmVsYXRpdmVQb3NpdGlvbi55IHx8IDApICsgYW1vdW50ICogZml4dHVyZUhlaWdodDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZW50cmFuY2VZID0gZW50cmFuY2U/LmRpc3RhbmNlIHx8IDA7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nVzQgPSB3ND8uZGlzdGFuY2UgfHwgMDtcclxuICAgICAgY29uc3QgZXhpc3RpbmdXNSA9IHc1Py5kaXN0YW5jZSB8fCAwO1xyXG5cclxuICAgICAgLy8gR3JvdyB3YWxsLTQgaWYgd2UgY2xpY2tlZCB3YWxsLTQgT1Igd2FsbC0yXHJcbiAgICAgIGlmICgoY2xpY2tlZFdhbGxOdW1iZXIgPT09IDQgfHwgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDIpICYmIHc0KSB7XHJcbiAgICAgICAgdzQuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28oZXhpc3RpbmdXNCArIGFtb3VudCAqIGZpeHR1cmVIZWlnaHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBHcm93IHdhbGwtNSBpZiB3ZSBjbGlja2VkIHdhbGwtNSBPUiB3YWxsLTJcclxuICAgICAgaWYgKChjbGlja2VkV2FsbE51bWJlciA9PT0gNSB8fCBjbGlja2VkV2FsbE51bWJlciA9PT0gMikgJiYgdzUpIHtcclxuICAgICAgICB3NS5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byhleGlzdGluZ1c1ICsgYW1vdW50ICogZml4dHVyZUhlaWdodCk7XHJcblxyXG4gICAgICAgIGlmICh3NCkge1xyXG4gICAgICAgICAgdzQuZml4dHVyZXMuZm9yRWFjaCgoZng6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgPVxyXG4gICAgICAgICAgICAgIChmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgfHwgMCkgKyBhbW91bnQgKiBmaXh0dXJlSGVpZ2h0O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQcmV2ZW50IG92ZXJmbG93OiBzaHJpbmsgYmFjayBpZiB0b3RhbCA+IHcyIHNpemVcclxuICAgICAgY29uc3QgdG90YWxVc2VkID0gZW50cmFuY2VZICsgKHc0Py5kaXN0YW5jZSB8fCAwKSArICh3NT8uZGlzdGFuY2UgfHwgMCk7XHJcbiAgICAgIGlmICh0b3RhbFVzZWQgPiB3MiEuZGlzdGFuY2UpIHtcclxuICAgICAgICBpZiAodzUpIHtcclxuICAgICAgICAgIHc1LmRpc3RhbmNlID0gdGhpcy5yb3VuZFRvVHdvKFxyXG4gICAgICAgICAgICB3NS5kaXN0YW5jZSAtICh0b3RhbFVzZWQgLSB3MiEuZGlzdGFuY2UpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRml4dHVyZShcclxuICAgIGZpeHR1cmVUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIixcclxuICAgIGZpeHR1cmVJbmRleDogbnVtYmVyLFxyXG4gICAgd2FsbEluZGV4PzogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgaWYgKGZpeHR1cmVUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICB0aGlzLmdldEZvcm1GaXh0dXJlcyh3YWxsSW5kZXghKS5yZW1vdmVBdChmaXh0dXJlSW5kZXgpO1xyXG5cclxuICAgICAgY29uc3Qgd2FsbCA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKTtcclxuICAgICAgaWYgKHdhbGwgJiYgQXJyYXkuaXNBcnJheSh3YWxsLmZpeHR1cmVzKSkge1xyXG4gICAgICAgIHdhbGwuZml4dHVyZXMuc3BsaWNlKGZpeHR1cmVJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZVR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzLnJlbW92ZUF0KGZpeHR1cmVJbmRleCk7XHJcblxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlKSkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuc3BsaWNlKGZpeHR1cmVJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJsYXlvdXRcIjtcclxuICB9XHJcblxyXG4gIHJlbW92ZU90aGVyRWxlbWVudChcclxuICAgIGVsZW1lbnRUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIixcclxuICAgIGVsZW1lbnRJbmRleDogbnVtYmVyLFxyXG4gICAgd2FsbEluZGV4PzogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgaWYgKGVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICB0aGlzLmdldFdhbGxPdGhlckVsZW1lbnRzKHdhbGxJbmRleCEpLnJlbW92ZUF0KGVsZW1lbnRJbmRleCk7XHJcblxyXG4gICAgICBjb25zdCB3YWxsID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpO1xyXG4gICAgICBpZiAod2FsbCAmJiBBcnJheS5pc0FycmF5KHdhbGwub3RoZXJFbGVtZW50cykpIHtcclxuICAgICAgICB3YWxsLm90aGVyRWxlbWVudHMuc3BsaWNlKGVsZW1lbnRJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZWxlbWVudFR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICB0aGlzLmdldEZvcm1GbG9vck90aGVyRWxlbWVudHMucmVtb3ZlQXQoZWxlbWVudEluZGV4KTtcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMpKSB7XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cy5zcGxpY2UoZWxlbWVudEluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImxheW91dFwiO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlRml4dHVyZVRlbXBsYXRlKFxyXG4gICAgY29uZmlnSWQ6IHN0cmluZyxcclxuICAgIGZpeHR1cmVUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIixcclxuICAgIGZpeHR1cmVJbmRleDogbnVtYmVyLFxyXG4gICAgd2FsbEluZGV4PzogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2VcclxuICAgICAgLmdldEZpeHR1cmVUZW1wbGF0ZShjb25maWdJZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJZCA9IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgICAgICAgICBmaXh0dXJlTmFtZTogdGVtcGxhdGVEYXRhLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEpLnNldENvbnRyb2woXHJcbiAgICAgICAgICAgICAgZml4dHVyZUluZGV4LFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVHcm91cFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlRGF0YSA9IHtcclxuICAgICAgICAgICAgICAuLi50ZW1wbGF0ZURhdGEsXHJcbiAgICAgICAgICAgICAgZml4dHVyZUNvbmZpZ0lkOiB0ZW1wbGF0ZURhdGEuX2lkLFxyXG4gICAgICAgICAgICAgIF9pZDogZml4dHVyZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCB3YWxsUmVmID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpITtcclxuICAgICAgICAgICAgd2FsbFJlZi5maXh0dXJlc1tmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgIC4uLndhbGxSZWYuZml4dHVyZXNbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAuLi5maXh0dXJlRGF0YSxcclxuICAgICAgICAgICAgICB1bnNhdmVkQ2hhbmdlczogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZml4dHVyZVR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZURhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZUlkID0gYG5ldy0ke2NyeXB0by5yYW5kb21VVUlEKCl9YDtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gdGhpcy5wYXRjaEZpeHR1cmUoe1xyXG4gICAgICAgICAgICAgIGZpeHR1cmVOYW1lOiB0ZW1wbGF0ZURhdGEuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgICAgZml4dHVyZUNvbmZpZ0lkOiB0ZW1wbGF0ZURhdGEuX2lkLFxyXG4gICAgICAgICAgICAgIF9pZDogZml4dHVyZUlkLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vckZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheSkuc2V0Q29udHJvbChcclxuICAgICAgICAgICAgICBmaXh0dXJlSW5kZXgsXHJcbiAgICAgICAgICAgICAgZml4dHVyZUdyb3VwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVEYXRhID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRlbXBsYXRlRGF0YSxcclxuICAgICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlRGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgLi4uZml4dHVyZURhdGEsXHJcbiAgICAgICAgICAgICAgdW5zYXZlZENoYW5nZXM6IHRydWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICAgICAgICAvLyB0aGlzLmRyYXdJbml0aWFsQ29udGVudCgpO1xyXG4gICAgICAgICAgLy8gdGhpcy5zdWJzY3JpYmVUb0ZpeHR1cmVDb25maWdJZENoYW5nZXMoKVxyXG4gICAgICAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImxheW91dFwiO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gZmV0Y2ggdGVtcGxhdGVzXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25Ecm9wKFxyXG4gICAgZXZlbnQ6IGFueSxcclxuICAgIGRlc3RpbmF0aW9uV2FsbEluZGV4OiBudW1iZXIgfCBcImZsb29yXCIsXHJcbiAgICBkZXN0aW5hdGlvbkZpeHR1cmVJbmRleD86IG51bWJlclxyXG4gICkge1xyXG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGE7XHJcblxyXG4gICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgaXNTb3VyY2VGbG9vciA9IGRhdGEud2FsbEluZGV4ID09PSBcImZsb29yXCI7XHJcbiAgICBjb25zdCBpc0Rlc3RpbmF0aW9uRmxvb3IgPSBkZXN0aW5hdGlvbldhbGxJbmRleCA9PT0gXCJmbG9vclwiO1xyXG5cclxuICAgIGNvbnN0IHNvdXJjZUZvcm1BcnJheTogRm9ybUFycmF5ID0gaXNTb3VyY2VGbG9vclxyXG4gICAgICA/IHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXNcclxuICAgICAgOiB0aGlzLmdldEZvcm1GaXh0dXJlcyhkYXRhLndhbGxJbmRleCk7XHJcblxyXG4gICAgY29uc3QgZGVzdGluYXRpb25Gb3JtQXJyYXk6IEZvcm1BcnJheSA9IGlzRGVzdGluYXRpb25GbG9vclxyXG4gICAgICA/IHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXNcclxuICAgICAgOiB0aGlzLmdldEZvcm1GaXh0dXJlcyhkZXN0aW5hdGlvbldhbGxJbmRleCBhcyBudW1iZXIpO1xyXG5cclxuICAgIGNvbnN0IHNvdXJjZVdhbGxNZXRhID0gaXNTb3VyY2VGbG9vclxyXG4gICAgICA/IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVcclxuICAgICAgOiB0aGlzLmdldFdhbGxCeU51bWJlcihcclxuICAgICAgICAgIHRoaXMuZ2V0Rm9ybVdhbGxzLmF0KGRhdGEud2FsbEluZGV4KS5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZVxyXG4gICAgICAgICk/LmZpeHR1cmVzID8/IFtdO1xyXG5cclxuICAgIGNvbnN0IGRlc3RpbmF0aW9uV2FsbE1ldGEgPSBpc0Rlc3RpbmF0aW9uRmxvb3JcclxuICAgICAgPyB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlXHJcbiAgICAgIDogdGhpcy5nZXRXYWxsQnlOdW1iZXIoXHJcbiAgICAgICAgICB0aGlzLmdldEZvcm1XYWxsc1xyXG4gICAgICAgICAgICAuYXQoZGVzdGluYXRpb25XYWxsSW5kZXggYXMgbnVtYmVyKVxyXG4gICAgICAgICAgICAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWVcclxuICAgICAgICApPy5maXh0dXJlcyA/PyBbXTtcclxuXHJcbiAgICBjb25zdCBzRml4dHVyZUluZGV4ID0gc291cmNlV2FsbE1ldGEuZmluZEluZGV4KFxyXG4gICAgICAoZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIGZpeHR1cmUuX2lkID09PSBzb3VyY2VGb3JtQXJyYXkuYXQoZGF0YS5maXh0dXJlSW5kZXgpPy5nZXQoXCJfaWRcIik/LnZhbHVlXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGRGaXh0dXJlSW5kZXggPVxyXG4gICAgICBkZXN0aW5hdGlvbkZpeHR1cmVJbmRleCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgPyBkZXN0aW5hdGlvbldhbGxNZXRhLmZpbmRJbmRleChcclxuICAgICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgICAgICBmaXh0dXJlLl9pZCA9PT1cclxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbkZvcm1BcnJheS5hdChkZXN0aW5hdGlvbkZpeHR1cmVJbmRleCk/LmdldChcIl9pZFwiKVxyXG4gICAgICAgICAgICAgICAgPy52YWx1ZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIDogZGVzdGluYXRpb25Gb3JtQXJyYXkubGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IHNQb3NpdGlvbiA9IHtcclxuICAgICAgZml4dHVyZU51bWJlcjogc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlcixcclxuICAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOlxyXG4gICAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcixcclxuICAgIH07XHJcbiAgICBjb25zdCBkUG9zaXRpb24gPSB7XHJcbiAgICAgIGZpeHR1cmVOdW1iZXI6IGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlcixcclxuICAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOlxyXG4gICAgICAgIGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoc291cmNlV2FsbE1ldGEgPT09IGRlc3RpbmF0aW9uV2FsbE1ldGEpIHtcclxuICAgICAgZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5maXh0dXJlTnVtYmVyID1cclxuICAgICAgICBzUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAgICAgZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPVxyXG4gICAgICAgIHNQb3NpdGlvbi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmZpeHR1cmVOdW1iZXIgPSBkUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID1cclxuICAgICAgICBkUG9zaXRpb24uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlciA9IGRQb3NpdGlvbi5maXh0dXJlTnVtYmVyO1xyXG4gICAgICBzb3VyY2VXYWxsTWV0YVtzRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPVxyXG4gICAgICAgIGRQb3NpdGlvbi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmFuc2ZlckFycmF5SXRlbShcclxuICAgICAgc291cmNlRm9ybUFycmF5LmNvbnRyb2xzLFxyXG4gICAgICBkZXN0aW5hdGlvbkZvcm1BcnJheS5jb250cm9scyxcclxuICAgICAgZGF0YS5maXh0dXJlSW5kZXgsXHJcbiAgICAgIGRGaXh0dXJlSW5kZXhcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy50cmFuc2ZlckFycmF5SXRlbShcclxuICAgICAgc291cmNlV2FsbE1ldGEsXHJcbiAgICAgIGRlc3RpbmF0aW9uV2FsbE1ldGEsXHJcbiAgICAgIHNGaXh0dXJlSW5kZXgsXHJcbiAgICAgIGRGaXh0dXJlSW5kZXhcclxuICAgICk7XHJcblxyXG4gICAgLy8gdGhpcy5yZW9yZGVyRml4dHVyZU1ldGEodGhpcy5mbG9vckRhdGEpO1xyXG4gICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICAvLyB0aGlzLmRyYXdJbml0aWFsQ29udGVudCgpO1xyXG4gICAgLy8gdGhpcy5zdWJzY3JpYmVUb0ZpeHR1cmVDb25maWdJZENoYW5nZXMoKVxyXG4gICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImxheW91dFwiO1xyXG4gIH1cclxuICAvLyBvbkRyb3AoXHJcbiAgLy8gICBldmVudDogRG5kRHJvcEV2ZW50LFxyXG4gIC8vICAgZGVzdGluYXRpb25XYWxsSW5kZXg6IG51bWJlciB8IFwiZmxvb3JcIixcclxuICAvLyAgIGRlc3RpbmF0aW9uRml4dHVyZUluZGV4PzogbnVtYmVyXHJcbiAgLy8gKSB7XHJcbiAgLy8gICBpZih0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuICAvLyAgIGNvbnN0IGlzU291cmNlRmxvb3IgPSBldmVudC5kYXRhLndhbGxJbmRleCA9PT0gXCJmbG9vclwiO1xyXG4gIC8vICAgY29uc3QgaXNEZXN0aW5hdGlvbkZsb29yID0gZGVzdGluYXRpb25XYWxsSW5kZXggPT09IFwiZmxvb3JcIjtcclxuXHJcbiAgLy8gICBjb25zdCBzb3VyY2VGb3JtQXJyYXk6IEZvcm1BcnJheSA9IGlzU291cmNlRmxvb3JcclxuICAvLyAgICAgPyB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzXHJcbiAgLy8gICAgIDogdGhpcy5nZXRGb3JtRml4dHVyZXMoZXZlbnQuZGF0YS53YWxsSW5kZXgpO1xyXG5cclxuICAvLyAgIGNvbnN0IGRlc3RpbmF0aW9uRm9ybUFycmF5OiBGb3JtQXJyYXkgPSBpc0Rlc3RpbmF0aW9uRmxvb3JcclxuICAvLyAgICAgPyB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzXHJcbiAgLy8gICAgIDogdGhpcy5nZXRGb3JtRml4dHVyZXMoZGVzdGluYXRpb25XYWxsSW5kZXggYXMgbnVtYmVyKTtcclxuXHJcbiAgLy8gICBjb25zdCBzb3VyY2VXYWxsTWV0YSA9IGlzU291cmNlRmxvb3JcclxuICAvLyAgICAgPyB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlXHJcbiAgLy8gICAgIDogdGhpcy5nZXRXYWxsQnlOdW1iZXIoXHJcbiAgLy8gICAgICAgICB0aGlzLmdldEZvcm1XYWxscy5hdChldmVudC5kYXRhLndhbGxJbmRleCkuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWVcclxuICAvLyAgICAgICApPy5maXh0dXJlcyA/PyBbXTtcclxuXHJcbiAgLy8gICBjb25zdCBkZXN0aW5hdGlvbldhbGxNZXRhID0gaXNEZXN0aW5hdGlvbkZsb29yXHJcbiAgLy8gICAgID8gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVxyXG4gIC8vICAgICA6IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKFxyXG4gIC8vICAgICAgICAgdGhpcy5nZXRGb3JtV2FsbHNcclxuICAvLyAgICAgICAgICAgLmF0KGRlc3RpbmF0aW9uV2FsbEluZGV4IGFzIG51bWJlcilcclxuICAvLyAgICAgICAgICAgLmdldChcImVsZW1lbnROdW1iZXJcIik/LnZhbHVlXHJcbiAgLy8gICAgICAgKT8uZml4dHVyZXMgPz8gW107XHJcblxyXG4gIC8vICAgY29uc3Qgc0ZpeHR1cmVJbmRleCA9IHNvdXJjZVdhbGxNZXRhLmZpbmRJbmRleChcclxuICAvLyAgICAgKGZpeHR1cmU6IGFueSkgPT5cclxuICAvLyAgICAgICBmaXh0dXJlLl9pZCA9PT1cclxuICAvLyAgICAgICBzb3VyY2VGb3JtQXJyYXkuYXQoZXZlbnQuZGF0YS5maXh0dXJlSW5kZXgpPy5nZXQoXCJfaWRcIik/LnZhbHVlXHJcbiAgLy8gICApO1xyXG5cclxuICAvLyAgIGNvbnN0IGRGaXh0dXJlSW5kZXggPVxyXG4gIC8vICAgICBkZXN0aW5hdGlvbkZpeHR1cmVJbmRleCAhPT0gdW5kZWZpbmVkXHJcbiAgLy8gICAgICAgPyBkZXN0aW5hdGlvbldhbGxNZXRhLmZpbmRJbmRleChcclxuICAvLyAgICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT5cclxuICAvLyAgICAgICAgICAgICBmaXh0dXJlLl9pZCA9PT1cclxuICAvLyAgICAgICAgICAgICBkZXN0aW5hdGlvbkZvcm1BcnJheS5hdChkZXN0aW5hdGlvbkZpeHR1cmVJbmRleCk/LmdldChcIl9pZFwiKVxyXG4gIC8vICAgICAgICAgICAgICAgPy52YWx1ZVxyXG4gIC8vICAgICAgICAgKVxyXG4gIC8vICAgICAgIDogZGVzdGluYXRpb25Gb3JtQXJyYXkubGVuZ3RoO1xyXG5cclxuICAvLyAgIGNvbnN0IHNQb3NpdGlvbiA9IHtcclxuICAvLyAgICAgZml4dHVyZU51bWJlcjogc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlcixcclxuICAvLyAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOlxyXG4gIC8vICAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcixcclxuICAvLyAgIH07XHJcbiAgLy8gICBjb25zdCBkUG9zaXRpb24gPSB7XHJcbiAgLy8gICAgIGZpeHR1cmVOdW1iZXI6IGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlcixcclxuICAvLyAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOlxyXG4gIC8vICAgICAgIGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyLFxyXG4gIC8vICAgfTtcclxuXHJcbiAgLy8gICBpZiAoc291cmNlV2FsbE1ldGEgPT09IGRlc3RpbmF0aW9uV2FsbE1ldGEpIHtcclxuICAvLyAgICAgZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5maXh0dXJlTnVtYmVyID1cclxuICAvLyAgICAgICBzUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAvLyAgICAgZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPVxyXG4gIC8vICAgICAgIHNQb3NpdGlvbi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgLy8gICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmZpeHR1cmVOdW1iZXIgPSBkUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAvLyAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID1cclxuICAvLyAgICAgICBkUG9zaXRpb24uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlciA9IGRQb3NpdGlvbi5maXh0dXJlTnVtYmVyO1xyXG4gIC8vICAgICBzb3VyY2VXYWxsTWV0YVtzRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPVxyXG4gIC8vICAgICAgIGRQb3NpdGlvbi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgdGhpcy50cmFuc2ZlckFycmF5SXRlbShcclxuICAvLyAgICAgc291cmNlRm9ybUFycmF5LmNvbnRyb2xzLFxyXG4gIC8vICAgICBkZXN0aW5hdGlvbkZvcm1BcnJheS5jb250cm9scyxcclxuICAvLyAgICAgZXZlbnQuZGF0YS5maXh0dXJlSW5kZXgsXHJcbiAgLy8gICAgIGRGaXh0dXJlSW5kZXhcclxuICAvLyAgICk7XHJcblxyXG4gIC8vICAgdGhpcy50cmFuc2ZlckFycmF5SXRlbShcclxuICAvLyAgICAgc291cmNlV2FsbE1ldGEsXHJcbiAgLy8gICAgIGRlc3RpbmF0aW9uV2FsbE1ldGEsXHJcbiAgLy8gICAgIHNGaXh0dXJlSW5kZXgsXHJcbiAgLy8gICAgIGRGaXh0dXJlSW5kZXhcclxuICAvLyAgICk7XHJcblxyXG4gIC8vICAgLy8gdGhpcy5yZW9yZGVyRml4dHVyZU1ldGEodGhpcy5mbG9vckRhdGEpO1xyXG4gIC8vICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgLy8gICAvLyB0aGlzLmRyYXdJbml0aWFsQ29udGVudCgpO1xyXG4gIC8vICAgLy8gdGhpcy5zdWJzY3JpYmVUb0ZpeHR1cmVDb25maWdJZENoYW5nZXMoKVxyXG4gIC8vICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImxheW91dFwiO1xyXG4gIC8vIH1cclxuXHJcbiAgZG93bmxvYWRDYW52YXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuY2FudmFzKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgb3JpZ2luYWxWaWV3cG9ydCA9IFtcclxuICAgICAgLi4udGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0hLFxyXG4gICAgXSBhcyBmYWJyaWMuVE1hdDJEO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLnNldFZpZXdwb3J0VHJhbnNmb3JtKFsxLCAwLCAwLCAxLCAwLCAwXSk7XHJcblxyXG4gICAgY29uc3QgYm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcblxyXG4gICAgY29uc3QgZGF0YVVSTCA9IHRoaXMuY2FudmFzLnRvRGF0YVVSTCh7XHJcbiAgICAgIGZvcm1hdDogXCJwbmdcIixcclxuICAgICAgbGVmdDogYm91bmRzLmxlZnQsXHJcbiAgICAgIHRvcDogYm91bmRzLnRvcCxcclxuICAgICAgd2lkdGg6IGJvdW5kcy53aWR0aCxcclxuICAgICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0LFxyXG4gICAgICBtdWx0aXBsaWVyOiAyLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuc2V0Vmlld3BvcnRUcmFuc2Zvcm0ob3JpZ2luYWxWaWV3cG9ydCk7XHJcblxyXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgbGluay5ocmVmID0gZGF0YVVSTDtcclxuICAgIGxpbmsuZG93bmxvYWQgPSBgJHt0aGlzLnBsYW5vRGF0YS5zdG9yZU5hbWV9XyR7dGhpcy5mbG9vckRhdGEuZmxvb3JOYW1lfS5wbmdgO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaGFuZGxlQXBwcm92ZXJSZXNwb25zZShyZXNwb25zZTogYW55KSB7XHJcbiAgICBpZiAocmVzcG9uc2UubWVzc2FnZSA9PSBcImVkaXRcIikge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgY29uc3Qgd2FsbCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgICAgICh3YWxsOiBhbnkpID0+IHdhbGwuZWxlbWVudE51bWJlciA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUud2FsbEluZGV4XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBmaXh0dXJlID0gd2FsbC5maXh0dXJlcy5maW5kKFxyXG4gICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5faWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gZml4dHVyZTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuZmluZChcclxuICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuX2lkID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlSWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IGZpeHR1cmU7XHJcbiAgICAgIH1cclxuICAgICAgcmVzcG9uc2UuZGF0YS5zaGVsZkNvbmZpZy5mb3JFYWNoKChzaGVsZjogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgaWYgKHNoZWxmLnNoZWxmVHlwZSA9PSBcInRyYXlcIiAmJiAhc2hlbGY/Lm9yaWdpbmFsUHJvZHVjdENvdW50KSB7XHJcbiAgICAgICAgICBzaGVsZi50cmF5Um93cyA9IHNoZWxmLnByb2R1Y3RQZXJTaGVsZiA8PSAyMSA/IDMgOiA3O1xyXG4gICAgICAgICAgc2hlbGYub3JpZ2luYWxQcm9kdWN0Q291bnQgPSBzaGVsZi5wcm9kdWN0UGVyU2hlbGY7XHJcbiAgICAgICAgICBzaGVsZi5wcm9kdWN0UGVyU2hlbGYgPSBNYXRoLmZsb29yKFxyXG4gICAgICAgICAgICBzaGVsZi5wcm9kdWN0UGVyU2hlbGYgLyAoc2hlbGYucHJvZHVjdFBlclNoZWxmIDw9IDIxID8gMyA6IDcpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc2hlbGZab25lID0gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnLmZpbmQoXHJcbiAgICAgICAgICAoc2hlbHZlOiBhbnkpID0+IHNoZWxmLnNoZWxmTnVtYmVyID09IHNoZWx2ZS5zaGVsZk51bWJlclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHNoZWxmWm9uZSkge1xyXG4gICAgICAgICAgcmVzcG9uc2UuZGF0YS5zaGVsZkNvbmZpZ1tpbmRleF0gPSB7IC4uLnNoZWxmWm9uZSwgLi4uc2hlbGYgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2hlbGYuem9uZSA9IFwiQm90dG9tXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHJlc3BvbnNlPy5kYXRhPy5oZWFkZXI/LmxhYmVsXHJcbiAgICAgICAgICA/LnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgID8uaW5jbHVkZXMoXCJoZWFkZXIgbm90IGlkZW50aWZpZWRcIilcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGVsZXRlIHJlc3BvbnNlLmRhdGEuaGVhZGVyO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IHtcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkRml4dHVyZURhdGEsXHJcbiAgICAgICAgLi4ucmVzcG9uc2UuZGF0YSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZURhdGEgPSB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGE7XHJcbiAgICAgIHRoaXMuZWRpdEZpeHR1cmUgPSB0cnVlO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICByZXNwb25zZT8uZmlsdGVyQnlUYXNrPy5sZW5ndGggPiAwIHx8XHJcbiAgICAgIHJlc3BvbnNlPy5maWx0ZXJCeVN0YXR1cz8ubGVuZ3RoID4gMCB8fFxyXG4gICAgICByZXNwb25zZT8uZmlsdGVyQnlBcHByb3ZhbFN0YXR1cz8ubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIC8vIHRoaXMuZmxvb3JEYXRhID0gc3RydWN0dXJlZENsb25lKHRoaXMucGxhbm9EYXRhLmZsb29ycy5maW5kKChmbG9vcjogYW55KSA9PiBmbG9vci5faWQgPT09IHRoaXMuZmxvb3JEYXRhLl9pZCkpXHJcbiAgICAgIHRoaXMuZ2V0U3RvcmVGZWVkYmFjayhcclxuICAgICAgICB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgICByZXNwb25zZSxcclxuICAgICAgICBmYWxzZVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlc3BvbnNlPy5yZWxvYWQpIHtcclxuICAgICAgLy8gdGhpcy5mbG9vckRhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHRoaXMucGxhbm9EYXRhLl9pZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChyZXNwb25zZT8udGFza1R5cGUgPT09IFwibGF5b3V0XCIgJiYgcmVzcG9uc2U/Lmlzc3VlVHlwZSA9PT0gXCJvdGhlcnNcIikge1xyXG4gICAgICAvLyB0aGlzLmZsb29yRGF0YSA9IG51bGw7XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgICB0aGlzLmdldFN0b3JlRml4dHVyZXModGhpcy5wbGFub0RhdGEuX2lkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlPy50YXNrVHlwZSA9PT0gXCJsYXlvdXRcIikge1xyXG4gICAgICBjb25zdCBmZWVkYmFjayA9IHRoaXMuc3RvcmVGZWVkYmFjaz8ubGF5b3V0RGF0YT8uZmluZChcclxuICAgICAgICAodGFzazogYW55KSA9PiB0YXNrLl9pZCA9PT0gcmVzcG9uc2UuX2lkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghZmVlZGJhY2spIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGFuc3dlciA9IGZlZWRiYWNrPy5hbnN3ZXJzPy5maW5kKFxyXG4gICAgICAgIChhbnN3ZXI6IGFueSkgPT4gYW5zd2VyLl9pZCA9PT0gcmVzcG9uc2UuYW5zd2VySWRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghYW5zd2VyKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBpc3N1ZSA9IGFuc3dlci5pc3N1ZXMuZmluZChcclxuICAgICAgICAoaXNzdWU6IGFueSkgPT4gaXNzdWUuX2lkID09PSByZXNwb25zZS5pc3N1ZUlkXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoIWlzc3VlKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBkZXRhaWwgPSBpc3N1ZS5EZXRhaWxzLmZpbmQoXHJcbiAgICAgICAgKGRldGFpbDogYW55KSA9PiBkZXRhaWwuX2lkID09PSByZXNwb25zZS5EZXRhaWxzSWRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghZGV0YWlsKSByZXR1cm47XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmU/Lmlzc3VlKSB7XHJcbiAgICAgICAgY29uc3QgbWV0YSA9IHtcclxuICAgICAgICAgIF9pZDogZmVlZGJhY2suX2lkLFxyXG4gICAgICAgICAgYW5zd2VySWQ6IGFuc3dlci5faWQsXHJcbiAgICAgICAgICBpc3N1ZUlkOiBpc3N1ZS5faWQsXHJcbiAgICAgICAgICBEZXRhaWxzSWQ6IGRldGFpbC5faWQsXHJcbiAgICAgICAgICB0eXBlOiByZXNwb25zZS50eXBlLFxyXG4gICAgICAgICAgY29tbWVudHM6IHJlc3BvbnNlLmNvbW1lbnRzLFxyXG4gICAgICAgICAgdGFza1R5cGU6IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLnRhc2tUeXBlLFxyXG5cclxuICAgICAgICAgIHBsYW5vSWQ6IHJlc3BvbnNlPy5wbGFub0lkLFxyXG4gICAgICAgICAgZmxvb3JJZDogcmVzcG9uc2U/LmZsb29ySWQsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZUZpeHR1cmVDb21wbGlhbmNlU3RhdHVzKG1ldGEpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSBcImFncmVlXCIpIHtcclxuICAgICAgICAgICAgICBpZiAoaXNzdWU/Lmlzc3VlVHlwZSA9PT0gXCJleHRyYUZpeHR1cmVcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudC5maXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZml4dHVyZS5faWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZml4dHVyZS5naG9zdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmaXh0dXJlLl9pZCA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZS5naG9zdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAoaXNzdWU/Lmlzc3VlVHlwZSA9PT0gXCJmaXh0dXJlTWlzc2luZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmZpeHR1cmVzID0gZWxlbWVudC5maXh0dXJlcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgIGZpeHR1cmUuX2lkICE9PSB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlSWRcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZSA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmU/LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAoZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgZml4dHVyZS5faWQgIT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAoaXNzdWU/Lmlzc3VlVHlwZSA9PT0gXCJmaXh0dXJlTWlzbWF0Y2hcIikge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgICAgICAgICBmaXh0dXJlSWQsXHJcbiAgICAgICAgICAgICAgICAgIG5ld2Fzc29jaWF0ZWRFbGVtZW50VHlwZSxcclxuICAgICAgICAgICAgICAgICAgbmV3YXNzb2NpYXRlZEVsZW1lbnROdW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgIG5ld2Fzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcixcclxuICAgICAgICAgICAgICAgIH0gPSBkZXRhaWw7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNTb3VyY2VGbG9vciA9IGRldGFpbC5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09IFwiZmxvb3JcIjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzRGVzdGluYXRpb25GbG9vciA9IG5ld2Fzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gXCJmbG9vclwiO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZU1ldGEgPSBpc1NvdXJjZUZsb29yXHJcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVxyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgIChlbDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5lbGVtZW50VHlwZSA9PT0gZGV0YWlsLmFzc29jaWF0ZWRFbGVtZW50VHlwZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5lbGVtZW50TnVtYmVyID09PSBkZXRhaWwuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICApPy5maXh0dXJlcztcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZXN0aW5hdGlvbk1ldGEgPSBpc0Rlc3RpbmF0aW9uRmxvb3JcclxuICAgICAgICAgICAgICAgICAgPyB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlXHJcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgKGVsOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmVsZW1lbnRUeXBlID09PSBuZXdhc3NvY2lhdGVkRWxlbWVudFR5cGUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwuZWxlbWVudE51bWJlciA9PT0gbmV3YXNzb2NpYXRlZEVsZW1lbnROdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICApPy5maXh0dXJlcztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZU1ldGEgfHwgIWRlc3RpbmF0aW9uTWV0YSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUluZGV4ID0gc291cmNlTWV0YS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChmOiBhbnkpID0+IGYuX2lkID09PSBmaXh0dXJlSWRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlSW5kZXggPT09IC0xKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9uR2hvc3REZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uTWV0YVxyXG4gICAgICAgICAgICAgICAgICAubWFwKChmaXh0dXJlOiBhbnksIGk6IG51bWJlcikgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSW5kZXg6IGksXHJcbiAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChmOiBhbnkpID0+ICFmLmZpeHR1cmUuZ2hvc3QpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBkZXN0aW5hdGlvbkluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5ld2Fzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSW5kZXggPSBub25HaG9zdERlc3RpbmF0aW9uWzBdPy5vcmlnaW5hbEluZGV4ID8/IDA7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICBuZXdhc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPiBub25HaG9zdERlc3RpbmF0aW9uLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSW5kZXggPVxyXG4gICAgICAgICAgICAgICAgICAgIG5vbkdob3N0RGVzdGluYXRpb25bbm9uR2hvc3REZXN0aW5hdGlvbi5sZW5ndGhdXHJcbiAgICAgICAgICAgICAgICAgICAgICA/Lm9yaWdpbmFsSW5kZXggPz8gZGVzdGluYXRpb25NZXRhLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSW5kZXggPVxyXG4gICAgICAgICAgICAgICAgICAgIG5vbkdob3N0RGVzdGluYXRpb25bbmV3YXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyIC0gMV1cclxuICAgICAgICAgICAgICAgICAgICAgID8ub3JpZ2luYWxJbmRleCA/PyBkZXN0aW5hdGlvbk1ldGEubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmZXJBcnJheUl0ZW0oXHJcbiAgICAgICAgICAgICAgICAgIHNvdXJjZU1ldGEsXHJcbiAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTWV0YSxcclxuICAgICAgICAgICAgICAgICAgc291cmNlSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSW5kZXhcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbW92ZWRGaXh0dXJlID0gZGVzdGluYXRpb25NZXRhW2Rlc3RpbmF0aW9uSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgbW92ZWRGaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9IG5ld2Fzc29jaWF0ZWRFbGVtZW50VHlwZTtcclxuICAgICAgICAgICAgICAgIG1vdmVkRml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlciA9XHJcbiAgICAgICAgICAgICAgICAgIG5ld2Fzc29jaWF0ZWRFbGVtZW50TnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgbW92ZWRGaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9XHJcbiAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSW5kZXggKyAxO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldFN0b3JlRml4dHVyZXModGhpcy5wbGFub0RhdGEuX2lkKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVzcG9uc2U/LnRhc2tUeXBlID09PSBcImZpeHR1cmVcIikge1xyXG4gICAgICBjb25zdCBmZWVkYmFjayA9IHRoaXMuc3RvcmVGZWVkYmFjaz8uZml4dHVyZURhdGE/LmZpbmQoXHJcbiAgICAgICAgKHRhc2s6IGFueSkgPT4gdGFzay5faWQgPT09IHJlc3BvbnNlLl9pZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWZlZWRiYWNrKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBhbnN3ZXIgPSBmZWVkYmFjaz8uYW5zd2Vycz8uZmluZChcclxuICAgICAgICAoYW5zd2VyOiBhbnkpID0+IGFuc3dlci5faWQgPT09IHJlc3BvbnNlLmFuc3dlcklkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghYW5zd2VyKSByZXR1cm47XHJcblxyXG4gICAgICAvLyBjb25zdCBpc3N1ZSA9IGFuc3dlci5pc3N1ZXMuZmluZCgoaXNzdWU6IGFueSkgPT4gaXNzdWUuX2lkID09PSByZXNwb25zZS5pc3N1ZUlkKVxyXG5cclxuICAgICAgLy8gaWYgKCFpc3N1ZSkgcmV0dXJuO1xyXG5cclxuICAgICAgLy8gY29uc3QgZGV0YWlsID0gaXNzdWUuRGV0YWlscy5maW5kKChkZXRhaWw6IGFueSkgPT4gZGV0YWlsLl9pZCA9PT0gcmVzcG9uc2UuRGV0YWlsc0lkKVxyXG5cclxuICAgICAgLy8gaWYgKCFkZXRhaWwpIHJldHVybjtcclxuXHJcbiAgICAgIGxldCB0YXJnZXRGaXh0dXJlOiBhbnkgPSBudWxsO1xyXG5cclxuICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBlbGVtZW50LmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGZpeHR1cmUuX2lkID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlSWQpIHtcclxuICAgICAgICAgICAgdGFyZ2V0Rml4dHVyZSA9IGZpeHR1cmU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChmaXh0dXJlLl9pZCA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZUlkKSB7XHJcbiAgICAgICAgICB0YXJnZXRGaXh0dXJlID0gZml4dHVyZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlPy5pc3N1ZSkge1xyXG4gICAgICBjb25zdCBtZXRhID0ge1xyXG4gICAgICAgIF9pZDogZmVlZGJhY2suX2lkLFxyXG4gICAgICAgIGFuc3dlcklkOiBhbnN3ZXIuX2lkLFxyXG4gICAgICAgIC8vIGlzc3VlSWQ6IGlzc3VlLl9pZCxcclxuICAgICAgICAvLyBEZXRhaWxzSWQ6IGRldGFpbC5faWQsXHJcbiAgICAgICAgdHlwZTogcmVzcG9uc2UudHlwZSxcclxuICAgICAgICBjb21tZW50czogcmVzcG9uc2UuY29tbWVudHMsXHJcbiAgICAgICAgdGFza1R5cGU6IHJlc3BvbnNlLnRhc2tUeXBlLFxyXG4gICAgICAgIHBsYW5vSWQ6IHJlc3BvbnNlPy5wbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IHJlc3BvbnNlPy5mbG9vcklkLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlRml4dHVyZUNvbXBsaWFuY2VTdGF0dXMobWV0YSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gXCJhZ3JlZVwiKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIChpc3N1ZS5pc3N1ZVR5cGUgPT09ICdjYXRlZ29yeVdyb25nJykge1xyXG4gICAgICAgICAgICAvLyAgIHRhcmdldEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgIC8vICAgICAuLi50YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgICAvLyAgICAgZml4dHVyZUNvbmZpZ0lkOiBkZXRhaWwuZml4dHVyZUNvbmZpZ0lkLFxyXG4gICAgICAgICAgICAvLyAgICAgc2hlbGZDb25maWc6IGRldGFpbC5zaGVsZkNvbmZpZyxcclxuICAgICAgICAgICAgLy8gICAgIGlzc3VlOiBmYWxzZSxcclxuICAgICAgICAgICAgLy8gICB9XHJcblxyXG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKGlzc3VlLmlzc3VlVHlwZSA9PT0gJ3NpemVXcm9uZycpIHtcclxuICAgICAgICAgICAgLy8gICB0YXJnZXRGaXh0dXJlID0ge1xyXG4gICAgICAgICAgICAvLyAgICAgLi4udGFyZ2V0Rml4dHVyZSxcclxuICAgICAgICAgICAgLy8gICAgIGZpeHR1cmVXaWR0aDogZGV0YWlsLmZpeHR1cmVXaWR0aCxcclxuICAgICAgICAgICAgLy8gICAgIHNoZWxmQ29uZmlnOiBkZXRhaWwuc2hlbGZDb25maWcsXHJcbiAgICAgICAgICAgIC8vICAgICBpc3N1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIC8vICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gfSBlbHNlIGlmIChpc3N1ZS5pc3N1ZVR5cGUgPT09ICdzaGVsZldyb25nJykge1xyXG4gICAgICAgICAgICAvLyAgIHRhcmdldEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgIC8vICAgICAuLi50YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgICAvLyAgICAgc2hlbGZDb25maWc6IGRldGFpbC5zaGVsZkNvbmZpZyxcclxuICAgICAgICAgICAgLy8gICAgIGlzc3VlOiBmYWxzZSxcclxuICAgICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAoaXNzdWUuaXNzdWVUeXBlID09PSAnYnJhbmRXcm9uZycgfHwgaXNzdWUuaXNzdWVUeXBlID09PSAncHJvZHVjdGNhdGVnb3J5V3JvbmcnKSB7XHJcbiAgICAgICAgICAgIC8vICAgY29uc3Qgc291cmNlU2hlbHZlcyA9IHRhcmdldEZpeHR1cmUuc2hlbGZDb25maWc7XHJcbiAgICAgICAgICAgIC8vICAgY29uc3QgdGFyZ2V0U2hlbHZlcyA9IGRldGFpbC5zaGVsZkNvbmZpZztcclxuICAgICAgICAgICAgLy8gICBjb25zdCB0YXJnZXRNYXAgPSBuZXcgTWFwPG51bWJlciwgYW55PigpO1xyXG4gICAgICAgICAgICAvLyAgIHRhcmdldFNoZWx2ZXMuZm9yRWFjaCgoc2hlbGY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgdGFyZ2V0TWFwLnNldChzaGVsZi5zaGVsZk51bWJlciwgc2hlbGYpO1xyXG4gICAgICAgICAgICAvLyAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gICBjb25zdCBtZXJnZWRTaGVsdmVzID0gc291cmNlU2hlbHZlcy5tYXAoKHNoZWxmOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgLy8gICAgIHJldHVybiB0YXJnZXRNYXAuaGFzKHNoZWxmLnNoZWxmTnVtYmVyKVxyXG4gICAgICAgICAgICAvLyAgICAgICA/IHRhcmdldE1hcC5nZXQoc2hlbGYuc2hlbGZOdW1iZXIpXHJcbiAgICAgICAgICAgIC8vICAgICAgIDogc2hlbGY7XHJcbiAgICAgICAgICAgIC8vICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyAgIHRhcmdldEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgIC8vICAgICAuLi50YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgICAvLyAgICAgc2hlbGZDb25maWc6IG1lcmdlZFNoZWx2ZXMsXHJcbiAgICAgICAgICAgIC8vICAgICBpc3N1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIC8vICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgcmVzcG9uc2U/LmZpeHR1cmVBaURldGFpbHM/LmhlYWRlcj8ubGFiZWxcclxuICAgICAgICAgICAgICAgID8udG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgPy5pbmNsdWRlcyhcImhlYWRlciBub3QgaWRlbnRpZmllZFwiKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBkZWxldGUgcmVzcG9uc2UuZml4dHVyZUFpRGV0YWlscy5oZWFkZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICBmaXh0dXJlSWQ6IHRhcmdldEZpeHR1cmUuX2lkLFxyXG4gICAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLmZpeHR1cmVBaURldGFpbHMsXHJcbiAgICAgICAgICAgICAgdGFza1R5cGU6IHJlc3BvbnNlLnRhc2tUeXBlLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZVN0b3JlRml4dHVyZShwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMuZmxvb3JEYXRhID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN0b3JlRml4dHVyZXModGhpcy5wbGFub0RhdGEuX2lkKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIHVwZGF0ZSBmaXh0dXJlXCIpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gdGhpcy5mbG9vckRhdGEgPSBudWxsXHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgICAgIHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyh0aGlzLnBsYW5vRGF0YS5faWQpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gdXBkYXRlIHRhc2tcIik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmU/LnRhc2tUeXBlID09PSBcInZtXCIpIHtcclxuICAgICAgY29uc3QgZmVlZGJhY2sgPSB0aGlzLnN0b3JlRmVlZGJhY2s/LlZtRGF0YT8uZmluZChcclxuICAgICAgICAodGFzazogYW55KSA9PiB0YXNrLl9pZCA9PT0gcmVzcG9uc2UuX2lkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghZmVlZGJhY2spIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGFuc3dlciA9IGZlZWRiYWNrPy5hbnN3ZXJzPy5maW5kKFxyXG4gICAgICAgIChhbnN3ZXI6IGFueSkgPT4gYW5zd2VyLl9pZCA9PT0gcmVzcG9uc2UuYW5zd2VySWRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghYW5zd2VyKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBpc3N1ZSA9IGFuc3dlci5pc3N1ZXMuZmluZChcclxuICAgICAgICAoaXNzdWU6IGFueSkgPT4gaXNzdWUuX2lkID09PSByZXNwb25zZS5pc3N1ZUlkXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoIWlzc3VlKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBkZXRhaWwgPSBpc3N1ZS5EZXRhaWxzLmZpbmQoXHJcbiAgICAgICAgKGRldGFpbDogYW55KSA9PiBkZXRhaWwuX2lkID09PSByZXNwb25zZS5EZXRhaWxzSWRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghZGV0YWlsKSByZXR1cm47XHJcblxyXG4gICAgICBsZXQgdGFyZ2V0Rml4dHVyZTogYW55ID0gbnVsbDtcclxuXHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgZWxlbWVudC5maXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChmaXh0dXJlLl9pZCA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZUlkKSB7XHJcbiAgICAgICAgICAgIHRhcmdldEZpeHR1cmUgPSBmaXh0dXJlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZml4dHVyZS5faWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCkge1xyXG4gICAgICAgICAgdGFyZ2V0Rml4dHVyZSA9IGZpeHR1cmU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZT8uaXNzdWUpIHtcclxuICAgICAgICBjb25zdCBtZXRhID0ge1xyXG4gICAgICAgICAgX2lkOiBmZWVkYmFjay5faWQsXHJcbiAgICAgICAgICBhbnN3ZXJJZDogYW5zd2VyLl9pZCxcclxuICAgICAgICAgIGlzc3VlSWQ6IGlzc3VlLl9pZCxcclxuICAgICAgICAgIERldGFpbHNJZDogZGV0YWlsLl9pZCxcclxuICAgICAgICAgIHR5cGU6IHJlc3BvbnNlLnR5cGUsXHJcbiAgICAgICAgICBjb21tZW50czogcmVzcG9uc2UuY29tbWVudHMsXHJcbiAgICAgICAgICB0YXNrVHlwZTogdGhpcy5zZWxlY3RlZEZpeHR1cmUudGFza1R5cGUsXHJcbiAgICAgICAgICBwbGFub0lkOiByZXNwb25zZT8ucGxhbm9JZCxcclxuICAgICAgICAgIGZsb29ySWQ6IHJlc3BvbnNlPy5mbG9vcklkLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZUZpeHR1cmVDb21wbGlhbmNlU3RhdHVzKG1ldGEpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSBcImFncmVlXCIpIHtcclxuICAgICAgICAgICAgICBpZiAoaXNzdWUuaXNzdWVUeXBlID09PSBcIlZtTWlzc2luZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRGaXh0dXJlID0ge1xyXG4gICAgICAgICAgICAgICAgICAuLi50YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgICAgICAgICBzaGVsZkNvbmZpZzogZGV0YWlsLnNoZWxmQ29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICB2bUNvbmZpZzogWy4uLnRhcmdldEZpeHR1cmUudm1Db25maWcsIC4uLmRldGFpbC52bUNvbmZpZ10sXHJcbiAgICAgICAgICAgICAgICAgIGlzc3VlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc3N1ZS5pc3N1ZVR5cGUgPT09IFwiZXh0cmFWbVwiKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2bUFycmF5ID0gdGFyZ2V0Rml4dHVyZT8udm1Db25maWcuZmlsdGVyKCh2bTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiAhKGRldGFpbD8udm1Db25maWcgfHwgW10pLnNvbWUoXHJcbiAgICAgICAgICAgICAgICAgICAgKHJlbW92ZVZtOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICB2bS5zdGFydFlQb3NpdGlvbiA9PSByZW1vdmVWbS5zdGFydFlQb3NpdGlvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgdm0uZW5kWVBvc2l0aW9uID09IHJlbW92ZVZtLmVuZFlQb3NpdGlvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgdm0udm1JZCA9PSByZW1vdmVWbS52bUlkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICB2bS54Wm9uZSA9PSByZW1vdmVWbS54Wm9uZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgdm0ueVpvbmUgPT0gcmVtb3ZlVm0ueVpvbmVcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHRhcmdldEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLnRhcmdldEZpeHR1cmUsXHJcbiAgICAgICAgICAgICAgICAgIHZtQ29uZmlnOiB2bUFycmF5LFxyXG4gICAgICAgICAgICAgICAgICBpc3N1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNzdWUuaXNzdWVUeXBlID09PSBcIlZtTWlzbWF0Y2hcIikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZtQ29uZmlnID0gdGFyZ2V0Rml4dHVyZS52bUNvbmZpZy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICh2bTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBkZXRhaWwudm1Db25maWcuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgIChkdm06IGFueSkgPT4gZHZtLnZtSWQgPT09IHZtLnZtSWRcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WVBvc2l0aW9uOiBtYXRjaC5uZXdzdGFydFlQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kWVBvc2l0aW9uOiBtYXRjaC5uZXdlbmRZUG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhab25lOiBtYXRjaC5uZXd4Wm9uZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeVpvbmU6IG1hdGNoLm5ld3lab25lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogbWF0Y2gubmV3cG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm07XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0Rml4dHVyZSA9IHtcclxuICAgICAgICAgICAgICAgICAgLi4udGFyZ2V0Rml4dHVyZSxcclxuICAgICAgICAgICAgICAgICAgdm1Db25maWc6IHVwZGF0ZWRWbUNvbmZpZyxcclxuICAgICAgICAgICAgICAgICAgaXNzdWU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgICAgICBmaXh0dXJlSWQ6IHRhcmdldEZpeHR1cmUuX2lkLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogdGFyZ2V0Rml4dHVyZSxcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlU3RvcmVGaXh0dXJlKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZmxvb3JEYXRhID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHRoaXMucGxhbm9EYXRhLl9pZCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byB1cGRhdGUgZml4dHVyZVwiKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyB0aGlzLmZsb29yRGF0YSA9IG51bGxcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyh0aGlzLnBsYW5vRGF0YS5faWQpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gdXBkYXRlIHRhc2tcIik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiaW5kRml4dHVyZVRvV2FsbCh3YWxsR3JvdXA6IGZhYnJpYy5Hcm91cCwgZml4dHVyZUdyb3VwOiBmYWJyaWMuR3JvdXApIHtcclxuICAgIGNvbnN0IG9mZnNldFggPSBmaXh0dXJlR3JvdXAubGVmdCEgLSB3YWxsR3JvdXAubGVmdCE7XHJcbiAgICBjb25zdCBvZmZzZXRZID0gZml4dHVyZUdyb3VwLnRvcCEgLSB3YWxsR3JvdXAudG9wITtcclxuXHJcbiAgICBpZiAoIXRoaXMud2FsbEJpbmRpbmdzLmhhcyh3YWxsR3JvdXApKSB0aGlzLndhbGxCaW5kaW5ncy5zZXQod2FsbEdyb3VwLCBbXSk7XHJcbiAgICB0aGlzLndhbGxCaW5kaW5ncy5nZXQod2FsbEdyb3VwKSEucHVzaCh7IGZpeHR1cmVHcm91cCwgb2Zmc2V0WCwgb2Zmc2V0WSB9KTtcclxuICB9XHJcblxyXG4gIGtlZXBXaXRoaW5Cb3VuZGluZ0JveChcclxuICAgIG9iajogZmFicmljLk9iamVjdCxcclxuICAgIGJveDogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9XHJcbiAgKSB7XHJcbiAgICBjb25zdCByZWN0ID0gb2JqLmdldEJvdW5kaW5nUmVjdCgpO1xyXG4gICAgbGV0IGR4ID0gMDtcclxuICAgIGxldCBkeSA9IDA7XHJcblxyXG4gICAgaWYgKHJlY3QubGVmdCA8IGJveC5sZWZ0KSB7XHJcbiAgICAgIGR4ID0gYm94LmxlZnQgLSByZWN0LmxlZnQ7XHJcbiAgICB9XHJcbiAgICBpZiAocmVjdC50b3AgPCBib3gudG9wKSB7XHJcbiAgICAgIGR5ID0gYm94LnRvcCAtIHJlY3QudG9wO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlY3QubGVmdCArIHJlY3Qud2lkdGggPiBib3gubGVmdCArIGJveC53aWR0aCkge1xyXG4gICAgICBkeCA9IGJveC5sZWZ0ICsgYm94LndpZHRoIC0gKHJlY3QubGVmdCArIHJlY3Qud2lkdGgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlY3QudG9wICsgcmVjdC5oZWlnaHQgPiBib3gudG9wICsgYm94LmhlaWdodCkge1xyXG4gICAgICBkeSA9IGJveC50b3AgKyBib3guaGVpZ2h0IC0gKHJlY3QudG9wICsgcmVjdC5oZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkeCAhPT0gMCB8fCBkeSAhPT0gMCkge1xyXG4gICAgICBvYmoubGVmdCA9IG9iai5sZWZ0ISArIGR4O1xyXG4gICAgICBvYmoudG9wID0gb2JqLnRvcCEgKyBkeTtcclxuICAgICAgb2JqLnNldENvb3JkcygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBpc092ZXJsYXBwaW5nQW55Rml4dHVyZShtb3ZlZE9iajogZmFicmljLk9iamVjdCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgQlVGRkVSX1BYID0gNDsgLy8gb3ZlcmxhcCB0b2xlcmFuY2UgcGVyIHNpZGVcclxuXHJcbiAgICBjb25zdCBvYmplY3RzID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqICE9PSBtb3ZlZE9iaiAmJiBvYmouZml4dHVyZUlkKTtcclxuXHJcbiAgICBjb25zdCBzaHJpbmtSZWN0ID0gKFxyXG4gICAgICByOiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0sXHJcbiAgICAgIGI6IG51bWJlclxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMCwgci53aWR0aCAtIDIgKiBiKTtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMCwgci5oZWlnaHQgLSAyICogYik7XHJcbiAgICAgIGNvbnN0IGxlZnQgPSByLmxlZnQgKyBiO1xyXG4gICAgICBjb25zdCB0b3AgPSByLnRvcCArIGI7XHJcbiAgICAgIHJldHVybiB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCByZWN0c0ludGVyc2VjdCA9IChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gIShcclxuICAgICAgICBhLmxlZnQgKyBhLndpZHRoIDw9IGIubGVmdCB8fFxyXG4gICAgICAgIGIubGVmdCArIGIud2lkdGggPD0gYS5sZWZ0IHx8XHJcbiAgICAgICAgYS50b3AgKyBhLmhlaWdodCA8PSBiLnRvcCB8fFxyXG4gICAgICAgIGIudG9wICsgYi5oZWlnaHQgPD0gYS50b3BcclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgbW92ZWRSZWN0UmF3ID0gbW92ZWRPYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICBjb25zdCBtb3ZlZFJlY3QgPSBzaHJpbmtSZWN0KG1vdmVkUmVjdFJhdywgQlVGRkVSX1BYKTtcclxuXHJcbiAgICByZXR1cm4gb2JqZWN0cy5zb21lKChvYmo6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBvdGhlclJlY3RSYXcgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgIGNvbnN0IG90aGVyUmVjdCA9IHNocmlua1JlY3Qob3RoZXJSZWN0UmF3LCBCVUZGRVJfUFgpO1xyXG4gICAgICByZXR1cm4gcmVjdHNJbnRlcnNlY3QobW92ZWRSZWN0LCBvdGhlclJlY3QpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByb3RhdGVXYWxsKGVsZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB3YWxsID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsLmVsZW1lbnROdW1iZXIgPT09IGVsZU51bWJlclxyXG4gICAgKTtcclxuICAgIGlmICh3YWxsLmFuZ2xlICsgOTAgPCAzNjApIHtcclxuICAgICAgd2FsbC5hbmdsZSArPSA5MDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdhbGwuYW5nbGUgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcih0cnVlKTtcclxuICB9XHJcblxyXG4gIGFkZE5ld1dhbGwoZWxlTnVtYmVyOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IG5ld1dhbGwgPSB7XHJcbiAgICAgIGVsZW1lbnRUeXBlOiBcIndhbGxcIixcclxuICAgICAgZGlzdGFuY2U6IDE1LFxyXG4gICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIGRpcmVjdGlvbjogXCJyaWdodFwiLFxyXG4gICAgICBhbmdsZTogMCxcclxuICAgICAgZWxlbWVudE51bWJlcjogZWxlTnVtYmVyICsgMSxcclxuICAgICAgcmVsYXRpdmVQb3NpdGlvbjoge1xyXG4gICAgICAgIHg6IDAsXHJcbiAgICAgICAgeTogMCxcclxuICAgICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZpeHR1cmVzOiBbXSxcclxuICAgICAgb3RoZXJFbGVtZW50czogW10sXHJcbiAgICAgIG5ld0FkZGVkOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpbnNlcnRJbmRleCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZEluZGV4KFxyXG4gICAgICAod2FsbDogYW55KSA9PlxyXG4gICAgICAgIHdhbGwuZWxlbWVudE51bWJlciA9PT0gZWxlTnVtYmVyICYmIHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiXHJcbiAgICApO1xyXG5cclxuICAgIC8vIC8vIENlbnRlciB0aGUgbmV3IHdhbGwgb24gY2FudmFzXHJcbiAgICAvLyB0cnkge1xyXG4gICAgLy8gICBjb25zdCBjYW52YXNDZW50ZXJYID0gdGhpcy5jYW52YXMuZ2V0V2lkdGgoKSAvIDI7XHJcbiAgICAvLyAgIGNvbnN0IGNhbnZhc0NlbnRlclkgPSB0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKSAvIDI7XHJcbiAgICAvLyAgIGNvbnN0IHdhbGxXaWR0aFB4ID0gdGhpcy50b1BpeGVscyhuZXdXYWxsLmRpc3RhbmNlLCBuZXdXYWxsLnVuaXQpO1xyXG4gICAgLy8gICBjb25zdCB3YWxsSGVpZ2h0UHggPSB0aGlzLndhbGxUaGlja25lc3M7XHJcbiAgICAvLyAgIGNvbnN0IGxlZnRQeCA9IGNhbnZhc0NlbnRlclggLSB3YWxsV2lkdGhQeCAvIDI7XHJcbiAgICAvLyAgIGNvbnN0IHRvcFB4ID0gY2FudmFzQ2VudGVyWSAtIHdhbGxIZWlnaHRQeCAvIDI7XHJcbiAgICAvLyAgIG5ld1dhbGwucmVsYXRpdmVQb3NpdGlvbi54ID0gdGhpcy5mcm9tUGl4ZWxzKGxlZnRQeCwgXCJmdFwiKTtcclxuICAgIC8vICAgbmV3V2FsbC5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB0aGlzLmZyb21QaXhlbHModG9wUHgsIFwiZnRcIik7XHJcbiAgICAvLyB9IGNhdGNoIHt9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5zcGxpY2UoaW5zZXJ0SW5kZXggKyAxLCAwLCBuZXdXYWxsKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVdhbGxFbGVtZW50TnVtYmVyKCk7XHJcbiAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gICAgdGhpcy51cGRhdGVXYWxsQ29vcmRpbmF0ZXMoKTtcclxuICB9XHJcblxyXG4gIGFkZE5ld0VudHJhbmNlKCkge1xyXG4gICAgY29uc3QgZWxlTnVtYmVyID1cclxuICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maWx0ZXIoXHJcbiAgICAgICAgKGVsZTogYW55KSA9PiBlbGUuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIlxyXG4gICAgICApPy5sZW5ndGggPz8gMDtcclxuXHJcbiAgICBjb25zdCBuZXdFbnRyYW5jZSA9IHtcclxuICAgICAgZWxlbWVudFR5cGU6IFwiZW50cmFuY2VcIixcclxuICAgICAgZGlzdGFuY2U6IDYsXHJcbiAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgZGlyZWN0aW9uOiBcInVwXCIsXHJcbiAgICAgIGFuZ2xlOiAwLFxyXG4gICAgICBlbGVtZW50TnVtYmVyOiBlbGVOdW1iZXIgKyAxLFxyXG4gICAgICByZWxhdGl2ZVBvc2l0aW9uOiB7XHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwLFxyXG4gICAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgfSxcclxuICAgICAgZml4dHVyZXM6IFtdLFxyXG4gICAgICBvdGhlckVsZW1lbnRzOiBbXSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5wdXNoKG5ld0VudHJhbmNlKTtcclxuICAgIHRoaXMucmVuZGVyRmxvb3IodHJ1ZSk7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMudXBkYXRlRW50cmFuY2VDb29yZGluYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkTmV3Rml4dHVyZShmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCIsIHdhbGxJbmRleD86IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgdGVtcGxhdGU6IGFueSA9IGF3YWl0IHRoaXMuZ2V0VGVtcGxhdGUodGhpcy5maXh0dXJlVGVtcGxhdGVzWzBdLl9pZCk7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZURhdGEgPSB0ZW1wbGF0ZS5kYXRhO1xyXG4gICAgY29uc3QgZml4dHVyZUlkID0gYG5ldy0ke2NyeXB0by5yYW5kb21VVUlEKCl9YDtcclxuICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgZml4dHVyZU5hbWU6IHRlbXBsYXRlRGF0YS5maXh0dXJlTmFtZSxcclxuICAgICAgZml4dHVyZUNvbmZpZ0lkOiB0ZW1wbGF0ZURhdGEuX2lkLFxyXG4gICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGZpeHR1cmVEYXRhID0ge1xyXG4gICAgICAuLi50ZW1wbGF0ZURhdGEsXHJcbiAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgcmVsYXRpdmVQb3NpdGlvbjogeyB4OiAwLCB5OiAwLCB1bml0OiBcImZ0XCIgfSxcclxuICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICAgIHVuc2F2ZWRDaGFuZ2VzOiB0cnVlLFxyXG4gICAgICBuZXdBZGRlZDogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGZpeHR1cmVUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICBjb25zdCB3YWxsRGF0YSA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKTtcclxuXHJcbiAgICAgIGNvbnN0IHcgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICBmaXh0dXJlRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudW5pdFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB3cCA9IHRoaXMuZnJvbVBpeGVscyh3LCBcImZ0XCIpO1xyXG5cclxuICAgICAgaWYgKHdhbGxEYXRhKSB7XHJcbiAgICAgICAgY29uc3QgeDAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLng7XHJcbiAgICAgICAgY29uc3QgeTAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnk7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gd2FsbERhdGEuZGlzdGFuY2UgLSB3cDtcclxuXHJcbiAgICAgICAgY29uc3QgYW5nbGVEZWcgPSB3YWxsRGF0YS5hbmdsZSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IGFuZ2xlUmFkID0gKGFuZ2xlRGVnICogTWF0aC5QSSkgLyAxODA7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ4ID0geDAgKyBsZW5ndGggKiBNYXRoLmNvcyhhbmdsZVJhZCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ5ID0geTAgKyBsZW5ndGggKiBNYXRoLnNpbihhbmdsZVJhZCk7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMTtcclxuICAgICAgICBjb25zdCBmeF9vZmZzZXQgPSBmeCArIG9mZnNldCAqIC1NYXRoLnNpbihhbmdsZVJhZCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ5X29mZnNldCA9IGZ5ICsgb2Zmc2V0ICogTWF0aC5jb3MoYW5nbGVSYWQpO1xyXG5cclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnggPSBmeF9vZmZzZXQ7XHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi55ID0gZnlfb2Zmc2V0O1xyXG4gICAgICAgIGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPSBhbmdsZURlZztcclxuICAgICAgfVxyXG5cclxuICAgICAgKHRoaXMuZ2V0Rm9ybVdhbGxzLmF0KHdhbGxJbmRleCEpLmdldChcImZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheSkucHVzaChcclxuICAgICAgICBmaXh0dXJlR3JvdXBcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpPy5maXh0dXJlcy5wdXNoKGZpeHR1cmVEYXRhKTtcclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZVR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICBjb25zdCBmaXh0dXJlV2lkdGhQeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlSGVpZ2h0UHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0XHJcbiAgICAgICk7XHJcblxyXG4gICAgICAvLyBUcnkgdG8gZmluZCBlbXB0eSBjZW50ZXIgc3BhY2VcclxuICAgICAgY29uc3QgZW1wdHlTcG90ID0gdGhpcy5maW5kRW1wdHlDZW50ZXJTcG90KFxyXG4gICAgICAgIGZpeHR1cmVXaWR0aFB4LFxyXG4gICAgICAgIGZpeHR1cmVIZWlnaHRQeFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKGVtcHR5U3BvdCkge1xyXG4gICAgICAgIC8vIENvbnZlcnQgYmFjayB0byBmdCBzaW5jZSB5b3VyIHN0cnVjdHVyZSBzdG9yZXMgZnRcclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLmZyb21QaXhlbHMoZW1wdHlTcG90LngsIFwiZnRcIik7XHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5mcm9tUGl4ZWxzKGVtcHR5U3BvdC55LCBcImZ0XCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGZhbGxiYWNrXHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi54ID0gMDtcclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yRml4dHVyZXNcIikgYXMgRm9ybUFycmF5KS5wdXNoKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUucHVzaChmaXh0dXJlRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwibGF5b3V0XCI7XHJcbiAgICB0aGlzLnVwZGF0ZUZpeHR1cmVDb29yZGluYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3T3RoZXJFbGVtZW50cyhwb3NUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIiwgd2FsbEluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcG9zRGF0YSA9IHtcclxuICAgICAgX2lkOiBgbmV3LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gLFxyXG4gICAgICBmaXh0dXJlTmFtZTogYFBPUyBDb3VudGVyYCxcclxuICAgICAgZml4dHVyZVR5cGU6IFwib3RoZXJcIixcclxuICAgICAgcmVsYXRpdmVQb3NpdGlvbjogeyB4OiAwLCB5OiAwLCBhbmdsZTogMCwgdW5pdDogXCJmdFwiIH0sXHJcbiAgICAgIGZpeHR1cmVTdGF0aWNMZW5ndGg6IHtcclxuICAgICAgICB2YWx1ZTogMyxcclxuICAgICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZpeHR1cmVTdGF0aWNXaWR0aDoge1xyXG4gICAgICAgIHZhbHVlOiA1LFxyXG4gICAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgbGV0IHggPSBwb3NEYXRhLnJlbGF0aXZlUG9zaXRpb24ueDtcclxuICAgIGxldCB5ID0gcG9zRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnk7XHJcbiAgICBsZXQgYSA9IHBvc0RhdGEucmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcclxuXHJcbiAgICBjb25zdCBoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgcG9zRGF0YS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICBwb3NEYXRhLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBwb3NEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgcG9zRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudW5pdFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBuZXdPdGhlckdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHR5cGU6IFtwb3NEYXRhLmZpeHR1cmVOYW1lIHx8IFwiUE9TIENvdW50ZXJcIl0sIC8vIGRlZmF1bHQgc2VsZWN0ZWQgbGFiZWxcclxuICAgICAgY3VzdG9tTmFtZTogW1wiXCJdLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHBvc1R5cGUgPT0gXCJ3YWxsXCIpIHtcclxuICAgICAgY29uc3Qgd2FsbERhdGEgPSB0aGlzLmdldFdhbGxCeU51bWJlcih3YWxsSW5kZXghICsgMSk7XHJcbiAgICAgIGlmICh3YWxsRGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHgwID0gd2FsbERhdGEucmVsYXRpdmVQb3NpdGlvbi54O1xyXG4gICAgICAgIGNvbnN0IHkwID0gd2FsbERhdGEucmVsYXRpdmVQb3NpdGlvbi55O1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHdhbGxEYXRhLmRpc3RhbmNlO1xyXG4gICAgICAgIGNvbnN0IGFuZ2xlRGVnID0gd2FsbERhdGEuYW5nbGUgfHwgMDtcclxuICAgICAgICBjb25zdCBhbmdsZVJhZCA9IChhbmdsZURlZyAqIE1hdGguUEkpIC8gMTgwO1xyXG5cclxuICAgICAgICBjb25zdCBmeCA9IHgwICsgKGxlbmd0aCAvIDIpICogTWF0aC5jb3MoYW5nbGVSYWQpO1xyXG4gICAgICAgIGNvbnN0IGZ5ID0geTAgKyAobGVuZ3RoIC8gMikgKiBNYXRoLnNpbihhbmdsZVJhZCk7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMi41O1xyXG4gICAgICAgIGNvbnN0IGZ4X29mZnNldCA9IGZ4ICsgb2Zmc2V0ICogLU1hdGguc2luKGFuZ2xlUmFkKTtcclxuICAgICAgICBjb25zdCBmeV9vZmZzZXQgPSBmeSArIG9mZnNldCAqIE1hdGguY29zKGFuZ2xlUmFkKTtcclxuXHJcbiAgICAgICAgeCA9IHRoaXMudG9QaXhlbHMoZnhfb2Zmc2V0LCBcImZ0XCIpO1xyXG4gICAgICAgIHkgPSB0aGlzLnRvUGl4ZWxzKGZ5X29mZnNldCwgXCJmdFwiKTtcclxuICAgICAgICBhID0gYW5nbGVEZWc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIE9iamVjdC5hc3NpZ24ocG9zRGF0YSwge1xyXG4gICAgICAgIGFzc29jaWF0ZWRFbGVtZW50TnVtYmVyOiB3YWxsSW5kZXghICsgMSxcclxuICAgICAgICBhc3NvY2lhdGVkRWxlbWVudFR5cGU6IFwid2FsbFwiLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgICh0aGlzLmdldEZvcm1XYWxscy5hdCh3YWxsSW5kZXghKS5nZXQoXCJvdGhlckVsZW1lbnRzXCIpIGFzIEZvcm1BcnJheSkucHVzaChcclxuICAgICAgICBuZXdPdGhlckdyb3VwXHJcbiAgICAgICk7XHJcbiAgICAgIHdhbGxEYXRhLm90aGVyRWxlbWVudHMucHVzaCh7IC4uLnBvc0RhdGEsIG5ld0FkZGVkOiB0cnVlIH0pO1xyXG4gICAgfSBlbHNlIGlmIChwb3NUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vck90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICAgIG5ld090aGVyR3JvdXBcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cy5wdXNoKHsgLi4ucG9zRGF0YSwgbmV3QWRkZWQ6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVjdEdyb3VwID0gdGhpcy5kcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChcclxuICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgIHgsXHJcbiAgICAgIHksXHJcbiAgICAgIGEsXHJcbiAgICAgIHcsXHJcbiAgICAgIGgsXHJcbiAgICAgIHBvc0RhdGFcclxuICAgICk7XHJcblxyXG4gICAgLy8gbWFrZSBhY3RpdmVcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChyZWN0R3JvdXApO1xyXG4gICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICB9IGNhdGNoIHt9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpYmVUb090aGVyRWxlbWVudHNDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZU90aGVyRWxlbWVudHNDb29yZGluYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgZmluZEVtcHR5Q2VudGVyU3BvdChvYmplY3RXaWR0aFB4OiBudW1iZXIsIG9iamVjdEhlaWdodFB4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IG9iamVjdHMgPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCk7XHJcbiAgICBpZiAoIW9iamVjdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAvLyAxLiBHZXQgbGF5b3V0IGJvdW5kc1xyXG4gICAgY29uc3QgYm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcbiAgICBjb25zdCBjZW50ZXJYID0gYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLyAyO1xyXG4gICAgY29uc3QgY2VudGVyWSA9IGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC8gMjtcclxuXHJcbiAgICAvLyAyLiBTcGlyYWwgc2VhcmNoIHBhcmFtZXRlcnNcclxuICAgIGNvbnN0IHN0ZXAgPSAyMDsgLy8gZ3JpZCBzdGVwIChweClcclxuICAgIGNvbnN0IG1heFJhZGl1cyA9IE1hdGgubWF4KGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XHJcblxyXG4gICAgLy8gU3BpcmFsIG91dHdhcmRzXHJcbiAgICBmb3IgKGxldCByYWRpdXMgPSAwOyByYWRpdXMgPCBtYXhSYWRpdXM7IHJhZGl1cyArPSBzdGVwKSB7XHJcbiAgICAgIGZvciAobGV0IGFuZ2xlID0gMDsgYW5nbGUgPCAzNjA7IGFuZ2xlICs9IDMwKSB7XHJcbiAgICAgICAgY29uc3QgcmFkID0gKGFuZ2xlICogTWF0aC5QSSkgLyAxODA7XHJcblxyXG4gICAgICAgIGNvbnN0IHggPSBjZW50ZXJYICsgcmFkaXVzICogTWF0aC5jb3MocmFkKTtcclxuICAgICAgICBjb25zdCB5ID0gY2VudGVyWSArIHJhZGl1cyAqIE1hdGguc2luKHJhZCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRlc3RSZWN0ID0ge1xyXG4gICAgICAgICAgbGVmdDogeCxcclxuICAgICAgICAgIHRvcDogeSxcclxuICAgICAgICAgIHdpZHRoOiBvYmplY3RXaWR0aFB4LFxyXG4gICAgICAgICAgaGVpZ2h0OiBvYmplY3RIZWlnaHRQeCxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBDaGVjayBjb2xsaXNpb25cclxuICAgICAgICBjb25zdCBpbnRlcnNlY3RzID0gb2JqZWN0cy5zb21lKChvYmopID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlY3QgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgICAgICByZXR1cm4gIShcclxuICAgICAgICAgICAgcmVjdC5sZWZ0ID4gdGVzdFJlY3QubGVmdCArIHRlc3RSZWN0LndpZHRoIHx8XHJcbiAgICAgICAgICAgIHJlY3QubGVmdCArIHJlY3Qud2lkdGggPCB0ZXN0UmVjdC5sZWZ0IHx8XHJcbiAgICAgICAgICAgIHJlY3QudG9wID4gdGVzdFJlY3QudG9wICsgdGVzdFJlY3QuaGVpZ2h0IHx8XHJcbiAgICAgICAgICAgIHJlY3QudG9wICsgcmVjdC5oZWlnaHQgPCB0ZXN0UmVjdC50b3BcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICghaW50ZXJzZWN0cykge1xyXG4gICAgICAgICAgcmV0dXJuIHsgeCwgeSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsOyAvLyBubyBlbXB0eSBhcmVhIGZvdW5kXHJcbiAgfVxyXG5cclxuICBsaXN0ZW5Ub0RlbGV0ZUtleSgpIHtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB7XHJcbiAgICAgIGlmIChlLmtleSA9PT0gXCJEZWxldGVcIiAmJiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCkge1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuY2FudmFzPy5nZXRBY3RpdmVPYmplY3QoKSBhcyBhbnk7XHJcbiAgICAgICAgaWYgKGFjdGl2ZSAmJiAoYWN0aXZlIGFzIGFueSkub2JqVHlwZSA9PT0gXCJlbnRyYW5jZVwiKSB7XHJcbiAgICAgICAgICB0aGlzLmRlbGV0ZUVudHJhbmNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYWN0aXZlICYmIChhY3RpdmUgYXMgYW55KS5vYmpUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgICAgaWYgKGFjdGl2ZT8uZGF0YT8uZWxlbWVudE51bWJlcikge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVdhbGwoYWN0aXZlPy5kYXRhPy5lbGVtZW50TnVtYmVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlRW50cmFuY2UoKSB7XHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKSBhcyBhbnk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZSAmJiBhY3RpdmUub2JqVHlwZSA9PT0gXCJlbnRyYW5jZVwiKSB7XHJcbiAgICAgIGNvbnN0IGkgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmRJbmRleChcclxuICAgICAgICAoZWw6IGFueSkgPT5cclxuICAgICAgICAgIGVsLmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIgJiZcclxuICAgICAgICAgIGVsLmVsZW1lbnROdW1iZXIgPT09IGFjdGl2ZS5kYXRhLmVsZW1lbnROdW1iZXJcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChpID49IDApIHtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLnNwbGljZShpLCAxKTtcclxuICAgICAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGRlbGV0ZVdhbGwoZWxlTnVtYmVyOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHdhbGwgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgIChlbGU6IGFueSkgPT5cclxuICAgICAgICBlbGUuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsZS5lbGVtZW50TnVtYmVyID09PSBlbGVOdW1iZXJcclxuICAgICk7XHJcbiAgICBpZiAod2FsbC5maXh0dXJlcy5sZW5ndGggfHwgd2FsbC5vdGhlckVsZW1lbnRzLmxlbmd0aClcclxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jb25maXJtRGVsZXRlV2FsbCgpKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGkgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmRJbmRleChcclxuICAgICAgKGVsOiBhbnkpID0+IGVsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBlbC5lbGVtZW50TnVtYmVyID09PSBlbGVOdW1iZXJcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5zcGxpY2UoaSwgMSk7XHJcbiAgICB0aGlzLnVwZGF0ZVdhbGxFbGVtZW50TnVtYmVyKCk7XHJcbiAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVXYWxsRWxlbWVudE51bWJlcigpIHtcclxuICAgIGNvbnN0IG9ubHlXYWxscyA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24/LmZpbHRlcihcclxuICAgICAgKGVsOiBhbnkpID0+IGVsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIlxyXG4gICAgKTtcclxuXHJcbiAgICBvbmx5V2FsbHM/LmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICBpdGVtLmVsZW1lbnROdW1iZXIgPSBpbmRleCArIDE7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlzT3ZlcmxhcHBpbmdXaXRoVG9sZXJhbmNlKFxyXG4gICAgYTogZmFicmljLk9iamVjdCxcclxuICAgIGI6IGZhYnJpYy5PYmplY3QsXHJcbiAgICB0b2xlcmFuY2U6IG51bWJlciA9IDBcclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGFCb3VuZHMgPSBhLmdldEJvdW5kaW5nUmVjdCgpO1xyXG4gICAgY29uc3QgYkJvdW5kcyA9IGIuZ2V0Qm91bmRpbmdSZWN0KCk7XHJcblxyXG4gICAgcmV0dXJuICEoXHJcbiAgICAgIChcclxuICAgICAgICBhQm91bmRzLmxlZnQgPiBiQm91bmRzLmxlZnQgKyBiQm91bmRzLndpZHRoIC0gdG9sZXJhbmNlIHx8IC8vIGEgaXMgdG8gdGhlIHJpZ2h0IG9mIGJcclxuICAgICAgICBhQm91bmRzLmxlZnQgKyBhQm91bmRzLndpZHRoIC0gdG9sZXJhbmNlIDwgYkJvdW5kcy5sZWZ0IHx8IC8vIGEgaXMgdG8gdGhlIGxlZnQgb2YgYlxyXG4gICAgICAgIGFCb3VuZHMudG9wID4gYkJvdW5kcy50b3AgKyBiQm91bmRzLmhlaWdodCAtIHRvbGVyYW5jZSB8fCAvLyBhIGlzIGJlbG93IGJcclxuICAgICAgICBhQm91bmRzLnRvcCArIGFCb3VuZHMuaGVpZ2h0IC0gdG9sZXJhbmNlIDwgYkJvdW5kcy50b3BcclxuICAgICAgKSAvLyBhIGlzIGFib3ZlIGJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3NvY2lhdGVkRWxlbWVudEluZm8oZml4dHVyZUlkOiBzdHJpbmcpOiB7XHJcbiAgICBhc3NvY2lhdGVkRWxlbWVudE51bWJlcjogbnVtYmVyO1xyXG4gICAgYXNzb2NpYXRlZEVsZW1lbnRUeXBlOiBzdHJpbmc7XHJcbiAgICB3YWxsRGlyZWN0aW9uOiBzdHJpbmc7XHJcbiAgfSB8IG51bGwge1xyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24pIHtcclxuICAgICAgaWYgKGVsZW1lbnQuZml4dHVyZXMgJiYgQXJyYXkuaXNBcnJheShlbGVtZW50LmZpeHR1cmVzKSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiBlbGVtZW50LmZpeHR1cmVzKSB7XHJcbiAgICAgICAgICBpZiAoZml4dHVyZS5faWQgPT09IGZpeHR1cmVJZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGFzc29jaWF0ZWRFbGVtZW50TnVtYmVyOiBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyID8/IG51bGwsXHJcbiAgICAgICAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnRUeXBlOiBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA/PyBudWxsLFxyXG4gICAgICAgICAgICAgIHdhbGxEaXJlY3Rpb246IGVsZW1lbnQuZGlyZWN0aW9uLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICB0b1BpeGVscyh2YWx1ZTogbnVtYmVyLCB1bml0OiBzdHJpbmcsIGRwaSA9IDIuOCkge1xyXG4gICAgbGV0IHBpeGVsczogbnVtYmVyO1xyXG5cclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgcGl4ZWxzID0gKHZhbHVlIC8gMjUuNCkgKiBkcGk7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICBwaXhlbHMgPSB2YWx1ZSAqIDEyICogZHBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE51bWJlcihwaXhlbHMudG9GaXhlZCg0KSk7XHJcbiAgfVxyXG5cclxuICBmcm9tUGl4ZWxzKHBpeGVsczogbnVtYmVyLCB1bml0OiBzdHJpbmcsIGRwaSA9IDIuOCk6IG51bWJlciB7XHJcbiAgICBsZXQgdmFsdWU6IG51bWJlcjtcclxuXHJcbiAgICAvLyBwaXhlbHMgPSBwaXhlbHMgPj0gdGhpcy53YWxsVGhpY2tuZXNzID8gcGl4ZWxzIC0gdGhpcy53YWxsVGhpY2tuZXNzIDogdGhpcy53YWxsVGhpY2tuZXNzO1xyXG5cclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgdmFsdWUgPSAocGl4ZWxzIC8gZHBpKSAqIDI1LjQ7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICB2YWx1ZSA9IHBpeGVscyAvICgxMiAqIGRwaSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB1bml0LiBVc2UgJ21tJyBvciAnZnQnLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlLnRvRml4ZWQoNCkpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29uZmlybUVkaXQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTGF5b3V0RWRpdENvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPGJvb2xlYW4+KChyZXN1bHQpID0+IHJlc3VsdCA9PT0gXCJva1wiKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbmZpcm1EZWxldGVXYWxsKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gXCJEZWxldGUgd2FsbFwiO1xyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgd2FsbCBhbG9uZyB3aXRoIGl0cyBhc3NvY2lhdGVkIGZpeHR1cmVzIGFuZCBlbGVtZW50cz9cIjtcclxuXHJcbiAgICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjxib29sZWFuPigocmVzdWx0KSA9PiByZXN1bHQgPT09IFwib2tcIik7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGaXh0dXJlQ29vcmRpbmF0ZXMoZml4dHVyZXM/OiBhbnkpIHtcclxuICAgIGNvbnN0IGZpeHR1cmVzRnJvbUNhbnZhcyA9XHJcbiAgICAgIGZpeHR1cmVzID8/XHJcbiAgICAgIHRoaXMuY2FudmFzXHJcbiAgICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAgIC5maWx0ZXIoKG9iaikgPT4gKG9iaiBhcyBhbnkpLmZpeHR1cmVJZClcclxuICAgICAgICAubWFwKChvYmopID0+ICh7XHJcbiAgICAgICAgICBpZDogKG9iaiBhcyBhbnkpLmZpeHR1cmVJZCxcclxuICAgICAgICAgIHg6IG9iai5sZWZ0LFxyXG4gICAgICAgICAgeTogb2JqLnRvcCxcclxuICAgICAgICAgIGFuZ2xlOiBvYmo/LmFuZ2xlID8/IDAsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgY29uc3QgcG9zTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiBmaXh0dXJlc0Zyb21DYW52YXMpIHtcclxuICAgICAgcG9zTWFwLnNldChmaXh0dXJlLmlkLCB7XHJcbiAgICAgICAgeDogdGhpcy5mcm9tUGl4ZWxzKGZpeHR1cmUueCwgXCJmdFwiKSxcclxuICAgICAgICB5OiB0aGlzLmZyb21QaXhlbHMoZml4dHVyZS55LCBcImZ0XCIpLFxyXG4gICAgICAgIGFuZ2xlOiBmaXh0dXJlLmFuZ2xlLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmZvckVhY2goKGNmOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgbGF0ZXN0Rml4dHVyZVBvcyA9IHBvc01hcC5nZXQoY2YuX2lkKTtcclxuICAgICAgaWYgKGxhdGVzdEZpeHR1cmVQb3MpIHtcclxuICAgICAgICBjZi5yZWxhdGl2ZVBvc2l0aW9uLnggPSBsYXRlc3RGaXh0dXJlUG9zLng7XHJcbiAgICAgICAgY2YucmVsYXRpdmVQb3NpdGlvbi55ID0gbGF0ZXN0Rml4dHVyZVBvcy55O1xyXG4gICAgICAgIGNmLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPSBsYXRlc3RGaXh0dXJlUG9zLmFuZ2xlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKHc6IGFueSkgPT4ge1xyXG4gICAgICB3Py5maXh0dXJlcz8uZm9yRWFjaCgod2Y6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdEZpeHR1cmVQb3MgPSBwb3NNYXAuZ2V0KHdmLl9pZCk7XHJcbiAgICAgICAgaWYgKGxhdGVzdEZpeHR1cmVQb3MpIHtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24ueCA9IGxhdGVzdEZpeHR1cmVQb3MueDtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24ueSA9IGxhdGVzdEZpeHR1cmVQb3MueTtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPSBsYXRlc3RGaXh0dXJlUG9zLmFuZ2xlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU90aGVyRWxlbWVudHNDb29yZGluYXRlcygpIHtcclxuICAgIGNvbnN0IG90aGVyc0Zyb21DYW52YXMgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoKG9iaikgPT4gKG9iaiBhcyBhbnkpLm9ialR5cGUgPT09IFwib3RoZXJzXCIpXHJcbiAgICAgIC5tYXAoKG9iaikgPT4gKHtcclxuICAgICAgICBpZDogKG9iaiBhcyBhbnkpLmRhdGE/Ll9pZCxcclxuICAgICAgICBsYWJlbDogKG9iaiBhcyBhbnkpLmRhdGE/LmZpeHR1cmVOYW1lLFxyXG4gICAgICAgIHg6IG9iai5sZWZ0LFxyXG4gICAgICAgIHk6IG9iai50b3AsXHJcbiAgICAgICAgYW5nbGU6IG9iaj8uYW5nbGUgPz8gMCxcclxuICAgICAgICB3aWR0aDogdGhpcy5mcm9tUGl4ZWxzKG9iai5nZXRTY2FsZWRXaWR0aCgpIC0gMiwgXCJmdFwiKSxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkSGVpZ2h0KCkgLSAyLCBcImZ0XCIpLFxyXG4gICAgICB9KSk7XHJcblxyXG4gICAgY29uc3QgcG9zTWFwID0gbmV3IE1hcDxcclxuICAgICAgc3RyaW5nLFxyXG4gICAgICB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyBhbmdsZTogbnVtYmVyOyBoOiBudW1iZXI7IHc6IG51bWJlciB9XHJcbiAgICA+KCk7XHJcbiAgICBmb3IgKGNvbnN0IG90aGVyIG9mIG90aGVyc0Zyb21DYW52YXMpIHtcclxuICAgICAgaWYgKG90aGVyLmlkKSB7XHJcbiAgICAgICAgcG9zTWFwLnNldChvdGhlci5pZCwge1xyXG4gICAgICAgICAgeDogdGhpcy5mcm9tUGl4ZWxzKG90aGVyLngsIFwiZnRcIiksXHJcbiAgICAgICAgICB5OiB0aGlzLmZyb21QaXhlbHMob3RoZXIueSwgXCJmdFwiKSxcclxuICAgICAgICAgIGFuZ2xlOiBvdGhlci5hbmdsZSxcclxuICAgICAgICAgIGg6IG90aGVyLmhlaWdodCxcclxuICAgICAgICAgIHc6IG90aGVyLndpZHRoLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cykpIHtcclxuICAgICAgdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cy5mb3JFYWNoKChlbDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0T3RoZXJzUG9zID0gcG9zTWFwLmdldChlbC5faWQpO1xyXG4gICAgICAgIGlmIChsYXRlc3RPdGhlcnNQb3MpIHtcclxuICAgICAgICAgIGVsLnJlbGF0aXZlUG9zaXRpb24ueCA9IGxhdGVzdE90aGVyc1Bvcy54O1xyXG4gICAgICAgICAgZWwucmVsYXRpdmVQb3NpdGlvbi55ID0gbGF0ZXN0T3RoZXJzUG9zLnk7XHJcbiAgICAgICAgICBlbC5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gbGF0ZXN0T3RoZXJzUG9zLmFuZ2xlO1xyXG4gICAgICAgICAgZWwuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSA9IGxhdGVzdE90aGVyc1Bvcy5oO1xyXG4gICAgICAgICAgZWwuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlID0gbGF0ZXN0T3RoZXJzUG9zLnc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKHc6IGFueSkgPT4ge1xyXG4gICAgICB3Py5vdGhlckVsZW1lbnRzPy5mb3JFYWNoKCh3ZjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0T3RoZXJzUG9zID0gcG9zTWFwLmdldCh3Zi5faWQpO1xyXG4gICAgICAgIGlmIChsYXRlc3RPdGhlcnNQb3MpIHtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24ueCA9IGxhdGVzdE90aGVyc1Bvcy54O1xyXG4gICAgICAgICAgd2YucmVsYXRpdmVQb3NpdGlvbi55ID0gbGF0ZXN0T3RoZXJzUG9zLnk7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gbGF0ZXN0T3RoZXJzUG9zLmFuZ2xlO1xyXG4gICAgICAgICAgd2YuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSA9IGxhdGVzdE90aGVyc1Bvcy5oO1xyXG4gICAgICAgICAgd2YuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlID0gbGF0ZXN0T3RoZXJzUG9zLnc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlV2FsbENvb3JkaW5hdGVzKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbHRlcigob2JqKSA9PiAob2JqIGFzIGFueSkub2JqVHlwZSA9PT0gXCJ3YWxsXCIpXHJcbiAgICAgIC5tYXAoKG9iaikgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB0b3A6IHRoaXMuZnJvbVBpeGVscyhvYmoudG9wLCBcImZ0XCIpLFxyXG4gICAgICAgICAgbGVmdDogdGhpcy5mcm9tUGl4ZWxzKG9iai5sZWZ0LCBcImZ0XCIpLFxyXG4gICAgICAgICAgd2lkdGg6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkV2lkdGgoKSAtIDAuMjcsIFwiZnRcIiksXHJcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkSGVpZ2h0KCkgLSAwLjI3LCBcImZ0XCIpLFxyXG4gICAgICAgICAgYW5nbGU6IG9iai5hbmdsZSxcclxuICAgICAgICAgIGVsZW1lbnREYXRhOiAob2JqIGFzIGFueSkuZGF0YSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBjb25zdCBwb3NNYXAgPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCB3YWxsIG9mIGRhdGEpIHtcclxuICAgICAgcG9zTWFwLnNldChcclxuICAgICAgICBgJHt3YWxsLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlfSR7d2FsbC5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyfWAsXHJcbiAgICAgICAgZGF0YS5maW5kKFxyXG4gICAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgICAgb2JqLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlID09PSB3YWxsLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlICYmXHJcbiAgICAgICAgICAgIG9iai5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyID09PSB3YWxsLmVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXJcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3OiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgd2FsbFBvcyA9IHBvc01hcC5nZXQoYCR7dy5lbGVtZW50VHlwZX0ke3cuZWxlbWVudE51bWJlcn1gKTtcclxuICAgICAgaWYgKHdhbGxQb3MpIHtcclxuICAgICAgICB3LnJlbGF0aXZlUG9zaXRpb24ueCA9IHdhbGxQb3MubGVmdDtcclxuICAgICAgICB3LnJlbGF0aXZlUG9zaXRpb24ueSA9IHdhbGxQb3MudG9wO1xyXG4gICAgICAgIHcuYW5nbGUgPSB3YWxsUG9zLmFuZ2xlO1xyXG4gICAgICAgIHcuZGlzdGFuY2UgPSB3YWxsUG9zLndpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUVudHJhbmNlQ29vcmRpbmF0ZXMoKSB7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKChvYmopID0+IChvYmogYXMgYW55KS5vYmpUeXBlID09PSBcImVudHJhbmNlXCIpXHJcbiAgICAgIC5tYXAoKG9iaikgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB0b3A6IHRoaXMuZnJvbVBpeGVscyhvYmoudG9wLCBcImZ0XCIpLFxyXG4gICAgICAgICAgbGVmdDogdGhpcy5mcm9tUGl4ZWxzKG9iai5sZWZ0LCBcImZ0XCIpLFxyXG4gICAgICAgICAgd2lkdGg6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkV2lkdGgoKSwgXCJmdFwiKSxcclxuICAgICAgICAgIGFuZ2xlOiBvYmouYW5nbGUsXHJcbiAgICAgICAgICBlbGVtZW50RGF0YTogKG9iaiBhcyBhbnkpLmRhdGEsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgY29uc3QgcG9zTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZW50cmFuY2Ugb2YgZGF0YSkge1xyXG4gICAgICBwb3NNYXAuc2V0KFxyXG4gICAgICAgIGAke2VudHJhbmNlLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlfSR7ZW50cmFuY2UuZWxlbWVudERhdGEuZWxlbWVudE51bWJlcn1gLFxyXG4gICAgICAgIGRhdGEuZmluZChcclxuICAgICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICAgIG9iai5lbGVtZW50RGF0YS5lbGVtZW50VHlwZSA9PT0gZW50cmFuY2UuZWxlbWVudERhdGEuZWxlbWVudFR5cGUgJiZcclxuICAgICAgICAgICAgb2JqLmVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXIgPT09IGVudHJhbmNlLmVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXJcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgZW50cmFuY2VQb3MgPSBwb3NNYXAuZ2V0KGAke3cuZWxlbWVudFR5cGV9JHt3LmVsZW1lbnROdW1iZXJ9YCk7XHJcbiAgICAgIGlmIChlbnRyYW5jZVBvcykge1xyXG4gICAgICAgIHcucmVsYXRpdmVQb3NpdGlvbi54ID0gZW50cmFuY2VQb3MubGVmdDtcclxuICAgICAgICB3LnJlbGF0aXZlUG9zaXRpb24ueSA9IGVudHJhbmNlUG9zLnRvcDtcclxuICAgICAgICB3LmFuZ2xlID0gZW50cmFuY2VQb3MuYW5nbGU7XHJcbiAgICAgICAgdy5kaXN0YW5jZSA9IGVudHJhbmNlUG9zLndpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUxheW91dChlZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoZWRpdE1vZGUpIHtcclxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jb25maXJtRWRpdCgpKSkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRQdWJsaXNoID0gdGhpcy50YXNrSW5mby5kaXNhYmxlZDtcclxuICAgICAgICB0aGlzLmxheW91dEZvcm0uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnRhc2tTdHlsZS5maXh0dXJlLmNsYXNzID09IFwicmV2aWV3UGVuZGluZ1wiKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFB1Ymxpc2ggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGVsZW1lbnQuZml4dHVyZXMgPSBlbGVtZW50LmZpeHR1cmVzLmZpbHRlcihcclxuICAgICAgICAoZml4dHVyZTogYW55KSA9PiAhZml4dHVyZT8uZ2hvc3QgJiYgZml4dHVyZS5maXh0dXJlTmFtZSAhPT0gXCJzcGFjZVwiXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlXHJcbiAgICAgIC5maWx0ZXIoKGZpeHR1cmU6IGFueSkgPT4gIWZpeHR1cmU/Lmdob3N0KVxyXG4gICAgICAubWFwKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB7IGFzc29jaWF0ZWRFbGVtZW50VHlwZSwgYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIsIC4uLnJlc3QgfSA9XHJcbiAgICAgICAgICBmaXh0dXJlO1xyXG4gICAgICAgIHJldHVybiByZXN0O1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMucmVvcmRlckZpeHR1cmUodGhpcy5mbG9vckRhdGEpO1xyXG5cclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgZGF0YTogdGhpcy5mbG9vckRhdGEsXHJcbiAgICAgIGVkaXRNb2RlOiBlZGl0TW9kZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZVN0b3JlUGxhbm8ocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIC8vIHRoaXMuZmxvb3JEYXRhID0gbnVsbFxyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgICAgIHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyh0aGlzLnBsYW5vRGF0YS5faWQpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gdXBkYXRlIGxheW91dFwiKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXNzaWduVGFzaygpIHtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgcmVkbzogZmFsc2UsXHJcbiAgICAgIGNoZWNrTGlzdE5hbWU6IFwiXCIsXHJcbiAgICAgIHN0b3JlOiB0aGlzLnBsYW5vRGF0YS5zdG9yZU5hbWUsXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLnBsYW5vRGF0YS5jbGllbnRJZCxcclxuICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJsYXlvdXRcIikge1xyXG4gICAgICAvLyB0aGlzLnVwZGF0ZUxheW91dCgpXHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiTGF5b3V0IFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwibGF5b3V0LXJlZG9cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkxheW91dCBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gdHJ1ZTtcclxuICAgICAgcGF5bG9hZC50YXNrSWQgPVxyXG4gICAgICAgIHRoaXMuc3RvcmVGZWVkYmFjay5sYXlvdXREYXRhW1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUZlZWRiYWNrLmxheW91dERhdGEubGVuZ3RoIC0gMVxyXG4gICAgICAgIF0udGFza0lkO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJGaXh0dXJlIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwiZml4dHVyZS1yZWRvXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJGaXh0dXJlIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSB0cnVlO1xyXG4gICAgICBwYXlsb2FkLnRhc2tJZCA9XHJcbiAgICAgICAgdGhpcy5zdG9yZUZlZWRiYWNrLmZpeHR1cmVEYXRhW1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUZlZWRiYWNrLmZpeHR1cmVEYXRhLmxlbmd0aCAtIDFcclxuICAgICAgICBdLnRhc2tJZDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwidm1cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIlZNIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwidm0tcmVkb1wiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiVk0gVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IHRydWU7XHJcbiAgICAgIHBheWxvYWQudGFza0lkID1cclxuICAgICAgICB0aGlzLnN0b3JlRmVlZGJhY2suVm1EYXRhW3RoaXMuc3RvcmVGZWVkYmFjay5WbURhdGEubGVuZ3RoIC0gMV0udGFza0lkO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFB1Ymxpc2h0YXNrUG9wdXBDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgc2Nyb2xsYWJsZTogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgIHdpbmRvd0NsYXNzOiBcImN1c3RvbS1oZWlnaHQtbW9kYWxcIiwgLy8gPC0tIEFkZCBhIGN1c3RvbSBjbGFzcyBoZXJlXHJcbiAgICB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0aGlzLnB1Ymxpc2hpbmdTdGF0ZTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmlucHV0RGF0YSA9IHBheWxvYWQ7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInN1Ym1pdFwiKSB7XHJcbiAgICAgICAgbGV0IHRhc2tUeXBlID0gdGhpcy5wdWJsaXNoaW5nU3RhdGU7XHJcbiAgICAgICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcInZtLXJlZG9cIikge1xyXG4gICAgICAgICAgdGFza1R5cGUgPSBcInZtXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlLXJlZG9cIikge1xyXG4gICAgICAgICAgdGFza1R5cGUgPSBcImZpeHR1cmVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImxheW91dC1yZWRvXCIpIHtcclxuICAgICAgICAgIHRhc2tUeXBlID0gXCJsYXlvdXRcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC5jb21tZW50cyAmJiByZXN1bHQuY29tbWVudHMgIT0gXCJcIikge1xyXG4gICAgICAgICAgbGV0IGNvbW1lbnRQYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBmbG9vcklkOiB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgICAgICAgIHBsYW5vSWQ6IHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICAgICAgICAgIHRhc2tUeXBlOiB0YXNrVHlwZSxcclxuICAgICAgICAgICAgY29tbWVudDogcmVzdWx0LmNvbW1lbnRzLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVHbG9iYWxDb21tZW50KGNvbW1lbnRQYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHt9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5jcmVhdGVUYXNrKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMudGFza0RldGFpbHModGhpcy5mbG9vckRhdGEucGxhbm9JZCwgdGhpcy5mbG9vckRhdGEuX2lkKTtcclxuICAgICAgICAgICAgICB0aGlzLmdldFN0b3JlRmVlZGJhY2soXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgICAgICAgICAgICAge31cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChyZXM/LmRhdGE/Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBwdWJsaXNoIHRhc2tcIik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tFZGl0KCkge1xyXG4gICAgaWYgKHRoaXMudGFza1N0eWxlLmZpeHR1cmUubmFtZSAhPT0gXCJBcHByb3ZlZFwiKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJyaWdodFwiLCB0cnVlKTtcclxuICAgICAgdGhpcy50b2dnbGVQYW5lbChcImxlZnRcIiwgZmFsc2UpO1xyXG5cclxuICAgICAgdGhpcy5kaXNhYmxlZFB1Ymxpc2ggPSB0cnVlO1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgdGhpcy5sYXlvdXRGb3JtLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIHRoaXMucmVuZGVyRmxvb3IoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXHJcbiAgICAgICAgYG1hbmFnZS9wbGFub2dyYW0vbWFuYWdlLXJvbGxvdXQ/cGxhbm9JZD0ke3RoaXMuZmxvb3JEYXRhLnBsYW5vSWR9JmZsb29ySWQ9JHt0aGlzLmZsb29yRGF0YS5faWR9YFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdGFza0RldGFpbHMocGxhbm9JZDogYW55LCBmbG9vcklkOiBhbnkpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMudGFza0luZm8gPSB7fTtcclxuICAgICAgdGhpcy50YXNrU3R5bGUgPSB7XHJcbiAgICAgICAgbGF5b3V0OiB7IG5hbWU6IFwiQXBwcm92ZWRcIiwgY2xhc3M6IFwiY29tcGxldGVkXCIgfSxcclxuICAgICAgICBmaXh0dXJlOiB7IG5hbWU6IFwiWWV0IFRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH0sXHJcbiAgICAgICAgdm06IHsgbmFtZTogXCJZZXQgVG8gQXNzaWduXCIsIGNsYXNzOiBcInlldFRvQXNzaWduXCIgfSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldFRhc2tJbmZvKHsgcGxhbm9JZCwgZmxvb3JJZCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFB1Ymxpc2ggPSByZXM/LmRhdGE/LmRpc2FibGVkIHx8IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnRhc2tJbmZvID0gcmVzPy5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAvLyBpZiAoZWxlLnR5cGUgPT0gXCJsYXlvdXRcIikge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMudGFza1N0eWxlLmxheW91dCA9IHRoaXMuZ2V0U3RhdHVzKFwibGF5b3V0XCIpO1xyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICBpZiAoZWxlLnR5cGUgPT0gXCJmaXh0dXJlXCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGFza1N0eWxlLmZpeHR1cmUgPSB0aGlzLmdldFN0YXR1cyhcImZpeHR1cmVcIik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChlbGUudHlwZSA9PSBcImZpeHR1cmVcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrU3R5bGUudm0gPSB0aGlzLnRhc2tTdHlsZS5maXh0dXJlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlUHVibGlzaGluZ1N0YXRlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gZ2V0IHRhc2sgZGV0YWlsc1wiKTtcclxuICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0dXModHlwZTogYW55KSB7XHJcbiAgICBsZXQgZGF0YSA9IHRoaXMudGFza0luZm8/LnRhc2tEZXRhaWxzPy5maW5kKChlbGU6IGFueSkgPT4gZWxlLnR5cGUgPT0gdHlwZSk7XHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZGF0YS5zdGF0dXMgPT0gXCJzdWJtaXRcIiAmJlxyXG4gICAgICAgIChkYXRhLmZlZWRiYWNrU3RhdHVzID09IFwiY29tcGxldGVcIiB8fCAhZGF0YT8uZmVlZGJhY2tTdGF0dXMpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB7IG5hbWU6IFwiQXBwcm92ZWRcIiwgY2xhc3M6IFwiY29tcGxldGVkXCIgfTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLnN0YXR1cyA9PSBcInN1Ym1pdFwiICYmIGRhdGEuZmVlZGJhY2tTdGF0dXMgPT0gXCJwZW5kaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4geyBuYW1lOiBcIlJldmlldyBQZW5kaW5nXCIsIGNsYXNzOiBcInJldmlld1BlbmRpbmdcIiB9O1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEuc3RhdHVzID09IFwic3VibWl0XCIgJiYgZGF0YS5mZWVkYmFja1N0YXR1cyA9PSBcImRpc2FncmVlXCIpIHtcclxuICAgICAgICByZXR1cm4geyBuYW1lOiBcIllldCB0byBBc3NpZ25cIiwgY2xhc3M6IFwieWV0VG9Bc3NpZ25cIiB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChkYXRhLnJlZG9TdGF0dXMgJiYgIWRhdGEuYnJlYWNoKSB7XHJcbiAgICAgICAgICByZXR1cm4geyBuYW1lOiBcIlJlZG9cIiwgY2xhc3M6IFwidGFza0Fzc2lnbmVkXCIgfTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEuYnJlYWNoKSB7XHJcbiAgICAgICAgICByZXR1cm4geyBuYW1lOiBcIkZsYWdnZWRcIiwgY2xhc3M6IFwiZmxhZ2dlZFwiIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IG5hbWU6IFwiVGFzayBBc3NpZ25lZFwiLCBjbGFzczogXCJ0YXNrQXNzaWduZWRcIiB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBuYW1lOiBcIllldCB0byBBc3NpZ25cIiwgY2xhc3M6IFwieWV0VG9Bc3NpZ25cIiB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0RWxlbWVudE51bWJlcihncm91cDogYW55KTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gZ3JvdXAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWUgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIGNsZWFyQ2FudmFzKCkge1xyXG4gICAgdGhpcy5jYW52YXMuY2xlYXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcmV2b2tlVGFzaygpIHtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgcmVkbzogZmFsc2UsXHJcbiAgICAgIGNoZWNrTGlzdE5hbWU6IFwiXCIsXHJcbiAgICAgIHN0b3JlOiB0aGlzLnBsYW5vRGF0YS5zdG9yZU5hbWUsXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLnBsYW5vRGF0YS5jbGllbnRJZCxcclxuICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgICBwbGFub0lkOiB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwibGF5b3V0XCIpIHtcclxuICAgICAgcGF5bG9hZC50eXBlID0gXCJsYXlvdXRcIjtcclxuICAgICAgLy8gdGhpcy51cGRhdGVMYXlvdXQoKVxyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkxheW91dCBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImxheW91dC1yZWRvXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJMYXlvdXQgVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQudHlwZSA9IFwibGF5b3V0XCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImZpeHR1cmVcIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkZpeHR1cmUgVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQudHlwZSA9IFwiZml4dHVyZVwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwiZml4dHVyZS1yZWRvXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJGaXh0dXJlIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnR5cGUgPSBcImZpeHR1cmVcIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwidm1cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIlZNIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnR5cGUgPSBcInZtXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJ2bS1yZWRvXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJWTSBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC50eXBlID0gXCJ2bVwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcGF5bG9hZC50YXNrSWQgPSB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscy5maW5kKFxyXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZS50eXBlID09IHBheWxvYWQudHlwZVxyXG4gICAgKT8udGFza0lkO1xyXG5cclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihTdG9yZVRhc2tSZXZva2VDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgc2Nyb2xsYWJsZTogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgIHdpbmRvd0NsYXNzOiBcImN1c3RvbS1oZWlnaHQtbW9kYWxcIiwgLy8gPC0tIEFkZCBhIGN1c3RvbSBjbGFzcyBoZXJlXHJcbiAgICB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0aGlzLnB1Ymxpc2hpbmdTdGF0ZTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmlucHV0RGF0YSA9IHBheWxvYWQ7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInN1Ym1pdFwiKSB7XHJcbiAgICAgICAgbGV0IHRhc2tUeXBlID0gdGhpcy5wdWJsaXNoaW5nU3RhdGU7XHJcbiAgICAgICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcInZtLXJlZG9cIikge1xyXG4gICAgICAgICAgdGFza1R5cGUgPSBcInZtXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlLXJlZG9cIikge1xyXG4gICAgICAgICAgdGFza1R5cGUgPSBcImZpeHR1cmVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImxheW91dC1yZWRvXCIpIHtcclxuICAgICAgICAgIHRhc2tUeXBlID0gXCJsYXlvdXRcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC5jb21tZW50cyAmJiByZXN1bHQuY29tbWVudHMgIT0gXCJcIikge1xyXG4gICAgICAgICAgbGV0IGNvbW1lbnRQYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBmbG9vcklkOiB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgICAgICAgIHBsYW5vSWQ6IHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICAgICAgICAgIHRhc2tUeXBlOiB0YXNrVHlwZSxcclxuICAgICAgICAgICAgY29tbWVudDogcmVzdWx0LmNvbW1lbnRzLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVHbG9iYWxDb21tZW50KGNvbW1lbnRQYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHt9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5yZXZva2VUYXNrKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMudGFza0RldGFpbHModGhpcy5mbG9vckRhdGEucGxhbm9JZCwgdGhpcy5mbG9vckRhdGEuX2lkKTtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QocmVzPy5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gcHVibGlzaCB0YXNrXCIpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGlkPVwibWFuYWdlLXBsYW5vXCI+XHJcbiAgPCEtLSBMb2FkaW5nIFN0YXRlIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJpc1BhZ2VMb2FkaW5nXCIgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbS0wXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJTa2VsZXRvblwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNrZWxldG9uTG9hZGVyXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2tlbGV0b25Mb2FkZXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza2VsZXRvbkxvYWRlclwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gQ29udGVudCAtLT5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6IGlzUGFnZUxvYWRpbmcgfVwiPlxyXG4gICAgPCEtLSBIZWFkZXIgQWNjb3JkaW9uIC0tPlxyXG4gICAgPGRpdiBpZD1cImhlYWRlclwiIG5nYkFjY29yZGlvbiAjYWNjb3JkaW9uPVwibmdiQWNjb3JkaW9uXCIgY2xhc3M9XCJteS00XCI+XHJcbiAgICAgIDxkaXYgbmdiQWNjb3JkaW9uSXRlbT1cImRldGFpbHNcIiBbY29sbGFwc2VkXT1cImZhbHNlXCI+XHJcbiAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25IZWFkZXIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHB4LTYgcHktM1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtNCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzPVwidGl0bGVcIj57eyBwbGFub0RhdGE/LnN0b3JlTmFtZSB9fSAtIFBsYW5vPC9oMj5cclxuICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJwbGFub0RhdGE/LmZsb29ycz8ubGVuZ3RoXCIgXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlbGVjdGVkRmxvb3JJZFwiIFxyXG4gICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidfaWQnXCJcclxuICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidmbG9vck5hbWUnXCIgXHJcbiAgICAgICAgICAgICAgW2RhdGFdPVwicGxhbm9EYXRhLmZsb29yc1wiPlxyXG4gICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTRcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFlZGl0Rml4dHVyZVwiIGNsYXNzPVwidXBkYXRlQ2xhc3NcIj5MYXN0IFVwZGF0ZToge3tmbG9vckRhdGE/LnVwZGF0ZWRBdH19PC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC00IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gRWRpdCBGaXh0dXJlIE1vZGUgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaXh0dXJlXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB0ZXh0LW5vd3JhcFwiIChjbGljayk9XCJvbkZpeHR1cmVQYWdlQ2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCIgKGNsaWNrKT1cIm9uRml4dHVyZVNhdmUoKVwiPlNhdmUgJiBDbG9zZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIE5vcm1hbCBNb2RlIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZWRpdEZpeHR1cmUgJiYgIVsndGFza0Fzc2lnbmVkJ10uaW5jbHVkZXModGFza1N0eWxlLmZpeHR1cmUuY2xhc3MpXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFB1Ymxpc2ggQnV0dG9ucyAtLT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicHVibGlzaGluZ1N0YXRlID09PSAnbGF5b3V0J1wiIFxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRQdWJsaXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgIFB1Ymxpc2ggTGF5b3V0IFZlcmlmaWNhdGlvblxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PT0gJ2xheW91dC1yZWRvJ1wiIFxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRQdWJsaXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgIFB1Ymxpc2ggTGF5b3V0IFJlZG9cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwdWJsaXNoaW5nU3RhdGUgPT09ICdmaXh0dXJlJ1wiIFxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRQdWJsaXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgIFB1Ymxpc2ggRml4dHVyZSBWZXJpZmljYXRpb25cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwdWJsaXNoaW5nU3RhdGUgPT09ICdmaXh0dXJlLXJlZG8nXCIgXHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXNzaWduVGFzaygpXCIgXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgUHVibGlzaCBGaXh0dXJlIFJlZG9cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwdWJsaXNoaW5nU3RhdGUgPT09ICd2bSdcIiBcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhc3NpZ25UYXNrKClcIiBcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkUHVibGlzaFwiPlxyXG4gICAgICAgICAgICAgICAgICBQdWJsaXNoIFZNIFZlcmlmaWNhdGlvblxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PT0gJ3ZtLXJlZG8nXCIgXHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXNzaWduVGFzaygpXCIgXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgUHVibGlzaCBWTSBSZWRvXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBSZXZva2UgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmV2b2tlVGFzaygpXCIgXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlsndGFza0Fzc2lnbmVkJ10uaW5jbHVkZXModGFza1N0eWxlLmZpeHR1cmUuY2xhc3MpICYmICFlZGl0Rml4dHVyZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcmVkIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtZS0yXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzY0MF81NTk0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuNjY2NjkgMTAuMDAxM0gxMy4zMzM0TTE4LjMzMzQgMTAuMDAxM0MxOC4zMzM0IDE0LjYwMzcgMTQuNjAyNCAxOC4zMzQ2IDEwIDE4LjMzNDZDNS4zOTc2NSAxOC4zMzQ2IDEuNjY2NjkgMTQuNjAzNyAxLjY2NjY5IDEwLjAwMTNDMS42NjY2OSA1LjM5ODkzIDUuMzk3NjUgMS42Njc5NyAxMCAxLjY2Nzk3QzE0LjYwMjQgMS42Njc5NyAxOC4zMzM0IDUuMzk4OTMgMTguMzMzNCAxMC4wMDEzWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNjQwXzU1OTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICBSZXZva2VcclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8YnV0dG9uIG5nYkFjY29yZGlvbkJ1dHRvbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICA8ZGl2IGlkPVwiaGVhZGVyXCIgY2xhc3M9XCJyb3cgbXgtMCBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgIDwhLS0gUGxhbm8gQ29tcGxldGlvbiAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY3Vyc29yOiB1bnNldDtcIiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIFBsYW5vIENvbXBsZXRpb24gJVxyXG4gICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCIlIG9mIG92ZXJhbGwgcGxhbm9ncmFtIGNvbXBsZXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE1MTdfMTI5ODA1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05IDEyVjlNOSA2SDkuMDA3NU0xNi41IDlDMTYuNSAxMy4xNDIxIDEzLjE0MjEgMTYuNSA5IDE2LjVDNC44NTc4NiAxNi41IDEuNSAxMy4xNDIxIDEuNSA5QzEuNSA0Ljg1Nzg2IDQuODU3ODYgMS41IDkgMS41QzEzLjE0MjEgMS41IDE2LjUgNC44NTc4NiAxNi41IDlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE1MTdfMTI5ODA1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiBzdHlsZT1cImhlaWdodDogNHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2dyZXNzLWJhclwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrSW5mbz8ucGxhbm9Qcm9ncmVzcyA8PSA1MFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnYmctd2FybmluZydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza0luZm8/LnBsYW5vUHJvZ3Jlc3MgPT09IDc1XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdiZy1wcmltYXJ5J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYmctc3VjY2VzcydcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiJ3dpZHRoOicgKyB0YXNrSW5mbz8ucGxhbm9Qcm9ncmVzcyArICclJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwidGFza0luZm8/LnBsYW5vUHJvZ3Jlc3NcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS12YWx1ZW1pbj1cIjBcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS12YWx1ZW1heD1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj57eyB0YXNrSW5mbz8ucGxhbm9Qcm9ncmVzcyB9fSU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIExheW91dCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY3Vyc29yOiB1bnNldDtcIiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgICAgICAgICAgICA8aDM+PGI+e3sgc3RvcmVNZXRyaWNzLmZsb29yQ291bnQgfX08L2I+IExheW91dDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5kaWNhdG9yIG10LTJcIiBbbmdDbGFzc109XCJ0YXNrU3R5bGUubGF5b3V0LmNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiIFtoaWRkZW5dPVwidGFza1N0eWxlLmxheW91dC5uYW1lICE9PSAnUmVkbydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDk4NF8yNzU2OSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTAuNSAyLjAwMDc3VjUuMDAwNzdNMC41IDUuMDAwNzdIMy41TTAuNSA1LjAwMDc3TDIuODIgMi44MjA3N0MzLjM1NzM3IDIuMjgzMTMgNC4wMjIxOSAxLjg5MDM3IDQuNzUyNCAxLjY3OTE2QzUuNDgyNjIgMS40Njc5NCA2LjI1NDQ1IDEuNDQ1MTUgNi45OTU4NiAxLjYxMjlDNy43MzcyNyAxLjc4MDY1IDguNDI0MSAyLjEzMzQ5IDguOTkyMjcgMi42Mzg0OEM5LjU2MDQzIDMuMTQzNDcgOS45OTE0MiAzLjc4NDE2IDEwLjI0NSA0LjUwMDc3TTExLjUgMTAuMDAwOFY3LjAwMDc3TTExLjUgNy4wMDA3N0g4LjVNMTEuNSA3LjAwMDc3TDkuMTggOS4xODA3N0M4LjY0MjYzIDkuNzE4NDEgNy45Nzc4MSAxMC4xMTEyIDcuMjQ3NiAxMC4zMjI0QzYuNTE3MzggMTAuNTMzNiA1Ljc0NTU1IDEwLjU1NjQgNS4wMDQxNCAxMC4zODg2QzQuMjYyNzMgMTAuMjIwOSAzLjU3NTkgOS44NjgwNSAzLjAwNzczIDkuMzYzMDZDMi40Mzk1NyA4Ljg1ODA3IDIuMDA4NTggOC4yMTczOCAxLjc1NSA3LjUwMDc3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjN0E1QUY4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80OTg0XzI3NTY5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cInRhc2tTdHlsZS5sYXlvdXQubmFtZSAhPT0gJ0ZsYWdnZWQnXCIgY2xhc3M9XCJtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIgNy41QzIgNy41IDIuNSA3IDQgN0M1LjUgNyA2LjUgOCA4IDhDOS41IDggMTAgNy41IDEwIDcuNVYxLjVDMTAgMS41IDkuNSAyIDggMkM2LjUgMiA1LjUgMSA0IDFDMi41IDEgMiAxLjUgMiAxLjVWNy41Wk0yIDcuNVYxMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNCNDIzMThcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHRhc2tTdHlsZS5sYXlvdXQubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRml4dHVyZXMgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImN1cnNvcjogdW5zZXQ7XCIgY2xhc3M9XCJjb2wgZmlsdGVyLXRhYlwiPlxyXG4gICAgICAgICAgICAgICAgPGgzPjxiPnt7IHN0b3JlTWV0cmljcy5maXh0dXJlQ291bnQgfX08L2I+IEZpeHR1cmVzPC9oMz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmRpY2F0b3IgbXQtMlwiIFtuZ0NsYXNzXT1cInRhc2tTdHlsZS5maXh0dXJlLmNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiIFtoaWRkZW5dPVwidGFza1N0eWxlLmZpeHR1cmUubmFtZSAhPT0gJ1JlZG8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQ5ODRfMjc1NjkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0wLjUgMi4wMDA3N1Y1LjAwMDc3TTAuNSA1LjAwMDc3SDMuNU0wLjUgNS4wMDA3N0wyLjgyIDIuODIwNzdDMy4zNTczNyAyLjI4MzEzIDQuMDIyMTkgMS44OTAzNyA0Ljc1MjQgMS42NzkxNkM1LjQ4MjYyIDEuNDY3OTQgNi4yNTQ0NSAxLjQ0NTE1IDYuOTk1ODYgMS42MTI5QzcuNzM3MjcgMS43ODA2NSA4LjQyNDEgMi4xMzM0OSA4Ljk5MjI3IDIuNjM4NDhDOS41NjA0MyAzLjE0MzQ3IDkuOTkxNDIgMy43ODQxNiAxMC4yNDUgNC41MDA3N00xMS41IDEwLjAwMDhWNy4wMDA3N00xMS41IDcuMDAwNzdIOC41TTExLjUgNy4wMDA3N0w5LjE4IDkuMTgwNzdDOC42NDI2MyA5LjcxODQxIDcuOTc3ODEgMTAuMTExMiA3LjI0NzYgMTAuMzIyNEM2LjUxNzM4IDEwLjUzMzYgNS43NDU1NSAxMC41NTY0IDUuMDA0MTQgMTAuMzg4NkM0LjI2MjczIDEwLjIyMDkgMy41NzU5IDkuODY4MDUgMy4wMDc3MyA5LjM2MzA2QzIuNDM5NTcgOC44NTgwNyAyLjAwODU4IDguMjE3MzggMS43NTUgNy41MDA3N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzdBNUFGOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDk4NF8yNzU2OVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCJ0YXNrU3R5bGUuZml4dHVyZS5uYW1lICE9PSAnRmxhZ2dlZCdcIiBjbGFzcz1cIm1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMiA3LjVDMiA3LjUgMi41IDcgNCA3QzUuNSA3IDYuNSA4IDggOEM5LjUgOCAxMCA3LjUgMTAgNy41VjEuNUMxMCAxLjUgOS41IDIgOCAyQzYuNSAyIDUuNSAxIDQgMUMyLjUgMSAyIDEuNSAyIDEuNVY3LjVaTTIgNy41VjExXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0I0MjMxOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3sgdGFza1N0eWxlLmZpeHR1cmUubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gVmlzdWFsIE1lcmNoYW5kaXNlIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjdXJzb3I6IHVuc2V0O1wiIGNsYXNzPVwiY29sIGZpbHRlci10YWJcIj5cclxuICAgICAgICAgICAgICAgIDxoMz48Yj57eyBzdG9yZU1ldHJpY3Mudm1Db3VudCB9fTwvYj4gVmlzdWFsIE1lcmNoYW5kaXNlPC9oMz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmRpY2F0b3IgbXQtMlwiIFtuZ0NsYXNzXT1cInRhc2tTdHlsZS52bS5jbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTJcIiBbaGlkZGVuXT1cInRhc2tTdHlsZS52bS5uYW1lICE9PSAnUmVkbydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDk4NF8yNzU2OSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTAuNSAyLjAwMDc3VjUuMDAwNzdNMC41IDUuMDAwNzdIMy41TTAuNSA1LjAwMDc3TDIuODIgMi44MjA3N0MzLjM1NzM3IDIuMjgzMTMgNC4wMjIxOSAxLjg5MDM3IDQuNzUyNCAxLjY3OTE2QzUuNDgyNjIgMS40Njc5NCA2LjI1NDQ1IDEuNDQ1MTUgNi45OTU4NiAxLjYxMjlDNy43MzcyNyAxLjc4MDY1IDguNDI0MSAyLjEzMzQ5IDguOTkyMjcgMi42Mzg0OEM5LjU2MDQzIDMuMTQzNDcgOS45OTE0MiAzLjc4NDE2IDEwLjI0NSA0LjUwMDc3TTExLjUgMTAuMDAwOFY3LjAwMDc3TTExLjUgNy4wMDA3N0g4LjVNMTEuNSA3LjAwMDc3TDkuMTggOS4xODA3N0M4LjY0MjYzIDkuNzE4NDEgNy45Nzc4MSAxMC4xMTEyIDcuMjQ3NiAxMC4zMjI0QzYuNTE3MzggMTAuNTMzNiA1Ljc0NTU1IDEwLjU1NjQgNS4wMDQxNCAxMC4zODg2QzQuMjYyNzMgMTAuMjIwOSAzLjU3NTkgOS44NjgwNSAzLjAwNzczIDkuMzYzMDZDMi40Mzk1NyA4Ljg1ODA3IDIuMDA4NTggOC4yMTczOCAxLjc1NSA3LjUwMDc3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjN0E1QUY4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80OTg0XzI3NTY5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cInRhc2tTdHlsZS52bS5uYW1lICE9PSAnRmxhZ2dlZCdcIiBjbGFzcz1cIm1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMiA3LjVDMiA3LjUgMi41IDcgNCA3QzUuNSA3IDYuNSA4IDggOEM5LjUgOCAxMCA3LjUgMTAgNy41VjEuNUMxMCAxLjUgOS41IDIgOCAyQzYuNSAyIDUuNSAxIDQgMUMyLjUgMSAyIDEuNSAyIDEuNVY3LjVaTTIgNy41VjExXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0I0MjMxOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3sgdGFza1N0eWxlLnZtLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQm9keSAtLT5cclxuICAgIDxkaXYgaWQ9XCJib2R5XCIgY2xhc3M9XCJyb3dcIiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBlZGl0Rml4dHVyZSB9XCI+XHJcbiAgICAgIDwhLS0gTGVmdCBDb2x1bW4gLS0+XHJcbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnY29sbGFwc2VkLWNvbCc6IGlzTGVmdFBhbmVsQ29sbGFwc2VkLCAnY29sLTMnOiAhaXNMZWZ0UGFuZWxDb2xsYXBzZWQgfVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzLWNhcmRcIj5cclxuICAgICAgICAgIDxmb3JtIFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6IGlzTGVmdFBhbmVsQ29sbGFwc2VkIH1cIiBbZm9ybUdyb3VwXT1cImxheW91dEZvcm1cIj5cclxuICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb24gYWNjb3JkaW9uPVwiTmdiQWNjb3JkaW9uXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSBXYWxscyBTZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRGb3JtV2FsbHMuY29udHJvbHMubGVuZ3RoOyBlbHNlIGFkZFdhbGxBY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUFycmF5TmFtZT1cIndhbGxzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdldEZvcm1XYWxscy5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiIFtuZ2JBY2NvcmRpb25JdGVtXT1cImkudG9TdHJpbmcoKVwiIGNsYXNzPVwibWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtYWluaGVhZGluZyBwLTBcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMiB3YWxsLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLmdldChcImVsZW1lbnRUeXBlXCIpPy52YWx1ZSB8IHRpdGxlY2FzZSB9fSB7eyBncm91cC5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYobGF5b3V0Rm9ybS5lbmFibGVkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMVwiIG5nYlRvb2x0aXA9XCJSb3RhdGUgdGhpcyB3YWxsLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyb3RhdGVXYWxsKGdldEVsZW1lbnROdW1iZXIoZ3JvdXApISk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTMuNzM3MzUgOC4yNTAxMUM0LjEyMTkzIDguMjQzNjIgNC40NDM3NyA4LjUyNzc2IDQuNDkzMzggOC44OTk5OEw0LjQ5OTkgOC45ODczNUw0LjUwMjYyIDkuMTU1MTZDNC41ODQzNCAxMS41NzQxIDYuNTcyNDMgMTMuNSA5IDEzLjVDOS4xNDAyMiAxMy41IDkuMjc5NTEgMTMuNDkzNiA5LjQxNzU2IDEzLjQ4MDlMOS4yMTk2NyAxMy4yODAzQzguOTI2NzggMTIuOTg3NCA4LjkyNjc4IDEyLjUxMjYgOS4yMTk2NyAxMi4yMTk3QzkuNTEyNTcgMTEuOTI2OCA5Ljk4NzQ0IDExLjkyNjggMTAuMjgwMyAxMi4yMTk3TDExLjc4MDMgMTMuNzE5N0MxMi4wNzMyIDE0LjAxMjYgMTIuMDczMiAxNC40ODc0IDExLjc4MDMgMTQuNzgwM0wxMC4yODAzIDE2LjI4MDNDOS45ODc0NCAxNi41NzMyIDkuNTEyNTcgMTYuNTczMiA5LjIxOTY3IDE2LjI4MDNDOC45MjY3OCAxNS45ODc0IDguOTI2NzggMTUuNTEyNiA5LjIxOTY3IDE1LjIxOTdMOS40NTgzNyAxNC45ODI3QzkuMzA2NDYgMTQuOTk0MiA5LjE1MzU5IDE1IDkgMTVDNS44MjY1MyAxNSAzLjIxNjY1IDEyLjUzMjEgMy4wMTI1IDkuMzgyODlMMy4wMDMxNSA5LjE5MzE0TDMuMDAwMTEgOS4wMTI2NUMyLjk5MzEyIDguNTk4NDkgMy4zMjMyIDguMjU3MDkgMy43MzczNSA4LjI1MDExWk04Ljc4MDMzIDEuNzE5NjdDOS4wNTA3IDEuOTkwMDMgOS4wNzE0OSAyLjQxNTQ2IDguODQyNzIgMi43MDk2N0w4Ljc4MDMzIDIuNzgwMzNMOC41NDE4NyAzLjAxNzI2QzguNjkzNzEgMy4wMDU3OCA4Ljg0NjUgMyA5IDNDMTIuMzEzNyAzIDE1IDUuNjg2MjkgMTUgOUMxNSA5LjQxNDIxIDE0LjY2NDIgOS43NSAxNC4yNSA5Ljc1QzEzLjgzNTggOS43NSAxMy41IDkuNDE0MjEgMTMuNSA5QzEzLjUgNi41MTQ3MiAxMS40ODUzIDQuNSA5IDQuNUM4Ljg1OTcgNC41IDguNzIwMzQgNC41MDY0IDguNTgyMjEgNC41MTkwOUw4Ljc4MDMzIDQuNzE5NjdDOS4wNzMyMyA1LjAxMjU2IDkuMDczMjMgNS40ODc0NCA4Ljc4MDMzIDUuNzgwMzNDOC41MDk5NyA2LjA1MDY5IDguMDg0NTUgNi4wNzE0OSA3Ljc5MDMzIDUuODQyNzJMNy43MTk2NyA1Ljc4MDMzTDYuMjE5NjcgNC4yODAzM0M1Ljk0OTMxIDQuMDA5OTcgNS45Mjg1MSAzLjU4NDU0IDYuMTU3MjggMy4yOTAzM0w2LjIxOTY3IDMuMjE5NjdMNy43MTk2NyAxLjcxOTY3QzguMDEyNTcgMS40MjY3OCA4LjQ4NzQ0IDEuNDI2NzggOC43ODAzMyAxLjcxOTY3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQ3NTQ2N1wiIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIwLjAwMDY0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTFcIiBuZ2JUb29sdGlwPVwiSW5zZXJ0IG5ldyB3YWxsIGJlbG93LlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdXYWxsKGdldEVsZW1lbnROdW1iZXIoZ3JvdXApISk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzYyXzgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkgOS43NUMxMS4wNzA3IDkuNzUgMTIuNzUgMTEuNDI5MyAxMi43NSAxMy41QzEyLjc1IDE1LjU3MDggMTEuMDcwNyAxNy4yNSA5IDE3LjI1QzYuOTI5MjUgMTcuMjUgNS4yNSAxNS41NzA4IDUuMjUgMTMuNUM1LjI1IDExLjQyOTMgNi45MjkyNSA5Ljc1IDkgOS43NVpNOS43NSAxMS4yNUg4LjI1VjEyLjc0OTNMNi43NSAxMi43NVYxNC4yNUw4LjI1IDE0LjI0OTNWMTUuNzVIOS43NVYxNC4yNDkzTDExLjI1IDE0LjI1VjEyLjc1TDkuNzUgMTIuNzQ5M1YxMS4yNVpNMTUgMi4yNUMxNS40MTQgMi4yNSAxNS43NSAyLjU4NiAxNS43NSAzVjcuNUMxNS43NSA3LjkxNCAxNS40MTQgOC4yNSAxNSA4LjI1SDNDMi41ODYgOC4yNSAyLjI1IDcuOTE0IDIuMjUgNy41VjNDMi4yNSAyLjU4NiAyLjU4NiAyLjI1IDMgMi4yNUgxNVpNMy43NSAzLjc1VjYuNzVIMTQuMjVWMy43NUgzLjc1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNDc1NDY3XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF82Ml84XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTFcIiBuZ2JUb29sdGlwPVwiUmVtb3ZlIHRoaXMgd2FsbCBhbmQgaXRzIGZpeHR1cmVzLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVXYWxsKGdldEVsZW1lbnROdW1iZXIoZ3JvdXApISk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzYzXzI1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMC43MDk0IDEuNUMxMS4zNTUxIDEuNSAxMS45MjgzIDEuOTEzMTQgMTIuMTMyNCAyLjUyNTY1TDEyLjU0MDYgMy43NUgxNUMxNS40MTQyIDMuNzUgMTUuNzUgNC4wODU3OSAxNS43NSA0LjVDMTUuNzUgNC45MTQyIDE1LjQxNDIgNS4yNDk5OSAxNSA1LjI1TDE0Ljk5ODEgNS4zMDM0NEwxNC4zNDc2IDE0LjQxMDNDMTQuMjYzNSAxNS41ODc4IDEzLjI4MzggMTYuNSAxMi4xMDM0IDE2LjVINS44OTY2OEM0LjcxNjI0IDE2LjUgMy43MzY1IDE1LjU4NzggMy42NTI0IDE0LjQxMDNMMy4wMDE5MSA1LjMwMzQ0QzMuMDAwNjIgNS4yODU1MSAyLjk5OTk4IDUuMjY3NjkgMi45OTk5NyA1LjI1QzIuNTg1NzcgNS4yNDk5OSAyLjI1IDQuOTE0MiAyLjI1IDQuNUMyLjI1IDQuMDg1NzkgMi41ODU3OSAzLjc1IDMgMy43NUg1LjQ1OTQzTDUuODY3NTQgMi41MjU2NUM2LjA3MTcyIDEuOTEzMTQgNi42NDQ5MyAxLjUgNy4yOTA1NyAxLjVIMTAuNzA5NFpNMTMuNDk4MSA1LjI1SDQuNTAxOTFMNS4xNDg1OCAxNC4zMDM0QzUuMTc2NjIgMTQuNjk2IDUuNTAzMiAxNSA1Ljg5NjY4IDE1SDEyLjEwMzRDMTIuNDk2OCAxNSAxMi44MjM0IDE0LjY5NiAxMi44NTE0IDE0LjMwMzRMMTMuNDk4MSA1LjI1Wk03LjUgNy41QzcuODg0NjQgNy41IDguMjAxNjMgNy43ODk1MiA4LjI0NDk1IDguMTYyNTNMOC4yNSA4LjI1VjEyQzguMjUgMTIuNDE0MiA3LjkxNDIyIDEyLjc1IDcuNSAxMi43NUM3LjExNTM3IDEyLjc1IDYuNzk4MzcgMTIuNDYwNSA2Ljc1NTA1IDEyLjA4NzVMNi43NSAxMlY4LjI1QzYuNzUgNy44MzU3OCA3LjA4NTc4IDcuNSA3LjUgNy41Wk0xMC41IDcuNUMxMC45MTQyIDcuNSAxMS4yNSA3LjgzNTc4IDExLjI1IDguMjVWMTJDMTEuMjUgMTIuNDE0MiAxMC45MTQyIDEyLjc1IDEwLjUgMTIuNzVDMTAuMDg1OCAxMi43NSA5Ljc1IDEyLjQxNDIgOS43NSAxMlY4LjI1QzkuNzUgNy44MzU3OCAxMC4wODU4IDcuNSAxMC41IDcuNVpNMTAuNzA5NCAzSDcuMjkwNTdMNy4wNDA1NyAzLjc1SDEwLjk1OTVMMTAuNzA5NCAzWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRjMyQjJCXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF82M18yNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keSBjbGFzcz1cInBzLTAgcGUtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtaW4taGVpZ2h0OiA1MHB4XCIgZG5kRHJvcHpvbmUgKGRuZERyb3ApPVwib25Ecm9wKCRldmVudCwgaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGaXh0dXJlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1GaXh0dXJlcyhpKS5jb250cm9scy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJmaXh0dXJlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZml4dHVyZSBvZiBnZXRGb3JtRml4dHVyZXMoaSkuY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmREcm9wem9uZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG5kRHJvcCk9XCJvbkRyb3AoJGV2ZW50LCBpLCBqKVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cImpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkbmREcmFnZ2FibGVdPVwieyB3YWxsSW5kZXg6IGksIGZpeHR1cmVJbmRleDogaiB9XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RuZEVmZmVjdEFsbG93ZWRdPVwiJ2FsbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93IGctMCBtYi01XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RuZERpc2FibGVEcmFnSWZdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRuZERyYWdJbWFnZVJlZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7IGN1cnNvcjogbGF5b3V0Rm9ybS5kaXNhYmxlZCA/ICdkZWZhdWx0JyA6ICdtb3ZlJywgb3BhY2l0eTogJzAuNScgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNXB4XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIm0gNC40OTYwOTQgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gNiAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSAtNiA2IGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSA2IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIC02IDYgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDYgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gMCAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJncmV5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZpeHR1cmVDb25maWdJZFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInX2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lRmllbGRdPVwiJ25hbWUnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImZpeHR1cmVUZW1wbGF0ZXNcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidGaXh0dXJlICcgKyAoaiArIDEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1YlRleHRGaWVsZF09XCInc3VidGV4dCdcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1lbmQganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZpeHR1cmUoJ3dhbGwnLCBqLCBpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IG1hcmdpbi1ib3R0b206IDE4cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTAgMTBcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05IDFMMSA5TTEgMUw5IDlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaW5rLWJ0blwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5ld0ZpeHR1cmUoJ3dhbGwnLCBpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGZpeHR1cmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIHN0eWxlPVwiYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjMDAwMDAwO1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE90aGVyIEVsZW1lbnRzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0V2FsbE90aGVyRWxlbWVudHMoaSkuY29udHJvbHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwib3RoZXJFbGVtZW50c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZml4dHVyZSBvZiBnZXRXYWxsT3RoZXJFbGVtZW50cyhpKS5jb250cm9sczsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBOYW1lXT1cImpcIiBjbGFzcz1cInJvdyBnLTAgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPkVsZW1lbnQge3sgaiArIDEgfX08L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gYm91bmQgdG8gJ3R5cGUnIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwib3RoZXJFbGVtZW50TGlzdFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2VsZW1lbnRMYWJlbCcgKyBqXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgY3VzdG9tIHRleHQgaW5wdXQgb25seSB3aGVuICdPdGhlcnMnIGlzIHNlbGVjdGVkIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihmaXh0dXJlLmdldCgndHlwZScpPy52YWx1ZSkgPT09ICdPdGhlcnMnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbXQtMlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjdXN0b21OYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBjdXN0b20gZWxlbWVudCBuYW1lXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWVuZCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlT3RoZXJFbGVtZW50KCd3YWxsJywgaiwgaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBtYXJnaW4tYm90dG9tOiAxOHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjEwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEwIDEwXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOSAxTDEgOU0xIDFMOSA5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGluay1idG5cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdPdGhlckVsZW1lbnRzKCd3YWxsJywgaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYWRkV2FsbEFjdGlvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdXYWxsKDApXCIgXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSB3LTEwMCBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgSW5zZXJ0IG5ldyB3YWxsXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICA8aHIgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggZGFzaGVkICMwMDAwMDA7XCIgLz5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8IS0tIEZsb29yIFNlY3Rpb24gLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBbbmdiQWNjb3JkaW9uSXRlbV09XCInZmxvb3InXCIgY2xhc3M9XCJtYi01XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1haW5oZWFkaW5nIHAtMFwiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTIgd2FsbC1sYWJlbFwiPkZsb29yPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keSBjbGFzcz1cInBzLTAgcGUtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtaW4taGVpZ2h0OiA1MHB4XCIgZG5kRHJvcHpvbmUgKGRuZERyb3ApPVwib25Ecm9wKCRldmVudCwgJ2Zsb29yJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGbG9vciBGaXh0dXJlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1GbG9vckZpeHR1cmVzLmNvbnRyb2xzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cImZsb29yRml4dHVyZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpeHR1cmUgb2YgZ2V0Rm9ybUZsb29yRml4dHVyZXMuY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmREcm9wem9uZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG5kRHJvcCk9XCJvbkRyb3AoJGV2ZW50LCAnZmxvb3InLCBqKVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cImpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkbmREcmFnZ2FibGVdPVwieyB3YWxsSW5kZXg6ICdmbG9vcicsIGZpeHR1cmVJbmRleDogaiB9XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RuZEVmZmVjdEFsbG93ZWRdPVwiJ2FsbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZG5kRGlzYWJsZURyYWdJZl09XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdyBnLTAgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRuZERyYWdJbWFnZVJlZiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogbW92ZTsgb3BhY2l0eTogMC41XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNXB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwibSA0LjQ5NjA5NCAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSA2IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIC02IDYgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDYgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gLTYgNiBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gNiAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSAwIDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImdyZXlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZml4dHVyZUNvbmZpZ0lkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidfaWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInbmFtZSdcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZml4dHVyZVRlbXBsYXRlc1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0ZpeHR1cmUgJyArIChqICsgMSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoXT1cInRydWVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1YlRleHRGaWVsZF09XCInc3VidGV4dCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWVuZCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRml4dHVyZSgnZmxvb3InLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IG1hcmdpbi1ib3R0b206IDE4cHhcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTBcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEwIDEwXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOSAxTDEgOU0xIDFMOSA5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGluay1idG5cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdGaXh0dXJlKCdmbG9vcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgZml4dHVyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aHIgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggZGFzaGVkICMwMDAwMDA7XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRmxvb3IgT3RoZXIgRWxlbWVudHMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRGb3JtRmxvb3JPdGhlckVsZW1lbnRzLmNvbnRyb2xzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cImZsb29yT3RoZXJFbGVtZW50c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZml4dHVyZSBvZiBnZXRGb3JtRmxvb3JPdGhlckVsZW1lbnRzLmNvbnRyb2xzOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPVwialwiIGNsYXNzPVwicm93IGctMCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+RWxlbWVudCB7eyBqICsgMSB9fTwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEcm9wZG93biBmb3IgdHlwZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCIndmFsdWUnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cIm90aGVyRWxlbWVudExpc3RcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidmbG9vckVsZW1lbnRMYWJlbCcgKyBqXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENvbmRpdGlvbmFsIGlucHV0IGZvciBjdXN0b20gbmFtZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoZml4dHVyZS5nZXQoJ3R5cGUnKT8udmFsdWUpID09PSAnT3RoZXJzJ1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIG10LTJcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3VzdG9tTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgY3VzdG9tIGVsZW1lbnQgbmFtZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1lbmQganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZU90aGVyRWxlbWVudCgnZmxvb3InLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IG1hcmdpbi1ib3R0b206IDE4cHhcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTBcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEwIDEwXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOSAxTDEgOU0xIDFMOSA5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGluay1idG5cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdPdGhlckVsZW1lbnRzKCdmbG9vcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIENlbnRlciBDb2x1bW4gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgb3ZlcmZsb3ctaGlkZGVuIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgPGRpdiBpZD1cImNhbnZhcy1jYXJkXCIgY2xhc3M9XCJjLWNhcmQgcG9zaXRpb24tcmVsYXRpdmVcIiAjY2FudmFzQ29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSBDYW52YXMgVmlldyAtLT5cclxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnZC1ub25lJzogc2VsZWN0ZWRWaWV3ID09PSAndHJlZScgfVwiPlxyXG4gICAgICAgICAgICA8Y2FudmFzIGlkPVwiYmFzZS1jYW52YXNcIiAjYmFzZUNhbnZhcz48L2NhbnZhcz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICA8IS0tIFRyZWUgVmlldyAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09ICd0cmVlJ1wiIGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICAgICAgPHN0b3JlLXBsYW5vLXRyZWUtdmlldyBbYWxsRml4dHVyZV09XCJhbGxGaXh0dXJlc1wiPjwvc3RvcmUtcGxhbm8tdHJlZS12aWV3PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIDwhLS0gVG9wIENvbnRyb2xzIC0tPlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cInRvcDogMjRweDsgbGVmdDogMjZweDsgcG9zaXRpb246IGFic29sdXRlO1wiIGlkPVwic2VnbWVudC1idG5cIiBjbGFzcz1cInBiLTVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgZ2FwLTRcIj5cclxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY3VzdG9tLXRhYnMgZC1mbGV4XCIgc3R5bGU9XCJ3aWR0aDogMjAwcHg7IG1hcmdpbjogMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gZmxleC1maWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGluayB3LTEwMCBoLTEwMFwiIFxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRWaWV3ID09PSAnZGV0YWlsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9ICdkZXRhaWwnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRGV0YWlsIFZpZXdcclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gZmxleC1maWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGluayB3LTEwMCBoLTEwMFwiIFxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRWaWV3ID09PSAndHJlZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZFZpZXcgPSAndHJlZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICBUcmVlIFZpZXdcclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBFbnRyYW5jZSBCdXR0b24gLS0+XHJcbiAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAqbmdJZj1cImxheW91dEZvcm0uZW5hYmxlZFwiIFxyXG4gICAgICAgICAgICBuZ2JUb29sdGlwPVwiWW91IGNhbiBhZGQgdXAgdG8gdHdvIGVudHJhbmNlcy5cIiBcclxuICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IDI0cHg7IHJpZ2h0OiAxOTBweFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIiBcclxuICAgICAgICAgICAgW2Rpc2FibGVUb29sdGlwXT1cImdldEVudHJhbmNlcz8ubGVuZ3RoIDwgMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldEVudHJhbmNlcz8ubGVuZ3RoID49IDJcIiBcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkTmV3RW50cmFuY2UoKVwiPlxyXG4gICAgICAgICAgICAgIEFkZCBFbnRyYW5jZVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gRWRpdCBCdXR0b24gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAqbmdJZj1cImxheW91dEZvcm0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUVkaXQgfHwgWyd0YXNrQXNzaWduZWQnXS5pbmNsdWRlcyh0YXNrU3R5bGUuZml4dHVyZS5jbGFzcylcIlxyXG4gICAgICAgICAgICBzdHlsZT1cInRvcDogMjRweDsgcmlnaHQ6IDE2NHB4XCIgXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIHBvc2l0aW9uLWFic29sdXRlIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRWRpdCgpXCI+XHJcbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTMyMl81MzI1KVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgZD1cIk0xNC4xNjY3IDIuNDk5OTNDMTQuMzg1NiAyLjI4MTA2IDE0LjY0NTUgMi4xMDc0NCAxNC45MzE0IDEuOTg4OTlDMTUuMjE3NCAxLjg3MDU0IDE1LjUyMzkgMS44MDk1NyAxNS44MzM0IDEuODA5NTdDMTYuMTQyOSAxLjgwOTU3IDE2LjQ0OTQgMS44NzA1NCAxNi43MzU0IDEuOTg4OTlDMTcuMDIxNCAyLjEwNzQ0IDE3LjI4MTIgMi4yODEwNiAxNy41MDAxIDIuNDk5OTNDMTcuNzE5IDIuNzE4OCAxNy44OTI2IDIuOTc4NjMgMTguMDExIDMuMjY0NkMxOC4xMjk1IDMuNTUwNTcgMTguMTkwNCAzLjg1NzA2IDE4LjE5MDQgNC4xNjY1OUMxOC4xOTA0IDQuNDc2MTIgMTguMTI5NSA0Ljc4MjYyIDE4LjAxMSA1LjA2ODU5QzE3Ljg5MjYgNS4zNTQ1NSAxNy43MTkgNS42MTQzOSAxNy41MDAxIDUuODMzMjZMNi4yNTAwOCAxNy4wODMzTDEuNjY2NzUgMTguMzMzM0wyLjkxNjc1IDEzLjc0OTlMMTQuMTY2NyAyLjQ5OTkzWlwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xMzIyXzUzMjVcIj5cclxuICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgRWRpdFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPCEtLSBSb3RhdGUgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IDI0cHg7IHJpZ2h0OiA5NHB4XCIgXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgKm5nSWY9XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBwb3NpdGlvbi1hYnNvbHV0ZSBiZy13aGl0ZSBzaGFkb3ctc21cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwicm90YXRlQ2FudmFzKGNhbnZhcyw5MClcIj5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMlwiIGhlaWdodD1cIjIyXCIgdmlld0JveD1cIjAgMCAyNiAyNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgIGQ9XCJNNi4zNjI2NSA3LjE3ODg3TDcuMTc2MjUgNi4zNjI4N0w1LjkwNDI1IDUuMDkyMDdMNS4wODk0NSA1LjkwNTY3TDYuMzYyNjUgNy4xNzg4N1pNMTUuNjcxIDYuMzY0MDdMMTkuNjM3OSAxMC4zMzA5TDIwLjkwOTkgOS4wNTc2OUwxNi45NDQyIDUuMDkwODdMMTUuNjcxIDYuMzY0MDdaTTE5LjYzNzkgMTguODI1N0wxOC44MjQzIDE5LjYzOTNMMjAuMDk2MyAyMC45MTAxTDIwLjkwOTkgMjAuMDk3N0wxOS42Mzc5IDE4LjgyNTdaTTEwLjMyOTUgMTkuNjM5M0w2LjM2MjY1IDE1LjY3MjVMNS4wOTA2NSAxNi45NDU3TDkuMDU2MjYgMjAuOTExM0wxMC4zMjk1IDE5LjYzOTNaTTE4LjgyNDMgMTkuNjM5M0MxNy42NTQzIDIwLjgwODEgMTYuODQwNyAyMS42MTkzIDE2LjE0NTkgMjIuMTQ5N0MxNS40NzE1IDIyLjY2NDUgMTUuMDE1NSAyMi44Mjg5IDE0LjU3NjMgMjIuODI4OVYyNC42Mjg5QzE1LjU2NzUgMjQuNjI4OSAxNi40MDI3IDI0LjIxNzMgMTcuMjM2NyAyMy41ODEzQzE4LjA1MDMgMjIuOTYwOSAxOC45NjM1IDIyLjA0NTMgMjAuMDk2MyAyMC45MTI1TDE4LjgyNDMgMTkuNjM5M1pNOS4wNTYyNiAyMC45MTEzQzEwLjE4OTEgMjIuMDQ1MyAxMS4xMDIzIDIyLjk1OTcgMTEuOTE1OSAyMy41ODEzQzEyLjc0OTkgMjQuMjE3MyAxMy41ODUxIDI0LjYyODkgMTQuNTc2MyAyNC42Mjg5VjIyLjgyODlDMTQuMTM3MSAyMi44Mjg5IDEzLjY4MjMgMjIuNjY0NSAxMy4wMDY3IDIyLjE0OTdDMTIuMzExOSAyMS42MTkzIDExLjQ5ODMgMjAuODA4MSAxMC4zMjk1IDE5LjYzOTNMOS4wNTYyNiAyMC45MTEzWk0xOS42Mzc5IDEwLjMzMDlDMjAuODA2NyAxMS40OTk3IDIxLjYxNzkgMTIuMzEzMyAyMi4xNDgzIDEzLjAwODFDMjIuNjYzMSAxMy42ODM3IDIyLjgyNzUgMTQuMTM4NSAyMi44Mjc1IDE0LjU3NzdIMjQuNjI3NUMyNC42Mjc1IDEzLjU4NjUgMjQuMjE1OSAxMi43NTEzIDIzLjU3OTkgMTEuOTE3M0MyMi45NTk1IDExLjEwMzcgMjIuMDQyNyAxMC4xOTA1IDIwLjkwOTkgOS4wNTc2OUwxOS42Mzc5IDEwLjMzMDlaTTIwLjkwOTkgMjAuMDk3N0MyMi4wNDM5IDE4Ljk2MzcgMjIuOTU4MyAxOC4wNTE3IDIzLjU3OTkgMTcuMjM4MUMyNC4yMTU5IDE2LjQwNDEgMjQuNjI3NSAxNS41Njg5IDI0LjYyNzUgMTQuNTc3N0gyMi44Mjc1QzIyLjgyNzUgMTUuMDE2OSAyMi42NjMxIDE1LjQ3MjkgMjIuMTQ4MyAxNi4xNDczQzIxLjYxNzkgMTYuODQyMSAyMC44MDY3IDE3LjY1NTcgMTkuNjM3OSAxOC44MjU3TDIwLjkwOTkgMjAuMDk3N1pNNy4xNzYyNSA2LjM2Mjg3QzguMzQ2MjUgNS4xOTQwNyA5LjE1OTg1IDQuMzgxNjcgOS44NTQ2NSAzLjg1MTI3QzEwLjUyOSAzLjMzNjQ3IDEwLjk4NSAzLjE3MzI3IDExLjQyNDIgMy4xNzMyN1YxLjM3MjA3QzEwLjQzMyAxLjM3MjA3IDkuNTk3ODUgMS43ODM2NyA4Ljc2Mzg1IDIuNDE5NjdDNy45NDkwNSAzLjA0MTI3IDcuMDM3MDUgMy45NTU2NyA1LjkwNDI1IDUuMDg4NDdMNy4xNzYyNSA2LjM2Mjg3Wk0xNi45NDQyIDUuMDkwODdDMTUuODExNCAzLjk1Njg3IDE0Ljg5ODIgMy4wNDEyNyAxNC4wODQ2IDIuNDE5NjdDMTMuMjUwNiAxLjc4MzY3IDEyLjQxNTQgMS4zNzIwNyAxMS40MjQyIDEuMzcyMDdWMy4xNzMyN0MxMS44NjM0IDMuMTczMjcgMTIuMzE4MiAzLjMzNjQ3IDEyLjk5MzggMy44NTEyN0MxMy42ODg2IDQuMzgxNjcgMTQuNTAyMiA1LjE5Mjg3IDE1LjY3MSA2LjM2MTY3TDE2Ljk0NDIgNS4wOTA4N1pNNS4wODk0NSA1LjkwMzI3QzMuOTU2NjUgNy4wMzYwNyAzLjA0MjI1IDcuOTQ4MDcgMi40MjA2NSA4Ljc2Mjg3QzEuNzg0NjUgOS41OTY4NyAxLjM3MzA1IDEwLjQzMjEgMS4zNzMwNSAxMS40MjMzSDMuMTczMDVDMy4xNzMwNSAxMC45ODQxIDMuMzM3NDUgMTAuNTI4MSAzLjg1MjI1IDkuODUzNjdDNC4zODI2NSA5LjE1ODg3IDUuMTkzODUgOC4zNDUyNyA2LjM2MjY1IDcuMTc1MjdMNS4wODk0NSA1LjkwMzI3Wk02LjM2MjY1IDE1LjY3MTNDNS4xOTM4NSAxNC41MDEzIDQuMzgyNjUgMTMuNjg3NyAzLjg1MjI1IDEyLjk5MjlDMy4zMzc0NSAxMi4zMTg1IDMuMTczMDUgMTEuODYyNSAzLjE3MzA1IDExLjQyMzNIMS4zNzMwNUMxLjM3MzA1IDEyLjQxNDUgMS43ODQ2NSAxMy4yNDk3IDIuNDIwNjUgMTQuMDgzN0MzLjA0MjI1IDE0Ljg5NzMgMy45NTY2NSAxNS44MTA1IDUuMDg5NDUgMTYuOTQzM0w2LjM2MjY1IDE1LjY3MTNaXCJcclxuICAgICAgICAgICAgICAgIGZpbGw9XCIjMUQyOTM5XCIgLz5cclxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIzLjIgNi45ODMyTDI1IDguMkMyNSA0LjU4MiAyMi40MDU2IDEuNTc5NiAxOSAxTTIuOCAxOS4wMTY4TDEgMTcuOEMxIDIxLjQxOCAzLjU5NDQgMjQuNDIwNCA3IDI1XCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMxRDI5MzlcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8IS0tIFN1Ym1pdCBCdXR0b24gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAqbmdJZj1cIiFsYXlvdXRGb3JtLmRpc2FibGVkXCIgXHJcbiAgICAgICAgICAgIHN0eWxlPVwidG9wOiAyNHB4OyByaWdodDogOTRweDtwYWRkaW5nOiA5cHggMjBweCAhaW1wb3J0YW50O1wiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBwb3NpdGlvbi1hYnNvbHV0ZSBiZy13aGl0ZSBzaGFkb3ctc21cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlTGF5b3V0KHRydWUpXCI+XHJcbiAgICAgICAgICAgIFN1Ym1pdFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPCEtLSBEb3dubG9hZCBCdXR0b24gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICBzdHlsZT1cInRvcDogMjRweDsgcmlnaHQ6IDI2cHhcIiBcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgcG9zaXRpb24tYWJzb2x1dGUgYmctd2hpdGUgc2hhZG93LXNtXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQ2FudmFzKClcIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIyXCIgaGVpZ2h0PVwiMjJcIiB2aWV3Qm94PVwiMCAwIDI2IDI2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICBzdHJva2U9XCIjMDAwMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMC4yNDAwMDAwMDAwMDAwMDAwNVwiPlxyXG4gICAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPlxyXG4gICAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlPVwiI0NDQ0NDQ1wiXHJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIwLjM4NFwiPjwvZz5cclxuICAgICAgICAgICAgICA8ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuNTUzNSAxNi41MDYxQzEyLjQxMTQgMTYuNjYxNSAxMi4yMTA2IDE2Ljc1IDEyIDE2Ljc1QzExLjc4OTQgMTYuNzUgMTEuNTg4NiAxNi42NjE1IDExLjQ0NjUgMTYuNTA2MUw3LjQ0NjQ4IDEyLjEzMTFDNy4xNjY5OCAxMS44MjU0IDcuMTg4MjIgMTEuMzUxIDcuNDkzOTIgMTEuMDcxNUM3Ljc5OTYzIDEwLjc5MiA4LjI3NDAyIDEwLjgxMzIgOC41NTM1MiAxMS4xMTg5TDExLjI1IDE0LjA2ODJWM0MxMS4yNSAyLjU4NTc5IDExLjU4NTggMi4yNSAxMiAyLjI1QzEyLjQxNDIgMi4yNSAxMi43NSAyLjU4NTc5IDEyLjc1IDNWMTQuMDY4MkwxNS40NDY1IDExLjExODlDMTUuNzI2IDEwLjgxMzIgMTYuMjAwNCAxMC43OTIgMTYuNTA2MSAxMS4wNzE1QzE2LjgxMTggMTEuMzUxIDE2LjgzMyAxMS44MjU0IDE2LjU1MzUgMTIuMTMxMUwxMi41NTM1IDE2LjUwNjFaXCJcclxuICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxRDI5MzlcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICBkPVwiTTMuNzUgMTVDMy43NSAxNC41ODU4IDMuNDE0MjIgMTQuMjUgMyAxNC4yNUMyLjU4NTc5IDE0LjI1IDIuMjUgMTQuNTg1OCAyLjI1IDE1VjE1LjA1NDlDMi4yNDk5OCAxNi40MjI1IDIuMjQ5OTYgMTcuNTI0OCAyLjM2NjUyIDE4LjM5MThDMi40ODc1NCAxOS4yOTE5IDIuNzQ2NDMgMjAuMDQ5NyAzLjM0ODM1IDIwLjY1MTZDMy45NTAyNyAyMS4yNTM2IDQuNzA4MTQgMjEuNTEyNSA1LjYwODI1IDIxLjYzMzVDNi40NzUyMiAyMS43NSA3LjU3NzU0IDIxLjc1IDguOTQ1MTMgMjEuNzVIMTUuMDU0OUMxNi40MjI1IDIxLjc1IDE3LjUyNDggMjEuNzUgMTguMzkxOCAyMS42MzM1QzE5LjI5MTkgMjEuNTEyNSAyMC4wNDk3IDIxLjI1MzYgMjAuNjUxNyAyMC42NTE2QzIxLjI1MzYgMjAuMDQ5NyAyMS41MTI1IDE5LjI5MTkgMjEuNjMzNSAxOC4zOTE4QzIxLjc1IDE3LjUyNDggMjEuNzUgMTYuNDIyNSAyMS43NSAxNS4wNTQ5VjE1QzIxLjc1IDE0LjU4NTggMjEuNDE0MiAxNC4yNSAyMSAxNC4yNUMyMC41ODU4IDE0LjI1IDIwLjI1IDE0LjU4NTggMjAuMjUgMTVDMjAuMjUgMTYuNDM1NCAyMC4yNDg0IDE3LjQzNjUgMjAuMTQ2OSAxOC4xOTE5QzIwLjA0ODIgMTguOTI1NyAxOS44Njc4IDE5LjMxNDIgMTkuNTkxIDE5LjU5MUMxOS4zMTQyIDE5Ljg2NzggMTguOTI1NyAyMC4wNDgyIDE4LjE5MTkgMjAuMTQ2OUMxNy40MzY1IDIwLjI0ODQgMTYuNDM1NCAyMC4yNSAxNSAyMC4yNUg5QzcuNTY0NTkgMjAuMjUgNi41NjM0NyAyMC4yNDg0IDUuODA4MTIgMjAuMTQ2OUM1LjA3NDM1IDIwLjA0ODIgNC42ODU3NyAxOS44Njc4IDQuNDA5MDEgMTkuNTkxQzQuMTMyMjUgMTkuMzE0MiAzLjk1MTggMTguOTI1NyAzLjg1MzE1IDE4LjE5MTlDMy43NTE1OSAxNy40MzY1IDMuNzUgMTYuNDM1NCAzLjc1IDE1WlwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMUQyOTM5XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBQYW5lbCBDb2xsYXBzZSBIYW5kbGVycyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UtaGFuZGxlciBsZWZ0XCIgKGNsaWNrKT1cInRvZ2dsZVBhbmVsKCdsZWZ0JylcIj5cclxuICAgICAgICAgIDxzdmcgKm5nSWY9XCIhaXNMZWZ0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4yNzMwOCAxMi42MzZMNC42MzY3MiA4Ljk5OTY0TDguMjczMDggNS4zNjMyOE0xMy4zNjQgMTIuNjM2TDkuNzI3NjMgOC45OTk2NEwxMy4zNjQgNS4zNjMyOFwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNMZWZ0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS43MjY5MiA1LjM2Mzk5TDEzLjM2MzMgOS4wMDAzNkw5LjcyNjkyIDEyLjYzNjdNNC42MzYwMSA1LjM2Mzk5TDguMjcyMzcgOS4wMDAzNkw0LjYzNjAxIDEyLjYzNjdcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjQ1NDU1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzZS1oYW5kbGVyIHJpZ2h0XCIgKGNsaWNrKT1cInRvZ2dsZVBhbmVsKCdyaWdodCcpXCI+XHJcbiAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNSaWdodFBhbmVsQ29sbGFwc2VkXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTguMjczMDggMTIuNjM2TDQuNjM2NzIgOC45OTk2NEw4LjI3MzA4IDUuMzYzMjhNMTMuMzY0IDEyLjYzNkw5LjcyNzYzIDguOTk5NjRMMTMuMzY0IDUuMzYzMjhcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjQ1NDU1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPHN2ZyAqbmdJZj1cIiFpc1JpZ2h0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS43MjY5MiA1LjM2Mzk5TDEzLjM2MzMgOS4wMDAzNkw5LjcyNjkyIDEyLjYzNjdNNC42MzYwMSA1LjM2Mzk5TDguMjcyMzcgOS4wMDAzNkw0LjYzNjAxIDEyLjYzNjdcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjQ1NDU1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gUmlnaHQgQ29sdW1uIC0tPlxyXG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2NvbGxhcHNlZC1jb2wnOiBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQsICdjb2wtMyc6ICFpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgfVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmZWVkYmFja0NvbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gRWRpdCBGaXh0dXJlIEJvZHkgLS0+XHJcbiAgICA8ZGl2IGlkPVwiZWRpdC1ib2R5XCIgY2xhc3M9XCJyb3dcIiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiAhZWRpdEZpeHR1cmUgfVwiPlxyXG4gICAgICA8dWwgY2xhc3M9XCJteC0zIG15LTUgbmF2IG5hdi1waWxsc1wiIHJvbGU9XCJ0YWJsaXN0XCI+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gY3Vyc29yLXBvaW50ZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XHJcbiAgICAgICAgICA8YSBcclxuICAgICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdEZpeHR1cmUgPSBmYWxzZTsgZWRpdEZpeHR1cmVTZWN0aW9uID0gJ2Jhc2ljLWRldGFpbHMnXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZWRpdEZpeHR1cmVTZWN0aW9uID09PSAnYmFzaWMtZGV0YWlscycgPyAnYWN0aXZlJyA6ICcnXCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmtcIiBcclxuICAgICAgICAgICAgcm9sZT1cInRhYlwiPlxyXG4gICAgICAgICAgICBCYXNpYyBkZXRhaWxzXHJcbiAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBjdXJzb3ItcG9pbnRlclwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cclxuICAgICAgICAgIDxhIFxyXG4gICAgICAgICAgICAoY2xpY2spPVwic3VibWl0Rml4dHVyZSA9IGZhbHNlOyBlZGl0Rml4dHVyZVNlY3Rpb24gPSAncHJvZHVjdHMnXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZWRpdEZpeHR1cmVTZWN0aW9uID09PSAncHJvZHVjdHMnID8gJ2FjdGl2ZScgOiAnJ1wiIFxyXG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rXCIgXHJcbiAgICAgICAgICAgIHJvbGU9XCJ0YWJcIj5cclxuICAgICAgICAgICAgUHJvZHVjdHNcclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGN1cnNvci1wb2ludGVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gICAgICAgICAgPGEgXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXRGaXh0dXJlID0gZmFsc2U7IGVkaXRGaXh0dXJlU2VjdGlvbiA9ICd2bXMnXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZWRpdEZpeHR1cmVTZWN0aW9uID09PSAndm1zJyA/ICdhY3RpdmUnIDogJydcIiBcclxuICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGlua1wiIFxyXG4gICAgICAgICAgICByb2xlPVwidGFiXCI+XHJcbiAgICAgICAgICAgIFZpc3VhbCBNZXJjaGFuZGlzZVxyXG4gICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdEZpeHR1cmVTZWN0aW9uID09PSAnYmFzaWMtZGV0YWlscydcIj5cclxuICAgICAgICAgIDxsaWItaW5zdGFuY2UtYmFzaWMtZGV0YWlscyBcclxuICAgICAgICAgICAgW2ZpeHR1cmVEYXRhXT1cInNlbGVjdGVkRml4dHVyZURhdGFcIiBcclxuICAgICAgICAgICAgW2VkaXRNb2RlXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbaXNTdWJtaXR0ZWRdPVwic3VibWl0Rml4dHVyZVwiIFxyXG4gICAgICAgICAgICAoc3VibWl0RXZlbnQpPVwib25GaXh0dXJlU3VibWl0KCRldmVudClcIj5cclxuICAgICAgICAgIDwvbGliLWluc3RhbmNlLWJhc2ljLWRldGFpbHM+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaXh0dXJlU2VjdGlvbiA9PT0gJ3Byb2R1Y3RzJ1wiPlxyXG4gICAgICAgICAgPGxpYi1pbnN0YW5jZS1wcm9kdWN0cyBcclxuICAgICAgICAgICAgW2ZpeHR1cmVEYXRhXT1cInNlbGVjdGVkRml4dHVyZURhdGFcIiBcclxuICAgICAgICAgICAgW2VkaXRNb2RlXT1cInRydWVcIiBcclxuICAgICAgICAgICAgW2lzU3VibWl0dGVkXT1cInN1Ym1pdEZpeHR1cmVcIlxyXG4gICAgICAgICAgICAoc3VibWl0RXZlbnQpPVwib25GaXh0dXJlU3VibWl0KCRldmVudClcIj5cclxuICAgICAgICAgIDwvbGliLWluc3RhbmNlLXByb2R1Y3RzPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIFxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICd2bXMnXCI+XHJcbiAgICAgICAgICA8bGliLWluc3RhbmNlLXZtcyBcclxuICAgICAgICAgICAgW2ZpeHR1cmVEYXRhXT1cInNlbGVjdGVkRml4dHVyZURhdGFcIiBcclxuICAgICAgICAgICAgW2VkaXRNb2RlXT1cInRydWVcIiBcclxuICAgICAgICAgICAgW2lzU3VibWl0dGVkXT1cInN1Ym1pdEZpeHR1cmVcIlxyXG4gICAgICAgICAgICAoc3VibWl0RXZlbnQpPVwib25GaXh0dXJlU3VibWl0KCRldmVudClcIj5cclxuICAgICAgICAgIDwvbGliLWluc3RhbmNlLXZtcz5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmVlZGJhY2tDb2xcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG5cclxuPCEtLSBUZW1wbGF0ZXMgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZmVlZGJhY2tDb2w+XHJcbiAgPGRpdiBjbGFzcz1cInMtY2FyZFwiPlxyXG4gICAgPGFwcC1tYW5hZ2Utc3RvcmUtcGxhbm8tZmVlZGJhY2sgXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6IGlzUmlnaHRQYW5lbENvbGxhcHNlZCAmJiAhZWRpdEZpeHR1cmV9XCIgXHJcbiAgICAgIFtjdXJyZW50UGxhbm9dPVwiZmxvb3JEYXRhXCJcclxuICAgICAgW3N0b3JlRmVlZGJhY2tdPVwic3RvcmVGZWVkYmFja1wiIFxyXG4gICAgICBbc2VsZWN0ZWRJc3N1ZV09XCJzZWxlY3RlZEZpeHR1cmVcIlxyXG4gICAgICAoaXNBcHByb3ZlZCk9XCJoYW5kbGVBcHByb3ZlclJlc3BvbnNlKCRldmVudClcIj5cclxuICAgIDwvYXBwLW1hbmFnZS1zdG9yZS1wbGFuby1mZWVkYmFjaz5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjaGVhZGVyU2tlbGV0b24+XHJcbiAgPGRpdiBjbGFzcz1cInJvdyBtLTAgZy0wIGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2hpbW1lciB3LTEwMCBwLTQgcm91bmRlZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgbXQtMCBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3NrZWxldG9uTG9hZGVyPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyIHJvdW5kZWRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICA8YnIgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19