@sbb-esta/lyne-elements-dev 4.13.0-dev.1780293313 → 4.13.0-dev.1780334133

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.
@@ -1,2 +1,2 @@
1
- import { t as e } from "../date-input.component-e3c3CgE1.js";
1
+ import { t as e } from "../date-input.component-kYGldhkg.js";
2
2
  export { e as SbbDateInputElement };
@@ -102,17 +102,19 @@ var g = (() => {
102
102
  this.styles = r(h);
103
103
  }
104
104
  set value(e) {
105
- this._tryParseValue(e), !n && !this.matches(":focus") && this.valueAsDate !== null && (e = this._formatDate()), super.value = e;
105
+ this._tryParseValue(e), !n && !this.isSelected() && this.valueAsDate !== null && (e = this._formatDate()), super.value = e;
106
106
  }
107
107
  get value() {
108
108
  return super.value ?? "";
109
109
  }
110
110
  set valueAsDate(e) {
111
- if (e = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(e)), !e) this._valueAsDate = null, this._valueCache = ["", null], this.value = "";
112
- else if (!this._dateAdapter.isDateInstance(this._valueAsDate) || this._dateAdapter.compareDate(this._valueAsDate, e) !== 0) {
113
- this._valueAsDate = this._dateAdapter.createDate(this._dateAdapter.getYear(e), this._dateAdapter.getMonth(e), this._dateAdapter.getDate(e));
114
- let t = this._formatDate();
115
- this._valueCache = [t, this._valueAsDate], this.value = t;
111
+ if (e = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(e)), !(this.isSelected() && (e === null || this._dateAdapter.sameDate(e, this._dateAdapter.parse(this.value))))) {
112
+ if (!e) this._valueAsDate = null, this._valueCache = ["", null], this.value = "";
113
+ else if (!this._dateAdapter.isDateInstance(this._valueAsDate) || this._dateAdapter.compareDate(this._valueAsDate, e) !== 0) {
114
+ this._valueAsDate = this._dateAdapter.createDate(this._dateAdapter.getYear(e), this._dateAdapter.getMonth(e), this._dateAdapter.getDate(e));
115
+ let t = this._formatDate();
116
+ this._valueCache = [t, this._valueAsDate], this.value = t;
117
+ }
116
118
  }
117
119
  }
118
120
  get valueAsDate() {
package/date-input.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as e } from "./date-input.component-e3c3CgE1.js";
1
+ import { t as e } from "./date-input.component-kYGldhkg.js";
2
2
  import "./date-input.pure.js";
3
3
  //#region src/elements/date-input.ts
4
4
  e.define();
@@ -1,2 +1,2 @@
1
- import { t as e } from "./date-input.component-e3c3CgE1.js";
1
+ import { t as e } from "./date-input.component-kYGldhkg.js";
2
2
  export { e as SbbDateInputElement };
@@ -22,6 +22,7 @@ export declare abstract class SbbFormAssociatedInputMixinType extends SbbFormAss
22
22
  select(): void;
23
23
  formResetCallback(): void;
24
24
  formStateRestoreCallback(state: FormRestoreState | null, reason: FormRestoreReason): void;
25
+ protected isSelected(): boolean;
25
26
  protected preparePastedText(text: string): string;
26
27
  protected language: SbbLanguageController;
