@esfaenza/forms-and-validations 13.3.6 → 13.3.9

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.
@@ -194,7 +194,7 @@ export class BaseFormControl {
194
194
  });
195
195
  // Post trybind se c'è un modello associato ricalcolo l'**EvaluatedModel**
196
196
  if (this.Model)
197
- this.EvaluatedModel = this.BoundSource.find(t => t.id == this.Model)?.description;
197
+ this.BoundSource.find(t => t.id == this.Model)?.description;
198
198
  }
199
199
  }
200
200
  /** Valuta il contenuto della variabile BindCheckingGroups */
@@ -373,8 +373,8 @@ export class BaseFormControl {
373
373
  * Non posso tenerlo protected altrimenti posso eseguirlo solo dal .ts e non dall' .html
374
374
  */
375
375
  changed(forcedValue = null, markForCheck = false) {
376
- this.propagateChange(forcedValue == null ? this.Model : forcedValue);
377
- this.inputChange.emit(forcedValue == null ? this.Model : forcedValue);
376
+ this.propagateChange(forcedValue == null || forcedValue == "" ? this.Model ?? "" : forcedValue);
377
+ this.inputChange.emit(forcedValue == null || forcedValue == "" ? this.Model ?? "" : forcedValue);
378
378
  if (markForCheck)
379
379
  this.cdr.markForCheck();
380
380
  }
@@ -481,4 +481,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
481
481
  }], inputFinalized: [{
482
482
  type: Output
483
483
  }] } });
