ngx-mask 16.2.6 → 16.2.8

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.
@@ -3,7 +3,7 @@ import { DOCUMENT } from '@angular/common';
3
3
  import { NGX_MASK_CONFIG } from './ngx-mask.config';
4
4
  import { NgxMaskApplierService } from './ngx-mask-applier.service';
5
5
  import * as i0 from "@angular/core";
6
- class NgxMaskService extends NgxMaskApplierService {
6
+ export class NgxMaskService extends NgxMaskApplierService {
7
7
  constructor() {
8
8
  super(...arguments);
9
9
  this.isNumberValue = false;
@@ -544,11 +544,10 @@ class NgxMaskService extends NgxMaskApplierService {
544
544
  currentLocaleDecimalMarker() {
545
545
  return (1.1).toLocaleString().substring(1, 2);
546
546
  }
547
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
548
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskService }); }
547
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: NgxMaskService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
548
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: NgxMaskService }); }
549
549
  }
550
- export { NgxMaskService };
551
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskService, decorators: [{
550
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: NgxMaskService, decorators: [{
552
551
  type: Injectable
553
552
  }] });
554
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hc2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXNrLWxpYi9zcmMvbGliL25neC1tYXNrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBVyxNQUFNLG1CQUFtQixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUduRSxNQUNhLGNBQWUsU0FBUSxxQkFBcUI7SUFEekQ7O1FBRVcsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFdEIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFakIsYUFBUSxHQUFrQixJQUFJLENBQUM7UUFFL0IsV0FBTSxHQUFrQixJQUFJLENBQUM7UUFFcEM7OztXQUdHO1FBQ0ksaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFckIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIseUJBQW9CLEdBQWEsRUFBRSxDQUFDO1FBRXBDLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQU0zQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRW5CLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBRXBCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQzNCLG9HQUFvRztRQUM3RixhQUFRLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUVoQixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTFCLFlBQU8sR0FBRyxNQUFNLENBQVUsZUFBZSxDQUFDLENBQUM7UUFFN0MsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFF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QUFDLENBQUMsQ0FBQztnQkFDdkUsTUFBTSxXQUFXLEdBQVcsSUFBSSxLQUFLLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDeEQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQzNCLENBQUM7Z0JBQ0YsSUFDSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ3hDLE9BQU8sQ0FBQyxRQUFRLG1DQUF5QixFQUMzQztvQkFDRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNsRCxPQUFPLE9BQU8sQ0FBQyxRQUFRLDhDQUFvQzt3QkFDdkQsQ0FBQyxDQUFDLEtBQUssR0FBRyxXQUFXO3dCQUNyQixDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssR0FBRyxXQUFXLENBQUM7aUJBQ3ZDO3FCQUFNO29CQUNILE9BQU8sS0FBSyxHQUFHLFdBQVcsQ0FBQztpQkFDOUI7WUFDTCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDZixPQUFPLENBQ1YsQ0FBQztJQUNOLENBQUM7SUFFTSwwQkFBMEI7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQzs4R0E5cUJRLGNBQWM7a0hBQWQsY0FBYzs7U0FBZCxjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBpbmplY3QsIEluamVjdGFibGUsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBOR1hfTUFTS19DT05GSUcsIElDb25maWcgfSBmcm9tICcuL25neC1tYXNrLmNvbmZpZyc7XG5pbXBvcnQgeyBOZ3hNYXNrQXBwbGllclNlcnZpY2UgfSBmcm9tICcuL25neC1tYXNrLWFwcGxpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNYXNrRXhwcmVzc2lvbiB9IGZyb20gJy4vbmd4LW1hc2stZXhwcmVzc2lvbi5lbnVtJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5neE1hc2tTZXJ2aWNlIGV4dGVuZHMgTmd4TWFza0FwcGxpZXJTZXJ2aWNlIHtcbiAgICBwdWJsaWMgaXNOdW1iZXJWYWx1ZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIG1hc2tJc1Nob3duID0gJyc7XG5cbiAgICBwdWJsaWMgc2VsU3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIHNlbEVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHdlIGFyZSBjdXJyZW50bHkgaW4gd3JpdGVWYWx1ZSBmdW5jdGlvbiwgaW4gdGhpcyBjYXNlIHdoZW4gYXBwbHlpbmcgdGhlIG1hc2sgd2UgZG9uJ3Qgd2FudCB0byB0cmlnZ2VyIG9uQ2hhbmdlIGZ1bmN0aW9uLFxuICAgICAqIHNpbmNlIHdyaXRlVmFsdWUgc2hvdWxkIGJlIGEgb25lIHdheSBvbmx5IHByb2Nlc3Mgb2Ygd3JpdGluZyB0aGUgRE9NIHZhbHVlIGJhc2VkIG9uIHRoZSBBbmd1bGFyIG1vZGVsIHZhbHVlLlxuICAgICAqL1xuICAgIHB1YmxpYyB3cml0aW5nVmFsdWUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBtYXNrQ2hhbmdlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBfbWFza0V4cHJlc3Npb25BcnJheTogc3RyaW5nW10gPSBbXTtcblxuICAgIHB1YmxpYyB0cmlnZ2VyT25NYXNrQ2hhbmdlID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9zdGFydCE6IG51bWJlcjtcblxuICAgIHByaXZhdGUgX2VuZCE6IG51bWJlcjtcblxuICAgIHByaXZhdGUgX2VtaXRWYWx1ZSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfcHJldmlvdXNWYWx1ZSA9ICcnO1xuXG4gICAgcHJpdmF0ZSBfY3VycmVudFZhbHVlID0gJyc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiwgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHB1YmxpYyBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2NvbmZpZyA9IGluamVjdDxJQ29uZmlnPihOR1hfTUFTS19DT05GSUcpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgYXBwbHlNYXNrKFxuICAgICAgICBpbnB1dFZhbHVlOiBzdHJpbmcsXG4gICAgICAgIG1hc2tFeHByZXNzaW9uOiBzdHJpbmcsXG4gICAgICAgIHBvc2l0aW9uID0gMCxcbiAgICAgICAganVzdFBhc3RlZCA9IGZhbHNlLFxuICAgICAgICBiYWNrc3BhY2VkID0gZmFsc2UsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY2I6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55ID0gKCkgPT4ge31cbiAgICApOiBzdHJpbmcge1xuICAgICAgICBpZiAoIW1hc2tFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXRWYWx1ZSAhPT0gdGhpcy5hY3R1YWxWYWx1ZSA/IHRoaXMuYWN0dWFsVmFsdWUgOiBpbnB1dFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFza0lzU2hvd24gPSB0aGlzLnNob3dNYXNrVHlwZWRcbiAgICAgICAgICAgID8gdGhpcy5zaG93TWFza0luSW5wdXQoKVxuICAgICAgICAgICAgOiBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkc7XG4gICAgICAgIGlmICh0aGlzLm1hc2tFeHByZXNzaW9uID09PSBNYXNrRXhwcmVzc2lvbi5JUCAmJiB0aGlzLnNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgIHRoaXMubWFza0lzU2hvd24gPSB0aGlzLnNob3dNYXNrSW5JbnB1dChpbnB1dFZhbHVlIHx8IE1hc2tFeHByZXNzaW9uLkhBU0gpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1hc2tFeHByZXNzaW9uID09PSBNYXNrRXhwcmVzc2lvbi5DUEZfQ05QSiAmJiB0aGlzLnNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgIHRoaXMubWFza0lzU2hvd24gPSB0aGlzLnNob3dNYXNrSW5JbnB1dChpbnB1dFZhbHVlIHx8IE1hc2tFeHByZXNzaW9uLkhBU0gpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW5wdXRWYWx1ZSAmJiB0aGlzLnNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2xSZXN1bHQodGhpcy5wcmVmaXgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJlZml4ICsgdGhpcy5tYXNrSXNTaG93bjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnZXRTeW1ib2w6IHN0cmluZyA9XG4gICAgICAgICAgICAhIWlucHV0VmFsdWUgJiYgdHlwZW9mIHRoaXMuc2VsU3RhcnQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgPyBpbnB1dFZhbHVlW3RoaXMuc2VsU3RhcnRdID8/IE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklOR1xuICAgICAgICAgICAgICAgIDogTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HO1xuICAgICAgICBsZXQgbmV3SW5wdXRWYWx1ZSA9ICcnO1xuICAgICAgICBpZiAodGhpcy5oaWRkZW5JbnB1dCAhPT0gdW5kZWZpbmVkICYmICF0aGlzLndyaXRpbmdWYWx1ZSkge1xuICAgICAgICAgICAgbGV0IGFjdHVhbFJlc3VsdDogc3RyaW5nW10gPVxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWUgJiYgaW5wdXRWYWx1ZS5sZW5ndGggPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dFZhbHVlLnNwbGl0KE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORylcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmFjdHVhbFZhbHVlLnNwbGl0KE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORyk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZSAgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZWxTdGFydCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHRoaXMuc2VsRW5kID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsU3RhcnQgPSBOdW1iZXIodGhpcy5zZWxTdGFydCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxFbmQgPSBOdW1iZXIodGhpcy5zZWxFbmQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlICE9PSBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcgJiYgYWN0dWFsUmVzdWx0Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IHR5cGVvZiB0aGlzLnNlbFN0YXJ0ID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdGhpcy5zZWxFbmQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGlucHV0VmFsdWUubGVuZ3RoID4gYWN0dWFsUmVzdWx0Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYWN0dWFsUmVzdWx0LnNwbGljZSh0aGlzLnNlbFN0YXJ0LCAwLCBnZXRTeW1ib2wpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dFZhbHVlLmxlbmd0aCA8IGFjdHVhbFJlc3VsdC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFjdHVhbFJlc3VsdC5sZW5ndGggLSBpbnB1dFZhbHVlLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGJhY2tzcGFjZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYWN0dWFsUmVzdWx0LnNwbGljZSh0aGlzLnNlbFN0YXJ0IC0gMSwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYWN0dWFsUmVzdWx0LnNwbGljZShpbnB1dFZhbHVlLmxlbmd0aCAtIDEsIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYWN0dWFsUmVzdWx0LnNwbGljZSh0aGlzLnNlbFN0YXJ0LCB0aGlzLnNlbEVuZCAtIHRoaXMuc2VsU3RhcnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiAoYWN0dWFsUmVzdWx0ID0gW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd01hc2tUeXBlZCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5oaWRkZW5JbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHRoaXMucmVtb3ZlTWFzayhpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlc2xpbnQtZW5hYmxlICBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgICAgICAgICBuZXdJbnB1dFZhbHVlID1cbiAgICAgICAgICAgICAgICB0aGlzLmFjdHVhbFZhbHVlLmxlbmd0aCAmJiBhY3R1YWxSZXN1bHQubGVuZ3RoIDw9IGlucHV0VmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5zaGlmdFR5cGVkU3ltYm9scyhhY3R1YWxSZXN1bHQuam9pbihNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcpKVxuICAgICAgICAgICAgICAgICAgICA6IGlucHV0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGp1c3RQYXN0ZWQgJiYgKHRoaXMuaGlkZGVuSW5wdXQgfHwgIXRoaXMuaGlkZGVuSW5wdXQpKSB7XG4gICAgICAgICAgICBuZXdJbnB1dFZhbHVlID0gaW5wdXRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZWRTcGVjaWFsQ2hhcmFjdGVyICYmIHBvc2l0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyh0aGlzLmFjdHVhbFZhbHVlLnNsaWNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIDEpKSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXNrRXhwcmVzc2lvbi5zbGljZShwb3NpdGlvbiAtIDEsIHBvc2l0aW9uICsgMSkgIT09IE1hc2tFeHByZXNzaW9uLk1PTlRIUykge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gLSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZWRTcGVjaWFsQ2hhcmFjdGVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93TWFza1R5cGVkICYmXG4gICAgICAgICAgICB0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgIXRoaXMubGVhZFplcm9EYXRlVGltZVxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHRoaXMucmVtb3ZlTWFzayhpbnB1dFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hc2tDaGFuZ2VkKSB7XG4gICAgICAgICAgICBuZXdJbnB1dFZhbHVlID0gaW5wdXRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0lucHV0VmFsdWUgPVxuICAgICAgICAgICAgICAgIEJvb2xlYW4obmV3SW5wdXRWYWx1ZSkgJiYgbmV3SW5wdXRWYWx1ZS5sZW5ndGggPyBuZXdJbnB1dFZhbHVlIDogaW5wdXRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nID0gc3VwZXIuYXBwbHlNYXNrKFxuICAgICAgICAgICAgbmV3SW5wdXRWYWx1ZSxcbiAgICAgICAgICAgIG1hc2tFeHByZXNzaW9uLFxuICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICBqdXN0UGFzdGVkLFxuICAgICAgICAgICAgYmFja3NwYWNlZCxcbiAgICAgICAgICAgIGNiXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5hY3R1YWxWYWx1ZSA9IHRoaXMuZ2V0QWN0dWFsVmFsdWUocmVzdWx0KTtcbiAgICAgICAgLy8gaGFuZGxlIHNvbWUgc2VwYXJhdG9yIGltcGxpY2F0aW9uczpcbiAgICAgICAgLy8gYS4pIGFkanVzdCBkZWNpbWFsTWFya2VyIGRlZmF1bHQgKC4gLT4gLCkgaWYgdGhvdXNhbmRTZXBhcmF0b3IgaXMgYSBkb3RcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy50aG91c2FuZFNlcGFyYXRvciA9PT0gTWFza0V4cHJlc3Npb24uRE9UICYmXG4gICAgICAgICAgICB0aGlzLmRlY2ltYWxNYXJrZXIgPT09IE1hc2tFeHByZXNzaW9uLkRPVFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZGVjaW1hbE1hcmtlciA9IE1hc2tFeHByZXNzaW9uLkNPTU1BO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYikgcmVtb3ZlIGRlY2ltYWwgbWFya2VyIGZyb20gbGlzdCBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gbWFza1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLm1hc2tFeHByZXNzaW9uLnN0YXJ0c1dpdGgoTWFza0V4cHJlc3Npb24uU0VQQVJBVE9SKSAmJlxuICAgICAgICAgICAgdGhpcy5kcm9wU3BlY2lhbENoYXJhY3RlcnMgPT09IHRydWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzID0gdGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGl0ZW06IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuX2NvbXBhcmVPckluY2x1ZGVzKGl0ZW0sIHRoaXMuZGVjaW1hbE1hcmtlciwgdGhpcy50aG91c2FuZFNlcGFyYXRvcikgLy9pdGVtICE9PSB0aGlzLmRlY2ltYWxNYXJrZXIsIC8vICFcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0IHx8IHJlc3VsdCA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzVmFsdWUgPSB0aGlzLl9jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSByZXN1bHQ7XG4gICAgICAgICAgICB0aGlzLl9lbWl0VmFsdWUgPSB0aGlzLl9wcmV2aW91c1ZhbHVlICE9PSB0aGlzLl9jdXJyZW50VmFsdWUgfHwgdGhpcy5tYXNrQ2hhbmdlZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lbWl0VmFsdWUgPyB0aGlzLmZvcm1Db250cm9sUmVzdWx0KHJlc3VsdCkgOiAnJztcblxuICAgICAgICBpZiAoIXRoaXMuc2hvd01hc2tUeXBlZCB8fCAodGhpcy5zaG93TWFza1R5cGVkICYmIHRoaXMuaGlkZGVuSW5wdXQpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oaWRkZW5JbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmIChiYWNrc3BhY2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhpZGVJbnB1dChyZXN1bHQsIHRoaXMubWFza0V4cHJlc3Npb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVJbnB1dChyZXN1bHQsIHRoaXMubWFza0V4cHJlc3Npb24pICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXNrSXNTaG93bi5zbGljZShyZXN1bHQubGVuZ3RoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc0xlbjogbnVtYmVyID0gcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgcHJlZk5tYXNrOiBzdHJpbmcgPSB0aGlzLnByZWZpeCArIHRoaXMubWFza0lzU2hvd247XG5cbiAgICAgICAgaWYgKHRoaXMubWFza0V4cHJlc3Npb24uaW5jbHVkZXMoTWFza0V4cHJlc3Npb24uSE9VUlMpKSB7XG4gICAgICAgICAgICBjb25zdCBjb3VudFNraXBlZFN5bWJvbCA9IHRoaXMuX251bWJlclNraXBlZFN5bWJvbHMocmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBwcmVmTm1hc2suc2xpY2UocmVzTGVuICsgY291bnRTa2lwZWRTeW1ib2wpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5tYXNrRXhwcmVzc2lvbiA9PT0gTWFza0V4cHJlc3Npb24uSVAgfHxcbiAgICAgICAgICAgIHRoaXMubWFza0V4cHJlc3Npb24gPT09IE1hc2tFeHByZXNzaW9uLkNQRl9DTlBKXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIHByZWZObWFzaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0ICsgcHJlZk5tYXNrLnNsaWNlKHJlc0xlbik7XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdlcmUgc2hpZnRlZFxuICAgIHByaXZhdGUgX251bWJlclNraXBlZFN5bWJvbHModmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gLyhefFxcRCkoXFxkXFxEKS9nO1xuICAgICAgICBsZXQgbWF0Y2ggPSByZWdleC5leGVjKHZhbHVlKTtcbiAgICAgICAgbGV0IGNvdW50U2tpcGVkU3ltYm9sID0gMDtcbiAgICAgICAgd2hpbGUgKG1hdGNoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvdW50U2tpcGVkU3ltYm9sICs9IDE7XG4gICAgICAgICAgICBtYXRjaCA9IHJlZ2V4LmV4ZWModmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3VudFNraXBlZFN5bWJvbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXBwbHlWYWx1ZUNoYW5nZXMoXG4gICAgICAgIHBvc2l0aW9uOiBudW1iZXIsXG4gICAgICAgIGp1c3RQYXN0ZWQ6IGJvb2xlYW4sXG4gICAgICAgIGJhY2tzcGFjZWQ6IGJvb2xlYW4sXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY2I6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55ID0gKCkgPT4ge31cbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9ybUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoIWZvcm1FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtRWxlbWVudC52YWx1ZSA9IHRoaXMuYXBwbHlNYXNrKFxuICAgICAgICAgICAgZm9ybUVsZW1lbnQudmFsdWUsXG4gICAgICAgICAgICB0aGlzLm1hc2tFeHByZXNzaW9uLFxuICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICBqdXN0UGFzdGVkLFxuICAgICAgICAgICAgYmFja3NwYWNlZCxcbiAgICAgICAgICAgIGNiXG4gICAgICAgICk7XG4gICAgICAgIGlmIChmb3JtRWxlbWVudCA9PT0gdGhpcy5fZ2V0QWN0aXZlRWxlbWVudCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhcklmTm90TWF0Y2hGbigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoaWRlSW5wdXQoaW5wdXRWYWx1ZTogc3RyaW5nLCBtYXNrRXhwcmVzc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGlucHV0VmFsdWVcbiAgICAgICAgICAgIC5zcGxpdChNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcpXG4gICAgICAgICAgICAubWFwKChjdXJyOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybnMgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXR0ZXJuc1ttYXNrRXhwcmVzc2lvbltpbmRleF0gPz8gTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HXSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdHRlcm5zW21hc2tFeHByZXNzaW9uW2luZGV4XSA/PyBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkddPy5zeW1ib2xcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGF0dGVybnNbbWFza0V4cHJlc3Npb25baW5kZXhdID8/IE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklOR11cbiAgICAgICAgICAgICAgICAgICAgICAgID8uc3ltYm9sO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcpO1xuICAgIH1cblxuICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgbm90IG5lY2Vzc2FyeSwgaXQgY2hlY2tzIHJlc3VsdCBhZ2FpbnN0IG1hc2tFeHByZXNzaW9uXG4gICAgcHVibGljIGdldEFjdHVhbFZhbHVlKHJlczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgY29tcGFyZTogc3RyaW5nW10gPSByZXNcbiAgICAgICAgICAgIC5zcGxpdChNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcpXG4gICAgICAgICAgICAuZmlsdGVyKChzeW1ib2w6IHN0cmluZywgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFza0NoYXIgPSB0aGlzLm1hc2tFeHByZXNzaW9uW2ldID8/IE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORztcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1N5bWJvbE1hc2soc3ltYm9sLCBtYXNrQ2hhcikgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXMobWFza0NoYXIpICYmIHN5bWJvbCA9PT0gbWFza0NoYXIpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBpZiAoY29tcGFyZS5qb2luKE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORykgPT09IHJlcykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmUuam9pbihNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNoaWZ0VHlwZWRTeW1ib2xzKGlucHV0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGxldCBzeW1ib2xUb1JlcGxhY2UgPSAnJztcbiAgICAgICAgY29uc3QgbmV3SW5wdXRWYWx1ZTogKHN0cmluZyB8IHVuZGVmaW5lZClbXSA9XG4gICAgICAgICAgICAoaW5wdXRWYWx1ZSAmJlxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORylcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY3VyclN5bWJvbDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVtpbmRleCArIDFdID8/IE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklOR1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlW2luZGV4ICsgMV0gIT09IHRoaXMubWFza0V4cHJlc3Npb25baW5kZXggKyAxXVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVG9SZXBsYWNlID0gY3VyclN5bWJvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRWYWx1ZVtpbmRleCArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbFRvUmVwbGFjZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlU3ltYm9sOiBzdHJpbmcgPSBzeW1ib2xUb1JlcGxhY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVG9SZXBsYWNlID0gTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXBsYWNlU3ltYm9sO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJTeW1ib2w7XG4gICAgICAgICAgICAgICAgICAgIH0pKSB8fFxuICAgICAgICAgICAgW107XG4gICAgICAgIHJldHVybiBuZXdJbnB1dFZhbHVlLmpvaW4oTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IG51bWJlciB2YWx1ZSB0byBzdHJpbmdcbiAgICAgKiAzLjE0MTUgLT4gJzMuMTQxNSdcbiAgICAgKiAxZS03IC0+ICcwLjAwMDAwMDEnXG4gICAgICovXG4gICAgcHVibGljIG51bWJlclRvU3RyaW5nKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoIXZhbHVlICYmIHZhbHVlICE9PSAwKSB8fFxuICAgICAgICAgICAgKHRoaXMubWFza0V4cHJlc3Npb24uc3RhcnRzV2l0aChNYXNrRXhwcmVzc2lvbi5TRVBBUkFUT1IpICYmXG4gICAgICAgICAgICAgICAgKHRoaXMubGVhZFplcm8gfHwgIXRoaXMuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzKSkgfHxcbiAgICAgICAgICAgICh0aGlzLm1hc2tFeHByZXNzaW9uLnN0YXJ0c1dpdGgoTWFza0V4cHJlc3Npb24uU0VQQVJBVE9SKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuc2VwYXJhdG9yTGltaXQubGVuZ3RoID4gMTQgJiZcbiAgICAgICAgICAgICAgICBTdHJpbmcodmFsdWUpLmxlbmd0aCA+IDE0KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpXG4gICAgICAgICAgICAudG9Mb2NhbGVTdHJpbmcoJ2Z1bGx3aWRlJywge1xuICAgICAgICAgICAgICAgIHVzZUdyb3VwaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDIwLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXBsYWNlKGAvJHtNYXNrRXhwcmVzc2lvbi5NSU5VU30vYCwgTWFza0V4cHJlc3Npb24uTUlOVVMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93TWFza0luSW5wdXQoaW5wdXRWYWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5zaG93TWFza1R5cGVkICYmICEhdGhpcy5zaG93bk1hc2tFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXNrRXhwcmVzc2lvbi5sZW5ndGggIT09IHRoaXMuc2hvd25NYXNrRXhwcmVzc2lvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hc2sgZXhwcmVzc2lvbiBtdXN0IG1hdGNoIG1hc2sgcGxhY2Vob2xkZXIgbGVuZ3RoJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3duTWFza0V4cHJlc3Npb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93TWFza1R5cGVkKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXRWYWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXNrRXhwcmVzc2lvbiA9PT0gTWFza0V4cHJlc3Npb24uSVApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrRm9ySXAoaW5wdXRWYWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXNrRXhwcmVzc2lvbiA9PT0gTWFza0V4cHJlc3Npb24uQ1BGX0NOUEopIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrRm9yQ3BmQ25waihpbnB1dFZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXIubGVuZ3RoID09PSB0aGlzLm1hc2tFeHByZXNzaW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFza0V4cHJlc3Npb24ucmVwbGFjZSgvXFx3L2csIHRoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJJZk5vdE1hdGNoRm4oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1FbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKCFmb3JtRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJZk5vdE1hdGNoICYmXG4gICAgICAgICAgICB0aGlzLnByZWZpeC5sZW5ndGggKyB0aGlzLm1hc2tFeHByZXNzaW9uLmxlbmd0aCArIHRoaXMuc3VmZml4Lmxlbmd0aCAhPT1cbiAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC52YWx1ZS5yZXBsYWNlKHRoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXIsIE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORylcbiAgICAgICAgICAgICAgICAgICAgLmxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUVsZW1lbnRQcm9wZXJ0eSA9IFsndmFsdWUnLCBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkddO1xuICAgICAgICAgICAgdGhpcy5hcHBseU1hc2soJycsIHRoaXMubWFza0V4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBmb3JtRWxlbWVudFByb3BlcnR5KFtuYW1lLCB2YWx1ZV06IFtzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW5dKSB7XG4gICAgICAgIGlmICghdGhpcy5fcmVuZGVyZXIgfHwgIXRoaXMuX2VsZW1lbnRSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlcj8uc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCwgbmFtZSwgdmFsdWUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoZWNrU3BlY2lhbENoYXJBbW91bnQobWFzazogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY2hhcnM6IHN0cmluZ1tdID0gbWFza1xuICAgICAgICAgICAgLnNwbGl0KE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORylcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gdGhpcy5fZmluZFNwZWNpYWxDaGFyKGl0ZW0pKTtcbiAgICAgICAgcmV0dXJuIGNoYXJzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlTWFzayhpbnB1dFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3ZlTWFzayhcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZVN1ZmZpeCh0aGlzLl9yZW1vdmVQcmVmaXgoaW5wdXRWYWx1ZSkpLFxuICAgICAgICAgICAgdGhpcy5zcGVjaWFsQ2hhcmFjdGVycy5jb25jYXQoJ18nKS5jb25jYXQodGhpcy5wbGFjZUhvbGRlckNoYXJhY3RlcilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGVja0ZvcklwKGlucHV0VmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoaW5wdXRWYWwgPT09IE1hc2tFeHByZXNzaW9uLkhBU0gpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfS4ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9LiR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0uJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJyOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0VmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGlucHV0VmFsW2ldID8/IE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORztcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZS5tYXRjaCgnXFxcXGQnKSkge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA8PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0uJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfS4ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDMgJiYgYXJyLmxlbmd0aCA8PSA2KSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0uJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyci5sZW5ndGggPiA2ICYmIGFyci5sZW5ndGggPD0gOSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyci5sZW5ndGggPiA5ICYmIGFyci5sZW5ndGggPD0gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tGb3JDcGZDbnBqKGlucHV0VmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjcGYgPVxuICAgICAgICAgICAgYCR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfWAgK1xuICAgICAgICAgICAgYC4ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn1gICtcbiAgICAgICAgICAgIGAuJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YCArXG4gICAgICAgICAgICBgLSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YDtcbiAgICAgICAgY29uc3QgY25waiA9XG4gICAgICAgICAgICBgJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn1gICtcbiAgICAgICAgICAgIGAuJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YCArXG4gICAgICAgICAgICBgLiR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfWAgK1xuICAgICAgICAgICAgYC8ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YCArXG4gICAgICAgICAgICBgLSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YDtcblxuICAgICAgICBpZiAoaW5wdXRWYWwgPT09IE1hc2tFeHByZXNzaW9uLkhBU0gpIHtcbiAgICAgICAgICAgIHJldHVybiBjcGY7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJyOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0VmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGlucHV0VmFsW2ldID8/IE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORztcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZS5tYXRjaCgnXFxcXGQnKSkge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA8PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gY3BmLnNsaWNlKGFyci5sZW5ndGgsIGNwZi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID4gMyAmJiBhcnIubGVuZ3RoIDw9IDYpIHtcbiAgICAgICAgICAgIHJldHVybiBjcGYuc2xpY2UoYXJyLmxlbmd0aCArIDEsIGNwZi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID4gNiAmJiBhcnIubGVuZ3RoIDw9IDkpIHtcbiAgICAgICAgICAgIHJldHVybiBjcGYuc2xpY2UoYXJyLmxlbmd0aCArIDIsIGNwZi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID4gOSAmJiBhcnIubGVuZ3RoIDwgMTEpIHtcbiAgICAgICAgICAgIHJldHVybiBjcGYuc2xpY2UoYXJyLmxlbmd0aCArIDMsIGNwZi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09PSAxMSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09PSAxMikge1xuICAgICAgICAgICAgaWYgKGlucHV0VmFsLmxlbmd0aCA9PT0gMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY25wai5zbGljZSgxNiwgY25wai5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNucGouc2xpY2UoMTUsIGNucGoubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDEyICYmIGFyci5sZW5ndGggPD0gMTQpIHtcbiAgICAgICAgICAgIHJldHVybiBjbnBqLnNsaWNlKGFyci5sZW5ndGggKyA0LCBjbnBqLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlY3Vyc2l2ZWx5IGRldGVybWluZSB0aGUgY3VycmVudCBhY3RpdmUgZWxlbWVudCBieSBuYXZpZ2F0aW5nIHRoZSBTaGFkb3cgRE9NIHVudGlsIHRoZSBBY3RpdmUgRWxlbWVudCBpcyBmb3VuZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRBY3RpdmVFbGVtZW50KGRvY3VtZW50OiBEb2N1bWVudE9yU2hhZG93Um9vdCA9IHRoaXMuZG9jdW1lbnQpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHNoYWRvd1Jvb3RFbCA9IGRvY3VtZW50Py5hY3RpdmVFbGVtZW50Py5zaGFkb3dSb290O1xuICAgICAgICBpZiAoIXNoYWRvd1Jvb3RFbD8uYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QWN0aXZlRWxlbWVudChzaGFkb3dSb290RWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvcG9nYXRlcyB0aGUgaW5wdXQgdmFsdWUgYmFjayB0byB0aGUgQW5ndWxhciBtb2RlbCBieSB0cmlnZ2VyaW5nIHRoZSBvbkNoYW5nZSBmdW5jdGlvbi4gSXQgd29uJ3QgZG8gdGhpcyBpZiB3cml0aW5nVmFsdWVcbiAgICAgKiBpcyB0cnVlLiBJZiB0aGF0IGlzIHRydWUgaXQgbWVhbnMgd2UgYXJlIGN1cnJlbnRseSBpbiB0aGUgd3JpdGVWYWx1ZSBmdW5jdGlvbiwgd2hpY2ggaXMgc3VwcG9zZWQgdG8gb25seSB1cGRhdGUgdGhlIGFjdHVhbFxuICAgICAqIERPTSBlbGVtZW50IGJhc2VkIG9uIHRoZSBBbmd1bGFyIG1vZGVsIHZhbHVlLiBJdCBzaG91bGQgYmUgYSBvbmUgd2F5IHByb2Nlc3MsIGkuZS4gd3JpdGVWYWx1ZSBzaG91bGQgbm90IGJlIG1vZGlmeWluZyB0aGUgQW5ndWxhclxuICAgICAqIG1vZGVsIHZhbHVlIHRvby4gVGhlcmVmb3JlLCB3ZSBkb24ndCB0cmlnZ2VyIG9uQ2hhbmdlIGluIHRoaXMgc2NlbmFyaW8uXG4gICAgICogQHBhcmFtIGlucHV0VmFsdWUgdGhlIGN1cnJlbnQgZm9ybSBpbnB1dCB2YWx1ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZm9ybUNvbnRyb2xSZXN1bHQoaW5wdXRWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLndyaXRpbmdWYWx1ZSB8fCAoIXRoaXMudHJpZ2dlck9uTWFza0NoYW5nZSAmJiB0aGlzLm1hc2tDaGFuZ2VkKSkge1xuICAgICAgICAgICAgdGhpcy5tYXNrQ2hhbmdlZFxuICAgICAgICAgICAgICAgID8gdGhpcy5vbkNoYW5nZShcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b051bWJlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTeW1ib2xzKHRoaXMuX3JlbW92ZVN1ZmZpeCh0aGlzLl9yZW1vdmVQcmVmaXgoaW5wdXRWYWx1ZSkpKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgdGhpcy5tYXNrQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzKSkge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShcbiAgICAgICAgICAgICAgICB0aGlzLl90b051bWJlcihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTeW1ib2xzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlTWFzayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVTdWZmaXgodGhpcy5fcmVtb3ZlUHJlZml4KGlucHV0VmFsdWUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3BTcGVjaWFsQ2hhcmFjdGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzIHx8XG4gICAgICAgICAgICAoIXRoaXMuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzICYmIHRoaXMucHJlZml4ID09PSBpbnB1dFZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy5fdG9OdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU3ltYm9scyh0aGlzLl9yZW1vdmVTdWZmaXgodGhpcy5fcmVtb3ZlUHJlZml4KGlucHV0VmFsdWUpKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl90b051bWJlcihpbnB1dFZhbHVlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF90b051bWJlcih2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNOdW1iZXJWYWx1ZSB8fCB2YWx1ZSA9PT0gTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5tYXNrRXhwcmVzc2lvbi5zdGFydHNXaXRoKE1hc2tFeHByZXNzaW9uLlNFUEFSQVRPUikgJiZcbiAgICAgICAgICAgICh0aGlzLmxlYWRaZXJvIHx8ICF0aGlzLmRyb3BTcGVjaWFsQ2hhcmFjdGVycylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFN0cmluZyh2YWx1ZSkubGVuZ3RoID4gMTYgJiYgdGhpcy5zZXBhcmF0b3JMaW1pdC5sZW5ndGggPiAxNCkge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc05hTihudW0pID8gdmFsdWUgOiBudW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVtb3ZlTWFzayh2YWx1ZTogc3RyaW5nLCBzcGVjaWFsQ2hhcmFjdGVyc0ZvclJlbW92ZTogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLm1hc2tFeHByZXNzaW9uLnN0YXJ0c1dpdGgoTWFza0V4cHJlc3Npb24uUEVSQ0VOVCkgJiZcbiAgICAgICAgICAgIHZhbHVlLmluY2x1ZGVzKE1hc2tFeHByZXNzaW9uLkRPVClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICA/IHZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICB0aGlzLl9yZWdFeHBGb3JSZW1vdmUoc3BlY2lhbENoYXJhY3RlcnNGb3JSZW1vdmUpLFxuICAgICAgICAgICAgICAgICAgTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVtb3ZlUHJlZml4KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMucHJlZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUucmVwbGFjZSh0aGlzLnByZWZpeCwgTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKSA6IHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlbW92ZVN1ZmZpeCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1ZmZpeCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLnJlcGxhY2UodGhpcy5zdWZmaXgsIE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORykgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXRyaWV2ZVNlcGFyYXRvclZhbHVlKHJlc3VsdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc3BlY2lhbENoYXJhY3RlcnMgPSBBcnJheS5pc0FycmF5KHRoaXMuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzKVxuICAgICAgICAgICAgPyB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmZpbHRlcigodikgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLmRyb3BTcGVjaWFsQ2hhcmFjdGVycyBhcyBzdHJpbmdbXSkuaW5jbHVkZXModik7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IHRoaXMuc3BlY2lhbENoYXJhY3RlcnM7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW1vdmVNYXNrKHJlc3VsdCwgc3BlY2lhbENoYXJhY3RlcnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZ0V4cEZvclJlbW92ZShzcGVjaWFsQ2hhcmFjdGVyc0ZvclJlbW92ZTogc3RyaW5nW10pOiBSZWdFeHAge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgIHNwZWNpYWxDaGFyYWN0ZXJzRm9yUmVtb3ZlLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBgXFxcXCR7aXRlbX1gKS5qb2luKCd8JyksXG4gICAgICAgICAgICAnZ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVwbGFjZURlY2ltYWxNYXJrZXJUb0RvdCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbWFya2VycyA9IEFycmF5LmlzQXJyYXkodGhpcy5kZWNpbWFsTWFya2VyKVxuICAgICAgICAgICAgPyB0aGlzLmRlY2ltYWxNYXJrZXJcbiAgICAgICAgICAgIDogW3RoaXMuZGVjaW1hbE1hcmtlcl07XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UodGhpcy5fcmVnRXhwRm9yUmVtb3ZlKG1hcmtlcnMpLCBNYXNrRXhwcmVzc2lvbi5ET1QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBfY2hlY2tTeW1ib2xzKHJlc3VsdDogc3RyaW5nKTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORykge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLm1hc2tFeHByZXNzaW9uLnN0YXJ0c1dpdGgoTWFza0V4cHJlc3Npb24uUEVSQ0VOVCkgJiZcbiAgICAgICAgICAgIHRoaXMuZGVjaW1hbE1hcmtlciA9PT0gTWFza0V4cHJlc3Npb24uQ09NTUFcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKE1hc2tFeHByZXNzaW9uLkNPTU1BLCBNYXNrRXhwcmVzc2lvbi5ET1QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvclByZWNpc2lvbjogbnVtYmVyIHwgbnVsbCA9IHRoaXMuX3JldHJpZXZlU2VwYXJhdG9yUHJlY2lzaW9uKFxuICAgICAgICAgICAgdGhpcy5tYXNrRXhwcmVzc2lvblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzZXBhcmF0b3JWYWx1ZTogc3RyaW5nID0gdGhpcy5fcmVwbGFjZURlY2ltYWxNYXJrZXJUb0RvdChcbiAgICAgICAgICAgIHRoaXMuX3JldHJpZXZlU2VwYXJhdG9yVmFsdWUocmVzdWx0KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghdGhpcy5pc051bWJlclZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VwYXJhdG9yVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvclByZWNpc2lvbikge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdGhpcy5kZWNpbWFsTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZXBhcmF0b3JMaW1pdC5sZW5ndGggPiAxNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VwYXJhdG9yVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrUHJlY2lzaW9uKHRoaXMubWFza0V4cHJlc3Npb24sIHNlcGFyYXRvclZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzZXBhcmF0b3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE8gc2hvdWxkIHRoaW5rIGFib3V0IGhlbHBlcnMgb3Igc2VwYXJ0aW5nIGRlY2ltYWwgcHJlY2lzaW9uIHRvIG93biBwcm9wZXJ0eVxuICAgIHByaXZhdGUgX3JldHJpZXZlU2VwYXJhdG9yUHJlY2lzaW9uKG1hc2tFeHByZXRpb246IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xuICAgICAgICBjb25zdCBtYXRjaGVyOiBSZWdFeHBNYXRjaEFycmF5IHwgbnVsbCA9IG1hc2tFeHByZXRpb24ubWF0Y2goXG4gICAgICAgICAgICBuZXcgUmVnRXhwKGBec2VwYXJhdG9yXFxcXC4oW15kXSopYClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoZXIgPyBOdW1iZXIobWF0Y2hlclsxXSkgOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBfY2hlY2tQcmVjaXNpb24oc2VwYXJhdG9yRXhwcmVzc2lvbjogc3RyaW5nLCBzZXBhcmF0b3JWYWx1ZTogc3RyaW5nKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yUHJlY2lzaW9uID0gc2VwYXJhdG9yRXhwcmVzc2lvbi5zbGljZSgxMCwgMTEpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBzZXBhcmF0b3JFeHByZXNzaW9uLmluZGV4T2YoJzInKSA+IDAgfHxcbiAgICAgICAgICAgICh0aGlzLmxlYWRaZXJvICYmIE51bWJlcihzZXBhcmF0b3JQcmVjaXNpb24pID4gMSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sZWFkWmVyb1xuICAgICAgICAgICAgICAgID8gTnVtYmVyKHNlcGFyYXRvclZhbHVlKS50b0ZpeGVkKE51bWJlcihzZXBhcmF0b3JQcmVjaXNpb24pKVxuICAgICAgICAgICAgICAgIDogTnVtYmVyKHNlcGFyYXRvclZhbHVlKS50b0ZpeGVkKDIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm51bWJlclRvU3RyaW5nKHNlcGFyYXRvclZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX3JlcGVhdFBhdHRlcm5TeW1ib2xzKG1hc2tFeHA6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobWFza0V4cC5tYXRjaCgve1swLTldK30vKSAmJlxuICAgICAgICAgICAgICAgIG1hc2tFeHBcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORylcbiAgICAgICAgICAgICAgICAgICAgLnJlZHVjZSgoYWNjdW06IHN0cmluZywgY3VyclZhbDogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyVmFsID09PSBNYXNrRXhwcmVzc2lvbi5DVVJMWV9CUkFDS0VUU19MRUZUID8gaW5kZXggOiB0aGlzLl9zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsICE9PSBNYXNrRXhwcmVzc2lvbi5DVVJMWV9CUkFDS0VUU19SSUdIVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kU3BlY2lhbENoYXIoY3VyclZhbCkgPyBhY2N1bSArIGN1cnJWYWwgOiBhY2N1bTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZCA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVwZWF0TnVtYmVyID0gTnVtYmVyKG1hc2tFeHAuc2xpY2UodGhpcy5fc3RhcnQgKyAxLCB0aGlzLl9lbmQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VXaXRoOiBzdHJpbmcgPSBuZXcgQXJyYXkocmVwZWF0TnVtYmVyICsgMSkuam9pbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrRXhwW3RoaXMuX3N0YXJ0IC0gMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0V4cC5zbGljZSgwLCB0aGlzLl9zdGFydCkubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tFeHAuaW5jbHVkZXMoTWFza0V4cHJlc3Npb24uTEVUVEVSX1MpXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzeW1ib2xzID0gbWFza0V4cC5zbGljZSgwLCB0aGlzLl9zdGFydCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xzLmluY2x1ZGVzKE1hc2tFeHByZXNzaW9uLkNVUkxZX0JSQUNLRVRTX0xFRlQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYWNjdW0gKyByZXBsYWNlV2l0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN5bWJvbHMgKyBhY2N1bSArIHJlcGxhY2VXaXRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW0gKyByZXBsYWNlV2l0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgJycpKSB8fFxuICAgICAgICAgICAgbWFza0V4cFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjdXJyZW50TG9jYWxlRGVjaW1hbE1hcmtlcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gKDEuMSkudG9Mb2NhbGVTdHJpbmcoKS5zdWJzdHJpbmcoMSwgMik7XG4gICAgfVxufVxuIl19
553
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hc2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXNrLWxpYi9zcmMvbGliL25neC1tYXNrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBVyxNQUFNLG1CQUFtQixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUluRSxNQUFNLE9BQU8sY0FBZSxTQUFRLHFCQUFxQjtJQUR6RDs7UUFFVyxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUV0QixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUVqQixhQUFRLEdBQWtCLElBQUksQ0FBQztRQUUvQixXQUFNLEdBQWtCLElBQUksQ0FBQztRQUVwQzs7O1dBR0c7UUFDSSxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUVyQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQix5QkFBb0IsR0FBYSxFQUFFLENBQUM7UUFFcEMsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBTTNCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbkIsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFFcEIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDM0Isb0dBQW9HO1FBQzdGLGFBQVEsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBRWhCLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUIsWUFBTyxHQUFHLE1BQU0sQ0FBVSxlQUFlLENBQUMsQ0FBQztRQUU3QyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFR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QUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN2RSxNQUFNLFdBQVcsR0FBVyxJQUFJLEtBQUssQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN4RCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FDM0IsQ0FBQztnQkFDRixJQUNJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFDeEMsT0FBTyxDQUFDLFFBQVEsbUNBQXlCLEVBQzNDO29CQUNFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2xELE9BQU8sT0FBTyxDQUFDLFFBQVEsOENBQW9DO3dCQUN2RCxDQUFDLENBQUMsS0FBSyxHQUFHLFdBQVc7d0JBQ3JCLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxHQUFHLFdBQVcsQ0FBQztpQkFDdkM7cUJBQU07b0JBQ0gsT0FBTyxLQUFLLEdBQUcsV0FBVyxDQUFDO2lCQUM5QjtZQUNMLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNmLE9BQU8sQ0FDVixDQUFDO0lBQ04sQ0FBQztJQUVNLDBCQUEwQjtRQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDOzhHQTlxQlEsY0FBYztrSEFBZCxjQUFjOzsyRkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgaW5qZWN0LCBJbmplY3RhYmxlLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgTkdYX01BU0tfQ09ORklHLCBJQ29uZmlnIH0gZnJvbSAnLi9uZ3gtbWFzay5jb25maWcnO1xuaW1wb3J0IHsgTmd4TWFza0FwcGxpZXJTZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtbWFzay1hcHBsaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFza0V4cHJlc3Npb24gfSBmcm9tICcuL25neC1tYXNrLWV4cHJlc3Npb24uZW51bSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ3hNYXNrU2VydmljZSBleHRlbmRzIE5neE1hc2tBcHBsaWVyU2VydmljZSB7XG4gICAgcHVibGljIGlzTnVtYmVyVmFsdWUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBtYXNrSXNTaG93biA9ICcnO1xuXG4gICAgcHVibGljIHNlbFN0YXJ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBzZWxFbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB3ZSBhcmUgY3VycmVudGx5IGluIHdyaXRlVmFsdWUgZnVuY3Rpb24sIGluIHRoaXMgY2FzZSB3aGVuIGFwcGx5aW5nIHRoZSBtYXNrIHdlIGRvbid0IHdhbnQgdG8gdHJpZ2dlciBvbkNoYW5nZSBmdW5jdGlvbixcbiAgICAgKiBzaW5jZSB3cml0ZVZhbHVlIHNob3VsZCBiZSBhIG9uZSB3YXkgb25seSBwcm9jZXNzIG9mIHdyaXRpbmcgdGhlIERPTSB2YWx1ZSBiYXNlZCBvbiB0aGUgQW5ndWxhciBtb2RlbCB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGluZ1ZhbHVlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgbWFza0NoYW5nZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgX21hc2tFeHByZXNzaW9uQXJyYXk6IHN0cmluZ1tdID0gW107XG5cbiAgICBwdWJsaWMgdHJpZ2dlck9uTWFza0NoYW5nZSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfc3RhcnQhOiBudW1iZXI7XG5cbiAgICBwcml2YXRlIF9lbmQhOiBudW1iZXI7XG5cbiAgICBwcml2YXRlIF9lbWl0VmFsdWUgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX3ByZXZpb3VzVmFsdWUgPSAnJztcblxuICAgIHByaXZhdGUgX2N1cnJlbnRWYWx1ZSA9ICcnO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwdWJsaWMgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIF9jb25maWcgPSBpbmplY3Q8SUNvbmZpZz4oTkdYX01BU0tfQ09ORklHKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgcHVibGljIG92ZXJyaWRlIGFwcGx5TWFzayhcbiAgICAgICAgaW5wdXRWYWx1ZTogc3RyaW5nLFxuICAgICAgICBtYXNrRXhwcmVzc2lvbjogc3RyaW5nLFxuICAgICAgICBwb3NpdGlvbiA9IDAsXG4gICAgICAgIGp1c3RQYXN0ZWQgPSBmYWxzZSxcbiAgICAgICAgYmFja3NwYWNlZCA9IGZhbHNlLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNiOiAoLi4uYXJnczogYW55W10pID0+IGFueSA9ICgpID0+IHt9XG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFtYXNrRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0VmFsdWUgIT09IHRoaXMuYWN0dWFsVmFsdWUgPyB0aGlzLmFjdHVhbFZhbHVlIDogaW5wdXRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hc2tJc1Nob3duID0gdGhpcy5zaG93TWFza1R5cGVkXG4gICAgICAgICAgICA/IHRoaXMuc2hvd01hc2tJbklucHV0KClcbiAgICAgICAgICAgIDogTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HO1xuICAgICAgICBpZiAodGhpcy5tYXNrRXhwcmVzc2lvbiA9PT0gTWFza0V4cHJlc3Npb24uSVAgJiYgdGhpcy5zaG93TWFza1R5cGVkKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tJc1Nob3duID0gdGhpcy5zaG93TWFza0luSW5wdXQoaW5wdXRWYWx1ZSB8fCBNYXNrRXhwcmVzc2lvbi5IQVNIKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tYXNrRXhwcmVzc2lvbiA9PT0gTWFza0V4cHJlc3Npb24uQ1BGX0NOUEogJiYgdGhpcy5zaG93TWFza1R5cGVkKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tJc1Nob3duID0gdGhpcy5zaG93TWFza0luSW5wdXQoaW5wdXRWYWx1ZSB8fCBNYXNrRXhwcmVzc2lvbi5IQVNIKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlucHV0VmFsdWUgJiYgdGhpcy5zaG93TWFza1R5cGVkKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sUmVzdWx0KHRoaXMucHJlZml4KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByZWZpeCArIHRoaXMubWFza0lzU2hvd247XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2V0U3ltYm9sOiBzdHJpbmcgPVxuICAgICAgICAgICAgISFpbnB1dFZhbHVlICYmIHR5cGVvZiB0aGlzLnNlbFN0YXJ0ID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgID8gaW5wdXRWYWx1ZVt0aGlzLnNlbFN0YXJ0XSA/PyBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkdcbiAgICAgICAgICAgICAgICA6IE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORztcbiAgICAgICAgbGV0IG5ld0lucHV0VmFsdWUgPSAnJztcbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuSW5wdXQgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy53cml0aW5nVmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBhY3R1YWxSZXN1bHQ6IHN0cmluZ1tdID1cbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlICYmIGlucHV0VmFsdWUubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXRWYWx1ZS5zcGxpdChNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5hY3R1YWxWYWx1ZS5zcGxpdChNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUgIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VsU3RhcnQgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0aGlzLnNlbEVuZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbFN0YXJ0ID0gTnVtYmVyKHRoaXMuc2VsU3RhcnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsRW5kID0gTnVtYmVyKHRoaXMuc2VsRW5kKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSAhPT0gTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HICYmIGFjdHVhbFJlc3VsdC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyB0eXBlb2YgdGhpcy5zZWxTdGFydCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHRoaXMuc2VsRW5kID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBpbnB1dFZhbHVlLmxlbmd0aCA+IGFjdHVhbFJlc3VsdC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFjdHVhbFJlc3VsdC5zcGxpY2UodGhpcy5zZWxTdGFydCwgMCwgZ2V0U3ltYm9sKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRWYWx1ZS5sZW5ndGggPCBhY3R1YWxSZXN1bHQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhY3R1YWxSZXN1bHQubGVuZ3RoIC0gaW5wdXRWYWx1ZS5sZW5ndGggPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBiYWNrc3BhY2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFjdHVhbFJlc3VsdC5zcGxpY2UodGhpcy5zZWxTdGFydCAtIDEsIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFjdHVhbFJlc3VsdC5zcGxpY2UoaW5wdXRWYWx1ZS5sZW5ndGggLSAxLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFjdHVhbFJlc3VsdC5zcGxpY2UodGhpcy5zZWxTdGFydCwgdGhpcy5zZWxFbmQgLSB0aGlzLnNlbFN0YXJ0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogKGFjdHVhbFJlc3VsdCA9IFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dNYXNrVHlwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaGlkZGVuSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWUgPSB0aGlzLnJlbW92ZU1hc2soaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNsaW50LWVuYWJsZSAgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgICAgICAgbmV3SW5wdXRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgdGhpcy5hY3R1YWxWYWx1ZS5sZW5ndGggJiYgYWN0dWFsUmVzdWx0Lmxlbmd0aCA8PSBpbnB1dFZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc2hpZnRUeXBlZFN5bWJvbHMoYWN0dWFsUmVzdWx0LmpvaW4oTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKSlcbiAgICAgICAgICAgICAgICAgICAgOiBpbnB1dFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqdXN0UGFzdGVkICYmICh0aGlzLmhpZGRlbklucHV0IHx8ICF0aGlzLmhpZGRlbklucHV0KSkge1xuICAgICAgICAgICAgbmV3SW5wdXRWYWx1ZSA9IGlucHV0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kZWxldGVkU3BlY2lhbENoYXJhY3RlciAmJiBwb3NpdGlvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXModGhpcy5hY3R1YWxWYWx1ZS5zbGljZShwb3NpdGlvbiwgcG9zaXRpb24gKyAxKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWFza0V4cHJlc3Npb24uc2xpY2UocG9zaXRpb24gLSAxLCBwb3NpdGlvbiArIDEpICE9PSBNYXNrRXhwcmVzc2lvbi5NT05USFMpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uIC0gMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgdGhpcy5kZWxldGVkU3BlY2lhbENoYXJhY3RlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2hvd01hc2tUeXBlZCAmJlxuICAgICAgICAgICAgdGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlci5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICF0aGlzLmxlYWRaZXJvRGF0ZVRpbWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIGlucHV0VmFsdWUgPSB0aGlzLnJlbW92ZU1hc2soaW5wdXRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tYXNrQ2hhbmdlZCkge1xuICAgICAgICAgICAgbmV3SW5wdXRWYWx1ZSA9IGlucHV0VmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdJbnB1dFZhbHVlID1cbiAgICAgICAgICAgICAgICBCb29sZWFuKG5ld0lucHV0VmFsdWUpICYmIG5ld0lucHV0VmFsdWUubGVuZ3RoID8gbmV3SW5wdXRWYWx1ZSA6IGlucHV0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQ6IHN0cmluZyA9IHN1cGVyLmFwcGx5TWFzayhcbiAgICAgICAgICAgIG5ld0lucHV0VmFsdWUsXG4gICAgICAgICAgICBtYXNrRXhwcmVzc2lvbixcbiAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAganVzdFBhc3RlZCxcbiAgICAgICAgICAgIGJhY2tzcGFjZWQsXG4gICAgICAgICAgICBjYlxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuYWN0dWFsVmFsdWUgPSB0aGlzLmdldEFjdHVhbFZhbHVlKHJlc3VsdCk7XG4gICAgICAgIC8vIGhhbmRsZSBzb21lIHNlcGFyYXRvciBpbXBsaWNhdGlvbnM6XG4gICAgICAgIC8vIGEuKSBhZGp1c3QgZGVjaW1hbE1hcmtlciBkZWZhdWx0ICguIC0+ICwpIGlmIHRob3VzYW5kU2VwYXJhdG9yIGlzIGEgZG90XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3IgPT09IE1hc2tFeHByZXNzaW9uLkRPVCAmJlxuICAgICAgICAgICAgdGhpcy5kZWNpbWFsTWFya2VyID09PSBNYXNrRXhwcmVzc2lvbi5ET1RcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmRlY2ltYWxNYXJrZXIgPSBNYXNrRXhwcmVzc2lvbi5DT01NQTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGIpIHJlbW92ZSBkZWNpbWFsIG1hcmtlciBmcm9tIGxpc3Qgb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIG1hc2tcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5tYXNrRXhwcmVzc2lvbi5zdGFydHNXaXRoKE1hc2tFeHByZXNzaW9uLlNFUEFSQVRPUikgJiZcbiAgICAgICAgICAgIHRoaXMuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzID09PSB0cnVlXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zcGVjaWFsQ2hhcmFjdGVycyA9IHRoaXMuc3BlY2lhbENoYXJhY3RlcnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChpdGVtOiBzdHJpbmcpID0+XG4gICAgICAgICAgICAgICAgICAgICF0aGlzLl9jb21wYXJlT3JJbmNsdWRlcyhpdGVtLCB0aGlzLmRlY2ltYWxNYXJrZXIsIHRoaXMudGhvdXNhbmRTZXBhcmF0b3IpIC8vaXRlbSAhPT0gdGhpcy5kZWNpbWFsTWFya2VyLCAvLyAhXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCB8fCByZXN1bHQgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c1ZhbHVlID0gdGhpcy5fY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gcmVzdWx0O1xuICAgICAgICAgICAgdGhpcy5fZW1pdFZhbHVlID0gdGhpcy5fcHJldmlvdXNWYWx1ZSAhPT0gdGhpcy5fY3VycmVudFZhbHVlIHx8IHRoaXMubWFza0NoYW5nZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZW1pdFZhbHVlID8gdGhpcy5mb3JtQ29udHJvbFJlc3VsdChyZXN1bHQpIDogJyc7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNob3dNYXNrVHlwZWQgfHwgKHRoaXMuc2hvd01hc2tUeXBlZCAmJiB0aGlzLmhpZGRlbklucHV0KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGlkZGVuSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoYmFja3NwYWNlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oaWRlSW5wdXQocmVzdWx0LCB0aGlzLm1hc2tFeHByZXNzaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlSW5wdXQocmVzdWx0LCB0aGlzLm1hc2tFeHByZXNzaW9uKSArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFza0lzU2hvd24uc2xpY2UocmVzdWx0Lmxlbmd0aClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNMZW46IG51bWJlciA9IHJlc3VsdC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHByZWZObWFzazogc3RyaW5nID0gdGhpcy5wcmVmaXggKyB0aGlzLm1hc2tJc1Nob3duO1xuXG4gICAgICAgIGlmICh0aGlzLm1hc2tFeHByZXNzaW9uLmluY2x1ZGVzKE1hc2tFeHByZXNzaW9uLkhPVVJTKSkge1xuICAgICAgICAgICAgY29uc3QgY291bnRTa2lwZWRTeW1ib2wgPSB0aGlzLl9udW1iZXJTa2lwZWRTeW1ib2xzKHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgcHJlZk5tYXNrLnNsaWNlKHJlc0xlbiArIGNvdW50U2tpcGVkU3ltYm9sKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMubWFza0V4cHJlc3Npb24gPT09IE1hc2tFeHByZXNzaW9uLklQIHx8XG4gICAgICAgICAgICB0aGlzLm1hc2tFeHByZXNzaW9uID09PSBNYXNrRXhwcmVzc2lvbi5DUEZfQ05QSlxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBwcmVmTm1hc2s7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdCArIHByZWZObWFzay5zbGljZShyZXNMZW4pO1xuICAgIH1cblxuICAgIC8vIGdldCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIHNoaWZ0ZWRcbiAgICBwcml2YXRlIF9udW1iZXJTa2lwZWRTeW1ib2xzKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBjb25zdCByZWdleCA9IC8oXnxcXEQpKFxcZFxcRCkvZztcbiAgICAgICAgbGV0IG1hdGNoID0gcmVnZXguZXhlYyh2YWx1ZSk7XG4gICAgICAgIGxldCBjb3VudFNraXBlZFN5bWJvbCA9IDA7XG4gICAgICAgIHdoaWxlIChtYXRjaCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb3VudFNraXBlZFN5bWJvbCArPSAxO1xuICAgICAgICAgICAgbWF0Y2ggPSByZWdleC5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY291bnRTa2lwZWRTeW1ib2w7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5VmFsdWVDaGFuZ2VzKFxuICAgICAgICBwb3NpdGlvbjogbnVtYmVyLFxuICAgICAgICBqdXN0UGFzdGVkOiBib29sZWFuLFxuICAgICAgICBiYWNrc3BhY2VkOiBib29sZWFuLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNiOiAoLi4uYXJnczogYW55W10pID0+IGFueSA9ICgpID0+IHt9XG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1FbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKCFmb3JtRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybUVsZW1lbnQudmFsdWUgPSB0aGlzLmFwcGx5TWFzayhcbiAgICAgICAgICAgIGZvcm1FbGVtZW50LnZhbHVlLFxuICAgICAgICAgICAgdGhpcy5tYXNrRXhwcmVzc2lvbixcbiAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAganVzdFBhc3RlZCxcbiAgICAgICAgICAgIGJhY2tzcGFjZWQsXG4gICAgICAgICAgICBjYlxuICAgICAgICApO1xuICAgICAgICBpZiAoZm9ybUVsZW1lbnQgPT09IHRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXJJZk5vdE1hdGNoRm4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZUlucHV0KGlucHV0VmFsdWU6IHN0cmluZywgbWFza0V4cHJlc3Npb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpbnB1dFZhbHVlXG4gICAgICAgICAgICAuc3BsaXQoTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKVxuICAgICAgICAgICAgLm1hcCgoY3Vycjogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdHRlcm5zICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybnNbbWFza0V4cHJlc3Npb25baW5kZXhdID8/IE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklOR10gJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXR0ZXJuc1ttYXNrRXhwcmVzc2lvbltpbmRleF0gPz8gTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HXT8uc3ltYm9sXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhdHRlcm5zW21hc2tFeHByZXNzaW9uW2luZGV4XSA/PyBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkddXG4gICAgICAgICAgICAgICAgICAgICAgICA/LnN5bWJvbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnI7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBuZWNlc3NhcnksIGl0IGNoZWNrcyByZXN1bHQgYWdhaW5zdCBtYXNrRXhwcmVzc2lvblxuICAgIHB1YmxpYyBnZXRBY3R1YWxWYWx1ZShyZXM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNvbXBhcmU6IHN0cmluZ1tdID0gcmVzXG4gICAgICAgICAgICAuc3BsaXQoTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKVxuICAgICAgICAgICAgLmZpbHRlcigoc3ltYm9sOiBzdHJpbmcsIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hc2tDaGFyID0gdGhpcy5tYXNrRXhwcmVzc2lvbltpXSA/PyBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTeW1ib2xNYXNrKHN5bWJvbCwgbWFza0NoYXIpIHx8XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmluY2x1ZGVzKG1hc2tDaGFyKSAmJiBzeW1ib2wgPT09IG1hc2tDaGFyKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbXBhcmUuam9pbihNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcpID09PSByZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wYXJlLmpvaW4oTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaGlmdFR5cGVkU3ltYm9scyhpbnB1dFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgc3ltYm9sVG9SZXBsYWNlID0gJyc7XG4gICAgICAgIGNvbnN0IG5ld0lucHV0VmFsdWU6IChzdHJpbmcgfCB1bmRlZmluZWQpW10gPVxuICAgICAgICAgICAgKGlucHV0VmFsdWUgJiZcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdChNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGN1cnJTeW1ib2w6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BlY2lhbENoYXJhY3RlcnMuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWVbaW5kZXggKyAxXSA/PyBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZVtpbmRleCArIDFdICE9PSB0aGlzLm1hc2tFeHByZXNzaW9uW2luZGV4ICsgMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFRvUmVwbGFjZSA9IGN1cnJTeW1ib2w7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0VmFsdWVbaW5kZXggKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2xUb1JlcGxhY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVwbGFjZVN5bWJvbDogc3RyaW5nID0gc3ltYm9sVG9SZXBsYWNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFRvUmVwbGFjZSA9IE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVwbGFjZVN5bWJvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyU3ltYm9sO1xuICAgICAgICAgICAgICAgICAgICB9KSkgfHxcbiAgICAgICAgICAgIFtdO1xuICAgICAgICByZXR1cm4gbmV3SW5wdXRWYWx1ZS5qb2luKE1hc2tFeHByZXNzaW9uLkVNUFRZX1NUUklORyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBudW1iZXIgdmFsdWUgdG8gc3RyaW5nXG4gICAgICogMy4xNDE1IC0+ICczLjE0MTUnXG4gICAgICogMWUtNyAtPiAnMC4wMDAwMDAxJ1xuICAgICAqL1xuICAgIHB1YmxpYyBudW1iZXJUb1N0cmluZyh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkgfHxcbiAgICAgICAgICAgICh0aGlzLm1hc2tFeHByZXNzaW9uLnN0YXJ0c1dpdGgoTWFza0V4cHJlc3Npb24uU0VQQVJBVE9SKSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLmxlYWRaZXJvIHx8ICF0aGlzLmRyb3BTcGVjaWFsQ2hhcmFjdGVycykpIHx8XG4gICAgICAgICAgICAodGhpcy5tYXNrRXhwcmVzc2lvbi5zdGFydHNXaXRoKE1hc2tFeHByZXNzaW9uLlNFUEFSQVRPUikgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnNlcGFyYXRvckxpbWl0Lmxlbmd0aCA+IDE0ICYmXG4gICAgICAgICAgICAgICAgU3RyaW5nKHZhbHVlKS5sZW5ndGggPiAxNClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKVxuICAgICAgICAgICAgLnRvTG9jYWxlU3RyaW5nKCdmdWxsd2lkZScsIHtcbiAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyMCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZShgLyR7TWFza0V4cHJlc3Npb24uTUlOVVN9L2AsIE1hc2tFeHByZXNzaW9uLk1JTlVTKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd01hc2tJbklucHV0KGlucHV0VmFsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd01hc2tUeXBlZCAmJiAhIXRoaXMuc2hvd25NYXNrRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMubWFza0V4cHJlc3Npb24ubGVuZ3RoICE9PSB0aGlzLnNob3duTWFza0V4cHJlc3Npb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXNrIGV4cHJlc3Npb24gbXVzdCBtYXRjaCBtYXNrIHBsYWNlaG9sZGVyIGxlbmd0aCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93bk1hc2tFeHByZXNzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd01hc2tUeXBlZCkge1xuICAgICAgICAgICAgaWYgKGlucHV0VmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWFza0V4cHJlc3Npb24gPT09IE1hc2tFeHByZXNzaW9uLklQKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGVja0ZvcklwKGlucHV0VmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWFza0V4cHJlc3Npb24gPT09IE1hc2tFeHByZXNzaW9uLkNQRl9DTlBKKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGVja0ZvckNwZkNucGooaW5wdXRWYWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyLmxlbmd0aCA9PT0gdGhpcy5tYXNrRXhwcmVzc2lvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wbGFjZUhvbGRlckNoYXJhY3RlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hc2tFeHByZXNzaW9uLnJlcGxhY2UoL1xcdy9nLCB0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFySWZOb3RNYXRjaEZuKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmICghZm9ybUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmNsZWFySWZOb3RNYXRjaCAmJlxuICAgICAgICAgICAgdGhpcy5wcmVmaXgubGVuZ3RoICsgdGhpcy5tYXNrRXhwcmVzc2lvbi5sZW5ndGggKyB0aGlzLnN1ZmZpeC5sZW5ndGggIT09XG4gICAgICAgICAgICAgICAgZm9ybUVsZW1lbnQudmFsdWUucmVwbGFjZSh0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyLCBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcpXG4gICAgICAgICAgICAgICAgICAgIC5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1FbGVtZW50UHJvcGVydHkgPSBbJ3ZhbHVlJywgTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HXTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlNYXNrKCcnLCB0aGlzLm1hc2tFeHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZm9ybUVsZW1lbnRQcm9wZXJ0eShbbmFtZSwgdmFsdWVdOiBbc3RyaW5nLCBzdHJpbmcgfCBib29sZWFuXSkge1xuICAgICAgICBpZiAoIXRoaXMuX3JlbmRlcmVyIHx8ICF0aGlzLl9lbGVtZW50UmVmKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihcbiAgICAgICAgICAgICgpID0+IHRoaXMuX3JlbmRlcmVyPy5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50LCBuYW1lLCB2YWx1ZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hlY2tTcGVjaWFsQ2hhckFtb3VudChtYXNrOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBjaGFyczogc3RyaW5nW10gPSBtYXNrXG4gICAgICAgICAgICAuc3BsaXQoTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKVxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB0aGlzLl9maW5kU3BlY2lhbENoYXIoaXRlbSkpO1xuICAgICAgICByZXR1cm4gY2hhcnMubGVuZ3RoO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVNYXNrKGlucHV0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW1vdmVNYXNrKFxuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU3VmZml4KHRoaXMuX3JlbW92ZVByZWZpeChpbnB1dFZhbHVlKSksXG4gICAgICAgICAgICB0aGlzLnNwZWNpYWxDaGFyYWN0ZXJzLmNvbmNhdCgnXycpLmNvbmNhdCh0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrRm9ySXAoaW5wdXRWYWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChpbnB1dFZhbCA9PT0gTWFza0V4cHJlc3Npb24uSEFTSCkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9LiR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0uJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfS4ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcnI6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRWYWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXRWYWxbaV0gPz8gTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HO1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlLm1hdGNoKCdcXFxcZCcpKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhcnIubGVuZ3RoIDw9IDMpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfS4ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9LiR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn1gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID4gMyAmJiBhcnIubGVuZ3RoIDw9IDYpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfS4ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDYgJiYgYXJyLmxlbmd0aCA8PSA5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wbGFjZUhvbGRlckNoYXJhY3RlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDkgJiYgYXJyLmxlbmd0aCA8PSAxMikge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGVja0ZvckNwZkNucGooaW5wdXRWYWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNwZiA9XG4gICAgICAgICAgICBgJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YCArXG4gICAgICAgICAgICBgLiR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfWAgK1xuICAgICAgICAgICAgYC4ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn1gICtcbiAgICAgICAgICAgIGAtJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn1gO1xuICAgICAgICBjb25zdCBjbnBqID1cbiAgICAgICAgICAgIGAke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfWAgK1xuICAgICAgICAgICAgYC4ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn1gICtcbiAgICAgICAgICAgIGAuJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9YCArXG4gICAgICAgICAgICBgLyR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn0ke3RoaXMucGxhY2VIb2xkZXJDaGFyYWN0ZXJ9JHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn1gICtcbiAgICAgICAgICAgIGAtJHt0aGlzLnBsYWNlSG9sZGVyQ2hhcmFjdGVyfSR7dGhpcy5wbGFjZUhvbGRlckNoYXJhY3Rlcn1gO1xuXG4gICAgICAgIGlmIChpbnB1dFZhbCA9PT0gTWFza0V4cHJlc3Npb24uSEFTSCkge1xuICAgICAgICAgICAgcmV0dXJuIGNwZjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcnI6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRWYWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXRWYWxbaV0gPz8gTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HO1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlLm1hdGNoKCdcXFxcZCcpKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhcnIubGVuZ3RoIDw9IDMpIHtcbiAgICAgICAgICAgIHJldHVybiBjcGYuc2xpY2UoYXJyLmxlbmd0aCwgY3BmLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyci5sZW5ndGggPiAzICYmIGFyci5sZW5ndGggPD0gNikge1xuICAgICAgICAgICAgcmV0dXJuIGNwZi5zbGljZShhcnIubGVuZ3RoICsgMSwgY3BmLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyci5sZW5ndGggPiA2ICYmIGFyci5sZW5ndGggPD0gOSkge1xuICAgICAgICAgICAgcmV0dXJuIGNwZi5zbGljZShhcnIubGVuZ3RoICsgMiwgY3BmLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyci5sZW5ndGggPiA5ICYmIGFyci5sZW5ndGggPCAxMSkge1xuICAgICAgICAgICAgcmV0dXJuIGNwZi5zbGljZShhcnIubGVuZ3RoICsgMywgY3BmLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT09IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT09IDEyKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXRWYWwubGVuZ3RoID09PSAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbnBqLnNsaWNlKDE2LCBjbnBqLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY25wai5zbGljZSgxNSwgY25wai5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID4gMTIgJiYgYXJyLmxlbmd0aCA8PSAxNCkge1xuICAgICAgICAgICAgcmV0dXJuIGNucGouc2xpY2UoYXJyLmxlbmd0aCArIDQsIGNucGoubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVjdXJzaXZlbHkgZGV0ZXJtaW5lIHRoZSBjdXJyZW50IGFjdGl2ZSBlbGVtZW50IGJ5IG5hdmlnYXRpbmcgdGhlIFNoYWRvdyBET00gdW50aWwgdGhlIEFjdGl2ZSBFbGVtZW50IGlzIGZvdW5kLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEFjdGl2ZUVsZW1lbnQoZG9jdW1lbnQ6IERvY3VtZW50T3JTaGFkb3dSb290ID0gdGhpcy5kb2N1bWVudCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc2hhZG93Um9vdEVsID0gZG9jdW1lbnQ/LmFjdGl2ZUVsZW1lbnQ/LnNoYWRvd1Jvb3Q7XG4gICAgICAgIGlmICghc2hhZG93Um9vdEVsPy5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRBY3RpdmVFbGVtZW50KHNoYWRvd1Jvb3RFbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9wb2dhdGVzIHRoZSBpbnB1dCB2YWx1ZSBiYWNrIHRvIHRoZSBBbmd1bGFyIG1vZGVsIGJ5IHRyaWdnZXJpbmcgdGhlIG9uQ2hhbmdlIGZ1bmN0aW9uLiBJdCB3b24ndCBkbyB0aGlzIGlmIHdyaXRpbmdWYWx1ZVxuICAgICAqIGlzIHRydWUuIElmIHRoYXQgaXMgdHJ1ZSBpdCBtZWFucyB3ZSBhcmUgY3VycmVudGx5IGluIHRoZSB3cml0ZVZhbHVlIGZ1bmN0aW9uLCB3aGljaCBpcyBzdXBwb3NlZCB0byBvbmx5IHVwZGF0ZSB0aGUgYWN0dWFsXG4gICAgICogRE9NIGVsZW1lbnQgYmFzZWQgb24gdGhlIEFuZ3VsYXIgbW9kZWwgdmFsdWUuIEl0IHNob3VsZCBiZSBhIG9uZSB3YXkgcHJvY2VzcywgaS5lLiB3cml0ZVZhbHVlIHNob3VsZCBub3QgYmUgbW9kaWZ5aW5nIHRoZSBBbmd1bGFyXG4gICAgICogbW9kZWwgdmFsdWUgdG9vLiBUaGVyZWZvcmUsIHdlIGRvbid0IHRyaWdnZXIgb25DaGFuZ2UgaW4gdGhpcyBzY2VuYXJpby5cbiAgICAgKiBAcGFyYW0gaW5wdXRWYWx1ZSB0aGUgY3VycmVudCBmb3JtIGlucHV0IHZhbHVlXG4gICAgICovXG4gICAgcHJpdmF0ZSBmb3JtQ29udHJvbFJlc3VsdChpbnB1dFZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMud3JpdGluZ1ZhbHVlIHx8ICghdGhpcy50cmlnZ2VyT25NYXNrQ2hhbmdlICYmIHRoaXMubWFza0NoYW5nZWQpKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tDaGFuZ2VkXG4gICAgICAgICAgICAgICAgPyB0aGlzLm9uQ2hhbmdlKFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvTnVtYmVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1N5bWJvbHModGhpcy5fcmVtb3ZlU3VmZml4KHRoaXMuX3JlbW92ZVByZWZpeChpbnB1dFZhbHVlKSkpXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICB0aGlzLm1hc2tDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kcm9wU3BlY2lhbENoYXJhY3RlcnMpKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKFxuICAgICAgICAgICAgICAgIHRoaXMuX3RvTnVtYmVyKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1N5bWJvbHMoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVNYXNrKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVN1ZmZpeCh0aGlzLl9yZW1vdmVQcmVmaXgoaW5wdXRWYWx1ZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5kcm9wU3BlY2lhbENoYXJhY3RlcnMgfHxcbiAgICAgICAgICAgICghdGhpcy5kcm9wU3BlY2lhbENoYXJhY3RlcnMgJiYgdGhpcy5wcmVmaXggPT09IGlucHV0VmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShcbiAgICAgICAgICAgICAgICB0aGlzLl90b051bWJlcihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTeW1ib2xzKHRoaXMuX3JlbW92ZVN1ZmZpeCh0aGlzLl9yZW1vdmVQcmVmaXgoaW5wdXRWYWx1ZSkpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX3RvTnVtYmVyKGlucHV0VmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3RvTnVtYmVyKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgICAgIGlmICghdGhpcy5pc051bWJlclZhbHVlIHx8IHZhbHVlID09PSBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLm1hc2tFeHByZXNzaW9uLnN0YXJ0c1dpdGgoTWFza0V4cHJlc3Npb24uU0VQQVJBVE9SKSAmJlxuICAgICAgICAgICAgKHRoaXMubGVhZFplcm8gfHwgIXRoaXMuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU3RyaW5nKHZhbHVlKS5sZW5ndGggPiAxNiAmJiB0aGlzLnNlcGFyYXRvckxpbWl0Lmxlbmd0aCA+IDE0KSB7XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG51bSkgPyB2YWx1ZSA6IG51bTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW1vdmVNYXNrKHZhbHVlOiBzdHJpbmcsIHNwZWNpYWxDaGFyYWN0ZXJzRm9yUmVtb3ZlOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMubWFza0V4cHJlc3Npb24uc3RhcnRzV2l0aChNYXNrRXhwcmVzc2lvbi5QRVJDRU5UKSAmJlxuICAgICAgICAgICAgdmFsdWUuaW5jbHVkZXMoTWFza0V4cHJlc3Npb24uRE9UKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgID8gdmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZ0V4cEZvclJlbW92ZShzcGVjaWFsQ2hhcmFjdGVyc0ZvclJlbW92ZSksXG4gICAgICAgICAgICAgICAgICBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkdcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW1vdmVQcmVmaXgodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5wcmVmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS5yZXBsYWNlKHRoaXMucHJlZml4LCBNYXNrRXhwcmVzc2lvbi5FTVBUWV9TVFJJTkcpIDogdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVtb3ZlU3VmZml4KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuc3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUucmVwbGFjZSh0aGlzLnN1ZmZpeCwgTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKSA6IHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JldHJpZXZlU2VwYXJhdG9yVmFsdWUocmVzdWx0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzcGVjaWFsQ2hhcmFjdGVycyA9IEFycmF5LmlzQXJyYXkodGhpcy5kcm9wU3BlY2lhbENoYXJhY3RlcnMpXG4gICAgICAgICAgICA/IHRoaXMuc3BlY2lhbENoYXJhY3RlcnMuZmlsdGVyKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuZHJvcFNwZWNpYWxDaGFyYWN0ZXJzIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyh2KTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogdGhpcy5zcGVjaWFsQ2hhcmFjdGVycztcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbW92ZU1hc2socmVzdWx0LCBzcGVjaWFsQ2hhcmFjdGVycyBhcyBzdHJpbmdbXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVnRXhwRm9yUmVtb3ZlKHNwZWNpYWxDaGFyYWN0ZXJzRm9yUmVtb3ZlOiBzdHJpbmdbXSk6IFJlZ0V4cCB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgc3BlY2lhbENoYXJhY3RlcnNGb3JSZW1vdmUubWFwKChpdGVtOiBzdHJpbmcpID0+IGBcXFxcJHtpdGVtfWApLmpvaW4oJ3wnKSxcbiAgICAgICAgICAgICdnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXBsYWNlRGVjaW1hbE1hcmtlclRvRG90KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBtYXJrZXJzID0gQXJyYXkuaXNBcnJheSh0aGlzLmRlY2ltYWxNYXJrZXIpXG4gICAgICAgICAgICA/IHRoaXMuZGVjaW1hbE1hcmtlclxuICAgICAgICAgICAgOiBbdGhpcy5kZWNpbWFsTWFya2VyXTtcblxuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSh0aGlzLl9yZWdFeHBGb3JSZW1vdmUobWFya2VycyksIE1hc2tFeHByZXNzaW9uLkRPVCk7XG4gICAgfVxuXG4gICAgcHVibGljIF9jaGVja1N5bWJvbHMocmVzdWx0OiBzdHJpbmcpOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsIHtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMubWFza0V4cHJlc3Npb24uc3RhcnRzV2l0aChNYXNrRXhwcmVzc2lvbi5QRVJDRU5UKSAmJlxuICAgICAgICAgICAgdGhpcy5kZWNpbWFsTWFya2VyID09PSBNYXNrRXhwcmVzc2lvbi5DT01NQVxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoTWFza0V4cHJlc3Npb24uQ09NTUEsIE1hc2tFeHByZXNzaW9uLkRPVCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yUHJlY2lzaW9uOiBudW1iZXIgfCBudWxsID0gdGhpcy5fcmV0cmlldmVTZXBhcmF0b3JQcmVjaXNpb24oXG4gICAgICAgICAgICB0aGlzLm1hc2tFeHByZXNzaW9uXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvclZhbHVlOiBzdHJpbmcgPSB0aGlzLl9yZXBsYWNlRGVjaW1hbE1hcmtlclRvRG90KFxuICAgICAgICAgICAgdGhpcy5fcmV0cmlldmVTZXBhcmF0b3JWYWx1ZShyZXN1bHQpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzTnVtYmVyVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXBhcmF0b3JWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yUHJlY2lzaW9uKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB0aGlzLmRlY2ltYWxNYXJrZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNlcGFyYXRvckxpbWl0Lmxlbmd0aCA+IDE0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzZXBhcmF0b3JWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2tQcmVjaXNpb24odGhpcy5tYXNrRXhwcmVzc2lvbiwgc2VwYXJhdG9yVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHNlcGFyYXRvclZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETyBzaG91bGQgdGhpbmsgYWJvdXQgaGVscGVycyBvciBzZXBhcnRpbmcgZGVjaW1hbCBwcmVjaXNpb24gdG8gb3duIHByb3BlcnR5XG4gICAgcHJpdmF0ZSBfcmV0cmlldmVTZXBhcmF0b3JQcmVjaXNpb24obWFza0V4cHJldGlvbjogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXI6IFJlZ0V4cE1hdGNoQXJyYXkgfCBudWxsID0gbWFza0V4cHJldGlvbi5tYXRjaChcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYF5zZXBhcmF0b3JcXFxcLihbXmRdKilgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbWF0Y2hlciA/IE51bWJlcihtYXRjaGVyWzFdKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIF9jaGVja1ByZWNpc2lvbihzZXBhcmF0b3JFeHByZXNzaW9uOiBzdHJpbmcsIHNlcGFyYXRvclZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCBzdHJpbmcge1xuICAgICAgICBjb25zdCBzZXBhcmF0b3JQcmVjaXNpb24gPSBzZXBhcmF0b3JFeHByZXNzaW9uLnNsaWNlKDEwLCAxMSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHNlcGFyYXRvckV4cHJlc3Npb24uaW5kZXhPZignMicpID4gMCB8fFxuICAgICAgICAgICAgKHRoaXMubGVhZFplcm8gJiYgTnVtYmVyKHNlcGFyYXRvclByZWNpc2lvbikgPiAxKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxlYWRaZXJvXG4gICAgICAgICAgICAgICAgPyBOdW1iZXIoc2VwYXJhdG9yVmFsdWUpLnRvRml4ZWQoTnVtYmVyKHNlcGFyYXRvclByZWNpc2lvbikpXG4gICAgICAgICAgICAgICAgOiBOdW1iZXIoc2VwYXJhdG9yVmFsdWUpLnRvRml4ZWQoMik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubnVtYmVyVG9TdHJpbmcoc2VwYXJhdG9yVmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBfcmVwZWF0UGF0dGVyblN5bWJvbHMobWFza0V4cDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChtYXNrRXhwLm1hdGNoKC97WzAtOV0rfS8pICYmXG4gICAgICAgICAgICAgICAgbWFza0V4cFxuICAgICAgICAgICAgICAgICAgICAuc3BsaXQoTWFza0V4cHJlc3Npb24uRU1QVFlfU1RSSU5HKVxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlKChhY2N1bTogc3RyaW5nLCBjdXJyVmFsOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWwgPT09IE1hc2tFeHByZXNzaW9uLkNVUkxZX0JSQUNLRVRTX0xFRlQgPyBpbmRleCA6IHRoaXMuX3N0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWwgIT09IE1hc2tFeHByZXNzaW9uLkNVUkxZX0JSQUNLRVRTX1JJR0hUKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRTcGVjaWFsQ2hhcihjdXJyVmFsKSA/IGFjY3VtICsgY3VyclZhbCA6IGFjY3VtO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW5kID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXBlYXROdW1iZXIgPSBOdW1iZXIobWFza0V4cC5zbGljZSh0aGlzLl9zdGFydCArIDEsIHRoaXMuX2VuZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVwbGFjZVdpdGg6IHN0cmluZyA9IG5ldyBBcnJheShyZXBlYXROdW1iZXIgKyAxKS5qb2luKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tFeHBbdGhpcy5fc3RhcnQgLSAxXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrRXhwLnNsaWNlKDAsIHRoaXMuX3N0YXJ0KS5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0V4cC5pbmNsdWRlcyhNYXNrRXhwcmVzc2lvbi5MRVRURVJfUylcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN5bWJvbHMgPSBtYXNrRXhwLnNsaWNlKDAsIHRoaXMuX3N0YXJ0IC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbHMuaW5jbHVkZXMoTWFza0V4cHJlc3Npb24uQ1VSTFlfQlJBQ0tFVFNfTEVGVClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhY2N1bSArIHJlcGxhY2VXaXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3ltYm9scyArIGFjY3VtICsgcmVwbGFjZVdpdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2N1bSArIHJlcGxhY2VXaXRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCAnJykpIHx8XG4gICAgICAgICAgICBtYXNrRXhwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGN1cnJlbnRMb2NhbGVEZWNpbWFsTWFya2VyKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAoMS4xKS50b0xvY2FsZVN0cmluZygpLnN1YnN0cmluZygxLCAyKTtcbiAgICB9XG59XG4iXX0=
@@ -709,10 +709,10 @@ class NgxMaskApplierService {
709
709
  : integerString + decimal + decimalPart;
710
710
  }
