qms-angular 1.1.41 → 1.1.43

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. package/bundles/qms-angular.umd.js +1569 -441
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/common/enum/data-type.enum.js +2 -1
  4. package/esm2015/lib/common/enum/process-classification.enum.js +6 -0
  5. package/esm2015/lib/common/qms-icon.const.js +116 -111
  6. package/esm2015/lib/common/themes.const.js +2 -2
  7. package/esm2015/lib/components/app-icon/icon-registry.service.js +5 -2
  8. package/esm2015/lib/components/related/common/video.const.js +3 -1
  9. package/esm2015/lib/components/related/content/related-content.component.js +2 -2
  10. package/esm2015/lib/components/related/list-other-related/list-related.component.js +5 -2
  11. package/esm2015/lib/components/related/model/popup-data.model.js +3 -1
  12. package/esm2015/lib/components/related/model/related-data.model.js +1 -1
  13. package/esm2015/lib/components/related/popup/related-popup.component.js +48 -32
  14. package/esm2015/lib/components/related/related.module.js +3 -2
  15. package/esm2015/lib/components/related/risk/analysis/analysis.component.js +2 -2
  16. package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +24 -4
  17. package/esm2015/lib/components/select-department-tree/select-department-tree.component.js +5 -4
  18. package/esm2015/lib/components/select-one/select-one.component.js +2 -2
  19. package/esm2015/lib/components/select-process-document/select-process-document.component.js +15 -11
  20. package/esm2015/lib/components/tree/model/tree-config.model.js +1 -1
  21. package/esm2015/lib/components/tree/tree.component.js +12 -4
  22. package/esm2015/lib/components/treeNew/model/tree-node.model.js +1 -1
  23. package/esm2015/lib/components/treeNew/model/tree.model.js +1 -1
  24. package/esm2015/lib/components/treeNew/tree.component.js +8 -4
  25. package/esm2015/lib/components/treeNew/tree.function.js +8 -4
  26. package/esm2015/lib/model/en.js +86 -2
  27. package/esm2015/lib/model/no.js +87 -3
  28. package/esm2015/lib/model/sv.js +437 -0
  29. package/esm2015/lib/qms-ckeditor-components/common/functions/common.function.js +15 -14
  30. package/esm2015/lib/qms-ckeditor-components/common/functions/resource.function.js +207 -0
  31. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.js +1 -1
  32. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-url.model.js +1 -1
  33. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +262 -29
  34. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +102 -36
  35. package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-imagemap.model.js +1 -1
  36. package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-video.model.js +16 -0
  37. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +39 -118
  38. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +10 -3
  39. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.js +7 -3
  40. package/esm2015/lib/services/translation-registry.service.js +7 -5
  41. package/fesm2015/qms-angular.js +1603 -503
  42. package/fesm2015/qms-angular.js.map +1 -1
  43. package/lib/common/enum/data-type.enum.d.ts +2 -1
  44. package/lib/common/enum/process-classification.enum.d.ts +4 -0
  45. package/lib/common/qms-icon.const.d.ts +1 -0
  46. package/lib/components/app-icon/icon-registry.service.d.ts +1 -0
  47. package/lib/components/related/common/video.const.d.ts +2 -0
  48. package/lib/components/related/content/related-content.component.d.ts +1 -1
  49. package/lib/components/related/list-other-related/list-related.component.d.ts +2 -2
  50. package/lib/components/related/model/popup-data.model.d.ts +3 -0
  51. package/lib/components/related/model/related-data.model.d.ts +1 -0
  52. package/lib/components/related/popup/related-popup.component.d.ts +7 -3
  53. package/lib/components/select-access-dialog/select-access-dialog.component.d.ts +3 -2
  54. package/lib/components/select-one/select-one.component.d.ts +1 -1
  55. package/lib/components/select-process-document/select-process-document.component.d.ts +5 -6
  56. package/lib/components/tree/model/tree-config.model.d.ts +1 -1
  57. package/lib/components/tree/tree.component.d.ts +1 -1
  58. package/lib/components/treeNew/model/tree-node.model.d.ts +1 -0
  59. package/lib/components/treeNew/model/tree.model.d.ts +1 -0
  60. package/lib/components/treeNew/tree.component.d.ts +5 -2
  61. package/lib/model/en.d.ts +84 -0
  62. package/lib/model/no.d.ts +84 -0
  63. package/lib/model/sv.d.ts +436 -0
  64. package/lib/qms-ckeditor-components/common/functions/common.function.d.ts +29 -10
  65. package/lib/qms-ckeditor-components/common/functions/resource.function.d.ts +194 -0
  66. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.d.ts +3 -0
  67. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-url.model.d.ts +2 -0
  68. package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.d.ts +13 -2
  69. package/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.d.ts +1 -0
  70. package/lib/qms-ckeditor-components/models/qms-ckeditor-imagemap.model.d.ts +1 -0
  71. package/lib/qms-ckeditor-components/models/qms-ckeditor-video.model.d.ts +10 -0
  72. package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +1 -2
  73. package/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.d.ts +2 -1
  74. package/lib/services/translation-registry.service.d.ts +1 -0
  75. package/package.json +1 -1
  76. package/qms-angular.metadata.json +1 -1
  77. package/src/assets/jointjs/scss/bpmn.scss +914 -906
  78. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
  79. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
  80. package/src/assets/qms-ckeditor-plugin/build/translations/no.js +1 -1
  81. package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-find-and-replace/src/findandreplaceui.js +223 -223
  82. package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-source-editing/lang/translations/no.po +21 -0
  83. package/src/assets/qms-ckeditor-plugin/src/plugins/fullscreen/qmsCKEditorFullscreenPlugin.js +52 -50
  84. package/src/assets/qms-ckeditor-plugin/src/plugins/heading/headingui.js +115 -115
  85. package/src/assets/qms-ckeditor-plugin/src/plugins/heading/utils.js +42 -42
  86. package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkcommand.js +1 -1
  87. package/src/assets/qms-ckeditor-plugin/src/plugins/media/mediaembedediting.js +281 -283
  88. package/src/assets/qms-ckeditor-plugin/src/plugins/media/theme/mediaembed.css +30 -30
  89. package/src/assets/qms-ckeditor-plugin/src/plugins/media/theme/mediaembedediting.css +57 -57
  90. package/src/assets/qms-ckeditor-plugin/src/plugins/table/theme/snippet.css +3877 -3876
  91. package/src/assets/qms-ckeditor-plugin/src/plugins/video/theme/video.css +17 -17
  92. package/src/assets/qms-ckeditor-plugin/src/plugins/video/theme/videoresize.css +33 -32
  93. package/src/assets/qms-ckeditor-plugin/src/plugins/video/video/videoediting.js +81 -75
  94. package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoresize/resizevideocommand.js +35 -35
  95. package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoresize/videoresizeediting.js +104 -92
  96. package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoupload/browsevideodialogcommand.js +69 -25
  97. package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoupload/uploadvideocommand.js +21 -21
  98. package/src/lib/components/related/popup/related-popup.component.scss +374 -350
  99. package/esm2015/lib/components/related/common/data-type.enum.js +0 -14
  100. package/esm2015/lib/components/select-one/common/data-type.enum.js +0 -14
  101. package/lib/components/related/common/data-type.enum.d.ts +0 -12
  102. package/lib/components/select-one/common/data-type.enum.d.ts +0 -12
