@gravitee/ui-components 3.23.0 → 3.24.0

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 (90) hide show
  1. package/package.json +22 -21
  2. package/src/atoms/gv-autocomplete.js +5 -6
  3. package/src/atoms/gv-button.js +4 -4
  4. package/src/atoms/gv-checkbox.js +3 -3
  5. package/src/atoms/gv-date-picker-calendar.js +4 -5
  6. package/src/atoms/gv-date-picker-cell.js +4 -4
  7. package/src/atoms/gv-date-picker.js +4 -5
  8. package/src/atoms/gv-file-upload.js +4 -5
  9. package/src/atoms/gv-icon.js +14 -7
  10. package/src/atoms/gv-image.js +4 -4
  11. package/src/atoms/gv-input-message.js +2 -3
  12. package/src/atoms/gv-input.js +3 -3
  13. package/src/atoms/gv-link.js +6 -6
  14. package/src/atoms/gv-message.js +3 -3
  15. package/src/atoms/gv-metric.js +3 -3
  16. package/src/atoms/gv-relative-time.js +6 -4
  17. package/src/atoms/gv-select-native.js +6 -6
  18. package/src/atoms/gv-select.js +5 -5
  19. package/src/atoms/gv-spinner.js +2 -2
  20. package/src/atoms/gv-state.js +3 -3
  21. package/src/atoms/gv-switch.js +4 -4
  22. package/src/atoms/gv-tag.js +3 -3
  23. package/src/atoms/gv-text.js +4 -4
  24. package/src/charts/gv-chart-bar.js +2 -2
  25. package/src/charts/gv-chart-gauge.js +2 -2
  26. package/src/charts/gv-chart-histogram.js +2 -2
  27. package/src/charts/gv-chart-line.js +2 -2
  28. package/src/charts/gv-chart-map.js +2 -2
  29. package/src/charts/gv-chart-pie.js +2 -2
  30. package/src/lib/item.js +2 -2
  31. package/src/lib/studio.js +3 -3
  32. package/src/mixins/chart-element.js +3 -4
  33. package/src/mixins/input-element.js +3 -3
  34. package/src/mixins/item-resource.js +3 -3
  35. package/src/mixins/with-skeleton-attribute.js +2 -2
  36. package/src/molecules/gv-card-full.js +3 -3
  37. package/src/molecules/gv-card-list.js +3 -4
  38. package/src/molecules/gv-card.js +3 -3
  39. package/src/molecules/gv-category-list.js +2 -3
  40. package/src/molecules/gv-category.js +3 -3
  41. package/src/molecules/gv-code-hint.js +2 -3
  42. package/src/molecules/gv-code.js +3 -3
  43. package/src/molecules/gv-confirm.js +2 -3
  44. package/src/molecules/gv-cron-editor.js +3 -3
  45. package/src/molecules/gv-dropdown-menu.js +2 -3
  46. package/src/molecules/gv-expandable.js +3 -3
  47. package/src/molecules/gv-expression-language.js +2 -3
  48. package/src/molecules/gv-identity-picture.js +3 -4
  49. package/src/molecules/gv-list.js +4 -4
  50. package/src/molecules/gv-metrics.js +4 -4
  51. package/src/molecules/gv-modal.js +2 -2
  52. package/src/molecules/gv-nav.js +5 -5
  53. package/src/molecules/gv-option.js +6 -6
  54. package/src/molecules/gv-plans.js +5 -6
  55. package/src/molecules/gv-popover.js +3 -4
  56. package/src/molecules/gv-promote.js +3 -3
  57. package/src/molecules/gv-rating-list.js +4 -5
  58. package/src/molecules/gv-rating.js +4 -4
  59. package/src/molecules/gv-row-expandable.js +2 -2
  60. package/src/molecules/gv-row.js +3 -3
  61. package/src/molecules/gv-stats.js +4 -4
  62. package/src/molecules/gv-stepper.js +4 -4
  63. package/src/molecules/gv-table.js +7 -8
  64. package/src/molecules/gv-tree.js +4 -4
  65. package/src/organisms/gv-documentation.js +2 -2
  66. package/src/organisms/gv-header.js +6 -6
  67. package/src/organisms/gv-http-client.js +2 -2
  68. package/src/organisms/gv-menu.js +3 -3
  69. package/src/organisms/gv-newsletter-subscription.js +2 -2
  70. package/src/organisms/gv-pagination.js +2 -2
  71. package/src/organisms/gv-properties.js +3 -3
  72. package/src/organisms/gv-resizable-views.js +3 -4
  73. package/src/organisms/gv-resources.js +2 -2
  74. package/src/organisms/gv-schema-form-array.js +5 -5
  75. package/src/organisms/gv-schema-form-control-object.js +5 -5
  76. package/src/organisms/gv-schema-form-control.js +4 -9
  77. package/src/organisms/gv-schema-form.js +8 -7
  78. package/src/organisms/gv-tabs.js +2 -3
  79. package/src/organisms/gv-user-menu.js +4 -4
  80. package/src/organisms/gv-vertical-menu.js +2 -2
  81. package/src/policy-studio/gv-flow-step.js +3 -3
  82. package/src/policy-studio/gv-flow.js +5 -5
  83. package/src/policy-studio/gv-policy-studio-menu.js +4 -4
  84. package/src/policy-studio/gv-policy-studio.js +5 -5
  85. package/src/styles/empty.js +2 -2
  86. package/src/styles/input.js +2 -2
  87. package/src/styles/link.js +2 -2
  88. package/src/styles/skeleton.js +2 -2
  89. package/src/styles/zoom.js +2 -2
  90. package/src/theme/gv-theme.js +2 -2
@@ -13,7 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { css, html, LitElement } from 'lit-element';
16
+ import { css, html, LitElement } from 'lit';
17
17
  import { methods } from '../lib/studio';
18
18
  import { dispatchCustomEvent } from '../lib/events';
19
19
  import '../atoms/gv-button';
@@ -29,7 +29,7 @@ import './gv-flow';
29
29
  import './gv-flow-step';
30
30
  import './gv-policy-studio-menu';
31
31
  import { empty } from '../styles/empty';
32
- import { cache } from 'lit-html/directives/cache';
32
+ import { cache } from 'lit/directives/cache';
33
33
  import { deepClone, deepEqual } from '../lib/utils';
34
34
  import { KeyboardElement, KEYS } from '../mixins/keyboard-element';
35
35
  const FLOW_STEP_FORM_ID = 'flow-step-form';
@@ -1113,8 +1113,8 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) {
1113
1113
  return [...Array.from(this.shadowRoot.querySelectorAll('gv-flow')), ...Array.from(this.shadowRoot.querySelectorAll('gv-resizable-views'))];
1114
1114
  }
1115
1115
 
1116
- async _getUpdateComplete() {
1117
- await super._getUpdateComplete();
1116
+ async getUpdateComplete() {
1117
+ await super.getUpdateComplete();
1118
1118
  await Promise.all(this.getChildren().map(e => e.updateComplete));
1119
1119
  }
1120
1120
 
@@ -1752,4 +1752,4 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) {
1752
1752
 
1753
1753
  }
1754
1754
  window.customElements.define('gv-policy-studio', GvPolicyStudio);