711
711
  }
712
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskApplierService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
713
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskApplierService }); }
712
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: NgxMaskApplierService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
713
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: NgxMaskApplierService }); }
714
714
  }
715
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskApplierService, decorators: [{
715
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: NgxMaskApplierService, decorators: [{
716
716
  type: Injectable
717
717
  }] });
718
718
 
@@ -1257,10 +1257,10 @@ class NgxMaskService extends NgxMaskApplierService {
1257
1257
  currentLocaleDecimalMarker() {
1258
1258
  return (1.1).toLocaleString().substring(1, 2);
1259
1259
  }
1260
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1261
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskService }); }
1260
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: NgxMaskService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1261
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: NgxMaskService }); }
1262
1262
  }
1263
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskService, decorators: [{
1263
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: NgxMaskService, decorators: [{
1264
1264
  type: Injectable
1265
1265
  }] });
1266
1266
 
@@ -1524,7 +1524,7 @@ class NgxMaskDirective {
1524
1524
  !this._maskService.specialCharacters.includes(lastIndexArray[0])) ||
1525
1525
  !lastIndexArray ||
1526
1526
  this._maskService.dropSpecialCharacters) &&
1527
- value.length >= length) {
1527
+ value.length >= length - 1) {
1528
1528
  return null;
1529
1529
  }
