@simpleangularcontrols/sac-common 10.0.0-rc.27 → 10.0.0-rc.29

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 (123) hide show
  1. package/bundles/simpleangularcontrols-sac-common.umd.js +729 -369
  2. package/bundles/simpleangularcontrols-sac-common.umd.js.map +1 -1
  3. package/bundles/simpleangularcontrols-sac-common.umd.min.js +1 -1
  4. package/bundles/simpleangularcontrols-sac-common.umd.min.js.map +1 -1
  5. package/common/basedatetimecontrol.d.ts +5 -0
  6. package/common/basemodelcontrol.d.ts +4 -0
  7. package/common/baseuploadcontrol.d.ts +4 -0
  8. package/controls/buttons/button.d.ts +25 -21
  9. package/controls/checkbox/checkbox.d.ts +1 -1
  10. package/controls/confirm/confirm.d.ts +19 -19
  11. package/controls/confirm/confirm.service.d.ts +10 -10
  12. package/controls/contextmenu/contextmenu.d.ts +8 -0
  13. package/controls/datetime/dateselector.d.ts +9 -1
  14. package/controls/dialog/dialog.d.ts +5 -1
  15. package/controls/form/form.d.ts +4 -4
  16. package/controls/grid/grid.d.ts +22 -18
  17. package/controls/grid/gridbutton.d.ts +23 -4
  18. package/controls/grid/gridcolumn.d.ts +5 -5
  19. package/controls/grid/gridcolumnaction.d.ts +1 -1
  20. package/controls/grid/gridcolumnbase.d.ts +21 -5
  21. package/controls/grid/model.d.ts +17 -17
  22. package/controls/grid/paging.d.ts +33 -29
  23. package/controls/input/inputdecimal.d.ts +1 -1
  24. package/controls/input/inputemail.d.ts +1 -1
  25. package/controls/input/inputinteger.d.ts +1 -1
  26. package/controls/input/inputsearch.d.ts +5 -5
  27. package/controls/list/dropdown.d.ts +3 -3
  28. package/controls/list/dropdownoptions.d.ts +1 -1
  29. package/controls/list/listbox.d.ts +1 -1
  30. package/controls/multilanguage/multilanguageinput.d.ts +2 -2
  31. package/controls/static/staticlabel.d.ts +1 -1
  32. package/controls/tabs/tab.d.ts +19 -15
  33. package/controls/tabs/tabitem.d.ts +4 -4
  34. package/controls/tinymce/tinymce.d.ts +26 -22
  35. package/controls/tinymce/tinymcedialogsettings.d.ts +9 -9
  36. package/controls/tooltip/tooltip.d.ts +8 -0
  37. package/controls/treeview/treeview.d.ts +1 -1
  38. package/controls/upload/dropzonemultiple.d.ts +4 -0
  39. package/controls/upload/dropzonesingle.d.ts +4 -0
  40. package/controls/upload/uploadmultiple.d.ts +4 -0
  41. package/controls/upload/uploadsingle.d.ts +4 -0
  42. package/controls/validation/validationsummary.d.ts +8 -4
  43. package/controls/wizard/wizard.d.ts +30 -30
  44. package/controls/wizard/wizarditem.d.ts +4 -4
  45. package/esm2015/common/basedatetimecontrol.js +6 -1
  46. package/esm2015/common/basemodelcontrol.js +6 -1
  47. package/esm2015/common/baseuploadcontrol.js +18 -5
  48. package/esm2015/controls/buttons/button.js +37 -32
  49. package/esm2015/controls/checkbox/checkbox.js +2 -2
  50. package/esm2015/controls/confirm/confirm.button.js +1 -1
  51. package/esm2015/controls/confirm/confirm.js +33 -35
  52. package/esm2015/controls/confirm/confirm.service.js +2 -2
  53. package/esm2015/controls/contextmenu/contextmenu.js +12 -1
  54. package/esm2015/controls/contextmenu/contextmenuanchor.js +1 -1
  55. package/esm2015/controls/contextmenu/contextmenucontainer.js +1 -1
  56. package/esm2015/controls/datetime/dateselector.js +41 -19
  57. package/esm2015/controls/dialog/dialog.js +22 -12
  58. package/esm2015/controls/form/form.js +3 -4
  59. package/esm2015/controls/grid/grid.js +23 -13
  60. package/esm2015/controls/grid/gridbutton.js +55 -14
  61. package/esm2015/controls/grid/gridcolumn.js +8 -8
  62. package/esm2015/controls/grid/gridcolumnaction.js +2 -2
  63. package/esm2015/controls/grid/gridcolumnbase.js +23 -7
  64. package/esm2015/controls/grid/gridimage.js +1 -1
  65. package/esm2015/controls/grid/model.js +23 -23
  66. package/esm2015/controls/grid/paging.js +48 -38
  67. package/esm2015/controls/input/inputdecimal.js +2 -2
  68. package/esm2015/controls/input/inputemail.js +2 -2
  69. package/esm2015/controls/input/inputinteger.js +2 -2
  70. package/esm2015/controls/input/inputsearch.js +8 -8
  71. package/esm2015/controls/layout/formlayout.js +6 -2
  72. package/esm2015/controls/list/buildvaluestring.js +3 -1
  73. package/esm2015/controls/list/dropdown.js +11 -2
  74. package/esm2015/controls/list/dropdownoptions.js +9 -2
  75. package/esm2015/controls/list/list.module.js +2 -2
  76. package/esm2015/controls/list/listbox.js +4 -4
  77. package/esm2015/controls/multilanguage/multilanguageinput.js +2 -2
  78. package/esm2015/controls/static/staticlabel.js +6 -2
  79. package/esm2015/controls/tabs/tab.js +38 -28
  80. package/esm2015/controls/tabs/tabitem.js +5 -3
  81. package/esm2015/controls/tinymce/tinymce.js +33 -32
  82. package/esm2015/controls/tinymce/tinymcedialogsettings.js +3 -1
  83. package/esm2015/controls/tinymce/tinymcedialogsettingsmeta.js +1 -4
  84. package/esm2015/controls/tinymce/tinymceinstance.js +1 -1
  85. package/esm2015/controls/tooltip/tooltip.js +12 -1
  86. package/esm2015/controls/treeview/treeview.js +9 -9
  87. package/esm2015/controls/upload/dropzonemultiple.js +10 -2
  88. package/esm2015/controls/upload/dropzonesingle.js +10 -2
  89. package/esm2015/controls/upload/uploadmultiple.js +10 -2
  90. package/esm2015/controls/upload/uploadsingle.js +10 -2
  91. package/esm2015/controls/validation/validationsummary.js +12 -6
  92. package/esm2015/controls/wizard/wizard.js +55 -49
  93. package/esm2015/controls/wizard/wizarditem.js +8 -6
  94. package/esm2015/interfaces/ISacConfigurationService.js +1 -1
  95. package/esm2015/interfaces/ISacIconService.js +1 -1
  96. package/esm2015/public_api.js +4 -1
  97. package/esm2015/services/sac-configuration.service.js +15 -5
  98. package/esm2015/services/sac-filebrowser.service.js +68 -62
  99. package/esm2015/services/sac-icon.service.js +31 -1
  100. package/esm2015/services/sac-language.service.js +6 -2
  101. package/esm2015/utilities/guid.js +4 -4
  102. package/esm2015/utilities/popuphelper.js +2 -2
  103. package/esm2015/utilities/testingattribute.pipe.js +39 -0
  104. package/esm2015/utilities/testingattribute.pipe.ngfactory.js +7 -0
  105. package/esm2015/utilities/utilities.module.js +12 -0
  106. package/esm2015/utilities/utilities.module.ngfactory.js +7 -0
  107. package/fesm2015/simpleangularcontrols-sac-common.js +721 -390
  108. package/fesm2015/simpleangularcontrols-sac-common.js.map +1 -1
  109. package/interfaces/ISacConfigurationService.d.ts +4 -0
  110. package/interfaces/ISacIconService.d.ts +20 -0
  111. package/package.json +1 -1
  112. package/public_api.d.ts +2 -0
  113. package/services/sac-configuration.service.d.ts +13 -5
  114. package/services/sac-filebrowser.service.d.ts +59 -59
  115. package/services/sac-icon.service.d.ts +40 -0
  116. package/services/sac-language.service.d.ts +2 -2
  117. package/simpleangularcontrols-sac-common-10.0.0-rc.29.tgz +0 -0
  118. package/simpleangularcontrols-sac-common.metadata.json +1 -1
  119. package/utilities/testingattribute.pipe.d.ts +12 -0
  120. package/utilities/testingattribute.pipe.ngfactory.d.ts +1 -0
  121. package/utilities/utilities.module.d.ts +2 -0
  122. package/utilities/utilities.module.ngfactory.d.ts +3 -0
  123. package/simpleangularcontrols-sac-common-10.0.0-rc.27.tgz +0 -0
@@ -310,7 +310,7 @@ export class PopUpHelper {
310
310
  return element.offsetTop;
311
311
  }
312
312
  const parentValue = this.getOffsetTopParent(element.offsetParent);
313
- let offset = element.offsetTop;
313
+ const offset = element.offsetTop;
314
314
  return parentValue + offset;
315
315
  }
