@wavemaker/app-ng-runtime 11.4.0-rc.5344 → 11.4.0-rc.5347

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 (43) hide show
  1. app-ng-runtime/components/base/bundles/index.umd.js +15 -4
  2. app-ng-runtime/components/base/bundles/index.umd.js.map +1 -1
  3. app-ng-runtime/components/base/esm2015/directives/show-in-device.directive.js +16 -5
  4. app-ng-runtime/components/base/fesm2015/index.js +15 -4
  5. app-ng-runtime/components/base/fesm2015/index.js.map +1 -1
  6. app-ng-runtime/components/basic/tree/bundles/index.umd.js +16 -8
  7. app-ng-runtime/components/basic/tree/bundles/index.umd.js.map +1 -1
  8. app-ng-runtime/components/basic/tree/esm2015/tree.component.js +17 -9
  9. app-ng-runtime/components/basic/tree/fesm2015/index.js +16 -8
  10. app-ng-runtime/components/basic/tree/fesm2015/index.js.map +1 -1
  11. app-ng-runtime/components/chart/bundles/index.umd.js +1 -1
  12. app-ng-runtime/components/chart/bundles/index.umd.js.map +1 -1
  13. app-ng-runtime/components/chart/esm2015/chart.component.js +2 -2
  14. app-ng-runtime/components/chart/fesm2015/index.js +1 -1
  15. app-ng-runtime/components/chart/fesm2015/index.js.map +1 -1
  16. app-ng-runtime/components/containers/wizard/bundles/index.umd.js +43 -2
  17. app-ng-runtime/components/containers/wizard/bundles/index.umd.js.map +1 -1
  18. app-ng-runtime/components/containers/wizard/esm2015/wizard-step/wizard-step.props.js +3 -2
  19. app-ng-runtime/components/containers/wizard/esm2015/wizard.component.js +42 -2
  20. app-ng-runtime/components/containers/wizard/fesm2015/index.js +43 -2
  21. app-ng-runtime/components/containers/wizard/fesm2015/index.js.map +1 -1
  22. app-ng-runtime/components/containers/wizard/index.metadata.json +1 -1
  23. app-ng-runtime/components/containers/wizard/wizard.component.d.ts +2 -0
  24. app-ng-runtime/core/bundles/index.umd.js +12 -2
  25. app-ng-runtime/core/bundles/index.umd.js.map +1 -1
  26. app-ng-runtime/core/esm2015/services/viewport.service.js +6 -4
  27. app-ng-runtime/core/esm2015/utils/utils.js +11 -3
  28. app-ng-runtime/core/fesm2015/index.js +15 -5
  29. app-ng-runtime/core/fesm2015/index.js.map +1 -1
  30. app-ng-runtime/core/index.metadata.json +1 -1
  31. app-ng-runtime/core/utils/utils.d.ts +2 -2
  32. app-ng-runtime/package.json +1 -1
  33. app-ng-runtime/runtime/base/bundles/index.umd.js +163 -132
  34. app-ng-runtime/runtime/base/bundles/index.umd.js.map +1 -1
  35. app-ng-runtime/runtime/base/esm2015/public_api.js +2 -1
  36. app-ng-runtime/runtime/base/esm2015/runtime-base.module.js +3 -1
  37. app-ng-runtime/runtime/base/esm2015/services/app.service.js +3 -1
  38. app-ng-runtime/runtime/base/esm2015/services/pipe.service.js +33 -0
  39. app-ng-runtime/runtime/base/fesm2015/index.js +148 -119
  40. app-ng-runtime/runtime/base/fesm2015/index.js.map +1 -1
  41. app-ng-runtime/runtime/base/index.metadata.json +1 -1
  42. app-ng-runtime/runtime/base/public_api.d.ts +1 -0
  43. app-ng-runtime/runtime/base/services/pipe.service.d.ts +9 -0
@@ -60,8 +60,16 @@ export const isIpad = () => {
60
60
  return REGEX.IPAD.test(userAgent) || (window.navigator.maxTouchPoints && window.navigator.maxTouchPoints > 2 && REGEX.MAC.test(window.navigator.platform));
61
61
  };
62
62
  export const isIos = () => isIphone() || isIpod() || isIpad();
63
- export const isLargeTabletLandscape = () => window.matchMedia("only screen and (min-device-width : 1366px) and (max-device-width : 1366px) and (min-device-height : 1024px) and (max-device-height : 1024px) and (min-width: 1366px) and (max-width: 1366px)").matches;
64
- export const isLargeTabletPortrait = () => window.matchMedia("only screen and (min-device-width : 1024px) and (max-device-width : 1024px) and (min-device-height : 1366px) and (max-device-height : 1366px) and (min-width: 1024px) and (max-width: 1024px)").matches;
63
+ export const isLargeTabletLandscape = (landScapeWidth, landScapeHeight) => {
64
+ const width = landScapeWidth || '1366px';
65
+ const height = landScapeHeight || '1024px';
66
+ return window.matchMedia("only screen and (min-device-width : " + width + ") and (max-device-width : " + width + ") and (min-device-height : " + height + ") and (max-device-height : " + height + ") and (min-width: " + width + ") and (max-width: " + width + ")").matches;
67
+ };
68
+ export const isLargeTabletPortrait = (landScapeWidth, landScapeHeight) => {
69
+ const height = landScapeWidth || '1366px';
70
+ const width = landScapeHeight || '1024px';
71
+ return window.matchMedia("only screen and (min-device-width : " + width + ") and (max-device-width : " + width + ") and (min-device-height : " + height + ") and (max-device-height : " + height + ") and (min-width: " + width + ") and (max-width: " + width + ")").matches;
72
+ };
65
73
  export const isMobile = () => isAndroid() || isIos() || isAndroidTablet() || $('#wm-mobile-display:visible').length > 0;
66
74
  export const isTablet = () => {
67
75
  const scope = document.querySelector('.app-page').widget;
@@ -1428,4 +1436,4 @@ export const setListClass = (scope) => {
1428
1436
  }
1429
1437
  };
1430
1438
  export { ɵ0, ɵ1, ɵ2, ɵ3, ɵ4 };
