@esfaenza/forms-and-validations 15.2.21 → 15.2.23

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,3 +1,5 @@
1
+ // Angular
2
+ import { RequiredValidator } from "@angular/forms";
1
3
  import { EventEmitter, Input, Output, ViewChild, Optional, Inject, Directive } from "@angular/core";
2
4
  import { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../tokens';
3
5
  import { Subject } from "rxjs";
@@ -279,7 +281,7 @@ export class BaseFormControl {
279
281
  ngOnInit() {
280
282
  // A volte nell'ngOnInit non ci passa quindi lo metto sia qui sia nell'afterviewinit, penso che valga per i componenti di terze parti
281
283
  // che si collegano per i cazzi loro al form ecc, quindi la parte sopra non serve... BOH
282
- this.checkRequiredValidator();
284
+ this.checkRequiredness();
283
285
  //Il nome non c'è se metto standalone : true (CHE NON é DA METTERE)
284
286
  //Dato che anche il controllo esterno viene considerato come componente del form, non posso basarmi solo sul nome ma devo aggiungere un tag. In questo caso "_internal"
285
287
  // ATTENZIONE: QUALSIASI SIA IL MOTIVO, SE STO COSO VIENE SPOSTATO DALL ngOnInit NON FUNZIONA PIU NULLA
@@ -324,17 +326,18 @@ export class BaseFormControl {
324
326
  this.destroyed$.complete();
325
327
  }
326
328
  /** Elabora i validatori iniettati e capisce se il valore è obbligatorio o meno */
327
- checkRequiredValidator() {
329
+ /** Fratello della funzione con lo stesso nome lato validations */
330
+ checkRequiredness() {
328
331
  // controllo se è settato un required per decidere in maniera condizionale se utilizzare il validatore required nel componente interno
329
332
  // Lo faccio qui e non in un eventuale ngOnInit o costruttore perché ngOnInit non sempre viene chiamato e da costruttore il validatore non ha ancora il valore giusto
330
- if (this._validators && this._validators.some(elem => elem.inputName == "required" && (elem.required === true || elem.required === null || elem.required === undefined)))
333
+ if (this._validators && this._validators.some(elem => elem instanceof RequiredValidator && (elem.required === true || (!elem.required && elem.required !== false))))
331
334
  this.Required = true;
332
335
  }
333
336
  /** @ignore */
334
337
  ngAfterViewInit() {
335
338
  if (!this.ngControl)
336
339
  return;
337
- this.checkRequiredValidator();
340
+ this.checkRequiredness();
338
341
  }
339
342
  /** Helper che collega la funzione di reset del controllo form al controllo di validazione sottostante */
340
343
  bindResetFunction() {
@@ -541,4 +544,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
541
544
  }], inputFinalized: [{
542
545
  type: Output
543
546
  }] } });