316
316
  /**
@@ -340,4 +340,4 @@ export class PopUpHelper {
340
340
  }
341
341
  }
342
342
  }
343
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXBoZWxwZXIuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NpbXBsZWFuZ3VsYXJjb250cm9scy9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJ1dGlsaXRpZXMvcG9wdXBoZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUcxQyxNQUFNLE9BQU8sV0FBVztJQUNwQix5QkFBeUI7SUFFbEIsa0JBQWtCLENBQUMsa0JBQTJDLEVBQUUsb0JBQTZCO1FBQ2hHLElBQUksa0JBQWtCLEVBQUU7WUFDcEIsT0FBTyxvQkFBb0I7Z0JBQ3ZCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsWUFBWTtnQkFDakUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7U0FDdkQ7YUFBTTtZQUNILE9BQU8sQ0FBQyxDQUFDO1NBQ1o7SUFDTCxDQUFDO0lBRU0saUJBQWlCLENBQUMsa0JBQTJDLEVBQUUsb0JBQTZCO1FBQy9GLElBQUksa0JBQWtCLEVBQUU7WUFDcEIsT0FBTyxvQkFBb0I7Z0JBQ3ZCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsV0FBVztnQkFDaEUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7U0FDdEQ7YUFBTTtZQUNILE9BQU8sQ0FBQyxDQUFDO1NBQ1o7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxrQkFBa0IsQ0FDckIsa0JBQTJDLEVBQzNDLHFCQUE4QyxFQUM5QyxVQUFrQixFQUNsQixXQUFtQixFQUNuQixnQkFBd0IsRUFDeEIsb0JBQTZCO1FBRTdCLE1BQU0sY0FBYyxHQUFvQixJQUFJLENBQUMsaUJBQWlC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QzVCO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxZQUEyQixDQUFDLENBQUM7UUFDakYsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUMvQixPQUFPLFdBQVcsR0FBRyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssa0JBQWtCLENBQUMsT0FBb0IsRUFBRSxPQUFPLEdBQUcsS0FBSztRQUM1RCxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFDbEIsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUVELHVDQUF1QztRQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtZQUN4QixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFDO1FBRUQsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxLQUFLLE9BQU8sRUFBRTtZQUMzRSxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxJQUFJLGNBQWMsQ0FBQyxDQUFDO1FBRTlGLElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztTQUMxQzthQUFNO1lBQ0gsT0FBTyxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztJQUNMLENBQUM7Q0FHSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY2xhc3MgUG9wVXBIZWxwZXIge1xuICAgIC8vICNyZWdpb24gUHVibGljIE1ldGhvZHNcblxuICAgIHB1YmxpYyBnZXRDb250YWluZXJIZWlnaHQocmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcmVmZXJlbmNlSXNDb250YWluZXI6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICBpZiAocmVmZXJlbmNlQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlSXNDb250YWluZXJcbiAgICAgICAgICAgICAgICA/IHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudEhlaWdodFxuICAgICAgICAgICAgICAgIDogcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udGFpbmVyV2lkdGgocmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcmVmZXJlbmNlSXNDb250YWluZXI6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICBpZiAocmVmZXJlbmNlQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlSXNDb250YWluZXJcbiAgICAgICAgICAgICAgICA/IHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudFdpZHRoXG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IFBvc2l0aW9uIHdobyB0aGUgcG9wdXAgd291bGQgYmUgcG9zaXRpb25lZFxuICAgICAqXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBIVE1MIEVsZW1lbnQgd2hpY2ggaXMgdGhlIHJlZmVyZW5jZSB0byBwb3NpdGlvbmluZyB0aGUgcG9wdXBcbiAgICAgKiBAcGFyYW0gcG9wdXBjb250ZW50Y29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIGNvbnRhaW5lciBvZiBwb3B1cFxuICAgICAqIEBwYXJhbSBwb3B1cE9mZnNldCBPZmZzZXQgZm9yIHBvcHVwIHBvc2l0aW9uaW5nXG4gICAgICogQHBhcmFtIGFsbG93ZWRQb3NpdGlvbnMgQWxsb3dlZCBQb3NpdGlvbnMgZm9yIHRoZSBwb3B1cFxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBwb3B1cCBzaG91bGQgYmUgZGlzcGxheWVkXG4gICAgICovXG4gICAgcHVibGljIGdldERpc3BsYXlQb3NpdGlvbihcbiAgICAgICAgcmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcG9wdXBjb250ZW50Y29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgYXJyb3dXaWR0aDogbnVtYmVyLFxuICAgICAgICBhcnJvd0hlaWdodDogbnVtYmVyLFxuICAgICAgICBhbGxvd2VkUG9zaXRpb25zOiBzdHJpbmcsXG4gICAgICAgIHJlZmVyZW5jZUlzQ29udGFpbmVyOiBib29sZWFuXG4gICAgKTogVG9vbHRpcFBvc2l0aW9uIHtcbiAgICAgICAgY29uc3QgdmFsaWRQb3NpdGlvbnM6IFRvb2x0aXBQb3NpdGlvbiA9IHRoaXMudmFsaWRhdGVQb3NpdGlvbnMoXG4gICAgICAgICAgICByZWZlcmVuY2VDb250YWluZXIsXG4gICAgICAgICAgICBwb3B1cGNvbnRlbnRjb250YWluZXIsXG4gICAgICAgICAgICBhcnJvd1dpZHRoLFxuICAgICAgICAgICAgYXJyb3dIZWlnaHQsXG4gICAgICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5yaWdodCkgJiYgdmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24ucmlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wKSAmJiB2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3ApIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24udG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9zaXRpb24oYWxsb3dlZFBvc2l0aW9ucywgVG9vbHRpcFBvc2l0aW9uLmxlZnQpICYmIHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmxlZnQpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ubGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5ib3R0b20pICYmIHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wZW5kKSAmJiB2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3BlbmQpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24udG9wZW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kKSAmJlxuICAgICAgICAgICAgdmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgQXV0byBQb3NpdGlvbiBvciBEZWZhdWx0XG4gICAgICAgIGlmICh0aGlzLmlzQXV0b1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMpKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICAgICAgaWYgKHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLnJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5yaWdodDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGlmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3ApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnRvcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGlmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi5sZWZ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5sZWZ0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICAgICAgaWYgKHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24uYm90dG9tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnJpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oYWxsb3dlZFBvc2l0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBoZWlnaHQgb2YgdGhlIHBvcHVwXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIGNvbnRhaW5lciBvZiBwb3B1cFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3B1cEhlaWdodChjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudEhlaWdodCA/PyAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSB3aWR0aCBvZiB0aGUgcG9wdXBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gY29udGFpbmVyIG9mIHBvcHVwXG4gICAgICovXG4gICAgcHVibGljIGdldFBvcHVwV2lkdGgoY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik6IG51bWJlciB7XG4gICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5jbGllbnRXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGVmaW5lZCBwb3NpdGlvbiBmb3IgdGhlIHRvb2x0aXBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBhbGxvd2VkUG9zaXRpb25zIEFsbG93ZWQgcG9zaXRpb25zIGRlZmluZWQgaW4gbWFya3VwIGZvciBwb3B1cFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zOiBzdHJpbmcpOiBUb29sdGlwUG9zaXRpb24ge1xuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24ubGVmdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ubGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi50b3ApKSB7XG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5yaWdodCkpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tKSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wZW5kKSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi50b3BlbmQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kKSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IFBvc2l0aW9uIGlmIGVtcHR5XG4gICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXAgZnJvbSBsaW5rc1xuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRyb2xSZWZlcmVuY2UgRWxlbWVudCBSZWZlcmVuY2UgdG8gYW5ndWxhciBjb21wb25lbnRcbiAgICAgKiBAcGFyYW0gcG9wdXBDb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gY29udGFpbmVyIG9mIHBvcHVwXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBIVE1MIEVsZW1lbnQgd2hpY2ggaXMgdGhlIHJlZmVyZW5jZSB0byBwb3NpdGlvbmluZyB0aGUgcG9wdXBcbiAgICAgKiBAcGFyYW0gcG9wdXBPZmZzZXQgT2Zmc2V0IGZvciBwb3B1cCBwb3NpdGlvbmluZ1xuICAgICAqIEBwYXJhbSByZXF1ZXN0ZWRQb3NpdGlvbiBSZXF1ZXN0ZWQgUG9zaXRpb24gYnkgQ29udHJvbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3NpdGlvbkxlZnQoXG4gICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHBvcHVwQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgY29udHJvbFJlZmVyZW5jZTogRWxlbWVudFJlZixcbiAgICAgICAgYXJyb3dXaWR0aDogbnVtYmVyLFxuICAgICAgICBhcnJvd0hlaWdodDogbnVtYmVyLFxuICAgICAgICByZXF1ZXN0ZWRQb3NpdGlvbjogc3RyaW5nLFxuICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lcjogYm9vbGVhblxuICAgICk6IG51bWJlciB7XG4gICAgICAgIGlmIChyZWZlcmVuY2VDb250YWluZXIgIT09IG51bGwgJiYgcmVmZXJlbmNlQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEl0ZW0gPSByZWZlcmVuY2VJc0NvbnRhaW5lciA/IChpdGVtLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50KSA6IGl0ZW07XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudFBvc2l0aW9uOiBET01SZWN0ID0gY2hpbGRJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREaXNwbGF5UG9zaXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3B1cENvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycm93V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJvd0hlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZFBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSXNDb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi50b3A6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFBvc2l0aW9uLmxlZnQgKyBjb250ZW50UG9zaXRpb24ud2lkdGggLyAyIC0gdGhpcy5nZXRQb3B1cFdpZHRoKHBvcHVwQ29udGFpbmVyKSAvIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLnRvcGVuZDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRQb3NpdGlvbi5sZWZ0ICsgY29udGVudFBvc2l0aW9uLndpZHRoIC0gdGhpcy5nZXRQb3B1cFdpZHRoKHBvcHVwQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24ucmlnaHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGVudFBvc2l0aW9uLmxlZnQgKyBjb250ZW50UG9zaXRpb24ud2lkdGggKyBhcnJvd1dpZHRoIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24ubGVmdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50UG9zaXRpb24ubGVmdCAtIHRoaXMuZ2V0UG9wdXBXaWR0aChwb3B1cENvbnRhaW5lcikgKyAoYXJyb3dXaWR0aCAvIDIpICogLTE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sUmVmZXJlbmNlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSB0b29sdGlwIGZyb20gdGhlIHRvcFxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRyb2xSZWZlcmVuY2UgRWxlbWVudCBSZWZlcmVuY2UgdG8gYW5ndWxhciBjb21wb25lbnRcbiAgICAgKiBAcGFyYW0gcG9wdXBDb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gY29udGFpbmVyIG9mIHBvcHVwXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBIVE1MIEVsZW1lbnQgd2hpY2ggaXMgdGhlIHJlZmVyZW5jZSB0byBwb3NpdGlvbmluZyB0aGUgcG9wdXBcbiAgICAgKiBAcGFyYW0gcG9wdXBPZmZzZXQgT2Zmc2V0IGZvciBwb3B1cCBwb3NpdGlvbmluZ1xuICAgICAqIEBwYXJhbSByZXF1ZXN0ZWRQb3NpdGlvbiBSZXF1ZXN0ZWQgUG9zaXRpb24gYnkgQ29udHJvbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3NpdGlvblRvcChcbiAgICAgICAgcmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcG9wdXBDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBjb250cm9sUmVmZXJlbmNlOiBFbGVtZW50UmVmLFxuICAgICAgICBhcnJvd1dpZHRoOiBudW1iZXIsXG4gICAgICAgIGFycm93SGVpZ2h0OiBudW1iZXIsXG4gICAgICAgIHJlcXVlc3RlZFBvc2l0aW9uOiBzdHJpbmcsXG4gICAgICAgIHJlZmVyZW5jZUlzQ29udGFpbmVyOiBib29sZWFuXG4gICAgKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlZmVyZW5jZUNvbnRhaW5lciAhPT0gbnVsbCAmJiByZWZlcmVuY2VDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEl0ZW0gPSByZWZlcmVuY2VJc0NvbnRhaW5lciA/IChpdGVtLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50KSA6IGl0ZW07XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudFBvc2l0aW9uOiBET01SZWN0ID0gY2hpbGRJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gR2V0IFBvc2l0aW9uIHdpdGggU2Nyb2xsIChTY3JvbGxiYXJzIGluc2lkZSBwYWdlIHNob3VsZCBiZSBzdWJzdHJhY3RlZClcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50UG9zaXRpb25Ub3AgPVxuICAgICAgICAgICAgICAgICAgICBjaGlsZEl0ZW0ub2Zmc2V0VG9wICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPZmZzZXRUb3BQYXJlbnQoY2hpbGRJdGVtLm9mZnNldFBhcmVudCBhcyBIVE1MRWxlbWVudCkgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNjcm9sbFRvcFBhcmVudChjaGlsZEl0ZW0ucGFyZW50RWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERpc3BsYXlQb3NpdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3dXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycm93SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLnRvcDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24udG9wZW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRQb3NpdGlvblRvcCAtIHRoaXMuZ2V0UG9wdXBIZWlnaHQocG9wdXBDb250YWluZXIpICsgKGFycm93SGVpZ2h0IC8gMikgKiAtMTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24ucmlnaHQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLmxlZnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRQb3NpdGlvblRvcCArIGNvbnRlbnRQb3NpdGlvbi5oZWlnaHQgLyAyIC0gdGhpcy5nZXRQb3B1cEhlaWdodChwb3B1cENvbnRhaW5lcikgLyAyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5ib3R0b206XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbWVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50UG9zaXRpb25Ub3AgKyBjb250ZW50UG9zaXRpb24uaGVpZ2h0ICsgYXJyb3dIZWlnaHQgLyAyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkSXRlbS5jbGllbnRUb3AgK1xuICAgICAgICAgICAgICAgICAgICBjaGlsZEl0ZW0ub2Zmc2V0VG9wIC1cbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuZ2V0UG9wdXBIZWlnaHQocG9wdXBDb250YWluZXIpIC8gMiAtIGNoaWxkSXRlbS5vZmZzZXRIZWlnaHQgLyAyKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcG9zaXRpb24gaGFzIGJlZW4gY29uZmlndXJlZFxuICAgICAqXG4gICAgICogQHBhcmFtIGFsbG93ZWRQb3NpdGlvbnMgUG9zaXRpb25zIHRoYXQgYWxsb3dlZCBieSBjb250cm9sXG4gICAgICogQHBhcmFtIHJlcXVlc3RlZFBvc2l0aW9uIFBvc2l0aW9uIHRvIGJlIGNoZWNrZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzUG9zaXRpb24oYWxsb3dlZFBvc2l0aW9uczogc3RyaW5nLCByZXF1ZXN0ZWRQb3NpdGlvbjogVG9vbHRpcFBvc2l0aW9uKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGFsbG93ZWRQb3NpdGlvbnMuc3BsaXQoJ3wnKTtcblxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5yaWdodCAmJiBwb3NpdGlvbnMuaW5kZXhPZigncmlnaHQnKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRQb3NpdGlvbiA9PT0gVG9vbHRpcFBvc2l0aW9uLnRvcCAmJiBwb3NpdGlvbnMuaW5kZXhPZigndG9wJykgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5sZWZ0ICYmIHBvc2l0aW9ucy5pbmRleE9mKCdsZWZ0JykgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5ib3R0b20gJiYgcG9zaXRpb25zLmluZGV4T2YoJ2JvdHRvbScpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RlZFBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24udG9wZW5kICYmIHBvc2l0aW9ucy5pbmRleE9mKCd0b3BlbmQnKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQgJiYgcG9zaXRpb25zLmluZGV4T2YoJ2JvdHRvbWVuZCcpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgd2hldGhlciBBdXRvUG9zaXRpb24gaXMgYWN0aXZlXG4gICAgICogQHBhcmFtIHBvc2l0aW9uUHJvcGVydHkgTGlzdCBvZiBhbGxvd2VkIHBvc2l0aW9uc1xuICAgICAqL1xuICAgIHB1YmxpYyBpc0F1dG9Qb3NpdGlvbihwb3NpdGlvblByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gcG9zaXRpb25Qcm9wZXJ0eS5zcGxpdCgnfCcpO1xuICAgICAgICByZXR1cm4gcG9zaXRpb25zLmluZGV4T2YoJ2F1dG8nKSA+PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBwb3NpdGlvbiBpcyB2YWxpZCBvciB3aGV0aGVyIHRoZSB0b29sdGlwIG9uIHRoZSBwb3NpdGlvbiBoYXMgc3BhY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGVQb3NpdGlvbnMoXG4gICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHBvcHVwY29udGVudGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIGFycm93V2lkdGg6IG51bWJlcixcbiAgICAgICAgYXJyb3dIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgcmVmZXJlbmNlSXNDb250YWluZXI6IGJvb2xlYW5cbiAgICApOiBUb29sdGlwUG9zaXRpb24ge1xuICAgICAgICAvLyBDaGVjayBpZiBDb250YWluZXIgaXMgZmFsc2VcbiAgICAgICAgaWYgKHBvcHVwY29udGVudGNvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnJpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFsbG93ZWRQb3NpdGlvbnM6IFRvb2x0aXBQb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbi5ub25lO1xuICAgICAgICBjb25zdCBiYXNlUG9zaXRpb246IERPTVJlY3QgPSByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICAgICAgPyByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgICAgOiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgdG9vbHRpcFJlY3Q6IERPTVJlY3QgPSBwb3B1cGNvbnRlbnRjb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBsZWZ0UG9zT2s6IGJvb2xlYW4gPSBiYXNlUG9zaXRpb24ubGVmdCAtICh0b29sdGlwUmVjdC53aWR0aCArIGFycm93V2lkdGggKiAtMSkgPiAwO1xuICAgICAgICBjb25zdCByaWdodFBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLnJpZ2h0ICsgdG9vbHRpcFJlY3Qud2lkdGggKyBhcnJvd1dpZHRoIDwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIGNvbnN0IHRvcFBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLnRvcCAtICh0b29sdGlwUmVjdC5oZWlnaHQgKyBhcnJvd0hlaWdodCkgPiAwO1xuICAgICAgICBjb25zdCBib3R0b21Qb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5ib3R0b20gKyB0b29sdGlwUmVjdC5oZWlnaHQgKyBhcnJvd0hlaWdodCA8IHdpbmRvdy5pbm5lckhlaWdodDtcblxuICAgICAgICBjb25zdCBsZWZ0SGFsZlBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLmxlZnQgLSB0b29sdGlwUmVjdC53aWR0aCAvIDIgPiAwO1xuICAgICAgICBjb25zdCByaWdodEhhbGZQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5yaWdodCArIHRvb2x0aXBSZWN0LndpZHRoIC8gMiA8IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICBjb25zdCB0b3BIYWxmUG9zT2s6IGJvb2xlYW4gPSBiYXNlUG9zaXRpb24udG9wIC0gdG9vbHRpcFJlY3QuaGVpZ2h0IC8gMiA+IDA7XG4gICAgICAgIGNvbnN0IGJvdHRvbUhhbGZQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5ib3R0b20gKyB0b29sdGlwUmVjdC5oZWlnaHQgLyAyIDwgd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgICAgIGlmICh0b3BQb3NPaykge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLnRvcGVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib3R0b21Qb3NPaykge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbWVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsZWZ0UG9zT2sgJiYgdG9wSGFsZlBvc09rICYmIGJvdHRvbUhhbGZQb3NPaykge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLmxlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmlnaHRQb3NPayAmJiB0b3BIYWxmUG9zT2sgJiYgYm90dG9tSGFsZlBvc09rKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICAgICAgYWxsb3dlZFBvc2l0aW9ucyA9IGFsbG93ZWRQb3NpdGlvbnMgfCBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9wUG9zT2sgJiYgbGVmdEhhbGZQb3NPayAmJiByaWdodEhhbGZQb3NPaykge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLnRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib3R0b21Qb3NPayAmJiBsZWZ0SGFsZlBvc09rICYmIHJpZ2h0SGFsZlBvc09rKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICAgICAgYWxsb3dlZFBvc2l0aW9ucyA9IGFsbG93ZWRQb3NpdGlvbnMgfCBUb29sdGlwUG9zaXRpb24uYm90dG9tO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFsbG93ZWRQb3NpdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gICAgLy8gI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHRvcCBvZiB0aGUgcGFnZSBpbnNpZGUgYWxsIGVsZW1lbnRzXG4gICAgICogQHBhcmFtIGVsZW1lbnQgSFRNTCBFbGVtZW50XG4gICAgICogQHJldHVybnMgc3VtbWFyaXplZCB0b3AgdmFsdWUgZm9yIGFic29sdXRlIHBvc2l0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRPZmZzZXRUb3BQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoZWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWVsZW1lbnQub2Zmc2V0UGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRWYWx1ZSA9IHRoaXMuZ2V0T2Zmc2V0VG9wUGFyZW50KGVsZW1lbnQub2Zmc2V0UGFyZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgbGV0IG9mZnNldCA9IGVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICByZXR1cm4gcGFyZW50VmFsdWUgKyBvZmZzZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FjbHVsYXRlIFNjcm9sbGJhcnMgaW5zaWRlIHRyZWVcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBIVE1MIEVsZW1lbnRcbiAgICAgKiBAcGFyYW0gW2lzRml4ZWQ9ZmFsc2VdIEludmVydCBTY3JvbGwgUG9zaXRpb24gdmFsdWUgd2hlbiBzdHlsZSBpcyBmaXhlZCB0byBwcmVzZXJ2ZSBuZWdhdGl2ZSB2YWx1ZXNcbiAgICAgKiBAcmV0dXJucyBTY3JvbGwgdG9wIHZhbHVlIG9mIGVsZW1lbnQgd2l0aCBhbGwgY2hpbGRzXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRTY3JvbGxUb3BQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGlzRml4ZWQgPSBmYWxzZSk6IG51bWJlciB7XG4gICAgICAgIGlmIChlbGVtZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJvZHkgU2Nyb2xsIHNob3VsZCBub3QgYmUgY2FsY3VsYXRlZFxuICAgICAgICBpZiAoIWVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRml4ZWQgPyBlbGVtZW50LnNjcm9sbFRvcCA6IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaXNDdXJyZW50Rml4ZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCcpIHtcbiAgICAgICAgICAgIGlzQ3VycmVudEZpeGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudFZhbHVlID0gdGhpcy5nZXRTY3JvbGxUb3BQYXJlbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50LCBpc0ZpeGVkIHx8IGlzQ3VycmVudEZpeGVkKTtcblxuICAgICAgICBpZiAoaXNGaXhlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudFZhbHVlICsgZWxlbWVudC5zY3JvbGxUb3A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50VmFsdWUgKyBlbGVtZW50LnNjcm9sbFRvcCAqIC0xO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBQcml2YXRlIE1ldGhvZHNcbn1cbiJdfQ==
343
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXBoZWxwZXIuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NpbXBsZWFuZ3VsYXJjb250cm9scy9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJ1dGlsaXRpZXMvcG9wdXBoZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUcxQyxNQUFNLE9BQU8sV0FBVztJQUNwQix5QkFBeUI7SUFFbEIsa0JBQWtCLENBQUMsa0JBQTJDLEVBQUUsb0JBQTZCO1FBQ2hHLElBQUksa0JBQWtCLEVBQUU7WUFDcEIsT0FBTyxvQkFBb0I7Z0JBQ3ZCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsWUFBWTtnQkFDakUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7U0FDdkQ7YUFBTTtZQUNILE9BQU8sQ0FBQyxDQUFDO1NBQ1o7SUFDTCxDQUFDO0lBRU0saUJBQWlCLENBQUMsa0JBQTJDLEVBQUUsb0JBQTZCO1FBQy9GLElBQUksa0JBQWtCLEVBQUU7WUFDcEIsT0FBTyxvQkFBb0I7Z0JBQ3ZCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsV0FBVztnQkFDaEUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7U0FDdEQ7YUFBTTtZQUNILE9BQU8sQ0FBQyxDQUFDO1NBQ1o7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxrQkFBa0IsQ0FDckIsa0JBQTJDLEVBQzNDLHFCQUE4QyxFQUM5QyxVQUFrQixFQUNsQixXQUFtQixFQUNuQixnQkFBd0IsRUFDeEIsb0JBQTZCO1FBRTdCLE1BQU0sY0FBYyxHQUFvQixJQUFJLENBQUMsaUJBQWlCLENBQzFELGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsVUFBVSxFQUNWLFdBQVcsRUFDWCxvQkFBb0IsQ0FDdkIsQ0FBQztRQUVGLHNDQUFzQztRQUN0QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLGNBQWMsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFO1lBQ3JHLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQztTQUNoQztRQUVELHNDQUFzQztRQUN0QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGNBQWMsR0FBRyxlQUFlLENBQUMsR0FBRyxFQUFFO1lBQ2pHLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQztTQUM5QjtRQUVELHNDQUFzQztRQUN0QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLGNBQWMsR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFO1lBQ25HLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQztTQUMvQjtRQUVELHNDQUFzQztRQUN0QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGNBQWMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQ3ZHLE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQztTQUNqQztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksY0FBYyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDdkcsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDO1NBQ2pDO1FBRUQsSUFDSSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxTQUFTLENBQUM7WUFDN0QsY0FBYyxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQzVDO1lBQ0UsT0FBTyxlQUFlLENBQUMsU0FBUyxDQUFDO1NBQ3BDO1FBRUQsK0JBQStCO1FBQy9CLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ3ZDLHNDQUFzQztZQUN0QyxJQUFJLGNBQWMsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFO2dCQUN4QyxPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUM7YUFDaEM7WUFFRCxzQ0FBc0M7WUFDdEMsSUFBSSxjQUFjLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFBRTtnQkFDdEMsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDO2FBQzlCO1lBRUQsc0NBQXNDO1lBQ3RDLElBQUksY0FBYyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3ZDLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQzthQUMvQjtZQUVELHNDQUFzQztZQUN0QyxJQUFJLGNBQWMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFO2dCQUN6QyxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUM7YUFDakM7WUFFRCxPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUM7U0FDaEM7YUFBTTtZQUNILE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQzdDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxjQUFjLENBQUMsU0FBa0M7O1FBQ3BELElBQUksU0FBUyxFQUFFO1lBQ1gsYUFBTyxTQUFTLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFlBQVksbUNBQUksQ0FBQyxDQUFDO1NBQ3RFO2FBQU07WUFDSCxPQUFPLENBQUMsQ0FBQztTQUNaO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxhQUFhLENBQUMsU0FBa0M7UUFDbkQsSUFBSSxTQUFTLEVBQUU7WUFDWCxPQUFPLFNBQVMsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDO1NBQ2hFO2FBQU07WUFDSCxPQUFPLENBQUMsQ0FBQztTQUNaO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsZ0JBQXdCO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDO1NBQy9CO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6RCxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUM7U0FDOUI7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNELE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQztTQUNoQztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDNUQsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM1RCxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUM7U0FDakM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQy9ELE9BQU8sZUFBZSxDQUFDLFNBQVMsQ0FBQztTQUNwQztRQUVELDRCQUE0QjtRQUM1QixPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksZUFBZSxDQUNsQixrQkFBMkMsRUFDM0MsY0FBdUMsRUFDdkMsZ0JBQTRCLEVBQzVCLFVBQWtCLEVBQ2xCLFdBQW1CLEVBQ25CLGlCQUF5QixFQUN6QixvQkFBNkI7UUFFN0IsSUFBSSxrQkFBa0IsS0FBSyxJQUFJLElBQUksa0JBQWtCLEtBQUssU0FBUyxFQUFFO1lBQ2pFLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLGFBQWEsQ0FBQztZQUU5QyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDM0IsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxpQkFBaUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN4RixNQUFNLGVBQWUsR0FBWSxTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFFbkUsUUFDSSxJQUFJLENBQUMsa0JBQWtCLENBQ25CLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsVUFBVSxFQUNWLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsb0JBQW9CLENBQ3ZCLEVBQ0g7b0JBQ0UsS0FBSyxlQUFlLENBQUMsR0FBRyxDQUFDO29CQUN6QixLQUFLLGVBQWUsQ0FBQyxNQUFNO3dCQUN2QixPQUFPLENBQ0gsZUFBZSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FDNUYsQ0FBQztvQkFDTixLQUFLLGVBQWUsQ0FBQyxNQUFNLENBQUM7b0JBQzVCLEtBQUssZUFBZSxDQUFDLFNBQVM7d0JBQzFCLE9BQU8sZUFBZSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQzdGLEtBQUssZUFBZSxDQUFDLEtBQUs7d0JBQ3RCLE9BQU8sZUFBZSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7b0JBQ3pFLEtBQUssZUFBZSxDQUFDLElBQUk7d0JBQ3JCLE9BQU8sZUFBZSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUNoRztnQkFFRCxPQUFPLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7YUFDckQ7aUJBQU07Z0JBQ0gsT0FBTyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO2FBQ3JEO1NBQ0o7YUFBTTtZQUNILE9BQU8sZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztTQUNwRDtJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLGNBQWMsQ0FDakIsa0JBQTJDLEVBQzNDLGNBQXVDLEVBQ3ZDLGdCQUE0QixFQUM1QixVQUFrQixFQUNsQixXQUFtQixFQUNuQixpQkFBeUIsRUFDekIsb0JBQTZCO1FBRTdCLElBQUksa0JBQWtCLEtBQUssSUFBSSxJQUFJLGtCQUFrQixLQUFLLFNBQVMsRUFBRTtZQUNqRSxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7WUFDOUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsaUJBQWlDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDeEYsTUFBTSxlQUFlLEdBQVksU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBRW5FLDBFQUEwRTtnQkFDMUUsTUFBTSxrQkFBa0IsR0FDcEIsU0FBUyxDQUFDLFNBQVM7b0JBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsWUFBMkIsQ0FBQztvQkFDOUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFckQsUUFDSSxJQUFJLENBQUMsa0JBQWtCLENBQ25CLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsVUFBVSxFQUNWLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsb0JBQW9CLENBQ3ZCLEVBQ0g7b0JBQ0UsS0FBSyxlQUFlLENBQUMsR0FBRyxDQUFDO29CQUN6QixLQUFLLGVBQWUsQ0FBQyxNQUFNO3dCQUN2QixPQUFPLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzdGLEtBQUssZUFBZSxDQUFDLEtBQUssQ0FBQztvQkFDM0IsS0FBSyxlQUFlLENBQUMsSUFBSTt3QkFDckIsT0FBTyxDQUNILGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUM1RixDQUFDO29CQUNOLEtBQUssZUFBZSxDQUFDLE1BQU0sQ0FBQztvQkFDNUIsS0FBSyxlQUFlLENBQUMsU0FBUzt3QkFDMUIsT0FBTyxrQkFBa0IsR0FBRyxlQUFlLENBQUMsTUFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7aUJBQzVFO2dCQUVELE9BQU8sQ0FDSCxTQUFTLENBQUMsU0FBUztvQkFDbkIsU0FBUyxDQUFDLFNBQVM7b0JBQ25CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FDekUsQ0FBQzthQUNMO2lCQUFNO2dCQUNILE9BQU8sa0JBQWtCLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQzthQUNyRDtTQUNKO2FBQU07WUFDSCxPQUFPLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7U0FDbkQ7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxXQUFXLENBQUMsZ0JBQXdCLEVBQUUsaUJBQWtDO1FBQzNFLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU5QyxJQUFJLGlCQUFpQixLQUFLLGVBQWUsQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEYsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksaUJBQWlCLEtBQUssZUFBZSxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM1RSxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxpQkFBaUIsS0FBSyxlQUFlLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzlFLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLGlCQUFpQixLQUFLLGVBQWUsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEYsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksaUJBQWlCLEtBQUssZUFBZSxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsRixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsSUFBSSxpQkFBaUIsS0FBSyxlQUFlLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hGLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksY0FBYyxDQUFDLGdCQUF3QjtRQUMxQyxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUIsQ0FDcEIsa0JBQTJDLEVBQzNDLHFCQUE4QyxFQUM5QyxVQUFrQixFQUNsQixXQUFtQixFQUNuQixvQkFBNkI7UUFFN0IsOEJBQThCO1FBQzlCLElBQUkscUJBQXFCLEtBQUssU0FBUyxFQUFFO1lBQ3JDLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQztTQUNoQztRQUVELElBQUksZ0JBQWdCLEdBQW9CLGVBQWUsQ0FBQyxJQUFJLENBQUM7UUFDN0QsTUFBTSxZQUFZLEdBQVksb0JBQW9CO1lBQzlDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLEVBQUU7WUFDNUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9ELE1BQU0sV0FBVyxHQUFZLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRTNHLE1BQU0sU0FBUyxHQUFZLFlBQVksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RixNQUFNLFVBQVUsR0FBWSxZQUFZLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDcEcsTUFBTSxRQUFRLEdBQVksWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sV0FBVyxHQUFZLFlBQVksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUV6RyxNQUFNLGFBQWEsR0FBWSxZQUFZLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3RSxNQUFNLGNBQWMsR0FBWSxZQUFZLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDL0YsTUFBTSxZQUFZLEdBQVksWUFBWSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUUsTUFBTSxlQUFlLEdBQVksWUFBWSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBRW5HLElBQUksUUFBUSxFQUFFO1lBQ1Ysc0NBQXNDO1lBQ3RDLGdCQUFnQixHQUFHLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7U0FDaEU7UUFFRCxJQUFJLFdBQVcsRUFBRTtZQUNiLHNDQUFzQztZQUN0QyxnQkFBZ0IsR0FBRyxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO1NBQ25FO1FBRUQsSUFBSSxTQUFTLElBQUksWUFBWSxJQUFJLGVBQWUsRUFBRTtZQUM5QyxzQ0FBc0M7WUFDdEMsZ0JBQWdCLEdBQUcsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQztTQUM5RDtRQUVELElBQUksVUFBVSxJQUFJLFlBQVksSUFBSSxlQUFlLEVBQUU7WUFDL0Msc0NBQXNDO1lBQ3RDLGdCQUFnQixHQUFHLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7U0FDL0Q7UUFFRCxJQUFJLFFBQVEsSUFBSSxhQUFhLElBQUksY0FBYyxFQUFFO1lBQzdDLHNDQUFzQztZQUN0QyxnQkFBZ0IsR0FBRyxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDO1NBQzdEO1FBRUQsSUFBSSxXQUFXLElBQUksYUFBYSxJQUFJLGNBQWMsRUFBRTtZQUNoRCxzQ0FBc0M7WUFDdEMsZ0JBQWdCLEdBQUcsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztTQUNoRTtRQUVELE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztJQUVELDRCQUE0QjtJQUU1QiwwQkFBMEI7SUFFMUI7Ozs7T0FJRztJQUNLLGtCQUFrQixDQUFDLE9BQW9CO1FBQzNDLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtZQUNsQixPQUFPLENBQUMsQ0FBQztTQUNaO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDdkIsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDO1NBQzVCO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxZQUEyQixDQUFDLENBQUM7UUFDakYsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNqQyxPQUFPLFdBQVcsR0FBRyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssa0JBQWtCLENBQUMsT0FBb0IsRUFBRSxPQUFPLEdBQUcsS0FBSztRQUM1RCxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFDbEIsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUVELHVDQUF1QztRQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtZQUN4QixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFDO1FBRUQsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxLQUFLLE9BQU8sRUFBRTtZQUMzRSxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxJQUFJLGNBQWMsQ0FBQyxDQUFDO1FBRTlGLElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztTQUMxQzthQUFNO1lBQ0gsT0FBTyxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztJQUNMLENBQUM7Q0FHSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY2xhc3MgUG9wVXBIZWxwZXIge1xuICAgIC8vICNyZWdpb24gUHVibGljIE1ldGhvZHNcblxuICAgIHB1YmxpYyBnZXRDb250YWluZXJIZWlnaHQocmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcmVmZXJlbmNlSXNDb250YWluZXI6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICBpZiAocmVmZXJlbmNlQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlSXNDb250YWluZXJcbiAgICAgICAgICAgICAgICA/IHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudEhlaWdodFxuICAgICAgICAgICAgICAgIDogcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udGFpbmVyV2lkdGgocmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcmVmZXJlbmNlSXNDb250YWluZXI6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICBpZiAocmVmZXJlbmNlQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlSXNDb250YWluZXJcbiAgICAgICAgICAgICAgICA/IHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudFdpZHRoXG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IFBvc2l0aW9uIHdobyB0aGUgcG9wdXAgd291bGQgYmUgcG9zaXRpb25lZFxuICAgICAqXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBIVE1MIEVsZW1lbnQgd2hpY2ggaXMgdGhlIHJlZmVyZW5jZSB0byBwb3NpdGlvbmluZyB0aGUgcG9wdXBcbiAgICAgKiBAcGFyYW0gcG9wdXBjb250ZW50Y29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIGNvbnRhaW5lciBvZiBwb3B1cFxuICAgICAqIEBwYXJhbSBwb3B1cE9mZnNldCBPZmZzZXQgZm9yIHBvcHVwIHBvc2l0aW9uaW5nXG4gICAgICogQHBhcmFtIGFsbG93ZWRQb3NpdGlvbnMgQWxsb3dlZCBQb3NpdGlvbnMgZm9yIHRoZSBwb3B1cFxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBwb3B1cCBzaG91bGQgYmUgZGlzcGxheWVkXG4gICAgICovXG4gICAgcHVibGljIGdldERpc3BsYXlQb3NpdGlvbihcbiAgICAgICAgcmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcG9wdXBjb250ZW50Y29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgYXJyb3dXaWR0aDogbnVtYmVyLFxuICAgICAgICBhcnJvd0hlaWdodDogbnVtYmVyLFxuICAgICAgICBhbGxvd2VkUG9zaXRpb25zOiBzdHJpbmcsXG4gICAgICAgIHJlZmVyZW5jZUlzQ29udGFpbmVyOiBib29sZWFuXG4gICAgKTogVG9vbHRpcFBvc2l0aW9uIHtcbiAgICAgICAgY29uc3QgdmFsaWRQb3NpdGlvbnM6IFRvb2x0aXBQb3NpdGlvbiA9IHRoaXMudmFsaWRhdGVQb3NpdGlvbnMoXG4gICAgICAgICAgICByZWZlcmVuY2VDb250YWluZXIsXG4gICAgICAgICAgICBwb3B1cGNvbnRlbnRjb250YWluZXIsXG4gICAgICAgICAgICBhcnJvd1dpZHRoLFxuICAgICAgICAgICAgYXJyb3dIZWlnaHQsXG4gICAgICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5yaWdodCkgJiYgdmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24ucmlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wKSAmJiB2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3ApIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24udG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9zaXRpb24oYWxsb3dlZFBvc2l0aW9ucywgVG9vbHRpcFBvc2l0aW9uLmxlZnQpICYmIHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmxlZnQpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ubGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5ib3R0b20pICYmIHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wZW5kKSAmJiB2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3BlbmQpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24udG9wZW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kKSAmJlxuICAgICAgICAgICAgdmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgQXV0byBQb3NpdGlvbiBvciBEZWZhdWx0XG4gICAgICAgIGlmICh0aGlzLmlzQXV0b1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMpKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICAgICAgaWYgKHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLnJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5yaWdodDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGlmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3ApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnRvcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGlmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi5sZWZ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5sZWZ0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICAgICAgaWYgKHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24uYm90dG9tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnJpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oYWxsb3dlZFBvc2l0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBoZWlnaHQgb2YgdGhlIHBvcHVwXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIGNvbnRhaW5lciBvZiBwb3B1cFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3B1cEhlaWdodChjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudEhlaWdodCA/PyAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSB3aWR0aCBvZiB0aGUgcG9wdXBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gY29udGFpbmVyIG9mIHBvcHVwXG4gICAgICovXG4gICAgcHVibGljIGdldFBvcHVwV2lkdGgoY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik6IG51bWJlciB7XG4gICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5jbGllbnRXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGVmaW5lZCBwb3NpdGlvbiBmb3IgdGhlIHRvb2x0aXBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBhbGxvd2VkUG9zaXRpb25zIEFsbG93ZWQgcG9zaXRpb25zIGRlZmluZWQgaW4gbWFya3VwIGZvciBwb3B1cFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zOiBzdHJpbmcpOiBUb29sdGlwUG9zaXRpb24ge1xuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24ubGVmdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ubGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi50b3ApKSB7XG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5yaWdodCkpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tKSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wZW5kKSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi50b3BlbmQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kKSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IFBvc2l0aW9uIGlmIGVtcHR5XG4gICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXAgZnJvbSBsaW5rc1xuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRyb2xSZWZlcmVuY2UgRWxlbWVudCBSZWZlcmVuY2UgdG8gYW5ndWxhciBjb21wb25lbnRcbiAgICAgKiBAcGFyYW0gcG9wdXBDb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gY29udGFpbmVyIG9mIHBvcHVwXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBIVE1MIEVsZW1lbnQgd2hpY2ggaXMgdGhlIHJlZmVyZW5jZSB0byBwb3NpdGlvbmluZyB0aGUgcG9wdXBcbiAgICAgKiBAcGFyYW0gcG9wdXBPZmZzZXQgT2Zmc2V0IGZvciBwb3B1cCBwb3NpdGlvbmluZ1xuICAgICAqIEBwYXJhbSByZXF1ZXN0ZWRQb3NpdGlvbiBSZXF1ZXN0ZWQgUG9zaXRpb24gYnkgQ29udHJvbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3NpdGlvbkxlZnQoXG4gICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHBvcHVwQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgY29udHJvbFJlZmVyZW5jZTogRWxlbWVudFJlZixcbiAgICAgICAgYXJyb3dXaWR0aDogbnVtYmVyLFxuICAgICAgICBhcnJvd0hlaWdodDogbnVtYmVyLFxuICAgICAgICByZXF1ZXN0ZWRQb3NpdGlvbjogc3RyaW5nLFxuICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lcjogYm9vbGVhblxuICAgICk6IG51bWJlciB7XG4gICAgICAgIGlmIChyZWZlcmVuY2VDb250YWluZXIgIT09IG51bGwgJiYgcmVmZXJlbmNlQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEl0ZW0gPSByZWZlcmVuY2VJc0NvbnRhaW5lciA/IChpdGVtLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50KSA6IGl0ZW07XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudFBvc2l0aW9uOiBET01SZWN0ID0gY2hpbGRJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREaXNwbGF5UG9zaXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3B1cENvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycm93V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJvd0hlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZFBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSXNDb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi50b3A6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFBvc2l0aW9uLmxlZnQgKyBjb250ZW50UG9zaXRpb24ud2lkdGggLyAyIC0gdGhpcy5nZXRQb3B1cFdpZHRoKHBvcHVwQ29udGFpbmVyKSAvIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLnRvcGVuZDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRQb3NpdGlvbi5sZWZ0ICsgY29udGVudFBvc2l0aW9uLndpZHRoIC0gdGhpcy5nZXRQb3B1cFdpZHRoKHBvcHVwQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24ucmlnaHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGVudFBvc2l0aW9uLmxlZnQgKyBjb250ZW50UG9zaXRpb24ud2lkdGggKyBhcnJvd1dpZHRoIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24ubGVmdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50UG9zaXRpb24ubGVmdCAtIHRoaXMuZ2V0UG9wdXBXaWR0aChwb3B1cENvbnRhaW5lcikgKyAoYXJyb3dXaWR0aCAvIDIpICogLTE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sUmVmZXJlbmNlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSB0b29sdGlwIGZyb20gdGhlIHRvcFxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRyb2xSZWZlcmVuY2UgRWxlbWVudCBSZWZlcmVuY2UgdG8gYW5ndWxhciBjb21wb25lbnRcbiAgICAgKiBAcGFyYW0gcG9wdXBDb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gY29udGFpbmVyIG9mIHBvcHVwXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBIVE1MIEVsZW1lbnQgd2hpY2ggaXMgdGhlIHJlZmVyZW5jZSB0byBwb3NpdGlvbmluZyB0aGUgcG9wdXBcbiAgICAgKiBAcGFyYW0gcG9wdXBPZmZzZXQgT2Zmc2V0IGZvciBwb3B1cCBwb3NpdGlvbmluZ1xuICAgICAqIEBwYXJhbSByZXF1ZXN0ZWRQb3NpdGlvbiBSZXF1ZXN0ZWQgUG9zaXRpb24gYnkgQ29udHJvbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3NpdGlvblRvcChcbiAgICAgICAgcmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcG9wdXBDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBjb250cm9sUmVmZXJlbmNlOiBFbGVtZW50UmVmLFxuICAgICAgICBhcnJvd1dpZHRoOiBudW1iZXIsXG4gICAgICAgIGFycm93SGVpZ2h0OiBudW1iZXIsXG4gICAgICAgIHJlcXVlc3RlZFBvc2l0aW9uOiBzdHJpbmcsXG4gICAgICAgIHJlZmVyZW5jZUlzQ29udGFpbmVyOiBib29sZWFuXG4gICAgKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlZmVyZW5jZUNvbnRhaW5lciAhPT0gbnVsbCAmJiByZWZlcmVuY2VDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEl0ZW0gPSByZWZlcmVuY2VJc0NvbnRhaW5lciA/IChpdGVtLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50KSA6IGl0ZW07XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudFBvc2l0aW9uOiBET01SZWN0ID0gY2hpbGRJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gR2V0IFBvc2l0aW9uIHdpdGggU2Nyb2xsIChTY3JvbGxiYXJzIGluc2lkZSBwYWdlIHNob3VsZCBiZSBzdWJzdHJhY3RlZClcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50UG9zaXRpb25Ub3AgPVxuICAgICAgICAgICAgICAgICAgICBjaGlsZEl0ZW0ub2Zmc2V0VG9wICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPZmZzZXRUb3BQYXJlbnQoY2hpbGRJdGVtLm9mZnNldFBhcmVudCBhcyBIVE1MRWxlbWVudCkgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNjcm9sbFRvcFBhcmVudChjaGlsZEl0ZW0ucGFyZW50RWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERpc3BsYXlQb3NpdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3dXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycm93SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLnRvcDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24udG9wZW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRQb3NpdGlvblRvcCAtIHRoaXMuZ2V0UG9wdXBIZWlnaHQocG9wdXBDb250YWluZXIpICsgKGFycm93SGVpZ2h0IC8gMikgKiAtMTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24ucmlnaHQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLmxlZnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRQb3NpdGlvblRvcCArIGNvbnRlbnRQb3NpdGlvbi5oZWlnaHQgLyAyIC0gdGhpcy5nZXRQb3B1cEhlaWdodChwb3B1cENvbnRhaW5lcikgLyAyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5ib3R0b206XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbWVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50UG9zaXRpb25Ub3AgKyBjb250ZW50UG9zaXRpb24uaGVpZ2h0ICsgYXJyb3dIZWlnaHQgLyAyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkSXRlbS5jbGllbnRUb3AgK1xuICAgICAgICAgICAgICAgICAgICBjaGlsZEl0ZW0ub2Zmc2V0VG9wIC1cbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuZ2V0UG9wdXBIZWlnaHQocG9wdXBDb250YWluZXIpIC8gMiAtIGNoaWxkSXRlbS5vZmZzZXRIZWlnaHQgLyAyKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcG9zaXRpb24gaGFzIGJlZW4gY29uZmlndXJlZFxuICAgICAqXG4gICAgICogQHBhcmFtIGFsbG93ZWRQb3NpdGlvbnMgUG9zaXRpb25zIHRoYXQgYWxsb3dlZCBieSBjb250cm9sXG4gICAgICogQHBhcmFtIHJlcXVlc3RlZFBvc2l0aW9uIFBvc2l0aW9uIHRvIGJlIGNoZWNrZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzUG9zaXRpb24oYWxsb3dlZFBvc2l0aW9uczogc3RyaW5nLCByZXF1ZXN0ZWRQb3NpdGlvbjogVG9vbHRpcFBvc2l0aW9uKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGFsbG93ZWRQb3NpdGlvbnMuc3BsaXQoJ3wnKTtcblxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5yaWdodCAmJiBwb3NpdGlvbnMuaW5kZXhPZigncmlnaHQnKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRQb3NpdGlvbiA9PT0gVG9vbHRpcFBvc2l0aW9uLnRvcCAmJiBwb3NpdGlvbnMuaW5kZXhPZigndG9wJykgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5sZWZ0ICYmIHBvc2l0aW9ucy5pbmRleE9mKCdsZWZ0JykgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5ib3R0b20gJiYgcG9zaXRpb25zLmluZGV4T2YoJ2JvdHRvbScpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RlZFBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24udG9wZW5kICYmIHBvc2l0aW9ucy5pbmRleE9mKCd0b3BlbmQnKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQgJiYgcG9zaXRpb25zLmluZGV4T2YoJ2JvdHRvbWVuZCcpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgd2hldGhlciBBdXRvUG9zaXRpb24gaXMgYWN0aXZlXG4gICAgICogQHBhcmFtIHBvc2l0aW9uUHJvcGVydHkgTGlzdCBvZiBhbGxvd2VkIHBvc2l0aW9uc1xuICAgICAqL1xuICAgIHB1YmxpYyBpc0F1dG9Qb3NpdGlvbihwb3NpdGlvblByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gcG9zaXRpb25Qcm9wZXJ0eS5zcGxpdCgnfCcpO1xuICAgICAgICByZXR1cm4gcG9zaXRpb25zLmluZGV4T2YoJ2F1dG8nKSA+PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBwb3NpdGlvbiBpcyB2YWxpZCBvciB3aGV0aGVyIHRoZSB0b29sdGlwIG9uIHRoZSBwb3NpdGlvbiBoYXMgc3BhY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGVQb3NpdGlvbnMoXG4gICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHBvcHVwY29udGVudGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIGFycm93V2lkdGg6IG51bWJlcixcbiAgICAgICAgYXJyb3dIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgcmVmZXJlbmNlSXNDb250YWluZXI6IGJvb2xlYW5cbiAgICApOiBUb29sdGlwUG9zaXRpb24ge1xuICAgICAgICAvLyBDaGVjayBpZiBDb250YWluZXIgaXMgZmFsc2VcbiAgICAgICAgaWYgKHBvcHVwY29udGVudGNvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnJpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFsbG93ZWRQb3NpdGlvbnM6IFRvb2x0aXBQb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbi5ub25lO1xuICAgICAgICBjb25zdCBiYXNlUG9zaXRpb246IERPTVJlY3QgPSByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICAgICAgPyByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgICAgOiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgdG9vbHRpcFJlY3Q6IERPTVJlY3QgPSBwb3B1cGNvbnRlbnRjb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBsZWZ0UG9zT2s6IGJvb2xlYW4gPSBiYXNlUG9zaXRpb24ubGVmdCAtICh0b29sdGlwUmVjdC53aWR0aCArIGFycm93V2lkdGggKiAtMSkgPiAwO1xuICAgICAgICBjb25zdCByaWdodFBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLnJpZ2h0ICsgdG9vbHRpcFJlY3Qud2lkdGggKyBhcnJvd1dpZHRoIDwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIGNvbnN0IHRvcFBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLnRvcCAtICh0b29sdGlwUmVjdC5oZWlnaHQgKyBhcnJvd0hlaWdodCkgPiAwO1xuICAgICAgICBjb25zdCBib3R0b21Qb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5ib3R0b20gKyB0b29sdGlwUmVjdC5oZWlnaHQgKyBhcnJvd0hlaWdodCA8IHdpbmRvdy5pbm5lckhlaWdodDtcblxuICAgICAgICBjb25zdCBsZWZ0SGFsZlBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLmxlZnQgLSB0b29sdGlwUmVjdC53aWR0aCAvIDIgPiAwO1xuICAgICAgICBjb25zdCByaWdodEhhbGZQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5yaWdodCArIHRvb2x0aXBSZWN0LndpZHRoIC8gMiA8IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICBjb25zdCB0b3BIYWxmUG9zT2s6IGJvb2xlYW4gPSBiYXNlUG9zaXRpb24udG9wIC0gdG9vbHRpcFJlY3QuaGVpZ2h0IC8gMiA+IDA7XG4gICAgICAgIGNvbnN0IGJvdHRvbUhhbGZQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5ib3R0b20gKyB0b29sdGlwUmVjdC5oZWlnaHQgLyAyIDwgd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgICAgIGlmICh0b3BQb3NPaykge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLnRvcGVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib3R0b21Qb3NPaykge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbWVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsZWZ0UG9zT2sgJiYgdG9wSGFsZlBvc09rICYmIGJvdHRvbUhhbGZQb3NPaykge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLmxlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmlnaHRQb3NPayAmJiB0b3BIYWxmUG9zT2sgJiYgYm90dG9tSGFsZlBvc09rKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICAgICAgYWxsb3dlZFBvc2l0aW9ucyA9IGFsbG93ZWRQb3NpdGlvbnMgfCBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9wUG9zT2sgJiYgbGVmdEhhbGZQb3NPayAmJiByaWdodEhhbGZQb3NPaykge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLnRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib3R0b21Qb3NPayAmJiBsZWZ0SGFsZlBvc09rICYmIHJpZ2h0SGFsZlBvc09rKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICAgICAgYWxsb3dlZFBvc2l0aW9ucyA9IGFsbG93ZWRQb3NpdGlvbnMgfCBUb29sdGlwUG9zaXRpb24uYm90dG9tO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFsbG93ZWRQb3NpdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gICAgLy8gI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHRvcCBvZiB0aGUgcGFnZSBpbnNpZGUgYWxsIGVsZW1lbnRzXG4gICAgICogQHBhcmFtIGVsZW1lbnQgSFRNTCBFbGVtZW50XG4gICAgICogQHJldHVybnMgc3VtbWFyaXplZCB0b3AgdmFsdWUgZm9yIGFic29sdXRlIHBvc2l0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRPZmZzZXRUb3BQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoZWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWVsZW1lbnQub2Zmc2V0UGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRWYWx1ZSA9IHRoaXMuZ2V0T2Zmc2V0VG9wUGFyZW50KGVsZW1lbnQub2Zmc2V0UGFyZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIHJldHVybiBwYXJlbnRWYWx1ZSArIG9mZnNldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWNsdWxhdGUgU2Nyb2xsYmFycyBpbnNpZGUgdHJlZVxuICAgICAqIEBwYXJhbSBlbGVtZW50IEhUTUwgRWxlbWVudFxuICAgICAqIEBwYXJhbSBbaXNGaXhlZD1mYWxzZV0gSW52ZXJ0IFNjcm9sbCBQb3NpdGlvbiB2YWx1ZSB3aGVuIHN0eWxlIGlzIGZpeGVkIHRvIHByZXNlcnZlIG5lZ2F0aXZlIHZhbHVlc1xuICAgICAqIEByZXR1cm5zIFNjcm9sbCB0b3AgdmFsdWUgb2YgZWxlbWVudCB3aXRoIGFsbCBjaGlsZHNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFNjcm9sbFRvcFBhcmVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgaXNGaXhlZCA9IGZhbHNlKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQm9keSBTY3JvbGwgc2hvdWxkIG5vdCBiZSBjYWxjdWxhdGVkXG4gICAgICAgIGlmICghZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gaXNGaXhlZCA/IGVsZW1lbnQuc2Nyb2xsVG9wIDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpc0N1cnJlbnRGaXhlZCA9IGZhbHNlO1xuICAgICAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgncG9zaXRpb24nKSA9PT0gJ2ZpeGVkJykge1xuICAgICAgICAgICAgaXNDdXJyZW50Rml4ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50VmFsdWUgPSB0aGlzLmdldFNjcm9sbFRvcFBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQsIGlzRml4ZWQgfHwgaXNDdXJyZW50Rml4ZWQpO1xuXG4gICAgICAgIGlmIChpc0ZpeGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50VmFsdWUgKyBlbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRWYWx1ZSArIGVsZW1lbnQuc2Nyb2xsVG9wICogLTE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xufVxuIl19
@@ -0,0 +1,39 @@
1
+ import { SACCONFIGURATION_SERVICE, SacDefaultConfigurationService } from '../services';
2
+ import { Injector, Pipe } from '@angular/core';
3
+ export class SacTestingAttributePipe {
4
+ // #endregion Properties
5
+ // #region Constructors
6
+ /**
7
+ *
8
+ */
9
+ constructor(injector) {
10
+ // get attribute state from config
11
+ const configurationService = injector.get(SACCONFIGURATION_SERVICE, new SacDefaultConfigurationService());
12
+ this.isEnabled = configurationService.EnableE2EAttributes;
13
+ }
14
+ // #endregion Constructors
15
+ // #region Public Methods
16
+ transform(controlname, e2eattribute) {
17
+ // return null to disable attribute if disabled
18
+ if (!this.isEnabled) {
19
+ return null;
20
+ }
21
+ if (e2eattribute) {
22
+ return e2eattribute;
23
+ }
24
+ if (controlname) {
25
+ return controlname;
26
+ }
27
+ // disable attribute if name and e2e attribute is not set
28
+ return null;
29
+ }
30
+ }
31
+ SacTestingAttributePipe.decorators = [
32
+ { type: Pipe, args: [{
33
+ name: 'testingattribute',
34
+ },] }
35
+ ];
36
+ SacTestingAttributePipe.ctorParameters = () => [
37
+ { type: Injector }
38
+ ];
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZ2F0dHJpYnV0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3J1bm5lci93b3JrL3NpbXBsZWFuZ3VsYXJjb250cm9scy9zaW1wbGVhbmd1bGFyY29udHJvbHMvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsidXRpbGl0aWVzL3Rlc3RpbmdhdHRyaWJ1dGUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkYsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBSzlELE1BQU0sT0FBTyx1QkFBdUI7SUFRaEMsd0JBQXdCO0lBRXhCLHVCQUF1QjtJQUV2Qjs7T0FFRztJQUNILFlBQVksUUFBa0I7UUFDMUIsa0NBQWtDO1FBQ2xDLE1BQU0sb0JBQW9CLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLDhCQUE4QixFQUFFLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsU0FBUyxHQUFHLG9CQUFvQixDQUFDLG1CQUFtQixDQUFDO0lBQzlELENBQUM7SUFFRCwwQkFBMEI7SUFFMUIseUJBQXlCO0lBRWxCLFNBQVMsQ0FBQyxXQUFtQixFQUFFLFlBQW9CO1FBQ3RELCtDQUErQztRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxZQUFZLEVBQUU7WUFDZCxPQUFPLFlBQVksQ0FBQztTQUN2QjtRQUVELElBQUksV0FBVyxFQUFFO1lBQ2IsT0FBTyxXQUFXLENBQUM7U0FDdEI7UUFFRCx5REFBeUQ7UUFDekQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7O1lBNUNKLElBQUksU0FBQztnQkFDRixJQUFJLEVBQUUsa0JBQWtCO2FBQzNCOzs7WUFKUSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU0FDQ09ORklHVVJBVElPTl9TRVJWSUNFLCBTYWNEZWZhdWx0Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBJbmplY3RvciwgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ3Rlc3RpbmdhdHRyaWJ1dGUnLFxufSlcbmV4cG9ydCBjbGFzcyBTYWNUZXN0aW5nQXR0cmlidXRlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIC8vICNyZWdpb24gUHJvcGVydGllc1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB3aGV0aGVyIHRoZSBhdHRyaWJ1dGUgaXMgYWN0aXZlXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvLyAjZW5kcmVnaW9uIFByb3BlcnRpZXNcblxuICAgIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgICAgICAvLyBnZXQgYXR0cmlidXRlIHN0YXRlIGZyb20gY29uZmlnXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFNBQ0NPTkZJR1VSQVRJT05fU0VSVklDRSwgbmV3IFNhY0RlZmF1bHRDb25maWd1cmF0aW9uU2VydmljZSgpKTtcbiAgICAgICAgdGhpcy5pc0VuYWJsZWQgPSBjb25maWd1cmF0aW9uU2VydmljZS5FbmFibGVFMkVBdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gQ29uc3RydWN0b3JzXG5cbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbnRyb2xuYW1lOiBzdHJpbmcsIGUyZWF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgICAgIC8vIHJldHVybiBudWxsIHRvIGRpc2FibGUgYXR0cmlidXRlIGlmIGRpc2FibGVkXG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGUyZWF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUyZWF0dHJpYnV0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250cm9sbmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xuYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGlzYWJsZSBhdHRyaWJ1dGUgaWYgbmFtZSBhbmQgZTJlIGF0dHJpYnV0ZSBpcyBub3Qgc2V0XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview This file was generated by the Angular template compiler. Do not edit.
3
+ *
4
+ * @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes,extraRequire}
5
+ * tslint:disable
6
+ */
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZ2F0dHJpYnV0ZS5waXBlLm5nZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9zaW1wbGVhbmd1bGFyY29udHJvbHMvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbInV0aWxpdGllcy90ZXN0aW5nYXR0cmlidXRlLnBpcGUubmdmYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmkwLkNvbXBvbmVudEZhY3Rvcnk7XG4iXX0=
@@ -0,0 +1,12 @@
1
+ import { SacTestingAttributePipe } from './testingattribute.pipe';
2
+ import { NgModule } from '@angular/core';
3
+ export class SACCommonUtliltiesModule {
4
+ }
5
+ SACCommonUtliltiesModule.decorators = [
6
+ { type: NgModule, args: [{
7
+ declarations: [SacTestingAttributePipe],
8
+ imports: [],
9
+ exports: [SacTestingAttributePipe],
10
+ },] }
11
+ ];
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9zaW1wbGVhbmd1bGFyY29udHJvbHMvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbInV0aWxpdGllcy91dGlsaXRpZXMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPekMsTUFBTSxPQUFPLHdCQUF3Qjs7O1lBTHBDLFFBQVEsU0FBQztnQkFDTixZQUFZLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDdkMsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7YUFDckMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYWNUZXN0aW5nQXR0cmlidXRlUGlwZSB9IGZyb20gJy4vdGVzdGluZ2F0dHJpYnV0ZS5waXBlJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbU2FjVGVzdGluZ0F0dHJpYnV0ZVBpcGVdLFxuICAgIGltcG9ydHM6IFtdLFxuICAgIGV4cG9ydHM6IFtTYWNUZXN0aW5nQXR0cmlidXRlUGlwZV0sXG59KVxuZXhwb3J0IGNsYXNzIFNBQ0NvbW1vblV0bGlsdGllc01vZHVsZSB7fVxuIl19
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview This file was generated by the Angular template compiler. Do not edit.
3
+ *
4
+ * @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes,extraRequire}
5
+ * tslint:disable
6
+ */
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLm1vZHVsZS5uZ2ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NpbXBsZWFuZ3VsYXJjb250cm9scy9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJ1dGlsaXRpZXMvdXRpbGl0aWVzLm1vZHVsZS5uZ2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGkwIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgaTEgZnJvbSAnLi91dGlsaXRpZXMubW9kdWxlJztcbmltcG9ydCAqIGFzIGkyIGZyb20gJy4vdGVzdGluZ2F0dHJpYnV0ZS5waXBlJztcbmV4cG9ydCBjb25zdCBTQUNDb21tb25VdGxpbHRpZXNNb2R1bGVOZ0ZhY3Rvcnk6aTAuTmdNb2R1bGVGYWN0b3J5PGkxLlNBQ0NvbW1vblV0bGlsdGllc01vZHVsZT4gPSAobnVsbCBhcyBhbnkpO1xudmFyIF9kZWNsMF8xOmkyLlNhY1Rlc3RpbmdBdHRyaWJ1dGVQaXBlID0gKDxhbnk+KG51bGwgYXMgYW55KSk7XG52YXIgX2RlY2wwXzI6aTAuVGVtcGxhdGVSZWY8YW55PiA9ICg8YW55PihudWxsIGFzIGFueSkpO1xudmFyIF9kZWNsMF8zOmkwLkVsZW1lbnRSZWY8YW55PiA9ICg8YW55PihudWxsIGFzIGFueSkpO1xuIl19