27
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"form-associated-input-mixin.d.ts","sourceRoot":"","sources":["../../../../../src/elements/core/mixins/form-associated-input-mixin.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EAGhB,MAAM,KAAK,CAAC;AAIb,OAAO,EAAE,qBAAqB,EAA8B,MAAM,mBAAmB,CAAC;AAItF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAEL,KAAK,4BAA4B,EACjC,KAAK,8BAA8B,EACpC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAEtB,MAAM,4BAA4B,CAAC;;AAIpC,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,+BAAgC,SAAQ,oCAErE;IACC,gBAAuB,mBAAmB,QAAQ;IAElD,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE;IAChC,IAAW,KAAK,IAAI,MAAM,CAAC;IAE3B,IAAW,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE;IACpC,IAAW,QAAQ,IAAI,OAAO,CAAC;IAE/B,IAAW,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE;IACpC,IAAW,QAAQ,IAAI,OAAO,CAAC;IAE/B,IAAW,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE;IACtC,IAAW,WAAW,IAAI,MAAM,CAAC;IAEjC;;;;OAIG;IACI,MAAM,IAAI,IAAI;IAEd,iBAAiB,IAAI,IAAI;IACzB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAEhG,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IACjD,SAAS,CAAC,QAAQ,EAAE,qBAAqB,CAAC;CAC3C;AAgBD;;GAEG;AAEH,eAAO,MAAM,2BAA2B,GAAI,CAAC,SAAS,mBAAmB,CAAC,UAAU,CAAC,EACnF,YAAY,CAAC,KACZ,mBAAmB,CAAC,+BAA+B,CAAC,GAAG,CA0azD,CAAC"}
1
+ {"version":3,"file":"form-associated-input-mixin.d.ts","sourceRoot":"","sources":["../../../../../src/elements/core/mixins/form-associated-input-mixin.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EAGhB,MAAM,KAAK,CAAC;AAIb,OAAO,EAAE,qBAAqB,EAA8B,MAAM,mBAAmB,CAAC;AAItF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAEL,KAAK,4BAA4B,EACjC,KAAK,8BAA8B,EACpC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAEtB,MAAM,4BAA4B,CAAC;;AAIpC,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,+BAAgC,SAAQ,oCAErE;IACC,gBAAuB,mBAAmB,QAAQ;IAElD,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE;IAChC,IAAW,KAAK,IAAI,MAAM,CAAC;IAE3B,IAAW,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE;IACpC,IAAW,QAAQ,IAAI,OAAO,CAAC;IAE/B,IAAW,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE;IACpC,IAAW,QAAQ,IAAI,OAAO,CAAC;IAE/B,IAAW,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE;IACtC,IAAW,WAAW,IAAI,MAAM,CAAC;IAEjC;;;;OAIG;IACI,MAAM,IAAI,IAAI;IAEd,iBAAiB,IAAI,IAAI;IACzB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAEhG,SAAS,CAAC,UAAU,IAAI,OAAO;IAC/B,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IACjD,SAAS,CAAC,QAAQ,EAAE,qBAAqB,CAAC;CAC3C;AAgBD;;GAEG;AAEH,eAAO,MAAM,2BAA2B,GAAI,CAAC,SAAS,mBAAmB,CAAC,UAAU,CAAC,EACnF,YAAY,CAAC,KACZ,mBAAmB,CAAC,+BAA+B,CAAC,GAAG,CAkbzD,CAAC"}
@@ -277,6 +277,11 @@ var SbbFormAssociatedInputMixin = (superClass) => {
277
277
  if (this.required && !this.value) this.setValidityFlag("valueMissing", i18nInputRequired[this.language.current]);
278
278
  else this.removeValidityFlag("valueMissing");
279
279
  }
280
+ isSelected() {
281
+ if (isServer) return false;
282
+ const selection = window.getSelection();
283
+ return !!selection && selection.rangeCount > 0 && this.contains(selection.anchorNode);
284
+ }
280
285
  preparePastedText(text) {
281
286
  return text;
282
287
  }
@@ -337,4 +342,4 @@ var SbbFormAssociatedInputMixin = (superClass) => {
337
342
  //#endregion
338
343
  export { SbbFormAssociatedInputMixin };
339
344
 
340
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hc3NvY2lhdGVkLWlucHV0LW1peGluLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9mb3JtLWFzc29jaWF0ZWQtaW5wdXQtbWl4aW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIHR5cGUgTGl0RWxlbWVudCxcbiAgdHlwZSBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgZXZlbnRPcHRpb25zLCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yIH0gZnJvbSAnLi4vYTExeS50cyc7XG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIsIFNiYk1lZGlhUXVlcnlQb2ludGVyQ29hcnNlIH0gZnJvbSAnLi4vY29udHJvbGxlcnMudHMnO1xuaW1wb3J0IHsgaXNCbGluaywgaXNXZWJraXQgfSBmcm9tICcuLi9kb20udHMnO1xuaW1wb3J0IHsgaTE4bklucHV0UmVxdWlyZWQgfSBmcm9tICcuLi9pMThuLnRzJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBTYmJEaXNhYmxlZE1peGluIH0gZnJvbSAnLi9kaXNhYmxlZC1taXhpbi50cyc7XG5pbXBvcnQge1xuICBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4sXG4gIHR5cGUgU2JiRWxlbWVudEludGVybmFsc01peGluVHlwZSxcbiAgdHlwZSBTYmJFbGVtZW50SW50ZXJuYWxzQ29uc3RydWN0b3IsXG59IGZyb20gJy4vZWxlbWVudC1pbnRlcm5hbHMtbWl4aW4udHMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxufSBmcm9tICcuL2Zvcm0tYXNzb2NpYXRlZC1taXhpbi50cyc7XG5pbXBvcnQgeyBTYmJSZWFkb25seU1peGluIH0gZnJvbSAnLi9yZWFkb25seS1taXhpbi50cyc7XG5pbXBvcnQgeyBTYmJSZXF1aXJlZE1peGluIH0gZnJvbSAnLi9yZXF1aXJlZC1taXhpbi50cyc7XG5cbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpblR5cGUgZXh0ZW5kcyBTYmJSZXF1aXJlZE1peGluKFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluKFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbihMaXRFbGVtZW50KSksXG4pIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBmb3JtRmllbGRBc3NvY2lhdGVkID0gdHJ1ZTtcblxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpO1xuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZztcblxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKTtcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuO1xuXG4gIHB1YmxpYyBzZXQgcmVhZE9ubHkodmFsdWU6IGJvb2xlYW4pO1xuICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW47XG5cbiAgcHVibGljIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKTtcbiAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1ha2VzIHRoZSBzZWxlY3Rpb24gZXF1YWwgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LlxuICAgKlxuICAgKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0hUTUxJbnB1dEVsZW1lbnQvc2VsZWN0KVxuICAgKi9cbiAgcHVibGljIHNlbGVjdCgpOiB2b2lkO1xuXG4gIHB1YmxpYyBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkO1xuICBwdWJsaWMgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCwgcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbik6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIHByZXBhcmVQYXN0ZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZztcbiAgcHJvdGVjdGVkIGxhbmd1YWdlOiBTYmJMYW5ndWFnZUNvbnRyb2xsZXI7XG59XG5cbmNvbnN0IGNoZWNrUGxhaW50ZXh0T25seVN1cHBvcnQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIGlmIChpc1NlcnZlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBkaXYuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnUExBSU5URVhULU9OTFknKTtcblxuICAvLyBJZiBwbGFpbnRleHQtb25seSBpcyBzdXBwb3J0ZWQsIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaXNcbiAgLy8gcmV0dXJuZWQgYXMgbG93ZXItY2FzZSBmcm9tIHRoZSBwcm9wZXJ0eSBhY2Nlc3MuXG4gIHJldHVybiBkaXYuY29udGVudEVkaXRhYmxlID09PSAncGxhaW50ZXh0LW9ubHknO1xufTtcbmNvbnN0IHBsYWludGV4dE9ubHlTdXBwb3J0ZWQgPSBjaGVja1BsYWludGV4dE9ubHlTdXBwb3J0KCk7XG5cbi8qKlxuICogVGhlIFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpbiBlbmFibGVzIG5hdGl2ZSBmb3JtIHN1cHBvcnQgZm9yIHRleHQgaW5wdXQgY29udHJvbHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW4gPSA8VCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW5UeXBlPiAmIFQgPT4ge1xuICAvLyBUT0RPKGJyZWFraW5nLWNoYW5nZSk6IFJlbW92ZSBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4gYW5kIGRlcGVuZCBvbiBTYmJFbGVtZW50IGFzIGJhc2UgY2xhc3MgaW5zdGVhZCBvZiBMaXRFbGVtZW50XG4gIGNvbnN0IGNvbmRpdGlvbmFsU3VwZXJDbGFzcyA9IChzdXBlckNsYXNzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pWydfJHNiYkVsZW1lbnQkJ11cbiAgICA/IChzdXBlckNsYXNzIGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW5UeXBlPiAmXG4gICAgICAgIFQgJlxuICAgICAgICBTYmJFbGVtZW50SW50ZXJuYWxzQ29uc3RydWN0b3IpXG4gICAgOiBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4oc3VwZXJDbGFzcyk7XG5cbiAgYWJzdHJhY3QgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRJbnB1dEVsZW1lbnRcbiAgICBleHRlbmRzIFNiYlJlYWRvbmx5TWl4aW4oXG4gICAgICBTYmJEaXNhYmxlZE1peGluKFNiYlJlcXVpcmVkTWl4aW4oU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihjb25kaXRpb25hbFN1cGVyQ2xhc3MpKSksXG4gICAgKVxuICAgIGltcGxlbWVudHMgUGFydGlhbDxTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW5UeXBlPlxuICB7XG4gICAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSByb2xlID0gJ3RleHRib3gnO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZm9ybUZpZWxkQXNzb2NpYXRlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBlbGVtZW50IHdpdGggY29udGVudGVkaXRhYmxlIHdpbGwgbm90IGVtaXQgYSBjaGFuZ2UgZXZlbnQuIFRvIGFjaGlldmUgcGFyaXR5XG4gICAgICogd2l0aCBhIG5hdGl2ZSB0ZXh0IGlucHV0LCB3ZSBuZWVkIHRvIHRyYWNrIHdoZXRoZXIgYSBjaGFuZ2UgZXZlbnQgc2hvdWxkIGJlXG4gICAgICogZW1pdHRlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zaG91bGRFbWl0Q2hhbmdlID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQSBuYXRpdmUgdGV4dCBpbnB1dCBhdHRlbXB0cyB0byBzdWJtaXQgdGhlIGZvcm0gd2hlbiBwcmVzc2luZyBFbnRlci5cbiAgICAgKiBUaGlzIGNhbiBiZSBwcmV2ZW50ZWQgYnkgY2FsbGluZyBwcmV2ZW50RGVmYXVsdCBvbiB0aGUga2V5ZG93biBldmVudC5cbiAgICAgKiBXZSB0cmFjayB3aGV0aGVyIHRvIHJlcXVlc3Qgc3VibWl0LCB3aGljaCBzaG91bGQgb2NjdXIgYmVmb3JlIHRoZSBrZXl1cFxuICAgICAqIGV2ZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgX3Nob3VsZFRyaWdnZXJTdWJtaXQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBsYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBGb3JtIHR5cGUgb2YgZWxlbWVudC5cbiAgICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiAndGV4dCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBpbnB1dC4gUmVmbGVjdHMgdGhlIGN1cnJlbnQgdGV4dCB2YWx1ZSBvZiB0aGlzIGlucHV0LlxuICAgICAqL1xuICAgIEBwcm9wZXJ0eSgpXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2NsZWFuVGV4dCh2YWx1ZSk7XG4gICAgICBpZiAodGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICAgIHRoaXMuX2Fzc2lnblZhbHVlKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Rpc3BsYXl2YWx1ZWNoYW5nZScsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSkpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWUgPz8gJyc7XG4gICAgfVxuICAgIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmcgPSAnJztcblxuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgICBwdWJsaWMgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgncGxhY2Vob2xkZXInKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFQbGFjZWhvbGRlciA9IHZhbHVlID8gdmFsdWUgOiBudWxsO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJykgPz8gJyc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIC8vIFdlIHByaW1hcmlseSB1c2UgY2FwdHVyZSBldmVudCBsaXN0ZW5lcnMsIGFzIHdlIHdhbnRcbiAgICAgIC8vIG91ciBsaXN0ZW5lcnMgdG8gb2NjdXIgYmVmb3JlIGNvbnN1bWVyIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFxuICAgICAgICAnaW5wdXQnLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2NsZWFuVGV4dCh0aGlzLnRleHRDb250ZW50ID8/ICcnKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoJ3ZhbHVlJywgb2xkVmFsdWUpO1xuICAgICAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5hZGQoJ2ludGVyYWN0ZWQnKTtcbiAgICAgICAgICB0aGlzLl9zaG91bGRFbWl0Q2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBjYXB0dXJlOiB0cnVlIH0sXG4gICAgICApO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2NoYW5nZScsICgpID0+ICh0aGlzLl9zaG91bGRFbWl0Q2hhbmdlID0gZmFsc2UpLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LihcbiAgICAgICAgJ2tleWRvd24nLFxuICAgICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fcmVxdWlyZXNFbXB0eVBhdGNoKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2Fzc2lnblZhbHVlKCcnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2UgcHJldmVudCByZWN1cnNpdmUgZXZlbnRzIGJ5IGNoZWNraW5nIHRoZSBvcmlnaW5hbCBldmVudCBmb3IgaXNUcnVzdGVkXG4gICAgICAgICAgLy8gd2hpY2ggaXMgZmFsc2UgZm9yIG1hbnVhbGx5IGRpc3BhdGNoZWQgZXZlbnRzICh3aGljaCB3ZSBkaXNwYXRjaCBiZWxvdykuXG4gICAgICAgICAgaWYgKChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnXFxuJykgJiYgZXZlbnQuaXNUcnVzdGVkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLl9zaG91bGRUcmlnZ2VyU3VibWl0ID0gdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KCdrZXlkb3duJywgZXZlbnQpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgaXNXZWJraXQgJiZcbiAgICAgICAgICAgIHRoaXMudmFsdWUgJiZcbiAgICAgICAgICAgIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnIHx8IGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpICYmXG4gICAgICAgICAgICBldmVudC5pc1RydXN0ZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEluIFdlYmtpdCBwcmVzc2luZyBCYWNrc3BhY2Ugb3IgRGVsZXRlIGNvbXBsZXRlbHkgcmVtb3ZlcyBhbGwgdGhlIGNvbnRlbnRcbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnRlZGl0YWJsZSBpcyBzZXQgb24gYSB3ZWIgY29tcG9uZW50IGhvc3QuXG4gICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHJlcGxpY2F0ZSB0aGUgbm9ybWFsIGRlbGV0ZSBiZWhhdmlvci5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleWRvd24nLCBldmVudCkpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0ICE9PSBzZWxlY3RlZFJhbmdlLmVuZE9mZnNldCkge1xuICAgICAgICAgICAgICAvLyBJZiBhIHRleHQgcmFuZ2UgaXMgc2VsZWN0ZWQsIHRoZW4gZGVsZXRlIHRoaXMgcmFuZ2VcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICAgICAgICB0aGlzLl9kaXNwYXRjaElucHV0RXZlbnQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJiBzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHByZXNzaW5nIEJhY2tzcGFjZSwgd2Ugc2VsZWN0IHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgZnJvbVxuICAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gYW5kIGRlbGV0ZSBpdC5cbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5zZXRTdGFydChzZWxlY3RlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0IC0gMSk7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgICAgICAgICAgdGhpcy5fZGlzcGF0Y2hJbnB1dEV2ZW50KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScgJiYgc2VsZWN0ZWRSYW5nZS5lbmRPZmZzZXQgPCB0aGlzLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHByZXNzaW5nIERlbGV0ZSwgd2Ugc2VsZWN0IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tXG4gICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBhbmQgZGVsZXRlIGl0LlxuICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLnNldEVuZChzZWxlY3RlZFJhbmdlLmVuZENvbnRhaW5lciwgc2VsZWN0ZWRSYW5nZS5lbmRPZmZzZXQgKyAxKTtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICAgICAgICB0aGlzLl9kaXNwYXRjaElucHV0RXZlbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgY2FwdHVyZTogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFxuICAgICAgICAna2V5dXAnLFxuICAgICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VJZk5lY2Vzc2FyeSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFRyaWdnZXJTdWJtaXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fc2hvdWxkVHJpZ2dlclN1Ym1pdCA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmZvcm0/LnJlcXVlc3RTdWJtaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3JlcXVpcmVzRW1wdHlQYXRjaCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDdXJzb3JBdCgwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgY2FwdHVyZTogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBhbGxvd3MgcGFzdGluZyByaWNoIGNvbnRlbnQgaW50byBpdHMgaG9zdC5cbiAgICAgIC8vIFdlIHByZXZlbnQgdGhpcyBieSBsaXN0ZW5pbmcgdG8gdGhlIHBhc3RlIGV2ZW50IGFuZFxuICAgICAgLy8gZXh0cmFjdGluZyB0aGUgcGxhaW4gdGV4dCBmcm9tIHRoZSBwYXN0ZWQgY29udGVudFxuICAgICAgLy8gYW5kIGluc2VydGluZyBpdCBpbnRvIHRoZSBzZWxlY3RlZCByYW5nZSAoY3Vyc29yIHBvc2l0aW9uXG4gICAgICAvLyBvciBzZWxlY3Rpb24pLlxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ3Bhc3RlJywgKGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5fcmVxdWlyZXNFbXB0eVBhdGNoKCkpIHtcbiAgICAgICAgICB0aGlzLl9hc3NpZ25WYWx1ZSgnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0ID0gdGhpcy5fY2xlYW5UZXh0KGUuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dC9wbGFpbicpID8/ICcnKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8ICF0ZXh0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICBzZWxlY3RlZFJhbmdlLmluc2VydE5vZGUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy5wcmVwYXJlUGFzdGVkVGV4dCh0ZXh0KSkpO1xuICAgICAgICBzZWxlY3RlZFJhbmdlLnNldFN0YXJ0KHNlbGVjdGVkUmFuZ2UuZW5kQ29udGFpbmVyLCBzZWxlY3RlZFJhbmdlLmVuZE9mZnNldCk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoSW5wdXRFdmVudCgpO1xuICAgICAgfSk7XG4gICAgICAvLyBXaGVuIGZvY3VzaW5nIGEgdGV4dCBpbnB1dCB2aWEga2V5Ym9hcmQsIHRoZSB0ZXh0IGNvbnRlbnQgc2hvdWxkIGJlIHNlbGVjdGVkLlxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2ZvY3VzJywgKCkgPT4ge1xuICAgICAgICBpZiAoc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yLm1vc3RSZWNlbnRNb2RhbGl0eSA9PT0gJ2tleWJvYXJkJykge1xuICAgICAgICAgIC8vIFRPRE86IFRoaXMgZG9lcyBub3Qgc2VlbSB0byB3b3JrIGluIEZpcmVmb3ggd2l0aCByZWFkb25seS5cbiAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LnNlbGVjdEFsbENoaWxkcmVuKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCd0b3VjaGVuZCcsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVpcmVzRW1wdHlQYXRjaCgpKSB7XG4gICAgICAgICAgdGhpcy5fYXNzaWduVmFsdWUoJyZuYnNwOycpO1xuICAgICAgICAgIHRoaXMuX3NldEN1cnNvckF0KDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVpcmVzRW1wdHlQYXRjaCgpICYmIHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgPT09ICd0b3VjaCcpIHtcbiAgICAgICAgICB0aGlzLl9zZXRDdXJzb3JBdCgwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIE9uIGJsdXIgdGhlIG5hdGl2ZSB0ZXh0IGlucHV0IHNjcm9sbHMgdGhlIHRleHQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0LlxuICAgICAgLy8gV2UgbWltaWMgdGhhdCBieSByZXNldHRpbmcgdGhlIHNjcm9sbCBwb3NpdGlvbi5cbiAgICAgIC8vIFdlIGFsc28gdW5zZXQgYW55IHNlbGVjdGlvbiB0byBhbGlnbiB3aXRoIHRoZSBuYXRpdmUgdGV4dCBpbnB1dC5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFxuICAgICAgICAnYmx1cicsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5fYXNzaWduVmFsdWUoJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlSWZOZWNlc3NhcnkoKTtcbiAgICAgICAgICB0aGlzLnNjcm9sbExlZnQgPSAwO1xuICAgICAgICB9LFxuICAgICAgICB7IGNhcHR1cmU6IHRydWUgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGlzRGlzYWJsZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybURpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLmludGVybmFscy5hcmlhTXVsdGlMaW5lID0gJ2ZhbHNlJztcbiAgICAgIHRoaXMuX3VwZGF0ZUNvbnRlbnRlZGl0YWJsZSgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIHJlcGxhY2UgYW55IGNvbnRlbnQgYnkganVzdCB0aGUgdGV4dCBjb250ZW50LlxuICAgICAgdGhpcy5fYXNzaWduVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmZvY3VzKG9wdGlvbnMpO1xuICAgICAgLy8gQnkgZGVmYXVsdCwgd2hlbiBjYWxsaW5nIGZvY3VzIG9uIGFuIGlucHV0IGVsZW1lbnQsIHRoZSBjdXJzb3IgaXMgcGxhY2VkXG4gICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCB0ZXh0LiBIb3dldmVyLCB3aXRoIGNvbnRlbnRlZGl0YWJsZSwgdGhlIGN1cnNvclxuICAgICAgLy8gaXMgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcsIHNvIHdlIG1vdmUgaXQgdG8gdGhlIGVuZCwgaWYgdGhhdCBpcyB0aGUgY2FzZS5cbiAgICAgIGlmICh0aGlzLl9jYW5TZWxlY3QoKSkge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkgOiBudWxsO1xuICAgICAgICBpZiAocmFuZ2UgJiYgcmFuZ2Uuc3RhcnRPZmZzZXQgIT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXRDdXJzb3JBdCh0aGlzLnRleHRDb250ZW50IS5sZW5ndGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICBvbGQ6IHN0cmluZyB8IG51bGwsXG4gICAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbCxcbiAgICApOiB2b2lkIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIG5hdGl2ZSB0ZXh0IGlucHV0IGNoYW5nZXMgdGhlIHZhbHVlIHByb3BlcnR5IHdoZW4gdGhlIHZhbHVlIGF0dHJpYnV0ZSBpc1xuICAgICAgICogY2hhbmdlZCB1bmRlciB0aGUgY29uZGl0aW9uIHRoYXQgbm8gaW5wdXQgZXZlbnQgaGFzIG9jY3VycmVkIHNpbmNlIGNyZWF0aW9uXG4gICAgICAgKiBvciB0aGUgbGFzdCBmb3JtIHJlc2V0LlxuICAgICAgICovXG4gICAgICBpZiAobmFtZSAhPT0gJ3ZhbHVlJyB8fCAhdGhpcy5tYXRjaGVzPy4oJzpzdGF0ZShpbnRlcmFjdGVkKScpKSB7XG4gICAgICAgIHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGZvcm0gaXMgYmVpbmcgcmVzZXQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKCdpbnRlcmFjdGVkJyk7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykgPz8gJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIENhbGxlZCB3aGVuIHRoZSBicm93c2VyIGlzIHRyeWluZyB0byByZXN0b3JlIGVsZW1lbnTigJlzIHN0YXRlIHRvIHN0YXRlIGluIHdoaWNoIGNhc2VcbiAgICAgKiAgcmVhc29uIGlzIFwicmVzdG9yZVwiLCBvciB3aGVuIHRoZSBicm93c2VyIGlzIHRyeWluZyB0byBmdWxmaWxsIGF1dG9maWxsIG9uIGJlaGFsZiBvZlxuICAgICAqICB1c2VyIGluIHdoaWNoIGNhc2UgcmVhc29uIGlzIFwiYXV0b2NvbXBsZXRlXCIuXG4gICAgICogIEluIHRoZSBjYXNlIG9mIFwicmVzdG9yZVwiLCBzdGF0ZSBpcyBhIHN0cmluZywgRmlsZSwgb3IgRm9ybURhdGEgb2JqZWN0XG4gICAgICogIHByZXZpb3VzbHkgc2V0IGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gc2V0Rm9ybVZhbHVlLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhcbiAgICAgIHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCxcbiAgICAgIF9yZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICAgICk6IHZvaWQge1xuICAgICAgaWYgKHN0YXRlICYmIHR5cGVvZiBzdGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHN0YXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBzZWxlY3Rpb24gZXF1YWwgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LlxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0hUTUxJbnB1dEVsZW1lbnQvc2VsZWN0XG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdCgpOiB2b2lkIHtcbiAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uc2VsZWN0QWxsQ2hpbGRyZW4odGhpcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgYXNzaWduZWQgYmVmb3JlIGZpcnN0VXBkYXRlLCB3ZSBoYXZlIHRvXG4gICAgICAvLyB3cml0ZSBpdCB0aGUgZG9jdW1lbnQgdG8gYmUgdmlzdWFsbHkgc2VlblxuICAgICAgaWYgKHRoaXMudmFsdWUgJiYgIXRoaXMuaW5uZXJIVE1MLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9hc3NpZ25WYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVxdWVzdFVwZGF0ZShcbiAgICAgIG5hbWU/OiBQcm9wZXJ0eUtleSxcbiAgICAgIG9sZFZhbHVlPzogdW5rbm93bixcbiAgICAgIG9wdGlvbnM/OiBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICAgICk6IHZvaWQge1xuICAgICAgc3VwZXIucmVxdWVzdFVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgb3B0aW9ucyk7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNDb25uZWN0ZWQgJiZcbiAgICAgICAgKG5hbWUgPT09ICdkaXNhYmxlZCcgfHwgbmFtZSA9PT0gJ2Zvcm1EaXNhYmxlZCcgfHwgbmFtZSA9PT0gJ3JlYWRPbmx5JylcbiAgICAgICkge1xuICAgICAgICB0aGlzLl91cGRhdGVDb250ZW50ZWRpdGFibGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBzdXBlci5zaG91bGRWYWxpZGF0ZShuYW1lKSB8fCBuYW1lID09PSAndmFsdWUnIHx8IG5hbWUgPT09ICdyZXF1aXJlZCc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgICAgc3VwZXIudmFsaWRhdGUoKTtcbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICF0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnLCBpMThuSW5wdXRSZXF1aXJlZFt0aGlzLmxhbmd1YWdlLmN1cnJlbnRdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlVmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJlcGFyZVBhc3RlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlcXVpcmVzRW1wdHlQYXRjaCgpOiBib29sZWFuIHtcbiAgICAgIC8vIEluIEJsaW5rLCBhIGNvbnRlbnRlZGl0YWJsZSBlbGVtZW50IHdpdGggZW1wdHkgY29udGVudCB3aWxsIGNyYXNoXG4gICAgICAvLyB1cG9uIHJlY2VpdmluZyBmb2N1cywgd2hlbiBpbiBNb2JpbGUgbW9kZS5cbiAgICAgIC8vIFRvIHByZXZlbnQgdGhpcywgd2UgcGF0Y2ggdGhlIGVtcHR5IHN0YXRlIGJ5IGluc2VydGluZyBhIG5vbi1icmVha2luZyBzcGFjZS5cbiAgICAgIHJldHVybiBpc1NlcnZlclxuICAgICAgICA/IGZhbHNlXG4gICAgICAgIDogaXNCbGluayAmJiB0aGlzLnZhbHVlID09PSAnJyAmJiB3aW5kb3cubWF0Y2hNZWRpYShTYmJNZWRpYVF1ZXJ5UG9pbnRlckNvYXJzZSkubWF0Y2hlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hc3NpZ25WYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICB0aGlzLmlubmVySFRNTCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldEN1cnNvckF0KHBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgcmFuZ2Uuc2V0U3RhcnQodGhpcy5maXJzdENoaWxkISwgcG9zaXRpb24pO1xuICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NsZWFuVGV4dCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIC8vIFRoZSBuYXRpdmUgdGV4dCBpbnB1dCByZW1vdmVzIGFsbCBuZXdsaW5lIGNoYXJhY3RlcnMgaWYgcGFzc2VkIHRvIHRoZSB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gJycgOiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1tcXG5cXHJdKy9nLCAnJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzcGF0Y2hJbnB1dEV2ZW50KCk6IHZvaWQge1xuICAgICAgLyoqIFRoZSBpbnB1dCBldmVudCBmaXJlcyB3aGVuIHRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGFzIGEgZGlyZWN0IHJlc3VsdCBvZiBhIHVzZXIgYWN0aW9uLiAqL1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSkpO1xuICAgIH1cblxuICAgIEBldmVudE9wdGlvbnMoeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBfY2xlYW5DaGlsZHJlbigpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkRWxlbWVudENvdW50KSB7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICAgICAgZWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZUNvbnRlbnRlZGl0YWJsZSgpOiB2b2lkIHtcbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgdGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgICB0aGlzLmludGVybmFscy5hcmlhUmVhZE9ubHkgPSB0aGlzLnJlYWRPbmx5ID8gJ3RydWUnIDogbnVsbDtcbiAgICAgICAgdGhpcy5pbnRlcm5hbHMuYXJpYURpc2FibGVkID0gdGhpcy5kaXNhYmxlZCA/ICd0cnVlJyA6IG51bGw7XG4gICAgICAgIC8vIFRPRE8oMjAyNik6IEZpcmVmb3ggc3VwcG9ydHMgcGxhaW50ZXh0LW9ubHkgc2luY2UgdmVyc2lvbiAxMzYgKE1hcmNoIDIwMjUpLlxuICAgICAgICAvLyBVbnRpbCB0aGlzIGlzIHBhcnQgb2Ygb3VyIGJhc2VsaW5lLCB3ZSBzaG91bGQgZmVhdHVyZSBjaGVjayB0byBlbmFibGUgaXQuXG4gICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICB0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZE9ubHlcbiAgICAgICAgICAgID8gJ2ZhbHNlJ1xuICAgICAgICAgICAgOiBwbGFpbnRleHRPbmx5U3VwcG9ydGVkXG4gICAgICAgICAgICAgID8gJ3BsYWludGV4dC1vbmx5J1xuICAgICAgICAgICAgICA6ICd0cnVlJztcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIHZhbHVlKTtcbiAgICAgICAgLy8gSW4gdGhlIHJlYWRvbmx5IGNhc2UsIHdlIGRpc2FibGUgY29udGVudGVkaXRhYmxlLCBidXQgaXQgc3RpbGxcbiAgICAgICAgLy8gbmVlZHMgdG8gYmUgZm9jdXNhYmxlLiBXZSBhY2hpZXZlIHRoaXMgYnkgc2V0dGluZyB0YWJpbmRleCBpbiB0aGF0IGNhc2UuXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2VtaXRDaGFuZ2VJZk5lY2Vzc2FyeSgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLl9zaG91bGRFbWl0Q2hhbmdlKSB7XG4gICAgICAgIHRoaXMuX3Nob3VsZEVtaXRDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgLyoqIFRoZSBjaGFuZ2UgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBtb2RpZmllcyB0aGUgZWxlbWVudCdzIHZhbHVlLiBVbmxpa2UgdGhlIGlucHV0IGV2ZW50LCB0aGUgY2hhbmdlIGV2ZW50IGlzIG5vdCBuZWNlc3NhcmlseSBmaXJlZCBmb3IgZWFjaCBhbHRlcmF0aW9uIHRvIGFuIGVsZW1lbnQncyB2YWx1ZS4gKi9cbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jYW5TZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIWlzU2VydmVyICYmICF0aGlzLmRpc2FibGVkICYmICF0aGlzLnJlYWRPbmx5ICYmICEhdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IHVua25vd24ge1xuICAgICAgcmV0dXJuIGh0bWxgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9jbGVhbkNoaWxkcmVufT48L3Nsb3Q+YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiRm9ybUFzc29jaWF0ZWRJbnB1dEVsZW1lbnQgYXMgdW5rbm93biBhcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpblR5cGU+ICZcbiAgICBUO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQTREQSxJQUFNLGtDQUEwQztDQUM5QyxJQUFJLFVBQ0YsT0FBTztDQUdULE1BQU0sTUFBTSxTQUFTLGNBQWMsS0FBSztDQUN4QyxJQUFJLGFBQWEsbUJBQW1CLGdCQUFnQjtDQUlwRCxPQUFPLElBQUksb0JBQW9CO0FBQ2pDO0FBQ0EsSUFBTSx5QkFBeUIsMEJBQXlCOzs7O0FBTXhELElBQWEsK0JBQ1gsZUFDNEQ7Q0FFNUQsTUFBTSx3QkFBeUIsV0FBa0QsbUJBQzVFLGFBR0QseUJBQXlCLFVBQVU7Q0FrYXZDLGNBaGE0QztvQkFDbEMsaUJBQ04saUJBQWlCLGlCQUFpQix1QkFBdUIscUJBQXFCLENBQUMsQ0FBQyxDQUFDOzs7OztlQUZ0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
345
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hc3NvY2lhdGVkLWlucHV0LW1peGluLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL21peGlucy9mb3JtLWFzc29jaWF0ZWQtaW5wdXQtbWl4aW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIHR5cGUgTGl0RWxlbWVudCxcbiAgdHlwZSBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgZXZlbnRPcHRpb25zLCBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yIH0gZnJvbSAnLi4vYTExeS50cyc7XG5pbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIsIFNiYk1lZGlhUXVlcnlQb2ludGVyQ29hcnNlIH0gZnJvbSAnLi4vY29udHJvbGxlcnMudHMnO1xuaW1wb3J0IHsgaXNCbGluaywgaXNXZWJraXQgfSBmcm9tICcuLi9kb20udHMnO1xuaW1wb3J0IHsgaTE4bklucHV0UmVxdWlyZWQgfSBmcm9tICcuLi9pMThuLnRzJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBTYmJEaXNhYmxlZE1peGluIH0gZnJvbSAnLi9kaXNhYmxlZC1taXhpbi50cyc7XG5pbXBvcnQge1xuICBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4sXG4gIHR5cGUgU2JiRWxlbWVudEludGVybmFsc01peGluVHlwZSxcbiAgdHlwZSBTYmJFbGVtZW50SW50ZXJuYWxzQ29uc3RydWN0b3IsXG59IGZyb20gJy4vZWxlbWVudC1pbnRlcm5hbHMtbWl4aW4udHMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxufSBmcm9tICcuL2Zvcm0tYXNzb2NpYXRlZC1taXhpbi50cyc7XG5pbXBvcnQgeyBTYmJSZWFkb25seU1peGluIH0gZnJvbSAnLi9yZWFkb25seS1taXhpbi50cyc7XG5pbXBvcnQgeyBTYmJSZXF1aXJlZE1peGluIH0gZnJvbSAnLi9yZXF1aXJlZC1taXhpbi50cyc7XG5cbmV4cG9ydCBkZWNsYXJlIGFic3RyYWN0IGNsYXNzIFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpblR5cGUgZXh0ZW5kcyBTYmJSZXF1aXJlZE1peGluKFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluKFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbihMaXRFbGVtZW50KSksXG4pIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBmb3JtRmllbGRBc3NvY2lhdGVkID0gdHJ1ZTtcblxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpO1xuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZztcblxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKTtcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuO1xuXG4gIHB1YmxpYyBzZXQgcmVhZE9ubHkodmFsdWU6IGJvb2xlYW4pO1xuICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW47XG5cbiAgcHVibGljIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKTtcbiAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1ha2VzIHRoZSBzZWxlY3Rpb24gZXF1YWwgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LlxuICAgKlxuICAgKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0hUTUxJbnB1dEVsZW1lbnQvc2VsZWN0KVxuICAgKi9cbiAgcHVibGljIHNlbGVjdCgpOiB2b2lkO1xuXG4gIHB1YmxpYyBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkO1xuICBwdWJsaWMgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCwgcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbik6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIGlzU2VsZWN0ZWQoKTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIHByZXBhcmVQYXN0ZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZztcbiAgcHJvdGVjdGVkIGxhbmd1YWdlOiBTYmJMYW5ndWFnZUNvbnRyb2xsZXI7XG59XG5cbmNvbnN0IGNoZWNrUGxhaW50ZXh0T25seVN1cHBvcnQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIGlmIChpc1NlcnZlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBkaXYuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnUExBSU5URVhULU9OTFknKTtcblxuICAvLyBJZiBwbGFpbnRleHQtb25seSBpcyBzdXBwb3J0ZWQsIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaXNcbiAgLy8gcmV0dXJuZWQgYXMgbG93ZXItY2FzZSBmcm9tIHRoZSBwcm9wZXJ0eSBhY2Nlc3MuXG4gIHJldHVybiBkaXYuY29udGVudEVkaXRhYmxlID09PSAncGxhaW50ZXh0LW9ubHknO1xufTtcbmNvbnN0IHBsYWludGV4dE9ubHlTdXBwb3J0ZWQgPSBjaGVja1BsYWludGV4dE9ubHlTdXBwb3J0KCk7XG5cbi8qKlxuICogVGhlIFNiYkZvcm1Bc3NvY2lhdGVkSW5wdXRNaXhpbiBlbmFibGVzIG5hdGl2ZSBmb3JtIHN1cHBvcnQgZm9yIHRleHQgaW5wdXQgY29udHJvbHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW4gPSA8VCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8TGl0RWxlbWVudD4+KFxuICBzdXBlckNsYXNzOiBULFxuKTogQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW5UeXBlPiAmIFQgPT4ge1xuICAvLyBUT0RPKGJyZWFraW5nLWNoYW5nZSk6IFJlbW92ZSBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4gYW5kIGRlcGVuZCBvbiBTYmJFbGVtZW50IGFzIGJhc2UgY2xhc3MgaW5zdGVhZCBvZiBMaXRFbGVtZW50XG4gIGNvbnN0IGNvbmRpdGlvbmFsU3VwZXJDbGFzcyA9IChzdXBlckNsYXNzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pWydfJHNiYkVsZW1lbnQkJ11cbiAgICA/IChzdXBlckNsYXNzIGFzIHVua25vd24gYXMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW5UeXBlPiAmXG4gICAgICAgIFQgJlxuICAgICAgICBTYmJFbGVtZW50SW50ZXJuYWxzQ29uc3RydWN0b3IpXG4gICAgOiBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4oc3VwZXJDbGFzcyk7XG5cbiAgYWJzdHJhY3QgY2xhc3MgU2JiRm9ybUFzc29jaWF0ZWRJbnB1dEVsZW1lbnRcbiAgICBleHRlbmRzIFNiYlJlYWRvbmx5TWl4aW4oXG4gICAgICBTYmJEaXNhYmxlZE1peGluKFNiYlJlcXVpcmVkTWl4aW4oU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihjb25kaXRpb25hbFN1cGVyQ2xhc3MpKSksXG4gICAgKVxuICAgIGltcGxlbWVudHMgUGFydGlhbDxTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW5UeXBlPlxuICB7XG4gICAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSByb2xlID0gJ3RleHRib3gnO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZm9ybUZpZWxkQXNzb2NpYXRlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBlbGVtZW50IHdpdGggY29udGVudGVkaXRhYmxlIHdpbGwgbm90IGVtaXQgYSBjaGFuZ2UgZXZlbnQuIFRvIGFjaGlldmUgcGFyaXR5XG4gICAgICogd2l0aCBhIG5hdGl2ZSB0ZXh0IGlucHV0LCB3ZSBuZWVkIHRvIHRyYWNrIHdoZXRoZXIgYSBjaGFuZ2UgZXZlbnQgc2hvdWxkIGJlXG4gICAgICogZW1pdHRlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zaG91bGRFbWl0Q2hhbmdlID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQSBuYXRpdmUgdGV4dCBpbnB1dCBhdHRlbXB0cyB0byBzdWJtaXQgdGhlIGZvcm0gd2hlbiBwcmVzc2luZyBFbnRlci5cbiAgICAgKiBUaGlzIGNhbiBiZSBwcmV2ZW50ZWQgYnkgY2FsbGluZyBwcmV2ZW50RGVmYXVsdCBvbiB0aGUga2V5ZG93biBldmVudC5cbiAgICAgKiBXZSB0cmFjayB3aGV0aGVyIHRvIHJlcXVlc3Qgc3VibWl0LCB3aGljaCBzaG91bGQgb2NjdXIgYmVmb3JlIHRoZSBrZXl1cFxuICAgICAqIGV2ZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgX3Nob3VsZFRyaWdnZXJTdWJtaXQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBsYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBGb3JtIHR5cGUgb2YgZWxlbWVudC5cbiAgICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiAndGV4dCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBpbnB1dC4gUmVmbGVjdHMgdGhlIGN1cnJlbnQgdGV4dCB2YWx1ZSBvZiB0aGlzIGlucHV0LlxuICAgICAqL1xuICAgIEBwcm9wZXJ0eSgpXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2NsZWFuVGV4dCh2YWx1ZSk7XG4gICAgICBpZiAodGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICAgIHRoaXMuX2Fzc2lnblZhbHVlKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Rpc3BsYXl2YWx1ZWNoYW5nZScsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSkpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWUgPz8gJyc7XG4gICAgfVxuICAgIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmcgPSAnJztcblxuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgICBwdWJsaWMgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgncGxhY2Vob2xkZXInKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFQbGFjZWhvbGRlciA9IHZhbHVlID8gdmFsdWUgOiBudWxsO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJykgPz8gJyc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIC8vIFdlIHByaW1hcmlseSB1c2UgY2FwdHVyZSBldmVudCBsaXN0ZW5lcnMsIGFzIHdlIHdhbnRcbiAgICAgIC8vIG91ciBsaXN0ZW5lcnMgdG8gb2NjdXIgYmVmb3JlIGNvbnN1bWVyIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFxuICAgICAgICAnaW5wdXQnLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2NsZWFuVGV4dCh0aGlzLnRleHRDb250ZW50ID8/ICcnKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoJ3ZhbHVlJywgb2xkVmFsdWUpO1xuICAgICAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5hZGQoJ2ludGVyYWN0ZWQnKTtcbiAgICAgICAgICB0aGlzLl9zaG91bGRFbWl0Q2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBjYXB0dXJlOiB0cnVlIH0sXG4gICAgICApO1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2NoYW5nZScsICgpID0+ICh0aGlzLl9zaG91bGRFbWl0Q2hhbmdlID0gZmFsc2UpLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LihcbiAgICAgICAgJ2tleWRvd24nLFxuICAgICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fcmVxdWlyZXNFbXB0eVBhdGNoKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2Fzc2lnblZhbHVlKCcnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2UgcHJldmVudCByZWN1cnNpdmUgZXZlbnRzIGJ5IGNoZWNraW5nIHRoZSBvcmlnaW5hbCBldmVudCBmb3IgaXNUcnVzdGVkXG4gICAgICAgICAgLy8gd2hpY2ggaXMgZmFsc2UgZm9yIG1hbnVhbGx5IGRpc3BhdGNoZWQgZXZlbnRzICh3aGljaCB3ZSBkaXNwYXRjaCBiZWxvdykuXG4gICAgICAgICAgaWYgKChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnXFxuJykgJiYgZXZlbnQuaXNUcnVzdGVkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLl9zaG91bGRUcmlnZ2VyU3VibWl0ID0gdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KCdrZXlkb3duJywgZXZlbnQpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgaXNXZWJraXQgJiZcbiAgICAgICAgICAgIHRoaXMudmFsdWUgJiZcbiAgICAgICAgICAgIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnIHx8IGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpICYmXG4gICAgICAgICAgICBldmVudC5pc1RydXN0ZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEluIFdlYmtpdCBwcmVzc2luZyBCYWNrc3BhY2Ugb3IgRGVsZXRlIGNvbXBsZXRlbHkgcmVtb3ZlcyBhbGwgdGhlIGNvbnRlbnRcbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnRlZGl0YWJsZSBpcyBzZXQgb24gYSB3ZWIgY29tcG9uZW50IGhvc3QuXG4gICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHJlcGxpY2F0ZSB0aGUgbm9ybWFsIGRlbGV0ZSBiZWhhdmlvci5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleWRvd24nLCBldmVudCkpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0ICE9PSBzZWxlY3RlZFJhbmdlLmVuZE9mZnNldCkge1xuICAgICAgICAgICAgICAvLyBJZiBhIHRleHQgcmFuZ2UgaXMgc2VsZWN0ZWQsIHRoZW4gZGVsZXRlIHRoaXMgcmFuZ2VcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICAgICAgICB0aGlzLl9kaXNwYXRjaElucHV0RXZlbnQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJiBzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHByZXNzaW5nIEJhY2tzcGFjZSwgd2Ugc2VsZWN0IHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgZnJvbVxuICAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gYW5kIGRlbGV0ZSBpdC5cbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5zZXRTdGFydChzZWxlY3RlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3RlZFJhbmdlLnN0YXJ0T2Zmc2V0IC0gMSk7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgICAgICAgICAgdGhpcy5fZGlzcGF0Y2hJbnB1dEV2ZW50KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScgJiYgc2VsZWN0ZWRSYW5nZS5lbmRPZmZzZXQgPCB0aGlzLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHByZXNzaW5nIERlbGV0ZSwgd2Ugc2VsZWN0IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tXG4gICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBhbmQgZGVsZXRlIGl0LlxuICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLnNldEVuZChzZWxlY3RlZFJhbmdlLmVuZENvbnRhaW5lciwgc2VsZWN0ZWRSYW5nZS5lbmRPZmZzZXQgKyAxKTtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICAgICAgICB0aGlzLl9kaXNwYXRjaElucHV0RXZlbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgY2FwdHVyZTogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFxuICAgICAgICAna2V5dXAnLFxuICAgICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VJZk5lY2Vzc2FyeSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFRyaWdnZXJTdWJtaXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fc2hvdWxkVHJpZ2dlclN1Ym1pdCA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmZvcm0/LnJlcXVlc3RTdWJtaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3JlcXVpcmVzRW1wdHlQYXRjaCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDdXJzb3JBdCgwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgY2FwdHVyZTogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBhbGxvd3MgcGFzdGluZyByaWNoIGNvbnRlbnQgaW50byBpdHMgaG9zdC5cbiAgICAgIC8vIFdlIHByZXZlbnQgdGhpcyBieSBsaXN0ZW5pbmcgdG8gdGhlIHBhc3RlIGV2ZW50IGFuZFxuICAgICAgLy8gZXh0cmFjdGluZyB0aGUgcGxhaW4gdGV4dCBmcm9tIHRoZSBwYXN0ZWQgY29udGVudFxuICAgICAgLy8gYW5kIGluc2VydGluZyBpdCBpbnRvIHRoZSBzZWxlY3RlZCByYW5nZSAoY3Vyc29yIHBvc2l0aW9uXG4gICAgICAvLyBvciBzZWxlY3Rpb24pLlxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ3Bhc3RlJywgKGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5fcmVxdWlyZXNFbXB0eVBhdGNoKCkpIHtcbiAgICAgICAgICB0aGlzLl9hc3NpZ25WYWx1ZSgnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0ID0gdGhpcy5fY2xlYW5UZXh0KGUuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dC9wbGFpbicpID8/ICcnKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8ICF0ZXh0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZWN0ZWRSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICBzZWxlY3RlZFJhbmdlLmluc2VydE5vZGUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy5wcmVwYXJlUGFzdGVkVGV4dCh0ZXh0KSkpO1xuICAgICAgICBzZWxlY3RlZFJhbmdlLnNldFN0YXJ0KHNlbGVjdGVkUmFuZ2UuZW5kQ29udGFpbmVyLCBzZWxlY3RlZFJhbmdlLmVuZE9mZnNldCk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoSW5wdXRFdmVudCgpO1xuICAgICAgfSk7XG4gICAgICAvLyBXaGVuIGZvY3VzaW5nIGEgdGV4dCBpbnB1dCB2aWEga2V5Ym9hcmQsIHRoZSB0ZXh0IGNvbnRlbnQgc2hvdWxkIGJlIHNlbGVjdGVkLlxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2ZvY3VzJywgKCkgPT4ge1xuICAgICAgICBpZiAoc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yLm1vc3RSZWNlbnRNb2RhbGl0eSA9PT0gJ2tleWJvYXJkJykge1xuICAgICAgICAgIC8vIFRPRE86IFRoaXMgZG9lcyBub3Qgc2VlbSB0byB3b3JrIGluIEZpcmVmb3ggd2l0aCByZWFkb25seS5cbiAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LnNlbGVjdEFsbENoaWxkcmVuKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCd0b3VjaGVuZCcsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVpcmVzRW1wdHlQYXRjaCgpKSB7XG4gICAgICAgICAgdGhpcy5fYXNzaWduVmFsdWUoJyZuYnNwOycpO1xuICAgICAgICAgIHRoaXMuX3NldEN1cnNvckF0KDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVpcmVzRW1wdHlQYXRjaCgpICYmIHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgPT09ICd0b3VjaCcpIHtcbiAgICAgICAgICB0aGlzLl9zZXRDdXJzb3JBdCgwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIE9uIGJsdXIgdGhlIG5hdGl2ZSB0ZXh0IGlucHV0IHNjcm9sbHMgdGhlIHRleHQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0LlxuICAgICAgLy8gV2UgbWltaWMgdGhhdCBieSByZXNldHRpbmcgdGhlIHNjcm9sbCBwb3NpdGlvbi5cbiAgICAgIC8vIFdlIGFsc28gdW5zZXQgYW55IHNlbGVjdGlvbiB0byBhbGlnbiB3aXRoIHRoZSBuYXRpdmUgdGV4dCBpbnB1dC5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKFxuICAgICAgICAnYmx1cicsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5fYXNzaWduVmFsdWUoJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlSWZOZWNlc3NhcnkoKTtcbiAgICAgICAgICB0aGlzLnNjcm9sbExlZnQgPSAwO1xuICAgICAgICB9LFxuICAgICAgICB7IGNhcHR1cmU6IHRydWUgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGlzRGlzYWJsZWRFeHRlcm5hbGx5KCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybURpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICB0aGlzLmludGVybmFscy5hcmlhTXVsdGlMaW5lID0gJ2ZhbHNlJztcbiAgICAgIHRoaXMuX3VwZGF0ZUNvbnRlbnRlZGl0YWJsZSgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIHJlcGxhY2UgYW55IGNvbnRlbnQgYnkganVzdCB0aGUgdGV4dCBjb250ZW50LlxuICAgICAgdGhpcy5fYXNzaWduVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpOiB2b2lkIHtcbiAgICAgIHN1cGVyLmZvY3VzKG9wdGlvbnMpO1xuICAgICAgLy8gQnkgZGVmYXVsdCwgd2hlbiBjYWxsaW5nIGZvY3VzIG9uIGFuIGlucHV0IGVsZW1lbnQsIHRoZSBjdXJzb3IgaXMgcGxhY2VkXG4gICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCB0ZXh0LiBIb3dldmVyLCB3aXRoIGNvbnRlbnRlZGl0YWJsZSwgdGhlIGN1cnNvclxuICAgICAgLy8gaXMgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcsIHNvIHdlIG1vdmUgaXQgdG8gdGhlIGVuZCwgaWYgdGhhdCBpcyB0aGUgY2FzZS5cbiAgICAgIGlmICh0aGlzLl9jYW5TZWxlY3QoKSkge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkgOiBudWxsO1xuICAgICAgICBpZiAocmFuZ2UgJiYgcmFuZ2Uuc3RhcnRPZmZzZXQgIT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXRDdXJzb3JBdCh0aGlzLnRleHRDb250ZW50IS5sZW5ndGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICBvbGQ6IHN0cmluZyB8IG51bGwsXG4gICAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbCxcbiAgICApOiB2b2lkIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIG5hdGl2ZSB0ZXh0IGlucHV0IGNoYW5nZXMgdGhlIHZhbHVlIHByb3BlcnR5IHdoZW4gdGhlIHZhbHVlIGF0dHJpYnV0ZSBpc1xuICAgICAgICogY2hhbmdlZCB1bmRlciB0aGUgY29uZGl0aW9uIHRoYXQgbm8gaW5wdXQgZXZlbnQgaGFzIG9jY3VycmVkIHNpbmNlIGNyZWF0aW9uXG4gICAgICAgKiBvciB0aGUgbGFzdCBmb3JtIHJlc2V0LlxuICAgICAgICovXG4gICAgICBpZiAobmFtZSAhPT0gJ3ZhbHVlJyB8fCAhdGhpcy5tYXRjaGVzPy4oJzpzdGF0ZShpbnRlcmFjdGVkKScpKSB7XG4gICAgICAgIHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGZvcm0gaXMgYmVpbmcgcmVzZXQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKCdpbnRlcmFjdGVkJyk7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykgPz8gJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIENhbGxlZCB3aGVuIHRoZSBicm93c2VyIGlzIHRyeWluZyB0byByZXN0b3JlIGVsZW1lbnTigJlzIHN0YXRlIHRvIHN0YXRlIGluIHdoaWNoIGNhc2VcbiAgICAgKiAgcmVhc29uIGlzIFwicmVzdG9yZVwiLCBvciB3aGVuIHRoZSBicm93c2VyIGlzIHRyeWluZyB0byBmdWxmaWxsIGF1dG9maWxsIG9uIGJlaGFsZiBvZlxuICAgICAqICB1c2VyIGluIHdoaWNoIGNhc2UgcmVhc29uIGlzIFwiYXV0b2NvbXBsZXRlXCIuXG4gICAgICogIEluIHRoZSBjYXNlIG9mIFwicmVzdG9yZVwiLCBzdGF0ZSBpcyBhIHN0cmluZywgRmlsZSwgb3IgRm9ybURhdGEgb2JqZWN0XG4gICAgICogIHByZXZpb3VzbHkgc2V0IGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gc2V0Rm9ybVZhbHVlLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhcbiAgICAgIHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCxcbiAgICAgIF9yZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICAgICk6IHZvaWQge1xuICAgICAgaWYgKHN0YXRlICYmIHR5cGVvZiBzdGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHN0YXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBzZWxlY3Rpb24gZXF1YWwgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LlxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0hUTUxJbnB1dEVsZW1lbnQvc2VsZWN0XG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdCgpOiB2b2lkIHtcbiAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uc2VsZWN0QWxsQ2hpbGRyZW4odGhpcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgYXNzaWduZWQgYmVmb3JlIGZpcnN0VXBkYXRlLCB3ZSBoYXZlIHRvXG4gICAgICAvLyB3cml0ZSBpdCB0aGUgZG9jdW1lbnQgdG8gYmUgdmlzdWFsbHkgc2VlblxuICAgICAgaWYgKHRoaXMudmFsdWUgJiYgIXRoaXMuaW5uZXJIVE1MLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9hc3NpZ25WYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVxdWVzdFVwZGF0ZShcbiAgICAgIG5hbWU/OiBQcm9wZXJ0eUtleSxcbiAgICAgIG9sZFZhbHVlPzogdW5rbm93bixcbiAgICAgIG9wdGlvbnM/OiBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICAgICk6IHZvaWQge1xuICAgICAgc3VwZXIucmVxdWVzdFVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgb3B0aW9ucyk7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNDb25uZWN0ZWQgJiZcbiAgICAgICAgKG5hbWUgPT09ICdkaXNhYmxlZCcgfHwgbmFtZSA9PT0gJ2Zvcm1EaXNhYmxlZCcgfHwgbmFtZSA9PT0gJ3JlYWRPbmx5JylcbiAgICAgICkge1xuICAgICAgICB0aGlzLl91cGRhdGVDb250ZW50ZWRpdGFibGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBzdXBlci5zaG91bGRWYWxpZGF0ZShuYW1lKSB8fCBuYW1lID09PSAndmFsdWUnIHx8IG5hbWUgPT09ICdyZXF1aXJlZCc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgICAgc3VwZXIudmFsaWRhdGUoKTtcbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICF0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnLCBpMThuSW5wdXRSZXF1aXJlZFt0aGlzLmxhbmd1YWdlLmN1cnJlbnRdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlVmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaXNTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgIGlmIChpc1NlcnZlcikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICByZXR1cm4gISFzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwICYmIHRoaXMuY29udGFpbnMoc2VsZWN0aW9uLmFuY2hvck5vZGUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcmVwYXJlUGFzdGVkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVxdWlyZXNFbXB0eVBhdGNoKCk6IGJvb2xlYW4ge1xuICAgICAgLy8gSW4gQmxpbmssIGEgY29udGVudGVkaXRhYmxlIGVsZW1lbnQgd2l0aCBlbXB0eSBjb250ZW50IHdpbGwgY3Jhc2hcbiAgICAgIC8vIHVwb24gcmVjZWl2aW5nIGZvY3VzLCB3aGVuIGluIE1vYmlsZSBtb2RlLlxuICAgICAgLy8gVG8gcHJldmVudCB0aGlzLCB3ZSBwYXRjaCB0aGUgZW1wdHkgc3RhdGUgYnkgaW5zZXJ0aW5nIGEgbm9uLWJyZWFraW5nIHNwYWNlLlxuICAgICAgcmV0dXJuIGlzU2VydmVyXG4gICAgICAgID8gZmFsc2VcbiAgICAgICAgOiBpc0JsaW5rICYmIHRoaXMudmFsdWUgPT09ICcnICYmIHdpbmRvdy5tYXRjaE1lZGlhKFNiYk1lZGlhUXVlcnlQb2ludGVyQ29hcnNlKS5tYXRjaGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Fzc2lnblZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgIHRoaXMuaW5uZXJIVE1MID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0Q3Vyc29yQXQocG9zaXRpb246IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICByYW5nZS5zZXRTdGFydCh0aGlzLmZpcnN0Q2hpbGQhLCBwb3NpdGlvbik7XG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2xlYW5UZXh0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgLy8gVGhlIG5hdGl2ZSB0ZXh0IGlucHV0IHJlbW92ZXMgYWxsIG5ld2xpbmUgY2hhcmFjdGVycyBpZiBwYXNzZWQgdG8gdGhlIHZhbHVlIHByb3BlcnR5XG4gICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyAnJyA6IGAke3ZhbHVlfWAucmVwbGFjZSgvW1xcblxccl0rL2csICcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kaXNwYXRjaElucHV0RXZlbnQoKTogdm9pZCB7XG4gICAgICAvKiogVGhlIGlucHV0IGV2ZW50IGZpcmVzIHdoZW4gdGhlIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgYXMgYSBkaXJlY3QgcmVzdWx0IG9mIGEgdXNlciBhY3Rpb24uICovXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gICAgfVxuXG4gICAgQGV2ZW50T3B0aW9ucyh7IHBhc3NpdmU6IHRydWUgfSlcbiAgICBwcml2YXRlIF9jbGVhbkNoaWxkcmVuKCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuY2hpbGRFbGVtZW50Q291bnQpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgICAgICBlbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBkYXRlQ29udGVudGVkaXRhYmxlKCk6IHZvaWQge1xuICAgICAgaWYgKCFpc1NlcnZlciAmJiB0aGlzLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFSZWFkT25seSA9IHRoaXMucmVhZE9ubHkgPyAndHJ1ZScgOiBudWxsO1xuICAgICAgICB0aGlzLmludGVybmFscy5hcmlhRGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkID8gJ3RydWUnIDogbnVsbDtcbiAgICAgICAgLy8gVE9ETygyMDI2KTogRmlyZWZveCBzdXBwb3J0cyBwbGFpbnRleHQtb25seSBzaW5jZSB2ZXJzaW9uIDEzNiAoTWFyY2ggMjAyNSkuXG4gICAgICAgIC8vIFVudGlsIHRoaXMgaXMgcGFydCBvZiBvdXIgYmFzZWxpbmUsIHdlIHNob3VsZCBmZWF0dXJlIGNoZWNrIHRvIGVuYWJsZSBpdC5cbiAgICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAgIHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkT25seVxuICAgICAgICAgICAgPyAnZmFsc2UnXG4gICAgICAgICAgICA6IHBsYWludGV4dE9ubHlTdXBwb3J0ZWRcbiAgICAgICAgICAgICAgPyAncGxhaW50ZXh0LW9ubHknXG4gICAgICAgICAgICAgIDogJ3RydWUnO1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgdmFsdWUpO1xuICAgICAgICAvLyBJbiB0aGUgcmVhZG9ubHkgY2FzZSwgd2UgZGlzYWJsZSBjb250ZW50ZWRpdGFibGUsIGJ1dCBpdCBzdGlsbFxuICAgICAgICAvLyBuZWVkcyB0byBiZSBmb2N1c2FibGUuIFdlIGFjaGlldmUgdGhpcyBieSBzZXR0aW5nIHRhYmluZGV4IGluIHRoYXQgY2FzZS5cbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZW1pdENoYW5nZUlmTmVjZXNzYXJ5KCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuX3Nob3VsZEVtaXRDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5fc2hvdWxkRW1pdENoYW5nZSA9IGZhbHNlO1xuICAgICAgICAvKiogVGhlIGNoYW5nZSBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIG1vZGlmaWVzIHRoZSBlbGVtZW50J3MgdmFsdWUuIFVubGlrZSB0aGUgaW5wdXQgZXZlbnQsIHRoZSBjaGFuZ2UgZXZlbnQgaXMgbm90IG5lY2Vzc2FyaWx5IGZpcmVkIGZvciBlYWNoIGFsdGVyYXRpb24gdG8gYW4gZWxlbWVudCdzIHZhbHVlLiAqL1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2NhblNlbGVjdCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAhaXNTZXJ2ZXIgJiYgIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMucmVhZE9ubHkgJiYgISF0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogdW5rbm93biB7XG4gICAgICByZXR1cm4gaHRtbGA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuX2NsZWFuQ2hpbGRyZW59Pjwvc2xvdD5gO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBTYmJGb3JtQXNzb2NpYXRlZElucHV0RWxlbWVudCBhcyB1bmtub3duIGFzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiRm9ybUFzc29jaWF0ZWRJbnB1dE1peGluVHlwZT4gJlxuICAgIFQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBNkRBLElBQU0sa0NBQTBDO0NBQzlD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
@@ -1 +1 @@
1
- {"version":3,"file":"date-input.component.d.ts","sourceRoot":"","sources":["../../../../src/elements/date-input/date-input.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAY,KAAK,mBAAmB,EAAa,MAAM,KAAK,CAAC;AAGzF,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAWtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAY7D;;;GAGG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACtC;;AAED;;GAEG;AACH,qBAAa,mBAAmB,CAAC,CAAC,GAAG,IAAI,CAAE,SAAQ,wBAAuC;IACxF,gBAAgC,WAAW,EAAE,MAAM,CAAoB;IACvE,OAAuB,MAAM,EAAE,cAAc,CAAoB;IAEjE;;;;;OAKG;IACH,IAAoB,KAAK,CAAC,KAAK,EAAE,MAAM,EAQtC;IACD,IAAoB,KAAK,IAAI,MAAM,CAElC;IAED,iDAAiD;IACjD,IACW,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAsBrC;IACD,IAAW,WAAW,IAAI,CAAC,GAAG,IAAI,CAIjC;IACD,OAAO,CAAC,YAAY,CAAC,CAAW;IAEhC;;;OAGG;IACH,SAEgB,GAAG,EAAE,CAAC,GAAG,IAAI,CAAQ;IAErC;;;OAGG;IACH,SAEgB,GAAG,EAAE,CAAC,GAAG,IAAI,CAAQ;IAErC;;;;OAIG;IACH,IACW,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,EAEvD;IACD,IAAW,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,CAEnD;IAED;;;;OAIG;IACH,SACgB,YAAY,EAAE,OAAO,GAAG,MAAM,CAAW;IAEzD;;;OAGG;IACH,OAAO,CAAC,WAAW,CAAC,CAAqB;IACzC,OAAO,CAAC,YAAY,CAA4E;IAChG,OAAO,CAAC,mBAAmB,CAAS;IAEpC;;;OAGG;IACH,IAAW,UAAU,IAAI,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI,CAEtD;;IAOD;;OAEG;WACW,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,GAAG,sBAAsB,CAAC,CAAC,CAAC,GAAG,IAAI;IAaxF,OAAO,CAAC,WAAW,CAA2C;IAE9C,iBAAiB,IAAI,IAAI;IAmBzB,aAAa,CAC3B,IAAI,CAAC,EAAE,WAAW,EAClB,QAAQ,CAAC,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,IAAI;cAiBY,eAAe,IAAI,IAAI;IAO1C,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,WAAW;cAIA,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO;cAOtD,QAAQ,IAAI,IAAI;IAiCnC,OAAO,CAAC,qBAAqB;CAK9B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,gBAAgB,EAAE,mBAAmB,CAAC;KACvC;IAED,UAAU,mBAAmB;QAC3B,aAAa,EAAE,OAAO,CAAC;KACxB;CACF"}
1
+ {"version":3,"file":"date-input.component.d.ts","sourceRoot":"","sources":["../../../../src/elements/date-input/date-input.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAY,KAAK,mBAAmB,EAAa,MAAM,KAAK,CAAC;AAGzF,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAWtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAY7D;;;GAGG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACtC;;AAED;;GAEG;AACH,qBAAa,mBAAmB,CAAC,CAAC,GAAG,IAAI,CAAE,SAAQ,wBAAuC;IACxF,gBAAgC,WAAW,EAAE,MAAM,CAAoB;IACvE,OAAuB,MAAM,EAAE,cAAc,CAAoB;IAEjE;;;;;OAKG;IACH,IAAoB,KAAK,CAAC,KAAK,EAAE,MAAM,EAQtC;IACD,IAAoB,KAAK,IAAI,MAAM,CAElC;IAED,iDAAiD;IACjD,IACW,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EA8BrC;IACD,IAAW,WAAW,IAAI,CAAC,GAAG,IAAI,CAIjC;IACD,OAAO,CAAC,YAAY,CAAC,CAAW;IAEhC;;;OAGG;IACH,SAEgB,GAAG,EAAE,CAAC,GAAG,IAAI,CAAQ;IAErC;;;OAGG;IACH,SAEgB,GAAG,EAAE,CAAC,GAAG,IAAI,CAAQ;IAErC;;;;OAIG;IACH,IACW,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,EAEvD;IACD,IAAW,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,CAEnD;IAED;;;;OAIG;IACH,SACgB,YAAY,EAAE,OAAO,GAAG,MAAM,CAAW;IAEzD;;;OAGG;IACH,OAAO,CAAC,WAAW,CAAC,CAAqB;IACzC,OAAO,CAAC,YAAY,CAA4E;IAChG,OAAO,CAAC,mBAAmB,CAAS;IAEpC;;;OAGG;IACH,IAAW,UAAU,IAAI,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI,CAEtD;;IAOD;;OAEG;WACW,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,GAAG,sBAAsB,CAAC,CAAC,CAAC,GAAG,IAAI;IAaxF,OAAO,CAAC,WAAW,CAA2C;IAE9C,iBAAiB,IAAI,IAAI;IAmBzB,aAAa,CAC3B,IAAI,CAAC,EAAE,WAAW,EAClB,QAAQ,CAAC,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,IAAI;cAiBY,eAAe,IAAI,IAAI;IAO1C,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,WAAW;cAIA,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO;cAOtD,QAAQ,IAAI,IAAI;IAiCnC,OAAO,CAAC,qBAAqB;CAK9B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,gBAAgB,EAAE,mBAAmB,CAAC;KACvC;IAED,UAAU,mBAAmB;QAC3B,aAAa,EAAE,OAAO,CAAC;KACxB;CACF"}
@@ -1,2 +1,2 @@
1
- import { t as SbbDateInputElement } from "../date-input.component-aFqmx0uy.js";
1
+ import { t as SbbDateInputElement } from "../date-input.component-BBdsFSUJ.js";
2
2
  export { SbbDateInputElement };
@@ -0,0 +1,307 @@
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ import { isServer, unsafeCSS } from "lit";
3
+ import { property } from "lit/decorators.js";
4
+ import { SbbElement } from "./core/base-elements.js";
5
+ import { plainDate, plainDateConverter } from "./core/decorators.js";
6
+ import { SbbFormAssociatedInputMixin } from "./core/mixins.js";
7
+ import { i18nDateInvalid, i18nDateMax, i18nDateMin, i18nDatePickerPlaceholder } from "./core/i18n.js";
8
+ import { readConfig } from "./core/config.js";
9
+ import { defaultDateAdapter } from "./core/datetime.js";
10
+ //#region src/elements/date-input/date-input.scss?inline
11
+ var date_input_default = ":host {\n display: inline-flex;\n min-width: 9.375rem;\n max-width: 100%;\n cursor: text;\n align-items: center;\n font-weight: normal;\n}\n@media (forced-colors: active) {\n :host {\n color: FieldText;\n }\n}\n\n:host(:disabled) {\n cursor: var(--sbb-cursor-default);\n}\n\n:host(:focus) {\n text-overflow: initial !important;\n}\n\n:host(:empty)::after {\n content: attr(placeholder);\n color: var(--sbb-color-5);\n -webkit-text-fill-color: var(--sbb-color-5);\n opacity: 1;\n}\n@media (forced-colors: active) {\n :host(:empty)::after {\n color: GrayText;\n }\n}";
12
+ //#endregion
13
+ //#region src/elements/date-input/date-input.component.ts
14
+ Object.assign(ValidityState.prototype, { get sbbDateFilter() {
15
+ return false;
16
+ } });
17
+ /**
18
+ * Custom input for a date.
19
+ */
20
+ var SbbDateInputElement = (() => {
21
+ let _classSuper = SbbFormAssociatedInputMixin(SbbElement);
22
+ let _instanceExtraInitializers = [];
23
+ let _set_valueAsDate_decorators;
24
+ let _min_decorators;
25
+ let _min_initializers = [];
26
+ let _min_extraInitializers = [];
27
+ let _max_decorators;
28
+ let _max_initializers = [];
29
+ let _max_extraInitializers = [];
30
+ let _set_dateFilter_decorators;
31
+ let _weekdayStyle_decorators;
32
+ let _weekdayStyle_initializers = [];
33
+ let _weekdayStyle_extraInitializers = [];
34
+ return class SbbDateInputElement extends _classSuper {
35
+ static {
36
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
37
+ _set_valueAsDate_decorators = [property({ attribute: false })];
38
+ _min_decorators = [plainDate(), property({
39
+ converter: plainDateConverter,
40
+ reflect: true
41
+ })];
42
+ _max_decorators = [plainDate(), property({
43
+ converter: plainDateConverter,
44
+ reflect: true
45
+ })];
46
+ _set_dateFilter_decorators = [property({ attribute: false })];
47
+ _weekdayStyle_decorators = [property({ attribute: "weekday-style" })];
48
+ __esDecorate(this, null, _set_valueAsDate_decorators, {
49
+ kind: "setter",
50
+ name: "valueAsDate",
51
+ static: false,
52
+ private: false,
53
+ access: {
54
+ has: (obj) => "valueAsDate" in obj,
55
+ set: (obj, value) => {
56
+ obj.valueAsDate = value;
57
+ }
58
+ },
59
+ metadata: _metadata
60
+ }, null, _instanceExtraInitializers);
61
+ __esDecorate(this, null, _min_decorators, {
62
+ kind: "accessor",
63
+ name: "min",
64
+ static: false,
65
+ private: false,
66
+ access: {
67
+ has: (obj) => "min" in obj,
68
+ get: (obj) => obj.min,
69
+ set: (obj, value) => {
70
+ obj.min = value;
71
+ }
72
+ },
73
+ metadata: _metadata
74
+ }, _min_initializers, _min_extraInitializers);
75
+ __esDecorate(this, null, _max_decorators, {
76
+ kind: "accessor",
77
+ name: "max",
78
+ static: false,
79
+ private: false,
80
+ access: {
81
+ has: (obj) => "max" in obj,
82
+ get: (obj) => obj.max,
83
+ set: (obj, value) => {
84
+ obj.max = value;
85
+ }
86
+ },
87
+ metadata: _metadata
88
+ }, _max_initializers, _max_extraInitializers);
89
+ __esDecorate(this, null, _set_dateFilter_decorators, {
90
+ kind: "setter",
91
+ name: "dateFilter",
92
+ static: false,
93
+ private: false,
94
+ access: {
95
+ has: (obj) => "dateFilter" in obj,
96
+ set: (obj, value) => {
97
+ obj.dateFilter = value;
98
+ }
99
+ },
100
+ metadata: _metadata
101
+ }, null, _instanceExtraInitializers);
102
+ __esDecorate(this, null, _weekdayStyle_decorators, {
103
+ kind: "accessor",
104
+ name: "weekdayStyle",
105
+ static: false,
106
+ private: false,
107
+ access: {
108
+ has: (obj) => "weekdayStyle" in obj,
109
+ get: (obj) => obj.weekdayStyle,
110
+ set: (obj, value) => {
111
+ obj.weekdayStyle = value;
112
+ }
113
+ },
114
+ metadata: _metadata
115
+ }, _weekdayStyle_initializers, _weekdayStyle_extraInitializers);
116
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, {
117
+ enumerable: true,
118
+ configurable: true,
119
+ writable: true,
120
+ value: _metadata
121
+ });
122
+ }
123
+ static {
124
+ this.elementName = "sbb-date-input";
125
+ }
126
+ static {
127
+ this.styles = unsafeCSS(date_input_default);
128
+ }
129
+ /**
130
+ * The value of the date input. Reflects the current text value
131
+ * of this input.
132
+ * The attribute `value` Accepts ISO8601 formatted values, which will be
133
+ * formatted according to the current locale.
134
+ */
135
+ set value(value) {
136
+ this._tryParseValue(value);
137
+ if (!isServer && !this.isSelected() && this.valueAsDate !== null) value = this._formatDate();
138
+ super.value = value;
139
+ }
140
+ get value() {
141
+ return super.value ?? "";
142
+ }
143
+ /** Formats the current input's value as date. */
144
+ set valueAsDate(value) {
145
+ value = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
146
+ if (this.isSelected() && (value === null || this._dateAdapter.sameDate(value, this._dateAdapter.parse(this.value)))) {} else if (!value) {
147
+ this._valueAsDate = null;
148
+ this._valueCache = ["", null];
149
+ this.value = "";
150
+ } else if (!this._dateAdapter.isDateInstance(this._valueAsDate) || this._dateAdapter.compareDate(this._valueAsDate, value) !== 0) {
151
+ this._valueAsDate = this._dateAdapter.createDate(this._dateAdapter.getYear(value), this._dateAdapter.getMonth(value), this._dateAdapter.getDate(value));
152
+ const stringValue = this._formatDate();
153
+ this._valueCache = [stringValue, this._valueAsDate];
154
+ this.value = stringValue;
155
+ }
156
+ }
157
+ get valueAsDate() {
158
+ return this._valueAsDate ? this._dateAdapter.clone(this._valueAsDate) : null;
159
+ }
160
+ #min_accessor_storage;
161
+ /**
162
+ * The minimum valid date. Accepts a date object or null.
163
+ * Accepts an ISO8601 formatted string (e.g. 2024-12-24) as attribute.
164
+ */
165
+ get min() {
166
+ return this.#min_accessor_storage;
167
+ }
168
+ set min(value) {
169
+ this.#min_accessor_storage = value;
170
+ }
171
+ #max_accessor_storage;
172
+ /**
173
+ * The maximum valid date. Accepts a date object or null.
174
+ * Accepts an ISO8601 formatted string (e.g. 2024-12-24) as attribute.
175
+ */
176
+ get max() {
177
+ return this.#max_accessor_storage;
178
+ }
179
+ set max(value) {
180
+ this.#max_accessor_storage = value;
181
+ }
182
+ /**
183
+ * A function used to filter out dates.
184
+ * It is strongly recommended to use min and max dates alongside
185
+ * this filter.
186
+ */
187
+ set dateFilter(value) {
188
+ this._dateFilter = value;
189
+ }
190
+ get dateFilter() {
191
+ return this._dateFilter;
192
+ }
193
+ #weekdayStyle_accessor_storage;
194
+ /**
195
+ * How to format the displayed date.
196
+ * `short`: Two letter abbreviation of the week day (e.g. Fr).
197
+ * `none`: The weekday is not displayed.
198
+ */
199
+ get weekdayStyle() {
200
+ return this.#weekdayStyle_accessor_storage;
201
+ }
202
+ set weekdayStyle(value) {
203
+ this.#weekdayStyle_accessor_storage = value;
204
+ }
205
+ /**
206
+ * Gets the associated datepicker, if any.
207
+ * The sbb-date-input and the sbb-datepicker are assumed to be in the same parent container.
208
+ */
209
+ get datepicker() {
210
+ return this.parentElement.querySelector("sbb-datepicker");
211
+ }
212
+ constructor() {
213
+ super();
214
+ this._valueAsDate = __runInitializers(this, _instanceExtraInitializers);
215
+ this.#min_accessor_storage = __runInitializers(this, _min_initializers, null);
216
+ this.#max_accessor_storage = (__runInitializers(this, _min_extraInitializers), __runInitializers(this, _max_initializers, null));
217
+ this.#weekdayStyle_accessor_storage = (__runInitializers(this, _max_extraInitializers), __runInitializers(this, _weekdayStyle_initializers, "short"));
218
+ /**
219
+ * Stores the last string and parsed date object value to prevent repeated
220
+ * parsing of the string value.
221
+ */
222
+ this._valueCache = __runInitializers(this, _weekdayStyle_extraInitializers);
223
+ this._dateAdapter = readConfig().datetime?.dateAdapter ?? defaultDateAdapter;
224
+ this._placeholderMutable = false;
225
+ this._dateFilter = () => true;
226
+ this.addEventListener?.("change", () => this._updateValueDateFormat(), { capture: true });
227
+ }
228
+ /**
229
+ * Attempts to resolve the associated date input with the given element.
230
+ */
231
+ static resolveAssociation(host) {
232
+ if (host.hasAttribute("input") || host.input) return;
233
+ const input = host.closest("sbb-form-field")?.querySelector("sbb-date-input");
234
+ if (input) host.input = input;
235
+ }
236
+ connectedCallback() {
237
+ super.connectedCallback();
238
+ if (!this.placeholder) {
239
+ this._placeholderMutable = true;
240
+ this.placeholder = i18nDatePickerPlaceholder[this.language.current];
241
+ }
242
+ for (const child of Array.from(this.closest("sbb-form-field")?.children ?? [])) {
243
+ customElements.upgrade?.(child);
244
+ if (child.constructor.sbbDateInputAssociated && !child.hasAttribute("input") && !child.input) child.input = this;
245
+ }
246
+ }
247
+ requestUpdate(name, oldValue, options) {
248
+ super.requestUpdate(name, oldValue, options);
249
+ if (this.hasUpdated && !name) {
250
+ this._updateValueDateFormat();
251
+ if (this._placeholderMutable) this.placeholder = i18nDatePickerPlaceholder[this.language.current];
252
+ } else if (name === "weekdayStyle") this._updateValueDateFormat();
253
+ if (this.isConnected)
254
+ /** @internal */
255
+ this.dispatchEvent(new Event("ɵchange"));
256
+ }
257
+ updateFormValue() {
258
+ this._tryParseValue();
259
+ const formValue = this.valueAsDate !== null ? this._dateAdapter.toIso8601(this.valueAsDate) : null;
260
+ this.internals.setFormValue(formValue, this.value);
261
+ }
262
+ _tryParseValue(value = this.value) {
263
+ if (this._valueCache?.[0] !== value) {
264
+ this._valueAsDate = this._dateAdapter.parse(value);
265
+ this._valueCache = [value, this._valueAsDate];
266
+ }
267
+ }
268
+ _updateValueDateFormat() {
269
+ if (this.valueAsDate) {
270
+ const formattedDate = this._formatDate();
271
+ if (this.value !== formattedDate) super.value = formattedDate;
272
+ }
273
+ }
274
+ _formatDate() {
275
+ return this._dateAdapter.format(this.valueAsDate, { weekdayStyle: this.weekdayStyle });
276
+ }
277
+ shouldValidate(name) {
278
+ return super.shouldValidate(name) || [
279
+ "valueAsDate",
280
+ "min",
281
+ "max",
282
+ "dateFilter"
283
+ ].includes(name);
284
+ }
285
+ validate() {
286
+ super.validate();
287
+ if (!this.value) this._removeValidityErrors();
288
+ else if (!this._dateAdapter.isValid(this.valueAsDate)) this.setValidityFlag("badInput", i18nDateInvalid[this.language.current]);
289
+ else if (this._dateAdapter.isValid(this.min) && this._dateAdapter.compareDate(this.min, this.valueAsDate) > 0) this.setValidityFlag("rangeUnderflow", i18nDateMin(this._dateAdapter.format(this.min, { weekdayStyle: "none" }))[this.language.current]);
290
+ else if (this._dateAdapter.isValid(this.max) && this._dateAdapter.compareDate(this.valueAsDate, this.max) > 0) this.setValidityFlag("rangeOverflow", i18nDateMax(this._dateAdapter.format(this.max, { weekdayStyle: "none" }))[this.language.current]);
291
+ else if (this.dateFilter && !this.dateFilter(this.valueAsDate)) this.setValidityFlag("sbbDateFilter", i18nDateInvalid[this.language.current]);
292
+ else this._removeValidityErrors();
293
+ }
294
+ _removeValidityErrors() {
295
+ [
296
+ "badInput",
297
+ "rangeUnderflow",
298
+ "rangeOverflow",
299
+ "sbbDateFilter"
300
+ ].forEach((f) => this.removeValidityFlag(f));
301
+ }
302
+ };
303
+ })();
304
+ //#endregion
305
+ export { SbbDateInputElement as t };
306
+
307
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQtQkJkc0ZTVUouanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2RhdGUtaW5wdXQvZGF0ZS1pbnB1dC5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIkB1c2UgJy4uL2NvcmUvc3R5bGVzJyBhcyBzYmI7XG5cbjpob3N0IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG5cbiAgLy8gV2l0aCBzYmItZm9ybS1maWVsZFt3aWR0aD1cImNvbGxhcHNlZFwiXSwgdGhlIGRlZmF1bHQgbWluIHdpZHRoIG9mIGFcbiAgLy8gYW4gaW5saW5lIGVsZW1lbnQgaXMgYmFzaWNhbGx5IG5vdGhpbmcgKGV4Y2VwdCBwb3RlbnRpYWxseSB0aGUgcGxhY2Vob2xkZXIpLlxuICAvLyBEdWUgdG8gdGhpcywgd2Ugc2V0IGEgbWluaW11bSB3aWR0aCBvZiB0aGUgZGF0ZSBpbnB1dCBlbGVtZW50LlxuICBtaW4td2lkdGg6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgxNTApfTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBjdXJzb3I6IHRleHQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIGNvbG9yOiBGaWVsZFRleHQ7XG4gIH1cbn1cblxuOmhvc3QoOmRpc2FibGVkKSB7XG4gIGN1cnNvcjogdmFyKC0tc2JiLWN1cnNvci1kZWZhdWx0KTtcbn1cblxuOmhvc3QoOmZvY3VzKSB7XG4gIHRleHQtb3ZlcmZsb3c6IGluaXRpYWwgIWltcG9ydGFudDtcbn1cblxuOmhvc3QoOmVtcHR5KTo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKHBsYWNlaG9sZGVyKTtcbiAgQGluY2x1ZGUgc2JiLnBsYWNlaG9sZGVyO1xuICBAaW5jbHVkZSBzYmIuaWYtZm9yY2VkLWNvbG9ycyB7XG4gICAgY29sb3I6IEdyYXlUZXh0O1xuICB9XG59XG4iLCJpbXBvcnQgeyB0eXBlIENTU1Jlc3VsdEdyb3VwLCBpc1NlcnZlciwgdHlwZSBQcm9wZXJ0eURlY2xhcmF0aW9uLCB1bnNhZmVDU1MgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IFNiYkVsZW1lbnQgfSBmcm9tICcuLi9jb3JlL2Jhc2UtZWxlbWVudHMudHMnO1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJy4uL2NvcmUvY29uZmlnLnRzJztcbmltcG9ydCB7IHR5cGUgRGF0ZUFkYXB0ZXIsIGRlZmF1bHREYXRlQWRhcHRlciB9IGZyb20gJy4uL2NvcmUvZGF0ZXRpbWUudHMnO1xuaW1wb3J0IHsgcGxhaW5EYXRlLCBwbGFpbkRhdGVDb252ZXJ0ZXIgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMudHMnO1xuaW1wb3J0IHtcbiAgaTE4bkRhdGVJbnZhbGlkLFxuICBpMThuRGF0ZU1heCxcbiAgaTE4bkRhdGVNaW4sXG4gIGkxOG5EYXRlUGlja2VyUGxhY2Vob2xkZXIsXG59IGZyb20gJy4uL2NvcmUvaTE4bi50cyc7XG5pbXBvcnQgeyBTYmJGb3JtQXNzb2NpYXRlZElucHV0TWl4aW4gfSBmcm9tICcuLi9jb3JlL21peGlucy50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYkRhdGVwaWNrZXJFbGVtZW50IH0gZnJvbSAnLi4vZGF0ZXBpY2tlci50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2RhdGUtaW5wdXQuc2Nzcz9pbmxpbmUnO1xuXG4vLyBBcyBkb2N1bWVudGVkIGluIGZvcm0tYXNzb2NpYXRlZC1taXhpbi50cywgd2UgZXh0ZW5kIHRoZSBwcm90b3R5cGUgb2Zcbi8vIFZhbGlkaXR5U3RhdGUgd2l0aCBjdXN0b20gZXJyb3Igc3RhdGVzIGZvciB0aGUgZGF0ZSBpbnB1dC5cbk9iamVjdC5hc3NpZ24oVmFsaWRpdHlTdGF0ZS5wcm90b3R5cGUsIHtcbiAgZ2V0IHNiYkRhdGVGaWx0ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxufSk7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBlbGVtZW50cyB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSBkYXRlIGlucHV0LlxuICogSW1wbGVtZW50aW5nIGNsYXNzZXMgbXVzdCBhbHNvIGhhdmUgYSBzdGF0aWMgcHJvcGVydHkgYHNiYkRhdGVJbnB1dEFzc29jaWF0ZWRgIHNldCB0byBgdHJ1ZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2JiRGF0ZUlucHV0QXNzb2NpYXRlZDxUPiB7XG4gIGlucHV0OiBTYmJEYXRlSW5wdXRFbGVtZW50PFQ+IHwgbnVsbDtcbn1cblxuLyoqXG4gKiBDdXN0b20gaW5wdXQgZm9yIGEgZGF0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkRhdGVJbnB1dEVsZW1lbnQ8VCA9IERhdGU+IGV4dGVuZHMgU2JiRm9ybUFzc29jaWF0ZWRJbnB1dE1peGluKFNiYkVsZW1lbnQpIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1kYXRlLWlucHV0JztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gdW5zYWZlQ1NTKHN0eWxlKTtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBkYXRlIGlucHV0LiBSZWZsZWN0cyB0aGUgY3VycmVudCB0ZXh0IHZhbHVlXG4gICAqIG9mIHRoaXMgaW5wdXQuXG4gICAqIFRoZSBhdHRyaWJ1dGUgYHZhbHVlYCBBY2NlcHRzIElTTzg2MDEgZm9ybWF0dGVkIHZhbHVlcywgd2hpY2ggd2lsbCBiZVxuICAgKiBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGxvY2FsZS5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3RyeVBhcnNlVmFsdWUodmFsdWUpO1xuICAgIC8vIEFzIGxvbmcgYXMgdGhpcyBlbGVtZW50IGhhcyBmb2N1cyB3ZSBkZWxheSBhdXRvbWF0aWNhbGx5IHVwZGF0aW5nXG4gICAgLy8gdGhlIHZhbHVlIHdpdGggdGhlIGZvcm1hdHRlZCBzdHJpbmcgb2YgdGhlIHBhcnNlZCBkYXRlLlxuICAgIGlmICghaXNTZXJ2ZXIgJiYgIXRoaXMuaXNTZWxlY3RlZCgpICYmIHRoaXMudmFsdWVBc0RhdGUgIT09IG51bGwpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5fZm9ybWF0RGF0ZSgpO1xuICAgIH1cbiAgICBzdXBlci52YWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VwZXIudmFsdWUgPz8gJyc7XG4gIH1cblxuICAvKiogRm9ybWF0cyB0aGUgY3VycmVudCBpbnB1dCdzIHZhbHVlIGFzIGRhdGUuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgcHVibGljIHNldCB2YWx1ZUFzRGF0ZSh2YWx1ZTogVCB8IG51bGwpIHtcbiAgICB2YWx1ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICAgIGlmIChcbiAgICAgIHRoaXMuaXNTZWxlY3RlZCgpICYmXG4gICAgICAodmFsdWUgPT09IG51bGwgfHwgdGhpcy5fZGF0ZUFkYXB0ZXIuc2FtZURhdGUodmFsdWUsIHRoaXMuX2RhdGVBZGFwdGVyLnBhcnNlKHRoaXMudmFsdWUpKSlcbiAgICApIHtcbiAgICAgIC8vIERvIG5vdGhpbmcsIGFzIHRoZSB1c2VyIGlzIGN1cnJlbnRseSBlZGl0aW5nIHRoZSB2YWx1ZSBhbmQgdGhlIHBhcnNlZFxuICAgICAgLy8gZGF0ZSBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCB2YWx1ZS5cbiAgICAgIC8vIFRoaXMgY2FuIGFsc28gaGFwcGVuIHdpdGggQW5ndWxhciBGb3JtcyBTaWduYWxzLCBhcyBpdCBjdXJyZW50bHlcbiAgICAgIC8vIGNvbnRpbnVvdXNseSBpbnZva2VzIHdyaXRlVmFsdWUsIHdoaWNoIGFzc2lnbnMgdG8gdGhpcyBzZXR0ZXIuXG4gICAgfSBlbHNlIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlQXNEYXRlID0gbnVsbDtcbiAgICAgIHRoaXMuX3ZhbHVlQ2FjaGUgPSBbJycsIG51bGxdO1xuICAgICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhdGhpcy5fZGF0ZUFkYXB0ZXIuaXNEYXRlSW5zdGFuY2UodGhpcy5fdmFsdWVBc0RhdGUpIHx8XG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLl92YWx1ZUFzRGF0ZSEsIHZhbHVlISkgIT09IDBcbiAgICApIHtcbiAgICAgIC8vIEFsaWduIHdpdGggdGhlIG5hdGl2ZSBkYXRlIGlucHV0LCBhcyBpdCBjb3BpZXMgdGhlIHZhbHVlIG9mXG4gICAgICAvLyB0aGUgZ2l2ZW4gZGF0ZSB3aXRob3V0IHRoZSB0aW1lIGFuZCBkb2VzIG5vdCByZXRhaW4gdGhlXG4gICAgICAvLyBvcmlnaW5hbCBpbnN0YW5jZS5cbiAgICAgIHRoaXMuX3ZhbHVlQXNEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih2YWx1ZSksXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHZhbHVlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh2YWx1ZSksXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RyaW5nVmFsdWUgPSB0aGlzLl9mb3JtYXREYXRlKCk7XG4gICAgICB0aGlzLl92YWx1ZUNhY2hlID0gW3N0cmluZ1ZhbHVlLCB0aGlzLl92YWx1ZUFzRGF0ZV07XG4gICAgICB0aGlzLnZhbHVlID0gc3RyaW5nVmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWVBc0RhdGUoKTogVCB8IG51bGwge1xuICAgIC8vIFdlIHNob3VsZCBuZXZlciByZXR1cm4gdGhlIGludGVybmFsIGRhdGUgb2JqZWN0IGRpcmVjdGx5LCBhcyBpdFxuICAgIC8vIGNvdWxkIGJlIG1hbmlwdWxhdGVkIG91dHNpZGUgb2YgdGhpcyBjbGFzcy5cbiAgICByZXR1cm4gdGhpcy5fdmFsdWVBc0RhdGUgPyB0aGlzLl9kYXRlQWRhcHRlci5jbG9uZSh0aGlzLl92YWx1ZUFzRGF0ZSkgOiBudWxsO1xuICB9XG4gIHByaXZhdGUgX3ZhbHVlQXNEYXRlPzogVCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHZhbGlkIGRhdGUuIEFjY2VwdHMgYSBkYXRlIG9iamVjdCBvciBudWxsLlxuICAgKiBBY2NlcHRzIGFuIElTTzg2MDEgZm9ybWF0dGVkIHN0cmluZyAoZS5nLiAyMDI0LTEyLTI0KSBhcyBhdHRyaWJ1dGUuXG4gICAqL1xuICBAcGxhaW5EYXRlKClcbiAgQHByb3BlcnR5KHsgY29udmVydGVyOiBwbGFpbkRhdGVDb252ZXJ0ZXIsIHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIG1pbjogVCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB2YWxpZCBkYXRlLiBBY2NlcHRzIGEgZGF0ZSBvYmplY3Qgb3IgbnVsbC5cbiAgICogQWNjZXB0cyBhbiBJU084NjAxIGZvcm1hdHRlZCBzdHJpbmcgKGUuZy4gMjAyNC0xMi0yNCkgYXMgYXR0cmlidXRlLlxuICAgKi9cbiAgQHBsYWluRGF0ZSgpXG4gIEBwcm9wZXJ0eSh7IGNvbnZlcnRlcjogcGxhaW5EYXRlQ29udmVydGVyLCByZWZsZWN0OiB0cnVlIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBtYXg6IFQgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB1c2VkIHRvIGZpbHRlciBvdXQgZGF0ZXMuXG4gICAqIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHVzZSBtaW4gYW5kIG1heCBkYXRlcyBhbG9uZ3NpZGVcbiAgICogdGhpcyBmaWx0ZXIuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHB1YmxpYyBzZXQgZGF0ZUZpbHRlcih2YWx1ZTogKGRhdGU6IFQgfCBudWxsKSA9PiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGF0ZUZpbHRlciA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgZGF0ZUZpbHRlcigpOiAoZGF0ZTogVCB8IG51bGwpID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRlRmlsdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvdyB0byBmb3JtYXQgdGhlIGRpc3BsYXllZCBkYXRlLlxuICAgKiBgc2hvcnRgOiBUd28gbGV0dGVyIGFiYnJldmlhdGlvbiBvZiB0aGUgd2VlayBkYXkgKGUuZy4gRnIpLlxuICAgKiBgbm9uZWA6IFRoZSB3ZWVrZGF5IGlzIG5vdCBkaXNwbGF5ZWQuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICd3ZWVrZGF5LXN0eWxlJyB9KVxuICBwdWJsaWMgYWNjZXNzb3Igd2Vla2RheVN0eWxlOiAnc2hvcnQnIHwgJ25vbmUnID0gJ3Nob3J0JztcblxuICAvKipcbiAgICogU3RvcmVzIHRoZSBsYXN0IHN0cmluZyBhbmQgcGFyc2VkIGRhdGUgb2JqZWN0IHZhbHVlIHRvIHByZXZlbnQgcmVwZWF0ZWRcbiAgICogcGFyc2luZyBvZiB0aGUgc3RyaW5nIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsdWVDYWNoZT86IFtzdHJpbmcsIFQgfCBudWxsXTtcbiAgcHJpdmF0ZSBfZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPFQ+ID0gcmVhZENvbmZpZygpLmRhdGV0aW1lPy5kYXRlQWRhcHRlciA/PyBkZWZhdWx0RGF0ZUFkYXB0ZXI7XG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyTXV0YWJsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBhc3NvY2lhdGVkIGRhdGVwaWNrZXIsIGlmIGFueS5cbiAgICogVGhlIHNiYi1kYXRlLWlucHV0IGFuZCB0aGUgc2JiLWRhdGVwaWNrZXIgYXJlIGFzc3VtZWQgdG8gYmUgaW4gdGhlIHNhbWUgcGFyZW50IGNvbnRhaW5lci5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGF0ZXBpY2tlcigpOiBTYmJEYXRlcGlja2VyRWxlbWVudDxUPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnBhcmVudEVsZW1lbnQhLnF1ZXJ5U2VsZWN0b3I8U2JiRGF0ZXBpY2tlckVsZW1lbnQ8VD4+KCdzYmItZGF0ZXBpY2tlcicpO1xuICB9XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2NoYW5nZScsICgpID0+IHRoaXMuX3VwZGF0ZVZhbHVlRGF0ZUZvcm1hdCgpLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdHMgdG8gcmVzb2x2ZSB0aGUgYXNzb2NpYXRlZCBkYXRlIGlucHV0IHdpdGggdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlc29sdmVBc3NvY2lhdGlvbjxUPihob3N0OiBIVE1MRWxlbWVudCAmIFNiYkRhdGVJbnB1dEFzc29jaWF0ZWQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoaG9zdC5oYXNBdHRyaWJ1dGUoJ2lucHV0JykgfHwgaG9zdC5pbnB1dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gaG9zdFxuICAgICAgLmNsb3Nlc3QoJ3NiYi1mb3JtLWZpZWxkJylcbiAgICAgID8ucXVlcnlTZWxlY3RvcjxTYmJEYXRlSW5wdXRFbGVtZW50PFQ+Pignc2JiLWRhdGUtaW5wdXQnKTtcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIGhvc3QuaW5wdXQgPSBpbnB1dDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9kYXRlRmlsdGVyOiAoZGF0ZTogVCB8IG51bGwpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGlmICghdGhpcy5wbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy5fcGxhY2Vob2xkZXJNdXRhYmxlID0gdHJ1ZTtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBpMThuRGF0ZVBpY2tlclBsYWNlaG9sZGVyW3RoaXMubGFuZ3VhZ2UuY3VycmVudF07XG4gICAgfVxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgQXJyYXkuZnJvbSh0aGlzLmNsb3Nlc3QoJ3NiYi1mb3JtLWZpZWxkJyk/LmNoaWxkcmVuID8/IFtdKSkge1xuICAgICAgLy8gRWxlbWVudHMgbXVzdCBiZSB1cGdyYWRlZCBpbiBvcmRlciBmb3IgdGhlIGNvbnN0cnVjdG9yIHRvIGJlIGFjY2Vzc2libGUuXG4gICAgICBjdXN0b21FbGVtZW50cy51cGdyYWRlPy4oY2hpbGQpO1xuICAgICAgaWYgKFxuICAgICAgICAoY2hpbGQuY29uc3RydWN0b3IgYXMgeyBzYmJEYXRlSW5wdXRBc3NvY2lhdGVkPzogYm9vbGVhbiB9KS5zYmJEYXRlSW5wdXRBc3NvY2lhdGVkICYmXG4gICAgICAgICFjaGlsZC5oYXNBdHRyaWJ1dGUoJ2lucHV0JykgJiZcbiAgICAgICAgIShjaGlsZCBhcyBQYXJ0aWFsPFNiYkRhdGVJbnB1dEFzc29jaWF0ZWQ8VD4+KS5pbnB1dFxuICAgICAgKSB7XG4gICAgICAgIChjaGlsZCBhcyBQYXJ0aWFsPFNiYkRhdGVJbnB1dEFzc29jaWF0ZWQ8VD4+KS5pbnB1dCA9IHRoaXM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHJlcXVlc3RVcGRhdGUoXG4gICAgbmFtZT86IFByb3BlcnR5S2V5LFxuICAgIG9sZFZhbHVlPzogdW5rbm93bixcbiAgICBvcHRpb25zPzogUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgKTogdm9pZCB7XG4gICAgc3VwZXIucmVxdWVzdFVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgb3B0aW9ucyk7XG4gICAgaWYgKHRoaXMuaGFzVXBkYXRlZCAmJiAhbmFtZSkge1xuICAgICAgdGhpcy5fdXBkYXRlVmFsdWVEYXRlRm9ybWF0KCk7XG4gICAgICBpZiAodGhpcy5fcGxhY2Vob2xkZXJNdXRhYmxlKSB7XG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBpMThuRGF0ZVBpY2tlclBsYWNlaG9sZGVyW3RoaXMubGFuZ3VhZ2UuY3VycmVudF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnd2Vla2RheVN0eWxlJykge1xuICAgICAgdGhpcy5fdXBkYXRlVmFsdWVEYXRlRm9ybWF0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKSB7XG4gICAgICAvLyBVc2VkIHRvIG5vdGlmeSBhc3NvY2lhdGVkIGNvbXBvbmVudHMgdG8gdXBkYXRlIHN0YXRlXG4gICAgICAvKiogQGludGVybmFsICovXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCfJtWNoYW5nZScpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlRm9ybVZhbHVlKCk6IHZvaWQge1xuICAgIHRoaXMuX3RyeVBhcnNlVmFsdWUoKTtcbiAgICBjb25zdCBmb3JtVmFsdWUgPVxuICAgICAgdGhpcy52YWx1ZUFzRGF0ZSAhPT0gbnVsbCA/IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMSh0aGlzLnZhbHVlQXNEYXRlKSA6IG51bGw7XG4gICAgdGhpcy5pbnRlcm5hbHMuc2V0Rm9ybVZhbHVlKGZvcm1WYWx1ZSwgdGhpcy52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF90cnlQYXJzZVZhbHVlKHZhbHVlID0gdGhpcy52YWx1ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl92YWx1ZUNhY2hlPy5bMF0gIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZUFzRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLnBhcnNlKHZhbHVlKTtcbiAgICAgIHRoaXMuX3ZhbHVlQ2FjaGUgPSBbdmFsdWUsIHRoaXMuX3ZhbHVlQXNEYXRlXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVWYWx1ZURhdGVGb3JtYXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmFsdWVBc0RhdGUpIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSB0aGlzLl9mb3JtYXREYXRlKCk7XG4gICAgICBpZiAodGhpcy52YWx1ZSAhPT0gZm9ybWF0dGVkRGF0ZSkge1xuICAgICAgICBzdXBlci52YWx1ZSA9IGZvcm1hdHRlZERhdGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZm9ybWF0RGF0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kYXRlQWRhcHRlci5mb3JtYXQodGhpcy52YWx1ZUFzRGF0ZSwgeyB3ZWVrZGF5U3R5bGU6IHRoaXMud2Vla2RheVN0eWxlIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNob3VsZFZhbGlkYXRlKG5hbWU6IFByb3BlcnR5S2V5IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN1cGVyLnNob3VsZFZhbGlkYXRlKG5hbWUpIHx8XG4gICAgICBbJ3ZhbHVlQXNEYXRlJywgJ21pbicsICdtYXgnLCAnZGF0ZUZpbHRlciddLmluY2x1ZGVzKG5hbWUgYXMgc3RyaW5nKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmFsaWRhdGUoKTogdm9pZCB7XG4gICAgc3VwZXIudmFsaWRhdGUoKTtcbiAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMuX3JlbW92ZVZhbGlkaXR5RXJyb3JzKCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5fZGF0ZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLnZhbHVlQXNEYXRlKSkge1xuICAgICAgdGhpcy5zZXRWYWxpZGl0eUZsYWcoJ2JhZElucHV0JywgaTE4bkRhdGVJbnZhbGlkW3RoaXMubGFuZ3VhZ2UuY3VycmVudF0pO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5pc1ZhbGlkKHRoaXMubWluKSAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUodGhpcy5taW4sIHRoaXMudmFsdWVBc0RhdGUpID4gMFxuICAgICkge1xuICAgICAgdGhpcy5zZXRWYWxpZGl0eUZsYWcoXG4gICAgICAgICdyYW5nZVVuZGVyZmxvdycsXG4gICAgICAgIGkxOG5EYXRlTWluKHRoaXMuX2RhdGVBZGFwdGVyLmZvcm1hdCh0aGlzLm1pbiwgeyB3ZWVrZGF5U3R5bGU6ICdub25lJyB9KSlbXG4gICAgICAgICAgdGhpcy5sYW5ndWFnZS5jdXJyZW50XG4gICAgICAgIF0sXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5pc1ZhbGlkKHRoaXMubWF4KSAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUodGhpcy52YWx1ZUFzRGF0ZSwgdGhpcy5tYXgpID4gMFxuICAgICkge1xuICAgICAgdGhpcy5zZXRWYWxpZGl0eUZsYWcoXG4gICAgICAgICdyYW5nZU92ZXJmbG93JyxcbiAgICAgICAgaTE4bkRhdGVNYXgodGhpcy5fZGF0ZUFkYXB0ZXIuZm9ybWF0KHRoaXMubWF4LCB7IHdlZWtkYXlTdHlsZTogJ25vbmUnIH0pKVtcbiAgICAgICAgICB0aGlzLmxhbmd1YWdlLmN1cnJlbnRcbiAgICAgICAgXSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGVGaWx0ZXIgJiYgIXRoaXMuZGF0ZUZpbHRlcih0aGlzLnZhbHVlQXNEYXRlKSkge1xuICAgICAgdGhpcy5zZXRWYWxpZGl0eUZsYWcoJ3NiYkRhdGVGaWx0ZXInLCBpMThuRGF0ZUludmFsaWRbdGhpcy5sYW5ndWFnZS5jdXJyZW50XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JlbW92ZVZhbGlkaXR5RXJyb3JzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlVmFsaWRpdHlFcnJvcnMoKTogdm9pZCB7XG4gICAgKFsnYmFkSW5wdXQnLCAncmFuZ2VVbmRlcmZsb3cnLCAncmFuZ2VPdmVyZmxvdycsICdzYmJEYXRlRmlsdGVyJ10gYXMgY29uc3QpLmZvckVhY2goKGYpID0+XG4gICAgICB0aGlzLnJlbW92ZVZhbGlkaXR5RmxhZyhmKSxcbiAgICApO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItZGF0ZS1pbnB1dCc6IFNiYkRhdGVJbnB1dEVsZW1lbnQ7XG4gIH1cblxuICBpbnRlcmZhY2UgQ3VzdG9tVmFsaWRpdHlTdGF0ZSB7XG4gICAgc2JiRGF0ZUZpbHRlcjogYm9vbGVhbjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FDb0JBLE9BQU8sT0FBTyxjQUFjLFdBQVcsRUFDckMsSUFBSSxnQkFBYTtDQUNmLE9BQU87QUFDVCxFQUFBLENBQ0Q7Ozs7SUFhWSw2QkFBbUI7bUJBQW1CLDRCQUE0QixVQUFVOzs7Ozs7Ozs7Ozs7O2NBQTVFLDRCQUFzQyxZQUF1Qzs7O2tDQXdCdkYsU0FBUyxFQUFFLFdBQVcsTUFBSyxDQUFFLENBQUM7c0JBMkM5QixVQUFTLEdBQ1QsU0FBUztJQUFFLFdBQVc7SUFBb0IsU0FBUztHQUFJLENBQUUsQ0FBQztzQkFPMUQsVUFBUyxHQUNULFNBQVM7SUFBRSxXQUFX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
@@ -1,4 +1,4 @@
1
- import { t as SbbDateInputElement } from "./date-input.component-aFqmx0uy.js";
1
+ import { t as SbbDateInputElement } from "./date-input.component-BBdsFSUJ.js";
2
2
  import "./date-input.pure.js";
3
3
  //#region src/elements/date-input.ts
4
4
  /** @entrypoint */
@@ -1,2 +1,2 @@
1
- import { t as SbbDateInputElement } from "./date-input.component-aFqmx0uy.js";
1
+ import { t as SbbDateInputElement } from "./date-input.component-BBdsFSUJ.js";
2
2
  export { SbbDateInputElement };
@@ -14,7 +14,7 @@ export declare class SbbTimeInputElement extends SbbTimeInputElement_base {
14
14
  set value(value: string);
15
15
  get value(): string;
16
16
  /** Formats the current input's value as date. */
17
- set valueAsDate(date: Date | null);
17
+ set valueAsDate(value: Date | null);
18
18
  get valueAsDate(): Date | null;
19
19
  private _valueAsTime?;
20
20
  /**
@@ -30,6 +30,8 @@ export declare class SbbTimeInputElement extends SbbTimeInputElement_base {
30
30
  private _tryParseValue;
31
31
  /** Validate input against the defined RegExps. */
32
32
  private _parseValue;
33
+ private _toTime;
34
+ private _isSameTime;
33
35
  private _updateValueDateFormat;
34
36
  private _formatTime;
35
37
  protected preparePastedText(text: string): string;