544
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLWNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9iYXNlLWZvcm0tY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUl2SCxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFFM0Msa0VBQWtFO0FBRWxFLE1BQU0sT0FBZ0IsZUFBZTtJQW9KakM7Ozs7T0FJRztJQUNILElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQWEsUUFBUSxDQUFDLEtBQWM7UUFDaEMsSUFBSSxJQUFJLENBQUMsbUJBQW1CO1lBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBYSxlQUFlLENBQUMsS0FBYTtRQUN0QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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dWxhclxyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sLCBOZ0Zvcm0sIE5nTW9kZWwsIFJlcXVpcmVkVmFsaWRhdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBPcHRpb25hbCwgSW5qZWN0LCBEaXJlY3RpdmUsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIC8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBDb21wb25lbnRDb250ZXh0IH0gZnJvbSBcIkBlc2ZhZW56YS9hY2Nlc3MtY29udHJvbFwiO1xyXG5pbXBvcnQgeyBBQ09fQ1VTVE9NS0VZLCBGQVZfREVCVUdfTU9ERSB9IGZyb20gJy4uL3Rva2Vucyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENoYW5nZUV2ZW50IH0gZnJvbSBcIi4uL21vZGVscy9DaGFuZ2VFdmVudFwiO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbi8qKiBDb21wb25lbnRlIGJhc2UgZGEgY3VpIHR1dHRpIGkgY29tcG9uZW50aSBGb3JtIGltcGxlbWVudGFubyAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VGb3JtQ29udHJvbCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE0OTg4XHJcbiAgICAgKiBUTDpEUjsgSWwgcHJpbW8gdmFsb3JlIHBhc3NhdG8gYWwgd3JpdGVWYWx1ZSDDqCBudWxsbyBwZXJjaMOpIHF1YW5kbyBpIGNhZ25hY2NpIGZhbm5vIG5ldyBGb3JtQ29udHJvbCgpXHJcbiAgICAgKiBzY3Jpdm9ubyB1biB3cml0ZVZhbHVlIG51bGxvLi4uIHF1aW5kaSBhbCBwcmltbyBiaW5kaW5nIHNhbHRvIGwnaW5pemlhbGl6emF6aW9uZSBzZSBobyBsYSBjb3BwaWEgbnVsbC1maXJzdEJpbmRcclxuICAgICAqIHBvaSBtZXR0ZW5kbyBmaXJzdEJpbmQgYSBmYWxzZSBkaSBsw6wgaW4gcG9pIGZ1bnppb25vIGNvbWUgZGV2by4gVmlzdGEgbGEgY2FzaXN0aWNhIGV2aXRvIGVzc2VuemlhbG1lbnRlIG1ldMOgIGRldGVjdENoYW5nZXNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBmaXJzdEJpbmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBJbmRpY2EgZGkgdXRpbGl6emFyZSBpIHZhbGlkYXRvcmkgY2hlIGwndXRlbnRlIHBpYXp6YSBzdWwgY29tcG9uZW50ZS4gXHJcbiAgICAqIERhIG5vbiB1c2FyZSBuZWwgY2FzbyBkaSBmb3JtLWFkYXB0aXZlIGRhdG8gY2hlIGkgdmFsaWRhdG9yaSB2ZW5nb25vIHZhbHV0YXRpIGluIGJhc2UgYWwgdGlwbyBlY2NcclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgVXNlVXNlclZhbGlkYXRvcnM6Ym9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSBpbCBjYW1wbyDDqCBvYmJsaWdhdG9yaW8gaSBvcHppb25hbGUgKi9cclxuICAgIHB1YmxpYyBSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBNb2RlbGxvIHJhcHByZXNlbnRhdG8gZGEgcXVlc3RvIGNhbXBvICovXHJcbiAgICBwdWJsaWMgTW9kZWw6IGFueTtcclxuXHJcbiAgICAvKiogVmFsb3JlIGRlbCBNb2RlbGxvICovXHJcbiAgICBwdWJsaWMgRXZhbHVhdGVkTW9kZWw6IHN0cmluZztcclxuXHJcbiAgICAvKiogTm9tZSBnZW5lcmF0byBwZXIgaWwgY29udHJvbGxvIGludGVybm8uIERpIGRlZmF1bHQgw6ggaWwgbm9tZSBkZWwgY29udHJvbGxvIGVzdGVybm8gY29uIGwnYWdnaXVudGEgZGkgXCJfaW50ZXJuYWxcIi4gU2VydmUgcGVyIGV2aXRhcmUgY3Jvc3MtYmluZCAqL1xyXG4gICAgcHVibGljIEdlbmVyYXRlZE5hbWU6IHN0cmluZztcclxuXHJcbiAgICAvKiogSW5kaWNhIHNlIGlsIEZvcm0gY2hlIGNvbnRpZW5lIHF1ZXN0byBjYW1wbyDDqCBnacOgIHN0YXRvIHJlZ2lzdHJhdG8gKi9cclxuICAgIHByb3RlY3RlZCBmb3JtSGFzQmVubkJvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgcXVlc3RvIGNhbXBvIMOoIHN0YWNjYXRvIGRhbCBGb3JtLCBhZCBlc2VtcGlvIG5lbCBjYXNvIHNpYSBpbiB1biBuZy10ZW1wbGF0ZSBwcm9pZXR0YXRvIG5lbCBmb3JtLlxyXG4gICAgICogXHJcbiAgICAgKiBJbiBxdWVsIGNhc28gbGEgdmFyaWFiaWxlICoqRm9ybSoqIGRlbCBjb21wb25lbnRlIGRldidlc3NlcmUgdmFsb3JpenphdGFcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGRldGF0Y2hlZEZyb21mb3JtOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHByb3RlY3RlZCBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHByb3RlY3RlZCBvblRvdWNoZWQgPSAoKSA9PiB7IH07XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgVmVkaSBnZXR0ZXIgZSBzZXR0ZXIgKi9cclxuICAgIHB1YmxpYyBfcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1YWxvcmEgY2kgZm9zc2UgdW4gY29udGVzdG8gY29sbGVnYXRvIHF1ZXN0YSB2YXJpYWJpbGUgaWRlbnRpZmljYSBzZSBTb25vIGwnT3duZXIgbyBtZW5vLlxyXG4gICAgICogXHJcbiAgICAgKiBTZSBub24gbG8gc29ubywgaWwgY2FtcG8gcmlzdWx0ZXLDoCBpbiBzb2xhIGxldHR1cmEgXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgQXBwQ29udGV4dE93bmVyc2hpcDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIFN1YmplY3QgYSBjdWkgbCdvZ2dldHRvIGludGVybm8gc2kgY29sbGVnYSBwZXIgZWZmZXR0dWFyZSBpbCBmb2N1cyBkZWxsJ2VsZW1lbnRvIGlucHV0IHNvdHRvc3RhbnRlICovXHJcbiAgICBASW5wdXQoKSBGb2N1c1N1YmplY3Q6IFN1YmplY3Q8dm9pZD47XHJcbiAgICAvKipcclxuICAgICogQEVYUEVSSU1FTlRBTFxyXG4gICAgKi9cclxuICAgIEBJbnB1dCgpIFNldFZhbGlkYXRpb25TdWJqZWN0OiBTdWJqZWN0PHsgZmllbGROYW1lOiBzdHJpbmcsIGVycm9yOiBzdHJpbmcgfT47XHJcblxyXG4gICAgLyoqIE1vZGFsaXTDoCBpbiBjdWkgdmllbmUgbW9zdHJhdG8gaWwgY2FtcG8sIDEtMSByaXNwZXR0byBhbGxlIGRlZmluaXppb25pIGRpIEFuZ3VsYXIgTWF0ZXJpYWwgICovXHJcbiAgICBASW5wdXQoKSBGaWVsZEFwcGVhcmVuY2U6IFwibGVnYWN5XCIgfCBcInN0YW5kYXJkXCIgfCBcImZpbGxcIiB8IFwib3V0bGluZVwiID0gXCJvdXRsaW5lXCI7XHJcblxyXG4gICAgLyoqIFV0aWxpenphIG8gbWVubyBpbCBMYXlvdXQgZGkgdW4gZm9ybSAoTGFiZWwgY29uIGlucHV0IGRpIGZpYW5jbyksIHNlIGZhbHNlIG1vc3RyYSBzb2xvIGwnaW5wdXQgKi9cclxuICAgIEBJbnB1dCgpIEZvcm1MYXlvdXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBEZWZpbmlzY2Ugc2UgcmljaGlhbWFyZSBsJ0V2ZW50RW1pdHRlciAqKmlucHV0Q2hhbmdlKiogaW4gbWFuaWVyYSBjbGFzc2ljYSAodHJ1ZSkgbyBzb2xvIHBlciBsYSBjaGFuZ2UgY29uc2lkZXJhdGUgZGVmaW5pdGl2ZSBjb21lIHRhc3RvIGludmlvIC8gYmx1ciAvIGVjYy4uLiAoZmFsc2UpICovXHJcbiAgICBASW5wdXQoKSBFbWl0UGVuZGluZ0NoYW5nZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBBdHRpdmEgbyBkaXNhdHRpdmEgbGEgdmFsaWRhemlvbmUgcGVyIHF1ZXN0byBjb21wb25lbnRlICovXHJcbiAgICBASW5wdXQoKSBWYWxpZGF0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogXHJcbiAgICAgKiBQZXJtZXR0ZSBkaSBzY3JpdmVyZSBvIG1lbm8gbmVsIGNhbXBvIGRpIElucHV0LiBTaSBkaWZmZXJlbnppYSBkYWwgUmVhZG9ubHkgaW4gcXVhbnRvIGZpc2ljYW1lbnRlIGwnSW5wdXQgw6ggc2NyaXZpYmlsZSBlIHZlbmdvbm8gbWFudGVudXRpIGkgdGVtaSBkZWxsYSB2YWxpZGF6aW9uZVxyXG4gICAgICogbWEgaW50ZXJhZ2lyZSBkaXJldHRhbWVudGUgY29uIGxhIGNhc2VsbGEgZGkgSW5wdXQgcGVyIGwndXRlbnRlIG5vbiDDqCBwb3NzaWJpbGVcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgRnJvemVuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIFBsYWNlaG9sZGVyIHBlciBxdWFuZG8gbCdpbnB1dCDDqCB2dW90byAqL1xyXG4gICAgQElucHV0KCkgUGxhY2Vob2xkZXI6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgLyoqIENsYXNzZSBleHRyYSBwZXIgaWwgZm9ybS1ncm91cCBpbiBjdWkgdmllbmUgd3JhcHBhdG8gbCdpbnB1dCAqL1xyXG4gICAgQElucHV0KCkgRm9ybUdyb3VwQ2xhc3M6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgLyoqIE1lc3NhZ2dpbyBkYSBtb3N0cmFyZSBxdWFuZG8gbGEgdmFsaWRhemlvbmUgZmFsbGlzY2UgcGVyIHF1ZXN0byBjb21wb25lbnRlLiBEaSBkZWZhdWx0IHZpZW5lIHByb3Bvc3RhIGRhbGxhIGxpYnJlcmlhICovXHJcbiAgICBASW5wdXQoKSBGYWlsZWRWYWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogSW5wdXQgY2hlIGZvcnphIGwnaW52YWxpZGl0w6AgZGVsIGNvbXBvbmVudGUgKi9cclxuICAgIEBJbnB1dCgpIEZvcmNlZEVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIE1vc3RyYSB1biB0ZXN0byBhIHNpbmlzdHJhIGRlbGwnaW5wdXQgKEZvcm1MYXlvdXQgcGVybWV0dGVuZG8pICovXHJcbiAgICBASW5wdXQoKSBMYWJlbDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogY29sLW1kLVggcGVyIGxhIGxhYmVsICovXHJcbiAgICBASW5wdXQoKSBMYWJlbENvbFdpZHRoOiBudW1iZXIgPSA0O1xyXG5cclxuICAgIC8qKiBjb2wtbWQtWCBwZXIgbCdpbnB1dCAqL1xyXG4gICAgQElucHV0KCkgSW5wdXRDb2xXaWR0aDogbnVtYmVyID0gODtcclxuXHJcbiAgICAvKiogSW5kaWNhIHNlIMOoIGwndWx0aW1vIGNvbXBvbmVudGUgZGkgdW4gZm9ybSAoc2VydmUgcGVyIHJpbXVvdmVyZSBpbCBtYXJnaW5lIGZpbmFsZSkgKi9cclxuICAgIEBJbnB1dCgpIExhc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogQXNzb2NpYSBpbCBjb21wb25lbnRlIEZvcm0gYSBxdWVzdG8gaW5wdXQgKi9cclxuICAgIEBJbnB1dCgpIEZvcm06IE5nRm9ybSA9IG51bGw7XHJcblxyXG4gICAgLyoqIFNvcmdlbnRlIGRhIGN1aSBzY2VnbGllcmUgdmFsb3JpIHBlciBpIGNvbXBvbmVudGkgRm9ybSBjaGUgbG8gY29uc2VudG9ubyAqL1xyXG4gICAgQElucHV0KCkgU291cmNlOiBhbnlbXTtcclxuXHJcbiAgICAvKiogTm9tZSBkZWxsYSBwcm9wcmlldMOgIGNoZSBjb250aWVuZSBsJ0lkIGRlZ2xpIG9nZ2V0dGkgYmluZGF0aSBuZWxsYSAqKlNvdXJjZSoqICovXHJcbiAgICBASW5wdXQoKSBJZEZpZWxkOiBzdHJpbmcgPSAnaWQnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIGlsICoqUGxhY2Vob2xkZXIqKiBkZXYnZXNzZXJlIHVzYXRvIGNvbWUgdW5hIGZsb2F0aW5nIGxhYmVsIGRpIG1hdGVyaWFsIG8gc29sbyBjb21lIHVuIHBsYWNlaG9sZGVyIHN0YW5kYXJkIFxyXG4gICAgICogXHJcbiAgICAgKiBJZ25vcmF0YSBsYXRvIGF1dG9jb21wbGV0ZSwgYXV0b2NvbXBsZXRlLW11bHRpIGUgc2VsZWN0IGluIHF1YW50byBoYW5ubyBnZXN0aW9uaSBwYXJ0aWNvbGFyaSBkaSBwbGFjZWhvbGRlciBlY2MuLi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgRmxvYXRpbmdMYWJlbDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIEluZGljYSBjaGUgbGEgcGFydGUgaW5wdXQgZGVsIGNvbnRyb2xsbyBkZXYnZXNzZXJlIHVuYSBsYWJlbCByZWFkb25seSBlIGxhIHBhcnRlIGxhYmVsIGRpIHRpdG9sbyBkZXYnZXNzZXJlIGluIGJvbGQuIFBlciB1dGlsaXp6YXJlIHVuIHNvbG8gY29tcG9uZW50ZSBzaWEgcGVyIGxhIG1vZGlmaWNhIGNoZSBwZXIgaWwgZGV0dGFnbGlvICovXHJcbiAgICBASW5wdXQoKSBEaXNwbGF5TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBJbmRpY2EgbGEgY29uZGl6aW9uZSBwZXIgY3VpIHVuIGVsZW1lbnRvIGluIE1vZGFsaXTDoCBEaXNwbGF5IHB1w7IgZXNzZXJlIHZpc2liaWxlIGluIGJhc2UgYSB1bHRlcmlvcmkgY29udHJvbGxpICovXHJcbiAgICBASW5wdXQoKSBEaXNwbGF5Q29uZGl0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogVGVtcGxhdGUgcGVyIHZpc3VhbGl6emFyZSBsYSBtb2RhbGl0w6AgKipEaXNwbGF5TW9kZSoqIGNvbWUgdnVvbGUgaWwgcHJvZ3JhbW1hdG9yZSBmcm9jaW8gZGkgdHVybm8gKi9cclxuICAgIEBJbnB1dCgpIERpc3BsYXlNb2RlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgLyoqIExheW91dCBkZWwgRm9ybSBxdWFuZG8gw6ggaW4gbW9kYWxpdMOgIERpc3BsYXkuIERpIGRlZmF1bHQgbWFudGllbmUgbGEgZm9ybWF0dGF6aW9uZSBhIGZvcm0gKi9cclxuICAgIEBJbnB1dCgpIERpc3BsYXlMYXlvdXQ6ICdmb3JtJyB8ICdpbmxpbmUnIHwgJ2hpZGRlbicgPSAnZm9ybSc7XHJcblxyXG4gICAgLyoqIFNlcGFyYXRvcmUgZGEgbWV0dGVyZSBpbiBhdXRvbWF0aWNvIGZyYSB1biBlbGVtZW50byBGb3JtIGUgbCdhbHRybyBxdWFuZG8gc29ubyBpbiAqKkRpc3BsYXlNb2RlKiogY29uICoqRGlzcGxheUxheW91dCoqIGlubGluZSAqL1xyXG4gICAgQElucHV0KCkgSW5saW5lU2VwYXJhdG9yOiBzdHJpbmcgPSAnICc7XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogRXNwcmVzc2lvbmUgc2ltaWwtQW5ndWxhciBwZXIgY2FtYmlhcmUgaWwgdGVzdG8gZGVpIGNvbXBvbmVudGkgY2hlIHNjZWxnb25vIGlsIHByb3ByaW8gbW9kZWxsbyBkYSB1bmEgKipTb3VyY2UqKlxyXG4gICAgICogXHJcbiAgICAgKiBJbCBmdW56aW9uYW1lbnRvIMOoIGlkZW50aWNvIGFsIGJpbmRlciBkaSBhbmd1bGFyLCBzb2xvIGNvbiB1bmEgZ3JhZmZhIGludmVjZSBjaGUgMi5cclxuICAgICAqIMOIIGlub2x0cmUgcG9zc2liaWxlIGFnZ2l1bmdlcmUgcGV6emkgZGkgZGVzY3JpemlvbmUgaW4gbWFuaWVyYSBjb25kaXppb25hbGUgY29uIGxhIHNpbnRhc3NpICoqOnByb3A/KFByb3AgdmFsZSB7cHJvcH0pKipcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgRGlzcGxheTogc3RyaW5nID0gJ3tkZXNjcmlwdGlvbn0nO1xyXG5cclxuICAgIC8qKiBSaXN1bHRhdG8gZGVsbCd1bmlvbmUgZnJhIGxlIGluZm9ybWF6aW9uaSBkZWdsaSBvZ2dldHRpIGluICoqU291cmNlKiogZSBsZSBpbXBvc3Rhemlvbmkgc3BlY2lmaWNhdGUgbmVsbCdJbnB1dCAqKkRpc3BsYXkqKiAqL1xyXG4gICAgcHVibGljIEJvdW5kU291cmNlOiB7IGlkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSDDqCBpbCBwcmltbyBCaW5kIGRlbGxhIFNvdXJjZSAqL1xyXG4gICAgcHJvdGVjdGVkIFNvdXJjZUZpcnN0QmluZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdHRpZW5lIGlsIHZhbG9yZSBkZWxsYSB2YXJpYWJpbGUgKipfcmVhZG9ubHkqKlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gKip0cnVlKiogc2Ugc29sYSBsZXR0dXJhLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBnZXQgUmVhZG9ubHkoKTogYm9vbGVhbiB7IFxyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFkb25seTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcG9zdGEgaWwgdmFsb3JlIGRlbGxhIHZhcmlhYmlsZSAqKl9yZWFkb25seSoqIGdlc3RlbmRvIGFuY2hlIGlsIENvbnRlc3RvIGFwcGxpY2F0aXZvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgVmFsb3JlIGRhIGltcG9zdGFyZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBzZXQgUmVhZG9ubHkodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5BcHBDb250ZXh0T3duZXJzaGlwKSBcclxuICAgICAgICAgICAgdGhpcy5fcmVhZG9ubHkgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcm1ldHRlIGRpIHNldHRhcmUgaW4gdW5hIHZvbHRhIHNvbG8gZ2xpIGlucHV0IExhYmVsQ29sV2lkdGggZSBJbnB1dENvbFdpZHRoLCBiYXN0YSBzY3JpdmVybG8gY29uIGxhIHNpbnRhc3NpIFwiWCBZXCJcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IElucHV0IG5lbCBmb3JtYXRvIFwiWCBZXCJcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgc2V0IExhYmVsSW5wdXRSYXRpbyhpbnB1dDogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHJhdGlvID0gaW5wdXQuc3BsaXQoL1xccy8pO1xyXG4gICAgICAgIHRoaXMuTGFiZWxDb2xXaWR0aCA9IHBhcnNlSW50KHJhdGlvWzBdKTtcclxuICAgICAgICB0aGlzLklucHV0Q29sV2lkdGggPSBwYXJzZUludChyYXRpb1sxXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIHZhbC1xdWFsY29zYSBjaGUgZmEgZWZmZXR0aXZhbWVudGUgZGEgaW5wdXQsIG8gZXZlbnR1YWxtZW50ZSBpbCBzaW5nb2xvIGlucHV0IGluIGNhc2kgcGFydGljb2xhcmkgKGVzIGNoZWNrYm94KSAqL1xyXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRpb25Db250cm9sOiBOZ01vZGVsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUXVlcnkgc3VsbCdlbGVtZW50byAndmFsaWRhdGlvbkNvbnRyb2wnIGNoZSBmdW56aW9uYSBpbiBhbWJpZW50ZSBzdGF0aWNvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7TmdNb2RlbH0gY29tcCBFbGVtZW50byBIVE1MIG1hcmNhdG8gY29uIFwiI3ZhbGlkYXRpb25Db250cm9sXCJcclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChcInZhbGlkYXRpb25Db250cm9sXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBzZXQgX3ZhbGlkYXRpb25Db250cm9sKGNvbXA6IE5nTW9kZWwpIHsgdGhpcy5yZWdpc3RlclZhbENvbXAoY29tcCk7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1ZXJ5IHN1bGwnZWxlbWVudG8gJ3ZhbGlkYXRpb25Db250cm9sJyBjaGUgZnVuemlvbmEgaW4gYW1iaWVudGUgZGluYW1pY29cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtOZ01vZGVsfSBjb21wIEVsZW1lbnRvIEhUTUwgbWFyY2F0byBjb24gXCIjdmFsaWRhdGlvbkNvbnRyb2xcIlxyXG4gICAgICovXHJcbiAgICBAVmlld0NoaWxkKFwidmFsaWRhdGlvbkNvbnRyb2xcIiwgeyBzdGF0aWM6IHRydWUgfSkgc2V0IHZhbGlkYXRpb25Db250cm9sX3N0YXRpYyhjb21wOiBOZ01vZGVsKSB7IHRoaXMucmVnaXN0ZXJWYWxDb21wKGNvbXApOyB9O1xyXG5cclxuICAgIC8qKiBFdmVudG8gY2hpYW1hdG8gYWxsYSBtb2RpZmljYSBkZWwgdmFsb3JlIGNvbGxlZ2F0byBhIHF1ZXN0byBjYW1wbyAqL1xyXG4gICAgQE91dHB1dCgpIGlucHV0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8Q2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxDaGFuZ2VFdmVudD4oKTtcclxuXHJcbiAgICAvKiogRXZlbnRvIGNoaWFtYXRvIGFsIGZvY3VzIGRlbCBjYW1wbyBkaSB0ZXN0by9jb21iby9xdWVsY2hlw6gsIHJpZW1pdHRhIGwnZXZlbnRvIG9yaWdpbmFsZSBKYXZhc2NyaXB0ICovXHJcbiAgICBAT3V0cHV0KCkgaW5wdXRGb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICAvKiogRXZlbnRvIGNoaWFtYXRvIGFsIGZpbmFsaXplIGRlbCBjYW1wbyBkaSB0ZXN0by9jb21iby9xdWVsY2hlw6ggKi9cclxuICAgIEBPdXRwdXQoKSBpbnB1dEZpbmFsaXplZDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgICAvKiogQ2FjaGUgZGVsbGUgY29uZGl6aW9uaSBzY3JpdHRlIHRpcG8gOnByb3A/KFJvYmEgY29uIHtwcm9wfSkgKi9cclxuICAgIHByaXZhdGUgQmluZENoZWNraW5nR3JvdXBzOiB7IGdsb2JhbDogc3RyaW5nLCBwcm9wOiBzdHJpbmcsIHdoZW5leGlzdHM6IHN0cmluZyB9W10gPSBbXVxyXG5cclxuICAgIC8qKiBDYWNoZSBkZWxsZSBwcm9wcmlldMOgIHNjcml0dGUgdGlwbyAtLT4ge3Byb3B9ICovXHJcbiAgICBwcml2YXRlIEJpbmRQcm9wZXJ0aWVzOiB7IGdsb2JhbDogc3RyaW5nLCBwcm9wOiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLCBwcm90ZWN0ZWQgX3ZhbGlkYXRvcnM6IEFycmF5PGFueT4sIEBPcHRpb25hbCgpIHByaXZhdGUgYWM6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBAT3B0aW9uYWwoKSBwdWJsaWMgQXBwQ29udGV4dDogQ29tcG9uZW50Q29udGV4dCwgQE9wdGlvbmFsKCkgQEluamVjdChBQ09fQ1VTVE9NS0VZKSBwcml2YXRlIEFDT19DVVNUT01LRVk6IHN0cmluZywgQE9wdGlvbmFsKCkgQEluamVjdChGQVZfREVCVUdfTU9ERSkgcHJpdmF0ZSBGQVZfREVCVUdfTU9ERTogYm9vbGVhbiwgcHJpdmF0ZSBuYXRpdmVJbnB1dDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcblxyXG4gICAgICAgIGlmIChuZ0NvbnRyb2wgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFuZGxlTnVsbE5nQ29udHJvbCgpKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIm5nQ29udHJvbCBudWxsbyBwZXIgcXVhbGNoZSBtb3Rpdm8hIElsIDkwJSBkZWxsZSBmdW56aW9uYWxpdMOgIGRpIHF1ZXN0byBpbnB1dCBzYXJhbm5vIGRpc2FiaWxpdGF0ZVwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vU2UgbWkgYXJyaXZhIGwnaW5qZWN0YWJsZSBkZWwgY29udGVzdG8gcG9zc28gY2FwaXJlIHNlIHF1ZXN0byBjYW1wbyBkZXZlIGVzc2VyZSBpbiByZWFkb25seSBvIG5vLCBzb2xvIHNlIGhvIGdpw6AgaW5pemlhbGl6emF0byBpIGNvbnRyb2xsZXIgY3VzdG9tIGRlbGwnYWNjZXNzIGNvbnRyb2xcclxuICAgICAgICBpZiAodGhpcy5BcHBDb250ZXh0ICYmIHRoaXMuQXBwQ29udGV4dC5uYW1lICYmIHRoaXMuQUNPX0NVU1RPTUtFWSAmJiB0aGlzLmFjICYmIHRoaXMuYWMuSW5pdGlhbGl6ZWRDdXN0b20pIHtcclxuICAgICAgICAgICAgdGhpcy5BcHBDb250ZXh0T3duZXJzaGlwID0gIXRoaXMuYWMuaGFzKHRoaXMuQUNPX0NVU1RPTUtFWSArIFwiOlwiICsgdGhpcy5BcHBDb250ZXh0Lm5hbWUsIHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWFkb25seSA9ICF0aGlzLkFwcENvbnRleHRPd25lcnNoaXBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuXHJcbiAgICAgICAgLy9TZSBobyBnacOgIHVuIHBhcmVudCBpbXBvc3RhdG8gdnVvbCBkaXJlIGNoZSBzb3R0byBhbCB0YWcgPGZvcm0+IGhvIGRpcmV0dGFtZW50ZSB1biB0YWcgPGZvcm0tKj4uLlxyXG4gICAgICAgIC8vLi4gcXVpbmRpIHBvc3NvIGltcG9zdGFyZSBkaXJldHRhbWVudGUgaWwgcmlmZXJpbWVudG8gZGVsIEZvcm0gZGEgdXNhcmUgaW4gSFRNTCBwZXIgaWwgc3VibWl0dGVkXHJcblxyXG4gICAgICAgIC8vU2Ugbm9uIGMnw6ggdnVvbCBkaXJlIGNoZSBkZW50cm8gYWwgdGFnIDxmb3JtPiBjJ8OoIHVubyBzcGxlbmRpZG8gPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiAuLi4uXCI+Li5cclxuICAgICAgICAvLy4uIGlsIHF1YWxlIGEgc3VhIHZvbHRhIGNvbnRpZW5lIGlsIGNvbnRyb2xsbyA8Zm9ybS0qPiBxdWluZGkgYXZyw7IgaWwgZm9ybSBuZWxsJ2lucHV0IFwiRm9ybVwiXHJcbiAgICAgICAgaWYgKCg8YW55Pm5nQ29udHJvbCkuX3BhcmVudClcclxuICAgICAgICAgICAgdGhpcy5Gb3JtID0gPE5nRm9ybT4oPGFueT5uZ0NvbnRyb2wpLl9wYXJlbnQ7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmRldGF0Y2hlZEZyb21mb3JtID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy9RdWVzdGEgc2VydmUgcGVyIGltcG9zdGFyZSBtZSBzdGVzc28gY29tZSBzaSBkZXZlLCBpbCB2YWxpZGF0b3JlIGludmVjZSBsbyBwYXNzbyBhbCB2YWxpZGF0aW9uLWlucHV0IHF1YW5kbyB2aWVuZSBzZXR0YXRvIGlsIHZhbGlkYXRpb25Db250cm9sXHJcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XHJcbiAgICAgICAgICAgIC8vUGVyIHR1dHRpIGkgdmFsaWRhdG9yaTogcmlnZW5lcm8gbGEgZnVuemlvbmUgZGkgdmFsaWRhemlvbmUuIFBlciBxdWFsY2hlIG1vdGl2byBhIHZvbHRlIGhvIHZhbGlkYXRvcmkgc2VuemEuLi5cclxuICAgICAgICAgICAgLy8uLi4gcXVlc3RvIMOoIHVuIHdvcmthcm91bmQgcGVyIGVzc2VyZSBzaWN1cm8gZGkgYXZlcmxhIHNlbXByZS5cclxuICAgICAgICAgICAgLy9Tb2xvIGkgdmFsaWRhdG9yaSBjb24gcGFyYW1ldHJpIGhhbm5vIGJpc29nbm8gZGVsbGEgX2NyZWF0ZVZhbGlkYXRvciAoZXMuIFwibWF4bGVuZ3RoXCIgY2hlIGhhIDEgcGFyYW1ldHJvKSwgcXVpbmRpIG5vIHZhbGlkYXRvcmkgdGlwbyBcInJlcXVpcmVkXCJcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRvcnMuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodi5fY3JlYXRlVmFsaWRhdG9yKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2Ll9jcmVhdGVWYWxpZGF0b3IoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsaWRhdG9ycylcclxuICAgICAgICAgICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wuYWRkVmFsaWRhdG9ycyh0aGlzLl92YWxpZGF0b3JzLmZpbHRlcih2ID0+ICF2Lm5nT25Jbml0KSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFZmZldHR1YSBpbCBCaW5kL1BhcnNlIGRlbGxlIHZhcmllICoqU291cmNlKiogdW5lbmRvIGxlIGluZm9ybWF6aW9uaSBzcGVjaWZpY2F0ZSBpbiAqKkRpc3BsYXkqKlxyXG4gICAgICogXHJcbiAgICAgKiBFdmVudHVhbG1lbnRlIHJpZWZmZXR0dWEgdW4gYmluZCBhbCBtb2RlbGxvIGluIGJhc2UgYWwgdmFsb3JlIGRlbGxhIHZhcmlhYmlsZSAqKlJlYmluZE1vZGVsQWZ0ZXJTb3VyY2UqKlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdHJ5QmluZFNvdXJjZURpc3BsYXkoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLlNvdXJjZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5Tb3VyY2UubGVuZ3RoID09IDAgJiYgIXRoaXMuU291cmNlRmlyc3RCaW5kKVxyXG4gICAgICAgICAgICB0aGlzLkJvdW5kU291cmNlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuU291cmNlRmlyc3RCaW5kID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIENhY2hlIGxvY2FsZSBwZXIgZXZpdGFyZSBkaSByaWZhcmUgZGVpIHJlZ2V4Lm1hdGNoIG9nbmkgc2FudGEgdm9sdGFcclxuICAgICAgICBpZiAodGhpcy5Tb3VyY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLkJvdW5kU291cmNlID0gW107XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5CaW5kQ2hlY2tpbmdHcm91cHMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmV2YWx1YXRlQmluZENoZWNraW5nR3JvdXBzKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5CaW5kUHJvcGVydGllcy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuZXZhbHVhdGVCaW5kUHJvcGVydGllcygpO1xyXG5cclxuICAgICAgICAgICAgLy8gQmxvY2NvIHBlciBnZW5lcmFyZSBsYSBkZXNjcml6aW9uZSBmaW5hbGUgZGkgdW4gZWxlbWVudG9cclxuICAgICAgICAgICAgdGhpcy5Tb3VyY2UuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIEFnZ2l1bmdvIGFsbGEgQm91bmRTb3VyY2UgaW4gZm9ybWF0byBzdGFuZGFyZCBLZXlWYWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5Cb3VuZFNvdXJjZS5wdXNoKHRoaXMudHJhbnNmb3JtU291cmNlSXRlbShzKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gUG9zdCB0cnliaW5kIHNlIGMnw6ggdW4gbW9kZWxsbyBhc3NvY2lhdG8gcmljYWxjb2xvIGwnKipFdmFsdWF0ZWRNb2RlbCoqXHJcbiAgICAgICAgICAgIGlmICh0aGlzLk1vZGVsKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuQm91bmRTb3VyY2UuZmluZCh0ID0+IHQuaWQgPT0gdGhpcy5Nb2RlbCk/LmRlc2NyaXB0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogVmFsdXRhIGlsIGNvbnRlbnV0byBkZWxsYSB2YXJpYWJpbGUgQmluZENoZWNraW5nR3JvdXBzICovXHJcbiAgICBwcml2YXRlIGV2YWx1YXRlQmluZENoZWNraW5nR3JvdXBzKCkge1xyXG4gICAgICAgIC8vIEJsb2NjbyBwZXIgdGlyYXJlIGZ1b3JpIGxlIGNvbmRpemlvbmkgc2NyaXR0ZSB0aXBvIC0tPiA6cHJvcD8oUm9iYSBjb24ge3Byb3B9KVxyXG4gICAgICAgIHZhciBpZmZlZE1hdGNoZXMgPSB0aGlzLkRpc3BsYXkubWF0Y2goLzooW2Etel0rKVxcP1xcKChbXlxcKFxcKV0rKVxcKS9nKTtcclxuICAgICAgICBpZiAoaWZmZWRNYXRjaGVzKSB7XHJcbiAgICAgICAgICAgIGlmZmVkTWF0Y2hlcy5mb3JFYWNoKG0gPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gU3Rlc3NhIHJlZ2V4IGRpIHNvcHJhIG1hIGlsIHRhZyBcImlcIiBzZXJ2ZSBwZXIgdGlyYXJlIGZ1b3JpIGkgc2luZ29saSBjYXB0dXJpbmcgZ3JvdXAgZSBwZXIgcXVhbGNoZSBtb3Rpdm8gXHJcbiAgICAgICAgICAgICAgICAvLyBuZXcgUmVnRXhwKGJhc2VSZWdleCwgXCJnXCIpIG5vbiBmdW56aW9uYSBxdWluZGkgbm9uIGhvIHBvdHV0byByYXppb25hbGl6emFybG9cclxuICAgICAgICAgICAgICAgIGxldCBncm91cHMgPSBtLm1hdGNoKC86KFthLXpdKylcXD9cXCgoW15cXChcXCldKylcXCkvaSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkJpbmRDaGVja2luZ0dyb3Vwcy5wdXNoKHsgZ2xvYmFsOiBtLCBwcm9wOiBncm91cHNbMV0sIHdoZW5leGlzdHM6IGdyb3Vwc1syXSB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBWYWx1dGEgaWwgY29udGVudXRvIGRlbGxhIHZhcmlhYmlsZSBCaW5kUHJvcGVydGllcyAqL1xyXG4gICAgcHJpdmF0ZSBldmFsdWF0ZUJpbmRQcm9wZXJ0aWVzKCkge1xyXG4gICAgICAgIC8vIEJsb2NjbyBwZXIgdGlyYXJlIGZ1b3JpIGxlIHByb3ByaWV0w6Agc2NyaXR0ZSB0aXBvIC0tPiB7cHJvcH1cclxuICAgICAgICB2YXIgbWF0Y2hlcyA9IHRoaXMuRGlzcGxheS5tYXRjaCgve1thLXpdK30vZ2kpO1xyXG4gICAgICAgIGlmIChtYXRjaGVzKVxyXG4gICAgICAgICAgICBtYXRjaGVzLmZvckVhY2gobSA9PiB7IHRoaXMuQmluZFByb3BlcnRpZXMucHVzaCh7IGdsb2JhbDogbSwgcHJvcDogbS5zdWJzdHJpbmcoMSwgbS5sZW5ndGggLSAxKSB9KTsgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFzZm9ybWEgdW4gb2dnZXR0byBkZWxsYSBTb3VyY2UgYWxsYSBzdWEgdmVyc2lvbmUgXCJudW92YVwiIGJhc2FuZG9zaSBzdWxsZSBpbmZvcm1hemlvbmkgc3UgZ3J1cHBpIGUgcHJvcHJpZXTDoFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gaXRlbSBPZ2dldHRvIGRhIHRyYXNmb3JtYXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHt7aWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZ319IE9nZ2V0dG8gZmluYWxlIHRyYXNmb3JtYXRvXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdHJhbnNmb3JtU291cmNlSXRlbShzOiBhbnkpOiB7aWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZ30ge1xyXG4gICAgICAgIC8vIFBhcnRvIHNlbXByZSBkYWxsYSB2YXJpYWJpbGUgZGkgRGlzcGxheSwgcG9pIHNvc3RpdHVpc2NvIHBlenpvIHBlciBwZXp6b1xyXG4gICAgICAgIGxldCBkZXNjID0gdGhpcy5EaXNwbGF5O1xyXG5cclxuICAgICAgICAvLyBUYWdsaW8gbyBtYW50ZW5nbyBsZSBjb25kaXppb25pIGluIGJhc2UgYWxsYSBwcm9wcmlldMOgIHN1IGN1aSBmYXJlIGNoZWNrXHJcbiAgICAgICAgLy8gRG9wb2RpY2jDqSBzY3Jpdm8gdHV0dGUgbGUgcHJvcHJpZXTDoFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5CaW5kQ2hlY2tpbmdHcm91cHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHQgPSB0aGlzLkJpbmRDaGVja2luZ0dyb3Vwc1tpXTtcclxuICAgICAgICAgICAgZGVzYyA9IGRlc2MucmVwbGFjZSh0Lmdsb2JhbCwgKHNbdC5wcm9wXSAhPT0gbnVsbCAmJiBzW3QucHJvcF0gIT09IHVuZGVmaW5lZCAmJiBzW3QucHJvcF0gIT09IFwiXCIpID8gdC53aGVuZXhpc3RzIDogXCJcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuQmluZFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHQgPSB0aGlzLkJpbmRQcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgICAgICBkZXNjID0gZGVzYy5yZXBsYWNlKHQuZ2xvYmFsLCBzW3QucHJvcF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHsgaWQ6IHNbdGhpcy5JZEZpZWxkXSwgZGVzY3JpcHRpb246IGRlc2MgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBpbCBjb21vcG5lbnRlIGluIHF1ZXN0aW9uZSDDqCBpbiBncmFkbyBkaSBnZXN0aXJlIG5nQ29udHJvbCBudWxsaS4gXHJcbiAgICAgKiBEaSBkZWZhdWx0IMOoICoqZmFsc2UqKlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gKip0cnVlKiogc2UgZ2VzdGlzY28gbmdDb250cm9sIG51bGxpLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBoYW5kbGVOdWxsTmdDb250cm9sKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgLy8gQSB2b2x0ZSBuZWxsJ25nT25Jbml0IG5vbiBjaSBwYXNzYSBxdWluZGkgbG8gbWV0dG8gc2lhIHF1aSBzaWEgbmVsbCdhZnRlcnZpZXdpbml0LCBwZW5zbyBjaGUgdmFsZ2EgcGVyIGkgY29tcG9uZW50aSBkaSB0ZXJ6ZSBwYXJ0aVxyXG4gICAgICAgIC8vIGNoZSBzaSBjb2xsZWdhbm8gcGVyIGkgY2F6emkgbG9ybyBhbCBmb3JtIGVjYywgcXVpbmRpIGxhIHBhcnRlIHNvcHJhIG5vbiBzZXJ2ZS4uLiBCT0hcclxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRWYWxpZGF0b3IoKTtcclxuXHJcbiAgICAgICAgLy9JbCBub21lIG5vbiBjJ8OoIHNlIG1ldHRvIHN0YW5kYWxvbmUgOiB0cnVlIChDSEUgTk9OIMOpIERBIE1FVFRFUkUpXHJcbiAgICAgICAgLy9EYXRvIGNoZSBhbmNoZSBpbCBjb250cm9sbG8gZXN0ZXJubyB2aWVuZSBjb25zaWRlcmF0byBjb21lIGNvbXBvbmVudGUgZGVsIGZvcm0sIG5vbiBwb3NzbyBiYXNhcm1pIHNvbG8gc3VsIG5vbWUgbWEgZGV2byBhZ2dpdW5nZXJlIHVuIHRhZy4gSW4gcXVlc3RvIGNhc28gXCJfaW50ZXJuYWxcIlxyXG4gICAgICAgIC8vIEFUVEVOWklPTkU6IFFVQUxTSUFTSSBTSUEgSUwgTU9USVZPLCBTRSBTVE8gQ09TTyBWSUVORSBTUE9TVEFUTyBEQUxMIG5nT25Jbml0IE5PTiBGVU5aSU9OQSBQSVUgTlVMTEFcclxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wubmFtZSlcclxuICAgICAgICAgICAgdGhpcy5HZW5lcmF0ZWROYW1lID0gdGhpcy5uZ0NvbnRyb2wubmFtZS50b1N0cmluZygpICsgXCJfaW50ZXJuYWxcIjtcclxuXHJcbiAgICAgICAgLy8gQVRURU5aSU9ORTogUVVBTFNJQVNJIFNJQSBJTCBNT1RJVk8sIFNFIFNUTyBDT1NPIFZJRU5FIFNQT1NUQVRPIERBTEwgbmdPbkluaXQgTk9OIEZVTlpJT05BIFBJVSBOVUxMQVxyXG4gICAgICAgIGlmICh0aGlzLkZvcm0pIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmZvcm1IYXNCZW5uQm91bmQgJiYgdGhpcy52YWxpZGF0aW9uQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Gb3JtLmFkZENvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1IYXNCZW5uQm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBRdWFuZG8gdW4gZm9ybSB2aWVuZSBzdWJtaXR0YXRvIGxhIHZhcmlhYmlsZSBGb3JtLnN1Ym1pdHRlZCB2aWVuZSBhc3NlZ25hdGEgYWxsJ2lucHV0IFtzdWJtaXR0ZWRdIGRlbCB2YWwtY29udHJvbFxyXG4gICAgICAgICAgICAvLyBFc3NlbmRvIGNoZSBwZXLDsiBsYSBDRCDDqCBPblB1c2ggcGVyIGRpcmUgYWQgQW5ndWxhciBjaGUgbCdJbnB1dCDDqCBjYW1iaWF0byBlIHBlcm1ldHRlcmUgaSBzaWRlZmZlY3RzIGRpIGFzc2VnbmFyZSBbc3VibWl0dGVkXVxyXG4gICAgICAgICAgICAvLyBkZXZvIGF0dGFjY2FybWkgYWwgc3VibWl0IGF0dHVhbGUgZGVsIGZvcm0gZSBwcmltYSBkaSBlc2VndWlybG8gZGV2byBtYXJjYXJlIGlsIGNvbXBvbmVudGUgcGVyIGlsIGNoZWNrXHJcbiAgICAgICAgICAgIGxldCBvcmlnRnVuYyA9IHRoaXMuRm9ybS5vblN1Ym1pdDtcclxuICAgICAgICAgICAgdmFyIGZvcm1PdXRzaWRlUmVmID0gdGhpcy5Gb3JtO1xyXG4gICAgICAgICAgICB0aGlzLkZvcm0ub25TdWJtaXQgPSAoZXYpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdGdW5jLmFwcGx5KGZvcm1PdXRzaWRlUmVmKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNldFZhbGlkYXRpb25TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuU2V0VmFsaWRhdGlvblN1YmplY3QucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHYuZmllbGROYW1lICsgXCJfaW50ZXJuYWxcIiA9PSB0aGlzLkdlbmVyYXRlZE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IHRoaXMuRm9ybS5nZXRDb250cm9sKHRoaXMudmFsaWRhdGlvbkNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgZm9yY2VkdG9pbnZhbGlkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnNldEVycm9ycyh7IGZvcmNlZHRvaW52YWxpZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVzdHJveWVkJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZSBzb25vIGluIG1vZGFsaXTDoCBkZXRhdGNoZWQgZGV2byByaW11b3ZlcmUgbWFudWFsbWVudGUgcXVlc3RvIGNvbnRyb2xsbyBxdWFuZG8gZW50cm8gbmVsbGEgZGlzcG9zZSwgYWx0cmltZW50aSBzZSBwb2kgbmUgYW5kYXNzaSBhIHJpYWdnaXVuZ2VyZVxyXG4gICAgICogdW4gYWx0cm8gY29uIGxvIHN0ZXNzbyBcIm5hbWVcIiBtYSBtYWdhcmkgcmVzZXR0YXRvLCBBbmd1bGFyIGxvIHJlLWlkcmF0ZXJlYmJlIGNvbiBpIHZhbG9yaSBwcmVjZWRlbnRpIG5vbm9zdGFudGUgaWwgbW9kZWxsbyBmb3NzZSB2dW90b1xyXG4gICAgICovXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBpZiAodGhpcy5Gb3JtICYmIHRoaXMudmFsaWRhdGlvbkNvbnRyb2wgJiYgISF0aGlzLkZvcm0uZ2V0Q29udHJvbCh0aGlzLnZhbGlkYXRpb25Db250cm9sKSlcclxuICAgICAgICAgICAgdGhpcy5Gb3JtLnJlbW92ZUNvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbCk7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFbGFib3JhIGkgdmFsaWRhdG9yaSBpbmlldHRhdGkgZSBjYXBpc2NlIHNlIGlsIHZhbG9yZSDDqCBvYmJsaWdhdG9yaW8gbyBtZW5vICovXHJcbiAgICBjaGVja1JlcXVpcmVkVmFsaWRhdG9yKCkge1xyXG4gICAgICAgIC8vIGNvbnRyb2xsbyBzZSDDqCBzZXR0YXRvIHVuIHJlcXVpcmVkIHBlciBkZWNpZGVyZSBpbiBtYW5pZXJhIGNvbmRpemlvbmFsZSBzZSB1dGlsaXp6YXJlIGlsIHZhbGlkYXRvcmUgcmVxdWlyZWQgbmVsIGNvbXBvbmVudGUgaW50ZXJub1xyXG4gICAgICAgIC8vIExvIGZhY2NpbyBxdWkgZSBub24gaW4gdW4gZXZlbnR1YWxlIG5nT25Jbml0IG8gY29zdHJ1dHRvcmUgcGVyY2jDqSBuZ09uSW5pdCBub24gc2VtcHJlIHZpZW5lIGNoaWFtYXRvIGUgZGEgY29zdHJ1dHRvcmUgaWwgdmFsaWRhdG9yZSBub24gaGEgYW5jb3JhIGlsIHZhbG9yZSBnaXVzdG9cclxuICAgICAgICBpZiAodGhpcy5fdmFsaWRhdG9ycyAmJiB0aGlzLl92YWxpZGF0b3JzLnNvbWUoZWxlbSA9PiBlbGVtLmlucHV0TmFtZSA9PSBcInJlcXVpcmVkXCIgJiYgKGVsZW0ucmVxdWlyZWQgPT09IHRydWUgfHwgZWxlbS5yZXF1aXJlZCA9PT0gbnVsbCB8fCBlbGVtLnJlcXVpcmVkID09PSB1bmRlZmluZWQpKSlcclxuICAgICAgICAgICAgdGhpcy5SZXF1aXJlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubmdDb250cm9sKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFZhbGlkYXRvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIZWxwZXIgY2hlIGNvbGxlZ2EgbGEgZnVuemlvbmUgZGkgcmVzZXQgZGVsIGNvbnRyb2xsbyBmb3JtIGFsIGNvbnRyb2xsbyBkaSB2YWxpZGF6aW9uZSBzb3R0b3N0YW50ZSAqL1xyXG4gICAgcHJpdmF0ZSBiaW5kUmVzZXRGdW5jdGlvbigpIHtcclxuICAgICAgICAvL2ZhY2NpbyBpbiBtb2RvIGNoZSBzZSBjaGlhbW8gaWwgcmVzZXQgZGVsIGNvbnRyb2xsbyAobyBkZWxsYSBmb3JtKSBkYWxsJ2VzdGVybm8gc2kgcmVzZXR0aSBhbmNoZSBpbCBjb250cm9sbG8gbmF0aXZvXHJcbiAgICAgICAgY29uc3Qgb3JpZ0Z1bmMgPSAoPGFueT50aGlzLm5nQ29udHJvbC5jb250cm9sKS5fX29yaWdpbmFsX3Jlc2V0X18gfHwgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5yZXNldDtcclxuICAgICAgICB2YXIgbmdDb250cm9sX291dHNpZGVSZWZlcmVuY2UgPSB0aGlzLm5nQ29udHJvbC5jb250cm9sO1xyXG4gICAgICAgIHZhciB2YWxpZGF0aW9uQ29udHJvbF9vdXRzaWRlUmVmZXJlbmNlID0gdGhpcy52YWxpZGF0aW9uQ29udHJvbC5jb250cm9sO1xyXG5cclxuICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnJlc2V0ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBvcmlnRnVuYy5hcHBseShuZ0NvbnRyb2xfb3V0c2lkZVJlZmVyZW5jZSk7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25Db250cm9sX291dHNpZGVSZWZlcmVuY2UucmVzZXQoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvL1BlciBjb25zZW50aXJlIHJpY2hpYW1pIG11bHRpcGxpIGRpIHF1ZXN0YSBmdW56aW9uZSBwcmVuZGVuZG8gc2VtcHJlIGxhIGZpdW56aW9uZSBkaSByZXNldCBiYXNlXHJcbiAgICAgICAgKDxhbnk+dGhpcy5uZ0NvbnRyb2wuY29udHJvbCkuX19vcmlnaW5hbF9yZXNldF9fID0gb3JpZ0Z1bmNcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChvYmogPT0gbnVsbCAmJiB0aGlzLmZpcnN0QmluZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0QmluZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLk1vZGVsID0gb2JqO1xyXG5cclxuICAgICAgICAvL1BlciBzdmVnbGlhcmUgQW5ndWxhci4gSWwgdmFsb3JlIGNoZSBlbnRyYSBwb3RyZWJiZSBlc3NlcmUgdmFsaWRvL25vbiB2YWxpZG8gZSBxdWVzdG8gbG8gYmluZGEgYSB0dXR0bywgZm9ybSBjb21wcmVzb1xyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbClcclxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLk1vZGVsKVxyXG4gICAgICAgICAgICB0aGlzLm9uTm90TnVsbFZhbHVlU2V0KCk7XHJcblxyXG4gICAgICAgIC8vIG1hcmtGb3JDaGVjayBub24gdmEgYmVuZSBpbiBxdWFudG8gYXJyaXZhbm8gcG9zc2liaWxtZW50ZSAyIHVwZGF0ZSBzdSB1biBzb2xvIGNpY2xvIGRpIHN0YWNrXHJcbiAgICAgICAgLy8gc2V0VGltZSp1dCBjaGUgd3JhcHBhIHR1dHRvIG5vbiB2YSBiZW5lIHNlbm7DsiBzcGFtbWEgZGVsbGUgY2hhbmdlIGRldGVjdGlvbiBhIHN1b24gZGkgaW50ZXJ2YWwgY2hlIHJhbGxlbnRhbm8gdGFudGlzc2ltbyBsJ2FwcFxyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RyYSBpbnRlcm5hbWVudGUgaWwgY29tcG9uZW50ZSBkaSB2YWxpZGF6aW9uZSwgbmUgaW1wb3N0YSBpIHZhbGlkYXRvcmkgZSBjb2xsZWdhIGlsIEZvcm0sIHNlIHByZXNlbnRlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7TmdNb2RlbH0gY29tcCBFbGVtZW50byBIVE1MIG1hcmNhdG8gY29uIFwiI3ZhbGlkYXRpb25Db250cm9sXCJcclxuICAgICAqL1xyXG4gICAgcmVnaXN0ZXJWYWxDb21wKGNvbXA6IE5nTW9kZWwpIHtcclxuICAgICAgICBpZiAoY29tcCkge1xyXG4gICAgICAgICAgICAvLyDDiCBhcnJpdmF0byB1biBudW92byB2YWxpZGF0aW9uQ29udG9ybCAoc3VjY2VkZSBzb2xvIG5lbCBmb3JtLXNlbGVjdCBxdWFuZG8gY2FtYmlhIGxhIHNvdXJjZSBkYSAwIGVsZW1lbnRpIC8gbnVsbCBhZCBOIGVsZW1lbnRpLCBxdWluZGkgYWwgbWFzc2ltbyB1bmEgdm9sdGEpIFxyXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uQ29udHJvbCAmJiB0aGlzLkZvcm0pXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZvcm0ucmVtb3ZlQ29udHJvbCh0aGlzLnZhbGlkYXRpb25Db250cm9sKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkNvbnRyb2wgPSBjb21wO1xyXG5cclxuICAgICAgICAgICAgLy9RdWVzdGEgc2VydmUgcGVyIHBhc3NhcmUgYXZhbnRpIGkgdmFsaWRhdG9yaVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Db250cm9sLmNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLl92YWxpZGF0b3JzKTtcclxuXHJcbiAgICAgICAgICAgIC8vU2Ugc29ubyBzdGFjY2F0byBkYWwgRm9ybSAodnVvbCBkaXJlIGNoZSBzb25vIGFkIGVzZW1waW8gZGVudHJvIHVuIG5nLXRlbXBsYXRlKSBhZ2dpdW5nbyBpbCBjb250cm9sbG8gYWwgRm9ybSBwYXNzYXRvIGNvbWUgaW5wdXQgKGNvbnRleHQgZGVsIHRlbXBsYXRlKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5kZXRhdGNoZWRGcm9tZm9ybSAmJiB0aGlzLkZvcm0gJiYgIXRoaXMuZm9ybUhhc0Jlbm5Cb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Gb3JtLmFkZENvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbClcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUhhc0Jlbm5Cb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5nQ29udHJvbClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmluZFJlc2V0RnVuY3Rpb24oKTtcclxuXHJcbiAgICAgICAgICAgIC8vSSB2YWwtcm9iYSBxdWVzdG8gbG8gZmFubm8gYXV0b21hdGljYW1lbnRlIGRlbnRyby4uLiBnbGkgYWx0cmkgbm8gKGVzLiBzZW1wbGljZSBpbnB1dCBjaGVja2JveClcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eUZvck5hdGl2ZUlucHV0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdpc3RlckZvcm0obmdGb3JtOiBOZ0Zvcm0pIHtcclxuICAgICAgICB0aGlzLkZvcm0gPSBuZ0Zvcm07XHJcbiAgICAgICAgdGhpcy5Gb3JtLmFkZENvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbClcclxuICAgICAgICB0aGlzLmZvcm1IYXNCZW5uQm91bmQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWdnaW9ybmEgaWwgdmFsb3JlIGUgbGEgdmFsaWRpdMOgIGRlbGwnaW5wdXQgc290dG9zdGFudGUuIE5vbiB2aWVuZSBjaGlhbWF0byBwZXIgaW5wdXQgbmF0aXZpIGNvbWUgbGUgY2hlY2tib3hcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZWRWYWx1ZSBGb3J6YSBsJ2FnZ2lvcm5hbWVudG8gYW5jaGUgc2Ugbm9uIMOoIHVuIGlucHV0IG5hdGl2byAoaW5wdXQgbmF0aXZvID0gY2hlY2tib3gsIGFkIGVzZW1waW8pXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVZhbGlkaXR5Rm9yTmF0aXZlSW5wdXQoZm9yY2VkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmIChmb3JjZWRWYWx1ZSB8fCB0aGlzLm5hdGl2ZUlucHV0KVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Db250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICogQ2xhc3NpY28gXCJzcGFyYSBmdW9yaVwiLiBNYW50ZW5nbyBsbyBzdGVzc28gbm9tZSBkZWxsJ2V2ZW50byBkZWkgPHZhbC0qPiAoaW5wdXRDaGFuZ2UpIHBlciByZXRyb2NvbXBhdGliaWxpdMOgLlxyXG4gICAgICogXHJcbiAgICAgKiBOb24gcG9zc28gdGVuZXJsbyBwcm90ZWN0ZWQgYWx0cmltZW50aSBwb3NzbyBlc2VndWlybG8gc29sbyBkYWwgLnRzIGUgbm9uIGRhbGwnIC5odG1sXHJcbiAgICAgKi9cclxuICAgIGNoYW5nZWQoZm9yY2VkVmFsdWU6IGFueSA9IG51bGwsIG1hcmtGb3JDaGVjazogYm9vbGVhbiA9IGZhbHNlLCBtb2RlbEV2YWx1YXRpb25IYW5kbGVkOiBib29sZWFuID0gZmFsc2UsIGludGVybmFsOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgdG9FbWl0ID0gZm9yY2VkVmFsdWUgPT0gbnVsbCB8fCBmb3JjZWRWYWx1ZSA9PSBcIlwiID8gdGhpcy5Nb2RlbCA/PyBcIlwiIDogZm9yY2VkVmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCFtb2RlbEV2YWx1YXRpb25IYW5kbGVkKVxyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdG9FbWl0O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRvRW1pdCk7XHJcbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KG5ldyBDaGFuZ2VFdmVudChpbnRlcm5hbCwgdG9FbWl0KSk7XHJcbiAgICAgICAgaWYgKG1hcmtGb3JDaGVjaylcclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKiBDbGFzc2ljbyBcInNwYXJhIGZ1b3JpXCIgc3VsIGZvY3VzLiBNYW50ZW5nbyBsbyBzdGVzc28gbm9tZSBkZWxsJ2V2ZW50byBkZWkgPHZhbC0qPiAoaW5wdXRDaGFuZ2UpIHBlciByZXRyb2NvbXBhdGliaWxpdMOgLlxyXG4gICAgICogXHJcbiAgICAgKiBOb24gcG9zc28gdGVuZXJsbyBwcm90ZWN0ZWQgYWx0cmltZW50aSBwb3NzbyBlc2VndWlybG8gc29sbyBkYWwgLnRzIGUgbm9uIGRhbGwnIC5odG1sXHJcbiAgICAgKi9cclxuICAgIGZvY3VzZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRGb2N1cy5lbWl0KGV2ZW50KTtcclxuICAgICAgICB0aGlzLmxvZyhcIkNvbnRyb2wgRm9jdXNlZCAtIFwiICsgdGhpcy5HZW5lcmF0ZWROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqIENsYXNzaWNvIFwic3BhcmEgZnVvcmlcIiBzdWxsYSBmaW5hbGl6emF6aW9uZSBkZWwgdmFsb3JlIGRlbGwnaW5wdXQgKGJsdXIgLyB0YXN0byBpbnZpbywgZWNjLi4uKS4gTWFudGVuZ28gbG8gc3Rlc3NvIG5vbWUgZGVsbCdldmVudG8gZGVpIDx2YWwtKj4gKGlucHV0Q2hhbmdlKSBwZXIgcmV0cm9jb21wYXRpYmlsaXTDoC5cclxuICAgICAqIFxyXG4gICAgICogTm9uIHBvc3NvIHRlbmVybG8gcHJvdGVjdGVkIGFsdHJpbWVudGkgcG9zc28gZXNlZ3VpcmxvIHNvbG8gZGFsIC50cyBlIG5vbiBkYWxsJyAuaHRtbFxyXG4gICAgICovXHJcbiAgICBmaW5hbGl6ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dEZpbmFsaXplZC5lbWl0KHRoaXMubmdDb250cm9sPy5uYW1lPy50b1N0cmluZygpKTtcclxuICAgICAgICB0aGlzLmxvZyhcIkNvbnRyb2wgVmFsdWUgRmluYWxpemVkIC0gXCIgKyB0aGlzLkdlbmVyYXRlZE5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhbXBhIHVuIGxvZyBhIGNvbnNvbGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgTWVzc2FnZ2lvIGRhIHN0YW1wYXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBsb2cobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuRkFWX0RFQlVHX01PREUpXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQGZvcm1zLWFuZC12YWxpZGF0aW9uczogXCIgKyBtZXNzYWdlKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBhYnN0cmFjdCBvbk5vdE51bGxWYWx1ZVNldCgpOiB2b2lkO1xyXG59Il19
547
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLWNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9iYXNlLWZvcm0tY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFvRCxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSXZILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUUzQyxrRUFBa0U7QUFFbEUsTUFBTSxPQUFnQixlQUFlO0lBb0pqQzs7OztPQUlHO0lBQ0gsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBYSxRQUFRLENBQUMsS0FBYztRQUNoQyxJQUFJLElBQUksQ0FBQyxtQkFBbUI7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFhLGVBQWUsQ0FBQyxLQUFhO1FBQ3RDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUtEOzs7O09BSUc7SUFDSCxJQUF1RCxrQkFBa0IsQ0FBQyxJQUFhLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFeEg7Ozs7T0FJRztJQUNILElBQXNELHdCQUF3QixDQUFDLElBQWEsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFpQjlILDJCQUEyQjtJQUMzQixZQUFzQixHQUFzQixFQUFTLFNBQW9CLEVBQVksV0FBdUIsRUFBc0IsRUFBd0IsRUFBcUIsVUFBNEIsRUFBNkMsYUFBcUIsRUFBOEMsY0FBdUIsRUFBVSxjQUF1QixLQUFLO1FBQWxXLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVMsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUFZLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQXNCLE9BQUUsR0FBRixFQUFFLENBQXNCO1FBQXFCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQTZDLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQThDLG1CQUFjLEdBQWQsY0FBYyxDQUFTO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBak54WDs7Ozs7V0FLRztRQUNLLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFFbEM7OztVQUdFO1FBQ1Esc0JBQWlCLEdBQVcsSUFBSSxDQUFDO1FBRTNDLG9EQUFvRDtRQUM3QyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBV2pDLHlFQUF5RTtRQUMvRCxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFFNUM7Ozs7V0FJRztRQUNPLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUU3QyxjQUFjO1FBQ0osb0JBQWUsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTVDLGNBQWM7UUFDSixjQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWhDLG1DQUFtQztRQUM1QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBRWxDOzs7O1dBSUc7UUFDSyx3QkFBbUIsR0FBWSxJQUFJLENBQUM7UUFTNUMsa0dBQWtHO1FBQ3pGLG9CQUFlLEdBQStDLFNBQVMsQ0FBQztRQUVqRixxR0FBcUc7UUFDNUYsZUFBVSxHQUFZLElBQUksQ0FBQztRQUVwQyw2S0FBNks7UUFDcEssdUJBQWtCLEdBQVksSUFBSSxDQUFDO1FBRTVDLDhEQUE4RDtRQUNyRCxlQUFVLEdBQVksSUFBSSxDQUFDO1FBRXBDOzs7V0FHRztRQUNNLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFakMsNkNBQTZDO1FBQ3BDLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBRWxDLG1FQUFtRTtRQUMxRCxtQkFBYyxHQUFXLEVBQUUsQ0FBQztRQUVyQywySEFBMkg7UUFDbEgsNEJBQXVCLEdBQVcsRUFBRSxDQUFDO1FBRTlDLGtEQUFrRDtRQUN6QyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUV0QyxxRUFBcUU7UUFDNUQsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUU1Qiw0QkFBNEI7UUFDbkIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFFbkMsMkJBQTJCO1FBQ2xCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBRW5DLHlGQUF5RjtRQUNoRixTQUFJLEdBQVksS0FBSyxDQUFDO1FBRS9CLGdEQUFnRDtRQUN2QyxTQUFJLEdBQVcsSUFBSSxDQUFDO1FBSzdCLG9GQUFvRjtRQUMzRSxZQUFPLEdBQVcsSUFBSSxDQUFDO1FBRWhDOzs7O1dBSUc7UUFDTSxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUV2QyxzTUFBc007UUFDN0wsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFdEMscUhBQXFIO1FBQzVHLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQUsxQyxnR0FBZ0c7UUFDdkYsa0JBQWEsR0FBaUMsTUFBTSxDQUFDO1FBRTlELHFJQUFxSTtRQUM1SCxvQkFBZSxHQUFXLEdBQUcsQ0FBQztRQUV2Qzs7Ozs7V0FLRztRQUNNLFlBQU8sR0FBVyxlQUFlLENBQUM7UUFFM0MsaUlBQWlJO1FBQzFILGdCQUFXLEdBQTBDLEVBQUUsQ0FBQztRQUUvRCw2Q0FBNkM7UUFDbkMsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFpRDFDLHdFQUF3RTtRQUM5RCxnQkFBVyxHQUE4QixJQUFJLFlBQVksRUFBZSxDQUFDO1FBRW5GLHlHQUF5RztRQUMvRixlQUFVLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFFbEUsb0VBQW9FO1FBQzFELG1CQUFjLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFFNUUsa0VBQWtFO1FBQzFELHVCQUFrQixHQUEyRCxFQUFFLENBQUE7UUFFdkYsb0RBQW9EO1FBQzVDLG1CQUFjLEdBQXVDLEVBQUUsQ0FBQztRQTRMaEUsZUFBVSxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBdkw1QyxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUU7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDM0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxvR0FBb0csQ0FBQyxDQUFDO1lBRXhILE9BQU87U0FDVjtRQUVELHdLQUF3SztRQUN4SyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUU7WUFDdkcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDL0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQTtTQUM3QztRQUVELFNBQVMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRS9CLG1HQUFtRztRQUNuRyxrR0FBa0c7UUFFbEcsOEhBQThIO1FBQzlILDhGQUE4RjtRQUM5RixJQUFVLFNBQVUsQ0FBQyxPQUFPO1lBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQWlCLFNBQVUsQ0FBQyxPQUFPLENBQUM7O1lBRTdDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFFbEMsZ0pBQWdKO1FBQ2hKLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixnSEFBZ0g7WUFDaEgsZ0VBQWdFO1lBQ2hFLGlKQUFpSjtZQUNqSixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN6QixJQUFJLENBQUMsQ0FBQyxnQkFBZ0I7d0JBQ2xCLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUM3QixDQUFDLENBQUMsQ0FBQzthQUNOO1lBRUQsSUFBSSxJQUFJLENBQUMsV0FBVztnQkFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUVwRixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQ25EO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQ1osT0FBTztRQUVYLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWU7WUFDaEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFFN0Isc0VBQXNFO1FBQ3RFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBRXRCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sSUFBSSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUV0QyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxJQUFJLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBRWxDLDJEQUEyRDtZQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDcEIseURBQXlEO2dCQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQUMsQ0FBQztZQUVILDBFQUEwRTtZQUMxRSxJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUNWLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUM7U0FDekY7SUFDTCxDQUFDO0lBRUQsNkRBQTZEO0lBQ3JELDBCQUEwQjtRQUM5QixpRkFBaUY7UUFDakYsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNwRSxJQUFJLFlBQVksRUFBRTtZQUNkLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JCLDZHQUE2RztnQkFDN0csK0VBQStFO2dCQUMvRSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEYsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCx5REFBeUQ7SUFDakQsc0JBQXNCO1FBQzFCLCtEQUErRDtRQUMvRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvQyxJQUFJLE9BQU87WUFDUCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9HLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxtQkFBbUIsQ0FBQyxDQUFNO1FBQzlCLDJFQUEyRTtRQUMzRSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBRXhCLDJFQUEyRTtRQUMzRSxzQ0FBc0M7UUFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckQsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMxSDtRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxtQkFBbUI7UUFDZixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsY0FBYztJQUNkLFFBQVE7UUFDSixxSUFBcUk7UUFDckksd0ZBQXdGO1FBQ3hGLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpCLG1FQUFtRTtRQUNuRSx1S0FBdUs7UUFDdkssdUdBQXVHO1FBQ3ZHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJO1lBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsV0FBVyxDQUFDO1FBRXRFLHVHQUF1RztRQUN2RyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7YUFDaEM7WUFFRCxvSEFBb0g7WUFDcEgsZ0lBQWdJO1lBQ2hJLDBHQUEwRztZQUMxRyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNsQyxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxFQUFXLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUM7U0FDTDtRQUVELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDckUsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUNqRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDM0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUM3QyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBR3hCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUM1RCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDMUM7WUFDTCxDQUFDLENBQUMsQ0FBQTtTQUNMO0lBQ0wsQ0FBQztJQUlEOzs7T0FHRztJQUNILFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDckYsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFHcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxrRkFBa0Y7SUFDbEYsa0VBQWtFO0lBQ2xFLGlCQUFpQjtRQUNiLHNJQUFzSTtRQUN0SSxxS0FBcUs7UUFDckssSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxZQUFZLGlCQUFpQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQy9KLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxjQUFjO0lBQ2QsZUFBZTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztZQUNmLE9BQU87UUFFWCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQseUdBQXlHO0lBQ2pHLGlCQUFpQjtRQUNyQixzSEFBc0g7UUFDdEgsTUFBTSxRQUFRLEdBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFRLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2xHLElBQUksMEJBQTBCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDeEQsSUFBSSxrQ0FBa0MsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDO1FBRXhFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUU7WUFDaEMsUUFBUSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQzNDLGtDQUFrQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9DLENBQUMsQ0FBQztRQUVGLGlHQUFpRztRQUMzRixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQVEsQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQUE7SUFDL0QsQ0FBQztJQUVELGNBQWM7SUFDZCxVQUFVLENBQUMsR0FBUTtRQUNmLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBRWpCLHVIQUF1SDtRQUN2SCxJQUFJLElBQUksQ0FBQyxTQUFTO1lBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUVwRCxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQ1YsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFN0IsK0ZBQStGO1FBQy9GLGlJQUFpSTtRQUNqSSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxjQUFjO0lBQ2QsZ0JBQWdCLENBQUMsRUFBTztRQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsY0FBYztJQUNkLGlCQUFpQixDQUFDLEVBQU87UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsSUFBYTtRQUN6QixJQUFJLElBQUksRUFBRTtZQUNOLGdLQUFnSztZQUNoSyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsSUFBSTtnQkFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFFcEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUU5Qiw4Q0FBOEM7WUFDOUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRS9ELHlKQUF5SjtZQUN6SixJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtnQkFDNUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQzthQUNoQztZQUVELElBQUksSUFBSSxDQUFDLFNBQVM7Z0JBQ2QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFN0IsaUdBQWlHO1lBQ2pHLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVNLFlBQVksQ0FBQyxNQUFjO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQzVDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCw0QkFBNEIsQ0FBQyxjQUF1QixLQUFLO1FBQ3JELElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUMsY0FBbUIsSUFBSSxFQUFFLGVBQXdCLEtBQUssRUFBRSx5QkFBa0MsS0FBSyxFQUFFLFdBQW9CLEtBQUs7UUFDOUgsSUFBSSxNQUFNLEdBQUcsV0FBVyxJQUFJLElBQUksSUFBSSxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBRXZGLElBQUcsQ0FBQyxzQkFBc0I7WUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFFakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN6RCxJQUFJLFlBQVk7WUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxLQUFVO1FBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUztRQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxHQUFHLENBQUMsT0FBZTtRQUN0QixJQUFJLElBQUksQ0FBQyxjQUFjO1lBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEdBQUcsT0FBTyxDQUFDLENBQUE7SUFDekQsQ0FBQzs7NEdBempCaUIsZUFBZTtnR0FBZixlQUFlOzJGQUFmLGVBQWU7a0JBRHBDLFNBQVM7OzBCQW9OeUcsUUFBUTs7MEJBQXNDLFFBQVE7OzBCQUF5QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7OzBCQUFrQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGNBQWM7aUVBNUp4UyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBTUcsTUFBTTtzQkFBZCxLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxLQUFLO3NCQUFiLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFHRyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csTUFBTTtzQkFBZCxLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFPRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBUUcsT0FBTztzQkFBZixLQUFLO2dCQXNCTyxRQUFRO3NCQUFwQixLQUFLO2dCQVVPLGVBQWU7c0JBQTNCLEtBQUs7Z0JBY2lELGtCQUFrQjtzQkFBeEUsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBT0ssd0JBQXdCO3NCQUE3RSxTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHdEMsV0FBVztzQkFBcEIsTUFBTTtnQkFHRyxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wsIE5nRm9ybSwgTmdNb2RlbCwgUmVxdWlyZWRWYWxpZGF0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIE9wdGlvbmFsLCBJbmplY3QsIERpcmVjdGl2ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UsIENvbXBvbmVudENvbnRleHQgfSBmcm9tIFwiQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sXCI7XHJcbmltcG9ydCB7IEFDT19DVVNUT01LRVksIEZBVl9ERUJVR19NT0RFIH0gZnJvbSAnLi4vdG9rZW5zJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwiLi4vbW9kZWxzL0NoYW5nZUV2ZW50XCI7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuLyoqIENvbXBvbmVudGUgYmFzZSBkYSBjdWkgdHV0dGkgaSBjb21wb25lbnRpIEZvcm0gaW1wbGVtZW50YW5vICovXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUZvcm1Db250cm9sIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTQ5ODhcclxuICAgICAqIFRMOkRSOyBJbCBwcmltbyB2YWxvcmUgcGFzc2F0byBhbCB3cml0ZVZhbHVlIMOoIG51bGxvIHBlcmNow6kgcXVhbmRvIGkgY2FnbmFjY2kgZmFubm8gbmV3IEZvcm1Db250cm9sKClcclxuICAgICAqIHNjcml2b25vIHVuIHdyaXRlVmFsdWUgbnVsbG8uLi4gcXVpbmRpIGFsIHByaW1vIGJpbmRpbmcgc2FsdG8gbCdpbml6aWFsaXp6YXppb25lIHNlIGhvIGxhIGNvcHBpYSBudWxsLWZpcnN0QmluZFxyXG4gICAgICogcG9pIG1ldHRlbmRvIGZpcnN0QmluZCBhIGZhbHNlIGRpIGzDrCBpbiBwb2kgZnVuemlvbm8gY29tZSBkZXZvLiBWaXN0YSBsYSBjYXNpc3RpY2EgZXZpdG8gZXNzZW56aWFsbWVudGUgbWV0w6AgZGV0ZWN0Q2hhbmdlc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGZpcnN0QmluZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEluZGljYSBkaSB1dGlsaXp6YXJlIGkgdmFsaWRhdG9yaSBjaGUgbCd1dGVudGUgcGlhenphIHN1bCBjb21wb25lbnRlLiBcclxuICAgICogRGEgbm9uIHVzYXJlIG5lbCBjYXNvIGRpIGZvcm0tYWRhcHRpdmUgZGF0byBjaGUgaSB2YWxpZGF0b3JpIHZlbmdvbm8gdmFsdXRhdGkgaW4gYmFzZSBhbCB0aXBvIGVjY1xyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBVc2VVc2VyVmFsaWRhdG9yczpib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogSW5kaWNhIHNlIGlsIGNhbXBvIMOoIG9iYmxpZ2F0b3JpbyBpIG9wemlvbmFsZSAqL1xyXG4gICAgcHVibGljIFJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIE1vZGVsbG8gcmFwcHJlc2VudGF0byBkYSBxdWVzdG8gY2FtcG8gKi9cclxuICAgIHB1YmxpYyBNb2RlbDogYW55O1xyXG5cclxuICAgIC8qKiBWYWxvcmUgZGVsIE1vZGVsbG8gKi9cclxuICAgIHB1YmxpYyBFdmFsdWF0ZWRNb2RlbDogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBOb21lIGdlbmVyYXRvIHBlciBpbCBjb250cm9sbG8gaW50ZXJuby4gRGkgZGVmYXVsdCDDqCBpbCBub21lIGRlbCBjb250cm9sbG8gZXN0ZXJubyBjb24gbCdhZ2dpdW50YSBkaSBcIl9pbnRlcm5hbFwiLiBTZXJ2ZSBwZXIgZXZpdGFyZSBjcm9zcy1iaW5kICovXHJcbiAgICBwdWJsaWMgR2VuZXJhdGVkTmFtZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2UgaWwgRm9ybSBjaGUgY29udGllbmUgcXVlc3RvIGNhbXBvIMOoIGdpw6Agc3RhdG8gcmVnaXN0cmF0byAqL1xyXG4gICAgcHJvdGVjdGVkIGZvcm1IYXNCZW5uQm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBxdWVzdG8gY2FtcG8gw6ggc3RhY2NhdG8gZGFsIEZvcm0sIGFkIGVzZW1waW8gbmVsIGNhc28gc2lhIGluIHVuIG5nLXRlbXBsYXRlIHByb2lldHRhdG8gbmVsIGZvcm0uXHJcbiAgICAgKiBcclxuICAgICAqIEluIHF1ZWwgY2FzbyBsYSB2YXJpYWJpbGUgKipGb3JtKiogZGVsIGNvbXBvbmVudGUgZGV2J2Vzc2VyZSB2YWxvcml6emF0YVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZGV0YXRjaGVkRnJvbWZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJvdGVjdGVkIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJvdGVjdGVkIG9uVG91Y2hlZCA9ICgpID0+IHsgfTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBWZWRpIGdldHRlciBlIHNldHRlciAqL1xyXG4gICAgcHVibGljIF9yZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUXVhbG9yYSBjaSBmb3NzZSB1biBjb250ZXN0byBjb2xsZWdhdG8gcXVlc3RhIHZhcmlhYmlsZSBpZGVudGlmaWNhIHNlIFNvbm8gbCdPd25lciBvIG1lbm8uXHJcbiAgICAgKiBcclxuICAgICAqIFNlIG5vbiBsbyBzb25vLCBpbCBjYW1wbyByaXN1bHRlcsOgIGluIHNvbGEgbGV0dHVyYSBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBBcHBDb250ZXh0T3duZXJzaGlwOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogU3ViamVjdCBhIGN1aSBsJ29nZ2V0dG8gaW50ZXJubyBzaSBjb2xsZWdhIHBlciBlZmZldHR1YXJlIGlsIGZvY3VzIGRlbGwnZWxlbWVudG8gaW5wdXQgc290dG9zdGFudGUgKi9cclxuICAgIEBJbnB1dCgpIEZvY3VzU3ViamVjdDogU3ViamVjdDx2b2lkPjtcclxuICAgIC8qKlxyXG4gICAgKiBARVhQRVJJTUVOVEFMXHJcbiAgICAqL1xyXG4gICAgQElucHV0KCkgU2V0VmFsaWRhdGlvblN1YmplY3Q6IFN1YmplY3Q8eyBmaWVsZE5hbWU6IHN0cmluZywgZXJyb3I6IHN0cmluZyB9PjtcclxuXHJcbiAgICAvKiogTW9kYWxpdMOgIGluIGN1aSB2aWVuZSBtb3N0cmF0byBpbCBjYW1wbywgMS0xIHJpc3BldHRvIGFsbGUgZGVmaW5pemlvbmkgZGkgQW5ndWxhciBNYXRlcmlhbCAgKi9cclxuICAgIEBJbnB1dCgpIEZpZWxkQXBwZWFyZW5jZTogXCJsZWdhY3lcIiB8IFwic3RhbmRhcmRcIiB8IFwiZmlsbFwiIHwgXCJvdXRsaW5lXCIgPSBcIm91dGxpbmVcIjtcclxuXHJcbiAgICAvKiogVXRpbGl6emEgbyBtZW5vIGlsIExheW91dCBkaSB1biBmb3JtIChMYWJlbCBjb24gaW5wdXQgZGkgZmlhbmNvKSwgc2UgZmFsc2UgbW9zdHJhIHNvbG8gbCdpbnB1dCAqL1xyXG4gICAgQElucHV0KCkgRm9ybUxheW91dDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIERlZmluaXNjZSBzZSByaWNoaWFtYXJlIGwnRXZlbnRFbWl0dGVyICoqaW5wdXRDaGFuZ2UqKiBpbiBtYW5pZXJhIGNsYXNzaWNhICh0cnVlKSBvIHNvbG8gcGVyIGxhIGNoYW5nZSBjb25zaWRlcmF0ZSBkZWZpbml0aXZlIGNvbWUgdGFzdG8gaW52aW8gLyBibHVyIC8gZWNjLi4uIChmYWxzZSkgKi9cclxuICAgIEBJbnB1dCgpIEVtaXRQZW5kaW5nQ2hhbmdlczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIEF0dGl2YSBvIGRpc2F0dGl2YSBsYSB2YWxpZGF6aW9uZSBwZXIgcXVlc3RvIGNvbXBvbmVudGUgKi9cclxuICAgIEBJbnB1dCgpIFZhbGlkYXRpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBcclxuICAgICAqIFBlcm1ldHRlIGRpIHNjcml2ZXJlIG8gbWVubyBuZWwgY2FtcG8gZGkgSW5wdXQuIFNpIGRpZmZlcmVuemlhIGRhbCBSZWFkb25seSBpbiBxdWFudG8gZmlzaWNhbWVudGUgbCdJbnB1dCDDqCBzY3JpdmliaWxlIGUgdmVuZ29ubyBtYW50ZW51dGkgaSB0ZW1pIGRlbGxhIHZhbGlkYXppb25lXHJcbiAgICAgKiBtYSBpbnRlcmFnaXJlIGRpcmV0dGFtZW50ZSBjb24gbGEgY2FzZWxsYSBkaSBJbnB1dCBwZXIgbCd1dGVudGUgbm9uIMOoIHBvc3NpYmlsZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBGcm96ZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogUGxhY2Vob2xkZXIgcGVyIHF1YW5kbyBsJ2lucHV0IMOoIHZ1b3RvICovXHJcbiAgICBASW5wdXQoKSBQbGFjZWhvbGRlcjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogQ2xhc3NlIGV4dHJhIHBlciBpbCBmb3JtLWdyb3VwIGluIGN1aSB2aWVuZSB3cmFwcGF0byBsJ2lucHV0ICovXHJcbiAgICBASW5wdXQoKSBGb3JtR3JvdXBDbGFzczogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogTWVzc2FnZ2lvIGRhIG1vc3RyYXJlIHF1YW5kbyBsYSB2YWxpZGF6aW9uZSBmYWxsaXNjZSBwZXIgcXVlc3RvIGNvbXBvbmVudGUuIERpIGRlZmF1bHQgdmllbmUgcHJvcG9zdGEgZGFsbGEgbGlicmVyaWEgKi9cclxuICAgIEBJbnB1dCgpIEZhaWxlZFZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBJbnB1dCBjaGUgZm9yemEgbCdpbnZhbGlkaXTDoCBkZWwgY29tcG9uZW50ZSAqL1xyXG4gICAgQElucHV0KCkgRm9yY2VkRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogTW9zdHJhIHVuIHRlc3RvIGEgc2luaXN0cmEgZGVsbCdpbnB1dCAoRm9ybUxheW91dCBwZXJtZXR0ZW5kbykgKi9cclxuICAgIEBJbnB1dCgpIExhYmVsOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBjb2wtbWQtWCBwZXIgbGEgbGFiZWwgKi9cclxuICAgIEBJbnB1dCgpIExhYmVsQ29sV2lkdGg6IG51bWJlciA9IDQ7XHJcblxyXG4gICAgLyoqIGNvbC1tZC1YIHBlciBsJ2lucHV0ICovXHJcbiAgICBASW5wdXQoKSBJbnB1dENvbFdpZHRoOiBudW1iZXIgPSA4O1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2Ugw6ggbCd1bHRpbW8gY29tcG9uZW50ZSBkaSB1biBmb3JtIChzZXJ2ZSBwZXIgcmltdW92ZXJlIGlsIG1hcmdpbmUgZmluYWxlKSAqL1xyXG4gICAgQElucHV0KCkgTGFzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBBc3NvY2lhIGlsIGNvbXBvbmVudGUgRm9ybSBhIHF1ZXN0byBpbnB1dCAqL1xyXG4gICAgQElucHV0KCkgRm9ybTogTmdGb3JtID0gbnVsbDtcclxuXHJcbiAgICAvKiogU29yZ2VudGUgZGEgY3VpIHNjZWdsaWVyZSB2YWxvcmkgcGVyIGkgY29tcG9uZW50aSBGb3JtIGNoZSBsbyBjb25zZW50b25vICovXHJcbiAgICBASW5wdXQoKSBTb3VyY2U6IGFueVtdO1xyXG5cclxuICAgIC8qKiBOb21lIGRlbGxhIHByb3ByaWV0w6AgY2hlIGNvbnRpZW5lIGwnSWQgZGVnbGkgb2dnZXR0aSBiaW5kYXRpIG5lbGxhICoqU291cmNlKiogKi9cclxuICAgIEBJbnB1dCgpIElkRmllbGQ6IHN0cmluZyA9ICdpZCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgaWwgKipQbGFjZWhvbGRlcioqIGRldidlc3NlcmUgdXNhdG8gY29tZSB1bmEgZmxvYXRpbmcgbGFiZWwgZGkgbWF0ZXJpYWwgbyBzb2xvIGNvbWUgdW4gcGxhY2Vob2xkZXIgc3RhbmRhcmQgXHJcbiAgICAgKiBcclxuICAgICAqIElnbm9yYXRhIGxhdG8gYXV0b2NvbXBsZXRlLCBhdXRvY29tcGxldGUtbXVsdGkgZSBzZWxlY3QgaW4gcXVhbnRvIGhhbm5vIGdlc3Rpb25pIHBhcnRpY29sYXJpIGRpIHBsYWNlaG9sZGVyIGVjYy4uLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBGbG9hdGluZ0xhYmVsOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogSW5kaWNhIGNoZSBsYSBwYXJ0ZSBpbnB1dCBkZWwgY29udHJvbGxvIGRldidlc3NlcmUgdW5hIGxhYmVsIHJlYWRvbmx5IGUgbGEgcGFydGUgbGFiZWwgZGkgdGl0b2xvIGRldidlc3NlcmUgaW4gYm9sZC4gUGVyIHV0aWxpenphcmUgdW4gc29sbyBjb21wb25lbnRlIHNpYSBwZXIgbGEgbW9kaWZpY2EgY2hlIHBlciBpbCBkZXR0YWdsaW8gKi9cclxuICAgIEBJbnB1dCgpIERpc3BsYXlNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEluZGljYSBsYSBjb25kaXppb25lIHBlciBjdWkgdW4gZWxlbWVudG8gaW4gTW9kYWxpdMOgIERpc3BsYXkgcHXDsiBlc3NlcmUgdmlzaWJpbGUgaW4gYmFzZSBhIHVsdGVyaW9yaSBjb250cm9sbGkgKi9cclxuICAgIEBJbnB1dCgpIERpc3BsYXlDb25kaXRpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBUZW1wbGF0ZSBwZXIgdmlzdWFsaXp6YXJlIGxhIG1vZGFsaXTDoCAqKkRpc3BsYXlNb2RlKiogY29tZSB2dW9sZSBpbCBwcm9ncmFtbWF0b3JlIGZyb2NpbyBkaSB0dXJubyAqL1xyXG4gICAgQElucHV0KCkgRGlzcGxheU1vZGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICAvKiogTGF5b3V0IGRlbCBGb3JtIHF1YW5kbyDDqCBpbiBtb2RhbGl0w6AgRGlzcGxheS4gRGkgZGVmYXVsdCBtYW50aWVuZSBsYSBmb3JtYXR0YXppb25lIGEgZm9ybSAqL1xyXG4gICAgQElucHV0KCkgRGlzcGxheUxheW91dDogJ2Zvcm0nIHwgJ2lubGluZScgfCAnaGlkZGVuJyA9ICdmb3JtJztcclxuXHJcbiAgICAvKiogU2VwYXJhdG9yZSBkYSBtZXR0ZXJlIGluIGF1dG9tYXRpY28gZnJhIHVuIGVsZW1lbnRvIEZvcm0gZSBsJ2FsdHJvIHF1YW5kbyBzb25vIGluICoqRGlzcGxheU1vZGUqKiBjb24gKipEaXNwbGF5TGF5b3V0KiogaW5saW5lICovXHJcbiAgICBASW5wdXQoKSBJbmxpbmVTZXBhcmF0b3I6IHN0cmluZyA9ICcgJztcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBFc3ByZXNzaW9uZSBzaW1pbC1Bbmd1bGFyIHBlciBjYW1iaWFyZSBpbCB0ZXN0byBkZWkgY29tcG9uZW50aSBjaGUgc2NlbGdvbm8gaWwgcHJvcHJpbyBtb2RlbGxvIGRhIHVuYSAqKlNvdXJjZSoqXHJcbiAgICAgKiBcclxuICAgICAqIElsIGZ1bnppb25hbWVudG8gw6ggaWRlbnRpY28gYWwgYmluZGVyIGRpIGFuZ3VsYXIsIHNvbG8gY29uIHVuYSBncmFmZmEgaW52ZWNlIGNoZSAyLlxyXG4gICAgICogw4ggaW5vbHRyZSBwb3NzaWJpbGUgYWdnaXVuZ2VyZSBwZXp6aSBkaSBkZXNjcml6aW9uZSBpbiBtYW5pZXJhIGNvbmRpemlvbmFsZSBjb24gbGEgc2ludGFzc2kgKio6cHJvcD8oUHJvcCB2YWxlIHtwcm9wfSkqKlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBEaXNwbGF5OiBzdHJpbmcgPSAne2Rlc2NyaXB0aW9ufSc7XHJcblxyXG4gICAgLyoqIFJpc3VsdGF0byBkZWxsJ3VuaW9uZSBmcmEgbGUgaW5mb3JtYXppb25pIGRlZ2xpIG9nZ2V0dGkgaW4gKipTb3VyY2UqKiBlIGxlIGltcG9zdGF6aW9uaSBzcGVjaWZpY2F0ZSBuZWxsJ0lucHV0ICoqRGlzcGxheSoqICovXHJcbiAgICBwdWJsaWMgQm91bmRTb3VyY2U6IHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9W10gPSBbXTtcclxuXHJcbiAgICAvKiogSW5kaWNhIHNlIMOoIGlsIHByaW1vIEJpbmQgZGVsbGEgU291cmNlICovXHJcbiAgICBwcm90ZWN0ZWQgU291cmNlRmlyc3RCaW5kOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE90dGllbmUgaWwgdmFsb3JlIGRlbGxhIHZhcmlhYmlsZSAqKl9yZWFkb25seSoqXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBzb2xhIGxldHR1cmEsICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIGdldCBSZWFkb25seSgpOiBib29sZWFuIHsgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wb3N0YSBpbCB2YWxvcmUgZGVsbGEgdmFyaWFiaWxlICoqX3JlYWRvbmx5KiogZ2VzdGVuZG8gYW5jaGUgaWwgQ29udGVzdG8gYXBwbGljYXRpdm9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSBWYWxvcmUgZGEgaW1wb3N0YXJlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHNldCBSZWFkb25seSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLkFwcENvbnRleHRPd25lcnNoaXApIFxyXG4gICAgICAgICAgICB0aGlzLl9yZWFkb25seSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVybWV0dGUgZGkgc2V0dGFyZSBpbiB1bmEgdm9sdGEgc29sbyBnbGkgaW5wdXQgTGFiZWxDb2xXaWR0aCBlIElucHV0Q29sV2lkdGgsIGJhc3RhIHNjcml2ZXJsbyBjb24gbGEgc2ludGFzc2kgXCJYIFlcIlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgSW5wdXQgbmVsIGZvcm1hdG8gXCJYIFlcIlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBzZXQgTGFiZWxJbnB1dFJhdGlvKGlucHV0OiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcmF0aW8gPSBpbnB1dC5zcGxpdCgvXFxzLyk7XHJcbiAgICAgICAgdGhpcy5MYWJlbENvbFdpZHRoID0gcGFyc2VJbnQocmF0aW9bMF0pO1xyXG4gICAgICAgIHRoaXMuSW5wdXRDb2xXaWR0aCA9IHBhcnNlSW50KHJhdGlvWzFdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogdmFsLXF1YWxjb3NhIGNoZSBmYSBlZmZldHRpdmFtZW50ZSBkYSBpbnB1dCwgbyBldmVudHVhbG1lbnRlIGlsIHNpbmdvbG8gaW5wdXQgaW4gY2FzaSBwYXJ0aWNvbGFyaSAoZXMgY2hlY2tib3gpICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGlvbkNvbnRyb2w6IE5nTW9kZWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWVyeSBzdWxsJ2VsZW1lbnRvICd2YWxpZGF0aW9uQ29udHJvbCcgY2hlIGZ1bnppb25hIGluIGFtYmllbnRlIHN0YXRpY29cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtOZ01vZGVsfSBjb21wIEVsZW1lbnRvIEhUTUwgbWFyY2F0byBjb24gXCIjdmFsaWRhdGlvbkNvbnRyb2xcIlxyXG4gICAgICovXHJcbiAgICBAVmlld0NoaWxkKFwidmFsaWRhdGlvbkNvbnRyb2xcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHNldCBfdmFsaWRhdGlvbkNvbnRyb2woY29tcDogTmdNb2RlbCkgeyB0aGlzLnJlZ2lzdGVyVmFsQ29tcChjb21wKTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUXVlcnkgc3VsbCdlbGVtZW50byAndmFsaWRhdGlvbkNvbnRyb2wnIGNoZSBmdW56aW9uYSBpbiBhbWJpZW50ZSBkaW5hbWljb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge05nTW9kZWx9IGNvbXAgRWxlbWVudG8gSFRNTCBtYXJjYXRvIGNvbiBcIiN2YWxpZGF0aW9uQ29udHJvbFwiXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoXCJ2YWxpZGF0aW9uQ29udHJvbFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZXQgdmFsaWRhdGlvbkNvbnRyb2xfc3RhdGljKGNvbXA6IE5nTW9kZWwpIHsgdGhpcy5yZWdpc3RlclZhbENvbXAoY29tcCk7IH07XHJcblxyXG4gICAgLyoqIEV2ZW50byBjaGlhbWF0byBhbGxhIG1vZGlmaWNhIGRlbCB2YWxvcmUgY29sbGVnYXRvIGEgcXVlc3RvIGNhbXBvICovXHJcbiAgICBAT3V0cHV0KCkgaW5wdXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENoYW5nZUV2ZW50PigpO1xyXG5cclxuICAgIC8qKiBFdmVudG8gY2hpYW1hdG8gYWwgZm9jdXMgZGVsIGNhbXBvIGRpIHRlc3RvL2NvbWJvL3F1ZWxjaGXDqCwgcmllbWl0dGEgbCdldmVudG8gb3JpZ2luYWxlIEphdmFzY3JpcHQgKi9cclxuICAgIEBPdXRwdXQoKSBpbnB1dEZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIC8qKiBFdmVudG8gY2hpYW1hdG8gYWwgZmluYWxpemUgZGVsIGNhbXBvIGRpIHRlc3RvL2NvbWJvL3F1ZWxjaGXDqCAqL1xyXG4gICAgQE91dHB1dCgpIGlucHV0RmluYWxpemVkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAgIC8qKiBDYWNoZSBkZWxsZSBjb25kaXppb25pIHNjcml0dGUgdGlwbyA6cHJvcD8oUm9iYSBjb24ge3Byb3B9KSAqL1xyXG4gICAgcHJpdmF0ZSBCaW5kQ2hlY2tpbmdHcm91cHM6IHsgZ2xvYmFsOiBzdHJpbmcsIHByb3A6IHN0cmluZywgd2hlbmV4aXN0czogc3RyaW5nIH1bXSA9IFtdXHJcblxyXG4gICAgLyoqIENhY2hlIGRlbGxlIHByb3ByaWV0w6Agc2NyaXR0ZSB0aXBvIC0tPiB7cHJvcH0gKi9cclxuICAgIHByaXZhdGUgQmluZFByb3BlcnRpZXM6IHsgZ2xvYmFsOiBzdHJpbmcsIHByb3A6IHN0cmluZyB9W10gPSBbXTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBDb3N0cnV0dG9yZSAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsIHByb3RlY3RlZCBfdmFsaWRhdG9yczogQXJyYXk8YW55PiwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBhYzogQWNjZXNzQ29udHJvbFNlcnZpY2UsIEBPcHRpb25hbCgpIHB1YmxpYyBBcHBDb250ZXh0OiBDb21wb25lbnRDb250ZXh0LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFDT19DVVNUT01LRVkpIHByaXZhdGUgQUNPX0NVU1RPTUtFWTogc3RyaW5nLCBAT3B0aW9uYWwoKSBASW5qZWN0KEZBVl9ERUJVR19NT0RFKSBwcml2YXRlIEZBVl9ERUJVR19NT0RFOiBib29sZWFuLCBwcml2YXRlIG5hdGl2ZUlucHV0OiBib29sZWFuID0gZmFsc2UpIHtcclxuXHJcbiAgICAgICAgaWYgKG5nQ29udHJvbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5oYW5kbGVOdWxsTmdDb250cm9sKCkpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwibmdDb250cm9sIG51bGxvIHBlciBxdWFsY2hlIG1vdGl2byEgSWwgOTAlIGRlbGxlIGZ1bnppb25hbGl0w6AgZGkgcXVlc3RvIGlucHV0IHNhcmFubm8gZGlzYWJpbGl0YXRlXCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9TZSBtaSBhcnJpdmEgbCdpbmplY3RhYmxlIGRlbCBjb250ZXN0byBwb3NzbyBjYXBpcmUgc2UgcXVlc3RvIGNhbXBvIGRldmUgZXNzZXJlIGluIHJlYWRvbmx5IG8gbm8sIHNvbG8gc2UgaG8gZ2nDoCBpbml6aWFsaXp6YXRvIGkgY29udHJvbGxlciBjdXN0b20gZGVsbCdhY2Nlc3MgY29udHJvbFxyXG4gICAgICAgIGlmICh0aGlzLkFwcENvbnRleHQgJiYgdGhpcy5BcHBDb250ZXh0Lm5hbWUgJiYgdGhpcy5BQ09fQ1VTVE9NS0VZICYmIHRoaXMuYWMgJiYgdGhpcy5hYy5Jbml0aWFsaXplZEN1c3RvbSkge1xyXG4gICAgICAgICAgICB0aGlzLkFwcENvbnRleHRPd25lcnNoaXAgPSAhdGhpcy5hYy5oYXModGhpcy5BQ09fQ1VTVE9NS0VZICsgXCI6XCIgKyB0aGlzLkFwcENvbnRleHQubmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlYWRvbmx5ID0gIXRoaXMuQXBwQ29udGV4dE93bmVyc2hpcFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG5cclxuICAgICAgICAvL1NlIGhvIGdpw6AgdW4gcGFyZW50IGltcG9zdGF0byB2dW9sIGRpcmUgY2hlIHNvdHRvIGFsIHRhZyA8Zm9ybT4gaG8gZGlyZXR0YW1lbnRlIHVuIHRhZyA8Zm9ybS0qPi4uXHJcbiAgICAgICAgLy8uLiBxdWluZGkgcG9zc28gaW1wb3N0YXJlIGRpcmV0dGFtZW50ZSBpbCByaWZlcmltZW50byBkZWwgRm9ybSBkYSB1c2FyZSBpbiBIVE1MIHBlciBpbCBzdWJtaXR0ZWRcclxuXHJcbiAgICAgICAgLy9TZSBub24gYyfDqCB2dW9sIGRpcmUgY2hlIGRlbnRybyBhbCB0YWcgPGZvcm0+IGMnw6ggdW5vIHNwbGVuZGlkbyA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGU7IGNvbnRleHQ6IC4uLi5cIj4uLlxyXG4gICAgICAgIC8vLi4gaWwgcXVhbGUgYSBzdWEgdm9sdGEgY29udGllbmUgaWwgY29udHJvbGxvIDxmb3JtLSo+IHF1aW5kaSBhdnLDsiBpbCBmb3JtIG5lbGwnaW5wdXQgXCJGb3JtXCJcclxuICAgICAgICBpZiAoKDxhbnk+bmdDb250cm9sKS5fcGFyZW50KVxyXG4gICAgICAgICAgICB0aGlzLkZvcm0gPSA8TmdGb3JtPig8YW55Pm5nQ29udHJvbCkuX3BhcmVudDtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuZGV0YXRjaGVkRnJvbWZvcm0gPSB0cnVlO1xyXG5cclxuICAgICAgICAvL1F1ZXN0YSBzZXJ2ZSBwZXIgaW1wb3N0YXJlIG1lIHN0ZXNzbyBjb21lIHNpIGRldmUsIGlsIHZhbGlkYXRvcmUgaW52ZWNlIGxvIHBhc3NvIGFsIHZhbGlkYXRpb24taW5wdXQgcXVhbmRvIHZpZW5lIHNldHRhdG8gaWwgdmFsaWRhdGlvbkNvbnRyb2xcclxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgICAgICAgICAgLy9QZXIgdHV0dGkgaSB2YWxpZGF0b3JpOiByaWdlbmVybyBsYSBmdW56aW9uZSBkaSB2YWxpZGF6aW9uZS4gUGVyIHF1YWxjaGUgbW90aXZvIGEgdm9sdGUgaG8gdmFsaWRhdG9yaSBzZW56YS4uLlxyXG4gICAgICAgICAgICAvLy4uLiBxdWVzdG8gw6ggdW4gd29ya2Fyb3VuZCBwZXIgZXNzZXJlIHNpY3VybyBkaSBhdmVybGEgc2VtcHJlLlxyXG4gICAgICAgICAgICAvL1NvbG8gaSB2YWxpZGF0b3JpIGNvbiBwYXJhbWV0cmkgaGFubm8gYmlzb2dubyBkZWxsYSBfY3JlYXRlVmFsaWRhdG9yIChlcy4gXCJtYXhsZW5ndGhcIiBjaGUgaGEgMSBwYXJhbWV0cm8pLCBxdWluZGkgbm8gdmFsaWRhdG9yaSB0aXBvIFwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsaWRhdG9ycykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsaWRhdG9ycy5mb3JFYWNoKHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2Ll9jcmVhdGVWYWxpZGF0b3IpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHYuX2NyZWF0ZVZhbGlkYXRvcigpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0b3JzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5hZGRWYWxpZGF0b3JzKHRoaXMuX3ZhbGlkYXRvcnMuZmlsdGVyKHYgPT4gIXYubmdPbkluaXQpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVmZmV0dHVhIGlsIEJpbmQvUGFyc2UgZGVsbGUgdmFyaWUgKipTb3VyY2UqKiB1bmVuZG8gbGUgaW5mb3JtYXppb25pIHNwZWNpZmljYXRlIGluICoqRGlzcGxheSoqXHJcbiAgICAgKiBcclxuICAgICAqIEV2ZW50dWFsbWVudGUgcmllZmZldHR1YSB1biBiaW5kIGFsIG1vZGVsbG8gaW4gYmFzZSBhbCB2YWxvcmUgZGVsbGEgdmFyaWFiaWxlICoqUmViaW5kTW9kZWxBZnRlclNvdXJjZSoqXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB0cnlCaW5kU291cmNlRGlzcGxheSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuU291cmNlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNvdXJjZS5sZW5ndGggPT0gMCAmJiAhdGhpcy5Tb3VyY2VGaXJzdEJpbmQpXHJcbiAgICAgICAgICAgIHRoaXMuQm91bmRTb3VyY2UgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5Tb3VyY2VGaXJzdEJpbmQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gQ2FjaGUgbG9jYWxlIHBlciBldml0YXJlIGRpIHJpZmFyZSBkZWkgcmVnZXgubWF0Y2ggb2duaSBzYW50YSB2b2x0YVxyXG4gICAgICAgIGlmICh0aGlzLlNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQm91bmRTb3VyY2UgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLkJpbmRDaGVja2luZ0dyb3Vwcy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuZXZhbHVhdGVCaW5kQ2hlY2tpbmdHcm91cHMoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLkJpbmRQcm9wZXJ0aWVzLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZUJpbmRQcm9wZXJ0aWVzKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBCbG9jY28gcGVyIGdlbmVyYXJlIGxhIGRlc2NyaXppb25lIGZpbmFsZSBkaSB1biBlbGVtZW50b1xyXG4gICAgICAgICAgICB0aGlzLlNvdXJjZS5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gQWdnaXVuZ28gYWxsYSBCb3VuZFNvdXJjZSBpbiBmb3JtYXRvIHN0YW5kYXJkIEtleVZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLkJvdW5kU291cmNlLnB1c2godGhpcy50cmFuc2Zvcm1Tb3VyY2VJdGVtKHMpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBQb3N0IHRyeWJpbmQgc2UgYyfDqCB1biBtb2RlbGxvIGFzc29jaWF0byByaWNhbGNvbG8gbCcqKkV2YWx1YXRlZE1vZGVsKipcclxuICAgICAgICAgICAgaWYgKHRoaXMuTW9kZWwpXHJcbiAgICAgICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5Cb3VuZFNvdXJjZS5maW5kKHQgPT4gdC5pZCA9PSB0aGlzLk1vZGVsKT8uZGVzY3JpcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBWYWx1dGEgaWwgY29udGVudXRvIGRlbGxhIHZhcmlhYmlsZSBCaW5kQ2hlY2tpbmdHcm91cHMgKi9cclxuICAgIHByaXZhdGUgZXZhbHVhdGVCaW5kQ2hlY2tpbmdHcm91cHMoKSB7XHJcbiAgICAgICAgLy8gQmxvY2NvIHBlciB0aXJhcmUgZnVvcmkgbGUgY29uZGl6aW9uaSBzY3JpdHRlIHRpcG8gLS0+IDpwcm9wPyhSb2JhIGNvbiB7cHJvcH0pXHJcbiAgICAgICAgdmFyIGlmZmVkTWF0Y2hlcyA9IHRoaXMuRGlzcGxheS5tYXRjaCgvOihbYS16XSspXFw/XFwoKFteXFwoXFwpXSspXFwpL2cpO1xyXG4gICAgICAgIGlmIChpZmZlZE1hdGNoZXMpIHtcclxuICAgICAgICAgICAgaWZmZWRNYXRjaGVzLmZvckVhY2gobSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBTdGVzc2EgcmVnZXggZGkgc29wcmEgbWEgaWwgdGFnIFwiaVwiIHNlcnZlIHBlciB0aXJhcmUgZnVvcmkgaSBzaW5nb2xpIGNhcHR1cmluZyBncm91cCBlIHBlciBxdWFsY2hlIG1vdGl2byBcclxuICAgICAgICAgICAgICAgIC8vIG5ldyBSZWdFeHAoYmFzZVJlZ2V4LCBcImdcIikgbm9uIGZ1bnppb25hIHF1aW5kaSBub24gaG8gcG90dXRvIHJhemlvbmFsaXp6YXJsb1xyXG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwcyA9IG0ubWF0Y2goLzooW2Etel0rKVxcP1xcKChbXlxcKFxcKV0rKVxcKS9pKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuQmluZENoZWNraW5nR3JvdXBzLnB1c2goeyBnbG9iYWw6IG0sIHByb3A6IGdyb3Vwc1sxXSwgd2hlbmV4aXN0czogZ3JvdXBzWzJdIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZhbHV0YSBpbCBjb250ZW51dG8gZGVsbGEgdmFyaWFiaWxlIEJpbmRQcm9wZXJ0aWVzICovXHJcbiAgICBwcml2YXRlIGV2YWx1YXRlQmluZFByb3BlcnRpZXMoKSB7XHJcbiAgICAgICAgLy8gQmxvY2NvIHBlciB0aXJhcmUgZnVvcmkgbGUgcHJvcHJpZXTDoCBzY3JpdHRlIHRpcG8gLS0+IHtwcm9wfVxyXG4gICAgICAgIHZhciBtYXRjaGVzID0gdGhpcy5EaXNwbGF5Lm1hdGNoKC97W2Etel0rfS9naSk7XHJcbiAgICAgICAgaWYgKG1hdGNoZXMpXHJcbiAgICAgICAgICAgIG1hdGNoZXMuZm9yRWFjaChtID0+IHsgdGhpcy5CaW5kUHJvcGVydGllcy5wdXNoKHsgZ2xvYmFsOiBtLCBwcm9wOiBtLnN1YnN0cmluZygxLCBtLmxlbmd0aCAtIDEpIH0pOyB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYXNmb3JtYSB1biBvZ2dldHRvIGRlbGxhIFNvdXJjZSBhbGxhIHN1YSB2ZXJzaW9uZSBcIm51b3ZhXCIgYmFzYW5kb3NpIHN1bGxlIGluZm9ybWF6aW9uaSBzdSBncnVwcGkgZSBwcm9wcmlldMOgXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIE9nZ2V0dG8gZGEgdHJhc2Zvcm1hcmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge3tpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nfX0gT2dnZXR0byBmaW5hbGUgdHJhc2Zvcm1hdG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1Tb3VyY2VJdGVtKHM6IGFueSk6IHtpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nfSB7XHJcbiAgICAgICAgLy8gUGFydG8gc2VtcHJlIGRhbGxhIHZhcmlhYmlsZSBkaSBEaXNwbGF5LCBwb2kgc29zdGl0dWlzY28gcGV6em8gcGVyIHBlenpvXHJcbiAgICAgICAgbGV0IGRlc2MgPSB0aGlzLkRpc3BsYXk7XHJcblxyXG4gICAgICAgIC8vIFRhZ2xpbyBvIG1hbnRlbmdvIGxlIGNvbmRpemlvbmkgaW4gYmFzZSBhbGxhIHByb3ByaWV0w6Agc3UgY3VpIGZhcmUgY2hlY2tcclxuICAgICAgICAvLyBEb3BvZGljaMOpIHNjcml2byB0dXR0ZSBsZSBwcm9wcmlldMOgXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLkJpbmRDaGVja2luZ0dyb3Vwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdCA9IHRoaXMuQmluZENoZWNraW5nR3JvdXBzW2ldO1xyXG4gICAgICAgICAgICBkZXNjID0gZGVzYy5yZXBsYWNlKHQuZ2xvYmFsLCAoc1t0LnByb3BdICE9PSBudWxsICYmIHNbdC5wcm9wXSAhPT0gdW5kZWZpbmVkICYmIHNbdC5wcm9wXSAhPT0gXCJcIikgPyB0LndoZW5leGlzdHMgOiBcIlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5CaW5kUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdCA9IHRoaXMuQmluZFByb3BlcnRpZXNbaV07XHJcbiAgICAgICAgICAgIGRlc2MgPSBkZXNjLnJlcGxhY2UodC5nbG9iYWwsIHNbdC5wcm9wXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geyBpZDogc1t0aGlzLklkRmllbGRdLCBkZXNjcmlwdGlvbjogZGVzYyB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIGlsIGNvbW9wbmVudGUgaW4gcXVlc3Rpb25lIMOoIGluIGdyYWRvIGRpIGdlc3RpcmUgbmdDb250cm9sIG51bGxpLiBcclxuICAgICAqIERpIGRlZmF1bHQgw6ggKipmYWxzZSoqXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBnZXN0aXNjbyBuZ0NvbnRyb2wgbnVsbGksICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIGhhbmRsZU51bGxOZ0NvbnRyb2woKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICAvLyBBIHZvbHRlIG5lbGwnbmdPbkluaXQgbm9uIGNpIHBhc3NhIHF1aW5kaSBsbyBtZXR0byBzaWEgcXVpIHNpYSBuZWxsJ2FmdGVydmlld2luaXQsIHBlbnNvIGNoZSB2YWxnYSBwZXIgaSBjb21wb25lbnRpIGRpIHRlcnplIHBhcnRpXHJcbiAgICAgICAgLy8gY2hlIHNpIGNvbGxlZ2FubyBwZXIgaSBjYXp6aSBsb3JvIGFsIGZvcm0gZWNjLCBxdWluZGkgbGEgcGFydGUgc29wcmEgbm9uIHNlcnZlLi4uIEJPSFxyXG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZG5lc3MoKTtcclxuXHJcbiAgICAgICAgLy9JbCBub21lIG5vbiBjJ8OoIHNlIG1ldHRvIHN0YW5kYWxvbmUgOiB0cnVlIChDSEUgTk9OIMOpIERBIE1FVFRFUkUpXHJcbiAgICAgICAgLy9EYXRvIGNoZSBhbmNoZSBpbCBjb250cm9sbG8gZXN0ZXJubyB2aWVuZSBjb25zaWRlcmF0byBjb21lIGNvbXBvbmVudGUgZGVsIGZvcm0sIG5vbiBwb3NzbyBiYXNhcm1pIHNvbG8gc3VsIG5vbWUgbWEgZGV2byBhZ2dpdW5nZXJlIHVuIHRhZy4gSW4gcXVlc3RvIGNhc28gXCJfaW50ZXJuYWxcIlxyXG4gICAgICAgIC8vIEFUVEVOWklPTkU6IFFVQUxTSUFTSSBTSUEgSUwgTU9USVZPLCBTRSBTVE8gQ09TTyBWSUVORSBTUE9TVEFUTyBEQUxMIG5nT25Jbml0IE5PTiBGVU5aSU9OQSBQSVUgTlVMTEFcclxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wubmFtZSlcclxuICAgICAgICAgICAgdGhpcy5HZW5lcmF0ZWROYW1lID0gdGhpcy5uZ0NvbnRyb2wubmFtZS50b1N0cmluZygpICsgXCJfaW50ZXJuYWxcIjtcclxuXHJcbiAgICAgICAgLy8gQVRURU5aSU9ORTogUVVBTFNJQVNJIFNJQSBJTCBNT1RJVk8sIFNFIFNUTyBDT1NPIFZJRU5FIFNQT1NUQVRPIERBTEwgbmdPbkluaXQgTk9OIEZVTlpJT05BIFBJVSBOVUxMQVxyXG4gICAgICAgIGlmICh0aGlzLkZvcm0pIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmZvcm1IYXNCZW5uQm91bmQgJiYgdGhpcy52YWxpZGF0aW9uQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Gb3JtLmFkZENvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1IYXNCZW5uQm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBRdWFuZG8gdW4gZm9ybSB2aWVuZSBzdWJtaXR0YXRvIGxhIHZhcmlhYmlsZSBGb3JtLnN1Ym1pdHRlZCB2aWVuZSBhc3NlZ25hdGEgYWxsJ2lucHV0IFtzdWJtaXR0ZWRdIGRlbCB2YWwtY29udHJvbFxyXG4gICAgICAgICAgICAvLyBFc3NlbmRvIGNoZSBwZXLDsiBsYSBDRCDDqCBPblB1c2ggcGVyIGRpcmUgYWQgQW5ndWxhciBjaGUgbCdJbnB1dCDDqCBjYW1iaWF0byBlIHBlcm1ldHRlcmUgaSBzaWRlZmZlY3RzIGRpIGFzc2VnbmFyZSBbc3VibWl0dGVkXVxyXG4gICAgICAgICAgICAvLyBkZXZvIGF0dGFjY2FybWkgYWwgc3VibWl0IGF0dHVhbGUgZGVsIGZvcm0gZSBwcmltYSBkaSBlc2VndWlybG8gZGV2byBtYXJjYXJlIGlsIGNvbXBvbmVudGUgcGVyIGlsIGNoZWNrXHJcbiAgICAgICAgICAgIGxldCBvcmlnRnVuYyA9IHRoaXMuRm9ybS5vblN1Ym1pdDtcclxuICAgICAgICAgICAgdmFyIGZvcm1PdXRzaWRlUmVmID0gdGhpcy5Gb3JtO1xyXG4gICAgICAgICAgICB0aGlzLkZvcm0ub25TdWJtaXQgPSAoZXYpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdGdW5jLmFwcGx5KGZvcm1PdXRzaWRlUmVmKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNldFZhbGlkYXRpb25TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuU2V0VmFsaWRhdGlvblN1YmplY3QucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHYuZmllbGROYW1lICsgXCJfaW50ZXJuYWxcIiA9PSB0aGlzLkdlbmVyYXRlZE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IHRoaXMuRm9ybS5nZXRDb250cm9sKHRoaXMudmFsaWRhdGlvbkNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgZm9yY2VkdG9pbnZhbGlkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnNldEVycm9ycyh7IGZvcmNlZHRvaW52YWxpZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVzdHJveWVkJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZSBzb25vIGluIG1vZGFsaXTDoCBkZXRhdGNoZWQgZGV2byByaW11b3ZlcmUgbWFudWFsbWVudGUgcXVlc3RvIGNvbnRyb2xsbyBxdWFuZG8gZW50cm8gbmVsbGEgZGlzcG9zZSwgYWx0cmltZW50aSBzZSBwb2kgbmUgYW5kYXNzaSBhIHJpYWdnaXVuZ2VyZVxyXG4gICAgICogdW4gYWx0cm8gY29uIGxvIHN0ZXNzbyBcIm5hbWVcIiBtYSBtYWdhcmkgcmVzZXR0YXRvLCBBbmd1bGFyIGxvIHJlLWlkcmF0ZXJlYmJlIGNvbiBpIHZhbG9yaSBwcmVjZWRlbnRpIG5vbm9zdGFudGUgaWwgbW9kZWxsbyBmb3NzZSB2dW90b1xyXG4gICAgICovXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBpZiAodGhpcy5Gb3JtICYmIHRoaXMudmFsaWRhdGlvbkNvbnRyb2wgJiYgISF0aGlzLkZvcm0uZ2V0Q29udHJvbCh0aGlzLnZhbGlkYXRpb25Db250cm9sKSlcclxuICAgICAgICAgICAgdGhpcy5Gb3JtLnJlbW92ZUNvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbCk7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFbGFib3JhIGkgdmFsaWRhdG9yaSBpbmlldHRhdGkgZSBjYXBpc2NlIHNlIGlsIHZhbG9yZSDDqCBvYmJsaWdhdG9yaW8gbyBtZW5vICovXHJcbiAgICAvKiogRnJhdGVsbG8gZGVsbGEgZnVuemlvbmUgY29uIGxvIHN0ZXNzbyBub21lIGxhdG8gdmFsaWRhdGlvbnMgKi9cclxuICAgIGNoZWNrUmVxdWlyZWRuZXNzKCkge1xyXG4gICAgICAgIC8vIGNvbnRyb2xsbyBzZSDDqCBzZXR0YXRvIHVuIHJlcXVpcmVkIHBlciBkZWNpZGVyZSBpbiBtYW5pZXJhIGNvbmRpemlvbmFsZSBzZSB1dGlsaXp6YXJlIGlsIHZhbGlkYXRvcmUgcmVxdWlyZWQgbmVsIGNvbXBvbmVudGUgaW50ZXJub1xyXG4gICAgICAgIC8vIExvIGZhY2NpbyBxdWkgZSBub24gaW4gdW4gZXZlbnR1YWxlIG5nT25Jbml0IG8gY29zdHJ1dHRvcmUgcGVyY2jDqSBuZ09uSW5pdCBub24gc2VtcHJlIHZpZW5lIGNoaWFtYXRvIGUgZGEgY29zdHJ1dHRvcmUgaWwgdmFsaWRhdG9yZSBub24gaGEgYW5jb3JhIGlsIHZhbG9yZSBnaXVzdG9cclxuICAgICAgICBpZiAodGhpcy5fdmFsaWRhdG9ycyAmJiB0aGlzLl92YWxpZGF0b3JzLnNvbWUoZWxlbSA9PiBlbGVtIGluc3RhbmNlb2YgUmVxdWlyZWRWYWxpZGF0b3IgJiYgKGVsZW0ucmVxdWlyZWQgPT09IHRydWUgfHwgKCFlbGVtLnJlcXVpcmVkICYmIGVsZW0ucmVxdWlyZWQgIT09IGZhbHNlKSkpKVxyXG4gICAgICAgICAgICB0aGlzLlJlcXVpcmVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5uZ0NvbnRyb2wpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkbmVzcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIZWxwZXIgY2hlIGNvbGxlZ2EgbGEgZnVuemlvbmUgZGkgcmVzZXQgZGVsIGNvbnRyb2xsbyBmb3JtIGFsIGNvbnRyb2xsbyBkaSB2YWxpZGF6aW9uZSBzb3R0b3N0YW50ZSAqL1xyXG4gICAgcHJpdmF0ZSBiaW5kUmVzZXRGdW5jdGlvbigpIHtcclxuICAgICAgICAvL2ZhY2NpbyBpbiBtb2RvIGNoZSBzZSBjaGlhbW8gaWwgcmVzZXQgZGVsIGNvbnRyb2xsbyAobyBkZWxsYSBmb3JtKSBkYWxsJ2VzdGVybm8gc2kgcmVzZXR0aSBhbmNoZSBpbCBjb250cm9sbG8gbmF0aXZvXHJcbiAgICAgICAgY29uc3Qgb3JpZ0Z1bmMgPSAoPGFueT50aGlzLm5nQ29udHJvbC5jb250cm9sKS5fX29yaWdpbmFsX3Jlc2V0X18gfHwgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5yZXNldDtcclxuICAgICAgICB2YXIgbmdDb250cm9sX291dHNpZGVSZWZlcmVuY2UgPSB0aGlzLm5nQ29udHJvbC5jb250cm9sO1xyXG4gICAgICAgIHZhciB2YWxpZGF0aW9uQ29udHJvbF9vdXRzaWRlUmVmZXJlbmNlID0gdGhpcy52YWxpZGF0aW9uQ29udHJvbC5jb250cm9sO1xyXG5cclxuICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnJlc2V0ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBvcmlnRnVuYy5hcHBseShuZ0NvbnRyb2xfb3V0c2lkZVJlZmVyZW5jZSk7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25Db250cm9sX291dHNpZGVSZWZlcmVuY2UucmVzZXQoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvL1BlciBjb25zZW50aXJlIHJpY2hpYW1pIG11bHRpcGxpIGRpIHF1ZXN0YSBmdW56aW9uZSBwcmVuZGVuZG8gc2VtcHJlIGxhIGZpdW56aW9uZSBkaSByZXNldCBiYXNlXHJcbiAgICAgICAgKDxhbnk+dGhpcy5uZ0NvbnRyb2wuY29udHJvbCkuX19vcmlnaW5hbF9yZXNldF9fID0gb3JpZ0Z1bmNcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChvYmogPT0gbnVsbCAmJiB0aGlzLmZpcnN0QmluZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0QmluZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLk1vZGVsID0gb2JqO1xyXG5cclxuICAgICAgICAvL1BlciBzdmVnbGlhcmUgQW5ndWxhci4gSWwgdmFsb3JlIGNoZSBlbnRyYSBwb3RyZWJiZSBlc3NlcmUgdmFsaWRvL25vbiB2YWxpZG8gZSBxdWVzdG8gbG8gYmluZGEgYSB0dXR0bywgZm9ybSBjb21wcmVzb1xyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbClcclxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLk1vZGVsKVxyXG4gICAgICAgICAgICB0aGlzLm9uTm90TnVsbFZhbHVlU2V0KCk7XHJcblxyXG4gICAgICAgIC8vIG1hcmtGb3JDaGVjayBub24gdmEgYmVuZSBpbiBxdWFudG8gYXJyaXZhbm8gcG9zc2liaWxtZW50ZSAyIHVwZGF0ZSBzdSB1biBzb2xvIGNpY2xvIGRpIHN0YWNrXHJcbiAgICAgICAgLy8gc2V0VGltZSp1dCBjaGUgd3JhcHBhIHR1dHRvIG5vbiB2YSBiZW5lIHNlbm7DsiBzcGFtbWEgZGVsbGUgY2hhbmdlIGRldGVjdGlvbiBhIHN1b24gZGkgaW50ZXJ2YWwgY2hlIHJhbGxlbnRhbm8gdGFudGlzc2ltbyBsJ2FwcFxyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RyYSBpbnRlcm5hbWVudGUgaWwgY29tcG9uZW50ZSBkaSB2YWxpZGF6aW9uZSwgbmUgaW1wb3N0YSBpIHZhbGlkYXRvcmkgZSBjb2xsZWdhIGlsIEZvcm0sIHNlIHByZXNlbnRlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7TmdNb2RlbH0gY29tcCBFbGVtZW50byBIVE1MIG1hcmNhdG8gY29uIFwiI3ZhbGlkYXRpb25Db250cm9sXCJcclxuICAgICAqL1xyXG4gICAgcmVnaXN0ZXJWYWxDb21wKGNvbXA6IE5nTW9kZWwpIHtcclxuICAgICAgICBpZiAoY29tcCkge1xyXG4gICAgICAgICAgICAvLyDDiCBhcnJpdmF0byB1biBudW92byB2YWxpZGF0aW9uQ29udG9ybCAoc3VjY2VkZSBzb2xvIG5lbCBmb3JtLXNlbGVjdCBxdWFuZG8gY2FtYmlhIGxhIHNvdXJjZSBkYSAwIGVsZW1lbnRpIC8gbnVsbCBhZCBOIGVsZW1lbnRpLCBxdWluZGkgYWwgbWFzc2ltbyB1bmEgdm9sdGEpIFxyXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uQ29udHJvbCAmJiB0aGlzLkZvcm0pXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZvcm0ucmVtb3ZlQ29udHJvbCh0aGlzLnZhbGlkYXRpb25Db250cm9sKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkNvbnRyb2wgPSBjb21wO1xyXG5cclxuICAgICAgICAgICAgLy9RdWVzdGEgc2VydmUgcGVyIHBhc3NhcmUgYXZhbnRpIGkgdmFsaWRhdG9yaVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Db250cm9sLmNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLl92YWxpZGF0b3JzKTtcclxuXHJcbiAgICAgICAgICAgIC8vU2Ugc29ubyBzdGFjY2F0byBkYWwgRm9ybSAodnVvbCBkaXJlIGNoZSBzb25vIGFkIGVzZW1waW8gZGVudHJvIHVuIG5nLXRlbXBsYXRlKSBhZ2dpdW5nbyBpbCBjb250cm9sbG8gYWwgRm9ybSBwYXNzYXRvIGNvbWUgaW5wdXQgKGNvbnRleHQgZGVsIHRlbXBsYXRlKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5kZXRhdGNoZWRGcm9tZm9ybSAmJiB0aGlzLkZvcm0gJiYgIXRoaXMuZm9ybUhhc0Jlbm5Cb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Gb3JtLmFkZENvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbClcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUhhc0Jlbm5Cb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5nQ29udHJvbClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmluZFJlc2V0RnVuY3Rpb24oKTtcclxuXHJcbiAgICAgICAgICAgIC8vSSB2YWwtcm9iYSBxdWVzdG8gbG8gZmFubm8gYXV0b21hdGljYW1lbnRlIGRlbnRyby4uLiBnbGkgYWx0cmkgbm8gKGVzLiBzZW1wbGljZSBpbnB1dCBjaGVja2JveClcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eUZvck5hdGl2ZUlucHV0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdpc3RlckZvcm0obmdGb3JtOiBOZ0Zvcm0pIHtcclxuICAgICAgICB0aGlzLkZvcm0gPSBuZ0Zvcm07XHJcbiAgICAgICAgdGhpcy5Gb3JtLmFkZENvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbClcclxuICAgICAgICB0aGlzLmZvcm1IYXNCZW5uQm91bmQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWdnaW9ybmEgaWwgdmFsb3JlIGUgbGEgdmFsaWRpdMOgIGRlbGwnaW5wdXQgc290dG9zdGFudGUuIE5vbiB2aWVuZSBjaGlhbWF0byBwZXIgaW5wdXQgbmF0aXZpIGNvbWUgbGUgY2hlY2tib3hcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZWRWYWx1ZSBGb3J6YSBsJ2FnZ2lvcm5hbWVudG8gYW5jaGUgc2Ugbm9uIMOoIHVuIGlucHV0IG5hdGl2byAoaW5wdXQgbmF0aXZvID0gY2hlY2tib3gsIGFkIGVzZW1waW8pXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVZhbGlkaXR5Rm9yTmF0aXZlSW5wdXQoZm9yY2VkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmIChmb3JjZWRWYWx1ZSB8fCB0aGlzLm5hdGl2ZUlucHV0KVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Db250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICogQ2xhc3NpY28gXCJzcGFyYSBmdW9yaVwiLiBNYW50ZW5nbyBsbyBzdGVzc28gbm9tZSBkZWxsJ2V2ZW50byBkZWkgPHZhbC0qPiAoaW5wdXRDaGFuZ2UpIHBlciByZXRyb2NvbXBhdGliaWxpdMOgLlxyXG4gICAgICogXHJcbiAgICAgKiBOb24gcG9zc28gdGVuZXJsbyBwcm90ZWN0ZWQgYWx0cmltZW50aSBwb3NzbyBlc2VndWlybG8gc29sbyBkYWwgLnRzIGUgbm9uIGRhbGwnIC5odG1sXHJcbiAgICAgKi9cclxuICAgIGNoYW5nZWQoZm9yY2VkVmFsdWU6IGFueSA9IG51bGwsIG1hcmtGb3JDaGVjazogYm9vbGVhbiA9IGZhbHNlLCBtb2RlbEV2YWx1YXRpb25IYW5kbGVkOiBib29sZWFuID0gZmFsc2UsIGludGVybmFsOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgdG9FbWl0ID0gZm9yY2VkVmFsdWUgPT0gbnVsbCB8fCBmb3JjZWRWYWx1ZSA9PSBcIlwiID8gdGhpcy5Nb2RlbCA/PyBcIlwiIDogZm9yY2VkVmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCFtb2RlbEV2YWx1YXRpb25IYW5kbGVkKVxyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdG9FbWl0O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRvRW1pdCk7XHJcbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KG5ldyBDaGFuZ2VFdmVudChpbnRlcm5hbCwgdG9FbWl0KSk7XHJcbiAgICAgICAgaWYgKG1hcmtGb3JDaGVjaylcclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKiBDbGFzc2ljbyBcInNwYXJhIGZ1b3JpXCIgc3VsIGZvY3VzLiBNYW50ZW5nbyBsbyBzdGVzc28gbm9tZSBkZWxsJ2V2ZW50byBkZWkgPHZhbC0qPiAoaW5wdXRDaGFuZ2UpIHBlciByZXRyb2NvbXBhdGliaWxpdMOgLlxyXG4gICAgICogXHJcbiAgICAgKiBOb24gcG9zc28gdGVuZXJsbyBwcm90ZWN0ZWQgYWx0cmltZW50aSBwb3NzbyBlc2VndWlybG8gc29sbyBkYWwgLnRzIGUgbm9uIGRhbGwnIC5odG1sXHJcbiAgICAgKi9cclxuICAgIGZvY3VzZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRGb2N1cy5lbWl0KGV2ZW50KTtcclxuICAgICAgICB0aGlzLmxvZyhcIkNvbnRyb2wgRm9jdXNlZCAtIFwiICsgdGhpcy5HZW5lcmF0ZWROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqIENsYXNzaWNvIFwic3BhcmEgZnVvcmlcIiBzdWxsYSBmaW5hbGl6emF6aW9uZSBkZWwgdmFsb3JlIGRlbGwnaW5wdXQgKGJsdXIgLyB0YXN0byBpbnZpbywgZWNjLi4uKS4gTWFudGVuZ28gbG8gc3Rlc3NvIG5vbWUgZGVsbCdldmVudG8gZGVpIDx2YWwtKj4gKGlucHV0Q2hhbmdlKSBwZXIgcmV0cm9jb21wYXRpYmlsaXTDoC5cclxuICAgICAqIFxyXG4gICAgICogTm9uIHBvc3NvIHRlbmVybG8gcHJvdGVjdGVkIGFsdHJpbWVudGkgcG9zc28gZXNlZ3VpcmxvIHNvbG8gZGFsIC50cyBlIG5vbiBkYWxsJyAuaHRtbFxyXG4gICAgICovXHJcbiAgICBmaW5hbGl6ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dEZpbmFsaXplZC5lbWl0KHRoaXMubmdDb250cm9sPy5uYW1lPy50b1N0cmluZygpKTtcclxuICAgICAgICB0aGlzLmxvZyhcIkNvbnRyb2wgVmFsdWUgRmluYWxpemVkIC0gXCIgKyB0aGlzLkdlbmVyYXRlZE5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhbXBhIHVuIGxvZyBhIGNvbnNvbGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgTWVzc2FnZ2lvIGRhIHN0YW1wYXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBsb2cobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuRkFWX0RFQlVHX01PREUpXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQGZvcm1zLWFuZC12YWxpZGF0aW9uczogXCIgKyBtZXNzYWdlKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBhYnN0cmFjdCBvbk5vdE51bGxWYWx1ZVNldCgpOiB2b2lkO1xyXG59Il19
@@ -1,5 +1,6 @@
1
1
  // Angular