@@ -229,25 +229,26 @@ export class SelectDepartmentTreeComponent {
229
229
  const treeNodes = this.treeDepartmentService.convertToTreeData(this.config.selectedList.map(x => (Object.assign(Object.assign({}, x), { parentId: x.groupId }))));
230
230
  this.execWithoutEmitNodeChangeEvent(() => {
231
231
  const selectedItems = [];
232
- const reMapTreeNode = (item) => {
232
+ const reMapTreeNode = (item, clearGroupId = false) => {
233
233
  var _a;
234
234
  const node = this.treeControl.dataNodes.find(x => x.id == item.id);
235
235
  const nestedNode = this.convertToNestedNode(node);
236
236
  node.groupId = item.groupId;
237
237
  node.isGroup = item.isGroup;
238
238
  this.checkListSelection.select(node);
239
- return Object.assign(Object.assign({}, nestedNode), { groupId: item.groupId, isGroup: item.isGroup, childCount: (_a = nestedNode.childCount) !== null && _a !== void 0 ? _a : this.getListChildrenOfNode(node).length, children: [] });
239
+ return Object.assign(Object.assign({}, nestedNode), { groupId: clearGroupId ? null : item.groupId, isGroup: item.isGroup, childCount: (_a = nestedNode.childCount) !== null && _a !== void 0 ? _a : this.getListChildrenOfNode(node).length, children: [] });
240
240
  };
241
241
  treeNodes.forEach(item => {
242
242
  const node = this.treeControl.dataNodes.find(x => x.id == item.id);
243
243
  if (!node)
244
244
  return;
245
245
  const nestedNode = this.convertToNestedNode(node);
246
- selectedItems.push(Object.assign(Object.assign({}, reMapTreeNode(item)), { children: item.children.map(x => reMapTreeNode(x)) }));
246
+ selectedItems.push(Object.assign(Object.assign({}, reMapTreeNode(item, true)), { children: item.children.map(x => reMapTreeNode(x)) }));
247
247
  });
248
248
  this.resultSelected.push(...selectedItems);
249
249
  });
250
250
  this.onValueChangeEvent.emit(this.resultSelected);
251
+ this._onSelectionNodeChangeEvent('added', this.resultSelected);
251
252
  this.cdRef.detectChanges();
252
253
  }
253
254
  _initListSelected() {
@@ -1176,4 +1177,4 @@ SelectDepartmentTreeComponent.propDecorators = {
1176
1177
  cdkVirtualScrollViewport: [{ type: ViewChild, args: [CdkVirtualScrollViewport,] }],
1177
1178
  paginatorSearch: [{ type: ViewChild, args: ['paginatorSearch',] }]
1178
1179
  };
1179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFtQyx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyTSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUF5QixNQUFNLGtCQUFrQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV0RixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQWtCdkcsTUFBTSxPQUFPLDZCQUE2QjtJQWdJeEMsWUFDVSxLQUF3QixFQUN4QixZQUEwQixFQUMxQixjQUFzQyxFQUN0QyxZQUE2QixFQUM3QixNQUFrQixFQUNuQixLQUE4QixFQUM5QixPQUFnQixFQUNoQixnQkFBa0MsRUFDakMscUJBQTJEO1FBUjNELFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUF3QjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFDN0IsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUNuQixVQUFLLEdBQUwsS0FBSyxDQUF5QjtRQUM5QixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDakMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFzQztRQXZJNUQsZUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxnQkFBVyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUkxQixXQUFNLEdBQVcsTUFBTSxDQUFDO1FBQ3hCLFdBQU0sR0FBa0MsSUFBSSw2QkFBNkIsRUFBRSxDQUFDO1FBQzVFLGlCQUFZLEdBQVcsR0FBRyxDQUFDO1FBQ3BDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQWV6QixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUNwRCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUN2RCw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBcUMsQ0FBQztRQUNqRixxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUN2RCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUN4RCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDM0MsMkJBQXNCLEdBQUcsSUFBSSxZQUFZLEVBQXlELENBQUM7UUFDbkcsOEJBQXlCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUN4RCw0QkFBdUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBS3ZELG1CQUFjLEdBQUcsMkJBQTJCLENBQUM7UUFDdEQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNOLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUM3Qyx5QkFBb0IsR0FBa0IsRUFBRSxDQUFDO1FBQ3pDLG1CQUFjLEdBQWtCLEVBQUUsQ0FBQztRQUMxQixpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFnQixFQUFFLENBQUMsQ0FBQztRQUN0RCxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBNEMsSUFBSSx3QkFBd0IsRUFBbUIsQ0FBQyxDQUFDO1FBQzdJLGlCQUFZLEdBQWtDLEVBQUUsQ0FBQztRQWN4QyxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQy9DLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUNyRCxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBRWYsb0JBQWUsR0FBRyxjQUFjLENBQUM7UUFDMUMscUJBQWdCLEdBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELHFCQUFnQixHQUFXLEVBQUUsQ0FBQztRQUNyQixzQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztRQUM1RCxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO1FBQzFELHVCQUFrQixHQUFHLElBQUksY0FBYyxDQUFrQixJQUFJLENBQUMsQ0FBQztRQUMvRCw2QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsSUFBSSxDQUFDLENBQUM7UUFNbEYsa0JBQWEsR0FBa0IsRUFBRSxDQUFDO1FBQ3pCLHFDQUFnQyxHQUFHLElBQUksT0FBTyxFQUFxQixDQUFDO1FBRXJGLHNCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEQsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNyRCwwQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzVDLDhCQUF5QixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFaEQsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDOUQsaUJBQVksR0FBRyxZQUFZLENBQUM7UUFDWCxpQkFBWSxHQUFHLENBQUMsSUFBaUIsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNuRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN2RSxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEIsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQzVHLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNsQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3RELFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNsQyxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDeEMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzlCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNsQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDaEMsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2hDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUMxQyxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDdEMsUUFBUSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUN0RCxRQUFRLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDO1lBQzVFLFFBQVEsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7WUFDcEUsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBRXRDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMzQyxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUE7UUFFZ0IsYUFBUSxHQUFHLENBQUMsSUFBcUIsRUFBRSxFQUFFLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEtBQUssQ0FBQztRQUNsRCxjQUFTLEdBQUcsQ0FBQyxJQUFpQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2pELGlCQUFZLEdBQUcsQ0FBQyxJQUFxQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzNFLGFBQVEsR0FBRyxDQUFDLENBQVMsRUFBRSxJQUFxQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRWhELHdCQUFtQixHQUF1QjtZQUN6RCxjQUFjLEVBQUUsS0FBSztZQUNyQixlQUFlLEVBQUUsS0FBSztZQUN0QixTQUFTLEVBQUUsS0FBSztZQUNoQixNQUFNLEVBQUUsS0FBSztTQUNkLENBQUE7UUFFUSw4QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFnbEMzQyxtQkFBYyxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUUsV0FBQyxPQUFBLE1BQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsMENBQUUsUUFBUSxDQUFBLEVBQUEsQ0FBQztRQW5rQ3hHLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsWUFBWTthQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7Z0JBQ2xCLE9BQU87WUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUNMLGdCQUFnQjtRQUNoQixjQUFjLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQy9ELGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkUsY0FBYyxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNoRSxjQUFjLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlELGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakUsY0FBYyxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNuRixJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzNDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDbkIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1IsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUF2S0QsSUFBYSxZQUFZLENBQUMsS0FBYTtRQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBS0QsSUFBSSxlQUFlO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUNuQixPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxJQUFJLHVCQUF1QjtRQUN6QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRUQsSUFBSSw4QkFBOEI7UUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQXlCRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLHVCQUF1QjtRQUN6QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9HLENBQUM7SUFFRCxJQUFJLHlCQUF5QjtRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLHVCQUF1QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqSixDQUFDO0lBbUhELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxFQUNoRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3JELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFDVixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxJQUFJLEtBQUssS0FBSyxDQUFDO2dCQUNiLElBQUksQ0FBQyx3QkFBd0I7b0JBQzNCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxtQkFBbUI7eUJBQzlDLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUNyRSxRQUFRLEVBQUUsRUFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQ3pDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUNOLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLOzRCQUM1QixPQUFPO3dCQUNULElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTs0QkFDckIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7NEJBQ3pCLE9BQU87eUJBQ1I7d0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xDLENBQUMsQ0FBQyxDQUFDO3lCQUNKLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFbEIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FDakMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDdkQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtZQUNyQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixPQUFPO1NBQ1I7UUFDRCx3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQWtCLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0csSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sY0FBYyxHQUFzQixDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDM0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNO1lBQ3hCLE9BQU87UUFDVCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQ2xDLE9BQU87UUFDVCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUEsaUNBQUssQ0FBQyxLQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFFLENBQUMsQ0FBQyxDQUFDO1FBRS9ILElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLEVBQUU7WUFDdkMsTUFBTSxhQUFhLEdBQWtCLEVBQUUsQ0FBQztZQUN4QyxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQWlCLEVBQUUsRUFBRTs7Z0JBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyQyx1Q0FDSyxVQUFVLEtBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQ3JCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUNyQixVQUFVLEVBQUUsTUFBQSxVQUFVLENBQUMsVUFBVSxtQ0FBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUM1RSxRQUFRLEVBQUUsRUFBRSxJQUNiO1lBQ0gsQ0FBQyxDQUFBO1lBRUQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25FLElBQUcsQ0FBQyxJQUFJO29CQUNOLE9BQU87Z0JBQ1QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsRCxhQUFhLENBQUMsSUFBSSxpQ0FBSyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQztZQUNuRyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1Riw4REFBOEQ7UUFDOUQsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztZQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQ2xGLElBQUksS0FBSyxHQUFHLENBQUM7Z0JBQ1gsU0FBUztZQUNYLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekI7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFM0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELDhDQUE4QztJQUN0QywrQkFBK0I7UUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsZ0NBQWdDO2lCQUNsQyxJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNULElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07b0JBQzVCLE9BQU87Z0JBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO3dCQUNsQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDdkMsSUFBSSxJQUFJOzRCQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztxQkFDakM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3BDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBQyxPQUFBLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsS0FBSSxNQUFBLENBQUMsQ0FBQyxRQUFRLDBDQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUEsRUFBQSxDQUFDLENBQUM7b0JBQy9HLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTt3QkFDVixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDdkMsSUFBSSxDQUFDLElBQUk7NEJBQ1AsU0FBUzt3QkFDWCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2xELFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzt3QkFDbEMsVUFBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO3dCQUNsQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3JELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFOzRCQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO2dDQUN2QixTQUFTOzRCQUNYLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQzFGLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtnQ0FDcEIsU0FBUzs0QkFDWCxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dDQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7Z0NBQ3BELFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0NBQy9DLFdBQVcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDOzRCQUM5QixDQUFDLENBQUMsQ0FBQzs0QkFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7eUJBQy9DO3FCQUNGO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0osU0FBUyxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNHLHdCQUF3QixDQUFDLFFBQXFDOztZQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJO2dCQUNuQixPQUFPO1lBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLENBQUMsUUFBUTtnQkFDWixNQUFNLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QyxDQUFDO0tBQUE7SUFFRCwrQkFBK0I7SUFDdkIsMkJBQTJCO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPO2FBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7WUFDaEMsSUFBRyxJQUFJLENBQUMseUJBQXlCO2dCQUMvQixPQUFPO1lBQ1QsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQW1DLEVBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUNoQixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNuQixNQUFNLFVBQVUsR0FBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDNUUsVUFBVSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUk7d0JBQ25CLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDbEUsTUFBTSxVQUFVLEdBQWdCLENBQUMsQ0FBQyxTQUFTLENBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7eUJBQ3hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDVixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUE7d0JBQ2pELFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzt3QkFDbEMsVUFBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO3dCQUNsQyxPQUFPLFVBQVUsQ0FBQztvQkFDcEIsQ0FBQyxDQUFDO3lCQUNELE9BQU8sRUFBRTt5QkFDVCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQ3hCLENBQUM7b0JBQ0YsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFO3dCQUNoQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDdkQsVUFBVSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO3dCQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUMxRSxJQUFJLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7NEJBQzFFLFdBQVcsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQzs0QkFDekMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7eUJBQ3ZDO3dCQUNELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUMzRCw0QkFBNEI7d0JBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3hKLE9BQU87cUJBQ1I7b0JBQ0QsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7d0JBQzFCLE9BQU87b0JBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3JDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO2dCQUNsQixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFO3dCQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUM5RCxJQUFJLENBQUMsS0FBSzs0QkFBRSxPQUFPO3dCQUNuQixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQzt3QkFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ2xFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNyRCxPQUFPO3FCQUNSO29CQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pFLElBQUksQ0FBQyxLQUFLLEVBQUU7d0JBQ1YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDOUQsSUFBSSxDQUFDLEtBQUs7NEJBQUUsT0FBTzt3QkFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ2xFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNyRCxPQUFPO3FCQUNSO29CQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2pFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUMxQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO3dCQUN2QyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFOzRCQUM5RSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUN6RCxJQUFJLENBQUMsS0FBSztnQ0FBRSxPQUFPOzRCQUNuQixLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEQsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7eUJBQ3REO3FCQUNGO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTywyQkFBMkIsQ0FBQyxLQUFzQyxFQUFFLElBQW1CO1FBQzdGLFFBQVEsS0FBSyxFQUFFO1lBQ2IsS0FBSyxTQUFTO2dCQUNaLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUM7b0JBQ2pDLE9BQU8sRUFBRSxJQUFJO29CQUNiLEtBQUssRUFBRSxFQUFFO29CQUNULE9BQU8sRUFBRSxFQUFFO29CQUNYLE1BQU0sRUFBRSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQztpQkFDdEQsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFDUixLQUFLLFNBQVM7Z0JBQ1osSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQztvQkFDakMsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsS0FBSyxFQUFFLEVBQUU7b0JBQ1QsT0FBTyxFQUFFLElBQUk7b0JBQ2IsTUFBTSxFQUFFLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDO2lCQUN0RCxDQUFDLENBQUM7Z0JBQ0gsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDO29CQUNqQyxPQUFPLEVBQUUsRUFBRTtvQkFDWCxLQUFLLEVBQUUsSUFBSTtvQkFDWCxPQUFPLEVBQUUsRUFBRTtvQkFDWCxNQUFNLEVBQUUsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUM7aUJBQ3RELENBQUMsQ0FBQztnQkFDSCxNQUFNO1lBQ1I7Z0JBQ0UsT0FBTztTQUNWO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsaUJBQWlCO2FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTs7b0JBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN2QyxJQUFJLFFBQVEsR0FBbUMsRUFBRSxDQUFDO29CQUNsRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO3dCQUNwQixRQUFRLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFtQyxDQUFBLENBQUMsS0FBSSxFQUFFLENBQUM7cUJBQ3JGO3lCQUNJO3dCQUNILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ3hELFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzRCQUM5QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7NEJBQ1IsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO3lCQUNvQixDQUFBLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3FCQUNwRDtvQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksaUNBQ2pCLElBQUksS0FDUCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLElBQUksQ0FBQyxJQUFJLEVBQzNGLFFBQVEsRUFBRTs0QkFDUixHQUFHLFFBQVE7NEJBQ1g7Z0NBQ0UsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dDQUNYLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTs2QkFDaEI7eUJBQ0YsRUFDRCxTQUFTLEVBQUUsS0FBSyxJQUNoQixDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsdUNBQXVDO29CQUNyRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3RCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM1RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQUM7YUFDQSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzNFLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1lBQ3RCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO2FBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQW1CO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxTQUFrQixFQUFFLE1BQWM7UUFDcEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSTtZQUNQLE9BQU87UUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFxQjtRQUNoQyxJQUFJLENBQUMsQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsVUFBVSxDQUFBO1lBQUUsT0FBTztRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3BGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQXNCO1FBQzNDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN0QixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQjtZQUM3RCxPQUFPO1FBQ1QsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QyxJQUFHLElBQUksQ0FBQyxRQUFRO29CQUNkLE9BQU87Z0JBQ1QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsRCxVQUFVLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN4RixPQUFPO1NBQ1I7UUFBQSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEMsSUFBRyxJQUFJLENBQUMsUUFBUTtnQkFDZCxPQUFPO1lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUM1RCxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QixPQUFPO2FBQ1I7WUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEQsSUFBSSxVQUFVLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDakUsT0FBTztZQUNULElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7aUJBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRTtnQkFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkIsT0FBTzthQUNSO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQXFCLEVBQUUscUJBQThCLElBQUk7UUFDbkUsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUTtZQUN4QixPQUFPO1FBQ1QsSUFBSSxrQkFBa0I7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvQixPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksa0JBQWtCLEVBQUU7WUFDeEYsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDcEcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDNUQsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBYztRQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQzdFLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxFQUFVLEVBQUUsR0FBRyxNQUE2QixFQUFRLEVBQUU7WUFDL0UsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDekIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEdBQUcsRUFBRTtnQkFDdkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO2dCQUMvRSxJQUFJLENBQUMsSUFBSSxFQUFDO29CQUNSLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO29CQUN6QixPQUFPO2lCQUNSO2dCQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQzt3QkFDckIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO3dCQUNYLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTt3QkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO3dCQUNmLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTt3QkFDL0IsUUFBUSxFQUFFLEVBQUU7cUJBQ0UsQ0FBQyxDQUFDO2dCQUNsQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNsRCxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2dCQUNsRixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN6RyxJQUFJLENBQUMsY0FBYyxHQUFHLGlDQUFLLFVBQVUsS0FBRSxRQUFRLEVBQUMsRUFBRSxJQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQ3pGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2xELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFxQjtRQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYztRQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLElBQUk7Z0JBQ1AsT0FBTztZQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBRyxPQUFpQjtRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUNmLE9BQU87UUFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFHLE9BQWlCO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ2YsT0FBTztRQUNULElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLE1BQWM7UUFDekIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSTtZQUNQLE9BQU87UUFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBcUI7UUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqRyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFxQjtRQUM5QixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlELE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDRyxpQkFBaUIsQ0FBQyxJQUFxQixFQUFFLFFBQTBEOztZQUN2RyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUMxQyxJQUFJLENBQUMsQ0FBQyxRQUFRO2dCQUNaLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDN0MsQ0FBQztLQUFBO0lBRUQsZUFBZSxDQUFDLElBQXFCO1FBQ25DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsRCxJQUFJLFVBQVUsRUFBRTtZQUNkLHNCQUFzQjtZQUN0QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRWhHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzNCLFVBQVUsQ0FBQyxPQUFPLEdBQUcsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLEVBQUUsQ0FBQTtnQkFDckMsT0FBTzthQUNSO1lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNFLFVBQVUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDeEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO2dCQUNsQixPQUFPO1lBQ1QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxLQUFLLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDekQsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEUsT0FBTztTQUNSO1FBQ0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRSxjQUFjLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztRQUNuRCxVQUFVLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUN6QyxPQUFPO0lBQ1QsQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUFxQjtRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBcUI7UUFDbEMsT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBcUI7UUFDdkMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gscUJBQXFCLENBQUMsSUFBcUI7UUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFFBQVE7WUFDWCxPQUFPLEVBQUUsQ0FBQztRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFlBQStCO1FBQzFELE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFxQjtRQUN2QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQWlCLENBQUM7SUFDN0QsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQWlCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBcUI7UUFDcEMsTUFBTSxVQUFVLEdBQXNCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sTUFBTSxFQUFFO1lBQ2IsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4QixNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBcUI7UUFDakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLFlBQVksR0FBRyxDQUFDO1lBQUUsT0FBTztRQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFlBQVksRUFBRTtnQkFDN0MsT0FBTyxXQUFXLENBQUM7YUFDcEI7U0FDRjtRQUNELE9BQU87SUFDVCxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQXFCO1FBQ25DLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztRQUN0RCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDckQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQ25ELE9BQU87SUFDVCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBYztRQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QjtZQUNoQyxPQUFPO1FBQ1QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUTs7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssMENBQUUsSUFBSSxFQUFFLE1BQUssRUFBRTtZQUM5RSxPQUFPO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlO1lBQ3ZCLE9BQU87UUFDVCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUErQztRQUM3RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFpQztRQUNqRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQWtDO1FBQ3RELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDMUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsSUFBaUM7UUFDdkQsSUFBRyxJQUFJLENBQUMsUUFBUTtZQUNkLE9BQU87UUFDVCxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDM0IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNoSDtRQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQzlCO1lBQ0UsS0FBSyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3JELElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxPQUFPO2FBQ1I7WUFDRCxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVLLHVCQUF1QixDQUFDLElBQWlDLEVBQUUsUUFBc0U7O1lBQ3JJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ2hELCtFQUErRTtZQUMvRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxDQUFDLFFBQVE7Z0JBQ1osTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUNuRCxDQUFDO0tBQUE7SUFFSyxzQkFBc0IsQ0FBQyxRQUF5Qzs7WUFDcEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDL0MsSUFBSSxDQUFDLENBQUMsUUFBUTtnQkFDWixNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTtnQkFDM0IsT0FBTztZQUNULEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3JDO1FBQ0gsQ0FBQztLQUFBO0lBRUQseUJBQXlCLENBQUMsSUFBaUM7UUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUMxRixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTs7Z0JBQy9CLE1BQU0sdUJBQXVCLEdBQUcsTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBQyxPQUFBLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsS0FBSSxNQUFBLENBQUMsQ0FBQyxRQUFRLDBDQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUEsRUFBQSxDQUFDLENBQUM7Z0JBQzVILHVCQUF1QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHdCQUF3QixDQUFDLElBQWlDLEVBQUUsUUFBaUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkgsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFO1lBQ2pCLElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7b0JBQ2pELE9BQU87Z0JBQ1QsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDaEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUMvQztpQkFDSTtnQkFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQy9DO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFVO1FBQzNCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUF1QixFQUFFLElBQWlCLEVBQUUsR0FBRyxhQUE4QjtRQUN2RyxJQUFJLENBQUMsSUFBSTtZQUNQLE9BQU87UUFDVCxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ25DLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3RCxRQUFRLEtBQUssRUFBRTtnQkFDYixLQUFLLEtBQUs7b0JBQ1IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO3dCQUNoQixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQzVELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUU7NEJBQzFCLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ3pCO3dCQUNELENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDekUsT0FBTztxQkFDUjtvQkFDRCxDQUFDLFdBQVcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN4QyxNQUFNO2dCQUNSLEtBQUssUUFBUTtvQkFDWCxJQUFJLENBQUMsV0FBVyxFQUFFO3dCQUNoQixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUMvRSxJQUFJLENBQUMsS0FBSzs0QkFDUixPQUFPO3dCQUNULE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzlELElBQUksS0FBSyxHQUFHLENBQUM7NEJBQ1gsT0FBTzt3QkFDVCxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ2hDLE9BQU87cUJBQ1I7b0JBQ0QsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUMxRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3RHLG1CQUFtQixJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztvQkFDbkYsTUFBTTtnQkFDUjtvQkFDRSxNQUFNO2FBQ1Q7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxPQUFPO1FBQzdCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQzNCLE9BQU87UUFDVCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLEVBQUU7WUFDeEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxJQUFHLElBQUksQ0FBQyxRQUFRO29CQUNkLFNBQVM7Z0JBQ1gsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzlFLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNuRCxJQUFJLENBQUMsU0FBUzt3QkFDWixTQUFTO29CQUNYLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMvRjtxQkFDSTtvQkFDSCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM3RixJQUFJLGVBQWUsQ0FBQyxNQUFNO3dCQUN4QixJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7aUJBQzlEO2dCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjO29CQUMvRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ2hEO1NBQ0Y7UUFDRCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSx5QkFBeUI7UUFDOUIsT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxHQUFjO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhO1FBQ3hCLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLHFDQUFxQyxFQUFFO1lBQ3BFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7U0FDaEM7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBcUI7UUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLE9BQU8sQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQWM7UUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLDJCQUEyQixNQUFNLEVBQUUsQ0FBWSxDQUFDO1FBQ3hHLE9BQU8sR0FBRyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxZQUFZLEtBQUksQ0FBQyxJQUFJLENBQUM7SUFDM0MsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBb0IsQ0FBQztJQUM3RSxDQUFDO0lBRU8sc0JBQXNCLENBQUMsSUFBcUI7UUFDbEQsSUFBSSxDQUFDLGlCQUFpQixJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsdUJBQXVCLENBQUMsT0FBaUI7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWEsRUFBRSxJQUFxQjtRQUMxQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7TUFLRTtJQUNGLGlCQUFpQixDQUFDLElBQXFCLEVBQUUsT0FBMEIsRUFBRSxFQUFFLE9BQTRCLFFBQVE7UUFDekcsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekcsSUFBSSxDQUFDLFVBQVU7WUFDYixPQUFPO1FBQ1QsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLFFBQVE7Z0JBQ1gsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDdkMsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxVQUFVLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztnQkFDaEMsTUFBTTtTQUNUO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNO2dCQUNyQixTQUFTO1lBQ1gsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTthQUN0QztTQUNGO1FBQ0QsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELHdDQUF3QztJQUNoQyxzQkFBc0IsQ0FBQyxNQUFjO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNuRCxPQUFPO1FBQ1QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLElBQUksZ0JBQWdCO1lBQ2xCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFxQjtRQUN4QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1lBQ25CLE9BQU87UUFDVCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUQsTUFBTSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxFQUFVO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDOUUsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFxQjtRQUNqQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1lBQ25CLE9BQU8sU0FBUyxDQUFDO1FBQ25CLE9BQU8sU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBMEIsRUFBRTtRQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDZCxPQUFPO1FBQ1QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hFLG9DQUFvQztRQUNwQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3hELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEQsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNwQyxVQUFVLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO2dCQUNwQyxPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsSUFBSTtnQkFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQXFCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBcUI7UUFDekMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixPQUFPO1NBQ1I7UUFFRCxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDeEMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNwQyxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUMsVUFBVSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUN4RCxVQUFVLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDO1FBQzlFLFVBQVUsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7SUFDeEUsQ0FBQztJQUVELHdCQUF3QixDQUFDLElBQXFCO1FBQzVDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRSxJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN4QyxVQUFVLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1NBQ3pEO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQXFCO1FBQ3hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsNkJBQTZCO0lBQy9CLENBQUM7SUFFTyw4QkFBOEIsQ0FBQyxNQUFrQjtRQUNyRCxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLE1BQU0sRUFBRSxDQUFDO1FBQ1QsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQztJQUMzQyxDQUFDOzs7WUFydENGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsNEJBQTRCO2dCQUN0Qyx1amVBQXNEO2dCQUV0RCxVQUFVLEVBQUU7b0JBQ1YsdUJBQXVCO2lCQUN4QjtnQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7OztZQXRDa0UsaUJBQWlCO1lBSzNFLFlBQVk7WUFPWixzQkFBc0I7WUFWdEIsZUFBZTtZQUZ5RSxVQUFVO1lBV2xHLHVCQUF1QjtZQWR2QixPQUFPO1lBRzZJLGdCQUFnQjtZQXFCcEssb0NBQW9DOzs7MkJBc0IxQyxLQUFLO3FCQUdMLEtBQUs7cUJBQ0wsS0FBSzsyQkFDTCxLQUFLOzRCQWdCTCxNQUFNO2tDQUNOLE1BQU07aUNBQ04sTUFBTTt1Q0FDTixNQUFNOytCQUNOLE1BQU07Z0NBQ04sTUFBTTs4QkFDTixNQUFNO3FDQUNOLE1BQU07d0NBQ04sTUFBTTtzQ0FDTixNQUFNO3VDQUVOLFNBQVMsU0FBQyx3QkFBd0I7OEJBQ2xDLFNBQVMsU0FBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xyXG5pbXBvcnQgeyBGbGF0VHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XHJcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRJY29uUmVnaXN0cnkgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0VHJlZUZsYXREYXRhU291cmNlLCBNYXRUcmVlRmxhdHRlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWxheSwgZmlsdGVyLCBtYXAsIHBhaXJ3aXNlLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFFNU0ZsYXROb2RlVHJlZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWZsYXQtbm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU1RyZWVOb2RlIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9xbXMtdHJlZS1ub2RlLm1vZGVsJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUU1TSWNvblJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4uL2FwcC1pY29uL2ljb24tcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFBhZ2luYXRpb25TaXplLCBRTVNQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9xbXMtcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgSXRlbUljb25UeXBlIH0gZnJvbSAnLi4vcmVsYXRlZC9jb21tb24vaXRlbS1pY29uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IEFuaW1hdGlvblRyZWVEZXBhcnRtZW50IH0gZnJvbSAnLi9hbmltYXRpb24vYW5pbWF0aW9uJztcclxuaW1wb3J0IHsgTW9kZURlcGFydG1lbnRUcmVlZVZpZXdFbnVtIH0gZnJvbSAnLi9lbnVtL21vZGUtZGVwYXJ0bWVudC10cmVlLXZpZXcuZW51bSc7XHJcbmltcG9ydCB7IFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbCB9IGZyb20gJy4vbW9kZWwvZGVwYXJ0bWVudC1wYWdpbmcubW9kZWwnO1xyXG5pbXBvcnQgeyBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iLCBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwgfSBmcm9tICcuL21vZGVsL2RlcGFydG1lbnQtc2VhcmNoLXJlc3VsdC5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbC9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbmZpZyc7XHJcbmltcG9ydCB7IElTZWxlY3Rpb25Ob2RlQ2hhbmdlIH0gZnJvbSAnLi9tb2RlbC9zZWxlY3Rpb24tY2hhbmdlLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUtZ2xvYmFsLnNlcnZpY2UnO1xyXG5cclxuaW50ZXJmYWNlIElIYW5kbGluZ0V2ZW50TGF6eSB7XHJcbiAgY2hlY2tBbGxTZWFyY2g6IGJvb2xlYW47XHJcbiAgY2hlY2tJdGVtU2VhcmNoOiBib29sZWFuO1xyXG4gIGNoZWNrTm9kZTogYm9vbGVhbjtcclxuICBleHBhbmQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncW1zLXNlbGVjdC1kZXBhcnRtZW50LXRyZWUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgQW5pbWF0aW9uVHJlZURlcGFydG1lbnRcclxuICBdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VsZWN0RGVwYXJ0bWVudFRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQge1xyXG4gIExBTkc6IGFueTtcclxuICByZWFkb25seSBzcGlubmVyQXJyID0gbmV3IEFycmF5KDEyKS5maWxsKDApO1xyXG4gIGFyclNrZWxldG9uID0gbmV3IEFycmF5KDYpLmZpbGwoMCk7XHJcbiAgQElucHV0KCkgc2V0IHJvd3NTa2VsZXRvbih2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmFyclNrZWxldG9uID0gbmV3IEFycmF5KHZhbHVlKS5maWxsKDApO1xyXG4gIH1cclxuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZyA9ICc1MHZoJztcclxuICBASW5wdXQoKSBjb25maWc6IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlQ29uZmlnID0gbmV3IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlQ29uZmlnKCk7XHJcbiAgQElucHV0KCkgbWF4V2lkdGhOb2RlOiBudW1iZXIgPSA2NTA7XHJcbiAgaXNJbmNsdWRlQ2hpbGRyZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBnZXQgZGVwYXJ0bWVudFJvb3RzKCkge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVDb250cm9sKVxyXG4gICAgICByZXR1cm47XHJcbiAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKG5vZGUgPT4gbm9kZS5sZXZlbCA9PT0gMCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNBbGxEZXBhcnRtZW50U2VsZWN0ZWQoKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLnRyZWVDb250cm9sICYmIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmV2ZXJ5KG5vZGUgPT4gdGhpcy5pc1NlbGVjdGVkTm9kZShub2RlKSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNJbmRldGVybWluYXRlQ2hlY2tib3hBbGxUcmVlKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmlzQWxsRGVwYXJ0bWVudFNlbGVjdGVkICYmIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgb25TZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBvblBhZ2luZ1NlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uVmFsdWVDaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UU1TVHJlZU5vZGVbXT4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxJU2VsZWN0aW9uTm9kZUNoYW5nZTxRTVNUcmVlTm9kZT4+KCk7XHJcbiAgQE91dHB1dCgpIG9uQ2hlY2tOb2RlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU0ZsYXROb2RlVHJlZT4oKTtcclxuICBAT3V0cHV0KCkgb25FeHBhbmROb2RlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU0ZsYXROb2RlVHJlZT4oKTtcclxuICBAT3V0cHV0KCkgb25Mb2FkTW9yZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBvbkNoZWNrSXRlbVNlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0YXRlOiBib29sZWFuLCBpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwgfT4oKTtcclxuICBAT3V0cHV0KCkgb25DaGVja0FsbEl0ZW1TZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgdG9nZ2xlSW5jbHVkZUNoaWxkRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KSBjZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcclxuICBAVmlld0NoaWxkKCdwYWdpbmF0b3JTZWFyY2gnKSBwYWdpbmF0b3JTZWFyY2g6IFFNU1BhZ2luYXRvckNvbXBvbmVudDtcclxuXHJcbiAgcmVhZG9ubHkgTU9ERV9WSUVXX0VOVU0gPSBNb2RlRGVwYXJ0bWVudFRyZWVlVmlld0VudW07XHJcbiAgSVRFTV9TSVpFID0gNTA7XHJcbiAgcmVhZG9ubHkgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcmVzdWx0U2VhcmNoU2VsZWN0ZWQ6IFFNU1RyZWVOb2RlW10gPSBbXTtcclxuICByZXN1bHRTZWxlY3RlZDogUU1TVHJlZU5vZGVbXSA9IFtdO1xyXG4gIHJlYWRvbmx5IGdldERhdGFUcmVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TVHJlZU5vZGVbXT4oW10pO1xyXG4gIHJlYWRvbmx5IHNlYXJjaERlcGFydG1lbnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPj4obmV3IFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbDxRTVNGbGF0Tm9kZVRyZWU+KCkpO1xyXG4gIHJlc3VsdFNlYXJjaDogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsW10gPSBbXTtcclxuXHJcbiAgZ2V0IGN1cnJlbnRUcmVlRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLmdldERhdGFUcmVlJC5nZXRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzU2VsZWN0QWxsUmVzdWx0U2VhcmNoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aCAmJiB0aGlzLnJlc3VsdFNlYXJjaC5ldmVyeSh4ID0+IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoeCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluZGV0ZXJtaW5hdGVTZWFyY2hSZXN1bHQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuaXNTZWxlY3RBbGxSZXN1bHRTZWFyY2ggJiYgISF0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGggJiYgdGhpcy5yZXN1bHRTZWFyY2guc29tZSh4ID0+IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoeCkpO1xyXG4gIH1cclxuXHJcbiAgcmVhZG9ubHkgZ2V0SW5kZXhWaWV3JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICByZWFkb25seSBzY3JvbGxUb05vZGVFdmVudCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgcmVhZG9ubHkgZ2V0QWN0aXZlTm9kZUV2ZW50JCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBhY3RpdmVOb2RlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgcmVhZG9ubHkgUEFHSU5BVElPTl9TSVpFID0gUGFnaW5hdGlvblNpemU7XHJcbiAgUEFHRV9TSVpFX09QVElPTjogbnVtYmVyW10gPSBbNSwgMTAsIDE1LCAyMCwgMjUsIDEwMF07XHJcbiAgQ1VSUkVOVF9QQUdFU0laRTogbnVtYmVyID0gMTA7XHJcbiAgcmVhZG9ubHkgbmVzdGVkVHJlZU5vZGVNYXAgPSBuZXcgTWFwPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+KCk7XHJcbiAgcmVhZG9ubHkgZmxhdFRyZWVOb2RlTWFwID0gbmV3IE1hcDxRTVNGbGF0Tm9kZVRyZWUsIFFNU1RyZWVOb2RlPigpO1xyXG4gIHJlYWRvbmx5IGNoZWNrTGlzdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxRTVNGbGF0Tm9kZVRyZWU+KHRydWUpO1xyXG4gIHJlYWRvbmx5IGNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWw+KHRydWUpO1xyXG4gIHRyZWVDb250cm9sOiBGbGF0VHJlZUNvbnRyb2w8UU1TRmxhdE5vZGVUcmVlPjtcclxuICB0cmVlRmxhdHRlbmVyOiBNYXRUcmVlRmxhdHRlbmVyPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+O1xyXG4gIGRhdGFTb3VyY2U6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPjtcclxuXHJcbiAgZGF0YVNvdXJjZVRyZWVTZWFyY2g6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPjtcclxuICBwcml2YXRlIF9zZWxlY3RlZExpc3Q6IFFNU1RyZWVOb2RlW10gPSBbXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkID0gbmV3IFN1YmplY3Q8UU1TRmxhdE5vZGVUcmVlW10+KCk7XHJcblxyXG4gIGZvcm1TZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICByZWFkb25seSBnZXRMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5IGdldExvYWRpbmdNb3JlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgcmVhZG9ubHkgdW50aWxEZXN0cm95TG9hZE1vcmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICByZWFkb25seSBvbkJlZm9yZUluaXROb2RlU2VsZWN0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcmVhZG9ubHkgdGV4dFNlYXJjaFN1YmplY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcclxuICBpdGVtSWNvblR5cGUgPSBJdGVtSWNvblR5cGU7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXIgPSAobm9kZTogUU1TVHJlZU5vZGUsIGxldmVsOiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5jb252ZXJ0VG9GbGF0Tm9kZShub2RlKSB8fCBuZXcgUU1TRmxhdE5vZGVUcmVlKCk7XHJcbiAgICBmbGF0Tm9kZS5pZCA9IG5vZGUuaWQ7XHJcbiAgICBmbGF0Tm9kZS5uYW1lID0gbm9kZS5uYW1lO1xyXG4gICAgZmxhdE5vZGUuZXhwYW5kYWJsZSA9IChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHwgKCEhbm9kZS5jaGlsZENvdW50KSB8fCBub2RlLmV4cGFuZGFibGU7XHJcbiAgICBmbGF0Tm9kZS5sZXZlbCA9IGxldmVsO1xyXG4gICAgZmxhdE5vZGUucGFyZW50SWQgPSBub2RlLnBhcmVudElkO1xyXG4gICAgZmxhdE5vZGUubWFya2VkR2V0Q2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDA7XHJcbiAgICBmbGF0Tm9kZS5pdGVtSWNvbiA9IG5vZGUuaXRlbUljb247XHJcbiAgICBmbGF0Tm9kZS5pdGVtSWNvblN2ZyA9IG5vZGUuaXRlbUljb25Tdmc7XHJcbiAgICBmbGF0Tm9kZS5pc0ZpbGUgPSBub2RlLmlzRmlsZTtcclxuICAgIGZsYXROb2RlLmRpc2FibGVkID0gbm9kZS5kaXNhYmxlZDtcclxuICAgIGZsYXROb2RlLmlzR3JvdXAgPSBub2RlLmlzR3JvdXA7XHJcbiAgICBmbGF0Tm9kZS5ncm91cElkID0gbm9kZS5ncm91cElkO1xyXG4gICAgZmxhdE5vZGUuZXh0ZXJuYWxOYW1lID0gbm9kZS5leHRlcm5hbE5hbWU7XHJcbiAgICBmbGF0Tm9kZS5jaGlsZENvdW50ID0gbm9kZS5jaGlsZENvdW50O1xyXG4gICAgZmxhdE5vZGUuc2VsZWN0ZWRDaGlsZENvdW50ID0gbm9kZS5zZWxlY3RlZENoaWxkQ291bnQ7XHJcbiAgICBmbGF0Tm9kZS5tYXJrZWRHZXRDaGlsZENvdW50UmVjdXJyc2l2ZSA9IG5vZGUubWFya2VkR2V0Q2hpbGRDb3VudFJlY3VycnNpdmU7XHJcbiAgICBmbGF0Tm9kZS5pc0luY2x1ZGVDaGlsZFdoZW5DaGVja2VkID0gbm9kZS5pc0luY2x1ZGVDaGlsZFdoZW5DaGVja2VkO1xyXG4gICAgZmxhdE5vZGUuZXhwYW5kSWNvbiA9IG5vZGUuZXhwYW5kSWNvbjtcclxuXHJcbiAgICB0aGlzLmZsYXRUcmVlTm9kZU1hcC5zZXQoZmxhdE5vZGUsIG5vZGUpO1xyXG4gICAgdGhpcy5uZXN0ZWRUcmVlTm9kZU1hcC5zZXQobm9kZSwgZmxhdE5vZGUpO1xyXG4gICAgcmV0dXJuIGZsYXROb2RlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBnZXRMZXZlbCA9IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IG5vZGU/LmxldmVsO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2dldENoaWxkID0gKG5vZGU6IFFNU1RyZWVOb2RlKSA9PiBub2RlLmNoaWxkcmVuO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNFeHBhbmRhYmxlID0gKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gbm9kZS5leHBhbmRhYmxlO1xyXG4gIGhhc0NoaWxkID0gKF86IG51bWJlciwgbm9kZTogUU1TRmxhdE5vZGVUcmVlKSA9PiBub2RlLmV4cGFuZGFibGU7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsaW5nTGF6eU9iamVjdDogSUhhbmRsaW5nRXZlbnRMYXp5ID0ge1xyXG4gICAgY2hlY2tBbGxTZWFyY2g6IGZhbHNlLFxyXG4gICAgY2hlY2tJdGVtU2VhcmNoOiBmYWxzZSxcclxuICAgIGNoZWNrTm9kZTogZmFsc2UsXHJcbiAgICBleHBhbmQ6IGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlICBsb2NrSGFuZGxlU2VsZWN0aW9uQ2hhbmdlID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSBhcHBJY29uU2VydmljZTogUU1TSWNvblJlZ2lzdHJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgaWNvblJlZ2lzdHJ5OiBNYXRJY29uUmVnaXN0cnksXHJcbiAgICBwcml2YXRlIGVsZVJlZjogRWxlbWVudFJlZixcclxuICAgIHB1YmxpYyB0cmFuczogVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgb3ZlcmxheTogT3ZlcmxheSxcclxuICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgcHJpdmF0ZSB0cmVlRGVwYXJ0bWVudFNlcnZpY2U6IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlR2xvYmFsU2VydmljZVxyXG4gICkge1xyXG4gICAgLy8gSW5pdCB0cmVlIGRhdGFcclxuICAgIHRoaXMuZ2V0RGF0YVRyZWUkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhU291cmNlKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSk7XHJcbiAgICAvLyBSZWdpc3RlciBpY29uXHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0FyZWFJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRG9jdW1lbnRJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRm9sZGVySWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRldmlhdGlvbkljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJDaGVja2xpc3RJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUmlza0ljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG5cclxuICAgIHRoaXMudHJhbnMuZ2V0TGFuZ3VhZ2VTdWJqZWN0JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgdGhpcy5MQU5HID0gdGhpcy50cmFucy5nZXRPYmplY3RMYW5nKHJlcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5faGFuZGxlU2VhcmNoRXZlbnQoKTtcclxuICAgIHRoaXMuX2hhbmRsZUFjdGl2ZU5vZGVFdmVudCgpO1xyXG4gICAgdGhpcy5faGFuZGxlSXRlbVNlbGVjdGlvbkNoYW5nZWQoKTtcclxuXHJcbiAgICB0aGlzLmdldExvYWRpbmckLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAocmVzID0+IHtcclxuICAgICAgICByZXMgPyB0aGlzLmZvcm1TZWFyY2hDb250cm9sLmRpc2FibGUoKSA6IHRoaXMuZm9ybVNlYXJjaENvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAgIH0pKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEluZGV4VmlldyQucGlwZShcclxuICAgICAgdGFrZVVudGlsKG1lcmdlKHRoaXMubmdVbnN1YnNjcmliZSwgdGhpcy51bnRpbERlc3Ryb3lMb2FkTW9yZSQpKSxcclxuICAgICAgdGFwKF8gPT4gdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dCh0aGlzLmNvbmZpZy5sYXp5KSksXHJcbiAgICAgIGRlbGF5KDcwMCksXHJcbiAgICAgIHRhcCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSAwKVxyXG4gICAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgJiZcclxuICAgICAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xsZWRJbmRleENoYW5nZVxyXG4gICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMudW50aWxEZXN0cm95TG9hZE1vcmUkKSxcclxuICAgICAgICAgICAgICAgIG1hcChfID0+IHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0Lm1lYXN1cmVTY3JvbGxPZmZzZXQoJ2JvdHRvbScpKSxcclxuICAgICAgICAgICAgICAgIHBhaXJ3aXNlKCksXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKFt4MSwgeDJdKSA9PiB4MSA+IHgyICYmIHgyIDwgMTQwKSxcclxuICAgICAgICAgICAgICAgIHRocm90dGxlVGltZSgyMDApLFxyXG4gICAgICAgICAgICAgICAgdGFwKF8gPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRMb2FkaW5nTW9yZSQudmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVzdHJveUxvYWRNb3JlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMub25Mb2FkTW9yZUV2ZW50LmVtaXQoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgICAgfSkpLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMub25CZWZvcmVJbml0Tm9kZVNlbGVjdGVkJC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgdGFwKF8gPT4ge1xyXG4gICAgICAgIHRoaXMuX2hhbmRsZUxpc3RTZWxlY3RlZCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQoZmFsc2UpO1xyXG4gICAgICB9KSkuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0luY2x1ZGVDaGlsZHJlbiA9IHRoaXMuY29uZmlnLmlzSW5jbHVkZUNoaWxkcmVuO1xyXG4gICAgdGhpcy5faW5pdFRyZWVEYXRhKCk7XHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkpIHtcclxuICAgICAgdGhpcy5faGFuZGxlTGlzdFNlbGVjdGVkKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vYWN0aW9uIGZvciBsYXp5IGNvbmZpZ1xyXG4gICAgdGhpcy5faW5pdExpc3RTZWxlY3RlZCgpO1xyXG4gICAgdGhpcy5faGFuZGxlQWZ0ZXJEYXRhTm9kZUNoYW5nZUV2ZW50KCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkLm5leHQodGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBvbkRlc3Ryb3lMb2FkTW9yZSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW50aWxEZXN0cm95TG9hZE1vcmUkLm5leHQoKTtcclxuICAgIHRoaXMudW50aWxEZXN0cm95TG9hZE1vcmUkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0VHJlZURhdGEoKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxRTVNGbGF0Tm9kZVRyZWU+KHRoaXMuZ2V0TGV2ZWwsIHRoaXMuaXNFeHBhbmRhYmxlKTtcclxuICAgIHRoaXMudHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKHRoaXMuX3RyYW5zZm9ybWVyLCB0aGlzLmdldExldmVsLCB0aGlzLmlzRXhwYW5kYWJsZSwgdGhpcy5fZ2V0Q2hpbGQpO1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLnRyZWVGbGF0dGVuZXIpO1xyXG4gICAgY29uc3QgX3RyZWVEYXRhSW5wdXQ6IFFNU0ZsYXROb2RlVHJlZVtdID0gXy5jbG9uZURlZXAodGhpcy5jb25maWcudHJlZURhdGEpXHJcbiAgICBpZiAoIV90cmVlRGF0YUlucHV0Lmxlbmd0aClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgY29uc3QgdHJlZURhdGEgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YShfdHJlZURhdGFJbnB1dCk7XHJcbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRyZWVEYXRhKTtcclxuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVMaXN0U2VsZWN0ZWQoKSB7XHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdC5sZW5ndGgpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGNvbnN0IHRyZWVOb2RlcyA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdC5tYXAoeCA9Pih7Li4ueCxwYXJlbnRJZDogeC5ncm91cElkfSkpKTtcclxuXHJcbiAgICB0aGlzLmV4ZWNXaXRob3V0RW1pdE5vZGVDaGFuZ2VFdmVudCgoKSA9PntcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtczogUU1TVHJlZU5vZGVbXSA9IFtdO1xyXG4gICAgICBjb25zdCByZU1hcFRyZWVOb2RlID0gKGl0ZW06IFFNU1RyZWVOb2RlKSA9PntcclxuICAgICAgICBjb25zdCBub2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCh4ID0+IHguaWQgPT0gaXRlbS5pZCk7XHJcbiAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuICAgICAgICBub2RlLmdyb3VwSWQgPSBpdGVtLmdyb3VwSWQ7XHJcbiAgICAgICAgbm9kZS5pc0dyb3VwID0gaXRlbS5pc0dyb3VwO1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4ubmVzdGVkTm9kZSxcclxuICAgICAgICAgIGdyb3VwSWQ6IGl0ZW0uZ3JvdXBJZCxcclxuICAgICAgICAgIGlzR3JvdXA6IGl0ZW0uaXNHcm91cCxcclxuICAgICAgICAgIGNoaWxkQ291bnQ6IG5lc3RlZE5vZGUuY2hpbGRDb3VudCA/PyB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5sZW5ndGgsXHJcbiAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRyZWVOb2Rlcy5mb3JFYWNoKGl0ZW0gPT57XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoeCA9PiB4LmlkID09IGl0ZW0uaWQpO1xyXG4gICAgICAgIGlmKCFub2RlKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XHJcbiAgICAgICAgc2VsZWN0ZWRJdGVtcy5wdXNoKHsuLi5yZU1hcFRyZWVOb2RlKGl0ZW0pLCBjaGlsZHJlbjogaXRlbS5jaGlsZHJlbi5tYXAoeCA9PiByZU1hcFRyZWVOb2RlKHgpKX0pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5wdXNoKC4uLnNlbGVjdGVkSXRlbXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKVxyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0TGlzdFNlbGVjdGVkKCkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEodGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0KTtcclxuICAgIC8vQ29udmVydCBhcnJheSBzZWxlY3RlZExpc3QgaW50byBuZXN0ZWQgYXJyYXkgYXMgMSBsZXZlbCBmb3JtXHJcbiAgICBjb25zdCBpbmRleFJlbW92ZSA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9zZWxlY3RlZExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3NlbGVjdGVkTGlzdFtpXTtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuZ2V0RGVzY2VuZGFudHNPZk5vZGUoaXRlbSkuZmlsdGVyKHggPT4geC5ncm91cElkID09IGl0ZW0uaWQpO1xyXG4gICAgICBpdGVtLmNoaWxkcmVuID0gcmVzdWx0O1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maW5kSW5kZXgoeCA9PiByZXN1bHQuc29tZSh4MSA9PiB4MS5pZCA9PT0geC5pZCkpXHJcbiAgICAgIGlmIChpbmRleCA8IDApXHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIGluZGV4UmVtb3ZlLnB1c2goaW5kZXgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbHRlcigoXywgaW5kZXgpID0+ICFpbmRleFJlbW92ZS5pbmNsdWRlcyhpbmRleCkpO1xyXG5cclxuICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQucHVzaCguLi50aGlzLl9zZWxlY3RlZExpc3QpO1xyXG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIC8vIGhhbmRsZSBzZWxlY3RlZCBsaXN0IHdoZW4gZGF0YSBub2RlcyBjaGFuZ2VcclxuICBwcml2YXRlIF9oYW5kbGVBZnRlckRhdGFOb2RlQ2hhbmdlRXZlbnQoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcubGF6eSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIHRhcChkYXRhID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9zZWxlY3RlZExpc3QubGVuZ3RoKVxyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFpdGVtLnBhcmVudElkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKTtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlKVxyXG4gICAgICAgICAgICAgICAgICBpdGVtLnBhcmVudElkID0gbm9kZS5wYXJlbnRJZDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZGF0YVtpXTtcclxuICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmlkID09PSBlbGVtZW50LmlkIHx8IHguY2hpbGRyZW4/LnNvbWUoeDEgPT4geDEuaWQgPT09IGVsZW1lbnQuaWQpKTtcclxuICAgICAgICAgICAgICBpZiAoISFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKTtcclxuICAgICAgICAgICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5pc0dyb3VwID0gaXRlbS5pc0dyb3VwO1xyXG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gaXRlbS5ncm91cElkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKTtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLm1hcmtlZEdldENoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghaXRlbS5jaGlsZHJlbi5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TZWxlY3QgPSBkZXNjZW5kYW50cy5maWx0ZXIoeCA9PiBpdGVtLmNoaWxkcmVuLm1hcCh4MSA9PiB4MS5pZCkuaW5jbHVkZXMoeC5pZCkpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIWl0ZW1TZWxlY3QubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0LmZvckVhY2goX2l0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9uZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKF9pdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICBfbmVzdGVkTm9kZS5ncm91cElkID0gaXRlbS5jaGlsZHJlblswXS5ncm91cElkO1xyXG4gICAgICAgICAgICAgICAgICAgIF9uZXN0ZWROb2RlLmlzR3JvdXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5pdGVtU2VsZWN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgbWV0aG9kIHVzZSBmb3IgbGF6eSBtb2RlLCBkbyBzb21lIHRoaW5nIGJlZm9yZSBpbml0IGxpc3Qgbm9kZSBzZWxlY3RlZFxyXG4gICAqIEBwYXJhbSBjYWxsYmFja1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgb25CZWZvcmVJbml0Tm9kZVNlbGVjdGVkKGNhbGxiYWNrPzogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcclxuICAgIGlmICghdGhpcy5jb25maWcubGF6eSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dCh0cnVlKTtcclxuICAgIGlmICghIWNhbGxiYWNrKVxyXG4gICAgICBhd2FpdCBjYWxsYmFjaygpO1xyXG4gICAgdGhpcy5vbkJlZm9yZUluaXROb2RlU2VsZWN0ZWQkLm5leHQoKTtcclxuICB9XHJcblxyXG4gIC8vSGFuZGxlIGl0ZW0gc2VsZWN0aW9uIGNoYW5nZWRcclxuICBwcml2YXRlIF9oYW5kbGVJdGVtU2VsZWN0aW9uQ2hhbmdlZCgpIHtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmNoYW5nZWRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHsgYWRkZWQsIHJlbW92ZWQgfSkgPT4ge1xyXG4gICAgICAgIGlmKHRoaXMubG9ja0hhbmRsZVNlbGVjdGlvbkNoYW5nZSlcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjaGVja0V4aXN0SW5SZXN1bHQgPSAobm9kZTogUU1TRmxhdE5vZGVUcmVlIHwgUU1TVHJlZU5vZGUpOiBib29sZWFuID0+IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCkgPiAtMTtcclxuICAgICAgICBpZiAoYWRkZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICBhZGRlZC5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlOiBRTVNUcmVlTm9kZSA9IF8uY2xvbmVEZWVwKHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKSk7XHJcbiAgICAgICAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4gPSBbXTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5sYXp5KVxyXG4gICAgICAgICAgICAgIG5lc3RlZE5vZGUuY2hpbGRDb3VudCA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmxlbmd0aDtcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RHcm91cDogUU1TVHJlZU5vZGUgPSBfLmNsb25lRGVlcChcclxuICAgICAgICAgICAgICB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSlcclxuICAgICAgICAgICAgICAgIC5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoaXRlbSlcclxuICAgICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gaXRlbS5ncm91cElkO1xyXG4gICAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSBpdGVtLmlzR3JvdXA7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBuZXN0ZWROb2RlO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcclxuICAgICAgICAgICAgICAgIC5maW5kKHggPT4geC5pc0dyb3VwKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoISFleGlzdEdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZmxhdEV4aXN0R3JvdXAgPSB0aGlzLmdldE5vZGVCeUlkKGV4aXN0R3JvdXAuaWQpO1xyXG4gICAgICAgICAgICAgIG5lc3RlZE5vZGUuZ3JvdXBJZCA9IGV4aXN0R3JvdXAuaWQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZXN1bHQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBleGlzdEdyb3VwLmlkKTtcclxuICAgICAgICAgICAgICBpZiAoZ3JvdXBSZXN1bHQgJiYgIWdyb3VwUmVzdWx0LmNoaWxkcmVuLnNvbWUoeCA9PiB4LmlkID09PSBuZXN0ZWROb2RlLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBSZXN1bHQuaXNHcm91cCA9IGV4aXN0R3JvdXAuaXNHcm91cDtcclxuICAgICAgICAgICAgICAgIGdyb3VwUmVzdWx0LmNoaWxkcmVuLnB1c2gobmVzdGVkTm9kZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCd1cGRhdGVkJywgW2dyb3VwUmVzdWx0XSk7XHJcbiAgICAgICAgICAgICAgLy8gcmUtZmlsdGVyIHJlc3VsdCBzZWxlY3RlZFxyXG4gICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbHRlcihpdGVtID0+IGl0ZW0uZGlzYWJsZWQgfHwgIXRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKGZsYXRFeGlzdEdyb3VwKS5tYXAoeCA9PiB4LmlkKS5pbmNsdWRlcyhpdGVtLmlkKSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjaGVja0V4aXN0SW5SZXN1bHQobm9kZSkpXHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnB1c2gobmVzdGVkTm9kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdhZGRlZCcsIFtuZXN0ZWROb2RlXSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlbW92ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZW1vdmVkLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIGlmIChuZXN0ZWROb2RlLmlzR3JvdXApIHtcclxuICAgICAgICAgICAgICBjb25zdCBfaXRlbSA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IG5vZGUuaWQpO1xyXG4gICAgICAgICAgICAgIGlmICghX2l0ZW0pIHJldHVybjtcclxuICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5ncm91cElkID0gbnVsbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5zcGxpY2UodGhpcy5yZXN1bHRTZWxlY3RlZC5pbmRleE9mKF9pdGVtKSwgMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3JlbW92ZWQnLCBbX2l0ZW1dKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBuZXN0ZWROb2RlLmdyb3VwSWQpO1xyXG4gICAgICAgICAgICBpZiAoIWdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgX2l0ZW0gPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlLmlkKTtcclxuICAgICAgICAgICAgICBpZiAoIV9pdGVtKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5zcGxpY2UodGhpcy5yZXN1bHRTZWxlY3RlZC5pbmRleE9mKF9pdGVtKSwgMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3JlbW92ZWQnLCBbX2l0ZW1dKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmNvbmNhdChub2RlKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgICAgICAgY29uc3QgX25vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpXHJcbiAgICAgICAgICAgICAgaWYgKGdyb3VwLmNoaWxkcmVuLnNvbWUoeCA9PiB4LmlkID09PSBfbm9kZS5pZCkgJiYgIXRoaXMuaXNTZWxlY3RlZE5vZGUoX25vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBfaXRlbSA9IGdyb3VwLmNoaWxkcmVuLmZpbmQoeCA9PiB4LmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgICAgICAgICAgIGlmICghX2l0ZW0pIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGdyb3VwLmNoaWxkcmVuLnNwbGljZShncm91cC5jaGlsZHJlbi5pbmRleE9mKF9pdGVtKSwgMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgndXBkYXRlZCcsIFtncm91cF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX21hcFRvUmVzdWx0U2VhcmNoKCk7XHJcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudChzdGF0ZTogJ3JlbW92ZWQnIHwgJ3VwZGF0ZWQnIHwgJ2FkZGVkJywgZGF0YTogUU1TVHJlZU5vZGVbXSkge1xyXG4gICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICBjYXNlICdyZW1vdmVkJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudC5lbWl0KHtcclxuICAgICAgICAgIHJlbW92ZWQ6IGRhdGEsXHJcbiAgICAgICAgICBhZGRlZDogW10sXHJcbiAgICAgICAgICB1cGRhdGVkOiBbXSxcclxuICAgICAgICAgIHNvdXJjZTogbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIHRoaXMucmVzdWx0U2VsZWN0ZWQpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3VwZGF0ZWQnOlxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50LmVtaXQoe1xyXG4gICAgICAgICAgcmVtb3ZlZDogW10sXHJcbiAgICAgICAgICBhZGRlZDogW10sXHJcbiAgICAgICAgICB1cGRhdGVkOiBkYXRhLFxyXG4gICAgICAgICAgc291cmNlOiBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSwgdGhpcy5yZXN1bHRTZWxlY3RlZClcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYWRkZWQnOlxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50LmVtaXQoe1xyXG4gICAgICAgICAgcmVtb3ZlZDogW10sXHJcbiAgICAgICAgICBhZGRlZDogZGF0YSxcclxuICAgICAgICAgIHVwZGF0ZWQ6IFtdLFxyXG4gICAgICAgICAgc291cmNlOiBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSwgdGhpcy5yZXN1bHRTZWxlY3RlZClcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVTZWFyY2hFdmVudCgpIHtcclxuICAgIHRoaXMuc2VhcmNoRGVwYXJ0bWVudCRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICB0aGlzLnJlc3VsdFNlYXJjaCA9IFtdO1xyXG4gICAgICAgIHRoaXMuQ1VSUkVOVF9QQUdFU0laRSA9IHJlc3VsdC5wYWdlU2l6ZTtcclxuICAgICAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGxldCBsb2NhdGlvbjogRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYltdID0gW107XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5KSB7XHJcbiAgICAgICAgICAgICAgbG9jYXRpb24gPSBpdGVtLnBhdGg/Lm1hcCh4ID0+ICh7IG5hbWU6IHggfSBhcyBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iKSkgfHwgW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50cyA9IG5vZGUgPyB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSkgOiBbXTtcclxuICAgICAgICAgICAgICBsb2NhdGlvbiA9IHBhcmVudHMubGVuZ3RoID8gcGFyZW50cy5tYXAoKHgpID0+ICh7XHJcbiAgICAgICAgICAgICAgICBpZDogeC5pZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZSxcclxuICAgICAgICAgICAgICB9IGFzIERlcGFydG1lbnRMb2NhdGlvbkJyZWFkQ3J1bWIpKS5yZXZlcnNlKCkgOiBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFNlYXJjaC5wdXNoKHtcclxuICAgICAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIHx8ICF0aGlzLmNvbmZpZy5sYXp5ICYmIHRoaXMuY29uZmlnLmNoZWNrU2VhcmNoTWFwcGluZ1RyZWUgJiYgIW5vZGUsXHJcbiAgICAgICAgICAgICAgbG9jYXRpb246IFtcclxuICAgICAgICAgICAgICAgIC4uLmxvY2F0aW9uLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy50ZXh0U2VhcmNoU3ViamVjdCQubmV4dCh0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlKTtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5jbGVhckNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaFdoZW5IYW5kbGUpXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmNsZWFyKCk7XHJcbiAgICAgICAgICB0aGlzLl9tYXBUb1Jlc3VsdFNlYXJjaCgpO1xyXG4gICAgICAgICAgdGhpcy5zZXRJbmRleFZpZXcoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUFjdGl2ZU5vZGVFdmVudCgpIHtcclxuICAgIHRoaXMuc2Nyb2xsVG9Ob2RlRXZlbnQkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIHN3aXRjaE1hcCgodmFsKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRlbGF5VGltaW5nID0gdGhpcy5nZXRJbmRleFZpZXckLnZhbHVlID09PSAxID8gNzAwIDogMDtcclxuICAgICAgdGhpcy5zZXRJbmRleFZpZXcoMCk7XHJcbiAgICAgIHJldHVybiBvZih2YWwpLnBpcGUoZGVsYXkoZGVsYXlUaW1pbmcpLCB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSk7XHJcbiAgICB9KSlcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMub25TY3JvbGxJbnRvTm9kZShyZXMpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdldEFjdGl2ZU5vZGVFdmVudCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgc3dpdGNoTWFwKHZhbCA9PiB7XHJcbiAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IHZhbDtcclxuICAgICAgcmV0dXJuIHRpbWVyKDE1MDApO1xyXG4gICAgfSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoXyA9PiB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gJyc7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGF0YVRyZWUoZGF0YTogUU1TVHJlZU5vZGVbXSkge1xyXG4gICAgdGhpcy5nZXREYXRhVHJlZSQubmV4dChkYXRhKTtcclxuICB9XHJcblxyXG4gIHNldExvYWRpbmdTdGF0ZU5vZGUoaXNMb2FkaW5nOiBib29sZWFuLCBub2RlSWQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZUlkKTtcclxuICAgIGlmICghbm9kZSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgbm9kZS5pc0xvYWRpbmcgPSBpc0xvYWRpbmc7XHJcbiAgICB0aGlzLmNoZWNrTG9hZGluZ09mUGFyZW50KG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgb25FeHBhbmROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgaWYgKCFub2RlPy5leHBhbmRhYmxlKSByZXR1cm47XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLnRvZ2dsZShub2RlKTtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5ICYmIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSAmJiAhbm9kZS5tYXJrZWRHZXRDaGlsZHJlbikge1xyXG4gICAgICBub2RlLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2hlY2tMb2FkaW5nT2ZQYXJlbnQobm9kZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uRXhwYW5kTm9kZUV2ZW50LmVtaXQobm9kZSk7XHJcbiAgfVxyXG5cclxuICBvbk9wdGlvblNlYXJjaFNlbGVjdGVkKHZhbHVlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXROb2RlQnlJZCh2YWx1ZS5pZCk7XHJcbiAgICBpZiAoIWZsYXROb2RlKSByZXR1cm47XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xyXG4gICAgdGhpcy5oYW5kbGVDaGVja05vZGUoZmxhdE5vZGUpO1xyXG4gICAgdGhpcy5vblNjcm9sbEludG9Ob2RlKGZsYXROb2RlLmlkKTtcclxuICB9XHJcblxyXG4gIG9uQ2hlY2tBbGxSb290VHJlZU5vZGUoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuaXNTZWxlY3RPbmUgfHwgIXRoaXMuY29uZmlnLmFjdGl2ZVNlbGVjdEFsbE5vZGUpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzQWxsRGVwYXJ0bWVudFNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgaWYobm9kZS5kaXNhYmxlZClcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xyXG4gICAgICAgIG5lc3RlZE5vZGUuaXNHcm91cCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4udGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKHggPT4geC5kaXNhYmxlZCkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9O1xyXG4gICAgdGhpcy5kZXBhcnRtZW50Um9vdHMuZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgaWYobm9kZS5kaXNhYmxlZClcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGlmICghdGhpcy5pc0luY2x1ZGVDaGlsZHJlbikge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcih4ID0+ICF0aGlzLmlzU2VsZWN0ZWROb2RlKHgpKVxyXG4gICAgICAgICAgLmZvckVhY2goeCA9PiB0aGlzLm9uQ2hlY2tOb2RlKHgpKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGUpKSB7XHJcbiAgICAgICAgdGhpcy5vbkNoZWNrTm9kZShub2RlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuICAgICAgaWYgKG5lc3RlZE5vZGUuaXNHcm91cCAmJiB0aGlzLmlzQ2hlY2tBbGwobm9kZSkgfHwgIW5vZGUuZXhwYW5kYWJsZSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpXHJcbiAgICAgICAgLmZpbHRlcihpdGVtID0+ICF0aGlzLmlzU2VsZWN0ZWROb2RlKGl0ZW0pKVxyXG4gICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoaXRlbSkgJiYgdGhpcy5vbkNoZWNrTm9kZShpdGVtKSk7XHJcbiAgICAgIGlmICghbmVzdGVkTm9kZS5pc0dyb3VwKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3Qobm9kZSk7XHJcbiAgICAgICAgdGhpcy5vbkNoZWNrTm9kZShub2RlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlLCBmaXJlRXZlbnRDaGVja05vZGU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBpZiAoIW5vZGUgfHwgbm9kZS5kaXNhYmxlZClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgaWYgKGZpcmVFdmVudENoZWNrTm9kZSlcclxuICAgICAgdGhpcy5vbkNoZWNrTm9kZUV2ZW50LmVtaXQobm9kZSk7XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XHJcbiAgICBpZiAodGhpcy5jb25maWcuaXNTZWxlY3RPbmUpIHtcclxuICAgICAgdGhpcy5faGFuZGxlU2VsZWN0T25lKG5vZGUuaWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWcubGF6eSAmJiBub2RlLmV4cGFuZGFibGUgJiYgIW5vZGUubWFya2VkR2V0Q2hpbGRyZW4gJiYgZmlyZUV2ZW50Q2hlY2tOb2RlKSB7XHJcbiAgICAgIGlmICghdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrTm9kZSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tOb2RlKG5vZGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBub2RlLmlzTG9hZGluZyA9IHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW47XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKHggPT4geC5leHBhbmRhYmxlICYmICF4Lm1hcmtlZEdldENoaWxkcmVuKTtcclxuICAgICAgY2hpbGRyZW4uZm9yRWFjaCh4ID0+IHguaXNMb2FkaW5nID0gdGhpcy5pc0luY2x1ZGVDaGlsZHJlbik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaGFuZGxlQ2hlY2tOb2RlKG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlU2VsZWN0T25lKG5vZGVJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBub2RlVHJlZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09PSBub2RlSWQpO1xyXG4gICAgY29uc3QgcmVTZWxlY3RTZWxlY3Rpb24gPSAoaWQ6IHN0cmluZywgLi4ucGFyYW1zOiBTZWxlY3Rpb25Nb2RlbDxhbnk+W10pOiB2b2lkID0+IHtcclxuICAgICAgcGFyYW1zLmZvckVhY2goc2VsZWN0aW9uID0+IHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZWxlY3RlZC5maWx0ZXIoeCA9PiB4LmlkICE9IGlkKTtcclxuICAgICAgICBzZWxlY3Rpb24uZGVzZWxlY3QoLi4uc2VsZWN0ZWQpO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgaWYgKCFub2RlVHJlZSkge1xyXG4gICAgICB0aGlzLmV4ZWNXaXRob3V0RW1pdE5vZGVDaGFuZ2VFdmVudCgoKSA9PntcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IG5vZGVJZCk7XHJcbiAgICAgICAgaWYgKCFpdGVtKXtcclxuICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbXTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFt7XHJcbiAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxyXG4gICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgZXh0ZXJuYWxOYW1lOiBpdGVtLmV4dGVybmFsTmFtZSxcclxuICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgIH0gYXMgUU1TVHJlZU5vZGVdO1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkTGlzdCA9IFsuLi50aGlzLnJlc3VsdFNlbGVjdGVkXTtcclxuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gICAgICAgIHJlU2VsZWN0U2VsZWN0aW9uKG5vZGVJZCwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24sIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoKTtcclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGVUcmVlKSkge1xyXG4gICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlSWQpKTtcclxuICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFt7Li4ubmVzdGVkTm9kZSwgY2hpbGRyZW46W119XTtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMucmVzdWx0U2VsZWN0ZWRdO1xyXG4gICAgICByZVNlbGVjdFNlbGVjdGlvbihuZXN0ZWROb2RlLmlkLCB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbiwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2gpO1xyXG4gICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW107XHJcbiAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSBbXTtcclxuICB9XHJcblxyXG4gIG9uRXhwYW5kQWxsUGFyZW50KG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgcGFyZW50cyA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcclxuICAgIGlmIChwYXJlbnRzPy5sZW5ndGgpIHtcclxuICAgICAgcGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQocGFyZW50KSlcclxuICAgICAgICAgIHRoaXMub25FeHBhbmROb2RlKHBhcmVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25SZW1vdmVOb2RlKG5vZGVJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZUlkKTtcclxuICAgIGlmICghZmxhdE5vZGUpIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maW5kKHggPT4geC5pZCA9PT0gbm9kZUlkKTtcclxuICAgICAgaWYgKCFpdGVtKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRMaXN0KCdyZW1vdmUnLCBpdGVtLCB0aGlzLl9zZWxlY3RlZExpc3QsIHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoZmxhdE5vZGUpO1xyXG4gICAgdGhpcy5oYW5kbGVDaGVja05vZGUoZmxhdE5vZGUpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3ROb2RlKC4uLm5vZGVJZHM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcih4ID0+IG5vZGVJZHMuaW5jbHVkZXMoeC5pZCkpO1xyXG4gICAgaWYgKCFub2Rlcy5sZW5ndGgpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5ub2Rlcyk7XHJcbiAgfVxyXG5cclxuICBvbkRlc2VsZWN0Tm9kZSguLi5ub2RlSWRzOiBzdHJpbmdbXSkge1xyXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiBub2RlSWRzLmluY2x1ZGVzKHguaWQpKTtcclxuICAgIGlmICghbm9kZXMubGVuZ3RoKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5ub2Rlcyk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZXMgYSB2YWx1ZSBiZXR3ZWVuIHNlbGVjdGVkIGFuZCBkZXNlbGVjdGVkLlxyXG4gICAqIEBwYXJhbSBub2RlSWQgOmlkIG9mIG5vZGVcclxuICAgKi9cclxuICBvblRvZ2dsZU5vZGUobm9kZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XHJcbiAgICBpZiAoIW5vZGUpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcclxuICB9XHJcblxyXG4gIGlzSW5kZXRlcm1pbmF0ZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IGNoaWxkU2VsZWN0ZWQgPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5maWx0ZXIoaXRlbSA9PiB0aGlzLmlzU2VsZWN0ZWROb2RlKGl0ZW0pKTtcclxuICAgIHJldHVybiAoISFjaGlsZFNlbGVjdGVkLmxlbmd0aCAmJiAhdGhpcy5pc1NlbGVjdGVkTm9kZShub2RlKSk7XHJcbiAgfVxyXG5cclxuICBpc0NoZWNrQWxsKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgbGlzdENoZWNrID0gWy4uLnRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLCBub2RlXTtcclxuICAgIHJldHVybiBsaXN0Q2hlY2suZXZlcnkoaXRlbSA9PiB0aGlzLmlzU2VsZWN0ZWROb2RlKGl0ZW0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlIGNoZWNrIG5vZGUgb2YgdHJlZVxyXG4gICAqIEBwYXJhbSBub2RlIG5vZGUgb2YgdHJlZVxyXG4gICAqIEBwYXJhbSBjYWxsYmFjayBkbyBzb21ldGhpbmcgYmVmb3JlIGhhbmRsZSBjaGVjayBub2RlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhc3luYyBvbkJlZm9yZUNoZWNrTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUsIGNhbGxiYWNrPzogKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcclxuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja05vZGUgPSB0cnVlO1xyXG4gICAgaWYgKCEhY2FsbGJhY2spXHJcbiAgICAgIGF3YWl0IGNhbGxiYWNrKG5vZGUpO1xyXG4gICAgdGhpcy5oYW5kbGVDaGVja05vZGUobm9kZSk7XHJcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tOb2RlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5pc1NlbGVjdGVkTm9kZShub2RlKTtcclxuICAgIGNvbnN0IGNoaWxkU2VsZWN0ZWQgPSB0aGlzLmdldENoaWxkcmVuU2VsZWN0ZWQobm9kZSkuZmlsdGVyKHggPT4gIXguZGlzYWJsZWQpO1xyXG4gICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuXHJcbiAgICBpZiAoaXNTZWxlY3RlZCkge1xyXG4gICAgICAvLyBDaGVjayBleGlzdGVkIGdyb3VwXHJcbiAgICAgIGNvbnN0IGFsbFBhcmVuTm9kZUlkcyA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKS5tYXAoeCA9PiB4LmlkKTtcclxuICAgICAgY29uc3QgZXhpc3RlZEdyb3VwID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kKHggPT4geC5pc0dyb3VwICYmIGFsbFBhcmVuTm9kZUlkcy5pbmNsdWRlcyh4LmlkKSk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pIHtcclxuICAgICAgICBuZXN0ZWROb2RlLmdyb3VwSWQgPSBleGlzdGVkR3JvdXA/LmlkXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKHggPT4gIXguZGlzYWJsZWQpO1xyXG4gICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSAhZXhpc3RlZEdyb3VwICYmICEhY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aClcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgY29uc3QgX25vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoeCk7XHJcbiAgICAgICAgX25vZGUuZ3JvdXBJZCA9IGV4aXN0ZWRHcm91cCA/IGV4aXN0ZWRHcm91cC5pZCA6IG5vZGUuaWQ7XHJcbiAgICAgICAgX25vZGUuaXNHcm91cCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51cGRhdGVEYXRhVHJlZSh0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XHJcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmNoaWxkU2VsZWN0ZWQubWFwKHggPT4gdGhpcy5yZXNldE5vZGUoeCkpKTtcclxuICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KC4uLmNoaWxkcmVuLm1hcCh4ID0+IHRoaXMucmVzZXROb2RlKHgpKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IF9zZWxlY3RlZEluZGV4ID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IG5vZGUuaWQpO1xyXG4gICAgX3NlbGVjdGVkSW5kZXggPiAtMSAmJiB0aGlzLl9zZWxlY3RlZExpc3Quc3BsaWNlKF9zZWxlY3RlZEluZGV4LCAxKTtcclxuICAgIGNvbnN0IGRlc2VsZWN0Tm9kZXMgPSAodGhpcy5pc0luY2x1ZGVDaGlsZHJlbiB8fCBuZXN0ZWROb2RlLmlzR3JvdXApID8gY2hpbGRTZWxlY3RlZCA6IFtub2RlXTtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmRlc2VsZWN0Tm9kZXMpO1xyXG4gICAgbmVzdGVkTm9kZS5pc0dyb3VwID0gZmFsc2U7XHJcbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKVxyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBub2RlLmlzR3JvdXAgPSBmYWxzZTtcclxuICAgIHJldHVybiBub2RlO1xyXG4gIH1cclxuXHJcbiAgaXNTZWxlY3RlZE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICByZXR1cm4gbm9kZSAmJiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hpbGRyZW5TZWxlY3RlZChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKHggPT4gdGhpcy5pc1NlbGVjdGVkTm9kZSh4KSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgYSBsaXN0IG9mIHRoZSBkYXRhIG5vZGUncyBzdWJ0cmVlIG9mIGRlc2NlbmRlbnQgZGF0YSBub2Rlcy5cclxuICAgKiBAcGFyYW0gbm9kZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGUuaWQpO1xyXG4gICAgaWYgKCFmbGF0Tm9kZSlcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMoZmxhdE5vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbWFwVG9OZXN0ZWRMaXN0Tm9kZShmbGF0Tm9kZUxpc3Q6IFFNU0ZsYXROb2RlVHJlZVtdKTogUU1TVHJlZU5vZGVbXSB7XHJcbiAgICByZXR1cm4gZmxhdE5vZGVMaXN0Lm1hcChpdGVtID0+IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShpdGVtKSk7XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU1RyZWVOb2RlIHtcclxuICAgIHJldHVybiB0aGlzLmZsYXRUcmVlTm9kZU1hcC5nZXQobm9kZSkgfHwge30gYXMgUU1TVHJlZU5vZGU7XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0VG9GbGF0Tm9kZShub2RlOiBRTVNUcmVlTm9kZSkge1xyXG4gICAgcmV0dXJuIHRoaXMubmVzdGVkVHJlZU5vZGVNYXAuZ2V0KG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsUGFyZW50Tm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWVbXSB7XHJcbiAgICBjb25zdCBsaXN0UGFyZW50OiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdO1xyXG4gICAgbGV0IHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShub2RlKTtcclxuICAgIHdoaWxlIChwYXJlbnQpIHtcclxuICAgICAgbGlzdFBhcmVudC5wdXNoKHBhcmVudCk7XHJcbiAgICAgIHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShwYXJlbnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpc3RQYXJlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRQYXJlbnROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSB0aGlzLmdldExldmVsKG5vZGUpO1xyXG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDEpIHJldHVybjtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuaW5kZXhPZihub2RlKSAtIDE7XHJcbiAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV07XHJcbiAgICAgIGlmICh0aGlzLmdldExldmVsKGN1cnJlbnROb2RlKSA8IGN1cnJlbnRMZXZlbCkge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbUljb25UeXBlKGl0ZW06IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgaWYgKCEhaXRlbS5pdGVtTWF0SWNvbikgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLm5hbWU7XHJcbiAgICBpZiAoISFpdGVtLml0ZW1JY29uU3ZnKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUuc3ZnO1xyXG4gICAgaWYgKCEhaXRlbS5pdGVtSWNvbikgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLnBhdGg7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uU2Nyb2xsSW50b05vZGUobm9kZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xyXG4gICAgaWYgKCFub2RlSWQpIHJldHVybjtcclxuICAgIHRoaXMub25FeHBhbmROb2RlKGZsYXROb2RlKTtcclxuICAgIHRoaXMub25FeHBhbmRBbGxQYXJlbnQoZmxhdE5vZGUpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBmbGF0Tm9kZS5pZCk7XHJcbiAgICBpZiAoIXRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxUb0luZGV4KGluZGV4LCAnc21vb3RoJyk7XHJcbiAgICB0aGlzLmdldEFjdGl2ZU5vZGVFdmVudCQubmV4dChub2RlSWQpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2goKSB7XHJcbiAgICBpZiAoIXRoaXMuZm9ybVNlYXJjaENvbnRyb2wudmFsdWUgfHwgdGhpcy5mb3JtU2VhcmNoQ29udHJvbC52YWx1ZT8udHJpbSgpID09PSAnJylcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5zZXRJbmRleFZpZXcoMSk7XHJcbiAgICB0aGlzLm9uU2VhcmNoRXZlbnQuZW1pdCh0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlKTtcclxuICAgIGlmICghdGhpcy5wYWdpbmF0b3JTZWFyY2gpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMucGFnaW5hdG9yU2VhcmNoLmNoYW5nZVBhZ2UoMCk7XHJcbiAgICB0aGlzLnBhZ2luYXRvclNlYXJjaC5yZW5kZXJEaXNwbGF5TnVtYmVyT2ZwYWdlcygpO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVzdWx0U2VhcmNoKGRhdGE6IFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbDxRTVNGbGF0Tm9kZVRyZWU+KSB7XHJcbiAgICB0aGlzLnNlYXJjaERlcGFydG1lbnQkLm5leHQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrUmVzdWx0SXRlbShpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwpIHtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xyXG4gICAgaWYgKG5vZGUpIHtcclxuICAgICAgdGhpcy5zY3JvbGxUb05vZGUobm9kZS5pZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkJyZWFkQ3J1bWJJdGVtQ2xpY2soaXRlbTogRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYikge1xyXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XHJcbiAgICBpZiAobm9kZSkge1xyXG4gICAgICB0aGlzLnNldEluZGV4VmlldygwKTtcclxuICAgICAgb2Yobm9kZS5pZCkucGlwZShkZWxheSg3MDApLCB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5vblNjcm9sbEludG9Ob2RlKHJlcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGVja0l0ZW1TZWFyY2hSZXN1bHQoaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSB7XHJcbiAgICBpZihpdGVtLmRpc2FibGVkKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC50b2dnbGUoaXRlbSk7XHJcbiAgICBpZiAodGhpcy5jb25maWcuaXNTZWxlY3RPbmUpIHtcclxuICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoLi4udGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuZmlsdGVyKHggPT4geC5pZCAhPSBpdGVtLmlkKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQ2hlY2tJdGVtU2VhcmNoRXZlbnQuZW1pdChcclxuICAgICAge1xyXG4gICAgICAgIHN0YXRlOiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKGl0ZW0pLFxyXG4gICAgICAgIGl0ZW06IGl0ZW1cclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5jb25maWcubGF6eSkge1xyXG4gICAgICBpZiAoIXRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0l0ZW1TZWFyY2gpIHtcclxuICAgICAgICB0aGlzLl9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSk7XHJcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25CZWZvcmVDaGVja0l0ZW1TZWFyY2goaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsLCBjYWxsYmFjaz86IChpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XHJcbiAgICBpdGVtLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tJdGVtU2VhcmNoID0gdHJ1ZTtcclxuICAgIC8vIGhvbGQgc3RhdGUgYmVmb3JlIGNhbGwgbWV0aG9kIGNhbGxiYWNrIHRvIHByZXZlbnQgbG9zdCBpdCdzIHN0YXRlIHVuZXhwZWN0ZWRcclxuICAgIGNvbnN0IGlzU2VsZWN0ID0gdGhpcy5pc1NlbGVjdEl0ZW1TZWFyY2goaXRlbS5pZCk7XHJcbiAgICBpZiAoISFjYWxsYmFjaylcclxuICAgICAgYXdhaXQgY2FsbGJhY2soaXRlbSk7XHJcbiAgICBpdGVtLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSwgaXNTZWxlY3QpO1xyXG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcclxuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0l0ZW1TZWFyY2ggPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQmVmb3JlQ2hlY2tBbGxTZWFyY2goY2FsbGJhY2s/OiAoZGF0YSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcclxuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0FsbFNlYXJjaCA9IHRydWU7XHJcbiAgICBpZiAoISFjYWxsYmFjaylcclxuICAgICAgYXdhaXQgY2FsbGJhY2sodGhpcy5yZXN1bHRTZWFyY2gpO1xyXG4gICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrQWxsU2VhcmNoID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5yZXN1bHRTZWFyY2hbaV07XHJcbiAgICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuSGFuZGxlSXRlbVNlYXJjaFJlc3VsdChpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwpIHtcclxuICAgIGlmICghdGhpcy50cmVlQ29udHJvbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLnNvbWUobm9kZSA9PiBub2RlLmlkID09PSBpdGVtLmlkKSB8fCB0aGlzLmNvbmZpZy5sYXp5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbWFwVG9SZXN1bHRTZWFyY2goKSB7XHJcbiAgICBpZiAoISF0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGgpXHJcbiAgICAgIHRoaXMucmVzdWx0U2VhcmNoLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFeGlzdEluUmVzdWx0U2VsZWN0ZWQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkPy5zb21lKHggPT4geC5pZCA9PT0gaXRlbS5pZCB8fCB4LmNoaWxkcmVuPy5zb21lKHkgPT4geS5pZCA9PT0gaXRlbS5pZCkpO1xyXG4gICAgICAgIGlzRXhpc3RJblJlc3VsdFNlbGVjdGVkID8gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0KGl0ZW0pIDogdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoaXRlbSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsLCBzdGF0ZTogYm9vbGVhbiA9IHRoaXMuaXNTZWxlY3RJdGVtU2VhcmNoKGl0ZW0uaWQpKSB7XHJcbiAgICBpdGVtLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQudG9TdHJpbmcoKSk7XHJcbiAgICBpZiAoISFjdXJyZW50Tm9kZSkge1xyXG4gICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChjdXJyZW50Tm9kZSkpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoaXRlbSkpXHJcbiAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoY3VycmVudE5vZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KGN1cnJlbnROb2RlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNvbmZpZy5pc1NlbGVjdE9uZSA/IHRoaXMuX2hhbmRsZVNlbGVjdE9uZShjdXJyZW50Tm9kZS5pZCkgOiB0aGlzLmhhbmRsZUNoZWNrTm9kZShjdXJyZW50Tm9kZSk7XHJcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWcuaXNTZWxlY3RPbmUpIHtcclxuICAgICAgdGhpcy5faGFuZGxlU2VsZWN0T25lKGl0ZW0uaWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl91cGRhdGVTZWxlY3RlZExpc3Qoc3RhdGUgPyAnYWRkJyA6ICdyZW1vdmUnLCBpdGVtLCB0aGlzLl9zZWxlY3RlZExpc3QsIHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgaXNTZWxlY3RJdGVtU2VhcmNoKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5zb21lKHggPT4geC5pZCA9PT0gaWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlU2VsZWN0ZWRMaXN0KHN0YXRlOiAnYWRkJyB8ICdyZW1vdmUnLCBpdGVtOiBRTVNUcmVlTm9kZSwgLi4uc2VsZWN0ZWRMaXN0czogUU1TVHJlZU5vZGVbXVtdKSB7XHJcbiAgICBpZiAoIWl0ZW0pXHJcbiAgICAgIHJldHVybjtcclxuICAgIHNlbGVjdGVkTGlzdHMuZm9yRWFjaChzZWxlY3RlZExpc3QgPT4ge1xyXG4gICAgICBjb25zdCBpdGVtRXhpc3RlZCA9IHNlbGVjdGVkTGlzdC5maW5kKHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgICBjYXNlICdhZGQnOlxyXG4gICAgICAgICAgaWYgKGl0ZW0uZ3JvdXBJZCkge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHNlbGVjdGVkTGlzdC5maW5kKHggPT4geC5pZCA9PT0gaXRlbS5ncm91cElkKTtcclxuICAgICAgICAgICAgaWYgKCFncm91cCAmJiAhaXRlbUV4aXN0ZWQpIHtcclxuICAgICAgICAgICAgICBzZWxlY3RlZExpc3QucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAhZ3JvdXAuY2hpbGRyZW4uc29tZSh4ID0+IHguaWQgPT09IGl0ZW0uaWQpICYmIGdyb3VwLmNoaWxkcmVuLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICFpdGVtRXhpc3RlZCAmJiBzZWxlY3RlZExpc3QucHVzaChpdGVtKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3JlbW92ZSc6XHJcbiAgICAgICAgICBpZiAoIWl0ZW1FeGlzdGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmNoaWxkcmVuLnNvbWUoeDEgPT4geDEuaWQgPT09IGl0ZW0uaWQpKTtcclxuICAgICAgICAgICAgaWYgKCFncm91cClcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZ3JvdXAuY2hpbGRyZW4uZmluZEluZGV4KHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApXHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBncm91cC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzZWxlY3RlZExpc3Quc3BsaWNlKHNlbGVjdGVkTGlzdC5pbmRleE9mKGl0ZW1FeGlzdGVkKSwgMSk7XHJcbiAgICAgICAgICBjb25zdCBpdGVtU2VsZWN0aW9uU2VhcmNoID0gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IGl0ZW1FeGlzdGVkLmlkKTtcclxuICAgICAgICAgIGl0ZW1TZWxlY3Rpb25TZWFyY2ggJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoaXRlbVNlbGVjdGlvblNlYXJjaCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvblNlbGVjdEFsbFNlYXJjaFJlc3VsdChjaGVja2VkKSB7XHJcbiAgICBjaGVja2VkID0gIWNoZWNrZWQ7XHJcbiAgICBpZiAoIXRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmhhbmRsZUNoZWNrQWxsSXRlbVNlYXJjaCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucmVzdWx0U2VhcmNoW2ldO1xyXG4gICAgICAgIGlmKGl0ZW0uZGlzYWJsZWQpXHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICAgICAgY29uc3QgdHJlZU5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICBjb25zdCBjYW5TZWxlY3QgPSAoISF0cmVlTm9kZSB8fCB0aGlzLmNvbmZpZy5sYXp5KTtcclxuICAgICAgICAgIGlmICghY2FuU2VsZWN0KVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICF0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKGl0ZW0pICYmIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBfaXRlbVNlbGVjdGlvbnMgPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5maWx0ZXIoeCA9PiB4LmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgICAgIGlmIChfaXRlbVNlbGVjdGlvbnMubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5kZXNlbGVjdCguLi5faXRlbVNlbGVjdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkgfHwgIXRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0FsbFNlYXJjaClcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0sIGNoZWNrZWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQ2hlY2tBbGxJdGVtU2VhcmNoRXZlbnQuZW1pdChjaGVja2VkKTtcclxuICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNEaXNhYmxlQ2hlY2JveEFsbFNlYXJjaCgpIHtcclxuICAgIHJldHVybiB0aGlzLnJlc3VsdFNlYXJjaCAmJiB0aGlzLnJlc3VsdFNlYXJjaC5ldmVyeSh4ID0+IHguZGlzYWJsZWQpO1xyXG4gIH1cclxuXHJcbiAgb25QYWdpbmdTZWFyY2hSZXN1bHQodmFsOiBQYWdlRXZlbnQpIHtcclxuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMub25QYWdpbmdTZWFyY2hFdmVudC5lbWl0KHZhbCk7XHJcbiAgfVxyXG5cclxuICBzY3JvbGxUb05vZGUobm9kZUlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2Nyb2xsVG9Ob2RlRXZlbnQkLm5leHQobm9kZUlkKTtcclxuICB9XHJcblxyXG4gIHNldEluZGV4VmlldyhpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAoaW5kZXggPT09IDEgJiYgdGhpcy5jb25maWcucmVzZXRUb2dnbGVJbmNsdWRlQ2hpbGRXaGVuQ2hhbmdlVmlldykge1xyXG4gICAgICB0aGlzLmlzSW5jbHVkZUNoaWxkcmVuID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldEluZGV4VmlldyQubmV4dChpbmRleCk7XHJcbiAgfVxyXG5cclxuICBjYW5BY3RpdmVOb2RlRXh0ZXJuYWwobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBhbGxQYXJlbnQgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICByZXR1cm4gIWFsbFBhcmVudCB8fCBhbGxQYXJlbnQuZXZlcnkoaXRlbSA9PiB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQoaXRlbSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SGVpZ2h0U3R5bGVSZWZOb2RlKG5vZGVJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBub2RlRWxlID0gdGhpcy5lbGVSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAubWF0LXRyZWUtbm9kZSNtYXQtbm9kZS0ke25vZGVJZH1gKSBhcyBFbGVtZW50O1xyXG4gICAgcmV0dXJuIGAke25vZGVFbGU/LmNsaWVudEhlaWdodCB8fCAwfXB4YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWROb2RlU3RvcmFnZSgpOiBRTVNGbGF0Tm9kZVRyZWUge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NlbGVjdGVkTm9kZScpKSBhcyBRTVNGbGF0Tm9kZVRyZWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGVkTm9kZVN0b3JhZ2Uobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICB0aGlzLmlzSW5jbHVkZUNoaWxkcmVuICYmIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWxlY3RlZE5vZGUnLCBKU09OLnN0cmluZ2lmeShub2RlKSk7XHJcbiAgfVxyXG5cclxuICBzZXREZWZhdWx0UGFnaW5hdG9yU2l6ZShvcHRpb25zOiBudW1iZXJbXSkge1xyXG4gICAgdGhpcy5QQUdFX1NJWkVfT1BUSU9OID0gb3B0aW9ucztcclxuICB9XHJcblxyXG4gIHRyYWNrQnkoaW5kZXg6IG51bWJlciwgaXRlbTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlIHtcclxuICAgIHJldHVybiBpdGVtO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAgICAqIFRoaXMgZnVuY3Rpb24gdXNlIGZvciBsYXp5IGxvYWQgY2hpbGRyZW4gb2Ygbm9kZVxyXG4gICAgICAgKiBAcGFyYW0gbm9kZSBub2RlIHVwZGF0ZS4gaWYgbm9kZSBpcyBudWxsIGRhdGEgYXV0byBpbnNlcnQgYXMgcm9vdHNcclxuICAgICAgICogQHBhcmFtIGRhdGEgbGlzdCBjaGlsZHJlbiB0byB1cGRhdGUgbm9kZS5cclxuICAgICAgICogQHBhcmFtIG1vZGUgZGVmYXVsdCBpcyB1cGRhdGUgdGhhdCByZXBsYWNlIGN1cnJlbnQgbGlzdCBjaGlsZHJlbiBieSBuZXcgbGlzdCBjaGlsZHJlbiAsIGlmIG1vZGUgPSAnaW5zZXJ0JyB3aWxsIGluc2VydCBuZXcgdmFsdWVzIHRvIGxpc3QgY2hpbGRyZW4gZXhpc3RlZCBiZWZvcmUuXHJcbiAgKi9cclxuICB1cGRhdGVDaGlsZE9mTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUsIGRhdGE6IFFNU0ZsYXROb2RlVHJlZVtdID0gW10sIG1vZGU6ICdpbnNlcnQnIHwgJ3VwZGF0ZScgPSAndXBkYXRlJykge1xyXG4gICAgbm9kZS5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuY2hlY2tMb2FkaW5nT2ZQYXJlbnQobm9kZSk7XHJcbiAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xyXG4gICAgY29uc3QgZGF0YU5vZGVzID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEoZGF0YSkuZmlsdGVyKHggPT4geC5wYXJlbnRJZCA9PT0gbm9kZS5pZCk7XHJcbiAgICBpZiAoIW5lc3RlZE5vZGUpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICBjYXNlICdpbnNlcnQnOlxyXG4gICAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4ucHVzaCguLi5kYXRhTm9kZXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd1cGRhdGUnOlxyXG4gICAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4gPSBkYXRhTm9kZXM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKTtcclxuICAgIGNvbnN0IF9ub2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlLmlkKTtcclxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhfbm9kZSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVzdWx0U2VsZWN0ZWQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMucmVzdWx0U2VsZWN0ZWRbaV07XHJcbiAgICAgIHRoaXMuX3JlVXBkYXRlU2VsZWN0aW9uTm9kZShpdGVtLmlkKTtcclxuICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5nZXREZXNjZW5kYW50c09mTm9kZShpdGVtKTtcclxuICAgICAgaWYgKCFkZXNjZW5kYW50cy5sZW5ndGgpXHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGVzY2VuZGFudHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBjb25zdCBjaGlsZCA9IGRlc2NlbmRhbnRzW2pdO1xyXG4gICAgICAgIHRoaXMuX3JlVXBkYXRlU2VsZWN0aW9uTm9kZShjaGlsZC5pZClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZExpc3RBZnRlckRhdGFOb2RlQ2hhbmdlJC5uZXh0KFtfbm9kZSwgLi4ubm9kZXNdKTtcclxuICB9XHJcblxyXG4gIC8vcmUtc2VsZWN0IHdoZW4gdXBkYXRlIGNoaWxkcmVuIG9mIG5vZGVcclxuICBwcml2YXRlIF9yZVVwZGF0ZVNlbGVjdGlvbk5vZGUobm9kZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XHJcbiAgICBpZiAoIW5vZGUgfHwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgY29uc3QgZXhpc3RJblNlbGVjdGlvbiA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09IG5vZGUuaWQpO1xyXG4gICAgaWYgKGV4aXN0SW5TZWxlY3Rpb24pXHJcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KGV4aXN0SW5TZWxlY3Rpb24pO1xyXG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tMb2FkaW5nT2ZQYXJlbnQobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBhbGxQYXJlbnQgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICBpZiAoIWFsbFBhcmVudC5sZW5ndGgpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsUGFyZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IGFsbFBhcmVudFtpXTtcclxuICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKHBhcmVudCk7XHJcbiAgICAgIHBhcmVudC5pc0xvYWRpbmcgPSBkZXNjZW5kYW50cy5zb21lKHggPT4geC5pc0xvYWRpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Tm9kZUJ5SWQoaWQ6IHN0cmluZyk6IFFNU0ZsYXROb2RlVHJlZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IGlkKSB8fCB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBnZXRSb290T2ZOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBhbGxQYXJlbnQgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICBpZiAoIWFsbFBhcmVudC5sZW5ndGgpXHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gYWxsUGFyZW50LnBvcCgpO1xyXG4gIH1cclxuXHJcbiAgYWRkUm9vdFRyZWUoZGF0YTogUU1TRmxhdE5vZGVUcmVlW10gPSBbXSkge1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dChmYWxzZSk7XHJcbiAgICBpZiAoIWRhdGEubGVuZ3RoKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBjb25zdCB0cmVlTm9kZURhdGEgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YShkYXRhKTtcclxuICAgIC8vIHJlLWNoZWNrIHJvb3Qgd2FzIGV4aXN0ZWQgaW4gdHJlZVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmVlTm9kZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRyZWVOb2RlRGF0YVtpXTtcclxuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XHJcbiAgICAgIGlmICghIW5vZGUgJiYgbm9kZS5leHBhbmRhYmxlICYmICFub2RlLm1hcmtlZEdldENoaWxkcmVuKSB7XHJcbiAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuICAgICAgICBuZXN0ZWROb2RlLmNoaWxkcmVuID0gaXRlbS5jaGlsZHJlbjtcclxuICAgICAgICBuZXN0ZWROb2RlLm1hcmtlZEdldENoaWxkcmVuID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFub2RlKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRyZWVEYXRhLnB1c2goaXRlbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSQubmV4dChkYXRhKTtcclxuICB9XHJcblxyXG4gIGdldENoZWNrZWRTdGF0dXNOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVOb2RlSW5mb3JtYXRpb24obm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBsZXQgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuICAgIGlmICghbmVzdGVkTm9kZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbmVzdGVkTm9kZS5jaGlsZENvdW50ID0gbm9kZS5jaGlsZENvdW50O1xyXG4gICAgbmVzdGVkTm9kZS5uYW1lID0gbm9kZS5uYW1lO1xyXG4gICAgbmVzdGVkTm9kZS5pdGVtSWNvbiA9IG5vZGUuaXRlbUljb247XHJcbiAgICBuZXN0ZWROb2RlLml0ZW1JY29uU3ZnID0gbm9kZS5pdGVtSWNvblN2ZztcclxuICAgIG5lc3RlZE5vZGUuc2VsZWN0ZWRDaGlsZENvdW50ID0gbm9kZS5zZWxlY3RlZENoaWxkQ291bnQ7XHJcbiAgICBuZXN0ZWROb2RlLm1hcmtlZEdldENoaWxkQ291bnRSZWN1cnJzaXZlID0gbm9kZS5tYXJrZWRHZXRDaGlsZENvdW50UmVjdXJyc2l2ZTtcclxuICAgIG5lc3RlZE5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZCA9IG5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGVkUmVzdWx0RGF0YShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IG5vZGVSZXN1bHQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoKHgpID0+IHguaWQgPT09IG5vZGUuaWQpO1xyXG4gICAgaWYgKG5vZGVSZXN1bHQpIHtcclxuICAgICAgbm9kZVJlc3VsdC5jaGlsZENvdW50ID0gbm9kZS5jaGlsZENvdW50O1xyXG4gICAgICBub2RlUmVzdWx0LnNlbGVjdGVkQ2hpbGRDb3VudCA9IG5vZGUuc2VsZWN0ZWRDaGlsZENvdW50O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsbENoZWNrTm9kZU91dHNpZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XHJcbiAgICAvL3RoaXMuaGFuZGxlQ2hlY2tOb2RlKG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleGVjV2l0aG91dEVtaXROb2RlQ2hhbmdlRXZlbnQoYWN0aW9uOiAoKSA9PiB2b2lkKXtcclxuICAgICAgdGhpcy5sb2NrSGFuZGxlU2VsZWN0aW9uQ2hhbmdlID0gdHJ1ZTtcclxuICAgICAgYWN0aW9uKCk7XHJcbiAgICAgIHRoaXMubG9ja0hhbmRsZVNlbGVjdGlvbkNoYW5nZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNEaXNhYmxlZE5vZGUgPSAobm9kZUlkOiBzdHJpbmcpID0+IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09IG5vZGVJZCk/LmRpc2FibGVkO1xyXG59XHJcbiJdfQ==
1180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFtQyx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyTSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxT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QUV0RCxVQUFVLEVBQUU7b0JBQ1YsdUJBQXVCO2lCQUN4QjtnQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7OztZQXRDa0UsaUJBQWlCO1lBSzNFLFlBQVk7WUFPWixzQkFBc0I7WUFWdEIsZUFBZTtZQUZ5RSxVQUFVO1lBV2xHLHVCQUF1QjtZQWR2QixPQUFPO1lBRzZJLGdCQUFnQjtZQXFCcEssb0NBQW9DOzs7MkJBc0IxQyxLQUFLO3FCQUdMLEtBQUs7cUJBQ0wsS0FBSzsyQkFDTCxLQUFLOzRCQWdCTCxNQUFNO2tDQUNOLE1BQU07aUNBQ04sTUFBTTt1Q0FDTixNQUFNOytCQUNOLE1BQU07Z0NBQ04sTUFBTTs4QkFDTixNQUFNO3FDQUNOLE1BQU07d0NBQ04sTUFBTTtzQ0FDTixNQUFNO3VDQUVOLFNBQVMsU0FBQyx3QkFBd0I7OEJBQ2xDLFNBQVMsU0FBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBPdmVybGF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBGbGF0VHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRJY29uUmVnaXN0cnkgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRUcmVlRmxhdERhdGFTb3VyY2UsIE1hdFRyZWVGbGF0dGVuZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgZmlsdGVyLCBtYXAsIHBhaXJ3aXNlLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBRTVNGbGF0Tm9kZVRyZWUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1mbGF0LW5vZGUubW9kZWwnO1xuaW1wb3J0IHsgUU1TVHJlZU5vZGUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy10cmVlLW5vZGUubW9kZWwnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnaW5hdGlvblNpemUsIFFNU1BhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL3Ftcy1wYWdpbmF0b3InO1xuaW1wb3J0IHsgSXRlbUljb25UeXBlIH0gZnJvbSAnLi4vcmVsYXRlZC9jb21tb24vaXRlbS1pY29uLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBbmltYXRpb25UcmVlRGVwYXJ0bWVudCB9IGZyb20gJy4vYW5pbWF0aW9uL2FuaW1hdGlvbic7XG5pbXBvcnQgeyBNb2RlRGVwYXJ0bWVudFRyZWVlVmlld0VudW0gfSBmcm9tICcuL2VudW0vbW9kZS1kZXBhcnRtZW50LXRyZWUtdmlldy5lbnVtJztcbmltcG9ydCB7IFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbCB9IGZyb20gJy4vbW9kZWwvZGVwYXJ0bWVudC1wYWdpbmcubW9kZWwnO1xuaW1wb3J0IHsgRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYiwgRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsIH0gZnJvbSAnLi9tb2RlbC9kZXBhcnRtZW50LXNlYXJjaC1yZXN1bHQubW9kZWwnO1xuaW1wb3J0IHsgUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVDb25maWcgfSBmcm9tICcuL21vZGVsL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUuY29uZmlnJztcbmltcG9ydCB7IElTZWxlY3Rpb25Ob2RlQ2hhbmdlIH0gZnJvbSAnLi9tb2RlbC9zZWxlY3Rpb24tY2hhbmdlLm1vZGVsJztcbmltcG9ydCB7IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlR2xvYmFsU2VydmljZSB9IGZyb20gJy4vc2VydmljZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLWdsb2JhbC5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIElIYW5kbGluZ0V2ZW50TGF6eSB7XG4gIGNoZWNrQWxsU2VhcmNoOiBib29sZWFuO1xuICBjaGVja0l0ZW1TZWFyY2g6IGJvb2xlYW47XG4gIGNoZWNrTm9kZTogYm9vbGVhbjtcbiAgZXhwYW5kOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxbXMtc2VsZWN0LWRlcGFydG1lbnQtdHJlZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuc2NzcyddLFxuICBhbmltYXRpb25zOiBbXG4gICAgQW5pbWF0aW9uVHJlZURlcGFydG1lbnRcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdERlcGFydG1lbnRUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgTEFORzogYW55O1xuICByZWFkb25seSBzcGlubmVyQXJyID0gbmV3IEFycmF5KDEyKS5maWxsKDApO1xuICBhcnJTa2VsZXRvbiA9IG5ldyBBcnJheSg2KS5maWxsKDApO1xuICBASW5wdXQoKSBzZXQgcm93c1NrZWxldG9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmFyclNrZWxldG9uID0gbmV3IEFycmF5KHZhbHVlKS5maWxsKDApO1xuICB9XG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gJzUwdmgnO1xuICBASW5wdXQoKSBjb25maWc6IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlQ29uZmlnID0gbmV3IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlQ29uZmlnKCk7XG4gIEBJbnB1dCgpIG1heFdpZHRoTm9kZTogbnVtYmVyID0gNjUwO1xuICBpc0luY2x1ZGVDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBnZXQgZGVwYXJ0bWVudFJvb3RzKCkge1xuICAgIGlmICghdGhpcy50cmVlQ29udHJvbClcbiAgICAgIHJldHVybjtcbiAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKG5vZGUgPT4gbm9kZS5sZXZlbCA9PT0gMCk7XG4gIH1cblxuICBnZXQgaXNBbGxEZXBhcnRtZW50U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy50cmVlQ29udHJvbCAmJiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5ldmVyeShub2RlID0+IHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSkpO1xuICB9XG5cbiAgZ2V0IGlzSW5kZXRlcm1pbmF0ZUNoZWNrYm94QWxsVHJlZSgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNBbGxEZXBhcnRtZW50U2VsZWN0ZWQgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID4gMDtcbiAgfVxuXG4gIEBPdXRwdXQoKSBvblNlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBvblBhZ2luZ1NlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvblZhbHVlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1RyZWVOb2RlW10+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPElTZWxlY3Rpb25Ob2RlQ2hhbmdlPFFNU1RyZWVOb2RlPj4oKTtcbiAgQE91dHB1dCgpIG9uQ2hlY2tOb2RlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU0ZsYXROb2RlVHJlZT4oKTtcbiAgQE91dHB1dCgpIG9uRXhwYW5kTm9kZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNGbGF0Tm9kZVRyZWU+KCk7XG4gIEBPdXRwdXQoKSBvbkxvYWRNb3JlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvbkNoZWNrSXRlbVNlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0YXRlOiBib29sZWFuLCBpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwgfT4oKTtcbiAgQE91dHB1dCgpIG9uQ2hlY2tBbGxJdGVtU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSB0b2dnbGVJbmNsdWRlQ2hpbGRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCkgY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG4gIEBWaWV3Q2hpbGQoJ3BhZ2luYXRvclNlYXJjaCcpIHBhZ2luYXRvclNlYXJjaDogUU1TUGFnaW5hdG9yQ29tcG9uZW50O1xuXG4gIHJlYWRvbmx5IE1PREVfVklFV19FTlVNID0gTW9kZURlcGFydG1lbnRUcmVlZVZpZXdFbnVtO1xuICBJVEVNX1NJWkUgPSA1MDtcbiAgcmVhZG9ubHkgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlc3VsdFNlYXJjaFNlbGVjdGVkOiBRTVNUcmVlTm9kZVtdID0gW107XG4gIHJlc3VsdFNlbGVjdGVkOiBRTVNUcmVlTm9kZVtdID0gW107XG4gIHJlYWRvbmx5IGdldERhdGFUcmVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TVHJlZU5vZGVbXT4oW10pO1xuICByZWFkb25seSBzZWFyY2hEZXBhcnRtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TRGVwYXJ0bWVudFBhZ2luZ01vZGVsPFFNU0ZsYXROb2RlVHJlZT4+KG5ldyBRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPigpKTtcbiAgcmVzdWx0U2VhcmNoOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWxbXSA9IFtdO1xuXG4gIGdldCBjdXJyZW50VHJlZURhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVRyZWUkLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXQgaXNTZWxlY3RBbGxSZXN1bHRTZWFyY2goKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aCAmJiB0aGlzLnJlc3VsdFNlYXJjaC5ldmVyeSh4ID0+IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoeCkpO1xuICB9XG5cbiAgZ2V0IGluZGV0ZXJtaW5hdGVTZWFyY2hSZXN1bHQoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzU2VsZWN0QWxsUmVzdWx0U2VhcmNoICYmICEhdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoICYmIHRoaXMucmVzdWx0U2VhcmNoLnNvbWUoeCA9PiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKHgpKTtcbiAgfVxuXG4gIHJlYWRvbmx5IGdldEluZGV4VmlldyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IHNjcm9sbFRvTm9kZUV2ZW50JCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZ2V0QWN0aXZlTm9kZUV2ZW50JCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgYWN0aXZlTm9kZTogc3RyaW5nID0gJyc7XG5cbiAgcmVhZG9ubHkgUEFHSU5BVElPTl9TSVpFID0gUGFnaW5hdGlvblNpemU7XG4gIFBBR0VfU0laRV9PUFRJT046IG51bWJlcltdID0gWzUsIDEwLCAxNSwgMjAsIDI1LCAxMDBdO1xuICBDVVJSRU5UX1BBR0VTSVpFOiBudW1iZXIgPSAxMDtcbiAgcmVhZG9ubHkgbmVzdGVkVHJlZU5vZGVNYXAgPSBuZXcgTWFwPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+KCk7XG4gIHJlYWRvbmx5IGZsYXRUcmVlTm9kZU1hcCA9IG5ldyBNYXA8UU1TRmxhdE5vZGVUcmVlLCBRTVNUcmVlTm9kZT4oKTtcbiAgcmVhZG9ubHkgY2hlY2tMaXN0U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFFNU0ZsYXROb2RlVHJlZT4odHJ1ZSk7XG4gIHJlYWRvbmx5IGNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWw+KHRydWUpO1xuICB0cmVlQ29udHJvbDogRmxhdFRyZWVDb250cm9sPFFNU0ZsYXROb2RlVHJlZT47XG4gIHRyZWVGbGF0dGVuZXI6IE1hdFRyZWVGbGF0dGVuZXI8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT47XG4gIGRhdGFTb3VyY2U6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPjtcblxuICBkYXRhU291cmNlVHJlZVNlYXJjaDogTWF0VHJlZUZsYXREYXRhU291cmNlPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+O1xuICBwcml2YXRlIF9zZWxlY3RlZExpc3Q6IFFNU1RyZWVOb2RlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZExpc3RBZnRlckRhdGFOb2RlQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PFFNU0ZsYXROb2RlVHJlZVtdPigpO1xuXG4gIGZvcm1TZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgcmVhZG9ubHkgZ2V0TG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZ2V0TG9hZGluZ01vcmUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgdW50aWxEZXN0cm95TG9hZE1vcmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb25CZWZvcmVJbml0Tm9kZVNlbGVjdGVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgdGV4dFNlYXJjaFN1YmplY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgaXRlbUljb25UeXBlID0gSXRlbUljb25UeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IF90cmFuc2Zvcm1lciA9IChub2RlOiBRTVNUcmVlTm9kZSwgbGV2ZWw6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5jb252ZXJ0VG9GbGF0Tm9kZShub2RlKSB8fCBuZXcgUU1TRmxhdE5vZGVUcmVlKCk7XG4gICAgZmxhdE5vZGUuaWQgPSBub2RlLmlkO1xuICAgIGZsYXROb2RlLm5hbWUgPSBub2RlLm5hbWU7XG4gICAgZmxhdE5vZGUuZXhwYW5kYWJsZSA9IChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHwgKCEhbm9kZS5jaGlsZENvdW50KSB8fCBub2RlLmV4cGFuZGFibGU7XG4gICAgZmxhdE5vZGUubGV2ZWwgPSBsZXZlbDtcbiAgICBmbGF0Tm9kZS5wYXJlbnRJZCA9IG5vZGUucGFyZW50SWQ7XG4gICAgZmxhdE5vZGUubWFya2VkR2V0Q2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gICAgZmxhdE5vZGUuaXRlbUljb24gPSBub2RlLml0ZW1JY29uO1xuICAgIGZsYXROb2RlLml0ZW1JY29uU3ZnID0gbm9kZS5pdGVtSWNvblN2ZztcbiAgICBmbGF0Tm9kZS5pc0ZpbGUgPSBub2RlLmlzRmlsZTtcbiAgICBmbGF0Tm9kZS5kaXNhYmxlZCA9IG5vZGUuZGlzYWJsZWQ7XG4gICAgZmxhdE5vZGUuaXNHcm91cCA9IG5vZGUuaXNHcm91cDtcbiAgICBmbGF0Tm9kZS5ncm91cElkID0gbm9kZS5ncm91cElkO1xuICAgIGZsYXROb2RlLmV4dGVybmFsTmFtZSA9IG5vZGUuZXh0ZXJuYWxOYW1lO1xuICAgIGZsYXROb2RlLmNoaWxkQ291bnQgPSBub2RlLmNoaWxkQ291bnQ7XG4gICAgZmxhdE5vZGUuc2VsZWN0ZWRDaGlsZENvdW50ID0gbm9kZS5zZWxlY3RlZENoaWxkQ291bnQ7XG4gICAgZmxhdE5vZGUubWFya2VkR2V0Q2hpbGRDb3VudFJlY3VycnNpdmUgPSBub2RlLm1hcmtlZEdldENoaWxkQ291bnRSZWN1cnJzaXZlO1xuICAgIGZsYXROb2RlLmlzSW5jbHVkZUNoaWxkV2hlbkNoZWNrZWQgPSBub2RlLmlzSW5jbHVkZUNoaWxkV2hlbkNoZWNrZWQ7XG4gICAgZmxhdE5vZGUuZXhwYW5kSWNvbiA9IG5vZGUuZXhwYW5kSWNvbjtcblxuICAgIHRoaXMuZmxhdFRyZWVOb2RlTWFwLnNldChmbGF0Tm9kZSwgbm9kZSk7XG4gICAgdGhpcy5uZXN0ZWRUcmVlTm9kZU1hcC5zZXQobm9kZSwgZmxhdE5vZGUpO1xuICAgIHJldHVybiBmbGF0Tm9kZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZ2V0TGV2ZWwgPSAobm9kZTogUU1TRmxhdE5vZGVUcmVlKSA9PiBub2RlPy5sZXZlbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZ2V0Q2hpbGQgPSAobm9kZTogUU1TVHJlZU5vZGUpID0+IG5vZGUuY2hpbGRyZW47XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNFeHBhbmRhYmxlID0gKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gbm9kZS5leHBhbmRhYmxlO1xuICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gbm9kZS5leHBhbmRhYmxlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsaW5nTGF6eU9iamVjdDogSUhhbmRsaW5nRXZlbnRMYXp5ID0ge1xuICAgIGNoZWNrQWxsU2VhcmNoOiBmYWxzZSxcbiAgICBjaGVja0l0ZW1TZWFyY2g6IGZhbHNlLFxuICAgIGNoZWNrTm9kZTogZmFsc2UsXG4gICAgZXhwYW5kOiBmYWxzZVxuICB9XG5cbiAgcHJpdmF0ZSAgbG9ja0hhbmRsZVNlbGVjdGlvbkNoYW5nZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBhcHBJY29uU2VydmljZTogUU1TSWNvblJlZ2lzdHJ5U2VydmljZSxcbiAgICBwcml2YXRlIGljb25SZWdpc3RyeTogTWF0SWNvblJlZ2lzdHJ5LFxuICAgIHByaXZhdGUgZWxlUmVmOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyB0cmFuczogVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UsXG4gICAgcHVibGljIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHVibGljIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSB0cmVlRGVwYXJ0bWVudFNlcnZpY2U6IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlR2xvYmFsU2VydmljZVxuICApIHtcbiAgICAvLyBJbml0IHRyZWUgZGF0YVxuICAgIHRoaXMuZ2V0RGF0YVRyZWUkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhU291cmNlKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIC8vIFJlZ2lzdGVyIGljb25cbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NBcmVhSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEb2N1bWVudEljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRm9sZGVySWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEZXZpYXRpb25JY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckNoZWNrbGlzdEljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUmlza0ljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuXG4gICAgdGhpcy50cmFucy5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnMuZ2V0T2JqZWN0TGFuZyhyZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX2hhbmRsZVNlYXJjaEV2ZW50KCk7XG4gICAgdGhpcy5faGFuZGxlQWN0aXZlTm9kZUV2ZW50KCk7XG4gICAgdGhpcy5faGFuZGxlSXRlbVNlbGVjdGlvbkNoYW5nZWQoKTtcblxuICAgIHRoaXMuZ2V0TG9hZGluZyQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgdGFwKHJlcyA9PiB7XG4gICAgICAgIHJlcyA/IHRoaXMuZm9ybVNlYXJjaENvbnRyb2wuZGlzYWJsZSgpIDogdGhpcy5mb3JtU2VhcmNoQ29udHJvbC5lbmFibGUoKTtcbiAgICAgIH0pKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldEluZGV4VmlldyQucGlwZShcbiAgICAgIHRha2VVbnRpbChtZXJnZSh0aGlzLm5nVW5zdWJzY3JpYmUsIHRoaXMudW50aWxEZXN0cm95TG9hZE1vcmUkKSksXG4gICAgICB0YXAoXyA9PiB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KHRoaXMuY29uZmlnLmxhenkpKSxcbiAgICAgIGRlbGF5KDcwMCksXG4gICAgICB0YXAodmFsdWUgPT4ge1xuICAgICAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0ICYmXG4gICAgICAgICAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxlZEluZGV4Q2hhbmdlXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJCksXG4gICAgICAgICAgICAgICAgbWFwKF8gPT4gdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQubWVhc3VyZVNjcm9sbE9mZnNldCgnYm90dG9tJykpLFxuICAgICAgICAgICAgICAgIHBhaXJ3aXNlKCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChbeDEsIHgyXSkgPT4geDEgPiB4MiAmJiB4MiA8IDE0MCksXG4gICAgICAgICAgICAgICAgdGhyb3R0bGVUaW1lKDIwMCksXG4gICAgICAgICAgICAgICAgdGFwKF8gPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0TG9hZGluZ01vcmUkLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRlc3Ryb3lMb2FkTW9yZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0aGlzLm9uTG9hZE1vcmVFdmVudC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICB9KSkuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLm9uQmVmb3JlSW5pdE5vZGVTZWxlY3RlZCQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCB0YXAoXyA9PiB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUxpc3RTZWxlY3RlZCgpO1xuICAgICAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcbiAgICAgIH0pKS5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4gPSB0aGlzLmNvbmZpZy5pc0luY2x1ZGVDaGlsZHJlbjtcbiAgICB0aGlzLl9pbml0VHJlZURhdGEoKTtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUxpc3RTZWxlY3RlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvL2FjdGlvbiBmb3IgbGF6eSBjb25maWdcbiAgICB0aGlzLl9pbml0TGlzdFNlbGVjdGVkKCk7XG4gICAgdGhpcy5faGFuZGxlQWZ0ZXJEYXRhTm9kZUNoYW5nZUV2ZW50KCk7XG4gICAgdGhpcy5zZWxlY3RlZExpc3RBZnRlckRhdGFOb2RlQ2hhbmdlJC5uZXh0KHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBvbkRlc3Ryb3lMb2FkTW9yZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJC5uZXh0KCk7XG4gICAgdGhpcy51bnRpbERlc3Ryb3lMb2FkTW9yZSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRUcmVlRGF0YSgpIHtcbiAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxRTVNGbGF0Tm9kZVRyZWU+KHRoaXMuZ2V0TGV2ZWwsIHRoaXMuaXNFeHBhbmRhYmxlKTtcbiAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSBuZXcgTWF0VHJlZUZsYXR0ZW5lcih0aGlzLl90cmFuc2Zvcm1lciwgdGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUsIHRoaXMuX2dldENoaWxkKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XG4gICAgY29uc3QgX3RyZWVEYXRhSW5wdXQ6IFFNU0ZsYXROb2RlVHJlZVtdID0gXy5jbG9uZURlZXAodGhpcy5jb25maWcudHJlZURhdGEpXG4gICAgaWYgKCFfdHJlZURhdGFJbnB1dC5sZW5ndGgpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgdHJlZURhdGEgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YShfdHJlZURhdGFJbnB1dCk7XG4gICAgdGhpcy51cGRhdGVEYXRhVHJlZSh0cmVlRGF0YSk7XG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUxpc3RTZWxlY3RlZCgpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdC5sZW5ndGgpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgdHJlZU5vZGVzID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEodGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0Lm1hcCh4ID0+KHsuLi54LHBhcmVudElkOiB4Lmdyb3VwSWR9KSkpO1xuXG4gICAgdGhpcy5leGVjV2l0aG91dEVtaXROb2RlQ2hhbmdlRXZlbnQoKCkgPT57XG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zOiBRTVNUcmVlTm9kZVtdID0gW107XG4gICAgICBjb25zdCByZU1hcFRyZWVOb2RlID0gKGl0ZW06IFFNU1RyZWVOb2RlLCBjbGVhckdyb3VwSWQ6IGJvb2xlYW4gPSBmYWxzZSkgPT57XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKHggPT4geC5pZCA9PSBpdGVtLmlkKTtcbiAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcbiAgICAgICAgbm9kZS5ncm91cElkID0gaXRlbS5ncm91cElkO1xuICAgICAgICBub2RlLmlzR3JvdXAgPSBpdGVtLmlzR3JvdXA7XG4gICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5uZXN0ZWROb2RlLFxuICAgICAgICAgIGdyb3VwSWQ6IGNsZWFyR3JvdXBJZCA/IG51bGwgOiBpdGVtLmdyb3VwSWQsXG4gICAgICAgICAgaXNHcm91cDogaXRlbS5pc0dyb3VwLFxuICAgICAgICAgIGNoaWxkQ291bnQ6IG5lc3RlZE5vZGUuY2hpbGRDb3VudCA/PyB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5sZW5ndGgsXG4gICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJlZU5vZGVzLmZvckVhY2goaXRlbSA9PntcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoeCA9PiB4LmlkID09IGl0ZW0uaWQpO1xuICAgICAgICBpZighbm9kZSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgIHNlbGVjdGVkSXRlbXMucHVzaCh7Li4ucmVNYXBUcmVlTm9kZShpdGVtLCB0cnVlKSwgY2hpbGRyZW46IGl0ZW0uY2hpbGRyZW4ubWFwKHggPT4gcmVNYXBUcmVlTm9kZSh4KSl9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5wdXNoKC4uLnNlbGVjdGVkSXRlbXMpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgnYWRkZWQnLCB0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRMaXN0U2VsZWN0ZWQoKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEodGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0KTtcbiAgICAvL0NvbnZlcnQgYXJyYXkgc2VsZWN0ZWRMaXN0IGludG8gbmVzdGVkIGFycmF5IGFzIDEgbGV2ZWwgZm9ybVxuICAgIGNvbnN0IGluZGV4UmVtb3ZlID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9zZWxlY3RlZExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9zZWxlY3RlZExpc3RbaV07XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5nZXREZXNjZW5kYW50c09mTm9kZShpdGVtKS5maWx0ZXIoeCA9PiB4Lmdyb3VwSWQgPT0gaXRlbS5pZCk7XG4gICAgICBpdGVtLmNoaWxkcmVuID0gcmVzdWx0O1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9zZWxlY3RlZExpc3QuZmluZEluZGV4KHggPT4gcmVzdWx0LnNvbWUoeDEgPT4geDEuaWQgPT09IHguaWQpKVxuICAgICAgaWYgKGluZGV4IDwgMClcbiAgICAgICAgY29udGludWU7XG4gICAgICBpbmRleFJlbW92ZS5wdXNoKGluZGV4KTtcbiAgICB9XG4gICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbHRlcigoXywgaW5kZXgpID0+ICFpbmRleFJlbW92ZS5pbmNsdWRlcyhpbmRleCkpO1xuXG4gICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5wdXNoKC4uLnRoaXMuX3NlbGVjdGVkTGlzdCk7XG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgfVxuXG4gIC8vIGhhbmRsZSBzZWxlY3RlZCBsaXN0IHdoZW4gZGF0YSBub2RlcyBjaGFuZ2VcbiAgcHJpdmF0ZSBfaGFuZGxlQWZ0ZXJEYXRhTm9kZUNoYW5nZUV2ZW50KCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgIHRhcChkYXRhID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fc2VsZWN0ZWRMaXN0Lmxlbmd0aClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgIGlmICghaXRlbS5wYXJlbnRJZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgIGlmIChub2RlKVxuICAgICAgICAgICAgICAgICAgaXRlbS5wYXJlbnRJZCA9IG5vZGUucGFyZW50SWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkYXRhW2ldO1xuICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmlkID09PSBlbGVtZW50LmlkIHx8IHguY2hpbGRyZW4/LnNvbWUoeDEgPT4geDEuaWQgPT09IGVsZW1lbnQuaWQpKTtcbiAgICAgICAgICAgICAgaWYgKCEhaXRlbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgIGlmICghbm9kZSlcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5pc0dyb3VwID0gaXRlbS5pc0dyb3VwO1xuICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuZ3JvdXBJZCA9IGl0ZW0uZ3JvdXBJZDtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5tYXJrZWRHZXRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtLmNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2VsZWN0ID0gZGVzY2VuZGFudHMuZmlsdGVyKHggPT4gaXRlbS5jaGlsZHJlbi5tYXAoeDEgPT4geDEuaWQpLmluY2x1ZGVzKHguaWQpKTtcbiAgICAgICAgICAgICAgICAgIGlmICghaXRlbVNlbGVjdC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdC5mb3JFYWNoKF9pdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX25lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoX2l0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBfbmVzdGVkTm9kZS5ncm91cElkID0gaXRlbS5jaGlsZHJlblswXS5ncm91cElkO1xuICAgICAgICAgICAgICAgICAgICBfbmVzdGVkTm9kZS5pc0dyb3VwID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5pdGVtU2VsZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSlcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB1c2UgZm9yIGxhenkgbW9kZSwgZG8gc29tZSB0aGluZyBiZWZvcmUgaW5pdCBsaXN0IG5vZGUgc2VsZWN0ZWRcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhc3luYyBvbkJlZm9yZUluaXROb2RlU2VsZWN0ZWQoY2FsbGJhY2s/OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgIGlmICghdGhpcy5jb25maWcubGF6eSlcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KHRydWUpO1xuICAgIGlmICghIWNhbGxiYWNrKVxuICAgICAgYXdhaXQgY2FsbGJhY2soKTtcbiAgICB0aGlzLm9uQmVmb3JlSW5pdE5vZGVTZWxlY3RlZCQubmV4dCgpO1xuICB9XG5cbiAgLy9IYW5kbGUgaXRlbSBzZWxlY3Rpb24gY2hhbmdlZFxuICBwcml2YXRlIF9oYW5kbGVJdGVtU2VsZWN0aW9uQ2hhbmdlZCgpIHtcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5jaGFuZ2VkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgYWRkZWQsIHJlbW92ZWQgfSkgPT4ge1xuICAgICAgICBpZih0aGlzLmxvY2tIYW5kbGVTZWxlY3Rpb25DaGFuZ2UpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBjaGVja0V4aXN0SW5SZXN1bHQgPSAobm9kZTogUU1TRmxhdE5vZGVUcmVlIHwgUU1TVHJlZU5vZGUpOiBib29sZWFuID0+IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCkgPiAtMTtcbiAgICAgICAgaWYgKGFkZGVkLmxlbmd0aCkge1xuICAgICAgICAgIGFkZGVkLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlOiBRTVNUcmVlTm9kZSA9IF8uY2xvbmVEZWVwKHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKSk7XG4gICAgICAgICAgICBuZXN0ZWROb2RlLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkpXG4gICAgICAgICAgICAgIG5lc3RlZE5vZGUuY2hpbGRDb3VudCA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0R3JvdXA6IFFNU1RyZWVOb2RlID0gXy5jbG9uZURlZXAoXG4gICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKVxuICAgICAgICAgICAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKGl0ZW0pXG4gICAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmdyb3VwSWQgPSBpdGVtLmdyb3VwSWQ7XG4gICAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSBpdGVtLmlzR3JvdXA7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmVzdGVkTm9kZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAuZmluZCh4ID0+IHguaXNHcm91cClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoISFleGlzdEdyb3VwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZsYXRFeGlzdEdyb3VwID0gdGhpcy5nZXROb2RlQnlJZChleGlzdEdyb3VwLmlkKTtcbiAgICAgICAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gZXhpc3RHcm91cC5pZDtcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZXN1bHQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBleGlzdEdyb3VwLmlkKTtcbiAgICAgICAgICAgICAgaWYgKGdyb3VwUmVzdWx0ICYmICFncm91cFJlc3VsdC5jaGlsZHJlbi5zb21lKHggPT4geC5pZCA9PT0gbmVzdGVkTm9kZS5pZCkpIHtcbiAgICAgICAgICAgICAgICBncm91cFJlc3VsdC5pc0dyb3VwID0gZXhpc3RHcm91cC5pc0dyb3VwO1xuICAgICAgICAgICAgICAgIGdyb3VwUmVzdWx0LmNoaWxkcmVuLnB1c2gobmVzdGVkTm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3VwZGF0ZWQnLCBbZ3JvdXBSZXN1bHRdKTtcbiAgICAgICAgICAgICAgLy8gcmUtZmlsdGVyIHJlc3VsdCBzZWxlY3RlZFxuICAgICAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maWx0ZXIoaXRlbSA9PiBpdGVtLmRpc2FibGVkIHx8ICF0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShmbGF0RXhpc3RHcm91cCkubWFwKHggPT4geC5pZCkuaW5jbHVkZXMoaXRlbS5pZCkpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tFeGlzdEluUmVzdWx0KG5vZGUpKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnB1c2gobmVzdGVkTm9kZSk7XG4gICAgICAgICAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgnYWRkZWQnLCBbbmVzdGVkTm9kZV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZW1vdmVkLmxlbmd0aCkge1xuICAgICAgICAgIHJlbW92ZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpO1xuICAgICAgICAgICAgaWYgKG5lc3RlZE5vZGUuaXNHcm91cCkge1xuICAgICAgICAgICAgICBjb25zdCBfaXRlbSA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IG5vZGUuaWQpO1xuICAgICAgICAgICAgICBpZiAoIV9pdGVtKSByZXR1cm47XG4gICAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goaXRlbSA9PiBpdGVtLmdyb3VwSWQgPSBudWxsKTtcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5zcGxpY2UodGhpcy5yZXN1bHRTZWxlY3RlZC5pbmRleE9mKF9pdGVtKSwgMSk7XG4gICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdyZW1vdmVkJywgW19pdGVtXSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gbmVzdGVkTm9kZS5ncm91cElkKTtcbiAgICAgICAgICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgICAgICAgY29uc3QgX2l0ZW0gPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlLmlkKTtcbiAgICAgICAgICAgICAgaWYgKCFfaXRlbSkgcmV0dXJuO1xuICAgICAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnNwbGljZSh0aGlzLnJlc3VsdFNlbGVjdGVkLmluZGV4T2YoX2l0ZW0pLCAxKTtcbiAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3JlbW92ZWQnLCBbX2l0ZW1dKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmNvbmNhdChub2RlKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY2hpbGROb2Rlc1tpXTtcbiAgICAgICAgICAgICAgY29uc3QgX25vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpXG4gICAgICAgICAgICAgIGlmIChncm91cC5jaGlsZHJlbi5zb21lKHggPT4geC5pZCA9PT0gX25vZGUuaWQpICYmICF0aGlzLmlzU2VsZWN0ZWROb2RlKF9ub2RlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pdGVtID0gZ3JvdXAuY2hpbGRyZW4uZmluZCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgIGlmICghX2l0ZW0pIHJldHVybjtcbiAgICAgICAgICAgICAgICBncm91cC5jaGlsZHJlbi5zcGxpY2UoZ3JvdXAuY2hpbGRyZW4uaW5kZXhPZihfaXRlbSksIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCd1cGRhdGVkJywgW2dyb3VwXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYXBUb1Jlc3VsdFNlYXJjaCgpO1xuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudChzdGF0ZTogJ3JlbW92ZWQnIHwgJ3VwZGF0ZWQnIHwgJ2FkZGVkJywgZGF0YTogUU1TVHJlZU5vZGVbXSkge1xuICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgIGNhc2UgJ3JlbW92ZWQnOlxuICAgICAgICB0aGlzLnNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudC5lbWl0KHtcbiAgICAgICAgICByZW1vdmVkOiBkYXRhLFxuICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICB1cGRhdGVkOiBbXSxcbiAgICAgICAgICBzb3VyY2U6IG5ldyBTZWxlY3Rpb25Nb2RlbCh0cnVlLCB0aGlzLnJlc3VsdFNlbGVjdGVkKVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1cGRhdGVkJzpcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQuZW1pdCh7XG4gICAgICAgICAgcmVtb3ZlZDogW10sXG4gICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgIHVwZGF0ZWQ6IGRhdGEsXG4gICAgICAgICAgc291cmNlOiBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSwgdGhpcy5yZXN1bHRTZWxlY3RlZClcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYWRkZWQnOlxuICAgICAgICB0aGlzLnNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudC5lbWl0KHtcbiAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICBhZGRlZDogZGF0YSxcbiAgICAgICAgICB1cGRhdGVkOiBbXSxcbiAgICAgICAgICBzb3VyY2U6IG5ldyBTZWxlY3Rpb25Nb2RlbCh0cnVlLCB0aGlzLnJlc3VsdFNlbGVjdGVkKVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlU2VhcmNoRXZlbnQoKSB7XG4gICAgdGhpcy5zZWFyY2hEZXBhcnRtZW50JFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgIHRoaXMucmVzdWx0U2VhcmNoID0gW107XG4gICAgICAgIHRoaXMuQ1VSUkVOVF9QQUdFU0laRSA9IHJlc3VsdC5wYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgICAgICAgICAgbGV0IGxvY2F0aW9uOiBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iW10gPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5KSB7XG4gICAgICAgICAgICAgIGxvY2F0aW9uID0gaXRlbS5wYXRoPy5tYXAoeCA9PiAoeyBuYW1lOiB4IH0gYXMgRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYikpIHx8IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSBub2RlID8gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpIDogW107XG4gICAgICAgICAgICAgIGxvY2F0aW9uID0gcGFyZW50cy5sZW5ndGggPyBwYXJlbnRzLm1hcCgoeCkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgICAgIH0gYXMgRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYikpLnJldmVyc2UoKSA6IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWFyY2gucHVzaCh7XG4gICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIHx8ICF0aGlzLmNvbmZpZy5sYXp5ICYmIHRoaXMuY29uZmlnLmNoZWNrU2VhcmNoTWFwcGluZ1RyZWUgJiYgIW5vZGUsXG4gICAgICAgICAgICAgIGxvY2F0aW9uOiBbXG4gICAgICAgICAgICAgICAgLi4ubG9jYXRpb24sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnRleHRTZWFyY2hTdWJqZWN0JC5uZXh0KHRoaXMuZm9ybVNlYXJjaENvbnRyb2wudmFsdWUpO1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5jbGVhckNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaFdoZW5IYW5kbGUpXG4gICAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5jbGVhcigpO1xuICAgICAgICAgIHRoaXMuX21hcFRvUmVzdWx0U2VhcmNoKCk7XG4gICAgICAgICAgdGhpcy5zZXRJbmRleFZpZXcoMSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQWN0aXZlTm9kZUV2ZW50KCkge1xuICAgIHRoaXMuc2Nyb2xsVG9Ob2RlRXZlbnQkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIHN3aXRjaE1hcCgodmFsKSA9PiB7XG4gICAgICBjb25zdCBkZWxheVRpbWluZyA9IHRoaXMuZ2V0SW5kZXhWaWV3JC52YWx1ZSA9PT0gMSA/IDcwMCA6IDA7XG4gICAgICB0aGlzLnNldEluZGV4VmlldygwKTtcbiAgICAgIHJldHVybiBvZih2YWwpLnBpcGUoZGVsYXkoZGVsYXlUaW1pbmcpLCB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSk7XG4gICAgfSkpXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMub25TY3JvbGxJbnRvTm9kZShyZXMpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmdldEFjdGl2ZU5vZGVFdmVudCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgc3dpdGNoTWFwKHZhbCA9PiB7XG4gICAgICB0aGlzLmFjdGl2ZU5vZGUgPSB2YWw7XG4gICAgICByZXR1cm4gdGltZXIoMTUwMCk7XG4gICAgfSkpXG4gICAgICAuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSAnJztcbiAgICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlRGF0YVRyZWUoZGF0YTogUU1TVHJlZU5vZGVbXSkge1xuICAgIHRoaXMuZ2V0RGF0YVRyZWUkLm5leHQoZGF0YSk7XG4gIH1cblxuICBzZXRMb2FkaW5nU3RhdGVOb2RlKGlzTG9hZGluZzogYm9vbGVhbiwgbm9kZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xuICAgIGlmICghbm9kZSlcbiAgICAgIHJldHVybjtcbiAgICBub2RlLmlzTG9hZGluZyA9IGlzTG9hZGluZztcbiAgICB0aGlzLmNoZWNrTG9hZGluZ09mUGFyZW50KG5vZGUpO1xuICB9XG5cbiAgb25FeHBhbmROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGlmICghbm9kZT8uZXhwYW5kYWJsZSkgcmV0dXJuO1xuICAgIHRoaXMudHJlZUNvbnRyb2wudG9nZ2xlKG5vZGUpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5ICYmIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSAmJiAhbm9kZS5tYXJrZWRHZXRDaGlsZHJlbikge1xuICAgICAgbm9kZS5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5jaGVja0xvYWRpbmdPZlBhcmVudChub2RlKTtcbiAgICB9XG4gICAgdGhpcy5vbkV4cGFuZE5vZGVFdmVudC5lbWl0KG5vZGUpO1xuICB9XG5cbiAgb25PcHRpb25TZWFyY2hTZWxlY3RlZCh2YWx1ZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKHZhbHVlLmlkKTtcbiAgICBpZiAoIWZsYXROb2RlKSByZXR1cm47XG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcbiAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShmbGF0Tm9kZSk7XG4gICAgdGhpcy5vblNjcm9sbEludG9Ob2RlKGZsYXROb2RlLmlkKTtcbiAgfVxuXG4gIG9uQ2hlY2tBbGxSb290VHJlZU5vZGUoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lIHx8ICF0aGlzLmNvbmZpZy5hY3RpdmVTZWxlY3RBbGxOb2RlKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzQWxsRGVwYXJ0bWVudFNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICBpZihub2RlLmRpc2FibGVkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcbiAgICAgICAgbmVzdGVkTm9kZS5pc0dyb3VwID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLnRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcih4ID0+IHguZGlzYWJsZWQpKTtcbiAgICAgIHJldHVybjtcbiAgICB9O1xuICAgIHRoaXMuZGVwYXJ0bWVudFJvb3RzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBpZihub2RlLmRpc2FibGVkKVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoIXRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKHggPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoeCkpXG4gICAgICAgICAgLmZvckVhY2goeCA9PiB0aGlzLm9uQ2hlY2tOb2RlKHgpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGUpKSB7XG4gICAgICAgIHRoaXMub25DaGVja05vZGUobm9kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICBpZiAobmVzdGVkTm9kZS5pc0dyb3VwICYmIHRoaXMuaXNDaGVja0FsbChub2RlKSB8fCAhbm9kZS5leHBhbmRhYmxlKVxuICAgICAgICByZXR1cm47XG4gICAgICB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKVxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoaXRlbSkpXG4gICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoaXRlbSkgJiYgdGhpcy5vbkNoZWNrTm9kZShpdGVtKSk7XG4gICAgICBpZiAoIW5lc3RlZE5vZGUuaXNHcm91cCkge1xuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdChub2RlKTtcbiAgICAgICAgdGhpcy5vbkNoZWNrTm9kZShub2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25DaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlLCBmaXJlRXZlbnRDaGVja05vZGU6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgaWYgKCFub2RlIHx8IG5vZGUuZGlzYWJsZWQpXG4gICAgICByZXR1cm47XG4gICAgaWYgKGZpcmVFdmVudENoZWNrTm9kZSlcbiAgICAgIHRoaXMub25DaGVja05vZGVFdmVudC5lbWl0KG5vZGUpO1xuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcbiAgICBpZiAodGhpcy5jb25maWcuaXNTZWxlY3RPbmUpIHtcbiAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdE9uZShub2RlLmlkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnLmxhenkgJiYgbm9kZS5leHBhbmRhYmxlICYmICFub2RlLm1hcmtlZEdldENoaWxkcmVuICYmIGZpcmVFdmVudENoZWNrTm9kZSkge1xuICAgICAgaWYgKCF0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tOb2RlKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tOb2RlKG5vZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBub2RlLmlzTG9hZGluZyA9IHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW47XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmZpbHRlcih4ID0+IHguZXhwYW5kYWJsZSAmJiAheC5tYXJrZWRHZXRDaGlsZHJlbik7XG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKHggPT4geC5pc0xvYWRpbmcgPSB0aGlzLmlzSW5jbHVkZUNoaWxkcmVuKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVDaGVja05vZGUobm9kZSk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVTZWxlY3RPbmUobm9kZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub2RlVHJlZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09PSBub2RlSWQpO1xuICAgIGNvbnN0IHJlU2VsZWN0U2VsZWN0aW9uID0gKGlkOiBzdHJpbmcsIC4uLnBhcmFtczogU2VsZWN0aW9uTW9kZWw8YW55PltdKTogdm9pZCA9PiB7XG4gICAgICBwYXJhbXMuZm9yRWFjaChzZWxlY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZWxlY3RlZC5maWx0ZXIoeCA9PiB4LmlkICE9IGlkKTtcbiAgICAgICAgc2VsZWN0aW9uLmRlc2VsZWN0KC4uLnNlbGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpZiAoIW5vZGVUcmVlKSB7XG4gICAgICB0aGlzLmV4ZWNXaXRob3V0RW1pdE5vZGVDaGFuZ2VFdmVudCgoKSA9PntcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlSWQpO1xuICAgICAgICBpZiAoIWl0ZW0pe1xuICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbXTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFt7XG4gICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXG4gICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgIGV4dGVybmFsTmFtZTogaXRlbS5leHRlcm5hbE5hbWUsXG4gICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgIH0gYXMgUU1TVHJlZU5vZGVdO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSBbLi4udGhpcy5yZXN1bHRTZWxlY3RlZF07XG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gICAgICAgIHJlU2VsZWN0U2VsZWN0aW9uKG5vZGVJZCwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24sIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoKTtcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZVRyZWUpKSB7XG4gICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlSWQpKTtcbiAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbey4uLm5lc3RlZE5vZGUsIGNoaWxkcmVuOltdfV07XG4gICAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSBbLi4udGhpcy5yZXN1bHRTZWxlY3RlZF07XG4gICAgICByZVNlbGVjdFNlbGVjdGlvbihuZXN0ZWROb2RlLmlkLCB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbiwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2gpO1xuICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFtdO1xuICAgIHRoaXMuX3NlbGVjdGVkTGlzdCA9IFtdO1xuICB9XG5cbiAgb25FeHBhbmRBbGxQYXJlbnQobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3QgcGFyZW50cyA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcbiAgICBpZiAocGFyZW50cz8ubGVuZ3RoKSB7XG4gICAgICBwYXJlbnRzLmZvckVhY2gocGFyZW50ID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQocGFyZW50KSlcbiAgICAgICAgICB0aGlzLm9uRXhwYW5kTm9kZShwYXJlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25SZW1vdmVOb2RlKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XG4gICAgaWYgKCFmbGF0Tm9kZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maW5kKHggPT4geC5pZCA9PT0gbm9kZUlkKTtcbiAgICAgIGlmICghaXRlbSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRMaXN0KCdyZW1vdmUnLCBpdGVtLCB0aGlzLl9zZWxlY3RlZExpc3QsIHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KGZsYXROb2RlKTtcbiAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShmbGF0Tm9kZSk7XG4gIH1cblxuICBvblNlbGVjdE5vZGUoLi4ubm9kZUlkczogc3RyaW5nW10pIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcih4ID0+IG5vZGVJZHMuaW5jbHVkZXMoeC5pZCkpO1xuICAgIGlmICghbm9kZXMubGVuZ3RoKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5ub2Rlcyk7XG4gIH1cblxuICBvbkRlc2VsZWN0Tm9kZSguLi5ub2RlSWRzOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKHggPT4gbm9kZUlkcy5pbmNsdWRlcyh4LmlkKSk7XG4gICAgaWYgKCFub2Rlcy5sZW5ndGgpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4ubm9kZXMpO1xuICB9XG4gIC8qKlxuICAgKiBUb2dnbGVzIGEgdmFsdWUgYmV0d2VlbiBzZWxlY3RlZCBhbmQgZGVzZWxlY3RlZC5cbiAgICogQHBhcmFtIG5vZGVJZCA6aWQgb2Ygbm9kZVxuICAgKi9cbiAgb25Ub2dnbGVOb2RlKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZUlkKTtcbiAgICBpZiAoIW5vZGUpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xuICB9XG5cbiAgaXNJbmRldGVybWluYXRlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGNvbnN0IGNoaWxkU2VsZWN0ZWQgPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5maWx0ZXIoaXRlbSA9PiB0aGlzLmlzU2VsZWN0ZWROb2RlKGl0ZW0pKTtcbiAgICByZXR1cm4gKCEhY2hpbGRTZWxlY3RlZC5sZW5ndGggJiYgIXRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSkpO1xuICB9XG5cbiAgaXNDaGVja0FsbChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICBjb25zdCBsaXN0Q2hlY2sgPSBbLi4udGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSksIG5vZGVdO1xuICAgIHJldHVybiBsaXN0Q2hlY2suZXZlcnkoaXRlbSA9PiB0aGlzLmlzU2VsZWN0ZWROb2RlKGl0ZW0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZSBjaGVjayBub2RlIG9mIHRyZWVcbiAgICogQHBhcmFtIG5vZGUgbm9kZSBvZiB0cmVlXG4gICAqIEBwYXJhbSBjYWxsYmFjayBkbyBzb21ldGhpbmcgYmVmb3JlIGhhbmRsZSBjaGVjayBub2RlXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhc3luYyBvbkJlZm9yZUNoZWNrTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUsIGNhbGxiYWNrPzogKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tOb2RlID0gdHJ1ZTtcbiAgICBpZiAoISFjYWxsYmFjaylcbiAgICAgIGF3YWl0IGNhbGxiYWNrKG5vZGUpO1xuICAgIHRoaXMuaGFuZGxlQ2hlY2tOb2RlKG5vZGUpO1xuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja05vZGUgPSBmYWxzZTtcbiAgfVxuXG4gIGhhbmRsZUNoZWNrTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5pc1NlbGVjdGVkTm9kZShub2RlKTtcbiAgICBjb25zdCBjaGlsZFNlbGVjdGVkID0gdGhpcy5nZXRDaGlsZHJlblNlbGVjdGVkKG5vZGUpLmZpbHRlcih4ID0+ICF4LmRpc2FibGVkKTtcbiAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuXG4gICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgIC8vIENoZWNrIGV4aXN0ZWQgZ3JvdXBcbiAgICAgIGNvbnN0IGFsbFBhcmVuTm9kZUlkcyA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKS5tYXAoeCA9PiB4LmlkKTtcbiAgICAgIGNvbnN0IGV4aXN0ZWRHcm91cCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCh4ID0+IHguaXNHcm91cCAmJiBhbGxQYXJlbk5vZGVJZHMuaW5jbHVkZXMoeC5pZCkpO1xuXG4gICAgICBpZiAoIXRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pIHtcbiAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gZXhpc3RlZEdyb3VwPy5pZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmZpbHRlcih4ID0+ICF4LmRpc2FibGVkKTtcbiAgICAgIG5lc3RlZE5vZGUuaXNHcm91cCA9ICFleGlzdGVkR3JvdXAgJiYgISFjaGlsZHJlbi5sZW5ndGg7XG4gICAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2hpbGRyZW4uZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgY29uc3QgX25vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoeCk7XG4gICAgICAgIF9ub2RlLmdyb3VwSWQgPSBleGlzdGVkR3JvdXAgPyBleGlzdGVkR3JvdXAuaWQgOiBub2RlLmlkO1xuICAgICAgICBfbm9kZS5pc0dyb3VwID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpO1xuICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4uY2hpbGRTZWxlY3RlZC5tYXAoeCA9PiB0aGlzLnJlc2V0Tm9kZSh4KSkpO1xuICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KC4uLmNoaWxkcmVuLm1hcCh4ID0+IHRoaXMucmVzZXROb2RlKHgpKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IF9zZWxlY3RlZEluZGV4ID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IG5vZGUuaWQpO1xuICAgIF9zZWxlY3RlZEluZGV4ID4gLTEgJiYgdGhpcy5fc2VsZWN0ZWRMaXN0LnNwbGljZShfc2VsZWN0ZWRJbmRleCwgMSk7XG4gICAgY29uc3QgZGVzZWxlY3ROb2RlcyA9ICh0aGlzLmlzSW5jbHVkZUNoaWxkcmVuIHx8IG5lc3RlZE5vZGUuaXNHcm91cCkgPyBjaGlsZFNlbGVjdGVkIDogW25vZGVdO1xuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmRlc2VsZWN0Tm9kZXMpO1xuICAgIG5lc3RlZE5vZGUuaXNHcm91cCA9IGZhbHNlO1xuICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgbm9kZS5pc0dyb3VwID0gZmFsc2U7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBpc1NlbGVjdGVkTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICByZXR1cm4gbm9kZSAmJiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpO1xuICB9XG5cbiAgZ2V0Q2hpbGRyZW5TZWxlY3RlZChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWVbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmZpbHRlcih4ID0+IHRoaXMuaXNTZWxlY3RlZE5vZGUoeCkpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIGEgbGlzdCBvZiB0aGUgZGF0YSBub2RlJ3Mgc3VidHJlZSBvZiBkZXNjZW5kZW50IGRhdGEgbm9kZXMuXG4gICAqIEBwYXJhbSBub2RlXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGUuaWQpO1xuICAgIGlmICghZmxhdE5vZGUpXG4gICAgICByZXR1cm4gW107XG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMoZmxhdE5vZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWFwVG9OZXN0ZWRMaXN0Tm9kZShmbGF0Tm9kZUxpc3Q6IFFNU0ZsYXROb2RlVHJlZVtdKTogUU1TVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIGZsYXROb2RlTGlzdC5tYXAoaXRlbSA9PiB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoaXRlbSkpO1xuICB9XG5cbiAgY29udmVydFRvTmVzdGVkTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNUcmVlTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMuZmxhdFRyZWVOb2RlTWFwLmdldChub2RlKSB8fCB7fSBhcyBRTVNUcmVlTm9kZTtcbiAgfVxuXG4gIGNvbnZlcnRUb0ZsYXROb2RlKG5vZGU6IFFNU1RyZWVOb2RlKSB7XG4gICAgcmV0dXJuIHRoaXMubmVzdGVkVHJlZU5vZGVNYXAuZ2V0KG5vZGUpO1xuICB9XG5cbiAgZ2V0QWxsUGFyZW50Tm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWVbXSB7XG4gICAgY29uc3QgbGlzdFBhcmVudDogUU1TRmxhdE5vZGVUcmVlW10gPSBbXTtcbiAgICBsZXQgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnROb2RlKG5vZGUpO1xuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgIGxpc3RQYXJlbnQucHVzaChwYXJlbnQpO1xuICAgICAgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnROb2RlKHBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0UGFyZW50O1xuICB9XG5cbiAgZ2V0UGFyZW50Tm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IHRoaXMuZ2V0TGV2ZWwobm9kZSk7XG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDEpIHJldHVybjtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmluZGV4T2Yobm9kZSkgLSAxO1xuICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV07XG4gICAgICBpZiAodGhpcy5nZXRMZXZlbChjdXJyZW50Tm9kZSkgPCBjdXJyZW50TGV2ZWwpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBnZXRJdGVtSWNvblR5cGUoaXRlbTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgaWYgKCEhaXRlbS5pdGVtTWF0SWNvbikgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLm5hbWU7XG4gICAgaWYgKCEhaXRlbS5pdGVtSWNvblN2ZykgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLnN2ZztcbiAgICBpZiAoISFpdGVtLml0ZW1JY29uKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUucGF0aDtcbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIG9uU2Nyb2xsSW50b05vZGUobm9kZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZUlkKTtcbiAgICBpZiAoIW5vZGVJZCkgcmV0dXJuO1xuICAgIHRoaXMub25FeHBhbmROb2RlKGZsYXROb2RlKTtcbiAgICB0aGlzLm9uRXhwYW5kQWxsUGFyZW50KGZsYXROb2RlKTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGZsYXROb2RlLmlkKTtcbiAgICBpZiAoIXRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LnNjcm9sbFRvSW5kZXgoaW5kZXgsICdzbW9vdGgnKTtcbiAgICB0aGlzLmdldEFjdGl2ZU5vZGVFdmVudCQubmV4dChub2RlSWQpO1xuICB9XG5cbiAgb25TZWFyY2goKSB7XG4gICAgaWYgKCF0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlIHx8IHRoaXMuZm9ybVNlYXJjaENvbnRyb2wudmFsdWU/LnRyaW0oKSA9PT0gJycpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuc2V0SW5kZXhWaWV3KDEpO1xuICAgIHRoaXMub25TZWFyY2hFdmVudC5lbWl0KHRoaXMuZm9ybVNlYXJjaENvbnRyb2wudmFsdWUpO1xuICAgIGlmICghdGhpcy5wYWdpbmF0b3JTZWFyY2gpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5wYWdpbmF0b3JTZWFyY2guY2hhbmdlUGFnZSgwKTtcbiAgICB0aGlzLnBhZ2luYXRvclNlYXJjaC5yZW5kZXJEaXNwbGF5TnVtYmVyT2ZwYWdlcygpO1xuICB9XG5cbiAgc2V0UmVzdWx0U2VhcmNoKGRhdGE6IFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbDxRTVNGbGF0Tm9kZVRyZWU+KSB7XG4gICAgdGhpcy5zZWFyY2hEZXBhcnRtZW50JC5uZXh0KGRhdGEpO1xuICB9XG5cbiAgb25DbGlja1Jlc3VsdEl0ZW0oaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Ob2RlKG5vZGUuaWQpO1xuICAgIH1cbiAgfVxuXG4gIG9uQnJlYWRDcnVtYkl0ZW1DbGljayhpdGVtOiBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHRoaXMuc2V0SW5kZXhWaWV3KDApO1xuICAgICAgb2Yobm9kZS5pZCkucGlwZShkZWxheSg3MDApLCB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMub25TY3JvbGxJbnRvTm9kZShyZXMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DaGVja0l0ZW1TZWFyY2hSZXN1bHQoaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSB7XG4gICAgaWYoaXRlbS5kaXNhYmxlZClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC50b2dnbGUoaXRlbSk7XG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lKSB7XG4gICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5kZXNlbGVjdCguLi50aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5maWx0ZXIoeCA9PiB4LmlkICE9IGl0ZW0uaWQpKTtcbiAgICB9XG4gICAgdGhpcy5vbkNoZWNrSXRlbVNlYXJjaEV2ZW50LmVtaXQoXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKGl0ZW0pLFxuICAgICAgICBpdGVtOiBpdGVtXG4gICAgICB9KTtcbiAgICBpZiAodGhpcy5jb25maWcubGF6eSkge1xuICAgICAgaWYgKCF0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tJdGVtU2VhcmNoKSB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0pO1xuICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gIH1cblxuICBhc3luYyBvbkJlZm9yZUNoZWNrSXRlbVNlYXJjaChpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwsIGNhbGxiYWNrPzogKGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICBpdGVtLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrSXRlbVNlYXJjaCA9IHRydWU7XG4gICAgLy8gaG9sZCBzdGF0ZSBiZWZvcmUgY2FsbCBtZXRob2QgY2FsbGJhY2sgdG8gcHJldmVudCBsb3N0IGl0J3Mgc3RhdGUgdW5leHBlY3RlZFxuICAgIGNvbnN0IGlzU2VsZWN0ID0gdGhpcy5pc1NlbGVjdEl0ZW1TZWFyY2goaXRlbS5pZCk7XG4gICAgaWYgKCEhY2FsbGJhY2spXG4gICAgICBhd2FpdCBjYWxsYmFjayhpdGVtKTtcbiAgICBpdGVtLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0sIGlzU2VsZWN0KTtcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0l0ZW1TZWFyY2ggPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIG9uQmVmb3JlQ2hlY2tBbGxTZWFyY2goY2FsbGJhY2s/OiAoZGF0YSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tBbGxTZWFyY2ggPSB0cnVlO1xuICAgIGlmICghIWNhbGxiYWNrKVxuICAgICAgYXdhaXQgY2FsbGJhY2sodGhpcy5yZXN1bHRTZWFyY2gpO1xuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0FsbFNlYXJjaCA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoKVxuICAgICAgcmV0dXJuO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJlc3VsdFNlYXJjaFtpXTtcbiAgICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGNhbkhhbmRsZUl0ZW1TZWFyY2hSZXN1bHQoaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSB7XG4gICAgaWYgKCF0aGlzLnRyZWVDb250cm9sKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLnNvbWUobm9kZSA9PiBub2RlLmlkID09PSBpdGVtLmlkKSB8fCB0aGlzLmNvbmZpZy5sYXp5O1xuICB9XG5cbiAgcHJpdmF0ZSBfbWFwVG9SZXN1bHRTZWFyY2goKSB7XG4gICAgaWYgKCEhdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoKVxuICAgICAgdGhpcy5yZXN1bHRTZWFyY2guZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgaXNFeGlzdEluUmVzdWx0U2VsZWN0ZWQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkPy5zb21lKHggPT4geC5pZCA9PT0gaXRlbS5pZCB8fCB4LmNoaWxkcmVuPy5zb21lKHkgPT4geS5pZCA9PT0gaXRlbS5pZCkpO1xuICAgICAgICBpc0V4aXN0SW5SZXN1bHRTZWxlY3RlZCA/IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdChpdGVtKSA6IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmRlc2VsZWN0KGl0ZW0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwsIHN0YXRlOiBib29sZWFuID0gdGhpcy5pc1NlbGVjdEl0ZW1TZWFyY2goaXRlbS5pZCkpIHtcbiAgICBpdGVtLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIGNvbnN0IGN1cnJlbnROb2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkLnRvU3RyaW5nKCkpO1xuICAgIGlmICghIWN1cnJlbnROb2RlKSB7XG4gICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoY3VycmVudE5vZGUpKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoaXRlbSkpXG4gICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KGN1cnJlbnROb2RlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdChjdXJyZW50Tm9kZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbmZpZy5pc1NlbGVjdE9uZSA/IHRoaXMuX2hhbmRsZVNlbGVjdE9uZShjdXJyZW50Tm9kZS5pZCkgOiB0aGlzLmhhbmRsZUNoZWNrTm9kZShjdXJyZW50Tm9kZSk7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lKSB7XG4gICAgICB0aGlzLl9oYW5kbGVTZWxlY3RPbmUoaXRlbS5pZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkTGlzdChzdGF0ZSA/ICdhZGQnIDogJ3JlbW92ZScsIGl0ZW0sIHRoaXMuX3NlbGVjdGVkTGlzdCwgdGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gIH1cblxuICBpc1NlbGVjdEl0ZW1TZWFyY2goaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5zb21lKHggPT4geC5pZCA9PT0gaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlU2VsZWN0ZWRMaXN0KHN0YXRlOiAnYWRkJyB8ICdyZW1vdmUnLCBpdGVtOiBRTVNUcmVlTm9kZSwgLi4uc2VsZWN0ZWRMaXN0czogUU1TVHJlZU5vZGVbXVtdKSB7XG4gICAgaWYgKCFpdGVtKVxuICAgICAgcmV0dXJuO1xuICAgIHNlbGVjdGVkTGlzdHMuZm9yRWFjaChzZWxlY3RlZExpc3QgPT4ge1xuICAgICAgY29uc3QgaXRlbUV4aXN0ZWQgPSBzZWxlY3RlZExpc3QuZmluZCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgICBjYXNlICdhZGQnOlxuICAgICAgICAgIGlmIChpdGVtLmdyb3VwSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmlkID09PSBpdGVtLmdyb3VwSWQpO1xuICAgICAgICAgICAgaWYgKCFncm91cCAmJiAhaXRlbUV4aXN0ZWQpIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAhZ3JvdXAuY2hpbGRyZW4uc29tZSh4ID0+IHguaWQgPT09IGl0ZW0uaWQpICYmIGdyb3VwLmNoaWxkcmVuLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgICFpdGVtRXhpc3RlZCAmJiBzZWxlY3RlZExpc3QucHVzaChpdGVtKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVtb3ZlJzpcbiAgICAgICAgICBpZiAoIWl0ZW1FeGlzdGVkKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHNlbGVjdGVkTGlzdC5maW5kKHggPT4geC5jaGlsZHJlbi5zb21lKHgxID0+IHgxLmlkID09PSBpdGVtLmlkKSk7XG4gICAgICAgICAgICBpZiAoIWdyb3VwKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGdyb3VwLmNoaWxkcmVuLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgMClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgZ3JvdXAuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VsZWN0ZWRMaXN0LnNwbGljZShzZWxlY3RlZExpc3QuaW5kZXhPZihpdGVtRXhpc3RlZCksIDEpO1xuICAgICAgICAgIGNvbnN0IGl0ZW1TZWxlY3Rpb25TZWFyY2ggPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gaXRlbUV4aXN0ZWQuaWQpO1xuICAgICAgICAgIGl0ZW1TZWxlY3Rpb25TZWFyY2ggJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoaXRlbVNlbGVjdGlvblNlYXJjaCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIG9uU2VsZWN0QWxsU2VhcmNoUmVzdWx0KGNoZWNrZWQpIHtcbiAgICBjaGVja2VkID0gIWNoZWNrZWQ7XG4gICAgaWYgKCF0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGgpXG4gICAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuY29uZmlnLmhhbmRsZUNoZWNrQWxsSXRlbVNlYXJjaCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5yZXN1bHRTZWFyY2hbaV07XG4gICAgICAgIGlmKGl0ZW0uZGlzYWJsZWQpXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgY29uc3QgdHJlZU5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgY29uc3QgY2FuU2VsZWN0ID0gKCEhdHJlZU5vZGUgfHwgdGhpcy5jb25maWcubGF6eSk7XG4gICAgICAgICAgaWYgKCFjYW5TZWxlY3QpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAhdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guaXNTZWxlY3RlZChpdGVtKSAmJiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3QoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc3QgX2l0ZW1TZWxlY3Rpb25zID0gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuZmlsdGVyKHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgaWYgKF9pdGVtU2VsZWN0aW9ucy5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5kZXNlbGVjdCguLi5faXRlbVNlbGVjdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb25maWcubGF6eSB8fCAhdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrQWxsU2VhcmNoKVxuICAgICAgICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0sIGNoZWNrZWQpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uQ2hlY2tBbGxJdGVtU2VhcmNoRXZlbnQuZW1pdChjaGVja2VkKTtcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICB9XG5cbiAgcHVibGljIGlzRGlzYWJsZUNoZWNib3hBbGxTZWFyY2goKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0U2VhcmNoICYmIHRoaXMucmVzdWx0U2VhcmNoLmV2ZXJ5KHggPT4geC5kaXNhYmxlZCk7XG4gIH1cblxuICBvblBhZ2luZ1NlYXJjaFJlc3VsdCh2YWw6IFBhZ2VFdmVudCkge1xuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICB0aGlzLm9uUGFnaW5nU2VhcmNoRXZlbnQuZW1pdCh2YWwpO1xuICB9XG5cbiAgc2Nyb2xsVG9Ob2RlKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5zY3JvbGxUb05vZGVFdmVudCQubmV4dChub2RlSWQpO1xuICB9XG5cbiAgc2V0SW5kZXhWaWV3KGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoaW5kZXggPT09IDEgJiYgdGhpcy5jb25maWcucmVzZXRUb2dnbGVJbmNsdWRlQ2hpbGRXaGVuQ2hhbmdlVmlldykge1xuICAgICAgdGhpcy5pc0luY2x1ZGVDaGlsZHJlbiA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmdldEluZGV4VmlldyQubmV4dChpbmRleCk7XG4gIH1cblxuICBjYW5BY3RpdmVOb2RlRXh0ZXJuYWwobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3QgYWxsUGFyZW50ID0gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpO1xuICAgIHJldHVybiAhYWxsUGFyZW50IHx8IGFsbFBhcmVudC5ldmVyeShpdGVtID0+IHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChpdGVtKSk7XG4gIH1cblxuICBnZXRIZWlnaHRTdHlsZVJlZk5vZGUobm9kZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub2RlRWxlID0gdGhpcy5lbGVSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAubWF0LXRyZWUtbm9kZSNtYXQtbm9kZS0ke25vZGVJZH1gKSBhcyBFbGVtZW50O1xuICAgIHJldHVybiBgJHtub2RlRWxlPy5jbGllbnRIZWlnaHQgfHwgMH1weGA7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkTm9kZVN0b3JhZ2UoKTogUU1TRmxhdE5vZGVUcmVlIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2VsZWN0ZWROb2RlJykpIGFzIFFNU0ZsYXROb2RlVHJlZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWROb2RlU3RvcmFnZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICB0aGlzLmlzSW5jbHVkZUNoaWxkcmVuICYmIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWxlY3RlZE5vZGUnLCBKU09OLnN0cmluZ2lmeShub2RlKSk7XG4gIH1cblxuICBzZXREZWZhdWx0UGFnaW5hdG9yU2l6ZShvcHRpb25zOiBudW1iZXJbXSkge1xuICAgIHRoaXMuUEFHRV9TSVpFX09QVElPTiA9IG9wdGlvbnM7XG4gIH1cblxuICB0cmFja0J5KGluZGV4OiBudW1iZXIsIGl0ZW06IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZSB7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICAvKipcbiAgICAgICAqIFRoaXMgZnVuY3Rpb24gdXNlIGZvciBsYXp5IGxvYWQgY2hpbGRyZW4gb2Ygbm9kZVxuICAgICAgICogQHBhcmFtIG5vZGUgbm9kZSB1cGRhdGUuIGlmIG5vZGUgaXMgbnVsbCBkYXRhIGF1dG8gaW5zZXJ0IGFzIHJvb3RzXG4gICAgICAgKiBAcGFyYW0gZGF0YSBsaXN0IGNoaWxkcmVuIHRvIHVwZGF0ZSBub2RlLlxuICAgICAgICogQHBhcmFtIG1vZGUgZGVmYXVsdCBpcyB1cGRhdGUgdGhhdCByZXBsYWNlIGN1cnJlbnQgbGlzdCBjaGlsZHJlbiBieSBuZXcgbGlzdCBjaGlsZHJlbiAsIGlmIG1vZGUgPSAnaW5zZXJ0JyB3aWxsIGluc2VydCBuZXcgdmFsdWVzIHRvIGxpc3QgY2hpbGRyZW4gZXhpc3RlZCBiZWZvcmUuXG4gICovXG4gIHVwZGF0ZUNoaWxkT2ZOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSwgZGF0YTogUU1TRmxhdE5vZGVUcmVlW10gPSBbXSwgbW9kZTogJ2luc2VydCcgfCAndXBkYXRlJyA9ICd1cGRhdGUnKSB7XG4gICAgbm9kZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNoZWNrTG9hZGluZ09mUGFyZW50KG5vZGUpO1xuICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgY29uc3QgZGF0YU5vZGVzID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEoZGF0YSkuZmlsdGVyKHggPT4geC5wYXJlbnRJZCA9PT0gbm9kZS5pZCk7XG4gICAgaWYgKCFuZXN0ZWROb2RlKVxuICAgICAgcmV0dXJuO1xuICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgY2FzZSAnaW5zZXJ0JzpcbiAgICAgICAgbmVzdGVkTm9kZS5jaGlsZHJlbi5wdXNoKC4uLmRhdGFOb2Rlcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXBkYXRlJzpcbiAgICAgICAgbmVzdGVkTm9kZS5jaGlsZHJlbiA9IGRhdGFOb2RlcztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpO1xuICAgIGNvbnN0IF9ub2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlLmlkKTtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMoX25vZGUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZXN1bHRTZWxlY3RlZC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMucmVzdWx0U2VsZWN0ZWRbaV07XG4gICAgICB0aGlzLl9yZVVwZGF0ZVNlbGVjdGlvbk5vZGUoaXRlbS5pZCk7XG4gICAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmdldERlc2NlbmRhbnRzT2ZOb2RlKGl0ZW0pO1xuICAgICAgaWYgKCFkZXNjZW5kYW50cy5sZW5ndGgpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkZXNjZW5kYW50cy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGRlc2NlbmRhbnRzW2pdO1xuICAgICAgICB0aGlzLl9yZVVwZGF0ZVNlbGVjdGlvbk5vZGUoY2hpbGQuaWQpXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSQubmV4dChbX25vZGUsIC4uLm5vZGVzXSk7XG4gIH1cblxuICAvL3JlLXNlbGVjdCB3aGVuIHVwZGF0ZSBjaGlsZHJlbiBvZiBub2RlXG4gIHByaXZhdGUgX3JlVXBkYXRlU2VsZWN0aW9uTm9kZShub2RlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XG4gICAgaWYgKCFub2RlIHx8IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSkpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgZXhpc3RJblNlbGVjdGlvbiA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09IG5vZGUuaWQpO1xuICAgIGlmIChleGlzdEluU2VsZWN0aW9uKVxuICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoZXhpc3RJblNlbGVjdGlvbik7XG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xuICB9XG5cbiAgY2hlY2tMb2FkaW5nT2ZQYXJlbnQobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3QgYWxsUGFyZW50ID0gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpO1xuICAgIGlmICghYWxsUGFyZW50Lmxlbmd0aClcbiAgICAgIHJldHVybjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbFBhcmVudC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcGFyZW50ID0gYWxsUGFyZW50W2ldO1xuICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKHBhcmVudCk7XG4gICAgICBwYXJlbnQuaXNMb2FkaW5nID0gZGVzY2VuZGFudHMuc29tZSh4ID0+IHguaXNMb2FkaW5nKTtcbiAgICB9XG4gIH1cblxuICBnZXROb2RlQnlJZChpZDogc3RyaW5nKTogUU1TRmxhdE5vZGVUcmVlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IGlkKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRSb290T2ZOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYWxsUGFyZW50ID0gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpO1xuICAgIGlmICghYWxsUGFyZW50Lmxlbmd0aClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGFsbFBhcmVudC5wb3AoKTtcbiAgfVxuXG4gIGFkZFJvb3RUcmVlKGRhdGE6IFFNU0ZsYXROb2RlVHJlZVtdID0gW10pIHtcbiAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcbiAgICBpZiAoIWRhdGEubGVuZ3RoKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHRyZWVOb2RlRGF0YSA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKGRhdGEpO1xuICAgIC8vIHJlLWNoZWNrIHJvb3Qgd2FzIGV4aXN0ZWQgaW4gdHJlZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJlZU5vZGVEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gdHJlZU5vZGVEYXRhW2ldO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XG4gICAgICBpZiAoISFub2RlICYmIG5vZGUuZXhwYW5kYWJsZSAmJiAhbm9kZS5tYXJrZWRHZXRDaGlsZHJlbikge1xuICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuICAgICAgICBuZXN0ZWROb2RlLmNoaWxkcmVuID0gaXRlbS5jaGlsZHJlbjtcbiAgICAgICAgbmVzdGVkTm9kZS5tYXJrZWRHZXRDaGlsZHJlbiA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghbm9kZSlcbiAgICAgICAgdGhpcy5jdXJyZW50VHJlZURhdGEucHVzaChpdGVtKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVEYXRhVHJlZSh0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XG4gICAgdGhpcy5zZWxlY3RlZExpc3RBZnRlckRhdGFOb2RlQ2hhbmdlJC5uZXh0KGRhdGEpO1xuICB9XG5cbiAgZ2V0Q2hlY2tlZFN0YXR1c05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSk7XG4gIH1cblxuICB1cGRhdGVOb2RlSW5mb3JtYXRpb24obm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgbGV0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgaWYgKCFuZXN0ZWROb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmVzdGVkTm9kZS5jaGlsZENvdW50ID0gbm9kZS5jaGlsZENvdW50O1xuICAgIG5lc3RlZE5vZGUubmFtZSA9IG5vZGUubmFtZTtcbiAgICBuZXN0ZWROb2RlLml0ZW1JY29uID0gbm9kZS5pdGVtSWNvbjtcbiAgICBuZXN0ZWROb2RlLml0ZW1JY29uU3ZnID0gbm9kZS5pdGVtSWNvblN2ZztcbiAgICBuZXN0ZWROb2RlLnNlbGVjdGVkQ2hpbGRDb3VudCA9IG5vZGUuc2VsZWN0ZWRDaGlsZENvdW50O1xuICAgIG5lc3RlZE5vZGUubWFya2VkR2V0Q2hpbGRDb3VudFJlY3VycnNpdmUgPSBub2RlLm1hcmtlZEdldENoaWxkQ291bnRSZWN1cnJzaXZlO1xuICAgIG5lc3RlZE5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZCA9IG5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZDtcbiAgfVxuXG4gIHVwZGF0ZVNlbGVjdGVkUmVzdWx0RGF0YShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICBjb25zdCBub2RlUmVzdWx0ID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kKCh4KSA9PiB4LmlkID09PSBub2RlLmlkKTtcbiAgICBpZiAobm9kZVJlc3VsdCkge1xuICAgICAgbm9kZVJlc3VsdC5jaGlsZENvdW50ID0gbm9kZS5jaGlsZENvdW50O1xuICAgICAgbm9kZVJlc3VsdC5zZWxlY3RlZENoaWxkQ291bnQgPSBub2RlLnNlbGVjdGVkQ2hpbGRDb3VudDtcbiAgICB9XG4gIH1cblxuICBjYWxsQ2hlY2tOb2RlT3V0c2lkZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XG4gICAgLy90aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY1dpdGhvdXRFbWl0Tm9kZUNoYW5nZUV2ZW50KGFjdGlvbjogKCkgPT4gdm9pZCl7XG4gICAgICB0aGlzLmxvY2tIYW5kbGVTZWxlY3Rpb25DaGFuZ2UgPSB0cnVlO1xuICAgICAgYWN0aW9uKCk7XG4gICAgICB0aGlzLmxvY2tIYW5kbGVTZWxlY3Rpb25DaGFuZ2UgPSBmYWxzZTtcbiAgfVxuXG4gIGlzRGlzYWJsZWROb2RlID0gKG5vZGVJZDogc3RyaW5nKSA9PiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PSBub2RlSWQpPy5kaXNhYmxlZDtcbn1cbiJdfQ==