1755
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL3BvbGljeS1zdHVkaW8vZ3YtcG9saWN5LXN0dWRpby5qcyJdLCJuYW1lcyI6WyJjc3MiLCJodG1sIiwiTGl0RWxlbWVudCIsIm1ldGhvZHMiLCJkaXNwYXRjaEN1c3RvbUV2ZW50IiwiZW1wdHkiLCJjYWNoZSIsImRlZXBDbG9uZSIsImRlZXBFcXVhbCIsIktleWJvYXJkRWxlbWVudCIsIktFWVMiLCJGTE9XX1NURVBfRk9STV9JRCIsIkd2UG9saWN5U3R1ZGlvIiwicHJvcGVydGllcyIsInBvbGljaWVzIiwidHlwZSIsIkFycmF5Iiwic2VydmljZXMiLCJPYmplY3QiLCJyZXNvdXJjZVR5cGVzIiwiYXR0cmlidXRlIiwicHJvcGVydHlQcm92aWRlcnMiLCJkeW5hbWljUHJvcGVydHlTY2hlbWEiLCJ0YWJJZCIsIlN0cmluZyIsIl90YWJJZCIsImRlZmluaXRpb24iLCJfZGVmaW5pdGlvbiIsImRvY3VtZW50YXRpb24iLCJmbG93U2NoZW1hIiwiY29uZmlndXJhdGlvblNjaGVtYSIsIl9jb25maWd1cmF0aW9uU2NoZW1hIiwiY29uZmlndXJhdGlvbkluZm9ybWF0aW9uIiwiaXNEaXJ0eSIsIkJvb2xlYW4iLCJyZWZsZWN0IiwiX2RyYWdQb2xpY3kiLCJfZHJvcFBvbGljeSIsInNlbGVjdGVkRmxvd3NJZCIsIl9zZWxlY3RlZEZsb3dzSWQiLCJfY3VycmVudFBvbGljeUlkIiwiX3NlYXJjaFBvbGljeVF1ZXJ5IiwiX3NlYXJjaEZsb3dRdWVyeSIsIl9mbG93U3RlcFNjaGVtYSIsIl9jdXJyZW50Rmxvd1N0ZXAiLCJfcG9saWN5RmlsdGVyIiwiX2Zsb3dGaWx0ZXIiLCJfY3VycmVudEFza0NvbmZpcm1hdGlvbiIsImhhc1Byb3BlcnRpZXMiLCJfaGFzUHJvcGVydGllcyIsImhhc1Jlc291cmNlcyIsImhhc1BvbGljeUZpbHRlciIsImZsb3dzVGl0bGUiLCJzb3J0YWJsZSIsImNhbkFkZCIsInJlYWRvbmx5IiwicmVhZG9ubHlQbGFucyIsImNhbkRlYnVnIiwiX2NhbkRlYnVnIiwiZGVidWdSZXNwb25zZSIsInN0eWxlcyIsImNvbnN0cnVjdG9yIiwiZmxvd3MiLCJfdGFicyIsImlkIiwidGl0bGUiLCJpY29uIiwidmFsdWUiLCJ0aGVuIiwicmVxdWVzdFVwZGF0ZSIsIl9mbG93RmlsdGVyT3B0aW9ucyIsImRlZmluZWRQbGFucyIsImxlbmd0aCIsIl9wb2xpY3lGaWx0ZXJPcHRpb25zIiwic3BsaWNlIiwib25LZXlib2FyZCIsImlzUHJlc3NlZCIsIlNoaWZ0IiwiQ3RybCIsIlNwYWNlIiwic2VhcmNoIiwic2hhZG93Um9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJmb2N1cyIsIkVzYyIsIl9jbG9zZUZsb3dTdGVwRm9ybSIsIl9vbkNsb3NlRG9jdW1lbnRhdGlvbiIsImluY2x1ZGVzIiwiX2dlbmVyYXRlRmxvd3NJZCIsInJlc291cmNlcyIsIl9nZW5lcmF0ZUlkIiwicGxhbnMiLCJtYXAiLCJwbGFuIiwiX2dlbmVyYXRlUGxhbkZsb3dzSWQiLCJfaW5pdGlhbERlZmluaXRpb24iLCJfc2VsZWN0Rmlyc3RGbG93IiwiaXNBcnJheSIsImZpbHRlciIsIl9maW5kRmxvd0J5SWQiLCJfdXBkYXRlU2VsZWN0ZWRGbG93cyIsImRpc3BhdGNoIiwiY2FuZGlkYXRlIiwiZGVmaW5lZEZsb3dzIiwiX2lkIiwiZmluZCIsIl9nZXRGbG93RWxlbWVudCIsImZsb3dJZCIsIl9vbkRyYWdFbmRQb2xpY3kiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImUiLCJvbkRyYWdFbmQiLCJfb25Ecm9wUG9saWN5IiwiZGV0YWlsIiwiX2Fza1RvVmFsaWRhdGVGb3JtcyIsInBvbGljeSIsInRhcmdldEZsb3ciLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJjb25maWd1cmF0aW9uIiwiX25ldyIsImZsb3dTdGVwIiwiX2dlbmVyYXRlRmxvd1N0ZXBJZCIsImZsb3dLZXkiLCJwb3NpdGlvbiIsImVuYWJsZWQiLCJzb3VyY2VGbG93Iiwic291cmNlRmxvd0lkIiwic291cmNlUG9zaXRpb24iLCJzb3VyY2VGbG93S2V5Iiwic3RlcCIsImdyb3VwIiwic2NoZW1hIiwiYnVpbGRTY2hlbWEiLCJfc2V0Q3VycmVudEZsb3dTdGVwIiwiY3VycmVudEZsb3dGb3JtIiwiX2dldEZsb3dTdGVwRm9ybSIsImRpcnR5IiwiY2FuY2VsRWRpdCIsInNldFRpbWVvdXQiLCJfZWRpdEZsb3dTdGVwIiwiZmxvdyIsInVwZGF0ZUNvbXBsZXRlIiwiZmxvd0VsZW1lbnQiLCJzZWxlY3RlZFN0ZXBJZCIsIl9kaXJ0eSIsImd2RmxvdyIsInJlbW92ZUNhbmRpZGF0ZSIsIl9vbkRlbGV0ZVBvbGljeSIsInRhcmdldCIsImVkaXRpbmciLCJfb25EZXNpZ24iLCJfY2hhbmdlVGFiIiwiX3NwbGl0TWFpblZpZXdzIiwianNvblNjaGVtYSIsIkpTT04iLCJwYXJzZSIsImN1cnJlbnRGbG93U3RlcCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJfb25PcGVuRG9jdW1lbnRhdGlvbiIsIl9tYXhpbWl6ZVRvcFZpZXciLCJfb25FZGl0Rmxvd1N0ZXAiLCJfZ2V0UmVzaXphYmxlVmlld3MiLCJtYXhpbWl6ZVRvcCIsIl9tYXhpbWl6ZUJvdHRvbVZpZXciLCJtYXhpbWl6ZUJvdHRvbSIsInNwbGl0IiwiX29uQ2hhbmdlRmxvd1N0ZXBTdGF0ZSIsIl9vbkNsb3NlRmxvd1N0ZXBGb3JtIiwiZXJyIiwiZm9yY2UiLCJQcm9taXNlIiwiYWxsIiwiX3N1Ym1pdE9yQ29uZmlybUZvcm1zIiwiZm9ybXMiLCJyIiwiX2J1aWxkRGVmaW5pdGlvblRvU2F2ZSIsImdldENoaWxkcmVuIiwiX2NoZWNrQ3VycmVudEZsb3dTdGVwIiwiRXJyb3IiLCJmbG93U3RlcFNjaGVtYSIsIl9pbml0aWFsVmFsdWVzIiwic2NvcGUiLCJfZW51bSIsImVudW0iLCJmaWx0ZXJlZCIsImRlZmF1bHQiLCJfdmFsdWVzIiwiX3JlZnJlc2giLCJjbG9zZVN0ZXBGb3JtIiwiX29uU2VsZWN0Rmxvd3MiLCJfb25PcGVuRG9jdW1lbnRhdGlvbkZyb21NZW51IiwiZ2V0U2VsZWN0ZWRGbG93IiwiX2ZldGNoRG9jdW1lbnRhdGlvbiIsIl9vbk9wZW5Eb2N1bWVudGF0aW9uRnJvbUZvcm0iLCJyZW1vdmVJdGVtIiwiX2ZpbmRGbG93Q29sbGVjdGlvbiIsInBsYW5zRmxvd3MiLCJyZWR1Y2UiLCJhY2MiLCJ2YWwiLCJjb25jYXQiLCJpbmRleCIsInNlbGVjdGVkRmxvd0lkIiwiX29uVGFyZ2V0UG9saWN5IiwiX29uQ2hhbmdlRmxvd1N0ZXAiLCJ2YWx1ZXMiLCJfd3JpdGVGbG93U3RlcCIsImZpbmRJbmRleCIsIl9vblN1Ym1pdEZsb3dTdGVwIiwiYyIsIl9vbkNhbmNlbEZsb3ciLCJfb25TdWJtaXRGbG93Iiwic2VsZWN0ZWRGbG93IiwiYXNzaWduIiwiX2NyZWF0ZUZsb3dGcm9tU2NoZW1hIiwic2VsZWN0ZWRGbG93VXBkYXRlZCIsIl9vbkNhbmNlbEZsb3dNb2RlIiwiX29uU3VibWl0Rmxvd01vZGUiLCJfb25DaGFuZ2VUYWIiLCJfY2hhbmdlVGFiVmFsaWRhdG9yIiwiZnJvbSIsInRvIiwiY29tcG9uZW50IiwiY29uZmlybSIsInJlc29sdmUiLCJfb25EcmFnU3RhcnRGbG93U3RlcCIsIl9yZW5kZXJGbG93RW1wdHlTdGF0ZSIsInJlYWRvbmx5TW9kZSIsIl9vbkFkZEZsb3ciLCJfcmVuZGVyRmxvdyIsImhhc0VtcHR5U3RhdGUiLCJiaW5kIiwiX29uRmV0Y2hSZXNvdXJjZXMiLCJldmVudCIsImN1cnJlbnRUYXJnZXQiLCJyZWdleFR5cGVzIiwib3B0aW9ucyIsImRlZmluZWRSZXNvdXJjZXMiLCJyZXNvdXJjZSIsIlJlZ0V4cCIsInRlc3QiLCJyZXNvdXJjZVR5cGUiLCJyb3ciLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJwaWN0dXJlIiwiaXRlbSIsImVsZW1lbnQiLCJfcmVuZGVyUG9saWN5IiwiX3JlbmRlckZsb3dTdGVwRm9ybSIsImNvbnRlbnQiLCJpbWFnZSIsIl9vblJlc2V0Rmxvd1N0ZXAiLCJyZXNldCIsImxpc3QiLCJwcmVmaXgiLCJpc0Zsb3ciLCJwcmUiLCJzdGVwSW5kZXgiLCJwb3N0IiwiX2dldFVwZGF0ZUNvbXBsZXRlIiwic2hvdWxkVXBkYXRlIiwiY2hhbmdlZFByb3BlcnRpZXMiLCJoYXMiLCJkcmFnUG9saWN5IiwiZHJvcFBvbGljeSIsInVwZGF0ZWQiLCJwcm9wcyIsInNldEl0ZW0iLCJfb25EZWxldGVGbG93IiwiX2RlbGV0ZUZsb3ciLCJkZWZpbmVkUHJvcGVydGllcyIsIl9vbkR1cGxpY2F0ZUZsb3ciLCJfYWRkRmxvdyIsInBsYW5JbmRleCIsInAiLCJpIiwiX29uQ2hhbmdlRmxvd1N0YXRlIiwiX29uQWRkRmxvd1BsYW4iLCJjb2xsZWN0aW9uIiwiZHVwbGljYXRlIiwicHVzaCIsIm5ld0Zsb3ciLCJfaW5zdGFudGlhdGUiLCJwcm9wZXJ0aWVzRGVmaW5pdGlvbiIsImluaXRpYXRvciIsInByb3BlcnR5Iiwia2V5Iiwia2V5cyIsImVudHJ5IiwidW5kZWZpbmVkIiwiaW5kZXhPZiIsInNlbGVjdGVkRmxvd3MiLCJfZmluZEZsb3dJbmRleCIsImYiLCJfb25SZW9yZGVyRmxvd3MiLCJuZXdPcmRlciIsIl9vblNlYXJjaFBvbGljeSIsIl9vbkNsZWFyUG9saWN5IiwiX29uU2VhcmNoRmxvd3MiLCJfb25DbGVhckZsb3dzIiwiX29uUmVzZXRBbGwiLCJfZmlsdGVyTm90VmFsaWRTdGVwIiwiX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzIiwibyIsImNvcHkiLCJzdGFydHNXaXRoIiwiZm9ybSIsImlzVmFsaWQiLCJzdWJtaXQiLCJnZXRQcm9wZXJ0aWVzRWxlbWVudCIsImNsb3NlUHJvbWlzZXMiLCJjdXJyZW50U3RlcCIsInNhdmVkIiwiX2RlZmluaXRpb25TYXZlZCIsIl9idWlsZERlZmluaXRpb25Ub1NlbmQiLCJkZWZpbml0aW9uVG9TYXZlIiwiX29uU2F2ZUFsbCIsImNhdGNoIiwiY29uc29sZSIsImVycm9yIiwiX29uRGVidWciLCJyZXF1ZXN0RXZlbnQiLCJyZXF1ZXN0IiwiZmlsdGVyZWRGbG93cyIsImZpbHRlcmVkUGxhbnMiLCJfb25GaWx0ZXJGbG93cyIsIl9nZXRGaWx0ZXJlZFBvbGljaWVzIiwib25SZXF1ZXN0Iiwib25SZXNwb25zZSIsIl9vbkZpbHRlclBvbGljaWVzIiwiX3JlbmRlckRlc2lnbiIsIl9yZW5kZXJGbG93Rm9ybSIsIl9yZW5kZXJEZWJ1ZyIsInJlc3BvbnNlIiwiaXNMb2FkaW5nIiwicGF0aCIsIm1ldGhvZCIsIl9yZW5kZXJDb25maWd1cmF0aW9uRm9ybSIsIl9vblJlc291cmNlc0NoYW5nZSIsIl9vblByb3BlcnRpZXNDaGFuZ2UiLCJfb25TYXZlUHJvdmlkZXIiLCJwcm92aWRlciIsIl9vblN3aXRjaEVuY3J5cHRlZFByb3BlcnR5IiwicmVuZGVyIiwiX2dldFJlYWRvbmx5TW9kZUZvckRlc2lnbiIsImZsb3dQbGFuIiwiY29tcGFyZWRGbG93IiwiY29tcGFyZWRGbG93UGxhbiIsIndpbmRvdyIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxHQUFULEVBQWNDLElBQWQsRUFBb0JDLFVBQXBCLFFBQXNDLGFBQXRDO0FBQ0EsU0FBU0MsT0FBVCxRQUF3QixlQUF4QjtBQUNBLFNBQVNDLG1CQUFULFFBQW9DLGVBQXBDO0FBQ0EsT0FBTyxvQkFBUDtBQUNBLE9BQU8sa0JBQVA7QUFDQSxPQUFPLHdCQUFQO0FBQ0EsT0FBTywrQkFBUDtBQUNBLE9BQU8saUNBQVA7QUFDQSxPQUFPLDZCQUFQO0FBQ0EsT0FBTyw2QkFBUDtBQUNBLE9BQU8sc0JBQVA7QUFDQSxPQUFPLHFCQUFQO0FBQ0EsT0FBTyxXQUFQO0FBQ0EsT0FBTyxnQkFBUDtBQUNBLE9BQU8seUJBQVA7QUFDQSxTQUFTQyxLQUFULFFBQXNCLGlCQUF0QjtBQUNBLFNBQVNDLEtBQVQsUUFBc0Is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LGFBQXRDOztBQUNBLFFBQUk4SyxZQUFKLEVBQWtCO0FBQ2hCLGFBQU8sSUFBUDtBQUNEOztBQUVELFVBQU13SCxZQUFZLEdBQUcsS0FBSzVKLGVBQUwsQ0FBcUIsQ0FBckIsQ0FBckI7O0FBQ0EsUUFBSSxDQUFDNEosWUFBTCxFQUFtQjtBQUNqQixhQUFPLEtBQVA7QUFDRDs7QUFFRCxVQUFNO0FBQUVqUSxNQUFBQSxJQUFJLEVBQUVrUTtBQUFSLFFBQTZCLEtBQUt6SixtQkFBTCxDQUF5QndKLFlBQVksQ0FBQ3RQLEdBQXRDLENBQW5DOztBQUNBLFdBQU91UCxnQkFBZ0IsSUFBSSxLQUFLdlMsYUFBaEM7QUFDRDs7QUExdEQ2RDtBQTZ0RGhFd1MsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxNQUF0QixDQUE2QixrQkFBN0IsRUFBaUR0VixjQUFqRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQtZWxlbWVudCc7XG5pbXBvcnQgeyBtZXRob2RzIH0gZnJvbSAnLi4vbGliL3N0dWRpbyc7XG5pbXBvcnQgeyBkaXNwYXRjaEN1c3RvbUV2ZW50IH0gZnJvbSAnLi4vbGliL2V2ZW50cyc7XG5pbXBvcnQgJy4uL2F0b21zL2d2LWJ1dHRvbic7XG5pbXBvcnQgJy4uL2F0b21zL2d2LWljb24nO1xuaW1wb3J0ICcuLi9tb2xlY3VsZXMvZ3Ytb3B0aW9uJztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LWRvY3VtZW50YXRpb24nO1xuaW1wb3J0ICcuLi9vcmdhbmlzbXMvZ3YtcmVzaXphYmxlLXZpZXdzJztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LXNjaGVtYS1mb3JtJztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LWh0dHAtY2xpZW50JztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LXRhYnMnO1xuaW1wb3J0ICcuLi9tb2xlY3VsZXMvZ3Ytcm93JztcbmltcG9ydCAnLi9ndi1mbG93JztcbmltcG9ydCAnLi9ndi1mbG93LXN0ZXAnO1xuaW1wb3J0ICcuL2d2LXBvbGljeS1zdHVkaW8tbWVudSc7XG5pbXBvcnQgeyBlbXB0eSB9IGZyb20gJy4uL3N0eWxlcy9lbXB0eSc7XG5pbXBvcnQgeyBjYWNoZSB9IGZyb20gJ2xpdC1odG1sL2RpcmVjdGl2ZXMvY2FjaGUnO1xuaW1wb3J0IHsgZGVlcENsb25lLCBkZWVwRXF1YWwgfSBmcm9tICcuLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgS2V5Ym9hcmRFbGVtZW50LCBLRVlTIH0gZnJvbSAnLi4vbWl4aW5zL2tleWJvYXJkLWVsZW1lbnQnO1xuXG5jb25zdCBGTE9XX1NURVBfRk9STV9JRCA9ICdmbG93LXN0ZXAtZm9ybSc7XG5cbi8qKlxuICogIFN0dWRpbyBQb2xpY3kgY29tcG9uZW50XG4gKlxuICog4pqg77iPIFRoaXMgY29tcG9uZW50IGlzIGJhc2VkIG9uIGBhc2NpaWRvY3RvcmAsIGBoaWdobGlnaHQuanNgIGFuZCBgYXNjaWlkb2N0b3ItaGlnaGxpZ2h0LmpzYC5cbiAqIFRvIHVzZSB0aGlzIGNvbXBvbmVudCBpbiB5b3VyIHByb2plY3QgYmUgc3VyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBpbnN0YWxsZWQgb3JcbiAqIGluc3RhbGwgdGhlbSB3aXRoOiBgbnBtIGluc3RhbGwgYXNjaWlkb2N0b3IgaGlnaGxpZ2h0LmpzIGFzY2lpZG9jdG9yLWhpZ2hsaWdodC5qcyAtLXNhdmVgXG4gKlxuICogQGZpcmVzIGd2LXBvbGljeS1zdHVkaW86c2VsZWN0LXBvbGljeSAtIFNlbGVjdCBwb2xpY3kgZXZlbnRcbiAqIEBmaXJlcyBndi1wb2xpY3ktc3R1ZGlvOnNhdmUgLSBFdmVudCBzZW50IHdoZW4gXCJTYXZlXCIgYnV0dG9uIGlzIGNsaWNrZWQsIGl0IGNvbnRhaW5zIHRoZSB3aG9sZSBkZWZpbml0aW9uIG9mIHRoZSBBUElcbiAqIEBmaXJlcyBndi1wb2xpY3ktc3R1ZGlvOmRlYnVnIC0gRXZlbnQgc2VudCB3aGVuIHZhbGlkYXRpb24gYnV0dG9uIG9mIHRoZSAnVHJ5IGl0JyB0YWIgaXMgY2xpY2tlZCwgaXQgY29udGFpbnMgdGhlIHdob2xlIGRlZmluaXRpb24gb2YgdGhlIEFQSSBhbmQgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0cnkgaXQgcmVxdWVzdC5cbiAqXG4gKiBAYXR0ciB7QXJyYXl9IHBvbGljaWVzIC0gUG9saWNpZXMgYXZhaWxhYmxlXG4gKiBAYXR0ciB7QXJyYXl9IHNlcnZpY2VzIC0gU2VydmljZXMgYXZhaWxhYmxlXG4gKiBAYXR0ciB7QXJyYXl9IHJlc291cmNlVHlwZXMgLSBSZXNvdXJjZXMgdHlwZXMgYXZhaWxhYmxlXG4gKiBAYXR0ciB7QXJyYXl9IHByb3BlcnR5UHJvdmlkZXJzIC0gUHJvdmlkZXJzIG9mIHByb3BlcnRpZXNcbiAqIEBhdHRyIHtBcnJheX0gZHluYW1pY1Byb3BlcnR5U2NoZW1hIC0gU2NoZW1hIGZvciB0aGUgZHluYW1pYyBwcm9wZXJ0eSBmb3JtXG4gKiBAYXR0ciB7U3RyaW5nfSB0YWJJZCAtIEN1cnJlbnQgdGFiSWQgdG8gZGlzcGxheSAoZGVzaWduLCBzZXR0aW5ncywgcHJvcGVydGllcyBvciByZXNvdXJjZXMpXG4gKiBAYXR0ciB7T2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIGRlZmluaXRpb24gb2YgZmxvd3NcbiAqIEBhdHRyIHtPYmplY3R9IGRvY3VtZW50YXRpb24gLSBUaGUgZG9jdW1lbnRhdGlvbiB0byBkaXNwbGF5XG4gKiBAYXR0ciB7T2JqZWN0fSBmbG93U2NoZW1hIC0gVGhlIGZsb3cgZm9ybSBjb25maWd1cmF0aW9uIHRvIGRpc3BsYXkgaW4gZ3Ytc2NoZW1hLWZvcm0gY29tcG9uZW50XG4gKiBAYXR0ciB7T2JqZWN0fSBjb25maWd1cmF0aW9uU2NoZW1hIC0gVGhlIGZvcm0gY29uZmlndXJhdGlvbiB0byBkaXNwbGF5IGluIGd2LXNjaGVtYS1mb3JtIGNvbXBvbmVudFxuICogQGF0dHIge09iamVjdH0gY29uZmlndXJhdGlvbkluZm9ybWF0aW9uIC0gVGhlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYXBpIGNvbmZpZ3VyYXRpb24gdGFiXG4gKiBAYXR0ciB7Qm9vbGVhbn0gaXNEaXJ0eSAtIHRydWUgaWYgY29tcG9uZW50IGlzIGRpcnR5XG4gKiBAYXR0ciB7QXJyYXl9IHNlbGVjdGVkRmxvd3NJZCAtIFRoZSBzZWxlY3RlZCBmbG93cyBpZFxuICogQGF0dHIge0Jvb2xlYW59IHNvcnRhYmxlIC0gdHJ1ZSBpZiBmbG93cyBhcmUgc29ydGFibGVcbiAqIEBhdHRyIHtCb29sZWFufSByZWFkb25seSAtIHRydWUgaWYgcmVhZG9ubHlcbiAqIEBhdHRyIHtCb29sZWFufSByZWFkb25seS1wbGFucyAtIHRydWUgaWYgcGxhbnMnIGZsb3dzIGNhbid0IGJlIG1vZGlmaWVkXG4gKiBAYXR0ciB7Qm9vbGVhbn0gY2FuLWFkZCAtIHRydWUgaWYgdXNlciBjYW4gYWRkIGZsb3dcbiAqIEBhdHRyIHtTdHJpbmd9IGZsb3dzVGl0bGUgLSBmbG93cyBtZW51IHRpdGxlXG4gKiBAYXR0ciB7Qm9vbGVhbn0gaGFzLXBvbGljeS1maWx0ZXIgLSB0cnVlIGlmIHBvbGljaWVzIGhhdmUgb25SZXF1ZXN0L29uUmVzcG9uc2UgcHJvcGVydGllc1xuICogQGF0dHIge0Jvb2xlYW59IGNhbi1kZWJ1ZyAtIHRydWUgaWYgZGVidWcgdGFiIHNob3VsZCBiZSBkaXNwbGF5ZWRcbiAqIEBhdHRyIHtPYmplY3R9IGRlYnVnUmVzcG9uc2UgLSB0cnVlIGlmIGRlYnVnIHRhYiBzaG91bGQgYmUgZGlzcGxheWVkXG4gKi9cbmV4cG9ydCBjbGFzcyBHdlBvbGljeVN0dWRpbyBleHRlbmRzIEtleWJvYXJkRWxlbWVudChMaXRFbGVtZW50KSB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9saWNpZXM6IHsgdHlwZTogQXJyYXkgfSxcbiAgICAgIHNlcnZpY2VzOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgcmVzb3VyY2VUeXBlczogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiAncmVzb3VyY2UtdHlwZXMnIH0sXG4gICAgICBwcm9wZXJ0eVByb3ZpZGVyczogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiAncHJvcGVydHktcHJvdmlkZXJzJyB9LFxuICAgICAgZHluYW1pY1Byb3BlcnR5U2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiAnZHluYW1pYy1wcm9wZXJ0eS1zY2hlbWEnIH0sXG4gICAgICB0YWJJZDogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3RhYi1pZCcgfSxcbiAgICAgIF90YWJJZDogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIGRlZmluaXRpb246IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBfZGVmaW5pdGlvbjogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIGRvY3VtZW50YXRpb246IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBmbG93U2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiAnZmxvdy1zY2hlbWEnIH0sXG4gICAgICBjb25maWd1cmF0aW9uU2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiAnY29uZmlndXJhdGlvbi1zY2hlbWEnIH0sXG4gICAgICBfY29uZmlndXJhdGlvblNjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIGNvbmZpZ3VyYXRpb25JbmZvcm1hdGlvbjogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2NvbmZpZ3VyYXRpb24taW5mb3JtYXRpb24nIH0sXG4gICAgICBpc0RpcnR5OiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2RpcnR5JywgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgX2RyYWdQb2xpY3k6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfZHJvcFBvbGljeTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIHNlbGVjdGVkRmxvd3NJZDogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiAnc2VsZWN0ZWQtZmxvd3MtaWQnIH0sXG4gICAgICBfc2VsZWN0ZWRGbG93c0lkOiB7IHR5cGU6IEFycmF5LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfY3VycmVudFBvbGljeUlkOiB7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX3NlYXJjaFBvbGljeVF1ZXJ5OiB7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX3NlYXJjaEZsb3dRdWVyeTogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9mbG93U3RlcFNjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9jdXJyZW50Rmxvd1N0ZXA6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfcG9saWN5RmlsdGVyOiB7IHR5cGU6IEFycmF5LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfZmxvd0ZpbHRlcjogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2N1cnJlbnRBc2tDb25maXJtYXRpb246IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgaGFzUHJvcGVydGllczogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoYXMtcHJvcGVydGllcycgfSxcbiAgICAgIF9oYXNQcm9wZXJ0aWVzOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIGhhc1Jlc291cmNlczogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoYXMtcmVzb3VyY2VzJyB9LFxuICAgICAgaGFzUG9saWN5RmlsdGVyOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2hhcy1wb2xpY3ktZmlsdGVyJyB9LFxuICAgICAgZmxvd3NUaXRsZTogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2Zsb3dzLXRpdGxlJyB9LFxuICAgICAgc29ydGFibGU6IHsgdHlwZTogQm9vbGVhbiB9LFxuICAgICAgY2FuQWRkOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2Nhbi1hZGQnIH0sXG4gICAgICByZWFkb25seTogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICByZWFkb25seVBsYW5zOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ3JlYWRvbmx5LXBsYW5zJyB9LFxuICAgICAgY2FuRGVidWc6IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnY2FuLWRlYnVnJyB9LFxuICAgICAgX2NhbkRlYnVnOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIGRlYnVnUmVzcG9uc2U6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6ICdkZWJ1Zy1yZXNwb25zZScgfSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGVtcHR5LFxuICAgICAgbWV0aG9kcyxcbiAgICAgIC8vIGxhbmd1YWdlPUNTU1xuICAgICAgY3NzYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAtLWhlaWdodDogdmFyKC0tZ3YtcG9saWN5LXN0dWRpby0taCwgY2FsYygxMDB2aCAtIDMycHgpKTtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodCk7XG4gICAgICAgICAgLS1oZWlnaHQtaW4tdGFiczogY2FsYyh2YXIoLS1oZWlnaHQpIC0gMjVweCk7XG4gICAgICAgIH1cblxuICAgICAgICAuYm94IHtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodCk7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kZXNpZ24sXG4gICAgICAgIC5wcm9wZXJ0aWVzIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtcmVzaXphYmxlLXZpZXdzIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5lZGl0YWJsZS1uYW1lIHtcbiAgICAgICAgICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcbiAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZWRpdGFibGUtbmFtZSBzcGFuIHtcbiAgICAgICAgICBjb2xvcjogI2JmYmZiZjtcbiAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9ybV9fY29udHJvbCB7XG4gICAgICAgICAgbWFyZ2luOiAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICBndi1pbnB1dCB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1uYW1lIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1uYW1lLmRpcnR5IHtcbiAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgICAgb3BhY2l0eTogMC44O1xuICAgICAgICB9XG5cbiAgICAgICAgLmZsb3ctbmFtZSBndi1pY29uIHtcbiAgICAgICAgICAtLWd2LWljb24tLXM6IDI0cHg7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1wYXRoIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMC4ycmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnRpdGxlX21ldGhvZHMge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAudHdvLWNvbHMge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLnR3by1jb2xzID4gKiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5sZWZ0LW1lbnUge1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbi10YWJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5yaWdodC1tZW51IHtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZDlkOWQ5O1xuICAgICAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0LWluLXRhYnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnR3by1jb2xzID4gKjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LXN0ZXBfX2NvbnRhaW5lciB7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICBoZWlnaHQ6IDk5JTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LXN0ZXBfX2Zvcm0ge1xuICAgICAgICAgIHBhZGRpbmc6IDAgMC41cmVtO1xuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZsb3ctc3RlcF9fZm9ybS10aXRsZSB7XG4gICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4ycmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtdGFicyB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LXJlc2l6YWJsZS12aWV3cyxcbiAgICAgICAgZ3YtcHJvcGVydGllcyxcbiAgICAgICAgZ3YtcmVzb3VyY2VzIHtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbi10YWJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LXByb3BlcnRpZXMsXG4gICAgICAgIGd2LXJlc291cmNlcyB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICBndi1wcm9wZXJ0aWVzLnByb3BlcnRpZXMge1xuICAgICAgICAgIC0tZ3YtcHJvcGVydGllcy10YWJsZS0tY29sbWc6IDEwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuYXBpLXNldHRpbmdzIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmZiZmJmO1xuICAgICAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0LWluLXRhYnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmRlYnVnIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmZiZmJmO1xuICAgICAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0LWluLXRhYnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvbiB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvbl9faWNvbiB7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1ndi10aGVtZS1jb2xvciwgIzVhNzY4NCk7XG4gICAgICAgICAgLS1ndi1pY29uLW9wYWNpdHktLWM6IHZhcigtLWd2LXRoZW1lLWNvbG9yLWluZm8tbGlnaHQsICM2NGI1ZjYpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvbl9fYmxvY2txdW90ZSxcbiAgICAgICAgLmRlYnVnLWluZm9ybWF0aW9uX19ibG9ja3F1b3RlIHtcbiAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLWd2LXRoZW1lLWNvbG9yLCAjNWE3Njg0KTtcbiAgICAgICAgICBtYXJnaW46IDE1cHg7XG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LXNldHRpbmdzIGd2LXNjaGVtYS1mb3JtIHtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgIHBhZGRpbmc6IDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zZWFyY2gge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzdHJldGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtaW5wdXQge1xuICAgICAgICAgIG1hcmdpbjogMC4ycmVtIDA7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyLWFjdGlvbnMsXG4gICAgICAgIC5zZWFyY2gtcG9saWNpZXMge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIG1hcmdpbjogMC41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNlYXJjaC1wb2xpY2llcyB7XG4gICAgICAgICAgbWFyZ2luOiAxLjVyZW0gMC41cmVtIDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mb290ZXItYWN0aW9ucyA+IGd2LWJ1dHRvbi5idG4tbGFyZ2UsXG4gICAgICAgIC5mb290ZXItYWN0aW9ucyA+IGd2LW9wdGlvbiB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9vdGVyLWFjdGlvbnMge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIHBhZGRpbmc6IDAuNXJlbSAwO1xuICAgICAgICAgIG1hcmdpbjogMC41cmVtIDE1cHg7XG4gICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNiZmJmYmY7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyLWFjdGlvbnMgLnRpdGxlIHtcbiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4zcmVtO1xuICAgICAgICAgIGNvbG9yOiAjYmZiZmJmO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgICAgd2lkdGg6IDI0MHB4O1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDI1cHg7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyLWFjdGlvbnMgPiAqLFxuICAgICAgICAuc2VhcmNoLXBvbGljaWVzID4gKiB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcbiAgICB0aGlzLnBvbGljaWVzID0gW107XG4gICAgdGhpcy5yZXNvdXJjZVR5cGVzID0gW107XG4gICAgdGhpcy50YWJJZCA9ICdkZXNpZ24nO1xuICAgIHRoaXMuc2VsZWN0ZWRGbG93c0lkID0gW107XG4gICAgdGhpcy5mbG93c1RpdGxlID0gJ0Zsb3dzJztcbiAgICB0aGlzLnNvcnRhYmxlID0gZmFsc2U7XG4gICAgdGhpcy5zZXJ2aWNlcyA9IHt9O1xuICAgIHRoaXMuX2RlZmluaXRpb24gPSB7XG4gICAgICBmbG93czogW10sXG4gICAgfTtcbiAgICB0aGlzLl90YWJzID0gW3sgaWQ6ICdkZXNpZ24nLCB0aXRsZTogJ0Rlc2lnbicsIGljb246ICduYXZpZ2F0aW9uOmV4Y2hhbmdlJyB9XTtcbiAgICB0aGlzLl9wb2xpY3lGaWx0ZXIgPSBbXTtcbiAgICB0aGlzLl9mbG93RmlsdGVyID0gW107XG4gIH1cblxuICBzZXQgaGFzUHJvcGVydGllcyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaW1wb3J0KCcuLi9vcmdhbmlzbXMvZ3YtcHJvcGVydGllcycpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl90YWJzID0gWy4uLnRoaXMuX3RhYnMsIHsgaWQ6ICdwcm9wZXJ0aWVzJywgdGl0bGU6ICdQcm9wZXJ0aWVzJywgaWNvbjogJ2dlbmVyYWw6c2V0dGluZ3MjMScgfV07XG4gICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX2hhc1Byb3BlcnRpZXMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNQcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9oYXNQcm9wZXJ0aWVzO1xuICB9XG5cbiAgc2V0IGhhc1Jlc291cmNlcyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaW1wb3J0KCcuLi9vcmdhbmlzbXMvZ3YtcmVzb3VyY2VzJykudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX3RhYnMgPSBbLi4udGhpcy5fdGFicywgeyBpZDogJ3Jlc291cmNlcycsIHRpdGxlOiAnUmVzb3VyY2VzJywgaWNvbjogJ2dlbmVyYWw6c2V0dGluZ3MjNScgfV07XG4gICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0IGNhbkRlYnVnKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJzID0gWy4uLnRoaXMuX3RhYnMsIHsgaWQ6ICdkZWJ1ZycsIHRpdGxlOiAnVHJ5IGl0JywgaWNvbjogJ2NvbnRlbnQ6c2VuZCcgfV07XG4gICAgfVxuICB9XG5cbiAgZ2V0IF9mbG93RmlsdGVyT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5kZWZpbmVkUGxhbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgeyBpZDogJ2FwaScsIHRpdGxlOiAnQXBpJywgaWNvbjogJ3Nob3BwaW5nOmJveCMzJyB9LFxuICAgICAgICB7IGlkOiAncGxhbicsIHRpdGxlOiAnUGxhbnMnLCBpY29uOiAnc2hvcHBpbmc6c2FsZSMyJyB9LFxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBzZXQgaGFzUG9saWN5RmlsdGVyKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9wb2xpY3lGaWx0ZXJPcHRpb25zID0gW1xuICAgICAgICB7IGlkOiAnb25SZXF1ZXN0JywgdGl0bGU6ICdSZXF1ZXN0JywgaWNvbjogJ25hdmlnYXRpb246YXJyb3ctZnJvbS1sZWZ0JyB9LFxuICAgICAgICB7IGlkOiAnb25SZXNwb25zZScsIHRpdGxlOiAnUmVzcG9uc2UnLCBpY29uOiAnbmF2aWdhdGlvbjphcnJvdy1mcm9tLXJpZ2h0JyB9LFxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBzZXQgY29uZmlndXJhdGlvblNjaGVtYSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fdGFicy5zcGxpY2UoMSwgMCwgeyBpZDogJ3NldHRpbmdzJywgdGl0bGU6ICdDb25maWd1cmF0aW9uJywgaWNvbjogJ2dlbmVyYWw6c2V0dGluZ3MjMicgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29uZmlndXJhdGlvblNjaGVtYSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGNvbmZpZ3VyYXRpb25TY2hlbWEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRpb25TY2hlbWE7XG4gIH1cblxuICBvbktleWJvYXJkKCkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlzUHJlc3NlZChLRVlTLlNoaWZ0LCBLRVlTLkN0cmwsIEtFWVMuU3BhY2UpKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcjc2VhcmNoLXBvbGljeScpO1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgc2VhcmNoLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1ByZXNzZWQoS0VZUy5DdHJsLCBLRVlTLlNwYWNlKSkge1xuICAgICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI3NlYXJjaC1mbG93Jyk7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBzZWFyY2guZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNQcmVzc2VkKEtFWVMuRXNjKSkge1xuICAgICAgICB0aGlzLl9jbG9zZUZsb3dTdGVwRm9ybSgpO1xuICAgICAgICB0aGlzLl9vbkNsb3NlRG9jdW1lbnRhdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldCB0YWJJZCh0YWJJZCkge1xuICAgIGlmICh0YWJJZCAhPSBudWxsICYmIFsnZGVzaWduJywgJ3NldHRpbmdzJywgJ3Byb3BlcnRpZXMnLCAncmVzb3VyY2VzJywgJ2RlYnVnJ10uaW5jbHVkZXModGFiSWQpKSB7XG4gICAgICB0aGlzLl90YWJJZCA9IHRhYklkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90YWJJZCA9ICdkZXNpZ24nO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiSWQ7XG4gIH1cblxuICBzZXQgZGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGZsb3dzID0gdGhpcy5fZ2VuZXJhdGVGbG93c0lkKGRlZmluaXRpb24uZmxvd3MpO1xuICAgICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5fZ2VuZXJhdGVJZCgncmVzb3VyY2UtJywgZGVmaW5pdGlvbi5yZXNvdXJjZXMpO1xuICAgICAgY29uc3QgcGxhbnMgPVxuICAgICAgICBkZWZpbml0aW9uLnBsYW5zID09IG51bGxcbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiBkZWZpbml0aW9uLnBsYW5zLm1hcCgocGxhbikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5wbGFuLCBmbG93czogdGhpcy5fZ2VuZXJhdGVQbGFuRmxvd3NJZChwbGFuKSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICB0aGlzLl9pbml0aWFsRGVmaW5pdGlvbiA9IHsgLi4uZGVmaW5pdGlvbiwgZmxvd3MsIHJlc291cmNlcywgcGxhbnMgfTtcbiAgICAgIHRoaXMuX2RlZmluaXRpb24gPSBkZWVwQ2xvbmUodGhpcy5faW5pdGlhbERlZmluaXRpb24pO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgICB0aGlzLl9zZWxlY3RGaXJzdEZsb3coKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHNldCBzZWxlY3RlZEZsb3dzSWQoc2VsZWN0ZWRGbG93c0lkKSB7XG4gICAgaWYgKHNlbGVjdGVkRmxvd3NJZCAhPSBudWxsICYmIEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRGbG93c0lkKSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRGbG93c0lkID0gc2VsZWN0ZWRGbG93c0lkLmZpbHRlcigoaWQpID0+IHRoaXMuX2ZpbmRGbG93QnlJZChpZCkgIT0gbnVsbCk7XG4gICAgICBpZiAoc2VsZWN0ZWRGbG93c0lkLmxlbmd0aCAhPT0gdGhpcy5fc2VsZWN0ZWRGbG93c0lkLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9zZWxlY3RGaXJzdEZsb3codHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlbGVjdGVkRmxvd3NJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRGbG93c0lkLmZpbHRlcigoaWQpID0+IHRoaXMuX2ZpbmRGbG93QnlJZChpZCkgIT0gbnVsbCk7XG4gIH1cblxuICBfdXBkYXRlU2VsZWN0ZWRGbG93cyhzZWxlY3RlZEZsb3dzSWQpIHtcbiAgICB0aGlzLnNlbGVjdGVkRmxvd3NJZCA9IHNlbGVjdGVkRmxvd3NJZDtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdzZWxlY3QtZmxvd3MnLCB7IGZsb3dzOiB0aGlzLnNlbGVjdGVkRmxvd3NJZCB9KTtcbiAgfVxuXG4gIF9zZWxlY3RGaXJzdEZsb3coZGlzcGF0Y2ggPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvd3NJZC5sZW5ndGggPT09IDApIHtcbiAgICAgIGxldCBjYW5kaWRhdGUgPSBudWxsO1xuICAgICAgaWYgKHRoaXMuZGVmaW5lZEZsb3dzLmxlbmd0aCA+IDAgJiYgdGhpcy5kZWZpbmVkRmxvd3NbMF0uX2lkICE9IG51bGwpIHtcbiAgICAgICAgY2FuZGlkYXRlID0gdGhpcy5kZWZpbmVkRmxvd3NbMF07XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGVmaW5lZFBsYW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcGxhbiA9IHRoaXMuZGVmaW5lZFBsYW5zLmZpbmQoKHBsYW4pID0+IHBsYW4uZmxvd3MgIT0gbnVsbCAmJiBwbGFuLmZsb3dzLmxlbmd0aCA+IDAgJiYgcGxhbi5mbG93c1swXS5faWQgIT0gbnVsbCk7XG4gICAgICAgIGlmIChwbGFuKSB7XG4gICAgICAgICAgY2FuZGlkYXRlID0gcGxhbi5mbG93c1swXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNhbmRpZGF0ZSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW2NhbmRpZGF0ZS5faWRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxvd3NJZCA9IFtjYW5kaWRhdGUuX2lkXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9nZXRGbG93RWxlbWVudChmbG93SWQpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7Zmxvd0lkfVwiXWApO1xuICB9XG5cbiAgX29uRHJhZ0VuZFBvbGljeSgpIHtcbiAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3YtZmxvdycpLmZvckVhY2goKGUpID0+IGUub25EcmFnRW5kKCkpO1xuICB9XG5cbiAgYXN5bmMgX29uRHJvcFBvbGljeSh7IGRldGFpbCB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Fza1RvVmFsaWRhdGVGb3JtcygpO1xuXG4gICAgICBjb25zdCBwb2xpY3kgPSBkZXRhaWwucG9saWN5O1xuICAgICAgY29uc3QgdGFyZ2V0RmxvdyA9IHRoaXMuX2ZpbmRGbG93QnlJZChkZXRhaWwuZmxvd0lkKTtcblxuICAgICAgbGV0IG5hbWUgPSBwb2xpY3kubmFtZTtcbiAgICAgIGxldCBkZXNjcmlwdGlvbiA9ICcnO1xuICAgICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICAgIGxldCBfaWQ7XG4gICAgICBsZXQgX25ldyA9IGZhbHNlO1xuICAgICAgaWYgKGRldGFpbC5mbG93U3RlcCkge1xuICAgICAgICBfaWQgPSBkZXRhaWwuZmxvd1N0ZXAuX2lkO1xuICAgICAgICBuYW1lID0gZGV0YWlsLmZsb3dTdGVwLm5hbWU7XG4gICAgICAgIGRlc2NyaXB0aW9uID0gZGV0YWlsLmZsb3dTdGVwLmRlc2NyaXB0aW9uIHx8ICcnO1xuICAgICAgICBjb25maWd1cmF0aW9uID0gZGV0YWlsLmZsb3dTdGVwLmNvbmZpZ3VyYXRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfaWQgPSB0aGlzLl9nZW5lcmF0ZUZsb3dTdGVwSWQodGFyZ2V0Rmxvdy5faWQsIGRldGFpbC5mbG93S2V5LCBkZXRhaWwucG9zaXRpb24pO1xuICAgICAgICBfbmV3ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmxvd1N0ZXAgPSB7IF9pZCwgX25ldywgbmFtZSwgcG9saWN5OiBwb2xpY3kuaWQsIGRlc2NyaXB0aW9uLCBlbmFibGVkOiB0cnVlLCBjb25maWd1cmF0aW9uIH07XG4gICAgICBjb25zdCBzb3VyY2VGbG93ID0gZGV0YWlsLnNvdXJjZUZsb3dJZCAhPSBudWxsID8gdGhpcy5fZmluZEZsb3dCeUlkKGRldGFpbC5zb3VyY2VGbG93SWQpIDogdGFyZ2V0RmxvdztcblxuICAgICAgaWYgKGRldGFpbC5zb3VyY2VQb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIGlmIChkZXRhaWwuc291cmNlRmxvd0tleSAmJiBkZXRhaWwuc291cmNlRmxvd0tleSAhPT0gZGV0YWlsLmZsb3dLZXkpIHtcbiAgICAgICAgICBzb3VyY2VGbG93W2RldGFpbC5zb3VyY2VGbG93S2V5XS5zcGxpY2UoZGV0YWlsLnNvdXJjZVBvc2l0aW9uLCAxKTtcbiAgICAgICAgICB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnBvc2l0aW9uLCAwLCBmbG93U3RlcCk7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRGbG93U3RlcCAhPSBudWxsICYmIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLl9pZCA9PT0gX2lkKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXAgPSBkZXRhaWwuZmxvd0tleTtcbiAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgdXBkYXRlIHNjaGVtYSBhZnRlciBjaGFuZ2UgcmVxdWVzdCB0byByZXNwb25zZSBvciBpbnZlcnNlXG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmJ1aWxkU2NoZW1hKHRoaXMuX2N1cnJlbnRGbG93U3RlcC5wb2xpY3kpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2V0Q3VycmVudEZsb3dTdGVwKHRoaXMuX2N1cnJlbnRGbG93U3RlcCwgc2NoZW1hLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuX2dldEZsb3dFbGVtZW50KHRhcmdldEZsb3cuX2lkKS5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChkZXRhaWwucG9zaXRpb24gPiBkZXRhaWwuc291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICAgIHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldLnNwbGljZShkZXRhaWwucG9zaXRpb24sIDAsIGZsb3dTdGVwKTtcbiAgICAgICAgICAgIHNvdXJjZUZsb3dbZGV0YWlsLmZsb3dLZXldLnNwbGljZShkZXRhaWwuc291cmNlUG9zaXRpb24sIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzb3VyY2VGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnNvdXJjZVBvc2l0aW9uLCAxKTtcbiAgICAgICAgICAgIHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldLnNwbGljZShkZXRhaWwucG9zaXRpb24sIDAsIGZsb3dTdGVwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yY2UgUmVmcmVzaCBzb3VyY2UgZmxvdyBlbGVtZW50IHdoZW4gbW92ZSB0byBvdGhlciBmbG93XG4gICAgICAgIGlmICh0YXJnZXRGbG93Ll9pZCAhPT0gc291cmNlRmxvdy5faWQpIHtcbiAgICAgICAgICB0aGlzLl9nZXRGbG93RWxlbWVudCh0YXJnZXRGbG93Ll9pZCkucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnBvc2l0aW9uLCAwLCBmbG93U3RlcCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGbG93Rm9ybSA9IHRoaXMuX2dldEZsb3dTdGVwRm9ybSgpO1xuICAgICAgICBpZiAoY3VycmVudEZsb3dGb3JtID09IG51bGwgfHwgY3VycmVudEZsb3dGb3JtLmRpcnR5ICE9PSB0cnVlKSB7XG4gICAgICAgICAgbGV0IHN0ZXAgPSB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XVtkZXRhaWwucG9zaXRpb25dO1xuICAgICAgICAgIGlmIChzdGVwID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gY29uZmlybSBsb3NlIGNoYW5nZSBhZnRlciBkcm9wIHBvbGljeVxuICAgICAgICAgICAgc3RlcCA9IHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldW2RldGFpbC5wb3NpdGlvbiAtIDFdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkZXRhaWwuY2FuY2VsRWRpdCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2VkaXRGbG93U3RlcCh7IHN0ZXAsIHBvbGljeSwgZmxvdzogdGFyZ2V0RmxvdywgZ3JvdXA6IGRldGFpbC5mbG93S2V5IH0pO1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZsb3dFbGVtZW50ID0gdGhpcy5fZ2V0Rmxvd0VsZW1lbnQodGFyZ2V0Rmxvdy5faWQpO1xuICAgICAgICAgICAgICAgIGZsb3dFbGVtZW50LnNlbGVjdGVkU3RlcElkID0gc3RlcC5faWQ7XG4gICAgICAgICAgICAgICAgZmxvd0VsZW1lbnQucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGFyZ2V0Rmxvdy5fZGlydHkgPSB0cnVlO1xuICAgICAgc291cmNlRmxvdy5fZGlydHkgPSB0cnVlO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1mbG93JykuZm9yRWFjaCgoZ3ZGbG93KSA9PiBndkZsb3cucmVtb3ZlQ2FuZGlkYXRlKCkpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2RyYWdQb2xpY3kgPSBudWxsO1xuICAgICAgICB0aGlzLl9kcm9wUG9saWN5ID0gbnVsbDtcbiAgICAgIH0sIDApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIF9vbkRlbGV0ZVBvbGljeSh7IGRldGFpbCB9KSB7XG4gICAgY29uc3QgdGFyZ2V0RmxvdyA9IHRoaXMuX2ZpbmRGbG93QnlJZChkZXRhaWwuZmxvd0lkKTtcbiAgICB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnBvc2l0aW9uLCAxKTtcbiAgICB0YXJnZXRGbG93Ll9kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICBpZiAoZGV0YWlsLnRhcmdldC5lZGl0aW5nKSB7XG4gICAgICB0aGlzLl9jbG9zZUZsb3dTdGVwRm9ybSh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5fZ2V0Rmxvd0VsZW1lbnQoZGV0YWlsLmZsb3dJZCkucmVxdWVzdFVwZGF0ZSgpO1xuICB9XG5cbiAgX29uRGVzaWduKCkge1xuICAgIHRoaXMuX2NoYW5nZVRhYignZGVzaWduJyk7XG4gICAgdGhpcy5fc3BsaXRNYWluVmlld3MoKTtcbiAgfVxuXG4gIGJ1aWxkU2NoZW1hKHsgc2NoZW1hIH0pIHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHtcbiAgICAgIHRpdGxlOiAnRGVzY3JpcHRpb24nLFxuICAgICAgZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbiBvZiBmbG93IHN0ZXAnLFxuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgfTtcbiAgICBpZiAoc2NoZW1hKSB7XG4gICAgICBjb25zdCBqc29uU2NoZW1hID0gdHlwZW9mIHNjaGVtYSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHNjaGVtYSkgOiBzY2hlbWE7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0geyBkZXNjcmlwdGlvbiwgLi4uanNvblNjaGVtYS5wcm9wZXJ0aWVzIH07XG4gICAgICByZXR1cm4geyAuLi5qc29uU2NoZW1hLCBwcm9wZXJ0aWVzIH07XG4gICAgfVxuICAgIHJldHVybiB7IHByb3BlcnRpZXM6IHsgZGVzY3JpcHRpb24gfSB9O1xuICB9XG5cbiAgYXN5bmMgX2VkaXRGbG93U3RlcCh7IHN0ZXAsIGZsb3csIHBvbGljeSwgZ3JvdXAgfSkge1xuICAgIGlmIChzdGVwKSB7XG4gICAgICB0aGlzLl9jdXJyZW50UG9saWN5SWQgPSBwb2xpY3kuaWQ7XG4gICAgICBjb25zdCBjdXJyZW50Rmxvd1N0ZXAgPSB7IGZsb3csIHN0ZXAsIHBvbGljeSwgZ3JvdXAgfTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuYnVpbGRTY2hlbWEocG9saWN5KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3NldEN1cnJlbnRGbG93U3RlcChjdXJyZW50Rmxvd1N0ZXAsIHNjaGVtYSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW2Zsb3cuX2lkXSk7XG4gICAgICAgIHRoaXMuX3NwbGl0TWFpblZpZXdzKCk7XG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZ3YtcG9saWN5LXN0dWRpbzprZWVwLWRvY3VtZW50YXRpb24tY2xvc2UnKSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5fb25PcGVuRG9jdW1lbnRhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLl9jbG9zZUZsb3dTdGVwRm9ybSgpO1xuICAgICAgdGhpcy5fbWF4aW1pemVUb3BWaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX29uRWRpdEZsb3dTdGVwKHsgZGV0YWlsOiB7IHN0ZXAsIGZsb3csIHBvbGljeSwgZ3JvdXAgfSB9KSB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRGbG93U3RlcCh7IHN0ZXAsIGZsb3csIHBvbGljeSwgZ3JvdXAgfSk7XG4gIH1cblxuICBfZ2V0UmVzaXphYmxlVmlld3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi1yZXNpemFibGUtdmlld3MnKTtcbiAgfVxuXG4gIF9tYXhpbWl6ZVRvcFZpZXcoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGbG93c0lkLmxlbmd0aCA8PSAxKSB7XG4gICAgICB0aGlzLl9nZXRSZXNpemFibGVWaWV3cygpLm1heGltaXplVG9wKCk7XG4gICAgfVxuICB9XG5cbiAgX21heGltaXplQm90dG9tVmlldygpIHtcbiAgICB0aGlzLl9nZXRSZXNpemFibGVWaWV3cygpLm1heGltaXplQm90dG9tKCk7XG4gIH1cblxuICBfc3BsaXRNYWluVmlld3MoKSB7XG4gICAgdGhpcy5fZ2V0UmVzaXphYmxlVmlld3MoKS5zcGxpdCgpO1xuICB9XG5cbiAgX29uQ2hhbmdlRmxvd1N0ZXBTdGF0ZSh7IGRldGFpbCB9KSB7XG4gICAgY29uc3QgdGFyZ2V0RmxvdyA9IHRoaXMuX2ZpbmRGbG93QnlJZChkZXRhaWwuZmxvd0lkKTtcbiAgICBjb25zdCBzdGVwID0gdGFyZ2V0Rmxvd1tkZXRhaWwuZmxvd0tleV1bZGV0YWlsLnBvc2l0aW9uXTtcbiAgICBzdGVwLmVuYWJsZWQgPSBkZXRhaWwuZW5hYmxlZDtcbiAgICB0YXJnZXRGbG93Ll9kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIF9vbkNsb3NlRmxvd1N0ZXBGb3JtKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9jbG9zZUZsb3dTdGVwRm9ybSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX2Nsb3NlRmxvd1N0ZXBGb3JtKGZvcmNlID0gZmFsc2UpIHtcbiAgICBhd2FpdCB0aGlzLl9zZXRDdXJyZW50Rmxvd1N0ZXAobnVsbCwgbnVsbCwgZm9yY2UpO1xuICB9XG5cbiAgYXN5bmMgX2Fza1RvVmFsaWRhdGVGb3JtcygpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gdHJ1ZTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLl9zdWJtaXRPckNvbmZpcm1Gb3JtcygpKS50aGVuKChmb3JtcykgPT4ge1xuICAgICAgICBpZiAoZm9ybXMuZmlsdGVyKChyKSA9PiByICE9IG51bGwpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLl9kZWZpbml0aW9uID0gdGhpcy5fYnVpbGREZWZpbml0aW9uVG9TYXZlKCk7XG4gICAgICAgICAgdGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2goKGUpID0+IGUucmVxdWVzdFVwZGF0ZSgpKTtcbiAgICAgICAgICAvLyBSZWZyZXNoIGlmIGxvc2UgY2hhbmdlcyBsb3N0IGN1cnJlbnQgc3RlcCBzZWxlY3Rpb25cbiAgICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2tDdXJyZW50Rmxvd1N0ZXAoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKChlKSA9PiBlLnJlcXVlc3RVcGRhdGUoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgICAgICAgICAgIHJldHVybiBmb3JtcztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgICAgICAgIHJldHVybiBmb3JtcztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignYXNrIGFscmVhZHkgd2FpdGluZycpO1xuICB9XG5cbiAgYXN5bmMgX3NldEN1cnJlbnRGbG93U3RlcChjdXJyZW50Rmxvd1N0ZXAsIGZsb3dTdGVwU2NoZW1hLCBmb3JjZSA9IGZhbHNlKSB7XG4gICAgaWYgKCFmb3JjZSkge1xuICAgICAgYXdhaXQgdGhpcy5fYXNrVG9WYWxpZGF0ZUZvcm1zKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZW1hID0gZGVlcENsb25lKGZsb3dTdGVwU2NoZW1hKTtcbiAgICBpZiAoY3VycmVudEZsb3dTdGVwICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPVxuICAgICAgICB0eXBlb2YgY3VycmVudEZsb3dTdGVwLnN0ZXAuY29uZmlndXJhdGlvbiA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IEpTT04ucGFyc2UoY3VycmVudEZsb3dTdGVwLnN0ZXAuY29uZmlndXJhdGlvbilcbiAgICAgICAgICA6IGN1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmZpZ3VyYXRpb247XG4gICAgICBjb25zdCBzdGVwID0geyAuLi5jdXJyZW50Rmxvd1N0ZXAuc3RlcCwgY29uZmlndXJhdGlvbiB9O1xuXG4gICAgICBjb25zdCBfaW5pdGlhbFZhbHVlcyA9IHsgLi4uc3RlcC5jb25maWd1cmF0aW9uLCBkZXNjcmlwdGlvbjogc3RlcC5kZXNjcmlwdGlvbiB9O1xuICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwID0geyAuLi5jdXJyZW50Rmxvd1N0ZXAsIHN0ZXAsIF9pbml0aWFsVmFsdWVzIH07XG5cbiAgICAgIGlmIChmbG93U3RlcFNjaGVtYSAmJiBmbG93U3RlcFNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlKSB7XG4gICAgICAgIGNvbnN0IF9lbnVtID0gc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZW51bTtcbiAgICAgICAgaWYgKF9lbnVtLmZpbmQoKHNjb3BlKSA9PiBbJ1JFUVVFU1QnLCAnUkVRVUVTVF9DT05URU5UJywgJ1JFU1BPTlNFJywgJ1JFU1BPTlNFX0NPTlRFTlQnXS5pbmNsdWRlcyhzY29wZSkpICE9IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cCA9PT0gJ3ByZScgPyBbJ1JFUVVFU1QnLCAnUkVRVUVTVF9DT05URU5UJ10gOiBbJ1JFU1BPTlNFJywgJ1JFU1BPTlNFX0NPTlRFTlQnXTtcbiAgICAgICAgICBzY2hlbWEucHJvcGVydGllcy5zY29wZS5lbnVtID0gX2VudW0uZmlsdGVyKChzY29wZSkgPT4gZmlsdGVyZWQuaW5jbHVkZXMoc2NvcGUpKTtcbiAgICAgICAgICBjb25zdCBzY29wZSA9IHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmZpZ3VyYXRpb24uc2NvcGU7XG4gICAgICAgICAgaWYgKHNjb3BlID09IG51bGwgfHwgIXNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmVudW0uaW5jbHVkZXMoc2NvcGUpKSB7XG4gICAgICAgICAgICBzY2hlbWEucHJvcGVydGllcy5zY29wZS5kZWZhdWx0ID0gc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZW51bVswXTtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmZpZ3VyYXRpb24uc2NvcGUgPSBzY2hlbWEucHJvcGVydGllcy5zY29wZS5lbnVtWzBdO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLl9pbml0aWFsVmFsdWVzLnNjb3BlID0gc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZW51bVswXTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuX3ZhbHVlcykge1xuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuX3ZhbHVlcy5zY29wZSA9IHNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmVudW1bMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZmxvd1N0ZXBTY2hlbWEgPSBzY2hlbWE7XG4gIH1cblxuICBfcmVmcmVzaChjbG9zZVN0ZXBGb3JtID0gdHJ1ZSkge1xuICAgIGlmIChjbG9zZVN0ZXBGb3JtKSB7XG4gICAgICB0aGlzLl9jbG9zZUZsb3dTdGVwRm9ybSh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5fZGVmaW5pdGlvbiA9IGRlZXBDbG9uZSh0aGlzLl9kZWZpbml0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIF9vblNlbGVjdEZsb3dzKHsgZGV0YWlsIH0pIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0oKTtcbiAgICAgIHRoaXMuX29uQ2xvc2VEb2N1bWVudGF0aW9uKCk7XG4gICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKGRldGFpbC5mbG93cyk7XG4gICAgICB0aGlzLl9vbkRlc2lnbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9vbk9wZW5Eb2N1bWVudGF0aW9uRnJvbU1lbnUoeyBkZXRhaWw6IHsgcG9saWN5IH0gfSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5kb2N1bWVudGF0aW9uID09IG51bGwgfHwgdGhpcy5kb2N1bWVudGF0aW9uLmlkICE9PSBwb2xpY3kuaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0oKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFBvbGljeUlkID0gcG9saWN5LmlkO1xuICAgICAgICBpZiAodGhpcy5nZXRTZWxlY3RlZEZsb3coKSkge1xuICAgICAgICAgIHRoaXMuX3NwbGl0TWFpblZpZXdzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fbWF4aW1pemVCb3R0b21WaWV3KCk7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZmV0Y2gtZG9jdW1lbnRhdGlvbicsIHsgcG9saWN5IH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cblxuICBfZmV0Y2hEb2N1bWVudGF0aW9uKHBvbGljeSkge1xuICAgIGlmICh0aGlzLmRvY3VtZW50YXRpb24gPT0gbnVsbCB8fCB0aGlzLmRvY3VtZW50YXRpb24uaWQgIT09IHBvbGljeS5pZCkge1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZmV0Y2gtZG9jdW1lbnRhdGlvbicsIHsgcG9saWN5IH0pO1xuICAgIH1cbiAgfVxuXG4gIF9vbk9wZW5Eb2N1bWVudGF0aW9uKCkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50Rmxvd1N0ZXAgJiYgdGhpcy5fY3VycmVudEZsb3dTdGVwLnBvbGljeSkge1xuICAgICAgdGhpcy5fZmV0Y2hEb2N1bWVudGF0aW9uKHRoaXMuX2N1cnJlbnRGbG93U3RlcC5wb2xpY3kpO1xuICAgIH1cbiAgfVxuXG4gIF9vbk9wZW5Eb2N1bWVudGF0aW9uRnJvbUZvcm0oKSB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2d2LXBvbGljeS1zdHVkaW86a2VlcC1kb2N1bWVudGF0aW9uLWNsb3NlJyk7XG4gICAgdGhpcy5fb25PcGVuRG9jdW1lbnRhdGlvbigpO1xuICB9XG5cbiAgX2ZpbmRGbG93Q29sbGVjdGlvbihmbG93SWQpIHtcbiAgICBjb25zdCBwbGFuID0gdGhpcy5kZWZpbmVkUGxhbnMuZmluZCgocGxhbikgPT4gcGxhbi5mbG93cy5maW5kKChmbG93KSA9PiBmbG93Ll9pZCA9PT0gZmxvd0lkKSAhPSBudWxsKTtcbiAgICByZXR1cm4geyBwbGFuLCBmbG93czogcGxhbiAhPSBudWxsID8gcGxhbi5mbG93cyA6IHRoaXMuZGVmaW5lZEZsb3dzIH07XG4gIH1cblxuICBfZmluZEZsb3dCeUlkKGZsb3dJZCkge1xuICAgIGxldCBmbG93ID0gdGhpcy5kZWZpbmVkRmxvd3MuZmluZCgoZmxvdykgPT4gZmxvdy5faWQgPT09IGZsb3dJZCk7XG4gICAgaWYgKGZsb3cgPT0gbnVsbCkge1xuICAgICAgY29uc3QgcGxhbnNGbG93cyA9IHRoaXMuZGVmaW5lZFBsYW5zLm1hcCgocGxhbikgPT4gcGxhbi5mbG93cykucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjLmNvbmNhdCh2YWwpLCBbXSk7XG4gICAgICBmbG93ID0gcGxhbnNGbG93cy5maW5kKChmbG93KSA9PiBmbG93Ll9pZCA9PT0gZmxvd0lkKTtcbiAgICB9XG4gICAgcmV0dXJuIGZsb3c7XG4gIH1cblxuICBnZXRTZWxlY3RlZEZsb3coaW5kZXggPSAwKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRGbG93SWQgPSB0aGlzLnNlbGVjdGVkRmxvd3NJZFtpbmRleF07XG4gICAgcmV0dXJuIHRoaXMuX2ZpbmRGbG93QnlJZChzZWxlY3RlZEZsb3dJZCk7XG4gIH1cblxuICBfb25UYXJnZXRQb2xpY3koeyBkZXRhaWwgfSkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID09IG51bGwpIHtcbiAgICAgIHRoaXMuX2RyYWdQb2xpY3kgPSBkZXRhaWw7XG4gICAgfVxuICB9XG5cbiAgX29uQ2hhbmdlRmxvd1N0ZXAoeyBkZXRhaWwgfSkge1xuICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5fdmFsdWVzID0gZGV0YWlsLnZhbHVlcztcbiAgfVxuXG4gIF93cml0ZUZsb3dTdGVwKHZhbHVlcykge1xuICAgIGNvbnN0IHsgZGVzY3JpcHRpb24sIC4uLmNvbmZpZ3VyYXRpb24gfSA9IHZhbHVlcztcbiAgICBpZiAoXG4gICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5fbmV3IHx8XG4gICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5kZXNjcmlwdGlvbiAhPT0gZGVzY3JpcHRpb24gfHxcbiAgICAgICFkZWVwRXF1YWwodGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAuY29uZmlndXJhdGlvbiwgY29uZmlndXJhdGlvbilcbiAgICApIHtcbiAgICAgIGNvbnN0IGZsb3cgPSB0aGlzLl9maW5kRmxvd0J5SWQodGhpcy5fY3VycmVudEZsb3dTdGVwLmZsb3cuX2lkKTtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gZmxvd1t0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXBdLmZpbmRJbmRleCgoc3RlcCkgPT4gc3RlcC5faWQgPT09IHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLl9pZCk7XG5cbiAgICAgIGZsb3dbdGhpcy5fY3VycmVudEZsb3dTdGVwLmdyb3VwXVtwb3NpdGlvbl0uZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgIGZsb3dbdGhpcy5fY3VycmVudEZsb3dTdGVwLmdyb3VwXVtwb3NpdGlvbl0uY29uZmlndXJhdGlvbiA9IGRlZXBDbG9uZShjb25maWd1cmF0aW9uKTtcbiAgICAgIGRlbGV0ZSBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dLl9uZXc7XG4gICAgICBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dLl9kaXJ0eSA9IHRydWU7XG4gICAgICBmbG93Ll9kaXJ0eSA9IHRydWU7XG4gICAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLmZsb3cgPSBmbG93O1xuICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAgPSBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9vblN1Ym1pdEZsb3dTdGVwKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLl93cml0ZUZsb3dTdGVwKGRldGFpbC52YWx1ZXMpO1xuICAgIGF3YWl0IHRoaXMucmVxdWVzdFVwZGF0ZSgnX2RlZmluaXRpb24nKTtcbiAgICB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaCgoYykgPT4gYy5yZXF1ZXN0VXBkYXRlKCkpO1xuICB9XG5cbiAgX29uQ2FuY2VsRmxvdygpIHtcbiAgICB0aGlzLl9vbkRlc2lnbigpO1xuICB9XG5cbiAgX29uU3VibWl0Rmxvdyh7IGRldGFpbDogeyB2YWx1ZXMgfSB9KSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRGbG93ID0gdGhpcy5nZXRTZWxlY3RlZEZsb3coKTtcbiAgICBjb25zdCBfdmFsdWVzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fY3JlYXRlRmxvd0Zyb21TY2hlbWEoKSwgdmFsdWVzKTtcbiAgICBjb25zdCBzZWxlY3RlZEZsb3dVcGRhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgc2VsZWN0ZWRGbG93LCBfdmFsdWVzKTtcbiAgICBpZiAoIWRlZXBFcXVhbChzZWxlY3RlZEZsb3csIHNlbGVjdGVkRmxvd1VwZGF0ZWQpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHNlbGVjdGVkRmxvdywgc2VsZWN0ZWRGbG93VXBkYXRlZCwgeyBfZGlydHk6IHRydWUgfSk7XG4gICAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgICAgdGhpcy5fcmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIF9vbkNhbmNlbEZsb3dNb2RlKCkge1xuICAgIHRoaXMuX29uRGVzaWduKCk7XG4gIH1cblxuICBfb25TdWJtaXRGbG93TW9kZSh7IGRldGFpbDogeyB2YWx1ZXMgfSB9KSB7XG4gICAgdGhpcy5fZGVmaW5pdGlvblsnZmxvdy1tb2RlJ10gPSB2YWx1ZXNbJ2Zsb3ctbW9kZSddIHx8ICdERUZBVUxUJztcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgfVxuXG4gIF9vbkNoYW5nZVRhYih7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5fY2hhbmdlVGFiKGRldGFpbC52YWx1ZSk7XG4gIH1cblxuICBhc3luYyBfY2hhbmdlVGFiVmFsaWRhdG9yKHsgZnJvbSwgdG8gfSkge1xuICAgIGlmIChmcm9tID09PSAncHJvcGVydGllcycpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi1wcm9wZXJ0aWVzJyk7XG4gICAgICBpZiAoY29tcG9uZW50LmRpcnR5KSB7XG4gICAgICAgIHJldHVybiBjb21wb25lbnQuY29uZmlybSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZnJvbSA9PT0gJ3Jlc291cmNlcycpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi1yZXNvdXJjZXMnKTtcbiAgICAgIGlmIChjb21wb25lbnQuZGlydHkpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5jb25maXJtKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9hc2tUb1ZhbGlkYXRlRm9ybXMoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIF9jaGFuZ2VUYWIodGFiSWQpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLnRhYklkID0gdGFiSWQ7XG4gICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdjaGFuZ2UtdGFiJywgdGhpcy50YWJJZCk7XG4gICAgfVxuICB9XG5cbiAgX29uRHJhZ1N0YXJ0Rmxvd1N0ZXAoZmxvdywgeyBkZXRhaWwgfSkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID09IG51bGwpIHtcbiAgICAgIHRoaXMuX2Ryb3BQb2xpY3kgPSBkZXRhaWw7XG4gICAgICB0aGlzLl9kcmFnUG9saWN5ID0gZGV0YWlsO1xuICAgIH1cbiAgfVxuXG4gIF9yZW5kZXJGbG93RW1wdHlTdGF0ZShyZWFkb25seU1vZGUpIHtcbiAgICByZXR1cm4gaHRtbGA8ZGl2IHNsb3Q9XCJjb250ZW50XCIgY2xhc3M9XCJlbXB0eVwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgU2VsZWN0IGEgZmxvd1xuICAgICAgICAke3JlYWRvbmx5TW9kZSAhPT0gdHJ1ZVxuICAgICAgICAgID8gaHRtbGBvciA8Z3YtYnV0dG9uIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uQWRkRmxvd31cIiBvdXRsaW5lZCBpY29uPVwiY29kZTpwbHVzXCIgbGFyZ2U+ZGVzaWduIG5ldyBvbmU8L2d2LWJ1dHRvbj5gXG4gICAgICAgICAgOiAnJ31cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmA7XG4gIH1cblxuICBfcmVuZGVyRmxvdyhpbmRleCA9IDAsIGhhc0VtcHR5U3RhdGUgPSB0cnVlLCByZWFkb25seU1vZGUpIHtcbiAgICBjb25zdCBmbG93ID0gdGhpcy5nZXRTZWxlY3RlZEZsb3coaW5kZXgpO1xuICAgIGlmIChmbG93KSB7XG4gICAgICBjb25zdCB7IHBsYW4gfSA9IHRoaXMuX2ZpbmRGbG93Q29sbGVjdGlvbihmbG93Ll9pZCk7XG4gICAgICBjb25zdCBzZWxlY3RlZFN0ZXBJZCA9IHRoaXMuX2N1cnJlbnRGbG93U3RlcCA/IHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLl9pZCA6IG51bGw7XG4gICAgICByZXR1cm4gaHRtbGAgPGd2LWZsb3dcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIlxuICAgICAgICAuaWQ9XCIke2Zsb3cuX2lkfVwiXG4gICAgICAgIC5mbG93PVwiJHtmbG93fVwiXG4gICAgICAgIC5wbGFuPVwiJHtwbGFufVwiXG4gICAgICAgIC5wb2xpY2llcz1cIiR7dGhpcy5wb2xpY2llc31cIlxuICAgICAgICBzbG90PVwiY29udGVudFwiXG4gICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAuZHJhZ1BvbGljeT1cIiR7dGhpcy5fZHJhZ1BvbGljeX1cIlxuICAgICAgICAuZHJvcFBvbGljeT1cIiR7dGhpcy5fZHJvcFBvbGljeX1cIlxuICAgICAgICAuc2VsZWN0ZWRTdGVwSWQ9XCIke3NlbGVjdGVkU3RlcElkfVwiXG4gICAgICAgID9yZWFkb25seT1cIiR7cmVhZG9ubHlNb2RlfVwiXG4gICAgICAgID9oYXMtcG9saWN5LWZpbHRlcj1cIiR7dGhpcy5fcG9saWN5RmlsdGVyT3B0aW9ucyAhPSBudWxsfVwiXG4gICAgICAgIGZsb3dzLXRpdGxlPVwiJHt0aGlzLmZsb3dzVGl0bGV9XCJcbiAgICAgICAgQGd2LWZsb3c6ZHJhZy1zdGFydD1cIiR7dGhpcy5fb25EcmFnU3RhcnRGbG93U3RlcC5iaW5kKHRoaXMsIGZsb3cpfVwiXG4gICAgICAgIEBndi1mbG93OmVkaXQ9XCIke3RoaXMuX29uRWRpdEZsb3dTdGVwfVwiXG4gICAgICAgIEBndi1mbG93OmNoYW5nZS1zdGF0ZT1cIiR7dGhpcy5fb25DaGFuZ2VGbG93U3RlcFN0YXRlfVwiXG4gICAgICAgIEBndi1mbG93OmRyb3A9XCIke3RoaXMuX29uRHJvcFBvbGljeX1cIlxuICAgICAgICBAZ3YtZmxvdzpkZWxldGU9XCIke3RoaXMuX29uRGVsZXRlUG9saWN5fVwiXG4gICAgICA+PC9ndi1mbG93PmA7XG4gICAgfSBlbHNlIGlmIChoYXNFbXB0eVN0YXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyRmxvd0VtcHR5U3RhdGUocmVhZG9ubHlNb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgYDtcbiAgfVxuXG4gIF9vbkZldGNoUmVzb3VyY2VzKGV2ZW50KSB7XG4gICAgY29uc3QgeyBjdXJyZW50VGFyZ2V0LCByZWdleFR5cGVzIH0gPSBldmVudC5kZXRhaWw7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZGVmaW5lZFJlc291cmNlc1xuICAgICAgLmZpbHRlcigocmVzb3VyY2UpID0+IHJlZ2V4VHlwZXMgPT0gbnVsbCB8fCBuZXcgUmVnRXhwKHJlZ2V4VHlwZXMpLnRlc3QocmVzb3VyY2UudHlwZSkpXG4gICAgICAubWFwKChyZXNvdXJjZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VUeXBlID0gdGhpcy5yZXNvdXJjZVR5cGVzLmZpbmQoKHR5cGUpID0+IHR5cGUuaWQgPT09IHJlc291cmNlLnR5cGUpO1xuICAgICAgICBjb25zdCByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdndi1yb3cnKTtcbiAgICAgICAgY29uc3QgcGljdHVyZSA9IHJlc291cmNlVHlwZS5pY29uID8gcmVzb3VyY2VUeXBlLmljb24gOiBudWxsO1xuICAgICAgICByb3cuaXRlbSA9IHsgcGljdHVyZSwgbmFtZTogcmVzb3VyY2UubmFtZSB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVsZW1lbnQ6IHJvdyxcbiAgICAgICAgICB2YWx1ZTogcmVzb3VyY2UubmFtZSxcbiAgICAgICAgICBpZDogcmVzb3VyY2UudHlwZSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIGN1cnJlbnRUYXJnZXQub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBfcmVuZGVyUG9saWN5KHJlYWRvbmx5TW9kZSkge1xuICAgIGlmICh0aGlzLl9mbG93U3RlcFNjaGVtYSAmJiB0aGlzLmRvY3VtZW50YXRpb24pIHtcbiAgICAgIHJldHVybiBodG1sYDxndi1yZXNpemFibGUtdmlld3MgZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIG5vLW92ZXJmbG93PlxuICAgICAgICA8ZGl2IHNsb3Q9XCJ0b3BcIj4ke3RoaXMuX3JlbmRlckZsb3dTdGVwRm9ybShyZWFkb25seU1vZGUpfTwvZGl2PlxuICAgICAgICA8ZGl2IHNsb3Q9XCJib3R0b21cIj5cbiAgICAgICAgICA8Z3YtZG9jdW1lbnRhdGlvblxuICAgICAgICAgICAgLnRleHQ9XCIke3RoaXMuZG9jdW1lbnRhdGlvbi5jb250ZW50fVwiXG4gICAgICAgICAgICAuaW1hZ2U9XCIke3RoaXMuZG9jdW1lbnRhdGlvbi5pbWFnZX1cIlxuICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgICAgICBAZ3YtZG9jdW1lbnRhdGlvbjpjbG9zZT1cIiR7dGhpcy5fb25DbG9zZURvY3VtZW50YXRpb259XCJcbiAgICAgICAgICA+PC9ndi1kb2N1bWVudGF0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZ3YtcmVzaXphYmxlLXZpZXdzPmA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRvY3VtZW50YXRpb24pIHtcbiAgICAgIHJldHVybiBodG1sYDxndi1kb2N1bWVudGF0aW9uXG4gICAgICAgIC50ZXh0PVwiJHt0aGlzLmRvY3VtZW50YXRpb24uY29udGVudH1cIlxuICAgICAgICAuaW1hZ2U9XCIke3RoaXMuZG9jdW1lbnRhdGlvbi5pbWFnZX1cIlxuICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgQGd2LWRvY3VtZW50YXRpb246Y2xvc2U9XCIke3RoaXMuX29uQ2xvc2VEb2N1bWVudGF0aW9ufVwiXG4gICAgICA+PC9ndi1kb2N1bWVudGF0aW9uPmA7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9mbG93U3RlcFNjaGVtYSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckZsb3dTdGVwRm9ybShyZWFkb25seU1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbGBgO1xuICB9XG5cbiAgX2dldEZsb3dTdGVwRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYCMke0ZMT1dfU1RFUF9GT1JNX0lEfWApO1xuICB9XG5cbiAgX29uUmVzZXRGbG93U3RlcCgpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEZsb3dTdGVwKSB7XG4gICAgICBkZWxldGUgdGhpcy5fY3VycmVudEZsb3dTdGVwLl92YWx1ZXM7XG4gICAgICB0aGlzLl9nZXRGbG93U3RlcEZvcm0oKS5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gIF9nZW5lcmF0ZUZsb3dzSWQobGlzdCwgZm9yY2UgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLl9nZW5lcmF0ZUlkKCdmJywgbGlzdCwgZm9yY2UsIHRydWUpO1xuICB9XG5cbiAgX2dlbmVyYXRlUGxhbkZsb3dzSWQocGxhbiwgZm9yY2UgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLl9nZW5lcmF0ZUlkKHBsYW4uaWQsIHBsYW4uZmxvd3MsIGZvcmNlLCB0cnVlKTtcbiAgfVxuXG4gIF9nZW5lcmF0ZUZsb3dTdGVwSWQoZmxvd0lkLCBmbG93S2V5LCBwb3NpdGlvbikge1xuICAgIHJldHVybiBgJHtmbG93SWR9XyR7Zmxvd0tleX1fJHtwb3NpdGlvbn1gO1xuICB9XG5cbiAgX2dlbmVyYXRlSWQocHJlZml4LCBsaXN0LCBmb3JjZSA9IGZhbHNlLCBpc0Zsb3cgPSBmYWxzZSkge1xuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gbGlzdC5tYXAoKGUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IF9pZCA9IGAke3ByZWZpeH1fJHtpbmRleH1gO1xuICAgICAgICBpZiAoaXNGbG93KSB7XG4gICAgICAgICAgaWYgKGUucHJlKSB7XG4gICAgICAgICAgICBlLnByZS5mb3JFYWNoKChzdGVwLCBzdGVwSW5kZXgpID0+IChzdGVwLl9pZCA9IHRoaXMuX2dlbmVyYXRlRmxvd1N0ZXBJZChfaWQsICdwcmUnLCBzdGVwSW5kZXgpKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlLnBvc3QpIHtcbiAgICAgICAgICAgIGUucG9zdC5mb3JFYWNoKChzdGVwLCBzdGVwSW5kZXgpID0+IChzdGVwLl9pZCA9IHRoaXMuX2dlbmVyYXRlRmxvd1N0ZXBJZChfaWQsICdwb3N0Jywgc3RlcEluZGV4KSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9yY2UgfHwgZS5faWQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB7IC4uLmUsIF9pZCB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgZ2V0Q2hpbGRyZW4oKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLkFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LWZsb3cnKSksXG4gICAgICAuLi5BcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1yZXNpemFibGUtdmlld3MnKSksXG4gICAgXTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRVcGRhdGVDb21wbGV0ZSgpIHtcbiAgICBhd2FpdCBzdXBlci5fZ2V0VXBkYXRlQ29tcGxldGUoKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmdldENoaWxkcmVuKCkubWFwKChlKSA9PiBlLnVwZGF0ZUNvbXBsZXRlKSk7XG4gIH1cblxuICBzaG91bGRVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpIHtcbiAgICAvLyBKdXN0IHJlZnJlc2ggZ3YtZmxvdyBjb21wb25lbnRzXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnX2RyYWdQb2xpY3knKSkge1xuICAgICAgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LWZsb3cnKS5mb3JFYWNoKChmbG93KSA9PiAoZmxvdy5kcmFnUG9saWN5ID0gdGhpcy5fZHJhZ1BvbGljeSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdfZHJvcFBvbGljeScpKSB7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3YtZmxvdycpLmZvckVhY2goKGZsb3cpID0+IChmbG93LmRyb3BQb2xpY3kgPSB0aGlzLl9kcm9wUG9saWN5KSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5zaG91bGRVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuICB9XG5cbiAgdXBkYXRlZChwcm9wcykge1xuICAgIGlmIChwcm9wcy5oYXMoJ2RvY3VtZW50YXRpb24nKSAmJiB0aGlzLmRvY3VtZW50YXRpb24gIT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkRmxvd3NJZC5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFt0aGlzLnNlbGVjdGVkRmxvd3NJZFswXV0pO1xuICAgIH1cbiAgfVxuXG4gIF9yZW5kZXJGbG93U3RlcEZvcm0ocmVhZG9ubHlNb2RlKSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5fY3VycmVudEZsb3dTdGVwLl92YWx1ZXMgfHwgdGhpcy5fY3VycmVudEZsb3dTdGVwLl9pbml0aWFsVmFsdWVzO1xuICAgIHJldHVybiBodG1sYCR7Y2FjaGUoXG4gICAgICB0aGlzLl9mbG93U3RlcFNjaGVtYSAmJiB0aGlzLl9jdXJyZW50Rmxvd1N0ZXBcbiAgICAgICAgPyBodG1sYDxkaXYgY2xhc3M9XCJmbG93LXN0ZXBfX2NvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsb3ctc3RlcF9fZm9ybVwiPlxuICAgICAgICAgICAgICA8Z3Ytc2NoZW1hLWZvcm1cbiAgICAgICAgICAgICAgICAuaWQ9XCIke0ZMT1dfU1RFUF9GT1JNX0lEfVwiXG4gICAgICAgICAgICAgICAgLnNjaGVtYT1cIiR7dGhpcy5fZmxvd1N0ZXBTY2hlbWF9XCJcbiAgICAgICAgICAgICAgICAuaWNvbj1cImRlc2lnbjplZGl0XCJcbiAgICAgICAgICAgICAgICBoYXMtaGVhZGVyXG4gICAgICAgICAgICAgICAgdmFsaWRhdGUtb24tcmVuZGVyXG4gICAgICAgICAgICAgICAgLnZhbHVlcz1cIiR7dmFsdWVzfVwiXG4gICAgICAgICAgICAgICAgLmRpcnR5PVwiJHt0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuX3ZhbHVlcyAhPSBudWxsfVwiXG4gICAgICAgICAgICAgICAgP3JlYWRvbmx5PVwiJHtyZWFkb25seU1vZGV9XCJcbiAgICAgICAgICAgICAgICBzY3JvbGxhYmxlXG4gICAgICAgICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOmNoYW5nZT1cIiR7dGhpcy5fb25DaGFuZ2VGbG93U3RlcH1cIlxuICAgICAgICAgICAgICAgIEBndi1zY2hlbWEtZm9ybTpyZXNldD1cIiR7dGhpcy5fb25SZXNldEZsb3dTdGVwfVwiXG4gICAgICAgICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOmZldGNoLXJlc291cmNlcz1cIiR7dGhpcy5fb25GZXRjaFJlc291cmNlc31cIlxuICAgICAgICAgICAgICAgIEBndi1zY2hlbWEtZm9ybTpzdWJtaXQ9XCIke3RoaXMuX29uU3VibWl0Rmxvd1N0ZXB9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgc2xvdD1cInRpdGxlXCIgY2xhc3M9XCJmbG93LXN0ZXBfX2Zvcm0tdGl0bGVcIj4ke3RoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLm5hbWV9PC9kaXY+XG4gICAgICAgICAgICAgICAgPGd2LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgc2xvdD1cImhlYWRlci1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGljb249XCJnZW5lcmFsOmNsb3NlXCJcbiAgICAgICAgICAgICAgICAgIG91dGxpbmVkXG4gICAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgICAgQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25DbG9zZUZsb3dTdGVwRm9ybX1cIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDbG9zZSAoZXNjKVwiXG4gICAgICAgICAgICAgICAgPjwvZ3YtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxndi1idXR0b25cbiAgICAgICAgICAgICAgICAgIHNsb3Q9XCJoZWFkZXItbGVmdFwiXG4gICAgICAgICAgICAgICAgICBpY29uPVwiaG9tZTpib29rXCJcbiAgICAgICAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5kb2N1bWVudGF0aW9uICE9IG51bGx9XCJcbiAgICAgICAgICAgICAgICAgIG91dGxpbmVkXG4gICAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgICAgQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25PcGVuRG9jdW1lbnRhdGlvbkZyb21Gb3JtfVwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIk9wZW4gZG9jdW1lbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgPjwvZ3YtYnV0dG9uPlxuICAgICAgICAgICAgICA8L2d2LXNjaGVtYS1mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+YFxuICAgICAgICA6ICcnLFxuICAgICl9YDtcbiAgfVxuXG4gIF9vbkNsb3NlRG9jdW1lbnRhdGlvbigpIHtcbiAgICB0aGlzLmRvY3VtZW50YXRpb24gPSBudWxsO1xuICAgIGlmICh0aGlzLl9jdXJyZW50Rmxvd1N0ZXAgPT0gbnVsbCkge1xuICAgICAgdGhpcy5fbWF4aW1pemVUb3BWaWV3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdndi1wb2xpY3ktc3R1ZGlvOmtlZXAtZG9jdW1lbnRhdGlvbi1jbG9zZScsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIF9vbkRlbGV0ZUZsb3coeyBkZXRhaWwgfSkge1xuICAgIGNvbnN0IGZsb3dJZCA9IGRldGFpbC5jb250ZW50Ll9pZDtcbiAgICBjb25zdCB7IGZsb3dzIH0gPSB0aGlzLl9maW5kRmxvd0NvbGxlY3Rpb24oZmxvd0lkKTtcbiAgICBjb25zdCBmbG93ID0gZmxvd3MuZmluZCgoZmxvdykgPT4gZmxvdy5faWQgPT09IGZsb3dJZCk7XG4gICAgdGhpcy5fZGVsZXRlRmxvdyhmbG93cywgZmxvdyk7XG4gIH1cblxuICBnZXQgZGVmaW5lZEZsb3dzKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZpbml0aW9uICYmIHRoaXMuX2RlZmluaXRpb24uZmxvd3MgPyB0aGlzLl9kZWZpbml0aW9uLmZsb3dzIDogW107XG4gIH1cblxuICBnZXQgZGVmaW5lZFBsYW5zKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZpbml0aW9uICYmIHRoaXMuX2RlZmluaXRpb24ucGxhbnMgPyB0aGlzLl9kZWZpbml0aW9uLnBsYW5zIDogW107XG4gIH1cblxuICBnZXQgZGVmaW5lZFJlc291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbiAmJiB0aGlzLl9kZWZpbml0aW9uLnJlc291cmNlcyA/IHRoaXMuX2RlZmluaXRpb24ucmVzb3VyY2VzIDogW107XG4gIH1cblxuICBnZXQgZGVmaW5lZFByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmluaXRpb24gJiYgdGhpcy5fZGVmaW5pdGlvbi5wcm9wZXJ0aWVzID8gdGhpcy5fZGVmaW5pdGlvbi5wcm9wZXJ0aWVzIDogW107XG4gIH1cblxuICBhc3luYyBfb25EdXBsaWNhdGVGbG93KHsgZGV0YWlsIH0pIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fYXNrVG9WYWxpZGF0ZUZvcm1zKCk7XG5cbiAgICAgIGNvbnN0IGZsb3dJZCA9IGRldGFpbC5jb250ZW50Ll9pZDtcbiAgICAgIGNvbnN0IHsgcGxhbiwgZmxvd3MgfSA9IHRoaXMuX2ZpbmRGbG93Q29sbGVjdGlvbihmbG93SWQpO1xuICAgICAgdGhpcy5fYWRkRmxvdyhmbG93cywgdGhpcy5fZmluZEZsb3dCeUlkKGZsb3dJZCkpO1xuICAgICAgaWYgKHBsYW4gIT0gbnVsbCkge1xuICAgICAgICBsZXQgcGxhbkluZGV4ID0gbnVsbDtcbiAgICAgICAgdGhpcy5kZWZpbmVkUGxhbnMuZmluZCgocCwgaSkgPT4ge1xuICAgICAgICAgIGlmIChwLmlkID09PSBwbGFuLmlkKSB7XG4gICAgICAgICAgICBwbGFuSW5kZXggPSBpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBsYW4uZmxvd3MgPSBmbG93cztcbiAgICAgICAgdGhpcy5kZWZpbmVkUGxhbnNbcGxhbkluZGV4XS5mbG93cyA9IHRoaXMuX2dlbmVyYXRlUGxhbkZsb3dzSWQocGxhbiwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW3RoaXMuZGVmaW5lZFBsYW5zW3BsYW5JbmRleF0uZmxvd3NbZmxvd3MubGVuZ3RoIC0gMV0uX2lkXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9kZWZpbml0aW9uLmZsb3dzID0gdGhpcy5fZ2VuZXJhdGVGbG93c0lkKHRoaXMuX2RlZmluaXRpb24uZmxvd3MpO1xuICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFt0aGlzLl9kZWZpbml0aW9uLmZsb3dzW3RoaXMuX2RlZmluaXRpb24uZmxvd3MubGVuZ3RoIC0gMV0uX2lkXSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfb25DaGFuZ2VGbG93U3RhdGUoeyBkZXRhaWwgfSkge1xuICAgIGNvbnN0IGZsb3cgPSB0aGlzLl9maW5kRmxvd0J5SWQoZGV0YWlsLmNvbnRlbnQuX2lkKTtcbiAgICBmbG93LmVuYWJsZWQgPSBkZXRhaWwuZW5hYmxlZDtcbiAgICBmbG93Ll9kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIF9vbkFkZEZsb3dQbGFuKHsgZGV0YWlsIH0pIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fYXNrVG9WYWxpZGF0ZUZvcm1zKCk7XG4gICAgICB0aGlzLl9hZGRGbG93KHRoaXMuZGVmaW5lZFBsYW5zW2RldGFpbC5wbGFuSW5kZXhdLmZsb3dzKTtcbiAgICAgIHRoaXMuZGVmaW5lZFBsYW5zW2RldGFpbC5wbGFuSW5kZXhdLmZsb3dzID0gdGhpcy5fZ2VuZXJhdGVQbGFuRmxvd3NJZCh0aGlzLmRlZmluZWRQbGFuc1tkZXRhaWwucGxhbkluZGV4XSk7XG4gICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFt0aGlzLmRlZmluZWRQbGFuc1tkZXRhaWwucGxhbkluZGV4XS5mbG93c1t0aGlzLmRlZmluZWRQbGFuc1tkZXRhaWwucGxhbkluZGV4XS5mbG93cy5sZW5ndGggLSAxXS5faWRdKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9vbkFkZEZsb3coKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Fza1RvVmFsaWRhdGVGb3JtcygpO1xuXG4gICAgICB0aGlzLl9hZGRGbG93KHRoaXMuX2RlZmluaXRpb24uZmxvd3MpO1xuICAgICAgdGhpcy5fZGVmaW5pdGlvbi5mbG93cyA9IHRoaXMuX2dlbmVyYXRlRmxvd3NJZCh0aGlzLl9kZWZpbml0aW9uLmZsb3dzKTtcbiAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW3RoaXMuX2RlZmluaXRpb24uZmxvd3NbdGhpcy5fZGVmaW5pdGlvbi5mbG93cy5sZW5ndGggLSAxXS5faWRdKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIF9hZGRGbG93KGNvbGxlY3Rpb24sIGR1cGxpY2F0ZSA9IG51bGwpIHtcbiAgICBjb25zdCBmbG93ID1cbiAgICAgIGR1cGxpY2F0ZSA9PSBudWxsXG4gICAgICAgID8gdGhpcy5fY3JlYXRlRmxvd0Zyb21TY2hlbWEoKVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIC4uLmR1cGxpY2F0ZSxcbiAgICAgICAgICAgIF9pZDogbnVsbCxcbiAgICAgICAgICAgIC8vIHJlc2V0IHRoZSBpZCB0byBhdm9pZCBpc3N1ZSB3aXRoIEFNIHRoYXQgcGVyc2lzdHMgdGhlIElEXG4gICAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICAgIF9kaXJ0eTogdHJ1ZSxcbiAgICAgICAgICB9O1xuXG4gICAgY29sbGVjdGlvbi5wdXNoKGZsb3cpO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH1cblxuICBfY3JlYXRlRmxvd0Zyb21TY2hlbWEoKSB7XG4gICAgY29uc3QgbmV3RmxvdyA9IHtcbiAgICAgIG5hbWU6ICcnLFxuICAgICAgcHJlOiBbXSxcbiAgICAgIHBvc3Q6IFtdLFxuICAgICAgX2RpcnR5OiB0cnVlLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5faW5zdGFudGlhdGUodGhpcy5mbG93U2NoZW1hLnByb3BlcnRpZXMsIG5ld0Zsb3cpO1xuICB9XG5cbiAgX2luc3RhbnRpYXRlKHByb3BlcnRpZXNEZWZpbml0aW9uLCBpbml0aWF0b3IgPSB7fSkge1xuICAgIGNvbnN0IHByb3BlcnR5ID0geyAuLi5pbml0aWF0b3IgfTtcblxuICAgIGlmIChwcm9wZXJ0aWVzRGVmaW5pdGlvbikge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocHJvcGVydGllc0RlZmluaXRpb24pKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcHJvcGVydGllc0RlZmluaXRpb25ba2V5XTtcblxuICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBwcm9wZXJ0eVtrZXldID0gdGhpcy5faW5zdGFudGlhdGUoZW50cnkucHJvcGVydGllcywgKGluaXRpYXRvciA9IHt9KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5LmRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHByb3BlcnR5W2tleV0gPSBlbnRyeS5kZWZhdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcHJvcGVydHlba2V5XSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9XG5cbiAgX2RlbGV0ZUZsb3coY29sbGVjdGlvbiwgZmxvdykge1xuICAgIGNvbnN0IGluZGV4ID0gY29sbGVjdGlvbi5pbmRleE9mKGZsb3cpO1xuICAgIGNvbGxlY3Rpb24uc3BsaWNlKGluZGV4LCAxKTtcbiAgICBjb25zdCBzZWxlY3RlZEZsb3dzID0gdGhpcy5zZWxlY3RlZEZsb3dzSWQuZmlsdGVyKChmbG93SWQpID0+IGZsb3dJZCAhPT0gZmxvdy5faWQpO1xuICAgIGlmIChzZWxlY3RlZEZsb3dzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhzZWxlY3RlZEZsb3dzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0Rmlyc3RGbG93KHRydWUpO1xuICAgIH1cbiAgICB0aGlzLl9jaGFuZ2VUYWIoJ2Rlc2lnbicpO1xuICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgX2ZpbmRGbG93SW5kZXgobGlzdCwgaWQpIHtcbiAgICBsZXQgaW5kZXggPSBudWxsO1xuICAgIGxpc3QuZmluZCgoZiwgaSkgPT4ge1xuICAgICAgaWYgKGYuX2lkID09PSBpZCkge1xuICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGFzeW5jIF9vblJlb3JkZXJGbG93cyh7IGRldGFpbDogeyBwbGFuIH0gfSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9hc2tUb1ZhbGlkYXRlRm9ybXMoKTtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gICAgICBpZiAocGxhbiAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG5ld09yZGVyID0gdGhpcy5fZ2VuZXJhdGVQbGFuRmxvd3NJZChwbGFuLCB0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGbG93c0lkKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbG93c0lkLm1hcCgoZmxvd0lkKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZmluZEZsb3dJbmRleChwbGFuLmZsb3dzLCBmbG93SWQpO1xuICAgICAgICAgICAgICByZXR1cm4gaW5kZXggIT0gbnVsbCA/IG5ld09yZGVyW2luZGV4XS5faWQgOiBmbG93SWQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHBsYW4uZmxvd3MgPSBuZXdPcmRlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld09yZGVyID0gdGhpcy5fZ2VuZXJhdGVGbG93c0lkKHRoaXMuX2RlZmluaXRpb24uZmxvd3MsIHRydWUpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZsb3dzSWQpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZsb3dzSWQubWFwKChmbG93SWQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9maW5kRmxvd0luZGV4KHRoaXMuX2RlZmluaXRpb24uZmxvd3MsIGZsb3dJZCk7XG4gICAgICAgICAgICAgIHJldHVybiBpbmRleCAhPSBudWxsID8gbmV3T3JkZXJbaW5kZXhdLl9pZCA6IGZsb3dJZDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGVmaW5pdGlvbi5mbG93cyA9IG5ld09yZGVyO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIF9vblNlYXJjaFBvbGljeSh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5fc2VhcmNoUG9saWN5UXVlcnkgPSBkZXRhaWw7XG4gIH1cblxuICBfb25DbGVhclBvbGljeSgpIHtcbiAgICB0aGlzLl9zZWFyY2hQb2xpY3lRdWVyeSA9IG51bGw7XG4gIH1cblxuICBfb25TZWFyY2hGbG93cyh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5fc2VhcmNoRmxvd1F1ZXJ5ID0gZGV0YWlsO1xuICB9XG5cbiAgX29uQ2xlYXJGbG93cygpIHtcbiAgICB0aGlzLl9zZWFyY2hGbG93UXVlcnkgPSBudWxsO1xuICB9XG5cbiAgYXN5bmMgX29uUmVzZXRBbGwoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Nsb3NlRmxvd1N0ZXBGb3JtKCk7XG4gICAgICB0aGlzLmRlZmluaXRpb24gPSBkZWVwQ2xvbmUodGhpcy5faW5pdGlhbERlZmluaXRpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIF9maWx0ZXJOb3RWYWxpZFN0ZXAoc3RlcCkge1xuICAgIHJldHVybiBzdGVwLl9uZXcgIT09IHRydWU7XG4gIH1cblxuICBfcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMobykge1xuICAgIGNvbnN0IGNvcHkgPSB7IC4uLm8gfTtcbiAgICBPYmplY3Qua2V5cyhvKVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkuc3RhcnRzV2l0aCgnXycpKVxuICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBkZWxldGUgY29weVtrZXldO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIGNvcHk7XG4gIH1cblxuICBfc3VibWl0T3JDb25maXJtRm9ybXMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3Ytc2NoZW1hLWZvcm0nKV1cbiAgICAgIC5maWx0ZXIoKGZvcm0pID0+IHtcbiAgICAgICAgY29uc3QgaXNWYWxpZCA9IGZvcm0uaXNWYWxpZCgpO1xuICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgIGZvcm0uc3VibWl0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9ybS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFpc1ZhbGlkO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKGZvcm0pID0+IGZvcm0uY29uZmlybSgpKTtcbiAgfVxuXG4gIGdldFByb3BlcnRpZXNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZ3YtcHJvcGVydGllcycpO1xuICB9XG5cbiAgYXN5bmMgX2NoZWNrQ3VycmVudEZsb3dTdGVwKCkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50Rmxvd1N0ZXAgJiYgdGhpcy5zZWxlY3RlZEZsb3dzSWQpIHtcbiAgICAgIGNvbnN0IGNsb3NlUHJvbWlzZXMgPSB0aGlzLnNlbGVjdGVkRmxvd3NJZFxuICAgICAgICAubWFwKChmbG93SWQpID0+IHtcbiAgICAgICAgICBjb25zdCBmbG93ID0gdGhpcy5fZmluZEZsb3dCeUlkKGZsb3dJZCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudFN0ZXAgPSBbLi4uZmxvdy5wcmUsIC4uLmZsb3cucG9zdF0uZmluZCgoc3RlcCkgPT4gc3RlcC5faWQgPT09IHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLl9pZCk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRTdGVwID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9zZUZsb3dTdGVwRm9ybSh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKHApID0+IHAgIT09IG51bGwpO1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBzYXZlZCgpIHtcbiAgICBpZiAodGhpcy5pc0RpcnR5KSB7XG4gICAgICB0aGlzLl9pbml0aWFsRGVmaW5pdGlvbiA9IGRlZXBDbG9uZSh0aGlzLl9kZWZpbml0aW9uU2F2ZWQpO1xuICAgICAgdGhpcy5fZGVmaW5pdGlvbiA9IGRlZXBDbG9uZSh0aGlzLl9kZWZpbml0aW9uU2F2ZWQpO1xuICAgICAgdGhpcy5fZGVmaW5pdGlvblNhdmVkID0gbnVsbDtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hlY2tDdXJyZW50Rmxvd1N0ZXAoKTtcbiAgICAgIHRoaXMuZGVmaW5lZFBsYW5zLmZvckVhY2goKHBsYW4pID0+IHtcbiAgICAgICAgcGxhbi5mbG93cy5mb3JFYWNoKChmbG93KSA9PiAoZmxvdy5fZGlydHkgPSBmYWxzZSkpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRlZmluZWRGbG93cy5mb3JFYWNoKChmbG93KSA9PiAoZmxvdy5fZGlydHkgPSBmYWxzZSkpO1xuICAgICAgdGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2goKGUpID0+IGUucmVxdWVzdFVwZGF0ZSgpKTtcbiAgICB9XG4gIH1cblxuICBfYnVpbGREZWZpbml0aW9uVG9TYXZlKCkge1xuICAgIC8vIENvcHkgZGVmaW5pdGlvbiBhbmQgcmVtb3ZlIGludmFsaWQgc3RlcFxuICAgIC8vIEtlZXAgcHJpdmF0ZSBwcm9wZXJ0aWVzIGxpa2UgX2lkIGFuZCBvdGhlcnMgc3R1ZmYgdXNlZnVsIGZvciByZW5kZXJcbiAgICBjb25zdCBmbG93cyA9IHRoaXMuX2RlZmluaXRpb24uZmxvd3MubWFwKChmbG93KSA9PiB7XG4gICAgICBmbG93LnByZSA9IGZsb3cucHJlLmZpbHRlcih0aGlzLl9maWx0ZXJOb3RWYWxpZFN0ZXApO1xuICAgICAgZmxvdy5wb3N0ID0gZmxvdy5wb3N0LmZpbHRlcih0aGlzLl9maWx0ZXJOb3RWYWxpZFN0ZXApO1xuICAgICAgcmV0dXJuIGZsb3c7XG4gICAgfSk7XG5cbiAgICBsZXQgZGVmaW5pdGlvbiA9IHsgLi4udGhpcy5fZGVmaW5pdGlvbiwgZmxvd3MgfTtcblxuICAgIGlmICh0aGlzLl9kZWZpbml0aW9uLnBsYW5zICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHBsYW5zID0gdGhpcy5fZGVmaW5pdGlvbi5wbGFucy5tYXAoKHBsYW4pID0+IHtcbiAgICAgICAgY29uc3QgZmxvd3MgPSBwbGFuLmZsb3dzLm1hcCgoZmxvdykgPT4ge1xuICAgICAgICAgIGZsb3cucHJlID0gZmxvdy5wcmUuZmlsdGVyKHRoaXMuX2ZpbHRlck5vdFZhbGlkU3RlcCk7XG4gICAgICAgICAgZmxvdy5wb3N0ID0gZmxvdy5wb3N0LmZpbHRlcih0aGlzLl9maWx0ZXJOb3RWYWxpZFN0ZXApO1xuICAgICAgICAgIHJldHVybiBmbG93O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgLi4ucGxhbiwgZmxvd3MgfTtcbiAgICAgIH0pO1xuICAgICAgZGVmaW5pdGlvbiA9IHsgLi4uZGVmaW5pdGlvbiwgcGxhbnMgfTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBfYnVpbGREZWZpbml0aW9uVG9TZW5kKGRlZmluaXRpb25Ub1NhdmUpIHtcbiAgICAvLyBDb3B5IGRlZmluaXRpb24gYW5kIHJlbW92ZSBhbGwgcHJpdmF0ZSBwcm9wZXJ0aWVzXG4gICAgY29uc3QgZmxvd3MgPSBkZWZpbml0aW9uVG9TYXZlLmZsb3dzLm1hcCgoZikgPT4ge1xuICAgICAgY29uc3QgZmxvdyA9IHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKGYpO1xuICAgICAgZmxvdy5wcmUgPSBmbG93LnByZS5tYXAodGhpcy5fcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMpO1xuICAgICAgZmxvdy5wb3N0ID0gZmxvdy5wb3N0Lm1hcCh0aGlzLl9yZW1vdmVQcml2YXRlUHJvcGVydGllcyk7XG4gICAgICByZXR1cm4gZmxvdztcbiAgICB9KTtcblxuICAgIGxldCBkZWZpbml0aW9uID0geyAuLi50aGlzLl9kZWZpbml0aW9uLCBmbG93cyB9O1xuICAgIGlmICh0aGlzLl9kZWZpbml0aW9uLnBsYW5zICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHBsYW5zID0gZGVmaW5pdGlvblRvU2F2ZS5wbGFucy5tYXAoKHBsYW4pID0+IHtcbiAgICAgICAgY29uc3QgZmxvd3MgPSBwbGFuLmZsb3dzLm1hcCgoZikgPT4ge1xuICAgICAgICAgIGNvbnN0IGZsb3cgPSB0aGlzLl9yZW1vdmVQcml2YXRlUHJvcGVydGllcyhmKTtcbiAgICAgICAgICBmbG93LnByZSA9IGZsb3cucHJlLm1hcCh0aGlzLl9yZW1vdmVQcml2YXRlUHJvcGVydGllcyk7XG4gICAgICAgICAgZmxvdy5wb3N0ID0gZmxvdy5wb3N0Lm1hcCh0aGlzLl9yZW1vdmVQcml2YXRlUHJvcGVydGllcyk7XG4gICAgICAgICAgcmV0dXJuIGZsb3c7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyAuLi5wbGFuLCBmbG93cyB9O1xuICAgICAgfSk7XG4gICAgICBkZWZpbml0aW9uID0geyAuLi5kZWZpbml0aW9uLCBwbGFucyB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kZWZpbml0aW9uLnByb3BlcnRpZXMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuX2RlZmluaXRpb24ucHJvcGVydGllcy5tYXAodGhpcy5fcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMpO1xuICAgICAgZGVmaW5pdGlvbiA9IHsgLi4uZGVmaW5pdGlvbiwgcHJvcGVydGllcyB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kZWZpbml0aW9uLnJlc291cmNlcyAhPSBudWxsKSB7XG4gICAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLl9kZWZpbml0aW9uLnJlc291cmNlcy5tYXAodGhpcy5fcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMpO1xuICAgICAgZGVmaW5pdGlvbiA9IHsgLi4uZGVmaW5pdGlvbiwgcmVzb3VyY2VzIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBfb25TYXZlQWxsKCkge1xuICAgIGlmICh0aGlzLmhhc1Byb3BlcnRpZXMpIHtcbiAgICAgIHRoaXMuZ2V0UHJvcGVydGllc0VsZW1lbnQoKS5zdWJtaXQoKTtcbiAgICB9XG5cbiAgICBQcm9taXNlLmFsbCh0aGlzLl9zdWJtaXRPckNvbmZpcm1Gb3JtcygpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9kZWZpbml0aW9uU2F2ZWQgPSB0aGlzLl9idWlsZERlZmluaXRpb25Ub1NhdmUoKTtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuX2J1aWxkRGVmaW5pdGlvblRvU2VuZCh0aGlzLl9kZWZpbml0aW9uU2F2ZWQpO1xuICAgICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdzYXZlJywgeyBkZWZpbml0aW9uLCBzZXJ2aWNlczogdGhpcy5zZXJ2aWNlcyB9KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbcG9saWN5LXN0dWRpb10gRXJyb3Igb24gc2F2ZWAsIGVycik7XG4gICAgICB9KTtcbiAgfVxuXG4gIF9vbkRlYnVnKHJlcXVlc3RFdmVudCkge1xuICAgIGlmICh0aGlzLmhhc1Byb3BlcnRpZXMpIHtcbiAgICAgIHRoaXMuZ2V0UHJvcGVydGllc0VsZW1lbnQoKS5zdWJtaXQoKTtcbiAgICB9XG5cbiAgICBQcm9taXNlLmFsbCh0aGlzLl9zdWJtaXRPckNvbmZpcm1Gb3JtcygpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gdGhpcy5fYnVpbGREZWZpbml0aW9uVG9TZW5kKHRoaXMuX2J1aWxkRGVmaW5pdGlvblRvU2F2ZSgpKTtcbiAgICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZGVidWcnLCB7IGRlZmluaXRpb24sIHNlcnZpY2VzOiB0aGlzLnNlcnZpY2VzLCByZXF1ZXN0OiByZXF1ZXN0RXZlbnQuZGV0YWlsLnJlcXVlc3QgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW3BvbGljeS1zdHVkaW9dIEVycm9yIG9uIGRlYnVnYCwgZXJyKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkRmxvd3MoKSB7XG4gICAgaWYgKHRoaXMuX2Zsb3dGaWx0ZXIubGVuZ3RoID09PSAwIHx8IHRoaXMuX2Zsb3dGaWx0ZXIuaW5jbHVkZXMoJ2FwaScpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZpbmVkRmxvd3M7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkUGxhbnMoKSB7XG4gICAgaWYgKHRoaXMuX2Zsb3dGaWx0ZXIubGVuZ3RoID09PSAwIHx8IHRoaXMuX2Zsb3dGaWx0ZXIuaW5jbHVkZXMoJ3BsYW4nKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmaW5lZFBsYW5zO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIF9vbkZpbHRlckZsb3dzKHsgZGV0YWlsIH0pIHtcbiAgICBpZiAodGhpcy5fZmxvd0ZpbHRlci5pbmNsdWRlcyhkZXRhaWwuaWQpKSB7XG4gICAgICB0aGlzLl9mbG93RmlsdGVyID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2Zsb3dGaWx0ZXIgPSBbZGV0YWlsLmlkXTtcbiAgICB9XG4gIH1cblxuICBfZ2V0RmlsdGVyZWRQb2xpY2llcygpIHtcbiAgICBpZiAodGhpcy5fcG9saWN5RmlsdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnBvbGljaWVzLmZpbHRlcigocG9saWN5KSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKHBvbGljeS5vblJlcXVlc3QgJiYgdGhpcy5fcG9saWN5RmlsdGVyLmluY2x1ZGVzKCdvblJlcXVlc3QnKSkgfHwgKHBvbGljeS5vblJlc3BvbnNlICYmIHRoaXMuX3BvbGljeUZpbHRlci5pbmNsdWRlcygnb25SZXNwb25zZScpKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnBvbGljaWVzO1xuICB9XG5cbiAgX29uRmlsdGVyUG9saWNpZXMoeyBkZXRhaWwgfSkge1xuICAgIGlmICh0aGlzLl9wb2xpY3lGaWx0ZXIuaW5jbHVkZXMoZGV0YWlsLmlkKSkge1xuICAgICAgdGhpcy5fcG9saWN5RmlsdGVyID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3BvbGljeUZpbHRlciA9IFtkZXRhaWwuaWRdO1xuICAgIH1cbiAgfVxuXG4gIF9yZW5kZXJEZXNpZ24ocmVhZG9ubHlNb2RlKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxkaXYgaWQ9XCJkZXNpZ25cIiBzbG90PVwiY29udGVudFwiIGNsYXNzPVwiZGVzaWduXCI+XG4gICAgICA8Z3YtcmVzaXphYmxlLXZpZXdzIG5vLW92ZXJmbG93PlxuICAgICAgICA8ZGl2IHNsb3Q9XCJ0b3BcIj4ke3RoaXMuX3JlbmRlckZsb3coMCwgdHJ1ZSwgcmVhZG9ubHlNb2RlKX08L2Rpdj5cblxuICAgICAgICA8ZGl2IHNsb3Q9XCJib3R0b21cIj5cbiAgICAgICAgICAke3RoaXMuX3JlbmRlckZsb3coMSwgZmFsc2UsIHJlYWRvbmx5TW9kZSl9ICR7dGhpcy5fcmVuZGVyUG9saWN5KHJlYWRvbmx5TW9kZSl9ICR7dGhpcy5fcmVuZGVyRmxvd0Zvcm0ocmVhZG9ubHlNb2RlKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2d2LXJlc2l6YWJsZS12aWV3cz5cbiAgICAgICR7cmVhZG9ubHlNb2RlICE9PSB0cnVlXG4gICAgICAgID8gaHRtbGA8Z3YtcG9saWN5LXN0dWRpby1tZW51XG4gICAgICAgICAgICBjbGFzcz1cInJpZ2h0LW1lbnVcIlxuICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgICAgICAucG9saWNpZXM9XCIke3RoaXMuX2dldEZpbHRlcmVkUG9saWNpZXMoKX1cIlxuICAgICAgICAgICAgLnNlbGVjdGVkSWRzPVwiJHtbdGhpcy5fY3VycmVudFBvbGljeUlkXX1cIlxuICAgICAgICAgICAgLnF1ZXJ5PVwiJHt0aGlzLl9zZWFyY2hQb2xpY3lRdWVyeX1cIlxuICAgICAgICAgICAgP2hhcy1wb2xpY3ktZmlsdGVyPVwiJHt0aGlzLl9wb2xpY3lGaWx0ZXJPcHRpb25zICE9IG51bGx9XCJcbiAgICAgICAgICAgID9yZWFkb25seT1cIiR7cmVhZG9ubHlNb2RlfVwiXG4gICAgICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OnRhcmdldC1wb2xpY3k9XCIke3RoaXMuX29uVGFyZ2V0UG9saWN5fVwiXG4gICAgICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OmZldGNoLWRvY3VtZW50YXRpb249XCIke3RoaXMuX29uT3BlbkRvY3VtZW50YXRpb25Gcm9tTWVudX1cIlxuICAgICAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTpkcmFnZW5kLXBvbGljeT1cIiR7dGhpcy5fb25EcmFnRW5kUG9saWN5fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBzbG90PVwiaGVhZGVyXCIgY2xhc3M9XCJzZWFyY2gtcG9saWNpZXNcIj5cbiAgICAgICAgICAgICAgJHt0aGlzLl9wb2xpY3lGaWx0ZXJPcHRpb25zICE9IG51bGxcbiAgICAgICAgICAgICAgICA/IGh0bWxgPGd2LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgICAgICAgICAgICAgLm9wdGlvbnM9XCIke3RoaXMuX3BvbGljeUZpbHRlck9wdGlvbnN9XCJcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgLnZhbHVlPVwiJHt0aGlzLl9wb2xpY3lGaWx0ZXJ9XCJcbiAgICAgICAgICAgICAgICAgICAgc21hbGxcbiAgICAgICAgICAgICAgICAgICAgQGd2LW9wdGlvbjpzZWxlY3Q9XCIke3RoaXMuX29uRmlsdGVyUG9saWNpZXN9XCJcbiAgICAgICAgICAgICAgICAgID48L2d2LW9wdGlvbj5gXG4gICAgICAgICAgICAgICAgOiAnJ31cbiAgICAgICAgICAgICAgPGd2LWlucHV0XG4gICAgICAgICAgICAgICAgaWQ9XCJzZWFyY2gtcG9saWN5XCJcbiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBwb2xpY2llcyAoU2hpZnQgKyBDdHJsICsgU3BhY2UpXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgIEBndi1pbnB1dDppbnB1dD1cIiR7dGhpcy5fb25TZWFyY2hQb2xpY3l9XCJcbiAgICAgICAgICAgICAgICBAZ3YtaW5wdXQ6Y2xlYXI9XCIke3RoaXMuX29uQ2xlYXJQb2xpY3l9XCJcbiAgICAgICAgICAgICAgPjwvZ3YtaW5wdXQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2d2LXBvbGljeS1zdHVkaW8tbWVudT5gXG4gICAgICAgIDogJyd9XG4gICAgPC9kaXY+YDtcbiAgfVxuXG4gIF9yZW5kZXJEZWJ1ZygpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuZGVidWdSZXNwb25zZSA/IHRoaXMuZGVidWdSZXNwb25zZS5yZXNwb25zZSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc0xvYWRpbmcgPSB0aGlzLmRlYnVnUmVzcG9uc2UgPyB0aGlzLmRlYnVnUmVzcG9uc2UuaXNMb2FkaW5nIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmRlYnVnUmVzcG9uc2UgJiYgdGhpcy5kZWJ1Z1Jlc3BvbnNlLnJlcXVlc3QgPyB0aGlzLmRlYnVnUmVzcG9uc2UucmVxdWVzdC5wYXRoIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMuZGVidWdSZXNwb25zZSAmJiB0aGlzLmRlYnVnUmVzcG9uc2UucmVxdWVzdCA/IHRoaXMuZGVidWdSZXNwb25zZS5yZXF1ZXN0Lm1ldGhvZCA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gaHRtbGA8Z3YtaHR0cC1jbGllbnRcbiAgICAgIGlkPVwiZGVidWdcIlxuICAgICAgc2xvdD1cImNvbnRlbnRcIlxuICAgICAgY2xhc3M9XCJkZWJ1Z1wiXG4gICAgICBAZ3YtaHR0cC1jbGllbnQ6c2VuZD1cIiR7dGhpcy5fb25EZWJ1Z31cIlxuICAgICAgLnJlc3BvbnNlPVwiJHtyZXNwb25zZX1cIlxuICAgICAgLnBhdGg9XCIke3BhdGh9XCJcbiAgICAgIC5tZXRob2Q9XCIke21ldGhvZH1cIlxuICAgICAgP2xvYWRpbmc9XCIke2lzTG9hZGluZ31cIlxuICAgID5cbiAgICA8L2d2LWh0dHAtY2xpZW50PmA7XG4gIH1cblxuICBfcmVuZGVyQ29uZmlndXJhdGlvbkZvcm0ocmVhZG9ubHlNb2RlKSB7XG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvblNjaGVtYSkge1xuICAgICAgY29uc3QgdmFsdWVzID0gZGVlcENsb25lKHRoaXMuX2RlZmluaXRpb24pO1xuICAgICAgcmV0dXJuIGh0bWxgIDxkaXYgaWQ9XCJzZXR0aW5nc1wiIHNsb3Q9XCJjb250ZW50XCIgY2xhc3M9XCJhcGktc2V0dGluZ3NcIiBAZHJhZ292ZXI9XCIke3RoaXMuX29uRGVzaWdufVwiPlxuICAgICAgICA8Z3Ytc2NoZW1hLWZvcm1cbiAgICAgICAgICAuc2NoZW1hPVwiJHt0aGlzLmNvbmZpZ3VyYXRpb25TY2hlbWF9XCJcbiAgICAgICAgICBpZD1cImFwaS1zZXR0aW5ncy1mb3JtXCJcbiAgICAgICAgICAudmFsdWVzPVwiJHt2YWx1ZXN9XCJcbiAgICAgICAgICBoYXMtaGVhZGVyXG4gICAgICAgICAgaGFzLWZvb3RlclxuICAgICAgICAgIHNjcm9sbGFibGVcbiAgICAgICAgICA/cmVhZG9ubHk9XCIke3JlYWRvbmx5TW9kZX1cIlxuICAgICAgICAgIEBndi1zY2hlbWEtZm9ybTpjYW5jZWw9XCIke3RoaXMuX29uQ2FuY2VsRmxvd01vZGV9XCJcbiAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06c3VibWl0PVwiJHt0aGlzLl9vblN1Ym1pdEZsb3dNb2RlfVwiXG4gICAgICAgID5cbiAgICAgICAgICAkeyF0aGlzLmNvbmZpZ3VyYXRpb25JbmZvcm1hdGlvblxuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiBodG1sYFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcGktc2V0dGluZ3MtaW5mb3JtYXRpb25cIiBzbG90PVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxndi1pY29uIGNsYXNzPVwiYXBpLXNldHRpbmdzLWluZm9ybWF0aW9uX19pY29uXCIgdGl0bGU9XCJJbmZvXCIgc2hhcGU9XCJjb2RlOmluZm9cIj48L2d2LWljb24+XG4gICAgICAgICAgICAgICAgICA8YmxvY2txdW90ZSBjbGFzcz1cImFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvbl9fYmxvY2txdW90ZVwiPiR7dGhpcy5jb25maWd1cmF0aW9uSW5mb3JtYXRpb259PC9ibG9ja3F1b3RlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBgfVxuICAgICAgICA8L2d2LXNjaGVtYS1mb3JtPlxuICAgICAgPC9kaXY+YDtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgYDtcbiAgfVxuXG4gIF9yZW5kZXJGbG93Rm9ybShyZWFkb25seU1vZGUpIHtcbiAgICBpZiAodGhpcy5mbG93U2NoZW1hICYmIHRoaXMuX2Zsb3dTdGVwU2NoZW1hID09IG51bGwgJiYgdGhpcy5kb2N1bWVudGF0aW9uID09IG51bGwgJiYgdGhpcy5zZWxlY3RlZEZsb3dzSWQubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBmbG93ID0gdGhpcy5nZXRTZWxlY3RlZEZsb3coKTtcbiAgICAgIGlmIChmbG93KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGRlZXBDbG9uZShmbG93KTtcbiAgICAgICAgcmV0dXJuIGh0bWxgPGRpdiBzbG90PVwiY29udGVudFwiIGNsYXNzPVwiZmxvdy1zZXR0aW5nc1wiPlxuICAgICAgICAgIDxndi1zY2hlbWEtZm9ybVxuICAgICAgICAgICAgLnNjaGVtYT1cIiR7dGhpcy5mbG93U2NoZW1hfVwiXG4gICAgICAgICAgICBpZD1cInNldHRpbmdzLWZvcm1cIlxuICAgICAgICAgICAgLnZhbHVlcz1cIiR7dmFsdWVzfVwiXG4gICAgICAgICAgICBoYXMtaGVhZGVyXG4gICAgICAgICAgICBzY3JvbGxhYmxlXG4gICAgICAgICAgICA/cmVhZG9ubHk9XCIke3JlYWRvbmx5TW9kZX1cIlxuICAgICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOmNhbmNlbD1cIiR7dGhpcy5fb25DYW5jZWxGbG93fVwiXG4gICAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06c3VibWl0PVwiJHt0aGlzLl9vblN1Ym1pdEZsb3d9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IHNsb3Q9XCJ0aXRsZVwiIGNsYXNzPVwiZmxvdy1zdGVwX19mb3JtLXRpdGxlXCI+RmxvdyBjb25maWd1cmF0aW9uPC9kaXY+XG4gICAgICAgICAgPC9ndi1zY2hlbWEtZm9ybT5cbiAgICAgICAgPC9kaXY+YDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfb25SZXNvdXJjZXNDaGFuZ2UoeyBkZXRhaWwgfSkge1xuICAgIHRoaXMuZGVmaW5pdGlvbi5yZXNvdXJjZXMgPSBkZXRhaWwucmVzb3VyY2VzO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICBfb25Qcm9wZXJ0aWVzQ2hhbmdlKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLmRlZmluaXRpb24ucHJvcGVydGllcyA9IGRldGFpbC5wcm9wZXJ0aWVzO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICBfb25TYXZlUHJvdmlkZXIoeyBkZXRhaWwgfSkge1xuICAgIHRoaXMuc2VydmljZXNbJ2R5bmFtaWMtcHJvcGVydHknXSA9IGRldGFpbC5wcm92aWRlcjtcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgX29uU3dpdGNoRW5jcnlwdGVkUHJvcGVydHkoeyBkZXRhaWwgfSkge1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgcmVhZG9ubHlNb2RlID0gdGhpcy5fZ2V0UmVhZG9ubHlNb2RlRm9yRGVzaWduKCk7XG5cbiAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwiYm94XCI+XG4gICAgICA8Z3YtcG9saWN5LXN0dWRpby1tZW51XG4gICAgICAgIGNsYXNzPVwibGVmdC1tZW51XCJcbiAgICAgICAgLmFwaS1uYW1lPVwiJHt0aGlzLl9kZWZpbml0aW9uLm5hbWV9XCJcbiAgICAgICAgLmZsb3dzPVwiJHt0aGlzLmZpbHRlcmVkRmxvd3N9XCJcbiAgICAgICAgLnBsYW5zPVwiJHt0aGlzLmZpbHRlcmVkUGxhbnN9XCJcbiAgICAgICAgLnNlbGVjdGVkSWRzPVwiJHt0aGlzLnNlbGVjdGVkRmxvd3NJZH1cIlxuICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgP3NvcnRhYmxlPVwiJHt0aGlzLnNvcnRhYmxlICYmIHRoaXMucmVhZG9ubHkgIT09IHRydWV9XCJcbiAgICAgICAgP3JlYWRvbmx5PVwiJHt0aGlzLnJlYWRvbmx5fVwiXG4gICAgICAgID9yZWFkb25seVBsYW5zPVwiJHt0aGlzLnJlYWRvbmx5UGxhbnN9XCJcbiAgICAgICAgZmxvd3MtdGl0bGU9XCIke3RoaXMuZmxvd3NUaXRsZX1cIlxuICAgICAgICAucXVlcnk9XCIke3RoaXMuX3NlYXJjaEZsb3dRdWVyeX1cIlxuICAgICAgICA/Y2FuLWFkZD1cIiR7dGhpcy5jYW5BZGQgJiYgIXRoaXMucmVhZG9ubHl9XCJcbiAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTpyZW9yZGVyLWZsb3dzPVwiJHt0aGlzLl9vblJlb3JkZXJGbG93c31cIlxuICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OmNoYW5nZS1mbG93LXN0YXRlPVwiJHt0aGlzLl9vbkNoYW5nZUZsb3dTdGF0ZX1cIlxuICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OmFkZC1mbG93PVwiJHt0aGlzLl9vbkFkZEZsb3d9XCJcbiAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTphZGQtZmxvdy1wbGFuPVwiJHt0aGlzLl9vbkFkZEZsb3dQbGFufVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6ZGVsZXRlLWZsb3c9XCIke3RoaXMuX29uRGVsZXRlRmxvd31cIlxuICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OmR1cGxpY2F0ZS1mbG93PVwiJHt0aGlzLl9vbkR1cGxpY2F0ZUZsb3d9XCJcbiAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTpzZWxlY3QtZmxvd3M9XCIke3RoaXMuX29uU2VsZWN0Rmxvd3N9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBzbG90PVwiaGVhZGVyXCIgY2xhc3M9XCJoZWFkZXItYWN0aW9uc1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7dGhpcy5fZGVmaW5pdGlvbi5uYW1lfTwvZGl2PlxuICAgICAgICAgICR7dGhpcy5fZmxvd0ZpbHRlck9wdGlvbnMgIT0gbnVsbFxuICAgICAgICAgICAgPyBodG1sYDxndi1vcHRpb25cbiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgICAgICAgICAub3B0aW9ucz1cIiR7dGhpcy5fZmxvd0ZpbHRlck9wdGlvbnN9XCJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgIG91dGxpbmVkXG4gICAgICAgICAgICAgICAgLnZhbHVlPVwiJHt0aGlzLl9mbG93RmlsdGVyfVwiXG4gICAgICAgICAgICAgICAgc21hbGxcbiAgICAgICAgICAgICAgICBAZ3Ytb3B0aW9uOnNlbGVjdD1cIiR7dGhpcy5fb25GaWx0ZXJGbG93c31cIlxuICAgICAgICAgICAgICA+PC9ndi1vcHRpb24+YFxuICAgICAgICAgICAgOiAnJ31cbiAgICAgICAgICA8Z3YtaW5wdXRcbiAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgaWQ9XCJzZWFyY2gtZmxvd1wiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBmbG93cyAoQ3RybCArIFNwYWNlKVwiXG4gICAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICBAZ3YtaW5wdXQ6aW5wdXQ9XCIke3RoaXMuX29uU2VhcmNoRmxvd3N9XCJcbiAgICAgICAgICAgIEBndi1pbnB1dDpjbGVhcj1cIiR7dGhpcy5fb25DbGVhckZsb3dzfVwiXG4gICAgICAgICAgPjwvZ3YtaW5wdXQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgICR7dGhpcy5yZWFkb25seSAhPT0gdHJ1ZVxuICAgICAgICAgID8gaHRtbGAgPGRpdiBzbG90PVwiZm9vdGVyXCIgY2xhc3M9XCJmb290ZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8Z3YtYnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tbGFyZ2VcIlxuICAgICAgICAgICAgICAgIC5kaXNhYmxlZD1cIiR7IXRoaXMuaXNEaXJ0eSB8fCB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgICAgICAgICAgQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25TYXZlQWxsfVwiXG4gICAgICAgICAgICAgICAgPlNhdmU8L2d2LWJ1dHRvblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxndi1idXR0b24gbGluayAuZGlzYWJsZWQ9XCIkeyF0aGlzLmlzRGlydHkgfHwgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIiBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vblJlc2V0QWxsfVwiXG4gICAgICAgICAgICAgICAgPlJlc2V0PC9ndi1idXR0b25cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9kaXY+YFxuICAgICAgICAgIDogJyd9XG4gICAgICA8L2d2LXBvbGljeS1zdHVkaW8tbWVudT5cblxuICAgICAgPGd2LXRhYnNcbiAgICAgICAgLnZhbHVlPVwiJHt0aGlzLnRhYklkfVwiXG4gICAgICAgIC5vcHRpb25zPVwiJHt0aGlzLl90YWJzfVwiXG4gICAgICAgIC5kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICBAZ3YtdGFiczpjaGFuZ2U9XCIke3RoaXMuX29uQ2hhbmdlVGFifVwiXG4gICAgICAgIC52YWxpZGF0b3I9XCIke3RoaXMuX2NoYW5nZVRhYlZhbGlkYXRvci5iaW5kKHRoaXMpfVwiXG4gICAgICA+XG4gICAgICAgICR7dGhpcy5fcmVuZGVyRGVzaWduKHJlYWRvbmx5TW9kZSl9ICR7dGhpcy5fcmVuZGVyQ29uZmlndXJhdGlvbkZvcm0ocmVhZG9ubHlNb2RlKX0gJHt0aGlzLl9yZW5kZXJEZWJ1ZygpfVxuICAgICAgICA8Z3YtcHJvcGVydGllc1xuICAgICAgICAgIGlkPVwicHJvcGVydGllc1wiXG4gICAgICAgICAgc2xvdD1cImNvbnRlbnRcIlxuICAgICAgICAgIGNsYXNzPVwicHJvcGVydGllc1wiXG4gICAgICAgICAgLnByb3ZpZGVyPVwiJHt0aGlzLnNlcnZpY2VzWydkeW5hbWljLXByb3BlcnR5J119XCJcbiAgICAgICAgICBAZ3YtcHJvcGVydGllczpjaGFuZ2U9XCIke3RoaXMuX29uUHJvcGVydGllc0NoYW5nZX1cIlxuICAgICAgICAgIEBndi1wcm9wZXJ0aWVzOnNhdmUtcHJvdmlkZXI9XCIke3RoaXMuX29uU2F2ZVByb3ZpZGVyfVwiXG4gICAgICAgICAgQGd2LXByb3BlcnRpZXM6c3dpdGNoLWVuY3J5cHRlZD1cIiR7dGhpcy5fb25Td2l0Y2hFbmNyeXB0ZWRQcm9wZXJ0eX1cIlxuICAgICAgICAgID9yZWFkb25seT1cIiR7cmVhZG9ubHlNb2RlfVwiXG4gICAgICAgICAgZW5jcnlwdGFibGU9XCJ0cnVlXCJcbiAgICAgICAgICAucHJvcGVydGllcz1cIiR7dGhpcy5kZWZpbmVkUHJvcGVydGllc31cIlxuICAgICAgICAgIC5wcm92aWRlcnM9XCIke3RoaXMucHJvcGVydHlQcm92aWRlcnN9XCJcbiAgICAgICAgICAuZHluYW1pY1Byb3BlcnR5U2NoZW1hPVwiJHt0aGlzLmR5bmFtaWNQcm9wZXJ0eVNjaGVtYX1cIlxuICAgICAgICA+PC9ndi1wcm9wZXJ0aWVzPlxuICAgICAgICA8Z3YtcmVzb3VyY2VzXG4gICAgICAgICAgaWQ9XCJyZXNvdXJjZXNcIlxuICAgICAgICAgIHNsb3Q9XCJjb250ZW50XCJcbiAgICAgICAgICBjbGFzcz1cInJlc291cmNlc1wiXG4gICAgICAgICAgQGd2LXJlc291cmNlczpjaGFuZ2U9XCIke3RoaXMuX29uUmVzb3VyY2VzQ2hhbmdlfVwiXG4gICAgICAgICAgP3JlYWRvbmx5PVwiJHtyZWFkb25seU1vZGV9XCJcbiAgICAgICAgICAucmVzb3VyY2VzPVwiJHt0aGlzLmRlZmluZWRSZXNvdXJjZXN9XCJcbiAgICAgICAgICAudHlwZXM9XCIke3RoaXMucmVzb3VyY2VUeXBlc31cIlxuICAgICAgICA+PC9ndi1yZXNvdXJjZXM+XG4gICAgICA8L2d2LXRhYnM+XG4gICAgPC9kaXY+YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGRlc2lnbiB2aWV3IHNob3VsZCBiZSBpbiByZWFkb25seSBtb2RlIG9yIG5vdFxuICAgKiBJdCBpcyBpbiByZWFkb25seSBtb2RlIGlmOlxuICAgKiAgdGhlIHJlYWRvbmx5IGF0dHJpYnV0ZSBpcyBzZXQgdG8gdHJ1ZVxuICAgKiAgT1JcbiAgICogIHRoZSBtYWluIHNlbGVjdGVkIGZsb3cgYmVsb25ncyB0byBhIHBsYW4gYW5kIHRoZSByZWFkb25seS1wbGFucyBhdHRyaWJ1dGUgaXMgc2V0IHRvIHRydWVcbiAgICogIE9SXG4gICAqICB0aGUgc2Vjb25kIGZsb3cgZm9yIGNvbXBhcmlzb24gYmVsb25ncyB0byBhIHBsYW4gYW5kIHRoZSByZWFkb25seS1wbGFucyBhdHRyaWJ1dGUgaXMgc2V0IHRvIHRydWVcbiAgICogQHJldHVybnMge2Jvb2xlYW58Knx7dHlwZTogQm9vbGVhbkNvbnN0cnVjdG9yfXx7YXR0cmlidXRlOiBzdHJpbmcsIHR5cGU6IEJvb2xlYW5Db25zdHJ1Y3Rvcn18e3R5cGU6ICp9fHthdHRyaWJ1dGU6IHN0cmluZywgdHlwZTogKn19XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0UmVhZG9ubHlNb2RlRm9yRGVzaWduKCkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBmbG93ID0gdGhpcy5nZXRTZWxlY3RlZEZsb3coMCk7XG4gICAgaWYgKCFmbG93KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgeyBwbGFuOiBmbG93UGxhbiB9ID0gdGhpcy5fZmluZEZsb3dDb2xsZWN0aW9uKGZsb3cuX2lkKTtcbiAgICBjb25zdCByZWFkb25seU1vZGUgPSBmbG93UGxhbiAmJiB0aGlzLnJlYWRvbmx5UGxhbnM7XG4gICAgaWYgKHJlYWRvbmx5TW9kZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGFyZWRGbG93ID0gdGhpcy5nZXRTZWxlY3RlZEZsb3coMSk7XG4gICAgaWYgKCFjb21wYXJlZEZsb3cpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBsYW46IGNvbXBhcmVkRmxvd1BsYW4gfSA9IHRoaXMuX2ZpbmRGbG93Q29sbGVjdGlvbihjb21wYXJlZEZsb3cuX2lkKTtcbiAgICByZXR1cm4gY29tcGFyZWRGbG93UGxhbiAmJiB0aGlzLnJlYWRvbmx5UGxhbnM7XG4gIH1cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZ3YtcG9saWN5LXN0dWRpbycsIEd2UG9saWN5U3R1ZGlvKTtcbiJdfQ==
1755
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL3BvbGljeS1zdHVkaW8vZ3YtcG9saWN5LXN0dWRpby5qcyJdLCJuYW1lcyI6WyJjc3MiLCJodG1sIiwiTGl0RWxlbWVudCIsIm1ldGhvZHMiLCJkaXNwYXRjaEN1c3RvbUV2ZW50IiwiZW1wdHkiLCJjYWNoZSIsImRlZXBDbG9uZSIsImRlZXBFcXVhbCIsIktleWJvYXJkRWxlbWVudCIsIktFWVMiLCJGTE9XX1NURVBfRk9STV9JRCIsIkd2UG9saWN5U3R1ZGlvIiwicHJvcGVydGllcyIsInBvbGljaWVzIiwidHlwZSIsIkFycmF5Iiwic2VydmljZXMiLCJPYmplY3QiLCJyZXNvdXJjZVR5cGVzIiwiYXR0cmlidXRlIiwicHJvcGVydHlQcm92aWRlcnMiLCJkeW5hbWljUHJvcGVydHlTY2hlbWEiLCJ0YWJJZCIsIlN0cmluZyIsIl90YWJJZCIsImRlZmluaXRpb24iLCJfZGVmaW5pdGlvbiIsImRvY3VtZW50YXRpb24iLCJmbG93U2NoZW1hIiwiY29uZmlndXJhdGlvblNjaGVtYSIsIl9jb25maWd1cmF0aW9uU2NoZW1hIiwiY29uZmlndXJhdGlvbkluZm9ybWF0aW9uIiwiaXNEaXJ0eSIsIkJvb2xlYW4iLCJyZWZsZWN0IiwiX2RyYWdQb2xpY3kiLCJfZHJvcFBvbGljeSIsInNlbGVjdGVkRmxvd3NJZCIsIl9zZWxlY3RlZEZsb3dzSWQiLCJfY3VycmVudFBvbGljeUlkIiwiX3NlYXJjaFBvbGljeVF1ZXJ5IiwiX3NlYXJjaEZsb3dRdWVyeSIsIl9mbG93U3RlcFNjaGVtYSIsIl9jdXJyZW50Rmxvd1N0ZXAiLCJfcG9saWN5RmlsdGVyIiwiX2Zsb3dGaWx0ZXIiLCJfY3VycmVudEFza0NvbmZpcm1hdGlvbiIsImhhc1Byb3BlcnRpZXMiLCJfaGFzUHJvcGVydGllcyIsImhhc1Jlc291cmNlcyIsImhhc1BvbGljeUZpbHRlciIsImZsb3dzVGl0bGUiLCJzb3J0YWJsZSIsImNhbkFkZCIsInJlYWRvbmx5IiwicmVhZG9ubHlQbGFucyIsImNhbkRlYnVnIiwiX2NhbkRlYnVnIiwiZGVidWdSZXNwb25zZSIsInN0eWxlcyIsImNvbnN0cnVjdG9yIiwiZmxvd3MiLCJfdGFicyIsImlkIiwidGl0bGUiLCJpY29uIiwidmFsdWUiLCJ0aGVuIiwicmVxdWVzdFVwZGF0ZSIsIl9mbG93RmlsdGVyT3B0aW9ucyIsImRlZmluZWRQbGFucyIsImxlbmd0aCIsIl9wb2xpY3lGaWx0ZXJPcHRpb25zIiwic3BsaWNlIiwib25LZXlib2FyZCIsImlzUHJlc3NlZCIsIlNoaWZ0IiwiQ3RybCIsIlNwYWNlIiwic2VhcmNoIiwic2hhZG93Um9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJmb2N1cyIsIkVzYyIsIl9jbG9zZUZsb3dTdGVwRm9ybSIsIl9vbkNsb3NlRG9jdW1lbnRhdGlvbiIsImluY2x1ZGVzIiwiX2dlbmVyYXRlRmxvd3NJZCIsInJlc291cmNlcyIsIl9nZW5lcmF0ZUlkIiwicGxhbnMiLCJtYXAiLCJwbGFuIiwiX2dlbmVyYXRlUGxhbkZsb3dzSWQiLCJfaW5pdGlhbERlZmluaXRpb24iLCJfc2VsZWN0Rmlyc3RGbG93IiwiaXNBcnJheSIsImZpbHRlciIsIl9maW5kRmxvd0J5SWQiLCJfdXBkYXRlU2VsZWN0ZWRGbG93cyIsImRpc3BhdGNoIiwiY2FuZGlkYXRlIiwiZGVmaW5lZEZsb3dzIiwiX2lkIiwiZmluZCIsIl9nZXRGbG93RWxlbWVudCIsImZsb3dJZCIsIl9vbkRyYWdFbmRQb2xpY3kiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImUiLCJvbkRyYWdFbmQiLCJfb25Ecm9wUG9saWN5IiwiZGV0YWlsIiwiX2Fza1RvVmFsaWRhdGVGb3JtcyIsInBvbGljeSIsInRhcmdldEZsb3ciLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJjb25maWd1cmF0aW9uIiwiX25ldyIsImZsb3dTdGVwIiwiX2dlbmVyYXRlRmxvd1N0ZXBJZCIsImZsb3dLZXkiLCJwb3NpdGlvbiIsImVuYWJsZWQiLCJzb3VyY2VGbG93Iiwic291cmNlRmxvd0lkIiwic291cmNlUG9zaXRpb24iLCJzb3VyY2VGbG93S2V5Iiwic3RlcCIsImdyb3VwIiwic2NoZW1hIiwiYnVpbGRTY2hlbWEiLCJfc2V0Q3VycmVudEZsb3dTdGVwIiwiY3VycmVudEZsb3dGb3JtIiwiX2dldEZsb3dTdGVwRm9ybSIsImRpcnR5IiwiY2FuY2VsRWRpdCIsInNldFRpbWVvdXQiLCJfZWRpdEZsb3dTdGVwIiwiZmxvdyIsInVwZGF0ZUNvbXBsZXRlIiwiZmxvd0VsZW1lbnQiLCJzZWxlY3RlZFN0ZXBJZCIsIl9kaXJ0eSIsImd2RmxvdyIsInJlbW92ZUNhbmRpZGF0ZSIsIl9vbkRlbGV0ZVBvbGljeSIsInRhcmdldCIsImVkaXRpbmciLCJfb25EZXNpZ24iLCJfY2hhbmdlVGFiIiwiX3NwbGl0TWFpblZpZXdzIiwianNvblNjaGVtYSIsIkpTT04iLCJwYXJzZSIsImN1cnJlbnRGbG93U3RlcCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJfb25PcGVuRG9jdW1lbnRhdGlvbiIsIl9tYXhpbWl6ZVRvcFZpZXciLCJfb25FZGl0Rmxvd1N0ZXAiLCJfZ2V0UmVzaXphYmxlVmlld3MiLCJtYXhpbWl6ZVRvcCIsIl9tYXhpbWl6ZUJvdHRvbVZpZXciLCJtYXhpbWl6ZUJvdHRvbSIsInNwbGl0IiwiX29uQ2hhbmdlRmxvd1N0ZXBTdGF0ZSIsIl9vbkNsb3NlRmxvd1N0ZXBGb3JtIiwiZXJyIiwiZm9yY2UiLCJQcm9taXNlIiwiYWxsIiwiX3N1Ym1pdE9yQ29uZmlybUZvcm1zIiwiZm9ybXMiLCJyIiwiX2J1aWxkRGVmaW5pdGlvblRvU2F2ZSIsImdldENoaWxkcmVuIiwiX2NoZWNrQ3VycmVudEZsb3dTdGVwIiwiRXJyb3IiLCJmbG93U3RlcFNjaGVtYSIsIl9pbml0aWFsVmFsdWVzIiwic2NvcGUiLCJfZW51bSIsImVudW0iLCJmaWx0ZXJlZCIsImRlZmF1bHQiLCJfdmFsdWVzIiwiX3JlZnJlc2giLCJjbG9zZVN0ZXBGb3JtIiwiX29uU2VsZWN0Rmxvd3MiLCJfb25PcGVuRG9jdW1lbnRhdGlvbkZyb21NZW51IiwiZ2V0U2VsZWN0ZWRGbG93IiwiX2ZldGNoRG9jdW1lbnRhdGlvbiIsIl9vbk9wZW5Eb2N1bWVudGF0aW9uRnJvbUZvcm0iLCJyZW1vdmVJdGVtIiwiX2ZpbmRGbG93Q29sbGVjdGlvbiIsInBsYW5zRmxvd3MiLCJyZWR1Y2UiLCJhY2MiLCJ2YWwiLCJjb25jYXQiLCJpbmRleCIsInNlbGVjdGVkRmxvd0lkIiwiX29uVGFyZ2V0UG9saWN5IiwiX29uQ2hhbmdlRmxvd1N0ZXAiLCJ2YWx1ZXMiLCJfd3JpdGVGbG93U3RlcCIsImZpbmRJbmRleCIsIl9vblN1Ym1pdEZsb3dTdGVwIiwiYyIsIl9vbkNhbmNlbEZsb3ciLCJfb25TdWJtaXRGbG93Iiwic2VsZWN0ZWRGbG93IiwiYXNzaWduIiwiX2NyZWF0ZUZsb3dGcm9tU2NoZW1hIiwic2VsZWN0ZWRGbG93VXBkYXRlZCIsIl9vbkNhbmNlbEZsb3dNb2RlIiwiX29uU3VibWl0Rmxvd01vZGUiLCJfb25DaGFuZ2VUYWIiLCJfY2hhbmdlVGFiVmFsaWRhdG9yIiwiZnJvbSIsInRvIiwiY29tcG9uZW50IiwiY29uZmlybSIsInJlc29sdmUiLCJfb25EcmFnU3RhcnRGbG93U3RlcCIsIl9yZW5kZXJGbG93RW1wdHlTdGF0ZSIsInJlYWRvbmx5TW9kZSIsIl9vbkFkZEZsb3ciLCJfcmVuZGVyRmxvdyIsImhhc0VtcHR5U3RhdGUiLCJiaW5kIiwiX29uRmV0Y2hSZXNvdXJjZXMiLCJldmVudCIsImN1cnJlbnRUYXJnZXQiLCJyZWdleFR5cGVzIiwib3B0aW9ucyIsImRlZmluZWRSZXNvdXJjZXMiLCJyZXNvdXJjZSIsIlJlZ0V4cCIsInRlc3QiLCJyZXNvdXJjZVR5cGUiLCJyb3ciLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJwaWN0dXJlIiwiaXRlbSIsImVsZW1lbnQiLCJfcmVuZGVyUG9saWN5IiwiX3JlbmRlckZsb3dTdGVwRm9ybSIsImNvbnRlbnQiLCJpbWFnZSIsIl9vblJlc2V0Rmxvd1N0ZXAiLCJyZXNldCIsImxpc3QiLCJwcmVmaXgiLCJpc0Zsb3ciLCJwcmUiLCJzdGVwSW5kZXgiLCJwb3N0IiwiZ2V0VXBkYXRlQ29tcGxldGUiLCJzaG91bGRVcGRhdGUiLCJjaGFuZ2VkUHJvcGVydGllcyIsImhhcyIsImRyYWdQb2xpY3kiLCJkcm9wUG9saWN5IiwidXBkYXRlZCIsInByb3BzIiwic2V0SXRlbSIsIl9vbkRlbGV0ZUZsb3ciLCJfZGVsZXRlRmxvdyIsImRlZmluZWRQcm9wZXJ0aWVzIiwiX29uRHVwbGljYXRlRmxvdyIsIl9hZGRGbG93IiwicGxhbkluZGV4IiwicCIsImkiLCJfb25DaGFuZ2VGbG93U3RhdGUiLCJfb25BZGRGbG93UGxhbiIsImNvbGxlY3Rpb24iLCJkdXBsaWNhdGUiLCJwdXNoIiwibmV3RmxvdyIsIl9pbnN0YW50aWF0ZSIsInByb3BlcnRpZXNEZWZpbml0aW9uIiwiaW5pdGlhdG9yIiwicHJvcGVydHkiLCJrZXkiLCJrZXlzIiwiZW50cnkiLCJ1bmRlZmluZWQiLCJpbmRleE9mIiwic2VsZWN0ZWRGbG93cyIsIl9maW5kRmxvd0luZGV4IiwiZiIsIl9vblJlb3JkZXJGbG93cyIsIm5ld09yZGVyIiwiX29uU2VhcmNoUG9saWN5IiwiX29uQ2xlYXJQb2xpY3kiLCJfb25TZWFyY2hGbG93cyIsIl9vbkNsZWFyRmxvd3MiLCJfb25SZXNldEFsbCIsIl9maWx0ZXJOb3RWYWxpZFN0ZXAiLCJfcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMiLCJvIiwiY29weSIsInN0YXJ0c1dpdGgiLCJmb3JtIiwiaXNWYWxpZCIsInN1Ym1pdCIsImdldFByb3BlcnRpZXNFbGVtZW50IiwiY2xvc2VQcm9taXNlcyIsImN1cnJlbnRTdGVwIiwic2F2ZWQiLCJfZGVmaW5pdGlvblNhdmVkIiwiX2J1aWxkRGVmaW5pdGlvblRvU2VuZCIsImRlZmluaXRpb25Ub1NhdmUiLCJfb25TYXZlQWxsIiwiY2F0Y2giLCJjb25zb2xlIiwiZXJyb3IiLCJfb25EZWJ1ZyIsInJlcXVlc3RFdmVudCIsInJlcXVlc3QiLCJmaWx0ZXJlZEZsb3dzIiwiZmlsdGVyZWRQbGFucyIsIl9vbkZpbHRlckZsb3dzIiwiX2dldEZpbHRlcmVkUG9saWNpZXMiLCJvblJlcXVlc3QiLCJvblJlc3BvbnNlIiwiX29uRmlsdGVyUG9saWNpZXMiLCJfcmVuZGVyRGVzaWduIiwiX3JlbmRlckZsb3dGb3JtIiwiX3JlbmRlckRlYnVnIiwicmVzcG9uc2UiLCJpc0xvYWRpbmciLCJwYXRoIiwibWV0aG9kIiwiX3JlbmRlckNvbmZpZ3VyYXRpb25Gb3JtIiwiX29uUmVzb3VyY2VzQ2hhbmdlIiwiX29uUHJvcGVydGllc0NoYW5nZSIsIl9vblNhdmVQcm92aWRlciIsInByb3ZpZGVyIiwiX29uU3dpdGNoRW5jcnlwdGVkUHJvcGVydHkiLCJyZW5kZXIiLCJfZ2V0UmVhZG9ubHlNb2RlRm9yRGVzaWduIiwiZmxvd1BsYW4iLCJjb21wYXJlZEZsb3ciLCJjb21wYXJlZEZsb3dQbGFuIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLEdBQVQsRUFBY0MsSUFBZCxFQUFvQkMsVUFBcEIsUUFBc0MsS0FBdEM7QUFDQSxTQUFTQyxPQUFULFFBQXdCLGVBQXhCO0FBQ0EsU0FBU0MsbUJBQVQsUUFBb0MsZUFBcEM7QUFDQSxPQUFPLG9CQUFQO0FBQ0EsT0FBTyxrQkFBUDtBQUNBLE9BQU8sd0JBQVA7QUFDQSxPQUFPLCtCQUFQO0FBQ0EsT0FBTyxpQ0FBUDtBQUNBLE9BQU8sNkJBQVA7QUFDQSxPQUFPLDZCQUFQO0FBQ0EsT0FBTyxzQkFBUDtBQUNBLE9BQU8scUJBQVA7QUFDQSxPQUFPLFdBQVA7QUFDQSxPQUFPLGdCQUFQO0FBQ0EsT0FBTyx5QkFBUDtBQUNBLFNBQVNDLEtBQVQsUUFBc0IsaUJBQXRCO0FBQ0EsU0FBU0MsS0FBVCxRQUFzQixz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YUFBdEM7O0FBQ0EsUUFBSThLLFlBQUosRUFBa0I7QUFDaEIsYUFBTyxJQUFQO0FBQ0Q7O0FBRUQsVUFBTXdILFlBQVksR0FBRyxLQUFLNUosZUFBTCxDQUFxQixDQUFyQixDQUFyQjs7QUFDQSxRQUFJLENBQUM0SixZQUFMLEVBQW1CO0FBQ2pCLGFBQU8sS0FBUDtBQUNEOztBQUVELFVBQU07QUFBRWpRLE1BQUFBLElBQUksRUFBRWtRO0FBQVIsUUFBNkIsS0FBS3pKLG1CQUFMLENBQXlCd0osWUFBWSxDQUFDdFAsR0FBdEMsQ0FBbkM7O0FBQ0EsV0FBT3VQLGdCQUFnQixJQUFJLEtBQUt2UyxhQUFoQztBQUNEOztBQTF0RDZEO0FBNnREaEV3UyxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE1BQXRCLENBQTZCLGtCQUE3QixFQUFpRHRWLGNBQWpEIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBtZXRob2RzIH0gZnJvbSAnLi4vbGliL3N0dWRpbyc7XG5pbXBvcnQgeyBkaXNwYXRjaEN1c3RvbUV2ZW50IH0gZnJvbSAnLi4vbGliL2V2ZW50cyc7XG5pbXBvcnQgJy4uL2F0b21zL2d2LWJ1dHRvbic7XG5pbXBvcnQgJy4uL2F0b21zL2d2LWljb24nO1xuaW1wb3J0ICcuLi9tb2xlY3VsZXMvZ3Ytb3B0aW9uJztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LWRvY3VtZW50YXRpb24nO1xuaW1wb3J0ICcuLi9vcmdhbmlzbXMvZ3YtcmVzaXphYmxlLXZpZXdzJztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LXNjaGVtYS1mb3JtJztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LWh0dHAtY2xpZW50JztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LXRhYnMnO1xuaW1wb3J0ICcuLi9tb2xlY3VsZXMvZ3Ytcm93JztcbmltcG9ydCAnLi9ndi1mbG93JztcbmltcG9ydCAnLi9ndi1mbG93LXN0ZXAnO1xuaW1wb3J0ICcuL2d2LXBvbGljeS1zdHVkaW8tbWVudSc7XG5pbXBvcnQgeyBlbXB0eSB9IGZyb20gJy4uL3N0eWxlcy9lbXB0eSc7XG5pbXBvcnQgeyBjYWNoZSB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2NhY2hlJztcbmltcG9ydCB7IGRlZXBDbG9uZSwgZGVlcEVxdWFsIH0gZnJvbSAnLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IEtleWJvYXJkRWxlbWVudCwgS0VZUyB9IGZyb20gJy4uL21peGlucy9rZXlib2FyZC1lbGVtZW50JztcblxuY29uc3QgRkxPV19TVEVQX0ZPUk1fSUQgPSAnZmxvdy1zdGVwLWZvcm0nO1xuXG4vKipcbiAqICBTdHVkaW8gUG9saWN5IGNvbXBvbmVudFxuICpcbiAqIOKaoO+4jyBUaGlzIGNvbXBvbmVudCBpcyBiYXNlZCBvbiBgYXNjaWlkb2N0b3JgLCBgaGlnaGxpZ2h0LmpzYCBhbmQgYGFzY2lpZG9jdG9yLWhpZ2hsaWdodC5qc2AuXG4gKiBUbyB1c2UgdGhpcyBjb21wb25lbnQgaW4geW91ciBwcm9qZWN0IGJlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW5zdGFsbGVkIG9yXG4gKiBpbnN0YWxsIHRoZW0gd2l0aDogYG5wbSBpbnN0YWxsIGFzY2lpZG9jdG9yIGhpZ2hsaWdodC5qcyBhc2NpaWRvY3Rvci1oaWdobGlnaHQuanMgLS1zYXZlYFxuICpcbiAqIEBmaXJlcyBndi1wb2xpY3ktc3R1ZGlvOnNlbGVjdC1wb2xpY3kgLSBTZWxlY3QgcG9saWN5IGV2ZW50XG4gKiBAZmlyZXMgZ3YtcG9saWN5LXN0dWRpbzpzYXZlIC0gRXZlbnQgc2VudCB3aGVuIFwiU2F2ZVwiIGJ1dHRvbiBpcyBjbGlja2VkLCBpdCBjb250YWlucyB0aGUgd2hvbGUgZGVmaW5pdGlvbiBvZiB0aGUgQVBJXG4gKiBAZmlyZXMgZ3YtcG9saWN5LXN0dWRpbzpkZWJ1ZyAtIEV2ZW50IHNlbnQgd2hlbiB2YWxpZGF0aW9uIGJ1dHRvbiBvZiB0aGUgJ1RyeSBpdCcgdGFiIGlzIGNsaWNrZWQsIGl0IGNvbnRhaW5zIHRoZSB3aG9sZSBkZWZpbml0aW9uIG9mIHRoZSBBUEkgYW5kIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHJ5IGl0IHJlcXVlc3QuXG4gKlxuICogQGF0dHIge0FycmF5fSBwb2xpY2llcyAtIFBvbGljaWVzIGF2YWlsYWJsZVxuICogQGF0dHIge0FycmF5fSBzZXJ2aWNlcyAtIFNlcnZpY2VzIGF2YWlsYWJsZVxuICogQGF0dHIge0FycmF5fSByZXNvdXJjZVR5cGVzIC0gUmVzb3VyY2VzIHR5cGVzIGF2YWlsYWJsZVxuICogQGF0dHIge0FycmF5fSBwcm9wZXJ0eVByb3ZpZGVycyAtIFByb3ZpZGVycyBvZiBwcm9wZXJ0aWVzXG4gKiBAYXR0ciB7QXJyYXl9IGR5bmFtaWNQcm9wZXJ0eVNjaGVtYSAtIFNjaGVtYSBmb3IgdGhlIGR5bmFtaWMgcHJvcGVydHkgZm9ybVxuICogQGF0dHIge1N0cmluZ30gdGFiSWQgLSBDdXJyZW50IHRhYklkIHRvIGRpc3BsYXkgKGRlc2lnbiwgc2V0dGluZ3MsIHByb3BlcnRpZXMgb3IgcmVzb3VyY2VzKVxuICogQGF0dHIge09iamVjdH0gZGVmaW5pdGlvbiAtIFRoZSBkZWZpbml0aW9uIG9mIGZsb3dzXG4gKiBAYXR0ciB7T2JqZWN0fSBkb2N1bWVudGF0aW9uIC0gVGhlIGRvY3VtZW50YXRpb24gdG8gZGlzcGxheVxuICogQGF0dHIge09iamVjdH0gZmxvd1NjaGVtYSAtIFRoZSBmbG93IGZvcm0gY29uZmlndXJhdGlvbiB0byBkaXNwbGF5IGluIGd2LXNjaGVtYS1mb3JtIGNvbXBvbmVudFxuICogQGF0dHIge09iamVjdH0gY29uZmlndXJhdGlvblNjaGVtYSAtIFRoZSBmb3JtIGNvbmZpZ3VyYXRpb24gdG8gZGlzcGxheSBpbiBndi1zY2hlbWEtZm9ybSBjb21wb25lbnRcbiAqIEBhdHRyIHtPYmplY3R9IGNvbmZpZ3VyYXRpb25JbmZvcm1hdGlvbiAtIFRoZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGFwaSBjb25maWd1cmF0aW9uIHRhYlxuICogQGF0dHIge0Jvb2xlYW59IGlzRGlydHkgLSB0cnVlIGlmIGNvbXBvbmVudCBpcyBkaXJ0eVxuICogQGF0dHIge0FycmF5fSBzZWxlY3RlZEZsb3dzSWQgLSBUaGUgc2VsZWN0ZWQgZmxvd3MgaWRcbiAqIEBhdHRyIHtCb29sZWFufSBzb3J0YWJsZSAtIHRydWUgaWYgZmxvd3MgYXJlIHNvcnRhYmxlXG4gKiBAYXR0ciB7Qm9vbGVhbn0gcmVhZG9ubHkgLSB0cnVlIGlmIHJlYWRvbmx5XG4gKiBAYXR0ciB7Qm9vbGVhbn0gcmVhZG9ubHktcGxhbnMgLSB0cnVlIGlmIHBsYW5zJyBmbG93cyBjYW4ndCBiZSBtb2RpZmllZFxuICogQGF0dHIge0Jvb2xlYW59IGNhbi1hZGQgLSB0cnVlIGlmIHVzZXIgY2FuIGFkZCBmbG93XG4gKiBAYXR0ciB7U3RyaW5nfSBmbG93c1RpdGxlIC0gZmxvd3MgbWVudSB0aXRsZVxuICogQGF0dHIge0Jvb2xlYW59IGhhcy1wb2xpY3ktZmlsdGVyIC0gdHJ1ZSBpZiBwb2xpY2llcyBoYXZlIG9uUmVxdWVzdC9vblJlc3BvbnNlIHByb3BlcnRpZXNcbiAqIEBhdHRyIHtCb29sZWFufSBjYW4tZGVidWcgLSB0cnVlIGlmIGRlYnVnIHRhYiBzaG91bGQgYmUgZGlzcGxheWVkXG4gKiBAYXR0ciB7T2JqZWN0fSBkZWJ1Z1Jlc3BvbnNlIC0gdHJ1ZSBpZiBkZWJ1ZyB0YWIgc2hvdWxkIGJlIGRpc3BsYXllZFxuICovXG5leHBvcnQgY2xhc3MgR3ZQb2xpY3lTdHVkaW8gZXh0ZW5kcyBLZXlib2FyZEVsZW1lbnQoTGl0RWxlbWVudCkge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvbGljaWVzOiB7IHR5cGU6IEFycmF5IH0sXG4gICAgICBzZXJ2aWNlczogeyB0eXBlOiBPYmplY3QgfSxcbiAgICAgIHJlc291cmNlVHlwZXM6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogJ3Jlc291cmNlLXR5cGVzJyB9LFxuICAgICAgcHJvcGVydHlQcm92aWRlcnM6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogJ3Byb3BlcnR5LXByb3ZpZGVycycgfSxcbiAgICAgIGR5bmFtaWNQcm9wZXJ0eVNjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogJ2R5bmFtaWMtcHJvcGVydHktc2NoZW1hJyB9LFxuICAgICAgdGFiSWQ6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICd0YWItaWQnIH0sXG4gICAgICBfdGFiSWQ6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkZWZpbml0aW9uOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgX2RlZmluaXRpb246IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkb2N1bWVudGF0aW9uOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgZmxvd1NjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogJ2Zsb3ctc2NoZW1hJyB9LFxuICAgICAgY29uZmlndXJhdGlvblNjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogJ2NvbmZpZ3VyYXRpb24tc2NoZW1hJyB9LFxuICAgICAgX2NvbmZpZ3VyYXRpb25TY2hlbWE6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBjb25maWd1cmF0aW9uSW5mb3JtYXRpb246IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjb25maWd1cmF0aW9uLWluZm9ybWF0aW9uJyB9LFxuICAgICAgaXNEaXJ0eTogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdkaXJ0eScsIHJlZmxlY3Q6IHRydWUgfSxcbiAgICAgIF9kcmFnUG9saWN5OiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2Ryb3BQb2xpY3k6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBzZWxlY3RlZEZsb3dzSWQ6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogJ3NlbGVjdGVkLWZsb3dzLWlkJyB9LFxuICAgICAgX3NlbGVjdGVkRmxvd3NJZDogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2N1cnJlbnRQb2xpY3lJZDogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9zZWFyY2hQb2xpY3lRdWVyeTogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9zZWFyY2hGbG93UXVlcnk6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfZmxvd1N0ZXBTY2hlbWE6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfY3VycmVudEZsb3dTdGVwOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX3BvbGljeUZpbHRlcjogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2Zsb3dGaWx0ZXI6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9jdXJyZW50QXNrQ29uZmlybWF0aW9uOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIGhhc1Byb3BlcnRpZXM6IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnaGFzLXByb3BlcnRpZXMnIH0sXG4gICAgICBfaGFzUHJvcGVydGllczogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBoYXNSZXNvdXJjZXM6IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnaGFzLXJlc291cmNlcycgfSxcbiAgICAgIGhhc1BvbGljeUZpbHRlcjogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoYXMtcG9saWN5LWZpbHRlcicgfSxcbiAgICAgIGZsb3dzVGl0bGU6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdmbG93cy10aXRsZScgfSxcbiAgICAgIHNvcnRhYmxlOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIGNhbkFkZDogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdjYW4tYWRkJyB9LFxuICAgICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiB9LFxuICAgICAgcmVhZG9ubHlQbGFuczogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdyZWFkb25seS1wbGFucycgfSxcbiAgICAgIGNhbkRlYnVnOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2Nhbi1kZWJ1ZycgfSxcbiAgICAgIF9jYW5EZWJ1ZzogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkZWJ1Z1Jlc3BvbnNlOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiAnZGVidWctcmVzcG9uc2UnIH0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBlbXB0eSxcbiAgICAgIG1ldGhvZHMsXG4gICAgICAvLyBsYW5ndWFnZT1DU1NcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgLS1oZWlnaHQ6IHZhcigtLWd2LXBvbGljeS1zdHVkaW8tLWgsIGNhbGMoMTAwdmggLSAzMnB4KSk7XG4gICAgICAgICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xuICAgICAgICAgIC0taGVpZ2h0LWluLXRhYnM6IGNhbGModmFyKC0taGVpZ2h0KSAtIDI1cHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmJveCB7XG4gICAgICAgICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIH1cblxuICAgICAgICAuZGVzaWduLFxuICAgICAgICAucHJvcGVydGllcyB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LXJlc2l6YWJsZS12aWV3cyB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuZWRpdGFibGUtbmFtZSB7XG4gICAgICAgICAgcGFkZGluZzogMC41cmVtIDFyZW07XG4gICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmVkaXRhYmxlLW5hbWUgc3BhbiB7XG4gICAgICAgICAgY29sb3I6ICNiZmJmYmY7XG4gICAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvcm1fX2NvbnRyb2wge1xuICAgICAgICAgIG1hcmdpbjogMC41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtaW5wdXQge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZsb3ctbmFtZSB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZsb3ctbmFtZS5kaXJ0eSB7XG4gICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICAgIG9wYWNpdHk6IDAuODtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LW5hbWUgZ3YtaWNvbiB7XG4gICAgICAgICAgLS1ndi1pY29uLS1zOiAyNHB4O1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMC4ycmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZsb3ctcGF0aCB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDAuMnJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC50aXRsZV9tZXRob2RzIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMC41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnR3by1jb2xzIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC50d28tY29scyA+ICoge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgIH1cblxuICAgICAgICAubGVmdC1tZW51IHtcbiAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkOWQ5ZDk7XG4gICAgICAgICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQtaW4tdGFicyk7XG4gICAgICAgIH1cblxuICAgICAgICAucmlnaHQtbWVudSB7XG4gICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbi10YWJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC50d28tY29scyA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkOWQ5ZDk7XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1zdGVwX19jb250YWluZXIge1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgaGVpZ2h0OiA5OSU7XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1zdGVwX19mb3JtIHtcbiAgICAgICAgICBwYWRkaW5nOiAwIDAuNXJlbTtcbiAgICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LXN0ZXBfX2Zvcm0tdGl0bGUge1xuICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMnJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LXRhYnMge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIH1cblxuICAgICAgICBndi1yZXNpemFibGUtdmlld3MsXG4gICAgICAgIGd2LXByb3BlcnRpZXMsXG4gICAgICAgIGd2LXJlc291cmNlcyB7XG4gICAgICAgICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQtaW4tdGFicyk7XG4gICAgICAgIH1cblxuICAgICAgICBndi1wcm9wZXJ0aWVzLFxuICAgICAgICBndi1yZXNvdXJjZXMge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtcHJvcGVydGllcy5wcm9wZXJ0aWVzIHtcbiAgICAgICAgICAtLWd2LXByb3BlcnRpZXMtdGFibGUtLWNvbG1nOiAxMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmFwaS1zZXR0aW5ncyB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2JmYmZiZjtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbi10YWJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kZWJ1ZyB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2JmYmZiZjtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbi10YWJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hcGktc2V0dGluZ3MtaW5mb3JtYXRpb24ge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hcGktc2V0dGluZ3MtaW5mb3JtYXRpb25fX2ljb24ge1xuICAgICAgICAgIC0tZ3YtaWNvbi0tYzogdmFyKC0tZ3YtdGhlbWUtY29sb3IsICM1YTc2ODQpO1xuICAgICAgICAgIC0tZ3YtaWNvbi1vcGFjaXR5LS1jOiB2YXIoLS1ndi10aGVtZS1jb2xvci1pbmZvLWxpZ2h0LCAjNjRiNWY2KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hcGktc2V0dGluZ3MtaW5mb3JtYXRpb25fX2Jsb2NrcXVvdGUsXG4gICAgICAgIC5kZWJ1Zy1pbmZvcm1hdGlvbl9fYmxvY2txdW90ZSB7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1ndi10aGVtZS1jb2xvciwgIzVhNzY4NCk7XG4gICAgICAgICAgbWFyZ2luOiAxNXB4O1xuICAgICAgICAgIHBhZGRpbmctbGVmdDogMTVweDtcbiAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1zZXR0aW5ncyBndi1zY2hlbWEtZm9ybSB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICBwYWRkaW5nOiAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuc2VhcmNoIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3RyZXRjaDtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LWlucHV0IHtcbiAgICAgICAgICBtYXJnaW46IDAuMnJlbSAwO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlci1hY3Rpb25zLFxuICAgICAgICAuc2VhcmNoLXBvbGljaWVzIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICBtYXJnaW46IDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zZWFyY2gtcG9saWNpZXMge1xuICAgICAgICAgIG1hcmdpbjogMS41cmVtIDAuNXJlbSAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuZm9vdGVyLWFjdGlvbnMgPiBndi1idXR0b24uYnRuLWxhcmdlLFxuICAgICAgICAuZm9vdGVyLWFjdGlvbnMgPiBndi1vcHRpb24ge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvb3Rlci1hY3Rpb25zIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICBwYWRkaW5nOiAwLjVyZW0gMDtcbiAgICAgICAgICBtYXJnaW46IDAuNXJlbSAxNXB4O1xuICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjYmZiZmJmO1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlci1hY3Rpb25zIC50aXRsZSB7XG4gICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuM3JlbTtcbiAgICAgICAgICBjb2xvcjogI2JmYmZiZjtcbiAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICAgIHdpZHRoOiAyNDBweDtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAyNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlci1hY3Rpb25zID4gKixcbiAgICAgICAgLnNlYXJjaC1wb2xpY2llcyA+ICoge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgXTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgdGhpcy5wb2xpY2llcyA9IFtdO1xuICAgIHRoaXMucmVzb3VyY2VUeXBlcyA9IFtdO1xuICAgIHRoaXMudGFiSWQgPSAnZGVzaWduJztcbiAgICB0aGlzLnNlbGVjdGVkRmxvd3NJZCA9IFtdO1xuICAgIHRoaXMuZmxvd3NUaXRsZSA9ICdGbG93cyc7XG4gICAgdGhpcy5zb3J0YWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuc2VydmljZXMgPSB7fTtcbiAgICB0aGlzLl9kZWZpbml0aW9uID0ge1xuICAgICAgZmxvd3M6IFtdLFxuICAgIH07XG4gICAgdGhpcy5fdGFicyA9IFt7IGlkOiAnZGVzaWduJywgdGl0bGU6ICdEZXNpZ24nLCBpY29uOiAnbmF2aWdhdGlvbjpleGNoYW5nZScgfV07XG4gICAgdGhpcy5fcG9saWN5RmlsdGVyID0gW107XG4gICAgdGhpcy5fZmxvd0ZpbHRlciA9IFtdO1xuICB9XG5cbiAgc2V0IGhhc1Byb3BlcnRpZXModmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGltcG9ydCgnLi4vb3JnYW5pc21zL2d2LXByb3BlcnRpZXMnKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fdGFicyA9IFsuLi50aGlzLl90YWJzLCB7IGlkOiAncHJvcGVydGllcycsIHRpdGxlOiAnUHJvcGVydGllcycsIGljb246ICdnZW5lcmFsOnNldHRpbmdzIzEnIH1dO1xuICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLl9oYXNQcm9wZXJ0aWVzID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaGFzUHJvcGVydGllcygpIHtcbiAgICByZXR1cm4gdGhpcy5faGFzUHJvcGVydGllcztcbiAgfVxuXG4gIHNldCBoYXNSZXNvdXJjZXModmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGltcG9ydCgnLi4vb3JnYW5pc21zL2d2LXJlc291cmNlcycpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl90YWJzID0gWy4uLnRoaXMuX3RhYnMsIHsgaWQ6ICdyZXNvdXJjZXMnLCB0aXRsZTogJ1Jlc291cmNlcycsIGljb246ICdnZW5lcmFsOnNldHRpbmdzIzUnIH1dO1xuICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldCBjYW5EZWJ1Zyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fdGFicyA9IFsuLi50aGlzLl90YWJzLCB7IGlkOiAnZGVidWcnLCB0aXRsZTogJ1RyeSBpdCcsIGljb246ICdjb250ZW50OnNlbmQnIH1dO1xuICAgIH1cbiAgfVxuXG4gIGdldCBfZmxvd0ZpbHRlck9wdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuZGVmaW5lZFBsYW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHsgaWQ6ICdhcGknLCB0aXRsZTogJ0FwaScsIGljb246ICdzaG9wcGluZzpib3gjMycgfSxcbiAgICAgICAgeyBpZDogJ3BsYW4nLCB0aXRsZTogJ1BsYW5zJywgaWNvbjogJ3Nob3BwaW5nOnNhbGUjMicgfSxcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgc2V0IGhhc1BvbGljeUZpbHRlcih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fcG9saWN5RmlsdGVyT3B0aW9ucyA9IFtcbiAgICAgICAgeyBpZDogJ29uUmVxdWVzdCcsIHRpdGxlOiAnUmVxdWVzdCcsIGljb246ICduYXZpZ2F0aW9uOmFycm93LWZyb20tbGVmdCcgfSxcbiAgICAgICAgeyBpZDogJ29uUmVzcG9uc2UnLCB0aXRsZTogJ1Jlc3BvbnNlJywgaWNvbjogJ25hdmlnYXRpb246YXJyb3ctZnJvbS1yaWdodCcgfSxcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgc2V0IGNvbmZpZ3VyYXRpb25TY2hlbWEodmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3RhYnMuc3BsaWNlKDEsIDAsIHsgaWQ6ICdzZXR0aW5ncycsIHRpdGxlOiAnQ29uZmlndXJhdGlvbicsIGljb246ICdnZW5lcmFsOnNldHRpbmdzIzInIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbmZpZ3VyYXRpb25TY2hlbWEgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBjb25maWd1cmF0aW9uU2NoZW1hKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWd1cmF0aW9uU2NoZW1hO1xuICB9XG5cbiAgb25LZXlib2FyZCgpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5pc1ByZXNzZWQoS0VZUy5TaGlmdCwgS0VZUy5DdHJsLCBLRVlTLlNwYWNlKSkge1xuICAgICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI3NlYXJjaC1wb2xpY3knKTtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIHNlYXJjaC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNQcmVzc2VkKEtFWVMuQ3RybCwgS0VZUy5TcGFjZSkpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJyNzZWFyY2gtZmxvdycpO1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgc2VhcmNoLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzUHJlc3NlZChLRVlTLkVzYykpIHtcbiAgICAgICAgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0oKTtcbiAgICAgICAgdGhpcy5fb25DbG9zZURvY3VtZW50YXRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXQgdGFiSWQodGFiSWQpIHtcbiAgICBpZiAodGFiSWQgIT0gbnVsbCAmJiBbJ2Rlc2lnbicsICdzZXR0aW5ncycsICdwcm9wZXJ0aWVzJywgJ3Jlc291cmNlcycsICdkZWJ1ZyddLmluY2x1ZGVzKHRhYklkKSkge1xuICAgICAgdGhpcy5fdGFiSWQgPSB0YWJJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGFiSWQgPSAnZGVzaWduJztcbiAgICB9XG4gIH1cblxuICBnZXQgdGFiSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYklkO1xuICB9XG5cbiAgc2V0IGRlZmluaXRpb24oZGVmaW5pdGlvbikge1xuICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBmbG93cyA9IHRoaXMuX2dlbmVyYXRlRmxvd3NJZChkZWZpbml0aW9uLmZsb3dzKTtcbiAgICAgIGNvbnN0IHJlc291cmNlcyA9IHRoaXMuX2dlbmVyYXRlSWQoJ3Jlc291cmNlLScsIGRlZmluaXRpb24ucmVzb3VyY2VzKTtcbiAgICAgIGNvbnN0IHBsYW5zID1cbiAgICAgICAgZGVmaW5pdGlvbi5wbGFucyA9PSBudWxsXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogZGVmaW5pdGlvbi5wbGFucy5tYXAoKHBsYW4pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucGxhbiwgZmxvd3M6IHRoaXMuX2dlbmVyYXRlUGxhbkZsb3dzSWQocGxhbikgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgdGhpcy5faW5pdGlhbERlZmluaXRpb24gPSB7IC4uLmRlZmluaXRpb24sIGZsb3dzLCByZXNvdXJjZXMsIHBsYW5zIH07XG4gICAgICB0aGlzLl9kZWZpbml0aW9uID0gZGVlcENsb25lKHRoaXMuX2luaXRpYWxEZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc2VsZWN0Rmlyc3RGbG93KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRlZmluaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmluaXRpb247XG4gIH1cblxuICBzZXQgc2VsZWN0ZWRGbG93c0lkKHNlbGVjdGVkRmxvd3NJZCkge1xuICAgIGlmIChzZWxlY3RlZEZsb3dzSWQgIT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KHNlbGVjdGVkRmxvd3NJZCkpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkRmxvd3NJZCA9IHNlbGVjdGVkRmxvd3NJZC5maWx0ZXIoKGlkKSA9PiB0aGlzLl9maW5kRmxvd0J5SWQoaWQpICE9IG51bGwpO1xuICAgICAgaWYgKHNlbGVjdGVkRmxvd3NJZC5sZW5ndGggIT09IHRoaXMuX3NlbGVjdGVkRmxvd3NJZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0Rmlyc3RGbG93KHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBzZWxlY3RlZEZsb3dzSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRmxvd3NJZC5maWx0ZXIoKGlkKSA9PiB0aGlzLl9maW5kRmxvd0J5SWQoaWQpICE9IG51bGwpO1xuICB9XG5cbiAgX3VwZGF0ZVNlbGVjdGVkRmxvd3Moc2VsZWN0ZWRGbG93c0lkKSB7XG4gICAgdGhpcy5zZWxlY3RlZEZsb3dzSWQgPSBzZWxlY3RlZEZsb3dzSWQ7XG4gICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnc2VsZWN0LWZsb3dzJywgeyBmbG93czogdGhpcy5zZWxlY3RlZEZsb3dzSWQgfSk7XG4gIH1cblxuICBfc2VsZWN0Rmlyc3RGbG93KGRpc3BhdGNoID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZsb3dzSWQubGVuZ3RoID09PSAwKSB7XG4gICAgICBsZXQgY2FuZGlkYXRlID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLmRlZmluZWRGbG93cy5sZW5ndGggPiAwICYmIHRoaXMuZGVmaW5lZEZsb3dzWzBdLl9pZCAhPSBudWxsKSB7XG4gICAgICAgIGNhbmRpZGF0ZSA9IHRoaXMuZGVmaW5lZEZsb3dzWzBdO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmRlZmluZWRQbGFucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHBsYW4gPSB0aGlzLmRlZmluZWRQbGFucy5maW5kKChwbGFuKSA9PiBwbGFuLmZsb3dzICE9IG51bGwgJiYgcGxhbi5mbG93cy5sZW5ndGggPiAwICYmIHBsYW4uZmxvd3NbMF0uX2lkICE9IG51bGwpO1xuICAgICAgICBpZiAocGxhbikge1xuICAgICAgICAgIGNhbmRpZGF0ZSA9IHBsYW4uZmxvd3NbMF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjYW5kaWRhdGUgIT0gbnVsbCkge1xuICAgICAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFtjYW5kaWRhdGUuX2lkXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZsb3dzSWQgPSBbY2FuZGlkYXRlLl9pZF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfZ2V0Rmxvd0VsZW1lbnQoZmxvd0lkKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke2Zsb3dJZH1cIl1gKTtcbiAgfVxuXG4gIF9vbkRyYWdFbmRQb2xpY3koKSB7XG4gICAgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LWZsb3cnKS5mb3JFYWNoKChlKSA9PiBlLm9uRHJhZ0VuZCgpKTtcbiAgfVxuXG4gIGFzeW5jIF9vbkRyb3BQb2xpY3koeyBkZXRhaWwgfSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9hc2tUb1ZhbGlkYXRlRm9ybXMoKTtcblxuICAgICAgY29uc3QgcG9saWN5ID0gZGV0YWlsLnBvbGljeTtcbiAgICAgIGNvbnN0IHRhcmdldEZsb3cgPSB0aGlzLl9maW5kRmxvd0J5SWQoZGV0YWlsLmZsb3dJZCk7XG5cbiAgICAgIGxldCBuYW1lID0gcG9saWN5Lm5hbWU7XG4gICAgICBsZXQgZGVzY3JpcHRpb24gPSAnJztcbiAgICAgIGxldCBjb25maWd1cmF0aW9uID0ge307XG4gICAgICBsZXQgX2lkO1xuICAgICAgbGV0IF9uZXcgPSBmYWxzZTtcbiAgICAgIGlmIChkZXRhaWwuZmxvd1N0ZXApIHtcbiAgICAgICAgX2lkID0gZGV0YWlsLmZsb3dTdGVwLl9pZDtcbiAgICAgICAgbmFtZSA9IGRldGFpbC5mbG93U3RlcC5uYW1lO1xuICAgICAgICBkZXNjcmlwdGlvbiA9IGRldGFpbC5mbG93U3RlcC5kZXNjcmlwdGlvbiB8fCAnJztcbiAgICAgICAgY29uZmlndXJhdGlvbiA9IGRldGFpbC5mbG93U3RlcC5jb25maWd1cmF0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX2lkID0gdGhpcy5fZ2VuZXJhdGVGbG93U3RlcElkKHRhcmdldEZsb3cuX2lkLCBkZXRhaWwuZmxvd0tleSwgZGV0YWlsLnBvc2l0aW9uKTtcbiAgICAgICAgX25ldyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZsb3dTdGVwID0geyBfaWQsIF9uZXcsIG5hbWUsIHBvbGljeTogcG9saWN5LmlkLCBkZXNjcmlwdGlvbiwgZW5hYmxlZDogdHJ1ZSwgY29uZmlndXJhdGlvbiB9O1xuICAgICAgY29uc3Qgc291cmNlRmxvdyA9IGRldGFpbC5zb3VyY2VGbG93SWQgIT0gbnVsbCA/IHRoaXMuX2ZpbmRGbG93QnlJZChkZXRhaWwuc291cmNlRmxvd0lkKSA6IHRhcmdldEZsb3c7XG5cbiAgICAgIGlmIChkZXRhaWwuc291cmNlUG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgICBpZiAoZGV0YWlsLnNvdXJjZUZsb3dLZXkgJiYgZGV0YWlsLnNvdXJjZUZsb3dLZXkgIT09IGRldGFpbC5mbG93S2V5KSB7XG4gICAgICAgICAgc291cmNlRmxvd1tkZXRhaWwuc291cmNlRmxvd0tleV0uc3BsaWNlKGRldGFpbC5zb3VyY2VQb3NpdGlvbiwgMSk7XG4gICAgICAgICAgdGFyZ2V0Rmxvd1tkZXRhaWwuZmxvd0tleV0uc3BsaWNlKGRldGFpbC5wb3NpdGlvbiwgMCwgZmxvd1N0ZXApO1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Rmxvd1N0ZXAgIT0gbnVsbCAmJiB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5faWQgPT09IF9pZCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLmdyb3VwID0gZGV0YWlsLmZsb3dLZXk7XG4gICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHVwZGF0ZSBzY2hlbWEgYWZ0ZXIgY2hhbmdlIHJlcXVlc3QgdG8gcmVzcG9uc2Ugb3IgaW52ZXJzZVxuICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5idWlsZFNjaGVtYSh0aGlzLl9jdXJyZW50Rmxvd1N0ZXAucG9saWN5KTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldEN1cnJlbnRGbG93U3RlcCh0aGlzLl9jdXJyZW50Rmxvd1N0ZXAsIHNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl9nZXRGbG93RWxlbWVudCh0YXJnZXRGbG93Ll9pZCkucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZGV0YWlsLnBvc2l0aW9uID4gZGV0YWlsLnNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgICB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnBvc2l0aW9uLCAwLCBmbG93U3RlcCk7XG4gICAgICAgICAgICBzb3VyY2VGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnNvdXJjZVBvc2l0aW9uLCAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc291cmNlRmxvd1tkZXRhaWwuZmxvd0tleV0uc3BsaWNlKGRldGFpbC5zb3VyY2VQb3NpdGlvbiwgMSk7XG4gICAgICAgICAgICB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnBvc2l0aW9uLCAwLCBmbG93U3RlcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEZvcmNlIFJlZnJlc2ggc291cmNlIGZsb3cgZWxlbWVudCB3aGVuIG1vdmUgdG8gb3RoZXIgZmxvd1xuICAgICAgICBpZiAodGFyZ2V0Rmxvdy5faWQgIT09IHNvdXJjZUZsb3cuX2lkKSB7XG4gICAgICAgICAgdGhpcy5fZ2V0Rmxvd0VsZW1lbnQodGFyZ2V0Rmxvdy5faWQpLnJlcXVlc3RVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0Rmxvd1tkZXRhaWwuZmxvd0tleV0uc3BsaWNlKGRldGFpbC5wb3NpdGlvbiwgMCwgZmxvd1N0ZXApO1xuICAgICAgICBjb25zdCBjdXJyZW50Rmxvd0Zvcm0gPSB0aGlzLl9nZXRGbG93U3RlcEZvcm0oKTtcbiAgICAgICAgaWYgKGN1cnJlbnRGbG93Rm9ybSA9PSBudWxsIHx8IGN1cnJlbnRGbG93Rm9ybS5kaXJ0eSAhPT0gdHJ1ZSkge1xuICAgICAgICAgIGxldCBzdGVwID0gdGFyZ2V0Rmxvd1tkZXRhaWwuZmxvd0tleV1bZGV0YWlsLnBvc2l0aW9uXTtcbiAgICAgICAgICBpZiAoc3RlcCA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXaGVuIGNvbmZpcm0gbG9zZSBjaGFuZ2UgYWZ0ZXIgZHJvcCBwb2xpY3lcbiAgICAgICAgICAgIHN0ZXAgPSB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XVtkZXRhaWwucG9zaXRpb24gLSAxXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGV0YWlsLmNhbmNlbEVkaXQgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9lZGl0Rmxvd1N0ZXAoeyBzdGVwLCBwb2xpY3ksIGZsb3c6IHRhcmdldEZsb3csIGdyb3VwOiBkZXRhaWwuZmxvd0tleSB9KTtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmbG93RWxlbWVudCA9IHRoaXMuX2dldEZsb3dFbGVtZW50KHRhcmdldEZsb3cuX2lkKTtcbiAgICAgICAgICAgICAgICBmbG93RWxlbWVudC5zZWxlY3RlZFN0ZXBJZCA9IHN0ZXAuX2lkO1xuICAgICAgICAgICAgICAgIGZsb3dFbGVtZW50LnJlcXVlc3RVcGRhdGUoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRhcmdldEZsb3cuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgIHNvdXJjZUZsb3cuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3YtZmxvdycpLmZvckVhY2goKGd2RmxvdykgPT4gZ3ZGbG93LnJlbW92ZUNhbmRpZGF0ZSgpKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9kcmFnUG9saWN5ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZHJvcFBvbGljeSA9IG51bGw7XG4gICAgICB9LCAwKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfb25EZWxldGVQb2xpY3koeyBkZXRhaWwgfSkge1xuICAgIGNvbnN0IHRhcmdldEZsb3cgPSB0aGlzLl9maW5kRmxvd0J5SWQoZGV0YWlsLmZsb3dJZCk7XG4gICAgdGFyZ2V0Rmxvd1tkZXRhaWwuZmxvd0tleV0uc3BsaWNlKGRldGFpbC5wb3NpdGlvbiwgMSk7XG4gICAgdGFyZ2V0Rmxvdy5fZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gICAgaWYgKGRldGFpbC50YXJnZXQuZWRpdGluZykge1xuICAgICAgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0odHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2dldEZsb3dFbGVtZW50KGRldGFpbC5mbG93SWQpLnJlcXVlc3RVcGRhdGUoKTtcbiAgfVxuXG4gIF9vbkRlc2lnbigpIHtcbiAgICB0aGlzLl9jaGFuZ2VUYWIoJ2Rlc2lnbicpO1xuICAgIHRoaXMuX3NwbGl0TWFpblZpZXdzKCk7XG4gIH1cblxuICBidWlsZFNjaGVtYSh7IHNjaGVtYSB9KSB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB7XG4gICAgICB0aXRsZTogJ0Rlc2NyaXB0aW9uJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24gb2YgZmxvdyBzdGVwJyxcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIH07XG4gICAgaWYgKHNjaGVtYSkge1xuICAgICAgY29uc3QganNvblNjaGVtYSA9IHR5cGVvZiBzY2hlbWEgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShzY2hlbWEpIDogc2NoZW1hO1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHsgZGVzY3JpcHRpb24sIC4uLmpzb25TY2hlbWEucHJvcGVydGllcyB9O1xuICAgICAgcmV0dXJuIHsgLi4uanNvblNjaGVtYSwgcHJvcGVydGllcyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBwcm9wZXJ0aWVzOiB7IGRlc2NyaXB0aW9uIH0gfTtcbiAgfVxuXG4gIGFzeW5jIF9lZGl0Rmxvd1N0ZXAoeyBzdGVwLCBmbG93LCBwb2xpY3ksIGdyb3VwIH0pIHtcbiAgICBpZiAoc3RlcCkge1xuICAgICAgdGhpcy5fY3VycmVudFBvbGljeUlkID0gcG9saWN5LmlkO1xuICAgICAgY29uc3QgY3VycmVudEZsb3dTdGVwID0geyBmbG93LCBzdGVwLCBwb2xpY3ksIGdyb3VwIH07XG4gICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmJ1aWxkU2NoZW1hKHBvbGljeSk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXRDdXJyZW50Rmxvd1N0ZXAoY3VycmVudEZsb3dTdGVwLCBzY2hlbWEpO1xuICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFtmbG93Ll9pZF0pO1xuICAgICAgICB0aGlzLl9zcGxpdE1haW5WaWV3cygpO1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2d2LXBvbGljeS1zdHVkaW86a2VlcC1kb2N1bWVudGF0aW9uLWNsb3NlJykgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuX29uT3BlbkRvY3VtZW50YXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0oKTtcbiAgICAgIHRoaXMuX21heGltaXplVG9wVmlldygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9vbkVkaXRGbG93U3RlcCh7IGRldGFpbDogeyBzdGVwLCBmbG93LCBwb2xpY3ksIGdyb3VwIH0gfSkge1xuICAgIHJldHVybiB0aGlzLl9lZGl0Rmxvd1N0ZXAoeyBzdGVwLCBmbG93LCBwb2xpY3ksIGdyb3VwIH0pO1xuICB9XG5cbiAgX2dldFJlc2l6YWJsZVZpZXdzKCkge1xuICAgIHJldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZ3YtcmVzaXphYmxlLXZpZXdzJyk7XG4gIH1cblxuICBfbWF4aW1pemVUb3BWaWV3KCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvd3NJZC5sZW5ndGggPD0gMSkge1xuICAgICAgdGhpcy5fZ2V0UmVzaXphYmxlVmlld3MoKS5tYXhpbWl6ZVRvcCgpO1xuICAgIH1cbiAgfVxuXG4gIF9tYXhpbWl6ZUJvdHRvbVZpZXcoKSB7XG4gICAgdGhpcy5fZ2V0UmVzaXphYmxlVmlld3MoKS5tYXhpbWl6ZUJvdHRvbSgpO1xuICB9XG5cbiAgX3NwbGl0TWFpblZpZXdzKCkge1xuICAgIHRoaXMuX2dldFJlc2l6YWJsZVZpZXdzKCkuc3BsaXQoKTtcbiAgfVxuXG4gIF9vbkNoYW5nZUZsb3dTdGVwU3RhdGUoeyBkZXRhaWwgfSkge1xuICAgIGNvbnN0IHRhcmdldEZsb3cgPSB0aGlzLl9maW5kRmxvd0J5SWQoZGV0YWlsLmZsb3dJZCk7XG4gICAgY29uc3Qgc3RlcCA9IHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldW2RldGFpbC5wb3NpdGlvbl07XG4gICAgc3RlcC5lbmFibGVkID0gZGV0YWlsLmVuYWJsZWQ7XG4gICAgdGFyZ2V0Rmxvdy5fZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICBhc3luYyBfb25DbG9zZUZsb3dTdGVwRm9ybSgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9jbG9zZUZsb3dTdGVwRm9ybShmb3JjZSA9IGZhbHNlKSB7XG4gICAgYXdhaXQgdGhpcy5fc2V0Q3VycmVudEZsb3dTdGVwKG51bGwsIG51bGwsIGZvcmNlKTtcbiAgfVxuXG4gIGFzeW5jIF9hc2tUb1ZhbGlkYXRlRm9ybXMoKSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPT0gbnVsbCkge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IHRydWU7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5fc3VibWl0T3JDb25maXJtRm9ybXMoKSkudGhlbigoZm9ybXMpID0+IHtcbiAgICAgICAgaWYgKGZvcm1zLmZpbHRlcigocikgPT4gciAhPSBudWxsKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5fZGVmaW5pdGlvbiA9IHRoaXMuX2J1aWxkRGVmaW5pdGlvblRvU2F2ZSgpO1xuICAgICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKChlKSA9PiBlLnJlcXVlc3RVcGRhdGUoKSk7XG4gICAgICAgICAgLy8gUmVmcmVzaCBpZiBsb3NlIGNoYW5nZXMgbG9zdCBjdXJyZW50IHN0ZXAgc2VsZWN0aW9uXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrQ3VycmVudEZsb3dTdGVwKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaCgoZSkgPT4gZS5yZXF1ZXN0VXBkYXRlKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgICAgICAgICAgICByZXR1cm4gZm9ybXM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gZm9ybXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2FzayBhbHJlYWR5IHdhaXRpbmcnKTtcbiAgfVxuXG4gIGFzeW5jIF9zZXRDdXJyZW50Rmxvd1N0ZXAoY3VycmVudEZsb3dTdGVwLCBmbG93U3RlcFNjaGVtYSwgZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICghZm9yY2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2Fza1RvVmFsaWRhdGVGb3JtcygpO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYSA9IGRlZXBDbG9uZShmbG93U3RlcFNjaGVtYSk7XG4gICAgaWYgKGN1cnJlbnRGbG93U3RlcCAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjb25maWd1cmF0aW9uID1cbiAgICAgICAgdHlwZW9mIGN1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmZpZ3VyYXRpb24gPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBKU09OLnBhcnNlKGN1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmZpZ3VyYXRpb24pXG4gICAgICAgICAgOiBjdXJyZW50Rmxvd1N0ZXAuc3RlcC5jb25maWd1cmF0aW9uO1xuICAgICAgY29uc3Qgc3RlcCA9IHsgLi4uY3VycmVudEZsb3dTdGVwLnN0ZXAsIGNvbmZpZ3VyYXRpb24gfTtcblxuICAgICAgY29uc3QgX2luaXRpYWxWYWx1ZXMgPSB7IC4uLnN0ZXAuY29uZmlndXJhdGlvbiwgZGVzY3JpcHRpb246IHN0ZXAuZGVzY3JpcHRpb24gfTtcbiAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcCA9IHsgLi4uY3VycmVudEZsb3dTdGVwLCBzdGVwLCBfaW5pdGlhbFZhbHVlcyB9O1xuXG4gICAgICBpZiAoZmxvd1N0ZXBTY2hlbWEgJiYgZmxvd1N0ZXBTY2hlbWEucHJvcGVydGllcy5zY29wZSkge1xuICAgICAgICBjb25zdCBfZW51bSA9IHNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmVudW07XG4gICAgICAgIGlmIChfZW51bS5maW5kKChzY29wZSkgPT4gWydSRVFVRVNUJywgJ1JFUVVFU1RfQ09OVEVOVCcsICdSRVNQT05TRScsICdSRVNQT05TRV9DT05URU5UJ10uaW5jbHVkZXMoc2NvcGUpKSAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXAgPT09ICdwcmUnID8gWydSRVFVRVNUJywgJ1JFUVVFU1RfQ09OVEVOVCddIDogWydSRVNQT05TRScsICdSRVNQT05TRV9DT05URU5UJ107XG4gICAgICAgICAgc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZW51bSA9IF9lbnVtLmZpbHRlcigoc2NvcGUpID0+IGZpbHRlcmVkLmluY2x1ZGVzKHNjb3BlKSk7XG4gICAgICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5jb25maWd1cmF0aW9uLnNjb3BlO1xuICAgICAgICAgIGlmIChzY29wZSA9PSBudWxsIHx8ICFzY2hlbWEucHJvcGVydGllcy5zY29wZS5lbnVtLmluY2x1ZGVzKHNjb3BlKSkge1xuICAgICAgICAgICAgc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZGVmYXVsdCA9IHNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmVudW1bMF07XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5jb25maWd1cmF0aW9uLnNjb3BlID0gc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZW51bVswXTtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5faW5pdGlhbFZhbHVlcy5zY29wZSA9IHNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmVudW1bMF07XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudEZsb3dTdGVwLl92YWx1ZXMpIHtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLl92YWx1ZXMuc2NvcGUgPSBzY2hlbWEucHJvcGVydGllcy5zY29wZS5lbnVtWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2Zsb3dTdGVwU2NoZW1hID0gc2NoZW1hO1xuICB9XG5cbiAgX3JlZnJlc2goY2xvc2VTdGVwRm9ybSA9IHRydWUpIHtcbiAgICBpZiAoY2xvc2VTdGVwRm9ybSkge1xuICAgICAgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0odHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2RlZmluaXRpb24gPSBkZWVwQ2xvbmUodGhpcy5fZGVmaW5pdGlvbik7XG4gIH1cblxuICBhc3luYyBfb25TZWxlY3RGbG93cyh7IGRldGFpbCB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Nsb3NlRmxvd1N0ZXBGb3JtKCk7XG4gICAgICB0aGlzLl9vbkNsb3NlRG9jdW1lbnRhdGlvbigpO1xuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhkZXRhaWwuZmxvd3MpO1xuICAgICAgdGhpcy5fb25EZXNpZ24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfb25PcGVuRG9jdW1lbnRhdGlvbkZyb21NZW51KHsgZGV0YWlsOiB7IHBvbGljeSB9IH0pIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZG9jdW1lbnRhdGlvbiA9PSBudWxsIHx8IHRoaXMuZG9jdW1lbnRhdGlvbi5pZCAhPT0gcG9saWN5LmlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2Nsb3NlRmxvd1N0ZXBGb3JtKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRQb2xpY3lJZCA9IHBvbGljeS5pZDtcbiAgICAgICAgaWYgKHRoaXMuZ2V0U2VsZWN0ZWRGbG93KCkpIHtcbiAgICAgICAgICB0aGlzLl9zcGxpdE1haW5WaWV3cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX21heGltaXplQm90dG9tVmlldygpO1xuICAgICAgICB9XG4gICAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2ZldGNoLWRvY3VtZW50YXRpb24nLCB7IHBvbGljeSB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG5cbiAgX2ZldGNoRG9jdW1lbnRhdGlvbihwb2xpY3kpIHtcbiAgICBpZiAodGhpcy5kb2N1bWVudGF0aW9uID09IG51bGwgfHwgdGhpcy5kb2N1bWVudGF0aW9uLmlkICE9PSBwb2xpY3kuaWQpIHtcbiAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2ZldGNoLWRvY3VtZW50YXRpb24nLCB7IHBvbGljeSB9KTtcbiAgICB9XG4gIH1cblxuICBfb25PcGVuRG9jdW1lbnRhdGlvbigpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEZsb3dTdGVwICYmIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5wb2xpY3kpIHtcbiAgICAgIHRoaXMuX2ZldGNoRG9jdW1lbnRhdGlvbih0aGlzLl9jdXJyZW50Rmxvd1N0ZXAucG9saWN5KTtcbiAgICB9XG4gIH1cblxuICBfb25PcGVuRG9jdW1lbnRhdGlvbkZyb21Gb3JtKCkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdndi1wb2xpY3ktc3R1ZGlvOmtlZXAtZG9jdW1lbnRhdGlvbi1jbG9zZScpO1xuICAgIHRoaXMuX29uT3BlbkRvY3VtZW50YXRpb24oKTtcbiAgfVxuXG4gIF9maW5kRmxvd0NvbGxlY3Rpb24oZmxvd0lkKSB7XG4gICAgY29uc3QgcGxhbiA9IHRoaXMuZGVmaW5lZFBsYW5zLmZpbmQoKHBsYW4pID0+IHBsYW4uZmxvd3MuZmluZCgoZmxvdykgPT4gZmxvdy5faWQgPT09IGZsb3dJZCkgIT0gbnVsbCk7XG4gICAgcmV0dXJuIHsgcGxhbiwgZmxvd3M6IHBsYW4gIT0gbnVsbCA/IHBsYW4uZmxvd3MgOiB0aGlzLmRlZmluZWRGbG93cyB9O1xuICB9XG5cbiAgX2ZpbmRGbG93QnlJZChmbG93SWQpIHtcbiAgICBsZXQgZmxvdyA9IHRoaXMuZGVmaW5lZEZsb3dzLmZpbmQoKGZsb3cpID0+IGZsb3cuX2lkID09PSBmbG93SWQpO1xuICAgIGlmIChmbG93ID09IG51bGwpIHtcbiAgICAgIGNvbnN0IHBsYW5zRmxvd3MgPSB0aGlzLmRlZmluZWRQbGFucy5tYXAoKHBsYW4pID0+IHBsYW4uZmxvd3MpLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYy5jb25jYXQodmFsKSwgW10pO1xuICAgICAgZmxvdyA9IHBsYW5zRmxvd3MuZmluZCgoZmxvdykgPT4gZmxvdy5faWQgPT09IGZsb3dJZCk7XG4gICAgfVxuICAgIHJldHVybiBmbG93O1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRGbG93KGluZGV4ID0gMCkge1xuICAgIGNvbnN0IHNlbGVjdGVkRmxvd0lkID0gdGhpcy5zZWxlY3RlZEZsb3dzSWRbaW5kZXhdO1xuICAgIHJldHVybiB0aGlzLl9maW5kRmxvd0J5SWQoc2VsZWN0ZWRGbG93SWQpO1xuICB9XG5cbiAgX29uVGFyZ2V0UG9saWN5KHsgZGV0YWlsIH0pIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLl9kcmFnUG9saWN5ID0gZGV0YWlsO1xuICAgIH1cbiAgfVxuXG4gIF9vbkNoYW5nZUZsb3dTdGVwKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuX3ZhbHVlcyA9IGRldGFpbC52YWx1ZXM7XG4gIH1cblxuICBfd3JpdGVGbG93U3RlcCh2YWx1ZXMpIHtcbiAgICBjb25zdCB7IGRlc2NyaXB0aW9uLCAuLi5jb25maWd1cmF0aW9uIH0gPSB2YWx1ZXM7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAuX25ldyB8fFxuICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAuZGVzY3JpcHRpb24gIT09IGRlc2NyaXB0aW9uIHx8XG4gICAgICAhZGVlcEVxdWFsKHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmZpZ3VyYXRpb24sIGNvbmZpZ3VyYXRpb24pXG4gICAgKSB7XG4gICAgICBjb25zdCBmbG93ID0gdGhpcy5fZmluZEZsb3dCeUlkKHRoaXMuX2N1cnJlbnRGbG93U3RlcC5mbG93Ll9pZCk7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IGZsb3dbdGhpcy5fY3VycmVudEZsb3dTdGVwLmdyb3VwXS5maW5kSW5kZXgoKHN0ZXApID0+IHN0ZXAuX2lkID09PSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5faWQpO1xuXG4gICAgICBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dLmNvbmZpZ3VyYXRpb24gPSBkZWVwQ2xvbmUoY29uZmlndXJhdGlvbik7XG4gICAgICBkZWxldGUgZmxvd1t0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXBdW3Bvc2l0aW9uXS5fbmV3O1xuICAgICAgZmxvd1t0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXBdW3Bvc2l0aW9uXS5fZGlydHkgPSB0cnVlO1xuICAgICAgZmxvdy5fZGlydHkgPSB0cnVlO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5mbG93ID0gZmxvdztcbiAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwID0gZmxvd1t0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXBdW3Bvc2l0aW9uXTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfb25TdWJtaXRGbG93U3RlcCh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5fd3JpdGVGbG93U3RlcChkZXRhaWwudmFsdWVzKTtcbiAgICBhd2FpdCB0aGlzLnJlcXVlc3RVcGRhdGUoJ19kZWZpbml0aW9uJyk7XG4gICAgdGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2goKGMpID0+IGMucmVxdWVzdFVwZGF0ZSgpKTtcbiAgfVxuXG4gIF9vbkNhbmNlbEZsb3coKSB7XG4gICAgdGhpcy5fb25EZXNpZ24oKTtcbiAgfVxuXG4gIF9vblN1Ym1pdEZsb3coeyBkZXRhaWw6IHsgdmFsdWVzIH0gfSkge1xuICAgIGNvbnN0IHNlbGVjdGVkRmxvdyA9IHRoaXMuZ2V0U2VsZWN0ZWRGbG93KCk7XG4gICAgY29uc3QgX3ZhbHVlcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2NyZWF0ZUZsb3dGcm9tU2NoZW1hKCksIHZhbHVlcyk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGbG93VXBkYXRlZCA9IE9iamVjdC5hc3NpZ24oe30sIHNlbGVjdGVkRmxvdywgX3ZhbHVlcyk7XG4gICAgaWYgKCFkZWVwRXF1YWwoc2VsZWN0ZWRGbG93LCBzZWxlY3RlZEZsb3dVcGRhdGVkKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihzZWxlY3RlZEZsb3csIHNlbGVjdGVkRmxvd1VwZGF0ZWQsIHsgX2RpcnR5OiB0cnVlIH0pO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICBfb25DYW5jZWxGbG93TW9kZSgpIHtcbiAgICB0aGlzLl9vbkRlc2lnbigpO1xuICB9XG5cbiAgX29uU3VibWl0Rmxvd01vZGUoeyBkZXRhaWw6IHsgdmFsdWVzIH0gfSkge1xuICAgIHRoaXMuX2RlZmluaXRpb25bJ2Zsb3ctbW9kZSddID0gdmFsdWVzWydmbG93LW1vZGUnXSB8fCAnREVGQVVMVCc7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLl9yZWZyZXNoKCk7XG4gIH1cblxuICBfb25DaGFuZ2VUYWIoeyBkZXRhaWwgfSkge1xuICAgIHRoaXMuX2NoYW5nZVRhYihkZXRhaWwudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgX2NoYW5nZVRhYlZhbGlkYXRvcih7IGZyb20sIHRvIH0pIHtcbiAgICBpZiAoZnJvbSA9PT0gJ3Byb3BlcnRpZXMnKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZ3YtcHJvcGVydGllcycpO1xuICAgICAgaWYgKGNvbXBvbmVudC5kaXJ0eSkge1xuICAgICAgICByZXR1cm4gY29tcG9uZW50LmNvbmZpcm0oKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZyb20gPT09ICdyZXNvdXJjZXMnKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZ3YtcmVzb3VyY2VzJyk7XG4gICAgICBpZiAoY29tcG9uZW50LmRpcnR5KSB7XG4gICAgICAgIHJldHVybiBjb21wb25lbnQuY29uZmlybSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fYXNrVG9WYWxpZGF0ZUZvcm1zKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBfY2hhbmdlVGFiKHRhYklkKSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPT0gbnVsbCkge1xuICAgICAgdGhpcy50YWJJZCA9IHRhYklkO1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnY2hhbmdlLXRhYicsIHRoaXMudGFiSWQpO1xuICAgIH1cbiAgfVxuXG4gIF9vbkRyYWdTdGFydEZsb3dTdGVwKGZsb3csIHsgZGV0YWlsIH0pIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLl9kcm9wUG9saWN5ID0gZGV0YWlsO1xuICAgICAgdGhpcy5fZHJhZ1BvbGljeSA9IGRldGFpbDtcbiAgICB9XG4gIH1cblxuICBfcmVuZGVyRmxvd0VtcHR5U3RhdGUocmVhZG9ubHlNb2RlKSB7XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBzbG90PVwiY29udGVudFwiIGNsYXNzPVwiZW1wdHlcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIFNlbGVjdCBhIGZsb3dcbiAgICAgICAgJHtyZWFkb25seU1vZGUgIT09IHRydWVcbiAgICAgICAgICA/IGh0bWxgb3IgPGd2LWJ1dHRvbiBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vbkFkZEZsb3d9XCIgb3V0bGluZWQgaWNvbj1cImNvZGU6cGx1c1wiIGxhcmdlPmRlc2lnbiBuZXcgb25lPC9ndi1idXR0b24+YFxuICAgICAgICAgIDogJyd9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgX3JlbmRlckZsb3coaW5kZXggPSAwLCBoYXNFbXB0eVN0YXRlID0gdHJ1ZSwgcmVhZG9ubHlNb2RlKSB7XG4gICAgY29uc3QgZmxvdyA9IHRoaXMuZ2V0U2VsZWN0ZWRGbG93KGluZGV4KTtcbiAgICBpZiAoZmxvdykge1xuICAgICAgY29uc3QgeyBwbGFuIH0gPSB0aGlzLl9maW5kRmxvd0NvbGxlY3Rpb24oZmxvdy5faWQpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRTdGVwSWQgPSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAgPyB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5faWQgOiBudWxsO1xuICAgICAgcmV0dXJuIGh0bWxgIDxndi1mbG93XG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCJcbiAgICAgICAgLmlkPVwiJHtmbG93Ll9pZH1cIlxuICAgICAgICAuZmxvdz1cIiR7Zmxvd31cIlxuICAgICAgICAucGxhbj1cIiR7cGxhbn1cIlxuICAgICAgICAucG9saWNpZXM9XCIke3RoaXMucG9saWNpZXN9XCJcbiAgICAgICAgc2xvdD1cImNvbnRlbnRcIlxuICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgLmRyYWdQb2xpY3k9XCIke3RoaXMuX2RyYWdQb2xpY3l9XCJcbiAgICAgICAgLmRyb3BQb2xpY3k9XCIke3RoaXMuX2Ryb3BQb2xpY3l9XCJcbiAgICAgICAgLnNlbGVjdGVkU3RlcElkPVwiJHtzZWxlY3RlZFN0ZXBJZH1cIlxuICAgICAgICA/cmVhZG9ubHk9XCIke3JlYWRvbmx5TW9kZX1cIlxuICAgICAgICA/aGFzLXBvbGljeS1maWx0ZXI9XCIke3RoaXMuX3BvbGljeUZpbHRlck9wdGlvbnMgIT0gbnVsbH1cIlxuICAgICAgICBmbG93cy10aXRsZT1cIiR7dGhpcy5mbG93c1RpdGxlfVwiXG4gICAgICAgIEBndi1mbG93OmRyYWctc3RhcnQ9XCIke3RoaXMuX29uRHJhZ1N0YXJ0Rmxvd1N0ZXAuYmluZCh0aGlzLCBmbG93KX1cIlxuICAgICAgICBAZ3YtZmxvdzplZGl0PVwiJHt0aGlzLl9vbkVkaXRGbG93U3RlcH1cIlxuICAgICAgICBAZ3YtZmxvdzpjaGFuZ2Utc3RhdGU9XCIke3RoaXMuX29uQ2hhbmdlRmxvd1N0ZXBTdGF0ZX1cIlxuICAgICAgICBAZ3YtZmxvdzpkcm9wPVwiJHt0aGlzLl9vbkRyb3BQb2xpY3l9XCJcbiAgICAgICAgQGd2LWZsb3c6ZGVsZXRlPVwiJHt0aGlzLl9vbkRlbGV0ZVBvbGljeX1cIlxuICAgICAgPjwvZ3YtZmxvdz5gO1xuICAgIH0gZWxzZSBpZiAoaGFzRW1wdHlTdGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckZsb3dFbXB0eVN0YXRlKHJlYWRvbmx5TW9kZSk7XG4gICAgfVxuICAgIHJldHVybiBodG1sYGA7XG4gIH1cblxuICBfb25GZXRjaFJlc291cmNlcyhldmVudCkge1xuICAgIGNvbnN0IHsgY3VycmVudFRhcmdldCwgcmVnZXhUeXBlcyB9ID0gZXZlbnQuZGV0YWlsO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmRlZmluZWRSZXNvdXJjZXNcbiAgICAgIC5maWx0ZXIoKHJlc291cmNlKSA9PiByZWdleFR5cGVzID09IG51bGwgfHwgbmV3IFJlZ0V4cChyZWdleFR5cGVzKS50ZXN0KHJlc291cmNlLnR5cGUpKVxuICAgICAgLm1hcCgocmVzb3VyY2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IHRoaXMucmVzb3VyY2VUeXBlcy5maW5kKCh0eXBlKSA9PiB0eXBlLmlkID09PSByZXNvdXJjZS50eXBlKTtcbiAgICAgICAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZ3Ytcm93Jyk7XG4gICAgICAgIGNvbnN0IHBpY3R1cmUgPSByZXNvdXJjZVR5cGUuaWNvbiA/IHJlc291cmNlVHlwZS5pY29uIDogbnVsbDtcbiAgICAgICAgcm93Lml0ZW0gPSB7IHBpY3R1cmUsIG5hbWU6IHJlc291cmNlLm5hbWUgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbGVtZW50OiByb3csXG4gICAgICAgICAgdmFsdWU6IHJlc291cmNlLm5hbWUsXG4gICAgICAgICAgaWQ6IHJlc291cmNlLnR5cGUsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICBjdXJyZW50VGFyZ2V0Lm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgX3JlbmRlclBvbGljeShyZWFkb25seU1vZGUpIHtcbiAgICBpZiAodGhpcy5fZmxvd1N0ZXBTY2hlbWEgJiYgdGhpcy5kb2N1bWVudGF0aW9uKSB7XG4gICAgICByZXR1cm4gaHRtbGA8Z3YtcmVzaXphYmxlLXZpZXdzIGRpcmVjdGlvbj1cImhvcml6b250YWxcIiBuby1vdmVyZmxvdz5cbiAgICAgICAgPGRpdiBzbG90PVwidG9wXCI+JHt0aGlzLl9yZW5kZXJGbG93U3RlcEZvcm0ocmVhZG9ubHlNb2RlKX08L2Rpdj5cbiAgICAgICAgPGRpdiBzbG90PVwiYm90dG9tXCI+XG4gICAgICAgICAgPGd2LWRvY3VtZW50YXRpb25cbiAgICAgICAgICAgIC50ZXh0PVwiJHt0aGlzLmRvY3VtZW50YXRpb24uY29udGVudH1cIlxuICAgICAgICAgICAgLmltYWdlPVwiJHt0aGlzLmRvY3VtZW50YXRpb24uaW1hZ2V9XCJcbiAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgQGd2LWRvY3VtZW50YXRpb246Y2xvc2U9XCIke3RoaXMuX29uQ2xvc2VEb2N1bWVudGF0aW9ufVwiXG4gICAgICAgICAgPjwvZ3YtZG9jdW1lbnRhdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2d2LXJlc2l6YWJsZS12aWV3cz5gO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kb2N1bWVudGF0aW9uKSB7XG4gICAgICByZXR1cm4gaHRtbGA8Z3YtZG9jdW1lbnRhdGlvblxuICAgICAgICAudGV4dD1cIiR7dGhpcy5kb2N1bWVudGF0aW9uLmNvbnRlbnR9XCJcbiAgICAgICAgLmltYWdlPVwiJHt0aGlzLmRvY3VtZW50YXRpb24uaW1hZ2V9XCJcbiAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgIEBndi1kb2N1bWVudGF0aW9uOmNsb3NlPVwiJHt0aGlzLl9vbkNsb3NlRG9jdW1lbnRhdGlvbn1cIlxuICAgICAgPjwvZ3YtZG9jdW1lbnRhdGlvbj5gO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fZmxvd1N0ZXBTY2hlbWEpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJGbG93U3RlcEZvcm0ocmVhZG9ubHlNb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgYDtcbiAgfVxuXG4gIF9nZXRGbG93U3RlcEZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGAjJHtGTE9XX1NURVBfRk9STV9JRH1gKTtcbiAgfVxuXG4gIF9vblJlc2V0Rmxvd1N0ZXAoKSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGbG93U3RlcCkge1xuICAgICAgZGVsZXRlIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5fdmFsdWVzO1xuICAgICAgdGhpcy5fZ2V0Rmxvd1N0ZXBGb3JtKCkucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICBfZ2VuZXJhdGVGbG93c0lkKGxpc3QsIGZvcmNlID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2VuZXJhdGVJZCgnZicsIGxpc3QsIGZvcmNlLCB0cnVlKTtcbiAgfVxuXG4gIF9nZW5lcmF0ZVBsYW5GbG93c0lkKHBsYW4sIGZvcmNlID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2VuZXJhdGVJZChwbGFuLmlkLCBwbGFuLmZsb3dzLCBmb3JjZSwgdHJ1ZSk7XG4gIH1cblxuICBfZ2VuZXJhdGVGbG93U3RlcElkKGZsb3dJZCwgZmxvd0tleSwgcG9zaXRpb24pIHtcbiAgICByZXR1cm4gYCR7Zmxvd0lkfV8ke2Zsb3dLZXl9XyR7cG9zaXRpb259YDtcbiAgfVxuXG4gIF9nZW5lcmF0ZUlkKHByZWZpeCwgbGlzdCwgZm9yY2UgPSBmYWxzZSwgaXNGbG93ID0gZmFsc2UpIHtcbiAgICBpZiAobGlzdCkge1xuICAgICAgcmV0dXJuIGxpc3QubWFwKChlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBfaWQgPSBgJHtwcmVmaXh9XyR7aW5kZXh9YDtcbiAgICAgICAgaWYgKGlzRmxvdykge1xuICAgICAgICAgIGlmIChlLnByZSkge1xuICAgICAgICAgICAgZS5wcmUuZm9yRWFjaCgoc3RlcCwgc3RlcEluZGV4KSA9PiAoc3RlcC5faWQgPSB0aGlzLl9nZW5lcmF0ZUZsb3dTdGVwSWQoX2lkLCAncHJlJywgc3RlcEluZGV4KSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZS5wb3N0KSB7XG4gICAgICAgICAgICBlLnBvc3QuZm9yRWFjaCgoc3RlcCwgc3RlcEluZGV4KSA9PiAoc3RlcC5faWQgPSB0aGlzLl9nZW5lcmF0ZUZsb3dTdGVwSWQoX2lkLCAncG9zdCcsIHN0ZXBJbmRleCkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcmNlIHx8IGUuX2lkID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5lLCBfaWQgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIGdldENoaWxkcmVuKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi5BcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1mbG93JykpLFxuICAgICAgLi4uQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3YtcmVzaXphYmxlLXZpZXdzJykpLFxuICAgIF07XG4gIH1cblxuICBhc3luYyBnZXRVcGRhdGVDb21wbGV0ZSgpIHtcbiAgICBhd2FpdCBzdXBlci5nZXRVcGRhdGVDb21wbGV0ZSgpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuZ2V0Q2hpbGRyZW4oKS5tYXAoKGUpID0+IGUudXBkYXRlQ29tcGxldGUpKTtcbiAgfVxuXG4gIHNob3VsZFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcykge1xuICAgIC8vIEp1c3QgcmVmcmVzaCBndi1mbG93IGNvbXBvbmVudHNcbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdfZHJhZ1BvbGljeScpKSB7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3YtZmxvdycpLmZvckVhY2goKGZsb3cpID0+IChmbG93LmRyYWdQb2xpY3kgPSB0aGlzLl9kcmFnUG9saWN5KSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ19kcm9wUG9saWN5JykpIHtcbiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1mbG93JykuZm9yRWFjaCgoZmxvdykgPT4gKGZsb3cuZHJvcFBvbGljeSA9IHRoaXMuX2Ryb3BQb2xpY3kpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnNob3VsZFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG4gIH1cblxuICB1cGRhdGVkKHByb3BzKSB7XG4gICAgaWYgKHByb3BzLmhhcygnZG9jdW1lbnRhdGlvbicpICYmIHRoaXMuZG9jdW1lbnRhdGlvbiAhPSBudWxsICYmIHRoaXMuc2VsZWN0ZWRGbG93c0lkLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW3RoaXMuc2VsZWN0ZWRGbG93c0lkWzBdXSk7XG4gICAgfVxuICB9XG5cbiAgX3JlbmRlckZsb3dTdGVwRm9ybShyZWFkb25seU1vZGUpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuX3ZhbHVlcyB8fCB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuX2luaXRpYWxWYWx1ZXM7XG4gICAgcmV0dXJuIGh0bWxgJHtjYWNoZShcbiAgICAgIHRoaXMuX2Zsb3dTdGVwU2NoZW1hICYmIHRoaXMuX2N1cnJlbnRGbG93U3RlcFxuICAgICAgICA/IGh0bWxgPGRpdiBjbGFzcz1cImZsb3ctc3RlcF9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxvdy1zdGVwX19mb3JtXCI+XG4gICAgICAgICAgICAgIDxndi1zY2hlbWEtZm9ybVxuICAgICAgICAgICAgICAgIC5pZD1cIiR7RkxPV19TVEVQX0ZPUk1fSUR9XCJcbiAgICAgICAgICAgICAgICAuc2NoZW1hPVwiJHt0aGlzLl9mbG93U3RlcFNjaGVtYX1cIlxuICAgICAgICAgICAgICAgIC5pY29uPVwiZGVzaWduOmVkaXRcIlxuICAgICAgICAgICAgICAgIGhhcy1oZWFkZXJcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZS1vbi1yZW5kZXJcbiAgICAgICAgICAgICAgICAudmFsdWVzPVwiJHt2YWx1ZXN9XCJcbiAgICAgICAgICAgICAgICAuZGlydHk9XCIke3RoaXMuX2N1cnJlbnRGbG93U3RlcC5fdmFsdWVzICE9IG51bGx9XCJcbiAgICAgICAgICAgICAgICA/cmVhZG9ubHk9XCIke3JlYWRvbmx5TW9kZX1cIlxuICAgICAgICAgICAgICAgIHNjcm9sbGFibGVcbiAgICAgICAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06Y2hhbmdlPVwiJHt0aGlzLl9vbkNoYW5nZUZsb3dTdGVwfVwiXG4gICAgICAgICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOnJlc2V0PVwiJHt0aGlzLl9vblJlc2V0Rmxvd1N0ZXB9XCJcbiAgICAgICAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06ZmV0Y2gtcmVzb3VyY2VzPVwiJHt0aGlzLl9vbkZldGNoUmVzb3VyY2VzfVwiXG4gICAgICAgICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOnN1Ym1pdD1cIiR7dGhpcy5fb25TdWJtaXRGbG93U3RlcH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBzbG90PVwidGl0bGVcIiBjbGFzcz1cImZsb3ctc3RlcF9fZm9ybS10aXRsZVwiPiR7dGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBzbG90PVwiaGVhZGVyLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cImdlbmVyYWw6Y2xvc2VcIlxuICAgICAgICAgICAgICAgICAgb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICAgICAgICBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vbkNsb3NlRmxvd1N0ZXBGb3JtfVwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIkNsb3NlIChlc2MpXCJcbiAgICAgICAgICAgICAgICA+PC9ndi1idXR0b24+XG4gICAgICAgICAgICAgICAgPGd2LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgc2xvdD1cImhlYWRlci1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGljb249XCJob21lOmJvb2tcIlxuICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLmRvY3VtZW50YXRpb24gIT0gbnVsbH1cIlxuICAgICAgICAgICAgICAgICAgb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICAgICAgICBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vbk9wZW5Eb2N1bWVudGF0aW9uRnJvbUZvcm19XCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiT3BlbiBkb2N1bWVudGF0aW9uXCJcbiAgICAgICAgICAgICAgICA+PC9ndi1idXR0b24+XG4gICAgICAgICAgICAgIDwvZ3Ytc2NoZW1hLWZvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5gXG4gICAgICAgIDogJycsXG4gICAgKX1gO1xuICB9XG5cbiAgX29uQ2xvc2VEb2N1bWVudGF0aW9uKCkge1xuICAgIHRoaXMuZG9jdW1lbnRhdGlvbiA9IG51bGw7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGbG93U3RlcCA9PSBudWxsKSB7XG4gICAgICB0aGlzLl9tYXhpbWl6ZVRvcFZpZXcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2d2LXBvbGljeS1zdHVkaW86a2VlcC1kb2N1bWVudGF0aW9uLWNsb3NlJywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgX29uRGVsZXRlRmxvdyh7IGRldGFpbCB9KSB7XG4gICAgY29uc3QgZmxvd0lkID0gZGV0YWlsLmNvbnRlbnQuX2lkO1xuICAgIGNvbnN0IHsgZmxvd3MgfSA9IHRoaXMuX2ZpbmRGbG93Q29sbGVjdGlvbihmbG93SWQpO1xuICAgIGNvbnN0IGZsb3cgPSBmbG93cy5maW5kKChmbG93KSA9PiBmbG93Ll9pZCA9PT0gZmxvd0lkKTtcbiAgICB0aGlzLl9kZWxldGVGbG93KGZsb3dzLCBmbG93KTtcbiAgfVxuXG4gIGdldCBkZWZpbmVkRmxvd3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmluaXRpb24gJiYgdGhpcy5fZGVmaW5pdGlvbi5mbG93cyA/IHRoaXMuX2RlZmluaXRpb24uZmxvd3MgOiBbXTtcbiAgfVxuXG4gIGdldCBkZWZpbmVkUGxhbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmluaXRpb24gJiYgdGhpcy5fZGVmaW5pdGlvbi5wbGFucyA/IHRoaXMuX2RlZmluaXRpb24ucGxhbnMgOiBbXTtcbiAgfVxuXG4gIGdldCBkZWZpbmVkUmVzb3VyY2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZpbml0aW9uICYmIHRoaXMuX2RlZmluaXRpb24ucmVzb3VyY2VzID8gdGhpcy5fZGVmaW5pdGlvbi5yZXNvdXJjZXMgOiBbXTtcbiAgfVxuXG4gIGdldCBkZWZpbmVkUHJvcGVydGllcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbiAmJiB0aGlzLl9kZWZpbml0aW9uLnByb3BlcnRpZXMgPyB0aGlzLl9kZWZpbml0aW9uLnByb3BlcnRpZXMgOiBbXTtcbiAgfVxuXG4gIGFzeW5jIF9vbkR1cGxpY2F0ZUZsb3coeyBkZXRhaWwgfSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9hc2tUb1ZhbGlkYXRlRm9ybXMoKTtcblxuICAgICAgY29uc3QgZmxvd0lkID0gZGV0YWlsLmNvbnRlbnQuX2lkO1xuICAgICAgY29uc3QgeyBwbGFuLCBmbG93cyB9ID0gdGhpcy5fZmluZEZsb3dDb2xsZWN0aW9uKGZsb3dJZCk7XG4gICAgICB0aGlzLl9hZGRGbG93KGZsb3dzLCB0aGlzLl9maW5kRmxvd0J5SWQoZmxvd0lkKSk7XG4gICAgICBpZiAocGxhbiAhPSBudWxsKSB7XG4gICAgICAgIGxldCBwbGFuSW5kZXggPSBudWxsO1xuICAgICAgICB0aGlzLmRlZmluZWRQbGFucy5maW5kKChwLCBpKSA9PiB7XG4gICAgICAgICAgaWYgKHAuaWQgPT09IHBsYW4uaWQpIHtcbiAgICAgICAgICAgIHBsYW5JbmRleCA9IGk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgcGxhbi5mbG93cyA9IGZsb3dzO1xuICAgICAgICB0aGlzLmRlZmluZWRQbGFuc1twbGFuSW5kZXhdLmZsb3dzID0gdGhpcy5fZ2VuZXJhdGVQbGFuRmxvd3NJZChwbGFuLCB0cnVlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhbdGhpcy5kZWZpbmVkUGxhbnNbcGxhbkluZGV4XS5mbG93c1tmbG93cy5sZW5ndGggLSAxXS5faWRdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RlZmluaXRpb24uZmxvd3MgPSB0aGlzLl9nZW5lcmF0ZUZsb3dzSWQodGhpcy5fZGVmaW5pdGlvbi5mbG93cyk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW3RoaXMuX2RlZmluaXRpb24uZmxvd3NbdGhpcy5fZGVmaW5pdGlvbi5mbG93cy5sZW5ndGggLSAxXS5faWRdKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIF9vbkNoYW5nZUZsb3dTdGF0ZSh7IGRldGFpbCB9KSB7XG4gICAgY29uc3QgZmxvdyA9IHRoaXMuX2ZpbmRGbG93QnlJZChkZXRhaWwuY29udGVudC5faWQpO1xuICAgIGZsb3cuZW5hYmxlZCA9IGRldGFpbC5lbmFibGVkO1xuICAgIGZsb3cuX2RpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgX29uQWRkRmxvd1BsYW4oeyBkZXRhaWwgfSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9hc2tUb1ZhbGlkYXRlRm9ybXMoKTtcbiAgICAgIHRoaXMuX2FkZEZsb3codGhpcy5kZWZpbmVkUGxhbnNbZGV0YWlsLnBsYW5JbmRleF0uZmxvd3MpO1xuICAgICAgdGhpcy5kZWZpbmVkUGxhbnNbZGV0YWlsLnBsYW5JbmRleF0uZmxvd3MgPSB0aGlzLl9nZW5lcmF0ZVBsYW5GbG93c0lkKHRoaXMuZGVmaW5lZFBsYW5zW2RldGFpbC5wbGFuSW5kZXhdKTtcbiAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW3RoaXMuZGVmaW5lZFBsYW5zW2RldGFpbC5wbGFuSW5kZXhdLmZsb3dzW3RoaXMuZGVmaW5lZFBsYW5zW2RldGFpbC5wbGFuSW5kZXhdLmZsb3dzLmxlbmd0aCAtIDFdLl9pZF0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX29uQWRkRmxvdygpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fYXNrVG9WYWxpZGF0ZUZvcm1zKCk7XG5cbiAgICAgIHRoaXMuX2FkZEZsb3codGhpcy5fZGVmaW5pdGlvbi5mbG93cyk7XG4gICAgICB0aGlzLl9kZWZpbml0aW9uLmZsb3dzID0gdGhpcy5fZ2VuZXJhdGVGbG93c0lkKHRoaXMuX2RlZmluaXRpb24uZmxvd3MpO1xuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhbdGhpcy5fZGVmaW5pdGlvbi5mbG93c1t0aGlzLl9kZWZpbml0aW9uLmZsb3dzLmxlbmd0aCAtIDFdLl9pZF0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgX2FkZEZsb3coY29sbGVjdGlvbiwgZHVwbGljYXRlID0gbnVsbCkge1xuICAgIGNvbnN0IGZsb3cgPVxuICAgICAgZHVwbGljYXRlID09IG51bGxcbiAgICAgICAgPyB0aGlzLl9jcmVhdGVGbG93RnJvbVNjaGVtYSgpXG4gICAgICAgIDoge1xuICAgICAgICAgICAgLi4uZHVwbGljYXRlLFxuICAgICAgICAgICAgX2lkOiBudWxsLFxuICAgICAgICAgICAgLy8gcmVzZXQgdGhlIGlkIHRvIGF2b2lkIGlzc3VlIHdpdGggQU0gdGhhdCBwZXJzaXN0cyB0aGUgSURcbiAgICAgICAgICAgIGlkOiBudWxsLFxuICAgICAgICAgICAgX2RpcnR5OiB0cnVlLFxuICAgICAgICAgIH07XG5cbiAgICBjb2xsZWN0aW9uLnB1c2goZmxvdyk7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgfVxuXG4gIF9jcmVhdGVGbG93RnJvbVNjaGVtYSgpIHtcbiAgICBjb25zdCBuZXdGbG93ID0ge1xuICAgICAgbmFtZTogJycsXG4gICAgICBwcmU6IFtdLFxuICAgICAgcG9zdDogW10sXG4gICAgICBfZGlydHk6IHRydWUsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLl9pbnN0YW50aWF0ZSh0aGlzLmZsb3dTY2hlbWEucHJvcGVydGllcywgbmV3Rmxvdyk7XG4gIH1cblxuICBfaW5zdGFudGlhdGUocHJvcGVydGllc0RlZmluaXRpb24sIGluaXRpYXRvciA9IHt9KSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSB7IC4uLmluaXRpYXRvciB9O1xuXG4gICAgaWYgKHByb3BlcnRpZXNEZWZpbml0aW9uKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzRGVmaW5pdGlvbikpIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSBwcm9wZXJ0aWVzRGVmaW5pdGlvbltrZXldO1xuXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHByb3BlcnR5W2tleV0gPSB0aGlzLl9pbnN0YW50aWF0ZShlbnRyeS5wcm9wZXJ0aWVzLCAoaW5pdGlhdG9yID0ge30pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50cnkuZGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcHJvcGVydHlba2V5XSA9IGVudHJ5LmRlZmF1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZW50cnkudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBwcm9wZXJ0eVtrZXldID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH1cblxuICBfZGVsZXRlRmxvdyhjb2xsZWN0aW9uLCBmbG93KSB7XG4gICAgY29uc3QgaW5kZXggPSBjb2xsZWN0aW9uLmluZGV4T2YoZmxvdyk7XG4gICAgY29sbGVjdGlvbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGNvbnN0IHNlbGVjdGVkRmxvd3MgPSB0aGlzLnNlbGVjdGVkRmxvd3NJZC5maWx0ZXIoKGZsb3dJZCkgPT4gZmxvd0lkICE9PSBmbG93Ll9pZCk7XG4gICAgaWYgKHNlbGVjdGVkRmxvd3MubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKHNlbGVjdGVkRmxvd3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3RGaXJzdEZsb3codHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2NoYW5nZVRhYignZGVzaWduJyk7XG4gICAgdGhpcy5fcmVmcmVzaCgpO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICBfZmluZEZsb3dJbmRleChsaXN0LCBpZCkge1xuICAgIGxldCBpbmRleCA9IG51bGw7XG4gICAgbGlzdC5maW5kKChmLCBpKSA9PiB7XG4gICAgICBpZiAoZi5faWQgPT09IGlkKSB7XG4gICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgYXN5bmMgX29uUmVvcmRlckZsb3dzKHsgZGV0YWlsOiB7IHBsYW4gfSB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Fza1RvVmFsaWRhdGVGb3JtcygpO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIGlmIChwbGFuICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbmV3T3JkZXIgPSB0aGlzLl9nZW5lcmF0ZVBsYW5GbG93c0lkKHBsYW4sIHRydWUpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZsb3dzSWQpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZsb3dzSWQubWFwKChmbG93SWQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9maW5kRmxvd0luZGV4KHBsYW4uZmxvd3MsIGZsb3dJZCk7XG4gICAgICAgICAgICAgIHJldHVybiBpbmRleCAhPSBudWxsID8gbmV3T3JkZXJbaW5kZXhdLl9pZCA6IGZsb3dJZDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcGxhbi5mbG93cyA9IG5ld09yZGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3T3JkZXIgPSB0aGlzLl9nZW5lcmF0ZUZsb3dzSWQodGhpcy5fZGVmaW5pdGlvbi5mbG93cywgdHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvd3NJZCkge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxvd3NJZC5tYXAoKGZsb3dJZCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2ZpbmRGbG93SW5kZXgodGhpcy5fZGVmaW5pdGlvbi5mbG93cywgZmxvd0lkKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGluZGV4ICE9IG51bGwgPyBuZXdPcmRlcltpbmRleF0uX2lkIDogZmxvd0lkO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZWZpbml0aW9uLmZsb3dzID0gbmV3T3JkZXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgX29uU2VhcmNoUG9saWN5KHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLl9zZWFyY2hQb2xpY3lRdWVyeSA9IGRldGFpbDtcbiAgfVxuXG4gIF9vbkNsZWFyUG9saWN5KCkge1xuICAgIHRoaXMuX3NlYXJjaFBvbGljeVF1ZXJ5ID0gbnVsbDtcbiAgfVxuXG4gIF9vblNlYXJjaEZsb3dzKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLl9zZWFyY2hGbG93UXVlcnkgPSBkZXRhaWw7XG4gIH1cblxuICBfb25DbGVhckZsb3dzKCkge1xuICAgIHRoaXMuX3NlYXJjaEZsb3dRdWVyeSA9IG51bGw7XG4gIH1cblxuICBhc3luYyBfb25SZXNldEFsbCgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0oKTtcbiAgICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZXBDbG9uZSh0aGlzLl9pbml0aWFsRGVmaW5pdGlvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgX2ZpbHRlck5vdFZhbGlkU3RlcChzdGVwKSB7XG4gICAgcmV0dXJuIHN0ZXAuX25ldyAhPT0gdHJ1ZTtcbiAgfVxuXG4gIF9yZW1vdmVQcml2YXRlUHJvcGVydGllcyhvKSB7XG4gICAgY29uc3QgY29weSA9IHsgLi4ubyB9O1xuICAgIE9iamVjdC5rZXlzKG8pXG4gICAgICAuZmlsdGVyKChrZXkpID0+IGtleS5zdGFydHNXaXRoKCdfJykpXG4gICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGRlbGV0ZSBjb3B5W2tleV07XG4gICAgICB9KTtcbiAgICByZXR1cm4gY29weTtcbiAgfVxuXG4gIF9zdWJtaXRPckNvbmZpcm1Gb3JtcygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1zY2hlbWEtZm9ybScpXVxuICAgICAgLmZpbHRlcigoZm9ybSkgPT4ge1xuICAgICAgICBjb25zdCBpc1ZhbGlkID0gZm9ybS5pc1ZhbGlkKCk7XG4gICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgZm9ybS5zdWJtaXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWlzVmFsaWQ7XG4gICAgICB9KVxuICAgICAgLm1hcCgoZm9ybSkgPT4gZm9ybS5jb25maXJtKCkpO1xuICB9XG5cbiAgZ2V0UHJvcGVydGllc0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi1wcm9wZXJ0aWVzJyk7XG4gIH1cblxuICBhc3luYyBfY2hlY2tDdXJyZW50Rmxvd1N0ZXAoKSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGbG93U3RlcCAmJiB0aGlzLnNlbGVjdGVkRmxvd3NJZCkge1xuICAgICAgY29uc3QgY2xvc2VQcm9taXNlcyA9IHRoaXMuc2VsZWN0ZWRGbG93c0lkXG4gICAgICAgIC5tYXAoKGZsb3dJZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZsb3cgPSB0aGlzLl9maW5kRmxvd0J5SWQoZmxvd0lkKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50U3RlcCA9IFsuLi5mbG93LnByZSwgLi4uZmxvdy5wb3N0XS5maW5kKChzdGVwKSA9PiBzdGVwLl9pZCA9PT0gdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAuX2lkKTtcbiAgICAgICAgICBpZiAoY3VycmVudFN0ZXAgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlRmxvd1N0ZXBGb3JtKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigocCkgPT4gcCAhPT0gbnVsbCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoY2xvc2VQcm9taXNlcyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHNhdmVkKCkge1xuICAgIGlmICh0aGlzLmlzRGlydHkpIHtcbiAgICAgIHRoaXMuX2luaXRpYWxEZWZpbml0aW9uID0gZGVlcENsb25lKHRoaXMuX2RlZmluaXRpb25TYXZlZCk7XG4gICAgICB0aGlzLl9kZWZpbml0aW9uID0gZGVlcENsb25lKHRoaXMuX2RlZmluaXRpb25TYXZlZCk7XG4gICAgICB0aGlzLl9kZWZpbml0aW9uU2F2ZWQgPSBudWxsO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGVja0N1cnJlbnRGbG93U3RlcCgpO1xuICAgICAgdGhpcy5kZWZpbmVkUGxhbnMuZm9yRWFjaCgocGxhbikgPT4ge1xuICAgICAgICBwbGFuLmZsb3dzLmZvckVhY2goKGZsb3cpID0+IChmbG93Ll9kaXJ0eSA9IGZhbHNlKSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGVmaW5lZEZsb3dzLmZvckVhY2goKGZsb3cpID0+IChmbG93Ll9kaXJ0eSA9IGZhbHNlKSk7XG4gICAgICB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaCgoZSkgPT4gZS5yZXF1ZXN0VXBkYXRlKCkpO1xuICAgIH1cbiAgfVxuXG4gIF9idWlsZERlZmluaXRpb25Ub1NhdmUoKSB7XG4gICAgLy8gQ29weSBkZWZpbml0aW9uIGFuZCByZW1vdmUgaW52YWxpZCBzdGVwXG4gICAgLy8gS2VlcCBwcml2YXRlIHByb3BlcnRpZXMgbGlrZSBfaWQgYW5kIG90aGVycyBzdHVmZiB1c2VmdWwgZm9yIHJlbmRlclxuICAgIGNvbnN0IGZsb3dzID0gdGhpcy5fZGVmaW5pdGlvbi5mbG93cy5tYXAoKGZsb3cpID0+IHtcbiAgICAgIGZsb3cucHJlID0gZmxvdy5wcmUuZmlsdGVyKHRoaXMuX2ZpbHRlck5vdFZhbGlkU3RlcCk7XG4gICAgICBmbG93LnBvc3QgPSBmbG93LnBvc3QuZmlsdGVyKHRoaXMuX2ZpbHRlck5vdFZhbGlkU3RlcCk7XG4gICAgICByZXR1cm4gZmxvdztcbiAgICB9KTtcblxuICAgIGxldCBkZWZpbml0aW9uID0geyAuLi50aGlzLl9kZWZpbml0aW9uLCBmbG93cyB9O1xuXG4gICAgaWYgKHRoaXMuX2RlZmluaXRpb24ucGxhbnMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgcGxhbnMgPSB0aGlzLl9kZWZpbml0aW9uLnBsYW5zLm1hcCgocGxhbikgPT4ge1xuICAgICAgICBjb25zdCBmbG93cyA9IHBsYW4uZmxvd3MubWFwKChmbG93KSA9PiB7XG4gICAgICAgICAgZmxvdy5wcmUgPSBmbG93LnByZS5maWx0ZXIodGhpcy5fZmlsdGVyTm90VmFsaWRTdGVwKTtcbiAgICAgICAgICBmbG93LnBvc3QgPSBmbG93LnBvc3QuZmlsdGVyKHRoaXMuX2ZpbHRlck5vdFZhbGlkU3RlcCk7XG4gICAgICAgICAgcmV0dXJuIGZsb3c7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyAuLi5wbGFuLCBmbG93cyB9O1xuICAgICAgfSk7XG4gICAgICBkZWZpbml0aW9uID0geyAuLi5kZWZpbml0aW9uLCBwbGFucyB9O1xuICAgIH1cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIF9idWlsZERlZmluaXRpb25Ub1NlbmQoZGVmaW5pdGlvblRvU2F2ZSkge1xuICAgIC8vIENvcHkgZGVmaW5pdGlvbiBhbmQgcmVtb3ZlIGFsbCBwcml2YXRlIHByb3BlcnRpZXNcbiAgICBjb25zdCBmbG93cyA9IGRlZmluaXRpb25Ub1NhdmUuZmxvd3MubWFwKChmKSA9PiB7XG4gICAgICBjb25zdCBmbG93ID0gdGhpcy5fcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMoZik7XG4gICAgICBmbG93LnByZSA9IGZsb3cucHJlLm1hcCh0aGlzLl9yZW1vdmVQcml2YXRlUHJvcGVydGllcyk7XG4gICAgICBmbG93LnBvc3QgPSBmbG93LnBvc3QubWFwKHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKTtcbiAgICAgIHJldHVybiBmbG93O1xuICAgIH0pO1xuXG4gICAgbGV0IGRlZmluaXRpb24gPSB7IC4uLnRoaXMuX2RlZmluaXRpb24sIGZsb3dzIH07XG4gICAgaWYgKHRoaXMuX2RlZmluaXRpb24ucGxhbnMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgcGxhbnMgPSBkZWZpbml0aW9uVG9TYXZlLnBsYW5zLm1hcCgocGxhbikgPT4ge1xuICAgICAgICBjb25zdCBmbG93cyA9IHBsYW4uZmxvd3MubWFwKChmKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmxvdyA9IHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKGYpO1xuICAgICAgICAgIGZsb3cucHJlID0gZmxvdy5wcmUubWFwKHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKTtcbiAgICAgICAgICBmbG93LnBvc3QgPSBmbG93LnBvc3QubWFwKHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKTtcbiAgICAgICAgICByZXR1cm4gZmxvdztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IC4uLnBsYW4sIGZsb3dzIH07XG4gICAgICB9KTtcbiAgICAgIGRlZmluaXRpb24gPSB7IC4uLmRlZmluaXRpb24sIHBsYW5zIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RlZmluaXRpb24ucHJvcGVydGllcyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5fZGVmaW5pdGlvbi5wcm9wZXJ0aWVzLm1hcCh0aGlzLl9yZW1vdmVQcml2YXRlUHJvcGVydGllcyk7XG4gICAgICBkZWZpbml0aW9uID0geyAuLi5kZWZpbml0aW9uLCBwcm9wZXJ0aWVzIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RlZmluaXRpb24ucmVzb3VyY2VzICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlcyA9IHRoaXMuX2RlZmluaXRpb24ucmVzb3VyY2VzLm1hcCh0aGlzLl9yZW1vdmVQcml2YXRlUHJvcGVydGllcyk7XG4gICAgICBkZWZpbml0aW9uID0geyAuLi5kZWZpbml0aW9uLCByZXNvdXJjZXMgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIF9vblNhdmVBbGwoKSB7XG4gICAgaWYgKHRoaXMuaGFzUHJvcGVydGllcykge1xuICAgICAgdGhpcy5nZXRQcm9wZXJ0aWVzRWxlbWVudCgpLnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIFByb21pc2UuYWxsKHRoaXMuX3N1Ym1pdE9yQ29uZmlybUZvcm1zKCkpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2RlZmluaXRpb25TYXZlZCA9IHRoaXMuX2J1aWxkRGVmaW5pdGlvblRvU2F2ZSgpO1xuICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gdGhpcy5fYnVpbGREZWZpbml0aW9uVG9TZW5kKHRoaXMuX2RlZmluaXRpb25TYXZlZCk7XG4gICAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ3NhdmUnLCB7IGRlZmluaXRpb24sIHNlcnZpY2VzOiB0aGlzLnNlcnZpY2VzIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtwb2xpY3ktc3R1ZGlvXSBFcnJvciBvbiBzYXZlYCwgZXJyKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgX29uRGVidWcocmVxdWVzdEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaGFzUHJvcGVydGllcykge1xuICAgICAgdGhpcy5nZXRQcm9wZXJ0aWVzRWxlbWVudCgpLnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIFByb21pc2UuYWxsKHRoaXMuX3N1Ym1pdE9yQ29uZmlybUZvcm1zKCkpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLl9idWlsZERlZmluaXRpb25Ub1NlbmQodGhpcy5fYnVpbGREZWZpbml0aW9uVG9TYXZlKCkpO1xuICAgICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdkZWJ1ZycsIHsgZGVmaW5pdGlvbiwgc2VydmljZXM6IHRoaXMuc2VydmljZXMsIHJlcXVlc3Q6IHJlcXVlc3RFdmVudC5kZXRhaWwucmVxdWVzdCB9KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbcG9saWN5LXN0dWRpb10gRXJyb3Igb24gZGVidWdgLCBlcnIpO1xuICAgICAgfSk7XG4gIH1cblxuICBnZXQgZmlsdGVyZWRGbG93cygpIHtcbiAgICBpZiAodGhpcy5fZmxvd0ZpbHRlci5sZW5ndGggPT09IDAgfHwgdGhpcy5fZmxvd0ZpbHRlci5pbmNsdWRlcygnYXBpJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmluZWRGbG93cztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgZmlsdGVyZWRQbGFucygpIHtcbiAgICBpZiAodGhpcy5fZmxvd0ZpbHRlci5sZW5ndGggPT09IDAgfHwgdGhpcy5fZmxvd0ZpbHRlci5pbmNsdWRlcygncGxhbicpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZpbmVkUGxhbnM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgX29uRmlsdGVyRmxvd3MoeyBkZXRhaWwgfSkge1xuICAgIGlmICh0aGlzLl9mbG93RmlsdGVyLmluY2x1ZGVzKGRldGFpbC5pZCkpIHtcbiAgICAgIHRoaXMuX2Zsb3dGaWx0ZXIgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZmxvd0ZpbHRlciA9IFtkZXRhaWwuaWRdO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRGaWx0ZXJlZFBvbGljaWVzKCkge1xuICAgIGlmICh0aGlzLl9wb2xpY3lGaWx0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMucG9saWNpZXMuZmlsdGVyKChwb2xpY3kpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAocG9saWN5Lm9uUmVxdWVzdCAmJiB0aGlzLl9wb2xpY3lGaWx0ZXIuaW5jbHVkZXMoJ29uUmVxdWVzdCcpKSB8fCAocG9saWN5Lm9uUmVzcG9uc2UgJiYgdGhpcy5fcG9saWN5RmlsdGVyLmluY2x1ZGVzKCdvblJlc3BvbnNlJykpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucG9saWNpZXM7XG4gIH1cblxuICBfb25GaWx0ZXJQb2xpY2llcyh7IGRldGFpbCB9KSB7XG4gICAgaWYgKHRoaXMuX3BvbGljeUZpbHRlci5pbmNsdWRlcyhkZXRhaWwuaWQpKSB7XG4gICAgICB0aGlzLl9wb2xpY3lGaWx0ZXIgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcG9saWN5RmlsdGVyID0gW2RldGFpbC5pZF07XG4gICAgfVxuICB9XG5cbiAgX3JlbmRlckRlc2lnbihyZWFkb25seU1vZGUpIHtcbiAgICByZXR1cm4gaHRtbGAgPGRpdiBpZD1cImRlc2lnblwiIHNsb3Q9XCJjb250ZW50XCIgY2xhc3M9XCJkZXNpZ25cIj5cbiAgICAgIDxndi1yZXNpemFibGUtdmlld3Mgbm8tb3ZlcmZsb3c+XG4gICAgICAgIDxkaXYgc2xvdD1cInRvcFwiPiR7dGhpcy5fcmVuZGVyRmxvdygwLCB0cnVlLCByZWFkb25seU1vZGUpfTwvZGl2PlxuXG4gICAgICAgIDxkaXYgc2xvdD1cImJvdHRvbVwiPlxuICAgICAgICAgICR7dGhpcy5fcmVuZGVyRmxvdygxLCBmYWxzZSwgcmVhZG9ubHlNb2RlKX0gJHt0aGlzLl9yZW5kZXJQb2xpY3kocmVhZG9ubHlNb2RlKX0gJHt0aGlzLl9yZW5kZXJGbG93Rm9ybShyZWFkb25seU1vZGUpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZ3YtcmVzaXphYmxlLXZpZXdzPlxuICAgICAgJHtyZWFkb25seU1vZGUgIT09IHRydWVcbiAgICAgICAgPyBodG1sYDxndi1wb2xpY3ktc3R1ZGlvLW1lbnVcbiAgICAgICAgICAgIGNsYXNzPVwicmlnaHQtbWVudVwiXG4gICAgICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgICAgIC5wb2xpY2llcz1cIiR7dGhpcy5fZ2V0RmlsdGVyZWRQb2xpY2llcygpfVwiXG4gICAgICAgICAgICAuc2VsZWN0ZWRJZHM9XCIke1t0aGlzLl9jdXJyZW50UG9saWN5SWRdfVwiXG4gICAgICAgICAgICAucXVlcnk9XCIke3RoaXMuX3NlYXJjaFBvbGljeVF1ZXJ5fVwiXG4gICAgICAgICAgICA/aGFzLXBvbGljeS1maWx0ZXI9XCIke3RoaXMuX3BvbGljeUZpbHRlck9wdGlvbnMgIT0gbnVsbH1cIlxuICAgICAgICAgICAgP3JlYWRvbmx5PVwiJHtyZWFkb25seU1vZGV9XCJcbiAgICAgICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6dGFyZ2V0LXBvbGljeT1cIiR7dGhpcy5fb25UYXJnZXRQb2xpY3l9XCJcbiAgICAgICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6ZmV0Y2gtZG9jdW1lbnRhdGlvbj1cIiR7dGhpcy5fb25PcGVuRG9jdW1lbnRhdGlvbkZyb21NZW51fVwiXG4gICAgICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OmRyYWdlbmQtcG9saWN5PVwiJHt0aGlzLl9vbkRyYWdFbmRQb2xpY3l9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IHNsb3Q9XCJoZWFkZXJcIiBjbGFzcz1cInNlYXJjaC1wb2xpY2llc1wiPlxuICAgICAgICAgICAgICAke3RoaXMuX3BvbGljeUZpbHRlck9wdGlvbnMgIT0gbnVsbFxuICAgICAgICAgICAgICAgID8gaHRtbGA8Z3Ytb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgICAgICAgICAub3B0aW9ucz1cIiR7dGhpcy5fcG9saWN5RmlsdGVyT3B0aW9uc31cIlxuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICBvdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgICAudmFsdWU9XCIke3RoaXMuX3BvbGljeUZpbHRlcn1cIlxuICAgICAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgICAgICBAZ3Ytb3B0aW9uOnNlbGVjdD1cIiR7dGhpcy5fb25GaWx0ZXJQb2xpY2llc31cIlxuICAgICAgICAgICAgICAgICAgPjwvZ3Ytb3B0aW9uPmBcbiAgICAgICAgICAgICAgICA6ICcnfVxuICAgICAgICAgICAgICA8Z3YtaW5wdXRcbiAgICAgICAgICAgICAgICBpZD1cInNlYXJjaC1wb2xpY3lcIlxuICAgICAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIHBvbGljaWVzIChTaGlmdCArIEN0cmwgKyBTcGFjZSlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICAgICAgQGd2LWlucHV0OmlucHV0PVwiJHt0aGlzLl9vblNlYXJjaFBvbGljeX1cIlxuICAgICAgICAgICAgICAgIEBndi1pbnB1dDpjbGVhcj1cIiR7dGhpcy5fb25DbGVhclBvbGljeX1cIlxuICAgICAgICAgICAgICA+PC9ndi1pbnB1dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZ3YtcG9saWN5LXN0dWRpby1tZW51PmBcbiAgICAgICAgOiAnJ31cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgX3JlbmRlckRlYnVnKCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5kZWJ1Z1Jlc3BvbnNlID8gdGhpcy5kZWJ1Z1Jlc3BvbnNlLnJlc3BvbnNlIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IHRoaXMuZGVidWdSZXNwb25zZSA/IHRoaXMuZGVidWdSZXNwb25zZS5pc0xvYWRpbmcgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuZGVidWdSZXNwb25zZSAmJiB0aGlzLmRlYnVnUmVzcG9uc2UucmVxdWVzdCA/IHRoaXMuZGVidWdSZXNwb25zZS5yZXF1ZXN0LnBhdGggOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5kZWJ1Z1Jlc3BvbnNlICYmIHRoaXMuZGVidWdSZXNwb25zZS5yZXF1ZXN0ID8gdGhpcy5kZWJ1Z1Jlc3BvbnNlLnJlcXVlc3QubWV0aG9kIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBodG1sYDxndi1odHRwLWNsaWVudFxuICAgICAgaWQ9XCJkZWJ1Z1wiXG4gICAgICBzbG90PVwiY29udGVudFwiXG4gICAgICBjbGFzcz1cImRlYnVnXCJcbiAgICAgIEBndi1odHRwLWNsaWVudDpzZW5kPVwiJHt0aGlzLl9vbkRlYnVnfVwiXG4gICAgICAucmVzcG9uc2U9XCIke3Jlc3BvbnNlfVwiXG4gICAgICAucGF0aD1cIiR7cGF0aH1cIlxuICAgICAgLm1ldGhvZD1cIiR7bWV0aG9kfVwiXG4gICAgICA/bG9hZGluZz1cIiR7aXNMb2FkaW5nfVwiXG4gICAgPlxuICAgIDwvZ3YtaHR0cC1jbGllbnQ+YDtcbiAgfVxuXG4gIF9yZW5kZXJDb25maWd1cmF0aW9uRm9ybShyZWFkb25seU1vZGUpIHtcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uU2NoZW1hKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBkZWVwQ2xvbmUodGhpcy5fZGVmaW5pdGlvbik7XG4gICAgICByZXR1cm4gaHRtbGAgPGRpdiBpZD1cInNldHRpbmdzXCIgc2xvdD1cImNvbnRlbnRcIiBjbGFzcz1cImFwaS1zZXR0aW5nc1wiIEBkcmFnb3Zlcj1cIiR7dGhpcy5fb25EZXNpZ259XCI+XG4gICAgICAgIDxndi1zY2hlbWEtZm9ybVxuICAgICAgICAgIC5zY2hlbWE9XCIke3RoaXMuY29uZmlndXJhdGlvblNjaGVtYX1cIlxuICAgICAgICAgIGlkPVwiYXBpLXNldHRpbmdzLWZvcm1cIlxuICAgICAgICAgIC52YWx1ZXM9XCIke3ZhbHVlc31cIlxuICAgICAgICAgIGhhcy1oZWFkZXJcbiAgICAgICAgICBoYXMtZm9vdGVyXG4gICAgICAgICAgc2Nyb2xsYWJsZVxuICAgICAgICAgID9yZWFkb25seT1cIiR7cmVhZG9ubHlNb2RlfVwiXG4gICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOmNhbmNlbD1cIiR7dGhpcy5fb25DYW5jZWxGbG93TW9kZX1cIlxuICAgICAgICAgIEBndi1zY2hlbWEtZm9ybTpzdWJtaXQ9XCIke3RoaXMuX29uU3VibWl0Rmxvd01vZGV9XCJcbiAgICAgICAgPlxuICAgICAgICAgICR7IXRoaXMuY29uZmlndXJhdGlvbkluZm9ybWF0aW9uXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6IGh0bWxgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvblwiIHNsb3Q9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPGd2LWljb24gY2xhc3M9XCJhcGktc2V0dGluZ3MtaW5mb3JtYXRpb25fX2ljb25cIiB0aXRsZT1cIkluZm9cIiBzaGFwZT1cImNvZGU6aW5mb1wiPjwvZ3YtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxibG9ja3F1b3RlIGNsYXNzPVwiYXBpLXNldHRpbmdzLWluZm9ybWF0aW9uX19ibG9ja3F1b3RlXCI+JHt0aGlzLmNvbmZpZ3VyYXRpb25JbmZvcm1hdGlvbn08L2Jsb2NrcXVvdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIGB9XG4gICAgICAgIDwvZ3Ytc2NoZW1hLWZvcm0+XG4gICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbGBgO1xuICB9XG5cbiAgX3JlbmRlckZsb3dGb3JtKHJlYWRvbmx5TW9kZSkge1xuICAgIGlmICh0aGlzLmZsb3dTY2hlbWEgJiYgdGhpcy5fZmxvd1N0ZXBTY2hlbWEgPT0gbnVsbCAmJiB0aGlzLmRvY3VtZW50YXRpb24gPT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkRmxvd3NJZC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZsb3cgPSB0aGlzLmdldFNlbGVjdGVkRmxvdygpO1xuICAgICAgaWYgKGZsb3cpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZGVlcENsb25lKGZsb3cpO1xuICAgICAgICByZXR1cm4gaHRtbGA8ZGl2IHNsb3Q9XCJjb250ZW50XCIgY2xhc3M9XCJmbG93LXNldHRpbmdzXCI+XG4gICAgICAgICAgPGd2LXNjaGVtYS1mb3JtXG4gICAgICAgICAgICAuc2NoZW1hPVwiJHt0aGlzLmZsb3dTY2hlbWF9XCJcbiAgICAgICAgICAgIGlkPVwic2V0dGluZ3MtZm9ybVwiXG4gICAgICAgICAgICAudmFsdWVzPVwiJHt2YWx1ZXN9XCJcbiAgICAgICAgICAgIGhhcy1oZWFkZXJcbiAgICAgICAgICAgIHNjcm9sbGFibGVcbiAgICAgICAgICAgID9yZWFkb25seT1cIiR7cmVhZG9ubHlNb2RlfVwiXG4gICAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06Y2FuY2VsPVwiJHt0aGlzLl9vbkNhbmNlbEZsb3d9XCJcbiAgICAgICAgICAgIEBndi1zY2hlbWEtZm9ybTpzdWJtaXQ9XCIke3RoaXMuX29uU3VibWl0Rmxvd31cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgc2xvdD1cInRpdGxlXCIgY2xhc3M9XCJmbG93LXN0ZXBfX2Zvcm0tdGl0bGVcIj5GbG93IGNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgICAgICA8L2d2LXNjaGVtYS1mb3JtPlxuICAgICAgICA8L2Rpdj5gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9vblJlc291cmNlc0NoYW5nZSh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5kZWZpbml0aW9uLnJlc291cmNlcyA9IGRldGFpbC5yZXNvdXJjZXM7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIF9vblByb3BlcnRpZXNDaGFuZ2UoeyBkZXRhaWwgfSkge1xuICAgIHRoaXMuZGVmaW5pdGlvbi5wcm9wZXJ0aWVzID0gZGV0YWlsLnByb3BlcnRpZXM7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIF9vblNhdmVQcm92aWRlcih7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5zZXJ2aWNlc1snZHluYW1pYy1wcm9wZXJ0eSddID0gZGV0YWlsLnByb3ZpZGVyO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICBfb25Td2l0Y2hFbmNyeXB0ZWRQcm9wZXJ0eSh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCByZWFkb25seU1vZGUgPSB0aGlzLl9nZXRSZWFkb25seU1vZGVGb3JEZXNpZ24oKTtcblxuICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJib3hcIj5cbiAgICAgIDxndi1wb2xpY3ktc3R1ZGlvLW1lbnVcbiAgICAgICAgY2xhc3M9XCJsZWZ0LW1lbnVcIlxuICAgICAgICAuYXBpLW5hbWU9XCIke3RoaXMuX2RlZmluaXRpb24ubmFtZX1cIlxuICAgICAgICAuZmxvd3M9XCIke3RoaXMuZmlsdGVyZWRGbG93c31cIlxuICAgICAgICAucGxhbnM9XCIke3RoaXMuZmlsdGVyZWRQbGFuc31cIlxuICAgICAgICAuc2VsZWN0ZWRJZHM9XCIke3RoaXMuc2VsZWN0ZWRGbG93c0lkfVwiXG4gICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICA/c29ydGFibGU9XCIke3RoaXMuc29ydGFibGUgJiYgdGhpcy5yZWFkb25seSAhPT0gdHJ1ZX1cIlxuICAgICAgICA/cmVhZG9ubHk9XCIke3RoaXMucmVhZG9ubHl9XCJcbiAgICAgICAgP3JlYWRvbmx5UGxhbnM9XCIke3RoaXMucmVhZG9ubHlQbGFuc31cIlxuICAgICAgICBmbG93cy10aXRsZT1cIiR7dGhpcy5mbG93c1RpdGxlfVwiXG4gICAgICAgIC5xdWVyeT1cIiR7dGhpcy5fc2VhcmNoRmxvd1F1ZXJ5fVwiXG4gICAgICAgID9jYW4tYWRkPVwiJHt0aGlzLmNhbkFkZCAmJiAhdGhpcy5yZWFkb25seX1cIlxuICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OnJlb3JkZXItZmxvd3M9XCIke3RoaXMuX29uUmVvcmRlckZsb3dzfVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6Y2hhbmdlLWZsb3ctc3RhdGU9XCIke3RoaXMuX29uQ2hhbmdlRmxvd1N0YXRlfVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6YWRkLWZsb3c9XCIke3RoaXMuX29uQWRkRmxvd31cIlxuICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OmFkZC1mbG93LXBsYW49XCIke3RoaXMuX29uQWRkRmxvd1BsYW59XCJcbiAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTpkZWxldGUtZmxvdz1cIiR7dGhpcy5fb25EZWxldGVGbG93fVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6ZHVwbGljYXRlLWZsb3c9XCIke3RoaXMuX29uRHVwbGljYXRlRmxvd31cIlxuICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OnNlbGVjdC1mbG93cz1cIiR7dGhpcy5fb25TZWxlY3RGbG93c31cIlxuICAgICAgPlxuICAgICAgICA8ZGl2IHNsb3Q9XCJoZWFkZXJcIiBjbGFzcz1cImhlYWRlci1hY3Rpb25zXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+JHt0aGlzLl9kZWZpbml0aW9uLm5hbWV9PC9kaXY+XG4gICAgICAgICAgJHt0aGlzLl9mbG93RmlsdGVyT3B0aW9ucyAhPSBudWxsXG4gICAgICAgICAgICA/IGh0bWxgPGd2LW9wdGlvblxuICAgICAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgICAgIC5vcHRpb25zPVwiJHt0aGlzLl9mbG93RmlsdGVyT3B0aW9uc31cIlxuICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgb3V0bGluZWRcbiAgICAgICAgICAgICAgICAudmFsdWU9XCIke3RoaXMuX2Zsb3dGaWx0ZXJ9XCJcbiAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgIEBndi1vcHRpb246c2VsZWN0PVwiJHt0aGlzLl9vbkZpbHRlckZsb3dzfVwiXG4gICAgICAgICAgICAgID48L2d2LW9wdGlvbj5gXG4gICAgICAgICAgICA6ICcnfVxuICAgICAgICAgIDxndi1pbnB1dFxuICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgICAgICBpZD1cInNlYXJjaC1mbG93XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGZsb3dzIChDdHJsICsgU3BhY2UpXCJcbiAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgc21hbGxcbiAgICAgICAgICAgIEBndi1pbnB1dDppbnB1dD1cIiR7dGhpcy5fb25TZWFyY2hGbG93c31cIlxuICAgICAgICAgICAgQGd2LWlucHV0OmNsZWFyPVwiJHt0aGlzLl9vbkNsZWFyRmxvd3N9XCJcbiAgICAgICAgICA+PC9ndi1pbnB1dD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgJHt0aGlzLnJlYWRvbmx5ICE9PSB0cnVlXG4gICAgICAgICAgPyBodG1sYCA8ZGl2IHNsb3Q9XCJmb290ZXJcIiBjbGFzcz1cImZvb3Rlci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxndi1idXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1sYXJnZVwiXG4gICAgICAgICAgICAgICAgLmRpc2FibGVkPVwiJHshdGhpcy5pc0RpcnR5IHx8IHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgICAgICAgICBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vblNhdmVBbGx9XCJcbiAgICAgICAgICAgICAgICA+U2F2ZTwvZ3YtYnV0dG9uXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGd2LWJ1dHRvbiBsaW5rIC5kaXNhYmxlZD1cIiR7IXRoaXMuaXNEaXJ0eSB8fCB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uUmVzZXRBbGx9XCJcbiAgICAgICAgICAgICAgICA+UmVzZXQ8L2d2LWJ1dHRvblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2Rpdj5gXG4gICAgICAgICAgOiAnJ31cbiAgICAgIDwvZ3YtcG9saWN5LXN0dWRpby1tZW51PlxuXG4gICAgICA8Z3YtdGFic1xuICAgICAgICAudmFsdWU9XCIke3RoaXMudGFiSWR9XCJcbiAgICAgICAgLm9wdGlvbnM9XCIke3RoaXMuX3RhYnN9XCJcbiAgICAgICAgLmRpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgIEBndi10YWJzOmNoYW5nZT1cIiR7dGhpcy5fb25DaGFuZ2VUYWJ9XCJcbiAgICAgICAgLnZhbGlkYXRvcj1cIiR7dGhpcy5fY2hhbmdlVGFiVmFsaWRhdG9yLmJpbmQodGhpcyl9XCJcbiAgICAgID5cbiAgICAgICAgJHt0aGlzLl9yZW5kZXJEZXNpZ24ocmVhZG9ubHlNb2RlKX0gJHt0aGlzLl9yZW5kZXJDb25maWd1cmF0aW9uRm9ybShyZWFkb25seU1vZGUpfSAke3RoaXMuX3JlbmRlckRlYnVnKCl9XG4gICAgICAgIDxndi1wcm9wZXJ0aWVzXG4gICAgICAgICAgaWQ9XCJwcm9wZXJ0aWVzXCJcbiAgICAgICAgICBzbG90PVwiY29udGVudFwiXG4gICAgICAgICAgY2xhc3M9XCJwcm9wZXJ0aWVzXCJcbiAgICAgICAgICAucHJvdmlkZXI9XCIke3RoaXMuc2VydmljZXNbJ2R5bmFtaWMtcHJvcGVydHknXX1cIlxuICAgICAgICAgIEBndi1wcm9wZXJ0aWVzOmNoYW5nZT1cIiR7dGhpcy5fb25Qcm9wZXJ0aWVzQ2hhbmdlfVwiXG4gICAgICAgICAgQGd2LXByb3BlcnRpZXM6c2F2ZS1wcm92aWRlcj1cIiR7dGhpcy5fb25TYXZlUHJvdmlkZXJ9XCJcbiAgICAgICAgICBAZ3YtcHJvcGVydGllczpzd2l0Y2gtZW5jcnlwdGVkPVwiJHt0aGlzLl9vblN3aXRjaEVuY3J5cHRlZFByb3BlcnR5fVwiXG4gICAgICAgICAgP3JlYWRvbmx5PVwiJHtyZWFkb25seU1vZGV9XCJcbiAgICAgICAgICBlbmNyeXB0YWJsZT1cInRydWVcIlxuICAgICAgICAgIC5wcm9wZXJ0aWVzPVwiJHt0aGlzLmRlZmluZWRQcm9wZXJ0aWVzfVwiXG4gICAgICAgICAgLnByb3ZpZGVycz1cIiR7dGhpcy5wcm9wZXJ0eVByb3ZpZGVyc31cIlxuICAgICAgICAgIC5keW5hbWljUHJvcGVydHlTY2hlbWE9XCIke3RoaXMuZHluYW1pY1Byb3BlcnR5U2NoZW1hfVwiXG4gICAgICAgID48L2d2LXByb3BlcnRpZXM+XG4gICAgICAgIDxndi1yZXNvdXJjZXNcbiAgICAgICAgICBpZD1cInJlc291cmNlc1wiXG4gICAgICAgICAgc2xvdD1cImNvbnRlbnRcIlxuICAgICAgICAgIGNsYXNzPVwicmVzb3VyY2VzXCJcbiAgICAgICAgICBAZ3YtcmVzb3VyY2VzOmNoYW5nZT1cIiR7dGhpcy5fb25SZXNvdXJjZXNDaGFuZ2V9XCJcbiAgICAgICAgICA/cmVhZG9ubHk9XCIke3JlYWRvbmx5TW9kZX1cIlxuICAgICAgICAgIC5yZXNvdXJjZXM9XCIke3RoaXMuZGVmaW5lZFJlc291cmNlc31cIlxuICAgICAgICAgIC50eXBlcz1cIiR7dGhpcy5yZXNvdXJjZVR5cGVzfVwiXG4gICAgICAgID48L2d2LXJlc291cmNlcz5cbiAgICAgIDwvZ3YtdGFicz5cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpZiB0aGUgZGVzaWduIHZpZXcgc2hvdWxkIGJlIGluIHJlYWRvbmx5IG1vZGUgb3Igbm90XG4gICAqIEl0IGlzIGluIHJlYWRvbmx5IG1vZGUgaWY6XG4gICAqICB0aGUgcmVhZG9ubHkgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlXG4gICAqICBPUlxuICAgKiAgdGhlIG1haW4gc2VsZWN0ZWQgZmxvdyBiZWxvbmdzIHRvIGEgcGxhbiBhbmQgdGhlIHJlYWRvbmx5LXBsYW5zIGF0dHJpYnV0ZSBpcyBzZXQgdG8gdHJ1ZVxuICAgKiAgT1JcbiAgICogIHRoZSBzZWNvbmQgZmxvdyBmb3IgY29tcGFyaXNvbiBiZWxvbmdzIHRvIGEgcGxhbiBhbmQgdGhlIHJlYWRvbmx5LXBsYW5zIGF0dHJpYnV0ZSBpcyBzZXQgdG8gdHJ1ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbnwqfHt0eXBlOiBCb29sZWFuQ29uc3RydWN0b3J9fHthdHRyaWJ1dGU6IHN0cmluZywgdHlwZTogQm9vbGVhbkNvbnN0cnVjdG9yfXx7dHlwZTogKn18e2F0dHJpYnV0ZTogc3RyaW5nLCB0eXBlOiAqfX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRSZWFkb25seU1vZGVGb3JEZXNpZ24oKSB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZsb3cgPSB0aGlzLmdldFNlbGVjdGVkRmxvdygwKTtcbiAgICBpZiAoIWZsb3cpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBsYW46IGZsb3dQbGFuIH0gPSB0aGlzLl9maW5kRmxvd0NvbGxlY3Rpb24oZmxvdy5faWQpO1xuICAgIGNvbnN0IHJlYWRvbmx5TW9kZSA9IGZsb3dQbGFuICYmIHRoaXMucmVhZG9ubHlQbGFucztcbiAgICBpZiAocmVhZG9ubHlNb2RlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wYXJlZEZsb3cgPSB0aGlzLmdldFNlbGVjdGVkRmxvdygxKTtcbiAgICBpZiAoIWNvbXBhcmVkRmxvdykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcGxhbjogY29tcGFyZWRGbG93UGxhbiB9ID0gdGhpcy5fZmluZEZsb3dDb2xsZWN0aW9uKGNvbXBhcmVkRmxvdy5faWQpO1xuICAgIHJldHVybiBjb21wYXJlZEZsb3dQbGFuICYmIHRoaXMucmVhZG9ubHlQbGFucztcbiAgfVxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdndi1wb2xpY3ktc3R1ZGlvJywgR3ZQb2xpY3lTdHVkaW8pO1xuIl19