2
2
  import { EventEmitter, Input, Output, ViewChild, Directive } from "@angular/core";
3
+ import { RequiredValidator } from "@angular/forms";
3
4
  // Direttive, Componenti, Librerie
4
5
  import { TooltipDirective } from "ngx-bootstrap/tooltip";
5
6
  import { Subject } from "rxjs";
@@ -169,6 +170,10 @@ export class BaseValidation {
169
170
  });
170
171
  }
171
172
  }
173
+ checkRequiredness(_validators) {
174
+ if (_validators && _validators.some(elem => elem instanceof RequiredValidator && (elem.required === true || (!elem.required && elem.required !== false))))
175
+ this.required = true;
176
+ }
172
177
  ngOnDestroy() {
173
178
  this.destroyed$.next();
174
179
  this.destroyed$.complete();
@@ -320,4 +325,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
320
325
  }], forceInvalid: [{
321
326
  type: Input
322
327
  }] } });
323
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS12YWxpZGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvdmFsaWRhdGlvbnMvYmFzZS12YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFNakgsa0NBQWtDO0FBQ2xDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUUzQzs7OztHQUlHO0FBRUgsTUFBTSxPQUFnQixjQUFjO0lBRWhDLDBCQUEwQjtJQUMxQixZQUFzQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXNCNUM7O1dBRUc7UUFDTyxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUV6Qzs7V0FFRztRQUNJLGFBQVEsR0FBWSxLQUFLLENBQUM7UUE2Q2pDOzs7OztXQUtHO1FBQ00sdUJBQWtCLEdBQVksSUFBSSxDQUFDO1FBRTVDOztXQUVHO1FBQ00sb0JBQWUsR0FBK0MsU0FBUyxDQUFDO1FBRWpGOzs7O1dBSUc7UUFDTSxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUV2Qzs7OztXQUlHO1FBQ00scUJBQWdCLEdBQVcsRUFBRSxDQUFDO1FBRXZDOztXQUVHO1FBQ00sYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQzs7V0FFRztRQUNNLFlBQU8sR0FBVyxJQUFJLENBQUM7UUFFaEM7O1dBRUc7UUFDTSxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRW5DOztXQUVHO1FBQ00sZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFbEM7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QyxLQUFLO3VCQUFDLFdBQVc7Z0JBaUJMLFlBQVk7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTmdNb2RlbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5cclxuLy8gRGlyZXR0aXZlLCBDb21wb25lbnRpLCBMaWJyZXJpZVxyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvdG9vbHRpcFwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwiLi4vbW9kZWxzL0NoYW5nZUV2ZW50XCI7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzZSBhc3RyYXR0YSBiYXNlIGNoZSBjb250aWVuZSBsZSBsb2dpY2hlIC8gcHJvcHJpZXTDoCBpbiBjb211bmUgYSB0dXR0aSBpIHZhbGlkYXRvcmlcclxuICogXHJcbiAqIE5vdGEgYmVuZTogSSB0b29sdGlwIHJhbGxlbnRhbm8gdGFudGlzc2ltbyBsYSBwYWdpbmEgcGVyY2jDqSBpbCB0aXppbyBjaGUgaGEgZmF0dG8gbmd4IGJvb3RzdHJhcCBub24gw6ggY2FwYWNlXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VWYWxpZGF0aW9uIHtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBDb25zdHJ1Y3RvciAqL1xyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyIG5vbiBzb3ZyYXNjcml2ZXJlIGwnb3JpZ2luYWxlIGNvbiBlcnJvcmkgY2hlIHNwdW50YW5vIGRhIEJFXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB2YWxpZGF0aW9uRmFpbGVkQmluZDogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyIGdlc3RpcmUgaWwgY2FtYmlvIGRpIG1lc3NhZ2dpIGRpIGVycm9yZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHZhbHVlT25MYXN0VmFsaWRhdGlvbjogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2Vydml6aW8gZGkgbG9jYWxpenphemlvbmUgZGVsIENvbXBvbmVudGVcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFyaWFiaWxlIHBlciB0ZW5lcmUgaW4gbWVtb3JpYSBsbyBzdGF0byBkaSBzdWJtaXQgZGkgcXVlc3RvIGNvbXBvbmVudGVcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIF9zdWJtaXR0ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYXJpYWJpbGUgcGVyIHRlbmVyZSBpbiBtZW1vcmlhIGlsIGZhdHRvIGNoZSBpbCBjb21wb25lbnRlIMOoIGZvcnphdG8gYSBpbnZhbGlkbyBvIG5vXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBfZm9yY2VJbnZhbGlkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgaWwgdmFsb3JlIMOoIG9iYmxpZ2F0b3JpbyBvIG9wemlvbmFsZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1ZXJ5IGNoZSByYWNjb2dsaWUgaWwgdG9vbHRpcCBpbiBtYW5pZXJhIHN0YXRpY2EgKHNvbG8gYWxsJ2luaXppbylcclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChUb29sdGlwRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSkgcHJvdGVjdGVkIHRvb2x0aXA6IFRvb2x0aXBEaXJlY3RpdmU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWVyeSBjaGUgcmFjY29nbGllIGlsIHRvb2x0aXAgaW4gbWFuaWVyYSBkaW5hbWljYSAoYWQgb2duaSBjaGFuZ2UgZGV0ZWN0aW9uKVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1Rvb2x0aXBEaXJlY3RpdmV9IGNvbXAgRWxlbWVudG8gSFRNTCBhIGN1aSDDqCBhcHBsaWNhdGEgbGEgZGlyZXR0aXZhIGRlbCB0b29sdGlwXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoVG9vbHRpcERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgc2V0IHRvb2x0aXBfc3RhdGljKGNvbXA6IFRvb2x0aXBEaXJlY3RpdmUpIHtcclxuICAgICAgICBpZiAoY29tcCkgeyB0aGlzLnRvb2x0aXAgPSBjb21wOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWxlbWVudG8gSFRNTCByYXBwcmVzZW50YW50ZSBsJ0lucHV0XHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoJ2h0bWxJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBodG1sSW5wdXQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWVyeSBjaGUgcmFjY29nbGllIGwnaW5wdXQgbyBkaXJldHRpdmEgY2hlIGNvbnRpZW5lIGlsIHZhbG9yZSBpbiBtYW5pZXJhIHN0YXRpY2EgKHNvbG8gYWxsJ2luaXppbylcclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChcImJhc2VJbnB1dFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgYmFzZUlucHV0OiBOZ01vZGVsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUXVlcnkgY2hlIHJhY2NvZ2xpZSBsJ2lucHV0IG8gZGlyZXR0aXZhIGNoZSBjb250aWVuZSBpbCB2YWxvcmUgaW4gbWFuaWVyYSBkaW5hbWljYSAoYWQgb2duaSBjaGFuZ2UgZGV0ZWN0aW9uKVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge05nTW9kZWx9IGNvbXAgRWxlbWVudG8gSFRNTCBhc3NvY2lhdG8gYWwgbmdNb2RlbCBkZWwgY29tcG9uZW50ZVxyXG4gICAgICovXHJcbiAgICBAVmlld0NoaWxkKFwiYmFzZUlucHV0XCIsIHsgc3RhdGljOiB0cnVlIH0pIHNldCBiYXNlSW5wdXRfc3RhdGljKGNvbXA6IE5nTW9kZWwpIHtcclxuICAgICAgICBpZiAoY29tcCkgeyB0aGlzLmJhc2VJbnB1dCA9IGNvbXA7IH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdWJqZWN0IGEgY3VpIGwnb2dnZXR0byBpbnRlcm5vIHNpIGNvbGxlZ2EgcGVyIGVmZmV0dHVhcmUgaWwgZm9jdXMgZGVsbCdlbGVtZW50byBpbnB1dCBzb3R0b3N0YW50ZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBGb2N1c1N1YmplY3Q6IFN1YmplY3Q8dm9pZD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBARVhQRVJJTUVOVEFMXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIFNldFZhbGlkYXRpb25TdWJqZWN0OiBTdWJqZWN0PHsgZmllbGROYW1lOiBzdHJpbmcsIGVycm9yOiBzdHJpbmcgfT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgZGkgZGVmYXVsdCBkZXZlIHZhbHV0YXJlIGlsIG1lc3NhZ2dpbyBkaSBlcnJvcmUgaW4gYmFzZSBhbCB2YWxpZGF0b3JlIGNoZSBmYWxsaXNjZS5cclxuICAgICAqIFxyXG4gICAgICogU2UgZmFsbGlzY2UgaWwgcmVxdWlyZWQgdmFsaWRhdG9yIHNjcml2ZXLDoCBjaGUgbCdpbnB1dCDDqCBvYmJsaWdhdG9yaW8sIHNlIGludmVjZSBmYWxsaXNjZSBcclxuICAgICAqIHVuIGV2ZW50dWFsZSBwYXR0ZXJuIHZhbGlkYXRvciBzY3JpdmVyw6AgY2hlIGlsIGZvcm1hdG8gZGVsbCdpbnB1dCDDqCBpbnZhbGlkb1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBJbmZlckVycm9yTWVzc2FnZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW9kYWxpdMOgIGluIGN1aSB2aWVuZSBtb3N0cmF0byBpbCBjYW1wbywgMS0xIHJpc3BldHRvIGFsbGUgZGVmaW5pemlvbmkgZGkgQW5ndWxhciBNYXRlcmlhbCBcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgRmllbGRBcHBlYXJlbmNlOiBcImxlZ2FjeVwiIHwgXCJzdGFuZGFyZFwiIHwgXCJmaWxsXCIgfCBcIm91dGxpbmVcIiA9IFwib3V0bGluZVwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIGlsICoqUGxhY2Vob2xkZXIqKiBkZXYnZXNzZXJlIHVzYXRvIGNvbWUgdW5hIGZsb2F0aW5nIGxhYmVsIGRpIG1hdGVyaWFsIG8gc29sbyBjb21lIHVuIHBsYWNlaG9sZGVyIHN0YW5kYXJkIFxyXG4gICAgICogXHJcbiAgICAgKiBJZ25vcmF0YSBsYXRvIGF1dG9jb21wbGV0ZSwgYXV0b2NvbXBsZXRlLW11bHRpIGUgc2VsZWN0IGluIHF1YW50byBoYW5ubyBnZXN0aW9uaSBwYXJ0aWNvbGFyaSBkaSBwbGFjZWhvbGRlciBlY2MuLi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgRmxvYXRpbmdMYWJlbDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXNzYWdnaW8gZGEgbW9zdHJhcmUgc2UgbGEgdmFsaWRhemlvbmUgZmFsbGlzY2UuIFxyXG4gICAgICogXHJcbiAgICAgKiBTZSBxdWVzdG8gw6ggdmFsb3JpenphdG8sIGlsIG1lc3NhZ2dpbyBub24gdmllbmUgdmFsdXRhdG8gaW4gYXV0b21hdGljbyBub25zdGFudGUgKipJbmZlckVycm9yTWVzc2FnZXMqKiBzaWEgKip0cnVlKipcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgdmFsaWRhdGlvbkZhaWxlZDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBpbCBjb21wb25lbnRlIMOoIGluIHNvbGEgbGV0dHVyYVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBSZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIGxlIGRpbWVuc2lvbmkgZGVsIGNvbXBvbmVudGVcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgd2lkdGhQeDogbnVtYmVyID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBpbCBjb21wb25lbnRlIMOoIGRpc2FiaWxpdGF0byBvIG5vIChwacO5IG8gbWVubyBzdGVzc28gY29uY2V0dG8gZGVsIHJlYWRvbmx5KVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnR1YWxlIHBsYWNlaG9sZGVyIGRhIG1vc3RyYXJlIGFsIHBvc3RvIGRlbCB2YWxvcmUgcXVhbmRvIGlsIHZhbG9yZSDDqCBudWxsbyAvIHZ1b3RvXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xhc3NpIGRhIGFwcGxpY2FyZSBhbCBjb21wb25lbnRlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGNsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RpbGkgZGEgYXBwbGljYXJlIGFsIGNvbXBvbmVudGVcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgc3R5bGU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXR0ZXJuIGRpIHZhbGlkYXppb25lIGRlbGwnaW5wdXRcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcGF0dGVybjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBkaSBub24gdmFsaWRhcmUgaWwgY29tcG9uZW50ZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBub1ZhbGlkYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgYWJpbGl0YXJlIG8gbWVubyBsJ2F1dG9jb21wbGV0YW1lbnRvIGRpIGRlZmF1bHQgZGVsIGJyb3dzZXJcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgYXV0b2NvbXBsZXRlOiBzdHJpbmcgPSBcIm9mZlwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWQgZGVsbCdpbnB1dC4gw4ggaW1wb3J0YW50ZSBpbXBvc3RhcmxvIHNvcHJhdHR1dHRvIHNlIGwnaW50ZXJmYWNjaWEgZ2VuZXJhdGEgZGV2J2Vzc2VyZSB0ZXN0YXRhXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGlkOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnRvIGNoZSBzb3N0aXR1aXNjZSBsJ25nTW9kZWxDaGFuZ2UgZmFjZW5kb2xvIGZ1bnppb25hcmUgaW4gbWFuaWVyYSB1biBwbycgcGnDuSBjb25zaXN0ZW50ZVxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgaW5wdXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudG8gY2hlIGluZGljYSBpbCBmb2N1cyBhdnZlbnV0byBzdSB1biBjb250cm9sbG9cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGlucHV0Rm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudG8gY2hlIGluZGljYSBsYSBmaW5hbGl6emF6aW9uZSBkZWwgdmFsb3JlIGF2dmVudXRhIHN1IHVuIGNvbnRyb2xsb1xyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgaW5wdXRGaW5hbGl6ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogSW1wb3N0YSBpbCBjb21wb25lbnRlIGNvbWUgXCJzdWJtaXR0ZWRcIiBzY2F0ZW5hbmRvbmUgbGUgdmFsaWRhemlvbmkgZWQgZXZlbnR1YWxtZW50ZSBsYSB2aXN1YWxpenphemlvbmUgZGVsIHRvb2x0aXAgZGkgZXJyb3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsICoqdHJ1ZSoqIHNlIHNpIHZ1b2xlIGltcG9zdGFyZSBxdWVzdG8gY29udHJvbGxvIGNvbWUgc3VibWl0dGVkLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoXCJzdWJtaXR0ZWRcIikgc2V0IHN1Ym1pdHRlZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9zdWJtaXR0ZWQgPSB2YWw7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJhc2VJbnB1dClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiAodmFsKVxyXG4gICAgICAgICAgICB0aGlzLmJhc2VJbnB1dC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYmFzZUlucHV0LmNvbnRyb2wuc3RhdHVzID09PSBcIklOVkFMSURcIiAmJiB2YWwpXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1Rvb2x0aXBXaXRoTWVzc2FnZSgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwLmhpZGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcG9zdGEgaWwgY29tcG9uZW50ZSBjb21lIFwiaW52YWxpZFwiIGEgcHJlc2NpbmRlcmUgZGFpIHZhbGlkYXRvcmlcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgc2V0IGZvcmNlSW52YWxpZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9mb3JjZUludmFsaWQgPSB2YWw7XHJcblxyXG4gICAgICAgIGlmICh2YWwpXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlSW5wdXQuY29udHJvbC5zZXRFcnJvcnMoeyBmb3JjZWR0b2ludmFsaWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VJbnB1dC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUlucHV0LmNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUlucHV0LmNvbnRyb2wuc2V0RXJyb3JzKHsgZm9yY2VkdG9pbnZhbGlkOiBudWxsIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlSW5wdXQuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLlNldFZhbGlkYXRpb25TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuU2V0VmFsaWRhdGlvblN1YmplY3QucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHYuZmllbGROYW1lICsgXCJfaW50ZXJuYWxcIiA9PSB0aGlzLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZUludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1Rvb2x0aXBXaXRoTWVzc2FnZSh2LmVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVzdHJveWVkJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBuZ09uRGVzdHJveSgpe1xyXG4gICAgICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBjaGUgY29udHJvbGxhIHNlIGlsIHRvb2x0aXAgZGV2ZSBlc3NlcmUgbW9zdHJhdG8gbyBtZW5vLCBcclxuICAgICAqIHJpY2hpYW1hdG8gZGlyZXR0YW1lbnRlIGRhbGwnSFRNTCBkZWkgY29tcG9uZW50aVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2hlY2tUb29sdGlwKCkge1xyXG4gICAgICAgIGlmICgodGhpcy5iYXNlSW5wdXQuaW52YWxpZCAmJiB0aGlzLmJhc2VJbnB1dC50b3VjaGVkKSlcclxuICAgICAgICAgICAgdGhpcy5zaG93VG9vbHRpcFdpdGhNZXNzYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgY2hlIGNhbGNvbGEgaWwgbWVzc2FnZ2lvIGRhIG1vc3RyYXJlIG5lbCB0b29sdGlwIGNoZSBhbmRyw6AgYWQgYXByaXJlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2hvd1Rvb2x0aXBXaXRoTWVzc2FnZShtZXNzYWdlT3ZlcnJpZGU6IHN0cmluZyA9IG51bGwpIHtcclxuXHJcbiAgICAgICAgLy8gQWdnaW9ybm8gaWwgbWVzc2FnZ2lvIGRpIHZhbGlkYXppb25lIHNvbG8gc2UgaWwgdmFsb3JlIMOoIGRpdmVyc28gZGFsbCd1bHRpbW8gdmFsb3JlIHJpY2V2dXRvXHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVPbkxhc3RWYWxpZGF0aW9uICE9IHRoaXMuYmFzZUlucHV0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZEJpbmQgPSBtZXNzYWdlT3ZlcnJpZGUgfHwgdGhpcy52YWxpZGF0aW9uRmFpbGVkIHx8ICh0aGlzLkluZmVyRXJyb3JNZXNzYWdlcyA/IHRoaXMuaW5mZXJNZXNzYWdlKCkgOiBcIlwiKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZU9uTGFzdFZhbGlkYXRpb24gPSB0aGlzLmJhc2VJbnB1dC52YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25GYWlsZWRCaW5kKVxyXG4gICAgICAgICAgICB0aGlzLnRvb2x0aXAuc2hvdygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY29sYSBpbCBtZXNzYWdnaW8gZGEgbW9zdHJhcmUgaW4gYmFzZSBhbCB2YWxvcmUuXHJcbiAgICAgKiBcclxuICAgICAqIEVudHJhcmUgaW4gcXVlc3RhIGZ1bnppb25lIHNpZ25pZmljYSBjaGUgbG8gc3RhdG8gZGkgdmFsaWRhemlvbmUgw6ggZmFsbGl0bywgcGVyIHF1ZXN0byBzaSBjb21wb3J0YSBzZW1wbGljZW1lbnRlIGluIG1hbmllcmEgZXNjbHVzaXZhLCBlIGNpb8OoOlxyXG4gICAgICogXHJcbiAgICAgKiAxKSBTZSBlcm8gcmVxdWlyZWQgZSBzb25vIHNlbnphIHZhbG9yZSAtLT4gSW5wdXQgcmljaGllc3RvXHJcbiAgICAgKiBcclxuICAgICAqIDIpIEFsdHJpbWVudGkgc2UgaG8gdW4gdmFsb3JlIC0tPiBEaSBzaWN1cm8gaWwgZm9ybWF0byDDqCBlcnJhdG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbmZlck1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhdGhpcy5iYXNlSW5wdXQudmFsdWUpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxjLmxvYyhcIlJlcXVpcmVkIElucHV0XCIpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJhc2VJbnB1dC52YWx1ZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGMubG9jKFwiSW52YWxpZCBJbnB1dCBGb3JtYXRcIilcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvcnphIGxhIGNoaXVzdXJhIGRlbCB0b29sdGlwXHJcbiAgICAgKi9cclxuICAgIGNsb3NlVG9vbHRpcCgpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udHJvbGxhIHNlIGlsIGNvbnRyb2xsbyDDqCB2YWxpZG8gZSBpbiBjYXNvIGxvIHNpYSBjaGl1ZGUgaWwgdG9vbHRpcFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgQ2hlY2tWYWxpZGl0eSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuYmFzZUlucHV0LnN0YXR1c0NoYW5nZXMpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlSW5wdXQuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQgPT09IFwiVkFMSURcIilcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMJ2VtaXQgZGVsIGZvY3VzIGRlbGwnZWxlbWVudG9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IHRvRW1pdCB2YWxvcmUgZGEgcHJvcGFnYXJlIGFsbCdlc3Rlcm5vXHJcbiAgICAgKi9cclxuICAgIG9uRm9jdXModG9FbWl0KSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dEZvY3VzLmVtaXQodG9FbWl0KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmFsaXp6YXppb25lIElucHV0XHJcbiAgICAgKi9cclxuICAgIG9uRmluYWxpemUoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dEZpbmFsaXplZC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdWJzY3JpcHRpb24gYWxsZSByaWNoaWVzdGUgZGkgZm9jdXNcclxuICAgICAqL1xyXG4gICAgb2JzZXJ2YWJsZTogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0cmEgaWwgU3ViamVjdCBwZXIgcmljZXZlcmUgbGUgcmljaGllc3RlIGRpIEZvY3VzIGRhbGwnZXN0ZXJub1xyXG4gICAgICovXHJcbiAgICByZWdpc3RlckZvY3VzUmVxdWVzdCgpOiBhbnkge1xyXG4gICAgICAgIGlmKCF0aGlzLkZvY3VzU3ViamVjdClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2YWJsZSA9IHRoaXMuRm9jdXNTdWJqZWN0LnN1YnNjcmliZSh0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5odG1sSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVyZWdpc3RyYSBpbCBTdWJqZWN0IGRlbGxlIHJpY2hpZXN0ZSBkaSBmb2N1c1xyXG4gICAgICovXHJcbiAgICBkZXJlZ2lzdGVyRm9jdXNSZXF1ZXN0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLm9ic2VydmFibGUpXHJcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2YWJsZS51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG59Il19
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS12YWxpZGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvdmFsaWRhdGlvbnMvYmFzZS12YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFXLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFLdkUsa0NBQWtDO0FBQ2xDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUUzQzs7OztHQUlHO0FBRUgsTUFBTSxPQUFnQixjQUFjO0lBRWhDLDBCQUEwQjtJQUMxQixZQUFzQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXNCNUM7O1dBRUc7UUFDTyxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUV6Qzs7V0FFRztRQUNJLGFBQVEsR0FBWSxLQUFLLENBQUM7UUE2Q2pDOzs7OztXQUtHO1FBQ00sdUJBQWtCLEdBQVksSUFBSSxDQUFDO1FBRTVDOztXQUVHO1FBQ00sb0JBQWUsR0FBK0MsU0FBUyxDQUFDO1FBRWpGOzs7O1dBSUc7UUFDTSxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUV2Qzs7OztXQUlHO1FBQ00scUJBQWdCLEdBQVcsRUFBRSxDQUFDO1FBRXZDOztXQUVHO1FBQ00sYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQzs7V0FFRztRQUNNLFlBQU8sR0FBVyxJQUFJLENBQUM7UUFFaEM7O1dBRUc7UUFDTSxhQUFRLEdBQVksS0FBSyxDQUFD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QVE7c0JBQWhCLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0csRUFBRTtzQkFBVixLQUFLO2dCQUtJLFdBQVc7c0JBQXBCLE1BQU07Z0JBS0csVUFBVTtzQkFBbkIsTUFBTTtnQkFLRyxjQUFjO3NCQUF2QixNQUFNO2dCQU9pQixTQUFTO3NCQUFoQyxLQUFLO3VCQUFDLFdBQVc7Z0JBaUJMLFlBQVk7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTmdNb2RlbCwgUmVxdWlyZWRWYWxpZGF0b3IsIFZhbGlkYXRvciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5cclxuLy8gRGlyZXR0aXZlLCBDb21wb25lbnRpLCBMaWJyZXJpZVxyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvdG9vbHRpcFwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwiLi4vbW9kZWxzL0NoYW5nZUV2ZW50XCI7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzZSBhc3RyYXR0YSBiYXNlIGNoZSBjb250aWVuZSBsZSBsb2dpY2hlIC8gcHJvcHJpZXTDoCBpbiBjb211bmUgYSB0dXR0aSBpIHZhbGlkYXRvcmlcclxuICogXHJcbiAqIE5vdGEgYmVuZTogSSB0b29sdGlwIHJhbGxlbnRhbm8gdGFudGlzc2ltbyBsYSBwYWdpbmEgcGVyY2jDqSBpbCB0aXppbyBjaGUgaGEgZmF0dG8gbmd4IGJvb3RzdHJhcCBub24gw6ggY2FwYWNlXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VWYWxpZGF0aW9uIHtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBDb25zdHJ1Y3RvciAqL1xyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyIG5vbiBzb3ZyYXNjcml2ZXJlIGwnb3JpZ2luYWxlIGNvbiBlcnJvcmkgY2hlIHNwdW50YW5vIGRhIEJFXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB2YWxpZGF0aW9uRmFpbGVkQmluZDogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyIGdlc3RpcmUgaWwgY2FtYmlvIGRpIG1lc3NhZ2dpIGRpIGVycm9yZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHZhbHVlT25MYXN0VmFsaWRhdGlvbjogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2Vydml6aW8gZGkgbG9jYWxpenphemlvbmUgZGVsIENvbXBvbmVudGVcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFyaWFiaWxlIHBlciB0ZW5lcmUgaW4gbWVtb3JpYSBsbyBzdGF0byBkaSBzdWJtaXQgZGkgcXVlc3RvIGNvbXBvbmVudGVcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIF9zdWJtaXR0ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYXJpYWJpbGUgcGVyIHRlbmVyZSBpbiBtZW1vcmlhIGlsIGZhdHRvIGNoZSBpbCBjb21wb25lbnRlIMOoIGZvcnphdG8gYSBpbnZhbGlkbyBvIG5vXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBfZm9yY2VJbnZhbGlkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgaWwgdmFsb3JlIMOoIG9iYmxpZ2F0b3JpbyBvIG9wemlvbmFsZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1ZXJ5IGNoZSByYWNjb2dsaWUgaWwgdG9vbHRpcCBpbiBtYW5pZXJhIHN0YXRpY2EgKHNvbG8gYWxsJ2luaXppbylcclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChUb29sdGlwRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSkgcHJvdGVjdGVkIHRvb2x0aXA6IFRvb2x0aXBEaXJlY3RpdmU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWVyeSBjaGUgcmFjY29nbGllIGlsIHRvb2x0aXAgaW4gbWFuaWVyYSBkaW5hbWljYSAoYWQgb2duaSBjaGFuZ2UgZGV0ZWN0aW9uKVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1Rvb2x0aXBEaXJlY3RpdmV9IGNvbXAgRWxlbWVudG8gSFRNTCBhIGN1aSDDqCBhcHBsaWNhdGEgbGEgZGlyZXR0aXZhIGRlbCB0b29sdGlwXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoVG9vbHRpcERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgc2V0IHRvb2x0aXBfc3RhdGljKGNvbXA6IFRvb2x0aXBEaXJlY3RpdmUpIHtcclxuICAgICAgICBpZiAoY29tcCkgeyB0aGlzLnRvb2x0aXAgPSBjb21wOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWxlbWVudG8gSFRNTCByYXBwcmVzZW50YW50ZSBsJ0lucHV0XHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoJ2h0bWxJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBodG1sSW5wdXQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWVyeSBjaGUgcmFjY29nbGllIGwnaW5wdXQgbyBkaXJldHRpdmEgY2hlIGNvbnRpZW5lIGlsIHZhbG9yZSBpbiBtYW5pZXJhIHN0YXRpY2EgKHNvbG8gYWxsJ2luaXppbylcclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChcImJhc2VJbnB1dFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgYmFzZUlucHV0OiBOZ01vZGVsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUXVlcnkgY2hlIHJhY2NvZ2xpZSBsJ2lucHV0IG8gZGlyZXR0aXZhIGNoZSBjb250aWVuZSBpbCB2YWxvcmUgaW4gbWFuaWVyYSBkaW5hbWljYSAoYWQgb2duaSBjaGFuZ2UgZGV0ZWN0aW9uKVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge05nTW9kZWx9IGNvbXAgRWxlbWVudG8gSFRNTCBhc3NvY2lhdG8gYWwgbmdNb2RlbCBkZWwgY29tcG9uZW50ZVxyXG4gICAgICovXHJcbiAgICBAVmlld0NoaWxkKFwiYmFzZUlucHV0XCIsIHsgc3RhdGljOiB0cnVlIH0pIHNldCBiYXNlSW5wdXRfc3RhdGljKGNvbXA6IE5nTW9kZWwpIHtcclxuICAgICAgICBpZiAoY29tcCkgeyB0aGlzLmJhc2VJbnB1dCA9IGNvbXA7IH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdWJqZWN0IGEgY3VpIGwnb2dnZXR0byBpbnRlcm5vIHNpIGNvbGxlZ2EgcGVyIGVmZmV0dHVhcmUgaWwgZm9jdXMgZGVsbCdlbGVtZW50byBpbnB1dCBzb3R0b3N0YW50ZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBGb2N1c1N1YmplY3Q6IFN1YmplY3Q8dm9pZD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBARVhQRVJJTUVOVEFMXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIFNldFZhbGlkYXRpb25TdWJqZWN0OiBTdWJqZWN0PHsgZmllbGROYW1lOiBzdHJpbmcsIGVycm9yOiBzdHJpbmcgfT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgZGkgZGVmYXVsdCBkZXZlIHZhbHV0YXJlIGlsIG1lc3NhZ2dpbyBkaSBlcnJvcmUgaW4gYmFzZSBhbCB2YWxpZGF0b3JlIGNoZSBmYWxsaXNjZS5cclxuICAgICAqIFxyXG4gICAgICogU2UgZmFsbGlzY2UgaWwgcmVxdWlyZWQgdmFsaWRhdG9yIHNjcml2ZXLDoCBjaGUgbCdpbnB1dCDDqCBvYmJsaWdhdG9yaW8sIHNlIGludmVjZSBmYWxsaXNjZSBcclxuICAgICAqIHVuIGV2ZW50dWFsZSBwYXR0ZXJuIHZhbGlkYXRvciBzY3JpdmVyw6AgY2hlIGlsIGZvcm1hdG8gZGVsbCdpbnB1dCDDqCBpbnZhbGlkb1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBJbmZlckVycm9yTWVzc2FnZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW9kYWxpdMOgIGluIGN1aSB2aWVuZSBtb3N0cmF0byBpbCBjYW1wbywgMS0xIHJpc3BldHRvIGFsbGUgZGVmaW5pemlvbmkgZGkgQW5ndWxhciBNYXRlcmlhbCBcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgRmllbGRBcHBlYXJlbmNlOiBcImxlZ2FjeVwiIHwgXCJzdGFuZGFyZFwiIHwgXCJmaWxsXCIgfCBcIm91dGxpbmVcIiA9IFwib3V0bGluZVwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIGlsICoqUGxhY2Vob2xkZXIqKiBkZXYnZXNzZXJlIHVzYXRvIGNvbWUgdW5hIGZsb2F0aW5nIGxhYmVsIGRpIG1hdGVyaWFsIG8gc29sbyBjb21lIHVuIHBsYWNlaG9sZGVyIHN0YW5kYXJkIFxyXG4gICAgICogXHJcbiAgICAgKiBJZ25vcmF0YSBsYXRvIGF1dG9jb21wbGV0ZSwgYXV0b2NvbXBsZXRlLW11bHRpIGUgc2VsZWN0IGluIHF1YW50byBoYW5ubyBnZXN0aW9uaSBwYXJ0aWNvbGFyaSBkaSBwbGFjZWhvbGRlciBlY2MuLi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgRmxvYXRpbmdMYWJlbDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXNzYWdnaW8gZGEgbW9zdHJhcmUgc2UgbGEgdmFsaWRhemlvbmUgZmFsbGlzY2UuIFxyXG4gICAgICogXHJcbiAgICAgKiBTZSBxdWVzdG8gw6ggdmFsb3JpenphdG8sIGlsIG1lc3NhZ2dpbyBub24gdmllbmUgdmFsdXRhdG8gaW4gYXV0b21hdGljbyBub25zdGFudGUgKipJbmZlckVycm9yTWVzc2FnZXMqKiBzaWEgKip0cnVlKipcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgdmFsaWRhdGlvbkZhaWxlZDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBpbCBjb21wb25lbnRlIMOoIGluIHNvbGEgbGV0dHVyYVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBSZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIGxlIGRpbWVuc2lvbmkgZGVsIGNvbXBvbmVudGVcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgd2lkdGhQeDogbnVtYmVyID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBpbCBjb21wb25lbnRlIMOoIGRpc2FiaWxpdGF0byBvIG5vIChwacO5IG8gbWVubyBzdGVzc28gY29uY2V0dG8gZGVsIHJlYWRvbmx5KVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnR1YWxlIHBsYWNlaG9sZGVyIGRhIG1vc3RyYXJlIGFsIHBvc3RvIGRlbCB2YWxvcmUgcXVhbmRvIGlsIHZhbG9yZSDDqCBudWxsbyAvIHZ1b3RvXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xhc3NpIGRhIGFwcGxpY2FyZSBhbCBjb21wb25lbnRlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGNsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RpbGkgZGEgYXBwbGljYXJlIGFsIGNvbXBvbmVudGVcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgc3R5bGU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXR0ZXJuIGRpIHZhbGlkYXppb25lIGRlbGwnaW5wdXRcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcGF0dGVybjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBkaSBub24gdmFsaWRhcmUgaWwgY29tcG9uZW50ZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBub1ZhbGlkYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgYWJpbGl0YXJlIG8gbWVubyBsJ2F1dG9jb21wbGV0YW1lbnRvIGRpIGRlZmF1bHQgZGVsIGJyb3dzZXJcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgYXV0b2NvbXBsZXRlOiBzdHJpbmcgPSBcIm9mZlwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWQgZGVsbCdpbnB1dC4gw4ggaW1wb3J0YW50ZSBpbXBvc3RhcmxvIHNvcHJhdHR1dHRvIHNlIGwnaW50ZXJmYWNjaWEgZ2VuZXJhdGEgZGV2J2Vzc2VyZSB0ZXN0YXRhXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGlkOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnRvIGNoZSBzb3N0aXR1aXNjZSBsJ25nTW9kZWxDaGFuZ2UgZmFjZW5kb2xvIGZ1bnppb25hcmUgaW4gbWFuaWVyYSB1biBwbycgcGnDuSBjb25zaXN0ZW50ZVxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgaW5wdXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudG8gY2hlIGluZGljYSBpbCBmb2N1cyBhdnZlbnV0byBzdSB1biBjb250cm9sbG9cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGlucHV0Rm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudG8gY2hlIGluZGljYSBsYSBmaW5hbGl6emF6aW9uZSBkZWwgdmFsb3JlIGF2dmVudXRhIHN1IHVuIGNvbnRyb2xsb1xyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgaW5wdXRGaW5hbGl6ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogSW1wb3N0YSBpbCBjb21wb25lbnRlIGNvbWUgXCJzdWJtaXR0ZWRcIiBzY2F0ZW5hbmRvbmUgbGUgdmFsaWRhemlvbmkgZWQgZXZlbnR1YWxtZW50ZSBsYSB2aXN1YWxpenphemlvbmUgZGVsIHRvb2x0aXAgZGkgZXJyb3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsICoqdHJ1ZSoqIHNlIHNpIHZ1b2xlIGltcG9zdGFyZSBxdWVzdG8gY29udHJvbGxvIGNvbWUgc3VibWl0dGVkLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoXCJzdWJtaXR0ZWRcIikgc2V0IHN1Ym1pdHRlZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9zdWJtaXR0ZWQgPSB2YWw7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJhc2VJbnB1dClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiAodmFsKVxyXG4gICAgICAgICAgICB0aGlzLmJhc2VJbnB1dC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYmFzZUlucHV0LmNvbnRyb2wuc3RhdHVzID09PSBcIklOVkFMSURcIiAmJiB2YWwpXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1Rvb2x0aXBXaXRoTWVzc2FnZSgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwLmhpZGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcG9zdGEgaWwgY29tcG9uZW50ZSBjb21lIFwiaW52YWxpZFwiIGEgcHJlc2NpbmRlcmUgZGFpIHZhbGlkYXRvcmlcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgc2V0IGZvcmNlSW52YWxpZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9mb3JjZUludmFsaWQgPSB2YWw7XHJcblxyXG4gICAgICAgIGlmICh2YWwpXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlSW5wdXQuY29udHJvbC5zZXRFcnJvcnMoeyBmb3JjZWR0b2ludmFsaWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VJbnB1dC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUlucHV0LmNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUlucHV0LmNvbnRyb2wuc2V0RXJyb3JzKHsgZm9yY2VkdG9pbnZhbGlkOiBudWxsIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlSW5wdXQuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLlNldFZhbGlkYXRpb25TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuU2V0VmFsaWRhdGlvblN1YmplY3QucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHYuZmllbGROYW1lICsgXCJfaW50ZXJuYWxcIiA9PSB0aGlzLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZUludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1Rvb2x0aXBXaXRoTWVzc2FnZSh2LmVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9IFxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBjaGVja1JlcXVpcmVkbmVzcyhfdmFsaWRhdG9yczogVmFsaWRhdG9yW10pIHtcclxuICAgICAgICBpZiAoX3ZhbGlkYXRvcnMgJiYgX3ZhbGlkYXRvcnMuc29tZShlbGVtID0+IGVsZW0gaW5zdGFuY2VvZiBSZXF1aXJlZFZhbGlkYXRvciAmJiAoZWxlbS5yZXF1aXJlZCA9PT0gdHJ1ZSB8fCAoIWVsZW0ucmVxdWlyZWQgJiYgZWxlbS5yZXF1aXJlZCAhPT0gZmFsc2UpKSkpXHJcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGRlc3Ryb3llZCQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgbmdPbkRlc3Ryb3koKXtcclxuICAgICAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgY2hlIGNvbnRyb2xsYSBzZSBpbCB0b29sdGlwIGRldmUgZXNzZXJlIG1vc3RyYXRvIG8gbWVubywgXHJcbiAgICAgKiByaWNoaWFtYXRvIGRpcmV0dGFtZW50ZSBkYWxsJ0hUTUwgZGVpIGNvbXBvbmVudGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNoZWNrVG9vbHRpcCgpIHtcclxuICAgICAgICBpZiAoKHRoaXMuYmFzZUlucHV0LmludmFsaWQgJiYgdGhpcy5iYXNlSW5wdXQudG91Y2hlZCkpXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1Rvb2x0aXBXaXRoTWVzc2FnZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIGNoZSBjYWxjb2xhIGlsIG1lc3NhZ2dpbyBkYSBtb3N0cmFyZSBuZWwgdG9vbHRpcCBjaGUgYW5kcsOgIGFkIGFwcmlyZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNob3dUb29sdGlwV2l0aE1lc3NhZ2UobWVzc2FnZU92ZXJyaWRlOiBzdHJpbmcgPSBudWxsKSB7XHJcblxyXG4gICAgICAgIC8vIEFnZ2lvcm5vIGlsIG1lc3NhZ2dpbyBkaSB2YWxpZGF6aW9uZSBzb2xvIHNlIGlsIHZhbG9yZSDDqCBkaXZlcnNvIGRhbGwndWx0aW1vIHZhbG9yZSByaWNldnV0b1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlT25MYXN0VmFsaWRhdGlvbiAhPSB0aGlzLmJhc2VJbnB1dC52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWRCaW5kID0gbWVzc2FnZU92ZXJyaWRlIHx8IHRoaXMudmFsaWRhdGlvbkZhaWxlZCB8fCAodGhpcy5JbmZlckVycm9yTWVzc2FnZXMgPyB0aGlzLmluZmVyTWVzc2FnZSgpIDogXCJcIik7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVPbkxhc3RWYWxpZGF0aW9uID0gdGhpcy5iYXNlSW5wdXQudmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uRmFpbGVkQmluZClcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwLnNob3coKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGNvbGEgaWwgbWVzc2FnZ2lvIGRhIG1vc3RyYXJlIGluIGJhc2UgYWwgdmFsb3JlLlxyXG4gICAgICogXHJcbiAgICAgKiBFbnRyYXJlIGluIHF1ZXN0YSBmdW56aW9uZSBzaWduaWZpY2EgY2hlIGxvIHN0YXRvIGRpIHZhbGlkYXppb25lIMOoIGZhbGxpdG8sIHBlciBxdWVzdG8gc2kgY29tcG9ydGEgc2VtcGxpY2VtZW50ZSBpbiBtYW5pZXJhIGVzY2x1c2l2YSwgZSBjaW/DqDpcclxuICAgICAqIFxyXG4gICAgICogMSkgU2UgZXJvIHJlcXVpcmVkIGUgc29ubyBzZW56YSB2YWxvcmUgLS0+IElucHV0IHJpY2hpZXN0b1xyXG4gICAgICogXHJcbiAgICAgKiAyKSBBbHRyaW1lbnRpIHNlIGhvIHVuIHZhbG9yZSAtLT4gRGkgc2ljdXJvIGlsIGZvcm1hdG8gw6ggZXJyYXRvXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW5mZXJNZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMuYmFzZUlucHV0LnZhbHVlKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYy5sb2MoXCJSZXF1aXJlZCBJbnB1dFwiKVxyXG5cclxuICAgICAgICBpZiAodGhpcy5iYXNlSW5wdXQudmFsdWUpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxjLmxvYyhcIkludmFsaWQgSW5wdXQgRm9ybWF0XCIpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3J6YSBsYSBjaGl1c3VyYSBkZWwgdG9vbHRpcFxyXG4gICAgICovXHJcbiAgICBjbG9zZVRvb2x0aXAoKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwLmhpZGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRyb2xsYSBzZSBpbCBjb250cm9sbG8gw6ggdmFsaWRvIGUgaW4gY2FzbyBsbyBzaWEgY2hpdWRlIGlsIHRvb2x0aXBcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIENoZWNrVmFsaWRpdHkoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJhc2VJbnB1dC5zdGF0dXNDaGFuZ2VzKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuYmFzZUlucHV0LnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50ID09PSBcIlZBTElEXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTCdlbWl0IGRlbCBmb2N1cyBkZWxsJ2VsZW1lbnRvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSB0b0VtaXQgdmFsb3JlIGRhIHByb3BhZ2FyZSBhbGwnZXN0ZXJub1xyXG4gICAgICovXHJcbiAgICBvbkZvY3VzKHRvRW1pdCkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRGb2N1cy5lbWl0KHRvRW1pdCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5hbGl6emF6aW9uZSBJbnB1dFxyXG4gICAgICovXHJcbiAgICBvbkZpbmFsaXplKCkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRGaW5hbGl6ZWQuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Vic2NyaXB0aW9uIGFsbGUgcmljaGllc3RlIGRpIGZvY3VzXHJcbiAgICAgKi9cclxuICAgIG9ic2VydmFibGU6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdHJhIGlsIFN1YmplY3QgcGVyIHJpY2V2ZXJlIGxlIHJpY2hpZXN0ZSBkaSBGb2N1cyBkYWxsJ2VzdGVybm9cclxuICAgICAqL1xyXG4gICAgcmVnaXN0ZXJGb2N1c1JlcXVlc3QoKTogYW55IHtcclxuICAgICAgICBpZighdGhpcy5Gb2N1c1N1YmplY3QpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLm9ic2VydmFibGUgPSB0aGlzLkZvY3VzU3ViamVjdC5zdWJzY3JpYmUodCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaHRtbElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERlcmVnaXN0cmEgaWwgU3ViamVjdCBkZWxsZSByaWNoaWVzdGUgZGkgZm9jdXNcclxuICAgICAqL1xyXG4gICAgZGVyZWdpc3RlckZvY3VzUmVxdWVzdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5vYnNlcnZhYmxlKVxyXG4gICAgICAgICAgICB0aGlzLm9ic2VydmFibGUudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxufSJdfQ==
@@ -18,7 +18,7 @@ export class CustomRequiredDirective {
18
18
  */
19
19
  validate(c) {
20
20
  // Controllo solo per custom required a true, altrimenti qualsiasi valore mi va bene
21
- if (!!this.customRequired)
21
+ if (!this.customRequired)
22
22
  return null;
23
23
  return !c.value || this.NullValues.includes(c.value) ? { required: true } : null;
24
24
  }
@@ -38,4 +38,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
38
38
  type: Input,
39
39
  args: ['customRequired']
40
40
  }] } });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3VzdG9tUmVxdWlyZWREaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi92YWxpZGF0aW9ucy9jdXN0b21WYWxpZGF0b3JzL0N1c3RvbVJlcXVpcmVkRGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQW1CLGFBQWEsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUVqRDs7O0dBR0c7QUFLSCxNQUFNLE9BQU8sdUJBQXVCO0lBSnBDO1FBTUk7O1dBRUc7UUFDd0IsZUFBVSxHQUFhLEVBQUUsQ0FBQztLQWlCeEQ7SUFWRzs7T0FFRztJQUNILFFBQVEsQ0FBQyxDQUFrQjtRQUN2QixvRkFBb0Y7UUFDcEYsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFDckIsT0FBTyxJQUFJLENBQUM7UUFFaEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3JGLENBQUM7O29IQXJCUSx1QkFBdUI7d0dBQXZCLHVCQUF1Qix5SUFGckIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQzsyRkFFakYsdUJBQXVCO2tCQUpuQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLHlCQUF5QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztpQkFDN0Y7OEJBTThCLFVBQVU7c0JBQXBDLEtBQUs7dUJBQUMsa0JBQWtCO2dCQUtPLGNBQWM7c0JBQTdDLEtBQUs7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5HX1ZBTElEQVRPUlMsIFZhbGlkYXRvciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8qKlxyXG4gKiBEaXJldHRpdmEgdXRpbGl6emF0YSBwZXIgdmFsaWRhemlvbmkgXCJyZXF1aXJlZFwiIGN1c3RvbSwgaW4gbW9kbyBkYSBwb3RlciBkaXJlIGNoZSBhbmNoZSBzZSBjJ8OoIHVuIHZhbG9yZSBzZWxlemlvbmF0bywgbWEgcXVlbCB2YWxvcmUgbG8gY29uc2lkZXJvIG51bGwgXHJcbiAqIGFsbG9yYSBsYSB2YWxpZGF6aW9uZSBmYWxsaXNjZS4gQXR0dWFsbWVudGUgdXNhdG8gbmVsbCd1bmljbyBwdW50byBzZW5zYXRvOiB2YWxpZGF0aW9uLXNlbGVjdFxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tjdXN0b21SZXF1aXJlZF0nLFxyXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogQ3VzdG9tUmVxdWlyZWREaXJlY3RpdmUsIG11bHRpOiB0cnVlIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21SZXF1aXJlZERpcmVjdGl2ZSBpbXBsZW1lbnRzIFZhbGlkYXRvciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0YSBkaSB2YWxvcmkgY2hlIHZlbmdvbm8gY29uc2lkZXJhdGkgXCJ2dW90aVwiIHNlcHB1ciBwcmVzZW50aVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoXCJDdXN0b21OdWxsVmFsdWVzXCIpIE51bGxWYWx1ZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBib29sZWFubyBpbiBtb2RhbGl0w6Agc3RyaW5nYSAoXCJ0cnVlXCIgbyBcImZhbHNlXCIpIGNoZSBpbmRpY2Egc2UgYXBwbGljYXJlIGxhIHZhbGlkYXppb25lIGRpIG9iYmxpZ2F0b3JpZXTDoCBvIG1lbm9cclxuICAgICAqL1xyXG4gICAgQElucHV0KCdjdXN0b21SZXF1aXJlZCcpIHB1YmxpYyBjdXN0b21SZXF1aXJlZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgdmFsaWRhdGUoYzogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0ge1xyXG4gICAgICAgIC8vIENvbnRyb2xsbyBzb2xvIHBlciBjdXN0b20gcmVxdWlyZWQgYSB0cnVlLCBhbHRyaW1lbnRpIHF1YWxzaWFzaSB2YWxvcmUgbWkgdmEgYmVuZVxyXG4gICAgICAgIGlmICghIXRoaXMuY3VzdG9tUmVxdWlyZWQpXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICByZXR1cm4gIWMudmFsdWUgfHwgdGhpcy5OdWxsVmFsdWVzLmluY2x1ZGVzKGMudmFsdWUpID8geyByZXF1aXJlZDogdHJ1ZSB9IDogbnVsbDtcclxuICAgIH1cclxufSJdfQ==
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3VzdG9tUmVxdWlyZWREaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi92YWxpZGF0aW9ucy9jdXN0b21WYWxpZGF0b3JzL0N1c3RvbVJlcXVpcmVkRGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQW1CLGFBQWEsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUVqRDs7O0dBR0c7QUFLSCxNQUFNLE9BQU8sdUJBQXVCO0lBSnBDO1FBTUk7O1dBRUc7UUFDd0IsZUFBVSxHQUFhLEVBQUUsQ0FBQztLQWlCeEQ7SUFWRzs7T0FFRztJQUNILFFBQVEsQ0FBQyxDQUFrQjtRQUN2QixvRkFBb0Y7UUFDcEYsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjO1lBQ3BCLE9BQU8sSUFBSSxDQUFDO1FBRWhCLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNyRixDQUFDOztvSEFyQlEsdUJBQXVCO3dHQUF2Qix1QkFBdUIseUlBRnJCLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7MkZBRWpGLHVCQUF1QjtrQkFKbkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyx5QkFBeUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQzdGOzhCQU04QixVQUFVO3NCQUFwQyxLQUFLO3VCQUFDLGtCQUFrQjtnQkFLTyxjQUFjO3NCQUE3QyxLQUFLO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBOR19WQUxJREFUT1JTLCBWYWxpZGF0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKipcclxuICogRGlyZXR0aXZhIHV0aWxpenphdGEgcGVyIHZhbGlkYXppb25pIFwicmVxdWlyZWRcIiBjdXN0b20sIGluIG1vZG8gZGEgcG90ZXIgZGlyZSBjaGUgYW5jaGUgc2UgYyfDqCB1biB2YWxvcmUgc2VsZXppb25hdG8sIG1hIHF1ZWwgdmFsb3JlIGxvIGNvbnNpZGVybyBudWxsIFxyXG4gKiBhbGxvcmEgbGEgdmFsaWRhemlvbmUgZmFsbGlzY2UuIEF0dHVhbG1lbnRlIHVzYXRvIG5lbGwndW5pY28gcHVudG8gc2Vuc2F0bzogdmFsaWRhdGlvbi1zZWxlY3RcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbY3VzdG9tUmVxdWlyZWRdJyxcclxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IEN1c3RvbVJlcXVpcmVkRGlyZWN0aXZlLCBtdWx0aTogdHJ1ZSB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tUmVxdWlyZWREaXJlY3RpdmUgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGlzdGEgZGkgdmFsb3JpIGNoZSB2ZW5nb25vIGNvbnNpZGVyYXRpIFwidnVvdGlcIiBzZXBwdXIgcHJlc2VudGlcclxuICAgICAqL1xyXG4gICAgQElucHV0KFwiQ3VzdG9tTnVsbFZhbHVlc1wiKSBOdWxsVmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogYm9vbGVhbm8gaW4gbW9kYWxpdMOgIHN0cmluZ2EgKFwidHJ1ZVwiIG8gXCJmYWxzZVwiKSBjaGUgaW5kaWNhIHNlIGFwcGxpY2FyZSBsYSB2YWxpZGF6aW9uZSBkaSBvYmJsaWdhdG9yaWV0w6AgbyBtZW5vXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgnY3VzdG9tUmVxdWlyZWQnKSBwdWJsaWMgY3VzdG9tUmVxdWlyZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHZhbGlkYXRlKGM6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55OyB9IHtcclxuICAgICAgICAvLyBDb250cm9sbG8gc29sbyBwZXIgY3VzdG9tIHJlcXVpcmVkIGEgdHJ1ZSwgYWx0cmltZW50aSBxdWFsc2lhc2kgdmFsb3JlIG1pIHZhIGJlbmVcclxuICAgICAgICBpZiAoIXRoaXMuY3VzdG9tUmVxdWlyZWQpXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICByZXR1cm4gIWMudmFsdWUgfHwgdGhpcy5OdWxsVmFsdWVzLmluY2x1ZGVzKGMudmFsdWUpID8geyByZXF1aXJlZDogdHJ1ZSB9IDogbnVsbDtcclxuICAgIH1cclxufSJdfQ==
@@ -1,5 +1,5 @@
1
1
  // Angular