484
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLWNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9iYXNlLWZvcm0tY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFvRCxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSXZILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7O0FBSTFELGtFQUFrRTtBQUVsRSxNQUFNLE9BQWdCLGVBQWU7SUFnTGpDLDJCQUEyQjtJQUMzQixZQUFzQixHQUFzQixFQUFTLFNBQW9CLEVBQVksV0FBdUIsRUFBc0IsRUFBd0IsRUFBcUIsVUFBNEIsRUFBNkMsYUFBcUIsRUFBOEMsY0FBdUIsRUFBVSxjQUF1QixLQUFLO1FBQWxXLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVMsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUFZLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQXNCLE9BQUUsR0FBRixFQUFFLENBQXNCO1FBQXFCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQTZDLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQThDLG1CQUFjLEdBQWQsY0FBYyxDQUFTO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBL0t4WDs7Ozs7V0FLRztRQUNLLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFFbEMsb0RBQW9EO1FBQzdDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFXakMseUVBQXlFO1FBQy9ELHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUU1Qzs7OztXQUlHO1FBQ08sc0JBQWlC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RyxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wsIE5nRm9ybSwgTmdNb2RlbCwgUmVxdWlyZWRWYWxpZGF0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIE9wdGlvbmFsLCBJbmplY3QsIERpcmVjdGl2ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UsIENvbXBvbmVudENvbnRleHQgfSBmcm9tIFwiQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sXCI7XHJcbmltcG9ydCB7IEFDT19DVVNUT01LRVksIEZBVl9ERUJVR19NT0RFIH0gZnJvbSAnLi4vdG9rZW5zJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8qKiBDb21wb25lbnRlIGJhc2UgZGEgY3VpIHR1dHRpIGkgY29tcG9uZW50aSBGb3JtIGltcGxlbWVudGFubyAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VGb3JtQ29udHJvbCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE0OTg4XHJcbiAgICAgKiBUTDpEUjsgSWwgcHJpbW8gdmFsb3JlIHBhc3NhdG8gYWwgd3JpdGVWYWx1ZSDDqCBudWxsbyBwZXJjaMOpIHF1YW5kbyBpIGNhZ25hY2NpIGZhbm5vIG5ldyBGb3JtQ29udHJvbCgpXHJcbiAgICAgKiBzY3Jpdm9ubyB1biB3cml0ZVZhbHVlIG51bGxvLi4uIHF1aW5kaSBhbCBwcmltbyBiaW5kaW5nIHNhbHRvIGwnaW5pemlhbGl6emF6aW9uZSBzZSBobyBsYSBjb3BwaWEgbnVsbC1maXJzdEJpbmRcclxuICAgICAqIHBvaSBtZXR0ZW5kbyBmaXJzdEJpbmQgYSBmYWxzZSBkaSBsw6wgaW4gcG9pIGZ1bnppb25vIGNvbWUgZGV2by4gVmlzdGEgbGEgY2FzaXN0aWNhIGV2aXRvIGVzc2VuemlhbG1lbnRlIG1ldMOgIGRldGVjdENoYW5nZXNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBmaXJzdEJpbmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2UgaWwgY2FtcG8gw6ggb2JibGlnYXRvcmlvIGkgb3B6aW9uYWxlICovXHJcbiAgICBwdWJsaWMgUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogTW9kZWxsbyByYXBwcmVzZW50YXRvIGRhIHF1ZXN0byBjYW1wbyAqL1xyXG4gICAgcHVibGljIE1vZGVsOiBhbnk7XHJcblxyXG4gICAgLyoqIFZhbG9yZSBkZWwgTW9kZWxsbyAqL1xyXG4gICAgcHVibGljIEV2YWx1YXRlZE1vZGVsOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIE5vbWUgZ2VuZXJhdG8gcGVyIGlsIGNvbnRyb2xsbyBpbnRlcm5vLiBEaSBkZWZhdWx0IMOoIGlsIG5vbWUgZGVsIGNvbnRyb2xsbyBlc3Rlcm5vIGNvbiBsJ2FnZ2l1bnRhIGRpIFwiX2ludGVybmFsXCIuIFNlcnZlIHBlciBldml0YXJlIGNyb3NzLWJpbmQgKi9cclxuICAgIHB1YmxpYyBHZW5lcmF0ZWROYW1lOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSBpbCBGb3JtIGNoZSBjb250aWVuZSBxdWVzdG8gY2FtcG8gw6ggZ2nDoCBzdGF0byByZWdpc3RyYXRvICovXHJcbiAgICBwcm90ZWN0ZWQgZm9ybUhhc0Jlbm5Cb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIHF1ZXN0byBjYW1wbyDDqCBzdGFjY2F0byBkYWwgRm9ybSwgYWQgZXNlbXBpbyBuZWwgY2FzbyBzaWEgaW4gdW4gbmctdGVtcGxhdGUgcHJvaWV0dGF0byBuZWwgZm9ybS5cclxuICAgICAqIFxyXG4gICAgICogSW4gcXVlbCBjYXNvIGxhIHZhcmlhYmlsZSAqKkZvcm0qKiBkZWwgY29tcG9uZW50ZSBkZXYnZXNzZXJlIHZhbG9yaXp6YXRhXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBkZXRhdGNoZWRGcm9tZm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcm90ZWN0ZWQgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcm90ZWN0ZWQgb25Ub3VjaGVkID0gKCkgPT4geyB9O1xyXG5cclxuICAgIC8qKiBAaWdub3JlIFZlZGkgZ2V0dGVyIGUgc2V0dGVyICovXHJcbiAgICBwcml2YXRlIF9yZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUXVhbG9yYSBjaSBmb3NzZSB1biBjb250ZXN0byBjb2xsZWdhdG8gcXVlc3RhIHZhcmlhYmlsZSBpZGVudGlmaWNhIHNlIFNvbm8gbCdPd25lciBvIG1lbm8uXHJcbiAgICAgKiBcclxuICAgICAqIFNlIG5vbiBsbyBzb25vLCBpbCBjYW1wbyByaXN1bHRlcsOgIGluIHNvbGEgbGV0dHVyYSBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBBcHBDb250ZXh0T3duZXJzaGlwOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogU3ViamVjdCBhIGN1aSBsJ29nZ2V0dG8gaW50ZXJubyBzaSBjb2xsZWdhIHBlciBlZmZldHR1YXJlIGlsIGZvY3VzIGRlbGwnZWxlbWVudG8gaW5wdXQgc290dG9zdGFudGUgKi9cclxuICAgIEBJbnB1dCgpIEZvY3VzU3ViamVjdDogU3ViamVjdDx2b2lkPjtcclxuXHJcbiAgICAvKiogTW9kYWxpdMOgIGluIGN1aSB2aWVuZSBtb3N0cmF0byBpbCBjYW1wbywgMS0xIHJpc3BldHRvIGFsbGUgZGVmaW5pemlvbmkgZGkgQW5ndWxhciBNYXRlcmlhbCAgKi9cclxuICAgIEBJbnB1dCgpIEZpZWxkQXBwZWFyZW5jZTogXCJsZWdhY3lcIiB8IFwic3RhbmRhcmRcIiB8IFwiZmlsbFwiIHwgXCJvdXRsaW5lXCIgPSBcIm91dGxpbmVcIjtcclxuXHJcbiAgICAvKiogVXRpbGl6emEgbyBtZW5vIGlsIExheW91dCBkaSB1biBmb3JtIChMYWJlbCBjb24gaW5wdXQgZGkgZmlhbmNvKSwgc2UgZmFsc2UgbW9zdHJhIHNvbG8gbCdpbnB1dCAqL1xyXG4gICAgQElucHV0KCkgRm9ybUxheW91dDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIEluZGljYSBjaGUgbGEgcGFydGUgaW5wdXQgZGVsIGNvbnRyb2xsbyBkZXYnZXNzZXJlIHVuYSBsYWJlbCByZWFkb25seSBlIGxhIHBhcnRlIGxhYmVsIGRpIHRpdG9sbyBkZXYnZXNzZXJlIGluIGJvbGQuIFBlciB1dGlsaXp6YXJlIHVuIHNvbG8gY29tcG9uZW50ZSBzaWEgcGVyIGxhIG1vZGlmaWNhIGNoZSBwZXIgaWwgZGV0dGFnbGlvICovXHJcbiAgICBASW5wdXQoKSBEaXNwbGF5TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBEZWZpbmlzY2Ugc2UgcmljaGlhbWFyZSBsJ0V2ZW50RW1pdHRlciAqKmlucHV0Q2hhbmdlKiogaW4gbWFuaWVyYSBjbGFzc2ljYSAodHJ1ZSkgbyBzb2xvIHBlciBsYSBjaGFuZ2UgY29uc2lkZXJhdGUgZGVmaW5pdGl2ZSBjb21lIHRhc3RvIGludmlvIC8gYmx1ciAvIGVjYy4uLiAoZmFsc2UpICovXHJcbiAgICBASW5wdXQoKSBFbWl0UGVuZGluZ0NoYW5nZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBBdHRpdmEgbyBkaXNhdHRpdmEgbGEgdmFsaWRhemlvbmUgcGVyIHF1ZXN0byBjb21wb25lbnRlICovXHJcbiAgICBASW5wdXQoKSBWYWxpZGF0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogUGxhY2Vob2xkZXIgcGVyIHF1YW5kbyBsJ2lucHV0IMOoIHZ1b3RvICovXHJcbiAgICBASW5wdXQoKSBQbGFjZWhvbGRlcjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogQ2xhc3NlIGV4dHJhIHBlciBpbCBmb3JtLWdyb3VwIGluIGN1aSB2aWVuZSB3cmFwcGF0byBsJ2lucHV0ICovXHJcbiAgICBASW5wdXQoKSBGb3JtR3JvdXBDbGFzczogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogTWVzc2FnZ2lvIGRhIG1vc3RyYXJlIHF1YW5kbyBsYSB2YWxpZGF6aW9uZSBmYWxsaXNjZSBwZXIgcXVlc3RvIGNvbXBvbmVudGUuIERpIGRlZmF1bHQgdmllbmUgcHJvcG9zdGEgZGFsbGEgbGlicmVyaWEgKi9cclxuICAgIEBJbnB1dCgpIEZhaWxlZFZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBJbnB1dCBjaGUgZm9yemEgbCdpbnZhbGlkaXTDoCBkZWwgY29tcG9uZW50ZSAqL1xyXG4gICAgQElucHV0KCkgRm9yY2VkRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogTW9zdHJhIHVuIHRlc3RvIGEgc2luaXN0cmEgZGVsbCdpbnB1dCAoRm9ybUxheW91dCBwZXJtZXR0ZW5kbykgKi9cclxuICAgIEBJbnB1dCgpIExhYmVsOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBjb2wtbWQtWCBwZXIgbGEgbGFiZWwgKi9cclxuICAgIEBJbnB1dCgpIExhYmVsQ29sV2lkdGg6IG51bWJlciA9IDQ7XHJcblxyXG4gICAgLyoqIGNvbC1tZC1YIHBlciBsJ2lucHV0ICovXHJcbiAgICBASW5wdXQoKSBJbnB1dENvbFdpZHRoOiBudW1iZXIgPSA4O1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2Ugw6ggbCd1bHRpbW8gY29tcG9uZW50ZSBkaSB1biBmb3JtIChzZXJ2ZSBwZXIgcmltdW92ZXJlIGlsIG1hcmdpbmUgZmluYWxlKSAqL1xyXG4gICAgQElucHV0KCkgTGFzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBBc3NvY2lhIGlsIGNvbXBvbmVudGUgRm9ybSBhIHF1ZXN0byBpbnB1dCAqL1xyXG4gICAgQElucHV0KCkgRm9ybTogTmdGb3JtID0gbnVsbDtcclxuXHJcbiAgICAvKiogU29yZ2VudGUgZGEgY3VpIHNjZWdsaWVyZSB2YWxvcmkgcGVyIGkgY29tcG9uZW50aSBGb3JtIGNoZSBsbyBjb25zZW50b25vICovXHJcbiAgICBASW5wdXQoKSBTb3VyY2U6IGFueVtdO1xyXG5cclxuICAgIC8qKiBOb21lIGRlbGxhIHByb3ByaWV0w6AgY2hlIGNvbnRpZW5lIGwnSWQgZGVnbGkgb2dnZXR0aSBiaW5kYXRpIG5lbGxhICoqU291cmNlKiogKi9cclxuICAgIEBJbnB1dCgpIElkRmllbGQ6IHN0cmluZyA9ICdpZCc7XHJcblxyXG4gICAgLyoqIFRlbXBsYXRlIHBlciB2aXN1YWxpenphcmUgbGEgbW9kYWxpdMOgICoqRGlzcGxheU1vZGUqKiBjb21lIHZ1b2xlIGlsIHByb2dyYW1tYXRvcmUgZnJvY2lvIGRpIHR1cm5vICovXHJcbiAgICBASW5wdXQoKSBEaXNwbGF5TW9kZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXNwcmVzc2lvbmUgc2ltaWwtQW5ndWxhciBwZXIgY2FtYmlhcmUgaWwgdGVzdG8gZGVpIGNvbXBvbmVudGkgY2hlIHNjZWxnb25vIGlsIHByb3ByaW8gbW9kZWxsbyBkYSB1bmEgKipTb3VyY2UqKlxyXG4gICAgICogXHJcbiAgICAgKiBJbCBmdW56aW9uYW1lbnRvIMOoIGlkZW50aWNvIGFsIGJpbmRlciBkaSBhbmd1bGFyLCBzb2xvIGNvbiB1bmEgZ3JhZmZhIGludmVjZSBjaGUgMi5cclxuICAgICAqIMOIIGlub2x0cmUgcG9zc2liaWxlIGFnZ2l1bmdlcmUgcGV6emkgZGkgZGVzY3JpemlvbmUgaW4gbWFuaWVyYSBjb25kaXppb25hbGUgY29uIGxhIHNpbnRhc3NpICoqOnByb3A/KFByb3AgdmFsZSB7cHJvcH0pKipcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgRGlzcGxheTogc3RyaW5nID0gJ3tkZXNjcmlwdGlvbn0nO1xyXG5cclxuICAgIC8qKiBSaXN1bHRhdG8gZGVsbCd1bmlvbmUgZnJhIGxlIGluZm9ybWF6aW9uaSBkZWdsaSBvZ2dldHRpIGluICoqU291cmNlKiogZSBsZSBpbXBvc3Rhemlvbmkgc3BlY2lmaWNhdGUgbmVsbCdJbnB1dCAqKkRpc3BsYXkqKiAqL1xyXG4gICAgcHVibGljIEJvdW5kU291cmNlOiB7IGlkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSDDqCBpbCBwcmltbyBCaW5kIGRlbGxhIFNvdXJjZSAqL1xyXG4gICAgcHJvdGVjdGVkIFNvdXJjZUZpcnN0QmluZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdHRpZW5lIGlsIHZhbG9yZSBkZWxsYSB2YXJpYWJpbGUgKipfcmVhZG9ubHkqKlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gKip0cnVlKiogc2Ugc29sYSBsZXR0dXJhLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBnZXQgUmVhZG9ubHkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9yZWFkb25seTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wb3N0YSBpbCB2YWxvcmUgZGVsbGEgdmFyaWFiaWxlICoqX3JlYWRvbmx5KiogZ2VzdGVuZG8gYW5jaGUgaWwgQ29udGVzdG8gYXBwbGljYXRpdm9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSBWYWxvcmUgZGEgaW1wb3N0YXJlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHNldCBSZWFkb25seSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLkFwcENvbnRleHRPd25lcnNoaXApXHJcbiAgICAgICAgICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJtZXR0ZSBkaSBzZXR0YXJlIGluIHVuYSB2b2x0YSBzb2xvIGdsaSBpbnB1dCBMYWJlbENvbFdpZHRoIGUgSW5wdXRDb2xXaWR0aCwgYmFzdGEgc2NyaXZlcmxvIGNvbiBsYSBzaW50YXNzaSBcIlggWVwiXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCBJbnB1dCBuZWwgZm9ybWF0byBcIlggWVwiXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHNldCBMYWJlbElucHV0UmF0aW8oaW5wdXQ6IHN0cmluZykge1xyXG4gICAgICAgIHZhciByYXRpbyA9IGlucHV0LnNwbGl0KC9cXHMvKTtcclxuICAgICAgICB0aGlzLkxhYmVsQ29sV2lkdGggPSBwYXJzZUludChyYXRpb1swXSk7XHJcbiAgICAgICAgdGhpcy5JbnB1dENvbFdpZHRoID0gcGFyc2VJbnQocmF0aW9bMV0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiB2YWwtcXVhbGNvc2EgY2hlIGZhIGVmZmV0dGl2YW1lbnRlIGRhIGlucHV0LCBvIGV2ZW50dWFsbWVudGUgaWwgc2luZ29sbyBpbnB1dCBpbiBjYXNpIHBhcnRpY29sYXJpIChlcyBjaGVja2JveCkgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0aW9uQ29udHJvbDogTmdNb2RlbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1ZXJ5IHN1bGwnZWxlbWVudG8gJ3ZhbGlkYXRpb25Db250cm9sJyBjaGUgZnVuemlvbmEgaW4gYW1iaWVudGUgc3RhdGljb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge05nTW9kZWx9IGNvbXAgRWxlbWVudG8gSFRNTCBtYXJjYXRvIGNvbiBcIiN2YWxpZGF0aW9uQ29udHJvbFwiXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoXCJ2YWxpZGF0aW9uQ29udHJvbFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgc2V0IF92YWxpZGF0aW9uQ29udHJvbChjb21wOiBOZ01vZGVsKSB7IHRoaXMucmVnaXN0ZXJWYWxDb21wKGNvbXApOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWVyeSBzdWxsJ2VsZW1lbnRvICd2YWxpZGF0aW9uQ29udHJvbCcgY2hlIGZ1bnppb25hIGluIGFtYmllbnRlIGRpbmFtaWNvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7TmdNb2RlbH0gY29tcCBFbGVtZW50byBIVE1MIG1hcmNhdG8gY29uIFwiI3ZhbGlkYXRpb25Db250cm9sXCJcclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChcInZhbGlkYXRpb25Db250cm9sXCIsIHsgc3RhdGljOiB0cnVlIH0pIHNldCB2YWxpZGF0aW9uQ29udHJvbF9zdGF0aWMoY29tcDogTmdNb2RlbCkgeyB0aGlzLnJlZ2lzdGVyVmFsQ29tcChjb21wKTsgfTtcclxuXHJcbiAgICAvKiogRXZlbnRvIGNoaWFtYXRvIGFsbGEgbW9kaWZpY2EgZGVsIHZhbG9yZSBjb2xsZWdhdG8gYSBxdWVzdG8gY2FtcG8gKi9cclxuICAgIEBPdXRwdXQoKSBpbnB1dENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgICAvKiogRXZlbnRvIGNoaWFtYXRvIGFsIGZvY3VzIGRlbCBjYW1wbyBkaSB0ZXN0by9jb21iby9xdWVsY2hlw6gsIHJpZW1pdHRhIGwnZXZlbnRvIG9yaWdpbmFsZSBKYXZhc2NyaXB0ICovXHJcbiAgICBAT3V0cHV0KCkgaW5wdXRGb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICAvKiogRXZlbnRvIGNoaWFtYXRvIGFsIGZpbmFsaXplIGRlbCBjYW1wbyBkaSB0ZXN0by9jb21iby9xdWVsY2hlw6ggKi9cclxuICAgIEBPdXRwdXQoKSBpbnB1dEZpbmFsaXplZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICAvKiogQ2FjaGUgZGVsbGUgY29uZGl6aW9uaSBzY3JpdHRlIHRpcG8gOnByb3A/KFJvYmEgY29uIHtwcm9wfSkgKi9cclxuICAgIHByaXZhdGUgQmluZENoZWNraW5nR3JvdXBzOiB7IGdsb2JhbDogc3RyaW5nLCBwcm9wOiBzdHJpbmcsIHdoZW5leGlzdHM6IHN0cmluZyB9W10gPSBbXVxyXG5cclxuICAgIC8qKiBDYWNoZSBkZWxsZSBwcm9wcmlldMOgIHNjcml0dGUgdGlwbyAtLT4ge3Byb3B9ICovXHJcbiAgICBwcml2YXRlIEJpbmRQcm9wZXJ0aWVzOiB7IGdsb2JhbDogc3RyaW5nLCBwcm9wOiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLCBwcm90ZWN0ZWQgX3ZhbGlkYXRvcnM6IEFycmF5PGFueT4sIEBPcHRpb25hbCgpIHByaXZhdGUgYWM6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBAT3B0aW9uYWwoKSBwdWJsaWMgQXBwQ29udGV4dDogQ29tcG9uZW50Q29udGV4dCwgQE9wdGlvbmFsKCkgQEluamVjdChBQ09fQ1VTVE9NS0VZKSBwcml2YXRlIEFDT19DVVNUT01LRVk6IHN0cmluZywgQE9wdGlvbmFsKCkgQEluamVjdChGQVZfREVCVUdfTU9ERSkgcHJpdmF0ZSBGQVZfREVCVUdfTU9ERTogYm9vbGVhbiwgcHJpdmF0ZSBuYXRpdmVJbnB1dDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcblxyXG4gICAgICAgIGlmIChuZ0NvbnRyb2wgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFuZGxlTnVsbE5nQ29udHJvbCgpKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIm5nQ29udHJvbCBudWxsbyBwZXIgcXVhbGNoZSBtb3Rpdm8hIElsIDkwJSBkZWxsZSBmdW56aW9uYWxpdMOgIGRpIHF1ZXN0byBpbnB1dCBzYXJhbm5vIGRpc2FiaWxpdGF0ZVwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vU2UgbWkgYXJyaXZhIGwnaW5qZWN0YWJsZSBkZWwgY29udGVzdG8gcG9zc28gY2FwaXJlIHNlIHF1ZXN0byBjYW1wbyBkZXZlIGVzc2VyZSBpbiByZWFkb25seSBvIG5vLCBzb2xvIHNlIGhvIGdpw6AgaW5pemlhbGl6emF0byBpIGNvbnRyb2xsZXIgY3VzdG9tIGRlbGwnYWNjZXNzIGNvbnRyb2xcclxuICAgICAgICBpZiAodGhpcy5BcHBDb250ZXh0ICYmIHRoaXMuQXBwQ29udGV4dC5uYW1lICYmIHRoaXMuQUNPX0NVU1RPTUtFWSAmJiB0aGlzLmFjICYmIHRoaXMuYWMuSW5pdGlhbGl6ZWRDdXN0b20pIHtcclxuICAgICAgICAgICAgdGhpcy5BcHBDb250ZXh0T3duZXJzaGlwID0gIXRoaXMuYWMuaGFzKHRoaXMuQUNPX0NVU1RPTUtFWSArIFwiOlwiICsgdGhpcy5BcHBDb250ZXh0Lm5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWFkb25seSA9ICF0aGlzLkFwcENvbnRleHRPd25lcnNoaXBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuXHJcbiAgICAgICAgLy9TZSBobyBnacOgIHVuIHBhcmVudCBpbXBvc3RhdG8gdnVvbCBkaXJlIGNoZSBzb3R0byBhbCB0YWcgPGZvcm0+IGhvIGRpcmV0dGFtZW50ZSB1biB0YWcgPGZvcm0tKj4uLlxyXG4gICAgICAgIC8vLi4gcXVpbmRpIHBvc3NvIGltcG9zdGFyZSBkaXJldHRhbWVudGUgaWwgcmlmZXJpbWVudG8gZGVsIEZvcm0gZGEgdXNhcmUgaW4gSFRNTCBwZXIgaWwgc3VibWl0dGVkXHJcblxyXG4gICAgICAgIC8vU2Ugbm9uIGMnw6ggdnVvbCBkaXJlIGNoZSBkZW50cm8gYWwgdGFnIDxmb3JtPiBjJ8OoIHVubyBzcGxlbmRpZG8gPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiAuLi4uXCI+Li5cclxuICAgICAgICAvLy4uIGlsIHF1YWxlIGEgc3VhIHZvbHRhIGNvbnRpZW5lIGlsIGNvbnRyb2xsbyA8Zm9ybS0qPiBxdWluZGkgYXZyw7IgaWwgZm9ybSBuZWxsJ2lucHV0IFwiRm9ybVwiXHJcbiAgICAgICAgaWYgKCg8YW55Pm5nQ29udHJvbCkuX3BhcmVudClcclxuICAgICAgICAgICAgdGhpcy5Gb3JtID0gPE5nRm9ybT4oPGFueT5uZ0NvbnRyb2wpLl9wYXJlbnQ7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmRldGF0Y2hlZEZyb21mb3JtID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy9RdWVzdGEgc2VydmUgcGVyIGltcG9zdGFyZSBtZSBzdGVzc28gY29tZSBzaSBkZXZlLCBpbCB2YWxpZGF0b3JlIGludmVjZSBsbyBwYXNzbyBhbCB2YWxpZGF0aW9uLWlucHV0IHF1YW5kbyB2aWVuZSBzZXR0YXRvIGlsIHZhbGlkYXRpb25Db250cm9sXHJcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XHJcbiAgICAgICAgICAgIC8vUGVyIHR1dHRpIGkgdmFsaWRhdG9yaTogcmlnZW5lcm8gbGEgZnVuemlvbmUgZGkgdmFsaWRhemlvbmUuIFBlciBxdWFsY2hlIG1vdGl2byBhIHZvbHRlIGhvIHZhbGlkYXRvcmkgc2VuemEuLi5cclxuICAgICAgICAgICAgLy8uLi4gcXVlc3RvIMOoIHVuIHdvcmthcm91bmQgcGVyIGVzc2VyZSBzaWN1cm8gZGkgYXZlcmxhIHNlbXByZS5cclxuICAgICAgICAgICAgLy9Tb2xvIGkgdmFsaWRhdG9yaSBjb24gcGFyYW1ldHJpIGhhbm5vIGJpc29nbm8gZGVsbGEgX2NyZWF0ZVZhbGlkYXRvciAoZXMuIFwibWF4bGVuZ3RoXCIgY2hlIGhhIDEgcGFyYW1ldHJvKSwgcXVpbmRpIG5vIHZhbGlkYXRvcmkgdGlwbyBcInJlcXVpcmVkXCJcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRvcnMuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodi5fY3JlYXRlVmFsaWRhdG9yKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2Ll9jcmVhdGVWYWxpZGF0b3IoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wuYWRkVmFsaWRhdG9ycyh0aGlzLl92YWxpZGF0b3JzKTtcclxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWZmZXR0dWEgaWwgQmluZC9QYXJzZSBkZWxsZSB2YXJpZSAqKlNvdXJjZSoqIHVuZW5kbyBsZSBpbmZvcm1hemlvbmkgc3BlY2lmaWNhdGUgaW4gKipEaXNwbGF5KipcclxuICAgICAqIFxyXG4gICAgICogRXZlbnR1YWxtZW50ZSByaWVmZmV0dHVhIHVuIGJpbmQgYWwgbW9kZWxsbyBpbiBiYXNlIGFsIHZhbG9yZSBkZWxsYSB2YXJpYWJpbGUgKipSZWJpbmRNb2RlbEFmdGVyU291cmNlKipcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHRyeUJpbmRTb3VyY2VEaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5Tb3VyY2UpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU291cmNlLmxlbmd0aCA9PSAwICYmICF0aGlzLlNvdXJjZUZpcnN0QmluZClcclxuICAgICAgICAgICAgdGhpcy5Cb3VuZFNvdXJjZSA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLlNvdXJjZUZpcnN0QmluZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBDYWNoZSBsb2NhbGUgcGVyIGV2aXRhcmUgZGkgcmlmYXJlIGRlaSByZWdleC5tYXRjaCBvZ25pIHNhbnRhIHZvbHRhXHJcbiAgICAgICAgaWYgKHRoaXMuU291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5Cb3VuZFNvdXJjZSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuQmluZENoZWNraW5nR3JvdXBzLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZUJpbmRDaGVja2luZ0dyb3VwcygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuQmluZFByb3BlcnRpZXMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmV2YWx1YXRlQmluZFByb3BlcnRpZXMoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEJsb2NjbyBwZXIgZ2VuZXJhcmUgbGEgZGVzY3JpemlvbmUgZmluYWxlIGRpIHVuIGVsZW1lbnRvXHJcbiAgICAgICAgICAgIHRoaXMuU291cmNlLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBBZ2dpdW5nbyBhbGxhIEJvdW5kU291cmNlIGluIGZvcm1hdG8gc3RhbmRhcmQgS2V5VmFsdWVcclxuICAgICAgICAgICAgICAgIHRoaXMuQm91bmRTb3VyY2UucHVzaCh0aGlzLnRyYW5zZm9ybVNvdXJjZUl0ZW0ocykpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIFBvc3QgdHJ5YmluZCBzZSBjJ8OoIHVuIG1vZGVsbG8gYXNzb2NpYXRvIHJpY2FsY29sbyBsJyoqRXZhbHVhdGVkTW9kZWwqKlxyXG4gICAgICAgICAgICBpZih0aGlzLk1vZGVsKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuQm91bmRTb3VyY2UuZmluZCh0ID0+IHQuaWQgPT0gdGhpcy5Nb2RlbCk/LmRlc2NyaXB0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogVmFsdXRhIGlsIGNvbnRlbnV0byBkZWxsYSB2YXJpYWJpbGUgQmluZENoZWNraW5nR3JvdXBzICovXHJcbiAgICBwcml2YXRlIGV2YWx1YXRlQmluZENoZWNraW5nR3JvdXBzKCkge1xyXG4gICAgICAgIC8vIEJsb2NjbyBwZXIgdGlyYXJlIGZ1b3JpIGxlIGNvbmRpemlvbmkgc2NyaXR0ZSB0aXBvIC0tPiA6cHJvcD8oUm9iYSBjb24ge3Byb3B9KVxyXG4gICAgICAgIHZhciBpZmZlZE1hdGNoZXMgPSB0aGlzLkRpc3BsYXkubWF0Y2goLzooW2Etel0rKVxcP1xcKChbXlxcKFxcKV0rKVxcKS9nKTtcclxuICAgICAgICBpZiAoaWZmZWRNYXRjaGVzKSB7XHJcbiAgICAgICAgICAgIGlmZmVkTWF0Y2hlcy5mb3JFYWNoKG0gPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gU3Rlc3NhIHJlZ2V4IGRpIHNvcHJhIG1hIGlsIHRhZyBcImlcIiBzZXJ2ZSBwZXIgdGlyYXJlIGZ1b3JpIGkgc2luZ29saSBjYXB0dXJpbmcgZ3JvdXAgZSBwZXIgcXVhbGNoZSBtb3Rpdm8gXHJcbiAgICAgICAgICAgICAgICAvLyBuZXcgUmVnRXhwKGJhc2VSZWdleCwgXCJnXCIpIG5vbiBmdW56aW9uYSBxdWluZGkgbm9uIGhvIHBvdHV0byByYXppb25hbGl6emFybG9cclxuICAgICAgICAgICAgICAgIGxldCBncm91cHMgPSBtLm1hdGNoKC86KFthLXpdKylcXD9cXCgoW15cXChcXCldKylcXCkvaSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkJpbmRDaGVja2luZ0dyb3Vwcy5wdXNoKHsgZ2xvYmFsOiBtLCBwcm9wOiBncm91cHNbMV0sIHdoZW5leGlzdHM6IGdyb3Vwc1syXSB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBWYWx1dGEgaWwgY29udGVudXRvIGRlbGxhIHZhcmlhYmlsZSBCaW5kUHJvcGVydGllcyAqL1xyXG4gICAgcHJpdmF0ZSBldmFsdWF0ZUJpbmRQcm9wZXJ0aWVzKCkge1xyXG4gICAgICAgIC8vIEJsb2NjbyBwZXIgdGlyYXJlIGZ1b3JpIGxlIHByb3ByaWV0w6Agc2NyaXR0ZSB0aXBvIC0tPiB7cHJvcH1cclxuICAgICAgICB2YXIgbWF0Y2hlcyA9IHRoaXMuRGlzcGxheS5tYXRjaCgve1thLXpdK30vZ2kpO1xyXG4gICAgICAgIGlmIChtYXRjaGVzKVxyXG4gICAgICAgICAgICBtYXRjaGVzLmZvckVhY2gobSA9PiB7IHRoaXMuQmluZFByb3BlcnRpZXMucHVzaCh7IGdsb2JhbDogbSwgcHJvcDogbS5zdWJzdHJpbmcoMSwgbS5sZW5ndGggLSAxKSB9KTsgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFzZm9ybWEgdW4gb2dnZXR0byBkZWxsYSBTb3VyY2UgYWxsYSBzdWEgdmVyc2lvbmUgXCJudW92YVwiIGJhc2FuZG9zaSBzdWxsZSBpbmZvcm1hemlvbmkgc3UgZ3J1cHBpIGUgcHJvcHJpZXTDoFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gaXRlbSBPZ2dldHRvIGRhIHRyYXNmb3JtYXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHt7aWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZ319IE9nZ2V0dG8gZmluYWxlIHRyYXNmb3JtYXRvXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdHJhbnNmb3JtU291cmNlSXRlbShzOiBhbnkpOiB7aWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZ30ge1xyXG4gICAgICAgIC8vIFBhcnRvIHNlbXByZSBkYWxsYSB2YXJpYWJpbGUgZGkgRGlzcGxheSwgcG9pIHNvc3RpdHVpc2NvIHBlenpvIHBlciBwZXp6b1xyXG4gICAgICAgIGxldCBkZXNjID0gdGhpcy5EaXNwbGF5O1xyXG5cclxuICAgICAgICAvLyBUYWdsaW8gbyBtYW50ZW5nbyBsZSBjb25kaXppb25pIGluIGJhc2UgYWxsYSBwcm9wcmlldMOgIHN1IGN1aSBmYXJlIGNoZWNrXHJcbiAgICAgICAgLy8gRG9wb2RpY2jDqSBzY3Jpdm8gdHV0dGUgbGUgcHJvcHJpZXTDoFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5CaW5kQ2hlY2tpbmdHcm91cHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHQgPSB0aGlzLkJpbmRDaGVja2luZ0dyb3Vwc1tpXTtcclxuICAgICAgICAgICAgZGVzYyA9IGRlc2MucmVwbGFjZSh0Lmdsb2JhbCwgKHNbdC5wcm9wXSAhPSBudWxsICYmIHNbdC5wcm9wXSAhPSB1bmRlZmluZWQpID8gdC53aGVuZXhpc3RzIDogXCJcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuQmluZFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHQgPSB0aGlzLkJpbmRQcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgICAgICBkZXNjID0gZGVzYy5yZXBsYWNlKHQuZ2xvYmFsLCBzW3QucHJvcF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHsgaWQ6IHNbdGhpcy5JZEZpZWxkXSwgZGVzY3JpcHRpb246IGRlc2MgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBpbCBjb21vcG5lbnRlIGluIHF1ZXN0aW9uZSDDqCBpbiBncmFkbyBkaSBnZXN0aXJlIG5nQ29udHJvbCBudWxsaS4gXHJcbiAgICAgKiBEaSBkZWZhdWx0IMOoICoqZmFsc2UqKlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gKip0cnVlKiogc2UgZ2VzdGlzY28gbmdDb250cm9sIG51bGxpLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBoYW5kbGVOdWxsTmdDb250cm9sKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgLy8gQSB2b2x0ZSBuZWxsJ25nT25Jbml0IG5vbiBjaSBwYXNzYSBxdWluZGkgbG8gbWV0dG8gc2lhIHF1aSBzaWEgbmVsbCdhZnRlcnZpZXdpbml0LCBwZW5zbyBjaGUgdmFsZ2EgcGVyIGkgY29tcG9uZW50aSBkaSB0ZXJ6ZSBwYXJ0aVxyXG4gICAgICAgIC8vIGNoZSBzaSBjb2xsZWdhbm8gcGVyIGkgY2F6emkgbG9ybyBhbCBmb3JtIGVjYywgcXVpbmRpIGxhIHBhcnRlIHNvcHJhIG5vbiBzZXJ2ZS4uLiBCT0hcclxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRWYWxpZGF0b3IoKTtcclxuXHJcbiAgICAgICAgLy9JbCBub21lIG5vbiBjJ8OoIHNlIG1ldHRvIHN0YW5kYWxvbmUgOiB0cnVlIChDSEUgTk9OIMOpIERBIE1FVFRFUkUpXHJcbiAgICAgICAgLy9EYXRvIGNoZSBhbmNoZSBpbCBjb250cm9sbG8gZXN0ZXJubyB2aWVuZSBjb25zaWRlcmF0byBjb21lIGNvbXBvbmVudGUgZGVsIGZvcm0sIG5vbiBwb3NzbyBiYXNhcm1pIHNvbG8gc3VsIG5vbWUgbWEgZGV2byBhZ2dpdW5nZXJlIHVuIHRhZy4gSW4gcXVlc3RvIGNhc28gXCJfaW50ZXJuYWxcIlxyXG4gICAgICAgIC8vIEFUVEVOWklPTkU6IFFVQUxTSUFTSSBTSUEgSUwgTU9USVZPLCBTRSBTVE8gQ09TTyBWSUVORSBTUE9TVEFUTyBEQUxMIG5nT25Jbml0IE5PTiBGVU5aSU9OQSBQSVUgTlVMTEFcclxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wubmFtZSlcclxuICAgICAgICAgICAgdGhpcy5HZW5lcmF0ZWROYW1lID0gdGhpcy5uZ0NvbnRyb2wubmFtZS50b1N0cmluZygpICsgXCJfaW50ZXJuYWxcIjtcclxuXHJcbiAgICAgICAgLy8gQVRURU5aSU9ORTogUVVBTFNJQVNJIFNJQSBJTCBNT1RJVk8sIFNFIFNUTyBDT1NPIFZJRU5FIFNQT1NUQVRPIERBTEwgbmdPbkluaXQgTk9OIEZVTlpJT05BIFBJVSBOVUxMQVxyXG4gICAgICAgIGlmICh0aGlzLkZvcm0pIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmZvcm1IYXNCZW5uQm91bmQgJiYgdGhpcy52YWxpZGF0aW9uQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Gb3JtLmFkZENvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1IYXNCZW5uQm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBRdWFuZG8gdW4gZm9ybSB2aWVuZSBzdWJtaXR0YXRvIGxhIHZhcmlhYmlsZSBGb3JtLnN1Ym1pdHRlZCB2aWVuZSBhc3NlZ25hdGEgYWxsJ2lucHV0IFtzdWJtaXR0ZWRdIGRlbCB2YWwtY29udHJvbFxyXG4gICAgICAgICAgICAvLyBFc3NlbmRvIGNoZSBwZXLDsiBsYSBDRCDDqCBPblB1c2ggcGVyIGRpcmUgYWQgQW5ndWxhciBjaGUgbCdJbnB1dCDDqCBjYW1iaWF0byBlIHBlcm1ldHRlcmUgaSBzaWRlZmZlY3RzIGRpIGFzc2VnbmFyZSBbc3VibWl0dGVkXVxyXG4gICAgICAgICAgICAvLyBkZXZvIGF0dGFjY2FybWkgYWwgc3VibWl0IGF0dHVhbGUgZGVsIGZvcm0gZSBwcmltYSBkaSBlc2VndWlybG8gZGV2byBtYXJjYXJlIGlsIGNvbXBvbmVudGUgcGVyIGlsIGNoZWNrXHJcbiAgICAgICAgICAgIGxldCBvcmlnRnVuYyA9IHRoaXMuRm9ybS5vblN1Ym1pdDtcclxuICAgICAgICAgICAgdmFyIGZvcm1PdXRzaWRlUmVmID0gdGhpcy5Gb3JtO1xyXG4gICAgICAgICAgICB0aGlzLkZvcm0ub25TdWJtaXQgPSAoZXYpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdGdW5jLmFwcGx5KGZvcm1PdXRzaWRlUmVmKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZSBzb25vIGluIG1vZGFsaXTDoCBkZXRhdGNoZWQgZGV2byByaW11b3ZlcmUgbWFudWFsbWVudGUgcXVlc3RvIGNvbnRyb2xsbyBxdWFuZG8gZW50cm8gbmVsbGEgZGlzcG9zZSwgYWx0cmltZW50aSBzZSBwb2kgbmUgYW5kYXNzaSBhIHJpYWdnaXVuZ2VyZVxyXG4gICAgICogdW4gYWx0cm8gY29uIGxvIHN0ZXNzbyBcIm5hbWVcIiBtYSBtYWdhcmkgcmVzZXR0YXRvLCBBbmd1bGFyIGxvIHJlLWlkcmF0ZXJlYmJlIGNvbiBpIHZhbG9yaSBwcmVjZWRlbnRpIG5vbm9zdGFudGUgaWwgbW9kZWxsbyBmb3NzZSB2dW90b1xyXG4gICAgICovXHJcbiAgICBuZ09uRGVzdHJveSgpe1xyXG4gICAgICAgIGlmKHRoaXMuZGV0YXRjaGVkRnJvbWZvcm0gJiYgdGhpcy5Gb3JtKVxyXG4gICAgICAgICAgICB0aGlzLkZvcm0ucmVtb3ZlQ29udHJvbCh0aGlzLnZhbGlkYXRpb25Db250cm9sKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogRWxhYm9yYSBpIHZhbGlkYXRvcmkgaW5pZXR0YXRpIGUgY2FwaXNjZSBzZSBpbCB2YWxvcmUgw6ggb2JibGlnYXRvcmlvIG8gbWVubyAqL1xyXG4gICAgY2hlY2tSZXF1aXJlZFZhbGlkYXRvcigpIHtcclxuICAgICAgICAvLyBjb250cm9sbG8gc2Ugw6ggc2V0dGF0byB1biByZXF1aXJlZCBwZXIgZGVjaWRlcmUgaW4gbWFuaWVyYSBjb25kaXppb25hbGUgc2UgdXRpbGl6emFyZSBpbCB2YWxpZGF0b3JlIHJlcXVpcmVkIG5lbCBjb21wb25lbnRlIGludGVybm9cclxuICAgICAgICAvLyBMbyBmYWNjaW8gcXVpIGUgbm9uIGluIHVuIGV2ZW50dWFsZSBuZ09uSW5pdCBvIGNvc3RydXR0b3JlIHBlcmNow6kgbmdPbkluaXQgbm9uIHNlbXByZSB2aWVuZSBjaGlhbWF0byBlIGRhIGNvc3RydXR0b3JlIGlsIHZhbGlkYXRvcmUgbm9uIGhhIGFuY29yYSBpbCB2YWxvcmUgZ2l1c3RvXHJcbiAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRvcnMgJiYgdGhpcy5fdmFsaWRhdG9ycy5zb21lKGVsZW0gPT4gZWxlbSBpbnN0YW5jZW9mIFJlcXVpcmVkVmFsaWRhdG9yICYmIGVsZW0ucmVxdWlyZWQpKVxyXG4gICAgICAgICAgICB0aGlzLlJlcXVpcmVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5uZ0NvbnRyb2wpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkVmFsaWRhdG9yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEhlbHBlciBjaGUgY29sbGVnYSBsYSBmdW56aW9uZSBkaSByZXNldCBkZWwgY29udHJvbGxvIGZvcm0gYWwgY29udHJvbGxvIGRpIHZhbGlkYXppb25lIHNvdHRvc3RhbnRlICovXHJcbiAgICBwcml2YXRlIGJpbmRSZXNldEZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vZmFjY2lvIGluIG1vZG8gY2hlIHNlIGNoaWFtbyBpbCByZXNldCBkZWwgY29udHJvbGxvIChvIGRlbGxhIGZvcm0pIGRhbGwnZXN0ZXJubyBzaSByZXNldHRpIGFuY2hlIGlsIGNvbnRyb2xsbyBuYXRpdm9cclxuICAgICAgICBjb25zdCBvcmlnRnVuYyA9ICg8YW55PnRoaXMubmdDb250cm9sLmNvbnRyb2wpLl9fb3JpZ2luYWxfcmVzZXRfXyB8fCB0aGlzLm5nQ29udHJvbC5jb250cm9sLnJlc2V0O1xyXG4gICAgICAgIHZhciBuZ0NvbnRyb2xfb3V0c2lkZVJlZmVyZW5jZSA9IHRoaXMubmdDb250cm9sLmNvbnRyb2w7XHJcbiAgICAgICAgdmFyIHZhbGlkYXRpb25Db250cm9sX291dHNpZGVSZWZlcmVuY2UgPSB0aGlzLnZhbGlkYXRpb25Db250cm9sLmNvbnRyb2w7XHJcblxyXG4gICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wucmVzZXQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIG9yaWdGdW5jLmFwcGx5KG5nQ29udHJvbF9vdXRzaWRlUmVmZXJlbmNlKTtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbkNvbnRyb2xfb3V0c2lkZVJlZmVyZW5jZS5yZXNldCgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vUGVyIGNvbnNlbnRpcmUgcmljaGlhbWkgbXVsdGlwbGkgZGkgcXVlc3RhIGZ1bnppb25lIHByZW5kZW5kbyBzZW1wcmUgbGEgZml1bnppb25lIGRpIHJlc2V0IGJhc2VcclxuICAgICAgICAoPGFueT50aGlzLm5nQ29udHJvbC5jb250cm9sKS5fX29yaWdpbmFsX3Jlc2V0X18gPSBvcmlnRnVuY1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKG9iaiA9PSBudWxsICYmIHRoaXMuZmlyc3RCaW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyc3RCaW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuTW9kZWwgPSBvYmo7XHJcblxyXG4gICAgICAgIC8vUGVyIHN2ZWdsaWFyZSBBbmd1bGFyLiBJbCB2YWxvcmUgY2hlIGVudHJhIHBvdHJlYmJlIGVzc2VyZSB2YWxpZG8vbm9uIHZhbGlkbyBlIHF1ZXN0byBsbyBiaW5kYSBhIHR1dHRvLCBmb3JtIGNvbXByZXNvXHJcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKVxyXG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuTW9kZWwpXHJcbiAgICAgICAgICAgIHRoaXMub25Ob3ROdWxsVmFsdWVTZXQoKTtcclxuXHJcbiAgICAgICAgLy8gbWFya0ZvckNoZWNrIG5vbiB2YSBiZW5lIGluIHF1YW50byBhcnJpdmFubyBwb3NzaWJpbG1lbnRlIDIgdXBkYXRlIHN1IHVuIHNvbG8gY2ljbG8gZGkgc3RhY2tcclxuICAgICAgICAvLyBzZXRUaW1lKnV0IGNoZSB3cmFwcGEgdHV0dG8gbm9uIHZhIGJlbmUgc2VubsOyIHNwYW1tYSBkZWxsZSBjaGFuZ2UgZGV0ZWN0aW9uIGEgc3VvbiBkaSBpbnRlcnZhbCBjaGUgcmFsbGVudGFubyB0YW50aXNzaW1vIGwnYXBwXHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdHJhIGludGVybmFtZW50ZSBpbCBjb21wb25lbnRlIGRpIHZhbGlkYXppb25lLCBuZSBpbXBvc3RhIGkgdmFsaWRhdG9yaSBlIGNvbGxlZ2EgaWwgRm9ybSwgc2UgcHJlc2VudGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtOZ01vZGVsfSBjb21wIEVsZW1lbnRvIEhUTUwgbWFyY2F0byBjb24gXCIjdmFsaWRhdGlvbkNvbnRyb2xcIlxyXG4gICAgICovXHJcbiAgICByZWdpc3RlclZhbENvbXAoY29tcDogTmdNb2RlbCkge1xyXG4gICAgICAgIGlmIChjb21wKSB7XHJcbiAgICAgICAgICAgIC8vIMOIIGFycml2YXRvIHVuIG51b3ZvIHZhbGlkYXRpb25Db250b3JsIChzdWNjZWRlIHNvbG8gbmVsIGZvcm0tc2VsZWN0IHF1YW5kbyBjYW1iaWEgbGEgc291cmNlIGRhIDAgZWxlbWVudGkgLyBudWxsIGFkIE4gZWxlbWVudGksIHF1aW5kaSBhbCBtYXNzaW1vIHVuYSB2b2x0YSkgXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25Db250cm9sICYmIHRoaXMuRm9ybSlcclxuICAgICAgICAgICAgICAgIHRoaXMuRm9ybS5yZW1vdmVDb250cm9sKHRoaXMudmFsaWRhdGlvbkNvbnRyb2wpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uQ29udHJvbCA9IGNvbXA7XHJcblxyXG4gICAgICAgICAgICAvL1F1ZXN0YSBzZXJ2ZSBwZXIgcGFzc2FyZSBhdmFudGkgaSB2YWxpZGF0b3JpXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkNvbnRyb2wuY29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuX3ZhbGlkYXRvcnMpO1xyXG5cclxuICAgICAgICAgICAgLy9TZSBzb25vIHN0YWNjYXRvIGRhbCBGb3JtICh2dW9sIGRpcmUgY2hlIHNvbm8gYWQgZXNlbXBpbyBkZW50cm8gdW4gbmctdGVtcGxhdGUpIGFnZ2l1bmdvIGlsIGNvbnRyb2xsbyBhbCBGb3JtIHBhc3NhdG8gY29tZSBpbnB1dCAoY29udGV4dCBkZWwgdGVtcGxhdGUpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRldGF0Y2hlZEZyb21mb3JtICYmIHRoaXMuRm9ybSAmJiAhdGhpcy5mb3JtSGFzQmVubkJvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkZvcm0uYWRkQ29udHJvbCh0aGlzLnZhbGlkYXRpb25Db250cm9sKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtSGFzQmVubkJvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kUmVzZXRGdW5jdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgLy9JIHZhbC1yb2JhIHF1ZXN0byBsbyBmYW5ubyBhdXRvbWF0aWNhbWVudGUgZGVudHJvLi4uIGdsaSBhbHRyaSBubyAoZXMuIHNlbXBsaWNlIGlucHV0IGNoZWNrYm94KVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkaXR5Rm9yTmF0aXZlSW5wdXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZ2dpb3JuYSBpbCB2YWxvcmUgZSBsYSB2YWxpZGl0w6AgZGVsbCdpbnB1dCBzb3R0b3N0YW50ZS4gTm9uIHZpZW5lIGNoaWFtYXRvIHBlciBpbnB1dCBuYXRpdmkgY29tZSBsZSBjaGVja2JveFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlZFZhbHVlIEZvcnphIGwnYWdnaW9ybmFtZW50byBhbmNoZSBzZSBub24gw6ggdW4gaW5wdXQgbmF0aXZvIChpbnB1dCBuYXRpdm8gPSBjaGVja2JveCwgYWQgZXNlbXBpbylcclxuICAgICAqL1xyXG4gICAgdXBkYXRlVmFsaWRpdHlGb3JOYXRpdmVJbnB1dChmb3JjZWRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKGZvcmNlZFZhbHVlIHx8IHRoaXMubmF0aXZlSW5wdXQpXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkNvbnRyb2wuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKiBDbGFzc2ljbyBcInNwYXJhIGZ1b3JpXCIuIE1hbnRlbmdvIGxvIHN0ZXNzbyBub21lIGRlbGwnZXZlbnRvIGRlaSA8dmFsLSo+IChpbnB1dENoYW5nZSkgcGVyIHJldHJvY29tcGF0aWJpbGl0w6AuXHJcbiAgICAgKiBcclxuICAgICAqIE5vbiBwb3NzbyB0ZW5lcmxvIHByb3RlY3RlZCBhbHRyaW1lbnRpIHBvc3NvIGVzZWd1aXJsbyBzb2xvIGRhbCAudHMgZSBub24gZGFsbCcgLmh0bWxcclxuICAgICAqL1xyXG4gICAgY2hhbmdlZChmb3JjZWRWYWx1ZTogYW55ID0gbnVsbCwgbWFya0ZvckNoZWNrOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShmb3JjZWRWYWx1ZSA9PSBudWxsID8gdGhpcy5Nb2RlbCA6IGZvcmNlZFZhbHVlKTtcclxuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQoZm9yY2VkVmFsdWUgPT0gbnVsbCA/IHRoaXMuTW9kZWwgOiBmb3JjZWRWYWx1ZSk7XHJcbiAgICAgICAgaWYgKG1hcmtGb3JDaGVjaylcclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKiBDbGFzc2ljbyBcInNwYXJhIGZ1b3JpXCIgc3VsIGZvY3VzLiBNYW50ZW5nbyBsbyBzdGVzc28gbm9tZSBkZWxsJ2V2ZW50byBkZWkgPHZhbC0qPiAoaW5wdXRDaGFuZ2UpIHBlciByZXRyb2NvbXBhdGliaWxpdMOgLlxyXG4gICAgICogXHJcbiAgICAgKiBOb24gcG9zc28gdGVuZXJsbyBwcm90ZWN0ZWQgYWx0cmltZW50aSBwb3NzbyBlc2VndWlybG8gc29sbyBkYWwgLnRzIGUgbm9uIGRhbGwnIC5odG1sXHJcbiAgICAgKi9cclxuICAgIGZvY3VzZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRGb2N1cy5lbWl0KGV2ZW50KTtcclxuICAgICAgICB0aGlzLmxvZyhcIkNvbnRyb2wgRm9jdXNlZCAtIFwiICsgdGhpcy5HZW5lcmF0ZWROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqIENsYXNzaWNvIFwic3BhcmEgZnVvcmlcIiBzdWxsYSBmaW5hbGl6emF6aW9uZSBkZWwgdmFsb3JlIGRlbGwnaW5wdXQgKGJsdXIgLyB0YXN0byBpbnZpbywgZWNjLi4uKS4gTWFudGVuZ28gbG8gc3Rlc3NvIG5vbWUgZGVsbCdldmVudG8gZGVpIDx2YWwtKj4gKGlucHV0Q2hhbmdlKSBwZXIgcmV0cm9jb21wYXRpYmlsaXTDoC5cclxuICAgICAqIFxyXG4gICAgICogTm9uIHBvc3NvIHRlbmVybG8gcHJvdGVjdGVkIGFsdHJpbWVudGkgcG9zc28gZXNlZ3VpcmxvIHNvbG8gZGFsIC50cyBlIG5vbiBkYWxsJyAuaHRtbFxyXG4gICAgICovXHJcbiAgICBmaW5hbGl6ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dEZpbmFsaXplZC5lbWl0KCk7XHJcbiAgICAgICAgdGhpcy5sb2coXCJDb250cm9sIFZhbHVlIEZpbmFsaXplZCAtIFwiICsgdGhpcy5HZW5lcmF0ZWROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YW1wYSB1biBsb2cgYSBjb25zb2xlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIE1lc3NhZ2dpbyBkYSBzdGFtcGFyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbG9nKG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLkZBVl9ERUJVR19NT0RFKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkBmb3Jtcy1hbmQtdmFsaWRhdGlvbnM6IFwiICsgbWVzc2FnZSlcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgYWJzdHJhY3Qgb25Ob3ROdWxsVmFsdWVTZXQoKTogdm9pZDtcclxufSJdfQ==
484
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLWNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9iYXNlLWZvcm0tY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFvRCxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSXZILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7O0FBSTFELGtFQUFrRTtBQUVsRSxNQUFNLE9BQWdCLGVBQWU7SUFnTGpDLDJCQUEyQjtJQUMzQixZQUFzQixHQUFzQixFQUFTLFNBQW9CLEVBQVksV0FBdUIsRUFBc0IsRUFBd0IsRUFBcUIsVUFBNEIsRUFBNkMsYUFBcUIsRUFBOEMsY0FBdUIsRUFBVSxjQUF1QixLQUFLO1FBQWxXLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVMsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUFZLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQXNCLE9BQUUsR0FBRixFQUFFLENBQXNCO1FBQXFCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQTZDLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQThDLG1CQUFjLEdBQWQsY0FBYyxDQUFTO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBL0t4WDs7Ozs7V0FLRztRQUNLLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFFbEMsb0RBQW9EO1FBQzdDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFXakMseUVBQXlFO1FBQy9ELHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUU1Qzs7OztXQUlHO1FBQ08sc0JBQWlC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RSxJQUFJLEVBQUU7Z0JBR3RDLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0csVUFBVTtzQkFBbkIsTUFBTTtnQkFHRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sLCBOZ0Zvcm0sIE5nTW9kZWwsIFJlcXVpcmVkVmFsaWRhdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBPcHRpb25hbCwgSW5qZWN0LCBEaXJlY3RpdmUsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIC8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBDb21wb25lbnRDb250ZXh0IH0gZnJvbSBcIkBlc2ZhZW56YS9hY2Nlc3MtY29udHJvbFwiO1xyXG5pbXBvcnQgeyBBQ09fQ1VTVE9NS0VZLCBGQVZfREVCVUdfTU9ERSB9IGZyb20gJy4uL3Rva2Vucyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKiogQ29tcG9uZW50ZSBiYXNlIGRhIGN1aSB0dXR0aSBpIGNvbXBvbmVudGkgRm9ybSBpbXBsZW1lbnRhbm8gKi9cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRm9ybUNvbnRyb2wgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNDk4OFxyXG4gICAgICogVEw6RFI7IElsIHByaW1vIHZhbG9yZSBwYXNzYXRvIGFsIHdyaXRlVmFsdWUgw6ggbnVsbG8gcGVyY2jDqSBxdWFuZG8gaSBjYWduYWNjaSBmYW5ubyBuZXcgRm9ybUNvbnRyb2woKVxyXG4gICAgICogc2NyaXZvbm8gdW4gd3JpdGVWYWx1ZSBudWxsby4uLiBxdWluZGkgYWwgcHJpbW8gYmluZGluZyBzYWx0byBsJ2luaXppYWxpenphemlvbmUgc2UgaG8gbGEgY29wcGlhIG51bGwtZmlyc3RCaW5kXHJcbiAgICAgKiBwb2kgbWV0dGVuZG8gZmlyc3RCaW5kIGEgZmFsc2UgZGkgbMOsIGluIHBvaSBmdW56aW9ubyBjb21lIGRldm8uIFZpc3RhIGxhIGNhc2lzdGljYSBldml0byBlc3NlbnppYWxtZW50ZSBtZXTDoCBkZXRlY3RDaGFuZ2VzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZmlyc3RCaW5kOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogSW5kaWNhIHNlIGlsIGNhbXBvIMOoIG9iYmxpZ2F0b3JpbyBpIG9wemlvbmFsZSAqL1xyXG4gICAgcHVibGljIFJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIE1vZGVsbG8gcmFwcHJlc2VudGF0byBkYSBxdWVzdG8gY2FtcG8gKi9cclxuICAgIHB1YmxpYyBNb2RlbDogYW55O1xyXG5cclxuICAgIC8qKiBWYWxvcmUgZGVsIE1vZGVsbG8gKi9cclxuICAgIHB1YmxpYyBFdmFsdWF0ZWRNb2RlbDogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBOb21lIGdlbmVyYXRvIHBlciBpbCBjb250cm9sbG8gaW50ZXJuby4gRGkgZGVmYXVsdCDDqCBpbCBub21lIGRlbCBjb250cm9sbG8gZXN0ZXJubyBjb24gbCdhZ2dpdW50YSBkaSBcIl9pbnRlcm5hbFwiLiBTZXJ2ZSBwZXIgZXZpdGFyZSBjcm9zcy1iaW5kICovXHJcbiAgICBwdWJsaWMgR2VuZXJhdGVkTmFtZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2UgaWwgRm9ybSBjaGUgY29udGllbmUgcXVlc3RvIGNhbXBvIMOoIGdpw6Agc3RhdG8gcmVnaXN0cmF0byAqL1xyXG4gICAgcHJvdGVjdGVkIGZvcm1IYXNCZW5uQm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBxdWVzdG8gY2FtcG8gw6ggc3RhY2NhdG8gZGFsIEZvcm0sIGFkIGVzZW1waW8gbmVsIGNhc28gc2lhIGluIHVuIG5nLXRlbXBsYXRlIHByb2lldHRhdG8gbmVsIGZvcm0uXHJcbiAgICAgKiBcclxuICAgICAqIEluIHF1ZWwgY2FzbyBsYSB2YXJpYWJpbGUgKipGb3JtKiogZGVsIGNvbXBvbmVudGUgZGV2J2Vzc2VyZSB2YWxvcml6emF0YVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZGV0YXRjaGVkRnJvbWZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJvdGVjdGVkIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJvdGVjdGVkIG9uVG91Y2hlZCA9ICgpID0+IHsgfTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBWZWRpIGdldHRlciBlIHNldHRlciAqL1xyXG4gICAgcHJpdmF0ZSBfcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1YWxvcmEgY2kgZm9zc2UgdW4gY29udGVzdG8gY29sbGVnYXRvIHF1ZXN0YSB2YXJpYWJpbGUgaWRlbnRpZmljYSBzZSBTb25vIGwnT3duZXIgbyBtZW5vLlxyXG4gICAgICogXHJcbiAgICAgKiBTZSBub24gbG8gc29ubywgaWwgY2FtcG8gcmlzdWx0ZXLDoCBpbiBzb2xhIGxldHR1cmEgXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgQXBwQ29udGV4dE93bmVyc2hpcDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIFN1YmplY3QgYSBjdWkgbCdvZ2dldHRvIGludGVybm8gc2kgY29sbGVnYSBwZXIgZWZmZXR0dWFyZSBpbCBmb2N1cyBkZWxsJ2VsZW1lbnRvIGlucHV0IHNvdHRvc3RhbnRlICovXHJcbiAgICBASW5wdXQoKSBGb2N1c1N1YmplY3Q6IFN1YmplY3Q8dm9pZD47XHJcblxyXG4gICAgLyoqIE1vZGFsaXTDoCBpbiBjdWkgdmllbmUgbW9zdHJhdG8gaWwgY2FtcG8sIDEtMSByaXNwZXR0byBhbGxlIGRlZmluaXppb25pIGRpIEFuZ3VsYXIgTWF0ZXJpYWwgICovXHJcbiAgICBASW5wdXQoKSBGaWVsZEFwcGVhcmVuY2U6IFwibGVnYWN5XCIgfCBcInN0YW5kYXJkXCIgfCBcImZpbGxcIiB8IFwib3V0bGluZVwiID0gXCJvdXRsaW5lXCI7XHJcblxyXG4gICAgLyoqIFV0aWxpenphIG8gbWVubyBpbCBMYXlvdXQgZGkgdW4gZm9ybSAoTGFiZWwgY29uIGlucHV0IGRpIGZpYW5jbyksIHNlIGZhbHNlIG1vc3RyYSBzb2xvIGwnaW5wdXQgKi9cclxuICAgIEBJbnB1dCgpIEZvcm1MYXlvdXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBJbmRpY2EgY2hlIGxhIHBhcnRlIGlucHV0IGRlbCBjb250cm9sbG8gZGV2J2Vzc2VyZSB1bmEgbGFiZWwgcmVhZG9ubHkgZSBsYSBwYXJ0ZSBsYWJlbCBkaSB0aXRvbG8gZGV2J2Vzc2VyZSBpbiBib2xkLiBQZXIgdXRpbGl6emFyZSB1biBzb2xvIGNvbXBvbmVudGUgc2lhIHBlciBsYSBtb2RpZmljYSBjaGUgcGVyIGlsIGRldHRhZ2xpbyAqL1xyXG4gICAgQElucHV0KCkgRGlzcGxheU1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogRGVmaW5pc2NlIHNlIHJpY2hpYW1hcmUgbCdFdmVudEVtaXR0ZXIgKippbnB1dENoYW5nZSoqIGluIG1hbmllcmEgY2xhc3NpY2EgKHRydWUpIG8gc29sbyBwZXIgbGEgY2hhbmdlIGNvbnNpZGVyYXRlIGRlZmluaXRpdmUgY29tZSB0YXN0byBpbnZpbyAvIGJsdXIgLyBlY2MuLi4gKGZhbHNlKSAqL1xyXG4gICAgQElucHV0KCkgRW1pdFBlbmRpbmdDaGFuZ2VzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogQXR0aXZhIG8gZGlzYXR0aXZhIGxhIHZhbGlkYXppb25lIHBlciBxdWVzdG8gY29tcG9uZW50ZSAqL1xyXG4gICAgQElucHV0KCkgVmFsaWRhdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIFBsYWNlaG9sZGVyIHBlciBxdWFuZG8gbCdpbnB1dCDDqCB2dW90byAqL1xyXG4gICAgQElucHV0KCkgUGxhY2Vob2xkZXI6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgLyoqIENsYXNzZSBleHRyYSBwZXIgaWwgZm9ybS1ncm91cCBpbiBjdWkgdmllbmUgd3JhcHBhdG8gbCdpbnB1dCAqL1xyXG4gICAgQElucHV0KCkgRm9ybUdyb3VwQ2xhc3M6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgLyoqIE1lc3NhZ2dpbyBkYSBtb3N0cmFyZSBxdWFuZG8gbGEgdmFsaWRhemlvbmUgZmFsbGlzY2UgcGVyIHF1ZXN0byBjb21wb25lbnRlLiBEaSBkZWZhdWx0IHZpZW5lIHByb3Bvc3RhIGRhbGxhIGxpYnJlcmlhICovXHJcbiAgICBASW5wdXQoKSBGYWlsZWRWYWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogSW5wdXQgY2hlIGZvcnphIGwnaW52YWxpZGl0w6AgZGVsIGNvbXBvbmVudGUgKi9cclxuICAgIEBJbnB1dCgpIEZvcmNlZEVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIE1vc3RyYSB1biB0ZXN0byBhIHNpbmlzdHJhIGRlbGwnaW5wdXQgKEZvcm1MYXlvdXQgcGVybWV0dGVuZG8pICovXHJcbiAgICBASW5wdXQoKSBMYWJlbDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogY29sLW1kLVggcGVyIGxhIGxhYmVsICovXHJcbiAgICBASW5wdXQoKSBMYWJlbENvbFdpZHRoOiBudW1iZXIgPSA0O1xyXG5cclxuICAgIC8qKiBjb2wtbWQtWCBwZXIgbCdpbnB1dCAqL1xyXG4gICAgQElucHV0KCkgSW5wdXRDb2xXaWR0aDogbnVtYmVyID0gODtcclxuXHJcbiAgICAvKiogSW5kaWNhIHNlIMOoIGwndWx0aW1vIGNvbXBvbmVudGUgZGkgdW4gZm9ybSAoc2VydmUgcGVyIHJpbXVvdmVyZSBpbCBtYXJnaW5lIGZpbmFsZSkgKi9cclxuICAgIEBJbnB1dCgpIExhc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogQXNzb2NpYSBpbCBjb21wb25lbnRlIEZvcm0gYSBxdWVzdG8gaW5wdXQgKi9cclxuICAgIEBJbnB1dCgpIEZvcm06IE5nRm9ybSA9IG51bGw7XHJcblxyXG4gICAgLyoqIFNvcmdlbnRlIGRhIGN1aSBzY2VnbGllcmUgdmFsb3JpIHBlciBpIGNvbXBvbmVudGkgRm9ybSBjaGUgbG8gY29uc2VudG9ubyAqL1xyXG4gICAgQElucHV0KCkgU291cmNlOiBhbnlbXTtcclxuXHJcbiAgICAvKiogTm9tZSBkZWxsYSBwcm9wcmlldMOgIGNoZSBjb250aWVuZSBsJ0lkIGRlZ2xpIG9nZ2V0dGkgYmluZGF0aSBuZWxsYSAqKlNvdXJjZSoqICovXHJcbiAgICBASW5wdXQoKSBJZEZpZWxkOiBzdHJpbmcgPSAnaWQnO1xyXG5cclxuICAgIC8qKiBUZW1wbGF0ZSBwZXIgdmlzdWFsaXp6YXJlIGxhIG1vZGFsaXTDoCAqKkRpc3BsYXlNb2RlKiogY29tZSB2dW9sZSBpbCBwcm9ncmFtbWF0b3JlIGZyb2NpbyBkaSB0dXJubyAqL1xyXG4gICAgQElucHV0KCkgRGlzcGxheU1vZGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzcHJlc3Npb25lIHNpbWlsLUFuZ3VsYXIgcGVyIGNhbWJpYXJlIGlsIHRlc3RvIGRlaSBjb21wb25lbnRpIGNoZSBzY2VsZ29ubyBpbCBwcm9wcmlvIG1vZGVsbG8gZGEgdW5hICoqU291cmNlKipcclxuICAgICAqIFxyXG4gICAgICogSWwgZnVuemlvbmFtZW50byDDqCBpZGVudGljbyBhbCBiaW5kZXIgZGkgYW5ndWxhciwgc29sbyBjb24gdW5hIGdyYWZmYSBpbnZlY2UgY2hlIDIuXHJcbiAgICAgKiDDiCBpbm9sdHJlIHBvc3NpYmlsZSBhZ2dpdW5nZXJlIHBlenppIGRpIGRlc2NyaXppb25lIGluIG1hbmllcmEgY29uZGl6aW9uYWxlIGNvbiBsYSBzaW50YXNzaSAqKjpwcm9wPyhQcm9wIHZhbGUge3Byb3B9KSoqXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIERpc3BsYXk6IHN0cmluZyA9ICd7ZGVzY3JpcHRpb259JztcclxuXHJcbiAgICAvKiogUmlzdWx0YXRvIGRlbGwndW5pb25lIGZyYSBsZSBpbmZvcm1hemlvbmkgZGVnbGkgb2dnZXR0aSBpbiAqKlNvdXJjZSoqIGUgbGUgaW1wb3N0YXppb25pIHNwZWNpZmljYXRlIG5lbGwnSW5wdXQgKipEaXNwbGF5KiogKi9cclxuICAgIHB1YmxpYyBCb3VuZFNvdXJjZTogeyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2Ugw6ggaWwgcHJpbW8gQmluZCBkZWxsYSBTb3VyY2UgKi9cclxuICAgIHByb3RlY3RlZCBTb3VyY2VGaXJzdEJpbmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3R0aWVuZSBpbCB2YWxvcmUgZGVsbGEgdmFyaWFiaWxlICoqX3JlYWRvbmx5KipcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59ICoqdHJ1ZSoqIHNlIHNvbGEgbGV0dHVyYSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWRvbmx5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fcmVhZG9ubHk7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcG9zdGEgaWwgdmFsb3JlIGRlbGxhIHZhcmlhYmlsZSAqKl9yZWFkb25seSoqIGdlc3RlbmRvIGFuY2hlIGlsIENvbnRlc3RvIGFwcGxpY2F0aXZvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgVmFsb3JlIGRhIGltcG9zdGFyZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBzZXQgUmVhZG9ubHkodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5BcHBDb250ZXh0T3duZXJzaGlwKVxyXG4gICAgICAgICAgICB0aGlzLl9yZWFkb25seSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVybWV0dGUgZGkgc2V0dGFyZSBpbiB1bmEgdm9sdGEgc29sbyBnbGkgaW5wdXQgTGFiZWxDb2xXaWR0aCBlIElucHV0Q29sV2lkdGgsIGJhc3RhIHNjcml2ZXJsbyBjb24gbGEgc2ludGFzc2kgXCJYIFlcIlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgSW5wdXQgbmVsIGZvcm1hdG8gXCJYIFlcIlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBzZXQgTGFiZWxJbnB1dFJhdGlvKGlucHV0OiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcmF0aW8gPSBpbnB1dC5zcGxpdCgvXFxzLyk7XHJcbiAgICAgICAgdGhpcy5MYWJlbENvbFdpZHRoID0gcGFyc2VJbnQocmF0aW9bMF0pO1xyXG4gICAgICAgIHRoaXMuSW5wdXRDb2xXaWR0aCA9IHBhcnNlSW50KHJhdGlvWzFdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogdmFsLXF1YWxjb3NhIGNoZSBmYSBlZmZldHRpdmFtZW50ZSBkYSBpbnB1dCwgbyBldmVudHVhbG1lbnRlIGlsIHNpbmdvbG8gaW5wdXQgaW4gY2FzaSBwYXJ0aWNvbGFyaSAoZXMgY2hlY2tib3gpICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGlvbkNvbnRyb2w6IE5nTW9kZWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWVyeSBzdWxsJ2VsZW1lbnRvICd2YWxpZGF0aW9uQ29udHJvbCcgY2hlIGZ1bnppb25hIGluIGFtYmllbnRlIHN0YXRpY29cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtOZ01vZGVsfSBjb21wIEVsZW1lbnRvIEhUTUwgbWFyY2F0byBjb24gXCIjdmFsaWRhdGlvbkNvbnRyb2xcIlxyXG4gICAgICovXHJcbiAgICBAVmlld0NoaWxkKFwidmFsaWRhdGlvbkNvbnRyb2xcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHNldCBfdmFsaWRhdGlvbkNvbnRyb2woY29tcDogTmdNb2RlbCkgeyB0aGlzLnJlZ2lzdGVyVmFsQ29tcChjb21wKTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUXVlcnkgc3VsbCdlbGVtZW50byAndmFsaWRhdGlvbkNvbnRyb2wnIGNoZSBmdW56aW9uYSBpbiBhbWJpZW50ZSBkaW5hbWljb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge05nTW9kZWx9IGNvbXAgRWxlbWVudG8gSFRNTCBtYXJjYXRvIGNvbiBcIiN2YWxpZGF0aW9uQ29udHJvbFwiXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoXCJ2YWxpZGF0aW9uQ29udHJvbFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZXQgdmFsaWRhdGlvbkNvbnRyb2xfc3RhdGljKGNvbXA6IE5nTW9kZWwpIHsgdGhpcy5yZWdpc3RlclZhbENvbXAoY29tcCk7IH07XHJcblxyXG4gICAgLyoqIEV2ZW50byBjaGlhbWF0byBhbGxhIG1vZGlmaWNhIGRlbCB2YWxvcmUgY29sbGVnYXRvIGEgcXVlc3RvIGNhbXBvICovXHJcbiAgICBAT3V0cHV0KCkgaW5wdXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgLyoqIEV2ZW50byBjaGlhbWF0byBhbCBmb2N1cyBkZWwgY2FtcG8gZGkgdGVzdG8vY29tYm8vcXVlbGNoZcOoLCByaWVtaXR0YSBsJ2V2ZW50byBvcmlnaW5hbGUgSmF2YXNjcmlwdCAqL1xyXG4gICAgQE91dHB1dCgpIGlucHV0Rm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgLyoqIEV2ZW50byBjaGlhbWF0byBhbCBmaW5hbGl6ZSBkZWwgY2FtcG8gZGkgdGVzdG8vY29tYm8vcXVlbGNoZcOoICovXHJcbiAgICBAT3V0cHV0KCkgaW5wdXRGaW5hbGl6ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgLyoqIENhY2hlIGRlbGxlIGNvbmRpemlvbmkgc2NyaXR0ZSB0aXBvIDpwcm9wPyhSb2JhIGNvbiB7cHJvcH0pICovXHJcbiAgICBwcml2YXRlIEJpbmRDaGVja2luZ0dyb3VwczogeyBnbG9iYWw6IHN0cmluZywgcHJvcDogc3RyaW5nLCB3aGVuZXhpc3RzOiBzdHJpbmcgfVtdID0gW11cclxuXHJcbiAgICAvKiogQ2FjaGUgZGVsbGUgcHJvcHJpZXTDoCBzY3JpdHRlIHRpcG8gLS0+IHtwcm9wfSAqL1xyXG4gICAgcHJpdmF0ZSBCaW5kUHJvcGVydGllczogeyBnbG9iYWw6IHN0cmluZywgcHJvcDogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCwgcHJvdGVjdGVkIF92YWxpZGF0b3JzOiBBcnJheTxhbnk+LCBAT3B0aW9uYWwoKSBwcml2YXRlIGFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgQE9wdGlvbmFsKCkgcHVibGljIEFwcENvbnRleHQ6IENvbXBvbmVudENvbnRleHQsIEBPcHRpb25hbCgpIEBJbmplY3QoQUNPX0NVU1RPTUtFWSkgcHJpdmF0ZSBBQ09fQ1VTVE9NS0VZOiBzdHJpbmcsIEBPcHRpb25hbCgpIEBJbmplY3QoRkFWX0RFQlVHX01PREUpIHByaXZhdGUgRkFWX0RFQlVHX01PREU6IGJvb2xlYW4sIHByaXZhdGUgbmF0aXZlSW5wdXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cclxuICAgICAgICBpZiAobmdDb250cm9sID09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmhhbmRsZU51bGxOZ0NvbnRyb2woKSlcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJuZ0NvbnRyb2wgbnVsbG8gcGVyIHF1YWxjaGUgbW90aXZvISBJbCA5MCUgZGVsbGUgZnVuemlvbmFsaXTDoCBkaSBxdWVzdG8gaW5wdXQgc2FyYW5ubyBkaXNhYmlsaXRhdGVcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1NlIG1pIGFycml2YSBsJ2luamVjdGFibGUgZGVsIGNvbnRlc3RvIHBvc3NvIGNhcGlyZSBzZSBxdWVzdG8gY2FtcG8gZGV2ZSBlc3NlcmUgaW4gcmVhZG9ubHkgbyBubywgc29sbyBzZSBobyBnacOgIGluaXppYWxpenphdG8gaSBjb250cm9sbGVyIGN1c3RvbSBkZWxsJ2FjY2VzcyBjb250cm9sXHJcbiAgICAgICAgaWYgKHRoaXMuQXBwQ29udGV4dCAmJiB0aGlzLkFwcENvbnRleHQubmFtZSAmJiB0aGlzLkFDT19DVVNUT01LRVkgJiYgdGhpcy5hYyAmJiB0aGlzLmFjLkluaXRpYWxpemVkQ3VzdG9tKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQXBwQ29udGV4dE93bmVyc2hpcCA9ICF0aGlzLmFjLmhhcyh0aGlzLkFDT19DVVNUT01LRVkgKyBcIjpcIiArIHRoaXMuQXBwQ29udGV4dC5uYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVhZG9ubHkgPSAhdGhpcy5BcHBDb250ZXh0T3duZXJzaGlwXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBuZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcblxyXG4gICAgICAgIC8vU2UgaG8gZ2nDoCB1biBwYXJlbnQgaW1wb3N0YXRvIHZ1b2wgZGlyZSBjaGUgc290dG8gYWwgdGFnIDxmb3JtPiBobyBkaXJldHRhbWVudGUgdW4gdGFnIDxmb3JtLSo+Li5cclxuICAgICAgICAvLy4uIHF1aW5kaSBwb3NzbyBpbXBvc3RhcmUgZGlyZXR0YW1lbnRlIGlsIHJpZmVyaW1lbnRvIGRlbCBGb3JtIGRhIHVzYXJlIGluIEhUTUwgcGVyIGlsIHN1Ym1pdHRlZFxyXG5cclxuICAgICAgICAvL1NlIG5vbiBjJ8OoIHZ1b2wgZGlyZSBjaGUgZGVudHJvIGFsIHRhZyA8Zm9ybT4gYyfDqCB1bm8gc3BsZW5kaWRvIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogLi4uLlwiPi4uXHJcbiAgICAgICAgLy8uLiBpbCBxdWFsZSBhIHN1YSB2b2x0YSBjb250aWVuZSBpbCBjb250cm9sbG8gPGZvcm0tKj4gcXVpbmRpIGF2csOyIGlsIGZvcm0gbmVsbCdpbnB1dCBcIkZvcm1cIlxyXG4gICAgICAgIGlmICgoPGFueT5uZ0NvbnRyb2wpLl9wYXJlbnQpXHJcbiAgICAgICAgICAgIHRoaXMuRm9ybSA9IDxOZ0Zvcm0+KDxhbnk+bmdDb250cm9sKS5fcGFyZW50O1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5kZXRhdGNoZWRGcm9tZm9ybSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vUXVlc3RhIHNlcnZlIHBlciBpbXBvc3RhcmUgbWUgc3Rlc3NvIGNvbWUgc2kgZGV2ZSwgaWwgdmFsaWRhdG9yZSBpbnZlY2UgbG8gcGFzc28gYWwgdmFsaWRhdGlvbi1pbnB1dCBxdWFuZG8gdmllbmUgc2V0dGF0byBpbCB2YWxpZGF0aW9uQ29udHJvbFxyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xyXG4gICAgICAgICAgICAvL1BlciB0dXR0aSBpIHZhbGlkYXRvcmk6IHJpZ2VuZXJvIGxhIGZ1bnppb25lIGRpIHZhbGlkYXppb25lLiBQZXIgcXVhbGNoZSBtb3Rpdm8gYSB2b2x0ZSBobyB2YWxpZGF0b3JpIHNlbnphLi4uXHJcbiAgICAgICAgICAgIC8vLi4uIHF1ZXN0byDDqCB1biB3b3JrYXJvdW5kIHBlciBlc3NlcmUgc2ljdXJvIGRpIGF2ZXJsYSBzZW1wcmUuXHJcbiAgICAgICAgICAgIC8vU29sbyBpIHZhbGlkYXRvcmkgY29uIHBhcmFtZXRyaSBoYW5ubyBiaXNvZ25vIGRlbGxhIF9jcmVhdGVWYWxpZGF0b3IgKGVzLiBcIm1heGxlbmd0aFwiIGNoZSBoYSAxIHBhcmFtZXRybyksIHF1aW5kaSBubyB2YWxpZGF0b3JpIHRpcG8gXCJyZXF1aXJlZFwiXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0b3JzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWxpZGF0b3JzLmZvckVhY2godiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYuX2NyZWF0ZVZhbGlkYXRvcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgdi5fY3JlYXRlVmFsaWRhdG9yKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLmFkZFZhbGlkYXRvcnModGhpcy5fdmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVmZmV0dHVhIGlsIEJpbmQvUGFyc2UgZGVsbGUgdmFyaWUgKipTb3VyY2UqKiB1bmVuZG8gbGUgaW5mb3JtYXppb25pIHNwZWNpZmljYXRlIGluICoqRGlzcGxheSoqXHJcbiAgICAgKiBcclxuICAgICAqIEV2ZW50dWFsbWVudGUgcmllZmZldHR1YSB1biBiaW5kIGFsIG1vZGVsbG8gaW4gYmFzZSBhbCB2YWxvcmUgZGVsbGEgdmFyaWFiaWxlICoqUmViaW5kTW9kZWxBZnRlclNvdXJjZSoqXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB0cnlCaW5kU291cmNlRGlzcGxheSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuU291cmNlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNvdXJjZS5sZW5ndGggPT0gMCAmJiAhdGhpcy5Tb3VyY2VGaXJzdEJpbmQpXHJcbiAgICAgICAgICAgIHRoaXMuQm91bmRTb3VyY2UgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5Tb3VyY2VGaXJzdEJpbmQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gQ2FjaGUgbG9jYWxlIHBlciBldml0YXJlIGRpIHJpZmFyZSBkZWkgcmVnZXgubWF0Y2ggb2duaSBzYW50YSB2b2x0YVxyXG4gICAgICAgIGlmICh0aGlzLlNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQm91bmRTb3VyY2UgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLkJpbmRDaGVja2luZ0dyb3Vwcy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuZXZhbHVhdGVCaW5kQ2hlY2tpbmdHcm91cHMoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLkJpbmRQcm9wZXJ0aWVzLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZUJpbmRQcm9wZXJ0aWVzKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBCbG9jY28gcGVyIGdlbmVyYXJlIGxhIGRlc2NyaXppb25lIGZpbmFsZSBkaSB1biBlbGVtZW50b1xyXG4gICAgICAgICAgICB0aGlzLlNvdXJjZS5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gQWdnaXVuZ28gYWxsYSBCb3VuZFNvdXJjZSBpbiBmb3JtYXRvIHN0YW5kYXJkIEtleVZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLkJvdW5kU291cmNlLnB1c2godGhpcy50cmFuc2Zvcm1Tb3VyY2VJdGVtKHMpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBQb3N0IHRyeWJpbmQgc2UgYyfDqCB1biBtb2RlbGxvIGFzc29jaWF0byByaWNhbGNvbG8gbCcqKkV2YWx1YXRlZE1vZGVsKipcclxuICAgICAgICAgICAgaWYgKHRoaXMuTW9kZWwpXHJcbiAgICAgICAgICAgICAgICB0aGlzLkJvdW5kU291cmNlLmZpbmQodCA9PiB0LmlkID09IHRoaXMuTW9kZWwpPy5kZXNjcmlwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZhbHV0YSBpbCBjb250ZW51dG8gZGVsbGEgdmFyaWFiaWxlIEJpbmRDaGVja2luZ0dyb3VwcyAqL1xyXG4gICAgcHJpdmF0ZSBldmFsdWF0ZUJpbmRDaGVja2luZ0dyb3VwcygpIHtcclxuICAgICAgICAvLyBCbG9jY28gcGVyIHRpcmFyZSBmdW9yaSBsZSBjb25kaXppb25pIHNjcml0dGUgdGlwbyAtLT4gOnByb3A/KFJvYmEgY29uIHtwcm9wfSlcclxuICAgICAgICB2YXIgaWZmZWRNYXRjaGVzID0gdGhpcy5EaXNwbGF5Lm1hdGNoKC86KFthLXpdKylcXD9cXCgoW15cXChcXCldKylcXCkvZyk7XHJcbiAgICAgICAgaWYgKGlmZmVkTWF0Y2hlcykge1xyXG4gICAgICAgICAgICBpZmZlZE1hdGNoZXMuZm9yRWFjaChtID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIFN0ZXNzYSByZWdleCBkaSBzb3ByYSBtYSBpbCB0YWcgXCJpXCIgc2VydmUgcGVyIHRpcmFyZSBmdW9yaSBpIHNpbmdvbGkgY2FwdHVyaW5nIGdyb3VwIGUgcGVyIHF1YWxjaGUgbW90aXZvIFxyXG4gICAgICAgICAgICAgICAgLy8gbmV3IFJlZ0V4cChiYXNlUmVnZXgsIFwiZ1wiKSBub24gZnVuemlvbmEgcXVpbmRpIG5vbiBobyBwb3R1dG8gcmF6aW9uYWxpenphcmxvXHJcbiAgICAgICAgICAgICAgICBsZXQgZ3JvdXBzID0gbS5tYXRjaCgvOihbYS16XSspXFw/XFwoKFteXFwoXFwpXSspXFwpL2kpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5CaW5kQ2hlY2tpbmdHcm91cHMucHVzaCh7IGdsb2JhbDogbSwgcHJvcDogZ3JvdXBzWzFdLCB3aGVuZXhpc3RzOiBncm91cHNbMl0gfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogVmFsdXRhIGlsIGNvbnRlbnV0byBkZWxsYSB2YXJpYWJpbGUgQmluZFByb3BlcnRpZXMgKi9cclxuICAgIHByaXZhdGUgZXZhbHVhdGVCaW5kUHJvcGVydGllcygpIHtcclxuICAgICAgICAvLyBCbG9jY28gcGVyIHRpcmFyZSBmdW9yaSBsZSBwcm9wcmlldMOgIHNjcml0dGUgdGlwbyAtLT4ge3Byb3B9XHJcbiAgICAgICAgdmFyIG1hdGNoZXMgPSB0aGlzLkRpc3BsYXkubWF0Y2goL3tbYS16XSt9L2dpKTtcclxuICAgICAgICBpZiAobWF0Y2hlcylcclxuICAgICAgICAgICAgbWF0Y2hlcy5mb3JFYWNoKG0gPT4geyB0aGlzLkJpbmRQcm9wZXJ0aWVzLnB1c2goeyBnbG9iYWw6IG0sIHByb3A6IG0uc3Vic3RyaW5nKDEsIG0ubGVuZ3RoIC0gMSkgfSk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhc2Zvcm1hIHVuIG9nZ2V0dG8gZGVsbGEgU291cmNlIGFsbGEgc3VhIHZlcnNpb25lIFwibnVvdmFcIiBiYXNhbmRvc2kgc3VsbGUgaW5mb3JtYXppb25pIHN1IGdydXBwaSBlIHByb3ByaWV0w6BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGl0ZW0gT2dnZXR0byBkYSB0cmFzZm9ybWFyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7e2lkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmd9fSBPZ2dldHRvIGZpbmFsZSB0cmFzZm9ybWF0b1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHRyYW5zZm9ybVNvdXJjZUl0ZW0oczogYW55KToge2lkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmd9IHtcclxuICAgICAgICAvLyBQYXJ0byBzZW1wcmUgZGFsbGEgdmFyaWFiaWxlIGRpIERpc3BsYXksIHBvaSBzb3N0aXR1aXNjbyBwZXp6byBwZXIgcGV6em9cclxuICAgICAgICBsZXQgZGVzYyA9IHRoaXMuRGlzcGxheTtcclxuXHJcbiAgICAgICAgLy8gVGFnbGlvIG8gbWFudGVuZ28gbGUgY29uZGl6aW9uaSBpbiBiYXNlIGFsbGEgcHJvcHJpZXTDoCBzdSBjdWkgZmFyZSBjaGVja1xyXG4gICAgICAgIC8vIERvcG9kaWNow6kgc2NyaXZvIHR1dHRlIGxlIHByb3ByaWV0w6BcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuQmluZENoZWNraW5nR3JvdXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0ID0gdGhpcy5CaW5kQ2hlY2tpbmdHcm91cHNbaV07XHJcbiAgICAgICAgICAgIGRlc2MgPSBkZXNjLnJlcGxhY2UodC5nbG9iYWwsIChzW3QucHJvcF0gIT0gbnVsbCAmJiBzW3QucHJvcF0gIT0gdW5kZWZpbmVkKSA/IHQud2hlbmV4aXN0cyA6IFwiXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLkJpbmRQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0ID0gdGhpcy5CaW5kUHJvcGVydGllc1tpXTtcclxuICAgICAgICAgICAgZGVzYyA9IGRlc2MucmVwbGFjZSh0Lmdsb2JhbCwgc1t0LnByb3BdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7IGlkOiBzW3RoaXMuSWRGaWVsZF0sIGRlc2NyaXB0aW9uOiBkZXNjIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgaWwgY29tb3BuZW50ZSBpbiBxdWVzdGlvbmUgw6ggaW4gZ3JhZG8gZGkgZ2VzdGlyZSBuZ0NvbnRyb2wgbnVsbGkuIFxyXG4gICAgICogRGkgZGVmYXVsdCDDqCAqKmZhbHNlKipcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59ICoqdHJ1ZSoqIHNlIGdlc3Rpc2NvIG5nQ29udHJvbCBudWxsaSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgaGFuZGxlTnVsbE5nQ29udHJvbCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIC8vIEEgdm9sdGUgbmVsbCduZ09uSW5pdCBub24gY2kgcGFzc2EgcXVpbmRpIGxvIG1ldHRvIHNpYSBxdWkgc2lhIG5lbGwnYWZ0ZXJ2aWV3aW5pdCwgcGVuc28gY2hlIHZhbGdhIHBlciBpIGNvbXBvbmVudGkgZGkgdGVyemUgcGFydGlcclxuICAgICAgICAvLyBjaGUgc2kgY29sbGVnYW5vIHBlciBpIGNhenppIGxvcm8gYWwgZm9ybSBlY2MsIHF1aW5kaSBsYSBwYXJ0ZSBzb3ByYSBub24gc2VydmUuLi4gQk9IXHJcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkVmFsaWRhdG9yKCk7XHJcblxyXG4gICAgICAgIC8vSWwgbm9tZSBub24gYyfDqCBzZSBtZXR0byBzdGFuZGFsb25lIDogdHJ1ZSAoQ0hFIE5PTiDDqSBEQSBNRVRURVJFKVxyXG4gICAgICAgIC8vRGF0byBjaGUgYW5jaGUgaWwgY29udHJvbGxvIGVzdGVybm8gdmllbmUgY29uc2lkZXJhdG8gY29tZSBjb21wb25lbnRlIGRlbCBmb3JtLCBub24gcG9zc28gYmFzYXJtaSBzb2xvIHN1bCBub21lIG1hIGRldm8gYWdnaXVuZ2VyZSB1biB0YWcuIEluIHF1ZXN0byBjYXNvIFwiX2ludGVybmFsXCJcclxuICAgICAgICAvLyBBVFRFTlpJT05FOiBRVUFMU0lBU0kgU0lBIElMIE1PVElWTywgU0UgU1RPIENPU08gVklFTkUgU1BPU1RBVE8gREFMTCBuZ09uSW5pdCBOT04gRlVOWklPTkEgUElVIE5VTExBXHJcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sLm5hbWUpXHJcbiAgICAgICAgICAgIHRoaXMuR2VuZXJhdGVkTmFtZSA9IHRoaXMubmdDb250cm9sLm5hbWUudG9TdHJpbmcoKSArIFwiX2ludGVybmFsXCI7XHJcblxyXG4gICAgICAgIC8vIEFUVEVOWklPTkU6IFFVQUxTSUFTSSBTSUEgSUwgTU9USVZPLCBTRSBTVE8gQ09TTyBWSUVORSBTUE9TVEFUTyBEQUxMIG5nT25Jbml0IE5PTiBGVU5aSU9OQSBQSVUgTlVMTEFcclxuICAgICAgICBpZiAodGhpcy5Gb3JtKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5mb3JtSGFzQmVubkJvdW5kICYmIHRoaXMudmFsaWRhdGlvbkNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuRm9ybS5hZGRDb250cm9sKHRoaXMudmFsaWRhdGlvbkNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtSGFzQmVubkJvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUXVhbmRvIHVuIGZvcm0gdmllbmUgc3VibWl0dGF0byBsYSB2YXJpYWJpbGUgRm9ybS5zdWJtaXR0ZWQgdmllbmUgYXNzZWduYXRhIGFsbCdpbnB1dCBbc3VibWl0dGVkXSBkZWwgdmFsLWNvbnRyb2xcclxuICAgICAgICAgICAgLy8gRXNzZW5kbyBjaGUgcGVyw7IgbGEgQ0Qgw6ggT25QdXNoIHBlciBkaXJlIGFkIEFuZ3VsYXIgY2hlIGwnSW5wdXQgw6ggY2FtYmlhdG8gZSBwZXJtZXR0ZXJlIGkgc2lkZWZmZWN0cyBkaSBhc3NlZ25hcmUgW3N1Ym1pdHRlZF1cclxuICAgICAgICAgICAgLy8gZGV2byBhdHRhY2Nhcm1pIGFsIHN1Ym1pdCBhdHR1YWxlIGRlbCBmb3JtIGUgcHJpbWEgZGkgZXNlZ3VpcmxvIGRldm8gbWFyY2FyZSBpbCBjb21wb25lbnRlIHBlciBpbCBjaGVja1xyXG4gICAgICAgICAgICBsZXQgb3JpZ0Z1bmMgPSB0aGlzLkZvcm0ub25TdWJtaXQ7XHJcbiAgICAgICAgICAgIHZhciBmb3JtT3V0c2lkZVJlZiA9IHRoaXMuRm9ybTtcclxuICAgICAgICAgICAgdGhpcy5Gb3JtLm9uU3VibWl0ID0gKGV2KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnRnVuYy5hcHBseShmb3JtT3V0c2lkZVJlZik7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2Ugc29ubyBpbiBtb2RhbGl0w6AgZGV0YXRjaGVkIGRldm8gcmltdW92ZXJlIG1hbnVhbG1lbnRlIHF1ZXN0byBjb250cm9sbG8gcXVhbmRvIGVudHJvIG5lbGxhIGRpc3Bvc2UsIGFsdHJpbWVudGkgc2UgcG9pIG5lIGFuZGFzc2kgYSByaWFnZ2l1bmdlcmVcclxuICAgICAqIHVuIGFsdHJvIGNvbiBsbyBzdGVzc28gXCJuYW1lXCIgbWEgbWFnYXJpIHJlc2V0dGF0bywgQW5ndWxhciBsbyByZS1pZHJhdGVyZWJiZSBjb24gaSB2YWxvcmkgcHJlY2VkZW50aSBub25vc3RhbnRlIGlsIG1vZGVsbG8gZm9zc2UgdnVvdG9cclxuICAgICAqL1xyXG4gICAgbmdPbkRlc3Ryb3koKXtcclxuICAgICAgICBpZih0aGlzLmRldGF0Y2hlZEZyb21mb3JtICYmIHRoaXMuRm9ybSlcclxuICAgICAgICAgICAgdGhpcy5Gb3JtLnJlbW92ZUNvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEVsYWJvcmEgaSB2YWxpZGF0b3JpIGluaWV0dGF0aSBlIGNhcGlzY2Ugc2UgaWwgdmFsb3JlIMOoIG9iYmxpZ2F0b3JpbyBvIG1lbm8gKi9cclxuICAgIGNoZWNrUmVxdWlyZWRWYWxpZGF0b3IoKSB7XHJcbiAgICAgICAgLy8gY29udHJvbGxvIHNlIMOoIHNldHRhdG8gdW4gcmVxdWlyZWQgcGVyIGRlY2lkZXJlIGluIG1hbmllcmEgY29uZGl6aW9uYWxlIHNlIHV0aWxpenphcmUgaWwgdmFsaWRhdG9yZSByZXF1aXJlZCBuZWwgY29tcG9uZW50ZSBpbnRlcm5vXHJcbiAgICAgICAgLy8gTG8gZmFjY2lvIHF1aSBlIG5vbiBpbiB1biBldmVudHVhbGUgbmdPbkluaXQgbyBjb3N0cnV0dG9yZSBwZXJjaMOpIG5nT25Jbml0IG5vbiBzZW1wcmUgdmllbmUgY2hpYW1hdG8gZSBkYSBjb3N0cnV0dG9yZSBpbCB2YWxpZGF0b3JlIG5vbiBoYSBhbmNvcmEgaWwgdmFsb3JlIGdpdXN0b1xyXG4gICAgICAgIGlmICh0aGlzLl92YWxpZGF0b3JzICYmIHRoaXMuX3ZhbGlkYXRvcnMuc29tZShlbGVtID0+IGVsZW0gaW5zdGFuY2VvZiBSZXF1aXJlZFZhbGlkYXRvciAmJiBlbGVtLnJlcXVpcmVkKSlcclxuICAgICAgICAgICAgdGhpcy5SZXF1aXJlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubmdDb250cm9sKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFZhbGlkYXRvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIZWxwZXIgY2hlIGNvbGxlZ2EgbGEgZnVuemlvbmUgZGkgcmVzZXQgZGVsIGNvbnRyb2xsbyBmb3JtIGFsIGNvbnRyb2xsbyBkaSB2YWxpZGF6aW9uZSBzb3R0b3N0YW50ZSAqL1xyXG4gICAgcHJpdmF0ZSBiaW5kUmVzZXRGdW5jdGlvbigpIHtcclxuICAgICAgICAvL2ZhY2NpbyBpbiBtb2RvIGNoZSBzZSBjaGlhbW8gaWwgcmVzZXQgZGVsIGNvbnRyb2xsbyAobyBkZWxsYSBmb3JtKSBkYWxsJ2VzdGVybm8gc2kgcmVzZXR0aSBhbmNoZSBpbCBjb250cm9sbG8gbmF0aXZvXHJcbiAgICAgICAgY29uc3Qgb3JpZ0Z1bmMgPSAoPGFueT50aGlzLm5nQ29udHJvbC5jb250cm9sKS5fX29yaWdpbmFsX3Jlc2V0X18gfHwgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5yZXNldDtcclxuICAgICAgICB2YXIgbmdDb250cm9sX291dHNpZGVSZWZlcmVuY2UgPSB0aGlzLm5nQ29udHJvbC5jb250cm9sO1xyXG4gICAgICAgIHZhciB2YWxpZGF0aW9uQ29udHJvbF9vdXRzaWRlUmVmZXJlbmNlID0gdGhpcy52YWxpZGF0aW9uQ29udHJvbC5jb250cm9sO1xyXG5cclxuICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnJlc2V0ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBvcmlnRnVuYy5hcHBseShuZ0NvbnRyb2xfb3V0c2lkZVJlZmVyZW5jZSk7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25Db250cm9sX291dHNpZGVSZWZlcmVuY2UucmVzZXQoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvL1BlciBjb25zZW50aXJlIHJpY2hpYW1pIG11bHRpcGxpIGRpIHF1ZXN0YSBmdW56aW9uZSBwcmVuZGVuZG8gc2VtcHJlIGxhIGZpdW56aW9uZSBkaSByZXNldCBiYXNlXHJcbiAgICAgICAgKDxhbnk+dGhpcy5uZ0NvbnRyb2wuY29udHJvbCkuX19vcmlnaW5hbF9yZXNldF9fID0gb3JpZ0Z1bmNcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChvYmogPT0gbnVsbCAmJiB0aGlzLmZpcnN0QmluZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0QmluZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLk1vZGVsID0gb2JqO1xyXG5cclxuICAgICAgICAvL1BlciBzdmVnbGlhcmUgQW5ndWxhci4gSWwgdmFsb3JlIGNoZSBlbnRyYSBwb3RyZWJiZSBlc3NlcmUgdmFsaWRvL25vbiB2YWxpZG8gZSBxdWVzdG8gbG8gYmluZGEgYSB0dXR0bywgZm9ybSBjb21wcmVzb1xyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbClcclxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLk1vZGVsKVxyXG4gICAgICAgICAgICB0aGlzLm9uTm90TnVsbFZhbHVlU2V0KCk7XHJcblxyXG4gICAgICAgIC8vIG1hcmtGb3JDaGVjayBub24gdmEgYmVuZSBpbiBxdWFudG8gYXJyaXZhbm8gcG9zc2liaWxtZW50ZSAyIHVwZGF0ZSBzdSB1biBzb2xvIGNpY2xvIGRpIHN0YWNrXHJcbiAgICAgICAgLy8gc2V0VGltZSp1dCBjaGUgd3JhcHBhIHR1dHRvIG5vbiB2YSBiZW5lIHNlbm7DsiBzcGFtbWEgZGVsbGUgY2hhbmdlIGRldGVjdGlvbiBhIHN1b24gZGkgaW50ZXJ2YWwgY2hlIHJhbGxlbnRhbm8gdGFudGlzc2ltbyBsJ2FwcFxyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RyYSBpbnRlcm5hbWVudGUgaWwgY29tcG9uZW50ZSBkaSB2YWxpZGF6aW9uZSwgbmUgaW1wb3N0YSBpIHZhbGlkYXRvcmkgZSBjb2xsZWdhIGlsIEZvcm0sIHNlIHByZXNlbnRlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7TmdNb2RlbH0gY29tcCBFbGVtZW50byBIVE1MIG1hcmNhdG8gY29uIFwiI3ZhbGlkYXRpb25Db250cm9sXCJcclxuICAgICAqL1xyXG4gICAgcmVnaXN0ZXJWYWxDb21wKGNvbXA6IE5nTW9kZWwpIHtcclxuICAgICAgICBpZiAoY29tcCkge1xyXG4gICAgICAgICAgICAvLyDDiCBhcnJpdmF0byB1biBudW92byB2YWxpZGF0aW9uQ29udG9ybCAoc3VjY2VkZSBzb2xvIG5lbCBmb3JtLXNlbGVjdCBxdWFuZG8gY2FtYmlhIGxhIHNvdXJjZSBkYSAwIGVsZW1lbnRpIC8gbnVsbCBhZCBOIGVsZW1lbnRpLCBxdWluZGkgYWwgbWFzc2ltbyB1bmEgdm9sdGEpIFxyXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uQ29udHJvbCAmJiB0aGlzLkZvcm0pXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZvcm0ucmVtb3ZlQ29udHJvbCh0aGlzLnZhbGlkYXRpb25Db250cm9sKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkNvbnRyb2wgPSBjb21wO1xyXG5cclxuICAgICAgICAgICAgLy9RdWVzdGEgc2VydmUgcGVyIHBhc3NhcmUgYXZhbnRpIGkgdmFsaWRhdG9yaVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Db250cm9sLmNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLl92YWxpZGF0b3JzKTtcclxuXHJcbiAgICAgICAgICAgIC8vU2Ugc29ubyBzdGFjY2F0byBkYWwgRm9ybSAodnVvbCBkaXJlIGNoZSBzb25vIGFkIGVzZW1waW8gZGVudHJvIHVuIG5nLXRlbXBsYXRlKSBhZ2dpdW5nbyBpbCBjb250cm9sbG8gYWwgRm9ybSBwYXNzYXRvIGNvbWUgaW5wdXQgKGNvbnRleHQgZGVsIHRlbXBsYXRlKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5kZXRhdGNoZWRGcm9tZm9ybSAmJiB0aGlzLkZvcm0gJiYgIXRoaXMuZm9ybUhhc0Jlbm5Cb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Gb3JtLmFkZENvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbClcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUhhc0Jlbm5Cb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5nQ29udHJvbClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmluZFJlc2V0RnVuY3Rpb24oKTtcclxuXHJcbiAgICAgICAgICAgIC8vSSB2YWwtcm9iYSBxdWVzdG8gbG8gZmFubm8gYXV0b21hdGljYW1lbnRlIGRlbnRyby4uLiBnbGkgYWx0cmkgbm8gKGVzLiBzZW1wbGljZSBpbnB1dCBjaGVja2JveClcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eUZvck5hdGl2ZUlucHV0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWdnaW9ybmEgaWwgdmFsb3JlIGUgbGEgdmFsaWRpdMOgIGRlbGwnaW5wdXQgc290dG9zdGFudGUuIE5vbiB2aWVuZSBjaGlhbWF0byBwZXIgaW5wdXQgbmF0aXZpIGNvbWUgbGUgY2hlY2tib3hcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZWRWYWx1ZSBGb3J6YSBsJ2FnZ2lvcm5hbWVudG8gYW5jaGUgc2Ugbm9uIMOoIHVuIGlucHV0IG5hdGl2byAoaW5wdXQgbmF0aXZvID0gY2hlY2tib3gsIGFkIGVzZW1waW8pXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVZhbGlkaXR5Rm9yTmF0aXZlSW5wdXQoZm9yY2VkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmIChmb3JjZWRWYWx1ZSB8fCB0aGlzLm5hdGl2ZUlucHV0KVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Db250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICogQ2xhc3NpY28gXCJzcGFyYSBmdW9yaVwiLiBNYW50ZW5nbyBsbyBzdGVzc28gbm9tZSBkZWxsJ2V2ZW50byBkZWkgPHZhbC0qPiAoaW5wdXRDaGFuZ2UpIHBlciByZXRyb2NvbXBhdGliaWxpdMOgLlxyXG4gICAgICogXHJcbiAgICAgKiBOb24gcG9zc28gdGVuZXJsbyBwcm90ZWN0ZWQgYWx0cmltZW50aSBwb3NzbyBlc2VndWlybG8gc29sbyBkYWwgLnRzIGUgbm9uIGRhbGwnIC5odG1sXHJcbiAgICAgKi9cclxuICAgIGNoYW5nZWQoZm9yY2VkVmFsdWU6IGFueSA9IG51bGwsIG1hcmtGb3JDaGVjazogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UoZm9yY2VkVmFsdWUgPT0gbnVsbCB8fCBmb3JjZWRWYWx1ZSA9PSBcIlwiID8gdGhpcy5Nb2RlbCA/PyBcIlwiIDogZm9yY2VkVmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdChmb3JjZWRWYWx1ZSA9PSBudWxsIHx8IGZvcmNlZFZhbHVlID09IFwiXCIgPyB0aGlzLk1vZGVsID8/IFwiXCIgOiBmb3JjZWRWYWx1ZSk7XHJcbiAgICAgICAgaWYgKG1hcmtGb3JDaGVjaylcclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKiBDbGFzc2ljbyBcInNwYXJhIGZ1b3JpXCIgc3VsIGZvY3VzLiBNYW50ZW5nbyBsbyBzdGVzc28gbm9tZSBkZWxsJ2V2ZW50byBkZWkgPHZhbC0qPiAoaW5wdXRDaGFuZ2UpIHBlciByZXRyb2NvbXBhdGliaWxpdMOgLlxyXG4gICAgICogXHJcbiAgICAgKiBOb24gcG9zc28gdGVuZXJsbyBwcm90ZWN0ZWQgYWx0cmltZW50aSBwb3NzbyBlc2VndWlybG8gc29sbyBkYWwgLnRzIGUgbm9uIGRhbGwnIC5odG1sXHJcbiAgICAgKi9cclxuICAgIGZvY3VzZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRGb2N1cy5lbWl0KGV2ZW50KTtcclxuICAgICAgICB0aGlzLmxvZyhcIkNvbnRyb2wgRm9jdXNlZCAtIFwiICsgdGhpcy5HZW5lcmF0ZWROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqIENsYXNzaWNvIFwic3BhcmEgZnVvcmlcIiBzdWxsYSBmaW5hbGl6emF6aW9uZSBkZWwgdmFsb3JlIGRlbGwnaW5wdXQgKGJsdXIgLyB0YXN0byBpbnZpbywgZWNjLi4uKS4gTWFudGVuZ28gbG8gc3Rlc3NvIG5vbWUgZGVsbCdldmVudG8gZGVpIDx2YWwtKj4gKGlucHV0Q2hhbmdlKSBwZXIgcmV0cm9jb21wYXRpYmlsaXTDoC5cclxuICAgICAqIFxyXG4gICAgICogTm9uIHBvc3NvIHRlbmVybG8gcHJvdGVjdGVkIGFsdHJpbWVudGkgcG9zc28gZXNlZ3VpcmxvIHNvbG8gZGFsIC50cyBlIG5vbiBkYWxsJyAuaHRtbFxyXG4gICAgICovXHJcbiAgICBmaW5hbGl6ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dEZpbmFsaXplZC5lbWl0KCk7XHJcbiAgICAgICAgdGhpcy5sb2coXCJDb250cm9sIFZhbHVlIEZpbmFsaXplZCAtIFwiICsgdGhpcy5HZW5lcmF0ZWROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YW1wYSB1biBsb2cgYSBjb25zb2xlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIE1lc3NhZ2dpbyBkYSBzdGFtcGFyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbG9nKG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLkZBVl9ERUJVR19NT0RFKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkBmb3Jtcy1hbmQtdmFsaWRhdGlvbnM6IFwiICsgbWVzc2FnZSlcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgYWJzdHJhY3Qgb25Ob3ROdWxsVmFsdWVTZXQoKTogdm9pZDtcclxufSJdfQ==