1530
1530
  else {
@@ -1943,8 +1943,8 @@ class NgxMaskDirective {
1943
1943
  }
1944
1944
  });
1945
1945
  }
1946
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1947
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.1", type: NgxMaskDirective, isStandalone: true, selector: "input[mask], textarea[mask]", inputs: { maskExpression: ["mask", "maskExpression"], specialCharacters: "specialCharacters", patterns: "patterns", prefix: "prefix", suffix: "suffix", thousandSeparator: "thousandSeparator", decimalMarker: "decimalMarker", dropSpecialCharacters: "dropSpecialCharacters", hiddenInput: "hiddenInput", showMaskTyped: "showMaskTyped", placeHolderCharacter: "placeHolderCharacter", shownMaskExpression: "shownMaskExpression", showTemplate: "showTemplate", clearIfNotMatch: "clearIfNotMatch", validation: "validation", separatorLimit: "separatorLimit", allowNegativeNumbers: "allowNegativeNumbers", leadZeroDateTime: "leadZeroDateTime", leadZero: "leadZero", triggerOnMaskChange: "triggerOnMaskChange", apm: "apm" }, outputs: { maskFilled: "maskFilled" }, host: { listeners: { "paste": "onPaste()", "ngModelChange": "onModelChange($event)", "input": "onInput($event)", "compositionstart": "onCompositionStart($event)", "compositionend": "onCompositionEnd($event)", "blur": "onBlur($event)", "click": "onClick($event)", "keydown": "onKeyDown($event)" } }, providers: [
1946
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: NgxMaskDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1947
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.8", type: NgxMaskDirective, isStandalone: true, selector: "input[mask], textarea[mask]", inputs: { maskExpression: ["mask", "maskExpression"], specialCharacters: "specialCharacters", patterns: "patterns", prefix: "prefix", suffix: "suffix", thousandSeparator: "thousandSeparator", decimalMarker: "decimalMarker", dropSpecialCharacters: "dropSpecialCharacters", hiddenInput: "hiddenInput", showMaskTyped: "showMaskTyped", placeHolderCharacter: "placeHolderCharacter", shownMaskExpression: "shownMaskExpression", showTemplate: "showTemplate", clearIfNotMatch: "clearIfNotMatch", validation: "validation", separatorLimit: "separatorLimit", allowNegativeNumbers: "allowNegativeNumbers", leadZeroDateTime: "leadZeroDateTime", leadZero: "leadZero", triggerOnMaskChange: "triggerOnMaskChange", apm: "apm" }, outputs: { maskFilled: "maskFilled" }, host: { listeners: { "paste": "onPaste()", "ngModelChange": "onModelChange($event)", "input": "onInput($event)", "compositionstart": "onCompositionStart($event)", "compositionend": "onCompositionEnd($event)", "blur": "onBlur($event)", "click": "onClick($event)", "keydown": "onKeyDown($event)" } }, providers: [
1948
1948
  {
1949
1949
  provide: NG_VALUE_ACCESSOR,
1950
1950
  useExisting: NgxMaskDirective,
@@ -1958,7 +1958,7 @@ class NgxMaskDirective {
1958
1958
  NgxMaskService,
1959
1959
  ], exportAs: ["mask", "ngxMask"], usesOnChanges: true, ngImport: i0 }); }
1960
1960
  }
1961
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskDirective, decorators: [{
1961
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: NgxMaskDirective, decorators: [{
1962
1962
  type: Directive,
1963
1963
  args: [{
1964
1964
  selector: 'input[mask], textarea[mask]',
@@ -2138,10 +2138,10 @@ class NgxMaskPipe {
2138
2138
  });
2139
2139
  }
2140
2140
  }
2141
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2142
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskPipe, isStandalone: true, name: "mask" }); }
2141
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: NgxMaskPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2142
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.1.8", ngImport: i0, type: NgxMaskPipe, isStandalone: true, name: "mask" }); }
2143
2143
  }
2144
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: NgxMaskPipe, decorators: [{
2144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: NgxMaskPipe, decorators: [{
2145
2145
  type: Pipe,
2146
2146
  args: [{
2147
2147
  name: 'mask',