2
- import { NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, RequiredValidator } from "@angular/forms";
2
+ import { NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl } from "@angular/forms";
3
3
  import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Inject, Input, Optional, Output, ViewEncapsulation } from "@angular/core";
4
4
  // Configurazioni
5
5
  import { LocalizationService } from "@esfaenza/localizations";
@@ -39,9 +39,7 @@ export class ValidationAutocompleteComponent extends BaseValidation {
39
39
  ngOnInit() {
40
40
  super.ngOnInit();
41
41
  this.registerFocusRequest();
42
- //controllo se è settato un required per decidere in maniera condizionale se utilizzare il validatore required nel componente interno
43
- if (this._validators && !this.noValidate && this._validators.some(elem => elem instanceof RequiredValidator))
44
- this.required = true;
42
+ this.checkRequiredness(this._validators);
45
43
  }
46
44
  /** @ignore */
47
45
  ngOnDestroy() {
@@ -146,4 +144,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
146
144
  }], optionChange: [{
147
145
  type: Output
148
146
  }] } });
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1hdXRvY29tcGxldGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvdmFsaWRhdGlvbnMvdmFsaWRhdGlvbi1hdXRvY29tcGxldGUvdmFsaWRhdGlvbi1hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvdmFsaWRhdGlvbnMvdmFsaWRhdGlvbi1hdXRvY29tcGxldGUvdmFsaWRhdGlvbi1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBNEMsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9KLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFjLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFZLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFMLGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxrQ0FBa0M7QUFDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7O0FBRzNEOztHQUVHO0FBZ0JILE1BQU0sT0FBTywrQkFBZ0MsU0FBUSxjQUFjO0lBcUIvRCxjQUFjO0lBQ2QsWUFBWSxHQUFzQixFQUE2QyxXQUF1QixFQUFtRCxnQkFBNEIsRUFBVSxRQUFrQixFQUFZLEVBQXVCO1FBQ2hQLEtBQUss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YUFDcEM7d0JBQ1AsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFO3dCQUM3RDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxnQ0FBZ0MsQ0FBQzs0QkFDOUQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0osaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTs7MEJBeUJBLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQW9DLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1CO3FHQWxCdEksY0FBYztzQkFBdEIsS0FBSztnQkFHVSxLQUFLO3NCQUFwQixLQUFLO2dCQUdVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBR0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFVudHlwZWRGb3JtQ29udHJvbCwgTkdfQVNZTkNfVkFMSURBVE9SUywgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIE5nQ29udHJvbCwgUmVxdWlyZWRWYWxpZGF0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5cclxuLy8gRGlyZXR0aXZlLCBDb21wb25lbnRpLCBMaWJyZXJpZVxyXG5pbXBvcnQgeyBCYXNlVmFsaWRhdGlvbiB9IGZyb20gXCIuLi9iYXNlLXZhbGlkYXRpb25cIjtcclxuaW1wb3J0IHsgQmFzZVZhbGlkYXRpb25Mb2MgfSBmcm9tICcuLi9iYXNlLXZhbGlkYXRpb24ubG9jJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIGRpIHZhbGlkYWl6b25lIHBlciBnbGkgaW5wdXQgZGkgQXV0b2NvbXBsZXRhbWVudG9cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwidmFsLWF1dG9jb21wbGV0ZVwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwidmFsaWRhdGlvbi1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgeyBwcm92aWRlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCB1c2VDbGFzczogQmFzZVZhbGlkYXRpb25Mb2MgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBWYWxpZGF0aW9uQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9XHJcbiAgICBdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIHN0eWxlVXJsczogW1wiLi4vdmFsaWRhdGlvbi1zdHlsZS5zY3NzXCJdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uQXV0b2NvbXBsZXRlQ29tcG9uZW50IGV4dGVuZHMgQmFzZVZhbGlkYXRpb24gaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG5cclxuICAgIC8qKiBTb3JnZW50ZSBkYSBjdWkgc2NlZ2xpZXJlIHZhbG9yaSBmaWx0cmF0YSBpbiBiYXNlIGEgcXVlbGxvIGNoZSBoYSBzY3JpdHRvIGwndXRlbnRlICovXHJcbiAgICBASW5wdXQoKSBGaWx0ZXJlZFNvdXJjZTogeyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIC8qKiBWYWxvcmUgZGVsIG1vZGVsbG8gKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWx1ZTogYW55O1xyXG5cclxuICAgIC8qKiBDb250ZW51dG8gZGVsbGEgbGFiZWwgRmxvYXR0YW50ZSBNYXRlcmlhbC1TdHlsZSAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBFdmVudG8gY2hlIGluZGljYSBsJ29wemlvbmUgc2VsZXppb25hdGEgZGFsIGNvbXBvbmVudGUuIElsIHZhbG9yZSBmaW5hbGUgZGVsbGEgc2VsZXppb25lIGRvdnLDoCBlc3NlcmUgcXVlc3RvICovXHJcbiAgICBAT3V0cHV0KCkgb3B0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAgIC8qKiBTdWJzY3JpcHRpb24gZGVsIHRvb3RsdGlwIGRhIHJpcHVsaXJlIGFsbGEgZGlzdHJ1emlvbmUgZGVsIGNvbXBvbmVudGUgKi9cclxuICAgIHByaXZhdGUgdG9vbHRpcFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIC8qKiBDb250cm9sbG8gZXNwb3N0byBvdHRlbnV0byB0cmFtaXRlIGluamVjdG9yICovXHJcbiAgICBwcml2YXRlIHBhcmVudENvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgY29uc3RydWN0b3IoY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgQE9wdGlvbmFsKCkgQEluamVjdChOR19WQUxJREFUT1JTKSBwcml2YXRlIF92YWxpZGF0b3JzOiBBcnJheTxhbnk+LCBAT3B0aW9uYWwoKSBASW5qZWN0KE5HX0FTWU5DX1ZBTElEQVRPUlMpIHByaXZhdGUgX2FzeW5jVmFsaWRhdG9yczogQXJyYXk8YW55PiwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHByb3RlY3RlZCBsYzogTG9jYWxpemF0aW9uU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKGNkcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckZvY3VzUmVxdWVzdCgpO1xyXG5cclxuICAgICAgICAvL2NvbnRyb2xsbyBzZSDDqCBzZXR0YXRvIHVuIHJlcXVpcmVkIHBlciBkZWNpZGVyZSBpbiBtYW5pZXJhIGNvbmRpemlvbmFsZSBzZSB1dGlsaXp6YXJlIGlsIHZhbGlkYXRvcmUgcmVxdWlyZWQgbmVsIGNvbXBvbmVudGUgaW50ZXJub1xyXG4gICAgICAgIGlmICh0aGlzLl92YWxpZGF0b3JzICYmICF0aGlzLm5vVmFsaWRhdGUgJiYgdGhpcy5fdmFsaWRhdG9ycy5zb21lKGVsZW0gPT4gZWxlbSBpbnN0YW5jZW9mIFJlcXVpcmVkVmFsaWRhdG9yKSlcclxuICAgICAgICAgICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICAgICAgdGhpcy5kZXJlZ2lzdGVyRm9jdXNSZXF1ZXN0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcFN1YnNjcmlwdGlvbikgdGhpcy50b29sdGlwU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLnBvc3RCaW5kaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIHNpIG9jY3VwYSBkaSBjb2xsZWdhcmUgaSB2YWxpZGF0b3JpIGUgbGEgZnVuemlvbmUgZGkgcmVzZXQgZGFsICoqQ29udHJvbFZhbHVlQWNjZXNzb3IqKiByYXBwcmVzZW50YXRvIFxyXG4gICAgICogZGEgcXVlc3RvIGNvbXBvbmVudGUgYWwgKipDb250cm9sVmFsdWVBY2Nlc3NvcioqIHJhcHByZXNlbnRhdG8gZGFsbCdlZmZldHRpdm8gZWxlbWVudG8gZGkgSW5wdXQgcHJlc2VudGUgbGF0byBIVE1MXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcG9zdEJpbmRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5DaGVja1ZhbGlkaXR5KCk7XHJcbiAgICAgICAgY29uc3QgbmdDb250cm9sOiBOZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xyXG4gICAgICAgIGlmIChuZ0NvbnRyb2wpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnRDb250cm9sID0gbmdDb250cm9sLmNvbnRyb2wgYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG5cclxuICAgICAgICAgICAgLy9zZSBsYSB2YXJpYWJpbGUgbm92YWxpZGF0ZSDDqCB0cnVlLCBlbGltaW5vIHR1dHRpIGkgdmFsaWRhdG9yaSBldmVudHVhbG1lbnRlIGluc2VyaXRpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5vVmFsaWRhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbC5jbGVhckFzeW5jVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlSW5wdXQuY29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy5fYXN5bmNWYWxpZGF0b3JzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUlucHV0LmNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLl92YWxpZGF0b3JzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9mYWNjaW8gaW4gbW9kbyBjaGUgc2UgY2hpYW1vIGlsIHJlc2V0IGRlbCBjb250cm9sbG8gKG8gZGVsbGEgZm9ybSkgZGFsbCdlc3Rlcm5vIHNpIHJlc2V0dGkgYW5jaGUgaWwgY29udHJvbGxvIG5hdGl2b1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnRnVuYyA9IHRoaXMucGFyZW50Q29udHJvbC5yZXNldDtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnRDb250cm9sLnJlc2V0ID0gKCkgPT4geyAvL2ZhY2NpbyBpbiBtb2RvIGNoZSBzZSBjaGlhbW8gaWwgcmVzZXQgZGVsIGNvbnRyb2xsbyAobyBkZWxsYSBmb3JtKSBkYWxsJ2VzdGVybm8gc2kgcmVzZXR0aSBhbmNoZSBpbCBjb250cm9sbG8gbmF0aXZvXHJcbiAgICAgICAgICAgICAgICBvcmlnRnVuYy5hcHBseSh0aGlzLnBhcmVudENvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlSW5wdXQuY29udHJvbC5yZXNldCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwLmhpZGUoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4geyB9OyAvL3BsYWNlaG9sZGVyIG9uIHRvdWNoZWQgZnVuY3Rpb25cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdmFyIHZhbCA9IHZhbHVlICYmIHRoaXMuRmlsdGVyZWRTb3VyY2UgPyB0aGlzLkZpbHRlcmVkU291cmNlLmZpbmQodCA9PiB0LmlkID09IHZhbHVlKSA6IG51bGw7XHJcbiAgICAgICAgaWYodmFsKSB0aGlzLm9wdGlvbkNoYW5nZS5lbWl0KHZhbC5pZCk7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodmFsID8gdmFsLmlkIDogdmFsdWUpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWwgPyB2YWwuZGVzY3JpcHRpb24gOiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEwnZW1pdCBkZWxsYSBtb2RpZmljYSBhbCB2YWxvcmUgdmllbmUgZ2VzdGl0byBzdSB1biBldmVudG8gY3VzdG9tICgqKmlucHV0Q2hhbmdlKiopIGNvbWUgd29ya2Fyb3VuZCBhbCBtYWxmdW56aW9uYW1lbnRvIGRlbGwnKipuZ01vZGVsQ2hhbmdlKiogbmF0aXZvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSB0b0VtaXQgdmFsb3JlIGRhIHByb3BhZ2FyZSBhbGwnZXN0ZXJub1xyXG4gICAgICovXHJcbiAgICBvbk1vZGVsQ2hhbmdlKHRvRW1pdCkge1xyXG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0b0VtaXQpO1xyXG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh0b0VtaXQpO1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG59IiwiPCEtLSBWYWwtTW9kZWw6IHt7dmFsdWV9fSAtLT5cclxuPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJ7e0ZpZWxkQXBwZWFyZW5jZX19XCIgY2xhc3M9XCJtYXQtZnVsbC13aWR0aCBtYXQtbm8tYm9yZGVyLXRvcCBtYXQtaGVpZ2h0LWZpeGVkXCIgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoUHhcIj5cclxuICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFwiPnt7bGFiZWx9fTwvbWF0LWxhYmVsPlxyXG4gICAgPGlucHV0IG1hdElucHV0XHJcbiAgICAgICAgICAgI2h0bWxJbnB1dFxyXG4gICAgICAgICAgICNiYXNlSW5wdXQ9J25nTW9kZWwnXHJcbiAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgIHRyaWdnZXJzPVwiXCJcclxuICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxyXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3twbGFjZWhvbGRlcn19XCJcclxuICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxyXG4gICAgICAgICAgIG5hbWU9XCJ2YWwtaW5wdXRcIlxyXG4gICAgICAgICAgIGlkPVwie3tpZH19XCJcclxuICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB7e2NsYXNzfX1cIlxyXG4gICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxyXG4gICAgICAgICAgIFtjbGFzcy5jaGVja2luZy1maWVsZF09XCIhbm9WYWxpZGF0ZVwiXHJcbiAgICAgICAgICAgW3Rvb2x0aXBdPVwidG9sVGVtcGxhdGVcIlxyXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJSZWFkb25seSB8fCBkaXNhYmxlZFwiXHJcbiAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAoY2xpY2spPVwib25Gb2N1cygkZXZlbnQpXCJcclxuICAgICAgICAgICAoZm9jdXMpPVwiY2hlY2tUb29sdGlwKCk7XCJcclxuICAgICAgICAgICAoa2V5dXApPVwiKCRldmVudC5rZXlDb2RlID09IDEzIHx8ICRldmVudC5rZXlDb2RlID09IDI3KSAmJiBvbkZpbmFsaXplKCk7XCJcclxuICAgICAgICAgICAoYmx1cik9XCJjbG9zZVRvb2x0aXAoKTsgb25GaW5hbGl6ZSgpO1wiPlxyXG5cclxuICAgIDxtYXQtYXV0b2NvbXBsZXRlIGF1dG9BY3RpdmVGaXJzdE9wdGlvbiAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgRmlsdGVyZWRTb3VyY2VcIiBbdmFsdWVdPVwib3B0aW9uLmlkXCI+XHJcbiAgICAgICAgICAgIHt7b3B0aW9uLmRlc2NyaXB0aW9ufX1cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG48bmctdGVtcGxhdGUgI3RvbFRlbXBsYXRlPlxyXG4gICAgPGRpdiAoY2xpY2spPVwiY2xvc2VUb29sdGlwKClcIj5cclxuICAgICAgICA8c3Bhbj57e3ZhbGlkYXRpb25GYWlsZWRCaW5kfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1hdXRvY29tcGxldGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvdmFsaWRhdGlvbnMvdmFsaWRhdGlvbi1hdXRvY29tcGxldGUvdmFsaWRhdGlvbi1hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvdmFsaWRhdGlvbnMvdmFsaWRhdGlvbi1hdXRvY29tcGxldGUvdmFsaWRhdGlvbi1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBNEMsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvSixPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBWSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxTCxpQkFBaUI7QUFDakIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFOUQsa0NBQWtDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQUczRDs7R0FFRztBQWdCSCxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsY0FBYztJQXFCL0QsY0FBYztJQUNkLFlBQVksR0FBc0IsRUFBNkMsV0FBdUIsRUFBbUQsZ0JBQTRCLEVBQVUsUUFBa0IsRUFBWSxFQUF1QjtRQUNoUCxLQUFLLENBQUMsR0FBRyxD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Q0FBQzs0QkFDOUQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0osaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTs7MEJBeUJBLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQW9DLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1CO3FHQWxCdEksY0FBYztzQkFBdEIsS0FBSztnQkFHVSxLQUFLO3NCQUFwQixLQUFLO2dCQUdVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBR0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFVudHlwZWRGb3JtQ29udHJvbCwgTkdfQVNZTkNfVkFMSURBVE9SUywgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIE5nQ29udHJvbCwgUmVxdWlyZWRWYWxpZGF0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5cclxuLy8gRGlyZXR0aXZlLCBDb21wb25lbnRpLCBMaWJyZXJpZVxyXG5pbXBvcnQgeyBCYXNlVmFsaWRhdGlvbiB9IGZyb20gXCIuLi9iYXNlLXZhbGlkYXRpb25cIjtcclxuaW1wb3J0IHsgQmFzZVZhbGlkYXRpb25Mb2MgfSBmcm9tICcuLi9iYXNlLXZhbGlkYXRpb24ubG9jJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIGRpIHZhbGlkYWl6b25lIHBlciBnbGkgaW5wdXQgZGkgQXV0b2NvbXBsZXRhbWVudG9cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwidmFsLWF1dG9jb21wbGV0ZVwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwidmFsaWRhdGlvbi1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgeyBwcm92aWRlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCB1c2VDbGFzczogQmFzZVZhbGlkYXRpb25Mb2MgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBWYWxpZGF0aW9uQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9XHJcbiAgICBdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIHN0eWxlVXJsczogW1wiLi4vdmFsaWRhdGlvbi1zdHlsZS5zY3NzXCJdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uQXV0b2NvbXBsZXRlQ29tcG9uZW50IGV4dGVuZHMgQmFzZVZhbGlkYXRpb24gaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG5cclxuICAgIC8qKiBTb3JnZW50ZSBkYSBjdWkgc2NlZ2xpZXJlIHZhbG9yaSBmaWx0cmF0YSBpbiBiYXNlIGEgcXVlbGxvIGNoZSBoYSBzY3JpdHRvIGwndXRlbnRlICovXHJcbiAgICBASW5wdXQoKSBGaWx0ZXJlZFNvdXJjZTogeyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIC8qKiBWYWxvcmUgZGVsIG1vZGVsbG8gKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWx1ZTogYW55O1xyXG5cclxuICAgIC8qKiBDb250ZW51dG8gZGVsbGEgbGFiZWwgRmxvYXR0YW50ZSBNYXRlcmlhbC1TdHlsZSAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBFdmVudG8gY2hlIGluZGljYSBsJ29wemlvbmUgc2VsZXppb25hdGEgZGFsIGNvbXBvbmVudGUuIElsIHZhbG9yZSBmaW5hbGUgZGVsbGEgc2VsZXppb25lIGRvdnLDoCBlc3NlcmUgcXVlc3RvICovXHJcbiAgICBAT3V0cHV0KCkgb3B0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAgIC8qKiBTdWJzY3JpcHRpb24gZGVsIHRvb3RsdGlwIGRhIHJpcHVsaXJlIGFsbGEgZGlzdHJ1emlvbmUgZGVsIGNvbXBvbmVudGUgKi9cclxuICAgIHByaXZhdGUgdG9vbHRpcFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIC8qKiBDb250cm9sbG8gZXNwb3N0byBvdHRlbnV0byB0cmFtaXRlIGluamVjdG9yICovXHJcbiAgICBwcml2YXRlIHBhcmVudENvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgY29uc3RydWN0b3IoY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgQE9wdGlvbmFsKCkgQEluamVjdChOR19WQUxJREFUT1JTKSBwcml2YXRlIF92YWxpZGF0b3JzOiBBcnJheTxhbnk+LCBAT3B0aW9uYWwoKSBASW5qZWN0KE5HX0FTWU5DX1ZBTElEQVRPUlMpIHByaXZhdGUgX2FzeW5jVmFsaWRhdG9yczogQXJyYXk8YW55PiwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHByb3RlY3RlZCBsYzogTG9jYWxpemF0aW9uU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKGNkcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckZvY3VzUmVxdWVzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRuZXNzKHRoaXMuX3ZhbGlkYXRvcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIHRoaXMuZGVyZWdpc3RlckZvY3VzUmVxdWVzdCgpO1xyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBTdWJzY3JpcHRpb24pIHRoaXMudG9vbHRpcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgdGhpcy5wb3N0QmluZGluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBzaSBvY2N1cGEgZGkgY29sbGVnYXJlIGkgdmFsaWRhdG9yaSBlIGxhIGZ1bnppb25lIGRpIHJlc2V0IGRhbCAqKkNvbnRyb2xWYWx1ZUFjY2Vzc29yKiogcmFwcHJlc2VudGF0byBcclxuICAgICAqIGRhIHF1ZXN0byBjb21wb25lbnRlIGFsICoqQ29udHJvbFZhbHVlQWNjZXNzb3IqKiByYXBwcmVzZW50YXRvIGRhbGwnZWZmZXR0aXZvIGVsZW1lbnRvIGRpIElucHV0IHByZXNlbnRlIGxhdG8gSFRNTFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBvc3RCaW5kaW5nKCkge1xyXG4gICAgICAgIHRoaXMuQ2hlY2tWYWxpZGl0eSgpO1xyXG4gICAgICAgIGNvbnN0IG5nQ29udHJvbDogTmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcclxuICAgICAgICBpZiAobmdDb250cm9sKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbCA9IG5nQ29udHJvbC5jb250cm9sIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcclxuXHJcbiAgICAgICAgICAgIC8vc2UgbGEgdmFyaWFiaWxlIG5vdmFsaWRhdGUgw6ggdHJ1ZSwgZWxpbWlubyB0dXR0aSBpIHZhbGlkYXRvcmkgZXZlbnR1YWxtZW50ZSBpbnNlcml0aVxyXG4gICAgICAgICAgICBpZiAodGhpcy5ub1ZhbGlkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudENvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudENvbnRyb2wuY2xlYXJBc3luY1ZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUlucHV0LmNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuX2FzeW5jVmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VJbnB1dC5jb250cm9sLnNldFZhbGlkYXRvcnModGhpcy5fdmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vZmFjY2lvIGluIG1vZG8gY2hlIHNlIGNoaWFtbyBpbCByZXNldCBkZWwgY29udHJvbGxvIChvIGRlbGxhIGZvcm0pIGRhbGwnZXN0ZXJubyBzaSByZXNldHRpIGFuY2hlIGlsIGNvbnRyb2xsbyBuYXRpdm9cclxuICAgICAgICAgICAgY29uc3Qgb3JpZ0Z1bmMgPSB0aGlzLnBhcmVudENvbnRyb2wucmVzZXQ7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbC5yZXNldCA9ICgpID0+IHsgLy9mYWNjaW8gaW4gbW9kbyBjaGUgc2UgY2hpYW1vIGlsIHJlc2V0IGRlbCBjb250cm9sbG8gKG8gZGVsbGEgZm9ybSkgZGFsbCdlc3Rlcm5vIHNpIHJlc2V0dGkgYW5jaGUgaWwgY29udHJvbGxvIG5hdGl2b1xyXG4gICAgICAgICAgICAgICAgb3JpZ0Z1bmMuYXBwbHkodGhpcy5wYXJlbnRDb250cm9sKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUlucHV0LmNvbnRyb2wucmVzZXQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHsgfTsgLy9wbGFjZWhvbGRlciBvbiB0b3VjaGVkIGZ1bmN0aW9uXHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHZhciB2YWwgPSB2YWx1ZSAmJiB0aGlzLkZpbHRlcmVkU291cmNlID8gdGhpcy5GaWx0ZXJlZFNvdXJjZS5maW5kKHQgPT4gdC5pZCA9PSB2YWx1ZSkgOiBudWxsO1xyXG4gICAgICAgIGlmKHZhbCkgdGhpcy5vcHRpb25DaGFuZ2UuZW1pdCh2YWwuaWQpO1xyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHZhbCA/IHZhbC5pZCA6IHZhbHVlKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsID8gdmFsLmRlc2NyaXB0aW9uIDogdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMJ2VtaXQgZGVsbGEgbW9kaWZpY2EgYWwgdmFsb3JlIHZpZW5lIGdlc3RpdG8gc3UgdW4gZXZlbnRvIGN1c3RvbSAoKippbnB1dENoYW5nZSoqKSBjb21lIHdvcmthcm91bmQgYWwgbWFsZnVuemlvbmFtZW50byBkZWxsJyoqbmdNb2RlbENoYW5nZSoqIG5hdGl2b1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdG9FbWl0IHZhbG9yZSBkYSBwcm9wYWdhcmUgYWxsJ2VzdGVybm9cclxuICAgICAqL1xyXG4gICAgb25Nb2RlbENoYW5nZSh0b0VtaXQpIHtcclxuICAgICAgICB0aGlzLndyaXRlVmFsdWUodG9FbWl0KTtcclxuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQodG9FbWl0KTtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxufSIsIjwhLS0gVmFsLU1vZGVsOiB7e3ZhbHVlfX0gLS0+XHJcbjxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwie3tGaWVsZEFwcGVhcmVuY2V9fVwiIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGggbWF0LW5vLWJvcmRlci10b3AgbWF0LWhlaWdodC1maXhlZFwiIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFB4XCI+XHJcbiAgICA8bWF0LWxhYmVsICpuZ0lmPVwibGFiZWxcIj57e2xhYmVsfX08L21hdC1sYWJlbD5cclxuICAgIDxpbnB1dCBtYXRJbnB1dFxyXG4gICAgICAgICAgICNodG1sSW5wdXRcclxuICAgICAgICAgICAjYmFzZUlucHV0PSduZ01vZGVsJ1xyXG4gICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICB0cmlnZ2Vycz1cIlwiXHJcbiAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcclxuICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7cGxhY2Vob2xkZXJ9fVwiXHJcbiAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcclxuICAgICAgICAgICBuYW1lPVwidmFsLWlucHV0XCJcclxuICAgICAgICAgICBpZD1cInt7aWR9fVwiXHJcbiAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wge3tjbGFzc319XCJcclxuICAgICAgICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcclxuICAgICAgICAgICBbY2xhc3MuY2hlY2tpbmctZmllbGRdPVwiIW5vVmFsaWRhdGVcIlxyXG4gICAgICAgICAgIFt0b29sdGlwXT1cInRvbFRlbXBsYXRlXCJcclxuICAgICAgICAgICBbZGlzYWJsZWRdPVwiUmVhZG9ubHkgfHwgZGlzYWJsZWRcIlxyXG4gICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgKGNsaWNrKT1cIm9uRm9jdXMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgKGZvY3VzKT1cImNoZWNrVG9vbHRpcCgpO1wiXHJcbiAgICAgICAgICAgKGtleXVwKT1cIigkZXZlbnQua2V5Q29kZSA9PSAxMyB8fCAkZXZlbnQua2V5Q29kZSA9PSAyNykgJiYgb25GaW5hbGl6ZSgpO1wiXHJcbiAgICAgICAgICAgKGJsdXIpPVwiY2xvc2VUb29sdGlwKCk7IG9uRmluYWxpemUoKTtcIj5cclxuXHJcbiAgICA8bWF0LWF1dG9jb21wbGV0ZSBhdXRvQWN0aXZlRmlyc3RPcHRpb24gI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIEZpbHRlcmVkU291cmNlXCIgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiPlxyXG4gICAgICAgICAgICB7e29wdGlvbi5kZXNjcmlwdGlvbn19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0b2xUZW1wbGF0ZT5cclxuICAgIDxkaXYgKGNsaWNrKT1cImNsb3NlVG9vbHRpcCgpXCI+XHJcbiAgICAgICAgPHNwYW4+e3t2YWxpZGF0aW9uRmFpbGVkQmluZH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19