@mtna/web-form-angular 1.0.2-SNAPSHOT.3 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/bundles/mtna-web-form-angular.umd.js +372 -384
  2. package/bundles/mtna-web-form-angular.umd.js.map +1 -1
  3. package/esm2015/lib/components/form/form.component.js +3 -2
  4. package/esm2015/lib/components/form/form.module.js +5 -1
  5. package/esm2015/lib/components/form-item-component-provider/form-item-injected-components.js +24 -29
  6. package/esm2015/lib/components/form-item-impl/date-range/date-range.component.js +2 -2
  7. package/esm2015/lib/components/form-item-impl/dropdown/dropdown.component.js +2 -2
  8. package/esm2015/lib/components/form-item-impl/form-section/form-section.component.js +4 -3
  9. package/esm2015/lib/components/form-item-impl/multiple-choice/multiple-choice.component.js +2 -2
  10. package/esm2015/lib/components/form-stepper/form-stepper/form-stepper.component.js +2 -2
  11. package/esm2015/lib/components/form-stepper/form-stepper.module.js +3 -3
  12. package/esm2015/lib/components/progressive-form/index.js +1 -2
  13. package/esm2015/lib/components/progressive-form/progressive-form/progressive-form.component.js +3 -2
  14. package/esm2015/lib/components/progressive-form/progressive-form/progressive-form.module.js +9 -7
  15. package/esm2015/lib/models/form-stepper/form-step.model.js +1 -1
  16. package/esm2015/lib/models/index.js +1 -2
  17. package/esm2015/lib/pipes/child-step-active.pipe.js +3 -3
  18. package/esm2015/lib/pipes/coerce-form-step-group.pipe.js +1 -1
  19. package/esm2015/lib/pipes/coerce-form-step.pipe.js +2 -2
  20. package/esm2015/lib/pipes/filter-hidden-items.pipe.js +51 -0
  21. package/esm2015/lib/pipes/index.js +2 -1
  22. package/esm2015/lib/services/form-manager.service.js +2 -3
  23. package/esm2015/lib/services/ui.service.js +7 -3
  24. package/esm2015/lib/utilities/generate-form-steps.js +4 -4
  25. package/esm2015/lib/utilities/serializer-util.js +3 -6
  26. package/esm2015/lib/utilities/update-step-status.js +1 -1
  27. package/fesm2015/mtna-web-form-angular.js +212 -230
  28. package/fesm2015/mtna-web-form-angular.js.map +1 -1
  29. package/lib/components/form/form.module.d.ts +4 -3
  30. package/lib/components/form-item-impl/dropdown/_dropdown-theme.scss +8 -8
  31. package/lib/components/form-stepper/form-stepper/_form-stepper-theme.scss +1 -2
  32. package/lib/components/progressive-form/index.d.ts +0 -1
  33. package/lib/components/progressive-form/progressive-form/progressive-form.component.d.ts +2 -2
  34. package/lib/components/progressive-form/progressive-form/progressive-form.module.d.ts +2 -2
  35. package/lib/models/index.d.ts +0 -1
  36. package/lib/pipes/filter-hidden-items.pipe.d.ts +23 -0
  37. package/lib/pipes/index.d.ts +1 -0
  38. package/lib/services/form-manager.service.d.ts +2 -2
  39. package/lib/utilities/generate-form-steps.d.ts +2 -2
  40. package/lib/utilities/update-step-status.d.ts +2 -2
  41. package/package.json +1 -1
  42. package/esm2015/lib/components/progressive-form/progressive-form-section/index.js +0 -3
  43. package/esm2015/lib/components/progressive-form/progressive-form-section/progressive-form-section.component.js +0 -27
  44. package/esm2015/lib/components/progressive-form/progressive-form-section/progressive-form-section.module.js +0 -54
  45. package/esm2015/lib/models/progressive-form/index.js +0 -4
  46. package/esm2015/lib/models/progressive-form/outline-step.model.js +0 -2
  47. package/esm2015/lib/models/progressive-form/progressive-form-section.model.js +0 -6
  48. package/esm2015/lib/models/progressive-form/progressive-form.model.js +0 -6
  49. package/lib/components/progressive-form/progressive-form-section/index.d.ts +0 -2
  50. package/lib/components/progressive-form/progressive-form-section/progressive-form-section.component.d.ts +0 -9
  51. package/lib/components/progressive-form/progressive-form-section/progressive-form-section.module.d.ts +0 -16
  52. package/lib/models/progressive-form/index.d.ts +0 -3
  53. package/lib/models/progressive-form/outline-step.model.d.ts +0 -7
  54. package/lib/models/progressive-form/progressive-form-section.model.d.ts +0 -4
  55. package/lib/models/progressive-form/progressive-form.model.d.ts +0 -7
@@ -1,8 +1,6 @@
1
1
  import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';
2
2
  import { isNullOrUndefined, isPresent, isType } from '@mtna/core-ts';
3
- import { CHECKBOX_ITEM_ID, DECIMAL_ANSWER_ITEM_ID, I18N_PARAGRAPH_ANSWER_ITEM_ID, I18N_SHORT_ANSWER_ITEM_ID, isForm, isFormItemGroupImpl, isOffsetDateRangeItem, isRepeatableItem, isSection, isTableItem, isWholeNumberItem, isYearQuarterRangeItem, PARAGRAPH_ANSWER_ITEM_ID, SHORT_ANSWER_ITEM_ID, WHOLE_NUMBER_ANSWER_ITEM_ID, } from '@mtna/web-form-ts';
4
- import { isProgressiveForm } from '../models';
5
- import { isProgressiveFormSection } from '../models/progressive-form/progressive-form-section.model';
3
+ import { CHECKBOX_ITEM_ID, DECIMAL_ANSWER_ITEM_ID, I18N_PARAGRAPH_ANSWER_ITEM_ID, I18N_SHORT_ANSWER_ITEM_ID, isForm, isFormItemGroupImpl, isOffsetDateRangeItem, isProgressiveForm, isRepeatableItem, isSection, isTableItem, isWholeNumberItem, isYearQuarterRangeItem, PARAGRAPH_ANSWER_ITEM_ID, SHORT_ANSWER_ITEM_ID, WHOLE_NUMBER_ANSWER_ITEM_ID, } from '@mtna/web-form-ts';
6
4
  import { validationResultValidator } from '../validators';
7
5
  /** RegEx to validate number items contain only negative, digits, or decimals */
8
6
  const numOnlyWithoutComma = /^-?\d+(\.\d*)?$/;
@@ -158,7 +156,6 @@ export function determineSerializeFunctionToUse(formItem, managerService, custom
158
156
  isProgressiveForm(formItem) ||
159
157
  isRepeatableItem(formItem) ||
160
158
  isSection(formItem) ||
161
- isProgressiveFormSection(formItem) ||
162
159
  isFormItemGroupImpl(formItem)) {
163
160
  return serializeFormItems(formItem, managerService, customFormItemConditional, customControlGenerator);
164
161
  }