1431
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBWWxELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO0FBQzdDLE1BQU0sS0FBSyxHQUFHO0lBQ1YsVUFBVSxFQUFFLFFBQVE7SUFDcEIsT0FBTyxFQUFFLFVBQVU7SUFDbkIsTUFBTSxFQUFFLFNBQVM7SUFDakIsSUFBSSxFQUFFLE9BQU87SUFDYixJQUFJLEVBQUUsT0FBTztJQUNiLEdBQUcsRUFBRSxNQUFNO0lBQ1gsY0FBYyxFQUFFLDJEQUEyRDtJQUMzRSxNQUFNLEVBQUUsU0FBUztJQUNqQixPQUFPLEVBQUUsZ0JBQWdCO0lBQ3pCLHNCQUFzQixFQUFFLGlEQUFpRDtJQUN6RSxxQkFBcUIsRUFBRSw4R0FBOEc7SUFDckksc0JBQXNCLEVBQUUsb0NBQW9DO0lBQzVELHNCQUFzQixFQUFFLHlDQUF5QztJQUNqRSxrQkFBa0IsRUFBRSxtQ0FBbUM7SUFDdkQsc0JBQXNCLEVBQUUsb0JBQW9CO0lBQzVDLFdBQVcsRUFBRSx1REFBdUQ7SUFDcEUsYUFBYSxFQUFFLDhFQUE4RTtJQUM3Rixt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U0FBTSxFQUFFLHFEQUFxRDtRQUMxRCxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO0tBQ3hDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBnZXRXbVByb2plY3RQcm9wZXJ0aWVzIH0gZnJvbSAnLi93bS1wcm9qZWN0LXByb3BlcnRpZXMnO1xuXG5pbXBvcnQgeyAkd2F0Y2gsICRhcHBEaWdlc3QgfSBmcm9tICcuL3dhdGNoZXInO1xuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuLi9lbnVtcy9lbnVtcyc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHsgc2V0QXR0ciB9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7ICRwYXJzZUV2ZW50IH0gZnJvbSAnLi9leHByZXNzaW9uLXBhcnNlcic7XG5cbmRlY2xhcmUgY29uc3QgXywgWDJKUztcbmRlY2xhcmUgY29uc3QgbW9tZW50O1xuZGVjbGFyZSBjb25zdCBkb2N1bWVudDtcbmRlY2xhcmUgY29uc3QgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTDtcbmRlY2xhcmUgY29uc3QgJDtcbmRlY2xhcmUgY29uc3QgV01fQ1VTVE9NX0ZPUk1BVFRFUlM7XG5kZWNsYXJlIGNvbnN0IE1TQ1NTTWF0cml4O1xuZGVjbGFyZSBjb25zdCBfV01fQVBQX1BST1BFUlRJRVM7XG5kZWNsYXJlIGNvbnN0IGNvcmRvdmE7XG5cbmNvbnN0IHVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuY29uc3QgUkVHRVggPSB7XG4gICAgU05BS0VfQ0FTRTogL1tBLVpdL2csXG4gICAgQU5EUk9JRDogL0FuZHJvaWQvaSxcbiAgICBJUEhPTkU6IC9pUGhvbmUvaSxcbiAgICBJUE9EOiAvaVBvZC9pLFxuICAgIElQQUQ6IC9pUGFkL2ksXG4gICAgTUFDOiAvTWFjL2ksXG4gICAgQU5EUk9JRF9UQUJMRVQ6IC9hbmRyb2lkfGFuZHJvaWQgMy4wfHhvb218c2NoLWk4MDB8cGxheWJvb2t8dGFibGV0fGtpbmRsZS9pLFxuICAgIE1PQklMRTogL01vYmlsZS9pLFxuICAgIFdJTkRPV1M6IC9XaW5kb3dzIFBob25lL2ksXG4gICAgU1VQUE9SVEVEX0lNQUdFX0ZPUk1BVDogL1xcLihibXB8Z2lmfGpwZXxqcGd8anBlZ3x0aWZ8dGlmZnxwYm18cG5nfGljbykkL2ksXG4gICAgU1VQUE9SVEVEX0ZJTEVfRk9STUFUOiAvXFwuKHR4dHxqc3xjc3N8aHRtbHxzY3JpcHR8cHJvcGVydGllc3xqc29ufGphdmF8eG1sfHNtZHx4bWl8c3FsfGxvZ3x3c2RsfHZtfGZ0bHxqcnhtbHx5bWx8eWFtbHxtZHxsZXNzfGpzcCkkL2ksXG4gICAgU1VQUE9SVEVEX0FVRElPX0ZPUk1BVDogL1xcLihtcDN8b2dnfHdlYm18d21hfDNncHx3YXZ8bTRhKSQvaSxcbiAgICBTVVBQT1JURURfVklERU9fRk9STUFUOiAvXFwuKG1wNHxvZ2d8d2VibXx3bXZ8bXBlZ3xtcGd8YXZpfG1vdikkL2ksXG4gICAgUEFHRV9SRVNPVVJDRV9QQVRIOiAvXlxcL3BhZ2VzXFwvLipcXC4oanN8Y3NzfGh0bWx8anNvbikkLyxcbiAgICBNSU5fUEFHRV9SRVNPVVJDRV9QQVRIOiAvLioocGFnZS5taW4uaHRtbCkkLyxcbiAgICBWQUxJRF9FTUFJTDogL15bYS16QS1aXVtcXHcuK10rQFthLXpBLVpfXSs/XFwuW2EtekEtWi5dezEsNH1bYS16QS1aXSQvLFxuICAgIFZBTElEX1dFQl9VUkw6IC9eKGh0dHBbc10/OlxcL1xcLykod3d3XFwuKXswLDF9W2EtekEtWjAtOT06P1xcL1xcLlxcLV0rKFxcLlthLXpBLVpdezIsNX1bXFwuXXswLDF9KT8vLFxuICAgIFZBTElEX1dFQlNPQ0tFVF9VUkw6IC9eKHdzW3NdPzpcXC9cXC8pKHd3d1xcLil7MCwxfVthLXpBLVowLTk9Oj9cXC9cXC5cXC1dKyhcXC5bYS16QS1aXXsyLDV9W1xcLl17MCwxfSk/LyxcbiAgICBWQUxJRF9SRUxBVElWRV9VUkw6IC9eKD8hd3d3XFwufCg/Omh0dHB8ZnRwKXM/OlxcL1xcL3xbQS1aYS16XTpcXFxcfFxcL1xcLykuKi8sXG4gICAgUkVQTEFDRV9QQVRURVJOOiAvXFwkXFx7KFteXFx9XSspXFx9L2csXG4gICAgWklQX0ZJTEU6IC9cXC56aXAkL2ksXG4gICAgRVhFX0ZJTEU6IC9cXC5leGUkL2ksXG4gICAgTk9fUVVPVEVTX0FMTE9XRUQ6IC9eW14nfFwiXSokLyxcbiAgICBOT19ET1VCTEVfUVVPVEVTX0FMTE9XRUQ6IC9eW15cIl0qJC8sXG4gICAgVkFMSURfSFRNTDogLzxbYS16XVtcXHNcXFNdKj4vaSxcbiAgICBWQUxJRF9QQVNTV09SRDogL15bMC05YS16QS1aLV8uQCYqISMkJV0rJC8sXG4gICAgU1BFQ0lBTF9DSEFSQUNURVJTOiAvW15BLVowLTlhLXpfXSsvaSxcbiAgICBBUFBfU0VSVkVSX1VSTF9GT1JNQVQ6IC9eKGh0dHBbc10/OlxcL1xcLykod3d3XFwuKXswLDF9W2EtekEtWjAtOVxcLlxcLV0rKFs6XT9bMC05XXsyLDV9fFxcLlthLXpBLVpdezIsNX1bXFwuXXswLDF9KVxcLytbXj8jJj1dKyQvLFxuICAgIEpTT05fREFURV9GT1JNQVQ6IC9cXGR7NH0tWzAtMV1cXGQtWzAtM11cXGQoVFswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkLlxcZHsxLDN9WiQpPy8sXG4gICAgREFUQV9VUkw6IC9eXFxzKmRhdGE6KFthLXpdK1xcL1thLXowLTktKy5dKyg7W2Etei1dKz1bYS16MC05LV0rKT8pPyg7YmFzZTY0KT8sKFthLXowLTkhJCYnLCgpKis7PVxcLS5ffjpAXFwvPyVcXHNdKilcXHMqJC9pLFxuICAgIElTT19EQVRFX0ZPUk1BVDogLyhcXGR7NH0tXFxkezJ9LVxcZHsyfSlUKFxcZHsyfTpcXGR7Mn06XFxkezJ9KShcXC5cXGQrKT8oWystXVxcZHsyfTo/XFxkezJ9fFopJC9cbn0sXG4gICAgY29tcGFyZUJ5U2VwYXJhdG9yID0gJzonO1xuXG5jb25zdCBOVU1CRVJfVFlQRVMgPSBbJ2ludCcsIERhdGFUeXBlLklOVEVHRVIsIERhdGFUeXBlLkZMT0FULCBEYXRhVHlwZS5ET1VCTEUsIERhdGFUeXBlLkxPTkcsIERhdGFUeXBlLlNIT1JULCBEYXRhVHlwZS5CWVRFLCBEYXRhVHlwZS5CSUdfSU5URUdFUiwgRGF0YVR5cGUuQklHX0RFQ0lNQUxdO1xuY29uc3Qgbm93OiBEYXRlID0gbmV3IERhdGUoKTtcbmNvbnN0IENVUlJFTlRfREFURSA9ICdDVVJSRU5UX0RBVEUnO1xuXG5leHBvcnQgY29uc3QgZW51bSBFVkVOVF9MSUZFIHsgT05DRSwgV0lORE9XIH1cblxuZXhwb3J0IGNvbnN0IGlzRGVmaW5lZCA9IHYgPT4gJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiB2O1xuXG5leHBvcnQgY29uc3QgaXNPYmplY3QgPSB2ID0+IG51bGwgIT09IHYgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2O1xuXG5leHBvcnQgY29uc3QgdG9Cb29sZWFuID0gKHZhbCwgaWRlbnRpdHk/KSA9PiAoKHZhbCAmJiB2YWwgIT09ICdmYWxzZScpID8gdHJ1ZSA6IChpZGVudGl0eSA/IHZhbCA9PT0gaWRlbnRpdHkgOiBmYWxzZSkpO1xuXG5mdW5jdGlvbiBpc0lFMTEoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCdUcmlkZW50LycpID4gLTE7XG59XG5cbmV4cG9ydCBjb25zdCBpc0lFID0gKCkgPT4ge1xuICAgIHJldHVybiBpc0lFMTEoKSB8fCB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJykgPiAtMTtcbn07XG5cblxuZXhwb3J0IGNvbnN0IGlzQW5kcm9pZCA9ICgpID0+IFJFR0VYLkFORFJPSUQudGVzdCh1c2VyQWdlbnQpO1xuXG5leHBvcnQgY29uc3QgaXNBbmRyb2lkVGFibGV0ID0gKCkgPT4gUkVHRVguQU5EUk9JRF9UQUJMRVQudGVzdCh1c2VyQWdlbnQpICYmICEoKC9UYWJsZXQgUEMgMi4wL2kpLnRlc3QodXNlckFnZW50KSk7XG5cbmV4cG9ydCBjb25zdCBpc0lwaG9uZSA9ICgpID0+IFJFR0VYLklQSE9ORS50ZXN0KHVzZXJBZ2VudCk7XG5leHBvcnQgY29uc3QgaXNJcG9kID0gKCkgPT4gUkVHRVguSVBPRC50ZXN0KHVzZXJBZ2VudCk7XG5leHBvcnQgY29uc3QgaXNJcGFkID0gKCkgPT4ge1xuICAgIHJldHVybiBSRUdFWC5JUEFELnRlc3QodXNlckFnZW50KSB8fCAod2luZG93Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyAmJiB3aW5kb3cubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMiAmJiBSRUdFWC5NQUMudGVzdCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNJb3MgPSAoKSA9PiBpc0lwaG9uZSgpIHx8IGlzSXBvZCgpIHx8IGlzSXBhZCgpO1xuXG5leHBvcnQgY29uc3QgaXNMYXJnZVRhYmxldExhbmRzY2FwZSA9ICgpID0+IHdpbmRvdy5tYXRjaE1lZGlhKFwib25seSBzY3JlZW4gYW5kIChtaW4tZGV2aWNlLXdpZHRoIDogMTM2NnB4KSBhbmQgKG1heC1kZXZpY2Utd2lkdGggOiAxMzY2cHgpIGFuZCAobWluLWRldmljZS1oZWlnaHQgOiAxMDI0cHgpIGFuZCAobWF4LWRldmljZS1oZWlnaHQgOiAxMDI0cHgpIGFuZCAobWluLXdpZHRoOiAxMzY2cHgpIGFuZCAobWF4LXdpZHRoOiAxMzY2cHgpXCIpLm1hdGNoZXM7XG5cbmV4cG9ydCBjb25zdCBpc0xhcmdlVGFibGV0UG9ydHJhaXQgPSAoKSA9PiB3aW5kb3cubWF0Y2hNZWRpYShcIm9ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS13aWR0aCA6IDEwMjRweCkgYW5kIChtYXgtZGV2aWNlLXdpZHRoIDogMTAyNHB4KSBhbmQgKG1pbi1kZXZpY2UtaGVpZ2h0IDogMTM2NnB4KSBhbmQgKG1heC1kZXZpY2UtaGVpZ2h0IDogMTM2NnB4KSBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSBhbmQgKG1heC13aWR0aDogMTAyNHB4KVwiKS5tYXRjaGVzO1xuXG5leHBvcnQgY29uc3QgaXNNb2JpbGUgPSAoKSA9PiBpc0FuZHJvaWQoKSB8fCBpc0lvcygpIHx8IGlzQW5kcm9pZFRhYmxldCgpIHx8ICQoJyN3bS1tb2JpbGUtZGlzcGxheTp2aXNpYmxlJykubGVuZ3RoID4gMDtcblxuZXhwb3J0IGNvbnN0IGlzVGFibGV0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjb3BlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFwcC1wYWdlJykud2lkZ2V0O1xuICAgIHJldHVybiBzY29wZSAmJiBzY29wZS52aWV3UGFyZW50LlZpZXdwb3J0LmlzVGFibGV0VHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc01vYmlsZUFwcCA9ICgpID0+IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5wbGF0Zm9ybVR5cGUgPT09ICdNT0JJTEUnICYmIGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS50eXBlID09PSAnQVBQTElDQVRJT04nO1xuXG5leHBvcnQgY29uc3QgZ2V0QW5kcm9pZFZlcnNpb24gPSAoKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkubWF0Y2goL2FuZHJvaWRcXHMoWzAtOVxcLl0qKS8pO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG59O1xuXG5leHBvcnQgY29uc3QgaXNLaXRrYXREZXZpY2UgPSAoKSA9PiBpc0FuZHJvaWQoKSAmJiBwYXJzZUludChnZXRBbmRyb2lkVmVyc2lvbigpLCAxMCkgPT09IDQ7XG5cbi8qKlxuICogdGhpcyBtZXRob2QgZW5jb2RlcyB0aGUgdXJsIGFuZCByZXR1cm5zIHRoZSBlbmNvZGVkIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZW5jb2RlVXJsID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBpbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgLy8gZW5jb2RlIHRoZSByZWxhdGl2ZSBwYXRoXG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwuc3Vic3RyaW5nKDAsIGluZGV4KSkgKyB1cmwuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgICAgLy8gZW5jb2RlIHVybCBwYXJhbXMsIG5vdCBlbmNvZGVkIHRocm91Z2ggZW5jb2RlVVJJXG4gICAgICAgIHVybCA9IGVuY29kZVVybFBhcmFtcyh1cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwpO1xuICAgIH1cblxuICAgIHJldHVybiB1cmw7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGVuY29kZXMgdGhlIHVybCBwYXJhbXMgYW5kIGlzIHByaXZhdGUgdG8gdGhlIGNsYXNzIG9ubHlcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY29kZVVybFBhcmFtcyA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgbGV0IHF1ZXJ5UGFyYW1zLCBlbmNvZGVkUGFyYW1zID0gJycsIHF1ZXJ5UGFyYW1zU3RyaW5nLCBpbmRleDtcbiAgICBpbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgcXVlcnlQYXJhbXNTdHJpbmcgPSB1cmwuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgICAgLy8gRW5jb2RpbmcgdGhlIHF1ZXJ5IHBhcmFtcyBpZiBleGlzdFxuICAgICAgICBpZiAocXVlcnlQYXJhbXNTdHJpbmcpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXNTdHJpbmcuc3BsaXQoJyYnKTtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlY29kZWRQYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGkgPSBfLmluY2x1ZGVzKHBhcmFtLCAnPScpID8gcGFyYW0uaW5kZXhPZignPScpIDogKHBhcmFtICYmIHBhcmFtLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZSA9IHBhcmFtLnN1YnN0cigwLCBpKSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1WYWx1ZSA9IHBhcmFtLnN1YnN0cihpICsgMSk7XG5cbiAgICAgICAgICAgICAgICAvLyBhZGQgdGhlID0gZm9yIHBhcmFtIG5hbWUgb25seSB3aGVuIHRoZSBwYXJhbSB2YWx1ZSBleGlzdHMgaW4gdGhlIGdpdmVuIHBhcmFtIG9yIGVtcHR5IHZhbHVlIGlzIGFzc2lnbmVkXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtVmFsdWUgfHwgXy5pbmNsdWRlcyhwYXJhbSwgJz0nKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZFBhcmFtVmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQocGFyYW1WYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRQYXJhbVZhbHVlID0gcGFyYW1WYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkUGFyYW1zICs9IHBhcmFtTmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVkUGFyYW1WYWx1ZSkgKyAnJic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZFBhcmFtcyArPSBwYXJhbU5hbWUgKyAnJic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbmNvZGVkUGFyYW1zID0gZW5jb2RlZFBhcmFtcy5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShxdWVyeVBhcmFtc1N0cmluZywgZW5jb2RlZFBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn07XG5cbi8qIGNhcGl0YWxpemUgdGhlIGZpcnN0LWxldHRlciBvZiB0aGUgc3RyaW5nIHBhc3NlZCAqL1xuZXhwb3J0IGNvbnN0IGluaXRDYXBzID0gbmFtZSA9PiB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnN1YnN0cmluZygxKTtcbn07XG5cbi8qIGNvbnZlcnQgY2FtZWxDYXNlIHN0cmluZyB0byBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgKi9cbmV4cG9ydCBjb25zdCBzcGFjZVNlcGFyYXRlID0gbmFtZSA9PiB7XG4gICAgaWYgKG5hbWUgPT09IG5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZShSRUdFWC5TTkFLRV9DQVNFLCBmdW5jdGlvbiAobGV0dGVyLCBwb3MpIHtcbiAgICAgICAgcmV0dXJuIChwb3MgPyAnICcgOiAnJykgKyBsZXR0ZXI7XG4gICAgfSk7XG59O1xuXG4vKlJlcGxhY2UgdGhlIGNoYXJhY3RlciBhdCBhIHBhcnRpY3VsYXIgaW5kZXgqL1xuZXhwb3J0IGNvbnN0IHJlcGxhY2VBdCA9IChzdHJpbmcsIGluZGV4LCBjaGFyYWN0ZXIpID0+IHN0cmluZy5zdWJzdHIoMCwgaW5kZXgpICsgY2hhcmFjdGVyICsgc3RyaW5nLnN1YnN0cihpbmRleCArIGNoYXJhY3Rlci5sZW5ndGgpO1xuXG4vKlJlcGxhY2UgJy4nIHdpdGggc3BhY2UgYW5kIGNhcGl0YWxpemUgdGhlIG5leHQgbGV0dGVyKi9cbmV4cG9ydCBjb25zdCBwZXJpb2RTZXBhcmF0ZSA9IG5hbWUgPT4ge1xuICAgIGxldCBkb3RJbmRleDtcbiAgICBkb3RJbmRleCA9IG5hbWUuaW5kZXhPZignLicpO1xuICAgIGlmIChkb3RJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbmFtZSA9IHJlcGxhY2VBdChuYW1lLCBkb3RJbmRleCArIDEsIG5hbWUuY2hhckF0KGRvdEluZGV4ICsgMSkudG9VcHBlckNhc2UoKSk7XG4gICAgICAgIG5hbWUgPSByZXBsYWNlQXQobmFtZSwgZG90SW5kZXgsICcgJyk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IHByZXR0aWZ5TGFiZWwgPSBsYWJlbCA9PiB7XG4gICAgbGFiZWwgPSBfLmNhbWVsQ2FzZShsYWJlbCk7XG4gICAgLypjYXBpdGFsaXplIHRoZSBpbml0aWFsIExldHRlciovXG4gICAgbGFiZWwgPSBpbml0Q2FwcyhsYWJlbCk7XG4gICAgLypDb252ZXJ0IGNhbWVsIGNhc2Ugd29yZHMgdG8gc2VwYXJhdGVkIHdvcmRzKi9cbiAgICBsYWJlbCA9IHNwYWNlU2VwYXJhdGUobGFiZWwpO1xuICAgIC8qUmVwbGFjZSAnLicgd2l0aCBzcGFjZSBhbmQgY2FwaXRhbGl6ZSB0aGUgbmV4dCBsZXR0ZXIqL1xuICAgIGxhYmVsID0gcGVyaW9kU2VwYXJhdGUobGFiZWwpO1xuICAgIHJldHVybiBsYWJlbDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZUh5cGhlbmF0ZSA9IChuYW1lKSA9PiB7XG4gICAgcmV0dXJuIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcgJyk7XG59O1xuXG4vKkFjY2VwdHMgYW4gYXJyYXkgb3IgYSBzdHJpbmcgc2VwYXJhdGVkIHdpdGggc3ltYm9sIGFuZCByZXR1cm5zIHByZXR0aWZpZWQgcmVzdWx0Ki9cbmV4cG9ydCBjb25zdCBwcmV0dGlmeUxhYmVscyA9IChuYW1lcywgc2VwYXJhdG9yID0gJywnKSA9PiB7XG4gICAgbGV0IG1vZGlmaWVkTmFtZXMsIG5hbWVzQXJyYXkgPSBbXTtcblxuICAgIGlmICghXy5pc0FycmF5KG5hbWVzKSkge1xuICAgICAgICBuYW1lc0FycmF5ID0gXy5zcGxpdChuYW1lcywgc2VwYXJhdG9yKTtcbiAgICB9XG5cbiAgICBtb2RpZmllZE5hbWVzID0gXy5tYXAobmFtZXNBcnJheSwgcHJldHRpZnlMYWJlbCk7XG4gICAgaWYgKF8uaXNBcnJheShuYW1lcykpIHtcbiAgICAgICAgcmV0dXJuIG1vZGlmaWVkTmFtZXM7XG4gICAgfVxuICAgIHJldHVybiBtb2RpZmllZE5hbWVzLmpvaW4oc2VwYXJhdG9yKTtcbn07XG5cbi8qKlxuICogdGhpcyBtZXRob2QgY2hlY2tzIGlmIGEgaW5zZWN1cmUgY29udGVudCByZXF1ZXN0IGlzIGJlaW5nIG1hZGVcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW5zZWN1cmVDb250ZW50UmVxdWVzdCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuXG4gICAgY29uc3QgcGFyc2VyOiBIVE1MQW5jaG9yRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBwYXJzZXIuaHJlZiA9IHVybDtcblxuICAgIC8vIGZvciByZWxhdGl2ZSB1cmxzIElFIHJldHVybnMgdGhlIHByb3RvY29sIGFzIGVtcHR5IHN0cmluZ1xuICAgIGlmIChwYXJzZXIucHJvdG9jb2wgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgaW5wdXR0ZWQgc291cmNlIGlzIGEgYmFzZTY0IHVybCwgZG8gbm90IHRocm93IGluc2VjdXJlIGNvbnRlbnQgZXJyb3JcbiAgICBpZiAoUkVHRVguREFUQV9VUkwudGVzdCh1cmwpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc3RyaW5nU3RhcnRzV2l0aChsb2NhdGlvbi5ocmVmLCAnaHR0cHM6Ly8nKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VyLnByb3RvY29sICE9PSAnaHR0cHM6JyAmJiBwYXJzZXIucHJvdG9jb2wgIT09ICd3c3M6JztcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGNoZWNrcyBpZiBhIGdpdmVuIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4gc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBzdHJpbmdTdGFydHNXaXRoID0gKHN0cjogc3RyaW5nLCBzdGFydHNXaXRoOiBzdHJpbmcsIGlnbm9yZUNhc2U/KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlZ0V4ID0gbmV3IFJlZ0V4cCgnXicgKyBzdGFydHNXaXRoLCBpZ25vcmVDYXNlID8gJ2knIDogJycpO1xuXG4gICAgcmV0dXJuIHJlZ0V4LnRlc3Qoc3RyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFdmFsdWF0ZWRFeHByVmFsdWUgPSAob2JqZWN0LCBleHByZXNzaW9uKSA9PiB7XG4gICAgbGV0IHZhbDtcbiAgICAvKipcbiAgICAgKiBFdmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiB3aXRoIHRoZSBzY29wZSBhbmQgb2JqZWN0LlxuICAgICAqICRldmFsIGlzIHVzZWQsIGFzIGV4cHJlc3Npb24gY2FuIGJlIGluIGZvcm1hdCBvZiBmaWVsZDEgKyAnICcgKyBmaWVsZDJcbiAgICAgKiAkZXZhbCBjYW4gZmFpbCwgaWYgZXhwcmVzc2lvbiBpcyBub3QgaW4gY29ycmVjdCBmb3JtYXQsIHNvIGF0dGVtcHQgdGhlIGV2YWwgZnVuY3Rpb25cbiAgICAgKi9cbiAgICB2YWwgPSBfLmF0dGVtcHQoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IGFyZ3NFeHByID0gT2JqZWN0LmtleXMob2JqZWN0KS5tYXAoKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGB2YXIgJHtmaWVsZE5hbWV9ID0gZGF0YVsnJHtmaWVsZE5hbWV9J107YDtcbiAgICAgICAgfSkuam9pbignICcpO1xuICAgICAgICBjb25zdCBmID0gbmV3IEZ1bmN0aW9uKCdkYXRhJywgYCR7YXJnc0V4cHJ9IHJldHVybiAgJHtleHByZXNzaW9ufWApO1xuICAgICAgICByZXR1cm4gZihvYmplY3QpO1xuICAgIH0pO1xuICAgIC8qKlxuICAgICAqICRldmFsIGZhaWxzIGlmIGZpZWxkIGV4cHJlc3Npb24gaGFzIHNwYWNlcy4gRXg6ICdmaWVsZCBuYW1lJyBvciAnZmllbGRAbmFtZSdcbiAgICAgKiBBcyBhIGZhbGxiYWNrLCBnZXQgdmFsdWUgZGlyZWN0bHkgZnJvbSBvYmplY3Qgb3Igc2NvcGVcbiAgICAgKi9cbiAgICBpZiAoXy5pc0Vycm9yKHZhbCkpIHtcbiAgICAgICAgdmFsID0gXy5nZXQob2JqZWN0LCBleHByZXNzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8qIGZ1bmN0aW9ucyBmb3IgcmVzb3VyY2UgVGFiKi9cbmV4cG9ydCBjb25zdCBpc0ltYWdlRmlsZSA9IChmaWxlTmFtZSkgPT4ge1xuICAgIHJldHVybiAoUkVHRVguU1VQUE9SVEVEX0lNQUdFX0ZPUk1BVCkudGVzdChmaWxlTmFtZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNBdWRpb0ZpbGUgPSAoZmlsZU5hbWUpID0+IHtcbiAgICByZXR1cm4gKFJFR0VYLlNVUFBPUlRFRF9BVURJT19GT1JNQVQpLnRlc3QoZmlsZU5hbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVmlkZW9GaWxlID0gKGZpbGVOYW1lKSA9PiB7XG4gICAgcmV0dXJuIChSRUdFWC5TVVBQT1JURURfVklERU9fRk9STUFUKS50ZXN0KGZpbGVOYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkV2ViVVJMID0gKHVybDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIChSRUdFWC5WQUxJRF9XRUJfVVJMKS50ZXN0KHVybCk7XG59O1xuXG4vKlRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdXJsIHRvIHRoZSByZXNvdXJjZSBhZnRlciBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgdXJsKi9cbmV4cG9ydCBjb25zdCBnZXRSZXNvdXJjZVVSTCA9ICh1cmxTdHJpbmcpID0+IHtcbiAgICBpZiAoaXNWYWxpZFdlYlVSTCh1cmxTdHJpbmcpKSB7XG4gICAgICAgIC8qVE9ETzogVXNlIERvbVNhbml0aXplciovXG4gICAgICAgIC8vIHJldHVybiBzYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHVybFN0cmluZyk7XG4gICAgfVxuICAgIHJldHVybiB1cmxTdHJpbmc7XG59O1xuXG4vKmZ1bmN0aW9uIHRvIGNoZWNrIGlmIGZuIGlzIGEgZnVuY3Rpb24gYW5kIHRoZW4gZXhlY3V0ZSovXG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlckZuKGZuLCAuLi5hcmdtbnRzKSB7XG4gICAgLyogVXNlIG9mIHNsaWNlIG9uIGFyZ3VtZW50cyB3aWxsIG1ha2UgdGhpcyBmdW5jdGlvbiBub3Qgb3B0aW1pemFibGVcbiAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzMi1sZWFraW5nLWFyZ3VtZW50c1xuICAgICogKi9cblxuICAgIGxldCBzdGFydCA9IDE7XG4gICAgY29uc3QgbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShsZW4gLSBzdGFydCk7XG4gICAgZm9yIChzdGFydDsgc3RhcnQgPCBsZW47IHN0YXJ0KyspIHtcbiAgICAgICAgYXJnc1tzdGFydCAtIDFdID0gYXJndW1lbnRzW3N0YXJ0XTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2V0IHRoZSBmb3JtYXR0ZWQgZGF0ZVxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9ybWF0dGVkRGF0ZSA9IChkYXRlUGlwZSwgZGF0ZU9iaiwgZm9ybWF0LCB0aW1lWm9uZT8sIGlzVGltZVN0YW1wVHlwZT8sIGlzSW50ZXJ2YWxEYXRlVGltZT8sIGNvbXBJbnN0YW5jZT8pOiBhbnkgPT4ge1xuICAgIGlmICghZGF0ZU9iaikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0ID09PSAndGltZXN0YW1wJykge1xuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGVPYmopLnZhbHVlT2YoKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0ID09PSAnVVRDJykge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZU9iaikudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodGltZVpvbmUpIHtcbiAgICAgICAgY29uc3QgbW9tZW50Rm9ybWF0ID0gZm9ybWF0LnJlcGxhY2VBbGwoJ3knLCAnWScpLnJlcGxhY2VBbGwoJ2QnLCAnRCcpLnJlcGxhY2UoJ2EnLCAnQScpO1xuICAgICAgICBpZiAoaXNJbnRlcnZhbERhdGVUaW1lICkgeyAvLyBkYXRlcyB3aGljaCBhcmUgb2YgdHlwZSB0aW1lIHdpZGdldCAodmFsdWUgaXMgaGg6bW06c3MpIGJ1dCByZXR1cm5lZCBhcyBkYXRlIHN0cmluZyBmcm9tIHRpbWUgY29tcFxuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChkYXRlT2JqKS5mb3JtYXQobW9tZW50Rm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNUaW1lU3RhbXBUeXBlID09PSAnZGF0ZXRpbWVzdGFtcCcpIHtcbiAgICAgICAgICAgIGRhdGVPYmogPSBnZXRNb21lbnRMb2NhbGVPYmplY3QodGltZVpvbmUsIGRhdGVPYmopO1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChkYXRlT2JqKS5mb3JtYXQobW9tZW50Rm9ybWF0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZU9iaiwgZm9ybWF0LCB0aW1lWm9uZSwgY29tcEluc3RhbmNlKTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgZGF0ZSBoYXMgdGltZXpvbmUgaW5mb3JtYXRpb24gb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBoYXNPZmZzZXRTdHIgPSAoZGF0ZVN0cikgPT4ge1xuICAgIGlmICh0eXBlb2YgZGF0ZVN0ciAhPT0gJ3N0cmluZycpIHJldHVybjtcbiAgICBjb25zdCBtYXRjaGVzID0gZGF0ZVN0ci5tYXRjaChSRUdFWC5JU09fREFURV9GT1JNQVQpO1xuICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXNbNF0pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG4vKipcbiAqIG1ldGhvZCB0byBnZXQgdGhlIGRhdGUgb2JqZWN0IGZyb20gdGhlIGlucHV0IHJlY2VpdmVkXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRlT2JqID0gKHZhbHVlLCBvcHRpb25zPywgdGltZXpvbmU/KTogRGF0ZSA9PiB7XG4gICAgLy8gSGFuZGxpbmcgbG9jYWxpemF0aW9uXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXR0ZXJuICYmIG9wdGlvbnMucGF0dGVybiAhPT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgLy8gRml4IGZvciBXTVMtMTk2MDEsIGludmFsaWQgZGF0ZSBpcyByZXR1cm5lZCBvbiBkYXRlIHNlbGVjdGlvbi5cbiAgICAgICAgY29uc3QgaXNOYXRpdmVQaWNrZXIgPSAob3B0aW9ucyAmJiBvcHRpb25zLmhhc093blByb3BlcnR5KCdpc05hdGl2ZVBpY2tlcicpKSA/IF8uZ2V0KG9wdGlvbnMsICdpc05hdGl2ZVBpY2tlcicpIDogaXNNb2JpbGUoKTtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9ICBpc05hdGl2ZVBpY2tlciA/ICdZWVlZL01NL0REIEhIOm1tOnNzJyA6IG1vbWVudFBhdHRlcm4ob3B0aW9ucy5wYXR0ZXJuKTtcbiAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUsIHBhdHRlcm4pLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8qaWYgdGhlIHZhbHVlIGlzIGEgZGF0ZSBvYmplY3QsIG5vIG5lZWQgdG8gY292ZXJ0IGl0Ki9cbiAgICBpZiAoXy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKmlmIHRoZSB2YWx1ZSBpcyBhIHRpbWVzdGFtcCBzdHJpbmcsIGNvbnZlcnQgaXQgdG8gYSBudW1iZXIqL1xuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG5cbiAgICBpZiAoIW1vbWVudCh2YWx1ZSkuaXNWYWxpZCgpIHx8IHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBkYXRlT2JqID0gbmV3IERhdGUodmFsdWUpO1xuICAgIC8qKlxuICAgICAqIGlmIGRhdGUgdmFsdWUgaXMgc3RyaW5nIFwiMjAtMDUtMjAxOVwiIHRoZW4gbmV3IERhdGUodmFsdWUpIHJldHVybiAyME1heTIwMTkgd2l0aCBjdXJyZW50IHRpbWUgaW4gSW5kaWEsXG4gICAgICogd2hlcmVhcyB0aGlzIHdpbGwgcmV0dXJuIDE5TWF5MjAxOSB3aXRoIHRpbWUgbGFnZ2luZyBmb3IgZmV3IGhvdXJzLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpdCByZXR1cm5zIFVUQyB0aW1lIGkuZS4gQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUgKFVUQykuXG4gICAgICogVG8gY3JlYXRlIGRhdGUgaW4gbG9jYWwgdGltZSB1c2UgbW9tZW50XG4gICAgICovXG4gICAgaWYgKF8uaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIElmIHNlbGVjdGVkIGxvY2FsZSBpcyBBcmFiaWMsIG1vbWVudCh2YWx1ZSkuZm9ybWF0KCkgaXMgZ2l2aW5nIGRhdGUgaW4gQXJhYmljIGxhbmd1YWdlXG4gICAgICAgICAqIChFeDogSWYgZGF0ZSB2YWx1ZSBpcyBcIjE5OTAtMTEtMjNcIiBhbmQgbW9tZW50KHZhbHVlKS5mb3JtYXQoKSBpcyBcItmh2anZqdmgLdmh2aEt2aLZo1TZoNmgOtmg2aA62aDZoCvZoNmlOtmj2aBcIilcbiAgICAgICAgICogYW5kIG5ldyBEYXRlKG1vbWVudCh2YWx1ZSkuZm9ybWF0KCkpIGlzIGdpdmluZyBJbnZhbGlkIERhdGUuIFNvIGZyc3QgY29udmVydGluZyBpdCB0byB0aW1lc3RhbXAgdmFsdWUuXG4gICAgICAgICovXG5cbiAgICAgICAgZGF0ZU9iaiA9ICF0aW1lem9uZSA/IG5ldyBEYXRlKG1vbWVudChtb21lbnQodmFsdWUpLmZvcm1hdCgpKS52YWx1ZU9mKCkpIDogZ2V0TW9tZW50TG9jYWxlT2JqZWN0KHRpbWV6b25lLCB2YWx1ZSk7O1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gQ1VSUkVOVF9EQVRFIHx8IGlzTmFOKGRhdGVPYmouZ2V0RGF5KCkpKSB7XG4gICAgICAgIHJldHVybiBub3c7XG4gICAgfVxuICAgIHJldHVybiBkYXRlT2JqO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEV2ZW50TGlzdGVuZXJPbkVsZW1lbnQgPSAoX2VsZW1lbnQ6IEVsZW1lbnQsIGV4Y2x1ZGVFbGVtZW50OiBFbGVtZW50LCBuYXRpdmVFbGVtZW50OiBFbGVtZW50LCBldmVudFR5cGUsIGlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQsIHN1Y2Nlc3NDQiwgbGlmZTogRVZFTlRfTElGRSwgaXNDYXB0dXJlID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBlbGVtZW50OiBFbGVtZW50ID0gX2VsZW1lbnQ7XG4gICAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXhjbHVkZUVsZW1lbnQgJiYgKGV4Y2x1ZGVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgfHwgZXhjbHVkZUVsZW1lbnQgPT09IGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICBpZiAoJChldmVudC50YXJnZXQpLmlzKCdpbnB1dCcpICYmICFpc0Ryb3BEb3duRGlzcGxheUVuYWJsZWRPbklucHV0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGlmZSA9PT0gRVZFTlRfTElGRS5PTkNFKSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyLCBpc0NhcHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIHN1Y2Nlc3NDQigpO1xuICAgIH07XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICBjb25zdCByZW1vdmVFdmVudExpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyLCBpc0NhcHR1cmUpO1xuICAgIH07XG4gICAgcmV0dXJuIHJlbW92ZUV2ZW50TGlzdGVuZXI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBkZWVwIGNsb25lZCByZXBsaWNhIG9mIHRoZSBwYXNzZWQgb2JqZWN0L2FycmF5XG4gKiBAcGFyYW0gb2JqZWN0IG9iamVjdC9hcnJheSB0byBjbG9uZVxuICogQHJldHVybnMgYSBjbG9uZSBvZiB0aGUgcGFzc2VkIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0Q2xvbmVkT2JqZWN0ID0gKG9iamVjdCkgPT4ge1xuICAgIHJldHVybiBfLmNsb25lRGVlcChvYmplY3QpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVzID0gKGZvcm1OYW1lLCBmaWVsZE5hbWUsIGlzTGlzdCkgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gXy5nZXQoZG9jdW1lbnQuZm9ybXMsIFtmb3JtTmFtZSwgZmllbGROYW1lLCAnZmlsZXMnXSk7XG4gICAgcmV0dXJuIGlzTGlzdCA/IF8ubWFwKGZpbGVzLCBfLmlkZW50aXR5KSA6IGZpbGVzICYmIGZpbGVzWzBdO1xufTtcblxuLypGdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIqL1xuZnVuY3Rpb24gcmFuZG9tKCkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpO1xufVxuXG4vKkZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgZ3VpZCBiYXNlZCBvbiByYW5kb20gbnVtYmVycy4qL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlR1VJZCA9ICgpID0+IHtcbiAgICByZXR1cm4gcmFuZG9tKCkgKyAnLScgKyByYW5kb20oKSArICctJyArIHJhbmRvbSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBpZiBnaXZlbiBhY2Nlc3Mgcm9sZSBpcyBpbiBjdXJyZW50IGxvZ2dlZGluIHVzZXIgYWNjZXNzIHJvbGVzXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFjY2Vzc1JvbGVzID0gKHJvbGVFeHAsIGxvZ2dlZEluVXNlcikgPT4ge1xuICAgIGxldCByb2xlcztcblxuICAgIGlmIChyb2xlRXhwICYmIGxvZ2dlZEluVXNlcikge1xuXG4gICAgICAgIHJvbGVzID0gcm9sZUV4cCAmJiByb2xlRXhwLnNwbGl0KCcsJykubWFwKEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnRyaW0pO1xuXG4gICAgICAgIHJldHVybiBfLmludGVyc2VjdGlvbihyb2xlcywgbG9nZ2VkSW5Vc2VyLnVzZXJSb2xlcykubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZhbGlkSlNPTiA9IChjb250ZW50KSA9PiB7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZEludFZhbHVlID0gcGFyc2VJbnQoY29udGVudCwgMTApO1xuICAgICAgICAvKm9idGFpbmluZyBqc29uIGZyb20gZWRpdG9yIGNvbnRlbnQgc3RyaW5nKi9cbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGNvbnRlbnQpIHx8ICFpc05hTihwYXJzZWRJbnRWYWx1ZSkgPyBjb250ZW50IDogSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qdGVybWluYXRpbmcgZXhlY3V0aW9uIGlmIG5ldyB2YXJpYWJsZSBvYmplY3QgaXMgbm90IHZhbGlkIGpzb24uKi9cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgeG1sVG9Kc29uID0gKHhtbFN0cmluZykgPT4ge1xuICAgIGNvbnN0IHgyanNPYmogPSBuZXcgWDJKUyh7ICdlbXB0eU5vZGVGb3JtJzogJ2NvbnRlbnQnLCAnYXR0cmlidXRlUHJlZml4JzogJycsICdlbmFibGVUb1N0cmluZ0Z1bmMnOiBmYWxzZSB9KTtcbiAgICBsZXQganNvbiA9IHgyanNPYmoueG1sMmpzKHhtbFN0cmluZyk7XG4gICAgaWYgKGpzb24pIHtcbiAgICAgICAganNvbiA9IF8uZ2V0KGpzb24sIE9iamVjdC5rZXlzKGpzb24pWzBdKTtcbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG59O1xuXG4vKlxuICogVXRpbCBtZXRob2QgdG8gZmluZCB0aGUgdmFsdWUgb2YgYSBrZXkgaW4gdGhlIG9iamVjdFxuICogaWYga2V5IG5vdCBmb3VuZCBhbmQgY3JlYXRlIGlzIHRydWUsIGFuIG9iamVjdCBpcyBjcmVhdGVkIGFnYWluc3QgdGhhdCBub2RlXG4gKiBFeGFtcGxlczpcbiAqIHZhciBhID0ge1xuICogIGI6IHtcbiAqICAgICAgYyA6IHtcbiAqICAgICAgICAgIGQ6ICd0ZXN0J1xuICogICAgICB9XG4gKiAgfVxuICogfVxuICogVXRpbHMuZmluZFZhbHVlKGEsICdiLmMuZCcpIC0tPiAndGVzdCdcbiAqIFV0aWxzLmZpbmRWYWx1ZShhLCAnYi5jJykgLS0+IHtkOiAndGVzdCd9XG4gKiBVdGlscy5maW5kVmFsdWUoYSwgJ2UnKSAtLT4gdW5kZWZpbmVkXG4gKiBVdGlscy5maW5kVmFsdWUoYSwgJ2UnLCB0cnVlKSAtLT4ge30gYW5kIGEgd2lsbCBiZWNvbWU6XG4gKiB7XG4gKiAgIGI6IHtcbiAqICAgICAgYyA6IHtcbiAqICAgICAgICAgIGQ6ICd0ZXN0J1xuICogICAgICB9XG4gKiAgfSxcbiAqICBlOiB7XG4gKiAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZmluZFZhbHVlT2YgPSAob2JqLCBrZXksIGNyZWF0ZT8pID0+IHtcblxuICAgIGlmICghb2JqIHx8ICFrZXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghY3JlYXRlKSB7XG4gICAgICAgIHJldHVybiBfLmdldChvYmosIGtleSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydHMgPSBrZXkuc3BsaXQoJy4nKSxcbiAgICAgICAga2V5cyA9IFtdO1xuXG4gICAgbGV0IHNraXBQcm9jZXNzaW5nO1xuXG4gICAgcGFydHMuZm9yRWFjaCgocGFydCkgPT4ge1xuICAgICAgICBpZiAoIXBhcnRzLmxlbmd0aCkgeyAvLyBpZiB0aGUgcGFydCBvZiBhIGtleSBpcyBub3QgdmFsaWQsIHNraXAgdGhlIHByb2Nlc3NpbmcuXG4gICAgICAgICAgICBza2lwUHJvY2Vzc2luZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWJQYXJ0cyA9IHBhcnQubWF0Y2goL1xcdysvZyk7XG4gICAgICAgIGxldCBzdWJQYXJ0O1xuXG4gICAgICAgIHdoaWxlIChzdWJQYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN1YlBhcnQgPSBzdWJQYXJ0cy5zaGlmdCgpO1xuICAgICAgICAgICAga2V5cy5wdXNoKHsgJ2tleSc6IHN1YlBhcnQsICd2YWx1ZSc6IHN1YlBhcnRzLmxlbmd0aCA/IFtdIDoge30gfSk7IC8vIGRldGVybWluZSB3aGV0aGVyIHRvIGNyZWF0ZSBhbiBhcnJheSBvciBhbiBvYmplY3RcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHNraXBQcm9jZXNzaW5nKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAga2V5cy5mb3JFYWNoKChfa2V5KSA9PiB7XG4gICAgICAgIGxldCB0ZW1wT2JqID0gb2JqW19rZXkua2V5XTtcbiAgICAgICAgaWYgKCFpc09iamVjdCh0ZW1wT2JqKSkge1xuICAgICAgICAgICAgdGVtcE9iaiA9IGdldFZhbGlkSlNPTih0ZW1wT2JqKTtcbiAgICAgICAgICAgIGlmICghdGVtcE9iaikge1xuICAgICAgICAgICAgICAgIHRlbXBPYmogPSBfa2V5LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9ialtfa2V5LmtleV0gPSB0ZW1wT2JqO1xuICAgICAgICBvYmogPSB0ZW1wT2JqO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbi8qXG4qIGV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBsYXN0IGJpdCBmcm9tIGZ1bGwgdHlwZVJlZiBvZiBhIGZpZWxkXG4qIGUuZy4gcmV0dXJucyAnU3RyaW5nJyBmb3IgdHlwZVJlZiA9ICdqYXZhLmxhbmcuU3RyaW5nJ1xuKiBAcGFyYW1zOiB7dHlwZVJlZn0gdHlwZSByZWZlcmVuY2VcbiovXG5leHBvcnQgY29uc3QgZXh0cmFjdFR5cGUgPSAodHlwZVJlZjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBsZXQgdHlwZTtcbiAgICBpZiAoIXR5cGVSZWYpIHtcbiAgICAgICAgcmV0dXJuIERhdGFUeXBlLlNUUklORztcbiAgICB9XG4gICAgdHlwZSA9IHR5cGVSZWYgJiYgdHlwZVJlZi5zdWJzdHJpbmcodHlwZVJlZi5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgdHlwZSA9IHR5cGUgJiYgdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHR5cGUgPSB0eXBlID09PSBEYXRhVHlwZS5MT0NBTERBVEVUSU1FID8gRGF0YVR5cGUuREFURVRJTUUgOiB0eXBlO1xuICAgIHJldHVybiB0eXBlO1xufTtcblxuLyogcmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBkYXRhIHR5cGUgbWF0Y2hlcyBudW1iZXIgdHlwZSAqL1xuZXhwb3J0IGNvbnN0IGlzTnVtYmVyVHlwZSA9ICh0eXBlOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gKE5VTUJFUl9UWVBFUy5pbmRleE9mKGV4dHJhY3RUeXBlKHR5cGUpLnRvTG93ZXJDYXNlKCkpICE9PSAtMSk7XG59O1xuXG4vKiBmdW5jdGlvbiB0byBjaGVjayBpZiBwcm92aWRlZCBvYmplY3QgaXMgZW1wdHkqL1xuZXhwb3J0IGNvbnN0IGlzRW1wdHlPYmplY3QgPSAob2JqOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICBpZiAoaXNPYmplY3Qob2JqKSAmJiAhXy5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBGdW5jdGlvbiBleHBlY3RzIGFuIGVsZW1lbnQgb24gd2hpY2ggdGhlIHNjcm9sbGluZyBzaG91bGQgYmUgYXBwbGllZCwgRGVwZW5kaW5nIG9uIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnQgc2Nyb2xsYmFyIHdpbGwgYmUgYWRqdXN0ZWRcbmV4cG9ydCBjb25zdCBzY3JvbGxUb0VsZW1lbnQgPSAoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICBjb25zdCBmb3JtUG9zaXRpb24gPSAkZWxlbWVudC5vZmZzZXQoKS50b3A7XG4gICAgY29uc3QgJHNjcm9sbFBhcmVudCA9ICRlbGVtZW50LmNsb3Nlc3QoJ1t3bXNtb290aHNjcm9sbD1cInRydWVcIl0nKTtcbiAgICBpZiAoaXNNb2JpbGVBcHAoKSAmJiAkc2Nyb2xsUGFyZW50Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBpU2Nyb2xsID0gXy5nZXQoJHNjcm9sbFBhcmVudFswXSwgJ2lzY3JvbGwnKTtcbiAgICAgICAgbGV0IHRvID0gLShmb3JtUG9zaXRpb24gLSBpU2Nyb2xsLnkpO1xuICAgICAgICB0byA9IChpU2Nyb2xsLm1heFNjcm9sbFkgPiB0bykgPyBpU2Nyb2xsLm1heFNjcm9sbFkgOiB0bztcbiAgICAgICAgaVNjcm9sbC5zY3JvbGxUbygwLCB0byk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LnNjcm9sbCh7XG4gICAgICAgICAgICB0b3A6IGZvcm1Qb3NpdGlvbixcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vLyBGdW5jdGlvbiB3aWxsIHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBlbGVtZW50IGlzIGluIHZpZXdwb3J0IG9yIG5vdFxuZXhwb3J0IGNvbnN0IGlzRWxlbWVudEluVmlld3BvcnQgPSAoZWxlbWVudCkgPT4ge1xuICAgIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICByZWN0LnRvcCA+PSAwICYmXG4gICAgICAgIHJlY3QubGVmdCA+PSAwICYmXG4gICAgICAgIHJlY3QuYm90dG9tIDw9ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkgJiZcbiAgICAgICAgcmVjdC5yaWdodCA8PSAod2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKVxuICAgICk7XG59XG5cbi8qRnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIG9iamVjdCBpcyBhIHBhZ2VhYmxlIG9iamVjdCBvciBub3QuKi9cbmV4cG9ydCBjb25zdCBpc1BhZ2VhYmxlID0gKG9iajogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgcGFnZWFibGUgPSB7XG4gICAgICAgICdjb250ZW50JzogW10sXG4gICAgICAgICdmaXJzdCc6IHRydWUsXG4gICAgICAgICdsYXN0JzogdHJ1ZSxcbiAgICAgICAgJ251bWJlcic6IDAsXG4gICAgICAgICdudW1iZXJPZkVsZW1lbnRzJzogMTAsXG4gICAgICAgICdzaXplJzogMjAsXG4gICAgICAgICdzb3J0JzogbnVsbCxcbiAgICAgICAgJ3RvdGFsRWxlbWVudHMnOiAxMCxcbiAgICAgICAgJ3RvdGFsUGFnZXMnOiAxXG4gICAgfTtcbiAgICAvLyBwYWdpbmF0ZWQgb2JqZWN0IG1heSBvciBtYXkgbm90IGNvbnRhaW4gJ2VtcHR5JyBwcm9wZXJ0eS4gSW4gZWl0aGVyIGNhc2UsIFBhZ2VhYmxlIHNob3VsZCByZXR1cm4gYXMgdHJ1ZS5cbiAgICBjb25zdCBwYWdpbmF0ZWRPYmogPSBfLm9taXQob2JqLCAnZW1wdHknKTtcbiAgICByZXR1cm4gKF8uaXNFcXVhbChfLmtleXMocGFnZWFibGUpLCBfLmtleXMocGFnaW5hdGVkT2JqKS5zb3J0KCkpKTtcbn07XG5cbi8qXG4gKiBVdGlsIG1ldGhvZCB0byByZXBsYWNlIHBhdHRlcm5zIGluIHN0cmluZyB3aXRoIG9iamVjdCBrZXlzIG9yIGFycmF5IHZhbHVlc1xuICogRXhhbXBsZXM6XG4gKiBVdGlscy5yZXBsYWNlKCdIZWxsbywgJHtmaXJzdH0gJHtsYXN0fSAhJywge2ZpcnN0OiAnd2F2ZW1ha2VyJywgbGFzdDogJ25nJ30pIC0tPiBIZWxsbywgd2F2ZW1ha2VyIG5nXG4gKiBVdGlscy5yZXBsYWNlKCdIZWxsbywgJHswfSAkezF9ICEnLCBbJ3dhdmVtYWtlcicsJ25nJ10pIC0tPiBIZWxsbywgd2F2ZW1ha2VyIG5nXG4gKiBFeGFtcGxlcyBpZiBwYXJzZUVycm9yIGlzIHRydWU6XG4gKiBVdGlscy5yZXBsYWNlKCdIZWxsbywgezB9IHsxfSAhJywgWyd3YXZlbWFrZXInLCduZyddKSAtLT4gSGVsbG8sIHdhdmVtYWtlciBuZ1xuICovXG5leHBvcnQgY29uc3QgcmVwbGFjZSA9ICh0ZW1wbGF0ZSwgbWFwLCBwYXJzZUVycm9yPzogYm9vbGVhbikgPT4ge1xuICAgIGxldCByZWdFeCA9IFJFR0VYLlJFUExBQ0VfUEFUVEVSTjtcbiAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgcmVnRXggPSAvXFx7KFteXFx9XSspXFx9L2c7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UocmVnRXgsIGZ1bmN0aW9uIChtYXRjaCwga2V5KSB7XG4gICAgICAgIHJldHVybiBfLmdldChtYXAsIGtleSk7XG4gICAgfSk7XG59O1xuXG4vKkZ1bmN0aW9uIHRvIGNoZWNrIGlmIGRhdGUgdGltZSB0eXBlKi9cbmV4cG9ydCBjb25zdCBpc0RhdGVUaW1lVHlwZSA9IHR5cGUgPT4ge1xuICAgIGlmIChfLmluY2x1ZGVzKHR5cGUsICcuJykpIHtcbiAgICAgICAgdHlwZSA9IF8udG9Mb3dlcihleHRyYWN0VHlwZSh0eXBlKSk7XG4gICAgfVxuICAgIHJldHVybiBfLmluY2x1ZGVzKFtEYXRhVHlwZS5EQVRFLCBEYXRhVHlwZS5USU1FLCBEYXRhVHlwZS5USU1FU1RBTVAsIERhdGFUeXBlLkRBVEVUSU1FLCBEYXRhVHlwZS5MT0NBTERBVEVUSU1FXSwgdHlwZSk7XG59O1xuXG5jb25zdCBtb21lbnRQYXR0ZXJuID0gKHBhdHRlcm4pID0+IHtcbiAgICBpZiAoXy5pbmNsdWRlcyhwYXR0ZXJuLCAnRScpKSB7XG4gICAgICAgcGF0dGVybiA9ICBfLnJlcGxhY2UocGF0dGVybiwgL0VbLF0/L2csICcnKTtcbiAgICB9XG4gICAgcmV0dXJuIF8ucmVwbGFjZShwYXR0ZXJuLCAveSpkKi9nLCAodmFsKSA9PiB2YWwudG9VcHBlckNhc2UoKSk7XG59O1xuXG4vKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGRhdGUgb2JqZWN0LiBJZiB2YWwgaXMgdW5kZWZpbmVkIGl0IHJldHVybnMgaW52YWxpZCBkYXRlICovXG5leHBvcnQgY29uc3QgZ2V0VmFsaWREYXRlT2JqZWN0ID0gKHZhbCwgb3B0aW9ucz8pID0+IHtcbiAgIGNvbnN0IGRlZmF1bHRNZXJpZGlhbiA9IFsnQU0nLCAnUE0nXTtcbiAgIGNvbnN0IG1vbWVudE1lcmlkaWFuID0gbW9tZW50KCkuX2xvY2FsZS5tZXJpZGllbSgpO1xuICAgIC8vIFVwZGF0aW5nIGxvY2FsaXplZCBtZXJpZGlhbnMgd2l0aCBkZWZhdWx0IG1lcmlkaWFucyB3aGVuIG1vbWVudCBtZXJpZGlhbiBpcyBub3QgZGVmaW5lZFxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMubWVyaWRpYW5zICYmIF8uaW5jbHVkZXMoZGVmYXVsdE1lcmlkaWFuLCBtb21lbnRNZXJpZGlhbikpIHtcbiAgICAgICAgXy5mb3JFYWNoKG9wdGlvbnMubWVyaWRpYW5zLCAobWVyaWRpYW4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyh2YWwsIG1lcmlkaWFuKSkge1xuICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKG1lcmlkaWFuLCBkZWZhdWx0TWVyaWRpYW5baW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGlzTmF0aXZlUGlja2VyID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaXNOYXRpdmVQaWNrZXInKSkgPyBfLmdldChvcHRpb25zLCAnaXNOYXRpdmVQaWNrZXInKSA6IGlzTW9iaWxlKCk7XG4gICAgY29uc3QgcGF0dGVybiA9IGlzTmF0aXZlUGlja2VyID8gKF8uZ2V0KG9wdGlvbnMsICdwYXR0ZXJuJykgfHwgICdZWVlZL01NL0REIEhIOm1tOnNzJykgOiAobW9tZW50UGF0dGVybihfLmdldChvcHRpb25zLCAncGF0dGVybicpKSB8fCAnJyk7XG4gICAgLy8gSGFuZGxpbmcgbG9jYWxpemF0aW9uXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXR0ZXJuICYmIG9wdGlvbnMucGF0dGVybiAhPT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgaWYgKCFpc05hTigobmV3IERhdGUodmFsKSkuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciB2YWwgaXMgYSB2YWxpZCBkYXRlIG9yIG5vdFxuICAgICAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3IgaU9TLCBleHBsaWNpdGx5IHNldHRpbmcgdGhlIGZvcm1hdCB0byBjb25zaWRlciBldmVuIHRoZSBzZWNvbmRzLlxuICAgICAgICAgICAgICAgIHZhbCA9IG1vbWVudCh2YWwpLmZvcm1hdCgnWVlZWS9NTS9ERCBISDptbTpzcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsID0gbW9tZW50KG5ldyBEYXRlKHZhbCksIHBhdHRlcm4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsID0gbW9tZW50KHZhbCwgcGF0dGVybik7XG4gICAgICAgIH1cbiAgICAgICAgdmFsID0gdmFsLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIGlmIChtb21lbnQodmFsLCBwYXR0ZXJuKS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgLy8gZGF0ZSB3aXRoICs1IGhvdXJzIGlzIHJldHVybmVkIGluIHNhZmFyaSBicm93c2VyIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGRhdGUuXG4gICAgICAgIC8vIEhlbmNlIGNvbnZlcnRpbmcgdGhlIGRhdGUgdG8gdGhlIHN1cHBvcnRlZCBmb3JtYXQgXCJZWVlZL01NL0REIEhIOm1tOnNzXCIgaW4gSU9TXG4gICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICB2YWwgPSBtb21lbnQobW9tZW50KHZhbCkudmFsdWVPZigpKS5mb3JtYXQoJ1lZWVkvTU0vREQgSEg6bW06c3MnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICAvKmlmIHRoZSB2YWx1ZSBpcyBhIHRpbWVzdGFtcCBzdHJpbmcsIGNvbnZlcnQgaXQgdG8gYSBudW1iZXIqL1xuICAgIGlmICghaXNOYU4odmFsKSkge1xuICAgICAgICB2YWwgPSBwYXJzZUludCh2YWwsIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvKmlmIHRoZSB2YWx1ZSBpcyBpbiBISDptbTpzcyBmb3JtYXQsIGl0IHJldHVybnMgYSB3cm9uZyBkYXRlLiBTbyBhcHBlbmQgdGhlIGRhdGUgdG8gdGhlIGdpdmVuIHZhbHVlIHRvIGdldCBkYXRlKi9cbiAgICAgICAgaWYgKCEobmV3IERhdGUodmFsKS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICB2YWwgPSBtb21lbnQoKG1vbWVudCgpLmZvcm1hdCgnWVlZWS1NTS1ERCcpICsgJyAnICsgdmFsKSwgJ1lZWVktTU0tREQgSEg6bW06c3MgQScpO1xuXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKG1vbWVudCh2YWwpLnZhbHVlT2YoKSk7XG59O1xuXG4vKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGphdmFzY3JpcHQgZGF0ZSBvYmplY3QqL1xuZXhwb3J0IGNvbnN0IGdldE5hdGl2ZURhdGVPYmplY3QgPSAodmFsLCBvcHRpb25zPykgPT4ge1xuICAgIHZhbCA9IGdldFZhbGlkRGF0ZU9iamVjdCh2YWwsIG9wdGlvbnMpO1xuICAgIHJldHVybiBuZXcgRGF0ZSh2YWwpO1xufTtcblxuXG4vKipcbiAqIHByZXBhcmUgYSBibG9iIG9iamVjdCBiYXNlZCBvbiB0aGUgY29udGVudCBhbmQgY29udGVudCB0eXBlIHByb3ZpZGVkXG4gKiBpZiBjb250ZW50IGlzIGJsb2IgaXRzZWxmLCBzaW1wbHkgcmV0dXJucyBpdCBiYWNrXG4gKiBAcGFyYW0gdmFsXG4gKiBAcGFyYW0gdmFsQ29udGVudFR5cGVcbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgY29uc3QgZ2V0QmxvYiA9ICh2YWwsIHZhbENvbnRlbnRUeXBlPykgPT4ge1xuICAgIGlmICh2YWwgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGNvbnN0IGpzb25WYWwgPSBnZXRWYWxpZEpTT04odmFsKTtcbiAgICBpZiAoanNvblZhbCAmJiBqc29uVmFsIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHZhbCA9IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShqc29uVmFsKV0sIHsgdHlwZTogdmFsQ29udGVudFR5cGUgfHwgJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IG5ldyBCbG9iKFt2YWxdLCB7IHR5cGU6IHZhbENvbnRlbnRUeXBlIHx8ICd0ZXh0L3BsYWluJyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgYnkgY29tcGFyaW5nIHR3byBvYmplY3RzIGJhc2VkIG9uIHRoZSBmaWVsZHNcbiAqIEBwYXJhbSBvYmoxIG9iamVjdFxuICogQHBhcmFtIG9iajIgb2JqZWN0XG4gKiBAcGFyYW0gY29tcGFyZUJ5IHN0cmluZyBmaWVsZCB2YWx1ZXMgdG8gY29tcGFyZVxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgb2JqZWN0IGVxdWFsaXR5IHJldHVybnMgdHJ1ZSBiYXNlZCBvbiBmaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRXF1YWxXaXRoRmllbGRzID0gKG9iajEsIG9iajIsIGNvbXBhcmVCeSkgPT4ge1xuICAgIC8vIGNvbXBhcmVCeSBjYW4gYmUgJ2lkJyBvciAnaWQxLCBpZDInIG9yICdpZDEsIGlkMjppZDMnXG4gICAgLy8gU3BsaXQgdGhlIGNvbXBhcmVieSBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzXG4gICAgbGV0IF9jb21wYXJlQnkgPSBfLmlzQXJyYXkoY29tcGFyZUJ5KSA/IGNvbXBhcmVCeSA6IF8uc3BsaXQoY29tcGFyZUJ5LCAnLCcpO1xuXG4gICAgX2NvbXBhcmVCeSA9IF8ubWFwKF9jb21wYXJlQnksIF8udHJpbSk7XG5cbiAgICByZXR1cm4gXy5pc0VxdWFsV2l0aChvYmoxLCBvYmoyLCBmdW5jdGlvbiAobzEsIG8yKSB7XG4gICAgICAgIHJldHVybiBfLmV2ZXJ5KF9jb21wYXJlQnksIGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgbGV0IGNiMSwgY2IyLCBfY2I7XG5cbiAgICAgICAgICAgIC8vIElmIGNvbXBhcmVieSBjb250YWlucyA6ICwgY29tcGFyZSB0aGUgdmFsdWVzIGJ5IHRoZSBrZXlzIG9uIGVpdGhlciBzaWRlIG9mIDpcbiAgICAgICAgICAgIGlmIChfLmluZGV4T2YoY2IsIGNvbXBhcmVCeVNlcGFyYXRvcikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY2IxID0gY2IyID0gXy50cmltKGNiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgX2NiID0gXy5zcGxpdChjYiwgY29tcGFyZUJ5U2VwYXJhdG9yKTtcbiAgICAgICAgICAgICAgICBjYjEgPSBfLnRyaW0oX2NiWzBdKTtcbiAgICAgICAgICAgICAgICBjYjIgPSBfLnRyaW0oX2NiWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF8uZ2V0KG8xLCBjYjEpID09PSBfLmdldChvMiwgY2IyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5jb25zdCBnZXROb2RlID0gc2VsZWN0b3IgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbi8vIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBzdHlsZXNoZWV0IGlzIGFscmVhZHkgbG9hZGVkXG5jb25zdCBpc1N0eWxlU2hlZXRMb2FkZWQgPSBocmVmID0+ICEhZ2V0Tm9kZShgbGlua1tocmVmPVwiJHtocmVmfVwiXWApO1xuXG4vLyBmdW5jdGlvbiB0byByZW1vdmUgc3R5bGVzaGVldCBpZiB0aGUgc3R5bGVzaGVldCBpcyBhbHJlYWR5IGxvYWRlZFxuY29uc3QgcmVtb3ZlU3R5bGVTaGVldCA9IGhyZWYgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSBnZXROb2RlKGBsaW5rW2hyZWY9XCIke2hyZWZ9XCJdYCk7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICB9XG59O1xuXG4vLyBmdW5jdGlvbiB0byBsb2FkIGEgc3R5bGVzaGVldFxuZXhwb3J0IGNvbnN0IGxvYWRTdHlsZVNoZWV0ID0gKHVybCwgYXR0cikgPT4ge1xuICAgIGlmIChpc1N0eWxlU2hlZXRMb2FkZWQodXJsKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgbGluay5ocmVmID0gdXJsO1xuICAgIC8vIFRvIGFkZCBhdHRyaWJ1dGVzIHRvIGxpbmsgdGFnXG4gICAgaWYgKGF0dHIgJiYgYXR0ci5uYW1lKSB7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7XG4gICAgfVxuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdyZWwnLCAnc3R5bGVzaGVldCcpO1xuICAgIGxpbmsuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvY3NzJyk7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICByZXR1cm4gbGluaztcbn07XG5cbi8vIGZ1bmN0aW9uIHRvIGxvYWQgc3R5bGVzaGVldHNcbmV4cG9ydCBjb25zdCBsb2FkU3R5bGVTaGVldHMgPSAodXJscyA9IFtdKSA9PiB7XG4gICAgLy8gaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG5vdCBhbiBhcnJheSwgY29udmVydCBpdCB0byBhbiBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cmxzKSkge1xuICAgICAgICB1cmxzID0gW3VybHNdO1xuICAgIH1cbiAgICB1cmxzLmZvckVhY2gobG9hZFN0eWxlU2hlZXQpO1xufTtcblxuLy8gZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIHNjcmlwdCBpcyBhbHJlYWR5IGxvYWRlZFxuY29uc3QgaXNTY3JpcHRMb2FkZWQgPSBzcmMgPT4gISFnZXROb2RlKGBzY3JpcHRbc3JjPVwiJHtzcmN9XCJdLCBzY3JpcHRbZGF0YS1zcmM9XCIke3NyY31cIl1gKTtcblxuZXhwb3J0IGNvbnN0IGdldE1vbWVudExvY2FsZU9iamVjdCA9ICh0aW1lWm9uZSwgZGF0ZU9iaj8pID0+IHtcbiAgICBpZiAoZGF0ZU9iaikge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUobmV3IERhdGUobW9tZW50KGRhdGVPYmopLnR6KHRpbWVab25lKS5mb3JtYXQoKSkudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLCB7dGltZVpvbmU6IHRpbWVab25lfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZShtb21lbnQoKS50eih0aW1lWm9uZSkuZm9ybWF0KCkpLnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIiwge3RpbWVab25lOiB0aW1lWm9uZX0pKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBsb2FkU2NyaXB0ID0gYXN5bmMgKHVybCwgbG9hZFZpYVNjcmlwdFRhZywgY2FjaGVhYmxlID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBfdXJsID0gdXJsLnRyaW0oKTtcbiAgICBpZiAoIV91cmwubGVuZ3RoIHx8IGlzU2NyaXB0TG9hZGVkKF91cmwpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBpZiAobG9hZFZpYVNjcmlwdFRhZykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KT0+e1xuICAgICAgICAgICAgbGV0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgc2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgICAgICAgIHNjcmlwdC5zcmMgPSBfdXJsO1xuICAgICAgICAgICAgc2NyaXB0LmFzeW5jID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2NyaXB0LnJlYWR5U3RhdGUpIHsgIC8vSUVcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7ICAvL090aGVyIGJyb3dzZXJzXG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoZXJyb3I6IGFueSkgPT4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmKGNhY2hlYWJsZSkge1xuICAgICAgICByZXR1cm4gJC5hamF4KHtcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnc2NyaXB0JyxcbiAgICAgICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICAgICAgdXJsOiB1cmxcbiAgICAgICAgfSkuZG9uZShyZXNwb25zZSA9PiByZXNwb25zZSlcbiAgICAgICAgICAgIC5mYWlsKHJlYXNvbiA9PiByZWFzb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAkLmdldFNjcmlwdCh1cmwpXG4gICAgICAgICAgICAuZG9uZShyZXNwb25zZSA9PiByZXNwb25zZSlcbiAgICAgICAgICAgIC5mYWlsKHJlYXNvbiA9PiByZWFzb24pO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsb2FkU2NyaXB0cyA9IGFzeW5jICh1cmxzID0gW10sIGxvYWRWaWFTY3JpcHRUYWcgPSB0cnVlKSA9PiB7XG4gICAgZm9yIChjb25zdCB1cmwgb2YgdXJscykge1xuICAgICAgICBhd2FpdCBsb2FkU2NyaXB0KHVybCwgbG9hZFZpYVNjcmlwdFRhZyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn07XG5cbmV4cG9ydCBsZXQgX1dNX0FQUF9QUk9KRUNUOiBhbnkgPSB7fTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNldHMgc2Vzc2lvbiBzdG9yYWdlIGl0ZW0gYmFzZWQgb24gdGhlIHByb2plY3QgSURcbiAqIEBwYXJhbSBrZXkgc3RyaW5nXG4gKiBAcGFyYW0gdmFsdWUgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uU3RvcmFnZUl0ZW0gPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGxldCBpdGVtOiBhbnkgPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShfV01fQVBQX1BST0pFQ1QuaWQpO1xuXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgaXRlbSA9IEpTT04ucGFyc2UoaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbSA9IHt9O1xuICAgIH1cbiAgICBpdGVtW2tleV0gPSB2YWx1ZTtcblxuICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKF9XTV9BUFBfUFJPSkVDVC5pZCwgSlNPTi5zdHJpbmdpZnkoaXRlbSkpO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldHMgc2Vzc2lvbiBzdG9yYWdlIGl0ZW0gYmFzZWQgb24gdGhlIHByb2plY3QgSURcbiAqIEBwYXJhbSBrZXkgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZXNzaW9uU3RvcmFnZUl0ZW0gPSBrZXkgPT4ge1xuICAgIC8vIHNhbml0eSBjaGVjayBmb3IgdGhpcyB0byB3b3JrIHdpdGggbmctY29kZWdlblxuICAgIGxldCBpdGVtID0gd2luZG93ICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZSAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShfV01fQVBQX1BST0pFQ1QuaWQpO1xuXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgaXRlbSA9IEpTT04ucGFyc2UoaXRlbSk7XG4gICAgICAgIHJldHVybiBpdGVtW2tleV07XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IG5vb3AgPSAoLi4uYXJncykgPT4geyB9O1xuXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IHYgPT4gXy5pc0FycmF5KHYpO1xuXG5leHBvcnQgY29uc3QgaXNTdHJpbmcgPSB2ID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJztcblxuZXhwb3J0IGNvbnN0IGlzTnVtYmVyID0gdiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcic7XG5cbmV4cG9ydCBjb25zdCBpc0Jvb2xlYW4gPSB2ID0+IHR5cGVvZiB2ID09PSAnYm9vbGVhbic7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgYmxvYiBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZmlsZSBwYXRoXG4gKiBAcGFyYW0gZmlsZXBhdGhcbiAqIEByZXR1cm5zIHByb21pc2UgaGF2aW5nIGJsb2Igb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0VG9CbG9iID0gKGZpbGVwYXRoKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIC8vIFJlYWQgdGhlIGZpbGUgZW50cnkgZnJvbSB0aGUgZmlsZSBVUkxcbiAgICAgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChmaWxlcGF0aCwgZnVuY3Rpb24gKGZpbGVFbnRyeSkge1xuICAgICAgICAgICAgZmlsZUVudHJ5LmZpbGUoZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgICAgICAgICAvLyBmaWxlIGhhcyB0aGUgY29yZG92YSBmaWxlIHN0cnVjdHVyZS4gVG8gc3VibWl0IHRvIHRoZSBiYWNrZW5kLCBjb252ZXJ0IHRoaXMgZmlsZSB0byBqYXZhc2NyaXB0IGZpbGVcbiAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGltZ0Jsb2IgPSBuZXcgQmxvYihbcmVhZGVyLnJlc3VsdF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogZmlsZS50eXBlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHsgJ2Jsb2InOiBpbWdCbG9iLCAnZmlsZXBhdGgnOiBmaWxlcGF0aCB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc0NvcmRvdmEgPSAoKSA9PiB7XG4gICAgcmV0dXJuICEhd2luZG93Wydjb3Jkb3ZhJ107XG59O1xuXG5leHBvcnQgY29uc3QgQXBwQ29uc3RhbnRzID0ge1xuICAgIElOVF9NQVhfVkFMVUU6IDIxNDc0ODM2NDdcbn07XG5cbmV4cG9ydCBjb25zdCBvcGVuTGluayA9IChsaW5rOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nID0gJ19zZWxmJykgPT4ge1xuICAgIGlmIChoYXNDb3Jkb3ZhKCkgJiYgXy5zdGFydHNXaXRoKGxpbmssICcjJykpIHtcbiAgICAgICAgbG9jYXRpb24uaGFzaCA9IGxpbms7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93Lm9wZW4obGluaywgdGFyZ2V0KTtcbiAgICB9XG59O1xuXG4vKiB1dGlsIGZ1bmN0aW9uIHRvIGxvYWQgdGhlIGNvbnRlbnQgZnJvbSBhIHVybCAqL1xuZXhwb3J0IGNvbnN0IGZldGNoQ29udGVudCA9IChkYXRhVHlwZSwgdXJsOiBzdHJpbmcsIGluU3luYzogYm9vbGVhbiA9IGZhbHNlLCBzdWNjZXNzPywgZXJyb3I/KTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gJC5hamF4KHsgdHlwZTogJ2dldCcsIGRhdGFUeXBlOiBkYXRhVHlwZSwgdXJsOiB1cmwsIGFzeW5jOiAhaW5TeW5jIH0pXG4gICAgICAgIC5kb25lKHJlc3BvbnNlID0+IHN1Y2Nlc3MgJiYgc3VjY2VzcyhyZXNwb25zZSkpXG4gICAgICAgIC5mYWlsKHJlYXNvbiA9PiBlcnJvciAmJiBlcnJvcihyZWFzb24pKTtcbn07XG5cbi8qKlxuICogSWYgdGhlIGdpdmVuIG9iamVjdCBpcyBhIHByb21pc2UsIHRoZW4gb2JqZWN0IGlzIHJldHVybmVkLiBPdGhlcndpc2UsIGEgcHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIHRoZSBnaXZlbiBvYmplY3QuXG4gKiBAcGFyYW0ge1Byb21pc2U8VD4gfCBUfSBhXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxUPn1cbiAqL1xuZXhwb3J0IGNvbnN0IHRvUHJvbWlzZSA9IDxUPihhOiBUIHwgUHJvbWlzZTxUPik6IFByb21pc2U8VD4gPT4ge1xuICAgIGlmIChhIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGEgYXMgVCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGludm9rZXMgdGhlIGdpdmVuIHRoZSBmdW5jdGlvbiAoZm4pIHVudGlsIHRoZSBmdW5jdGlvbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMgb3IgdGhlIG1heGltdW0gbnVtYmVyXG4gKiBvZiByZXRyaWVzIGlzIHJlYWNoZWQgb3Igb25CZWZvcmVSZXRyeSByZXR1cm5zIGZhbHNlLlxuICpcbiAqIEBwYXJhbSBmbiAtIGEgZnVuY3Rpb24gdGhhdCBpcyBuZWVkcyB0byBiZSBpbnZva2VkLiBUaGUgZnVuY3Rpb24gY2FuIGFsc28gcmV0dXJuIGEgcHJvbWlzZSBhcyB3ZWxsLlxuICogQHBhcmFtIGludGVydmFsIC0gbWluaW11bSB0aW1lIGdhcCBiZXR3ZWVuIHN1Y2Nlc3NpdmUgcmV0cmllcy4gVGhpcyBhcmd1bWVudCBzaG91bGQgYmUgZ3JlYXRlciBvciBlcXVhbCB0byAwLlxuICogQHBhcmFtIG1heFJldHJpZXMgLSBtYXhpbXVtIG51bWJlciBvZiByZXRyaWVzLiBUaGlzIGFyZ3VtZW50IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMC4gRm9yIGFsbCBvdGhlciB2YWx1ZXMsXG4gKiBtYXhSZXRyaWVzIGlzIGluZmluaXR5LlxuICogQHBhcmFtIG9uQmVmb3JlUmV0cnkgLSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSByZS1pbnZva2luZyBhZ2Fpbi4gVGhpcyBmdW5jdGlvbiBjYW5cbiAqIHJldHVybiBmYWxzZSBvciBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB0byBmYWxzZSB0byBzdG9wIGZ1cnRoZXIgcmV0cnkgYXR0ZW1wdHMuXG4gKiBAcmV0dXJucyB7Kn0gYSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiBmbiBpcyBzdWNjZXNzIChvcikgbWF4aW11bSByZXRyeSBhdHRlbXB0cyByZWFjaGVkXG4gKiAob3IpIG9uQmVmb3JlUmV0cnkgcmV0dXJuZWQgZmFsc2UuXG4gKi9cbmV4cG9ydCBjb25zdCByZXRyeUlmRmFpbHMgPSAoZm46ICgpID0+IGFueSwgaW50ZXJ2YWw6IG51bWJlciwgbWF4UmV0cmllczogbnVtYmVyLCBvbkJlZm9yZVJldHJ5ID0gKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKSkgPT4ge1xuICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICBjb25zdCB0cnlGbiA9ICgpID0+IHtcbiAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIG1heFJldHJpZXMgPSAoXy5pc051bWJlcihtYXhSZXRyaWVzKSAmJiBtYXhSZXRyaWVzID4gMCA/IG1heFJldHJpZXMgOiAwKTtcbiAgICBpbnRlcnZhbCA9IChfLmlzTnVtYmVyKGludGVydmFsKSAmJiBpbnRlcnZhbCA+IDAgPyBpbnRlcnZhbCA6IDApO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yRm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9Qcm9taXNlPGJvb2xlYW4+KG9uQmVmb3JlUmV0cnkoKSkudGhlbihmdW5jdGlvbiAocmV0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5ICE9PSBmYWxzZSAmJiAoIW1heFJldHJpZXMgfHwgcmV0cnlDb3VudCA8PSBtYXhSZXRyaWVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9Qcm9taXNlKHRyeUZuKCkpLnRoZW4ocmVzb2x2ZSwgZXJyb3JGbik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyQXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAoKSA9PiByZWplY3QoZXJyQXJncykpO1xuICAgICAgICAgICAgfSwgaW50ZXJ2YWwpO1xuICAgICAgICB9O1xuICAgICAgICB0b1Byb21pc2UodHJ5Rm4oKSkudGhlbihyZXNvbHZlLCBlcnJvckZuKTtcbiAgICB9KTtcbn07XG5cbi8qKlxuICogUHJvbWlzZSBvZiBhIGRlZmVyIGNyZWF0ZWQgdXNpbmcgdGhpcyBmdW5jdGlvbiwgaGFzIGFib3J0IGZ1bmN0aW9uIHRoYXQgd2lsbCByZWplY3QgdGhlIGRlZmVyIHdoZW4gY2FsbGVkLlxuICogQHJldHVybnMgeyp9IGFuZ3VsYXIgZGVmZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBYm9ydGFibGVEZWZlciA9ICgpID0+IHtcbiAgICBjb25zdCBfZGVmZXI6IGFueSA9IHtcbiAgICAgICAgcHJvbWlzZTogbnVsbCxcbiAgICAgICAgcmVqZWN0OiBudWxsLFxuICAgICAgICByZXNvbHZlOiBudWxsLFxuICAgICAgICBvbkFib3J0OiAoKSA9PiB7IH0sXG4gICAgICAgIGlzQWJvcnRlZDogZmFsc2VcbiAgICB9O1xuICAgIF9kZWZlci5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBfZGVmZXIucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgIF9kZWZlci5yZWplY3QgPSByZWplY3Q7XG4gICAgfSk7XG4gICAgX2RlZmVyLnByb21pc2UuYWJvcnQgPSAoKSA9PiB7XG4gICAgICAgIHRyaWdnZXJGbihfZGVmZXIub25BYm9ydCk7XG4gICAgICAgIF9kZWZlci5yZWplY3QoJ2Fib3J0ZWQnKTtcbiAgICAgICAgX2RlZmVyLmlzQWJvcnRlZCA9IHRydWU7XG4gICAgfTtcbiAgICByZXR1cm4gX2RlZmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNTU1J1bGUgPSAocnVsZVNlbGVjdG9yOiBzdHJpbmcsIHJ1bGVzOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBzdHlsZXNoZWV0ID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbMF07XG4gICAgc3R5bGVzaGVldC5pbnNlcnRSdWxlKGAke3J1bGVTZWxlY3Rvcn0geyAke3J1bGVzfSB9YCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXJsUGFyYW1zID0gKGxpbmspID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAvLyBJZiB1cmwgcGFyYW1zIGFyZSBwcmVzZW50LCBjb25zdHJ1Y3QgcGFyYW1zIG9iamVjdCBhbmQgcGFzcyBpdCB0byBzZWFyY2hcbiAgICBjb25zdCBpbmRleCA9IGxpbmsuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBfLnNwbGl0KGxpbmsuc3Vic3RyaW5nKGluZGV4ICsgMSwgbGluay5sZW5ndGgpLCAnJicpO1xuICAgICAgICBxdWVyeVBhcmFtcy5mb3JFYWNoKChwYXJhbSkgPT4ge1xuICAgICAgICAgICAgcGFyYW0gPSBfLnNwbGl0KHBhcmFtLCAnPScpO1xuICAgICAgICAgICAgcGFyYW1zW3BhcmFtWzBdXSA9IHBhcmFtWzFdO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSb3V0ZU5hbWVGcm9tTGluayA9IChsaW5rKSA9PiB7XG4gICAgbGluayA9IGxpbmsucmVwbGFjZSgnIy8nLCAnLycpO1xuICAgIGNvbnN0IGluZGV4ID0gbGluay5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBsaW5rID0gbGluay5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gbGluaztcbn07XG5cbmV4cG9ydCBjb25zdCBpc0FwcGxlUHJvZHVjdCA9IC9NYWN8aVBvZHxpUGhvbmV8aVBhZC8udGVzdCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtKTtcblxuZXhwb3J0IGNvbnN0IGRlZmVyID0gKCkgPT4ge1xuICAgIGNvbnN0IGQgPSB7XG4gICAgICAgIHByb21pc2U6IG51bGwsXG4gICAgICAgIHJlc29sdmU6IG5vb3AsXG4gICAgICAgIHJlamVjdDogbm9vcFxuICAgIH07XG4gICAgZC5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBkLnJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICBkLnJlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcbiAgICByZXR1cm4gZDtcbn07XG5cbi8qXG4gKiBJbnZva2VzIHRoZSBnaXZlbiBsaXN0IG9mIGZ1bmN0aW9ucyBzZXF1ZW50aWFsbHkgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiBJZiBhIGZ1bmN0aW9uIHJldHVybnMgYSBwcm9taXNlLFxuICogdGhlbiBuZXh0IGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBvbmx5IGlmIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkLlxuICovXG5leHBvcnQgY29uc3QgZXhlY3V0ZVByb21pc2VDaGFpbiA9IChmbnMsIGFyZ3MsIGQ/LCBpPykgPT4ge1xuICAgIGQgPSBkIHx8IGRlZmVyKCk7XG4gICAgaSA9IGkgfHwgMDtcbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICBmbnMgPSBfLmZpbHRlcihmbnMsIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgcmV0dXJuICEoXy5pc1VuZGVmaW5lZChmbikgfHwgXy5pc051bGwoZm4pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChmbnMgJiYgaSA8IGZucy5sZW5ndGgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRvUHJvbWlzZShmbnNbaV0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiBleGVjdXRlUHJvbWlzZUNoYWluKGZucywgYXJncywgZCwgaSArIDEpLCBkLnJlamVjdCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGQucmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZC5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHJldHVybiBkLnByb21pc2U7XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyB0d28gZGF0YSBzb3VyY2VzIGFuZCB3aWxsIGNoZWNrIGlmIGJvdGggYXJlIHNhbWUgYnkgY29tcGFyaW5nIHRoZSB1bmlxdWUgaWQgYW5kXG4gKiBjb250ZXh0IGluIHdoaWNoIGRhdGFzb3VyY2VzIGFyZSBwcmVzZW50XG4gKiBAcmV0dXJucyB7Kn0gYm9vbGVhbiB0cnVlLyBmYWxzZVxuICovXG5leHBvcnQgY29uc3QgaXNEYXRhU291cmNlRXF1YWwgPSAoZDEsIGQyKSA9PiB7XG4gICAgcmV0dXJuIGQxLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1VOSVFVRV9JREVOVElGSUVSKSA9PT0gZDIuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfVU5JUVVFX0lERU5USUZJRVIpICYmXG4gICAgICAgIF8uaXNFcXVhbChkMS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9DT05URVhUX0lERU5USUZJRVIpLCBkMi5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9DT05URVhUX0lERU5USUZJRVIpKTtcbn07XG5cbi8qKlxuICogY2hlY2tzIGlmIHRoZSBwYXNzZWQgZGF0YXNvdXJjZSBjb250ZXh0IG1hdGNoZXMgd2l0aCBwYXNzZWQgY29udGV4dFxuICogQHBhcmFtIGRzLCBkYXRhc291cmNlIGhhdmluZyBhIGNvbnRleHRcbiAqIEBwYXJhbSBjdHgsIGNvbnRleHQgdG8gY29tcGFyZSB3aXRoXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRGF0YVNvdXJjZUN0eCA9IChkcywgY3R4KSA9PiB7XG4gICAgcmV0dXJuIGRzLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0NPTlRFWFRfSURFTlRJRklFUikgPT09IGN0eDtcbn07XG5cbi8qKlxuICogVGhpcyB0cmF2ZXJzZXMgdGhlIGZpbHRlcmV4cHJlc3Npb25zIG9iamVjdCByZWN1cnNpdmVseSBhbmQgcHJvY2VzcyB0aGUgYmluZCBzdHJpbmcgaWYgYW55IGluIHRoZSBvYmplY3RcbiAqIEBwYXJhbSB2YXJpYWJsZSB2YXJpYWJsZSBvYmplY3RcbiAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIHZhcmlhYmxlXG4gKiBAcGFyYW0gY29udGV4dCBzY29wZSBvZiB0aGUgdmFyaWFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IHByb2Nlc3NGaWx0ZXJFeHBCaW5kTm9kZSA9IChjb250ZXh0LCBmaWx0ZXJFeHByZXNzaW9ucywgdmFyaWFibGU/KSA9PiB7XG4gICAgY29uc3QgZGVzdHJveUZuID0gY29udGV4dC5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lciA/IGNvbnRleHQucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIuYmluZChjb250ZXh0KSA6IF8ubm9vcDtcbiAgICBjb25zdCBmaWx0ZXIkID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0IGJpbmRGaWxFeHBPYmogPSAob2JqLCB0YXJnZXROb2RlS2V5KSA9PiB7XG4gICAgICAgY29uc3QgbGlzdGVuZXIgPSAobmV3VmFsLCBvbGRWYWwpID0+IHtcbiAgICAgICAgICAgIGlmICgobmV3VmFsID09PSBvbGRWYWwgJiYgXy5pc1VuZGVmaW5lZChuZXdWYWwpKSB8fCAoXy5pc1VuZGVmaW5lZChuZXdWYWwpICYmICFfLmlzVW5kZWZpbmVkKG9sZFZhbCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2tpcCBjbG9uaW5nIGZvciBibG9iIGNvbHVtblxuICAgICAgICAgICAgaWYgKCFfLmluY2x1ZGVzKFsnYmxvYicsICdmaWxlJ10sIG9iai50eXBlKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbCA9IGdldENsb25lZE9iamVjdChuZXdWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eTogd2hlcmUgd2UgYXJlIGFsbG93aW5nIHRoZSB1c2VyIHRvIGJpbmQgY29tcGxldGUgb2JqZWN0XG4gICAgICAgICAgICBpZiAob2JqLnRhcmdldCA9PT0gJ2RhdGFCaW5kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgZXhpc3RpbmcgZGF0YWJpbmRpbmcgZWxlbWVudFxuICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25zLnJ1bGVzID0gW107XG4gICAgICAgICAgICAgICAgLy8gbm93IGFkZCBhbGwgdGhlIHJldHVybmVkIHZhbHVlc1xuICAgICAgICAgICAgICAgIF8uZm9yRWFjaChuZXdWYWwsIGZ1bmN0aW9uICh2YWx1ZSwgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25zLnJ1bGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldCc6IHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ21hdGNoTW9kZSc6IG9iai5tYXRjaE1vZGUgfHwgJ3N0YXJ0aWdub3JlY2FzZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZWQnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogJydcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHNldHRpbmcgdmFsdWUgdG8gdGhlIHJvb3Qgbm9kZVxuICAgICAgICAgICAgICAgIG9ialt0YXJnZXROb2RlS2V5XSA9IG5ld1ZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlciQubmV4dCh7IGZpbHRlckV4cHJlc3Npb25zLCBuZXdWYWwgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaW5nU3RhcnRzV2l0aChvYmpbdGFyZ2V0Tm9kZUtleV0sICdiaW5kOicpKSB7XG4gICAgICAgICAgICAvLyBbVG9kby1DU1BdOiBuZWVkcyBhIGNoZWNrLCB3aGVyZSBpcyB0aGlzIHVzZWRcbiAgICAgICAgICAgIGRlc3Ryb3lGbihcbiAgICAgICAgICAgICAgICAkd2F0Y2gob2JqW3RhcmdldE5vZGVLZXldLnJlcGxhY2UoJ2JpbmQ6JywgJycpLCBjb250ZXh0LCB7fSwgdmFyaWFibGUgPyB2YXJpYWJsZS5pbnZva2VPbkZpbHRlcnRFeHByZXNzaW9uQ2hhbmdlLmJpbmQodmFyaWFibGUsIG9iaiwgdGFyZ2V0Tm9kZUtleSkgOiBsaXN0ZW5lciwgdW5kZWZpbmVkLCBmYWxzZSwgeyBhcnJheVR5cGU6IF8uaW5jbHVkZXMoWydpbicsICdub3RpbiddLCBvYmoubWF0Y2hNb2RlKSB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB0cmF2ZXJzZUZpbHRlckV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMgPT4ge1xuICAgICAgICBpZiAoZXhwcmVzc2lvbnMucnVsZXMpIHtcbiAgICAgICAgICAgIF8uZm9yRWFjaChleHByZXNzaW9ucy5ydWxlcywgKGZpbEV4cE9iaiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWxFeHBPYmoucnVsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2VGaWx0ZXJFeHByZXNzaW9ucyhmaWxFeHBPYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxFeHBPYmoubWF0Y2hNb2RlID09PSAnYmV0d2VlbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRGaWxFeHBPYmooZmlsRXhwT2JqLCAnc2Vjb25kdmFsdWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBiaW5kRmlsRXhwT2JqKGZpbEV4cE9iaiwgJ3ZhbHVlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRyYXZlcnNlRmlsdGVyRXhwcmVzc2lvbnMoZmlsdGVyRXhwcmVzc2lvbnMpO1xuXG4gICAgcmV0dXJuIGZpbHRlciQ7XG59O1xuXG4vLyBUaGlzIG1ldGhvZCB3aWxsIHNldCB0aGUgZ2l2ZW4gcHJvdG8gb24gdGhlIHRhcmdldFxuZXhwb3J0IGNvbnN0IGV4dGVuZFByb3RvID0gKHRhcmdldCwgcHJvdG8pID0+IHtcbiAgICBsZXQgX3Byb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7XG4gICAgd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZihfcHJvdG8pLmNvbnN0cnVjdG9yICE9PSBPYmplY3QpIHtcbiAgICAgICAgX3Byb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKF9wcm90byk7XG4gICAgICAgIC8vIHJldHVybiBpZiB0aGUgcHJvdG90eXBlIG9mIGNyZWF0ZWQgY29tcG9uZW50IGFuZCBwcm90b3R5cGUgb2YgY29udGV4dCBhcmUgc2FtZVxuICAgICAgICBpZiAocHJvdG8gPT09IF9wcm90bykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfcHJvdG8sIHByb3RvKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVFeHRyYVNsYXNoZXMgPSBmdW5jdGlvbiAodXJsKSB7XG4gICAgY29uc3QgYmFzZTY0cmVnZXggPSAvXmRhdGE6aW1hZ2VcXC8oW2Etel17Mix9KTtiYXNlNjQsLztcbiAgICBpZiAoXy5pc1N0cmluZyh1cmwpKSB7XG4gICAgICAgIC8qXG4gICAgICAgICogc3VwcG9ydCBmb3IgbW9iaWxlIGFwcHMgaGF2aW5nIGxvY2FsIGZpbGUgcGF0aCB1cmwgc3RhcnRpbmcgd2l0aCBmaWxlOi8vLyBhbmRcbiAgICAgICAgKiBzdXBwb3J0IGZvciBiYXNlNjQgZm9ybWF0XG4gICAgICAgICogKi9cbiAgICAgICAgaWYgKF8uc3RhcnRzV2l0aCh1cmwsICdmaWxlOi8vLycpIHx8IGJhc2U2NHJlZ2V4LnRlc3QodXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UobmV3IFJlZ0V4cCgnKFteOl1cXC8pKFxcLykrJywgJ2cnKSwgJyQxJyk7XG4gICAgfVxufTtcblxuJC5jYWNoZWRTY3JpcHQgPSAoKCkgPT4ge1xuICAgIGNvbnN0IGluUHJvZ3Jlc3MgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBuZXcgU2V0KCk7XG5cbiAgICBjb25zdCBpc0luUHJvZ3Jlc3MgPSB1cmwgPT4gaW5Qcm9ncmVzcy5oYXModXJsKTtcbiAgICBjb25zdCBpc1Jlc29sdmVkID0gdXJsID0+IHJlc29sdmVkLmhhcyh1cmwpO1xuICAgIGNvbnN0IG9uTG9hZCA9IHVybCA9PiB7XG4gICAgICAgIHJlc29sdmVkLmFkZCh1cmwpO1xuICAgICAgICBpblByb2dyZXNzLmdldCh1cmwpLnJlc29sdmUoKTtcbiAgICAgICAgaW5Qcm9ncmVzcy5kZWxldGUodXJsKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0SW5Qcm9ncmVzcyA9IHVybCA9PiB7XG4gICAgICAgIGxldCByZXNGbjtcbiAgICAgICAgbGV0IHJlakZuO1xuICAgICAgICBjb25zdCBwcm9taXNlOiBhbnkgPSBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHJlc0ZuID0gcmVzO1xuICAgICAgICAgICAgcmVqRm4gPSByZWo7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb21pc2UucmVzb2x2ZSA9IHJlc0ZuO1xuICAgICAgICBwcm9taXNlLnJlamVjdCA9IHJlakZuO1xuXG4gICAgICAgIGluUHJvZ3Jlc3Muc2V0KHVybCwgcHJvbWlzZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgIGlmIChpc1Jlc29sdmVkKHVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0luUHJvZ3Jlc3ModXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIGluUHJvZ3Jlc3MuZ2V0KHVybCk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRJblByb2dyZXNzKHVybCk7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnc2NyaXB0JyxcbiAgICAgICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICAgICAgdXJsXG4gICAgICAgIH07XG5cbiAgICAgICAgJC5hamF4KG9wdGlvbnMpLmRvbmUoKCkgPT4gb25Mb2FkKHVybCkpO1xuXG4gICAgICAgIHJldHVybiBpblByb2dyZXNzLmdldCh1cmwpO1xuICAgIH07XG59KSgpO1xuXG5jb25zdCBERUZBVUxUX0RJU1BMQVlfRk9STUFUUyA9IHtcbiAgICBEQVRFOiAneXl5eS1NTS1kZCcsXG4gICAgVElNRTogJ2hoOm1tIGEnLFxuICAgIFRJTUVTVEFNUDogJ3l5eXktTU0tZGQgaGg6bW06c3MgYScsXG4gICAgREFURVRJTUU6ICd5eXl5LU1NLWRkIGhoOm1tOnNzIGEnLFxufTtcbi8vIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGRpc3BsYXkgZGF0ZSBmb3JtYXQgZm9yIGdpdmVuIHR5cGVcbmV4cG9ydCBjb25zdCBnZXREaXNwbGF5RGF0ZVRpbWVGb3JtYXQgPSB0eXBlID0+IHtcbiAgICByZXR1cm4gREVGQVVMVF9ESVNQTEFZX0ZPUk1BVFNbXy50b1VwcGVyKHR5cGUpXTtcbn07XG5cbi8vIEdlbmVyYXRlIGZvciBhdHRyaWJ1dGUgb24gbGFiZWwgYW5kIElEIG9uIGlucHV0IGVsZW1lbnQsIHNvIHRoYXQgbGFiZWwgZWxlbWVudHMgYXJlIGFzc29jaWF0ZWQgdG8gZm9ybSBjb250cm9sc1xuZXhwb3J0IGNvbnN0IGFkZEZvcklkQXR0cmlidXRlcyA9IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsRWwgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xhYmVsLmNvbnRyb2wtbGFiZWwnKTtcbiAgICBsZXQgaW5wdXRFbCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2ZvY3VzLXRhcmdldF0nKTtcbiAgICBpZiAoIWlucHV0RWwubGVuZ3RoKSB7XG4gICAgICAgIGlucHV0RWwgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJyk7XG4gICAgfVxuICAgIC8qaWYgdGhlcmUgYXJlIG9ubHkgb25lIGlucHV0IGVsIGFuZCBsYWJlbCBFbCBhZGQgaWQgYW5kIGZvciBhdHRyaWJ1dGUqL1xuICAgIGlmIChsYWJlbEVsLmxlbmd0aCAmJiBpbnB1dEVsLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB3aWRnZXRJZCA9ICQoaW5wdXRFbFswXSBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdCgnW3dpZGdldC1pZF0nKS5hdHRyKCd3aWRnZXQtaWQnKTtcbiAgICAgICAgaWYgKHdpZGdldElkKSB7XG4gICAgICAgICAgICBzZXRBdHRyKGlucHV0RWxbMF0gYXMgSFRNTEVsZW1lbnQsICdpZCcsIHdpZGdldElkKTtcbiAgICAgICAgICAgIHNldEF0dHIobGFiZWxFbFswXSBhcyBIVE1MRWxlbWVudCwgJ2ZvcicsIHdpZGdldElkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKkFkZGluZyBhcmlhLWxhYmVsbGVkYnkgdG8gcmFkaW9zZXQsIGNoZWNrYm94c2V0IHdpZGdldHMqL1xuICAgIGNvbnN0IHVsRWwgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3VsJyk7XG4gICAgaWYgKGxhYmVsRWwubGVuZ3RoICYmIHVsRWwubGVuZ3RoICYmICh1bEVsWzBdLmdldEF0dHJpYnV0ZSgncm9sZScpID09PSAncmFkaW9ncm91cCcgfHwgdWxFbFswXS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ2dyb3VwJykpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0SWQgPSAnd20tZ3JvdXAtbGFiZWwtJyArIGdlbmVyYXRlR1VJZCgpO1xuICAgICAgICBzZXRBdHRyKHVsRWxbMF0gYXMgSFRNTEVsZW1lbnQsICdhcmlhLWxhYmVsbGVkYnknLCB3aWRnZXRJZCk7XG4gICAgICAgIHNldEF0dHIobGFiZWxFbFswXSBhcyBIVE1MRWxlbWVudCwgJ2lkJywgd2lkZ2V0SWQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGp1c3QgdGhlIGNvbnRhaW5lciBwb3NpdGlvblxuICogRm9yIGV4YW1wbGU6IDEuIFdoZW4gZGF0ZXBpY2tlciBjb250cm9sIHBsYWNlZCBjbG9zZWQgdG8gdGhlIHNjcmVlbiBsZWZ0IGVkZ2VzLCBpdCBpcyBnb2luZyB0byBuZWdhdGl2ZSB2YWx1ZXMgd2hpY2ggaXMgIGN1dHRpbmcgdGhlIGNvbnRhaW5lci5cbiAqIFRvIEZpeCB0aGUgY29udGFpbmVyIG92ZXJsYXBwaW5nIGlzc3VlIGNoYW5naW5nIHRoZSBjb250cmFpbmVyIGxlZnQgdHJhbnNsYXRpb24gdG8gMFxuICogQHBhcmFtIGNvbnRhaW5lckVsZW0gLSBwaWNrZXIvZHJvcGRvd24gY29udGFpbmVyIGVsZW1lbnQoanF1ZXJ5KVxuICogQHBhcmFtIHBhcmVudEVsZW0gLSB3aWRnZXQgbmF0aXZlIGVsZW1lbnRcbiAqIEBwYXJhbSByZWYgLSBzY29wZSBvZiBwYXJ0aWN1bGFyIGxpYnJhcnkgZGlyZWN0aXZlXG4gKiBAcGFyYW0gZWxlIC0gQ2hpbGQgZWxlbWVudChqcXVlcnkpLiBGb3Igc29tZSBvZiB0aGUgd2lkZ2V0cyh0aW1lLCBzZWFyY2gpIGNvbnRhaW5lckVsZW0gZG9lc24ndCBoYXZlIGhlaWdodC4gVGhlIGlubmVyIGVsZW1lbnQoZHJvcGRvd24tbWVudSkgaGFzIGhlaWdodCBzbyBwYXNzaW5nIGl0IGFzIG9wdGlvbmFsLlxuICovXG5leHBvcnQgY29uc3QgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24gPSAoY29udGFpbmVyRWxlbSwgcGFyZW50RWxlbSwgcmVmLCBlbGU/KSA9PiB7XG4gICAgY29uc3Qgem9uZVJlZiA9IHJlZi5fbmdab25lIHx8IHJlZi5uZ1pvbmU7XG4gICAgem9uZVJlZi5vblN0YWJsZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMgPSBnZXRXZWJraXRUcmFzbGF0aW9uTWF0cml4KGNvbnRhaW5lckVsZW0pO1xuICAgICAgICBpZiAoY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MSA8IDApIHtcbiAgICAgICAgICAgICBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQxID0gMDtcbiAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgfVxuICAgICAgICAgc2V0VHJhbnNsYXRpb24zZFBvc2l0aW9uKGNvbnRhaW5lckVsZW0sIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyk7XG4gICAgIH0pO1xuICAgfTtcblxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRqdXN0IHRoZSBjb250YWluZXIgcG9zaXRpb25cbiAqIEZvciBleGFtcGxlOiAxLiBXaGVuIGRhdGVwaWNrZXIgY29udHJvbCBwbGFjZWQgY2xvc2VkIHRvIHRoZSBzY3JlZW4gcmlnaHQgZWRnZXMsIGl0IGlzIGdvaW5nIHRvIG91dCBvZiB0aGUgdmlld3BvcnQgdmFsdWVzIHdoaWNoIGlzICBjdXR0aW5nIHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0gY29udGFpbmVyRWxlbSAgcGlja2VyL2Ryb3Bkb3duIGNvbnRhaW5lciBlbGVtZW50KGpxdWVyeSlcbiAqIEBwYXJhbSBwYXJlbnRFbGVtIHdpZGdldCBuYXRpdmUgZWxlbWVudFxuICogQHBhcmFtIHJlZiAgc2NvcGUgb2YgcGFydGljdWxhciBsaWJyYXJ5IGRpcmVjdGl2ZVxuICogQHBhcmFtIGVsZSBDaGlsZCBlbGVtZW50KGpxdWVyeSkuIEZvciBzb21lIG9mIHRoZSB3aWRnZXRzKHRpbWUsIHNlYXJjaCkgY29udGFpbmVyRWxlbSBkb2Vzbid0IGhhdmUgaGVpZ2h0LiBUaGUgaW5uZXIgZWxlbWVudChkcm9wZG93bi1tZW51KSBoYXMgaGVpZ2h0IHNvIHBhc3NpbmcgaXQgYXMgb3B0aW9uYWwuXG4gKi9cbiAgIGV4cG9ydCBjb25zdCBhZGp1c3RDb250YWluZXJSaWdodEVkZ2VzID0gKGNvbnRhaW5lckVsZW0sIHBhcmVudEVsZW0sIHJlZiwgZWxlPykgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGVsZSA/IF8ucGFyc2VJbnQoZWxlLmNzcygnd2lkdGgnKSkgOiBfLnBhcnNlSW50KGNvbnRhaW5lckVsZW0uY3NzKCd3aWR0aCcpKTtcbiAgICAgICAgY29uc3Qgdmlld1BvcnRXaWR0aCA9ICQod2luZG93KS53aWR0aCgpICsgd2luZG93LnNjcm9sbFg7XG4gICAgICAgIGNvbnN0IHBhcmVudERpbWVzaW9uID0gcGFyZW50RWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgcGFyZW50UmlnaHQgPSBwYXJlbnREaW1lc2lvbi5yaWdodCArIHdpbmRvdy5zY3JvbGxYO1xuICAgICAgICBsZXQgbmV3TGVmdDtcbiAgICAgICAgY29uc3Qgem9uZVJlZiA9IHJlZi5fbmdab25lIHx8IHJlZi5uZ1pvbmU7XG4gICAgICAgIHpvbmVSZWYub25TdGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyA9IGdldFdlYmtpdFRyYXNsYXRpb25NYXRyaXgoY29udGFpbmVyRWxlbSk7XG5cbiAgICAgICAgICAgIGlmICh2aWV3UG9ydFdpZHRoIC0gKHBhcmVudFJpZ2h0ICsgcGFyZW50RGltZXNpb24ud2lkdGgpIDwgY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBuZXdMZWZ0ID0gcGFyZW50UmlnaHQgLSBjb250YWluZXJXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAobmV3TGVmdCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3TGVmdCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgPSBuZXdMZWZ0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRUcmFuc2xhdGlvbjNkUG9zaXRpb24oY29udGFpbmVyRWxlbSwgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zKTtcbiAgICAgICAgfSk7XG4gICB9O1xuXG4gIC8qKlxuICAgKiBGb3IgZ2l2ZW4gZWxlbWVudCBzZXQgdGhlIHRyYXNsYXRpb25cbiAgICogQHBhcmFtIGNvbnRhaW5lckVsZW0gdGFuc2xhdGVkIGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyB0cmFuc2xhdGUgbWF0cml4IHBvc2l0aW9uc1xuICAgKi9cbiAgIGV4cG9ydCBjb25zdCBzZXRUcmFuc2xhdGlvbjNkUG9zaXRpb24gPSAoY29udGFpbmVyRWxlbSwgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZVBvc2l0aW9uID0gJ3RyYW5zbGF0ZTNkKCcgKyBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQxICsgJ3B4LCAnICsgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MiArICdweCwgMHB4KSc7XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUud2Via2l0VHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUuTW96VHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUubXNUcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS5PVHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUudHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICB9O1xuXG4gICAvKipcbiAgICAqXG4gICAgKiBAcGFyYW0gY29udGFpbmVyRWxlbSBlbGVtZXQgZm9yIHRoZSBXZWJLaXRDU1NNYXRyaXhcbiAgICAqL1xuICAgIGV4cG9ydCBjb25zdCBnZXRXZWJraXRUcmFzbGF0aW9uTWF0cml4ID0gKGNvbnRhaW5lckVsZW0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBXZWJLaXRDU1NNYXRyaXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1TQ1NTTWF0cml4KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbnRhaW5lckVsZW1bMF0pLnRyYW5zZm9ybSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBXZWJLaXRDU1NNYXRyaXgod2luZG93LmdldENvbXB1dGVkU3R5bGUoY29udGFpbmVyRWxlbVswXSkud2Via2l0VHJhbnNmb3JtKTtcbiAgICB9XG5cbi8vIGNsb3NlIGFsbCB0aGUgcG9wb3ZlcnMuXG5leHBvcnQgY29uc3QgY2xvc2VQb3BvdmVyID0gKGVsZW1lbnQpID0+IHtcbiAgICBpZiAoIWVsZW1lbnQuY2xvc2VzdCgnLmFwcC1wb3BvdmVyJykubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hcHAtcG9wb3Zlci13cmFwcGVyJyk7XG4gICAgICAgIF8uZm9yRWFjaChwb3BvdmVyRWxlbWVudHMsIChlbGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlbGUud2lkZ2V0LmlzT3Blbikge1xuICAgICAgICAgICAgICAgIGVsZS53aWRnZXQuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGluIHRoZSBhcHBcbiAqIFRoaXMgaXMgZXhwb3NlZCBmb3IgdGhlIGVuZCB1c2VyIGRldmVsb3BlciBvZiBXTSBhcHBcbiAqIFRoaXMgaXMgdGhlIGFsdGVybmF0aXZlIGZvciAkcnMuJHNhZmVBcHBseSgpIGluIEFuZ3VsYXJKU1xuICogU2VlICRhcHBEaWdlc3QgaW4gdXRpbHMgZm9yIG1vcmUgaW5mb1xuICovXG5leHBvcnQgY29uc3QgZGV0ZWN0Q2hhbmdlcyA9ICRhcHBEaWdlc3Q7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gdHJpZ2dlciB0aGUgYWN0aW9uL2xpbmsgb2YgbWVudS9uYXYgaXRlbVxuICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgb2YgdGhlIHdpZGdldFxuICogQHBhcmFtIGl0ZW0gLSBpdGVtIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgdHJpZ2dlckl0ZW1BY3Rpb24gPSAoc2NvcGUsIGl0ZW0pID0+IHtcbiAgICBsZXQgaXRlbUxpbmsgPSBpdGVtLmxpbms7XG4gICAgY29uc3QgaXRlbUFjdGlvbiA9IGl0ZW0uYWN0aW9uO1xuICAgIGNvbnN0IGxpbmtUYXJnZXQgPSBpdGVtLnRhcmdldDtcbiAgICBpZiAoaXRlbUFjdGlvbikge1xuICAgICAgICBpZiAoIXNjb3BlLml0ZW1BY3Rpb25Gbikge1xuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBUaGlzIHdpbGwgbm90IHdvcmsgYXMgZnVuY3Rpb24gd2lsbCBiZSBkeW5hbWljXG4gICAgICAgICAgICBzY29wZS5pdGVtQWN0aW9uRm4gPSAkcGFyc2VFdmVudChpdGVtQWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjb3BlLml0ZW1BY3Rpb25GbihzY29wZS51c2VyRGVmaW5lZEV4ZWN1dGlvbkNvbnRleHQsIE9iamVjdC5jcmVhdGUoaXRlbSkpO1xuICAgIH1cbiAgICBpZiAoaXRlbUxpbmspIHtcbiAgICAgICAgaWYgKGl0ZW1MaW5rLnN0YXJ0c1dpdGgoJyMvJykgJiYgKCFsaW5rVGFyZ2V0IHx8IGxpbmtUYXJnZXQgPT09ICdfc2VsZicpKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IGdldFVybFBhcmFtcyhpdGVtTGluayk7XG4gICAgICAgICAgICBpdGVtTGluayA9IGdldFJvdXRlTmFtZUZyb21MaW5rKGl0ZW1MaW5rKTtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlciA9IF8uZ2V0KHNjb3BlLCAncm91dGUnKSB8fCBfLmdldChzY29wZSwgJ21lbnVSZWYucm91dGUnKTtcbiAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbaXRlbUxpbmtdLCB7IHF1ZXJ5UGFyYW1zIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3BlbkxpbmsoaXRlbUxpbmssIGxpbmtUYXJnZXQpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB0byBnZXQgZGF0c291cmNlIGZyb20gdGhlIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBleHByIC0gZXhwcmVzc2lvbiBvZiB0aGUgZGF0YXNldFxuICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgb2YgdGhlIHdpZGdldFxuICogRXhhbXBsZTE6IGV4cHIgLSBcIlZhcmlhYmxlcy5zdGF0aWNWYXIxLmRhdGFTZXQuZGV0YWlsc1skaV0uYWRkcmVzc2VzXCIgdGhlbiB0aGUgbWV0aG9kIHdpbGwgcmV0dXJuIGRhdGFzb3VyY2UgYXMgVmFyaWFibGVzLnN0YXRpY1ZhcjFcbiAqIEV4YW1wbGUyOiBleHByIC0gXCJXaWRnZXRzLmxpc3QxLmN1cnJlbnRJdGVtLmFkZHJlc3Nlc1wiIGFuZCBsaXN0MSBpcyBib3VuZCB0byBcIlZhcmlhYmxlcy5zdGF0aWNWYXIxLmRhdGFTZXQuZGV0YWlsc1wiIHRoZW4gdGhlIG1ldGhvZCB3aWxsIHJldHVybiBkYXRhc291cmNlIGFzIFZhcmlhYmxlcy5zdGF0aWNWYXIxXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRhc291cmNlRnJvbUV4cHIgPSAoZXhwciwgc2NvcGUpID0+IHtcbiAgICBjb25zdCBpc0JvdW5kVG9WYXJpYWJsZSA9IF8uc3RhcnRzV2l0aChleHByLCAnVmFyaWFibGVzLicpO1xuICAgIGNvbnN0IGlzQm91bmRUb1dpZGdldCA9IF8uc3RhcnRzV2l0aChleHByLCAnV2lkZ2V0cy4nKTtcbiAgICBjb25zdCBwYXJ0cyA9IGV4cHIuc3BsaXQoJy4nKTtcbiAgICBpZiAoaXNCb3VuZFRvVmFyaWFibGUpIHtcbiAgICAgICAgcmV0dXJuIF8uZ2V0KHNjb3BlLnZpZXdQYXJlbnQuVmFyaWFibGVzLCBwYXJ0c1sxXSk7XG4gICAgfVxuICAgIGlmIChpc0JvdW5kVG9XaWRnZXQpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0U2NvcGUgPSBfLmdldChzY29wZS52aWV3UGFyZW50LldpZGdldHMsIHBhcnRzWzFdKTtcbiAgICAgICAgY29uc3Qgd2lkZ2V0RGF0YXNldEJvdW5kRXhwciA9IHdpZGdldFNjb3BlLiRhdHRycy5nZXQoJ2RhdGFzZXRib3VuZGV4cHInKTtcbiAgICAgICAgbGV0IHdpZGdldEJvdW5kRXhwcmVzc2lvbjtcbiAgICAgICAgd2lkZ2V0Qm91bmRFeHByZXNzaW9uID0gKCF3aWRnZXRTY29wZS5kYXRhc291cmNlICYmIHdpZGdldERhdGFzZXRCb3VuZEV4cHIpID8gd2lkZ2V0RGF0YXNldEJvdW5kRXhwciA6IHdpZGdldFNjb3BlLmJpbmRkYXRhc2V0O1xuICAgICAgICByZXR1cm4gZ2V0RGF0YXNvdXJjZUZyb21FeHByKHdpZGdldEJvdW5kRXhwcmVzc2lvbiwgd2lkZ2V0U2NvcGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gZ2V0IGRhdGFzZXQgYm91bmQgZXhwcmVzc2lvbiBmcm9tIGxpc3QgY3VycmVudGl0ZW0gZXhwcmVzc2lvblxuICogQHBhcmFtIGV4cHIgLSBib3VuZCBkYXRhc2V0IGV4cHJlc3Npb25cbiAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIG9mIHRoZSB3aWRnZXRcbiAqIEV4YW1wbGUxOiBleHByIC0gXCJXaWRnZXRzLmxpc3QxLmN1cnJlbnRJdGVtLmRldGFpbHNcIiBhbmQgbGlzdDEgaXMgYm91bmQgdG8gXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0XCIgdGhlbiBpdCByZXR1cm5zIGV4cHJlc3Npb24gYXMgXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0WyRpXS5kZXRhaWxzXCJcbiAqL1xuZXhwb3J0IGNvbnN0IGV4dHJhY3RDdXJyZW50SXRlbUV4cHIgPSAoZXhwciwgc2NvcGUpID0+IHtcbiAgICBjb25zdCBjdXJyZW50SXRlbVJlZ0V4ID0gL15XaWRnZXRzXFwuLipcXC5jdXJyZW50SXRlbS9nO1xuICAgIGlmIChjdXJyZW50SXRlbVJlZ0V4LnRlc3QoZXhwcikpIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBleHByLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IHdpZGdldFNjb3BlID0gXy5nZXQoc2NvcGUudmlld1BhcmVudC5XaWRnZXRzLCBwYXJ0c1sxXSk7XG4gICAgICAgIGNvbnN0IHdpZGdldERhdGFzZXRCb3VuZEV4cHIgPSB3aWRnZXRTY29wZS4kYXR0cnMuZ2V0KCdkYXRhc2V0Ym91bmRleHByJyk7XG4gICAgICAgIGlmICghd2lkZ2V0U2NvcGUuZGF0YXNvdXJjZSAmJiB3aWRnZXREYXRhc2V0Qm91bmRFeHByKSB7XG4gICAgICAgICAgICBleHByID0gZXhwci5yZXBsYWNlKC9eV2lkZ2V0c1xcLi4qXFwuY3VycmVudEl0ZW0vZywgYCR7d2lkZ2V0RGF0YXNldEJvdW5kRXhwcn1bJGldYCk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFjdEN1cnJlbnRJdGVtRXhwcihleHByLCBzY29wZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHByID0gZXhwci5yZXBsYWNlKC9eV2lkZ2V0c1xcLi4qXFwuY3VycmVudEl0ZW0vZywgYCR7d2lkZ2V0U2NvcGUuYmluZGRhdGFzZXR9WyRpXWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHByO1xufTtcblxuLy8gdGhpcyB3aWxsIGFkZCB0aGUgaHRtbCB0YWcgdG8gdGhlIHdpZGdldCB0byBzY29wZSB0aGUgY3NzIHRvIHRoZSBwYWdlLlxuZXhwb3J0IGNvbnN0IGZpbmRSb290Q29udGFpbmVyID0gKCRlbCkgPT4ge1xuICAgIGxldCByb290ID0gJGVsLmNsb3Nlc3QoJy5hcHAtcHJlZmFiJyk7XG4gICAgaWYgKCFyb290Lmxlbmd0aCkge1xuICAgICAgICByb290ID0gJGVsLmNsb3Nlc3QoJy5hcHAtcGFydGlhbCcpO1xuICAgIH1cbiAgICBpZighcm9vdC5sZW5ndGgpIHtcbiAgICAgICAgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXNwYS1wYWdlJyk7XG4gICAgfVxuICAgIGlmICghcm9vdC5sZW5ndGgpIHtcbiAgICAgICAgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXBhZ2UnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvb3QubGVuZ3RoICYmIHJvb3QucGFyZW50KClbMF0udGFnTmFtZTtcbn07XG5cbmV4cG9ydCBjb25zdCBWQUxJREFUT1IgPSB7XG4gICAgUkVRVUlSRUQ6ICdyZXF1aXJlZCcsXG4gICAgTUFYQ0hBUlM6ICdtYXhjaGFycycsXG4gICAgTUlOVkFMVUU6ICdtaW52YWx1ZScsXG4gICAgTUFYVkFMVUU6ICdtYXh2YWx1ZScsXG4gICAgUkVHRVhQOiAncmVnZXhwJyxcbiAgICBNSU5EQVRFOiAnbWluZGF0ZScsXG4gICAgTUFYREFURTogJ21heGRhdGUnLFxuICAgIE1JTlRJTUU6ICdtaW50aW1lJyxcbiAgICBNQVhUSU1FOiAnbWF4dGltZScsXG4gICAgRVhDTFVERURBVEVTOiAnZXhjbHVkZWRhdGVzJyxcbiAgICBFWENMVURFREFZUzogJ2V4Y2x1ZGVkYXlzJ1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybUZpbGVVUkkgPSAodXJsKSA9PiB7XG4gICAgaWYgKHVybCAmJiBoYXNDb3Jkb3ZhKCkgJiYgdXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKCdmaWxlOi8vJywgJy9fYXBwX2ZpbGVfJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBbmRyb2lkKCkgJiYgbG9jYXRpb24uaHJlZi5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aChjb3Jkb3ZhLmZpbGUuYXBwbGljYXRpb25EaXJlY3RvcnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKGNvcmRvdmEuZmlsZS5hcHBsaWNhdGlvbkRpcmVjdG9yeSArICd3d3cnLCAnJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoJ2ZpbGU6Ly8nLCAnL19hcHBfZmlsZV8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufTtcblxuZXhwb3J0IGNvbnN0IGFwcGVuZFNjcmlwdFRvSGVhZCA9IChjYWxsYmFjaykgPT57XG5cbiAgICBjb25zdCBzY3JpcHRlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHRlbGUub25sb2FkID0gKCkgPT4ge1xuICAgICBjYWxsYmFjayhXTV9DVVNUT01fRk9STUFUVEVSUyk7XG4gICAgfTtcbiAgICBzY3JpcHRlbGUub25lcnJvciA9IGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybignRXJyb3Igd2hpbGUgbG9hZGluZyB0aGUgZmlsZSAnICsgc2NyaXB0ZWxlLnNyYyArICdcXG4nICsgZXJyKTtcbiAgICB9O1xuICAgIHNjcmlwdGVsZS50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgc2NyaXB0ZWxlLnNyYyA9ICcuL2V4dGVuc2lvbnMvZm9ybWF0dGVycy5qcyc7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHRlbGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFwcFNldHRpbmcgPSAoa2V5LCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgICByZXR1cm4gKF9XTV9BUFBfUFJPUEVSVElFUy5leHRyYV9zZXR0aW5ncyAmJiBfLmdldChfV01fQVBQX1BST1BFUlRJRVMuZXh0cmFfc2V0dGluZ3MsIGtleSkpIHx8IGRlZmF1bHRWYWx1ZTtcbn07XG5cbi8qIHRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgaXRlbWNsYXNzIGRlcGVuZGluZyBvbiBpdGVtc3BlcnJvdy5cbiAgICogaWYgaXRlbXNwZXJyb3cgaXMgMiBmb3IgbGFyZ2UgZGV2aWNlLCB0aGVuIGl0ZW1jbGFzcyBpcyAnY29sLXhzLTEgY29sLXNtLTEgY29sLWxnLTInXG4gICAqIGlmIGl0ZW1zcGVycm93IGlzICdsZy0zJyB0aGVuIGl0ZW1jbGFzcyBpcyAnY29sLWxnLTMnXG4qL1xuZXhwb3J0IGNvbnN0IHNldExpc3RDbGFzcyA9IChzY29wZSkgPT4ge1xuICAgIGxldCB0ZW1wID0gJyc7XG4gICAgaWYgKHNjb3BlLml0ZW1zcGVycm93KSB7XG4gICAgICAgIGlmIChpc05hTihwYXJzZUludChzY29wZS5pdGVtc3BlcnJvdywgMTApKSkge1xuICAgICAgICAgICAgLy8gaGFuZGxpbmcgaXRlbXNwZXJyb3cgY29udGFpbmluZyBzdHJpbmcgb2YgY2xhc3Nlc1xuICAgICAgICAgICAgXy5zcGxpdChzY29wZS5pdGVtc3BlcnJvdywgJyAnKS5mb3JFYWNoKChjbHM6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBfLnNwbGl0KGNscywgJy0nKTtcbiAgICAgICAgICAgICAgICBjbHMgPSBgJHtrZXlzWzBdfS0keygxMiAvIHBhcnNlSW50KGtleXNbMV0sIDEwKSl9YDtcbiAgICAgICAgICAgICAgICB0ZW1wICs9IGAgY29sLSR7Y2xzfWA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNjb3BlLml0ZW1zUGVyUm93Q2xhc3MgPSB0ZW1wLnRyaW0oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGhhbmRsaW5nIGl0ZW1zcGVycm93IGhhdmluZyBpbnRlZ2VyIHZhbHVlLlxuICAgICAgICAgICAgc2NvcGUuaXRlbXNQZXJSb3dDbGFzcyA9IGBjb2wteHMtJHsoMTIgLyBwYXJzZUludChzY29wZS5pdGVtc3BlcnJvdywgMTApKX1gO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHsgLy8gSWYgaXRlbXNwZXJyb3cgaXMgbm90IHNwZWNpZmllZCBtYWtlIGl0IGZ1bGwgd2lkdGhcbiAgICAgICAgc2NvcGUuaXRlbXNQZXJSb3dDbGFzcyA9ICdjb2wteHMtMTInO1xuICAgIH1cbn07XG4iXX0=
1439
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBWWxELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO0FBQzdDLE1BQU0sS0FBSyxHQUFHO0lBQ1YsVUFBVSxFQUFFLFFBQVE7SUFDcEIsT0FBTyxFQUFFLFVBQVU7SUFDbkIsTUFBTSxFQUFFLFNBQVM7SUFDakIsSUFBSSxFQUFFLE9BQU87SUFDYixJQUFJLEVBQUUsT0FBTztJQUNiLEdBQUcsRUFBRSxNQUFNO0lBQ1gsY0FBYyxFQUFFLDJEQUEyRDtJQUMzRSxNQUFNLEVBQUUsU0FBUztJQUNqQixPQUFPLEVBQUUsZ0JBQWdCO0lBQ3pCLHNCQUFzQixFQUFFLGlEQUFpRDtJQUN6RSxxQkFBcUIsRUFBRSw4R0FBOEc7SUFDckksc0JBQXNCLEVBQUUsb0NBQW9DO0lBQzVELHNCQUFzQixFQUFFLHlDQUF5QztJQUNqRSxrQkFBa0IsRUFBRSxtQ0FBbUM7SUFDdkQsc0JBQXNCLEVBQUUsb0JBQW9CO0lBQzVDLFdBQVcsRUFBRSx1REFBdUQ7SUFDcEUsYUFBYSxFQUFFLDhFQUE4RTtJQUM3Rixt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Q0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFO2dCQUNwRCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDL0IsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxJQUFJLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUNILEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDeEM7YUFBTTtZQUNILDZDQUE2QztZQUM3QyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDL0U7S0FDSjtTQUFNLEVBQUUscURBQXFEO1FBQzFELEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7S0FDeEM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGdldFdtUHJvamVjdFByb3BlcnRpZXMgfSBmcm9tICcuL3dtLXByb2plY3QtcHJvcGVydGllcyc7XG5cbmltcG9ydCB7ICR3YXRjaCwgJGFwcERpZ2VzdCB9IGZyb20gJy4vd2F0Y2hlcic7XG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gJy4uL2VudW1zL2VudW1zJztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQgeyBzZXRBdHRyIH0gZnJvbSAnLi9kb20nO1xuaW1wb3J0IHsgJHBhcnNlRXZlbnQgfSBmcm9tICcuL2V4cHJlc3Npb24tcGFyc2VyJztcblxuZGVjbGFyZSBjb25zdCBfLCBYMkpTO1xuZGVjbGFyZSBjb25zdCBtb21lbnQ7XG5kZWNsYXJlIGNvbnN0IGRvY3VtZW50O1xuZGVjbGFyZSBjb25zdCByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMO1xuZGVjbGFyZSBjb25zdCAkO1xuZGVjbGFyZSBjb25zdCBXTV9DVVNUT01fRk9STUFUVEVSUztcbmRlY2xhcmUgY29uc3QgTVNDU1NNYXRyaXg7XG5kZWNsYXJlIGNvbnN0IF9XTV9BUFBfUFJPUEVSVElFUztcbmRlY2xhcmUgY29uc3QgY29yZG92YTtcblxuY29uc3QgdXNlckFnZW50ID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG5jb25zdCBSRUdFWCA9IHtcbiAgICBTTkFLRV9DQVNFOiAvW0EtWl0vZyxcbiAgICBBTkRST0lEOiAvQW5kcm9pZC9pLFxuICAgIElQSE9ORTogL2lQaG9uZS9pLFxuICAgIElQT0Q6IC9pUG9kL2ksXG4gICAgSVBBRDogL2lQYWQvaSxcbiAgICBNQUM6IC9NYWMvaSxcbiAgICBBTkRST0lEX1RBQkxFVDogL2FuZHJvaWR8YW5kcm9pZCAzLjB8eG9vbXxzY2gtaTgwMHxwbGF5Ym9va3x0YWJsZXR8a2luZGxlL2ksXG4gICAgTU9CSUxFOiAvTW9iaWxlL2ksXG4gICAgV0lORE9XUzogL1dpbmRvd3MgUGhvbmUvaSxcbiAgICBTVVBQT1JURURfSU1BR0VfRk9STUFUOiAvXFwuKGJtcHxnaWZ8anBlfGpwZ3xqcGVnfHRpZnx0aWZmfHBibXxwbmd8aWNvKSQvaSxcbiAgICBTVVBQT1JURURfRklMRV9GT1JNQVQ6IC9cXC4odHh0fGpzfGNzc3xodG1sfHNjcmlwdHxwcm9wZXJ0aWVzfGpzb258amF2YXx4bWx8c21kfHhtaXxzcWx8bG9nfHdzZGx8dm18ZnRsfGpyeG1sfHltbHx5YW1sfG1kfGxlc3N8anNwKSQvaSxcbiAgICBTVVBQT1JURURfQVVESU9fRk9STUFUOiAvXFwuKG1wM3xvZ2d8d2VibXx3bWF8M2dwfHdhdnxtNGEpJC9pLFxuICAgIFNVUFBPUlRFRF9WSURFT19GT1JNQVQ6IC9cXC4obXA0fG9nZ3x3ZWJtfHdtdnxtcGVnfG1wZ3xhdml8bW92KSQvaSxcbiAgICBQQUdFX1JFU09VUkNFX1BBVEg6IC9eXFwvcGFnZXNcXC8uKlxcLihqc3xjc3N8aHRtbHxqc29uKSQvLFxuICAgIE1JTl9QQUdFX1JFU09VUkNFX1BBVEg6IC8uKihwYWdlLm1pbi5odG1sKSQvLFxuICAgIFZBTElEX0VNQUlMOiAvXlthLXpBLVpdW1xcdy4rXStAW2EtekEtWl9dKz9cXC5bYS16QS1aLl17MSw0fVthLXpBLVpdJC8sXG4gICAgVkFMSURfV0VCX1VSTDogL14oaHR0cFtzXT86XFwvXFwvKSh3d3dcXC4pezAsMX1bYS16QS1aMC05PTo/XFwvXFwuXFwtXSsoXFwuW2EtekEtWl17Miw1fVtcXC5dezAsMX0pPy8sXG4gICAgVkFMSURfV0VCU09DS0VUX1VSTDogL14od3Nbc10/OlxcL1xcLykod3d3XFwuKXswLDF9W2EtekEtWjAtOT06P1xcL1xcLlxcLV0rKFxcLlthLXpBLVpdezIsNX1bXFwuXXswLDF9KT8vLFxuICAgIFZBTElEX1JFTEFUSVZFX1VSTDogL14oPyF3d3dcXC58KD86aHR0cHxmdHApcz86XFwvXFwvfFtBLVphLXpdOlxcXFx8XFwvXFwvKS4qLyxcbiAgICBSRVBMQUNFX1BBVFRFUk46IC9cXCRcXHsoW15cXH1dKylcXH0vZyxcbiAgICBaSVBfRklMRTogL1xcLnppcCQvaSxcbiAgICBFWEVfRklMRTogL1xcLmV4ZSQvaSxcbiAgICBOT19RVU9URVNfQUxMT1dFRDogL15bXid8XCJdKiQvLFxuICAgIE5PX0RPVUJMRV9RVU9URVNfQUxMT1dFRDogL15bXlwiXSokLyxcbiAgICBWQUxJRF9IVE1MOiAvPFthLXpdW1xcc1xcU10qPi9pLFxuICAgIFZBTElEX1BBU1NXT1JEOiAvXlswLTlhLXpBLVotXy5AJiohIyQlXSskLyxcbiAgICBTUEVDSUFMX0NIQVJBQ1RFUlM6IC9bXkEtWjAtOWEtel9dKy9pLFxuICAgIEFQUF9TRVJWRVJfVVJMX0ZPUk1BVDogL14oaHR0cFtzXT86XFwvXFwvKSh3d3dcXC4pezAsMX1bYS16QS1aMC05XFwuXFwtXSsoWzpdP1swLTldezIsNX18XFwuW2EtekEtWl17Miw1fVtcXC5dezAsMX0pXFwvK1tePyMmPV0rJC8sXG4gICAgSlNPTl9EQVRFX0ZPUk1BVDogL1xcZHs0fS1bMC0xXVxcZC1bMC0zXVxcZChUWzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGQuXFxkezEsM31aJCk/LyxcbiAgICBEQVRBX1VSTDogL15cXHMqZGF0YTooW2Etel0rXFwvW2EtejAtOS0rLl0rKDtbYS16LV0rPVthLXowLTktXSspPyk/KDtiYXNlNjQpPywoW2EtejAtOSEkJicsKCkqKzs9XFwtLl9+OkBcXC8/JVxcc10qKVxccyokL2ksXG4gICAgSVNPX0RBVEVfRk9STUFUOiAvKFxcZHs0fS1cXGR7Mn0tXFxkezJ9KVQoXFxkezJ9OlxcZHsyfTpcXGR7Mn0pKFxcLlxcZCspPyhbKy1dXFxkezJ9Oj9cXGR7Mn18WikkL1xufSxcbiAgICBjb21wYXJlQnlTZXBhcmF0b3IgPSAnOic7XG5cbmNvbnN0IE5VTUJFUl9UWVBFUyA9IFsnaW50JywgRGF0YVR5cGUuSU5URUdFUiwgRGF0YVR5cGUuRkxPQVQsIERhdGFUeXBlLkRPVUJMRSwgRGF0YVR5cGUuTE9ORywgRGF0YVR5cGUuU0hPUlQsIERhdGFUeXBlLkJZVEUsIERhdGFUeXBlLkJJR19JTlRFR0VSLCBEYXRhVHlwZS5CSUdfREVDSU1BTF07XG5jb25zdCBub3c6IERhdGUgPSBuZXcgRGF0ZSgpO1xuY29uc3QgQ1VSUkVOVF9EQVRFID0gJ0NVUlJFTlRfREFURSc7XG5cbmV4cG9ydCBjb25zdCBlbnVtIEVWRU5UX0xJRkUgeyBPTkNFLCBXSU5ET1cgfVxuXG5leHBvcnQgY29uc3QgaXNEZWZpbmVkID0gdiA9PiAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHY7XG5cbmV4cG9ydCBjb25zdCBpc09iamVjdCA9IHYgPT4gbnVsbCAhPT0gdiAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHY7XG5cbmV4cG9ydCBjb25zdCB0b0Jvb2xlYW4gPSAodmFsLCBpZGVudGl0eT8pID0+ICgodmFsICYmIHZhbCAhPT0gJ2ZhbHNlJykgPyB0cnVlIDogKGlkZW50aXR5ID8gdmFsID09PSBpZGVudGl0eSA6IGZhbHNlKSk7XG5cbmZ1bmN0aW9uIGlzSUUxMSgpIHtcbiAgICByZXR1cm4gd2luZG93Lm5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoJ1RyaWRlbnQvJykgPiAtMTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzSUUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGlzSUUxMSgpIHx8IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01TSUUnKSA+IC0xO1xufTtcblxuXG5leHBvcnQgY29uc3QgaXNBbmRyb2lkID0gKCkgPT4gUkVHRVguQU5EUk9JRC50ZXN0KHVzZXJBZ2VudCk7XG5cbmV4cG9ydCBjb25zdCBpc0FuZHJvaWRUYWJsZXQgPSAoKSA9PiBSRUdFWC5BTkRST0lEX1RBQkxFVC50ZXN0KHVzZXJBZ2VudCkgJiYgISgoL1RhYmxldCBQQyAyLjAvaSkudGVzdCh1c2VyQWdlbnQpKTtcblxuZXhwb3J0IGNvbnN0IGlzSXBob25lID0gKCkgPT4gUkVHRVguSVBIT05FLnRlc3QodXNlckFnZW50KTtcbmV4cG9ydCBjb25zdCBpc0lwb2QgPSAoKSA9PiBSRUdFWC5JUE9ELnRlc3QodXNlckFnZW50KTtcbmV4cG9ydCBjb25zdCBpc0lwYWQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIFJFR0VYLklQQUQudGVzdCh1c2VyQWdlbnQpIHx8ICh3aW5kb3cubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzICYmIHdpbmRvdy5uYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAyICYmIFJFR0VYLk1BQy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0lvcyA9ICgpID0+IGlzSXBob25lKCkgfHwgaXNJcG9kKCkgfHwgaXNJcGFkKCk7XG5cbmV4cG9ydCBjb25zdCBpc0xhcmdlVGFibGV0TGFuZHNjYXBlID0gKGxhbmRTY2FwZVdpZHRoLCBsYW5kU2NhcGVIZWlnaHQpID0+IHtcbiAgICBjb25zdCB3aWR0aCA9IGxhbmRTY2FwZVdpZHRoIHx8ICcxMzY2cHgnO1xuICAgIGNvbnN0IGhlaWdodCA9IGxhbmRTY2FwZUhlaWdodCB8fCAnMTAyNHB4JztcbiAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoXCJvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtYXgtZGV2aWNlLXdpZHRoIDogXCIrd2lkdGgrXCIpIGFuZCAobWluLWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWF4LWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWluLXdpZHRoOiBcIit3aWR0aCtcIikgYW5kIChtYXgtd2lkdGg6IFwiK3dpZHRoK1wiKVwiKS5tYXRjaGVzO1xufVxuXG5leHBvcnQgY29uc3QgaXNMYXJnZVRhYmxldFBvcnRyYWl0ID0gKGxhbmRTY2FwZVdpZHRoLCBsYW5kU2NhcGVIZWlnaHQpID0+ICB7XG4gICAgY29uc3QgaGVpZ2h0ID0gbGFuZFNjYXBlV2lkdGggfHwgJzEzNjZweCc7XG4gICAgY29uc3Qgd2lkdGggPSBsYW5kU2NhcGVIZWlnaHQgfHwgJzEwMjRweCc7XG4gICAgcmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKFwib25seSBzY3JlZW4gYW5kIChtaW4tZGV2aWNlLXdpZHRoIDogXCIrd2lkdGgrXCIpIGFuZCAobWF4LWRldmljZS13aWR0aCA6IFwiK3dpZHRoK1wiKSBhbmQgKG1pbi1kZXZpY2UtaGVpZ2h0IDogXCIraGVpZ2h0K1wiKSBhbmQgKG1heC1kZXZpY2UtaGVpZ2h0IDogXCIraGVpZ2h0K1wiKSBhbmQgKG1pbi13aWR0aDogXCIrd2lkdGgrXCIpIGFuZCAobWF4LXdpZHRoOiBcIit3aWR0aCtcIilcIikubWF0Y2hlcztcbn1cblxuZXhwb3J0IGNvbnN0IGlzTW9iaWxlID0gKCkgPT4gaXNBbmRyb2lkKCkgfHwgaXNJb3MoKSB8fCBpc0FuZHJvaWRUYWJsZXQoKSB8fCAkKCcjd20tbW9iaWxlLWRpc3BsYXk6dmlzaWJsZScpLmxlbmd0aCA+IDA7XG5cbmV4cG9ydCBjb25zdCBpc1RhYmxldCA9ICgpID0+IHtcbiAgICBjb25zdCBzY29wZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hcHAtcGFnZScpLndpZGdldDtcbiAgICByZXR1cm4gc2NvcGUgJiYgc2NvcGUudmlld1BhcmVudC5WaWV3cG9ydC5pc1RhYmxldFR5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgaXNNb2JpbGVBcHAgPSAoKSA9PiBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkucGxhdGZvcm1UeXBlID09PSAnTU9CSUxFJyAmJiBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkudHlwZSA9PT0gJ0FQUExJQ0FUSU9OJztcblxuZXhwb3J0IGNvbnN0IGdldEFuZHJvaWRWZXJzaW9uID0gKCkgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gKHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpLm1hdGNoKC9hbmRyb2lkXFxzKFswLTlcXC5dKikvKTtcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzS2l0a2F0RGV2aWNlID0gKCkgPT4gaXNBbmRyb2lkKCkgJiYgcGFyc2VJbnQoZ2V0QW5kcm9pZFZlcnNpb24oKSwgMTApID09PSA0O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGVuY29kZXMgdGhlIHVybCBhbmQgcmV0dXJucyB0aGUgZW5jb2RlZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY29kZVVybCA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgaW5kZXggPSB1cmwuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIC8vIGVuY29kZSB0aGUgcmVsYXRpdmUgcGF0aFxuICAgICAgICB1cmwgPSBlbmNvZGVVUkkodXJsLnN1YnN0cmluZygwLCBpbmRleCkpICsgdXJsLnN1YnN0cmluZyhpbmRleCk7XG4gICAgICAgIC8vIGVuY29kZSB1cmwgcGFyYW1zLCBub3QgZW5jb2RlZCB0aHJvdWdoIGVuY29kZVVSSVxuICAgICAgICB1cmwgPSBlbmNvZGVVcmxQYXJhbXModXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB1cmwgPSBlbmNvZGVVUkkodXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsO1xufTtcblxuLyoqXG4gKiB0aGlzIG1ldGhvZCBlbmNvZGVzIHRoZSB1cmwgcGFyYW1zIGFuZCBpcyBwcml2YXRlIHRvIHRoZSBjbGFzcyBvbmx5XG4gKi9cbmV4cG9ydCBjb25zdCBlbmNvZGVVcmxQYXJhbXMgPSAodXJsOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGxldCBxdWVyeVBhcmFtcywgZW5jb2RlZFBhcmFtcyA9ICcnLCBxdWVyeVBhcmFtc1N0cmluZywgaW5kZXg7XG4gICAgaW5kZXggPSB1cmwuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgIHF1ZXJ5UGFyYW1zU3RyaW5nID0gdXJsLnN1YnN0cmluZyhpbmRleCk7XG4gICAgICAgIC8vIEVuY29kaW5nIHRoZSBxdWVyeSBwYXJhbXMgaWYgZXhpc3RcbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zU3RyaW5nKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zU3RyaW5nLnNwbGl0KCcmJyk7XG4gICAgICAgICAgICBxdWVyeVBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgICAgICAgICAgIGxldCBkZWNvZGVkUGFyYW1WYWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpID0gXy5pbmNsdWRlcyhwYXJhbSwgJz0nKSA/IHBhcmFtLmluZGV4T2YoJz0nKSA6IChwYXJhbSAmJiBwYXJhbS5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWUgPSBwYXJhbS5zdWJzdHIoMCwgaSksXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBwYXJhbS5zdWJzdHIoaSArIDEpO1xuXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSA9IGZvciBwYXJhbSBuYW1lIG9ubHkgd2hlbiB0aGUgcGFyYW0gdmFsdWUgZXhpc3RzIGluIHRoZSBnaXZlbiBwYXJhbSBvciBlbXB0eSB2YWx1ZSBpcyBhc3NpZ25lZFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbVZhbHVlIHx8IF8uaW5jbHVkZXMocGFyYW0sICc9JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRQYXJhbVZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkUGFyYW1WYWx1ZSA9IHBhcmFtVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZFBhcmFtcyArPSBwYXJhbU5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlZFBhcmFtVmFsdWUpICsgJyYnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRQYXJhbXMgKz0gcGFyYW1OYW1lICsgJyYnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZW5jb2RlZFBhcmFtcyA9IGVuY29kZWRQYXJhbXMuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UocXVlcnlQYXJhbXNTdHJpbmcsIGVuY29kZWRQYXJhbXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1cmw7XG59O1xuXG4vKiBjYXBpdGFsaXplIHRoZSBmaXJzdC1sZXR0ZXIgb2YgdGhlIHN0cmluZyBwYXNzZWQgKi9cbmV4cG9ydCBjb25zdCBpbml0Q2FwcyA9IG5hbWUgPT4ge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zdWJzdHJpbmcoMSk7XG59O1xuXG4vKiBjb252ZXJ0IGNhbWVsQ2FzZSBzdHJpbmcgdG8gYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nICovXG5leHBvcnQgY29uc3Qgc3BhY2VTZXBhcmF0ZSA9IG5hbWUgPT4ge1xuICAgIGlmIChuYW1lID09PSBuYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoUkVHRVguU05BS0VfQ0FTRSwgZnVuY3Rpb24gKGxldHRlciwgcG9zKSB7XG4gICAgICAgIHJldHVybiAocG9zID8gJyAnIDogJycpICsgbGV0dGVyO1xuICAgIH0pO1xufTtcblxuLypSZXBsYWNlIHRoZSBjaGFyYWN0ZXIgYXQgYSBwYXJ0aWN1bGFyIGluZGV4Ki9cbmV4cG9ydCBjb25zdCByZXBsYWNlQXQgPSAoc3RyaW5nLCBpbmRleCwgY2hhcmFjdGVyKSA9PiBzdHJpbmcuc3Vic3RyKDAsIGluZGV4KSArIGNoYXJhY3RlciArIHN0cmluZy5zdWJzdHIoaW5kZXggKyBjaGFyYWN0ZXIubGVuZ3RoKTtcblxuLypSZXBsYWNlICcuJyB3aXRoIHNwYWNlIGFuZCBjYXBpdGFsaXplIHRoZSBuZXh0IGxldHRlciovXG5leHBvcnQgY29uc3QgcGVyaW9kU2VwYXJhdGUgPSBuYW1lID0+IHtcbiAgICBsZXQgZG90SW5kZXg7XG4gICAgZG90SW5kZXggPSBuYW1lLmluZGV4T2YoJy4nKTtcbiAgICBpZiAoZG90SW5kZXggIT09IC0xKSB7XG4gICAgICAgIG5hbWUgPSByZXBsYWNlQXQobmFtZSwgZG90SW5kZXggKyAxLCBuYW1lLmNoYXJBdChkb3RJbmRleCArIDEpLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICBuYW1lID0gcmVwbGFjZUF0KG5hbWUsIGRvdEluZGV4LCAnICcpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmV0dGlmeUxhYmVsID0gbGFiZWwgPT4ge1xuICAgIGxhYmVsID0gXy5jYW1lbENhc2UobGFiZWwpO1xuICAgIC8qY2FwaXRhbGl6ZSB0aGUgaW5pdGlhbCBMZXR0ZXIqL1xuICAgIGxhYmVsID0gaW5pdENhcHMobGFiZWwpO1xuICAgIC8qQ29udmVydCBjYW1lbCBjYXNlIHdvcmRzIHRvIHNlcGFyYXRlZCB3b3JkcyovXG4gICAgbGFiZWwgPSBzcGFjZVNlcGFyYXRlKGxhYmVsKTtcbiAgICAvKlJlcGxhY2UgJy4nIHdpdGggc3BhY2UgYW5kIGNhcGl0YWxpemUgdGhlIG5leHQgbGV0dGVyKi9cbiAgICBsYWJlbCA9IHBlcmlvZFNlcGFyYXRlKGxhYmVsKTtcbiAgICByZXR1cm4gbGFiZWw7XG59O1xuXG5leHBvcnQgY29uc3QgZGVIeXBoZW5hdGUgPSAobmFtZSkgPT4ge1xuICAgIHJldHVybiBuYW1lLnNwbGl0KCctJykuam9pbignICcpO1xufTtcblxuLypBY2NlcHRzIGFuIGFycmF5IG9yIGEgc3RyaW5nIHNlcGFyYXRlZCB3aXRoIHN5bWJvbCBhbmQgcmV0dXJucyBwcmV0dGlmaWVkIHJlc3VsdCovXG5leHBvcnQgY29uc3QgcHJldHRpZnlMYWJlbHMgPSAobmFtZXMsIHNlcGFyYXRvciA9ICcsJykgPT4ge1xuICAgIGxldCBtb2RpZmllZE5hbWVzLCBuYW1lc0FycmF5ID0gW107XG5cbiAgICBpZiAoIV8uaXNBcnJheShuYW1lcykpIHtcbiAgICAgICAgbmFtZXNBcnJheSA9IF8uc3BsaXQobmFtZXMsIHNlcGFyYXRvcik7XG4gICAgfVxuXG4gICAgbW9kaWZpZWROYW1lcyA9IF8ubWFwKG5hbWVzQXJyYXksIHByZXR0aWZ5TGFiZWwpO1xuICAgIGlmIChfLmlzQXJyYXkobmFtZXMpKSB7XG4gICAgICAgIHJldHVybiBtb2RpZmllZE5hbWVzO1xuICAgIH1cbiAgICByZXR1cm4gbW9kaWZpZWROYW1lcy5qb2luKHNlcGFyYXRvcik7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGNoZWNrcyBpZiBhIGluc2VjdXJlIGNvbnRlbnQgcmVxdWVzdCBpcyBiZWluZyBtYWRlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0luc2VjdXJlQ29udGVudFJlcXVlc3QgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IHtcblxuICAgIGNvbnN0IHBhcnNlcjogSFRNTEFuY2hvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgcGFyc2VyLmhyZWYgPSB1cmw7XG5cbiAgICAvLyBmb3IgcmVsYXRpdmUgdXJscyBJRSByZXR1cm5zIHRoZSBwcm90b2NvbCBhcyBlbXB0eSBzdHJpbmdcbiAgICBpZiAocGFyc2VyLnByb3RvY29sID09PSAnJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGlucHV0dGVkIHNvdXJjZSBpcyBhIGJhc2U2NCB1cmwsIGRvIG5vdCB0aHJvdyBpbnNlY3VyZSBjb250ZW50IGVycm9yXG4gICAgaWYgKFJFR0VYLkRBVEFfVVJMLnRlc3QodXJsKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGgobG9jYXRpb24uaHJlZiwgJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5wcm90b2NvbCAhPT0gJ2h0dHBzOicgJiYgcGFyc2VyLnByb3RvY29sICE9PSAnd3NzOic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiB0aGlzIG1ldGhvZCBjaGVja3MgaWYgYSBnaXZlbiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIGdpdmVuIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nU3RhcnRzV2l0aCA9IChzdHI6IHN0cmluZywgc3RhcnRzV2l0aDogc3RyaW5nLCBpZ25vcmVDYXNlPyk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghc3RyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZWdFeCA9IG5ldyBSZWdFeHAoJ14nICsgc3RhcnRzV2l0aCwgaWdub3JlQ2FzZSA/ICdpJyA6ICcnKTtcblxuICAgIHJldHVybiByZWdFeC50ZXN0KHN0cik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXZhbHVhdGVkRXhwclZhbHVlID0gKG9iamVjdCwgZXhwcmVzc2lvbikgPT4ge1xuICAgIGxldCB2YWw7XG4gICAgLyoqXG4gICAgICogRXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gd2l0aCB0aGUgc2NvcGUgYW5kIG9iamVjdC5cbiAgICAgKiAkZXZhbCBpcyB1c2VkLCBhcyBleHByZXNzaW9uIGNhbiBiZSBpbiBmb3JtYXQgb2YgZmllbGQxICsgJyAnICsgZmllbGQyXG4gICAgICogJGV2YWwgY2FuIGZhaWwsIGlmIGV4cHJlc3Npb24gaXMgbm90IGluIGNvcnJlY3QgZm9ybWF0LCBzbyBhdHRlbXB0IHRoZSBldmFsIGZ1bmN0aW9uXG4gICAgICovXG4gICAgdmFsID0gXy5hdHRlbXB0KGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBhcmdzRXhwciA9IE9iamVjdC5rZXlzKG9iamVjdCkubWFwKChmaWVsZE5hbWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgdmFyICR7ZmllbGROYW1lfSA9IGRhdGFbJyR7ZmllbGROYW1lfSddO2A7XG4gICAgICAgIH0pLmpvaW4oJyAnKTtcbiAgICAgICAgY29uc3QgZiA9IG5ldyBGdW5jdGlvbignZGF0YScsIGAke2FyZ3NFeHByfSByZXR1cm4gICR7ZXhwcmVzc2lvbn1gKTtcbiAgICAgICAgcmV0dXJuIGYob2JqZWN0KTtcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiAkZXZhbCBmYWlscyBpZiBmaWVsZCBleHByZXNzaW9uIGhhcyBzcGFjZXMuIEV4OiAnZmllbGQgbmFtZScgb3IgJ2ZpZWxkQG5hbWUnXG4gICAgICogQXMgYSBmYWxsYmFjaywgZ2V0IHZhbHVlIGRpcmVjdGx5IGZyb20gb2JqZWN0IG9yIHNjb3BlXG4gICAgICovXG4gICAgaWYgKF8uaXNFcnJvcih2YWwpKSB7XG4gICAgICAgIHZhbCA9IF8uZ2V0KG9iamVjdCwgZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vKiBmdW5jdGlvbnMgZm9yIHJlc291cmNlIFRhYiovXG5leHBvcnQgY29uc3QgaXNJbWFnZUZpbGUgPSAoZmlsZU5hbWUpID0+IHtcbiAgICByZXR1cm4gKFJFR0VYLlNVUFBPUlRFRF9JTUFHRV9GT1JNQVQpLnRlc3QoZmlsZU5hbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQXVkaW9GaWxlID0gKGZpbGVOYW1lKSA9PiB7XG4gICAgcmV0dXJuIChSRUdFWC5TVVBQT1JURURfQVVESU9fRk9STUFUKS50ZXN0KGZpbGVOYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1ZpZGVvRmlsZSA9IChmaWxlTmFtZSkgPT4ge1xuICAgIHJldHVybiAoUkVHRVguU1VQUE9SVEVEX1ZJREVPX0ZPUk1BVCkudGVzdChmaWxlTmFtZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZFdlYlVSTCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiAoUkVHRVguVkFMSURfV0VCX1VSTCkudGVzdCh1cmwpO1xufTtcblxuLypUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVybCB0byB0aGUgcmVzb3VyY2UgYWZ0ZXIgY2hlY2tpbmcgdGhlIHZhbGlkaXR5IG9mIHVybCovXG5leHBvcnQgY29uc3QgZ2V0UmVzb3VyY2VVUkwgPSAodXJsU3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzVmFsaWRXZWJVUkwodXJsU3RyaW5nKSkge1xuICAgICAgICAvKlRPRE86IFVzZSBEb21TYW5pdGl6ZXIqL1xuICAgICAgICAvLyByZXR1cm4gc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmxTdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gdXJsU3RyaW5nO1xufTtcblxuLypmdW5jdGlvbiB0byBjaGVjayBpZiBmbiBpcyBhIGZ1bmN0aW9uIGFuZCB0aGVuIGV4ZWN1dGUqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJGbihmbiwgLi4uYXJnbW50cykge1xuICAgIC8qIFVzZSBvZiBzbGljZSBvbiBhcmd1bWVudHMgd2lsbCBtYWtlIHRoaXMgZnVuY3Rpb24gbm90IG9wdGltaXphYmxlXG4gICAgKiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMzItbGVha2luZy1hcmd1bWVudHNcbiAgICAqICovXG5cbiAgICBsZXQgc3RhcnQgPSAxO1xuICAgIGNvbnN0IGxlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gc3RhcnQpO1xuICAgIGZvciAoc3RhcnQ7IHN0YXJ0IDwgbGVuOyBzdGFydCsrKSB7XG4gICAgICAgIGFyZ3Nbc3RhcnQgLSAxXSA9IGFyZ3VtZW50c1tzdGFydF07XG4gICAgfVxuXG4gICAgaWYgKF8uaXNGdW5jdGlvbihmbikpIHtcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCB0aGUgZm9ybWF0dGVkIGRhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZvcm1hdHRlZERhdGUgPSAoZGF0ZVBpcGUsIGRhdGVPYmosIGZvcm1hdCwgdGltZVpvbmU/LCBpc1RpbWVTdGFtcFR5cGU/LCBpc0ludGVydmFsRGF0ZVRpbWU/LCBjb21wSW5zdGFuY2U/KTogYW55ID0+IHtcbiAgICBpZiAoIWRhdGVPYmopIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudChkYXRlT2JqKS52YWx1ZU9mKCk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdCA9PT0gJ1VUQycpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVPYmopLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKHRpbWVab25lKSB7XG4gICAgICAgIGNvbnN0IG1vbWVudEZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlQWxsKCd5JywgJ1knKS5yZXBsYWNlQWxsKCdkJywgJ0QnKS5yZXBsYWNlKCdhJywgJ0EnKTtcbiAgICAgICAgaWYgKGlzSW50ZXJ2YWxEYXRlVGltZSApIHsgLy8gZGF0ZXMgd2hpY2ggYXJlIG9mIHR5cGUgdGltZSB3aWRnZXQgKHZhbHVlIGlzIGhoOm1tOnNzKSBidXQgcmV0dXJuZWQgYXMgZGF0ZSBzdHJpbmcgZnJvbSB0aW1lIGNvbXBcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikuZm9ybWF0KG1vbWVudEZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVGltZVN0YW1wVHlwZSA9PT0gJ2RhdGV0aW1lc3RhbXAnKSB7XG4gICAgICAgICAgICBkYXRlT2JqID0gZ2V0TW9tZW50TG9jYWxlT2JqZWN0KHRpbWVab25lLCBkYXRlT2JqKTtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikuZm9ybWF0KG1vbWVudEZvcm1hdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGVPYmosIGZvcm1hdCwgdGltZVpvbmUsIGNvbXBJbnN0YW5jZSk7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGRhdGUgaGFzIHRpbWV6b25lIGluZm9ybWF0aW9uIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgaGFzT2Zmc2V0U3RyID0gKGRhdGVTdHIpID0+IHtcbiAgICBpZiAodHlwZW9mIGRhdGVTdHIgIT09ICdzdHJpbmcnKSByZXR1cm47XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRhdGVTdHIubWF0Y2goUkVHRVguSVNPX0RBVEVfRk9STUFUKTtcbiAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzWzRdKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBtZXRob2QgdG8gZ2V0IHRoZSBkYXRlIG9iamVjdCBmcm9tIHRoZSBpbnB1dCByZWNlaXZlZFxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0ZU9iaiA9ICh2YWx1ZSwgb3B0aW9ucz8sIHRpbWV6b25lPyk6IERhdGUgPT4ge1xuICAgIC8vIEhhbmRsaW5nIGxvY2FsaXphdGlvblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucGF0dGVybiAmJiBvcHRpb25zLnBhdHRlcm4gIT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIC8vIEZpeCBmb3IgV01TLTE5NjAxLCBpbnZhbGlkIGRhdGUgaXMgcmV0dXJuZWQgb24gZGF0ZSBzZWxlY3Rpb24uXG4gICAgICAgIGNvbnN0IGlzTmF0aXZlUGlja2VyID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaXNOYXRpdmVQaWNrZXInKSkgPyBfLmdldChvcHRpb25zLCAnaXNOYXRpdmVQaWNrZXInKSA6IGlzTW9iaWxlKCk7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAgaXNOYXRpdmVQaWNrZXIgPyAnWVlZWS9NTS9ERCBISDptbTpzcycgOiBtb21lbnRQYXR0ZXJuKG9wdGlvbnMucGF0dGVybik7XG4gICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlLCBwYXR0ZXJuKS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICAvKmlmIHRoZSB2YWx1ZSBpcyBhIGRhdGUgb2JqZWN0LCBubyBuZWVkIHRvIGNvdmVydCBpdCovXG4gICAgaWYgKF8uaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyppZiB0aGUgdmFsdWUgaXMgYSB0aW1lc3RhbXAgc3RyaW5nLCBjb252ZXJ0IGl0IHRvIGEgbnVtYmVyKi9cbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgfVxuXG4gICAgaWYgKCFtb21lbnQodmFsdWUpLmlzVmFsaWQoKSB8fCB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsZXQgZGF0ZU9iaiA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAvKipcbiAgICAgKiBpZiBkYXRlIHZhbHVlIGlzIHN0cmluZyBcIjIwLTA1LTIwMTlcIiB0aGVuIG5ldyBEYXRlKHZhbHVlKSByZXR1cm4gMjBNYXkyMDE5IHdpdGggY3VycmVudCB0aW1lIGluIEluZGlhLFxuICAgICAqIHdoZXJlYXMgdGhpcyB3aWxsIHJldHVybiAxOU1heTIwMTkgd2l0aCB0aW1lIGxhZ2dpbmcgZm9yIGZldyBob3Vycy5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaXQgcmV0dXJucyBVVEMgdGltZSBpLmUuIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIChVVEMpLlxuICAgICAqIFRvIGNyZWF0ZSBkYXRlIGluIGxvY2FsIHRpbWUgdXNlIG1vbWVudFxuICAgICAqL1xuICAgIGlmIChfLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAvKlxuICAgICAgICAgKiBJZiBzZWxlY3RlZCBsb2NhbGUgaXMgQXJhYmljLCBtb21lbnQodmFsdWUpLmZvcm1hdCgpIGlzIGdpdmluZyBkYXRlIGluIEFyYWJpYyBsYW5ndWFnZVxuICAgICAgICAgKiAoRXg6IElmIGRhdGUgdmFsdWUgaXMgXCIxOTkwLTExLTIzXCIgYW5kIG1vbWVudCh2YWx1ZSkuZm9ybWF0KCkgaXMgXCLZodmp2anZoC3ZodmhLdmi2aNU2aDZoDrZoNmgOtmg2aAr2aDZpTrZo9mgXCIpXG4gICAgICAgICAqIGFuZCBuZXcgRGF0ZShtb21lbnQodmFsdWUpLmZvcm1hdCgpKSBpcyBnaXZpbmcgSW52YWxpZCBEYXRlLiBTbyBmcnN0IGNvbnZlcnRpbmcgaXQgdG8gdGltZXN0YW1wIHZhbHVlLlxuICAgICAgICAqL1xuXG4gICAgICAgIGRhdGVPYmogPSAhdGltZXpvbmUgPyBuZXcgRGF0ZShtb21lbnQobW9tZW50KHZhbHVlKS5mb3JtYXQoKSkudmFsdWVPZigpKSA6IGdldE1vbWVudExvY2FsZU9iamVjdCh0aW1lem9uZSwgdmFsdWUpOztcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09IENVUlJFTlRfREFURSB8fCBpc05hTihkYXRlT2JqLmdldERheSgpKSkge1xuICAgICAgICByZXR1cm4gbm93O1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZU9iajtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRFdmVudExpc3RlbmVyT25FbGVtZW50ID0gKF9lbGVtZW50OiBFbGVtZW50LCBleGNsdWRlRWxlbWVudDogRWxlbWVudCwgbmF0aXZlRWxlbWVudDogRWxlbWVudCwgZXZlbnRUeXBlLCBpc0Ryb3BEb3duRGlzcGxheUVuYWJsZWRPbklucHV0LCBzdWNjZXNzQ0IsIGxpZmU6IEVWRU5UX0xJRkUsIGlzQ2FwdHVyZSA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudDogRWxlbWVudCA9IF9lbGVtZW50O1xuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV4Y2x1ZGVFbGVtZW50ICYmIChleGNsdWRlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpIHx8IGV4Y2x1ZGVFbGVtZW50ID09PSBldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgaWYgKCQoZXZlbnQudGFyZ2V0KS5pcygnaW5wdXQnKSAmJiAhaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpZmUgPT09IEVWRU5UX0xJRkUuT05DRSkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBzdWNjZXNzQ0IoKTtcbiAgICB9O1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgY29uc3QgcmVtb3ZlRXZlbnRMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICB9O1xuICAgIHJldHVybiByZW1vdmVFdmVudExpc3RlbmVyO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVlcCBjbG9uZWQgcmVwbGljYSBvZiB0aGUgcGFzc2VkIG9iamVjdC9hcnJheVxuICogQHBhcmFtIG9iamVjdCBvYmplY3QvYXJyYXkgdG8gY2xvbmVcbiAqIEByZXR1cm5zIGEgY2xvbmUgb2YgdGhlIHBhc3NlZCBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENsb25lZE9iamVjdCA9IChvYmplY3QpID0+IHtcbiAgICByZXR1cm4gXy5jbG9uZURlZXAob2JqZWN0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxlcyA9IChmb3JtTmFtZSwgZmllbGROYW1lLCBpc0xpc3QpID0+IHtcbiAgICBjb25zdCBmaWxlcyA9IF8uZ2V0KGRvY3VtZW50LmZvcm1zLCBbZm9ybU5hbWUsIGZpZWxkTmFtZSwgJ2ZpbGVzJ10pO1xuICAgIHJldHVybiBpc0xpc3QgPyBfLm1hcChmaWxlcywgXy5pZGVudGl0eSkgOiBmaWxlcyAmJiBmaWxlc1swXTtcbn07XG5cbi8qRnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSByYW5kb20gbnVtYmVyKi9cbmZ1bmN0aW9uIHJhbmRvbSgpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKTtcbn1cblxuLypGdW5jdGlvbiB0byBnZW5lcmF0ZSBhIGd1aWQgYmFzZWQgb24gcmFuZG9tIG51bWJlcnMuKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUdVSWQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHJhbmRvbSgpICsgJy0nICsgcmFuZG9tKCkgKyAnLScgKyByYW5kb20oKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgaWYgZ2l2ZW4gYWNjZXNzIHJvbGUgaXMgaW4gY3VycmVudCBsb2dnZWRpbiB1c2VyIGFjY2VzcyByb2xlc1xuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBY2Nlc3NSb2xlcyA9IChyb2xlRXhwLCBsb2dnZWRJblVzZXIpID0+IHtcbiAgICBsZXQgcm9sZXM7XG5cbiAgICBpZiAocm9sZUV4cCAmJiBsb2dnZWRJblVzZXIpIHtcblxuICAgICAgICByb2xlcyA9IHJvbGVFeHAgJiYgcm9sZUV4cC5zcGxpdCgnLCcpLm1hcChGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCwgU3RyaW5nLnByb3RvdHlwZS50cmltKTtcblxuICAgICAgICByZXR1cm4gXy5pbnRlcnNlY3Rpb24ocm9sZXMsIGxvZ2dlZEluVXNlci51c2VyUm9sZXMpLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWYWxpZEpTT04gPSAoY29udGVudCkgPT4ge1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWRJbnRWYWx1ZSA9IHBhcnNlSW50KGNvbnRlbnQsIDEwKTtcbiAgICAgICAgLypvYnRhaW5pbmcganNvbiBmcm9tIGVkaXRvciBjb250ZW50IHN0cmluZyovXG4gICAgICAgIHJldHVybiBpc09iamVjdChjb250ZW50KSB8fCAhaXNOYU4ocGFyc2VkSW50VmFsdWUpID8gY29udGVudCA6IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKnRlcm1pbmF0aW5nIGV4ZWN1dGlvbiBpZiBuZXcgdmFyaWFibGUgb2JqZWN0IGlzIG5vdCB2YWxpZCBqc29uLiovXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHhtbFRvSnNvbiA9ICh4bWxTdHJpbmcpID0+IHtcbiAgICBjb25zdCB4MmpzT2JqID0gbmV3IFgySlMoeyAnZW1wdHlOb2RlRm9ybSc6ICdjb250ZW50JywgJ2F0dHJpYnV0ZVByZWZpeCc6ICcnLCAnZW5hYmxlVG9TdHJpbmdGdW5jJzogZmFsc2UgfSk7XG4gICAgbGV0IGpzb24gPSB4MmpzT2JqLnhtbDJqcyh4bWxTdHJpbmcpO1xuICAgIGlmIChqc29uKSB7XG4gICAgICAgIGpzb24gPSBfLmdldChqc29uLCBPYmplY3Qua2V5cyhqc29uKVswXSk7XG4gICAgfVxuICAgIHJldHVybiBqc29uO1xufTtcblxuLypcbiAqIFV0aWwgbWV0aG9kIHRvIGZpbmQgdGhlIHZhbHVlIG9mIGEga2V5IGluIHRoZSBvYmplY3RcbiAqIGlmIGtleSBub3QgZm91bmQgYW5kIGNyZWF0ZSBpcyB0cnVlLCBhbiBvYmplY3QgaXMgY3JlYXRlZCBhZ2FpbnN0IHRoYXQgbm9kZVxuICogRXhhbXBsZXM6XG4gKiB2YXIgYSA9IHtcbiAqICBiOiB7XG4gKiAgICAgIGMgOiB7XG4gKiAgICAgICAgICBkOiAndGVzdCdcbiAqICAgICAgfVxuICogIH1cbiAqIH1cbiAqIFV0aWxzLmZpbmRWYWx1ZShhLCAnYi5jLmQnKSAtLT4gJ3Rlc3QnXG4gKiBVdGlscy5maW5kVmFsdWUoYSwgJ2IuYycpIC0tPiB7ZDogJ3Rlc3QnfVxuICogVXRpbHMuZmluZFZhbHVlKGEsICdlJykgLS0+IHVuZGVmaW5lZFxuICogVXRpbHMuZmluZFZhbHVlKGEsICdlJywgdHJ1ZSkgLS0+IHt9IGFuZCBhIHdpbGwgYmVjb21lOlxuICoge1xuICogICBiOiB7XG4gKiAgICAgIGMgOiB7XG4gKiAgICAgICAgICBkOiAndGVzdCdcbiAqICAgICAgfVxuICogIH0sXG4gKiAgZToge1xuICogIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGZpbmRWYWx1ZU9mID0gKG9iaiwga2V5LCBjcmVhdGU/KSA9PiB7XG5cbiAgICBpZiAoIW9iaiB8fCAha2V5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNyZWF0ZSkge1xuICAgICAgICByZXR1cm4gXy5nZXQob2JqLCBrZXkpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRzID0ga2V5LnNwbGl0KCcuJyksXG4gICAgICAgIGtleXMgPSBbXTtcblxuICAgIGxldCBza2lwUHJvY2Vzc2luZztcblxuICAgIHBhcnRzLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICAgICAgaWYgKCFwYXJ0cy5sZW5ndGgpIHsgLy8gaWYgdGhlIHBhcnQgb2YgYSBrZXkgaXMgbm90IHZhbGlkLCBza2lwIHRoZSBwcm9jZXNzaW5nLlxuICAgICAgICAgICAgc2tpcFByb2Nlc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3ViUGFydHMgPSBwYXJ0Lm1hdGNoKC9cXHcrL2cpO1xuICAgICAgICBsZXQgc3ViUGFydDtcblxuICAgICAgICB3aGlsZSAoc3ViUGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzdWJQYXJ0ID0gc3ViUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGtleXMucHVzaCh7ICdrZXknOiBzdWJQYXJ0LCAndmFsdWUnOiBzdWJQYXJ0cy5sZW5ndGggPyBbXSA6IHt9IH0pOyAvLyBkZXRlcm1pbmUgd2hldGhlciB0byBjcmVhdGUgYW4gYXJyYXkgb3IgYW4gb2JqZWN0XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChza2lwUHJvY2Vzc2luZykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGtleXMuZm9yRWFjaCgoX2tleSkgPT4ge1xuICAgICAgICBsZXQgdGVtcE9iaiA9IG9ialtfa2V5LmtleV07XG4gICAgICAgIGlmICghaXNPYmplY3QodGVtcE9iaikpIHtcbiAgICAgICAgICAgIHRlbXBPYmogPSBnZXRWYWxpZEpTT04odGVtcE9iaik7XG4gICAgICAgICAgICBpZiAoIXRlbXBPYmopIHtcbiAgICAgICAgICAgICAgICB0ZW1wT2JqID0gX2tleS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvYmpbX2tleS5rZXldID0gdGVtcE9iajtcbiAgICAgICAgb2JqID0gdGVtcE9iajtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG59O1xuXG4vKlxuKiBleHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgbGFzdCBiaXQgZnJvbSBmdWxsIHR5cGVSZWYgb2YgYSBmaWVsZFxuKiBlLmcuIHJldHVybnMgJ1N0cmluZycgZm9yIHR5cGVSZWYgPSAnamF2YS5sYW5nLlN0cmluZydcbiogQHBhcmFtczoge3R5cGVSZWZ9IHR5cGUgcmVmZXJlbmNlXG4qL1xuZXhwb3J0IGNvbnN0IGV4dHJhY3RUeXBlID0gKHR5cGVSZWY6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgbGV0IHR5cGU7XG4gICAgaWYgKCF0eXBlUmVmKSB7XG4gICAgICAgIHJldHVybiBEYXRhVHlwZS5TVFJJTkc7XG4gICAgfVxuICAgIHR5cGUgPSB0eXBlUmVmICYmIHR5cGVSZWYuc3Vic3RyaW5nKHR5cGVSZWYubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIHR5cGUgPSB0eXBlICYmIHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB0eXBlID0gdHlwZSA9PT0gRGF0YVR5cGUuTE9DQUxEQVRFVElNRSA/IERhdGFUeXBlLkRBVEVUSU1FIDogdHlwZTtcbiAgICByZXR1cm4gdHlwZTtcbn07XG5cbi8qIHJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgZGF0YSB0eXBlIG1hdGNoZXMgbnVtYmVyIHR5cGUgKi9cbmV4cG9ydCBjb25zdCBpc051bWJlclR5cGUgPSAodHlwZTogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIChOVU1CRVJfVFlQRVMuaW5kZXhPZihleHRyYWN0VHlwZSh0eXBlKS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpO1xufTtcblxuLyogZnVuY3Rpb24gdG8gY2hlY2sgaWYgcHJvdmlkZWQgb2JqZWN0IGlzIGVtcHR5Ki9cbmV4cG9ydCBjb25zdCBpc0VtcHR5T2JqZWN0ID0gKG9iajogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKGlzT2JqZWN0KG9iaikgJiYgIV8uaXNBcnJheShvYmopKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gRnVuY3Rpb24gZXhwZWN0cyBhbiBlbGVtZW50IG9uIHdoaWNoIHRoZSBzY3JvbGxpbmcgc2hvdWxkIGJlIGFwcGxpZWQsIERlcGVuZGluZyBvbiB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50IHNjcm9sbGJhciB3aWxsIGJlIGFkanVzdGVkXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9FbGVtZW50ID0gKGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCAkZWxlbWVudCA9ICQoZWxlbWVudCk7XG4gICAgY29uc3QgZm9ybVBvc2l0aW9uID0gJGVsZW1lbnQub2Zmc2V0KCkudG9wO1xuICAgIGNvbnN0ICRzY3JvbGxQYXJlbnQgPSAkZWxlbWVudC5jbG9zZXN0KCdbd21zbW9vdGhzY3JvbGw9XCJ0cnVlXCJdJyk7XG4gICAgaWYgKGlzTW9iaWxlQXBwKCkgJiYgJHNjcm9sbFBhcmVudC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgaVNjcm9sbCA9IF8uZ2V0KCRzY3JvbGxQYXJlbnRbMF0sICdpc2Nyb2xsJyk7XG4gICAgICAgIGxldCB0byA9IC0oZm9ybVBvc2l0aW9uIC0gaVNjcm9sbC55KTtcbiAgICAgICAgdG8gPSAoaVNjcm9sbC5tYXhTY3JvbGxZID4gdG8pID8gaVNjcm9sbC5tYXhTY3JvbGxZIDogdG87XG4gICAgICAgIGlTY3JvbGwuc2Nyb2xsVG8oMCwgdG8pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGwoe1xuICAgICAgICAgICAgdG9wOiBmb3JtUG9zaXRpb24sXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLy8gRnVuY3Rpb24gd2lsbCByZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBpbiB2aWV3cG9ydCBvciBub3RcbmV4cG9ydCBjb25zdCBpc0VsZW1lbnRJblZpZXdwb3J0ID0gKGVsZW1lbnQpID0+IHtcbiAgICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgcmVjdC50b3AgPj0gMCAmJlxuICAgICAgICByZWN0LmxlZnQgPj0gMCAmJlxuICAgICAgICByZWN0LmJvdHRvbSA8PSAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpICYmXG4gICAgICAgIHJlY3QucmlnaHQgPD0gKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aClcbiAgICApO1xufVxuXG4vKkZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBvYmplY3QgaXMgYSBwYWdlYWJsZSBvYmplY3Qgb3Igbm90LiovXG5leHBvcnQgY29uc3QgaXNQYWdlYWJsZSA9IChvYmo6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHBhZ2VhYmxlID0ge1xuICAgICAgICAnY29udGVudCc6IFtdLFxuICAgICAgICAnZmlyc3QnOiB0cnVlLFxuICAgICAgICAnbGFzdCc6IHRydWUsXG4gICAgICAgICdudW1iZXInOiAwLFxuICAgICAgICAnbnVtYmVyT2ZFbGVtZW50cyc6IDEwLFxuICAgICAgICAnc2l6ZSc6IDIwLFxuICAgICAgICAnc29ydCc6IG51bGwsXG4gICAgICAgICd0b3RhbEVsZW1lbnRzJzogMTAsXG4gICAgICAgICd0b3RhbFBhZ2VzJzogMVxuICAgIH07XG4gICAgLy8gcGFnaW5hdGVkIG9iamVjdCBtYXkgb3IgbWF5IG5vdCBjb250YWluICdlbXB0eScgcHJvcGVydHkuIEluIGVpdGhlciBjYXNlLCBQYWdlYWJsZSBzaG91bGQgcmV0dXJuIGFzIHRydWUuXG4gICAgY29uc3QgcGFnaW5hdGVkT2JqID0gXy5vbWl0KG9iaiwgJ2VtcHR5Jyk7XG4gICAgcmV0dXJuIChfLmlzRXF1YWwoXy5rZXlzKHBhZ2VhYmxlKSwgXy5rZXlzKHBhZ2luYXRlZE9iaikuc29ydCgpKSk7XG59O1xuXG4vKlxuICogVXRpbCBtZXRob2QgdG8gcmVwbGFjZSBwYXR0ZXJucyBpbiBzdHJpbmcgd2l0aCBvYmplY3Qga2V5cyBvciBhcnJheSB2YWx1ZXNcbiAqIEV4YW1wbGVzOlxuICogVXRpbHMucmVwbGFjZSgnSGVsbG8sICR7Zmlyc3R9ICR7bGFzdH0gIScsIHtmaXJzdDogJ3dhdmVtYWtlcicsIGxhc3Q6ICduZyd9KSAtLT4gSGVsbG8sIHdhdmVtYWtlciBuZ1xuICogVXRpbHMucmVwbGFjZSgnSGVsbG8sICR7MH0gJHsxfSAhJywgWyd3YXZlbWFrZXInLCduZyddKSAtLT4gSGVsbG8sIHdhdmVtYWtlciBuZ1xuICogRXhhbXBsZXMgaWYgcGFyc2VFcnJvciBpcyB0cnVlOlxuICogVXRpbHMucmVwbGFjZSgnSGVsbG8sIHswfSB7MX0gIScsIFsnd2F2ZW1ha2VyJywnbmcnXSkgLS0+IEhlbGxvLCB3YXZlbWFrZXIgbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHJlcGxhY2UgPSAodGVtcGxhdGUsIG1hcCwgcGFyc2VFcnJvcj86IGJvb2xlYW4pID0+IHtcbiAgICBsZXQgcmVnRXggPSBSRUdFWC5SRVBMQUNFX1BBVFRFUk47XG4gICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwYXJzZUVycm9yKSB7XG4gICAgICAgIHJlZ0V4ID0gL1xceyhbXlxcfV0rKVxcfS9nO1xuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKHJlZ0V4LCBmdW5jdGlvbiAobWF0Y2gsIGtleSkge1xuICAgICAgICByZXR1cm4gXy5nZXQobWFwLCBrZXkpO1xuICAgIH0pO1xufTtcblxuLypGdW5jdGlvbiB0byBjaGVjayBpZiBkYXRlIHRpbWUgdHlwZSovXG5leHBvcnQgY29uc3QgaXNEYXRlVGltZVR5cGUgPSB0eXBlID0+IHtcbiAgICBpZiAoXy5pbmNsdWRlcyh0eXBlLCAnLicpKSB7XG4gICAgICAgIHR5cGUgPSBfLnRvTG93ZXIoZXh0cmFjdFR5cGUodHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm4gXy5pbmNsdWRlcyhbRGF0YVR5cGUuREFURSwgRGF0YVR5cGUuVElNRSwgRGF0YVR5cGUuVElNRVNUQU1QLCBEYXRhVHlwZS5EQVRFVElNRSwgRGF0YVR5cGUuTE9DQUxEQVRFVElNRV0sIHR5cGUpO1xufTtcblxuY29uc3QgbW9tZW50UGF0dGVybiA9IChwYXR0ZXJuKSA9PiB7XG4gICAgaWYgKF8uaW5jbHVkZXMocGF0dGVybiwgJ0UnKSkge1xuICAgICAgIHBhdHRlcm4gPSAgXy5yZXBsYWNlKHBhdHRlcm4sIC9FWyxdPy9nLCAnJyk7XG4gICAgfVxuICAgIHJldHVybiBfLnJlcGxhY2UocGF0dGVybiwgL3kqZCovZywgKHZhbCkgPT4gdmFsLnRvVXBwZXJDYXNlKCkpO1xufTtcblxuLyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBkYXRlIG9iamVjdC4gSWYgdmFsIGlzIHVuZGVmaW5lZCBpdCByZXR1cm5zIGludmFsaWQgZGF0ZSAqL1xuZXhwb3J0IGNvbnN0IGdldFZhbGlkRGF0ZU9iamVjdCA9ICh2YWwsIG9wdGlvbnM/KSA9PiB7XG4gICBjb25zdCBkZWZhdWx0TWVyaWRpYW4gPSBbJ0FNJywgJ1BNJ107XG4gICBjb25zdCBtb21lbnRNZXJpZGlhbiA9IG1vbWVudCgpLl9sb2NhbGUubWVyaWRpZW0oKTtcbiAgICAvLyBVcGRhdGluZyBsb2NhbGl6ZWQgbWVyaWRpYW5zIHdpdGggZGVmYXVsdCBtZXJpZGlhbnMgd2hlbiBtb21lbnQgbWVyaWRpYW4gaXMgbm90IGRlZmluZWRcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm1lcmlkaWFucyAmJiBfLmluY2x1ZGVzKGRlZmF1bHRNZXJpZGlhbiwgbW9tZW50TWVyaWRpYW4pKSB7XG4gICAgICAgIF8uZm9yRWFjaChvcHRpb25zLm1lcmlkaWFucywgKG1lcmlkaWFuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXModmFsLCBtZXJpZGlhbikpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZShtZXJpZGlhbiwgZGVmYXVsdE1lcmlkaWFuW2luZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBpc05hdGl2ZVBpY2tlciA9IChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzTmF0aXZlUGlja2VyJykpID8gXy5nZXQob3B0aW9ucywgJ2lzTmF0aXZlUGlja2VyJykgOiBpc01vYmlsZSgpO1xuICAgIGNvbnN0IHBhdHRlcm4gPSBpc05hdGl2ZVBpY2tlciA/IChfLmdldChvcHRpb25zLCAncGF0dGVybicpIHx8ICAnWVlZWS9NTS9ERCBISDptbTpzcycpIDogKG1vbWVudFBhdHRlcm4oXy5nZXQob3B0aW9ucywgJ3BhdHRlcm4nKSkgfHwgJycpO1xuICAgIC8vIEhhbmRsaW5nIGxvY2FsaXphdGlvblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucGF0dGVybiAmJiBvcHRpb25zLnBhdHRlcm4gIT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIGlmICghaXNOYU4oKG5ldyBEYXRlKHZhbCkpLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdmFsIGlzIGEgdmFsaWQgZGF0ZSBvciBub3RcbiAgICAgICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICAgICAgLy8gRm9yIGlPUywgZXhwbGljaXRseSBzZXR0aW5nIHRoZSBmb3JtYXQgdG8gY29uc2lkZXIgZXZlbiB0aGUgc2Vjb25kcy5cbiAgICAgICAgICAgICAgICB2YWwgPSBtb21lbnQodmFsKS5mb3JtYXQoJ1lZWVkvTU0vREQgSEg6bW06c3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbCA9IG1vbWVudChuZXcgRGF0ZSh2YWwpLCBwYXR0ZXJuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9IG1vbWVudCh2YWwsIHBhdHRlcm4pO1xuICAgICAgICB9XG4gICAgICAgIHZhbCA9IHZhbC50b0RhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAobW9tZW50KHZhbCwgcGF0dGVybikuaXNWYWxpZCgpKSB7XG4gICAgICAgIC8vIGRhdGUgd2l0aCArNSBob3VycyBpcyByZXR1cm5lZCBpbiBzYWZhcmkgYnJvd3NlciB3aGljaCBpcyBub3QgYSB2YWxpZCBkYXRlLlxuICAgICAgICAvLyBIZW5jZSBjb252ZXJ0aW5nIHRoZSBkYXRlIHRvIHRoZSBzdXBwb3J0ZWQgZm9ybWF0IFwiWVlZWS9NTS9ERCBISDptbTpzc1wiIGluIElPU1xuICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgdmFsID0gbW9tZW50KG1vbWVudCh2YWwpLnZhbHVlT2YoKSkuZm9ybWF0KCdZWVlZL01NL0REIEhIOm1tOnNzJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgLyppZiB0aGUgdmFsdWUgaXMgYSB0aW1lc3RhbXAgc3RyaW5nLCBjb252ZXJ0IGl0IHRvIGEgbnVtYmVyKi9cbiAgICBpZiAoIWlzTmFOKHZhbCkpIHtcbiAgICAgICAgdmFsID0gcGFyc2VJbnQodmFsLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLyppZiB0aGUgdmFsdWUgaXMgaW4gSEg6bW06c3MgZm9ybWF0LCBpdCByZXR1cm5zIGEgd3JvbmcgZGF0ZS4gU28gYXBwZW5kIHRoZSBkYXRlIHRvIHRoZSBnaXZlbiB2YWx1ZSB0byBnZXQgZGF0ZSovXG4gICAgICAgIGlmICghKG5ldyBEYXRlKHZhbCkuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgdmFsID0gbW9tZW50KChtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tREQnKSArICcgJyArIHZhbCksICdZWVlZLU1NLUREIEhIOm1tOnNzIEEnKTtcblxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShtb21lbnQodmFsKS52YWx1ZU9mKCkpO1xufTtcblxuLyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBqYXZhc2NyaXB0IGRhdGUgb2JqZWN0Ki9cbmV4cG9ydCBjb25zdCBnZXROYXRpdmVEYXRlT2JqZWN0ID0gKHZhbCwgb3B0aW9ucz8pID0+IHtcbiAgICB2YWwgPSBnZXRWYWxpZERhdGVPYmplY3QodmFsLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsKTtcbn07XG5cblxuLyoqXG4gKiBwcmVwYXJlIGEgYmxvYiBvYmplY3QgYmFzZWQgb24gdGhlIGNvbnRlbnQgYW5kIGNvbnRlbnQgdHlwZSBwcm92aWRlZFxuICogaWYgY29udGVudCBpcyBibG9iIGl0c2VsZiwgc2ltcGx5IHJldHVybnMgaXQgYmFja1xuICogQHBhcmFtIHZhbFxuICogQHBhcmFtIHZhbENvbnRlbnRUeXBlXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJsb2IgPSAodmFsLCB2YWxDb250ZW50VHlwZT8pID0+IHtcbiAgICBpZiAodmFsIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBjb25zdCBqc29uVmFsID0gZ2V0VmFsaWRKU09OKHZhbCk7XG4gICAgaWYgKGpzb25WYWwgJiYganNvblZhbCBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB2YWwgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoanNvblZhbCldLCB7IHR5cGU6IHZhbENvbnRlbnRUeXBlIHx8ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBuZXcgQmxvYihbdmFsXSwgeyB0eXBlOiB2YWxDb250ZW50VHlwZSB8fCAndGV4dC9wbGFpbicgfSk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGJ5IGNvbXBhcmluZyB0d28gb2JqZWN0cyBiYXNlZCBvbiB0aGUgZmllbGRzXG4gKiBAcGFyYW0gb2JqMSBvYmplY3RcbiAqIEBwYXJhbSBvYmoyIG9iamVjdFxuICogQHBhcmFtIGNvbXBhcmVCeSBzdHJpbmcgZmllbGQgdmFsdWVzIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIG9iamVjdCBlcXVhbGl0eSByZXR1cm5zIHRydWUgYmFzZWQgb24gZmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBpc0VxdWFsV2l0aEZpZWxkcyA9IChvYmoxLCBvYmoyLCBjb21wYXJlQnkpID0+IHtcbiAgICAvLyBjb21wYXJlQnkgY2FuIGJlICdpZCcgb3IgJ2lkMSwgaWQyJyBvciAnaWQxLCBpZDI6aWQzJ1xuICAgIC8vIFNwbGl0IHRoZSBjb21wYXJlYnkgY29tbWEgc2VwYXJhdGVkIHZhbHVlc1xuICAgIGxldCBfY29tcGFyZUJ5ID0gXy5pc0FycmF5KGNvbXBhcmVCeSkgPyBjb21wYXJlQnkgOiBfLnNwbGl0KGNvbXBhcmVCeSwgJywnKTtcblxuICAgIF9jb21wYXJlQnkgPSBfLm1hcChfY29tcGFyZUJ5LCBfLnRyaW0pO1xuXG4gICAgcmV0dXJuIF8uaXNFcXVhbFdpdGgob2JqMSwgb2JqMiwgZnVuY3Rpb24gKG8xLCBvMikge1xuICAgICAgICByZXR1cm4gXy5ldmVyeShfY29tcGFyZUJ5LCBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGxldCBjYjEsIGNiMiwgX2NiO1xuXG4gICAgICAgICAgICAvLyBJZiBjb21wYXJlYnkgY29udGFpbnMgOiAsIGNvbXBhcmUgdGhlIHZhbHVlcyBieSB0aGUga2V5cyBvbiBlaXRoZXIgc2lkZSBvZiA6XG4gICAgICAgICAgICBpZiAoXy5pbmRleE9mKGNiLCBjb21wYXJlQnlTZXBhcmF0b3IpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNiMSA9IGNiMiA9IF8udHJpbShjYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9jYiA9IF8uc3BsaXQoY2IsIGNvbXBhcmVCeVNlcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgY2IxID0gXy50cmltKF9jYlswXSk7XG4gICAgICAgICAgICAgICAgY2IyID0gXy50cmltKF9jYlsxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfLmdldChvMSwgY2IxKSA9PT0gXy5nZXQobzIsIGNiMik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuY29uc3QgZ2V0Tm9kZSA9IHNlbGVjdG9yID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXG4vLyBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgc3R5bGVzaGVldCBpcyBhbHJlYWR5IGxvYWRlZFxuY29uc3QgaXNTdHlsZVNoZWV0TG9hZGVkID0gaHJlZiA9PiAhIWdldE5vZGUoYGxpbmtbaHJlZj1cIiR7aHJlZn1cIl1gKTtcblxuLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIHN0eWxlc2hlZXQgaWYgdGhlIHN0eWxlc2hlZXQgaXMgYWxyZWFkeSBsb2FkZWRcbmNvbnN0IHJlbW92ZVN0eWxlU2hlZXQgPSBocmVmID0+IHtcbiAgICBjb25zdCBub2RlID0gZ2V0Tm9kZShgbGlua1tocmVmPVwiJHtocmVmfVwiXWApO1xuICAgIGlmIChub2RlKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlKCk7XG4gICAgfVxufTtcblxuLy8gZnVuY3Rpb24gdG8gbG9hZCBhIHN0eWxlc2hlZXRcbmV4cG9ydCBjb25zdCBsb2FkU3R5bGVTaGVldCA9ICh1cmwsIGF0dHIpID0+IHtcbiAgICBpZiAoaXNTdHlsZVNoZWV0TG9hZGVkKHVybCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAvLyBUbyBhZGQgYXR0cmlidXRlcyB0byBsaW5rIHRhZ1xuICAgIGlmIChhdHRyICYmIGF0dHIubmFtZSkge1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudmFsdWUpO1xuICAgIH1cbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgncmVsJywgJ3N0eWxlc2hlZXQnKTtcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgcmV0dXJuIGxpbms7XG59O1xuXG4vLyBmdW5jdGlvbiB0byBsb2FkIHN0eWxlc2hlZXRzXG5leHBvcnQgY29uc3QgbG9hZFN0eWxlU2hlZXRzID0gKHVybHMgPSBbXSkgPT4ge1xuICAgIC8vIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBub3QgYW4gYXJyYXksIGNvbnZlcnQgaXQgdG8gYW4gYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodXJscykpIHtcbiAgICAgICAgdXJscyA9IFt1cmxzXTtcbiAgICB9XG4gICAgdXJscy5mb3JFYWNoKGxvYWRTdHlsZVNoZWV0KTtcbn07XG5cbi8vIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBzY3JpcHQgaXMgYWxyZWFkeSBsb2FkZWRcbmNvbnN0IGlzU2NyaXB0TG9hZGVkID0gc3JjID0+ICEhZ2V0Tm9kZShgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXSwgc2NyaXB0W2RhdGEtc3JjPVwiJHtzcmN9XCJdYCk7XG5cbmV4cG9ydCBjb25zdCBnZXRNb21lbnRMb2NhbGVPYmplY3QgPSAodGltZVpvbmUsIGRhdGVPYmo/KSA9PiB7XG4gICAgaWYgKGRhdGVPYmopIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG5ldyBEYXRlKG1vbWVudChkYXRlT2JqKS50eih0aW1lWm9uZSkuZm9ybWF0KCkpLnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIiwge3RpbWVab25lOiB0aW1lWm9uZX0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUobmV3IERhdGUobW9tZW50KCkudHoodGltZVpvbmUpLmZvcm1hdCgpKS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIsIHt0aW1lWm9uZTogdGltZVpvbmV9KSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgbG9hZFNjcmlwdCA9IGFzeW5jICh1cmwsIGxvYWRWaWFTY3JpcHRUYWcsIGNhY2hlYWJsZSA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgX3VybCA9IHVybC50cmltKCk7XG4gICAgaWYgKCFfdXJsLmxlbmd0aCB8fCBpc1NjcmlwdExvYWRlZChfdXJsKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgaWYgKGxvYWRWaWFTY3JpcHRUYWcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCk9PntcbiAgICAgICAgICAgIGxldCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICAgICAgICBzY3JpcHQuc3JjID0gX3VybDtcbiAgICAgICAgICAgIHNjcmlwdC5hc3luYyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlKSB7ICAvL0lFXG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImxvYWRlZFwiIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgeyAgLy9PdGhlciBicm93c2Vyc1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcmlwdC5vbmVycm9yID0gKGVycm9yOiBhbnkpID0+IHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSBpZihjYWNoZWFibGUpIHtcbiAgICAgICAgcmV0dXJuICQuYWpheCh7XG4gICAgICAgICAgICBkYXRhVHlwZTogJ3NjcmlwdCcsXG4gICAgICAgICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgIHVybDogdXJsXG4gICAgICAgIH0pLmRvbmUocmVzcG9uc2UgPT4gcmVzcG9uc2UpXG4gICAgICAgICAgICAuZmFpbChyZWFzb24gPT4gcmVhc29uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJC5nZXRTY3JpcHQodXJsKVxuICAgICAgICAgICAgLmRvbmUocmVzcG9uc2UgPT4gcmVzcG9uc2UpXG4gICAgICAgICAgICAuZmFpbChyZWFzb24gPT4gcmVhc29uKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgbG9hZFNjcmlwdHMgPSBhc3luYyAodXJscyA9IFtdLCBsb2FkVmlhU2NyaXB0VGFnID0gdHJ1ZSkgPT4ge1xuICAgIGZvciAoY29uc3QgdXJsIG9mIHVybHMpIHtcbiAgICAgICAgYXdhaXQgbG9hZFNjcmlwdCh1cmwsIGxvYWRWaWFTY3JpcHRUYWcpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59O1xuXG5leHBvcnQgbGV0IF9XTV9BUFBfUFJPSkVDVDogYW55ID0ge307XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZXRzIHNlc3Npb24gc3RvcmFnZSBpdGVtIGJhc2VkIG9uIHRoZSBwcm9qZWN0IElEXG4gKiBAcGFyYW0ga2V5IHN0cmluZ1xuICogQHBhcmFtIHZhbHVlIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvblN0b3JhZ2VJdGVtID0gKGtleSwgdmFsdWUpID0+IHtcbiAgICBsZXQgaXRlbTogYW55ID0gd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oX1dNX0FQUF9QUk9KRUNULmlkKTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICAgIGl0ZW0gPSBKU09OLnBhcnNlKGl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0gPSB7fTtcbiAgICB9XG4gICAgaXRlbVtrZXldID0gdmFsdWU7XG5cbiAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShfV01fQVBQX1BST0pFQ1QuaWQsIEpTT04uc3RyaW5naWZ5KGl0ZW0pKTtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHNlc3Npb24gc3RvcmFnZSBpdGVtIGJhc2VkIG9uIHRoZSBwcm9qZWN0IElEXG4gKiBAcGFyYW0ga2V5IHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZ2V0U2Vzc2lvblN0b3JhZ2VJdGVtID0ga2V5ID0+IHtcbiAgICAvLyBzYW5pdHkgY2hlY2sgZm9yIHRoaXMgdG8gd29yayB3aXRoIG5nLWNvZGVnZW5cbiAgICBsZXQgaXRlbSA9IHdpbmRvdyAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UgJiYgd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oX1dNX0FQUF9QUk9KRUNULmlkKTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICAgIGl0ZW0gPSBKU09OLnBhcnNlKGl0ZW0pO1xuICAgICAgICByZXR1cm4gaXRlbVtrZXldO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBub29wID0gKC4uLmFyZ3MpID0+IHsgfTtcblxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSB2ID0+IF8uaXNBcnJheSh2KTtcblxuZXhwb3J0IGNvbnN0IGlzU3RyaW5nID0gdiA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZyc7XG5cbmV4cG9ydCBjb25zdCBpc051bWJlciA9IHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInO1xuXG5leHBvcnQgY29uc3QgaXNCb29sZWFuID0gdiA9PiB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGJsb2Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGZpbGUgcGF0aFxuICogQHBhcmFtIGZpbGVwYXRoXG4gKiBAcmV0dXJucyBwcm9taXNlIGhhdmluZyBibG9iIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgY29udmVydFRvQmxvYiA9IChmaWxlcGF0aCk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAvLyBSZWFkIHRoZSBmaWxlIGVudHJ5IGZyb20gdGhlIGZpbGUgVVJMXG4gICAgICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwoZmlsZXBhdGgsIGZ1bmN0aW9uIChmaWxlRW50cnkpIHtcbiAgICAgICAgICAgIGZpbGVFbnRyeS5maWxlKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICAgICAgLy8gZmlsZSBoYXMgdGhlIGNvcmRvdmEgZmlsZSBzdHJ1Y3R1cmUuIFRvIHN1Ym1pdCB0byB0aGUgYmFja2VuZCwgY29udmVydCB0aGlzIGZpbGUgdG8gamF2YXNjcmlwdCBmaWxlXG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWdCbG9iID0gbmV3IEJsb2IoW3JlYWRlci5yZXN1bHRdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6IGZpbGUudHlwZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7ICdibG9iJzogaW1nQmxvYiwgJ2ZpbGVwYXRoJzogZmlsZXBhdGggfSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNDb3Jkb3ZhID0gKCkgPT4ge1xuICAgIHJldHVybiAhIXdpbmRvd1snY29yZG92YSddO1xufTtcblxuZXhwb3J0IGNvbnN0IEFwcENvbnN0YW50cyA9IHtcbiAgICBJTlRfTUFYX1ZBTFVFOiAyMTQ3NDgzNjQ3XG59O1xuXG5leHBvcnQgY29uc3Qgb3BlbkxpbmsgPSAobGluazogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyA9ICdfc2VsZicpID0+IHtcbiAgICBpZiAoaGFzQ29yZG92YSgpICYmIF8uc3RhcnRzV2l0aChsaW5rLCAnIycpKSB7XG4gICAgICAgIGxvY2F0aW9uLmhhc2ggPSBsaW5rO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5vcGVuKGxpbmssIHRhcmdldCk7XG4gICAgfVxufTtcblxuLyogdXRpbCBmdW5jdGlvbiB0byBsb2FkIHRoZSBjb250ZW50IGZyb20gYSB1cmwgKi9cbmV4cG9ydCBjb25zdCBmZXRjaENvbnRlbnQgPSAoZGF0YVR5cGUsIHVybDogc3RyaW5nLCBpblN5bmM6IGJvb2xlYW4gPSBmYWxzZSwgc3VjY2Vzcz8sIGVycm9yPyk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuICQuYWpheCh7IHR5cGU6ICdnZXQnLCBkYXRhVHlwZTogZGF0YVR5cGUsIHVybDogdXJsLCBhc3luYzogIWluU3luYyB9KVxuICAgICAgICAuZG9uZShyZXNwb25zZSA9PiBzdWNjZXNzICYmIHN1Y2Nlc3MocmVzcG9uc2UpKVxuICAgICAgICAuZmFpbChyZWFzb24gPT4gZXJyb3IgJiYgZXJyb3IocmVhc29uKSk7XG59O1xuXG4vKipcbiAqIElmIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBwcm9taXNlLCB0aGVuIG9iamVjdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgZ2l2ZW4gb2JqZWN0LlxuICogQHBhcmFtIHtQcm9taXNlPFQ+IHwgVH0gYVxuICogQHJldHVybnMge1Byb21pc2U8VD59XG4gKi9cbmV4cG9ydCBjb25zdCB0b1Byb21pc2UgPSA8VD4oYTogVCB8IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgICBpZiAoYSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhIGFzIFQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpbnZva2VzIHRoZSBnaXZlbiB0aGUgZnVuY3Rpb24gKGZuKSB1bnRpbCB0aGUgZnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzIG9yIHRoZSBtYXhpbXVtIG51bWJlclxuICogb2YgcmV0cmllcyBpcyByZWFjaGVkIG9yIG9uQmVmb3JlUmV0cnkgcmV0dXJucyBmYWxzZS5cbiAqXG4gKiBAcGFyYW0gZm4gLSBhIGZ1bmN0aW9uIHRoYXQgaXMgbmVlZHMgdG8gYmUgaW52b2tlZC4gVGhlIGZ1bmN0aW9uIGNhbiBhbHNvIHJldHVybiBhIHByb21pc2UgYXMgd2VsbC5cbiAqIEBwYXJhbSBpbnRlcnZhbCAtIG1pbmltdW0gdGltZSBnYXAgYmV0d2VlbiBzdWNjZXNzaXZlIHJldHJpZXMuIFRoaXMgYXJndW1lbnQgc2hvdWxkIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMC5cbiAqIEBwYXJhbSBtYXhSZXRyaWVzIC0gbWF4aW11bSBudW1iZXIgb2YgcmV0cmllcy4gVGhpcyBhcmd1bWVudCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAuIEZvciBhbGwgb3RoZXIgdmFsdWVzLFxuICogbWF4UmV0cmllcyBpcyBpbmZpbml0eS5cbiAqIEBwYXJhbSBvbkJlZm9yZVJldHJ5IC0gYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgcmUtaW52b2tpbmcgYWdhaW4uIFRoaXMgZnVuY3Rpb24gY2FuXG4gKiByZXR1cm4gZmFsc2Ugb3IgYSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgdG8gZmFsc2UgdG8gc3RvcCBmdXJ0aGVyIHJldHJ5IGF0dGVtcHRzLlxuICogQHJldHVybnMgeyp9IGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gZm4gaXMgc3VjY2VzcyAob3IpIG1heGltdW0gcmV0cnkgYXR0ZW1wdHMgcmVhY2hlZFxuICogKG9yKSBvbkJlZm9yZVJldHJ5IHJldHVybmVkIGZhbHNlLlxuICovXG5leHBvcnQgY29uc3QgcmV0cnlJZkZhaWxzID0gKGZuOiAoKSA9PiBhbnksIGludGVydmFsOiBudW1iZXIsIG1heFJldHJpZXM6IG51bWJlciwgb25CZWZvcmVSZXRyeSA9ICgpID0+IFByb21pc2UucmVzb2x2ZShmYWxzZSkpID0+IHtcbiAgICBsZXQgcmV0cnlDb3VudCA9IDA7XG4gICAgY29uc3QgdHJ5Rm4gPSAoKSA9PiB7XG4gICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihmbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmbigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBtYXhSZXRyaWVzID0gKF8uaXNOdW1iZXIobWF4UmV0cmllcykgJiYgbWF4UmV0cmllcyA+IDAgPyBtYXhSZXRyaWVzIDogMCk7XG4gICAgaW50ZXJ2YWwgPSAoXy5pc051bWJlcihpbnRlcnZhbCkgJiYgaW50ZXJ2YWwgPiAwID8gaW50ZXJ2YWwgOiAwKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvckZuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZXJyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvUHJvbWlzZTxib29sZWFuPihvbkJlZm9yZVJldHJ5KCkpLnRoZW4oZnVuY3Rpb24gKHJldHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeSAhPT0gZmFsc2UgJiYgKCFtYXhSZXRyaWVzIHx8IHJldHJ5Q291bnQgPD0gbWF4UmV0cmllcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvUHJvbWlzZSh0cnlGbigpKS50aGVuKHJlc29sdmUsIGVycm9yRm4pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVyckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgKCkgPT4gcmVqZWN0KGVyckFyZ3MpKTtcbiAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgfTtcbiAgICAgICAgdG9Qcm9taXNlKHRyeUZuKCkpLnRoZW4ocmVzb2x2ZSwgZXJyb3JGbik7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIFByb21pc2Ugb2YgYSBkZWZlciBjcmVhdGVkIHVzaW5nIHRoaXMgZnVuY3Rpb24sIGhhcyBhYm9ydCBmdW5jdGlvbiB0aGF0IHdpbGwgcmVqZWN0IHRoZSBkZWZlciB3aGVuIGNhbGxlZC5cbiAqIEByZXR1cm5zIHsqfSBhbmd1bGFyIGRlZmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0QWJvcnRhYmxlRGVmZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgX2RlZmVyOiBhbnkgPSB7XG4gICAgICAgIHByb21pc2U6IG51bGwsXG4gICAgICAgIHJlamVjdDogbnVsbCxcbiAgICAgICAgcmVzb2x2ZTogbnVsbCxcbiAgICAgICAgb25BYm9ydDogKCkgPT4geyB9LFxuICAgICAgICBpc0Fib3J0ZWQ6IGZhbHNlXG4gICAgfTtcbiAgICBfZGVmZXIucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgX2RlZmVyLnJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICBfZGVmZXIucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuICAgIF9kZWZlci5wcm9taXNlLmFib3J0ID0gKCkgPT4ge1xuICAgICAgICB0cmlnZ2VyRm4oX2RlZmVyLm9uQWJvcnQpO1xuICAgICAgICBfZGVmZXIucmVqZWN0KCdhYm9ydGVkJyk7XG4gICAgICAgIF9kZWZlci5pc0Fib3J0ZWQgPSB0cnVlO1xuICAgIH07XG4gICAgcmV0dXJuIF9kZWZlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDU1NSdWxlID0gKHJ1bGVTZWxlY3Rvcjogc3RyaW5nLCBydWxlczogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgc3R5bGVzaGVldCA9IGRvY3VtZW50LnN0eWxlU2hlZXRzWzBdO1xuICAgIHN0eWxlc2hlZXQuaW5zZXJ0UnVsZShgJHtydWxlU2VsZWN0b3J9IHsgJHtydWxlc30gfWApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9IChsaW5rKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgLy8gSWYgdXJsIHBhcmFtcyBhcmUgcHJlc2VudCwgY29uc3RydWN0IHBhcmFtcyBvYmplY3QgYW5kIHBhc3MgaXQgdG8gc2VhcmNoXG4gICAgY29uc3QgaW5kZXggPSBsaW5rLmluZGV4T2YoJz8nKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gXy5zcGxpdChsaW5rLnN1YnN0cmluZyhpbmRleCArIDEsIGxpbmsubGVuZ3RoKSwgJyYnKTtcbiAgICAgICAgcXVlcnlQYXJhbXMuZm9yRWFjaCgocGFyYW0pID0+IHtcbiAgICAgICAgICAgIHBhcmFtID0gXy5zcGxpdChwYXJhbSwgJz0nKTtcbiAgICAgICAgICAgIHBhcmFtc1twYXJhbVswXV0gPSBwYXJhbVsxXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Um91dGVOYW1lRnJvbUxpbmsgPSAobGluaykgPT4ge1xuICAgIGxpbmsgPSBsaW5rLnJlcGxhY2UoJyMvJywgJy8nKTtcbiAgICBjb25zdCBpbmRleCA9IGxpbmsuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbGluayA9IGxpbmsuc3Vic3RyaW5nKDAsIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbms7XG59O1xuXG5leHBvcnQgY29uc3QgaXNBcHBsZVByb2R1Y3QgPSAvTWFjfGlQb2R8aVBob25lfGlQYWQvLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSk7XG5cbmV4cG9ydCBjb25zdCBkZWZlciA9ICgpID0+IHtcbiAgICBjb25zdCBkID0ge1xuICAgICAgICBwcm9taXNlOiBudWxsLFxuICAgICAgICByZXNvbHZlOiBub29wLFxuICAgICAgICByZWplY3Q6IG5vb3BcbiAgICB9O1xuICAgIGQucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgZC5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgZC5yZWplY3QgPSByZWplY3Q7XG4gICAgfSk7XG4gICAgcmV0dXJuIGQ7XG59O1xuXG4vKlxuICogSW52b2tlcyB0aGUgZ2l2ZW4gbGlzdCBvZiBmdW5jdGlvbnMgc2VxdWVudGlhbGx5IHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4gSWYgYSBmdW5jdGlvbiByZXR1cm5zIGEgcHJvbWlzZSxcbiAqIHRoZW4gbmV4dCBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25seSBpZiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4ZWN1dGVQcm9taXNlQ2hhaW4gPSAoZm5zLCBhcmdzLCBkPywgaT8pID0+IHtcbiAgICBkID0gZCB8fCBkZWZlcigpO1xuICAgIGkgPSBpIHx8IDA7XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgZm5zID0gXy5maWx0ZXIoZm5zLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIHJldHVybiAhKF8uaXNVbmRlZmluZWQoZm4pIHx8IF8uaXNOdWxsKGZuKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZm5zICYmIGkgPCBmbnMubGVuZ3RoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0b1Byb21pc2UoZm5zW2ldLmFwcGx5KHVuZGVmaW5lZCwgYXJncykpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gZXhlY3V0ZVByb21pc2VDaGFpbihmbnMsIGFyZ3MsIGQsIGkgKyAxKSwgZC5yZWplY3QpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkLnJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGQucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gZC5wcm9taXNlO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgdHdvIGRhdGEgc291cmNlcyBhbmQgd2lsbCBjaGVjayBpZiBib3RoIGFyZSBzYW1lIGJ5IGNvbXBhcmluZyB0aGUgdW5pcXVlIGlkIGFuZFxuICogY29udGV4dCBpbiB3aGljaCBkYXRhc291cmNlcyBhcmUgcHJlc2VudFxuICogQHJldHVybnMgeyp9IGJvb2xlYW4gdHJ1ZS8gZmFsc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRGF0YVNvdXJjZUVxdWFsID0gKGQxLCBkMikgPT4ge1xuICAgIHJldHVybiBkMS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9VTklRVUVfSURFTlRJRklFUikgPT09IGQyLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1VOSVFVRV9JREVOVElGSUVSKSAmJlxuICAgICAgICBfLmlzRXF1YWwoZDEuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfQ09OVEVYVF9JREVOVElGSUVSKSwgZDIuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfQ09OVEVYVF9JREVOVElGSUVSKSk7XG59O1xuXG4vKipcbiAqIGNoZWNrcyBpZiB0aGUgcGFzc2VkIGRhdGFzb3VyY2UgY29udGV4dCBtYXRjaGVzIHdpdGggcGFzc2VkIGNvbnRleHRcbiAqIEBwYXJhbSBkcywgZGF0YXNvdXJjZSBoYXZpbmcgYSBjb250ZXh0XG4gKiBAcGFyYW0gY3R4LCBjb250ZXh0IHRvIGNvbXBhcmUgd2l0aFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZURhdGFTb3VyY2VDdHggPSAoZHMsIGN0eCkgPT4ge1xuICAgIHJldHVybiBkcy5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9DT05URVhUX0lERU5USUZJRVIpID09PSBjdHg7XG59O1xuXG4vKipcbiAqIFRoaXMgdHJhdmVyc2VzIHRoZSBmaWx0ZXJleHByZXNzaW9ucyBvYmplY3QgcmVjdXJzaXZlbHkgYW5kIHByb2Nlc3MgdGhlIGJpbmQgc3RyaW5nIGlmIGFueSBpbiB0aGUgb2JqZWN0XG4gKiBAcGFyYW0gdmFyaWFibGUgdmFyaWFibGUgb2JqZWN0XG4gKiBAcGFyYW0gbmFtZSBuYW1lIG9mIHRoZSB2YXJpYWJsZVxuICogQHBhcmFtIGNvbnRleHQgc2NvcGUgb2YgdGhlIHZhcmlhYmxlXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9jZXNzRmlsdGVyRXhwQmluZE5vZGUgPSAoY29udGV4dCwgZmlsdGVyRXhwcmVzc2lvbnMsIHZhcmlhYmxlPykgPT4ge1xuICAgIGNvbnN0IGRlc3Ryb3lGbiA9IGNvbnRleHQucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIgPyBjb250ZXh0LnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyLmJpbmQoY29udGV4dCkgOiBfLm5vb3A7XG4gICAgY29uc3QgZmlsdGVyJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdCBiaW5kRmlsRXhwT2JqID0gKG9iaiwgdGFyZ2V0Tm9kZUtleSkgPT4ge1xuICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKG5ld1ZhbCwgb2xkVmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAoKG5ld1ZhbCA9PT0gb2xkVmFsICYmIF8uaXNVbmRlZmluZWQobmV3VmFsKSkgfHwgKF8uaXNVbmRlZmluZWQobmV3VmFsKSAmJiAhXy5pc1VuZGVmaW5lZChvbGRWYWwpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNraXAgY2xvbmluZyBmb3IgYmxvYiBjb2x1bW5cbiAgICAgICAgICAgIGlmICghXy5pbmNsdWRlcyhbJ2Jsb2InLCAnZmlsZSddLCBvYmoudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWwgPSBnZXRDbG9uZWRPYmplY3QobmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IHdoZXJlIHdlIGFyZSBhbGxvd2luZyB0aGUgdXNlciB0byBiaW5kIGNvbXBsZXRlIG9iamVjdFxuICAgICAgICAgICAgaWYgKG9iai50YXJnZXQgPT09ICdkYXRhQmluZGluZycpIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGV4aXN0aW5nIGRhdGFiaW5kaW5nIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcyA9IFtdO1xuICAgICAgICAgICAgICAgIC8vIG5vdyBhZGQgYWxsIHRoZSByZXR1cm5lZCB2YWx1ZXNcbiAgICAgICAgICAgICAgICBfLmZvckVhY2gobmV3VmFsLCBmdW5jdGlvbiAodmFsdWUsIHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd0YXJnZXQnOiB0YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdtYXRjaE1vZGUnOiBvYmoubWF0Y2hNb2RlIHx8ICdzdGFydGlnbm9yZWNhc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICcnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzZXR0aW5nIHZhbHVlIHRvIHRoZSByb290IG5vZGVcbiAgICAgICAgICAgICAgICBvYmpbdGFyZ2V0Tm9kZUtleV0gPSBuZXdWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXIkLm5leHQoeyBmaWx0ZXJFeHByZXNzaW9ucywgbmV3VmFsIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGgob2JqW3RhcmdldE5vZGVLZXldLCAnYmluZDonKSkge1xuICAgICAgICAgICAgLy8gW1RvZG8tQ1NQXTogbmVlZHMgYSBjaGVjaywgd2hlcmUgaXMgdGhpcyB1c2VkXG4gICAgICAgICAgICBkZXN0cm95Rm4oXG4gICAgICAgICAgICAgICAgJHdhdGNoKG9ialt0YXJnZXROb2RlS2V5XS5yZXBsYWNlKCdiaW5kOicsICcnKSwgY29udGV4dCwge30sIHZhcmlhYmxlID8gdmFyaWFibGUuaW52b2tlT25GaWx0ZXJ0RXhwcmVzc2lvbkNoYW5nZS5iaW5kKHZhcmlhYmxlLCBvYmosIHRhcmdldE5vZGVLZXkpIDogbGlzdGVuZXIsIHVuZGVmaW5lZCwgZmFsc2UsIHsgYXJyYXlUeXBlOiBfLmluY2x1ZGVzKFsnaW4nLCAnbm90aW4nXSwgb2JqLm1hdGNoTW9kZSkgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdHJhdmVyc2VGaWx0ZXJFeHByZXNzaW9ucyA9IGV4cHJlc3Npb25zID0+IHtcbiAgICAgICAgaWYgKGV4cHJlc3Npb25zLnJ1bGVzKSB7XG4gICAgICAgICAgICBfLmZvckVhY2goZXhwcmVzc2lvbnMucnVsZXMsIChmaWxFeHBPYmosIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsRXhwT2JqLnJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYXZlcnNlRmlsdGVyRXhwcmVzc2lvbnMoZmlsRXhwT2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsRXhwT2JqLm1hdGNoTW9kZSA9PT0gJ2JldHdlZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kRmlsRXhwT2JqKGZpbEV4cE9iaiwgJ3NlY29uZHZhbHVlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYmluZEZpbEV4cE9iaihmaWxFeHBPYmosICd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0cmF2ZXJzZUZpbHRlckV4cHJlc3Npb25zKGZpbHRlckV4cHJlc3Npb25zKTtcblxuICAgIHJldHVybiBmaWx0ZXIkO1xufTtcblxuLy8gVGhpcyBtZXRob2Qgd2lsbCBzZXQgdGhlIGdpdmVuIHByb3RvIG9uIHRoZSB0YXJnZXRcbmV4cG9ydCBjb25zdCBleHRlbmRQcm90byA9ICh0YXJnZXQsIHByb3RvKSA9PiB7XG4gICAgbGV0IF9wcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpO1xuICAgIHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3Byb3RvKS5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgICAgIF9wcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihfcHJvdG8pO1xuICAgICAgICAvLyByZXR1cm4gaWYgdGhlIHByb3RvdHlwZSBvZiBjcmVhdGVkIGNvbXBvbmVudCBhbmQgcHJvdG90eXBlIG9mIGNvbnRleHQgYXJlIHNhbWVcbiAgICAgICAgaWYgKHByb3RvID09PSBfcHJvdG8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3Byb3RvLCBwcm90byk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlRXh0cmFTbGFzaGVzID0gZnVuY3Rpb24gKHVybCkge1xuICAgIGNvbnN0IGJhc2U2NHJlZ2V4ID0gL15kYXRhOmltYWdlXFwvKFthLXpdezIsfSk7YmFzZTY0LC87XG4gICAgaWYgKF8uaXNTdHJpbmcodXJsKSkge1xuICAgICAgICAvKlxuICAgICAgICAqIHN1cHBvcnQgZm9yIG1vYmlsZSBhcHBzIGhhdmluZyBsb2NhbCBmaWxlIHBhdGggdXJsIHN0YXJ0aW5nIHdpdGggZmlsZTovLy8gYW5kXG4gICAgICAgICogc3VwcG9ydCBmb3IgYmFzZTY0IGZvcm1hdFxuICAgICAgICAqICovXG4gICAgICAgIGlmIChfLnN0YXJ0c1dpdGgodXJsLCAnZmlsZTovLy8nKSB8fCBiYXNlNjRyZWdleC50ZXN0KHVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKG5ldyBSZWdFeHAoJyhbXjpdXFwvKShcXC8pKycsICdnJyksICckMScpO1xuICAgIH1cbn07XG5cbiQuY2FjaGVkU2NyaXB0ID0gKCgpID0+IHtcbiAgICBjb25zdCBpblByb2dyZXNzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IHJlc29sdmVkID0gbmV3IFNldCgpO1xuXG4gICAgY29uc3QgaXNJblByb2dyZXNzID0gdXJsID0+IGluUHJvZ3Jlc3MuaGFzKHVybCk7XG4gICAgY29uc3QgaXNSZXNvbHZlZCA9IHVybCA9PiByZXNvbHZlZC5oYXModXJsKTtcbiAgICBjb25zdCBvbkxvYWQgPSB1cmwgPT4ge1xuICAgICAgICByZXNvbHZlZC5hZGQodXJsKTtcbiAgICAgICAgaW5Qcm9ncmVzcy5nZXQodXJsKS5yZXNvbHZlKCk7XG4gICAgICAgIGluUHJvZ3Jlc3MuZGVsZXRlKHVybCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldEluUHJvZ3Jlc3MgPSB1cmwgPT4ge1xuICAgICAgICBsZXQgcmVzRm47XG4gICAgICAgIGxldCByZWpGbjtcbiAgICAgICAgY29uc3QgcHJvbWlzZTogYW55ID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICByZXNGbiA9IHJlcztcbiAgICAgICAgICAgIHJlakZuID0gcmVqO1xuICAgICAgICB9KTtcblxuICAgICAgICBwcm9taXNlLnJlc29sdmUgPSByZXNGbjtcbiAgICAgICAgcHJvbWlzZS5yZWplY3QgPSByZWpGbjtcblxuICAgICAgICBpblByb2dyZXNzLnNldCh1cmwsIHByb21pc2UpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHVybCkge1xuICAgICAgICBpZiAoaXNSZXNvbHZlZCh1cmwpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNJblByb2dyZXNzKHVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpblByb2dyZXNzLmdldCh1cmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0SW5Qcm9ncmVzcyh1cmwpO1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBkYXRhVHlwZTogJ3NjcmlwdCcsXG4gICAgICAgICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgIHVybFxuICAgICAgICB9O1xuXG4gICAgICAgICQuYWpheChvcHRpb25zKS5kb25lKCgpID0+IG9uTG9hZCh1cmwpKTtcblxuICAgICAgICByZXR1cm4gaW5Qcm9ncmVzcy5nZXQodXJsKTtcbiAgICB9O1xufSkoKTtcblxuY29uc3QgREVGQVVMVF9ESVNQTEFZX0ZPUk1BVFMgPSB7XG4gICAgREFURTogJ3l5eXktTU0tZGQnLFxuICAgIFRJTUU6ICdoaDptbSBhJyxcbiAgICBUSU1FU1RBTVA6ICd5eXl5LU1NLWRkIGhoOm1tOnNzIGEnLFxuICAgIERBVEVUSU1FOiAneXl5eS1NTS1kZCBoaDptbTpzcyBhJyxcbn07XG4vLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBkaXNwbGF5IGRhdGUgZm9ybWF0IGZvciBnaXZlbiB0eXBlXG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheURhdGVUaW1lRm9ybWF0ID0gdHlwZSA9PiB7XG4gICAgcmV0dXJuIERFRkFVTFRfRElTUExBWV9GT1JNQVRTW18udG9VcHBlcih0eXBlKV07XG59O1xuXG4vLyBHZW5lcmF0ZSBmb3IgYXR0cmlidXRlIG9uIGxhYmVsIGFuZCBJRCBvbiBpbnB1dCBlbGVtZW50LCBzbyB0aGF0IGxhYmVsIGVsZW1lbnRzIGFyZSBhc3NvY2lhdGVkIHRvIGZvcm0gY29udHJvbHNcbmV4cG9ydCBjb25zdCBhZGRGb3JJZEF0dHJpYnV0ZXMgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBsYWJlbEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdsYWJlbC5jb250cm9sLWxhYmVsJyk7XG4gICAgbGV0IGlucHV0RWwgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tmb2N1cy10YXJnZXRdJyk7XG4gICAgaWYgKCFpbnB1dEVsLmxlbmd0aCkge1xuICAgICAgICBpbnB1dEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpO1xuICAgIH1cbiAgICAvKmlmIHRoZXJlIGFyZSBvbmx5IG9uZSBpbnB1dCBlbCBhbmQgbGFiZWwgRWwgYWRkIGlkIGFuZCBmb3IgYXR0cmlidXRlKi9cbiAgICBpZiAobGFiZWxFbC5sZW5ndGggJiYgaW5wdXRFbC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0SWQgPSAkKGlucHV0RWxbMF0gYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ1t3aWRnZXQtaWRdJykuYXR0cignd2lkZ2V0LWlkJyk7XG4gICAgICAgIGlmICh3aWRnZXRJZCkge1xuICAgICAgICAgICAgc2V0QXR0cihpbnB1dEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnaWQnLCB3aWRnZXRJZCk7XG4gICAgICAgICAgICBzZXRBdHRyKGxhYmVsRWxbMF0gYXMgSFRNTEVsZW1lbnQsICdmb3InLCB3aWRnZXRJZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLypBZGRpbmcgYXJpYS1sYWJlbGxlZGJ5IHRvIHJhZGlvc2V0LCBjaGVja2JveHNldCB3aWRnZXRzKi9cbiAgICBjb25zdCB1bEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd1bCcpO1xuICAgIGlmIChsYWJlbEVsLmxlbmd0aCAmJiB1bEVsLmxlbmd0aCAmJiAodWxFbFswXS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3JhZGlvZ3JvdXAnIHx8IHVsRWxbMF0uZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICdncm91cCcpKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldElkID0gJ3dtLWdyb3VwLWxhYmVsLScgKyBnZW5lcmF0ZUdVSWQoKTtcbiAgICAgICAgc2V0QXR0cih1bEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnYXJpYS1sYWJlbGxlZGJ5Jywgd2lkZ2V0SWQpO1xuICAgICAgICBzZXRBdHRyKGxhYmVsRWxbMF0gYXMgSFRNTEVsZW1lbnQsICdpZCcsIHdpZGdldElkKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRqdXN0IHRoZSBjb250YWluZXIgcG9zaXRpb25cbiAqIEZvciBleGFtcGxlOiAxLiBXaGVuIGRhdGVwaWNrZXIgY29udHJvbCBwbGFjZWQgY2xvc2VkIHRvIHRoZSBzY3JlZW4gbGVmdCBlZGdlcywgaXQgaXMgZ29pbmcgdG8gbmVnYXRpdmUgdmFsdWVzIHdoaWNoIGlzICBjdXR0aW5nIHRoZSBjb250YWluZXIuXG4gKiBUbyBGaXggdGhlIGNvbnRhaW5lciBvdmVybGFwcGluZyBpc3N1ZSBjaGFuZ2luZyB0aGUgY29udHJhaW5lciBsZWZ0IHRyYW5zbGF0aW9uIHRvIDBcbiAqIEBwYXJhbSBjb250YWluZXJFbGVtIC0gcGlja2VyL2Ryb3Bkb3duIGNvbnRhaW5lciBlbGVtZW50KGpxdWVyeSlcbiAqIEBwYXJhbSBwYXJlbnRFbGVtIC0gd2lkZ2V0IG5hdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gcmVmIC0gc2NvcGUgb2YgcGFydGljdWxhciBsaWJyYXJ5IGRpcmVjdGl2ZVxuICogQHBhcmFtIGVsZSAtIENoaWxkIGVsZW1lbnQoanF1ZXJ5KS4gRm9yIHNvbWUgb2YgdGhlIHdpZGdldHModGltZSwgc2VhcmNoKSBjb250YWluZXJFbGVtIGRvZXNuJ3QgaGF2ZSBoZWlnaHQuIFRoZSBpbm5lciBlbGVtZW50KGRyb3Bkb3duLW1lbnUpIGhhcyBoZWlnaHQgc28gcGFzc2luZyBpdCBhcyBvcHRpb25hbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFkanVzdENvbnRhaW5lclBvc2l0aW9uID0gKGNvbnRhaW5lckVsZW0sIHBhcmVudEVsZW0sIHJlZiwgZWxlPykgPT4ge1xuICAgIGNvbnN0IHpvbmVSZWYgPSByZWYuX25nWm9uZSB8fCByZWYubmdab25lO1xuICAgIHpvbmVSZWYub25TdGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zID0gZ2V0V2Via2l0VHJhc2xhdGlvbk1hdHJpeChjb250YWluZXJFbGVtKTtcbiAgICAgICAgaWYgKGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgPCAwKSB7XG4gICAgICAgICAgICAgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MSA9IDA7XG4gICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgIH1cbiAgICAgICAgIHNldFRyYW5zbGF0aW9uM2RQb3NpdGlvbihjb250YWluZXJFbGVtLCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMpO1xuICAgICB9KTtcbiAgIH07XG5cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkanVzdCB0aGUgY29udGFpbmVyIHBvc2l0aW9uXG4gKiBGb3IgZXhhbXBsZTogMS4gV2hlbiBkYXRlcGlja2VyIGNvbnRyb2wgcGxhY2VkIGNsb3NlZCB0byB0aGUgc2NyZWVuIHJpZ2h0IGVkZ2VzLCBpdCBpcyBnb2luZyB0byBvdXQgb2YgdGhlIHZpZXdwb3J0IHZhbHVlcyB3aGljaCBpcyAgY3V0dGluZyB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIGNvbnRhaW5lckVsZW0gIHBpY2tlci9kcm9wZG93biBjb250YWluZXIgZWxlbWVudChqcXVlcnkpXG4gKiBAcGFyYW0gcGFyZW50RWxlbSB3aWRnZXQgbmF0aXZlIGVsZW1lbnRcbiAqIEBwYXJhbSByZWYgIHNjb3BlIG9mIHBhcnRpY3VsYXIgbGlicmFyeSBkaXJlY3RpdmVcbiAqIEBwYXJhbSBlbGUgQ2hpbGQgZWxlbWVudChqcXVlcnkpLiBGb3Igc29tZSBvZiB0aGUgd2lkZ2V0cyh0aW1lLCBzZWFyY2gpIGNvbnRhaW5lckVsZW0gZG9lc24ndCBoYXZlIGhlaWdodC4gVGhlIGlubmVyIGVsZW1lbnQoZHJvcGRvd24tbWVudSkgaGFzIGhlaWdodCBzbyBwYXNzaW5nIGl0IGFzIG9wdGlvbmFsLlxuICovXG4gICBleHBvcnQgY29uc3QgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyA9IChjb250YWluZXJFbGVtLCBwYXJlbnRFbGVtLCByZWYsIGVsZT8pID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBlbGUgPyBfLnBhcnNlSW50KGVsZS5jc3MoJ3dpZHRoJykpIDogXy5wYXJzZUludChjb250YWluZXJFbGVtLmNzcygnd2lkdGgnKSk7XG4gICAgICAgIGNvbnN0IHZpZXdQb3J0V2lkdGggPSAkKHdpbmRvdykud2lkdGgoKSArIHdpbmRvdy5zY3JvbGxYO1xuICAgICAgICBjb25zdCBwYXJlbnREaW1lc2lvbiA9IHBhcmVudEVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHBhcmVudFJpZ2h0ID0gcGFyZW50RGltZXNpb24ucmlnaHQgKyB3aW5kb3cuc2Nyb2xsWDtcbiAgICAgICAgbGV0IG5ld0xlZnQ7XG4gICAgICAgIGNvbnN0IHpvbmVSZWYgPSByZWYuX25nWm9uZSB8fCByZWYubmdab25lO1xuICAgICAgICB6b25lUmVmLm9uU3RhYmxlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMgPSBnZXRXZWJraXRUcmFzbGF0aW9uTWF0cml4KGNvbnRhaW5lckVsZW0pO1xuXG4gICAgICAgICAgICBpZiAodmlld1BvcnRXaWR0aCAtIChwYXJlbnRSaWdodCArIHBhcmVudERpbWVzaW9uLndpZHRoKSA8IGNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICAgICAgbmV3TGVmdCA9IHBhcmVudFJpZ2h0IC0gY29udGFpbmVyV2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0xlZnQgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0xlZnQgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQxID0gbmV3TGVmdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0VHJhbnNsYXRpb24zZFBvc2l0aW9uKGNvbnRhaW5lckVsZW0sIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgfTtcblxuICAvKipcbiAgICogRm9yIGdpdmVuIGVsZW1lbnQgc2V0IHRoZSB0cmFzbGF0aW9uXG4gICAqIEBwYXJhbSBjb250YWluZXJFbGVtIHRhbnNsYXRlZCBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMgdHJhbnNsYXRlIG1hdHJpeCBwb3NpdGlvbnNcbiAgICovXG4gICBleHBvcnQgY29uc3Qgc2V0VHJhbnNsYXRpb24zZFBvc2l0aW9uID0gKGNvbnRhaW5lckVsZW0sIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGVQb3NpdGlvbiA9ICd0cmFuc2xhdGUzZCgnICsgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MSArICdweCwgJyArIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDIgKyAncHgsIDBweCknO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLk1velRyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLm1zVHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUuT1RyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgfTtcblxuICAgLyoqXG4gICAgKlxuICAgICogQHBhcmFtIGNvbnRhaW5lckVsZW0gZWxlbWV0IGZvciB0aGUgV2ViS2l0Q1NTTWF0cml4XG4gICAgKi9cbiAgICBleHBvcnQgY29uc3QgZ2V0V2Via2l0VHJhc2xhdGlvbk1hdHJpeCA9IChjb250YWluZXJFbGVtKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgV2ViS2l0Q1NTTWF0cml4ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNU0NTU01hdHJpeCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXJFbGVtWzBdKS50cmFuc2Zvcm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgV2ViS2l0Q1NTTWF0cml4KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbnRhaW5lckVsZW1bMF0pLndlYmtpdFRyYW5zZm9ybSk7XG4gICAgfVxuXG4vLyBjbG9zZSBhbGwgdGhlIHBvcG92ZXJzLlxuZXhwb3J0IGNvbnN0IGNsb3NlUG9wb3ZlciA9IChlbGVtZW50KSA9PiB7XG4gICAgaWYgKCFlbGVtZW50LmNsb3Nlc3QoJy5hcHAtcG9wb3ZlcicpLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBwb3BvdmVyRWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXBwLXBvcG92ZXItd3JhcHBlcicpO1xuICAgICAgICBfLmZvckVhY2gocG9wb3ZlckVsZW1lbnRzLCAoZWxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlLndpZGdldC5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICBlbGUud2lkZ2V0LmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBpbiB0aGUgYXBwXG4gKiBUaGlzIGlzIGV4cG9zZWQgZm9yIHRoZSBlbmQgdXNlciBkZXZlbG9wZXIgb2YgV00gYXBwXG4gKiBUaGlzIGlzIHRoZSBhbHRlcm5hdGl2ZSBmb3IgJHJzLiRzYWZlQXBwbHkoKSBpbiBBbmd1bGFySlNcbiAqIFNlZSAkYXBwRGlnZXN0IGluIHV0aWxzIGZvciBtb3JlIGluZm9cbiAqL1xuZXhwb3J0IGNvbnN0IGRldGVjdENoYW5nZXMgPSAkYXBwRGlnZXN0O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIHRyaWdnZXIgdGhlIGFjdGlvbi9saW5rIG9mIG1lbnUvbmF2IGl0ZW1cbiAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIG9mIHRoZSB3aWRnZXRcbiAqIEBwYXJhbSBpdGVtIC0gaXRlbSBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IHRyaWdnZXJJdGVtQWN0aW9uID0gKHNjb3BlLCBpdGVtKSA9PiB7XG4gICAgbGV0IGl0ZW1MaW5rID0gaXRlbS5saW5rO1xuICAgIGNvbnN0IGl0ZW1BY3Rpb24gPSBpdGVtLmFjdGlvbjtcbiAgICBjb25zdCBsaW5rVGFyZ2V0ID0gaXRlbS50YXJnZXQ7XG4gICAgaWYgKGl0ZW1BY3Rpb24pIHtcbiAgICAgICAgaWYgKCFzY29wZS5pdGVtQWN0aW9uRm4pIHtcbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogVGhpcyB3aWxsIG5vdCB3b3JrIGFzIGZ1bmN0aW9uIHdpbGwgYmUgZHluYW1pY1xuICAgICAgICAgICAgc2NvcGUuaXRlbUFjdGlvbkZuID0gJHBhcnNlRXZlbnQoaXRlbUFjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBzY29wZS5pdGVtQWN0aW9uRm4oc2NvcGUudXNlckRlZmluZWRFeGVjdXRpb25Db250ZXh0LCBPYmplY3QuY3JlYXRlKGl0ZW0pKTtcbiAgICB9XG4gICAgaWYgKGl0ZW1MaW5rKSB7XG4gICAgICAgIGlmIChpdGVtTGluay5zdGFydHNXaXRoKCcjLycpICYmICghbGlua1RhcmdldCB8fCBsaW5rVGFyZ2V0ID09PSAnX3NlbGYnKSkge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBnZXRVcmxQYXJhbXMoaXRlbUxpbmspO1xuICAgICAgICAgICAgaXRlbUxpbmsgPSBnZXRSb3V0ZU5hbWVGcm9tTGluayhpdGVtTGluayk7XG4gICAgICAgICAgICBjb25zdCByb3V0ZXIgPSBfLmdldChzY29wZSwgJ3JvdXRlJykgfHwgXy5nZXQoc2NvcGUsICdtZW51UmVmLnJvdXRlJyk7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoW2l0ZW1MaW5rXSwgeyBxdWVyeVBhcmFtcyB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wZW5MaW5rKGl0ZW1MaW5rLCBsaW5rVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gZ2V0IGRhdHNvdXJjZSBmcm9tIHRoZSBleHByZXNzaW9uXG4gKiBAcGFyYW0gZXhwciAtIGV4cHJlc3Npb24gb2YgdGhlIGRhdGFzZXRcbiAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIG9mIHRoZSB3aWRnZXRcbiAqIEV4YW1wbGUxOiBleHByIC0gXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0LmRldGFpbHNbJGldLmFkZHJlc3Nlc1wiIHRoZW4gdGhlIG1ldGhvZCB3aWxsIHJldHVybiBkYXRhc291cmNlIGFzIFZhcmlhYmxlcy5zdGF0aWNWYXIxXG4gKiBFeGFtcGxlMjogZXhwciAtIFwiV2lkZ2V0cy5saXN0MS5jdXJyZW50SXRlbS5hZGRyZXNzZXNcIiBhbmQgbGlzdDEgaXMgYm91bmQgdG8gXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0LmRldGFpbHNcIiB0aGVuIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gZGF0YXNvdXJjZSBhcyBWYXJpYWJsZXMuc3RhdGljVmFyMVxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNvdXJjZUZyb21FeHByID0gKGV4cHIsIHNjb3BlKSA9PiB7XG4gICAgY29uc3QgaXNCb3VuZFRvVmFyaWFibGUgPSBfLnN0YXJ0c1dpdGgoZXhwciwgJ1ZhcmlhYmxlcy4nKTtcbiAgICBjb25zdCBpc0JvdW5kVG9XaWRnZXQgPSBfLnN0YXJ0c1dpdGgoZXhwciwgJ1dpZGdldHMuJyk7XG4gICAgY29uc3QgcGFydHMgPSBleHByLnNwbGl0KCcuJyk7XG4gICAgaWYgKGlzQm91bmRUb1ZhcmlhYmxlKSB7XG4gICAgICAgIHJldHVybiBfLmdldChzY29wZS52aWV3UGFyZW50LlZhcmlhYmxlcywgcGFydHNbMV0pO1xuICAgIH1cbiAgICBpZiAoaXNCb3VuZFRvV2lkZ2V0KSB7XG4gICAgICAgIGNvbnN0IHdpZGdldFNjb3BlID0gXy5nZXQoc2NvcGUudmlld1BhcmVudC5XaWRnZXRzLCBwYXJ0c1sxXSk7XG4gICAgICAgIGNvbnN0IHdpZGdldERhdGFzZXRCb3VuZEV4cHIgPSB3aWRnZXRTY29wZS4kYXR0cnMuZ2V0KCdkYXRhc2V0Ym91bmRleHByJyk7XG4gICAgICAgIGxldCB3aWRnZXRCb3VuZEV4cHJlc3Npb247XG4gICAgICAgIHdpZGdldEJvdW5kRXhwcmVzc2lvbiA9ICghd2lkZ2V0U2NvcGUuZGF0YXNvdXJjZSAmJiB3aWRnZXREYXRhc2V0Qm91bmRFeHByKSA/IHdpZGdldERhdGFzZXRCb3VuZEV4cHIgOiB3aWRnZXRTY29wZS5iaW5kZGF0YXNldDtcbiAgICAgICAgcmV0dXJuIGdldERhdGFzb3VyY2VGcm9tRXhwcih3aWRnZXRCb3VuZEV4cHJlc3Npb24sIHdpZGdldFNjb3BlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIGdldCBkYXRhc2V0IGJvdW5kIGV4cHJlc3Npb24gZnJvbSBsaXN0IGN1cnJlbnRpdGVtIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBleHByIC0gYm91bmQgZGF0YXNldCBleHByZXNzaW9uXG4gKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgd2lkZ2V0XG4gKiBFeGFtcGxlMTogZXhwciAtIFwiV2lkZ2V0cy5saXN0MS5jdXJyZW50SXRlbS5kZXRhaWxzXCIgYW5kIGxpc3QxIGlzIGJvdW5kIHRvIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldFwiIHRoZW4gaXQgcmV0dXJucyBleHByZXNzaW9uIGFzIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldFskaV0uZGV0YWlsc1wiXG4gKi9cbmV4cG9ydCBjb25zdCBleHRyYWN0Q3VycmVudEl0ZW1FeHByID0gKGV4cHIsIHNjb3BlKSA9PiB7XG4gICAgY29uc3QgY3VycmVudEl0ZW1SZWdFeCA9IC9eV2lkZ2V0c1xcLi4qXFwuY3VycmVudEl0ZW0vZztcbiAgICBpZiAoY3VycmVudEl0ZW1SZWdFeC50ZXN0KGV4cHIpKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gZXhwci5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCB3aWRnZXRTY29wZSA9IF8uZ2V0KHNjb3BlLnZpZXdQYXJlbnQuV2lkZ2V0cywgcGFydHNbMV0pO1xuICAgICAgICBjb25zdCB3aWRnZXREYXRhc2V0Qm91bmRFeHByID0gd2lkZ2V0U2NvcGUuJGF0dHJzLmdldCgnZGF0YXNldGJvdW5kZXhwcicpO1xuICAgICAgICBpZiAoIXdpZGdldFNjb3BlLmRhdGFzb3VyY2UgJiYgd2lkZ2V0RGF0YXNldEJvdW5kRXhwcikge1xuICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgvXldpZGdldHNcXC4uKlxcLmN1cnJlbnRJdGVtL2csIGAke3dpZGdldERhdGFzZXRCb3VuZEV4cHJ9WyRpXWApO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhY3RDdXJyZW50SXRlbUV4cHIoZXhwciwgc2NvcGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgvXldpZGdldHNcXC4uKlxcLmN1cnJlbnRJdGVtL2csIGAke3dpZGdldFNjb3BlLmJpbmRkYXRhc2V0fVskaV1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwcjtcbn07XG5cbi8vIHRoaXMgd2lsbCBhZGQgdGhlIGh0bWwgdGFnIHRvIHRoZSB3aWRnZXQgdG8gc2NvcGUgdGhlIGNzcyB0byB0aGUgcGFnZS5cbmV4cG9ydCBjb25zdCBmaW5kUm9vdENvbnRhaW5lciA9ICgkZWwpID0+IHtcbiAgICBsZXQgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXByZWZhYicpO1xuICAgIGlmICghcm9vdC5sZW5ndGgpIHtcbiAgICAgICAgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXBhcnRpYWwnKTtcbiAgICB9XG4gICAgaWYoIXJvb3QubGVuZ3RoKSB7XG4gICAgICAgIHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1zcGEtcGFnZScpO1xuICAgIH1cbiAgICBpZiAoIXJvb3QubGVuZ3RoKSB7XG4gICAgICAgIHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1wYWdlJyk7XG4gICAgfVxuICAgIHJldHVybiByb290Lmxlbmd0aCAmJiByb290LnBhcmVudCgpWzBdLnRhZ05hbWU7XG59O1xuXG5leHBvcnQgY29uc3QgVkFMSURBVE9SID0ge1xuICAgIFJFUVVJUkVEOiAncmVxdWlyZWQnLFxuICAgIE1BWENIQVJTOiAnbWF4Y2hhcnMnLFxuICAgIE1JTlZBTFVFOiAnbWludmFsdWUnLFxuICAgIE1BWFZBTFVFOiAnbWF4dmFsdWUnLFxuICAgIFJFR0VYUDogJ3JlZ2V4cCcsXG4gICAgTUlOREFURTogJ21pbmRhdGUnLFxuICAgIE1BWERBVEU6ICdtYXhkYXRlJyxcbiAgICBNSU5USU1FOiAnbWludGltZScsXG4gICAgTUFYVElNRTogJ21heHRpbWUnLFxuICAgIEVYQ0xVREVEQVRFUzogJ2V4Y2x1ZGVkYXRlcycsXG4gICAgRVhDTFVERURBWVM6ICdleGNsdWRlZGF5cydcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1GaWxlVVJJID0gKHVybCkgPT4ge1xuICAgIGlmICh1cmwgJiYgaGFzQ29yZG92YSgpICYmIHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgnZmlsZTovLycsICcvX2FwcF9maWxlXycpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQW5kcm9pZCgpICYmIGxvY2F0aW9uLmhyZWYuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoY29yZG92YS5maWxlLmFwcGxpY2F0aW9uRGlyZWN0b3J5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cmwucmVwbGFjZShjb3Jkb3ZhLmZpbGUuYXBwbGljYXRpb25EaXJlY3RvcnkgKyAnd3d3JywgJycpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1cmwuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKCdmaWxlOi8vJywgJy9fYXBwX2ZpbGVfJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn07XG5cbmV4cG9ydCBjb25zdCBhcHBlbmRTY3JpcHRUb0hlYWQgPSAoY2FsbGJhY2spID0+e1xuXG4gICAgY29uc3Qgc2NyaXB0ZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgc2NyaXB0ZWxlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgY2FsbGJhY2soV01fQ1VTVE9NX0ZPUk1BVFRFUlMpO1xuICAgIH07XG4gICAgc2NyaXB0ZWxlLm9uZXJyb3IgPSBlcnIgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIHdoaWxlIGxvYWRpbmcgdGhlIGZpbGUgJyArIHNjcmlwdGVsZS5zcmMgKyAnXFxuJyArIGVycik7XG4gICAgfTtcbiAgICBzY3JpcHRlbGUudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgIHNjcmlwdGVsZS5zcmMgPSAnLi9leHRlbnNpb25zL2Zvcm1hdHRlcnMuanMnO1xuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0ZWxlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBTZXR0aW5nID0gKGtleSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIChfV01fQVBQX1BST1BFUlRJRVMuZXh0cmFfc2V0dGluZ3MgJiYgXy5nZXQoX1dNX0FQUF9QUk9QRVJUSUVTLmV4dHJhX3NldHRpbmdzLCBrZXkpKSB8fCBkZWZhdWx0VmFsdWU7XG59O1xuXG4vKiB0aGlzIGZ1bmN0aW9uIHNldHMgdGhlIGl0ZW1jbGFzcyBkZXBlbmRpbmcgb24gaXRlbXNwZXJyb3cuXG4gICAqIGlmIGl0ZW1zcGVycm93IGlzIDIgZm9yIGxhcmdlIGRldmljZSwgdGhlbiBpdGVtY2xhc3MgaXMgJ2NvbC14cy0xIGNvbC1zbS0xIGNvbC1sZy0yJ1xuICAgKiBpZiBpdGVtc3BlcnJvdyBpcyAnbGctMycgdGhlbiBpdGVtY2xhc3MgaXMgJ2NvbC1sZy0zJ1xuKi9cbmV4cG9ydCBjb25zdCBzZXRMaXN0Q2xhc3MgPSAoc2NvcGUpID0+IHtcbiAgICBsZXQgdGVtcCA9ICcnO1xuICAgIGlmIChzY29wZS5pdGVtc3BlcnJvdykge1xuICAgICAgICBpZiAoaXNOYU4ocGFyc2VJbnQoc2NvcGUuaXRlbXNwZXJyb3csIDEwKSkpIHtcbiAgICAgICAgICAgIC8vIGhhbmRsaW5nIGl0ZW1zcGVycm93IGNvbnRhaW5pbmcgc3RyaW5nIG9mIGNsYXNzZXNcbiAgICAgICAgICAgIF8uc3BsaXQoc2NvcGUuaXRlbXNwZXJyb3csICcgJykuZm9yRWFjaCgoY2xzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gXy5zcGxpdChjbHMsICctJyk7XG4gICAgICAgICAgICAgICAgY2xzID0gYCR7a2V5c1swXX0tJHsoMTIgLyBwYXJzZUludChrZXlzWzFdLCAxMCkpfWA7XG4gICAgICAgICAgICAgICAgdGVtcCArPSBgIGNvbC0ke2Nsc31gO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzY29wZS5pdGVtc1BlclJvd0NsYXNzID0gdGVtcC50cmltKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGluZyBpdGVtc3BlcnJvdyBoYXZpbmcgaW50ZWdlciB2YWx1ZS5cbiAgICAgICAgICAgIHNjb3BlLml0ZW1zUGVyUm93Q2xhc3MgPSBgY29sLXhzLSR7KDEyIC8gcGFyc2VJbnQoc2NvcGUuaXRlbXNwZXJyb3csIDEwKSl9YDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIElmIGl0ZW1zcGVycm93IGlzIG5vdCBzcGVjaWZpZWQgbWFrZSBpdCBmdWxsIHdpZHRoXG4gICAgICAgIHNjb3BlLml0ZW1zUGVyUm93Q2xhc3MgPSAnY29sLXhzLTEyJztcbiAgICB9XG59O1xuIl19