qms-angular 1.1.56 → 1.1.58

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 (37) hide show
  1. package/bundles/qms-angular.umd.js +52 -22
  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/qms-icon.const.js +5 -1
  5. package/esm2015/lib/components/app-icon/icon-registry.service.js +5 -2
  6. package/esm2015/lib/components/qms-bpmn/models/flow-chart-shape/activity-related-items.js +1 -1
  7. package/esm2015/lib/components/qms-bpmn/qms-bpmn.component.js +3 -3
  8. package/esm2015/lib/components/qms-bpmn/qms-bpmn.module.js +4 -2
  9. package/esm2015/lib/components/related/list-other-related/list-related.component.js +5 -2
  10. package/esm2015/lib/components/related/model/related-data.model.js +1 -1
  11. package/esm2015/lib/components/related/popup/related-popup.component.js +17 -7
  12. package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +5 -2
  13. package/esm2015/lib/components/select-department-tree/select-department-tree.component.js +9 -4
  14. package/esm2015/lib/model/en.js +4 -3
  15. package/esm2015/lib/model/no.js +4 -3
  16. package/esm2015/lib/model/sv.js +2 -2
  17. package/esm2015/lib/qms-ckeditor-components/common/enums/related-to-item-type.js +2 -1
  18. package/esm2015/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.js +2 -1
  19. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +1 -4
  20. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +4 -1
  21. package/fesm2015/qms-angular.js +57 -24
  22. package/fesm2015/qms-angular.js.map +1 -1
  23. package/lib/common/enum/data-type.enum.d.ts +1 -0
  24. package/lib/common/qms-icon.const.d.ts +1 -0
  25. package/lib/components/app-icon/icon-registry.service.d.ts +1 -0
  26. package/lib/components/related/list-other-related/list-related.component.d.ts +1 -1
  27. package/lib/components/related/model/related-data.model.d.ts +1 -0
  28. package/lib/components/select-department-tree/select-department-tree.component.d.ts +1 -0
  29. package/lib/model/en.d.ts +1 -0
  30. package/lib/model/no.d.ts +1 -0
  31. package/lib/qms-ckeditor-components/common/enums/related-to-item-type.d.ts +2 -1
  32. package/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.d.ts +2 -1
  33. package/package.json +1 -1
  34. package/qms-angular.metadata.json +1 -1
  35. package/src/assets/svg-icons/compliance.svg +3 -0
  36. package/src/lib/components/qms-bpmn/qms-bpmn.component.scss +10 -0
  37. package/src/lib/components/select-department-tree/select-department-tree.component.scss +691 -682