@@ -247,7 +244,7 @@ export function insertTableItemValues(item, ngFormValue, disabledState, customFo
247
244
  * @param parent Parent of the FormItem, used to pass to the customFormItemBuilder
248
245
  */
249
246
  function determineInsertFunctionToUse(formItem, ngFormValue, disabledState, customFormItemConditional = () => false, customFormItemBuilder, parent) {
250
- if (isSection(formItem) || isProgressiveFormSection(formItem) || isFormItemGroupImpl(formItem) || isRepeatableItem(formItem)) {
247
+ if (isSection(formItem) || isFormItemGroupImpl(formItem) || isRepeatableItem(formItem)) {
251
248
  const items = insertFormItemValues(formItem, ngFormValue, disabledState, customFormItemConditional, customFormItemBuilder);
252
249
  return Object.assign(Object.assign({}, formItem), { items, disabled: _isDisabled(formItem, disabledState) });
253
250
  }
@@ -400,4 +397,4 @@ function numValueLimit(type, limit) {
400
397
  function isEmptyString(value) {
401
398
  return typeof value === 'string' && !value.length;
402
399
  }
403
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy9zZXJpYWxpemVyLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBaUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUNMLGdCQUFnQixFQUloQixzQkFBc0IsRUFNdEIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUd6QixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsc0JBQXNCLEVBR3RCLHdCQUF3QixFQUd4QixvQkFBb0IsRUFLcEIsMkJBQTJCLEdBRzVCLE1BQU0sbUJBQW1CLENBQUM7QUFHM0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzlDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBRXJHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0xRCxnRkFBZ0Y7QUFDaEYsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxnR0FBZ0c7QUFDaEcsTUFBTSxnQkFBZ0IsR0FBRyw4QkFBOEIsQ0FBQztBQUN4RCw2RUFBNkU7QUFDN0UsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO0FBQzFCLDRGQUE0RjtBQUM1RixNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQztBQUV2QyxnQ0FBZ0M7QUFFaEM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENB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RUFBRSxDQUFDO0lBQ2pFLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsYUFBYSxDQUFDLElBQW1CLEVBQUUsS0FBYTtJQUN2RCxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtRQUMzRCxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3RFLENBQUMsQ0FBQztnQkFDRSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNOLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSztvQkFDYixNQUFNLEVBQUUsT0FBTyxDQUFDLEtBQUs7aUJBQ3RCO2FBQ0Y7WUFDSCxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDbkMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbnRlcm5hdGlvbmFsaXplZFN0cmluZyB9IGZyb20gJ0BtdG5hL2NvcmUtaTE4bi10cyc7XG5pbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCwgaXNQcmVzZW50LCBpc1R5cGUgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcbmltcG9ydCB7XG4gIENIRUNLQk9YX0lURU1fSUQsXG4gIENoZWNrYm94SXRlbSxcbiAgQ29uZGl0aW9uYWxJdGVtLFxuICBEYXRlUmFuZ2UsXG4gIERFQ0lNQUxfQU5TV0VSX0lURU1fSUQsXG4gIERlY2ltYWxBbnN3ZXJJdGVtLFxuICBGb3JtIGFzIFdlYkZvcm0sXG4gIEZvcm1JdGVtLFxuICBGb3JtSXRlbUdyb3VwLFxuICBGb3JtSXRlbUltcGwsXG4gIEkxOE5fUEFSQUdSQVBIX0FOU1dFUl9JVEVNX0lELFxuICBJMThOX1NIT1JUX0FOU1dFUl9JVEVNX0lELFxuICBJbnRlcm5hdGlvbmFsaXplZFBhcmFncmFwaEFuc3dlckl0ZW0sXG4gIEludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtLFxuICBpc0Zvcm0sXG4gIGlzRm9ybUl0ZW1Hcm91cEltcGwsXG4gIGlzT2Zmc2V0RGF0ZVJhbmdlSXRlbSxcbiAgaXNSZXBlYXRhYmxlSXRlbSxcbiAgaXNTZWN0aW9uLFxuICBpc1RhYmxlSXRlbSxcbiAgaXNXaG9sZU51bWJlckl0ZW0sXG4gIGlzWWVhclF1YXJ0ZXJSYW5nZUl0ZW0sXG4gIE9wdGlvbixcbiAgT3B0aW9uR3JvdXBJdGVtSW1wbCxcbiAgUEFSQUdSQVBIX0FOU1dFUl9JVEVNX0lELFxuICBQYXJhZ3JhcGhBbnN3ZXJJdGVtLFxuICBSZXBlYXRhYmxlSXRlbSxcbiAgU0hPUlRfQU5TV0VSX0lURU1fSUQsXG4gIFNob3J0QW5zd2VySXRlbSxcbiAgVGFibGVJdGVtLFxuICBUYWJsZVJvd0l0ZW0sXG4gIFZhbHVlSXRlbSxcbiAgV0hPTEVfTlVNQkVSX0FOU1dFUl9JVEVNX0lELFxuICBXaG9sZU51bWJlckFuc3dlckl0ZW0sXG4gIFllYXJRdWFydGVyLFxufSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBpc1Byb2dyZXNzaXZlRm9ybSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBpc1Byb2dyZXNzaXZlRm9ybVNlY3Rpb24gfSBmcm9tICcuLi9tb2RlbHMvcHJvZ3Jlc3NpdmUtZm9ybS9wcm9ncmVzc2l2ZS1mb3JtLXNlY3Rpb24ubW9kZWwnO1xuaW1wb3J0IHsgTXRuYVdmTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyB2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yIH0gZnJvbSAnLi4vdmFsaWRhdG9ycyc7XG5cbi8qKiBUeXBlcyBvZiBWYWxpZGF0b3JzIHRoYXQgY2FuIGJlIHNldCBvbiBhIEZvcm1Db250cm9sICovXG5leHBvcnQgdHlwZSBWYWxpZGF0b3JUeXBlID0gJ3JlcXVpcmVkJyB8ICdyZXF1aXJlZFRydWUnIHwgJ2VtYWlsJztcbmV4cG9ydCB0eXBlIFZhbGlkYXRvcldpdGhOdW1iZXJUeXBlID0gJ21pbkxlbmd0aCcgfCAnbWF4TGVuZ3RoJyB8ICdtaW4nIHwgJ21heCc7XG5cbi8qKiBSZWdFeCB0byB2YWxpZGF0ZSBudW1iZXIgaXRlbXMgY29udGFpbiBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGRlY2ltYWxzICovXG5jb25zdCBudW1Pbmx5V2l0aG91dENvbW1hID0gL14tP1xcZCsoXFwuXFxkKik/JC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgbnVtYmVyIGl0ZW1zIGNvbnRhaW4gb25seSBuZWdhdGl2ZSwgZGlnaXRzLCBvciBkZWNpbWFscyBpbiBjb21tYSBmb3JtYXQgKi9cbmNvbnN0IG51bU9ubHlXaXRoQ29tbWEgPSAvXi0/XFxkezEsM30oLFxcZHszfSkqKFxcLlxcZCopPyQvO1xuLyoqIFJlZ0V4IHRvIHZhbGlkYXRlICdwb3NpdGl2ZSBvbmx5JyBpdGVtIGNvbmFpbnMgbm9uLW5lZ2F0aXZlIGNoYXJhY3RlcnMgKi9cbmNvbnN0IHBvc09ubHkgPSAvXlteLV0qJC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgJ3dob2xlIG51bWJlcicgaXRlbSBjb250YWlucyBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGNvbW1hIGZvcm1hdCAqL1xuY29uc3Qgd2hvbGVOdW1iZXIgPSAvXi0/XFxkKygsXFxkezN9KSokLztcblxuLy8jcmVnaW9uIEZvcm1Db250cm9sIEdlbmVyYXRpb25cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBuZXcgRm9ybUdyb3VwIHdpdGggRm9ybUNvbnRyb2xzICYgcG9zc2libGUgbmVzdGVkIEZvcm1Hcm91cHNcbiAqIEBwYXJhbSBmb3JtSXRlbSBXZWJGb3JtLCBTZWN0aW9uLCBHcm91cCwgb3IgUmVwZWF0YWJsZUl0ZW0gdXNlZCB0byBjcmVhdGUgYSBGb3JtR3JvdXBcbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIGJvb2xlYW4gZnVuY3Rpb24gZm9yIGFueSBjdXN0b20gRm9ybUl0ZW1zXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBGb3JtQ29udHJvbCBnZW5lcmF0b3IgZnVuY3Rpb24gZm9yIGFueSBjdXN0b20gRm9ybUl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGb3JtSXRlbXMoXG4gIGZvcm1JdGVtOiBXZWJGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtLFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBGb3JtR3JvdXAge1xuICBjb25zdCBmb3JtOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGZvcm1JdGVtLml0ZW1zKSB7XG4gICAgY29uc3QgY29udHJvbCA9IGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2UoXG4gICAgICBpdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPixcbiAgICAgIG1hbmFnZXJTZXJ2aWNlLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3JcbiAgICApO1xuICAgIGlmIChjb250cm9sKSB7XG4gICAgICBmb3JtW2l0ZW0uaW5zdGFuY2VJZF0gPSBjb250cm9sO1xuICAgIH1cbiAgfVxuICBjb25zdCByZXF1aXJlZCA9IGlzRm9ybShmb3JtSXRlbSkgPyB0cnVlIDogZm9ybUl0ZW0ucmVxdWlyZWQ7XG4gIGNvbnN0IGdyb3VwID0gcmVxdWlyZWQgPyBuZXcgRm9ybUdyb3VwKGZvcm0sIFZhbGlkYXRvcnMucmVxdWlyZWQpIDogbmV3IEZvcm1Hcm91cChmb3JtKTtcbiAgaWYgKCdkaXNhYmxlZCcgaW4gZm9ybUl0ZW0gJiYgZm9ybUl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSB0YWlsb3JlZCBGb3JtQ29udHJvbCB3aXRoIHZhbGlkYXRvcnMgZm9yIGEgRm9ybUl0ZW1cbiAqIEBwYXJhbSBmb3JtSXRlbSBUaGUgRm9ybUl0ZW0gcmVxdWVzdGluZyBhIHRhaWxvcmVkIEZvcm1Db250cm9sXG4gKiBAaW50ZXJuYWwgQ3JlYXRpbmcgdGhlIGZvcm0gY29udHJvbCBhbmQgdGhlbiBjYWxsaW5nIHNldFZhbGlkYXRvcnMgZm9yY2UgYSB2YWxpZGF0aW9uIHBhc3MsXG4gKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTk2MjIjaXNzdWVjb21tZW50LTM0MTU0Nzg4NFxuICogQmV0dGVyIHRvIGdhdGhlciB0aGUgdmFsaWRhdG9ycyBhbmQgcHV0IHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBmb3JtIGNvbnRyb2wuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbTogRm9ybUl0ZW1JbXBsPHVua25vd24+LCBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UpOiBBYnN0cmFjdENvbnRyb2wge1xuICBjb25zdCB2YWxpZGF0b3JzID0gbmV3IEFycmF5PFZhbGlkYXRvckZuPih2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yKGZvcm1JdGVtLmluc3RhbmNlSWQsIG1hbmFnZXJTZXJ2aWNlKSk7XG4gIGlmIChmb3JtSXRlbS5yZXF1aXJlZCkge1xuICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgfVxuICBzd2l0Y2ggKGZvcm1JdGVtLml0ZW1JZCkge1xuICAgIGNhc2UgQ0hFQ0tCT1hfSVRFTV9JRDoge1xuICAgICAgY29uc3QgY2hlY2tib3hJdGVtID0gZm9ybUl0ZW0gYXMgQ2hlY2tib3hJdGVtO1xuICAgICAgY29uc3QgdmFsdWUgPSBjaGVja2JveEl0ZW0udmFsdWUgfHwgW107XG4gICAgICB2YWxpZGF0b3JzLnB1c2gobnVtQ2hlY2tib3hlc1ZhbGlkYXRvcignTUlOJywgY2hlY2tib3hJdGVtLm1pblNlbGVjdGlvbnMpLCBudW1DaGVja2JveGVzVmFsaWRhdG9yKCdNQVgnLCBjaGVja2JveEl0ZW0ubWF4U2VsZWN0aW9ucykpO1xuICAgICAgY29uc3QgYXJyID0gbmV3IEZvcm1BcnJheShcbiAgICAgICAgY2hlY2tib3hJdGVtLm9wdGlvbnMubWFwKFxuICAgICAgICAgIChvKSA9PlxuICAgICAgICAgICAgbmV3IEZvcm1Db250cm9sKHtcbiAgICAgICAgICAgICAgdmFsdWU6IG8uc2VsZWN0ZWQgfHwgdmFsdWUuc29tZSgodikgPT4gdiA9PT0gby5vcHRpb24uaWQpLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogY2hlY2tib3hJdGVtLmRpc2FibGVkLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvcnMpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG4gICAgY2FzZSBERUNJTUFMX0FOU1dFUl9JVEVNX0lEOlxuICAgIGNhc2UgV0hPTEVfTlVNQkVSX0FOU1dFUl9JVEVNX0lEOiB7XG4gICAgICBjb25zdCBpdGVtID0gZm9ybUl0ZW0gYXMgRGVjaW1hbEFuc3dlckl0ZW0gfCBXaG9sZU51bWJlckFuc3dlckl0ZW07XG4gICAgICB2YWxpZGF0b3JzLnB1c2gobnVtZXJpY2FsVmFsdWVDaGVjaygpKTtcbiAgICAgIGlmIChpc1dob2xlTnVtYmVySXRlbShpdGVtKSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2god2hvbGVOdW1iZXJQYXR0ZXJuKCkpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0ucG9zaXRpdmVPbmx5KSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChwb3NpdGl2ZU51bWJlclBhdHRlcm4oKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZW0ubWluVmFsdWUpKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChudW1WYWx1ZUxpbWl0KCdtaW4nLCBpdGVtLm1pblZhbHVlKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZW0ubWF4VmFsdWUpKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChudW1WYWx1ZUxpbWl0KCdtYXgnLCBpdGVtLm1heFZhbHVlKSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBQQVJBR1JBUEhfQU5TV0VSX0lURU1fSUQ6XG4gICAgY2FzZSBTSE9SVF9BTlNXRVJfSVRFTV9JRDoge1xuICAgICAgY29uc3Qgc2hvcnRBbnN3ZXJJdGVtID0gZm9ybUl0ZW0gYXMgU2hvcnRBbnN3ZXJJdGVtIHwgUGFyYWdyYXBoQW5zd2VySXRlbTtcbiAgICAgIHZhbGlkYXRvcnMucHVzaCguLi5nZXROdW1lcmljVmFsaWRhdG9yKCdtaW5MZW5ndGgnLCBzaG9ydEFuc3dlckl0ZW0ubWluQ2hhckNvdW50KSk7XG4gICAgICB2YWxpZGF0b3JzLnB1c2goLi4uZ2V0TnVtZXJpY1ZhbGlkYXRvcignbWF4TGVuZ3RoJywgc2hvcnRBbnN3ZXJJdGVtLm1heENoYXJDb3VudCkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgSTE4Tl9QQVJBR1JBUEhfQU5TV0VSX0lURU1fSUQ6XG4gICAgY2FzZSBJMThOX1NIT1JUX0FOU1dFUl9JVEVNX0lEOiB7XG4gICAgICBjb25zdCBpMThuSXRlbSA9IGZvcm1JdGVtIGFzIEludGVybmF0aW9uYWxpemVkUGFyYWdyYXBoQW5zd2VySXRlbSB8IEludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtO1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9LCBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykpO1xuICAgICAgZm9yIChjb25zdCBsYW5ndWFnZSBvZiBpMThuSXRlbS5sYW5ndWFnZVRhZ3MpIHtcbiAgICAgICAgLy8gRklYTUUgaWYgdGhlcmUgaXMgbm90aGlnbiB0aGVyZSBpbiB0aGUgdmFsdWUgc2hvdWxkIEkgc2V0IGEgbmV3IGludGVybmF0aW9uYWxpemVkIHN0cmluZz9cbiAgICAgICAgZ3JvdXAuY29udHJvbHNbbGFuZ3VhZ2VdID0gbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpMThuSXRlbS5kaXNhYmxlZCkge1xuICAgICAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IGZvcm1JdGVtLnZhbHVlLCBkaXNhYmxlZDogISFmb3JtSXRlbS5kaXNhYmxlZCB9LCBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBjb250cm9scyBmb3IgYW55IGZvcm0gaXRlbXMgbmVzdGVkIGluc2lkZSBhIHBhcmVudCBpdGVtcyBvcHRpb25zXG4gKiBAcGFyYW0gZm9ybUl0ZW0gVGhlIEZvcm1JdGVtIHdpdGggYW4gJ29wdGlvbnMnIHByb3BlcnR5XG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBjb25kaXRpb25hbCBmdW5jdGlvbiBmcm9tIHBhcmVudCAnc2VyaWFsaXplRm9ybUl0ZW1zJyBmdW5jdGlvblxuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgRm9ybUNvbnRyb2wgZ2VuZXJhdG9yIGZyb20gcGFyZW50ICdzZXJpYWxpemVGb3JtSXRlbXMnIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVOZXN0ZWRPcHRpb25Gb3JtSXRlbXMoXG4gIGZvcm1JdGVtOiBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gIG1hbmFnZXJTZXJ2aWNlOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSxcbiAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbDogKGl0ZW06IEZvcm1JdGVtKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2UsXG4gIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3I/OiAoaXRlbTogRm9ybUl0ZW0pID0+IEFic3RyYWN0Q29udHJvbCB8IG51bGxcbik6IEZvcm1Hcm91cCB7XG4gIGNvbnN0IGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG4gIGZvciAoY29uc3QgaWQgaW4gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCwgaWQpKSB7XG4gICAgICBjb25zdCBzdWJJdGVtID0gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcFtpZF0gYXMgRm9ybUl0ZW1JbXBsPHVua25vd24+O1xuICAgICAgY29uc3QgY29udHJvbCA9IGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2Uoc3ViSXRlbSwgbWFuYWdlclNlcnZpY2UsIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IpO1xuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29udHJvbHNbc3ViSXRlbS5pbnN0YW5jZUlkXSA9IGNvbnRyb2w7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29udHJvbHNbZm9ybUl0ZW0uaW5zdGFuY2VJZF0gPSBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UpO1xuICBjb25zdCBncm91cCA9IGZvcm1JdGVtLnJlcXVpcmVkID8gbmV3IEZvcm1Hcm91cChjb250cm9scywgVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBuZXcgRm9ybUdyb3VwKGNvbnRyb2xzKTtcbiAgaWYgKGZvcm1JdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBCdWlsZCBGb3JtQ29udHJvbHMgZm9yIGEgVGFibGVJdGVtXG4gKiBAcGFyYW0gaXRlbSBUYWJsZUl0ZW0gcmVxdWlyaW5nIEZvcm1Db250cm9sc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwgZnVuY3Rpb24gZm9yIGN1c3RvbSBhbnkgRm9ybUl0ZW1zXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBGb3JtQ29udHJvbCBnZW5lcmF0b3IgZm9yIGN1c3RvbSBhbnkgRm9ybUl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVUYWJsZUl0ZW0oXG4gIGl0ZW06IFRhYmxlSXRlbSxcbiAgbWFuYWdlclNlcnZpY2U6IE10bmFXZk1hbmFnZXJTZXJ2aWNlLFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tQ29udHJvbEdlbmVyYXRvcj86IChpdGVtOiBGb3JtSXRlbSkgPT4gQWJzdHJhY3RDb250cm9sIHwgbnVsbFxuKTogRm9ybUdyb3VwIHtcbiAgY29uc3QgdGFibGVDb250cm9sOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG4gIGZvciAoY29uc3Qgcm93IG9mIGl0ZW0udGFibGVSb3dzKSB7XG4gICAgZm9yIChjb25zdCByb3dJdGVtIG9mIHJvdy5pdGVtcy5maWx0ZXIoKGkpID0+ICEhaSkpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBkZXRlcm1pbmVTZXJpYWxpemVGdW5jdGlvblRvVXNlKFxuICAgICAgICByb3dJdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPixcbiAgICAgICAgbWFuYWdlclNlcnZpY2UsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICAgIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3JcbiAgICAgICk7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICB0YWJsZUNvbnRyb2xbcm93SXRlbS5pbnN0YW5jZUlkXSA9IGNvbnRyb2w7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGdyb3VwID0gaXRlbS5yZXF1aXJlZCA/IG5ldyBGb3JtR3JvdXAodGFibGVDb250cm9sLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSA6IG5ldyBGb3JtR3JvdXAodGFibGVDb250cm9sKTtcbiAgaWYgKGl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIGZvciB0aGUgY2FsbGVyIHRvIHVzZS5cbiAqXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gcmVxdWlyaW5nIHNlcmlhbGl6YXRpb25cbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIENvbmRpdGlvbmFsIGZvciBhIGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgU2VyaWFsaXplciBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2UoXG4gIGZvcm1JdGVtOiBGb3JtSXRlbUltcGw8dW5rbm93bj4gfCBXZWJGb3JtLFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHtcbiAgaWYgKFxuICAgIGlzRm9ybShmb3JtSXRlbSkgfHxcbiAgICBpc1Byb2dyZXNzaXZlRm9ybShmb3JtSXRlbSkgfHxcbiAgICBpc1JlcGVhdGFibGVJdGVtKGZvcm1JdGVtKSB8fFxuICAgIGlzU2VjdGlvbihmb3JtSXRlbSkgfHxcbiAgICBpc1Byb2dyZXNzaXZlRm9ybVNlY3Rpb24oZm9ybUl0ZW0pIHx8XG4gICAgaXNGb3JtSXRlbUdyb3VwSW1wbChmb3JtSXRlbSlcbiAgKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZUZvcm1JdGVtcyhmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UsIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IpO1xuICB9IGVsc2UgaWYgKGlzVGFibGVJdGVtKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBzZXJpYWxpemVUYWJsZUl0ZW0oZm9ybUl0ZW0sIG1hbmFnZXJTZXJ2aWNlLCBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLCBjdXN0b21Db250cm9sR2VuZXJhdG9yKTtcbiAgfSBlbHNlIGlmIChjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsKGZvcm1JdGVtKSAmJiAhIWN1c3RvbUNvbnRyb2xHZW5lcmF0b3IpIHtcbiAgICByZXR1cm4gY3VzdG9tQ29udHJvbEdlbmVyYXRvcihmb3JtSXRlbSk7XG4gIH0gZWxzZSBpZiAoaGFzTmVzdGVkRm9ybUl0ZW1zKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBzZXJpYWxpemVOZXN0ZWRPcHRpb25Gb3JtSXRlbXMoZm9ybUl0ZW0gYXMgT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+LCBtYW5hZ2VyU2VydmljZSk7XG4gIH0gZWxzZSBpZiAoaXNPZmZzZXREYXRlUmFuZ2VJdGVtKGZvcm1JdGVtKSB8fCBpc1llYXJRdWFydGVyUmFuZ2VJdGVtKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBzZXJpYWxpemVSYW5nZUl0ZW0oZm9ybUl0ZW0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UpO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGEgRm9ybUdyb3VwIGZvciBhIHJhbmdlIGl0ZW1cbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSBmb3IgYSBEYXRlUmFuZ2Ugb2YgRGF0ZSB8IFllYXJRdWFydGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVSYW5nZUl0ZW0oZm9ybUl0ZW06IEZvcm1JdGVtSW1wbDxEYXRlUmFuZ2U8RGF0ZSB8IFllYXJRdWFydGVyPj4pOiBGb3JtR3JvdXAge1xuICBjb25zdCB2YWxpZGF0b3JzID0gbmV3IEFycmF5PFZhbGlkYXRvckZuPigpO1xuICBpZiAoZm9ybUl0ZW0ucmVxdWlyZWQpIHtcbiAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gIH1cbiAgY29uc3QgZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKFxuICAgIHtcbiAgICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2woZm9ybUl0ZW0udmFsdWUgPyBmb3JtSXRlbS52YWx1ZS5zdGFydCA6IG51bGwpLFxuICAgICAgZW5kOiBuZXcgRm9ybUNvbnRyb2woZm9ybUl0ZW0udmFsdWUgPyBmb3JtSXRlbS52YWx1ZS5lbmQgOiBudWxsKSxcbiAgICB9LFxuICAgIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKVxuICApO1xuICBpZiAoZm9ybUl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBWYWxpZGF0b3Igd2l0aCBhIG51bWVyaWMgdmFsdWUgZm9yIGEgRm9ybUl0ZW07XG4gKiBSZXR1cm5zIGFzIGFuIGFycmF5IG9mIGxlbmd0aCAxIG9yIDBcbiAqIEBwYXJhbSBwYXJhbTAgYHR5cGVgIC0gdHlwZSBvZiB2YWxpZGF0b3IsIGUuZy4gJ21pbkxlbmd0aCc7XG4gKiBgdmFsdWVgIC0gcGFyYW1ldGVyIGZvciB0aGUgdmFsaWRhdG9yLCBlLmcuICdtaW5MZW5ndGgodmFsdWUpJ1xuICovXG5mdW5jdGlvbiBnZXROdW1lcmljVmFsaWRhdG9yKHR5cGU6IFZhbGlkYXRvcldpdGhOdW1iZXJUeXBlLCB2YWx1ZTogbnVtYmVyKTogVmFsaWRhdG9yRm5bXSB7XG4gIHJldHVybiAhaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpID8gW1ZhbGlkYXRvcnNbdHlwZV0odmFsdWUpXSA6IFtdO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIE10bmFGb3JtIHZhbHVlIGluc2VydGlvblxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgRm9ybWl0ZW1zIHdpdGggbmV3IHZhbHVlcyBpbnNlcnRlZC5cbiAqXG4gKiBAcGFyYW0gc2VjdGlvbiBUaGUgb2xkIEZvcm0gb3IgRm9ybSBTZWN0aW9uXG4gKiBAcGFyYW0gbmdGb3JtVmFsdWUgbmdGb3JtIEpTT04gdmFsdWVzXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBib29sZWFuIGZ1bmN0aW9uIGZvciBhbnkgY3VzdG9tIEZvcm1JdGVtc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQnVpbGRlciBmdW5jdGlvbiB0byBoYW5kbGUgY3VzdG9tIEZvcm1JdGVtc1xuICogQHJldHVybnMgbmV3IEZvcm1JdGVtIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRGb3JtSXRlbVZhbHVlcyhcbiAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSxcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IEFycmF5PEZvcm1JdGVtPiB7XG4gIHJldHVybiBzZWN0aW9uLml0ZW1zXG4gICAgLm1hcCgoaXRlbSkgPT5cbiAgICAgIGRldGVybWluZUluc2VydEZ1bmN0aW9uVG9Vc2UoXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIG5nRm9ybVZhbHVlW2l0ZW0uaW5zdGFuY2VJZF0sXG4gICAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlcixcbiAgICAgICAgc2VjdGlvblxuICAgICAgKVxuICAgIClcbiAgICAuZmlsdGVyKGlzUHJlc2VudCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNvcGllZCBUYWJsZUl0ZW0sIHdpdGggZWFjaCByb3cgRm9ybUl0ZW0gaGF2aW5nIG5ldyBpbnNlcnRlZCB2YWx1ZXMuXG4gKiBAcGFyYW0gaXRlbSBUYWJsZUl0ZW0gdG8gaW5zZXJ0IHZhbHVlc1xuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSB2YWx1ZSBvZiB0aGUgVGFibGVJdGVtXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBib29sZWFuIGZ1bmN0aW9uIGZvciBhbnkgY3VzdG9tIEZvcm1JdGVtXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1CdWlsZGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSBjdXN0b20gRm9ybUl0ZW0gdmFsdWUgaW5zZXJ0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRUYWJsZUl0ZW1WYWx1ZXMoXG4gIGl0ZW06IFRhYmxlSXRlbSxcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IFRhYmxlSXRlbSB7XG4gIGNvbnN0IHRhYmxlUm93cyA9IGl0ZW0udGFibGVSb3dzLm1hcCgocm93OiBUYWJsZVJvd0l0ZW0pID0+ICh7XG4gICAgLi4ucm93LFxuICAgIGl0ZW1zOiByb3cuaXRlbXNcbiAgICAgIC5maWx0ZXIoaXNQcmVzZW50KVxuICAgICAgLm1hcCgoZm9ybUl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGRldGVybWluZUluc2VydEZ1bmN0aW9uVG9Vc2UoXG4gICAgICAgICAgZm9ybUl0ZW0sXG4gICAgICAgICAgbmdGb3JtVmFsdWVbZm9ybUl0ZW0uaW5zdGFuY2VJZF0sXG4gICAgICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICAgICAgICApO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoaXNQcmVzZW50KSxcbiAgfSkpO1xuICByZXR1cm4geyAuLi5pdGVtLCB0YWJsZVJvd3MsIGRpc2FibGVkOiBfaXNEaXNhYmxlZChpdGVtLCBkaXNhYmxlZFN0YXRlKSB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgRm9ybUl0ZW0gYWZ0ZXIgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHRvIHVzZS5cbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSByZXF1aXJpbmcgdmFsdWUgaW5zZXJ0aW9uXG4gKiBAcGFyYW0gbmdGb3JtVmFsdWUgbmdGb3JtIHZhbHVlXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBDb25kaXRpb25hbCBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIgVmFsdWUgaW5zZXJ0aW9uIGZ1bmN0aW9uIGZvciBhIGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGRpc2FibGVkU3RhdGUgTWFwIG9mIGl0ZW1zJyBkaXNhYmxlZCBzdGF0ZVxuICogQHBhcmFtIHBhcmVudCBQYXJlbnQgb2YgdGhlIEZvcm1JdGVtLCB1c2VkIHRvIHBhc3MgdG8gdGhlIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICBmb3JtSXRlbTogRm9ybUl0ZW0sXG4gIG5nRm9ybVZhbHVlOiB1bmtub3duLFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGwsXG4gIHBhcmVudD86IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW1cbik6IEZvcm1JdGVtIHwgbnVsbCB7XG4gIGlmIChpc1NlY3Rpb24oZm9ybUl0ZW0pIHx8IGlzUHJvZ3Jlc3NpdmVGb3JtU2VjdGlvbihmb3JtSXRlbSkgfHwgaXNGb3JtSXRlbUdyb3VwSW1wbChmb3JtSXRlbSkgfHwgaXNSZXBlYXRhYmxlSXRlbShmb3JtSXRlbSkpIHtcbiAgICBjb25zdCBpdGVtcyA9IGluc2VydEZvcm1JdGVtVmFsdWVzKFxuICAgICAgZm9ybUl0ZW0sXG4gICAgICBuZ0Zvcm1WYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgKTtcbiAgICByZXR1cm4geyAuLi5mb3JtSXRlbSwgaXRlbXMsIGRpc2FibGVkOiBfaXNEaXNhYmxlZChmb3JtSXRlbSwgZGlzYWJsZWRTdGF0ZSkgfSBhcyBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW07XG4gIH0gZWxzZSBpZiAoaXNUYWJsZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgcmV0dXJuIGluc2VydFRhYmxlSXRlbVZhbHVlcyhcbiAgICAgIGZvcm1JdGVtLFxuICAgICAgbmdGb3JtVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICBkaXNhYmxlZFN0YXRlLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICAgICk7XG4gIH0gZWxzZSBpZiAoY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbChmb3JtSXRlbSkgJiYgISFjdXN0b21Gb3JtSXRlbUJ1aWxkZXIpIHtcbiAgICByZXR1cm4gY3VzdG9tRm9ybUl0ZW1CdWlsZGVyKHBhcmVudCwgZm9ybUl0ZW0sIG5nRm9ybVZhbHVlLCBkaXNhYmxlZFN0YXRlKTtcbiAgfSBlbHNlIGlmIChoYXNOZXN0ZWRGb3JtSXRlbXMoZm9ybUl0ZW0pKSB7XG4gICAgcmV0dXJuIGluc2VydE5lc3RlZEZvcm1JdGVtVmFsdWVzKFxuICAgICAgZm9ybUl0ZW0gYXMgT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+LFxuICAgICAgbmdGb3JtVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICBkaXNhYmxlZFN0YXRlLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICAgICk7XG4gIH0gZWxzZSBpZiAoaXNPZmZzZXREYXRlUmFuZ2VJdGVtKGZvcm1JdGVtKSB8fCBpc1llYXJRdWFydGVyUmFuZ2VJdGVtKGZvcm1JdGVtKSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gaXNUeXBlPHsgc3RhcnQ6IFllYXJRdWFydGVyIHwgRGF0ZSB9PihuZ0Zvcm1WYWx1ZSwgJ3N0YXJ0JykgPyBuZ0Zvcm1WYWx1ZS5zdGFydCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBlbmQgPSBpc1R5cGU8eyBlbmQ6IFllYXJRdWFydGVyIHwgRGF0ZSB9PihuZ0Zvcm1WYWx1ZSwgJ2VuZCcpID8gbmdGb3JtVmFsdWUuZW5kIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IC4uLmZvcm1JdGVtLCB2YWx1ZTogeyBzdGFydCwgZW5kIH0sIGRpc2FibGVkOiBfaXNEaXNhYmxlZChmb3JtSXRlbSwgZGlzYWJsZWRTdGF0ZSkgfSBhcyBGb3JtSXRlbUltcGw8XG4gICAgICBEYXRlUmFuZ2U8RGF0ZSB8IFllYXJRdWFydGVyPlxuICAgID47XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmZvcm1JdGVtLFxuICAgICAgdmFsdWU6IGZpbmRJdGVtVmFsdWUoZm9ybUl0ZW0sIG5nRm9ybVZhbHVlKSxcbiAgICAgIGRpc2FibGVkOiBfaXNEaXNhYmxlZChmb3JtSXRlbSBhcyBGb3JtSXRlbUltcGw8dW5rbm93bj4sIGRpc2FibGVkU3RhdGUpLFxuICAgIH0gYXMgRm9ybUl0ZW07XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIG5nRm9ybSB2YWx1ZSBmb3IgYSBGb3JtSXRlbS5cbiAqXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gcmVxdWlyaW5nIGEgdmFsdWVcbiAqIEBwYXJhbSBuZ0Zvcm1WYWx1ZSBuZ0Zvcm0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gZmluZEl0ZW1WYWx1ZShmb3JtSXRlbTogRm9ybUl0ZW0sIG5nRm9ybVZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gIGNvbnN0IGl0ZW1JZCA9IGZvcm1JdGVtLml0ZW1JZC5zcGxpdCgnLicpLnBvcCgpO1xuICBzd2l0Y2ggKGl0ZW1JZD8udG9VcHBlckNhc2UoKSkge1xuICAgIC8vIEZJWE1FOiBjYW4gd2UgcHV0IHRoZXNlIElEcyBpbiBjb25zdGFudHMgYW5kIHJlZmVyIHRvIHRoZW0gaW5zdGVhZD9cbiAgICBjYXNlICdEQVRFSVRFTSc6XG4gICAgICByZXR1cm4gISFuZ0Zvcm1WYWx1ZSAmJiB0eXBlb2YgbmdGb3JtVmFsdWUgIT09ICdzdHJpbmcnID8gKG5nRm9ybVZhbHVlIGFzIE1vbWVudCkudG9JU09TdHJpbmcoKSA6IChuZ0Zvcm1WYWx1ZSBhcyBzdHJpbmcpO1xuICAgIGNhc2UgJ0NIRUNLQk9YSVRFTSc6XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKG5nRm9ybVZhbHVlKSAmJiBBcnJheS5pc0FycmF5KG5nRm9ybVZhbHVlKSkge1xuICAgICAgICBjb25zdCBhcnIgPSBuZ0Zvcm1WYWx1ZSBhcyBBcnJheTxib29sZWFuPjtcbiAgICAgICAgcmV0dXJuIChmb3JtSXRlbSBhcyBDaGVja2JveEl0ZW0pLm9wdGlvbnMuZmlsdGVyKChvLCBpbmRleCkgPT4gISFhcnJbaW5kZXhdKS5tYXAoKG8pID0+IG8ub3B0aW9uLmlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICBjYXNlICdJTlRFUk5BVElPTkFMSVpFRFBBUkFHUkFQSEFOU1dFUklURU0nOlxuICAgIGNhc2UgJ0lOVEVSTkFUSU9OQUxJWkVEU0hPUlRBTlNXRVJJVEVNJzoge1xuICAgICAgY29uc3QgbGFuZ3VhZ2VzID1cbiAgICAgICAgaXRlbUlkPy50b1VwcGVyQ2FzZSgpID09PSAnSU5URVJOQVRJT05BTElaRURQQVJBR1JBUEhBTlNXRVJJVEVNJ1xuICAgICAgICAgID8gKGZvcm1JdGVtIGFzIEludGVybmF0aW9uYWxpemVkUGFyYWdyYXBoQW5zd2VySXRlbSkubGFuZ3VhZ2VUYWdzXG4gICAgICAgICAgOiAoZm9ybUl0ZW0gYXMgSW50ZXJuYXRpb25hbGl6ZWRTaG9ydEFuc3dlckl0ZW0pLmxhbmd1YWdlVGFncztcblxuICAgICAgY29uc3QgdmFsdWUgPSBsYW5ndWFnZXMucmVkdWNlKCh2YWx1ZTogSW50ZXJuYXRpb25hbGl6ZWRTdHJpbmdbXSwgbGFuZ3VhZ2UpID0+IHtcbiAgICAgICAgaWYgKG5nRm9ybVZhbHVlICYmIHR5cGVvZiBuZ0Zvcm1WYWx1ZSA9PT0gJ29iamVjdCcgJiYgbGFuZ3VhZ2UgaW4gbmdGb3JtVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IChuZ0Zvcm1WYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbGFuZ3VhZ2VdO1xuICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgdmFsdWUucHVzaCh7IHZhbHVlOiBpbnB1dCBhcyBzdHJpbmcsIGZhY2V0SWQ6IGxhbmd1YWdlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LCBbXSk7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbmdGb3JtVmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0TmVzdGVkRm9ybUl0ZW1WYWx1ZXMoXG4gIGZvcm1JdGVtOiBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gIG5nRm9ybVZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsXG4pOiBGb3JtSXRlbSB7XG4gIGNvbnN0IG9wdGlvbkl0ZW1NYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgaWQgaW4gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCwgaWQpKSB7XG4gICAgICBjb25zdCBzdWJJdGVtID0gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcFtpZF07XG4gICAgICBvcHRpb25JdGVtTWFwW2lkXSA9IGRldGVybWluZUluc2VydEZ1bmN0aW9uVG9Vc2UoXG4gICAgICAgIHN1Ykl0ZW0sXG4gICAgICAgIG5nRm9ybVZhbHVlW3N1Ykl0ZW0uaW5zdGFuY2VJZF0sXG4gICAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5mb3JtSXRlbSxcbiAgICBvcHRpb25JdGVtTWFwLFxuICAgIHZhbHVlOiBmaW5kSXRlbVZhbHVlKGZvcm1JdGVtLCBuZ0Zvcm1WYWx1ZVtmb3JtSXRlbS5pbnN0YW5jZUlkXSksXG4gICAgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtLCBkaXNhYmxlZFN0YXRlKSxcbiAgfSBhcyBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj47XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSBGb3JtSXRlbSBoYXMgYW4gT3B0aW9uSXRlbU1hcCB3aXRoIGF0IGxlYXN0IDEgaXRlbSwgd2hpY2ggcmVxdWlyZSB0aGVpciBvd24gRm9ybUNvbnRyb2wocylcbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSB0byBjaGVja1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzTmVzdGVkRm9ybUl0ZW1zKGZvcm1JdGVtOiB1bmtub3duKTogZm9ybUl0ZW0gaXMgeyBvcHRpb25JdGVtTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IHtcbiAgcmV0dXJuIChcbiAgICBpc1R5cGU8e1xuICAgICAgb3B0aW9uSXRlbU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfT4oZm9ybUl0ZW0sICdvcHRpb25JdGVtTWFwJykgJiYgT2JqZWN0LmtleXMoZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCkubGVuZ3RoID4gMFxuICApO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGZvciB2YWxpZGF0aW5nIG1pbi9tYXggc2VsZWN0aW9ucyBsaW1pdHNcbiAqIEBwYXJhbSB0eXBlQ2hlY2sgV2hpY2ggbGltaXQgdG8gdmFsaWRhdGUuICdNSU4nIHwgJ01BWCdcbiAqIEBwYXJhbSBsaW1pdCB1cHBlciBvciBsb3dlciBsaW1pdCB0byBjaGVjayBhZ2FpbnN0XG4gKi9cbmZ1bmN0aW9uIG51bUNoZWNrYm94ZXNWYWxpZGF0b3IodHlwZUNoZWNrOiAnTUlOJyB8ICdNQVgnLCBsaW1pdCA9IDEpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgbGV0IHRvdGFsU2VsZWN0ZWQgPSAwO1xuICAgIGlmIChpc0Zvcm1BcnJheShjb250cm9sKSkge1xuICAgICAgdG90YWxTZWxlY3RlZCA9IGNvbnRyb2wuY29udHJvbHMubWFwKChjKSA9PiBjLnZhbHVlKS5yZWR1Y2UoKHRvdGFsLCBuZXh0KSA9PiAobmV4dCA/IHRvdGFsICsgbmV4dCA6IHRvdGFsKSwgMCk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlQ2hlY2spIHtcbiAgICAgIGNhc2UgJ01JTic6XG4gICAgICAgIHJldHVybiB0b3RhbFNlbGVjdGVkID49IGxpbWl0ID8gbnVsbCA6IHsgbWluU2VsZWN0ZWQ6ICRsb2NhbGl6ZWBTZWxlY3QgYXQgbGVhc3QgJHtsaW1pdH1gIH07XG4gICAgICBjYXNlICdNQVgnOlxuICAgICAgICByZXR1cm4gdG90YWxTZWxlY3RlZCA8PSBsaW1pdCA/IG51bGwgOiB7IG1heFNlbGVjdGVkOiAkbG9jYWxpemVgU2VsZWN0IG5vIG1vcmUgdGhhbiAke2xpbWl0fWAgfTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzRm9ybUFycmF5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGNvbnRyb2wgaXMgRm9ybUFycmF5IHtcbiAgcmV0dXJuIGlzVHlwZTxGb3JtQXJyYXk+KGNvbnRyb2wsICdjb250cm9scycpO1xufVxuXG5mdW5jdGlvbiBfaXNEaXNhYmxlZChpdGVtOiBDb25kaXRpb25hbEl0ZW0sIGRpc2FibGVkU3RhdGU6IHsgW2lkOiBzdHJpbmddOiBib29sZWFuIH0pOiBib29sZWFuIHtcbiAgY29uc3QgZGlzYWJsZWQgPSBkaXNhYmxlZFN0YXRlW2l0ZW0uaW5zdGFuY2VJZF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChkaXNhYmxlZCkgPyBpdGVtLmRpc2FibGVkIDogZGlzYWJsZWQ7XG59XG5cbmZ1bmN0aW9uIHdob2xlTnVtYmVyUGF0dGVybigpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChjb250cm9sLnZhbHVlKSB8fCBpc0VtcHR5U3RyaW5nKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gd2hvbGVOdW1iZXIudGVzdChjb250cm9sLnZhbHVlKSA/IG51bGwgOiB7IHdob2xlTnVtYmVyOiB0cnVlIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIG51bWVyaWNhbFZhbHVlQ2hlY2soKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgfHwgaXNFbXB0eVN0cmluZyhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudW1Pbmx5V2l0aG91dENvbW1hLnRlc3QoY29udHJvbC52YWx1ZSkgfHwgbnVtT25seVdpdGhDb21tYS50ZXN0KGNvbnRyb2wudmFsdWUpID8gbnVsbCA6IHsgbm9uRGlnaXQ6IHRydWUgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcG9zaXRpdmVOdW1iZXJQYXR0ZXJuKCk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGNvbnRyb2wudmFsdWUpIHx8IGlzRW1wdHlTdHJpbmcoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gcG9zT25seS50ZXN0KGNvbnRyb2wudmFsdWUpID8gbnVsbCA6IHsgcG9zaXRpdmU6IHRydWUgfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGlzIHdvcmtzIGFzIGEgY29tYmluYXRpb24gb2YgdGhlIGFuZ3VsYXIgJ21pbicvJ21heCcgVmFsaWRhdG9ycy4gVXNpbmcgdGhlIGJ1aWx0LWluIHZhbGlkYXRvcnNcbiAqIGFwcGVhcnMgdG8gdGFrZSBwcmVjZWRlbmNlIG92ZXIgY3VzdG9tIHZhbGlkYXRvcnMsIHJlZ2FyZGxlc3Mgb2Ygb3JkZXIgaW4gdGhlIGFycmF5LiBVc2luZyB0aGlzIGZ1bmN0aW9uXG4gKiBlbnN1cmVzIHZhbGlkYXRvcnMgc2V0IGJlZm9yZSB0aGlzIG9uZSBtYWludGFpbiBwcmlvcml0eS4gRm9yIGluc3RhbmNlLCB0aGUgaW5wdXQgdmFsdWUgZmFpbGluZyBudW1lcmljYWwgdmFsaWRhdGlvblxuICogaXMgbW9yZSBpbXBvcnRhbnQgdGhhbiB0aGUgdmFsdWUgYmVpbmcgd2l0aGluIG1pbi1tYXggcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIG51bVZhbHVlTGltaXQodHlwZTogJ21pbicgfCAnbWF4JywgbGltaXQ6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGNvbnRyb2wudmFsdWUpIHx8IGlzRW1wdHlTdHJpbmcoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQoY29udHJvbC52YWx1ZSk7XG4gICAgcmV0dXJuICFpc05hTih2YWx1ZSkgJiYgKHR5cGUgPT09ICdtaW4nID8gdmFsdWUgPCBsaW1pdCA6IHZhbHVlID4gbGltaXQpXG4gICAgICA/IHtcbiAgICAgICAgICBbdHlwZV06IHtcbiAgICAgICAgICAgIFt0eXBlXTogbGltaXQsXG4gICAgICAgICAgICBhY3R1YWw6IGNvbnRyb2wudmFsdWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgOiBudWxsO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5U3RyaW5nKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICF2YWx1ZS5sZW5ndGg7XG59XG4iXX0=
400
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy9zZXJpYWxpemVyLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBaUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUNMLGdCQUFnQixFQUloQixzQkFBc0IsRUFNdEIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUd6QixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUd0Qix3QkFBd0IsRUFHeEIsb0JBQW9CLEVBS3BCLDJCQUEyQixHQUc1QixNQUFNLG1CQUFtQixDQUFDO0FBSTNCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0xRCxnRkFBZ0Y7QUFDaEYsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxnR0FBZ0c7QUFDaEcsTUFBTSxnQkFBZ0IsR0FBRyw4QkFBOEIsQ0FBQztBQUN4RCw2RUFBNkU7QUFDN0UsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO0FBQzFCLDRGQUE0RjtBQUM1RixNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQztBQUV2QyxnQ0FBZ0M7QUFFaEM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFFBQWtELEVBQ2xELGNBQW9DLEVBQ3BDLDRCQUF5RCxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQ3BFLHNCQUFtRTtJQUVuRSxN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aUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEUsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDdEUsQ0FBQyxDQUFDO2dCQUNFLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ04sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLO29CQUNiLE1BQU0sRUFBRSxPQUFPLENBQUMsS0FBSztpQkFDdEI7YUFDRjtZQUNILENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBYztJQUNuQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEludGVybmF0aW9uYWxpemVkU3RyaW5nIH0gZnJvbSAnQG10bmEvY29yZS1pMThuLXRzJztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkLCBpc1ByZXNlbnQsIGlzVHlwZSB9IGZyb20gJ0BtdG5hL2NvcmUtdHMnO1xuaW1wb3J0IHtcbiAgQ0hFQ0tCT1hfSVRFTV9JRCxcbiAgQ2hlY2tib3hJdGVtLFxuICBDb25kaXRpb25hbEl0ZW0sXG4gIERhdGVSYW5nZSxcbiAgREVDSU1BTF9BTlNXRVJfSVRFTV9JRCxcbiAgRGVjaW1hbEFuc3dlckl0ZW0sXG4gIEZvcm0gYXMgV2ViRm9ybSxcbiAgRm9ybUl0ZW0sXG4gIEZvcm1JdGVtR3JvdXAsXG4gIEZvcm1JdGVtSW1wbCxcbiAgSTE4Tl9QQVJBR1JBUEhfQU5TV0VSX0lURU1fSUQsXG4gIEkxOE5fU0hPUlRfQU5TV0VSX0lURU1fSUQsXG4gIEludGVybmF0aW9uYWxpemVkUGFyYWdyYXBoQW5zd2VySXRlbSxcbiAgSW50ZXJuYXRpb25hbGl6ZWRTaG9ydEFuc3dlckl0ZW0sXG4gIGlzRm9ybSxcbiAgaXNGb3JtSXRlbUdyb3VwSW1wbCxcbiAgaXNPZmZzZXREYXRlUmFuZ2VJdGVtLFxuICBpc1Byb2dyZXNzaXZlRm9ybSxcbiAgaXNSZXBlYXRhYmxlSXRlbSxcbiAgaXNTZWN0aW9uLFxuICBpc1RhYmxlSXRlbSxcbiAgaXNXaG9sZU51bWJlckl0ZW0sXG4gIGlzWWVhclF1YXJ0ZXJSYW5nZUl0ZW0sXG4gIE9wdGlvbixcbiAgT3B0aW9uR3JvdXBJdGVtSW1wbCxcbiAgUEFSQUdSQVBIX0FOU1dFUl9JVEVNX0lELFxuICBQYXJhZ3JhcGhBbnN3ZXJJdGVtLFxuICBSZXBlYXRhYmxlSXRlbSxcbiAgU0hPUlRfQU5TV0VSX0lURU1fSUQsXG4gIFNob3J0QW5zd2VySXRlbSxcbiAgVGFibGVJdGVtLFxuICBUYWJsZVJvd0l0ZW0sXG4gIFZhbHVlSXRlbSxcbiAgV0hPTEVfTlVNQkVSX0FOU1dFUl9JVEVNX0lELFxuICBXaG9sZU51bWJlckFuc3dlckl0ZW0sXG4gIFllYXJRdWFydGVyLFxufSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBNdG5hV2ZNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm0tbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IHZhbGlkYXRpb25SZXN1bHRWYWxpZGF0b3IgfSBmcm9tICcuLi92YWxpZGF0b3JzJztcblxuLyoqIFR5cGVzIG9mIFZhbGlkYXRvcnMgdGhhdCBjYW4gYmUgc2V0IG9uIGEgRm9ybUNvbnRyb2wgKi9cbmV4cG9ydCB0eXBlIFZhbGlkYXRvclR5cGUgPSAncmVxdWlyZWQnIHwgJ3JlcXVpcmVkVHJ1ZScgfCAnZW1haWwnO1xuZXhwb3J0IHR5cGUgVmFsaWRhdG9yV2l0aE51bWJlclR5cGUgPSAnbWluTGVuZ3RoJyB8ICdtYXhMZW5ndGgnIHwgJ21pbicgfCAnbWF4JztcblxuLyoqIFJlZ0V4IHRvIHZhbGlkYXRlIG51bWJlciBpdGVtcyBjb250YWluIG9ubHkgbmVnYXRpdmUsIGRpZ2l0cywgb3IgZGVjaW1hbHMgKi9cbmNvbnN0IG51bU9ubHlXaXRob3V0Q29tbWEgPSAvXi0/XFxkKyhcXC5cXGQqKT8kLztcbi8qKiBSZWdFeCB0byB2YWxpZGF0ZSBudW1iZXIgaXRlbXMgY29udGFpbiBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGRlY2ltYWxzIGluIGNvbW1hIGZvcm1hdCAqL1xuY29uc3QgbnVtT25seVdpdGhDb21tYSA9IC9eLT9cXGR7MSwzfSgsXFxkezN9KSooXFwuXFxkKik/JC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgJ3Bvc2l0aXZlIG9ubHknIGl0ZW0gY29uYWlucyBub24tbmVnYXRpdmUgY2hhcmFjdGVycyAqL1xuY29uc3QgcG9zT25seSA9IC9eW14tXSokLztcbi8qKiBSZWdFeCB0byB2YWxpZGF0ZSAnd2hvbGUgbnVtYmVyJyBpdGVtIGNvbnRhaW5zIG9ubHkgbmVnYXRpdmUsIGRpZ2l0cywgb3IgY29tbWEgZm9ybWF0ICovXG5jb25zdCB3aG9sZU51bWJlciA9IC9eLT9cXGQrKCxcXGR7M30pKiQvO1xuXG4vLyNyZWdpb24gRm9ybUNvbnRyb2wgR2VuZXJhdGlvblxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG5ldyBGb3JtR3JvdXAgd2l0aCBGb3JtQ29udHJvbHMgJiBwb3NzaWJsZSBuZXN0ZWQgRm9ybUdyb3Vwc1xuICogQHBhcmFtIGZvcm1JdGVtIFdlYkZvcm0sIFNlY3Rpb24sIEdyb3VwLCBvciBSZXBlYXRhYmxlSXRlbSB1c2VkIHRvIGNyZWF0ZSBhIEZvcm1Hcm91cFxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgYm9vbGVhbiBmdW5jdGlvbiBmb3IgYW55IGN1c3RvbSBGb3JtSXRlbXNcbiAqIEBwYXJhbSBjdXN0b21Db250cm9sR2VuZXJhdG9yIEZvcm1Db250cm9sIGdlbmVyYXRvciBmdW5jdGlvbiBmb3IgYW55IGN1c3RvbSBGb3JtSXRlbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUZvcm1JdGVtcyhcbiAgZm9ybUl0ZW06IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0sXG4gIG1hbmFnZXJTZXJ2aWNlOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSxcbiAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbDogKGl0ZW06IEZvcm1JdGVtKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2UsXG4gIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3I/OiAoaXRlbTogRm9ybUl0ZW0pID0+IEFic3RyYWN0Q29udHJvbCB8IG51bGxcbik6IEZvcm1Hcm91cCB7XG4gIGNvbnN0IGZvcm06IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH0gPSB7fTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgZm9ybUl0ZW0uaXRlbXMpIHtcbiAgICBjb25zdCBjb250cm9sID0gZGV0ZXJtaW5lU2VyaWFsaXplRnVuY3Rpb25Ub1VzZShcbiAgICAgIGl0ZW0gYXMgRm9ybUl0ZW1JbXBsPHVua25vd24+LFxuICAgICAgbWFuYWdlclNlcnZpY2UsXG4gICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgY3VzdG9tQ29udHJvbEdlbmVyYXRvclxuICAgICk7XG4gICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgIGZvcm1baXRlbS5pbnN0YW5jZUlkXSA9IGNvbnRyb2w7XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlcXVpcmVkID0gaXNGb3JtKGZvcm1JdGVtKSA/IHRydWUgOiBmb3JtSXRlbS5yZXF1aXJlZDtcbiAgY29uc3QgZ3JvdXAgPSByZXF1aXJlZCA/IG5ldyBGb3JtR3JvdXAoZm9ybSwgVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBuZXcgRm9ybUdyb3VwKGZvcm0pO1xuICBpZiAoJ2Rpc2FibGVkJyBpbiBmb3JtSXRlbSAmJiBmb3JtSXRlbS5kaXNhYmxlZCkge1xuICAgIGdyb3VwLmRpc2FibGUoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHRhaWxvcmVkIEZvcm1Db250cm9sIHdpdGggdmFsaWRhdG9ycyBmb3IgYSBGb3JtSXRlbVxuICogQHBhcmFtIGZvcm1JdGVtIFRoZSBGb3JtSXRlbSByZXF1ZXN0aW5nIGEgdGFpbG9yZWQgRm9ybUNvbnRyb2xcbiAqIEBpbnRlcm5hbCBDcmVhdGluZyB0aGUgZm9ybSBjb250cm9sIGFuZCB0aGVuIGNhbGxpbmcgc2V0VmFsaWRhdG9ycyBmb3JjZSBhIHZhbGlkYXRpb24gcGFzcyxcbiAqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xOTYyMiNpc3N1ZWNvbW1lbnQtMzQxNTQ3ODg0XG4gKiBCZXR0ZXIgdG8gZ2F0aGVyIHRoZSB2YWxpZGF0b3JzIGFuZCBwdXQgdGhlbSBpbiB0aGUgY29uc3RydWN0b3Igb2YgdGhlIGZvcm0gY29udHJvbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUZvcm1JdGVtKGZvcm1JdGVtOiBGb3JtSXRlbUltcGw8dW5rbm93bj4sIG1hbmFnZXJTZXJ2aWNlOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSk6IEFic3RyYWN0Q29udHJvbCB7XG4gIGNvbnN0IHZhbGlkYXRvcnMgPSBuZXcgQXJyYXk8VmFsaWRhdG9yRm4+KHZhbGlkYXRpb25SZXN1bHRWYWxpZGF0b3IoZm9ybUl0ZW0uaW5zdGFuY2VJZCwgbWFuYWdlclNlcnZpY2UpKTtcbiAgaWYgKGZvcm1JdGVtLnJlcXVpcmVkKSB7XG4gICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICB9XG4gIHN3aXRjaCAoZm9ybUl0ZW0uaXRlbUlkKSB7XG4gICAgY2FzZSBDSEVDS0JPWF9JVEVNX0lEOiB7XG4gICAgICBjb25zdCBjaGVja2JveEl0ZW0gPSBmb3JtSXRlbSBhcyBDaGVja2JveEl0ZW07XG4gICAgICBjb25zdCB2YWx1ZSA9IGNoZWNrYm94SXRlbS52YWx1ZSB8fCBbXTtcbiAgICAgIHZhbGlkYXRvcnMucHVzaChudW1DaGVja2JveGVzVmFsaWRhdG9yKCdNSU4nLCBjaGVja2JveEl0ZW0ubWluU2VsZWN0aW9ucyksIG51bUNoZWNrYm94ZXNWYWxpZGF0b3IoJ01BWCcsIGNoZWNrYm94SXRlbS5tYXhTZWxlY3Rpb25zKSk7XG4gICAgICBjb25zdCBhcnIgPSBuZXcgRm9ybUFycmF5KFxuICAgICAgICBjaGVja2JveEl0ZW0ub3B0aW9ucy5tYXAoXG4gICAgICAgICAgKG8pID0+XG4gICAgICAgICAgICBuZXcgRm9ybUNvbnRyb2woe1xuICAgICAgICAgICAgICB2YWx1ZTogby5zZWxlY3RlZCB8fCB2YWx1ZS5zb21lKCh2KSA9PiB2ID09PSBvLm9wdGlvbi5pZCksXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBjaGVja2JveEl0ZW0uZGlzYWJsZWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycylcbiAgICAgICk7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH1cbiAgICBjYXNlIERFQ0lNQUxfQU5TV0VSX0lURU1fSUQ6XG4gICAgY2FzZSBXSE9MRV9OVU1CRVJfQU5TV0VSX0lURU1fSUQ6IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBmb3JtSXRlbSBhcyBEZWNpbWFsQW5zd2VySXRlbSB8IFdob2xlTnVtYmVyQW5zd2VySXRlbTtcbiAgICAgIHZhbGlkYXRvcnMucHVzaChudW1lcmljYWxWYWx1ZUNoZWNrKCkpO1xuICAgICAgaWYgKGlzV2hvbGVOdW1iZXJJdGVtKGl0ZW0pKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaCh3aG9sZU51bWJlclBhdHRlcm4oKSk7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbS5wb3NpdGl2ZU9ubHkpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHBvc2l0aXZlTnVtYmVyUGF0dGVybigpKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlbS5taW5WYWx1ZSkpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKG51bVZhbHVlTGltaXQoJ21pbicsIGl0ZW0ubWluVmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlbS5tYXhWYWx1ZSkpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKG51bVZhbHVlTGltaXQoJ21heCcsIGl0ZW0ubWF4VmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFBBUkFHUkFQSF9BTlNXRVJfSVRFTV9JRDpcbiAgICBjYXNlIFNIT1JUX0FOU1dFUl9JVEVNX0lEOiB7XG4gICAgICBjb25zdCBzaG9ydEFuc3dlckl0ZW0gPSBmb3JtSXRlbSBhcyBTaG9ydEFuc3dlckl0ZW0gfCBQYXJhZ3JhcGhBbnN3ZXJJdGVtO1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKC4uLmdldE51bWVyaWNWYWxpZGF0b3IoJ21pbkxlbmd0aCcsIHNob3J0QW5zd2VySXRlbS5taW5DaGFyQ291bnQpKTtcbiAgICAgIHZhbGlkYXRvcnMucHVzaCguLi5nZXROdW1lcmljVmFsaWRhdG9yKCdtYXhMZW5ndGgnLCBzaG9ydEFuc3dlckl0ZW0ubWF4Q2hhckNvdW50KSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBJMThOX1BBUkFHUkFQSF9BTlNXRVJfSVRFTV9JRDpcbiAgICBjYXNlIEkxOE5fU0hPUlRfQU5TV0VSX0lURU1fSUQ6IHtcbiAgICAgIGNvbnN0IGkxOG5JdGVtID0gZm9ybUl0ZW0gYXMgSW50ZXJuYXRpb25hbGl6ZWRQYXJhZ3JhcGhBbnN3ZXJJdGVtIHwgSW50ZXJuYXRpb25hbGl6ZWRTaG9ydEFuc3dlckl0ZW07XG4gICAgICBjb25zdCBncm91cCA9IG5ldyBGb3JtR3JvdXAoe30sIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKSk7XG4gICAgICBmb3IgKGNvbnN0IGxhbmd1YWdlIG9mIGkxOG5JdGVtLmxhbmd1YWdlVGFncykge1xuICAgICAgICAvLyBGSVhNRSBpZiB0aGVyZSBpcyBub3RoaWduIHRoZXJlIGluIHRoZSB2YWx1ZSBzaG91bGQgSSBzZXQgYSBuZXcgaW50ZXJuYXRpb25hbGl6ZWQgc3RyaW5nP1xuICAgICAgICBncm91cC5jb250cm9sc1tsYW5ndWFnZV0gPSBuZXcgRm9ybUNvbnRyb2woZm9ybUl0ZW0udmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGkxOG5JdGVtLmRpc2FibGVkKSB7XG4gICAgICAgIGdyb3VwLmRpc2FibGUoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBncm91cDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogZm9ybUl0ZW0udmFsdWUsIGRpc2FibGVkOiAhIWZvcm1JdGVtLmRpc2FibGVkIH0sIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKSk7XG59XG5cbi8qKlxuICogQnVpbGRzIGNvbnRyb2xzIGZvciBhbnkgZm9ybSBpdGVtcyBuZXN0ZWQgaW5zaWRlIGEgcGFyZW50IGl0ZW1zIG9wdGlvbnNcbiAqIEBwYXJhbSBmb3JtSXRlbSBUaGUgRm9ybUl0ZW0gd2l0aCBhbiAnb3B0aW9ucycgcHJvcGVydHlcbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIGNvbmRpdGlvbmFsIGZ1bmN0aW9uIGZyb20gcGFyZW50ICdzZXJpYWxpemVGb3JtSXRlbXMnIGZ1bmN0aW9uXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBGb3JtQ29udHJvbCBnZW5lcmF0b3IgZnJvbSBwYXJlbnQgJ3NlcmlhbGl6ZUZvcm1JdGVtcycgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZU5lc3RlZE9wdGlvbkZvcm1JdGVtcyhcbiAgZm9ybUl0ZW06IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgbWFuYWdlclNlcnZpY2U6IE10bmFXZk1hbmFnZXJTZXJ2aWNlLFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tQ29udHJvbEdlbmVyYXRvcj86IChpdGVtOiBGb3JtSXRlbSkgPT4gQWJzdHJhY3RDb250cm9sIHwgbnVsbFxuKTogRm9ybUdyb3VwIHtcbiAgY29uc3QgY29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH0gPSB7fTtcbiAgZm9yIChjb25zdCBpZCBpbiBmb3JtSXRlbS5vcHRpb25JdGVtTWFwKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmb3JtSXRlbS5vcHRpb25JdGVtTWFwLCBpZCkpIHtcbiAgICAgIGNvbnN0IHN1Ykl0ZW0gPSBmb3JtSXRlbS5vcHRpb25JdGVtTWFwW2lkXSBhcyBGb3JtSXRlbUltcGw8dW5rbm93bj47XG4gICAgICBjb25zdCBjb250cm9sID0gZGV0ZXJtaW5lU2VyaWFsaXplRnVuY3Rpb25Ub1VzZShzdWJJdGVtLCBtYW5hZ2VyU2VydmljZSwgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCwgY3VzdG9tQ29udHJvbEdlbmVyYXRvcik7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICBjb250cm9sc1tzdWJJdGVtLmluc3RhbmNlSWRdID0gY29udHJvbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb250cm9sc1tmb3JtSXRlbS5pbnN0YW5jZUlkXSA9IHNlcmlhbGl6ZUZvcm1JdGVtKGZvcm1JdGVtLCBtYW5hZ2VyU2VydmljZSk7XG4gIGNvbnN0IGdyb3VwID0gZm9ybUl0ZW0ucmVxdWlyZWQgPyBuZXcgRm9ybUdyb3VwKGNvbnRyb2xzLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSA6IG5ldyBGb3JtR3JvdXAoY29udHJvbHMpO1xuICBpZiAoZm9ybUl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIEJ1aWxkIEZvcm1Db250cm9scyBmb3IgYSBUYWJsZUl0ZW1cbiAqIEBwYXJhbSBpdGVtIFRhYmxlSXRlbSByZXF1aXJpbmcgRm9ybUNvbnRyb2xzXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBDb25kaXRpb25hbCBmdW5jdGlvbiBmb3IgY3VzdG9tIGFueSBGb3JtSXRlbXNcbiAqIEBwYXJhbSBjdXN0b21Db250cm9sR2VuZXJhdG9yIEZvcm1Db250cm9sIGdlbmVyYXRvciBmb3IgY3VzdG9tIGFueSBGb3JtSXRlbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVRhYmxlSXRlbShcbiAgaXRlbTogVGFibGVJdGVtLFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBGb3JtR3JvdXAge1xuICBjb25zdCB0YWJsZUNvbnRyb2w6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH0gPSB7fTtcbiAgZm9yIChjb25zdCByb3cgb2YgaXRlbS50YWJsZVJvd3MpIHtcbiAgICBmb3IgKGNvbnN0IHJvd0l0ZW0gb2Ygcm93Lml0ZW1zLmZpbHRlcigoaSkgPT4gISFpKSkge1xuICAgICAgY29uc3QgY29udHJvbCA9IGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2UoXG4gICAgICAgIHJvd0l0ZW0gYXMgRm9ybUl0ZW1JbXBsPHVua25vd24+LFxuICAgICAgICBtYW5hZ2VyU2VydmljZSxcbiAgICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgICAgY3VzdG9tQ29udHJvbEdlbmVyYXRvclxuICAgICAgKTtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIHRhYmxlQ29udHJvbFtyb3dJdGVtLmluc3RhbmNlSWRdID0gY29udHJvbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgZ3JvdXAgPSBpdGVtLnJlcXVpcmVkID8gbmV3IEZvcm1Hcm91cCh0YWJsZUNvbnRyb2wsIFZhbGlkYXRvcnMucmVxdWlyZWQpIDogbmV3IEZvcm1Hcm91cCh0YWJsZUNvbnRyb2wpO1xuICBpZiAoaXRlbS5kaXNhYmxlZCkge1xuICAgIGdyb3VwLmRpc2FibGUoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24gZm9yIHRoZSBjYWxsZXIgdG8gdXNlLlxuICpcbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSByZXF1aXJpbmcgc2VyaWFsaXphdGlvblxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwgZm9yIGEgY3VzdG9tIEZvcm1JdGVtXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBTZXJpYWxpemVyIGZvciBhIGN1c3RvbSBGb3JtSXRlbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5lU2VyaWFsaXplRnVuY3Rpb25Ub1VzZShcbiAgZm9ybUl0ZW06IEZvcm1JdGVtSW1wbDx1bmtub3duPiB8IFdlYkZvcm0sXG4gIG1hbmFnZXJTZXJ2aWNlOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSxcbiAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbDogKGl0ZW06IEZvcm1JdGVtKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2UsXG4gIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3I/OiAoaXRlbTogRm9ybUl0ZW0pID0+IEFic3RyYWN0Q29udHJvbCB8IG51bGxcbik6IEFic3RyYWN0Q29udHJvbCB8IG51bGwge1xuICBpZiAoXG4gICAgaXNGb3JtKGZvcm1JdGVtKSB8fFxuICAgIGlzUHJvZ3Jlc3NpdmVGb3JtKGZvcm1JdGVtKSB8fFxuICAgIGlzUmVwZWF0YWJsZUl0ZW0oZm9ybUl0ZW0pIHx8XG4gICAgaXNTZWN0aW9uKGZvcm1JdGVtKSB8fFxuICAgIGlzRm9ybUl0ZW1Hcm91cEltcGwoZm9ybUl0ZW0pXG4gICkge1xuICAgIHJldHVybiBzZXJpYWxpemVGb3JtSXRlbXMoZm9ybUl0ZW0sIG1hbmFnZXJTZXJ2aWNlLCBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLCBjdXN0b21Db250cm9sR2VuZXJhdG9yKTtcbiAgfSBlbHNlIGlmIChpc1RhYmxlSXRlbShmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplVGFibGVJdGVtKGZvcm1JdGVtLCBtYW5hZ2VyU2VydmljZSwgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCwgY3VzdG9tQ29udHJvbEdlbmVyYXRvcik7XG4gIH0gZWxzZSBpZiAoY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbChmb3JtSXRlbSkgJiYgISFjdXN0b21Db250cm9sR2VuZXJhdG9yKSB7XG4gICAgcmV0dXJuIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IoZm9ybUl0ZW0pO1xuICB9IGVsc2UgaWYgKGhhc05lc3RlZEZvcm1JdGVtcyhmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplTmVzdGVkT3B0aW9uRm9ybUl0ZW1zKGZvcm1JdGVtIGFzIE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PiwgbWFuYWdlclNlcnZpY2UpO1xuICB9IGVsc2UgaWYgKGlzT2Zmc2V0RGF0ZVJhbmdlSXRlbShmb3JtSXRlbSkgfHwgaXNZZWFyUXVhcnRlclJhbmdlSXRlbShmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplUmFuZ2VJdGVtKGZvcm1JdGVtKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc2VyaWFsaXplRm9ybUl0ZW0oZm9ybUl0ZW0sIG1hbmFnZXJTZXJ2aWNlKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIEZvcm1Hcm91cCBmb3IgYSByYW5nZSBpdGVtXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gZm9yIGEgRGF0ZVJhbmdlIG9mIERhdGUgfCBZZWFyUXVhcnRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplUmFuZ2VJdGVtKGZvcm1JdGVtOiBGb3JtSXRlbUltcGw8RGF0ZVJhbmdlPERhdGUgfCBZZWFyUXVhcnRlcj4+KTogRm9ybUdyb3VwIHtcbiAgY29uc3QgdmFsaWRhdG9ycyA9IG5ldyBBcnJheTxWYWxpZGF0b3JGbj4oKTtcbiAgaWYgKGZvcm1JdGVtLnJlcXVpcmVkKSB7XG4gICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICB9XG4gIGNvbnN0IGdyb3VwID0gbmV3IEZvcm1Hcm91cChcbiAgICB7XG4gICAgICBzdGFydDogbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlID8gZm9ybUl0ZW0udmFsdWUuc3RhcnQgOiBudWxsKSxcbiAgICAgIGVuZDogbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlID8gZm9ybUl0ZW0udmFsdWUuZW5kIDogbnVsbCksXG4gICAgfSxcbiAgICBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycylcbiAgKTtcbiAgaWYgKGZvcm1JdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgVmFsaWRhdG9yIHdpdGggYSBudW1lcmljIHZhbHVlIGZvciBhIEZvcm1JdGVtO1xuICogUmV0dXJucyBhcyBhbiBhcnJheSBvZiBsZW5ndGggMSBvciAwXG4gKiBAcGFyYW0gcGFyYW0wIGB0eXBlYCAtIHR5cGUgb2YgdmFsaWRhdG9yLCBlLmcuICdtaW5MZW5ndGgnO1xuICogYHZhbHVlYCAtIHBhcmFtZXRlciBmb3IgdGhlIHZhbGlkYXRvciwgZS5nLiAnbWluTGVuZ3RoKHZhbHVlKSdcbiAqL1xuZnVuY3Rpb24gZ2V0TnVtZXJpY1ZhbGlkYXRvcih0eXBlOiBWYWxpZGF0b3JXaXRoTnVtYmVyVHlwZSwgdmFsdWU6IG51bWJlcik6IFZhbGlkYXRvckZuW10ge1xuICByZXR1cm4gIWlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IFtWYWxpZGF0b3JzW3R5cGVdKHZhbHVlKV0gOiBbXTtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiBNdG5hRm9ybSB2YWx1ZSBpbnNlcnRpb25cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIEZvcm1pdGVtcyB3aXRoIG5ldyB2YWx1ZXMgaW5zZXJ0ZWQuXG4gKlxuICogQHBhcmFtIHNlY3Rpb24gVGhlIG9sZCBGb3JtIG9yIEZvcm0gU2VjdGlvblxuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSBKU09OIHZhbHVlc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgYm9vbGVhbiBmdW5jdGlvbiBmb3IgYW55IGN1c3RvbSBGb3JtSXRlbXNcbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIgZnVuY3Rpb24gdG8gaGFuZGxlIGN1c3RvbSBGb3JtSXRlbXNcbiAqIEByZXR1cm5zIG5ldyBGb3JtSXRlbSBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0Rm9ybUl0ZW1WYWx1ZXMoXG4gIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0sXG4gIG5nRm9ybVZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsXG4pOiBBcnJheTxGb3JtSXRlbT4ge1xuICByZXR1cm4gc2VjdGlvbi5pdGVtc1xuICAgIC5tYXAoKGl0ZW0pID0+XG4gICAgICBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICAgICAgICBpdGVtLFxuICAgICAgICBuZ0Zvcm1WYWx1ZVtpdGVtLmluc3RhbmNlSWRdLFxuICAgICAgICBkaXNhYmxlZFN0YXRlLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIsXG4gICAgICAgIHNlY3Rpb25cbiAgICAgIClcbiAgICApXG4gICAgLmZpbHRlcihpc1ByZXNlbnQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjb3BpZWQgVGFibGVJdGVtLCB3aXRoIGVhY2ggcm93IEZvcm1JdGVtIGhhdmluZyBuZXcgaW5zZXJ0ZWQgdmFsdWVzLlxuICogQHBhcmFtIGl0ZW0gVGFibGVJdGVtIHRvIGluc2VydCB2YWx1ZXNcbiAqIEBwYXJhbSBuZ0Zvcm1WYWx1ZSBuZ0Zvcm0gdmFsdWUgb2YgdGhlIFRhYmxlSXRlbVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgYm9vbGVhbiBmdW5jdGlvbiBmb3IgYW55IGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQnVpbGRlciBmdW5jdGlvbiB0byBoYW5kbGUgY3VzdG9tIEZvcm1JdGVtIHZhbHVlIGluc2VydGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0VGFibGVJdGVtVmFsdWVzKFxuICBpdGVtOiBUYWJsZUl0ZW0sXG4gIG5nRm9ybVZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsXG4pOiBUYWJsZUl0ZW0ge1xuICBjb25zdCB0YWJsZVJvd3MgPSBpdGVtLnRhYmxlUm93cy5tYXAoKHJvdzogVGFibGVSb3dJdGVtKSA9PiAoe1xuICAgIC4uLnJvdyxcbiAgICBpdGVtczogcm93Lml0ZW1zXG4gICAgICAuZmlsdGVyKGlzUHJlc2VudClcbiAgICAgIC5tYXAoKGZvcm1JdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICAgICAgICAgIGZvcm1JdGVtLFxuICAgICAgICAgIG5nRm9ybVZhbHVlW2Zvcm1JdGVtLmluc3RhbmNlSWRdLFxuICAgICAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGlzUHJlc2VudCksXG4gIH0pKTtcbiAgcmV0dXJuIHsgLi4uaXRlbSwgdGFibGVSb3dzLCBkaXNhYmxlZDogX2lzRGlzYWJsZWQoaXRlbSwgZGlzYWJsZWRTdGF0ZSkgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbmV3IEZvcm1JdGVtIGFmdGVyIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiB0byB1c2UuXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gcmVxdWlyaW5nIHZhbHVlIGluc2VydGlvblxuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSB2YWx1ZVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwgZm9yIGEgY3VzdG9tIEZvcm1JdGVtXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1CdWlsZGVyIFZhbHVlIGluc2VydGlvbiBmdW5jdGlvbiBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqIEBwYXJhbSBkaXNhYmxlZFN0YXRlIE1hcCBvZiBpdGVtcycgZGlzYWJsZWQgc3RhdGVcbiAqIEBwYXJhbSBwYXJlbnQgUGFyZW50IG9mIHRoZSBGb3JtSXRlbSwgdXNlZCB0byBwYXNzIHRvIHRoZSBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5lSW5zZXJ0RnVuY3Rpb25Ub1VzZShcbiAgZm9ybUl0ZW06IEZvcm1JdGVtLFxuICBuZ0Zvcm1WYWx1ZTogdW5rbm93bixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsLFxuICBwYXJlbnQ/OiBXZWJGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtXG4pOiBGb3JtSXRlbSB8IG51bGwge1xuICBpZiAoaXNTZWN0aW9uKGZvcm1JdGVtKSB8fCBpc0Zvcm1JdGVtR3JvdXBJbXBsKGZvcm1JdGVtKSB8fCBpc1JlcGVhdGFibGVJdGVtKGZvcm1JdGVtKSkge1xuICAgIGNvbnN0IGl0ZW1zID0gaW5zZXJ0Rm9ybUl0ZW1WYWx1ZXMoXG4gICAgICBmb3JtSXRlbSxcbiAgICAgIG5nRm9ybVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICApO1xuICAgIHJldHVybiB7IC4uLmZvcm1JdGVtLCBpdGVtcywgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtLCBkaXNhYmxlZFN0YXRlKSB9IGFzIEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbTtcbiAgfSBlbHNlIGlmIChpc1RhYmxlSXRlbShmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gaW5zZXJ0VGFibGVJdGVtVmFsdWVzKFxuICAgICAgZm9ybUl0ZW0sXG4gICAgICBuZ0Zvcm1WYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgKTtcbiAgfSBlbHNlIGlmIChjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsKGZvcm1JdGVtKSAmJiAhIWN1c3RvbUZvcm1JdGVtQnVpbGRlcikge1xuICAgIHJldHVybiBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIocGFyZW50LCBmb3JtSXRlbSwgbmdGb3JtVmFsdWUsIGRpc2FibGVkU3RhdGUpO1xuICB9IGVsc2UgaWYgKGhhc05lc3RlZEZvcm1JdGVtcyhmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gaW5zZXJ0TmVzdGVkRm9ybUl0ZW1WYWx1ZXMoXG4gICAgICBmb3JtSXRlbSBhcyBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gICAgICBuZ0Zvcm1WYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc09mZnNldERhdGVSYW5nZUl0ZW0oZm9ybUl0ZW0pIHx8IGlzWWVhclF1YXJ0ZXJSYW5nZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpc1R5cGU8eyBzdGFydDogWWVhclF1YXJ0ZXIgfCBEYXRlIH0+KG5nRm9ybVZhbHVlLCAnc3RhcnQnKSA/IG5nRm9ybVZhbHVlLnN0YXJ0IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVuZCA9IGlzVHlwZTx7IGVuZDogWWVhclF1YXJ0ZXIgfCBEYXRlIH0+KG5nRm9ybVZhbHVlLCAnZW5kJykgPyBuZ0Zvcm1WYWx1ZS5lbmQgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgLi4uZm9ybUl0ZW0sIHZhbHVlOiB7IHN0YXJ0LCBlbmQgfSwgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtLCBkaXNhYmxlZFN0YXRlKSB9IGFzIEZvcm1JdGVtSW1wbDxcbiAgICAgIERhdGVSYW5nZTxEYXRlIHwgWWVhclF1YXJ0ZXI+XG4gICAgPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZm9ybUl0ZW0sXG4gICAgICB2YWx1ZTogZmluZEl0ZW1WYWx1ZShmb3JtSXRlbSwgbmdGb3JtVmFsdWUpLFxuICAgICAgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPiwgZGlzYWJsZWRTdGF0ZSksXG4gICAgfSBhcyBGb3JtSXRlbTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgbmdGb3JtIHZhbHVlIGZvciBhIEZvcm1JdGVtLlxuICpcbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSByZXF1aXJpbmcgYSB2YWx1ZVxuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSB2YWx1ZVxuICovXG5mdW5jdGlvbiBmaW5kSXRlbVZhbHVlKGZvcm1JdGVtOiBGb3JtSXRlbSwgbmdGb3JtVmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgY29uc3QgaXRlbUlkID0gZm9ybUl0ZW0uaXRlbUlkLnNwbGl0KCcuJykucG9wKCk7XG4gIHN3aXRjaCAoaXRlbUlkPy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgLy8gRklYTUU6IGNhbiB3ZSBwdXQgdGhlc2UgSURzIGluIGNvbnN0YW50cyBhbmQgcmVmZXIgdG8gdGhlbSBpbnN0ZWFkP1xuICAgIGNhc2UgJ0RBVEVJVEVNJzpcbiAgICAgIHJldHVybiAhIW5nRm9ybVZhbHVlICYmIHR5cGVvZiBuZ0Zvcm1WYWx1ZSAhPT0gJ3N0cmluZycgPyAobmdGb3JtVmFsdWUgYXMgTW9tZW50KS50b0lTT1N0cmluZygpIDogKG5nRm9ybVZhbHVlIGFzIHN0cmluZyk7XG4gICAgY2FzZSAnQ0hFQ0tCT1hJVEVNJzpcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQobmdGb3JtVmFsdWUpICYmIEFycmF5LmlzQXJyYXkobmdGb3JtVmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IG5nRm9ybVZhbHVlIGFzIEFycmF5PGJvb2xlYW4+O1xuICAgICAgICByZXR1cm4gKGZvcm1JdGVtIGFzIENoZWNrYm94SXRlbSkub3B0aW9ucy5maWx0ZXIoKG8sIGluZGV4KSA9PiAhIWFycltpbmRleF0pLm1hcCgobykgPT4gby5vcHRpb24uaWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIGNhc2UgJ0lOVEVSTkFUSU9OQUxJWkVEUEFSQUdSQVBIQU5TV0VSSVRFTSc6XG4gICAgY2FzZSAnSU5URVJOQVRJT05BTElaRURTSE9SVEFOU1dFUklURU0nOiB7XG4gICAgICBjb25zdCBsYW5ndWFnZXMgPVxuICAgICAgICBpdGVtSWQ/LnRvVXBwZXJDYXNlKCkgPT09ICdJTlRFUk5BVElPTkFMSVpFRFBBUkFHUkFQSEFOU1dFUklURU0nXG4gICAgICAgICAgPyAoZm9ybUl0ZW0gYXMgSW50ZXJuYXRpb25hbGl6ZWRQYXJhZ3JhcGhBbnN3ZXJJdGVtKS5sYW5ndWFnZVRhZ3NcbiAgICAgICAgICA6IChmb3JtSXRlbSBhcyBJbnRlcm5hdGlvbmFsaXplZFNob3J0QW5zd2VySXRlbSkubGFuZ3VhZ2VUYWdzO1xuXG4gICAgICBjb25zdCB2YWx1ZSA9IGxhbmd1YWdlcy5yZWR1Y2UoKHZhbHVlOiBJbnRlcm5hdGlvbmFsaXplZFN0cmluZ1tdLCBsYW5ndWFnZSkgPT4ge1xuICAgICAgICBpZiAobmdGb3JtVmFsdWUgJiYgdHlwZW9mIG5nRm9ybVZhbHVlID09PSAnb2JqZWN0JyAmJiBsYW5ndWFnZSBpbiBuZ0Zvcm1WYWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gKG5nRm9ybVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtsYW5ndWFnZV07XG4gICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICB2YWx1ZS5wdXNoKHsgdmFsdWU6IGlucHV0IGFzIHN0cmluZywgZmFjZXRJZDogbGFuZ3VhZ2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0sIFtdKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBuZ0Zvcm1WYWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnROZXN0ZWRGb3JtSXRlbVZhbHVlcyhcbiAgZm9ybUl0ZW06IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IEZvcm1JdGVtIHtcbiAgY29uc3Qgb3B0aW9uSXRlbU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBpZCBpbiBmb3JtSXRlbS5vcHRpb25JdGVtTWFwKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmb3JtSXRlbS5vcHRpb25JdGVtTWFwLCBpZCkpIHtcbiAgICAgIGNvbnN0IHN1Ykl0ZW0gPSBmb3JtSXRlbS5vcHRpb25JdGVtTWFwW2lkXTtcbiAgICAgIG9wdGlvbkl0ZW1NYXBbaWRdID0gZGV0ZXJtaW5lSW5zZXJ0RnVuY3Rpb25Ub1VzZShcbiAgICAgICAgc3ViSXRlbSxcbiAgICAgICAgbmdGb3JtVmFsdWVbc3ViSXRlbS5pbnN0YW5jZUlkXSxcbiAgICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmZvcm1JdGVtLFxuICAgIG9wdGlvbkl0ZW1NYXAsXG4gICAgdmFsdWU6IGZpbmRJdGVtVmFsdWUoZm9ybUl0ZW0sIG5nRm9ybVZhbHVlW2Zvcm1JdGVtLmluc3RhbmNlSWRdKSxcbiAgICBkaXNhYmxlZDogX2lzRGlzYWJsZWQoZm9ybUl0ZW0sIGRpc2FibGVkU3RhdGUpLFxuICB9IGFzIE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+Pjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIEZvcm1JdGVtIGhhcyBhbiBPcHRpb25JdGVtTWFwIHdpdGggYXQgbGVhc3QgMSBpdGVtLCB3aGljaCByZXF1aXJlIHRoZWlyIG93biBGb3JtQ29udHJvbChzKVxuICogQHBhcmFtIGZvcm1JdGVtIEZvcm1JdGVtIHRvIGNoZWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXN0ZWRGb3JtSXRlbXMoZm9ybUl0ZW06IHVua25vd24pOiBmb3JtSXRlbSBpcyB7IG9wdGlvbkl0ZW1NYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0ge1xuICByZXR1cm4gKFxuICAgIGlzVHlwZTx7XG4gICAgICBvcHRpb25JdGVtTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICB9Pihmb3JtSXRlbSwgJ29wdGlvbkl0ZW1NYXAnKSAmJiBPYmplY3Qua2V5cyhmb3JtSXRlbS5vcHRpb25JdGVtTWFwKS5sZW5ndGggPiAwXG4gICk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gZm9yIHZhbGlkYXRpbmcgbWluL21heCBzZWxlY3Rpb25zIGxpbWl0c1xuICogQHBhcmFtIHR5cGVDaGVjayBXaGljaCBsaW1pdCB0byB2YWxpZGF0ZS4gJ01JTicgfCAnTUFYJ1xuICogQHBhcmFtIGxpbWl0IHVwcGVyIG9yIGxvd2VyIGxpbWl0IHRvIGNoZWNrIGFnYWluc3RcbiAqL1xuZnVuY3Rpb24gbnVtQ2hlY2tib3hlc1ZhbGlkYXRvcih0eXBlQ2hlY2s6ICdNSU4nIHwgJ01BWCcsIGxpbWl0ID0gMSk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICBsZXQgdG90YWxTZWxlY3RlZCA9IDA7XG4gICAgaWYgKGlzRm9ybUFycmF5KGNvbnRyb2wpKSB7XG4gICAgICB0b3RhbFNlbGVjdGVkID0gY29udHJvbC5jb250cm9scy5tYXAoKGMpID0+IGMudmFsdWUpLnJlZHVjZSgodG90YWwsIG5leHQpID0+IChuZXh0ID8gdG90YWwgKyBuZXh0IDogdG90YWwpLCAwKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGVDaGVjaykge1xuICAgICAgY2FzZSAnTUlOJzpcbiAgICAgICAgcmV0dXJuIHRvdGFsU2VsZWN0ZWQgPj0gbGltaXQgPyBudWxsIDogeyBtaW5TZWxlY3RlZDogJGxvY2FsaXplYFNlbGVjdCBhdCBsZWFzdCAke2xpbWl0fWAgfTtcbiAgICAgIGNhc2UgJ01BWCc6XG4gICAgICAgIHJldHVybiB0b3RhbFNlbGVjdGVkIDw9IGxpbWl0ID8gbnVsbCA6IHsgbWF4U2VsZWN0ZWQ6ICRsb2NhbGl6ZWBTZWxlY3Qgbm8gbW9yZSB0aGFuICR7bGltaXR9YCB9O1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNGb3JtQXJyYXkoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogY29udHJvbCBpcyBGb3JtQXJyYXkge1xuICByZXR1cm4gaXNUeXBlPEZvcm1BcnJheT4oY29udHJvbCwgJ2NvbnRyb2xzJyk7XG59XG5cbmZ1bmN0aW9uIF9pc0Rpc2FibGVkKGl0ZW06IENvbmRpdGlvbmFsSXRlbSwgZGlzYWJsZWRTdGF0ZTogeyBbaWQ6IHN0cmluZ106IGJvb2xlYW4gfSk6IGJvb2xlYW4ge1xuICBjb25zdCBkaXNhYmxlZCA9IGRpc2FibGVkU3RhdGVbaXRlbS5pbnN0YW5jZUlkXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGRpc2FibGVkKSA/IGl0ZW0uZGlzYWJsZWQgOiBkaXNhYmxlZDtcbn1cblxuZnVuY3Rpb24gd2hvbGVOdW1iZXJQYXR0ZXJuKCk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGNvbnRyb2wudmFsdWUpIHx8IGlzRW1wdHlTdHJpbmcoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB3aG9sZU51bWJlci50ZXN0KGNvbnRyb2wudmFsdWUpID8gbnVsbCA6IHsgd2hvbGVOdW1iZXI6IHRydWUgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbnVtZXJpY2FsVmFsdWVDaGVjaygpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChjb250cm9sLnZhbHVlKSB8fCBpc0VtcHR5U3RyaW5nKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bU9ubHlXaXRob3V0Q29tbWEudGVzdChjb250cm9sLnZhbHVlKSB8fCBudW1Pbmx5V2l0aENvbW1hLnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyBub25EaWdpdDogdHJ1ZSB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBwb3NpdGl2ZU51bWJlclBhdHRlcm4oKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgfHwgaXNFbXB0eVN0cmluZyhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwb3NPbmx5LnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyBwb3NpdGl2ZTogdHJ1ZSB9O1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgd29ya3MgYXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgYW5ndWxhciAnbWluJy8nbWF4JyBWYWxpZGF0b3JzLiBVc2luZyB0aGUgYnVpbHQtaW4gdmFsaWRhdG9yc1xuICogYXBwZWFycyB0byB0YWtlIHByZWNlZGVuY2Ugb3ZlciBjdXN0b20gdmFsaWRhdG9ycywgcmVnYXJkbGVzcyBvZiBvcmRlciBpbiB0aGUgYXJyYXkuIFVzaW5nIHRoaXMgZnVuY3Rpb25cbiAqIGVuc3VyZXMgdmFsaWRhdG9ycyBzZXQgYmVmb3JlIHRoaXMgb25lIG1haW50YWluIHByaW9yaXR5LiBGb3IgaW5zdGFuY2UsIHRoZSBpbnB1dCB2YWx1ZSBmYWlsaW5nIG51bWVyaWNhbCB2YWxpZGF0aW9uXG4gKiBpcyBtb3JlIGltcG9ydGFudCB0aGFuIHRoZSB2YWx1ZSBiZWluZyB3aXRoaW4gbWluLW1heCByYW5nZS5cbiAqL1xuZnVuY3Rpb24gbnVtVmFsdWVMaW1pdCh0eXBlOiAnbWluJyB8ICdtYXgnLCBsaW1pdDogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgfHwgaXNFbXB0eVN0cmluZyhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChjb250cm9sLnZhbHVlKTtcbiAgICByZXR1cm4gIWlzTmFOKHZhbHVlKSAmJiAodHlwZSA9PT0gJ21pbicgPyB2YWx1ZSA8IGxpbWl0IDogdmFsdWUgPiBsaW1pdClcbiAgICAgID8ge1xuICAgICAgICAgIFt0eXBlXToge1xuICAgICAgICAgICAgW3R5cGVdOiBsaW1pdCxcbiAgICAgICAgICAgIGFjdHVhbDogY29udHJvbC52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHlTdHJpbmcodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXZhbHVlLmxlbmd0aDtcbn1cbiJdfQ==
@@ -35,4 +35,4 @@ export function updateStepStatus(instanceId, step, status, form) {
35
35
  // There were no server side validation errors, just update the status
36
36
  return Object.assign(Object.assign({}, step), { status });
37
37
  }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXN0ZXAtc3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy91cGRhdGUtc3RlcC1zdGF0dXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUl2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixVQUFrQixFQUNsQixJQUFjLEVBQ2QsTUFBb0IsRUFDcEIsSUFBK0M7O0lBRS9DLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDbEMsOENBQThDO1FBQzlDLDBCQUEwQjtRQUMxQixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsMkRBQTJEO0lBQzNELElBQUksTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsZ0JBQWdCLDBDQUFFLHlCQUF5QixDQUFDLE1BQU0sRUFBRTtRQUM1RCw2Q0FBNkM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxNQUFNLENBQWdCLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRTtZQUN6QyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsRUFBRTtnQkFDbkUsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3BELGdEQUFnRDtnQkFDaEQsc0JBQXNCO2dCQUN0QixJQUFJLGFBQWEsRUFBRTtvQkFDakIsdUNBQVksSUFBSSxLQUFFLE1BQU0sRUFBRSxPQUFPLElBQUc7aUJBQ3JDO2FBQ0Y7U0FDRjtLQUNGO0lBRUQsc0VBQXNFO0lBQ3RFLHVDQUFZLElBQUksS0FBRSxNQUFNLElBQUc7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENpcmNsZVN0YXR1cyB9IGZyb20gJ0BtdG5hL2NvcmUtYW5ndWxhcic7XG5pbXBvcnQgeyBpc1R5cGUgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcbmltcG9ydCB7IEZvcm0sIEZvcm1JdGVtR3JvdXAgfSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5cbmltcG9ydCB7IEZvcm1TdGVwLCBQcm9ncmVzc2l2ZUZvcm0gfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgZmluZEZvcm1JdGVtIH0gZnJvbSAnLi9maW5kLWZvcm0taXRlbSc7XG5cbi8qKlxuICogVXBkYXRlIGEge0BsaW5rIEZvcm1TdGVwfSdzIGBzdGF0dXNgLlxuICogVGhlIHNlcnZlciBzaWRlIGZvcm0gdmFsaWRhdGlvbiBlcnJvcnMgd2lsbCB0cnVtcCB0aGUgcHJvdmlkZWQgYHN0YXR1c2AuXG4gKlxuICogQHBhcmFtIGluc3RhbmNlSWQgdGhlIGluc3RhbmNlSWQgb2YgdGhlIHN0ZXAgdG8gdXBkYXRlLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBvcmlnaW5hbCBzdGVwXG4gKiBAcGFyYW0gc3RlcCAgdGhlIHN0ZXAgdG8gY2hlY2tcbiAqIEBwYXJhbSBzdGF0dXMgdGhlIG5ldyBzdGF0dXMgdG8gYXBwbHkgdG8gdGhlIHN0ZXBcbiAqIEBwYXJhbSBmb3JtIHRoZSBjb250YWluaW5nIGZvcm1cbiAqIEByZXR1cm5zIGFuIHVwZGF0ZWQgc3RlcCB3aXRoIHRoZSBjb3JyZWN0IHN0YXR1c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RlcFN0YXR1cyhcbiAgaW5zdGFuY2VJZDogc3RyaW5nLFxuICBzdGVwOiBGb3JtU3RlcCxcbiAgc3RhdHVzOiBDaXJjbGVTdGF0dXMsXG4gIGZvcm06IEZvcm0gfCBQcm9ncmVzc2l2ZUZvcm0gfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBGb3JtU3RlcCB7XG4gIGlmIChpbnN0YW5jZUlkICE9PSBzdGVwLmluc3RhbmNlSWQpIHtcbiAgICAvLyBUaGVzZSBhcmVuJ3QgdGhlIGRyb2lkcyB5b3UncmUgbG9va2luZyBmb3IuXG4gICAgLy8gUmV0dXJuIHVubW9kaWZpZWQgc3RlcC5cbiAgICByZXR1cm4gc3RlcDtcbiAgfVxuXG4gIC8vIEEgc2VydmVyIHZhbGlkYXRpb24gZXJyb3Igd2lsbCB0cnVtcCB0aGUgcHJvdmlkZWQgc3RhdHVzXG4gIGlmIChmb3JtPy52YWxpZGF0aW9uUmVzdWx0Py5mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzLmxlbmd0aCkge1xuICAgIC8vIEdldCB0aGUgRm9ybUdyb3VwIHRoYXQgcmVwcmVzZW50cyB0aGUgc3RlcFxuICAgIGNvbnN0IGdyb3VwID0gZmluZEZvcm1JdGVtKHN0ZXAuaW5zdGFuY2VJZCwgZm9ybSk7XG4gICAgaWYgKGlzVHlwZTxGb3JtSXRlbUdyb3VwPihncm91cCwgJ2l0ZW1zJykpIHtcbiAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZm9ybS52YWxpZGF0aW9uUmVzdWx0LmZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgICAgY29uc3QgaXRlbVdpdGhFcnJvciA9IGZpbmRGb3JtSXRlbShlcnJvci5pZCwgZ3JvdXApO1xuICAgICAgICAvLyBJZiB0aGUgaW52YWxpZCBpdGVtIGlzIHdpdGhpbiB0aGUgc3RlcCBncm91cCxcbiAgICAgICAgLy8gc2hvdyBhbiBlcnJvciBzdGF0ZVxuICAgICAgICBpZiAoaXRlbVdpdGhFcnJvcikge1xuICAgICAgICAgIHJldHVybiB7IC4uLnN0ZXAsIHN0YXR1czogJ0VSUk9SJyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlcmUgd2VyZSBubyBzZXJ2ZXIgc2lkZSB2YWxpZGF0aW9uIGVycm9ycywganVzdCB1cGRhdGUgdGhlIHN0YXR1c1xuICByZXR1cm4geyAuLi5zdGVwLCBzdGF0dXMgfTtcbn1cbiJdfQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXN0ZXAtc3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy91cGRhdGUtc3RlcC1zdGF0dXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUl2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixVQUFrQixFQUNsQixJQUFjLEVBQ2QsTUFBb0IsRUFDcEIsSUFBK0M7O0lBRS9DLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDbEMsOENBQThDO1FBQzlDLDBCQUEwQjtRQUMxQixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsMkRBQTJEO0lBQzNELElBQUksTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsZ0JBQWdCLDBDQUFFLHlCQUF5QixDQUFDLE1BQU0sRUFBRTtRQUM1RCw2Q0FBNkM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxNQUFNLENBQWdCLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRTtZQUN6QyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsRUFBRTtnQkFDbkUsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3BELGdEQUFnRDtnQkFDaEQsc0JBQXNCO2dCQUN0QixJQUFJLGFBQWEsRUFBRTtvQkFDakIsdUNBQVksSUFBSSxLQUFFLE1BQU0sRUFBRSxPQUFPLElBQUc7aUJBQ3JDO2FBQ0Y7U0FDRjtLQUNGO0lBRUQsc0VBQXNFO0lBQ3RFLHVDQUFZLElBQUksS0FBRSxNQUFNLElBQUc7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENpcmNsZVN0YXR1cyB9IGZyb20gJ0BtdG5hL2NvcmUtYW5ndWxhcic7XG5pbXBvcnQgeyBpc1R5cGUgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcbmltcG9ydCB7IEZvcm0sIEZvcm1JdGVtR3JvdXAsIFByb2dyZXNzaXZlRm9ybSB9IGZyb20gJ0BtdG5hL3dlYi1mb3JtLXRzJztcblxuaW1wb3J0IHsgRm9ybVN0ZXAgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgZmluZEZvcm1JdGVtIH0gZnJvbSAnLi9maW5kLWZvcm0taXRlbSc7XG5cbi8qKlxuICogVXBkYXRlIGEge0BsaW5rIEZvcm1TdGVwfSdzIGBzdGF0dXNgLlxuICogVGhlIHNlcnZlciBzaWRlIGZvcm0gdmFsaWRhdGlvbiBlcnJvcnMgd2lsbCB0cnVtcCB0aGUgcHJvdmlkZWQgYHN0YXR1c2AuXG4gKlxuICogQHBhcmFtIGluc3RhbmNlSWQgdGhlIGluc3RhbmNlSWQgb2YgdGhlIHN0ZXAgdG8gdXBkYXRlLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBvcmlnaW5hbCBzdGVwXG4gKiBAcGFyYW0gc3RlcCAgdGhlIHN0ZXAgdG8gY2hlY2tcbiAqIEBwYXJhbSBzdGF0dXMgdGhlIG5ldyBzdGF0dXMgdG8gYXBwbHkgdG8gdGhlIHN0ZXBcbiAqIEBwYXJhbSBmb3JtIHRoZSBjb250YWluaW5nIGZvcm1cbiAqIEByZXR1cm5zIGFuIHVwZGF0ZWQgc3RlcCB3aXRoIHRoZSBjb3JyZWN0IHN0YXR1c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RlcFN0YXR1cyhcbiAgaW5zdGFuY2VJZDogc3RyaW5nLFxuICBzdGVwOiBGb3JtU3RlcCxcbiAgc3RhdHVzOiBDaXJjbGVTdGF0dXMsXG4gIGZvcm06IEZvcm0gfCBQcm9ncmVzc2l2ZUZvcm0gfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBGb3JtU3RlcCB7XG4gIGlmIChpbnN0YW5jZUlkICE9PSBzdGVwLmluc3RhbmNlSWQpIHtcbiAgICAvLyBUaGVzZSBhcmVuJ3QgdGhlIGRyb2lkcyB5b3UncmUgbG9va2luZyBmb3IuXG4gICAgLy8gUmV0dXJuIHVubW9kaWZpZWQgc3RlcC5cbiAgICByZXR1cm4gc3RlcDtcbiAgfVxuXG4gIC8vIEEgc2VydmVyIHZhbGlkYXRpb24gZXJyb3Igd2lsbCB0cnVtcCB0aGUgcHJvdmlkZWQgc3RhdHVzXG4gIGlmIChmb3JtPy52YWxpZGF0aW9uUmVzdWx0Py5mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzLmxlbmd0aCkge1xuICAgIC8vIEdldCB0aGUgRm9ybUdyb3VwIHRoYXQgcmVwcmVzZW50cyB0aGUgc3RlcFxuICAgIGNvbnN0IGdyb3VwID0gZmluZEZvcm1JdGVtKHN0ZXAuaW5zdGFuY2VJZCwgZm9ybSk7XG4gICAgaWYgKGlzVHlwZTxGb3JtSXRlbUdyb3VwPihncm91cCwgJ2l0ZW1zJykpIHtcbiAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZm9ybS52YWxpZGF0aW9uUmVzdWx0LmZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgICAgY29uc3QgaXRlbVdpdGhFcnJvciA9IGZpbmRGb3JtSXRlbShlcnJvci5pZCwgZ3JvdXApO1xuICAgICAgICAvLyBJZiB0aGUgaW52YWxpZCBpdGVtIGlzIHdpdGhpbiB0aGUgc3RlcCBncm91cCxcbiAgICAgICAgLy8gc2hvdyBhbiBlcnJvciBzdGF0ZVxuICAgICAgICBpZiAoaXRlbVdpdGhFcnJvcikge1xuICAgICAgICAgIHJldHVybiB7IC4uLnN0ZXAsIHN0YXR1czogJ0VSUk9SJyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlcmUgd2VyZSBubyBzZXJ2ZXIgc2lkZSB2YWxpZGF0aW9uIGVycm9ycywganVzdCB1cGRhdGUgdGhlIHN0YXR1c1xuICByZXR1cm4geyAuLi5zdGVwLCBzdGF0dXMgfTtcbn1cbiJdfQ==