@@ -948,6 +948,9 @@ export class BpmnService {
948
948
  else if (shapeDetail.connectionTypeId === ShapeFlowChartConnectionType.Checklist) {
949
949
  connectionName = LANG.BPMN.LINK_TO_CHECKLIST;
950
950
  }
951
+ else if (shapeDetail.connectionTypeId === ShapeFlowChartConnectionType.Compliance) {
952
+ connectionName = LANG.BPMN.LINK_TO_COMPLIANCE_REQUIREMENT;
953
+ }
951
954
  if (shapeDetail.connectionTypeId !== ShapeFlowChartConnectionType.Activity) {
952
955
  list[i][`style`].cursor = 'pointer';
953
956
  }
@@ -1656,4 +1659,4 @@ BpmnService.decorators = [
1656
1659
  BpmnService.ctorParameters = () => [
1657
1660
  { type: TranslateLibraryService }
1658
1661
  ];
1659
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFDekMsNERBQTREO0FBQzVELHNDQUFzQztBQUN0Qyx1REFBdUQ7QUFDdkQsaURBQWlEO0FBQ2pELHNEQUFzRDtBQUN0RCwyQkFBMkI7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNoRyxPQUFPLGlCQUFpQixNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sZUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLFVBQVUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUV0RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7QUFLdkUsSUFBSSxLQUFVLENBQUM7QUFDZixJQUFJLEtBQVUsQ0FBQztBQUNmLElBQUksYUFBa0IsQ0FBQztBQUN2QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNq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aEIsQ0FBQztvQkFDRixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO3dCQUNqRCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDbEUsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO3dCQUNkLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDdkM7b0JBQ0QsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDM0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM5QyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN6QyxDQUFDOzs7O1lBeHRERixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQWZRLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlIH0gZnJvbSAnLi4vY29tbW9uL2VudW1zL3NoYXBlLWZsb3ctY2hhcnQtY29ubmVjdGlvbi10eXBlJztcbmltcG9ydCBJbnNwZWN0b3JGdW5jdGlvbiBmcm9tICcuLi9jb21tb24vYnBtbi9pbnNwZWN0b3IuZnVuY3Rpb24nO1xuaW1wb3J0IFRvb2xiYXJGdW5jdGlvbiBmcm9tICcuLi9jb21tb24vYnBtbi90b29sYmFyLmZ1bmN0aW9uJztcbmltcG9ydCB7IEZsb3dDaGFydENvbnN0IH0gZnJvbSAnLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckZsb3djaGFydC5jb25zdCc7XG5pbXBvcnQgeyBGbG93Y2hhcnRWaWV3TW9kZSB9IGZyb20gJy4uL2NvbW1vbi9lbnVtcy9mbG93Y2hhcnQtdmlldy1tb2RlLmVudW0nO1xuaW1wb3J0IGd1aWRIZWxwZXIgZnJvbSAnLi4vY29tbW9uL2hlbHBlci9ndWlkSGVscGVyJztcbmltcG9ydCB7IERpYWdyYW1UZW1wbGF0ZXMgfSBmcm9tICcuLi9tb2RlbHMvZGlhZ3JhbS10ZW1wbGF0ZS5tb2RlbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMvaW50ZXJuYWwvU3ViamVjdCc7XG5pbXBvcnQgeyBSZWxhdGVkSXRlbVR5cGUgfSBmcm9tICcuLi9jb21tb24vZW51bXMvcmVsYXRlZC10by1pdGVtLXR5cGUnO1xuXG4vKiBEZWNsYXJlIGpvaW50anMgb2JqZWN0ICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdmFyXG5kZWNsYXJlIHZhciBqb2ludDogYW55O1xubGV0IGdyYXBoOiBhbnk7XG5sZXQgcGFwZXI6IGFueTtcbmxldCB0b29sYmFyQ29uZmlnOiBhbnk7XG5jb25zdCBicG1uMiA9IGpvaW50LnNoYXBlcy5icG1uMjtcbmNvbnN0IHN0YW5kYXJkID0gam9pbnQuc2hhcGVzLnN0YW5kYXJkO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQnBtblNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwdWJsaWMgaXNTYXZlQXNUZW1wbGF0ZSA9IGZhbHNlO1xuICBwdWJsaWMgaXNEZWxldGVUZW1wbGF0ZSA9IGZhbHNlO1xuICBwdWJsaWMgaXNEaXNhYmxlVG9vbGJhciA9IGZhbHNlO1xuICBwdWJsaWMgaXNUZW1wID0gdHJ1ZTtcbiAgcHVibGljIGpzb25UZW1wQ29udGVudCA9ICcnO1xuICBwdWJsaWMgaXNSZXNldCA9IGZhbHNlO1xuICBwdWJsaWMgaXNTZWxlY3RlZFRlbXBsYXRlID0gZmFsc2U7XG4gIHB1YmxpYyBqc29uT3JpZ2luYWxDb250ZW50ID0gJyc7XG4gIHB1YmxpYyBpc0Z1bGxTY3JlZW4gPSB0cnVlO1xuICBwdWJsaWMgaXNFeHBhbmRlZFBhbmVsID0gdHJ1ZTtcbiAgTEFORzogYW55O1xuICBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UsXG4gICkge1xuXG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIGJ1aWxkRGlhZ3JhbShcbiAgICBkaWFncmFtVGVtcGxhdGVzOiBhbnksXG4gICAgZGlhZ3JhbVRlbXBsYXRlOiBhbnksXG4gICAgYnBtblRoZW1lOiBzdHJpbmcsXG4gICAganNvbkNvbnRlbnQ6IGFueSxcbiAgICBlZGl0TW9kZTogYW55LFxuICAgIHNoYXBlSW1hZ2VzPzogYW55LFxuICAgIHRvb2xiYXJDb25maWd1cmF0aW9uPzogYW55LFxuICAgIGxhbmd1YWdlPzogc3RyaW5nXG4gICkge1xuICAgIGlmICghbGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcoJ2VuJyk7XG4gICAgfVxuICAgIGVsc2UgeyB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKGxhbmd1YWdlKSB9XG4gICAgdGhpcy5leGN1dGVkQnVpbGREaWFncmFtKFxuICAgICAgZGlhZ3JhbVRlbXBsYXRlcyxcbiAgICAgIGRpYWdyYW1UZW1wbGF0ZSxcbiAgICAgIGJwbW5UaGVtZSxcbiAgICAgIGpzb25Db250ZW50LFxuICAgICAgZWRpdE1vZGUsXG4gICAgICB0aGlzLkxBTkcsXG4gICAgICBzaGFwZUltYWdlcyxcbiAgICAgIHRvb2xiYXJDb25maWd1cmF0aW9uXG4gICAgKTtcbiAgfVxuXG4gIGV4Y3V0ZWRCdWlsZERpYWdyYW0oXG4gICAgZGlhZ3JhbVRlbXBsYXRlczogYW55LFxuICAgIGRpYWdyYW1UZW1wbGF0ZTogYW55LFxuICAgIGJwbW5UaGVtZTogc3RyaW5nLFxuICAgIGpzb25Db250ZW50OiBhbnksXG4gICAgZWRpdE1vZGU6IGFueSxcbiAgICBMQU5HOiBhbnksXG4gICAgc2hhcGVJbWFnZXM/OiBhbnksXG4gICAgdG9vbGJhckNvbmZpZ3VyYXRpb24/OiBhbnlcbiAgKSB7XG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LklTX05PVF9TSE9XX0FHQUlOXSA9IGZhbHNlO1xuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5FRElUX01PREVdID0gZWRpdE1vZGU7XG4gICAgam9pbnQuc2V0VGhlbWUoYnBtblRoZW1lKTtcblxuICAgIGpzb25Db250ZW50ID8ganNvbkNvbnRlbnQgPSBKU09OLnBhcnNlKGpzb25Db250ZW50KSA6IGpzb25Db250ZW50ID0gJyc7XG5cbiAgICBjb25zdCBnZEF1dGggPSB3aW5kb3dbYGdkQXV0aGBdO1xuICAgIGNvbnN0IGdkTG9hZCA9IHdpbmRvd1tgZ2RMb2FkYF07XG4gICAgY29uc3QgZ2RTYXZlID0gd2luZG93W2BnZFNhdmVgXTtcbiAgICBjb25zdCBpbnB1dHMgPSBJbnNwZWN0b3JGdW5jdGlvbi5nZXRJbnNwZWN0b3JDb25maWd1cmF0aW9uKGJwbW4yLCBMQU5HLCBzaGFwZUltYWdlcyk7XG5cbiAgICBsZXQgZnJlZVRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICBpZiAoIXRvb2xiYXJDb25maWd1cmF0aW9uKVxuICAgICAgdG9vbGJhckNvbmZpZyA9IFRvb2xiYXJGdW5jdGlvbi5nZXRUb29sYmFyQ29uZmlndXJhdGlvbihMQU5HKTtcbiAgICBlbHNlXG4gICAgICB0b29sYmFyQ29uZmlnID0gdG9vbGJhckNvbmZpZ3VyYXRpb247XG4gICAgLyogUU1TLTE0MDQ6IEN1c3RvbWl6YXRpb246IEFkZCB0ZW1wbGF0ZSBsaXN0ICovXG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMgJiYgZGlhZ3JhbVRlbXBsYXRlcykge1xuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xuICAgICAgfSk7XG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XG4gICAgICAgIGRpYWdyYW1UZW1wbGF0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcbiAgICAgICAgICAgIGluZGV4OiBpdGVtLmluZGV4LFxuICAgICAgICAgICAgY29udGVudDogaXRlbS50ZW1wbGF0ZU5hbWUsXG4gICAgICAgICAgICBmbG93Q2hhcnRJZDogaXRlbS5mbG93Q2hhcnRJZCxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgIGpzb25Db250ZW50OiBpdGVtLmpzb25Db250ZW50LFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGFyclNlbGVjdFswXS5vcHRpb25zLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHguaW5kZXggPT09IG9wdGlvbi5pbmRleDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBncmFwaCA9IG5ldyBqb2ludC5kaWEuR3JhcGgoeyB0eXBlOiAnYnBtbicgfSk7XG4gICAgY29uc3QgY29tbWFuZE1hbmFnZXIgPSBuZXcgam9pbnQuZGlhLkNvbW1hbmRNYW5hZ2VyKHsgZ3JhcGggfSk7XG4gICAgY29uc3Qga2V5Ym9hcmQgPSBuZXcgam9pbnQudWkuS2V5Ym9hcmQoKTtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSBuZXcgam9pbnQudWkuQ2xpcGJvYXJkKCk7XG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XG4gICAgICBwYXBlciA9IG5ldyBqb2ludC5kaWEuUGFwZXIoe1xuICAgICAgICB3aWR0aDogODAwLFxuICAgICAgICBoZWlnaHQ6IDYwMCxcbiAgICAgICAgbW9kZWw6IGdyYXBoLFxuICAgICAgICBncmlkU2l6ZTogNSxcbiAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgIHNvcnRpbmc6IGpvaW50LmRpYS5QYXBlci5zb3J0aW5nLkFQUFJPWCxcbiAgICAgICAgaW50ZXJhY3RpdmU6IHsgbGlua01vdmU6IGZhbHNlIH0sXG4gICAgICAgIHNuYXBMYWJlbHM6IHRydWUsXG4gICAgICAgIC8vIENvbm5lY3Rpb25zXG4gICAgICAgIGRlZmF1bHRMaW5rKGVsZW1lbnRWaWV3KSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBicG1uMi5GbG93KHtcbiAgICAgICAgICAgIHo6IGVsZW1lbnRWaWV3Lm1vZGVsLmdldCgneicpIC0gMSxcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIGxpbmU6IHtcbiAgICAgICAgICAgICAgICBmbG93VHlwZTogJ3NlcXVlbmNlJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRlQ29ubmVjdGlvbihjZWxsVmlld1MsIG1hZ25ldFMsIGNlbGxWaWV3VCwgbWFnbmV0VCwgZW5kKSB7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gY2VsbFZpZXdTLm1vZGVsO1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGNlbGxWaWV3VC5tb2RlbDtcbiAgICAgICAgICAvLyBkb24ndCBhbGxvdyBsb29wIGxpbmtzXG4gICAgICAgICAgaWYgKHNvdXJjZSA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGRvbid0IGFsbG93IGxpbmsgdG8gbGluayBjb25uZWN0aW9uXG4gICAgICAgICAgaWYgKHNvdXJjZS5pc0xpbmsoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGFyZ2V0LmlzTGluaygpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGRvbid0IGFsbG93IGdyb3VwIGNvbm5lY3Rpb25zXG4gICAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZS5nZXQoJ3R5cGUnKTtcbiAgICAgICAgICBjb25zdCB0YXJnZXRUeXBlID0gdGFyZ2V0LmdldCgndHlwZScpO1xuICAgICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAnYnBtbjIuR3JvdXAnIHx8IHRhcmdldFR5cGUgPT09ICdicG1uMi5Hcm91cCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHRBbmNob3I6IHtcbiAgICAgICAgICBuYW1lOiAncGVycGVuZGljdWxhcidcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdENvbm5lY3Rpb25Qb2ludDoge1xuICAgICAgICAgIG5hbWU6ICdib3VuZGFyeScsXG4gICAgICAgICAgYXJnczogeyBzdHJva2U6IHRydWUgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBFbWJlZGRpbmdcbiAgICAgICAgZW1iZWRkaW5nTW9kZTogdHJ1ZSxcbiAgICAgICAgZnJvbnRQYXJlbnRPbmx5OiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGVFbWJlZGRpbmcoY2hpbGRWaWV3LCBwYXJlbnRWaWV3KSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50VHlwZSA9IHBhcmVudFZpZXcubW9kZWwuZ2V0KCd0eXBlJyk7XG4gICAgICAgICAgY29uc3QgY2hpbGRUeXBlID0gY2hpbGRWaWV3Lm1vZGVsLmdldCgndHlwZScpO1xuICAgICAgICAgIGlmIChwYXJlbnRUeXBlID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJyAmJiBjaGlsZFR5cGUgIT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcmVudFR5cGUgPT09ICdicG1uMi5BY3Rpdml0eScgJiYgY2hpbGRUeXBlID09PSAnYnBtbjIuRXZlbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICAvLyBIaWdobGlnaHRpbmdcbiAgICAgICAgaGlnaGxpZ2h0aW5nOiB7XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgbmFtZTogJ21hc2snLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogJyMzNDk4ZGInLFxuICAgICAgICAgICAgICAgICdzdHJva2Utd2lkdGgnOiAzLFxuICAgICAgICAgICAgICAgICdzdHJva2UtbGluZWpvaW4nOiAncm91bmQnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLm9uKHtcbiAgICAgICAgJ2JsYW5rOnBvaW50ZXJkb3duJzogKGV2dCwgeCwgeSkgPT4ge1xuICAgICAgICAgIGNsb3NlVG9vbHMoKTtcbiAgICAgICAgICB0aGlzLnJlc2V0Q2VsbFZpZXcoKTtcbiAgICAgICAgICAvLyBzZWxlY3Rpb24uc3RhcnRTZWxlY3RpbmcoZXZ0LCB4LCB5KTtcbiAgICAgICAgICBpZiAoa2V5Ym9hcmQuaXNBY3RpdmUoJ3NoaWZ0JywgZXZ0KSkge1xuICAgICAgICAgICAgc2VsZWN0aW9uLnN0YXJ0U2VsZWN0aW5nKGV2dCwgeCwgeSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuc3RhcnRQYW5uaW5nKGV2dCwgeCwgeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAnYmxhbms6Y29udGV4dG1lbnUnOiAoZXZ0LCB4LCB5KSA9PiB7XG4gICAgICAgICAgcGFwZXJTY3JvbGxlci5zdGFydFBhbm5pbmcoZXZ0LCB4LCB5KTtcbiAgICAgICAgfSxcblxuICAgICAgICAnY2VsbDpwb2ludGVydXAnOiAoY2VsbFZpZXcpID0+IHtcbiAgICAgICAgICBvcGVuVG9vbHMoY2VsbFZpZXcpO1xuICAgICAgICB9LFxuXG4gICAgICAgICdsaW5rOm1vdXNlZW50ZXInOiAobGlua1ZpZXcpID0+IHtcbiAgICAgICAgICAvLyBPcGVuIHRvb2wgb25seSBpZiB0aGVyZSBpcyBub25lIHlldFxuICAgICAgICAgIGlmIChsaW5rVmlldy5oYXNUb29scygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbnMgPSBqb2ludC5saW5rVG9vbHM7XG4gICAgICAgICAgY29uc3QgdG9vbHNWaWV3ID0gbmV3IGpvaW50LmRpYS5Ub29sc1ZpZXcoe1xuICAgICAgICAgICAgbmFtZTogJ2xpbmstaG92ZXInLFxuICAgICAgICAgICAgdG9vbHM6IFtcbiAgICAgICAgICAgICAgbmV3IG5zLlZlcnRpY2VzKHsgdmVydGV4QWRkaW5nOiBmYWxzZSB9KSxcbiAgICAgICAgICAgICAgbmV3IG5zLlNvdXJjZUFycm93aGVhZCgpLFxuICAgICAgICAgICAgICBuZXcgbnMuVGFyZ2V0QXJyb3doZWFkKClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGxpbmtWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ2xpbms6bW91c2VsZWF2ZSc6IChsaW5rVmlldykgPT4ge1xuICAgICAgICAgIC8vIFJlbW92ZSBvbmx5IHRoZSBob3ZlciB0b29sLCBub3QgdGhlIHBvaW50ZXJkb3duIHRvb2xcbiAgICAgICAgICBpZiAobGlua1ZpZXcuaGFzVG9vbHMoJ2xpbmstaG92ZXInKSkge1xuICAgICAgICAgICAgbGlua1ZpZXcucmVtb3ZlVG9vbHMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ2xpbms6Y29ubmVjdCc6IChsaW5rVmlldykgPT4ge1xuICAgICAgICAgIC8vIENoYW5nZSB0aGUgbGluayB0eXBlIGJhc2VkIG9uIHRoZSBjb25uZWN0ZWQgZWxlbWVudHNcbiAgICAgICAgICBjb25zdCBsaW5rID0gbGlua1ZpZXcubW9kZWw7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gbGluay5nZXRTb3VyY2VDZWxsKCk7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gbGluay5nZXRUYXJnZXRDZWxsKCk7XG4gICAgICAgICAgaWYgKCFzb3VyY2UgfHwgIXRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB0eXBlcyA9IFtzb3VyY2UuZ2V0KCd0eXBlJyksIHRhcmdldC5nZXQoJ3R5cGUnKV07XG4gICAgICAgICAgY29uc3QgbGlua1R5cGUgPSBsaW5rLmdldCgndHlwZScpO1xuICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5Bbm5vdGF0aW9uJykgPiAtMSkge1xuICAgICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuQW5ub3RhdGlvbkxpbmsnKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5Bbm5vdGF0aW9uTGluayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5Db252ZXJzYXRpb24nKSA+IC0xKSB7XG4gICAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdicG1uMi5Db252ZXJzYXRpb25MaW5rJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuQ29udmVyc2F0aW9uTGluayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5EYXRhT2JqZWN0JykgPiAtMSkge1xuICAgICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuRGF0YUFzc29jaWF0aW9uJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuRGF0YUFzc29jaWF0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YoJ2JwbW4yLkRhdGFTdG9yZScpID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkRhdGFBc3NvY2lhdGlvbicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkRhdGFBc3NvY2lhdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsaW5rVHlwZSAhPT0gJ2JwbW4yLkZsb3cnKSB7XG4gICAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuRmxvdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAnZWxlbWVudDptb3VzZW92ZXInOiBvcGVuVG9vbHMsXG4gICAgICAgICdlbGVtZW50Om1vdXNlb3V0JzogKCkgPT4ge1xuICAgICAgICAgIG9wZW5Ub29scyhudWxsKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ2VsZW1lbnQ6cG9pbnRlcmRvd24nOiAoY2VsbFZpZXcsIGV2dCwgeCwgeSkgPT4ge1xuICAgICAgICAgIGNsb3NlVG9vbHMoKTtcbiAgICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XG4gICAgICAgICAgLy8gY29uc3Qgc291cmNlID0gY2VsbFZpZXcubW9kZWw7XG4gICAgICAgICAgLy8gY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZS5nZXQoJ3R5cGUnKTtcbiAgICAgICAgICAvLyBpZiAoc291cmNlVHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcbiAgICAgICAgICAvLyAgICAgcGFwZXJTY3JvbGxlci5zdGFydFBhbm5pbmcoZXZ0LCB4LCB5KTtcbiAgICAgICAgICAvLyAgICAgcGFwZXIuc2V0SW50ZXJhY3Rpdml0eSh7IGVsZW1lbnRNb3ZlOiB0cnVlIH0pO1xuICAgICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgLy8gICAgIHBhcGVyLnNldEludGVyYWN0aXZpdHkoeyBlbGVtZW50TW92ZTogZmFsc2UgfSk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuc3RhcnRQYW5uaW5nKGV2dCwgeCwgeSk7XG4gICAgICAgICAgcGFwZXIuc2V0SW50ZXJhY3Rpdml0eSh7IGVsZW1lbnRNb3ZlOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcGVyID0gbmV3IGpvaW50LmRpYS5QYXBlcih7XG4gICAgICAgIHdpZHRoOiA4MDAsXG4gICAgICAgIGhlaWdodDogNjAwLFxuICAgICAgICBtb2RlbDogZ3JhcGgsXG4gICAgICAgIGdyaWRTaXplOiAxMCxcbiAgICAgICAgZHJhd0dyaWQ6IHRydWUsXG4gICAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgICBzb3J0aW5nOiBqb2ludC5kaWEuUGFwZXIuc29ydGluZy5BUFBST1gsXG4gICAgICAgIGludGVyYWN0aXZlOiB7IGxpbmtNb3ZlOiBmYWxzZSB9LFxuICAgICAgICBzbmFwTGFiZWxzOiB0cnVlLFxuICAgICAgICAvLyBDb25uZWN0aW9uc1xuICAgICAgICBkZWZhdWx0TGluayhlbGVtZW50Vmlldykge1xuICAgICAgICAgIHJldHVybiBuZXcgYnBtbjIuRmxvdyh7XG4gICAgICAgICAgICB6OiBlbGVtZW50Vmlldy5tb2RlbC5nZXQoJ3onKSAtIDEsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBsaW5lOiB7XG4gICAgICAgICAgICAgICAgZmxvd1R5cGU6ICdzZXF1ZW5jZSdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0ZUNvbm5lY3Rpb24oY2VsbFZpZXdTLCBtYWduZXRTLCBjZWxsVmlld1QsIG1hZ25ldFQsIGVuZCkge1xuICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGNlbGxWaWV3Uy5tb2RlbDtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBjZWxsVmlld1QubW9kZWw7XG4gICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgbG9vcCBsaW5rc1xuICAgICAgICAgIGlmIChzb3VyY2UgPT09IHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBkb24ndCBhbGxvdyBsaW5rIHRvIGxpbmsgY29ubmVjdGlvblxuICAgICAgICAgIGlmIChzb3VyY2UuaXNMaW5rKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRhcmdldC5pc0xpbmsoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBkb24ndCBhbGxvdyBncm91cCBjb25uZWN0aW9uc1xuICAgICAgICAgIGNvbnN0IHNvdXJjZVR5cGUgPSBzb3VyY2UuZ2V0KCd0eXBlJyk7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0VHlwZSA9IHRhcmdldC5nZXQoJ3R5cGUnKTtcbiAgICAgICAgICBpZiAoc291cmNlVHlwZSA9PT0gJ2JwbW4yLkdyb3VwJyB8fCB0YXJnZXRUeXBlID09PSAnYnBtbjIuR3JvdXAnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0QW5jaG9yOiB7XG4gICAgICAgICAgbmFtZTogJ3BlcnBlbmRpY3VsYXInXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHRDb25uZWN0aW9uUG9pbnQ6IHtcbiAgICAgICAgICBuYW1lOiAnYm91bmRhcnknLFxuICAgICAgICAgIGFyZ3M6IHsgc3Ryb2tlOiB0cnVlIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gRW1iZWRkaW5nXG4gICAgICAgIGVtYmVkZGluZ01vZGU6IHRydWUsXG4gICAgICAgIGZyb250UGFyZW50T25seTogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRlRW1iZWRkaW5nKGNoaWxkVmlldywgcGFyZW50Vmlldykge1xuICAgICAgICAgIGNvbnN0IHBhcmVudFR5cGUgPSBwYXJlbnRWaWV3Lm1vZGVsLmdldCgndHlwZScpO1xuICAgICAgICAgIGNvbnN0IGNoaWxkVHlwZSA9IGNoaWxkVmlldy5tb2RlbC5nZXQoJ3R5cGUnKTtcbiAgICAgICAgICBpZiAocGFyZW50VHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcgJiYgY2hpbGRUeXBlICE9PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJlbnRUeXBlID09PSAnYnBtbjIuQWN0aXZpdHknICYmIGNoaWxkVHlwZSA9PT0gJ2JwbW4yLkV2ZW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gSGlnaGxpZ2h0aW5nXG4gICAgICAgIGhpZ2hsaWdodGluZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIG5hbWU6ICdtYXNrJyxcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICBzdHJva2U6ICcjMzQ5OGRiJyxcbiAgICAgICAgICAgICAgICAnc3Ryb2tlLXdpZHRoJzogMyxcbiAgICAgICAgICAgICAgICAnc3Ryb2tlLWxpbmVqb2luJzogJ3JvdW5kJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KS5vbih7XG4gICAgICAgICdibGFuazpwb2ludGVyZG93bic6IChldnQsIHgsIHkpID0+IHtcbiAgICAgICAgICBjbG9zZVRvb2xzKCk7XG4gICAgICAgICAgdGhpcy5yZXNldENlbGxWaWV3KCk7XG4gICAgICAgICAgLy8gc2VsZWN0aW9uLnN0YXJ0U2VsZWN0aW5nKGV2dCwgeCwgeSk7XG4gICAgICAgICAgaWYgKGtleWJvYXJkLmlzQWN0aXZlKCdzaGlmdCcsIGV2dCkpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5zdGFydFNlbGVjdGluZyhldnQsIHgsIHkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnN0YXJ0UGFubmluZyhldnQsIHgsIHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAnYmxhbms6Y29udGV4dG1lbnUnOiAoZXZ0LCB4LCB5KSA9PiB7XG4gICAgICAgICAgcGFwZXJTY3JvbGxlci5zdGFydFBhbm5pbmcoZXZ0LCB4LCB5KTtcbiAgICAgICAgfSxcblxuICAgICAgICAnY2VsbDpwb2ludGVydXAnOiAoY2VsbFZpZXcpID0+IHtcbiAgICAgICAgICBvcGVuVG9vbHMoY2VsbFZpZXcpO1xuICAgICAgICB9LFxuXG4gICAgICAgICdsaW5rOm1vdXNlZW50ZXInOiAobGlua1ZpZXcpID0+IHtcbiAgICAgICAgICAvLyBPcGVuIHRvb2wgb25seSBpZiB0aGVyZSBpcyBub25lIHlldFxuICAgICAgICAgIGlmIChsaW5rVmlldy5oYXNUb29scygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbnMgPSBqb2ludC5saW5rVG9vbHM7XG4gICAgICAgICAgY29uc3QgdG9vbHNWaWV3ID0gbmV3IGpvaW50LmRpYS5Ub29sc1ZpZXcoe1xuICAgICAgICAgICAgbmFtZTogJ2xpbmstaG92ZXInLFxuICAgICAgICAgICAgdG9vbHM6IFtcbiAgICAgICAgICAgICAgbmV3IG5zLlZlcnRpY2VzKHsgdmVydGV4QWRkaW5nOiBmYWxzZSB9KSxcbiAgICAgICAgICAgICAgbmV3IG5zLlNvdXJjZUFycm93aGVhZCgpLFxuICAgICAgICAgICAgICBuZXcgbnMuVGFyZ2V0QXJyb3doZWFkKClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGxpbmtWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ2xpbms6bW91c2VsZWF2ZSc6IChsaW5rVmlldykgPT4ge1xuICAgICAgICAgIC8vIFJlbW92ZSBvbmx5IHRoZSBob3ZlciB0b29sLCBub3QgdGhlIHBvaW50ZXJkb3duIHRvb2xcbiAgICAgICAgICBpZiAobGlua1ZpZXcuaGFzVG9vbHMoJ2xpbmstaG92ZXInKSkge1xuICAgICAgICAgICAgbGlua1ZpZXcucmVtb3ZlVG9vbHMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ2xpbms6Y29ubmVjdCc6IChsaW5rVmlldykgPT4ge1xuICAgICAgICAgIC8vIENoYW5nZSB0aGUgbGluayB0eXBlIGJhc2VkIG9uIHRoZSBjb25uZWN0ZWQgZWxlbWVudHNcbiAgICAgICAgICBjb25zdCBsaW5rID0gbGlua1ZpZXcubW9kZWw7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gbGluay5nZXRTb3VyY2VDZWxsKCk7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gbGluay5nZXRUYXJnZXRDZWxsKCk7XG4gICAgICAgICAgaWYgKCFzb3VyY2UgfHwgIXRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsaW5rLnNldCgneicsIC0xKTtcbiAgICAgICAgICBjb25zdCB0eXBlcyA9IFtzb3VyY2UuZ2V0KCd0eXBlJyksIHRhcmdldC5nZXQoJ3R5cGUnKV07XG4gICAgICAgICAgY29uc3QgbGlua1R5cGUgPSBsaW5rLmdldCgndHlwZScpO1xuICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5Bbm5vdGF0aW9uJykgPiAtMSkge1xuICAgICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuQW5ub3RhdGlvbkxpbmsnKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5Bbm5vdGF0aW9uTGluayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5Db252ZXJzYXRpb24nKSA+IC0xKSB7XG4gICAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdicG1uMi5Db252ZXJzYXRpb25MaW5rJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuQ29udmVyc2F0aW9uTGluayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5EYXRhT2JqZWN0JykgPiAtMSkge1xuICAgICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuRGF0YUFzc29jaWF0aW9uJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuRGF0YUFzc29jaWF0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YoJ2JwbW4yLkRhdGFTdG9yZScpID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkRhdGFBc3NvY2lhdGlvbicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkRhdGFBc3NvY2lhdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsaW5rVHlwZSAhPT0gJ2JwbW4yLkZsb3cnKSB7XG4gICAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuRmxvdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzbmFwbGluZXMgPSBuZXcgam9pbnQudWkuU25hcGxpbmVzKHsgcGFwZXIgfSk7XG5cbiAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gbmV3IGpvaW50LnVpLlBhcGVyU2Nyb2xsZXIoe1xuICAgICAgcGFwZXIsXG4gICAgICBhdXRvUmVzaXplUGFwZXI6IHRydWUsXG4gICAgICBzY3JvbGxXaGlsZURyYWdnaW5nOiB0cnVlLFxuICAgICAgY3Vyc29yOiAnZ3JhYidcbiAgICB9KTtcblxuICAgICQoJyNwYXBlci1jb250YWluZXInKS5odG1sKCcnKTtcbiAgICBwYXBlclNjcm9sbGVyLiRlbC5hcHBlbmRUbygnI3BhcGVyLWNvbnRhaW5lcicpO1xuICAgIHBhcGVyU2Nyb2xsZXIuc2V0Q3Vyc29yKCdncmFiJyk7XG4gICAgcGFwZXJTY3JvbGxlci5yZW5kZXIoKS5jZW50ZXIoKTtcblxuICAgIHBhcGVyLm9uKCdibGFuazptb3VzZXdoZWVsJywgXy5wYXJ0aWFsKG9uTW91c2V3aGVlbCwgbnVsbCksIHRoaXMpO1xuICAgIHBhcGVyLm9uKCdjZWxsOm1vdXNld2hlZWwnLCBvbk1vdXNld2hlZWwsIHRoaXMpO1xuICAgIGZ1bmN0aW9uIG9uTW91c2V3aGVlbChjZWxsVmlldywgZXZ0LCB4LCB5LCBkZWx0YSkge1xuICAgICAgcGFwZXJTY3JvbGxlci56b29tKGRlbHRhICogMC4xLCB7IG1pbjogMC4yLCBtYXg6IDUsIGdyaWQ6IDAuMSwgb3g6IHgsIG95OiB5IH0pO1xuICAgIH1cblxuICAgIC8qIFNFTEVDVElPTiAqL1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IG5ldyBqb2ludC51aS5TZWxlY3Rpb24oe1xuICAgICAgcGFwZXIsXG4gICAgICBncmFwaCxcbiAgICAgIHVzZU1vZGVsR2VvbWV0cnk6IHRydWUsXG4gICAgICBmaWx0ZXI6IFsnYnBtbjIuSGVhZGVyZWRQb29sJ10gLy8gZG9uJ3QgYWxsb3cgdG8gc2VsZWN0IGEgcG9vbFxuICAgIH0pO1xuXG4gICAgLyogU1RFTkNJTCAqL1xuXG4gICAgY29uc3Qgc3RlbmNpbCA9IG5ldyBqb2ludC51aS5TdGVuY2lsKHtcbiAgICAgIGdyYXBoLFxuICAgICAgcGFwZXIsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICBkcmFnRW5kQ2xvbmUoY2VsbCkge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGNlbGwuY2xvbmUoKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IGNsb25lLmdldCgndHlwZScpO1xuXG4gICAgICAgIC8vIHNvbWUgdHlwZXMgb2YgdGhlIGVsZW1lbnRzIG5lZWQgcmVzaXppbmcgYWZ0ZXIgdGhleSBhcmUgZHJvcHBlZFxuICAgICAgICBjb25zdCBzaXplTXVsdGlwbGllciA9IHsgJ2JwbW4yLkhlYWRlcmVkUG9vbCc6IDgsICdicG1uLkNob3Jlb2dyYXBoeSc6IDIgfVt0eXBlXTtcbiAgICAgICAgaWYgKHNpemVNdWx0aXBsaWVyKSB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxTaXplID0gY2xvbmUuZ2V0KCdzaXplJyk7XG4gICAgICAgICAgY2xvbmUuc2V0KCdzaXplJywge1xuICAgICAgICAgICAgd2lkdGg6IG9yaWdpbmFsU2l6ZS53aWR0aCAqIHNpemVNdWx0aXBsaWVyLFxuICAgICAgICAgICAgaGVpZ2h0OiBvcmlnaW5hbFNpemUuaGVpZ2h0ICogc2l6ZU11bHRpcGxpZXJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcbiAgICAgICAgICAgIGNsb25lLnNldCgncGFkZGluZycsIHsgdG9wOiAwLCBsZWZ0OiAzMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RlbmNpbC5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyNzdGVuY2lsLWNvbnRhaW5lcicpO1xuXG4gICAgLy8gTG9hZCBzaGFwZSBpbWFnZSBvciBub3RcbiAgICBpZiAoc2hhcGVJbWFnZXMgJiYgc2hhcGVJbWFnZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBpZHggPSBzaGFwZUltYWdlcy5maW5kSW5kZXgoKGltZykgPT4ge1xuICAgICAgICByZXR1cm4gaW1nWydpc0RlZmF1bHQnXSA9PT0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaW1hZ2UgPSBzaGFwZUltYWdlc1tpZHhdO1xuICAgICAgc3RlbmNpbC5sb2FkKFtcbiAgICAgICAgbmV3IGJwbW4yLkFjdGl2aXR5KHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgYnBtbjIuR2F0ZXdheSh7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGJwbW4yLkV2ZW50KHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgYnBtbjIuQ29udmVyc2F0aW9uKHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgYnBtbjIuRGF0YU9iamVjdCh7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGJwbW4yLkRhdGFTdG9yZSh7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGJwbW4yLkFubm90YXRpb24oe1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgIGZpbGw6ICcjZmZmZmZmJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGJwbW4yLkdyb3VwKHtcbiAgICAgICAgICBzaXplOiB7XG4gICAgICAgICAgICB3aWR0aDogODAsXG4gICAgICAgICAgICBoZWlnaHQ6IDgwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgdGV4dDogJ0dyb3VwJyxcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICAvLyBMZWdhY3kgQlBNTiBTaGFwZXNcbiAgICAgICAgbmV3IGJwbW4yLkhlYWRlcmVkUG9vbCh7XG4gICAgICAgICAgcGFkZGluZzogeyB0b3A6IDAsIGxlZnQ6IDE1LCByaWdodDogMCwgYm90dG9tOiAwIH0sXG4gICAgICAgICAgc2l6ZTogeyB3aWR0aDogODAsIGhlaWdodDogNTAgfSxcbiAgICAgICAgICBsYW5lczogW3sgbGFiZWw6ICdMYW5lIDEnIH0sIHsgbGFiZWw6ICdMYW5lIDInIH1dLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBib2R5OiB7IGZpbGw6ICcjRkZGRkZGJyB9LFxuICAgICAgICAgICAgaGVhZGVyTGFiZWw6IHsgdGV4dDogJ0hlYWRlcicgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBqb2ludC5zaGFwZXMuYnBtbi5DaG9yZW9ncmFwaHkoe1xuICAgICAgICAgIHBhcnRpY2lwYW50czogWydQYXJ0aWNpcGFudCAxJywgJ1BhcnRpY2lwYW50IDInXSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgam9pbnQuc2hhcGVzLmJwbW4uTWVzc2FnZSh7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHRleHQ6IHtcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuXG4gICAgICAgIG5ldyBzdGFuZGFyZC5JbWFnZSh7XG4gICAgICAgICAgdHlwZTogJ3N0YW5kYXJkLkltYWdlJyxcbiAgICAgICAgICBzaXplOiB7IHdpZHRoOiA4MCwgaGVpZ2h0OiA4MCB9LFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBpbWFnZToge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgICAgeGxpbmtIcmVmOiBpbWFnZVxuICAgICAgICAgICAgICAgID8gaW1hZ2VbJ2ltYWdlVHlwZSddID09PSAnc3ZnJ1xuICAgICAgICAgICAgICAgICAgPyBgZGF0YTppbWFnZS8ke2ltYWdlWydpbWFnZVR5cGUnXX0reG1sO2Jhc2U2NCwke2ltYWdlWydpbWFnZVN0cmluZyddfWBcbiAgICAgICAgICAgICAgICAgIDogYGRhdGE6aW1hZ2UvJHtpbWFnZVsnaW1hZ2VUeXBlJ119O2Jhc2U2NCwke2ltYWdlWydpbWFnZVN0cmluZyddfWBcbiAgICAgICAgICAgICAgICA6ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlkWFJtTFRnaVB6NDhJVVJQUTFSWlVFVWdjM1puSUZCVlFreEpReUFpTFM4dlZ6TkRMeTlFVkVRZ1UxWkhJREV1TVM4dlJVNGlJQ0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTlIY21Gd2FHbGpjeTlUVmtjdk1TNHhMMFJVUkM5emRtY3hNUzVrZEdRaVBqeHpkbWNnZG1WeWMybHZiajBpTVM0eElpQnBaRDBpVEdGNVpYSmZNaUlnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JaUI0Yld4dWN6cDRiR2x1YXowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzk0YkdsdWF5SWdlRDBpTUhCNElpQjVQU0l3Y0hnaUlIZHBaSFJvUFNJMU0zQjRJaUJvWldsbmFIUTlJalF5Y0hnaUlIWnBaWGRDYjNnOUlqQWdNQ0ExTXlBME1pSWdaVzVoWW14bExXSmhZMnRuY205MWJtUTlJbTVsZHlBd0lEQWdOVE1nTkRJaUlIaHRiRHB6Y0dGalpUMGljSEpsYzJWeWRtVWlQanhuUGp4bklHOXdZV05wZEhrOUlqQXVORGtpUGp4d1lYUm9JR1pwYkd3OUlpTXlNakl4TXpnaUlHUTlJazAwT1M0ek5EUXNNMk13TGpVME1pd3dMREV1TWpVdE1DNHdORElzTVM0eU5Td3dMalYyTXpSak1Dd3dMalUwTWkwd0xqY3dPQ3d4TGpVdE1TNHlOU3d4TGpWb0xUUTJZeTB3TGpVME1pd3dMVEF1TnpVdE1DNDVOVGd0TUM0M05TMHhMalVnZGkwek5HTXdMVEF1TlRReUxEQXVNakE0TFRBdU5Td3dMamMxTFRBdU5XZzBOaTR5TlNCTk5Ea3VNelEwTERGb0xUUTJZeTB4TGpZMUxEQXRNaTQzTlN3d0xqZzFMVEl1TnpVc01pNDFkak0wWXpBc01TNDJOU3d4TGpFc015NDFMREl1TnpVc015NDFhRFEySUdNeExqWTFMREFzTXk0eU5TMHhMamcxTERNdU1qVXRNeTQxZGkwek5FTTFNaTQxT1RRc01TNDROU3cxTUM0NU9UUXNNU3cwT1M0ek5EUXNNVXcwT1M0ek5EUXNNWG9pTHo0OFkybHlZMnhsSUdacGJHdzlJaU15TWpJeE16Z2lJR040UFNJek9DNHdPVFFpSUdONVBTSXhNaTQxTURJaUlISTlJalF1TXprNElpOCtQSEJoZEdnZ1ptbHNiRDBpSXpJeU1qRXpPQ0lnWkQwaVRUVXdMalU1TkN3eU5pNDVOekpzTFRjdU1UTTFMVFV1T1RFNFl5MHhMakEzTmkwd0xqZzRPQzB5TGpjeU5pMHdMamcxTkMwekxqYzBPU3d3TGpBNE5Hd3ROeTR5TWpRc05pNDFPREpNTVRndU1qVXhMREV5TGpJeElHTXRNUzR3TnpNdE1TNHhOek10TWk0NE1qWXRNUzR4T0RZdE15NDVNVGN0TUM0d01qUk1NUzQxT1RRc01qVXVPVEl5VmpRd2FEUTRMams1TTJNd0xqRXhOU3d3TERBdU1EQTNMVEF1TURJeExEQXVNREEzTFRBdU1ESTVWakkyTGprM01ub2lMejQ4TDJjK1BHYytQR2MrUEdjK1BIQmhkR2dnWm1sc2JEMGlJek14UkRCRE5pSWdaRDBpVFRRNUxqTTBOQ3d5WXpBdU5UUXlMREFzTVM0eU5TMHdMakEwTWl3eExqSTFMREF1TlhZek5HTXdMREF1TlRReUxUQXVOekE0TERFdU5TMHhMakkxTERFdU5XZ3RORFpqTFRBdU5UUXlMREF0TUM0M05TMHdMamsxT0Mwd0xqYzFMVEV1TlNCMkxUTTBZekF0TUM0MU5ESXNNQzR5TURndE1DNDFMREF1TnpVdE1DNDFhRFEyTGpJMUlFMDBPUzR6TkRRc01HZ3RORFpqTFRFdU5qVXNNQzB5TGpjMUxEQXVPRFV0TWk0M05Td3lMalYyTXpSak1Dd3hMalkxTERFdU1Td3pMalVzTWk0M05Td3pMalZvTkRZZ1l6RXVOalVzTUN3ekxqSTFMVEV1T0RVc015NHlOUzB6TGpWMkxUTTBRelV5TGpVNU5Dd3dMamcxTERVd0xqazVOQ3d3TERRNUxqTTBOQ3d3VERRNUxqTTBOQ3d3ZWlJdlBqd3ZaejQ4WTJseVkyeGxJR1pwYkd3OUlpTXpNVVF3UXpZaUlHTjRQU0l6T0M0d09UUWlJR041UFNJeE1TNDFNRElpSUhJOUlqUXVNems0SWk4K1BIQmhkR2dnWm1sc2JEMGlJek14UkRCRE5pSWdaRDBpVFRVd0xqVTVOQ3d5TlM0NU56SnNMVGN1TVRNMUxUVXVPVEU0WXkweExqQTNOaTB3TGpnNE9DMHlMamN5Tmkwd0xqZzFOQzB6TGpjME9Td3dMakE0Tkd3dE55NHlNalFzTmk0MU9ESk1NVGd1TWpVeExERXhMakl4SUdNdE1TNHdOek10TVM0eE56TXRNaTQ0TWpZdE1TNHhPRFl0TXk0NU1UY3RNQzR3TWpSTU1TNDFPVFFzTWpRdU9USXlWak01YURRNExqazVNMk13TGpFeE5Td3dMREF1TURBM0xUQXVNREl4TERBdU1EQTNMVEF1TURJNVZqSTFMamszTW5vaUx6NDhMMmMrUEM5blBqd3ZaejQ4TDNOMlp6NGcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICBzdHJva2U6ICcjMzFkMGM2JyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHN0cm9rZURhc2hhcnJheTogJzAnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ZW5jaWwubG9hZChbXG4gICAgICAgIG5ldyBicG1uMi5BY3Rpdml0eSh7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGJwbW4yLkdhdGV3YXkoe1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBicG1uMi5FdmVudCh7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGJwbW4yLkNvbnZlcnNhdGlvbih7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGJwbW4yLkRhdGFPYmplY3Qoe1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBicG1uMi5EYXRhU3RvcmUoe1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBicG1uMi5Bbm5vdGF0aW9uKHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICBmaWxsOiAnI2ZmZmZmZidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBicG1uMi5Hcm91cCh7XG4gICAgICAgICAgc2l6ZToge1xuICAgICAgICAgICAgd2lkdGg6IDgwLFxuICAgICAgICAgICAgaGVpZ2h0OiA4MFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHRleHQ6ICdHcm91cCcsXG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgLy8gTGVnYWN5IEJQTU4gU2hhcGVzXG4gICAgICAgIG5ldyBicG1uMi5IZWFkZXJlZFBvb2woe1xuICAgICAgICAgIHBhZGRpbmc6IHsgdG9wOiAwLCBsZWZ0OiAxNSwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9LFxuICAgICAgICAgIHNpemU6IHsgd2lkdGg6IDgwLCBoZWlnaHQ6IDUwIH0sXG4gICAgICAgICAgbGFuZXM6IFt7IGxhYmVsOiAnTGFuZSAxJyB9LCB7IGxhYmVsOiAnTGFuZSAyJyB9XSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgYm9keTogeyBmaWxsOiAnI0ZGRkZGRicgfSxcbiAgICAgICAgICAgIGhlYWRlckxhYmVsOiB7IHRleHQ6ICdIZWFkZXInIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgam9pbnQuc2hhcGVzLmJwbW4uQ2hvcmVvZ3JhcGh5KHtcbiAgICAgICAgICBwYXJ0aWNpcGFudHM6IFsnUGFydGljaXBhbnQgMScsICdQYXJ0aWNpcGFudCAyJ10sXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGpvaW50LnNoYXBlcy5icG1uLk1lc3NhZ2Uoe1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgam9pbnQubGF5b3V0LkdyaWRMYXlvdXQubGF5b3V0KHN0ZW5jaWwuZ2V0R3JhcGgoKSwge1xuICAgICAgY29sdW1uczogMTAwLFxuICAgICAgY29sdW1uV2lkdGg6ICdjb21wYWN0JyxcbiAgICAgIG1hcmdpblg6IDIwLFxuICAgICAgbWFyZ2luWTogMjAsXG4gICAgICBjb2x1bW5HYXA6IDQwLFxuICAgICAgdmVydGljYWxHYXA6IDIwLFxuICAgICAgcmVzaXplVG9GaXQ6IGZhbHNlXG4gICAgfSk7XG4gICAgY29uc3QgcmVzZXRDZWxsVmlldyA9IHRoaXMucmVzZXRDZWxsVmlldztcbiAgICAvLyBDcmVhdGUgdG9vbHRpcHMgZm9yIGFsbCB0aGUgc2hhcGVzIGluIHN0ZW5jaWwuXG4gICAgc3RlbmNpbC5vbignZWxlbWVudDpkcm9wJywgKGVsZW1lbnRWaWV3KSA9PiB7XG4gICAgICAvLyBvcGVuIGluc3BlY3RvciBhZnRlciBhIG5ldyBlbGVtZW50IGRyb3BwZWQgZnJvbSBzdGVuY2lsXG4gICAgICBvcGVuVG9vbHMoZWxlbWVudFZpZXcpO1xuICAgIH0pO1xuXG4gICAgLyogS0VZQk9BUkQgKi9cbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLkVkaXQpIHtcbiAgICAgIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpIHtcbiAgICAgIGtleWJvYXJkLm9uKFxuICAgICAgICB7XG4gICAgICAgICAgJ2N0cmwrYyc6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIENvcHkgYWxsIHNlbGVjdGVkIGVsZW1lbnRzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGxpbmtzLlxuICAgICAgICAgICAgY2xpcGJvYXJkLmNvcHlFbGVtZW50cyhzZWxlY3Rpb24uY29sbGVjdGlvbiwgZ3JhcGgpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICAnY3RybCt2JzogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFzdGVkQ2VsbHMgPSBjbGlwYm9hcmQucGFzdGVDZWxscyhncmFwaCwge1xuICAgICAgICAgICAgICB0cmFuc2xhdGU6IHsgZHg6IDIwLCBkeTogMjAgfSxcbiAgICAgICAgICAgICAgdXNlTG9jYWxTdG9yYWdlOiB0cnVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBfLmZpbHRlcihwYXN0ZWRDZWxscywgKGNlbGwpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNlbGwuaXNFbGVtZW50KCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHBhc3RlZCBlbGVtZW50cyBnZXQgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgbWFrZXMgdGhlIFVYIGJldHRlciBhc1xuICAgICAgICAgICAgLy8gdGhlIHVzZXIgY2FuIGltbWVkaWF0ZWx5IG1hbmlwdWxhdGUgdGhlIHBhc3RlZCBlbGVtZW50cy5cbiAgICAgICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlc2V0KGVsZW1lbnRzKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgJ2N0cmwreCBzaGlmdCtkZWxldGUnOiAoKSA9PiB7XG4gICAgICAgICAgICBjbGlwYm9hcmQuY3V0RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcbiAgICAgICAgICAgIHJlc2V0Q2VsbFZpZXcoKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgJ2RlbGV0ZSBiYWNrc3BhY2UnOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGdyYXBoLnJlbW92ZUNlbGxzKHNlbGVjdGlvbi5jb2xsZWN0aW9uLnRvQXJyYXkoKSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgICdjdHJsK3onOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3RpZnkgPSBpc1NlbGVjdGVkQ2VsbFZpZXdJblNlbGVjdGlvbihzZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29tbWFuZE1hbmFnZXIudW5kbygpO1xuICAgICAgICAgICAgc2VsZWN0aW9uLmNhbmNlbFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICAgICAgICByZXNldENlbGxWaWV3KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcblxuICAgICAgICAgICdjdHJsK3knOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3RpZnkgPSBpc1NlbGVjdGVkQ2VsbFZpZXdJblNlbGVjdGlvbihzZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29tbWFuZE1hbmFnZXIucmVkbygpO1xuICAgICAgICAgICAgc2VsZWN0aW9uLmNhbmNlbFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICAgICAgICByZXNldENlbGxWaWV3KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcblxuICAgICAgICAgICdjdHJsK2EnOiAoKSA9PiB7XG4gICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChncmFwaC5nZXRFbGVtZW50cygpKTtcbiAgICAgICAgICAgIHJlc2V0Q2VsbFZpZXcoKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgJ2N0cmwrcGx1cyc6IChldnQpID0+IHtcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci56b29tKDAuMiwgeyBtYXg6IDUsIGdyaWQ6IDAuMiB9KTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgJ2N0cmwrbWludXMnOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuem9vbSgtMC4yLCB7IG1pbjogMC4yLCBncmlkOiAwLjIgfSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgICdrZXlkb3duOnNoaWZ0JzogKGV2dCkgPT4ge1xuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2Nyb3NzaGFpcicpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICAna2V5dXA6c2hpZnQnOiAoKSA9PiB7XG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnNldEN1cnNvcignZ3JhYicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvcGVuVG9vbHMoY2VsbFZpZXcpIHtcbiAgICAgIGlmICghY2VsbFZpZXcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2xvc2VUb29scygpO1xuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBjZWxsVmlldztcbiAgICAgIGNvbnN0IGNlbGwgPSBjZWxsVmlldy5tb2RlbDtcbiAgICAgIGNvbnN0IHR5cGUgPSBjZWxsLmdldCgndHlwZScpO1xuXG4gICAgICBqb2ludC51aS5JbnNwZWN0b3IuY3JlYXRlKCcjaW5zcGVjdG9yLWNvbnRhaW5lcicsIHtcbiAgICAgICAgY2VsbCxcbiAgICAgICAgaW5wdXRzOiBpbnB1dHNbdHlwZV0sXG4gICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgIGdlbmVyYWw6IHsgbGFiZWw6IHR5cGUsIGluZGV4OiAxIH0sXG4gICAgICAgICAgZGVmYXVsdHM6IHsgaW5kZXg6IDIgfSxcbiAgICAgICAgICBmb250c2l6ZTogeyBpbmRleDogMyB9LFxuICAgICAgICAgIGFwcGVhcmFuY2U6IHsgaW5kZXg6IDQgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVzZXQoW10pO1xuICAgICAgLy8gQWRkIHRoZSBjZWxsIGludG8gdGhlIHNlbGVjdGlvbiBjb2xsZWN0aW9uIHNpbGVudGx5XG4gICAgICAvLyBzbyBubyBzZWxlY3Rpb24gYm94IGlzIHJlbmRlcmVkIGFib3ZlIHRoZSBjZWxsVmlldy5cbiAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLmFkZChjZWxsLCB7IHNpbGVudDogdHJ1ZSB9KTtcblxuICAgICAgaWYgKGNlbGwuaXNFbGVtZW50KCkpIHtcbiAgICAgICAgbGV0IG1pblNpemU7XG5cbiAgICAgICAgaWYgKGNlbGwgaW5zdGFuY2VvZiBicG1uMi5IZWFkZXJlZFBvb2wpIHtcbiAgICAgICAgICBtaW5TaXplID0gY2VsbC5nZXRNaW5pbWFsU2l6ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1pblNpemUgPSB7IHdpZHRoOiAzMCwgaGVpZ2h0OiAzMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZnJlZVRyYW5zZm9ybSA9IG5ldyBqb2ludC51aS5GcmVlVHJhbnNmb3JtKHtcbiAgICAgICAgICBjZWxsVmlldyxcbiAgICAgICAgICBhbGxvd09ydGhvZ29uYWxSZXNpemU6IGZhbHNlLFxuICAgICAgICAgIGFsbG93Um90YXRpb246IGZhbHNlLFxuICAgICAgICAgIG1pbldpZHRoOiBtaW5TaXplLndpZHRoLFxuICAgICAgICAgIG1pbkhlaWdodDogbWluU2l6ZS5oZWlnaHRcbiAgICAgICAgfSkucmVuZGVyKCk7XG5cbiAgICAgICAgY29uc3QgaGFsbyA9IG5ldyBqb2ludC51aS5IYWxvKHtcbiAgICAgICAgICBjZWxsVmlldyxcbiAgICAgICAgICB0aGVtZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIHR5cGU6ICd0b29sYmFyJyxcbiAgICAgICAgICB1c2VNb2RlbEdlb21ldHJ5OiB0cnVlLFxuICAgICAgICAgIGJveENvbnRlbnQ6IChjZWxsVmlldykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNlbGxWaWV3Lm1vZGVsLmdldCgndHlwZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChlZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuRWRpdCkge1xuICAgICAgICAgIGlmICh0eXBlID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2xpbmsnKTtcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdmb3JrJyk7XG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgndW5saW5rJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGhhbG8ucmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNlbGwuaXNMaW5rKCkpIHtcbiAgICAgICAgY29uc3QgbnMgPSBqb2ludC5saW5rVG9vbHM7XG4gICAgICAgIGNvbnN0IHRvb2xzVmlldyA9IG5ldyBqb2ludC5kaWEuVG9vbHNWaWV3KHtcbiAgICAgICAgICBuYW1lOiAnbGluay1wb2ludGVyZG93bicsXG4gICAgICAgICAgdG9vbHM6IFtcbiAgICAgICAgICAgIG5ldyBucy5WZXJ0aWNlcygpLFxuICAgICAgICAgICAgbmV3IG5zLlNvdXJjZUFuY2hvcigpLFxuICAgICAgICAgICAgbmV3IG5zLlRhcmdldEFuY2hvcigpLFxuICAgICAgICAgICAgbmV3IG5zLlNvdXJjZUFycm93aGVhZCgpLFxuICAgICAgICAgICAgbmV3IG5zLlRhcmdldEFycm93aGVhZCgpLFxuICAgICAgICAgICAgbmV3IG5zLlNlZ21lbnRzKCksXG4gICAgICAgICAgICBuZXcgbnMuQm91bmRhcnkoeyBwYWRkaW5nOiAxNSB9KSxcbiAgICAgICAgICAgIG5ldyBucy5SZW1vdmUoeyBvZmZzZXQ6IC0yMCwgZGlzdGFuY2U6IDQwIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KTtcblxuICAgICAgICBjZWxsVmlldy5hZGRUb29scyh0b29sc1ZpZXcpO1xuICAgICAgfVxuXG4gICAgICAvKiBRTVMtMjM2NDogc2hvdyBsaW5rIGFuZCBwb2l0ZXIgY2hhbmdlIHRvIGhhbmQgKi9cbiAgICAgIGlmICh3aW5kb3dbYGV2ZW50YF1bYHR5cGVgXSA9PT0gJ21vdXNlb3ZlcicgJiYgZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcbiAgICAgICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYGpvaW50LWVsZW1lbnRgKTtcbiAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBzaGFwZUlkID0gY2VsbFZpZXcubW9kZWwuYXR0cmlidXRlcy5pZDtcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGxpc3RbaV0uYXR0cmlidXRlc1swXS5ub2RlVmFsdWUgIT09IHNoYXBlSWQpIHtcbiAgICAgICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAnbW92ZSc7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2hhcGVEZXRhaWxNb2RlbCA9IHdpbmRvd1tgU0hBUEVfREVUQUlMX01PREVMYF07XG4gICAgICAgICAgICBpZiAoIXNoYXBlRGV0YWlsTW9kZWwpIHtcbiAgICAgICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAnbW92ZSc7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBzaGFwZURldGFpbE1vZGVsLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4geC5zaGFwZUlkID09PSBzaGFwZUlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ21vdmUnO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNoYXBlRGV0YWlsID0gc2hhcGVEZXRhaWxNb2RlbFtpbmRleF07XG4gICAgICAgICAgICBsZXQgY29ubmVjdGlvbk5hbWUgPSAnJztcbiAgICAgICAgICAgIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkFjdGl2aXR5KSB7XG4gICAgICAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ3BvaW50ZXInO1xuICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0FDVElWSVRZO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmspIHtcbiAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOSztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2Vzcykge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVmYXVsdC1jYXNlXG4gICAgICAgICAgICAgIHN3aXRjaCAoc2hhcGVEZXRhaWwuZG9jdW1lbnRNb2RlbC5yZWxhdGVkSXRlbXNbMF0uaXRlbVR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5kb2N1bWVudDpcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fRE9DVU1FTlQ7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5wcm9jZXNzOlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19QUk9DRVNTO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBSZWxhdGVkSXRlbVR5cGUuYXJlYTpcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fQVJFQTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLmhhbmRib29rOlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19GT0xERVI7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQ6XG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0lOVEVSQ09OTkVDVEVEX1BST0NFU1M7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRldmlhdGlvbikge1xuICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0RFVklBVElPTjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3QpIHtcbiAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19DSEVDS0xJU1Q7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkICE9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkFjdGl2aXR5KSB7XG4gICAgICAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ3BvaW50ZXInO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGFsbyA9IG5ldyBqb2ludC51aS5IYWxvKHtcbiAgICAgICAgICAgICAgY2VsbFZpZXcsXG4gICAgICAgICAgICAgIHRoZW1lOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICAgIGJveENvbnRlbnQ6IGNvbm5lY3Rpb25OYW1lXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGhhbG8ucmVuZGVyKCk7XG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncmVtb3ZlJyk7XG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncmVzaXplJyk7XG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnY2xvbmUnKTtcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdsaW5rJyk7XG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnZm9yaycpO1xuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3VubGluaycpO1xuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3JvdGF0ZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNoYXBlRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ25vLXJvdGF0aW9uJyk7XG4gICAgICAgIGlmIChzaGFwZUVsZW1lbnQgJiYgc2hhcGVFbGVtZW50Lmxlbmd0aCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGVFbGVtZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXNoYXBlRWxlbWVudFtpXS5jbGFzc0xpc3QuY29udGFpbnMoJ2pvaW50LWZyZWUtdHJhbnNmb3JtJykpIHtcbiAgICAgICAgICAgICAgc2hhcGVFbGVtZW50W2ldLmNsYXNzTGlzdC5hZGQoJ2pvaW50LWZyZWUtdHJhbnNmb3JtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvd1tgZXZlbnRgXVtgdHlwZWBdID09PSAnbW91c2VvdXQnICYmIGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XG4gICAgICAgIGNvbnN0IGhhbG8gPSBuZXcgam9pbnQudWkuSGFsbyh7XG4gICAgICAgICAgY2VsbFZpZXcsXG4gICAgICAgICAgdGhlbWU6ICdkZWZhdWx0JyxcbiAgICAgICAgICBib3hDb250ZW50OiAnJ1xuICAgICAgICB9KTtcbiAgICAgICAgaGFsby5yZW5kZXIoKTtcbiAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3JlbW92ZScpO1xuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncmVzaXplJyk7XG4gICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdjbG9uZScpO1xuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnbGluaycpO1xuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnZm9yaycpO1xuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgndW5saW5rJyk7XG4gICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyb3RhdGUnKTtcbiAgICAgICAgY29uc3Qgc2hhcGVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbm8tcm90YXRpb24nKTtcbiAgICAgICAgaWYgKHNoYXBlRWxlbWVudCAmJiBzaGFwZUVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZUVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHNoYXBlRWxlbWVudFtpXS5jbGFzc0xpc3QucmVtb3ZlKCdqb2ludC1mcmVlLXRyYW5zZm9ybScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogUU1TLTIxMjU6IFNob3cgcHJvY2VzcyBjb25uZWN0IHR5cGUgKi9cbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LklTX1NIT1dfQ09OTkVDVFlQRV0gPSB0cnVlO1xuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gY2VsbFZpZXcubW9kZWwuYXR0cmlidXRlcy5pZDtcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gY2VsbFZpZXcubW9kZWwuYXR0cmlidXRlcy50eXBlO1xuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfRkxPV0NIQVJUX0xPQURJTkddID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLyogUU1TLTE0MDQ6IEN1c3RvbWl6YXRpb24gKi9cbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl0gPSBwYXBlcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9zZVRvb2xzKCkge1xuICAgICAgcGFwZXIucmVtb3ZlVG9vbHMoKTtcbiAgICAgIGpvaW50LnVpLkluc3BlY3Rvci5jbG9zZSgpO1xuICAgICAgam9pbnQudWkuRnJlZVRyYW5zZm9ybS5jbGVhcihwYXBlcik7XG4gICAgICBmcmVlVHJhbnNmb3JtID0gbnVsbDtcbiAgICAgIGpvaW50LnVpLkhhbG8uY2xlYXIocGFwZXIpO1xuXG4gICAgICBjb25zdCBjZWxscyA9IGdyYXBoLmdldENlbGxzKCk7XG4gICAgICBjZWxscy5mb3JFYWNoKChjZWxsKSA9PiB7XG4gICAgICAgIGlmIChjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xuICAgICAgICAgIGNlbGwuc2V0KCd6JywgLTEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NlbGVjdGVkQ2VsbFZpZXdJblNlbGVjdGlvbihzZWxlY3Rpb24pIHtcbiAgICAgIGNvbnN0IG1vZGVscyA9IHNlbGVjdGlvbi5jb2xsZWN0aW9uLnRvQXJyYXkoKSB8fCBbXTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkU2hhcGVJZCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF07XG4gICAgICByZXR1cm4gISFzZWxlY3RlZFNoYXBlSWQgJiYgbW9kZWxzLmZpbHRlcihtb2RlbCA9PiBtb2RlbC5hdHRyaWJ1dGVzLmlkID09IHNlbGVjdGVkU2hhcGVJZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hvd1N0YXR1cyhtZXNzYWdlLCB0eXBlKSB7XG4gICAgICAkKCcuc3RhdHVzJykucmVtb3ZlQ2xhc3MoJ2luZm8gZXJyb3Igc3VjY2VzcycpLmFkZENsYXNzKHR5cGUpLmh0bWwobWVzc2FnZSk7XG4gICAgICAkKCcjc3RhdHVzYmFyLWNvbnRhaW5lcicpXG4gICAgICAgIC5kZXF1ZXVlKClcbiAgICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKVxuICAgICAgICAuZGVsYXkoMzAwMClcbiAgICAgICAgLnF1ZXVlKCgpID0+IHtcbiAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGxpbmtDb25zdHJ1Y3Rvcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICAgIGNvbnN0IGxpbmsyID0gbmV3IGxpbmtDb25zdHJ1Y3Rvcih7XG4gICAgICAgIHNvdXJjZTogbGluay5zb3VyY2UoKSxcbiAgICAgICAgdGFyZ2V0OiBsaW5rLnRhcmdldCgpLFxuICAgICAgICB2ZXJ0aWNlczogbGluay52ZXJ0aWNlcygpXG4gICAgICB9KTtcbiAgICAgIGxpbmsucmVtb3ZlKHsgcmVwbGFjZUxpbms6IHRydWUgfSk7XG4gICAgICBsaW5rMi5zZXQoJ3onLCAtMSk7XG4gICAgICBsaW5rMi5hZGRUbyhncmFwaCk7XG4gICAgfVxuXG4gICAgZ3JhcGgub24oJ2NoYW5nZScsIChjZWxsLCBvcHQpID0+IHtcbiAgICAgIHRoaXMub25DaGFuZ2VUZXh0SW5zaWRlKGNlbGwpO1xuICAgICAgdGhpcy5vbkNoYW5nZUxpbmtMYWJlbChjZWxsLCAxMik7XG4gICAgICB0aGlzLm9uQ2hhbmdlQWxsaWdtZW50KGNlbGwsIG9wdCk7XG4gICAgICBpZiAoIW9wdC5pbnNwZWN0b3IgfHwgIWZyZWVUcmFuc2Zvcm0gfHwgY2VsbC5nZXQoJ3R5cGUnKSAhPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbWluU2l6ZSA9IGNlbGwuZ2V0TWluaW1hbFNpemUoKTtcbiAgICAgIGZyZWVUcmFuc2Zvcm0ub3B0aW9ucy5taW5XaWR0aCA9IG1pblNpemUud2lkdGg7XG4gICAgICBmcmVlVHJhbnNmb3JtLm9wdGlvbnMubWluSGVpZ2h0ID0gbWluU2l6ZS5oZWlnaHQ7XG4gICAgfSk7XG5cbiAgICAvKiBUT09MQkFSICovXG4gICAgY29uc3QgdG9vbGJhciA9IG5ldyBqb2ludC51aS5Ub29sYmFyKHtcbiAgICAgIHRvb2xzOiB0b29sYmFyQ29uZmlnLnRvb2xzLFxuICAgICAgcmVmZXJlbmNlczoge1xuICAgICAgICBwYXBlclNjcm9sbGVyLFxuICAgICAgICBjb21tYW5kTWFuYWdlclxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgdG9vbGJhckNvbW1hbmRzID0ge1xuICAgICAgdG9KU09OOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdpbmRvd0ZlYXR1cmVzID0gJ21lbnViYXI9bm8sbG9jYXRpb249bm8scmVzaXphYmxlPXllcyxzY3JvbGxiYXJzPXllcyxzdGF0dXM9bm8nO1xuICAgICAgICBjb25zdCB3aW5kb3dOYW1lID0gXy51bmlxdWVJZCgnanNvbl9vdXRwdXQnKTtcbiAgICAgICAgY29uc3QganNvbldpbmRvdyA9IHdpbmRvdy5vcGVuKCcnLCB3aW5kb3dOYW1lLCB3aW5kb3dGZWF0dXJlcyk7XG5cbiAgICAgICAganNvbldpbmRvdy5kb2N1bWVudC53cml0ZShKU09OLnN0cmluZ2lmeShncmFwaC50b0pTT04oKSkpO1xuICAgICAgfSxcbiAgICAgIGxvYWRHcmFwaDogKCkgPT4ge1xuICAgICAgICBnZEF1dGgoKCkgPT4ge1xuICAgICAgICAgIHNob3dTdGF0dXMoJ2xvYWRpbmcuLicsICdpbmZvJyk7XG4gICAgICAgICAgZ2RMb2FkKChuYW1lLCBjb250ZW50KSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICAgICAgICAgICAgZ3JhcGguZnJvbUpTT04oanNvbik7XG4gICAgICAgICAgICAgIGNvbnN0IGVsRmlsZU5hbWUgPSA8SFRNTEJ1dHRvbkVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVOYW1lJyk7XG4gICAgICAgICAgICAgIGVsRmlsZU5hbWUudmFsdWUgPSBuYW1lLnJlcGxhY2UoLy5qc29uJC8sICcnKTtcbiAgICAgICAgICAgICAgc2hvd1N0YXR1cygnbG9hZGVkLicsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ2ZhaWxlZC4nLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9LFxuXG4gICAgICBzYXZlR3JhcGg6ICgpID0+IHtcbiAgICAgICAgZ2RBdXRoKCgpID0+IHtcbiAgICAgICAgICBzaG93U3RhdHVzKCdzYXZpbmcuLicsICdpbmZvJyk7XG4gICAgICAgICAgLy8gbGV0IG5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZU5hbWUnKS52YWx1ZTtcbiAgICAgICAgICBjb25zdCBuYW1lID0gPEhUTUxCdXR0b25FbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlTmFtZScpO1xuICAgICAgICAgIGdkU2F2ZShuYW1lLnZhbHVlLCBKU09OLnN0cmluZ2lmeShncmFwaC50b0pTT04oKSksIChmaWxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgICBzaG93U3RhdHVzKCdzYXZlZC4nLCAnc3VjY2VzcycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2hvd1N0YXR1cygnZmFpbGVkLicsICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH0sXG4gICAgICBvblNlbGVjdGVkOiAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNUZW1wKSB7XG4gICAgICAgICAgdGhpcy5qc29uVGVtcENvbnRlbnQgPSB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQ7XG4gICAgICAgICAgdGhpcy5pc1RlbXAgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQuanNvbkNvbnRlbnQpIHtcbiAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfRkxPV0NIQVJUX0lEXSA9IGV2ZW50LmZsb3dDaGFydElkO1xuICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9KU09OX0NPTlRFTlRdID0gZXZlbnQuanNvbkNvbnRlbnQ7XG4gICAgICAgICAgaWYgKHRoaXMuaXNTaG93Q29uZmlybU1lc3NhZ2UoKSkge1xuICAgICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LkNIQU5HSU5HX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5ORVhUX0NIQU5HSU5HX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmVzZXRDZWxsVmlldygpO1xuICAgICAgICB9XG4gICAgICAgIGRpYWdyYW1UZW1wbGF0ZS5mbG93Q2hhcnRJZCA9IGV2ZW50LmZsb3dDaGFydElkO1xuICAgICAgfSxcbiAgICAgIG9uQ2xlYXI6ICgpID0+IHtcbiAgICAgICAgZ3JhcGguY2xlYXIoKTtcbiAgICAgICAgdGhpcy5yZXNldENlbGxWaWV3KCk7XG4gICAgICB9LFxuICAgICAgb25EZWxldGVUZW1wbGF0ZTogKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGlhZ3JhbVRlbXBsYXRlLmZsb3dDaGFydElkICYmXG4gICAgICAgICAgZGlhZ3JhbVRlbXBsYXRlLmZsb3dDaGFydElkICE9PSAnJyAmJlxuICAgICAgICAgIGRpYWdyYW1UZW1wbGF0ZS5mbG93Q2hhcnRJZCAhPT0gZ3VpZEhlbHBlci5lbXB0eVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmlzRGVsZXRlVGVtcGxhdGUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaXNEaXNhYmxlVG9vbGJhciA9IHRydWU7XG4gICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LkRFTEVURV9URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5NVVNUX1NFTEVDVF9URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBvblNhdmVBc1RlbXBsYXRlOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNTYXZlQXNUZW1wbGF0ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlVG9vbGJhciA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmlzVGVtcCkge1xuICAgICAgICAgIHRoaXMuanNvblRlbXBDb250ZW50ID0gdGhpcy5qc29uT3JpZ2luYWxDb250ZW50O1xuICAgICAgICAgIHRoaXMuaXNUZW1wID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LlNBVkVfQVNfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcbiAgICAgIH0sXG5cbiAgICAgIG9uUmVzZXRUb1RlbXBUZW1wbGF0ZTogKCkgPT4ge1xuICAgICAgICB0aGlzLmlzU2VsZWN0ZWRUZW1wbGF0ZSA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV07XG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWRUZW1wbGF0ZSkge1xuICAgICAgICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0Rpc2FibGVUb29sYmFyID0gdHJ1ZTtcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuUkVTRVRfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgY2hhbmdlU25hcExpbmVzKGNoZWNrZWQpIHtcbiAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICBzbmFwbGluZXMuc3RhcnRMaXN0ZW5pbmcoKTtcbiAgICAgICAgICBzdGVuY2lsLm9wdGlvbnMuc25hcGxpbmVzID0gdGhpcy5zbmFwbGluZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc25hcGxpbmVzLnN0b3BMaXN0ZW5pbmcoKTtcbiAgICAgICAgICBzdGVuY2lsLm9wdGlvbnMuc25hcGxpbmVzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgYXBwbHlPblNlbGVjdGlvbihtZXRob2QpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3RvRnJvbnQnKSB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IHNlbGVjdGlvbi5jb2xsZWN0aW9uLm1vZGVsc1swXS5nZXQoJ3R5cGUnKTtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ3JhcGguc3RhcnRCYXRjaCgnc2VsZWN0aW9uJyk7XG4gICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLm1vZGVscy5mb3JFYWNoKChtb2RlbCkgPT4ge1xuICAgICAgICAgIG1vZGVsW21ldGhvZF0oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGdyYXBoLnN0b3BCYXRjaCgnc2VsZWN0aW9uJyk7XG4gICAgICB9LFxuICAgICAgdG9nZ2xlRnVsbHNjcmVlbjogKCkgPT4ge1xuICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZF49XCJjZGstb3ZlcmxheS1cIl0nKVswXSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXNGdWxsU2NyZWVuID0gIXRoaXMuaXNGdWxsU2NyZWVuO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRnVsbFNjcmVlbikge1xuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZF49XCJjZGstb3ZlcmxheS1cIl0nKVswXT8uY2xhc3NMaXN0LnJlbW92ZSgnY2xvc2UtZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfY2RrLW92ZXJsYXknKTtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcicpWzBdPy5jbGFzc0xpc3QucmVtb3ZlKCdqdXN0aWZ5LWNvbnRlbnRfY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXInKTtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGVmdHBhbmVsJyk/LmNsYXNzTGlzdC5hZGQoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhbmVsJyk7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JpZ2h0cGFuZWwnKT8uY2xhc3NMaXN0LmFkZCgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFuZWwnKTtcblxuICAgICAgICAgIGlmICh0aGlzLmlzRXhwYW5kZWRQYW5lbCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKT8uY2xhc3NMaXN0LmFkZCgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFwZXJwYW5lbCcpPy5jbGFzc0xpc3QuYWRkKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYXBlcnBhbmVsLWV4cGFuZHBhbmVsJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZF49XCJjZGstb3ZlcmxheS1cIl0nKVswXT8uY2xhc3NMaXN0LmFkZCgnY2xvc2UtZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfY2RrLW92ZXJsYXknKTtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcicpWzBdPy5jbGFzc0xpc3QuYWRkKCdqdXN0aWZ5LWNvbnRlbnRfY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXInKTtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGVmdHBhbmVsJyk/LmNsYXNzTGlzdC5yZW1vdmUoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhbmVsJyk7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JpZ2h0cGFuZWwnKT8uY2xhc3NMaXN0LnJlbW92ZSgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFuZWwnKTtcblxuICAgICAgICAgIGlmICh0aGlzLmlzRXhwYW5kZWRQYW5lbCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKT8uY2xhc3NMaXN0LnJlbW92ZSgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbCcpO1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKS5zdHlsZS5oZWlnaHQgPSAnNDAwcHgnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFwZXJwYW5lbCcpPy5jbGFzc0xpc3QucmVtb3ZlKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYXBlcnBhbmVsLWV4cGFuZHBhbmVsJyk7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFwZXJwYW5lbCcpLnN0eWxlLmhlaWdodCA9ICc1MDBweCc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB0b29sYmFyLm9uKHtcbiAgICAgICd0b2pzb246cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLnRvSlNPTixcbiAgICAgICdsb2FkOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5sb2FkR3JhcGgsXG4gICAgICAnc2F2ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMuc2F2ZUdyYXBoLFxuICAgICAgJ2NsZWFyOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5vbkNsZWFyLFxuICAgICAgJ3ByaW50OnBvaW50ZXJjbGljayc6IF8uYmluZChwYXBlci5wcmludCwgcGFwZXIpLFxuICAgICAgJ3NhdmVBc1RlbXBsYXRlOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5vblNhdmVBc1RlbXBsYXRlLFxuICAgICAgJ3NlbGVjdFRlbXBsYXRlOm9wdGlvbjpzZWxlY3QnOiB0b29sYmFyQ29tbWFuZHMub25TZWxlY3RlZCxcbiAgICAgICdkZWxldGVUZW1wbGF0ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25EZWxldGVUZW1wbGF0ZSxcbiAgICAgICdyZXNldFRvVGVtcFRlbXBsYXRlOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5vblJlc2V0VG9UZW1wVGVtcGxhdGUsXG4gICAgICAndG8tZnJvbnQ6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLmFwcGx5T25TZWxlY3Rpb24uYmluZCh0aGlzLCAndG9Gcm9udCcpLFxuICAgICAgJ3RvLWJhY2s6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLmFwcGx5T25TZWxlY3Rpb24uYmluZCh0aGlzLCAndG9CYWNrJyksXG4gICAgICAnc25hcGxpbmU6Y2hhbmdlJzogdG9vbGJhckNvbW1hbmRzLmNoYW5nZVNuYXBMaW5lcy5iaW5kKHRoaXMpLFxuICAgICAgJ2dyaWQtc2l6ZTpjaGFuZ2UnOiBwYXBlci5zZXRHcmlkU2l6ZS5iaW5kKHBhcGVyKSxcbiAgICAgICdmdWxsc2NyZWVuOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy50b2dnbGVGdWxsc2NyZWVuXG4gICAgfSk7XG5cbiAgICAkKCcjdG9vbGJhci1jb250YWluZXInKS5odG1sKCcnKTtcbiAgICB0b29sYmFyLnJlbmRlcigpLiRlbC5hcHBlbmRUbygnI3Rvb2xiYXItY29udGFpbmVyJyk7XG5cbiAgICBjb25zdCB6b29tVG9vbCA9IG5ldyBqb2ludC51aS5Ub29sYmFyKHtcbiAgICAgIC8vIGluaXRpIGFsaXplIHRvb2xzIHdpdGggZGVmYXVsdCBzZXR0aW5nc1xuICAgICAgdG9vbHM6IFsnem9vbVRvRml0JywgJ3pvb21JbicsICd6b29tT3V0J10sXG4gICAgICByZWZlcmVuY2VzOiB7XG4gICAgICAgIHBhcGVyU2Nyb2xsZXIsXG4gICAgICAgIGNvbW1hbmRNYW5hZ2VyXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB6b29tVG9vbC5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyN6b29tVG9vbGJhcicpO1xuXG4gICAgbmV3IGpvaW50LnVpLlRvb2x0aXAoe1xuICAgICAgdGFyZ2V0OiAnW2RhdGEtdG9vbHRpcF0nLFxuICAgICAgY29udGVudChlbCkge1xuICAgICAgICByZXR1cm4gZWwuZGF0YXNldC50b29sdGlwO1xuICAgICAgfSxcbiAgICAgIHRvcDogJy5qb2ludC10b29sYmFyJyxcbiAgICAgIHBhZGRpbmc6IDEwLFxuICAgICAgZGlyZWN0aW9uOiAndG9wJ1xuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHRvb2x0aXBzIGZvciBhbGwgdGhlIHNoYXBlcyBpbiBzdGVuY2lsLlxuICAgIHN0ZW5jaWxcbiAgICAgIC5nZXRHcmFwaCgpXG4gICAgICAuZ2V0KCdjZWxscycpXG4gICAgICAuZWFjaCgoY2VsbCkgPT4ge1xuICAgICAgICBuZXcgam9pbnQudWkuVG9vbHRpcCh7XG4gICAgICAgICAgdGFyZ2V0OiBgLmpvaW50LXN0ZW5jaWwgW21vZGVsLWlkPVwiJHtjZWxsLmlkfVwiXWAsXG4gICAgICAgICAgY29udGVudDogY2VsbC5nZXQoJ3R5cGUnKS5zcGxpdCgnLicpWzFdLFxuICAgICAgICAgIGJvdHRvbTogJy5qb2ludC1zdGVuY2lsJyxcbiAgICAgICAgICBkaXJlY3Rpb246ICdib3R0b20nLFxuICAgICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIE9iamVjdC5hc3NpZ24oam9pbnQuc2hhcGVzLmJwbW4uaWNvbnMsIHRoaXMuYnVpbGROZXdJY29ucygpKTtcbiAgICAvKiBMb2FkICBwcm9jZXNzIGRpZ3JhbSAqL1xuICAgIHRoaXMubG9hZFByb2Nlc3NEaWFncmFtKGpzb25Db250ZW50KTtcbiAgICB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShncmFwaC50b0pTT04oKSk7XG4gICAgcGFwZXJTY3JvbGxlci5wb3NpdGlvbkNvbnRlbnQoJ3RvcC1sZWZ0JywgeyBwYWRkaW5nOiA1MCwgdXNlTW9kZWxHZW9tZXRyeTogdHJ1ZSB9KTtcblxuICAgIC8qIFNldCBnIHJhcGggb2JqZWN0ICovXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXSA9IGdyYXBoO1xuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl0gPSBwYXBlcjtcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdID0gcGFwZXJTY3JvbGxlcjtcbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuRElBR1JBTV9MT0FERUQsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcbiAgfVxuXG4gIGJ1aWxkTmV3SWNvbnMoeyBjb2xvciA9ICcjMDAwJyB9ID0ge30pIHtcbiAgICBjb25zdCBzdmdJY29ucyA9IHtcbiAgICAgIG1lc3NhZ2UxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjEyIDEyIDE2IDE2XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuMlwiIGQ9XCJNMTIuNSAxNS4zMTN2OS4zNzRoMTV2LTkuMzc1em0wIDBsNy41IDUuNjI0IDcuNS01LjYyNVwiLz48L3N2Zz5gLFxuICAgICAgbWVzc2FnZTI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMTIgMTIgMTYgMTZcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBkPVwiTTEyLjUgMTQuMzQ0bDcuNSA1LjYyNSA3LjUtNS42MjV6bTAgLjkzN3Y5LjM3NWgxNXYtOS4zNzVMMjAgMjAuOTA2elwiLz48L3N2Zz5gLFxuICAgICAgdGltZXIxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxnIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIj48Y2lyY2xlIGN4PVwiMjBcIiBjeT1cIjIwXCIgcj1cIjEwXCIvPjxwYXRoIGQ9XCJNMjAgMTB2M201LTJsLTEuNSAzbTUuNSAxbC0zIDEuNW00IDMuNWgtM20yIDVsLTMtMS41TTI1IDI5bC0xLjUtM00yMCAzMHYtM20tNSAybDEuNS0zTTExIDI1bDMtMS41TTEwIDIwaDNtLTItNWwzIDEuNW0xLTUuNWwxLjUgM201LjUtMWwtMiA3aDRcIi8+PC9nPjwvc3ZnPmAsXG4gICAgICBjb25kaXRpb25hbDE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiA+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTEuNTYzIDExLjU2M2gxNi44NzR2MTYuODc0SDExLjU2M1YxMS41NjNtMi44MTMgMi44MTNoMTEuMjVtLTExLjI1IDMuNzVoMTEuMjVtLTExLjI1IDMuNzVoMTEuMjVtLTExLjI1IDMuNzVoMTEuMjV6XCIvPjwvc3ZnPmAsXG4gICAgICBsaW5rMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xNC40MDYgMTguMTI1aDguNDM4di0yLjgxM0wyNy41MyAyMGwtNC42ODcgNC42ODh2LTIuODEzaC05LjM3NXYtMy43NVwiLz48L3N2Zz5gLFxuICAgICAgbGluazI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTE0LjQwNiAxOC4xMjVoOC40Mzh2LTIuODEzTDI3LjUzIDIwbC00LjY4NyA0LjY4OHYtMi44MTNoLTkuMzc1di0zLjc1XCIvPjwvc3ZnPmAsXG4gICAgICBzaWduYWwxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMy4xNyAyNC44NTFoMTMuNzA2bC02Ljg1My0xMS44NzktNi44NTQgMTEuODh6XCIvPjwvc3ZnPmAsXG4gICAgICBzaWduYWwyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTMuMTcgMjQuODUxaDEzLjcwNmwtNi44NTMtMTEuODc5LTYuODU0IDExLjg4elwiLz48L3N2Zz5gLFxuICAgICAgZXJyb3IxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTI2LjQgMTUuNDU1bC0zLjIzOCAxMi41OEwxNy43IDE4LjM3IDEzLjc2IDIzLjhsMy40NzgtMTIuNDEyIDUuNTc2IDguNzIgMy41ODYtNC42NTJ6XCIvPjwvc3ZnPmAsXG4gICAgICBlcnJvcjI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTI2LjQgMTUuNDU1bC0zLjIzOCAxMi41OEwxNy43IDE4LjM3IDEzLjc2IDIzLjhsMy40NzgtMTIuNDEyIDUuNTc2IDguNzIgMy41ODYtNC42NTJ6XCIvPjwvc3ZnPmAsXG4gICAgICBlc2NhbGF0aW9uMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0yMCAxMy4yMTlsNS42MjUgMTQuMDYyTDIwIDIwLjk1M2wtNS42MjUgNi4zMjh6XCIvPjwvc3ZnPmAsXG4gICAgICBlc2NhbGF0aW9uMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMjAgMTMuMjE5bDUuNjI1IDE0LjA2MkwyMCAyMC45NTNsLTUuNjI1IDYuMzI4elwiLz48L3N2Zz5gLFxuICAgICAgdGVybWluYXRpb24xOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxjaXJjbGUgY3g9XCIyMFwiIGN5PVwiMjBcIiByPVwiMTAuNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+PC9zdmc+YCxcbiAgICAgIHRlcm1pbmF0aW9uMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48Y2lyY2xlIGN4PVwiMjBcIiBjeT1cIjIwXCIgcj1cIjEwLjVcIiBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz48L3N2Zz5gLFxuICAgICAgY29tcGVuc2F0aW9uMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xOSAxMy40Mzh2MTMuMTI0TDEyLjQzNyAyMCAxOSAxMy40MzdtNi41NjMgMHYxMy4xMjZMMTkgMjBsNi41NjMtNi41NjN6XCIvPjwvc3ZnPmAsXG4gICAgICBjb21wZW5zYXRpb24yOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xOSAxMy40Mzh2MTMuMTI0TDEyLjQzNyAyMCAxOSAxMy40MzdtNi41NjMgMHYxMy4xMjZMMTkgMjBsNi41NjMtNi41NjN6XCIvPjwvc3ZnPmAsXG4gICAgICBjYW5jZWwxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTExLjI4NCAxNC4yNzRsMi44NjctMi44NjggNS43MzUgNS43MzUgNS43MzUtNS43MzUgMi44NjggMi44NjgtNS43MzUgNS43MzUgNS43MzUgNS43MzUtMi44NjggMi44NjctNS43MzUtNS43MzUtNS43MzUgNS43MzUtMi44NjctMi44NjcgNS43MzUtNS43MzUtNS43MzUtNS43MzV6XCIvPjwvc3ZnPmAsXG4gICAgICBjYW5jZWwyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMS4yODQgMTQuMjc0bDIuODY3LTIuODY4IDUuNzM1IDUuNzM1IDUuNzM1LTUuNzM1IDIuODY4IDIuODY4LTUuNzM1IDUuNzM1IDUuNzM1IDUuNzM1LTIuODY4IDIuODY3LTUuNzM1LTUuNzM1LTUuNzM1IDUuNzM1LTIuODY3LTIuODY3IDUuNzM1LTUuNzM1LTUuNzM1LTUuNzM1elwiLz48L3N2Zz5gLFxuICAgICAgbXVsdGlwbGUxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTI0LjUyIDI2LjM5aC05LjQ0M2wtMi45MTgtOC45ODIgNy42NC01LjU1IDcuNjQgNS41NTEtMi45MTkgOC45OHpcIi8+PC9zdmc+YCxcbiAgICAgIG11bHRpcGxlMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMjQuNTIgMjYuMzloLTkuNDQzbC0yLjkxOC04Ljk4MiA3LjY0LTUuNTUgNy42NCA1LjU1MS0yLjkxOSA4Ljk4elwiLz48L3N2Zz5gLFxuICAgICAgcGFyYWxsZWwxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTExLjM0NCAxNy4yMDN2NS42MjVoNS44NnY2LjMyOGg1LjYyNHYtNi4zMjhoNi4zMjh2LTUuNjI1aC02LjMyOHYtNS44NmgtNS42MjV2NS44NnpcIi8+PC9zdmc+YCxcbiAgICAgIHBhcmFsbGVsMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTEuMzQ0IDE3LjIwM3Y1LjYyNWg1Ljg2djYuMzI4aDUuNjI0di02LjMyOGg2LjMyOHYtNS42MjVoLTYuMzI4di01Ljg2aC01LjYyNXY1Ljg2elwiLz48L3N2Zz5gXG4gICAgfTtcblxuICAgIGNvbnN0IGljb25zID0ge307XG5cbiAgICBPYmplY3Qua2V5cyhzdmdJY29ucykuZm9yRWFjaCgoaWNvbk5hbWUpID0+IHtcbiAgICAgIGljb25zW2ljb25OYW1lXSA9IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoc3ZnSWNvbnNbaWNvbk5hbWVdKX1gO1xuICAgIH0pO1xuICAgIHJldHVybiBpY29ucztcbiAgfVxuXG4gIGxvYWRQcm9jZXNzRGlhZ3JhbShqc29uQ29udGVudD86IHN0cmluZykge1xuICAgIGlmICghanNvbkNvbnRlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGguZnJvbUpTT04oanNvbkNvbnRlbnQpO1xuICB9XG5cbiAgYWRkSXRlbVRlbXBsYXRlKGZsb3dDaGFydElkPzogc3RyaW5nLCBkaWFncmFtVGVtcGxhdGU/OiBhbnkpIHtcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xuICAgICAgfSk7XG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcbiAgICAgICAgICBpbmRleDogMSxcbiAgICAgICAgICBjb250ZW50OiBkaWFncmFtVGVtcGxhdGUudGVtcGxhdGVOYW1lLFxuICAgICAgICAgIGZsb3dDaGFydElkLFxuICAgICAgICAgIG5hbWU6IGRpYWdyYW1UZW1wbGF0ZS5uYW1lLFxuICAgICAgICAgIGpzb25Db250ZW50OiBkaWFncmFtVGVtcGxhdGUuanNvbkNvbnRlbnQsXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYXJyU2VsZWN0WzBdLm9wdGlvbnMuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHguY29udGVudCA9PT0gb3B0aW9uLmNvbnRlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVNlbGVjdEl0ZW0oZmxvd0NoYXJ0SWQ/OiBzdHJpbmcpIHtcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xuICAgICAgfSk7XG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XG4gICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnNwbGljZShcbiAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKGkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpLmZsb3dDaGFydElkID09PSBmbG93Q2hhcnRJZDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0VGVtcEdyYXBoKCkge1xuICAgIGlmICh0aGlzLmpzb25UZW1wQ29udGVudCkge1xuICAgICAgdGhpcy5sb2FkUHJvY2Vzc0RpYWdyYW0oSlNPTi5wYXJzZSh0aGlzLmpzb25UZW1wQ29udGVudCkpO1xuICAgIH1cbiAgICB0aGlzLmlzVGVtcCA9IHRydWU7XG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XG4gICAgdGhpcy5pc0Rpc2FibGVUb29sYmFyID0gZmFsc2U7XG4gIH1cblxuICBnZXRPcmlnaW5Gb3JTZWxmKCkge1xuICAgIHJldHVybiAnKic7XG4gIH1cblxuICBzZXREZWZhdWx0U2VsZWN0ZWRWYWx1ZSgpIHtcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xuICAgICAgfSk7XG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XG4gICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zWzBdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYHNlbGVjdC1ib3gtc2VsZWN0aW9uYClbMF07XG4gICAgICAgIGxpc3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1vcHRpb24tY29udGVudGApWzBdLmlubmVySFRNTCA9IEZsb3dDaGFydENvbnN0LlNFTEVDVF9URU1QTEFURTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRJdGVtRmxvd0NoYXJ0SWQoZmxvd0NoYXJ0SWQ/OiBzdHJpbmcpIHtcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xuICAgICAgfSk7XG4gICAgICBpZiAoYXJyU2VsZWN0ICYmIGFyclNlbGVjdFswXS5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5mb3JFYWNoKCh4LCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmICh4LmZsb3dDaGFydElkID09PSBmbG93Q2hhcnRJZCkge1xuICAgICAgICAgICAgeC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1zZWxlY3Rpb25gKVswXTtcbiAgICAgICAgICAgIGxpc3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1vcHRpb24tY29udGVudGApWzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICBsaXN0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYHNlbGVjdC1ib3gtb3B0aW9uLWNvbnRlbnRgKVswXS5pbm5lckhUTUwgPSB4LmNvbnRlbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHguc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzU2hvd0NvbmZpcm1NZXNzYWdlKCkge1xuICAgIGNvbnN0IG15R3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xuICAgIGNvbnN0IGpzb24gPSBteUdyYXBoLnRvSlNPTigpO1xuICAgIGlmIChqc29uLmNlbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LklTX05PVF9TSE9XX0FHQUlOXSA9IHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghd2luZG93W0Zsb3dDaGFydENvbnN0LklTX05PVF9TSE9XX0FHQUlOXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2V0VHJhbnNpdGlvblBvaW50KGpzb25Db250ZW50OiBvYmplY3QsIHBhcGVyU2Nyb2xsZXI6IGFueSkge1xuICAgIGlmIChqc29uQ29udGVudCkge1xuICAgICAgY29uc3QgY2VsbHMgPSBqc29uQ29udGVudFtgY2VsbHNgXTtcbiAgICAgIGlmIChjZWxscykge1xuICAgICAgICBsZXQgeCA9IDA7XG4gICAgICAgIGxldCB5ID0gMDtcbiAgICAgICAgY2VsbHMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgIGlmIChlLnBvc2l0aW9uICYmIGUucG9zaXRpb24pIHtcbiAgICAgICAgICAgIGlmICh4ID09PSAwICYmIHkgPT09IDApIHtcbiAgICAgICAgICAgICAgeCA9IGUucG9zaXRpb24ueDtcbiAgICAgICAgICAgICAgeSA9IGUucG9zaXRpb24ueTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnBvc2l0aW9uLnggPCB4KSB7XG4gICAgICAgICAgICAgIHggPSBlLnBvc2l0aW9uLng7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5wb3NpdGlvbi55IDwgeSkge1xuICAgICAgICAgICAgICB5ID0gZS5wb3NpdGlvbi55O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHggIT09IDAgJiYgeSAhPT0gMCkge1xuICAgICAgICAgIHggPSB4ID4gMjAgPyB4IC0gMjAgOiB4O1xuICAgICAgICAgIHkgPSB5ID4gMjAgPyB5IC0gMjAgOiB5O1xuICAgICAgICAgIHBhcGVyU2Nyb2xsZXIudHJhbnNpdGlvblRvUG9pbnQoeCwgeSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvcGVuU2hhcGVGdW5jdGlvbmFsaXR5KExBTkc6IGFueSkge1xuICAgIGNvbnN0IG15Q2VsbFZpZXcgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXTtcbiAgICBpZiAoISFteUNlbGxWaWV3KSB7XG4gICAgICBqb2ludC51aS5JbnNwZWN0b3IuY2xvc2UoKTtcbiAgICAgIGNvbnN0IGlucHV0cyA9IEluc3BlY3RvckZ1bmN0aW9uLmdldEluc3BlY3RvckNvbmZpZ3VyYXRpb24oYnBtbjIsIExBTkcsIG51bGwpO1xuICAgICAgY29uc3QgY2VsbCA9IG15Q2VsbFZpZXcubW9kZWw7XG4gICAgICBjb25zdCB0eXBlID0gY2VsbC5nZXQoJ3R5cGUnKTtcbiAgICAgIGpvaW50LnVpLkluc3BlY3Rvci5jcmVhdGUoJyNpbnNwZWN0b3ItY29udGFpbmVyJywge1xuICAgICAgICBjZWxsLFxuICAgICAgICBpbnB1dHM6IGlucHV0c1t0eXBlXSxcbiAgICAgICAgZ3JvdXBzOiB7XG4gICAgICAgICAgZ2VuZXJhbDogeyBsYWJlbDogdHlwZSwgaW5kZXg6IDEgfSxcbiAgICAgICAgICBkZWZhdWx0czogeyBpbmRleDogMiB9LFxuICAgICAgICAgIGZvbnRzaXplOiB7IGluZGV4OiAzIH0sXG4gICAgICAgICAgYXBwZWFyYW5jZTogeyBpbmRleDogNCB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldFpvb21Ub0ZpdChlZGl0TW9kZTogbnVtYmVyKSB7XG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XG4gICAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSX1NDUk9MTEVSXTtcbiAgICAgIHBhcGVyU2Nyb2xsZXIuem9vbVRvRml0KHsgcGFkZGluZzogMjAsIHNjYWxlR3JpZDogMC4yLCBtaW5TY2FsZTogMC4yLCBtYXhTY2FsZTogNSB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRQYXBlckNlbnRlcihlZGl0TW9kZTogbnVtYmVyKSB7XG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XG4gICAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSX1NDUk9MTEVSXTtcbiAgICAgIHBhcGVyU2Nyb2xsZXIuY29udGVudFRvQ2VudGVyKHsgcGFkZGluZzogMjAsIHNjYWxlR3JpZDogMC4yLCBtaW5TY2FsZTogMC4yLCBtYXhTY2FsZTogNSB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRQYXBlclRvcExlZnQoZWRpdE1vZGU6IG51bWJlcikge1xuICAgIGlmIChlZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldykge1xuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XG4gICAgICBwYXBlclNjcm9sbGVyLmNvbnRlbnRUb1RvcExlZnQoeyBwYWRkaW5nOiA1MCwgc2NhbGVHcmlkOiAwLjIsIG1pblNjYWxlOiAwLjIsIG1heFNjYWxlOiA1IH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldFNjcm9sbFRvQ29udGVudCgpIHtcbiAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tgZ3JhcGhgXTtcbiAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSX1NDUk9MTEVSXTtcbiAgICBpZiAoZ3JhcGggJiYgcGFwZXJTY3JvbGxlcikge1xuICAgICAgY29uc3QganNvbkNvbnRlbnRPYmogPSBncmFwaC50b0pTT04oKTtcbiAgICAgIGlmIChqc29uQ29udGVudE9iaiAmJiBqc29uQ29udGVudE9iai5jZWxscy5sZW5ndGgpIHtcbiAgICAgICAgcGFwZXJTY3JvbGxlci5zY3JvbGxUb0NvbnRlbnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuY2VudGVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2VUZXh0SW5zaWRlKGNlbGw6IGFueSkge1xuICAgIGlmIChjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuRXZlbnQnKSB7XG4gICAgICBpZiAoY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLnRleHQuc3R5bGVbJ3RleHQtaW5zaWRlJ10pIHtcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsLnRleHRWZXJ0aWNhbEFuY2hvciA9ICdtaWRkbGUnO1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZXaWR0aCA9ICcyMCUnO1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZIZWlnaHQgPSAnMjAlJztcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0V3JhcCddID0ge1xuICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICBlbGxpcHNpczogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsLnRleHRWZXJ0aWNhbEFuY2hvciA9ICd0b3AnO1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZXaWR0aCA9ICc3MCUnO1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZIZWlnaHQgPSAnNzAlJztcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0V3JhcCddID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkdhdGV3YXknIHx8XG4gICAgICBjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuQ29udmVyc2F0aW9uJyB8fFxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkRhdGFPYmplY3QnIHx8XG4gICAgICBjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuRGF0YVN0b3JlJ1xuICAgICkge1xuICAgICAgaWYgKGNlbGwuYXR0cmlidXRlcy5hdHRycy50ZXh0LnN0eWxlWyd0ZXh0LWluc2lkZSddKSB7XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAnbWlkZGxlJztcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0V3JhcCddID0ge1xuICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICBlbGxpcHNpczogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsLnRleHRWZXJ0aWNhbEFuY2hvciA9ICd0b3AnO1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWxbJ3RleHRXcmFwJ10gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlTGlua0xhYmVsKGNlbGw6IGFueSwgZGVmU2l6ZTogbnVtYmVyKSB7XG4gICAgaWYgKGNlbGwuaXNMaW5rKCkpIHtcbiAgICAgIGxldCBzaXplID0gZGVmU2l6ZTtcbiAgICAgIGxldCByZWZQb3MgPSAwO1xuICAgICAgY29uc3QgbGlua0lkID0gY2VsbC5pZDtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBncmFwaC5nZXRMaW5rcygpLmV2ZXJ5KGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChsaW5rSWQgPT09IGUuaWQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVmUG9zICs9IDE7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgICBpZiAoXG4gICAgICAgIGdyYXBoLmdldExpbmtzKClbcmVmUG9zXT8uYXR0cmlidXRlcy5hdHRycy50ZXh0ICYmXG4gICAgICAgIGdyYXBoLmdldExpbmtzKClbcmVmUG9zXT8uYXR0cmlidXRlcy5hdHRycy50ZXh0Wydmb250LXNpemUnXVxuICAgICAgKSB7XG4gICAgICAgIHNpemUgPSBncmFwaC5nZXRMaW5rcygpW3JlZlBvc10/LmF0dHJpYnV0ZXMuYXR0cnMudGV4dFsnZm9udC1zaXplJ107XG4gICAgICB9XG4gICAgICBncmFwaC5nZXRMaW5rcygpW3JlZlBvc10/LnByb3AoJ2xhYmVscy8wL2F0dHJzL2xhYmVsL2ZvbnRTaXplJywgc2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2VBbGxpZ21lbnQoY2VsbDogYW55LCBvcHQ6IGFueSkge1xuICAgIGlmIChjZWxsLmdldCgndHlwZScpICE9PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG9wdC5kaXJlY3Rpb24gJiZcbiAgICAgIChvcHQuZGlyZWN0aW9uID09PSAndG9wLXJpZ2h0JyB8fFxuICAgICAgICBvcHQuZGlyZWN0aW9uID09PSAndG9wLXJpZ2h0JyB8fFxuICAgICAgICBvcHQuZGlyZWN0aW9uID09PSAnYm90dG9tLXJpZ2h0JyB8fFxuICAgICAgICBvcHQuZGlyZWN0aW9uID09PSAnYm90dG9tLWxlZnQnKVxuICAgICkge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gY2VsbC5hdHRyaWJ1dGVzLnNpemUuaGVpZ2h0O1xuICAgICAgY29uc3QgaGVhZGVyTGFiZWxBbmNob3IgPSBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWxbJ3RleHQtYW5jaG9yJ107XG4gICAgICB0aGlzLnNldEhlYWRlckF0dHJpYnV0ZShjZWxsLCBoZWFkZXJMYWJlbEFuY2hvciwgaGVpZ2h0KTtcblxuICAgICAgLy8gdXBkYXRlIGxhc3QgbGFuZSB2YWx1ZVxuICAgICAgaWYgKCF0aGlzLmlzVW5kZWZpbmVkU2l6ZShjZWxsLmF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIGNvbnN0IGggPSBjZWxsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IHQgPSB0aGlzLmdldFRvdGFsTGFuZUhlaWdodChjZWxsLmF0dHJpYnV0ZXMpO1xuICAgICAgICBjb25zdCBiID0gaCAtIHQ7XG4gICAgICAgIGlmIChiID4gMCkge1xuICAgICAgICAgIGNvbnN0IHMgPSBjZWxsLmF0dHJpYnV0ZXMubGFuZXMuc2xpY2UoLTEpWzBdLnNpemUgKyBiO1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2VsbC5hdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmxhbmVzW2luZGV4XS5zaXplID0gcztcblxuICAgICAgICAgIGNvbnN0IGxhbmUgPSBgbGFuZXNfJHtpbmRleH1gO1xuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS5zaXplID0gcztcbiAgICAgICAgICBjZWxsLm1ldHJpY3MubGFuZXNbbGFuZV0udGFrZW5VcFNwYWNlQnlMYW5lQW5kU3VibGFuZXMgPSBzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHMgPSBjZWxsLmF0dHJpYnV0ZXMubGFuZXMuc2xpY2UoLTEpWzBdLnNpemUgKyBiO1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2VsbC5hdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmxhbmVzW2luZGV4XS5zaXplID0gcztcblxuICAgICAgICAgIGNvbnN0IGxhbmUgPSBgbGFuZXNfJHtpbmRleH1gO1xuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS5zaXplID0gcztcbiAgICAgICAgICBjZWxsLm1ldHJpY3MubGFuZXNbbGFuZV0udGFrZW5VcFNwYWNlQnlMYW5lQW5kU3VibGFuZXMgPSBzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHQucHJvcGVydHlQYXRoICYmIG9wdC5wcm9wZXJ0eVBhdGggPT09ICdhdHRycy9oZWFkZXJMYWJlbC90ZXh0LWFuY2hvcicpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNlbGwuYXR0cmlidXRlcy5zaXplLmhlaWdodDtcbiAgICAgIGNvbnN0IHRleHRBbmNob3IgPSBvcHQucHJvcGVydHlWYWx1ZTtcbiAgICAgIHRoaXMuc2V0SGVhZGVyQXR0cmlidXRlKGNlbGwsIHRleHRBbmNob3IsIGhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgc2V0SGVhZGVyQXR0cmlidXRlKGNlbGw6IGFueSwgdGV4dEFuY2hvcjogc3RyaW5nLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHN3aXRjaCAodGV4dEFuY2hvcikge1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsLnJlZlkgPSA4O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbC5yZWZZID0gaGVpZ2h0IC8gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbC5yZWZZID0gaGVpZ2h0IC0gODtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IGhlaWdodCAvIDI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlzVW5kZWZpbmVkU2l6ZShhdHRyaWJ1dGVzKSB7XG4gICAgbGV0IGJSZXN1bHQgPSBmYWxzZTtcbiAgICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCkge1xuICAgICAgYXR0cmlidXRlcy5sYW5lcy5ldmVyeSgoZSkgPT4ge1xuICAgICAgICBpZiAoIWUuc2l6ZSkge1xuICAgICAgICAgIGJSZXN1bHQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYlJlc3VsdDtcbiAgfVxuXG4gIGdldFRvdGFsTGFuZUhlaWdodChhdHRyaWJ1dGVzKSB7XG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCkge1xuICAgICAgYXR0cmlidXRlcy5sYW5lcy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgIGlmIChlLnNpemUpIHtcbiAgICAgICAgICB0b3RhbCArPSBlLnNpemU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdG90YWw7XG4gIH1cblxuICBzZXREaWFncmFtVGVtcGxhdGVzKGRpYWdyYW1UZW1wbGF0ZXM6IERpYWdyYW1UZW1wbGF0ZXNbXSkge1xuICAgIGlmICh0b29sYmFyQ29uZmlnICYmIHRvb2xiYXJDb25maWcudG9vbHMpIHtcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcbiAgICAgIH0pO1xuICAgICAgaWYgKGFyclNlbGVjdCkge1xuICAgICAgICBkaWFncmFtVGVtcGxhdGVzLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICAgICAgICBpbmRleDogMSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHgudGVtcGxhdGVOYW1lLFxuICAgICAgICAgICAgZmxvd0NoYXJ0SWQ6IHguZmxvd0NoYXJ0SWQsXG4gICAgICAgICAgICBuYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgICBqc29uQ29udGVudDogeC5qc29uQ29udGVudCxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4LmNvbnRlbnQudG9Mb3dlckNhc2UoKSA9PT0gb3B0aW9uLmNvbnRlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXNldENlbGxWaWV3KCkge1xuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gbnVsbDtcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gJyc7XG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gJyc7XG4gIH1cbn1cbiJdfQ==
1662
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFDekMsNERBQTREO0FBQzVELHNDQUFzQztBQUN0Qyx1REFBdUQ7QUFDdkQsaURBQWlEO0FBQ2pELHNEQUFzRDtBQUN0RCwyQkFBMkI7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNoRyxPQUFPLGlCQUFpQixNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sZUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLFVBQVUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUV0RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7QUFLdkUsSUFBSSxLQUFVLENBQUM7QUFDZixJQUFJLEtBQVUsQ0FBQztBQUNmLElBQUksYUFBa0IsQ0FBQztBQUN2QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNq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VyxFQUFFLENBQUMsQ0FBQyxXQUFXO3dCQUMxQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7d0JBQ1osV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXO3dCQUMxQixRQUFRLEVBQUUsS0FBSztxQkFDaEIsQ0FBQztvQkFDRixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO3dCQUNqRCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDbEUsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO3dCQUNkLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDdkM7b0JBQ0QsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDM0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM5QyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN6QyxDQUFDOzs7O1lBMXRERixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQWZRLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlIH0gZnJvbSAnLi4vY29tbW9uL2VudW1zL3NoYXBlLWZsb3ctY2hhcnQtY29ubmVjdGlvbi10eXBlJztcbmltcG9ydCBJbnNwZWN0b3JGdW5jdGlvbiBmcm9tICcuLi9jb21tb24vYnBtbi9pbnNwZWN0b3IuZnVuY3Rpb24nO1xuaW1wb3J0IFRvb2xiYXJGdW5jdGlvbiBmcm9tICcuLi9jb21tb24vYnBtbi90b29sYmFyLmZ1bmN0aW9uJztcbmltcG9ydCB7IEZsb3dDaGFydENvbnN0IH0gZnJvbSAnLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckZsb3djaGFydC5jb25zdCc7XG5pbXBvcnQgeyBGbG93Y2hhcnRWaWV3TW9kZSB9IGZyb20gJy4uL2NvbW1vbi9lbnVtcy9mbG93Y2hhcnQtdmlldy1tb2RlLmVudW0nO1xuaW1wb3J0IGd1aWRIZWxwZXIgZnJvbSAnLi4vY29tbW9uL2hlbHBlci9ndWlkSGVscGVyJztcbmltcG9ydCB7IERpYWdyYW1UZW1wbGF0ZXMgfSBmcm9tICcuLi9tb2RlbHMvZGlhZ3JhbS10ZW1wbGF0ZS5tb2RlbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMvaW50ZXJuYWwvU3ViamVjdCc7XG5pbXBvcnQgeyBSZWxhdGVkSXRlbVR5cGUgfSBmcm9tICcuLi9jb21tb24vZW51bXMvcmVsYXRlZC10by1pdGVtLXR5cGUnO1xuXG4vKiBEZWNsYXJlIGpvaW50anMgb2JqZWN0ICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdmFyXG5kZWNsYXJlIHZhciBqb2ludDogYW55O1xubGV0IGdyYXBoOiBhbnk7XG5sZXQgcGFwZXI6IGFueTtcbmxldCB0b29sYmFyQ29uZmlnOiBhbnk7XG5jb25zdCBicG1uMiA9IGpvaW50LnNoYXBlcy5icG1uMjtcbmNvbnN0IHN0YW5kYXJkID0gam9pbnQuc2hhcGVzLnN0YW5kYXJkO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQnBtblNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwdWJsaWMgaXNTYXZlQXNUZW1wbGF0ZSA9IGZhbHNlO1xuICBwdWJsaWMgaXNEZWxldGVUZW1wbGF0ZSA9IGZhbHNlO1xuICBwdWJsaWMgaXNEaXNhYmxlVG9vbGJhciA9IGZhbHNlO1xuICBwdWJsaWMgaXNUZW1wID0gdHJ1ZTtcbiAgcHVibGljIGpzb25UZW1wQ29udGVudCA9ICcnO1xuICBwdWJsaWMgaXNSZXNldCA9IGZhbHNlO1xuICBwdWJsaWMgaXNTZWxlY3RlZFRlbXBsYXRlID0gZmFsc2U7XG4gIHB1YmxpYyBqc29uT3JpZ2luYWxDb250ZW50ID0gJyc7XG4gIHB1YmxpYyBpc0Z1bGxTY3JlZW4gPSB0cnVlO1xuICBwdWJsaWMgaXNFeHBhbmRlZFBhbmVsID0gdHJ1ZTtcbiAgTEFORzogYW55O1xuICBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UsXG4gICkge1xuXG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIGJ1aWxkRGlhZ3JhbShcbiAgICBkaWFncmFtVGVtcGxhdGVzOiBhbnksXG4gICAgZGlhZ3JhbVRlbXBsYXRlOiBhbnksXG4gICAgYnBtblRoZW1lOiBzdHJpbmcsXG4gICAganNvbkNvbnRlbnQ6IGFueSxcbiAgICBlZGl0TW9kZTogYW55LFxuICAgIHNoYXBlSW1hZ2VzPzogYW55LFxuICAgIHRvb2xiYXJDb25maWd1cmF0aW9uPzogYW55LFxuICAgIGxhbmd1YWdlPzogc3RyaW5nXG4gICkge1xuICAgIGlmICghbGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcoJ2VuJyk7XG4gICAgfVxuICAgIGVsc2UgeyB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKGxhbmd1YWdlKSB9XG4gICAgdGhpcy5leGN1dGVkQnVpbGREaWFncmFtKFxuICAgICAgZGlhZ3JhbVRlbXBsYXRlcyxcbiAgICAgIGRpYWdyYW1UZW1wbGF0ZSxcbiAgICAgIGJwbW5UaGVtZSxcbiAgICAgIGpzb25Db250ZW50LFxuICAgICAgZWRpdE1vZGUsXG4gICAgICB0aGlzLkxBTkcsXG4gICAgICBzaGFwZUltYWdlcyxcbiAgICAgIHRvb2xiYXJDb25maWd1cmF0aW9uXG4gICAgKTtcbiAgfVxuXG4gIGV4Y3V0ZWRCdWlsZERpYWdyYW0oXG4gICAgZGlhZ3JhbVRlbXBsYXRlczogYW55LFxuICAgIGRpYWdyYW1UZW1wbGF0ZTogYW55LFxuICAgIGJwbW5UaGVtZTogc3RyaW5nLFxuICAgIGpzb25Db250ZW50OiBhbnksXG4gICAgZWRpdE1vZGU6IGFueSxcbiAgICBMQU5HOiBhbnksXG4gICAgc2hhcGVJbWFnZXM/OiBhbnksXG4gICAgdG9vbGJhckNvbmZpZ3VyYXRpb24/OiBhbnlcbiAgKSB7XG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LklTX05PVF9TSE9XX0FHQUlOXSA9IGZhbHNlO1xuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5FRElUX01PREVdID0gZWRpdE1vZGU7XG4gICAgam9pbnQuc2V0VGhlbWUoYnBtblRoZW1lKTtcblxuICAgIGpzb25Db250ZW50ID8ganNvbkNvbnRlbnQgPSBKU09OLnBhcnNlKGpzb25Db250ZW50KSA6IGpzb25Db250ZW50ID0gJyc7XG5cbiAgICBjb25zdCBnZEF1dGggPSB3aW5kb3dbYGdkQXV0aGBdO1xuICAgIGNvbnN0IGdkTG9hZCA9IHdpbmRvd1tgZ2RMb2FkYF07XG4gICAgY29uc3QgZ2RTYXZlID0gd2luZG93W2BnZFNhdmVgXTtcbiAgICBjb25zdCBpbnB1dHMgPSBJbnNwZWN0b3JGdW5jdGlvbi5nZXRJbnNwZWN0b3JDb25maWd1cmF0aW9uKGJwbW4yLCBMQU5HLCBzaGFwZUltYWdlcyk7XG5cbiAgICBsZXQgZnJlZVRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICBpZiAoIXRvb2xiYXJDb25maWd1cmF0aW9uKVxuICAgICAgdG9vbGJhckNvbmZpZyA9IFRvb2xiYXJGdW5jdGlvbi5nZXRUb29sYmFyQ29uZmlndXJhdGlvbihMQU5HKTtcbiAgICBlbHNlXG4gICAgICB0b29sYmFyQ29uZmlnID0gdG9vbGJhckNvbmZpZ3VyYXRpb247XG4gICAgLyogUU1TLTE0MDQ6IEN1c3RvbWl6YXRpb246IEFkZCB0ZW1wbGF0ZSBsaXN0ICovXG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMgJiYgZGlhZ3JhbVRlbXBsYXRlcykge1xuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xuICAgICAgfSk7XG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XG4gICAgICAgIGRpYWdyYW1UZW1wbGF0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcbiAgICAgICAgICAgIGluZGV4OiBpdGVtLmluZGV4LFxuICAgICAgICAgICAgY29udGVudDogaXRlbS50ZW1wbGF0ZU5hbWUsXG4gICAgICAgICAgICBmbG93Q2hhcnRJZDogaXRlbS5mbG93Q2hhcnRJZCxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgIGpzb25Db250ZW50OiBpdGVtLmpzb25Db250ZW50LFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGFyclNlbGVjdFswXS5vcHRpb25zLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHguaW5kZXggPT09IG9wdGlvbi5pbmRleDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBncmFwaCA9IG5ldyBqb2ludC5kaWEuR3JhcGgoeyB0eXBlOiAnYnBtbicgfSk7XG4gICAgY29uc3QgY29tbWFuZE1hbmFnZXIgPSBuZXcgam9pbnQuZGlhLkNvbW1hbmRNYW5hZ2VyKHsgZ3JhcGggfSk7XG4gICAgY29uc3Qga2V5Ym9hcmQgPSBuZXcgam9pbnQudWkuS2V5Ym9hcmQoKTtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSBuZXcgam9pbnQudWkuQ2xpcGJvYXJkKCk7XG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XG4gICAgICBwYXBlciA9IG5ldyBqb2ludC5kaWEuUGFwZXIoe1xuICAgICAgICB3aWR0aDogODAwLFxuICAgICAgICBoZWlnaHQ6IDYwMCxcbiAgICAgICAgbW9kZWw6IGdyYXBoLFxuICAgICAgICBncmlkU2l6ZTogNSxcbiAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgIHNvcnRpbmc6IGpvaW50LmRpYS5QYXBlci5zb3J0aW5nLkFQUFJPWCxcbiAgICAgICAgaW50ZXJhY3RpdmU6IHsgbGlua01vdmU6IGZhbHNlIH0sXG4gICAgICAgIHNuYXBMYWJlbHM6IHRydWUsXG4gICAgICAgIC8vIENvbm5lY3Rpb25zXG4gICAgICAgIGRlZmF1bHRMaW5rKGVsZW1lbnRWaWV3KSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBicG1uMi5GbG93KHtcbiAgICAgICAgICAgIHo6IGVsZW1lbnRWaWV3Lm1vZGVsLmdldCgneicpIC0gMSxcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIGxpbmU6IHtcbiAgICAgICAgICAgICAgICBmbG93VHlwZTogJ3NlcXVlbmNlJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRlQ29ubmVjdGlvbihjZWxsVmlld1MsIG1hZ25ldFMsIGNlbGxWaWV3VCwgbWFnbmV0VCwgZW5kKSB7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gY2VsbFZpZXdTLm1vZGVsO1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGNlbGxWaWV3VC5tb2RlbDtcbiAgICAgICAgICAvLyBkb24ndCBhbGxvdyBsb29wIGxpbmtzXG4gICAgICAgICAgaWYgKHNvdXJjZSA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGRvbid0IGFsbG93IGxpbmsgdG8gbGluayBjb25uZWN0aW9uXG4gICAgICAgICAgaWYgKHNvdXJjZS5pc0xpbmsoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGFyZ2V0LmlzTGluaygpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGRvbid0IGFsbG93IGdyb3VwIGNvbm5lY3Rpb25zXG4gICAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZS5nZXQoJ3R5cGUnKTtcbiAgICAgICAgICBjb25zdCB0YXJnZXRUeXBlID0gdGFyZ2V0LmdldCgndHlwZScpO1xuICAgICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAnYnBtbjIuR3JvdXAnIHx8IHRhcmdldFR5cGUgPT09ICdicG1uMi5Hcm91cCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHRBbmNob3I6IHtcbiAgICAgICAgICBuYW1lOiAncGVycGVuZGljdWxhcidcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdENvbm5lY3Rpb25Qb2ludDoge1xuICAgICAgICAgIG5hbWU6ICdib3VuZGFyeScsXG4gICAgICAgICAgYXJnczogeyBzdHJva2U6IHRydWUgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBFbWJlZGRpbmdcbiAgICAgICAgZW1iZWRkaW5nTW9kZTogdHJ1ZSxcbiAgICAgICAgZnJvbnRQYXJlbnRPbmx5OiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGVFbWJlZGRpbmcoY2hpbGRWaWV3LCBwYXJlbnRWaWV3KSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50VHlwZSA9IHBhcmVudFZpZXcubW9kZWwuZ2V0KCd0eXBlJyk7XG4gICAgICAgICAgY29uc3QgY2hpbGRUeXBlID0gY2hpbGRWaWV3Lm1vZGVsLmdldCgndHlwZScpO1xuICAgICAgICAgIGlmIChwYXJlbnRUeXBlID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJyAmJiBjaGlsZFR5cGUgIT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcmVudFR5cGUgPT09ICdicG1uMi5BY3Rpdml0eScgJiYgY2hpbGRUeXBlID09PSAnYnBtbjIuRXZlbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICAvLyBIaWdobGlnaHRpbmdcbiAgICAgICAgaGlnaGxpZ2h0aW5nOiB7XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgbmFtZTogJ21hc2snLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogJyMzNDk4ZGInLFxuICAgICAgICAgICAgICAgICdzdHJva2Utd2lkdGgnOiAzLFxuICAgICAgICAgICAgICAgICdzdHJva2UtbGluZWpvaW4nOiAncm91bmQnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLm9uKHtcbiAgICAgICAgJ2JsYW5rOnBvaW50ZXJkb3duJzogKGV2dCwgeCwgeSkgPT4ge1xuICAgICAgICAgIGNsb3NlVG9vbHMoKTtcbiAgICAgICAgICB0aGlzLnJlc2V0Q2VsbFZpZXcoKTtcbiAgICAgICAgICAvLyBzZWxlY3Rpb24uc3RhcnRTZWxlY3RpbmcoZXZ0LCB4LCB5KTtcbiAgICAgICAgICBpZiAoa2V5Ym9hcmQuaXNBY3RpdmUoJ3NoaWZ0JywgZXZ0KSkge1xuICAgICAgICAgICAgc2VsZWN0aW9uLnN0YXJ0U2VsZWN0aW5nKGV2dCwgeCwgeSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuc3RhcnRQYW5uaW5nKGV2dCwgeCwgeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAnYmxhbms6Y29udGV4dG1lbnUnOiAoZXZ0LCB4LCB5KSA9PiB7XG4gICAgICAgICAgcGFwZXJTY3JvbGxlci5zdGFydFBhbm5pbmcoZXZ0LCB4LCB5KTtcbiAgICAgICAgfSxcblxuICAgICAgICAnY2VsbDpwb2ludGVydXAnOiAoY2VsbFZpZXcpID0+IHtcbiAgICAgICAgICBvcGVuVG9vbHMoY2VsbFZpZXcpO1xuICAgICAgICB9LFxuXG4gICAgICAgICdsaW5rOm1vdXNlZW50ZXInOiAobGlua1ZpZXcpID0+IHtcbiAgICAgICAgICAvLyBPcGVuIHRvb2wgb25seSBpZiB0aGVyZSBpcyBub25lIHlldFxuICAgICAgICAgIGlmIChsaW5rVmlldy5oYXNUb29scygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbnMgPSBqb2ludC5saW5rVG9vbHM7XG4gICAgICAgICAgY29uc3QgdG9vbHNWaWV3ID0gbmV3IGpvaW50LmRpYS5Ub29sc1ZpZXcoe1xuICAgICAgICAgICAgbmFtZTogJ2xpbmstaG92ZXInLFxuICAgICAgICAgICAgdG9vbHM6IFtcbiAgICAgICAgICAgICAgbmV3IG5zLlZlcnRpY2VzKHsgdmVydGV4QWRkaW5nOiBmYWxzZSB9KSxcbiAgICAgICAgICAgICAgbmV3IG5zLlNvdXJjZUFycm93aGVhZCgpLFxuICAgICAgICAgICAgICBuZXcgbnMuVGFyZ2V0QXJyb3doZWFkKClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGxpbmtWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ2xpbms6bW91c2VsZWF2ZSc6IChsaW5rVmlldykgPT4ge1xuICAgICAgICAgIC8vIFJlbW92ZSBvbmx5IHRoZSBob3ZlciB0b29sLCBub3QgdGhlIHBvaW50ZXJkb3duIHRvb2xcbiAgICAgICAgICBpZiAobGlua1ZpZXcuaGFzVG9vbHMoJ2xpbmstaG92ZXInKSkge1xuICAgICAgICAgICAgbGlua1ZpZXcucmVtb3ZlVG9vbHMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ2xpbms6Y29ubmVjdCc6IChsaW5rVmlldykgPT4ge1xuICAgICAgICAgIC8vIENoYW5nZSB0aGUgbGluayB0eXBlIGJhc2VkIG9uIHRoZSBjb25uZWN0ZWQgZWxlbWVudHNcbiAgICAgICAgICBjb25zdCBsaW5rID0gbGlua1ZpZXcubW9kZWw7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gbGluay5nZXRTb3VyY2VDZWxsKCk7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gbGluay5nZXRUYXJnZXRDZWxsKCk7XG4gICAgICAgICAgaWYgKCFzb3VyY2UgfHwgIXRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB0eXBlcyA9IFtzb3VyY2UuZ2V0KCd0eXBlJyksIHRhcmdldC5nZXQoJ3R5cGUnKV07XG4gICAgICAgICAgY29uc3QgbGlua1R5cGUgPSBsaW5rLmdldCgndHlwZScpO1xuICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5Bbm5vdGF0aW9uJykgPiAtMSkge1xuICAgICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuQW5ub3RhdGlvbkxpbmsnKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5Bbm5vdGF0aW9uTGluayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5Db252ZXJzYXRpb24nKSA+IC0xKSB7XG4gICAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdicG1uMi5Db252ZXJzYXRpb25MaW5rJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuQ29udmVyc2F0aW9uTGluayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5EYXRhT2JqZWN0JykgPiAtMSkge1xuICAgICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuRGF0YUFzc29jaWF0aW9uJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuRGF0YUFzc29jaWF0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YoJ2JwbW4yLkRhdGFTdG9yZScpID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkRhdGFBc3NvY2lhdGlvbicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkRhdGFBc3NvY2lhdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsaW5rVHlwZSAhPT0gJ2JwbW4yLkZsb3cnKSB7XG4gICAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuRmxvdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAnZWxlbWVudDptb3VzZW92ZXInOiBvcGVuVG9vbHMsXG4gICAgICAgICdlbGVtZW50Om1vdXNlb3V0JzogKCkgPT4ge1xuICAgICAgICAgIG9wZW5Ub29scyhudWxsKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ2VsZW1lbnQ6cG9pbnRlcmRvd24nOiAoY2VsbFZpZXcsIGV2dCwgeCwgeSkgPT4ge1xuICAgICAgICAgIGNsb3NlVG9vbHMoKTtcbiAgICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XG4gICAgICAgICAgLy8gY29uc3Qgc291cmNlID0gY2VsbFZpZXcubW9kZWw7XG4gICAgICAgICAgLy8gY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZS5nZXQoJ3R5cGUnKTtcbiAgICAgICAgICAvLyBpZiAoc291cmNlVHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcbiAgICAgICAgICAvLyAgICAgcGFwZXJTY3JvbGxlci5zdGFydFBhbm5pbmcoZXZ0LCB4LCB5KTtcbiAgICAgICAgICAvLyAgICAgcGFwZXIuc2V0SW50ZXJhY3Rpdml0eSh7IGVsZW1lbnRNb3ZlOiB0cnVlIH0pO1xuICAgICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgLy8gICAgIHBhcGVyLnNldEludGVyYWN0aXZpdHkoeyBlbGVtZW50TW92ZTogZmFsc2UgfSk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuc3RhcnRQYW5uaW5nKGV2dCwgeCwgeSk7XG4gICAgICAgICAgcGFwZXIuc2V0SW50ZXJhY3Rpdml0eSh7IGVsZW1lbnRNb3ZlOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcGVyID0gbmV3IGpvaW50LmRpYS5QYXBlcih7XG4gICAgICAgIHdpZHRoOiA4MDAsXG4gICAgICAgIGhlaWdodDogNjAwLFxuICAgICAgICBtb2RlbDogZ3JhcGgsXG4gICAgICAgIGdyaWRTaXplOiAxMCxcbiAgICAgICAgZHJhd0dyaWQ6IHRydWUsXG4gICAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgICBzb3J0aW5nOiBqb2ludC5kaWEuUGFwZXIuc29ydGluZy5BUFBST1gsXG4gICAgICAgIGludGVyYWN0aXZlOiB7IGxpbmtNb3ZlOiBmYWxzZSB9LFxuICAgICAgICBzbmFwTGFiZWxzOiB0cnVlLFxuICAgICAgICAvLyBDb25uZWN0aW9uc1xuICAgICAgICBkZWZhdWx0TGluayhlbGVtZW50Vmlldykge1xuICAgICAgICAgIHJldHVybiBuZXcgYnBtbjIuRmxvdyh7XG4gICAgICAgICAgICB6OiBlbGVtZW50Vmlldy5tb2RlbC5nZXQoJ3onKSAtIDEsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBsaW5lOiB7XG4gICAgICAgICAgICAgICAgZmxvd1R5cGU6ICdzZXF1ZW5jZSdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0ZUNvbm5lY3Rpb24oY2VsbFZpZXdTLCBtYWduZXRTLCBjZWxsVmlld1QsIG1hZ25ldFQsIGVuZCkge1xuICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGNlbGxWaWV3Uy5tb2RlbDtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBjZWxsVmlld1QubW9kZWw7XG4gICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgbG9vcCBsaW5rc1xuICAgICAgICAgIGlmIChzb3VyY2UgPT09IHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBkb24ndCBhbGxvdyBsaW5rIHRvIGxpbmsgY29ubmVjdGlvblxuICAgICAgICAgIGlmIChzb3VyY2UuaXNMaW5rKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRhcmdldC5pc0xpbmsoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBkb24ndCBhbGxvdyBncm91cCBjb25uZWN0aW9uc1xuICAgICAgICAgIGNvbnN0IHNvdXJjZVR5cGUgPSBzb3VyY2UuZ2V0KCd0eXBlJyk7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0VHlwZSA9IHRhcmdldC5nZXQoJ3R5cGUnKTtcbiAgICAgICAgICBpZiAoc291cmNlVHlwZSA9PT0gJ2JwbW4yLkdyb3VwJyB8fCB0YXJnZXRUeXBlID09PSAnYnBtbjIuR3JvdXAnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0QW5jaG9yOiB7XG4gICAgICAgICAgbmFtZTogJ3BlcnBlbmRpY3VsYXInXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHRDb25uZWN0aW9uUG9pbnQ6IHtcbiAgICAgICAgICBuYW1lOiAnYm91bmRhcnknLFxuICAgICAgICAgIGFyZ3M6IHsgc3Ryb2tlOiB0cnVlIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gRW1iZWRkaW5nXG4gICAgICAgIGVtYmVkZGluZ01vZGU6IHRydWUsXG4gICAgICAgIGZyb250UGFyZW50T25seTogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRlRW1iZWRkaW5nKGNoaWxkVmlldywgcGFyZW50Vmlldykge1xuICAgICAgICAgIGNvbnN0IHBhcmVudFR5cGUgPSBwYXJlbnRWaWV3Lm1vZGVsLmdldCgndHlwZScpO1xuICAgICAgICAgIGNvbnN0IGNoaWxkVHlwZSA9IGNoaWxkVmlldy5tb2RlbC5nZXQoJ3R5cGUnKTtcbiAgICAgICAgICBpZiAocGFyZW50VHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcgJiYgY2hpbGRUeXBlICE9PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJlbnRUeXBlID09PSAnYnBtbjIuQWN0aXZpdHknICYmIGNoaWxkVHlwZSA9PT0gJ2JwbW4yLkV2ZW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gSGlnaGxpZ2h0aW5nXG4gICAgICAgIGhpZ2hsaWdodGluZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIG5hbWU6ICdtYXNrJyxcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICBzdHJva2U6ICcjMzQ5OGRiJyxcbiAgICAgICAgICAgICAgICAnc3Ryb2tlLXdpZHRoJzogMyxcbiAgICAgICAgICAgICAgICAnc3Ryb2tlLWxpbmVqb2luJzogJ3JvdW5kJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KS5vbih7XG4gICAgICAgICdibGFuazpwb2ludGVyZG93bic6IChldnQsIHgsIHkpID0+IHtcbiAgICAgICAgICBjbG9zZVRvb2xzKCk7XG4gICAgICAgICAgdGhpcy5yZXNldENlbGxWaWV3KCk7XG4gICAgICAgICAgLy8gc2VsZWN0aW9uLnN0YXJ0U2VsZWN0aW5nKGV2dCwgeCwgeSk7XG4gICAgICAgICAgaWYgKGtleWJvYXJkLmlzQWN0aXZlKCdzaGlmdCcsIGV2dCkpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5zdGFydFNlbGVjdGluZyhldnQsIHgsIHkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnN0YXJ0UGFubmluZyhldnQsIHgsIHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAnYmxhbms6Y29udGV4dG1lbnUnOiAoZXZ0LCB4LCB5KSA9PiB7XG4gICAgICAgICAgcGFwZXJTY3JvbGxlci5zdGFydFBhbm5pbmcoZXZ0LCB4LCB5KTtcbiAgICAgICAgfSxcblxuICAgICAgICAnY2VsbDpwb2ludGVydXAnOiAoY2VsbFZpZXcpID0+IHtcbiAgICAgICAgICBvcGVuVG9vbHMoY2VsbFZpZXcpO1xuICAgICAgICB9LFxuXG4gICAgICAgICdsaW5rOm1vdXNlZW50ZXInOiAobGlua1ZpZXcpID0+IHtcbiAgICAgICAgICAvLyBPcGVuIHRvb2wgb25seSBpZiB0aGVyZSBpcyBub25lIHlldFxuICAgICAgICAgIGlmIChsaW5rVmlldy5oYXNUb29scygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbnMgPSBqb2ludC5saW5rVG9vbHM7XG4gICAgICAgICAgY29uc3QgdG9vbHNWaWV3ID0gbmV3IGpvaW50LmRpYS5Ub29sc1ZpZXcoe1xuICAgICAgICAgICAgbmFtZTogJ2xpbmstaG92ZXInLFxuICAgICAgICAgICAgdG9vbHM6IFtcbiAgICAgICAgICAgICAgbmV3IG5zLlZlcnRpY2VzKHsgdmVydGV4QWRkaW5nOiBmYWxzZSB9KSxcbiAgICAgICAgICAgICAgbmV3IG5zLlNvdXJjZUFycm93aGVhZCgpLFxuICAgICAgICAgICAgICBuZXcgbnMuVGFyZ2V0QXJyb3doZWFkKClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGxpbmtWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ2xpbms6bW91c2VsZWF2ZSc6IChsaW5rVmlldykgPT4ge1xuICAgICAgICAgIC8vIFJlbW92ZSBvbmx5IHRoZSBob3ZlciB0b29sLCBub3QgdGhlIHBvaW50ZXJkb3duIHRvb2xcbiAgICAgICAgICBpZiAobGlua1ZpZXcuaGFzVG9vbHMoJ2xpbmstaG92ZXInKSkge1xuICAgICAgICAgICAgbGlua1ZpZXcucmVtb3ZlVG9vbHMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ2xpbms6Y29ubmVjdCc6IChsaW5rVmlldykgPT4ge1xuICAgICAgICAgIC8vIENoYW5nZSB0aGUgbGluayB0eXBlIGJhc2VkIG9uIHRoZSBjb25uZWN0ZWQgZWxlbWVudHNcbiAgICAgICAgICBjb25zdCBsaW5rID0gbGlua1ZpZXcubW9kZWw7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gbGluay5nZXRTb3VyY2VDZWxsKCk7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gbGluay5nZXRUYXJnZXRDZWxsKCk7XG4gICAgICAgICAgaWYgKCFzb3VyY2UgfHwgIXRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsaW5rLnNldCgneicsIC0xKTtcbiAgICAgICAgICBjb25zdCB0eXBlcyA9IFtzb3VyY2UuZ2V0KCd0eXBlJyksIHRhcmdldC5nZXQoJ3R5cGUnKV07XG4gICAgICAgICAgY29uc3QgbGlua1R5cGUgPSBsaW5rLmdldCgndHlwZScpO1xuICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5Bbm5vdGF0aW9uJykgPiAtMSkge1xuICAgICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuQW5ub3RhdGlvbkxpbmsnKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5Bbm5vdGF0aW9uTGluayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5Db252ZXJzYXRpb24nKSA+IC0xKSB7XG4gICAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdicG1uMi5Db252ZXJzYXRpb25MaW5rJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuQ29udmVyc2F0aW9uTGluayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5EYXRhT2JqZWN0JykgPiAtMSkge1xuICAgICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuRGF0YUFzc29jaWF0aW9uJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuRGF0YUFzc29jaWF0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YoJ2JwbW4yLkRhdGFTdG9yZScpID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkRhdGFBc3NvY2lhdGlvbicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkRhdGFBc3NvY2lhdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsaW5rVHlwZSAhPT0gJ2JwbW4yLkZsb3cnKSB7XG4gICAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuRmxvdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzbmFwbGluZXMgPSBuZXcgam9pbnQudWkuU25hcGxpbmVzKHsgcGFwZXIgfSk7XG5cbiAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gbmV3IGpvaW50LnVpLlBhcGVyU2Nyb2xsZXIoe1xuICAgICAgcGFwZXIsXG4gICAgICBhdXRvUmVzaXplUGFwZXI6IHRydWUsXG4gICAgICBzY3JvbGxXaGlsZURyYWdnaW5nOiB0cnVlLFxuICAgICAgY3Vyc29yOiAnZ3JhYidcbiAgICB9KTtcblxuICAgICQoJyNwYXBlci1jb250YWluZXInKS5odG1sKCcnKTtcbiAgICBwYXBlclNjcm9sbGVyLiRlbC5hcHBlbmRUbygnI3BhcGVyLWNvbnRhaW5lcicpO1xuICAgIHBhcGVyU2Nyb2xsZXIuc2V0Q3Vyc29yKCdncmFiJyk7XG4gICAgcGFwZXJTY3JvbGxlci5yZW5kZXIoKS5jZW50ZXIoKTtcblxuICAgIHBhcGVyLm9uKCdibGFuazptb3VzZXdoZWVsJywgXy5wYXJ0aWFsKG9uTW91c2V3aGVlbCwgbnVsbCksIHRoaXMpO1xuICAgIHBhcGVyLm9uKCdjZWxsOm1vdXNld2hlZWwnLCBvbk1vdXNld2hlZWwsIHRoaXMpO1xuICAgIGZ1bmN0aW9uIG9uTW91c2V3aGVlbChjZWxsVmlldywgZXZ0LCB4LCB5LCBkZWx0YSkge1xuICAgICAgcGFwZXJTY3JvbGxlci56b29tKGRlbHRhICogMC4xLCB7IG1pbjogMC4yLCBtYXg6IDUsIGdyaWQ6IDAuMSwgb3g6IHgsIG95OiB5IH0pO1xuICAgIH1cblxuICAgIC8qIFNFTEVDVElPTiAqL1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IG5ldyBqb2ludC51aS5TZWxlY3Rpb24oe1xuICAgICAgcGFwZXIsXG4gICAgICBncmFwaCxcbiAgICAgIHVzZU1vZGVsR2VvbWV0cnk6IHRydWUsXG4gICAgICBmaWx0ZXI6IFsnYnBtbjIuSGVhZGVyZWRQb29sJ10gLy8gZG9uJ3QgYWxsb3cgdG8gc2VsZWN0IGEgcG9vbFxuICAgIH0pO1xuXG4gICAgLyogU1RFTkNJTCAqL1xuXG4gICAgY29uc3Qgc3RlbmNpbCA9IG5ldyBqb2ludC51aS5TdGVuY2lsKHtcbiAgICAgIGdyYXBoLFxuICAgICAgcGFwZXIsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICBkcmFnRW5kQ2xvbmUoY2VsbCkge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGNlbGwuY2xvbmUoKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IGNsb25lLmdldCgndHlwZScpO1xuXG4gICAgICAgIC8vIHNvbWUgdHlwZXMgb2YgdGhlIGVsZW1lbnRzIG5lZWQgcmVzaXppbmcgYWZ0ZXIgdGhleSBhcmUgZHJvcHBlZFxuICAgICAgICBjb25zdCBzaXplTXVsdGlwbGllciA9IHsgJ2JwbW4yLkhlYWRlcmVkUG9vbCc6IDgsICdicG1uLkNob3Jlb2dyYXBoeSc6IDIgfVt0eXBlXTtcbiAgICAgICAgaWYgKHNpemVNdWx0aXBsaWVyKSB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxTaXplID0gY2xvbmUuZ2V0KCdzaXplJyk7XG4gICAgICAgICAgY2xvbmUuc2V0KCdzaXplJywge1xuICAgICAgICAgICAgd2lkdGg6IG9yaWdpbmFsU2l6ZS53aWR0aCAqIHNpemVNdWx0aXBsaWVyLFxuICAgICAgICAgICAgaGVpZ2h0OiBvcmlnaW5hbFNpemUuaGVpZ2h0ICogc2l6ZU11bHRpcGxpZXJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcbiAgICAgICAgICAgIGNsb25lLnNldCgncGFkZGluZycsIHsgdG9wOiAwLCBsZWZ0OiAzMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RlbmNpbC5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyNzdGVuY2lsLWNvbnRhaW5lcicpO1xuXG4gICAgLy8gTG9hZCBzaGFwZSBpbWFnZSBvciBub3RcbiAgICBpZiAoc2hhcGVJbWFnZXMgJiYgc2hhcGVJbWFnZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBpZHggPSBzaGFwZUltYWdlcy5maW5kSW5kZXgoKGltZykgPT4ge1xuICAgICAgICByZXR1cm4gaW1nWydpc0RlZmF1bHQnXSA9PT0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaW1hZ2UgPSBzaGFwZUltYWdlc1tpZHhdO1xuICAgICAgc3RlbmNpbC5sb2FkKFtcbiAgICAgICAgbmV3IGJwbW4yLkFjdGl2aXR5KHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgYnBtbjIuR2F0ZXdheSh7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGJwbW4yLkV2ZW50KHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgYnBtbjIuQ29udmVyc2F0aW9uKHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgYnBtbjIuRGF0YU9iamVjdCh7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGJwbW4yLkRhdGFTdG9yZSh7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGJwbW4yLkFubm90YXRpb24oe1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgIGZpbGw6ICcjZmZmZmZmJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGJwbW4yLkdyb3VwKHtcbiAgICAgICAgICBzaXplOiB7XG4gICAgICAgICAgICB3aWR0aDogODAsXG4gICAgICAgICAgICBoZWlnaHQ6IDgwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgdGV4dDogJ0dyb3VwJyxcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICAvLyBMZWdhY3kgQlBNTiBTaGFwZXNcbiAgICAgICAgbmV3IGJwbW4yLkhlYWRlcmVkUG9vbCh7XG4gICAgICAgICAgcGFkZGluZzogeyB0b3A6IDAsIGxlZnQ6IDE1LCByaWdodDogMCwgYm90dG9tOiAwIH0sXG4gICAgICAgICAgc2l6ZTogeyB3aWR0aDogODAsIGhlaWdodDogNTAgfSxcbiAgICAgICAgICBsYW5lczogW3sgbGFiZWw6ICdMYW5lIDEnIH0sIHsgbGFiZWw6ICdMYW5lIDInIH1dLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBib2R5OiB7IGZpbGw6ICcjRkZGRkZGJyB9LFxuICAgICAgICAgICAgaGVhZGVyTGFiZWw6IHsgdGV4dDogJ0hlYWRlcicgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBqb2ludC5zaGFwZXMuYnBtbi5DaG9yZW9ncmFwaHkoe1xuICAgICAgICAgIHBhcnRpY2lwYW50czogWydQYXJ0aWNpcGFudCAxJywgJ1BhcnRpY2lwYW50IDInXSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgam9pbnQuc2hhcGVzLmJwbW4uTWVzc2FnZSh7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHRleHQ6IHtcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuXG4gICAgICAgIG5ldyBzdGFuZGFyZC5JbWFnZSh7XG4gICAgICAgICAgdHlwZTogJ3N0YW5kYXJkLkltYWdlJyxcbiAgICAgICAgICBzaXplOiB7IHdpZHRoOiA4MCwgaGVpZ2h0OiA4MCB9LFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBpbWFnZToge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgICAgeGxpbmtIcmVmOiBpbWFnZVxuICAgICAgICAgICAgICAgID8gaW1hZ2VbJ2ltYWdlVHlwZSddID09PSAnc3ZnJ1xuICAgICAgICAgICAgICAgICAgPyBgZGF0YTppbWFnZS8ke2ltYWdlWydpbWFnZVR5cGUnXX0reG1sO2Jhc2U2NCwke2ltYWdlWydpbWFnZVN0cmluZyddfWBcbiAgICAgICAgICAgICAgICAgIDogYGRhdGE6aW1hZ2UvJHtpbWFnZVsnaW1hZ2VUeXBlJ119O2Jhc2U2NCwke2ltYWdlWydpbWFnZVN0cmluZyddfWBcbiAgICAgICAgICAgICAgICA6ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlkWFJtTFRnaVB6NDhJVVJQUTFSWlVFVWdjM1puSUZCVlFreEpReUFpTFM4dlZ6TkRMeTlFVkVRZ1UxWkhJREV1TVM4dlJVNGlJQ0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTlIY21Gd2FHbGpjeTlUVmtjdk1TNHhMMFJVUkM5emRtY3hNUzVrZEdRaVBqeHpkbWNnZG1WeWMybHZiajBpTVM0eElpQnBaRDBpVEdGNVpYSmZNaUlnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JaUI0Yld4dWN6cDRiR2x1YXowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzk0YkdsdWF5SWdlRDBpTUhCNElpQjVQU0l3Y0hnaUlIZHBaSFJvUFNJMU0zQjRJaUJvWldsbmFIUTlJalF5Y0hnaUlIWnBaWGRDYjNnOUlqQWdNQ0ExTXlBME1pSWdaVzVoWW14bExXSmhZMnRuY205MWJtUTlJbTVsZHlBd0lEQWdOVE1nTkRJaUlIaHRiRHB6Y0dGalpUMGljSEpsYzJWeWRtVWlQanhuUGp4bklHOXdZV05wZEhrOUlqQXVORGtpUGp4d1lYUm9JR1pwYkd3OUlpTXlNakl4TXpnaUlHUTlJazAwT1M0ek5EUXNNMk13TGpVME1pd3dMREV1TWpVdE1DNHdORElzTVM0eU5Td3dMalYyTXpSak1Dd3dMalUwTWkwd0xqY3dPQ3d4TGpVdE1TNHlOU3d4TGpWb0xUUTJZeTB3TGpVME1pd3dMVEF1TnpVdE1DNDVOVGd0TUM0M05TMHhMalVnZGkwek5HTXdMVEF1TlRReUxEQXVNakE0TFRBdU5Td3dMamMxTFRBdU5XZzBOaTR5TlNCTk5Ea3VNelEwTERGb0xUUTJZeTB4TGpZMUxEQXRNaTQzTlN3d0xqZzFMVEl1TnpVc01pNDFkak0wWXpBc01TNDJOU3d4TGpFc015NDFMREl1TnpVc015NDFhRFEySUdNeExqWTFMREFzTXk0eU5TMHhMamcxTERNdU1qVXRNeTQxZGkwek5FTTFNaTQxT1RRc01TNDROU3cxTUM0NU9UUXNNU3cwT1M0ek5EUXNNVXcwT1M0ek5EUXNNWG9pTHo0OFkybHlZMnhsSUdacGJHdzlJaU15TWpJeE16Z2lJR040UFNJek9DNHdPVFFpSUdONVBTSXhNaTQxTURJaUlISTlJalF1TXprNElpOCtQSEJoZEdnZ1ptbHNiRDBpSXpJeU1qRXpPQ0lnWkQwaVRUVXdMalU1TkN3eU5pNDVOekpzTFRjdU1UTTFMVFV1T1RFNFl5MHhMakEzTmkwd0xqZzRPQzB5TGpjeU5pMHdMamcxTkMwekxqYzBPU3d3TGpBNE5Hd3ROeTR5TWpRc05pNDFPREpNTVRndU1qVXhMREV5TGpJeElHTXRNUzR3TnpNdE1TNHhOek10TWk0NE1qWXRNUzR4T0RZdE15NDVNVGN0TUM0d01qUk1NUzQxT1RRc01qVXVPVEl5VmpRd2FEUTRMams1TTJNd0xqRXhOU3d3TERBdU1EQTNMVEF1TURJeExEQXVNREEzTFRBdU1ESTVWakkyTGprM01ub2lMejQ4TDJjK1BHYytQR2MrUEdjK1BIQmhkR2dnWm1sc2JEMGlJek14UkRCRE5pSWdaRDBpVFRRNUxqTTBOQ3d5WXpBdU5UUXlMREFzTVM0eU5TMHdMakEwTWl3eExqSTFMREF1TlhZek5HTXdMREF1TlRReUxUQXVOekE0TERFdU5TMHhMakkxTERFdU5XZ3RORFpqTFRBdU5UUXlMREF0TUM0M05TMHdMamsxT0Mwd0xqYzFMVEV1TlNCMkxUTTBZekF0TUM0MU5ESXNNQzR5TURndE1DNDFMREF1TnpVdE1DNDFhRFEyTGpJMUlFMDBPUzR6TkRRc01HZ3RORFpqTFRFdU5qVXNNQzB5TGpjMUxEQXVPRFV0TWk0M05Td3lMalYyTXpSak1Dd3hMalkxTERFdU1Td3pMalVzTWk0M05Td3pMalZvTkRZZ1l6RXVOalVzTUN3ekxqSTFMVEV1T0RVc015NHlOUzB6TGpWMkxUTTBRelV5TGpVNU5Dd3dMamcxTERVd0xqazVOQ3d3TERRNUxqTTBOQ3d3VERRNUxqTTBOQ3d3ZWlJdlBqd3ZaejQ4WTJseVkyeGxJR1pwYkd3OUlpTXpNVVF3UXpZaUlHTjRQU0l6T0M0d09UUWlJR041UFNJeE1TNDFNRElpSUhJOUlqUXVNems0SWk4K1BIQmhkR2dnWm1sc2JEMGlJek14UkRCRE5pSWdaRDBpVFRVd0xqVTVOQ3d5TlM0NU56SnNMVGN1TVRNMUxUVXVPVEU0WXkweExqQTNOaTB3TGpnNE9DMHlMamN5Tmkwd0xqZzFOQzB6TGpjME9Td3dMakE0Tkd3dE55NHlNalFzTmk0MU9ESk1NVGd1TWpVeExERXhMakl4SUdNdE1TNHdOek10TVM0eE56TXRNaTQ0TWpZdE1TNHhPRFl0TXk0NU1UY3RNQzR3TWpSTU1TNDFPVFFzTWpRdU9USXlWak01YURRNExqazVNMk13TGpFeE5Td3dMREF1TURBM0xUQXVNREl4TERBdU1EQTNMVEF1TURJNVZqSTFMamszTW5vaUx6NDhMMmMrUEM5blBqd3ZaejQ4TDNOMlp6NGcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICBzdHJva2U6ICcjMzFkMGM2JyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHN0cm9rZURhc2hhcnJheTogJzAnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ZW5jaWwubG9hZChbXG4gICAgICAgIG5ldyBicG1uMi5BY3Rpdml0eSh7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGJwbW4yLkdhdGV3YXkoe1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBicG1uMi5FdmVudCh7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGJwbW4yLkNvbnZlcnNhdGlvbih7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGJwbW4yLkRhdGFPYmplY3Qoe1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBicG1uMi5EYXRhU3RvcmUoe1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBicG1uMi5Bbm5vdGF0aW9uKHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICBmaWxsOiAnI2ZmZmZmZidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBicG1uMi5Hcm91cCh7XG4gICAgICAgICAgc2l6ZToge1xuICAgICAgICAgICAgd2lkdGg6IDgwLFxuICAgICAgICAgICAgaGVpZ2h0OiA4MFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHRleHQ6ICdHcm91cCcsXG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgLy8gTGVnYWN5IEJQTU4gU2hhcGVzXG4gICAgICAgIG5ldyBicG1uMi5IZWFkZXJlZFBvb2woe1xuICAgICAgICAgIHBhZGRpbmc6IHsgdG9wOiAwLCBsZWZ0OiAxNSwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9LFxuICAgICAgICAgIHNpemU6IHsgd2lkdGg6IDgwLCBoZWlnaHQ6IDUwIH0sXG4gICAgICAgICAgbGFuZXM6IFt7IGxhYmVsOiAnTGFuZSAxJyB9LCB7IGxhYmVsOiAnTGFuZSAyJyB9XSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgYm9keTogeyBmaWxsOiAnI0ZGRkZGRicgfSxcbiAgICAgICAgICAgIGhlYWRlckxhYmVsOiB7IHRleHQ6ICdIZWFkZXInIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgam9pbnQuc2hhcGVzLmJwbW4uQ2hvcmVvZ3JhcGh5KHtcbiAgICAgICAgICBwYXJ0aWNpcGFudHM6IFsnUGFydGljaXBhbnQgMScsICdQYXJ0aWNpcGFudCAyJ10sXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGpvaW50LnNoYXBlcy5icG1uLk1lc3NhZ2Uoe1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgam9pbnQubGF5b3V0LkdyaWRMYXlvdXQubGF5b3V0KHN0ZW5jaWwuZ2V0R3JhcGgoKSwge1xuICAgICAgY29sdW1uczogMTAwLFxuICAgICAgY29sdW1uV2lkdGg6ICdjb21wYWN0JyxcbiAgICAgIG1hcmdpblg6IDIwLFxuICAgICAgbWFyZ2luWTogMjAsXG4gICAgICBjb2x1bW5HYXA6IDQwLFxuICAgICAgdmVydGljYWxHYXA6IDIwLFxuICAgICAgcmVzaXplVG9GaXQ6IGZhbHNlXG4gICAgfSk7XG4gICAgY29uc3QgcmVzZXRDZWxsVmlldyA9IHRoaXMucmVzZXRDZWxsVmlldztcbiAgICAvLyBDcmVhdGUgdG9vbHRpcHMgZm9yIGFsbCB0aGUgc2hhcGVzIGluIHN0ZW5jaWwuXG4gICAgc3RlbmNpbC5vbignZWxlbWVudDpkcm9wJywgKGVsZW1lbnRWaWV3KSA9PiB7XG4gICAgICAvLyBvcGVuIGluc3BlY3RvciBhZnRlciBhIG5ldyBlbGVtZW50IGRyb3BwZWQgZnJvbSBzdGVuY2lsXG4gICAgICBvcGVuVG9vbHMoZWxlbWVudFZpZXcpO1xuICAgIH0pO1xuXG4gICAgLyogS0VZQk9BUkQgKi9cbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLkVkaXQpIHtcbiAgICAgIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpIHtcbiAgICAgIGtleWJvYXJkLm9uKFxuICAgICAgICB7XG4gICAgICAgICAgJ2N0cmwrYyc6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIENvcHkgYWxsIHNlbGVjdGVkIGVsZW1lbnRzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGxpbmtzLlxuICAgICAgICAgICAgY2xpcGJvYXJkLmNvcHlFbGVtZW50cyhzZWxlY3Rpb24uY29sbGVjdGlvbiwgZ3JhcGgpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICAnY3RybCt2JzogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFzdGVkQ2VsbHMgPSBjbGlwYm9hcmQucGFzdGVDZWxscyhncmFwaCwge1xuICAgICAgICAgICAgICB0cmFuc2xhdGU6IHsgZHg6IDIwLCBkeTogMjAgfSxcbiAgICAgICAgICAgICAgdXNlTG9jYWxTdG9yYWdlOiB0cnVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBfLmZpbHRlcihwYXN0ZWRDZWxscywgKGNlbGwpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNlbGwuaXNFbGVtZW50KCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHBhc3RlZCBlbGVtZW50cyBnZXQgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgbWFrZXMgdGhlIFVYIGJldHRlciBhc1xuICAgICAgICAgICAgLy8gdGhlIHVzZXIgY2FuIGltbWVkaWF0ZWx5IG1hbmlwdWxhdGUgdGhlIHBhc3RlZCBlbGVtZW50cy5cbiAgICAgICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlc2V0KGVsZW1lbnRzKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgJ2N0cmwreCBzaGlmdCtkZWxldGUnOiAoKSA9PiB7XG4gICAgICAgICAgICBjbGlwYm9hcmQuY3V0RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcbiAgICAgICAgICAgIHJlc2V0Q2VsbFZpZXcoKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgJ2RlbGV0ZSBiYWNrc3BhY2UnOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGdyYXBoLnJlbW92ZUNlbGxzKHNlbGVjdGlvbi5jb2xsZWN0aW9uLnRvQXJyYXkoKSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgICdjdHJsK3onOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3RpZnkgPSBpc1NlbGVjdGVkQ2VsbFZpZXdJblNlbGVjdGlvbihzZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29tbWFuZE1hbmFnZXIudW5kbygpO1xuICAgICAgICAgICAgc2VsZWN0aW9uLmNhbmNlbFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICAgICAgICByZXNldENlbGxWaWV3KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcblxuICAgICAgICAgICdjdHJsK3knOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3RpZnkgPSBpc1NlbGVjdGVkQ2VsbFZpZXdJblNlbGVjdGlvbihzZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29tbWFuZE1hbmFnZXIucmVkbygpO1xuICAgICAgICAgICAgc2VsZWN0aW9uLmNhbmNlbFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICAgICAgICByZXNldENlbGxWaWV3KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcblxuICAgICAgICAgICdjdHJsK2EnOiAoKSA9PiB7XG4gICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChncmFwaC5nZXRFbGVtZW50cygpKTtcbiAgICAgICAgICAgIHJlc2V0Q2VsbFZpZXcoKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgJ2N0cmwrcGx1cyc6IChldnQpID0+IHtcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci56b29tKDAuMiwgeyBtYXg6IDUsIGdyaWQ6IDAuMiB9KTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgJ2N0cmwrbWludXMnOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuem9vbSgtMC4yLCB7IG1pbjogMC4yLCBncmlkOiAwLjIgfSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgICdrZXlkb3duOnNoaWZ0JzogKGV2dCkgPT4ge1xuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2Nyb3NzaGFpcicpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICAna2V5dXA6c2hpZnQnOiAoKSA9PiB7XG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnNldEN1cnNvcignZ3JhYicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvcGVuVG9vbHMoY2VsbFZpZXcpIHtcbiAgICAgIGlmICghY2VsbFZpZXcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2xvc2VUb29scygpO1xuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBjZWxsVmlldztcbiAgICAgIGNvbnN0IGNlbGwgPSBjZWxsVmlldy5tb2RlbDtcbiAgICAgIGNvbnN0IHR5cGUgPSBjZWxsLmdldCgndHlwZScpO1xuXG4gICAgICBqb2ludC51aS5JbnNwZWN0b3IuY3JlYXRlKCcjaW5zcGVjdG9yLWNvbnRhaW5lcicsIHtcbiAgICAgICAgY2VsbCxcbiAgICAgICAgaW5wdXRzOiBpbnB1dHNbdHlwZV0sXG4gICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgIGdlbmVyYWw6IHsgbGFiZWw6IHR5cGUsIGluZGV4OiAxIH0sXG4gICAgICAgICAgZGVmYXVsdHM6IHsgaW5kZXg6IDIgfSxcbiAgICAgICAgICBmb250c2l6ZTogeyBpbmRleDogMyB9LFxuICAgICAgICAgIGFwcGVhcmFuY2U6IHsgaW5kZXg6IDQgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVzZXQoW10pO1xuICAgICAgLy8gQWRkIHRoZSBjZWxsIGludG8gdGhlIHNlbGVjdGlvbiBjb2xsZWN0aW9uIHNpbGVudGx5XG4gICAgICAvLyBzbyBubyBzZWxlY3Rpb24gYm94IGlzIHJlbmRlcmVkIGFib3ZlIHRoZSBjZWxsVmlldy5cbiAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLmFkZChjZWxsLCB7IHNpbGVudDogdHJ1ZSB9KTtcblxuICAgICAgaWYgKGNlbGwuaXNFbGVtZW50KCkpIHtcbiAgICAgICAgbGV0IG1pblNpemU7XG5cbiAgICAgICAgaWYgKGNlbGwgaW5zdGFuY2VvZiBicG1uMi5IZWFkZXJlZFBvb2wpIHtcbiAgICAgICAgICBtaW5TaXplID0gY2VsbC5nZXRNaW5pbWFsU2l6ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1pblNpemUgPSB7IHdpZHRoOiAzMCwgaGVpZ2h0OiAzMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZnJlZVRyYW5zZm9ybSA9IG5ldyBqb2ludC51aS5GcmVlVHJhbnNmb3JtKHtcbiAgICAgICAgICBjZWxsVmlldyxcbiAgICAgICAgICBhbGxvd09ydGhvZ29uYWxSZXNpemU6IGZhbHNlLFxuICAgICAgICAgIGFsbG93Um90YXRpb246IGZhbHNlLFxuICAgICAgICAgIG1pbldpZHRoOiBtaW5TaXplLndpZHRoLFxuICAgICAgICAgIG1pbkhlaWdodDogbWluU2l6ZS5oZWlnaHRcbiAgICAgICAgfSkucmVuZGVyKCk7XG5cbiAgICAgICAgY29uc3QgaGFsbyA9IG5ldyBqb2ludC51aS5IYWxvKHtcbiAgICAgICAgICBjZWxsVmlldyxcbiAgICAgICAgICB0aGVtZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIHR5cGU6ICd0b29sYmFyJyxcbiAgICAgICAgICB1c2VNb2RlbEdlb21ldHJ5OiB0cnVlLFxuICAgICAgICAgIGJveENvbnRlbnQ6IChjZWxsVmlldykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNlbGxWaWV3Lm1vZGVsLmdldCgndHlwZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChlZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuRWRpdCkge1xuICAgICAgICAgIGlmICh0eXBlID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2xpbmsnKTtcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdmb3JrJyk7XG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgndW5saW5rJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGhhbG8ucmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNlbGwuaXNMaW5rKCkpIHtcbiAgICAgICAgY29uc3QgbnMgPSBqb2ludC5saW5rVG9vbHM7XG4gICAgICAgIGNvbnN0IHRvb2xzVmlldyA9IG5ldyBqb2ludC5kaWEuVG9vbHNWaWV3KHtcbiAgICAgICAgICBuYW1lOiAnbGluay1wb2ludGVyZG93bicsXG4gICAgICAgICAgdG9vbHM6IFtcbiAgICAgICAgICAgIG5ldyBucy5WZXJ0aWNlcygpLFxuICAgICAgICAgICAgbmV3IG5zLlNvdXJjZUFuY2hvcigpLFxuICAgICAgICAgICAgbmV3IG5zLlRhcmdldEFuY2hvcigpLFxuICAgICAgICAgICAgbmV3IG5zLlNvdXJjZUFycm93aGVhZCgpLFxuICAgICAgICAgICAgbmV3IG5zLlRhcmdldEFycm93aGVhZCgpLFxuICAgICAgICAgICAgbmV3IG5zLlNlZ21lbnRzKCksXG4gICAgICAgICAgICBuZXcgbnMuQm91bmRhcnkoeyBwYWRkaW5nOiAxNSB9KSxcbiAgICAgICAgICAgIG5ldyBucy5SZW1vdmUoeyBvZmZzZXQ6IC0yMCwgZGlzdGFuY2U6IDQwIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KTtcblxuICAgICAgICBjZWxsVmlldy5hZGRUb29scyh0b29sc1ZpZXcpO1xuICAgICAgfVxuXG4gICAgICAvKiBRTVMtMjM2NDogc2hvdyBsaW5rIGFuZCBwb2l0ZXIgY2hhbmdlIHRvIGhhbmQgKi9cbiAgICAgIGlmICh3aW5kb3dbYGV2ZW50YF1bYHR5cGVgXSA9PT0gJ21vdXNlb3ZlcicgJiYgZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcbiAgICAgICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYGpvaW50LWVsZW1lbnRgKTtcbiAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBzaGFwZUlkID0gY2VsbFZpZXcubW9kZWwuYXR0cmlidXRlcy5pZDtcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGxpc3RbaV0uYXR0cmlidXRlc1swXS5ub2RlVmFsdWUgIT09IHNoYXBlSWQpIHtcbiAgICAgICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAnbW92ZSc7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2hhcGVEZXRhaWxNb2RlbCA9IHdpbmRvd1tgU0hBUEVfREVUQUlMX01PREVMYF07XG4gICAgICAgICAgICBpZiAoIXNoYXBlRGV0YWlsTW9kZWwpIHtcbiAgICAgICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAnbW92ZSc7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBzaGFwZURldGFpbE1vZGVsLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4geC5zaGFwZUlkID09PSBzaGFwZUlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ21vdmUnO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNoYXBlRGV0YWlsID0gc2hhcGVEZXRhaWxNb2RlbFtpbmRleF07XG4gICAgICAgICAgICBsZXQgY29ubmVjdGlvbk5hbWUgPSAnJztcbiAgICAgICAgICAgIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkFjdGl2aXR5KSB7XG4gICAgICAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ3BvaW50ZXInO1xuICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0FDVElWSVRZO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmspIHtcbiAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOSztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2Vzcykge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVmYXVsdC1jYXNlXG4gICAgICAgICAgICAgIHN3aXRjaCAoc2hhcGVEZXRhaWwuZG9jdW1lbnRNb2RlbC5yZWxhdGVkSXRlbXNbMF0uaXRlbVR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5kb2N1bWVudDpcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fRE9DVU1FTlQ7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5wcm9jZXNzOlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19QUk9DRVNTO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBSZWxhdGVkSXRlbVR5cGUuYXJlYTpcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fQVJFQTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLmhhbmRib29rOlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19GT0xERVI7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQ6XG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0lOVEVSQ09OTkVDVEVEX1BST0NFU1M7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRldmlhdGlvbikge1xuICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0RFVklBVElPTjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3QpIHtcbiAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19DSEVDS0xJU1Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQ29tcGxpYW5jZSkge1xuICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0NPTVBMSUFOQ0VfUkVRVUlSRU1FTlQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkICE9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkFjdGl2aXR5KSB7XG4gICAgICAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ3BvaW50ZXInO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGFsbyA9IG5ldyBqb2ludC51aS5IYWxvKHtcbiAgICAgICAgICAgICAgY2VsbFZpZXcsXG4gICAgICAgICAgICAgIHRoZW1lOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICAgIGJveENvbnRlbnQ6IGNvbm5lY3Rpb25OYW1lXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGhhbG8ucmVuZGVyKCk7XG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncmVtb3ZlJyk7XG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncmVzaXplJyk7XG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnY2xvbmUnKTtcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdsaW5rJyk7XG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnZm9yaycpO1xuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3VubGluaycpO1xuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3JvdGF0ZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNoYXBlRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ25vLXJvdGF0aW9uJyk7XG4gICAgICAgIGlmIChzaGFwZUVsZW1lbnQgJiYgc2hhcGVFbGVtZW50Lmxlbmd0aCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGVFbGVtZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXNoYXBlRWxlbWVudFtpXS5jbGFzc0xpc3QuY29udGFpbnMoJ2pvaW50LWZyZWUtdHJhbnNmb3JtJykpIHtcbiAgICAgICAgICAgICAgc2hhcGVFbGVtZW50W2ldLmNsYXNzTGlzdC5hZGQoJ2pvaW50LWZyZWUtdHJhbnNmb3JtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvd1tgZXZlbnRgXVtgdHlwZWBdID09PSAnbW91c2VvdXQnICYmIGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XG4gICAgICAgIGNvbnN0IGhhbG8gPSBuZXcgam9pbnQudWkuSGFsbyh7XG4gICAgICAgICAgY2VsbFZpZXcsXG4gICAgICAgICAgdGhlbWU6ICdkZWZhdWx0JyxcbiAgICAgICAgICBib3hDb250ZW50OiAnJ1xuICAgICAgICB9KTtcbiAgICAgICAgaGFsby5yZW5kZXIoKTtcbiAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3JlbW92ZScpO1xuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncmVzaXplJyk7XG4gICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdjbG9uZScpO1xuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnbGluaycpO1xuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnZm9yaycpO1xuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgndW5saW5rJyk7XG4gICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyb3RhdGUnKTtcbiAgICAgICAgY29uc3Qgc2hhcGVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbm8tcm90YXRpb24nKTtcbiAgICAgICAgaWYgKHNoYXBlRWxlbWVudCAmJiBzaGFwZUVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZUVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHNoYXBlRWxlbWVudFtpXS5jbGFzc0xpc3QucmVtb3ZlKCdqb2ludC1mcmVlLXRyYW5zZm9ybScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogUU1TLTIxMjU6IFNob3cgcHJvY2VzcyBjb25uZWN0IHR5cGUgKi9cbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LklTX1NIT1dfQ09OTkVDVFlQRV0gPSB0cnVlO1xuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gY2VsbFZpZXcubW9kZWwuYXR0cmlidXRlcy5pZDtcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gY2VsbFZpZXcubW9kZWwuYXR0cmlidXRlcy50eXBlO1xuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfRkxPV0NIQVJUX0xPQURJTkddID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLyogUU1TLTE0MDQ6IEN1c3RvbWl6YXRpb24gKi9cbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl0gPSBwYXBlcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9zZVRvb2xzKCkge1xuICAgICAgcGFwZXIucmVtb3ZlVG9vbHMoKTtcbiAgICAgIGpvaW50LnVpLkluc3BlY3Rvci5jbG9zZSgpO1xuICAgICAgam9pbnQudWkuRnJlZVRyYW5zZm9ybS5jbGVhcihwYXBlcik7XG4gICAgICBmcmVlVHJhbnNmb3JtID0gbnVsbDtcbiAgICAgIGpvaW50LnVpLkhhbG8uY2xlYXIocGFwZXIpO1xuXG4gICAgICBjb25zdCBjZWxscyA9IGdyYXBoLmdldENlbGxzKCk7XG4gICAgICBjZWxscy5mb3JFYWNoKChjZWxsKSA9PiB7XG4gICAgICAgIGlmIChjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xuICAgICAgICAgIGNlbGwuc2V0KCd6JywgLTEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NlbGVjdGVkQ2VsbFZpZXdJblNlbGVjdGlvbihzZWxlY3Rpb24pIHtcbiAgICAgIGNvbnN0IG1vZGVscyA9IHNlbGVjdGlvbi5jb2xsZWN0aW9uLnRvQXJyYXkoKSB8fCBbXTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkU2hhcGVJZCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF07XG4gICAgICByZXR1cm4gISFzZWxlY3RlZFNoYXBlSWQgJiYgbW9kZWxzLmZpbHRlcihtb2RlbCA9PiBtb2RlbC5hdHRyaWJ1dGVzLmlkID09IHNlbGVjdGVkU2hhcGVJZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hvd1N0YXR1cyhtZXNzYWdlLCB0eXBlKSB7XG4gICAgICAkKCcuc3RhdHVzJykucmVtb3ZlQ2xhc3MoJ2luZm8gZXJyb3Igc3VjY2VzcycpLmFkZENsYXNzKHR5cGUpLmh0bWwobWVzc2FnZSk7XG4gICAgICAkKCcjc3RhdHVzYmFyLWNvbnRhaW5lcicpXG4gICAgICAgIC5kZXF1ZXVlKClcbiAgICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKVxuICAgICAgICAuZGVsYXkoMzAwMClcbiAgICAgICAgLnF1ZXVlKCgpID0+IHtcbiAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGxpbmtDb25zdHJ1Y3Rvcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICAgIGNvbnN0IGxpbmsyID0gbmV3IGxpbmtDb25zdHJ1Y3Rvcih7XG4gICAgICAgIHNvdXJjZTogbGluay5zb3VyY2UoKSxcbiAgICAgICAgdGFyZ2V0OiBsaW5rLnRhcmdldCgpLFxuICAgICAgICB2ZXJ0aWNlczogbGluay52ZXJ0aWNlcygpXG4gICAgICB9KTtcbiAgICAgIGxpbmsucmVtb3ZlKHsgcmVwbGFjZUxpbms6IHRydWUgfSk7XG4gICAgICBsaW5rMi5zZXQoJ3onLCAtMSk7XG4gICAgICBsaW5rMi5hZGRUbyhncmFwaCk7XG4gICAgfVxuXG4gICAgZ3JhcGgub24oJ2NoYW5nZScsIChjZWxsLCBvcHQpID0+IHtcbiAgICAgIHRoaXMub25DaGFuZ2VUZXh0SW5zaWRlKGNlbGwpO1xuICAgICAgdGhpcy5vbkNoYW5nZUxpbmtMYWJlbChjZWxsLCAxMik7XG4gICAgICB0aGlzLm9uQ2hhbmdlQWxsaWdtZW50KGNlbGwsIG9wdCk7XG4gICAgICBpZiAoIW9wdC5pbnNwZWN0b3IgfHwgIWZyZWVUcmFuc2Zvcm0gfHwgY2VsbC5nZXQoJ3R5cGUnKSAhPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbWluU2l6ZSA9IGNlbGwuZ2V0TWluaW1hbFNpemUoKTtcbiAgICAgIGZyZWVUcmFuc2Zvcm0ub3B0aW9ucy5taW5XaWR0aCA9IG1pblNpemUud2lkdGg7XG4gICAgICBmcmVlVHJhbnNmb3JtLm9wdGlvbnMubWluSGVpZ2h0ID0gbWluU2l6ZS5oZWlnaHQ7XG4gICAgfSk7XG5cbiAgICAvKiBUT09MQkFSICovXG4gICAgY29uc3QgdG9vbGJhciA9IG5ldyBqb2ludC51aS5Ub29sYmFyKHtcbiAgICAgIHRvb2xzOiB0b29sYmFyQ29uZmlnLnRvb2xzLFxuICAgICAgcmVmZXJlbmNlczoge1xuICAgICAgICBwYXBlclNjcm9sbGVyLFxuICAgICAgICBjb21tYW5kTWFuYWdlclxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgdG9vbGJhckNvbW1hbmRzID0ge1xuICAgICAgdG9KU09OOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdpbmRvd0ZlYXR1cmVzID0gJ21lbnViYXI9bm8sbG9jYXRpb249bm8scmVzaXphYmxlPXllcyxzY3JvbGxiYXJzPXllcyxzdGF0dXM9bm8nO1xuICAgICAgICBjb25zdCB3aW5kb3dOYW1lID0gXy51bmlxdWVJZCgnanNvbl9vdXRwdXQnKTtcbiAgICAgICAgY29uc3QganNvbldpbmRvdyA9IHdpbmRvdy5vcGVuKCcnLCB3aW5kb3dOYW1lLCB3aW5kb3dGZWF0dXJlcyk7XG5cbiAgICAgICAganNvbldpbmRvdy5kb2N1bWVudC53cml0ZShKU09OLnN0cmluZ2lmeShncmFwaC50b0pTT04oKSkpO1xuICAgICAgfSxcbiAgICAgIGxvYWRHcmFwaDogKCkgPT4ge1xuICAgICAgICBnZEF1dGgoKCkgPT4ge1xuICAgICAgICAgIHNob3dTdGF0dXMoJ2xvYWRpbmcuLicsICdpbmZvJyk7XG4gICAgICAgICAgZ2RMb2FkKChuYW1lLCBjb250ZW50KSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICAgICAgICAgICAgZ3JhcGguZnJvbUpTT04oanNvbik7XG4gICAgICAgICAgICAgIGNvbnN0IGVsRmlsZU5hbWUgPSA8SFRNTEJ1dHRvbkVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVOYW1lJyk7XG4gICAgICAgICAgICAgIGVsRmlsZU5hbWUudmFsdWUgPSBuYW1lLnJlcGxhY2UoLy5qc29uJC8sICcnKTtcbiAgICAgICAgICAgICAgc2hvd1N0YXR1cygnbG9hZGVkLicsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ2ZhaWxlZC4nLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9LFxuXG4gICAgICBzYXZlR3JhcGg6ICgpID0+IHtcbiAgICAgICAgZ2RBdXRoKCgpID0+IHtcbiAgICAgICAgICBzaG93U3RhdHVzKCdzYXZpbmcuLicsICdpbmZvJyk7XG4gICAgICAgICAgLy8gbGV0IG5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZU5hbWUnKS52YWx1ZTtcbiAgICAgICAgICBjb25zdCBuYW1lID0gPEhUTUxCdXR0b25FbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlTmFtZScpO1xuICAgICAgICAgIGdkU2F2ZShuYW1lLnZhbHVlLCBKU09OLnN0cmluZ2lmeShncmFwaC50b0pTT04oKSksIChmaWxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgICBzaG93U3RhdHVzKCdzYXZlZC4nLCAnc3VjY2VzcycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2hvd1N0YXR1cygnZmFpbGVkLicsICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH0sXG4gICAgICBvblNlbGVjdGVkOiAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNUZW1wKSB7XG4gICAgICAgICAgdGhpcy5qc29uVGVtcENvbnRlbnQgPSB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQ7XG4gICAgICAgICAgdGhpcy5pc1RlbXAgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQuanNvbkNvbnRlbnQpIHtcbiAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfRkxPV0NIQVJUX0lEXSA9IGV2ZW50LmZsb3dDaGFydElkO1xuICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9KU09OX0NPTlRFTlRdID0gZXZlbnQuanNvbkNvbnRlbnQ7XG4gICAgICAgICAgaWYgKHRoaXMuaXNTaG93Q29uZmlybU1lc3NhZ2UoKSkge1xuICAgICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LkNIQU5HSU5HX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5ORVhUX0NIQU5HSU5HX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmVzZXRDZWxsVmlldygpO1xuICAgICAgICB9XG4gICAgICAgIGRpYWdyYW1UZW1wbGF0ZS5mbG93Q2hhcnRJZCA9IGV2ZW50LmZsb3dDaGFydElkO1xuICAgICAgfSxcbiAgICAgIG9uQ2xlYXI6ICgpID0+IHtcbiAgICAgICAgZ3JhcGguY2xlYXIoKTtcbiAgICAgICAgdGhpcy5yZXNldENlbGxWaWV3KCk7XG4gICAgICB9LFxuICAgICAgb25EZWxldGVUZW1wbGF0ZTogKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGlhZ3JhbVRlbXBsYXRlLmZsb3dDaGFydElkICYmXG4gICAgICAgICAgZGlhZ3JhbVRlbXBsYXRlLmZsb3dDaGFydElkICE9PSAnJyAmJlxuICAgICAgICAgIGRpYWdyYW1UZW1wbGF0ZS5mbG93Q2hhcnRJZCAhPT0gZ3VpZEhlbHBlci5lbXB0eVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmlzRGVsZXRlVGVtcGxhdGUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaXNEaXNhYmxlVG9vbGJhciA9IHRydWU7XG4gICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LkRFTEVURV9URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5NVVNUX1NFTEVDVF9URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBvblNhdmVBc1RlbXBsYXRlOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNTYXZlQXNUZW1wbGF0ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlVG9vbGJhciA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmlzVGVtcCkge1xuICAgICAgICAgIHRoaXMuanNvblRlbXBDb250ZW50ID0gdGhpcy5qc29uT3JpZ2luYWxDb250ZW50O1xuICAgICAgICAgIHRoaXMuaXNUZW1wID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LlNBVkVfQVNfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcbiAgICAgIH0sXG5cbiAgICAgIG9uUmVzZXRUb1RlbXBUZW1wbGF0ZTogKCkgPT4ge1xuICAgICAgICB0aGlzLmlzU2VsZWN0ZWRUZW1wbGF0ZSA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV07XG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWRUZW1wbGF0ZSkge1xuICAgICAgICAgIHRoaXMuaXNSZXNldCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0Rpc2FibGVUb29sYmFyID0gdHJ1ZTtcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuUkVTRVRfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgY2hhbmdlU25hcExpbmVzKGNoZWNrZWQpIHtcbiAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICBzbmFwbGluZXMuc3RhcnRMaXN0ZW5pbmcoKTtcbiAgICAgICAgICBzdGVuY2lsLm9wdGlvbnMuc25hcGxpbmVzID0gdGhpcy5zbmFwbGluZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc25hcGxpbmVzLnN0b3BMaXN0ZW5pbmcoKTtcbiAgICAgICAgICBzdGVuY2lsLm9wdGlvbnMuc25hcGxpbmVzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgYXBwbHlPblNlbGVjdGlvbihtZXRob2QpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3RvRnJvbnQnKSB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IHNlbGVjdGlvbi5jb2xsZWN0aW9uLm1vZGVsc1swXS5nZXQoJ3R5cGUnKTtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ3JhcGguc3RhcnRCYXRjaCgnc2VsZWN0aW9uJyk7XG4gICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLm1vZGVscy5mb3JFYWNoKChtb2RlbCkgPT4ge1xuICAgICAgICAgIG1vZGVsW21ldGhvZF0oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGdyYXBoLnN0b3BCYXRjaCgnc2VsZWN0aW9uJyk7XG4gICAgICB9LFxuICAgICAgdG9nZ2xlRnVsbHNjcmVlbjogKCkgPT4ge1xuICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZF49XCJjZGstb3ZlcmxheS1cIl0nKVswXSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXNGdWxsU2NyZWVuID0gIXRoaXMuaXNGdWxsU2NyZWVuO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRnVsbFNjcmVlbikge1xuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZF49XCJjZGstb3ZlcmxheS1cIl0nKVswXT8uY2xhc3NMaXN0LnJlbW92ZSgnY2xvc2UtZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfY2RrLW92ZXJsYXknKTtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcicpWzBdPy5jbGFzc0xpc3QucmVtb3ZlKCdqdXN0aWZ5LWNvbnRlbnRfY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXInKTtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGVmdHBhbmVsJyk/LmNsYXNzTGlzdC5hZGQoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhbmVsJyk7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JpZ2h0cGFuZWwnKT8uY2xhc3NMaXN0LmFkZCgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFuZWwnKTtcblxuICAgICAgICAgIGlmICh0aGlzLmlzRXhwYW5kZWRQYW5lbCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKT8uY2xhc3NMaXN0LmFkZCgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFwZXJwYW5lbCcpPy5jbGFzc0xpc3QuYWRkKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYXBlcnBhbmVsLWV4cGFuZHBhbmVsJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZF49XCJjZGstb3ZlcmxheS1cIl0nKVswXT8uY2xhc3NMaXN0LmFkZCgnY2xvc2UtZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfY2RrLW92ZXJsYXknKTtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcicpWzBdPy5jbGFzc0xpc3QuYWRkKCdqdXN0aWZ5LWNvbnRlbnRfY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXInKTtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGVmdHBhbmVsJyk/LmNsYXNzTGlzdC5yZW1vdmUoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhbmVsJyk7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JpZ2h0cGFuZWwnKT8uY2xhc3NMaXN0LnJlbW92ZSgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFuZWwnKTtcblxuICAgICAgICAgIGlmICh0aGlzLmlzRXhwYW5kZWRQYW5lbCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKT8uY2xhc3NMaXN0LnJlbW92ZSgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbCcpO1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKS5zdHlsZS5oZWlnaHQgPSAnNDAwcHgnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFwZXJwYW5lbCcpPy5jbGFzc0xpc3QucmVtb3ZlKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYXBlcnBhbmVsLWV4cGFuZHBhbmVsJyk7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFwZXJwYW5lbCcpLnN0eWxlLmhlaWdodCA9ICc1MDBweCc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB0b29sYmFyLm9uKHtcbiAgICAgICd0b2pzb246cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLnRvSlNPTixcbiAgICAgICdsb2FkOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5sb2FkR3JhcGgsXG4gICAgICAnc2F2ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMuc2F2ZUdyYXBoLFxuICAgICAgJ2NsZWFyOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5vbkNsZWFyLFxuICAgICAgJ3ByaW50OnBvaW50ZXJjbGljayc6IF8uYmluZChwYXBlci5wcmludCwgcGFwZXIpLFxuICAgICAgJ3NhdmVBc1RlbXBsYXRlOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5vblNhdmVBc1RlbXBsYXRlLFxuICAgICAgJ3NlbGVjdFRlbXBsYXRlOm9wdGlvbjpzZWxlY3QnOiB0b29sYmFyQ29tbWFuZHMub25TZWxlY3RlZCxcbiAgICAgICdkZWxldGVUZW1wbGF0ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25EZWxldGVUZW1wbGF0ZSxcbiAgICAgICdyZXNldFRvVGVtcFRlbXBsYXRlOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5vblJlc2V0VG9UZW1wVGVtcGxhdGUsXG4gICAgICAndG8tZnJvbnQ6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLmFwcGx5T25TZWxlY3Rpb24uYmluZCh0aGlzLCAndG9Gcm9udCcpLFxuICAgICAgJ3RvLWJhY2s6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLmFwcGx5T25TZWxlY3Rpb24uYmluZCh0aGlzLCAndG9CYWNrJyksXG4gICAgICAnc25hcGxpbmU6Y2hhbmdlJzogdG9vbGJhckNvbW1hbmRzLmNoYW5nZVNuYXBMaW5lcy5iaW5kKHRoaXMpLFxuICAgICAgJ2dyaWQtc2l6ZTpjaGFuZ2UnOiBwYXBlci5zZXRHcmlkU2l6ZS5iaW5kKHBhcGVyKSxcbiAgICAgICdmdWxsc2NyZWVuOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy50b2dnbGVGdWxsc2NyZWVuXG4gICAgfSk7XG5cbiAgICAkKCcjdG9vbGJhci1jb250YWluZXInKS5odG1sKCcnKTtcbiAgICB0b29sYmFyLnJlbmRlcigpLiRlbC5hcHBlbmRUbygnI3Rvb2xiYXItY29udGFpbmVyJyk7XG5cbiAgICBjb25zdCB6b29tVG9vbCA9IG5ldyBqb2ludC51aS5Ub29sYmFyKHtcbiAgICAgIC8vIGluaXRpIGFsaXplIHRvb2xzIHdpdGggZGVmYXVsdCBzZXR0aW5nc1xuICAgICAgdG9vbHM6IFsnem9vbVRvRml0JywgJ3pvb21JbicsICd6b29tT3V0J10sXG4gICAgICByZWZlcmVuY2VzOiB7XG4gICAgICAgIHBhcGVyU2Nyb2xsZXIsXG4gICAgICAgIGNvbW1hbmRNYW5hZ2VyXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB6b29tVG9vbC5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyN6b29tVG9vbGJhcicpO1xuXG4gICAgbmV3IGpvaW50LnVpLlRvb2x0aXAoe1xuICAgICAgdGFyZ2V0OiAnW2RhdGEtdG9vbHRpcF0nLFxuICAgICAgY29udGVudChlbCkge1xuICAgICAgICByZXR1cm4gZWwuZGF0YXNldC50b29sdGlwO1xuICAgICAgfSxcbiAgICAgIHRvcDogJy5qb2ludC10b29sYmFyJyxcbiAgICAgIHBhZGRpbmc6IDEwLFxuICAgICAgZGlyZWN0aW9uOiAndG9wJ1xuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHRvb2x0aXBzIGZvciBhbGwgdGhlIHNoYXBlcyBpbiBzdGVuY2lsLlxuICAgIHN0ZW5jaWxcbiAgICAgIC5nZXRHcmFwaCgpXG4gICAgICAuZ2V0KCdjZWxscycpXG4gICAgICAuZWFjaCgoY2VsbCkgPT4ge1xuICAgICAgICBuZXcgam9pbnQudWkuVG9vbHRpcCh7XG4gICAgICAgICAgdGFyZ2V0OiBgLmpvaW50LXN0ZW5jaWwgW21vZGVsLWlkPVwiJHtjZWxsLmlkfVwiXWAsXG4gICAgICAgICAgY29udGVudDogY2VsbC5nZXQoJ3R5cGUnKS5zcGxpdCgnLicpWzFdLFxuICAgICAgICAgIGJvdHRvbTogJy5qb2ludC1zdGVuY2lsJyxcbiAgICAgICAgICBkaXJlY3Rpb246ICdib3R0b20nLFxuICAgICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIE9iamVjdC5hc3NpZ24oam9pbnQuc2hhcGVzLmJwbW4uaWNvbnMsIHRoaXMuYnVpbGROZXdJY29ucygpKTtcbiAgICAvKiBMb2FkICBwcm9jZXNzIGRpZ3JhbSAqL1xuICAgIHRoaXMubG9hZFByb2Nlc3NEaWFncmFtKGpzb25Db250ZW50KTtcbiAgICB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShncmFwaC50b0pTT04oKSk7XG4gICAgcGFwZXJTY3JvbGxlci5wb3NpdGlvbkNvbnRlbnQoJ3RvcC1sZWZ0JywgeyBwYWRkaW5nOiA1MCwgdXNlTW9kZWxHZW9tZXRyeTogdHJ1ZSB9KTtcblxuICAgIC8qIFNldCBnIHJhcGggb2JqZWN0ICovXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXSA9IGdyYXBoO1xuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl0gPSBwYXBlcjtcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdID0gcGFwZXJTY3JvbGxlcjtcbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuRElBR1JBTV9MT0FERUQsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcbiAgfVxuXG4gIGJ1aWxkTmV3SWNvbnMoeyBjb2xvciA9ICcjMDAwJyB9ID0ge30pIHtcbiAgICBjb25zdCBzdmdJY29ucyA9IHtcbiAgICAgIG1lc3NhZ2UxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjEyIDEyIDE2IDE2XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuMlwiIGQ9XCJNMTIuNSAxNS4zMTN2OS4zNzRoMTV2LTkuMzc1em0wIDBsNy41IDUuNjI0IDcuNS01LjYyNVwiLz48L3N2Zz5gLFxuICAgICAgbWVzc2FnZTI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMTIgMTIgMTYgMTZcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBkPVwiTTEyLjUgMTQuMzQ0bDcuNSA1LjYyNSA3LjUtNS42MjV6bTAgLjkzN3Y5LjM3NWgxNXYtOS4zNzVMMjAgMjAuOTA2elwiLz48L3N2Zz5gLFxuICAgICAgdGltZXIxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxnIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIj48Y2lyY2xlIGN4PVwiMjBcIiBjeT1cIjIwXCIgcj1cIjEwXCIvPjxwYXRoIGQ9XCJNMjAgMTB2M201LTJsLTEuNSAzbTUuNSAxbC0zIDEuNW00IDMuNWgtM20yIDVsLTMtMS41TTI1IDI5bC0xLjUtM00yMCAzMHYtM20tNSAybDEuNS0zTTExIDI1bDMtMS41TTEwIDIwaDNtLTItNWwzIDEuNW0xLTUuNWwxLjUgM201LjUtMWwtMiA3aDRcIi8+PC9nPjwvc3ZnPmAsXG4gICAgICBjb25kaXRpb25hbDE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiA+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTEuNTYzIDExLjU2M2gxNi44NzR2MTYuODc0SDExLjU2M1YxMS41NjNtMi44MTMgMi44MTNoMTEuMjVtLTExLjI1IDMuNzVoMTEuMjVtLTExLjI1IDMuNzVoMTEuMjVtLTExLjI1IDMuNzVoMTEuMjV6XCIvPjwvc3ZnPmAsXG4gICAgICBsaW5rMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xNC40MDYgMTguMTI1aDguNDM4di0yLjgxM0wyNy41MyAyMGwtNC42ODcgNC42ODh2LTIuODEzaC05LjM3NXYtMy43NVwiLz48L3N2Zz5gLFxuICAgICAgbGluazI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTE0LjQwNiAxOC4xMjVoOC40Mzh2LTIuODEzTDI3LjUzIDIwbC00LjY4NyA0LjY4OHYtMi44MTNoLTkuMzc1di0zLjc1XCIvPjwvc3ZnPmAsXG4gICAgICBzaWduYWwxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMy4xNyAyNC44NTFoMTMuNzA2bC02Ljg1My0xMS44NzktNi44NTQgMTEuODh6XCIvPjwvc3ZnPmAsXG4gICAgICBzaWduYWwyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTMuMTcgMjQuODUxaDEzLjcwNmwtNi44NTMtMTEuODc5LTYuODU0IDExLjg4elwiLz48L3N2Zz5gLFxuICAgICAgZXJyb3IxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTI2LjQgMTUuNDU1bC0zLjIzOCAxMi41OEwxNy43IDE4LjM3IDEzLjc2IDIzLjhsMy40NzgtMTIuNDEyIDUuNTc2IDguNzIgMy41ODYtNC42NTJ6XCIvPjwvc3ZnPmAsXG4gICAgICBlcnJvcjI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTI2LjQgMTUuNDU1bC0zLjIzOCAxMi41OEwxNy43IDE4LjM3IDEzLjc2IDIzLjhsMy40NzgtMTIuNDEyIDUuNTc2IDguNzIgMy41ODYtNC42NTJ6XCIvPjwvc3ZnPmAsXG4gICAgICBlc2NhbGF0aW9uMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0yMCAxMy4yMTlsNS42MjUgMTQuMDYyTDIwIDIwLjk1M2wtNS42MjUgNi4zMjh6XCIvPjwvc3ZnPmAsXG4gICAgICBlc2NhbGF0aW9uMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMjAgMTMuMjE5bDUuNjI1IDE0LjA2MkwyMCAyMC45NTNsLTUuNjI1IDYuMzI4elwiLz48L3N2Zz5gLFxuICAgICAgdGVybWluYXRpb24xOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxjaXJjbGUgY3g9XCIyMFwiIGN5PVwiMjBcIiByPVwiMTAuNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+PC9zdmc+YCxcbiAgICAgIHRlcm1pbmF0aW9uMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48Y2lyY2xlIGN4PVwiMjBcIiBjeT1cIjIwXCIgcj1cIjEwLjVcIiBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz48L3N2Zz5gLFxuICAgICAgY29tcGVuc2F0aW9uMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xOSAxMy40Mzh2MTMuMTI0TDEyLjQzNyAyMCAxOSAxMy40MzdtNi41NjMgMHYxMy4xMjZMMTkgMjBsNi41NjMtNi41NjN6XCIvPjwvc3ZnPmAsXG4gICAgICBjb21wZW5zYXRpb24yOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xOSAxMy40Mzh2MTMuMTI0TDEyLjQzNyAyMCAxOSAxMy40MzdtNi41NjMgMHYxMy4xMjZMMTkgMjBsNi41NjMtNi41NjN6XCIvPjwvc3ZnPmAsXG4gICAgICBjYW5jZWwxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTExLjI4NCAxNC4yNzRsMi44NjctMi44NjggNS43MzUgNS43MzUgNS43MzUtNS43MzUgMi44NjggMi44NjgtNS43MzUgNS43MzUgNS43MzUgNS43MzUtMi44NjggMi44NjctNS43MzUtNS43MzUtNS43MzUgNS43MzUtMi44NjctMi44NjcgNS43MzUtNS43MzUtNS43MzUtNS43MzV6XCIvPjwvc3ZnPmAsXG4gICAgICBjYW5jZWwyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMS4yODQgMTQuMjc0bDIuODY3LTIuODY4IDUuNzM1IDUuNzM1IDUuNzM1LTUuNzM1IDIuODY4IDIuODY4LTUuNzM1IDUuNzM1IDUuNzM1IDUuNzM1LTIuODY4IDIuODY3LTUuNzM1LTUuNzM1LTUuNzM1IDUuNzM1LTIuODY3LTIuODY3IDUuNzM1LTUuNzM1LTUuNzM1LTUuNzM1elwiLz48L3N2Zz5gLFxuICAgICAgbXVsdGlwbGUxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTI0LjUyIDI2LjM5aC05LjQ0M2wtMi45MTgtOC45ODIgNy42NC01LjU1IDcuNjQgNS41NTEtMi45MTkgOC45OHpcIi8+PC9zdmc+YCxcbiAgICAgIG11bHRpcGxlMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMjQuNTIgMjYuMzloLTkuNDQzbC0yLjkxOC04Ljk4MiA3LjY0LTUuNTUgNy42NCA1LjU1MS0yLjkxOSA4Ljk4elwiLz48L3N2Zz5gLFxuICAgICAgcGFyYWxsZWwxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTExLjM0NCAxNy4yMDN2NS42MjVoNS44NnY2LjMyOGg1LjYyNHYtNi4zMjhoNi4zMjh2LTUuNjI1aC02LjMyOHYtNS44NmgtNS42MjV2NS44NnpcIi8+PC9zdmc+YCxcbiAgICAgIHBhcmFsbGVsMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTEuMzQ0IDE3LjIwM3Y1LjYyNWg1Ljg2djYuMzI4aDUuNjI0di02LjMyOGg2LjMyOHYtNS42MjVoLTYuMzI4di01Ljg2aC01LjYyNXY1Ljg2elwiLz48L3N2Zz5gXG4gICAgfTtcblxuICAgIGNvbnN0IGljb25zID0ge307XG5cbiAgICBPYmplY3Qua2V5cyhzdmdJY29ucykuZm9yRWFjaCgoaWNvbk5hbWUpID0+IHtcbiAgICAgIGljb25zW2ljb25OYW1lXSA9IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoc3ZnSWNvbnNbaWNvbk5hbWVdKX1gO1xuICAgIH0pO1xuICAgIHJldHVybiBpY29ucztcbiAgfVxuXG4gIGxvYWRQcm9jZXNzRGlhZ3JhbShqc29uQ29udGVudD86IHN0cmluZykge1xuICAgIGlmICghanNvbkNvbnRlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGguZnJvbUpTT04oanNvbkNvbnRlbnQpO1xuICB9XG5cbiAgYWRkSXRlbVRlbXBsYXRlKGZsb3dDaGFydElkPzogc3RyaW5nLCBkaWFncmFtVGVtcGxhdGU/OiBhbnkpIHtcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xuICAgICAgfSk7XG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcbiAgICAgICAgICBpbmRleDogMSxcbiAgICAgICAgICBjb250ZW50OiBkaWFncmFtVGVtcGxhdGUudGVtcGxhdGVOYW1lLFxuICAgICAgICAgIGZsb3dDaGFydElkLFxuICAgICAgICAgIG5hbWU6IGRpYWdyYW1UZW1wbGF0ZS5uYW1lLFxuICAgICAgICAgIGpzb25Db250ZW50OiBkaWFncmFtVGVtcGxhdGUuanNvbkNvbnRlbnQsXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYXJyU2VsZWN0WzBdLm9wdGlvbnMuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHguY29udGVudCA9PT0gb3B0aW9uLmNvbnRlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVNlbGVjdEl0ZW0oZmxvd0NoYXJ0SWQ/OiBzdHJpbmcpIHtcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xuICAgICAgfSk7XG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XG4gICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnNwbGljZShcbiAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKGkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpLmZsb3dDaGFydElkID09PSBmbG93Q2hhcnRJZDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0VGVtcEdyYXBoKCkge1xuICAgIGlmICh0aGlzLmpzb25UZW1wQ29udGVudCkge1xuICAgICAgdGhpcy5sb2FkUHJvY2Vzc0RpYWdyYW0oSlNPTi5wYXJzZSh0aGlzLmpzb25UZW1wQ29udGVudCkpO1xuICAgIH1cbiAgICB0aGlzLmlzVGVtcCA9IHRydWU7XG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XG4gICAgdGhpcy5pc0Rpc2FibGVUb29sYmFyID0gZmFsc2U7XG4gIH1cblxuICBnZXRPcmlnaW5Gb3JTZWxmKCkge1xuICAgIHJldHVybiAnKic7XG4gIH1cblxuICBzZXREZWZhdWx0U2VsZWN0ZWRWYWx1ZSgpIHtcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xuICAgICAgfSk7XG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XG4gICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zWzBdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYHNlbGVjdC1ib3gtc2VsZWN0aW9uYClbMF07XG4gICAgICAgIGxpc3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1vcHRpb24tY29udGVudGApWzBdLmlubmVySFRNTCA9IEZsb3dDaGFydENvbnN0LlNFTEVDVF9URU1QTEFURTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRJdGVtRmxvd0NoYXJ0SWQoZmxvd0NoYXJ0SWQ/OiBzdHJpbmcpIHtcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xuICAgICAgfSk7XG4gICAgICBpZiAoYXJyU2VsZWN0ICYmIGFyclNlbGVjdFswXS5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5mb3JFYWNoKCh4LCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmICh4LmZsb3dDaGFydElkID09PSBmbG93Q2hhcnRJZCkge1xuICAgICAgICAgICAgeC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1zZWxlY3Rpb25gKVswXTtcbiAgICAgICAgICAgIGxpc3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1vcHRpb24tY29udGVudGApWzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICBsaXN0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYHNlbGVjdC1ib3gtb3B0aW9uLWNvbnRlbnRgKVswXS5pbm5lckhUTUwgPSB4LmNvbnRlbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHguc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzU2hvd0NvbmZpcm1NZXNzYWdlKCkge1xuICAgIGNvbnN0IG15R3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xuICAgIGNvbnN0IGpzb24gPSBteUdyYXBoLnRvSlNPTigpO1xuICAgIGlmIChqc29uLmNlbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LklTX05PVF9TSE9XX0FHQUlOXSA9IHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghd2luZG93W0Zsb3dDaGFydENvbnN0LklTX05PVF9TSE9XX0FHQUlOXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2V0VHJhbnNpdGlvblBvaW50KGpzb25Db250ZW50OiBvYmplY3QsIHBhcGVyU2Nyb2xsZXI6IGFueSkge1xuICAgIGlmIChqc29uQ29udGVudCkge1xuICAgICAgY29uc3QgY2VsbHMgPSBqc29uQ29udGVudFtgY2VsbHNgXTtcbiAgICAgIGlmIChjZWxscykge1xuICAgICAgICBsZXQgeCA9IDA7XG4gICAgICAgIGxldCB5ID0gMDtcbiAgICAgICAgY2VsbHMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgIGlmIChlLnBvc2l0aW9uICYmIGUucG9zaXRpb24pIHtcbiAgICAgICAgICAgIGlmICh4ID09PSAwICYmIHkgPT09IDApIHtcbiAgICAgICAgICAgICAgeCA9IGUucG9zaXRpb24ueDtcbiAgICAgICAgICAgICAgeSA9IGUucG9zaXRpb24ueTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnBvc2l0aW9uLnggPCB4KSB7XG4gICAgICAgICAgICAgIHggPSBlLnBvc2l0aW9uLng7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5wb3NpdGlvbi55IDwgeSkge1xuICAgICAgICAgICAgICB5ID0gZS5wb3NpdGlvbi55O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHggIT09IDAgJiYgeSAhPT0gMCkge1xuICAgICAgICAgIHggPSB4ID4gMjAgPyB4IC0gMjAgOiB4O1xuICAgICAgICAgIHkgPSB5ID4gMjAgPyB5IC0gMjAgOiB5O1xuICAgICAgICAgIHBhcGVyU2Nyb2xsZXIudHJhbnNpdGlvblRvUG9pbnQoeCwgeSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvcGVuU2hhcGVGdW5jdGlvbmFsaXR5KExBTkc6IGFueSkge1xuICAgIGNvbnN0IG15Q2VsbFZpZXcgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXTtcbiAgICBpZiAoISFteUNlbGxWaWV3KSB7XG4gICAgICBqb2ludC51aS5JbnNwZWN0b3IuY2xvc2UoKTtcbiAgICAgIGNvbnN0IGlucHV0cyA9IEluc3BlY3RvckZ1bmN0aW9uLmdldEluc3BlY3RvckNvbmZpZ3VyYXRpb24oYnBtbjIsIExBTkcsIG51bGwpO1xuICAgICAgY29uc3QgY2VsbCA9IG15Q2VsbFZpZXcubW9kZWw7XG4gICAgICBjb25zdCB0eXBlID0gY2VsbC5nZXQoJ3R5cGUnKTtcbiAgICAgIGpvaW50LnVpLkluc3BlY3Rvci5jcmVhdGUoJyNpbnNwZWN0b3ItY29udGFpbmVyJywge1xuICAgICAgICBjZWxsLFxuICAgICAgICBpbnB1dHM6IGlucHV0c1t0eXBlXSxcbiAgICAgICAgZ3JvdXBzOiB7XG4gICAgICAgICAgZ2VuZXJhbDogeyBsYWJlbDogdHlwZSwgaW5kZXg6IDEgfSxcbiAgICAgICAgICBkZWZhdWx0czogeyBpbmRleDogMiB9LFxuICAgICAgICAgIGZvbnRzaXplOiB7IGluZGV4OiAzIH0sXG4gICAgICAgICAgYXBwZWFyYW5jZTogeyBpbmRleDogNCB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldFpvb21Ub0ZpdChlZGl0TW9kZTogbnVtYmVyKSB7XG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XG4gICAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSX1NDUk9MTEVSXTtcbiAgICAgIHBhcGVyU2Nyb2xsZXIuem9vbVRvRml0KHsgcGFkZGluZzogMjAsIHNjYWxlR3JpZDogMC4yLCBtaW5TY2FsZTogMC4yLCBtYXhTY2FsZTogNSB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRQYXBlckNlbnRlcihlZGl0TW9kZTogbnVtYmVyKSB7XG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XG4gICAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSX1NDUk9MTEVSXTtcbiAgICAgIHBhcGVyU2Nyb2xsZXIuY29udGVudFRvQ2VudGVyKHsgcGFkZGluZzogMjAsIHNjYWxlR3JpZDogMC4yLCBtaW5TY2FsZTogMC4yLCBtYXhTY2FsZTogNSB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRQYXBlclRvcExlZnQoZWRpdE1vZGU6IG51bWJlcikge1xuICAgIGlmIChlZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldykge1xuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XG4gICAgICBwYXBlclNjcm9sbGVyLmNvbnRlbnRUb1RvcExlZnQoeyBwYWRkaW5nOiA1MCwgc2NhbGVHcmlkOiAwLjIsIG1pblNjYWxlOiAwLjIsIG1heFNjYWxlOiA1IH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldFNjcm9sbFRvQ29udGVudCgpIHtcbiAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tgZ3JhcGhgXTtcbiAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSX1NDUk9MTEVSXTtcbiAgICBpZiAoZ3JhcGggJiYgcGFwZXJTY3JvbGxlcikge1xuICAgICAgY29uc3QganNvbkNvbnRlbnRPYmogPSBncmFwaC50b0pTT04oKTtcbiAgICAgIGlmIChqc29uQ29udGVudE9iaiAmJiBqc29uQ29udGVudE9iai5jZWxscy5sZW5ndGgpIHtcbiAgICAgICAgcGFwZXJTY3JvbGxlci5zY3JvbGxUb0NvbnRlbnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuY2VudGVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2VUZXh0SW5zaWRlKGNlbGw6IGFueSkge1xuICAgIGlmIChjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuRXZlbnQnKSB7XG4gICAgICBpZiAoY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLnRleHQuc3R5bGVbJ3RleHQtaW5zaWRlJ10pIHtcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsLnRleHRWZXJ0aWNhbEFuY2hvciA9ICdtaWRkbGUnO1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZXaWR0aCA9ICcyMCUnO1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZIZWlnaHQgPSAnMjAlJztcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0V3JhcCddID0ge1xuICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICBlbGxpcHNpczogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsLnRleHRWZXJ0aWNhbEFuY2hvciA9ICd0b3AnO1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZXaWR0aCA9ICc3MCUnO1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZIZWlnaHQgPSAnNzAlJztcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0V3JhcCddID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkdhdGV3YXknIHx8XG4gICAgICBjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuQ29udmVyc2F0aW9uJyB8fFxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkRhdGFPYmplY3QnIHx8XG4gICAgICBjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuRGF0YVN0b3JlJ1xuICAgICkge1xuICAgICAgaWYgKGNlbGwuYXR0cmlidXRlcy5hdHRycy50ZXh0LnN0eWxlWyd0ZXh0LWluc2lkZSddKSB7XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAnbWlkZGxlJztcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0V3JhcCddID0ge1xuICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICBlbGxpcHNpczogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsLnRleHRWZXJ0aWNhbEFuY2hvciA9ICd0b3AnO1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWxbJ3RleHRXcmFwJ10gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlTGlua0xhYmVsKGNlbGw6IGFueSwgZGVmU2l6ZTogbnVtYmVyKSB7XG4gICAgaWYgKGNlbGwuaXNMaW5rKCkpIHtcbiAgICAgIGxldCBzaXplID0gZGVmU2l6ZTtcbiAgICAgIGxldCByZWZQb3MgPSAwO1xuICAgICAgY29uc3QgbGlua0lkID0gY2VsbC5pZDtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBncmFwaC5nZXRMaW5rcygpLmV2ZXJ5KGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChsaW5rSWQgPT09IGUuaWQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVmUG9zICs9IDE7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgICBpZiAoXG4gICAgICAgIGdyYXBoLmdldExpbmtzKClbcmVmUG9zXT8uYXR0cmlidXRlcy5hdHRycy50ZXh0ICYmXG4gICAgICAgIGdyYXBoLmdldExpbmtzKClbcmVmUG9zXT8uYXR0cmlidXRlcy5hdHRycy50ZXh0Wydmb250LXNpemUnXVxuICAgICAgKSB7XG4gICAgICAgIHNpemUgPSBncmFwaC5nZXRMaW5rcygpW3JlZlBvc10/LmF0dHJpYnV0ZXMuYXR0cnMudGV4dFsnZm9udC1zaXplJ107XG4gICAgICB9XG4gICAgICBncmFwaC5nZXRMaW5rcygpW3JlZlBvc10/LnByb3AoJ2xhYmVscy8wL2F0dHJzL2xhYmVsL2ZvbnRTaXplJywgc2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2VBbGxpZ21lbnQoY2VsbDogYW55LCBvcHQ6IGFueSkge1xuICAgIGlmIChjZWxsLmdldCgndHlwZScpICE9PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG9wdC5kaXJlY3Rpb24gJiZcbiAgICAgIChvcHQuZGlyZWN0aW9uID09PSAndG9wLXJpZ2h0JyB8fFxuICAgICAgICBvcHQuZGlyZWN0aW9uID09PSAndG9wLXJpZ2h0JyB8fFxuICAgICAgICBvcHQuZGlyZWN0aW9uID09PSAnYm90dG9tLXJpZ2h0JyB8fFxuICAgICAgICBvcHQuZGlyZWN0aW9uID09PSAnYm90dG9tLWxlZnQnKVxuICAgICkge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gY2VsbC5hdHRyaWJ1dGVzLnNpemUuaGVpZ2h0O1xuICAgICAgY29uc3QgaGVhZGVyTGFiZWxBbmNob3IgPSBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWxbJ3RleHQtYW5jaG9yJ107XG4gICAgICB0aGlzLnNldEhlYWRlckF0dHJpYnV0ZShjZWxsLCBoZWFkZXJMYWJlbEFuY2hvciwgaGVpZ2h0KTtcblxuICAgICAgLy8gdXBkYXRlIGxhc3QgbGFuZSB2YWx1ZVxuICAgICAgaWYgKCF0aGlzLmlzVW5kZWZpbmVkU2l6ZShjZWxsLmF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIGNvbnN0IGggPSBjZWxsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IHQgPSB0aGlzLmdldFRvdGFsTGFuZUhlaWdodChjZWxsLmF0dHJpYnV0ZXMpO1xuICAgICAgICBjb25zdCBiID0gaCAtIHQ7XG4gICAgICAgIGlmIChiID4gMCkge1xuICAgICAgICAgIGNvbnN0IHMgPSBjZWxsLmF0dHJpYnV0ZXMubGFuZXMuc2xpY2UoLTEpWzBdLnNpemUgKyBiO1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2VsbC5hdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmxhbmVzW2luZGV4XS5zaXplID0gcztcblxuICAgICAgICAgIGNvbnN0IGxhbmUgPSBgbGFuZXNfJHtpbmRleH1gO1xuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS5zaXplID0gcztcbiAgICAgICAgICBjZWxsLm1ldHJpY3MubGFuZXNbbGFuZV0udGFrZW5VcFNwYWNlQnlMYW5lQW5kU3VibGFuZXMgPSBzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHMgPSBjZWxsLmF0dHJpYnV0ZXMubGFuZXMuc2xpY2UoLTEpWzBdLnNpemUgKyBiO1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2VsbC5hdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmxhbmVzW2luZGV4XS5zaXplID0gcztcblxuICAgICAgICAgIGNvbnN0IGxhbmUgPSBgbGFuZXNfJHtpbmRleH1gO1xuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS5zaXplID0gcztcbiAgICAgICAgICBjZWxsLm1ldHJpY3MubGFuZXNbbGFuZV0udGFrZW5VcFNwYWNlQnlMYW5lQW5kU3VibGFuZXMgPSBzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHQucHJvcGVydHlQYXRoICYmIG9wdC5wcm9wZXJ0eVBhdGggPT09ICdhdHRycy9oZWFkZXJMYWJlbC90ZXh0LWFuY2hvcicpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNlbGwuYXR0cmlidXRlcy5zaXplLmhlaWdodDtcbiAgICAgIGNvbnN0IHRleHRBbmNob3IgPSBvcHQucHJvcGVydHlWYWx1ZTtcbiAgICAgIHRoaXMuc2V0SGVhZGVyQXR0cmlidXRlKGNlbGwsIHRleHRBbmNob3IsIGhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgc2V0SGVhZGVyQXR0cmlidXRlKGNlbGw6IGFueSwgdGV4dEFuY2hvcjogc3RyaW5nLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHN3aXRjaCAodGV4dEFuY2hvcikge1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsLnJlZlkgPSA4O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbC5yZWZZID0gaGVpZ2h0IC8gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbC5yZWZZID0gaGVpZ2h0IC0gODtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IGhlaWdodCAvIDI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlzVW5kZWZpbmVkU2l6ZShhdHRyaWJ1dGVzKSB7XG4gICAgbGV0IGJSZXN1bHQgPSBmYWxzZTtcbiAgICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCkge1xuICAgICAgYXR0cmlidXRlcy5sYW5lcy5ldmVyeSgoZSkgPT4ge1xuICAgICAgICBpZiAoIWUuc2l6ZSkge1xuICAgICAgICAgIGJSZXN1bHQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYlJlc3VsdDtcbiAgfVxuXG4gIGdldFRvdGFsTGFuZUhlaWdodChhdHRyaWJ1dGVzKSB7XG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCkge1xuICAgICAgYXR0cmlidXRlcy5sYW5lcy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgIGlmIChlLnNpemUpIHtcbiAgICAgICAgICB0b3RhbCArPSBlLnNpemU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdG90YWw7XG4gIH1cblxuICBzZXREaWFncmFtVGVtcGxhdGVzKGRpYWdyYW1UZW1wbGF0ZXM6IERpYWdyYW1UZW1wbGF0ZXNbXSkge1xuICAgIGlmICh0b29sYmFyQ29uZmlnICYmIHRvb2xiYXJDb25maWcudG9vbHMpIHtcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcbiAgICAgIH0pO1xuICAgICAgaWYgKGFyclNlbGVjdCkge1xuICAgICAgICBkaWFncmFtVGVtcGxhdGVzLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICAgICAgICBpbmRleDogMSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHgudGVtcGxhdGVOYW1lLFxuICAgICAgICAgICAgZmxvd0NoYXJ0SWQ6IHguZmxvd0NoYXJ0SWQsXG4gICAgICAgICAgICBuYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgICBqc29uQ29udGVudDogeC5qc29uQ29udGVudCxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4LmNvbnRlbnQudG9Mb3dlckNhc2UoKSA9PT0gb3B0aW9uLmNvbnRlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXNldENlbGxWaWV3KCkge1xuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gbnVsbDtcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gJyc7XG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gJyc7XG4gIH1cbn1cbiJdfQ==