ets-fe-ng-sdk 17.0.131 → 17.0.133
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.
- package/esm2022/lib/Shared/components/form-generator/form-generator.component.mjs +3 -3
- package/esm2022/lib/Shared/components/input/date-input/date-input.component.mjs +25 -25
- package/esm2022/lib/Shared/components/input/input.service.mjs +16 -14
- package/esm2022/lib/Shared/components/table-https/table-https.component.mjs +5 -4
- package/esm2022/lib/Shared/components/table-plain/table-plain.component.mjs +3 -3
- package/esm2022/lib/Shared/components/table-plain/table.pipe.mjs +10 -7
- package/esm2022/lib/Shared/models/index.model.mjs +1 -1
- package/esm2022/lib/configs/base-functions.mjs +1 -1
- package/fesm2022/ets-fe-ng-sdk.mjs +52 -48
- package/fesm2022/ets-fe-ng-sdk.mjs.map +1 -1
- package/lib/Services/api.service.d.ts +1 -1
- package/lib/Shared/components/input/date-input/date-input.component.d.ts +18 -9
- package/lib/Shared/components/input/input.service.d.ts +7 -7
- package/lib/Shared/components/table-plain/table.pipe.d.ts +1 -1
- package/lib/Shared/components/text-case-2/text-case-2.component.d.ts +1 -1
- package/lib/Shared/models/index.model.d.ts +2 -2
- package/lib/configs/base-functions.d.ts +2 -2
- package/package.json +1 -1
|
@@ -61,7 +61,7 @@ export class FormGeneratorComponent extends BaseFormGenerator {
|
|
|
61
61
|
this._submissionResponse = new EventEmitter();
|
|
62
62
|
this.submitBtnText = input('Submit');
|
|
63
63
|
this.submitBtnTemplate = input();
|
|
64
|
-
this.submitSuccessText = input('
|
|
64
|
+
this.submitSuccessText = input('Saved successfully');
|
|
65
65
|
this.showSubmitBtn = input(true);
|
|
66
66
|
this.gridStyle = input();
|
|
67
67
|
this.gridMDStyle = input();
|
|
@@ -79,7 +79,7 @@ export class FormGeneratorComponent extends BaseFormGenerator {
|
|
|
79
79
|
const formVal = this.formVal(), formSchema = this.formSchema() || [];
|
|
80
80
|
return formSchema.filter((scheme) => !scheme.hidden && (!scheme.hideIfFunc || !scheme.hideIfFunc(formVal)));
|
|
81
81
|
}, { equal: isEqual });
|
|
82
|
-
// miscIndex: TMiscIndex;
|
|
82
|
+
// miscIndex: TMiscIndex;
|
|
83
83
|
this.formService = inject(FormGeneratorService);
|
|
84
84
|
this.getFormScheme = (fieldName) => {
|
|
85
85
|
// debugger;
|
|
@@ -224,4 +224,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
|
224
224
|
type: Input,
|
|
225
225
|
args: ['isShow']
|
|
226
226
|
}] } });
|
|
227
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9JLE9BQU8sRUFBZ0QsV0FBVyxFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFILE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQW1CLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFl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QkFDckIsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIseUJBQXlCO3dCQUN6QixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsU0FBUztxQkFDVjs4QkFNUSxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDdUIsbUJBQW1CO3NCQUFoRCxNQUFNO3VCQUFDLG9CQUFvQjtnQkFDbkIsVUFBVTtzQkFBbEIsS0FBSztnQkFxQjhDLFdBQVc7c0JBQTlELEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7Z0JBR3pCLE9BQU87c0JBQTNCLEtBQUs7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRGVzdHJveVJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBUeXBlLCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZ1bmN0aW9uQ2FsbGVyMiwgVG9BbnlQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvdXRpbGl0eS5waXBlJztcbmltcG9ydCB7IEJ0bkNvbXBvbmVudCB9IGZyb20gJy4uL2J0bi9idG4uY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0QmFzaWNDb21wb25lbnQsIE9wdGlvbkxhYmVsVHlwZSB9IGZyb20gJy4uL2lucHV0L2lucHV0LWJhc2ljLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuLi9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0L3ZhbGlkYXRpb24tbWVzc2FnZS92YWxpZGF0aW9uLW1lc3NhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IFBob25lTnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcGhvbmUtbnVtYmVyL3Bob25lLW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBOZ1N3aXRjaERlZmF1bHQsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9hZGVyL2xvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBJT2JqZWN0TGl0ZXJhbCwgSW5wdXRTdWJUeXBlLCBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvaW5kZXgubW9kZWwnO1xuaW1wb3J0IHsgSWNvblR5cGUgfSBmcm9tICcuLi9idG4vYnRuLm1vZGVsJztcbmltcG9ydCB7IFJpY2hUZXh0RWRpdG9yUkZDb21wb25lbnQgfSBmcm9tICcuLi9yaWNoLXRleHQtZWRpdG9yLXJmL3JpY2gtdGV4dC1lZGl0b3ItcmYuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1HZW5lcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi9mb3JtLWdlbmVyYXRvci5zZXJ2aWNlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VGb3JtR2VuZXJhdG9yPFRGb3JtR3JvdXAgZXh0ZW5kcyBJT2JqZWN0TGl0ZXJhbCwgVEJhc2VGb3JtU2NoZW1hIGV4dGVuZHMgeyBmaWVsZD86IGFueSB9ID0gYW55PiB7XG4gIGZvcm1TY2hlbWFNYXAgPSBzaWduYWw8eyBbZmllbGQ6IHN0cmluZ106IFRCYXNlRm9ybVNjaGVtYSB9Pih7fSk7XG4gIGZvcm1TY2hlbWEgPSBjb21wdXRlZDxUQmFzZUZvcm1TY2hlbWFbXT4oKCkgPT4gT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm1TY2hlbWFNYXAoKSkuZmlsdGVyKCh4KSA9PiB4KSk7XG4gIHN1YnM6IHsgW2ZpZWxkTmFtZTogc3RyaW5nXTogU3Vic2NyaXB0aW9uIH0gPSB7fTtcblxuICBwdWJsaWMgdXRpbGl0eVNlcnZpY2UgPSBpbmplY3QoVXRpbGl0eVNlcnZpY2UpO1xuICBwdWJsaWMgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgIHRoaXMub25EZXN0cm95KCk7XG4gICAgfSk7XG4gIH1cblxuICBvbkRlc3Ryb3koKSB7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnN1YnMpLmZvckVhY2goKHMpID0+IHtcbiAgICAgIHM/LnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG4gICAgdGhpcy5zdWJzID0ge307XG4gIH1cblxuICBwcm90ZWN0ZWQgX3NldEZvcm1TY2hlbWFzKHNjaGVtYXM6IFRCYXNlRm9ybVNjaGVtYVtdKSB7XG4gICAgdGhpcy5mb3JtU2NoZW1hTWFwLnNldCgoc2NoZW1hcyB8fCBbXSkudG9NYXAoJ2ZpZWxkJykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF91cGRhdGVGb3JtU2NoZW1hKGZpZWxkOiBzdHJpbmcsIHNjaGVtZTogUGFydGlhbDxUQmFzZUZvcm1TY2hlbWE+KSB7XG4gICAgdGhpcy5mb3JtU2NoZW1hTWFwLnVwZGF0ZSgoZm9ybVNjaGVtYU1hcCkgPT4ge1xuICAgICAgY29uc3Qgc2NoID0gZm9ybVNjaGVtYU1hcFtmaWVsZF07XG4gICAgICByZXR1cm4gIXNjaCA/IHsgLi4uZm9ybVNjaGVtYU1hcCwgW2ZpZWxkIGFzIGFueV06IHNjaGVtZSB9IDogeyAuLi5mb3JtU2NoZW1hTWFwLCBbZmllbGQgYXMgYW55XTogeyAuLi5zY2gsIC4uLnNjaGVtZSB9IH07XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3JlbW92ZUZvcm1TY2hlbWEoZmllbGQ6IHN0cmluZykge1xuICAgIHRoaXMuZm9ybVNjaGVtYU1hcC51cGRhdGUoKGZvcm1TY2hlbWFNYXApID0+IHtcbiAgICAgIGRlbGV0ZSBmb3JtU2NoZW1hTWFwW2ZpZWxkXTtcbiAgICAgIHJldHVybiBjbG9uZURlZXAoZm9ybVNjaGVtYU1hcCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3JtIHNob3VsZCBiZSBzZXQgYmVmb3JlIHRoZSB0aGUgZm9ybVNjaGVtYVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmb3JtLWdlbmVyYXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBMb2FkZXJDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFBob25lTnVtYmVyQ29tcG9uZW50LFxuICAgIFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50LFxuICAgIEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICBOZ1N3aXRjaERlZmF1bHQsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBJbnB1dEJhc2ljQ29tcG9uZW50LFxuICAgIFJpY2hUZXh0RWRpdG9yUkZDb21wb25lbnQsXG4gICAgQnRuQ29tcG9uZW50LFxuICAgIEZ1bmN0aW9uQ2FsbGVyMixcbiAgICBUb0FueVBpcGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1HZW5lcmF0b3JDb21wb25lbnQ8VEZvcm1Hcm91cCBleHRlbmRzIHsgW0sgaW4ga2V5b2YgVEZvcm1Hcm91cF06IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT4gfT4gZXh0ZW5kcyBCYXNlRm9ybUdlbmVyYXRvcjxcbiAgVEZvcm1Hcm91cCxcbiAgSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5cbj4ge1xuICBASW5wdXQoKSBrZXlGaWVsZDogJ2ZpZWxkJyB8ICdsYWJlbCcgPSAnZmllbGQnO1xuXG4gIEBPdXRwdXQoKSBvblN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbWNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdzdWJtaXNzaW9uUmVzcG9uc2UnKSBfc3VibWlzc2lvblJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIHN1Ym1pdEZ1bmM6ICh2YWx1ZTogYW55KSA9PiBQcm9taXNlPGFueT47XG4gIHN1Ym1pdEJ0blRleHQgPSBpbnB1dCgnU3VibWl0Jyk7XG4gIHN1Ym1pdEJ0blRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcbiAgc3VibWl0U3VjY2Vzc1RleHQgPSBpbnB1dCgnU2F2ZScpO1xuICBzaG93U3VibWl0QnRuID0gaW5wdXQodHJ1ZSk7XG5cbiAgZ3JpZFN0eWxlID0gaW5wdXQ8bnVtYmVyIHwgJ2F1dG8nPigpO1xuICBncmlkTURTdHlsZSA9IGlucHV0PG51bWJlciB8ICdhdXRvJz4oKTtcbiAgZ3JpZExHU3R5bGUgPSBpbnB1dDxudW1iZXIgfCAnYXV0byc+KCk7XG4gIGdyaWRYWExTdHlsZSA9IGlucHV0PG51bWJlciB8ICdhdXRvJz4oKTtcblxuICBmb3JtR3JpZENsYXNzID0gaW5wdXQ8c3RyaW5nPigpO1xuICB1c2VMb2FkZXIgPSBpbnB1dDxib29sZWFuPigpO1xuICBsb2FkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICBfbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgY29tcHV0ZWRMb2FkaW5nID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMudXNlTG9hZGVyKCkgPyB0aGlzLmxvYWRpbmcoKSB8fCB0aGlzLl9sb2FkaW5nKCkgOiBmYWxzZSkpO1xuXG4gIGZvcm0gPSBpbnB1dDxGb3JtR3JvdXA8VEZvcm1Hcm91cD4+KHVuZGVmaW5lZCwge30pO1xuICBzdWJtaXNzaW9uUmVzcG9uc2U6IGFueTtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUsIGFsaWFzOiAnZm9ybVNjaGVtYScgfSkgc2V0IF9mb3JtU2NoZW1hKHY6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W10pIHtcbiAgICB0aGlzLmluaXQoY2xvbmVEZWVwKHYuZmlsdGVyKCh4KSA9PiB4KSkpO1xuICB9XG4gIEBJbnB1dCgnaXNTaG93Jykgc2V0IF9pc1Nob3codjogYm9vbGVhbikge1xuICAgIGlmICh2KSB0aGlzLmZvcm0oKT8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgZWxzZSB0aGlzLmZvcm0oKT8uZW5hYmxlKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh2KSB0aGlzLmZvcm0oKT8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICBlbHNlIHRoaXMuZm9ybSgpPy5lbmFibGUoKTtcbiAgICB9LCA1MDApO1xuICB9XG4gIG9wdGlvbnNNYXAgPSBzaWduYWw8SUZvcm1PcHRpb25zPih7fSk7IFxuICBmb3JtVmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mb3JtKCk/LmdldFJhd1ZhbHVlKCkpO1xuXG4gIGNvbXB1dGVkRm9ybVNjaGVtYSA9IGNvbXB1dGVkPElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W10+KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1WYWwgPSB0aGlzLmZvcm1WYWwoKSxcbiAgICAgICAgZm9ybVNjaGVtYSA9IHRoaXMuZm9ybVNjaGVtYSgpIHx8IFtdO1xuICAgICAgcmV0dXJuIGZvcm1TY2hlbWEuZmlsdGVyKChzY2hlbWUpID0+ICFzY2hlbWUuaGlkZGVuICYmICghc2NoZW1lLmhpZGVJZkZ1bmMgfHwgIXNjaGVtZS5oaWRlSWZGdW5jKGZvcm1WYWwpKSk7XG4gICAgfSxcbiAgICB7IGVxdWFsOiBpc0VxdWFsIH0sXG4gICk7XG4gIC8vIG1pc2NJbmRleDogVE1pc2NJbmRleDsgXG4gIHB1YmxpYyBmb3JtU2VydmljZSA9IGluamVjdChGb3JtR2VuZXJhdG9yU2VydmljZSk7XG5cbiAgaW5pdChzY2hlbWE6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W10pIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICB0aGlzLm9uRGVzdHJveSgpO1xuICAgIHRoaXMuX3NldEZvcm1TY2hlbWFzKHNjaGVtYSB8fCBbXSk7XG4gICAgaWYgKHNjaGVtYSkgZm9yIChjb25zdCBzY2hlbWUgb2Ygc2NoZW1hKSB0aGlzLmhhbmRsZUZvcm1TY2hlbWUoc2NoZW1lKTtcbiAgICBpZiAoc2NoZW1hKVxuICAgICAgZm9yIChjb25zdCBzY2hlbWUgb2Ygc2NoZW1hKVxuICAgICAgICBpZiAoc2NoZW1lLnRyaWdnZXJPbkNoYW5nZU9uSW5pdCkgc2NoZW1lLm9uQ2hhbmdlRnVuYyh0aGlzLmZvcm0oKS5nZXRSYXdWYWx1ZSgpLCB0aGlzLmZvcm0oKS5nZXRSYXdWYWx1ZSgpW3NjaGVtZS5maWVsZD8udG9TdHJpbmcoKV0sIHRoaXMpO1xuICB9XG5cbiAgaGFuZGxlRm9ybVNjaGVtZShzY2hlbWU6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+KSB7XG4gICAgc2NoZW1lLmlkID0gdGhpcy51dGlsaXR5U2VydmljZS5nZW5lcmF0ZVVVSUQoKTtcbiAgICBpZiAoc2NoZW1lLnN0YWNrZWQgPT0gbnVsbCkgc2NoZW1lLnN0YWNrZWQgPSB0cnVlO1xuICAgIGlmIChzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2cgPT0gbnVsbCkgc2NoZW1lLnNob3dWYWxpZGF0aW9uTXNnID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5mb3JtU2VydmljZS5jb25maWcuc2hvd1ZhbGlkYXRpb25NZXNzYWdlc0J5RGVmYXVsdClcbiAgICAgIGlmIChzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkID09IG51bGwgJiYgKCFzY2hlbWUudmFsdWVGaWVsZCB8fCAhc2NoZW1lLmxhYmVsRmllbGQpKSBzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1TY2hlbWEoc2NoZW1lLmZpZWxkLCBzY2hlbWUpO1xuXG4gICAgaWYgKHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMpXG4gICAgICBzY2hlbWUub3B0aW9uc0luaXRGdW5jLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgICBzY2hlbWUub3B0aW9ucyA9IHI7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybVNjaGVtYShzY2hlbWUuZmllbGQsIHsgb3B0aW9uczogciB9KTtcbiAgICAgIH0pO1xuICAgIGlmIChzY2hlbWUub3B0aW9uc0luaXRGdW5jMilcbiAgICAgIHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMyKCkuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHNjaGVtZS5vcHRpb25zID0gcjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtU2NoZW1hKHNjaGVtZS5maWVsZCwgeyBvcHRpb25zOiByIH0pO1xuICAgICAgfSk7XG4gICAgaWYgKHNjaGVtZS5vbkNoYW5nZUZ1bmMpIHtcbiAgICAgIGlmIChzY2hlbWUuZGVidWcpIGRlYnVnZ2VyO1xuICAgICAgdGhpcy5zdWJzW3NjaGVtZS5maWVsZD8udG9TdHJpbmcoKV0gPSB0aGlzLmZvcm0oKVxuICAgICAgICA/LmNvbnRyb2xzW3NjaGVtZS5maWVsZD8udG9TdHJpbmcoKV0/LnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgwKSlcbiAgICAgICAgLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgICAgIHNjaGVtZS5vbkNoYW5nZUZ1bmModGhpcy5mb3JtKCkuZ2V0UmF3VmFsdWUoKSwgciwgdGhpcyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRldGFjaEZvcm1TY2hlbWUoZmllbGROYW1lPzoga2V5b2YgVEZvcm1Hcm91cCkge1xuICAgIHRoaXMuc3Vic1tmaWVsZE5hbWUgYXMgc3RyaW5nXS51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbWNoYW5nZUVtaXR0ZXIoKSB7XG4gICAgdGhpcy5tY2hhbmdlLmVtaXQodGhpcy5mb3JtKCkuZ2V0UmF3VmFsdWUoKSk7XG4gIH1cblxuICBnZXRGb3JtU2NoZW1lID0gKGZpZWxkTmFtZToga2V5b2YgVEZvcm1Hcm91cCkgPT4ge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHJldHVybiB0aGlzLmZvcm1TY2hlbWFNYXAoKVtmaWVsZE5hbWUgYXMgc3RyaW5nXTtcbiAgfTtcblxuICBhZGRUb0Zvcm1TY2hlbWEoZm9ybVNjaGVtZTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4pIHtcbiAgICB0aGlzLnJlbW92ZUZyb21Gb3JtU2NoZW1hKGZvcm1TY2hlbWUuZmllbGQpO1xuICAgIHRoaXMuaGFuZGxlRm9ybVNjaGVtZShjbG9uZURlZXAoZm9ybVNjaGVtZSkpO1xuICB9XG5cbiAgdXBkYXRlRm9ybVNjaGVtYShmaWVsZE5hbWU6IGtleW9mIFRGb3JtR3JvdXAsIHNjaGVtZTogUGFydGlhbDxJRm9ybVNjaGVtYTxURm9ybUdyb3VwPj4pIHtcbiAgICByZXR1cm4gc3VwZXIuX3VwZGF0ZUZvcm1TY2hlbWEoZmllbGROYW1lIGFzIHN0cmluZywgc2NoZW1lKTtcbiAgfVxuXG4gIHJlbW92ZUZyb21Gb3JtU2NoZW1hKGZpZWxkTmFtZToga2V5b2YgVEZvcm1Hcm91cCkge1xuICAgIHRoaXMuZGV0YWNoRm9ybVNjaGVtZShmaWVsZE5hbWUpO1xuICAgIGNvbnN0IG9uUmVtb3ZlID0gdGhpcy5mb3JtU2NoZW1hTWFwKClbZmllbGROYW1lIGFzIHN0cmluZ10/Lm9uUmVtb3ZlRnVuYztcbiAgICBpZiAob25SZW1vdmUpIG9uUmVtb3ZlKHRoaXMuZm9ybSgpLmdldFJhd1ZhbHVlKCkgYXMgYW55LCB0aGlzLmZvcm0oKS5jb250cm9sc1tmaWVsZE5hbWUgYXMgYW55XSwgdGhpcyk7XG4gICAgdGhpcy5fcmVtb3ZlRm9ybVNjaGVtYShmaWVsZE5hbWUgYXMgc3RyaW5nKTtcbiAgfVxuXG4gIHNldE9wdGlvbkxhYmVsKCRldmVudDogYW55LCBzY2hlbWU6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+KSB7XG4gICAgc2NoZW1lLnNlbGVjdGVkT3B0aW9uTGFiZWwgPSAkZXZlbnQ7XG4gIH1cblxuICBhc3luYyBzdWJtaXQoYnRuPzogQnRuQ29tcG9uZW50KSB7XG4gICAgaWYgKHRoaXMuc3VibWl0RnVuYykge1xuICAgICAgYnRuPy5zZXRMb2FkZXIodHJ1ZSk7XG4gICAgICB0aGlzLl9sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgIGNvbnN0IGZvcm1WYWwgPSB0aGlzLmZvcm1WYWwoKTtcbiAgICAgIHRoaXMub25TdWJtaXQuZW1pdChmb3JtVmFsKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3VibWlzc2lvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5zdWJtaXRGdW5jKGZvcm1WYWwpO1xuICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmluZm8odGhpcy5zdWJtaXRTdWNjZXNzVGV4dCgpLCAxKTtcbiAgICAgICAgdGhpcy5fc3VibWlzc2lvblJlc3BvbnNlLmVtaXQodGhpcy5zdWJtaXNzaW9uUmVzcG9uc2UpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5pbmZvKGVycm9yLCAwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIGJ0bj8uc2V0TG9hZGVyKGZhbHNlKTtcbiAgICB9IGVsc2UgdGhpcy5vblN1Ym1pdC5lbWl0KHRoaXMuZm9ybVZhbCgpKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCYXNlRm9ybVNjaGVtYTxcbiAgVCxcbiAgQ29tcG9uZW50IGV4dGVuZHMgQmFzZUZvcm1HZW5lcmF0b3I8VD4sXG4gIFRGb3JtR3JvdXAgZXh0ZW5kcyB7XG4gICAgW0sgaW4ga2V5b2YgVEZvcm1Hcm91cF06IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XG4gIH0gPSBhbnksXG4+IHtcbiAgYXN5bmNWYWxpZGF0b3JzPzogQXN5bmNWYWxpZGF0b3JGbltdO1xuICBhdXRvUGlja1ZhbHVlRmllbGQ/OiBib29sZWFuO1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgY2xlYXJPbkRpc2FibGU/OiBib29sZWFuO1xuICBjbHM/OiBzdHJpbmc7XG4gIGNvdW50cnlDb2RlMz86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBJQmFzZUZvcm1TY2hlbWE8VCwgQ29tcG9uZW50LCBURm9ybUdyb3VwPltdO1xuICBkZWNpbWFsUG9pbnRzPzogbnVtYmVyO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGRpc2FibGVkSWY/OiAocm93OiBhbnksIGNlbGxGaWVsZD86IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgaGlkZUlmRnVuYz86IChyb3cpID0+IGJvb2xlYW47XG4gIGZpZWxkOiBrZXlvZiBURm9ybUdyb3VwO1xuICBmb3JtPzogRm9ybUdyb3VwPFRGb3JtR3JvdXA+O1xuICBnZXRDb3VudHJ5Q29kZTNLZXk/OiBzdHJpbmc7XG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIGhpbnQ/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBpc1JlcXVpcmVkPzogYm9vbGVhbjtcbiAgaXNTZWFyY2hGaWVsZD86IGJvb2xlYW47XG4gIGxhYmVsPzogc3RyaW5nO1xuICBsYWJlbEZpZWxkPzogc3RyaW5nO1xuICBsYWJlbFR5cGU/OiBPcHRpb25MYWJlbFR5cGU7XG4gIG9wdGlvbkxhYmVsRm9ybWF0dGVyPzogKHJvdykgPT4gc3RyaW5nO1xuICBtYXg/OiBudW1iZXI7XG4gIG1pbj86IG51bWJlcjtcbiAgbm9Gb3JtYXQ/OiBib29sZWFuO1xuICBvcHRpb25Gb3JtYXR0ZXI/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBhbnlbXTtcbiAgb3B0aW9uc0FzeW5jPzogT2JzZXJ2YWJsZTxhbnlbXT4gfCBQcm9taXNlPGFueVtdPjtcbiAgb3B0aW9uc0luaXRGdW5jPzogT2JzZXJ2YWJsZTxhbnlbXT47XG4gIG9wdGlvbnNJbml0RnVuYzI/OiAoKSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgb3B0aW9uc0tleT86IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHNlYXJjaEZ1bmM/OiAoLi4uYXJncykgPT4gYW55O1xuICBzZXRBc0NvdW50cnlDb2RlMz86IGJvb2xlYW47XG4gIHNob3dWYWxpZGF0aW9uPzogYm9vbGVhbjtcbiAgc2hvd1ZhbGlkYXRpb25JY29uPzogYm9vbGVhbjtcbiAgdGVtcGxhdGVWYWx1ZT86IGFueTtcbiAgdHlwZT86IElucHV0VHlwZTtcbiAgdmFsaWRhdG9ycz86IFZhbGlkYXRvckZuW107XG4gIHZhbHVlPzogYW55O1xuICB2YWx1ZUZpZWxkPzogc3RyaW5nO1xuICBvcHRpb25zRnVuYz86ICguLi52YWw6IGFueSkgPT4gT2JzZXJ2YWJsZTxhbnlbXT47XG4gIHRyaWdnZXJPbkNoYW5nZU9uSW5pdD86IGJvb2xlYW47XG4gIGZvcm1hdHRlcj86IChyb3c6IHsgW0sgaW4ga2V5b2YgVEZvcm1Hcm91cF06IGFueSB9LCBmaWVsZE5hbWU6IGtleW9mIFRGb3JtR3JvdXApID0+IHN0cmluZztcbiAgZXh0cmE/OiBhbnk7XG4gIG9uQ2hhbmdlRnVuYz86IChyb3c6IHsgW0sgaW4ga2V5b2YgVEZvcm1Hcm91cF0/OiBURm9ybUdyb3VwW0tdWyd2YWx1ZSddIH0sIGNlbGxWYWx1ZT86IGFueSwgY29tcG9uZW50PzogQ29tcG9uZW50KSA9PiBPYnNlcnZhYmxlPGFueVtdPiB8IGFueTtcbiAgb25SZW1vdmVGdW5jPzogKHJvdzogeyBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogVEZvcm1Hcm91cFtLXVsndmFsdWUnXSB9LCBjZWxsPzogYW55LCBjb21wb25lbnQ/OiBDb21wb25lbnQpID0+IGFueTtcbiAgc2VsZWN0ZWRPcHRpb25MYWJlbD86IHN0cmluZztcbiAgc3RhY2tlZD86IGJvb2xlYW47XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgc2hvd1ZhbGlkYXRpb25Nc2c/OiBib29sZWFuO1xuICBkb250Rm9ybWF0QXNJbnB1dD86IGJvb2xlYW47XG4gIHNob3dSZXF1aXJlZFRhZz86IGJvb2xlYW47XG4gIGljb24/OiBJY29uVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRm9ybVNjaGVtYTxcbiAgVEZvcm1Hcm91cCBleHRlbmRzIHtcbiAgICBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcbiAgfSA9IGFueSxcbj4gZXh0ZW5kcyBJQmFzZUZvcm1TY2hlbWE8VEZvcm1Hcm91cCwgRm9ybUdlbmVyYXRvckNvbXBvbmVudDxURm9ybUdyb3VwPj4ge1xuICBjaGlsZHJlbj86IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W107XG4gIGxhYmVsVHlwZT86IE9wdGlvbkxhYmVsVHlwZTtcbiAgZmllbGQ6IGtleW9mIFRGb3JtR3JvdXA7XG4gIHN1YlR5cGU/OiBJbnB1dFN1YlR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1PcHRpb25zIHtcbiAgW2ZpZWxkOiBzdHJpbmddOiBhbnk7XG59XG4iLCI8bG9hZGVyIFtsb2FkaW5nXT1cImNvbXB1dGVkTG9hZGluZygpXCI+XG4gIDxmb3JtPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicm93IHJvdy1jb2xzLXt7IGdyaWRTdHlsZSgpIH19IHJvdy1jb2xzLW1kLXt7IGdyaWRNRFN0eWxlKCkgfX0gcm93LWNvbHMtbGcte3sgZ3JpZExHU3R5bGUoKSB9fSByb3ctY29scy14eGwte3tcbiAgICAgICAgZ3JpZFhYTFN0eWxlKClcbiAgICAgIH19IGFsaWduLWl0ZW1zLWNlbnRlciB7eyBmb3JtR3JpZENsYXNzKCkgfX1cIj5cbiAgICAgIEBmb3IgKHNjaGVtZSBvZiBjb21wdXRlZEZvcm1TY2hlbWEoKTsgdHJhY2sgc2NoZW1lLmZpZWxkKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wge3sgc2NoZW1lLmNscyB9fSBcIj5cbiAgICAgICAgICBAc3dpdGNoICh0cnVlKSB7XG4gICAgICAgICAgICBAY2FzZSAoc2NoZW1lLnR5cGUgPT0gJ3RlbCcpIHtcbiAgICAgICAgICAgICAgPGFwcC1waG9uZS1udW1iZXJcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJzY2hlbWUuZm9ybSB8fCBmb3JtKClcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzY2hlbWUubGFiZWxcIlxuICAgICAgICAgICAgICAgIFtjbGVhck9uRGlzYWJsZV09XCJzY2hlbWUuY2xlYXJPbkRpc2FibGVcIlxuICAgICAgICAgICAgICAgIFtzdGFja2VkXT1cInNjaGVtZS5zdGFja2VkXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJzY2hlbWUuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtzaG93TGFiZWxdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtub0Zvcm1hdF09XCJzY2hlbWUubm9Gb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtkZWJ1Z109XCJzY2hlbWUuZGVidWdcIlxuICAgICAgICAgICAgICAgIChtY2hhbmdlKT1cIm1jaGFuZ2VFbWl0dGVyKClcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbl09XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25cIlxuICAgICAgICAgICAgICAgIFthdXRvUGlja1ZhbHVlRmllbGRdPVwic2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dSZXF1aXJlZFRhZ109XCJzY2hlbWUuc2hvd1JlcXVpcmVkVGFnXCJcbiAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25Nc2ddPVwic2NoZW1lLnNob3dWYWxpZGF0aW9uTXNnXCJcbiAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25JY29uXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvbkljb25cIlxuICAgICAgICAgICAgICAgIFtjb3VudHJ5Q29kZTNdPVwic2NoZW1lLmNvdW50cnlDb2RlM1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNjaGVtZS5kaXNhYmxlZCB8fCAoc2NoZW1lLmRpc2FibGVkSWYgfCBmdW5jdGlvbkNhbGxlcjI6IGZvcm0oKS52YWx1ZSA6IChzY2hlbWUuZmllbGQgfCB0b0FueSkpXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlIChzY2hlbWUudHlwZSA9PSAnYXV0b2NvbXBsZXRlJykge1xuICAgICAgICAgICAgICA8YXBwLWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAgIFtmb3JtXT1cInNjaGVtZS5mb3JtIHx8IGZvcm0oKVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInNjaGVtZS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW2NsZWFyT25EaXNhYmxlXT1cInNjaGVtZS5jbGVhck9uRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgW3N0YWNrZWRdPVwic2NoZW1lLnN0YWNrZWRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbEZpZWxkXT1cInNjaGVtZS5sYWJlbEZpZWxkXCJcbiAgICAgICAgICAgICAgICBbbm9Gb3JtYXRdPVwic2NoZW1lLm5vRm9ybWF0XCJcbiAgICAgICAgICAgICAgICBbbGFiZWxUeXBlXT1cInNjaGVtZS5sYWJlbFR5cGUgfCB0b0FueVwiXG4gICAgICAgICAgICAgICAgKG1jaGFuZ2UpPVwibWNoYW5nZUVtaXR0ZXIoKVwiXG4gICAgICAgICAgICAgICAgKG1TZWxlY3RlZE9wdGlvbkxhYmVsKT1cInNldE9wdGlvbkxhYmVsKCRldmVudCwgc2NoZW1lKVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwic2NoZW1lLmZpZWxkXCJcbiAgICAgICAgICAgICAgICBbZGVidWddPVwic2NoZW1lLmRlYnVnXCJcbiAgICAgICAgICAgICAgICBbc2hvd1JlcXVpcmVkVGFnXT1cInNjaGVtZS5zaG93UmVxdWlyZWRUYWdcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlclwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlRmllbGRdPVwic2NoZW1lLnZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zRnVuY109XCJzY2hlbWUub3B0aW9uc0Z1bmNcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2dcIlxuICAgICAgICAgICAgICAgIFthdXRvUGlja1ZhbHVlRmllbGRdPVwic2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZFwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwic2NoZW1lLm9wdGlvbnMgfHwgb3B0aW9uc01hcCgpW3NjaGVtZS5maWVsZCB8IHRvQW55XVwiXG4gICAgICAgICAgICAgICAgW2hpbnRdPVwic2NoZW1lLmhpbnRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzY2hlbWUuZGlzYWJsZWQgfHwgKHNjaGVtZS5kaXNhYmxlZElmIHwgZnVuY3Rpb25DYWxsZXIyOiBmb3JtKCkudmFsdWUgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoc2NoZW1lLnR5cGUgPT0gJ3JpY2h0ZXh0Jykge1xuICAgICAgICAgICAgICA8cmljaC10ZXh0LWVkaXRvci1yZlxuICAgICAgICAgICAgICAgIFtmb3JtXT1cInNjaGVtZS5mb3JtIHx8IGZvcm0oKVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInNjaGVtZS5sYWJlbCFcIlxuICAgICAgICAgICAgICAgIFtjbGVhck9uRGlzYWJsZV09XCJzY2hlbWUuY2xlYXJPbkRpc2FibGUhXCJcbiAgICAgICAgICAgICAgICBbc3RhY2tlZF09XCJzY2hlbWUuc3RhY2tlZFwiXG4gICAgICAgICAgICAgICAgW2xhYmVsRmllbGRdPVwic2NoZW1lLmxhYmVsRmllbGQhXCJcbiAgICAgICAgICAgICAgICBbbm9Gb3JtYXRdPVwic2NoZW1lLm5vRm9ybWF0IVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsVHlwZV09XCJzY2hlbWUubGFiZWxUeXBlIHwgdG9BbnlcIlxuICAgICAgICAgICAgICAgIChtY2hhbmdlKT1cIm1jaGFuZ2VFbWl0dGVyKClcIlxuICAgICAgICAgICAgICAgIChtU2VsZWN0ZWRPcHRpb25MYWJlbCk9XCJzZXRPcHRpb25MYWJlbCgkZXZlbnQsIHNjaGVtZSlcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cInNjaGVtZS5maWVsZFwiXG4gICAgICAgICAgICAgICAgW2RlYnVnXT1cInNjaGVtZS5kZWJ1ZyFcIlxuICAgICAgICAgICAgICAgIFtzaG93UmVxdWlyZWRUYWddPVwic2NoZW1lLnNob3dSZXF1aXJlZFRhZyFcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlciFcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cInNjaGVtZS52YWx1ZUZpZWxkIVwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNGdW5jXT1cInNjaGVtZS5vcHRpb25zRnVuYyFcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2dcIlxuICAgICAgICAgICAgICAgIFthdXRvUGlja1ZhbHVlRmllbGRdPVwic2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZCFcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInNjaGVtZS5vcHRpb25zIHx8IG9wdGlvbnNNYXAoKVtzY2hlbWUuZmllbGQgfCB0b0FueV1cIlxuICAgICAgICAgICAgICAgIFtoaW50XT1cInNjaGVtZS5oaW50IVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgc2NoZW1lLmRpc2FibGVkIHx8XG4gICAgICAgICAgICAgICAgICAoc2NoZW1lLmRpc2FibGVkSWYhIHwgZnVuY3Rpb25DYWxsZXIyOiBmb3JtKCkudmFsdWUgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpKVxuICAgICAgICAgICAgICAgIFwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgIDxhcHAtaW5wdXQtYmFzaWNcbiAgICAgICAgICAgICAgICBbbm9Gb3JtYXRdPVwic2NoZW1lLm5vRm9ybWF0XCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJzY2hlbWUuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtmb3JtXT1cInNjaGVtZS5mb3JtIHx8IGZvcm0oKVwiXG4gICAgICAgICAgICAgICAgW2NsZWFyT25EaXNhYmxlXT1cInNjaGVtZS5jbGVhck9uRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwic2NoZW1lLnR5cGVcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cInNjaGVtZS52YWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICBbYXV0b1BpY2tWYWx1ZUZpZWxkXT1cInNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgIFtzdGFja2VkXT1cInNjaGVtZS5zdGFja2VkXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxUeXBlXT1cInNjaGVtZS5sYWJlbFR5cGUgfCB0b0FueVwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2NoZW1lLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbl09XCIhIXNjaGVtZS5hc3luY1ZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbkljb25dPVwiISFzY2hlbWUuYXN5bmNWYWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICBbZGVidWddPVwic2NoZW1lLmRlYnVnXCJcbiAgICAgICAgICAgICAgICAobWNoYW5nZSk9XCJtY2hhbmdlRW1pdHRlcigpXCJcbiAgICAgICAgICAgICAgICBbc2hvd1JlcXVpcmVkVGFnXT1cInNjaGVtZS5zaG93UmVxdWlyZWRUYWdcIlxuICAgICAgICAgICAgICAgIFtsYWJlbEZpZWxkXT1cInNjaGVtZS5sYWJlbEZpZWxkXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uRm9ybWF0dGVyXT1cInNjaGVtZS5vcHRpb25Gb3JtYXR0ZXJcIlxuICAgICAgICAgICAgICAgIChtU2VsZWN0ZWRPcHRpb25MYWJlbCk9XCJzZXRPcHRpb25MYWJlbCgkZXZlbnQsIHNjaGVtZSlcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInNjaGVtZS5vcHRpb25zIHx8IG9wdGlvbnNNYXAoKVtzY2hlbWUuZmllbGQgfCB0b0FueV1cIlxuICAgICAgICAgICAgICAgIFtkZWNpbWFsUG9pbnRzXT1cInNjaGVtZS5kZWNpbWFsUG9pbnRzXCJcbiAgICAgICAgICAgICAgICBbaGludF09XCJzY2hlbWUuaGludFwiXG4gICAgICAgICAgICAgICAgW21heF09XCJzY2hlbWUubWF4XCJcbiAgICAgICAgICAgICAgICBbbWluXT1cInNjaGVtZS5taW5cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzY2hlbWUucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzY2hlbWUubGFiZWxcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2dcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzY2hlbWUuZGlzYWJsZWQgfHwgKHNjaGVtZS5kaXNhYmxlZElmIHwgZnVuY3Rpb25DYWxsZXIyOiBmb3JtKCkudmFsdWUgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IHJvdy1jb2xzLWF1dG8ganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICBAaWYgKHNob3dTdWJtaXRCdG4oKSkge1xuICAgICAgICAgIDxhcHAtYnRuIFt0ZXh0XT1cInN1Ym1pdEJ0blRleHQoKVwiIGFjdGlvblR5cGU9XCJzdWJtaXRcIiBncm91cD1cInN1Ym1pdFwiIFtmb3JtXT1cImZvcm0oKVwiIChtY2xpY2spPVwic3VibWl0KHN1Ym1pdEJ0bilcIiAjc3VibWl0QnRuIC8+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChzdWJtaXRCdG5UZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN1Ym1pdEJ0blRlbXBsYXRlKClcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvbG9hZGVyPlxuIl19
|
|
227
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9JLE9BQU8sRUFBZ0QsV0FBVyxFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFILE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQW1CLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR25FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7O0FBRWhFLE1BQU0sT0FBZ0IsaUJBQWlCO0lBUXJDO1FBUEEsa0JBQWEsR0FBRyxNQUFNLENBQXVDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLGVBQVUsR0FBRyxRQUFRLENBQW9CLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JHLFNBQUksR0FBMEMsRUFBRSxDQUFDO1FBRTFDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFHckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzdCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTO1FBQ1AsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDckMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVTLGVBQWUsQ0FBQyxPQUEwQjtRQUNsRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRVMsaUJBQWlCLENBQUMsS0FBYSxFQUFFLE1BQWdDO1FBQ3pFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDMUMsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQyxLQUFZLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDLEtBQVksQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQzNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLGlCQUFpQixDQUFDLEtBQWE7UUFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUMxQyxPQUFPLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixPQUFPLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBc0JILE1BQU0sT0FBTyxzQkFBa0csU0FBUSxpQkFHdEg7SUF4QkQ7O1FBeUJXLGFBQVEsR0FBc0IsT0FBTyxDQUFDO1FBRXJDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ25DLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2Qsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUU1RSxrQkFBYSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxzQkFBaUIsR0FBRyxLQUFLLEVBQW9CLENBQUM7UUFDOUMsc0JBQWlCLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDaEQsa0JBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUIsY0FBUyxHQUFHLEtBQUssRUFBbUIsQ0FBQztRQUNyQyxnQkFBVyxHQUFHLEtBQUssRUFBbUIsQ0FBQztRQUN2QyxnQkFBVyxHQUFHLEtBQUssRUFBbUIsQ0FBQztRQUN2QyxpQkFBWSxHQUFHLEtBQUssRUFBbUIsQ0FBQztRQUV4QyxrQkFBYSxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQ2hDLGNBQVMsR0FBRyxLQUFLLEVBQVcsQ0FBQztRQUM3QixZQUFPLEdBQUcsS0FBSyxFQUFXLENBQUM7UUFFM0IsYUFBUSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVsQyxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVqRyxTQUFJLEdBQUcsS0FBSyxDQUF3QixTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFjbkQsZUFBVSxHQUFHLE1BQU0sQ0FBZSxFQUFFLENBQUMsQ0FBQztRQUN0QyxZQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRXJELHVCQUFrQixHQUFHLFFBQVEsQ0FDM0IsR0FBRyxFQUFFO1lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUM1QixVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN2QyxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlHLENBQUMsRUFDRCxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FDbkIsQ0FBQztRQUNGLHlCQUF5QjtRQUNsQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBZ0RsRCxrQkFBYSxHQUFHLENBQUMsU0FBMkIsRUFBRSxFQUFFO1lBQzlDLFlBQVk7WUFDWixPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFtQixDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDO0tBdUNIO0lBbEhDLElBQW9ELFdBQVcsQ0FBQyxDQUE0QjtRQUMxRixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNELElBQXFCLE9BQU8sQ0FBQyxDQUFVO1FBQ3JDLElBQUksQ0FBQztZQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzs7WUFDN0MsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBRTNCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUM7Z0JBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDOztnQkFDN0MsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzdCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFlRCxJQUFJLENBQUMsTUFBaUM7UUFDcEMsWUFBWTtRQUNaLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuQyxJQUFJLE1BQU07WUFBRSxLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU07Z0JBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZFLElBQUksTUFBTTtZQUNSLEtBQUssTUFBTSxNQUFNLElBQUksTUFBTTtnQkFDekIsSUFBSSxNQUFNLENBQUMscUJBQXFCO29CQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEosQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQStCO1FBQzlDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSTtZQUFFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2xELElBQUksTUFBTSxDQUFDLGlCQUFpQixJQUFJLElBQUk7WUFBRSxNQUFNLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ3RFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsK0JBQStCO1lBQ3pELElBQUksTUFBTSxDQUFDLGtCQUFrQixJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQUUsTUFBTSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUN4SCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1QyxJQUFJLE1BQU0sQ0FBQyxlQUFlO1lBQ3hCLE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxNQUFNLENBQUMsZ0JBQWdCO1lBQ3pCLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUN4QyxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNMLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtZQUN2QixJQUFJLE1BQU0sQ0FBQyxLQUFLO2dCQUFFLFFBQVEsQ0FBQztZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUMvQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNmLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxRCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQTRCO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBbUIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQU9ELGVBQWUsQ0FBQyxVQUFtQztRQUNqRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBMkIsRUFBRSxNQUF3QztRQUNwRixPQUFPLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxTQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxTQUEyQjtRQUM5QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQW1CLENBQUMsRUFBRSxZQUFZLENBQUM7UUFDekUsSUFBSSxRQUFRO1lBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQWdCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBbUIsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBVyxFQUFFLE1BQStCO1FBQ3pELE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUM7SUFDdEMsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBa0I7UUFDN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLEdBQUcsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVCLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDeEQ7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDcEM7WUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QixHQUFHLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3ZCOztZQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7OEdBL0lVLHNCQUFzQjtrR0FBdEIsc0JBQXNCLG8yRUNuRm5DLHdoTUEySEEsMEREdkRJLGVBQWUsa0dBQ2YsV0FBVyx1ZEFDWCxZQUFZLHNNQUNaLG9CQUFvQiw0SUFFcEIscUJBQXFCLDhIQUdyQixtQkFBbUIsZ2lCQUNuQix5QkFBeUIsZ0VBQ3pCLFlBQVksK2FBQ1osZUFBZSxtREFDZixTQUFTOzsyRkFHQSxzQkFBc0I7a0JBckJsQyxTQUFTOytCQUNFLGdCQUFnQixjQUdkLElBQUksV0FDUDt3QkFDUCxlQUFlO3dCQUNmLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixvQkFBb0I7d0JBQ3BCLDBCQUEwQjt3QkFDMUIscUJBQXFCO3dCQUNyQixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQix5QkFBeUI7d0JBQ3pCLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixTQUFTO3FCQUNWOzhCQU1RLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUN1QixtQkFBbUI7c0JBQWhELE1BQU07dUJBQUMsb0JBQW9CO2dCQUNuQixVQUFVO3NCQUFsQixLQUFLO2dCQXFCOEMsV0FBVztzQkFBOUQsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtnQkFHekIsT0FBTztzQkFBM0IsS0FBSzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFR5cGUsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQXN5bmNWYWxpZGF0b3JGbiwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRnVuY3Rpb25DYWxsZXIyLCBUb0FueVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy91dGlsaXR5LnBpcGUnO1xuaW1wb3J0IHsgQnRuQ29tcG9uZW50IH0gZnJvbSAnLi4vYnRuL2J0bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5wdXRCYXNpY0NvbXBvbmVudCwgT3B0aW9uTGFiZWxUeXBlIH0gZnJvbSAnLi4vaW5wdXQvaW5wdXQtYmFzaWMuY29tcG9uZW50JztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50JztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQvdmFsaWRhdGlvbi1tZXNzYWdlL3ZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGhvbmVOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuLi9waG9uZS1udW1iZXIvcGhvbmUtbnVtYmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nU3dpdGNoRGVmYXVsdCwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkZXIvbG9hZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vU2VydmljZXMvdXRpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IElPYmplY3RMaXRlcmFsLCBJbnB1dFN1YlR5cGUsIElucHV0VHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBJY29uVHlwZSB9IGZyb20gJy4uL2J0bi9idG4ubW9kZWwnO1xuaW1wb3J0IHsgUmljaFRleHRFZGl0b3JSRkNvbXBvbmVudCB9IGZyb20gJy4uL3JpY2gtdGV4dC1lZGl0b3ItcmYvcmljaC10ZXh0LWVkaXRvci1yZi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUdlbmVyYXRvclNlcnZpY2UgfSBmcm9tICcuL2Zvcm0tZ2VuZXJhdG9yLnNlcnZpY2UnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUZvcm1HZW5lcmF0b3I8VEZvcm1Hcm91cCBleHRlbmRzIElPYmplY3RMaXRlcmFsLCBUQmFzZUZvcm1TY2hlbWEgZXh0ZW5kcyB7IGZpZWxkPzogYW55IH0gPSBhbnk+IHtcbiAgZm9ybVNjaGVtYU1hcCA9IHNpZ25hbDx7IFtmaWVsZDogc3RyaW5nXTogVEJhc2VGb3JtU2NoZW1hIH0+KHt9KTtcbiAgZm9ybVNjaGVtYSA9IGNvbXB1dGVkPFRCYXNlRm9ybVNjaGVtYVtdPigoKSA9PiBPYmplY3QudmFsdWVzKHRoaXMuZm9ybVNjaGVtYU1hcCgpKS5maWx0ZXIoKHgpID0+IHgpKTtcbiAgc3ViczogeyBbZmllbGROYW1lOiBzdHJpbmddOiBTdWJzY3JpcHRpb24gfSA9IHt9O1xuXG4gIHB1YmxpYyB1dGlsaXR5U2VydmljZSA9IGluamVjdChVdGlsaXR5U2VydmljZSk7XG4gIHB1YmxpYyBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgdGhpcy5vbkRlc3Ryb3koKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRGVzdHJveSgpIHtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuc3VicykuZm9yRWFjaCgocykgPT4ge1xuICAgICAgcz8udW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgICB0aGlzLnN1YnMgPSB7fTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfc2V0Rm9ybVNjaGVtYXMoc2NoZW1hczogVEJhc2VGb3JtU2NoZW1hW10pIHtcbiAgICB0aGlzLmZvcm1TY2hlbWFNYXAuc2V0KChzY2hlbWFzIHx8IFtdKS50b01hcCgnZmllbGQnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3VwZGF0ZUZvcm1TY2hlbWEoZmllbGQ6IHN0cmluZywgc2NoZW1lOiBQYXJ0aWFsPFRCYXNlRm9ybVNjaGVtYT4pIHtcbiAgICB0aGlzLmZvcm1TY2hlbWFNYXAudXBkYXRlKChmb3JtU2NoZW1hTWFwKSA9PiB7XG4gICAgICBjb25zdCBzY2ggPSBmb3JtU2NoZW1hTWFwW2ZpZWxkXTtcbiAgICAgIHJldHVybiAhc2NoID8geyAuLi5mb3JtU2NoZW1hTWFwLCBbZmllbGQgYXMgYW55XTogc2NoZW1lIH0gOiB7IC4uLmZvcm1TY2hlbWFNYXAsIFtmaWVsZCBhcyBhbnldOiB7IC4uLnNjaCwgLi4uc2NoZW1lIH0gfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfcmVtb3ZlRm9ybVNjaGVtYShmaWVsZDogc3RyaW5nKSB7XG4gICAgdGhpcy5mb3JtU2NoZW1hTWFwLnVwZGF0ZSgoZm9ybVNjaGVtYU1hcCkgPT4ge1xuICAgICAgZGVsZXRlIGZvcm1TY2hlbWFNYXBbZmllbGRdO1xuICAgICAgcmV0dXJuIGNsb25lRGVlcChmb3JtU2NoZW1hTWFwKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEZvcm0gc2hvdWxkIGJlIHNldCBiZWZvcmUgdGhlIHRoZSBmb3JtU2NoZW1hXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zvcm0tZ2VuZXJhdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIExvYWRlckNvbXBvbmVudCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUGhvbmVOdW1iZXJDb21wb25lbnQsXG4gICAgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQsXG4gICAgQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxuICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIElucHV0QmFzaWNDb21wb25lbnQsXG4gICAgUmljaFRleHRFZGl0b3JSRkNvbXBvbmVudCxcbiAgICBCdG5Db21wb25lbnQsXG4gICAgRnVuY3Rpb25DYWxsZXIyLFxuICAgIFRvQW55UGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUdlbmVyYXRvckNvbXBvbmVudDxURm9ybUdyb3VwIGV4dGVuZHMgeyBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PiB9PiBleHRlbmRzIEJhc2VGb3JtR2VuZXJhdG9yPFxuICBURm9ybUdyb3VwLFxuICBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPlxuPiB7XG4gIEBJbnB1dCgpIGtleUZpZWxkOiAnZmllbGQnIHwgJ2xhYmVsJyA9ICdmaWVsZCc7XG5cbiAgQE91dHB1dCgpIG9uU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3N1Ym1pc3Npb25SZXNwb25zZScpIF9zdWJtaXNzaW9uUmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgc3VibWl0RnVuYzogKHZhbHVlOiBhbnkpID0+IFByb21pc2U8YW55PjtcbiAgc3VibWl0QnRuVGV4dCA9IGlucHV0KCdTdWJtaXQnKTtcbiAgc3VibWl0QnRuVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xuICBzdWJtaXRTdWNjZXNzVGV4dCA9IGlucHV0KCdTYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgc2hvd1N1Ym1pdEJ0biA9IGlucHV0KHRydWUpO1xuXG4gIGdyaWRTdHlsZSA9IGlucHV0PG51bWJlciB8ICdhdXRvJz4oKTtcbiAgZ3JpZE1EU3R5bGUgPSBpbnB1dDxudW1iZXIgfCAnYXV0byc+KCk7XG4gIGdyaWRMR1N0eWxlID0gaW5wdXQ8bnVtYmVyIHwgJ2F1dG8nPigpO1xuICBncmlkWFhMU3R5bGUgPSBpbnB1dDxudW1iZXIgfCAnYXV0byc+KCk7XG5cbiAgZm9ybUdyaWRDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgdXNlTG9hZGVyID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgbG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgX2xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbXB1dGVkTG9hZGluZyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLnVzZUxvYWRlcigpID8gdGhpcy5sb2FkaW5nKCkgfHwgdGhpcy5fbG9hZGluZygpIDogZmFsc2UpKTtcblxuICBmb3JtID0gaW5wdXQ8Rm9ybUdyb3VwPFRGb3JtR3JvdXA+Pih1bmRlZmluZWQsIHt9KTtcbiAgc3VibWlzc2lvblJlc3BvbnNlOiBhbnk7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogJ2Zvcm1TY2hlbWEnIH0pIHNldCBfZm9ybVNjaGVtYSh2OiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdKSB7XG4gICAgdGhpcy5pbml0KGNsb25lRGVlcCh2LmZpbHRlcigoeCkgPT4geCkpKTtcbiAgfVxuICBASW5wdXQoJ2lzU2hvdycpIHNldCBfaXNTaG93KHY6IGJvb2xlYW4pIHtcbiAgICBpZiAodikgdGhpcy5mb3JtKCk/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIGVsc2UgdGhpcy5mb3JtKCk/LmVuYWJsZSgpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodikgdGhpcy5mb3JtKCk/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgZWxzZSB0aGlzLmZvcm0oKT8uZW5hYmxlKCk7XG4gICAgfSwgNTAwKTtcbiAgfVxuICBvcHRpb25zTWFwID0gc2lnbmFsPElGb3JtT3B0aW9ucz4oe30pO1xuICBmb3JtVmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mb3JtKCk/LmdldFJhd1ZhbHVlKCkpO1xuXG4gIGNvbXB1dGVkRm9ybVNjaGVtYSA9IGNvbXB1dGVkPElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W10+KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1WYWwgPSB0aGlzLmZvcm1WYWwoKSxcbiAgICAgICAgZm9ybVNjaGVtYSA9IHRoaXMuZm9ybVNjaGVtYSgpIHx8IFtdO1xuICAgICAgcmV0dXJuIGZvcm1TY2hlbWEuZmlsdGVyKChzY2hlbWUpID0+ICFzY2hlbWUuaGlkZGVuICYmICghc2NoZW1lLmhpZGVJZkZ1bmMgfHwgIXNjaGVtZS5oaWRlSWZGdW5jKGZvcm1WYWwpKSk7XG4gICAgfSxcbiAgICB7IGVxdWFsOiBpc0VxdWFsIH0sXG4gICk7XG4gIC8vIG1pc2NJbmRleDogVE1pc2NJbmRleDtcbiAgcHVibGljIGZvcm1TZXJ2aWNlID0gaW5qZWN0KEZvcm1HZW5lcmF0b3JTZXJ2aWNlKTtcblxuICBpbml0KHNjaGVtYTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXSkge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHRoaXMub25EZXN0cm95KCk7XG4gICAgdGhpcy5fc2V0Rm9ybVNjaGVtYXMoc2NoZW1hIHx8IFtdKTtcbiAgICBpZiAoc2NoZW1hKSBmb3IgKGNvbnN0IHNjaGVtZSBvZiBzY2hlbWEpIHRoaXMuaGFuZGxlRm9ybVNjaGVtZShzY2hlbWUpO1xuICAgIGlmIChzY2hlbWEpXG4gICAgICBmb3IgKGNvbnN0IHNjaGVtZSBvZiBzY2hlbWEpXG4gICAgICAgIGlmIChzY2hlbWUudHJpZ2dlck9uQ2hhbmdlT25Jbml0KSBzY2hlbWUub25DaGFuZ2VGdW5jKHRoaXMuZm9ybSgpLmdldFJhd1ZhbHVlKCksIHRoaXMuZm9ybSgpLmdldFJhd1ZhbHVlKClbc2NoZW1lLmZpZWxkPy50b1N0cmluZygpXSwgdGhpcyk7XG4gIH1cblxuICBoYW5kbGVGb3JtU2NoZW1lKHNjaGVtZTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4pIHtcbiAgICBzY2hlbWUuaWQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdlbmVyYXRlVVVJRCgpO1xuICAgIGlmIChzY2hlbWUuc3RhY2tlZCA9PSBudWxsKSBzY2hlbWUuc3RhY2tlZCA9IHRydWU7XG4gICAgaWYgKHNjaGVtZS5zaG93VmFsaWRhdGlvbk1zZyA9PSBudWxsKSBzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2cgPSB0cnVlO1xuICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlLmNvbmZpZy5zaG93VmFsaWRhdGlvbk1lc3NhZ2VzQnlEZWZhdWx0KVxuICAgICAgaWYgKHNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGQgPT0gbnVsbCAmJiAoIXNjaGVtZS52YWx1ZUZpZWxkIHx8ICFzY2hlbWUubGFiZWxGaWVsZCkpIHNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGQgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlRm9ybVNjaGVtYShzY2hlbWUuZmllbGQsIHNjaGVtZSk7XG5cbiAgICBpZiAoc2NoZW1lLm9wdGlvbnNJbml0RnVuYylcbiAgICAgIHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHNjaGVtZS5vcHRpb25zID0gcjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtU2NoZW1hKHNjaGVtZS5maWVsZCwgeyBvcHRpb25zOiByIH0pO1xuICAgICAgfSk7XG4gICAgaWYgKHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMyKVxuICAgICAgc2NoZW1lLm9wdGlvbnNJbml0RnVuYzIoKS5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAgICAgc2NoZW1lLm9wdGlvbnMgPSByO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1TY2hlbWEoc2NoZW1lLmZpZWxkLCB7IG9wdGlvbnM6IHIgfSk7XG4gICAgICB9KTtcbiAgICBpZiAoc2NoZW1lLm9uQ2hhbmdlRnVuYykge1xuICAgICAgaWYgKHNjaGVtZS5kZWJ1ZykgZGVidWdnZXI7XG4gICAgICB0aGlzLnN1YnNbc2NoZW1lLmZpZWxkPy50b1N0cmluZygpXSA9IHRoaXMuZm9ybSgpXG4gICAgICAgID8uY29udHJvbHNbc2NoZW1lLmZpZWxkPy50b1N0cmluZygpXT8udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDApKVxuICAgICAgICAuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgICAgc2NoZW1lLm9uQ2hhbmdlRnVuYyh0aGlzLmZvcm0oKS5nZXRSYXdWYWx1ZSgpLCByLCB0aGlzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZGV0YWNoRm9ybVNjaGVtZShmaWVsZE5hbWU/OiBrZXlvZiBURm9ybUdyb3VwKSB7XG4gICAgdGhpcy5zdWJzW2ZpZWxkTmFtZSBhcyBzdHJpbmddLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBtY2hhbmdlRW1pdHRlcigpIHtcbiAgICB0aGlzLm1jaGFuZ2UuZW1pdCh0aGlzLmZvcm0oKS5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuXG4gIGdldEZvcm1TY2hlbWUgPSAoZmllbGROYW1lOiBrZXlvZiBURm9ybUdyb3VwKSA9PiB7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVNjaGVtYU1hcCgpW2ZpZWxkTmFtZSBhcyBzdHJpbmddO1xuICB9O1xuXG4gIGFkZFRvRm9ybVNjaGVtYShmb3JtU2NoZW1lOiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPikge1xuICAgIHRoaXMucmVtb3ZlRnJvbUZvcm1TY2hlbWEoZm9ybVNjaGVtZS5maWVsZCk7XG4gICAgdGhpcy5oYW5kbGVGb3JtU2NoZW1lKGNsb25lRGVlcChmb3JtU2NoZW1lKSk7XG4gIH1cblxuICB1cGRhdGVGb3JtU2NoZW1hKGZpZWxkTmFtZToga2V5b2YgVEZvcm1Hcm91cCwgc2NoZW1lOiBQYXJ0aWFsPElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+Pikge1xuICAgIHJldHVybiBzdXBlci5fdXBkYXRlRm9ybVNjaGVtYShmaWVsZE5hbWUgYXMgc3RyaW5nLCBzY2hlbWUpO1xuICB9XG5cbiAgcmVtb3ZlRnJvbUZvcm1TY2hlbWEoZmllbGROYW1lOiBrZXlvZiBURm9ybUdyb3VwKSB7XG4gICAgdGhpcy5kZXRhY2hGb3JtU2NoZW1lKGZpZWxkTmFtZSk7XG4gICAgY29uc3Qgb25SZW1vdmUgPSB0aGlzLmZvcm1TY2hlbWFNYXAoKVtmaWVsZE5hbWUgYXMgc3RyaW5nXT8ub25SZW1vdmVGdW5jO1xuICAgIGlmIChvblJlbW92ZSkgb25SZW1vdmUodGhpcy5mb3JtKCkuZ2V0UmF3VmFsdWUoKSBhcyBhbnksIHRoaXMuZm9ybSgpLmNvbnRyb2xzW2ZpZWxkTmFtZSBhcyBhbnldLCB0aGlzKTtcbiAgICB0aGlzLl9yZW1vdmVGb3JtU2NoZW1hKGZpZWxkTmFtZSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgc2V0T3B0aW9uTGFiZWwoJGV2ZW50OiBhbnksIHNjaGVtZTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4pIHtcbiAgICBzY2hlbWUuc2VsZWN0ZWRPcHRpb25MYWJlbCA9ICRldmVudDtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdChidG4/OiBCdG5Db21wb25lbnQpIHtcbiAgICBpZiAodGhpcy5zdWJtaXRGdW5jKSB7XG4gICAgICBidG4/LnNldExvYWRlcih0cnVlKTtcbiAgICAgIHRoaXMuX2xvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgY29uc3QgZm9ybVZhbCA9IHRoaXMuZm9ybVZhbCgpO1xuICAgICAgdGhpcy5vblN1Ym1pdC5lbWl0KGZvcm1WYWwpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdWJtaXNzaW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnN1Ym1pdEZ1bmMoZm9ybVZhbCk7XG4gICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuaW5mbyh0aGlzLnN1Ym1pdFN1Y2Nlc3NUZXh0KCksIDEpO1xuICAgICAgICB0aGlzLl9zdWJtaXNzaW9uUmVzcG9uc2UuZW1pdCh0aGlzLnN1Ym1pc3Npb25SZXNwb25zZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmluZm8oZXJyb3IsIDApO1xuICAgICAgfVxuICAgICAgdGhpcy5fbG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgYnRuPy5zZXRMb2FkZXIoZmFsc2UpO1xuICAgIH0gZWxzZSB0aGlzLm9uU3VibWl0LmVtaXQodGhpcy5mb3JtVmFsKCkpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJhc2VGb3JtU2NoZW1hPFxuICBULFxuICBDb21wb25lbnQgZXh0ZW5kcyBCYXNlRm9ybUdlbmVyYXRvcjxUPixcbiAgVEZvcm1Hcm91cCBleHRlbmRzIHtcbiAgICBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcbiAgfSA9IGFueSxcbj4ge1xuICBhc3luY1ZhbGlkYXRvcnM/OiBBc3luY1ZhbGlkYXRvckZuW107XG4gIGF1dG9QaWNrVmFsdWVGaWVsZD86IGJvb2xlYW47XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBjbGVhck9uRGlzYWJsZT86IGJvb2xlYW47XG4gIGNscz86IHN0cmluZztcbiAgY291bnRyeUNvZGUzPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IElCYXNlRm9ybVNjaGVtYTxULCBDb21wb25lbnQsIFRGb3JtR3JvdXA+W107XG4gIGRlY2ltYWxQb2ludHM/OiBudW1iZXI7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWRJZj86IChyb3c6IGFueSwgY2VsbEZpZWxkPzogc3RyaW5nKSA9PiBib29sZWFuO1xuICBoaWRlSWZGdW5jPzogKHJvdykgPT4gYm9vbGVhbjtcbiAgZmllbGQ6IGtleW9mIFRGb3JtR3JvdXA7XG4gIGZvcm0/OiBGb3JtR3JvdXA8VEZvcm1Hcm91cD47XG4gIGdldENvdW50cnlDb2RlM0tleT86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgaGludD86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuICBpc1NlYXJjaEZpZWxkPzogYm9vbGVhbjtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGxhYmVsRmllbGQ/OiBzdHJpbmc7XG4gIGxhYmVsVHlwZT86IE9wdGlvbkxhYmVsVHlwZTtcbiAgb3B0aW9uTGFiZWxGb3JtYXR0ZXI/OiAocm93KSA9PiBzdHJpbmc7XG4gIG1heD86IG51bWJlcjtcbiAgbWluPzogbnVtYmVyO1xuICBub0Zvcm1hdD86IGJvb2xlYW47XG4gIG9wdGlvbkZvcm1hdHRlcj86IChpdGVtOiBhbnkpID0+IHN0cmluZztcbiAgb3B0aW9ucz86IGFueVtdO1xuICBvcHRpb25zQXN5bmM/OiBPYnNlcnZhYmxlPGFueVtdPiB8IFByb21pc2U8YW55W10+O1xuICBvcHRpb25zSW5pdEZ1bmM/OiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgb3B0aW9uc0luaXRGdW5jMj86ICgpID0+IE9ic2VydmFibGU8YW55W10+O1xuICBvcHRpb25zS2V5Pzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgc2VhcmNoRnVuYz86ICguLi5hcmdzKSA9PiBhbnk7XG4gIHNldEFzQ291bnRyeUNvZGUzPzogYm9vbGVhbjtcbiAgc2hvd1ZhbGlkYXRpb24/OiBib29sZWFuO1xuICBzaG93VmFsaWRhdGlvbkljb24/OiBib29sZWFuO1xuICB0ZW1wbGF0ZVZhbHVlPzogYW55O1xuICB0eXBlPzogSW5wdXRUeXBlO1xuICB2YWxpZGF0b3JzPzogVmFsaWRhdG9yRm5bXTtcbiAgdmFsdWU/OiBhbnk7XG4gIHZhbHVlRmllbGQ/OiBzdHJpbmc7XG4gIG9wdGlvbnNGdW5jPzogKC4uLnZhbDogYW55KSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgdHJpZ2dlck9uQ2hhbmdlT25Jbml0PzogYm9vbGVhbjtcbiAgZm9ybWF0dGVyPzogKHJvdzogeyBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogYW55IH0sIGZpZWxkTmFtZToga2V5b2YgVEZvcm1Hcm91cCkgPT4gc3RyaW5nO1xuICBleHRyYT86IGFueTtcbiAgb25DaGFuZ2VGdW5jPzogKHJvdzogeyBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXT86IFRGb3JtR3JvdXBbS11bJ3ZhbHVlJ10gfSwgY2VsbFZhbHVlPzogYW55LCBjb21wb25lbnQ/OiBDb21wb25lbnQpID0+IE9ic2VydmFibGU8YW55W10+IHwgYW55O1xuICBvblJlbW92ZUZ1bmM/OiAocm93OiB7IFtLIGluIGtleW9mIFRGb3JtR3JvdXBdOiBURm9ybUdyb3VwW0tdWyd2YWx1ZSddIH0sIGNlbGw/OiBhbnksIGNvbXBvbmVudD86IENvbXBvbmVudCkgPT4gYW55O1xuICBzZWxlY3RlZE9wdGlvbkxhYmVsPzogc3RyaW5nO1xuICBzdGFja2VkPzogYm9vbGVhbjtcbiAgZGVidWc/OiBib29sZWFuO1xuICBzaG93VmFsaWRhdGlvbk1zZz86IGJvb2xlYW47XG4gIGRvbnRGb3JtYXRBc0lucHV0PzogYm9vbGVhbjtcbiAgc2hvd1JlcXVpcmVkVGFnPzogYm9vbGVhbjtcbiAgaWNvbj86IEljb25UeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JtU2NoZW1hPFxuICBURm9ybUdyb3VwIGV4dGVuZHMge1xuICAgIFtLIGluIGtleW9mIFRGb3JtR3JvdXBdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+O1xuICB9ID0gYW55LFxuPiBleHRlbmRzIElCYXNlRm9ybVNjaGVtYTxURm9ybUdyb3VwLCBGb3JtR2VuZXJhdG9yQ29tcG9uZW50PFRGb3JtR3JvdXA+PiB7XG4gIGNoaWxkcmVuPzogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXTtcbiAgbGFiZWxUeXBlPzogT3B0aW9uTGFiZWxUeXBlO1xuICBmaWVsZDoga2V5b2YgVEZvcm1Hcm91cDtcbiAgc3ViVHlwZT86IElucHV0U3ViVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRm9ybU9wdGlvbnMge1xuICBbZmllbGQ6IHN0cmluZ106IGFueTtcbn1cbiIsIjxsb2FkZXIgW2xvYWRpbmddPVwiY29tcHV0ZWRMb2FkaW5nKClcIj5cbiAgPGZvcm0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyb3cgcm93LWNvbHMte3sgZ3JpZFN0eWxlKCkgfX0gcm93LWNvbHMtbWQte3sgZ3JpZE1EU3R5bGUoKSB9fSByb3ctY29scy1sZy17eyBncmlkTEdTdHlsZSgpIH19IHJvdy1jb2xzLXh4bC17e1xuICAgICAgICBncmlkWFhMU3R5bGUoKVxuICAgICAgfX0gYWxpZ24taXRlbXMtY2VudGVyIHt7IGZvcm1HcmlkQ2xhc3MoKSB9fVwiPlxuICAgICAgQGZvciAoc2NoZW1lIG9mIGNvbXB1dGVkRm9ybVNjaGVtYSgpOyB0cmFjayBzY2hlbWUuZmllbGQpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbCB7eyBzY2hlbWUuY2xzIH19IFwiPlxuICAgICAgICAgIEBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICAgIEBjYXNlIChzY2hlbWUudHlwZSA9PSAndGVsJykge1xuICAgICAgICAgICAgICA8YXBwLXBob25lLW51bWJlclxuICAgICAgICAgICAgICAgIFtmb3JtXT1cInNjaGVtZS5mb3JtIHx8IGZvcm0oKVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInNjaGVtZS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW2NsZWFyT25EaXNhYmxlXT1cInNjaGVtZS5jbGVhck9uRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgW3N0YWNrZWRdPVwic2NoZW1lLnN0YWNrZWRcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cInNjaGVtZS5maWVsZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW25vRm9ybWF0XT1cInNjaGVtZS5ub0Zvcm1hdFwiXG4gICAgICAgICAgICAgICAgW2RlYnVnXT1cInNjaGVtZS5kZWJ1Z1wiXG4gICAgICAgICAgICAgICAgKG1jaGFuZ2UpPVwibWNoYW5nZUVtaXR0ZXIoKVwiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvblwiXG4gICAgICAgICAgICAgICAgW2F1dG9QaWNrVmFsdWVGaWVsZF09XCJzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICBbc2hvd1JlcXVpcmVkVGFnXT1cInNjaGVtZS5zaG93UmVxdWlyZWRUYWdcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25Nc2dcIlxuICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbkljb25dPVwic2NoZW1lLnNob3dWYWxpZGF0aW9uSWNvblwiXG4gICAgICAgICAgICAgICAgW2NvdW50cnlDb2RlM109XCJzY2hlbWUuY291bnRyeUNvZGUzXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2NoZW1lLmRpc2FibGVkIHx8IChzY2hlbWUuZGlzYWJsZWRJZiB8IGZ1bmN0aW9uQ2FsbGVyMjogZm9ybSgpLnZhbHVlIDogKHNjaGVtZS5maWVsZCB8IHRvQW55KSlcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKHNjaGVtZS50eXBlID09ICdhdXRvY29tcGxldGUnKSB7XG4gICAgICAgICAgICAgIDxhcHAtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm0gfHwgZm9ybSgpXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwic2NoZW1lLmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbY2xlYXJPbkRpc2FibGVdPVwic2NoZW1lLmNsZWFyT25EaXNhYmxlXCJcbiAgICAgICAgICAgICAgICBbc3RhY2tlZF09XCJzY2hlbWUuc3RhY2tlZFwiXG4gICAgICAgICAgICAgICAgW2xhYmVsRmllbGRdPVwic2NoZW1lLmxhYmVsRmllbGRcIlxuICAgICAgICAgICAgICAgIFtub0Zvcm1hdF09XCJzY2hlbWUubm9Gb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbFR5cGVdPVwic2NoZW1lLmxhYmVsVHlwZSB8IHRvQW55XCJcbiAgICAgICAgICAgICAgICAobWNoYW5nZSk9XCJtY2hhbmdlRW1pdHRlcigpXCJcbiAgICAgICAgICAgICAgICAobVNlbGVjdGVkT3B0aW9uTGFiZWwpPVwic2V0T3B0aW9uTGFiZWwoJGV2ZW50LCBzY2hlbWUpXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJzY2hlbWUuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtkZWJ1Z109XCJzY2hlbWUuZGVidWdcIlxuICAgICAgICAgICAgICAgIFtzaG93UmVxdWlyZWRUYWddPVwic2NoZW1lLnNob3dSZXF1aXJlZFRhZ1wiXG4gICAgICAgICAgICAgICAgW29wdGlvbkZvcm1hdHRlcl09XCJzY2hlbWUub3B0aW9uRm9ybWF0dGVyXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVGaWVsZF09XCJzY2hlbWUudmFsdWVGaWVsZFwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNGdW5jXT1cInNjaGVtZS5vcHRpb25zRnVuY1wiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uTXNnXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvbk1zZ1wiXG4gICAgICAgICAgICAgICAgW2F1dG9QaWNrVmFsdWVGaWVsZF09XCJzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJzY2hlbWUub3B0aW9ucyB8fCBvcHRpb25zTWFwKClbc2NoZW1lLmZpZWxkIHwgdG9BbnldXCJcbiAgICAgICAgICAgICAgICBbaGludF09XCJzY2hlbWUuaGludFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNjaGVtZS5kaXNhYmxlZCB8fCAoc2NoZW1lLmRpc2FibGVkSWYgfCBmdW5jdGlvbkNhbGxlcjI6IGZvcm0oKS52YWx1ZSA6IChzY2hlbWUuZmllbGQgfCB0b0FueSkpXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlIChzY2hlbWUudHlwZSA9PSAncmljaHRleHQnKSB7XG4gICAgICAgICAgICAgIDxyaWNoLXRleHQtZWRpdG9yLXJmXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm0gfHwgZm9ybSgpXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwic2NoZW1lLmxhYmVsIVwiXG4gICAgICAgICAgICAgICAgW2NsZWFyT25EaXNhYmxlXT1cInNjaGVtZS5jbGVhck9uRGlzYWJsZSFcIlxuICAgICAgICAgICAgICAgIFtzdGFja2VkXT1cInNjaGVtZS5zdGFja2VkXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxGaWVsZF09XCJzY2hlbWUubGFiZWxGaWVsZCFcIlxuICAgICAgICAgICAgICAgIFtub0Zvcm1hdF09XCJzY2hlbWUubm9Gb3JtYXQhXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxUeXBlXT1cInNjaGVtZS5sYWJlbFR5cGUgfCB0b0FueVwiXG4gICAgICAgICAgICAgICAgKG1jaGFuZ2UpPVwibWNoYW5nZUVtaXR0ZXIoKVwiXG4gICAgICAgICAgICAgICAgKG1TZWxlY3RlZE9wdGlvbkxhYmVsKT1cInNldE9wdGlvbkxhYmVsKCRldmVudCwgc2NoZW1lKVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwic2NoZW1lLmZpZWxkXCJcbiAgICAgICAgICAgICAgICBbZGVidWddPVwic2NoZW1lLmRlYnVnIVwiXG4gICAgICAgICAgICAgICAgW3Nob3dSZXF1aXJlZFRhZ109XCJzY2hlbWUuc2hvd1JlcXVpcmVkVGFnIVwiXG4gICAgICAgICAgICAgICAgW29wdGlvbkZvcm1hdHRlcl09XCJzY2hlbWUub3B0aW9uRm9ybWF0dGVyIVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlRmllbGRdPVwic2NoZW1lLnZhbHVlRmllbGQhXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc0Z1bmNdPVwic2NoZW1lLm9wdGlvbnNGdW5jIVwiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uTXNnXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvbk1zZ1wiXG4gICAgICAgICAgICAgICAgW2F1dG9QaWNrVmFsdWVGaWVsZF09XCJzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkIVwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwic2NoZW1lLm9wdGlvbnMgfHwgb3B0aW9uc01hcCgpW3NjaGVtZS5maWVsZCB8IHRvQW55XVwiXG4gICAgICAgICAgICAgICAgW2hpbnRdPVwic2NoZW1lLmhpbnQhXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICBzY2hlbWUuZGlzYWJsZWQgfHxcbiAgICAgICAgICAgICAgICAgIChzY2hlbWUuZGlzYWJsZWRJZiEgfCBmdW5jdGlvbkNhbGxlcjI6IGZvcm0oKS52YWx1ZSA6IChzY2hlbWUuZmllbGQgfCB0b0FueSkpXG4gICAgICAgICAgICAgICAgXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgPGFwcC1pbnB1dC1iYXNpY1xuICAgICAgICAgICAgICAgIFtub0Zvcm1hdF09XCJzY2hlbWUubm9Gb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cInNjaGVtZS5maWVsZFwiXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm0gfHwgZm9ybSgpXCJcbiAgICAgICAgICAgICAgICBbY2xlYXJPbkRpc2FibGVdPVwic2NoZW1lLmNsZWFyT25EaXNhYmxlXCJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCJzY2hlbWUudHlwZVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlRmllbGRdPVwic2NoZW1lLnZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgIFthdXRvUGlja1ZhbHVlRmllbGRdPVwic2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZFwiXG4gICAgICAgICAgICAgICAgW3N0YWNrZWRdPVwic2NoZW1lLnN0YWNrZWRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbFR5cGVdPVwic2NoZW1lLmxhYmVsVHlwZSB8IHRvQW55XCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzY2hlbWUuY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uXT1cIiEhc2NoZW1lLmFzeW5jVmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uSWNvbl09XCIhIXNjaGVtZS5hc3luY1ZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgIFtkZWJ1Z109XCJzY2hlbWUuZGVidWdcIlxuICAgICAgICAgICAgICAgIChtY2hhbmdlKT1cIm1jaGFuZ2VFbWl0dGVyKClcIlxuICAgICAgICAgICAgICAgIFtzaG93UmVxdWlyZWRUYWddPVwic2NoZW1lLnNob3dSZXF1aXJlZFRhZ1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsRmllbGRdPVwic2NoZW1lLmxhYmVsRmllbGRcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlclwiXG4gICAgICAgICAgICAgICAgKG1TZWxlY3RlZE9wdGlvbkxhYmVsKT1cInNldE9wdGlvbkxhYmVsKCRldmVudCwgc2NoZW1lKVwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwic2NoZW1lLm9wdGlvbnMgfHwgb3B0aW9uc01hcCgpW3NjaGVtZS5maWVsZCB8IHRvQW55XVwiXG4gICAgICAgICAgICAgICAgW2RlY2ltYWxQb2ludHNdPVwic2NoZW1lLmRlY2ltYWxQb2ludHNcIlxuICAgICAgICAgICAgICAgIFtoaW50XT1cInNjaGVtZS5oaW50XCJcbiAgICAgICAgICAgICAgICBbbWF4XT1cInNjaGVtZS5tYXhcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwic2NoZW1lLm1pblwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNjaGVtZS5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInNjaGVtZS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uTXNnXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvbk1zZ1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNjaGVtZS5kaXNhYmxlZCB8fCAoc2NoZW1lLmRpc2FibGVkSWYgfCBmdW5jdGlvbkNhbGxlcjI6IGZvcm0oKS52YWx1ZSA6IChzY2hlbWUuZmllbGQgfCB0b0FueSkpXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgcm93LWNvbHMtYXV0byBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgIEBpZiAoc2hvd1N1Ym1pdEJ0bigpKSB7XG4gICAgICAgICAgPGFwcC1idG4gW3RleHRdPVwic3VibWl0QnRuVGV4dCgpXCIgYWN0aW9uVHlwZT1cInN1Ym1pdFwiIGdyb3VwPVwic3VibWl0XCIgW2Zvcm1dPVwiZm9ybSgpXCIgKG1jbGljayk9XCJzdWJtaXQoc3VibWl0QnRuKVwiICNzdWJtaXRCdG4gLz5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHN1Ym1pdEJ0blRlbXBsYXRlKCkpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VibWl0QnRuVGVtcGxhdGUoKVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9sb2FkZXI+XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild, input } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, input, signal } from '@angular/core';
|
|
2
2
|
import { AsyncPipe, DatePipe, NgClass, NgFor, NgIf, NgSwitch, NgSwitchCase, NgSwitchDefault, UpperCasePipe } from '@angular/common';
|
|
3
3
|
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
4
|
import { MatNativeDateModule, MatRippleModule } from '@angular/material/core';
|
|
@@ -12,6 +12,7 @@ import { MatButtonToggleModule } from '@angular/material/button-toggle';
|
|
|
12
12
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
13
13
|
import { TranslatePipe } from '../../../pipes/translate.pipe';
|
|
14
14
|
import { Config } from '../../../../configs/index.config';
|
|
15
|
+
import { toSignal } from '@angular/core/rxjs-interop';
|
|
15
16
|
import * as i0 from "@angular/core";
|
|
16
17
|
import * as i1 from "../input.service";
|
|
17
18
|
import * as i2 from "@angular/common";
|
|
@@ -30,7 +31,7 @@ export class DateInputComponent {
|
|
|
30
31
|
else if (v) {
|
|
31
32
|
// debugger;
|
|
32
33
|
this.skipPatchControl = true;
|
|
33
|
-
this.form.controls.date.patchValue(new Date(v), { emitEvent: !this.showTime });
|
|
34
|
+
this.form().controls.date.patchValue(new Date(v), { emitEvent: !this.showTime });
|
|
34
35
|
if (!this.showTime)
|
|
35
36
|
return;
|
|
36
37
|
const timeComp = v.split('T')?.[1];
|
|
@@ -38,7 +39,7 @@ export class DateInputComponent {
|
|
|
38
39
|
if (this.debug())
|
|
39
40
|
debugger;
|
|
40
41
|
const [hours, minutes, seconds] = timeComp ? timeComp.split(':') : ['12', '00', '00'];
|
|
41
|
-
this.form.patchValue({
|
|
42
|
+
this.form().patchValue({
|
|
42
43
|
hours: ('0' + (+hours % 12)).slice(-2),
|
|
43
44
|
minutes,
|
|
44
45
|
seconds: seconds?.slice(0, 2),
|
|
@@ -47,29 +48,29 @@ export class DateInputComponent {
|
|
|
47
48
|
// this.matCalendar?.updateTodaysDate();
|
|
48
49
|
// this.matCalendar?._goToDateInView(this.form.controls.date.value,'month')
|
|
49
50
|
}
|
|
50
|
-
else if (this.form.controls.formattedValue.value) {
|
|
51
|
+
else if (this.form().controls.formattedValue.value) {
|
|
51
52
|
// debugger;
|
|
52
53
|
// this.skipPatchControl = true;
|
|
53
|
-
this.form.reset();
|
|
54
|
+
this.form().reset();
|
|
54
55
|
}
|
|
55
56
|
}
|
|
56
57
|
set _max(v) {
|
|
57
58
|
if (v)
|
|
58
|
-
this.max
|
|
59
|
+
this.max.set(new Date(v));
|
|
59
60
|
}
|
|
60
61
|
set _min(v) {
|
|
61
62
|
if (v)
|
|
62
|
-
this.min
|
|
63
|
+
this.min.set(new Date(v));
|
|
63
64
|
}
|
|
64
65
|
set _type(v) {
|
|
65
|
-
this.showTime
|
|
66
|
+
this.showTime.set(v == 'datetime-local');
|
|
66
67
|
this.type = v;
|
|
67
68
|
this.chunksLength = this.showTime ? this.iS.dateInputChunks.length : this.iS.dateInputChunks.findIndex((x) => x.isTime);
|
|
68
69
|
}
|
|
69
70
|
constructor(iS, datePipe) {
|
|
70
71
|
this.iS = iS;
|
|
71
72
|
this.datePipe = datePipe;
|
|
72
|
-
this.form = new FormGroup({
|
|
73
|
+
this.form = signal(new FormGroup({
|
|
73
74
|
date: new FormControl(null),
|
|
74
75
|
hours: new FormControl(null),
|
|
75
76
|
minutes: new FormControl(null),
|
|
@@ -77,16 +78,22 @@ export class DateInputComponent {
|
|
|
77
78
|
meridiem: new FormControl(null),
|
|
78
79
|
formattedValue: new FormControl(null),
|
|
79
80
|
rawValue: new FormControl(null),
|
|
80
|
-
});
|
|
81
|
+
}));
|
|
82
|
+
this.formValue = toSignal(this.form().valueChanges);
|
|
81
83
|
this.valueChanged = new EventEmitter();
|
|
82
|
-
this.
|
|
84
|
+
this.showTime = signal(null);
|
|
85
|
+
this.inpCl = input('control-bg-gray');
|
|
86
|
+
this.cls = input();
|
|
83
87
|
this.inputClass = input();
|
|
88
|
+
this.max = signal(undefined);
|
|
89
|
+
this.min = signal(undefined);
|
|
90
|
+
this.id = input();
|
|
84
91
|
this.disabled = input();
|
|
85
92
|
this.debug = input();
|
|
86
93
|
this.readonly = input();
|
|
87
94
|
this.subs = {};
|
|
88
95
|
this.formatterFunction = () => {
|
|
89
|
-
this.form.valueChanges.subscribe(({ formattedValue, ...change }) => {
|
|
96
|
+
this.form().valueChanges.subscribe(({ formattedValue, ...change }) => {
|
|
90
97
|
if (this.debug())
|
|
91
98
|
debugger;
|
|
92
99
|
if (!Object.values(change).filter((x) => x != null).length) {
|
|
@@ -123,7 +130,7 @@ export class DateInputComponent {
|
|
|
123
130
|
this.controlValue = this.control.value;
|
|
124
131
|
this.valueChanged.emit({ target: { value: this.control.value } });
|
|
125
132
|
}
|
|
126
|
-
this.form.controls.formattedValue.patchValue(this.datePipe.transform(this.controlValue || date, `MMM. dd, yyyy${this.showTime ? '. hh:mm:ss a' : ''}`), {
|
|
133
|
+
this.form().controls.formattedValue.patchValue(this.datePipe.transform(this.controlValue || date, `MMM. dd, yyyy${this.showTime ? '. hh:mm:ss a' : ''}`), {
|
|
127
134
|
emitEvent: false,
|
|
128
135
|
});
|
|
129
136
|
});
|
|
@@ -143,12 +150,12 @@ export class DateInputComponent {
|
|
|
143
150
|
//Called after ngAfterContentInit when the component's view has been initialized. Applies to components only.
|
|
144
151
|
//Add 'implements AfterViewInit' to the class.
|
|
145
152
|
// debugger;
|
|
146
|
-
if (this.
|
|
147
|
-
this.matCalendar.activeDate = new Date(this.
|
|
153
|
+
if (this.formValue().date) {
|
|
154
|
+
this.matCalendar.activeDate = new Date(this.formValue().date);
|
|
148
155
|
}
|
|
149
156
|
}
|
|
150
157
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: DateInputComponent, deps: [{ token: i1.InputService }, { token: i2.DatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
151
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.0", type: DateInputComponent, isStandalone: true, selector: "date-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, inpCl: { classPropertyName: "inpCl", publicName: "inpCl", isSignal: false, isRequired: false, transformFunction: null }, cls: { classPropertyName: "cls", publicName: "cls", isSignal: false, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, valid: { classPropertyName: "valid", publicName: "valid", isSignal: false, isRequired: false, transformFunction: null }, _max: { classPropertyName: "_max", publicName: "max", isSignal: false, isRequired: false, transformFunction: null }, _min: { classPropertyName: "_min", publicName: "min", isSignal: false, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: false, isRequired: true, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, _type: { classPropertyName: "_type", publicName: "type", isSignal: false, isRequired: false, transformFunction: null }, showValidation: { classPropertyName: "showValidation", publicName: "showValidation", isSignal: false, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { valueChanged: "valueChanged" }, viewQueries: [{ propertyName: "matCalendar", first: true, predicate: MatCalendar, descendants: true }], ngImport: i0, template: "<div class=\"customdate {{ cls }} {{ inputClass() }}\" [ngClass]=\"{ disabled: readonly() || disabled() }\">\n <div class=\"row g-1 w-100\">\n <!-- <div class=\"col overflow-auto hide-scroll-x\" [formGroup]=\"form2\">\n <div class=\"d-flex w-100 align-items-center\" [formGroup]=\"form2\">\n <ng-container *ngFor=\"let item of iS.dateInputChunks;let ci=index\">\n <div [style.width]=\"'auto'||item.width\" class=\" d-flex align-items-center\" *ngIf=\"ci<chunksLength\">\n <span>{{item.seperator}}</span>\n <input noformat class=\"d-i-f\" id=\"{{this.id}}_di_{{item.formControlName}}\" [type]=\"item.type\"\n [formControlName]=\"item.formControlName\" [matTooltipShowDelay]=\"2000\"\n [matTooltip]=\"item.label\" [style.width.ch]=\"item?.length\" [placeholder]=\"item.placeholder\">\n </div>\n </ng-container>\n\n\n </div>\n </div> -->\n <div class=\"col\">\n <input\n class=\"w-100 border-0\"\n [value]=\"form.controls.formattedValue.value\"\n (change)=\"iS.formatUserInput($event, form, showTime, id)\"\n placeholder=\"dd/mm/yyyy{{ showTime ? ' hh:mm:ss:aa' : '' }}\"\n [readOnly]=\"control?.disabled\" />\n <!-- <input class=\"w-100 border-0\" [value]=\"form.controls.formattedValue.value\" (change)=\"formatUserInput()\"\n [readOnly]=\"control?.disabled\" [mat-menu-trigger-for]=\"control?.disabled||readonly?null:picker\"> -->\n </div>\n @if (!control?.disabled && !readonly) {\n <div class=\"col-auto\">\n <mat-datepicker-toggle\n matIconSuffix\n [mat-menu-trigger-for]=\"picker\"\n (click)=\"form.controls.date.value ? matCalRef._goToDateInView(form.controls.date.value, 'month') : null\"></mat-datepicker-toggle>\n </div>\n }\n </div>\n</div>\n\n<mat-menu class=\"full-width\" #picker=\"matMenu\" xPosition=\"after\">\n <div class=\"customdate-picker\" [ngClass]=\"{ 'pe-3': showTime }\" (click)=\"$event.stopPropagation()\">\n <div class=\"row justify-content-center m-0 gy-2\">\n <div class=\"col-lg-auto\">\n <div class=\"calendar-cont\" #calendarCont>\n <mat-calendar\n #matCalRef\n [selected]=\"form.controls.date.value\"\n [maxDate]=\"max\"\n [minDate]=\"min\"\n (selectedChange)=\"form.controls.date.patchValue($event)\"></mat-calendar>\n </div>\n </div>\n @if (showTime) {\n <div class=\"col-lg-auto\">\n <div class=\"time-cont text-center\">\n <div class=\"d-flex align-items-center\">\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'HR' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form.controls.hours\">\n @for (item of iS.timeHours; track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'MIN' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form.controls.minutes\">\n @for (item of iS.timeMinutes; track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'S' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form.controls.seconds\">\n @for (item of iS.timeSeconds; track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\">\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form.controls.meridiem\">\n @for (item of iS.timeMeridiem; track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item.incrementor\">\n {{ item.label | uppercase }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</mat-menu>\n", styles: ["input:focus-visible{outline:none}input{background-color:transparent!important}.d-i-f{border:none;width:auto;min-width:0;padding:0;text-align:center}:host{--phFC: #484848 !important}:host ::placeholder{text-transform:none;color:var(--phFC)}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i4.MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection", "_userDragDrop"], exportAs: ["matCalendar"] }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }, { kind: "ngmodule", type: MatRippleModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i6.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i6.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }] }); }
|
|
158
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.0", type: DateInputComponent, isStandalone: true, selector: "date-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, inpCl: { classPropertyName: "inpCl", publicName: "inpCl", isSignal: true, isRequired: false, transformFunction: null }, cls: { classPropertyName: "cls", publicName: "cls", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, valid: { classPropertyName: "valid", publicName: "valid", isSignal: false, isRequired: false, transformFunction: null }, _max: { classPropertyName: "_max", publicName: "max", isSignal: false, isRequired: false, transformFunction: null }, _min: { classPropertyName: "_min", publicName: "min", isSignal: false, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, _type: { classPropertyName: "_type", publicName: "type", isSignal: false, isRequired: false, transformFunction: null }, showValidation: { classPropertyName: "showValidation", publicName: "showValidation", isSignal: false, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { valueChanged: "valueChanged" }, viewQueries: [{ propertyName: "matCalendar", first: true, predicate: MatCalendar, descendants: true }], ngImport: i0, template: "<div class=\"customdate {{ cls() }} {{ inputClass() }}\" [ngClass]=\"{ disabled: readonly() || disabled() }\">\n <div class=\"row g-1 w-100\">\n <!-- <div class=\"col overflow-auto hide-scroll-x\" [formGroup]=\"form2\">\n <div class=\"d-flex w-100 align-items-center\" [formGroup]=\"form2\">\n <ng-container *ngFor=\"let item of iS.dateInputChunks;let ci=index\">\n <div [style.width]=\"'auto'||item.width\" class=\" d-flex align-items-center\" *ngIf=\"ci<chunksLength\">\n <span>{{item.seperator}}</span>\n <input noformat class=\"d-i-f\" id=\"{{this.id}}_di_{{item.formControlName}}\" [type]=\"item.type\"\n [formControlName]=\"item.formControlName\" [matTooltipShowDelay]=\"2000\"\n [matTooltip]=\"item.label\" [style.width.ch]=\"item?.length\" [placeholder]=\"item.placeholder\">\n </div>\n </ng-container>\n\n\n </div>\n </div> -->\n <div class=\"col\">\n <input\n class=\"w-100 border-0\"\n [value]=\"formValue()?.formattedValue\"\n (change)=\"iS.formatUserInput($event, form(), showTime(), id())\"\n placeholder=\"dd/mm/yyyy{{ showTime() ? ' hh:mm:ss:aa' : '' }}\"\n [readOnly]=\"disabled()\" />\n <!-- <input class=\"w-100 border-0\" [value]=\"form.controls.formattedValue.value\" (change)=\"formatUserInput()\"\n [readOnly]=\"control?.disabled\" [mat-menu-trigger-for]=\"control?.disabled||readonly?null:picker\"> -->\n </div>\n @if (!disabled() && !readonly()) {\n <div class=\"col-auto\">\n <mat-datepicker-toggle\n matIconSuffix\n [mat-menu-trigger-for]=\"picker\"\n (click)=\"formValue().date ? matCalRef._goToDateInView(formValue().date, 'month') : null\"></mat-datepicker-toggle>\n </div>\n }\n </div>\n</div>\n\n<mat-menu class=\"full-width\" #picker=\"matMenu\" xPosition=\"after\">\n <div class=\"customdate-picker\" [ngClass]=\"{ 'pe-3': showTime() }\" (click)=\"$event.stopPropagation()\">\n <div class=\"row justify-content-center m-0 gy-2\">\n <div class=\"col-lg-auto\">\n <div class=\"calendar-cont\" #calendarCont>\n <mat-calendar\n #matCalRef\n [selected]=\"formValue().date\"\n [maxDate]=\"max()\"\n [minDate]=\"min()\"\n (selectedChange)=\"form().controls.date.patchValue($event)\"></mat-calendar>\n </div>\n </div>\n @if (showTime()) {\n <div class=\"col-lg-auto\">\n <div class=\"time-cont text-center\">\n <div class=\"d-flex align-items-center\">\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'HR' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.hours\">\n @for (item of iS.timeHours(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'MIN' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.minutes\">\n @for (item of iS.timeMinutes(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'S' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.seconds\">\n @for (item of iS.timeSeconds(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\">\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.meridiem\">\n @for (item of iS.timeMeridiem(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item.incrementor\">\n {{ item.label | uppercase }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</mat-menu>\n", styles: ["input:focus-visible{outline:none}input{background-color:transparent!important}.d-i-f{border:none;width:auto;min-width:0;padding:0;text-align:center}:host{--phFC: #484848 !important}:host ::placeholder{text-transform:none;color:var(--phFC)}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i4.MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection", "_userDragDrop"], exportAs: ["matCalendar"] }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: TranslatePipe, name: "appTranslate" }, { kind: "ngmodule", type: MatRippleModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i6.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i6.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }] }); }
|
|
152
159
|
}
|
|
153
160
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: DateInputComponent, decorators: [{
|
|
154
161
|
type: Component,
|
|
@@ -175,15 +182,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
|
175
182
|
NgSwitchDefault,
|
|
176
183
|
ReactiveFormsModule,
|
|
177
184
|
MatMenuModule,
|
|
178
|
-
], template: "<div class=\"customdate {{ cls }} {{ inputClass() }}\" [ngClass]=\"{ disabled: readonly() || disabled() }\">\n <div class=\"row g-1 w-100\">\n <!-- <div class=\"col overflow-auto hide-scroll-x\" [formGroup]=\"form2\">\n <div class=\"d-flex w-100 align-items-center\" [formGroup]=\"form2\">\n <ng-container *ngFor=\"let item of iS.dateInputChunks;let ci=index\">\n <div [style.width]=\"'auto'||item.width\" class=\" d-flex align-items-center\" *ngIf=\"ci<chunksLength\">\n <span>{{item.seperator}}</span>\n <input noformat class=\"d-i-f\" id=\"{{this.id}}_di_{{item.formControlName}}\" [type]=\"item.type\"\n [formControlName]=\"item.formControlName\" [matTooltipShowDelay]=\"2000\"\n [matTooltip]=\"item.label\" [style.width.ch]=\"item?.length\" [placeholder]=\"item.placeholder\">\n </div>\n </ng-container>\n\n\n </div>\n </div> -->\n <div class=\"col\">\n <input\n class=\"w-100 border-0\"\n [value]=\"
|
|
185
|
+
], template: "<div class=\"customdate {{ cls() }} {{ inputClass() }}\" [ngClass]=\"{ disabled: readonly() || disabled() }\">\n <div class=\"row g-1 w-100\">\n <!-- <div class=\"col overflow-auto hide-scroll-x\" [formGroup]=\"form2\">\n <div class=\"d-flex w-100 align-items-center\" [formGroup]=\"form2\">\n <ng-container *ngFor=\"let item of iS.dateInputChunks;let ci=index\">\n <div [style.width]=\"'auto'||item.width\" class=\" d-flex align-items-center\" *ngIf=\"ci<chunksLength\">\n <span>{{item.seperator}}</span>\n <input noformat class=\"d-i-f\" id=\"{{this.id}}_di_{{item.formControlName}}\" [type]=\"item.type\"\n [formControlName]=\"item.formControlName\" [matTooltipShowDelay]=\"2000\"\n [matTooltip]=\"item.label\" [style.width.ch]=\"item?.length\" [placeholder]=\"item.placeholder\">\n </div>\n </ng-container>\n\n\n </div>\n </div> -->\n <div class=\"col\">\n <input\n class=\"w-100 border-0\"\n [value]=\"formValue()?.formattedValue\"\n (change)=\"iS.formatUserInput($event, form(), showTime(), id())\"\n placeholder=\"dd/mm/yyyy{{ showTime() ? ' hh:mm:ss:aa' : '' }}\"\n [readOnly]=\"disabled()\" />\n <!-- <input class=\"w-100 border-0\" [value]=\"form.controls.formattedValue.value\" (change)=\"formatUserInput()\"\n [readOnly]=\"control?.disabled\" [mat-menu-trigger-for]=\"control?.disabled||readonly?null:picker\"> -->\n </div>\n @if (!disabled() && !readonly()) {\n <div class=\"col-auto\">\n <mat-datepicker-toggle\n matIconSuffix\n [mat-menu-trigger-for]=\"picker\"\n (click)=\"formValue().date ? matCalRef._goToDateInView(formValue().date, 'month') : null\"></mat-datepicker-toggle>\n </div>\n }\n </div>\n</div>\n\n<mat-menu class=\"full-width\" #picker=\"matMenu\" xPosition=\"after\">\n <div class=\"customdate-picker\" [ngClass]=\"{ 'pe-3': showTime() }\" (click)=\"$event.stopPropagation()\">\n <div class=\"row justify-content-center m-0 gy-2\">\n <div class=\"col-lg-auto\">\n <div class=\"calendar-cont\" #calendarCont>\n <mat-calendar\n #matCalRef\n [selected]=\"formValue().date\"\n [maxDate]=\"max()\"\n [minDate]=\"min()\"\n (selectedChange)=\"form().controls.date.patchValue($event)\"></mat-calendar>\n </div>\n </div>\n @if (showTime()) {\n <div class=\"col-lg-auto\">\n <div class=\"time-cont text-center\">\n <div class=\"d-flex align-items-center\">\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'HR' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.hours\">\n @for (item of iS.timeHours(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'MIN' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.minutes\">\n @for (item of iS.timeMinutes(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\" [style.height.px]=\"calendarCont.offsetHeight\">\n <div class=\"sticky-top bg-white rounded-10 text-primary\">\n {{ 'S' | appTranslate | async }}\n </div>\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.seconds\">\n @for (item of iS.timeSeconds(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item\">\n {{ item }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <div class=\"border rounded-10 overflow-hidden mx-1\">\n <div class=\"time-options-cont hide-scroll\">\n <mat-button-toggle-group class=\"hide-scroll\" [formControl]=\"form().controls.meridiem\">\n @for (item of iS.timeMeridiem(); track item) {\n <mat-button-toggle mat-icon-button class=\"rounded-10\" [value]=\"item.incrementor\">\n {{ item.label | uppercase }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</mat-menu>\n", styles: ["input:focus-visible{outline:none}input{background-color:transparent!important}.d-i-f{border:none;width:auto;min-width:0;padding:0;text-align:center}:host{--phFC: #484848 !important}:host ::placeholder{text-transform:none;color:var(--phFC)}\n"] }]
|
|
179
186
|
}], ctorParameters: () => [{ type: i1.InputService }, { type: i2.DatePipe }], propDecorators: { valueChanged: [{
|
|
180
187
|
type: Output
|
|
181
188
|
}], value: [{
|
|
182
189
|
type: Input
|
|
183
|
-
}], inpCl: [{
|
|
184
|
-
type: Input
|
|
185
|
-
}], cls: [{
|
|
186
|
-
type: Input
|
|
187
190
|
}], valid: [{
|
|
188
191
|
type: Input
|
|
189
192
|
}], _max: [{
|
|
@@ -192,9 +195,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
|
192
195
|
}], _min: [{
|
|
193
196
|
type: Input,
|
|
194
197
|
args: ['min']
|
|
195
|
-
}], id: [{
|
|
196
|
-
type: Input,
|
|
197
|
-
args: [{ required: true }]
|
|
198
198
|
}], invalid: [{
|
|
199
199
|
type: Input
|
|
200
200
|
}], _type: [{
|
|
@@ -208,4 +208,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
|
208
208
|
type: ViewChild,
|
|
209
209
|
args: [MatCalendar]
|
|
210
210
|
}] } });
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9pbnB1dC9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BJLE9BQU8sRUFBbUIsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixD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Q2Q7d0dBZ0JTLFlBQVk7c0JBQXJCLE1BQU07Z0JBS00sS0FBSztzQkFBakIsS0FBSztnQkE0QkcsS0FBSztzQkFBYixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBR0YsSUFBSTtzQkFEUCxLQUFLO3VCQUFDLEtBQUs7Z0JBTVIsSUFBSTtzQkFEUCxLQUFLO3VCQUFDLEtBQUs7Z0JBSWUsRUFBRTtzQkFBNUIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLE9BQU87c0JBQWYsS0FBSztnQkFJYSxLQUFLO3NCQUF2QixLQUFLO3VCQUFDLE1BQU07Z0JBS0osY0FBYztzQkFBdEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ2tCLFdBQVc7c0JBQWxDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgRGF0ZVBpcGUsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1N3aXRjaERlZmF1bHQsIFVwcGVyQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdE5hdGl2ZURhdGVNb2R1bGUsIE1hdFJpcHBsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0Q2FsZW5kYXIsIE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBJbnB1dENsYXNzUGlwZSB9IGZyb20gJy4uL2lucHV0cy1waXBlcy5waXBlJztcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IElucHV0U2VydmljZSB9IGZyb20gJy4uL2lucHV0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaWx0ZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy90cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvaW5kZXgubW9kZWwnO1xuaW1wb3J0IHsgQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29uZmlncy9pbmRleC5jb25maWcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRlLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBVcHBlckNhc2VQaXBlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIElucHV0Q2xhc3NQaXBlLFxuICAgIERhdGVQaXBlLFxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0TmF0aXZlRGF0ZU1vZHVsZSxcbiAgICBOZ0NsYXNzLFxuICAgIE5nRm9yLFxuICAgIE5nSWYsXG4gICAgTmdTd2l0Y2gsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBOZ1N3aXRjaENhc2UsXG4gICAgTWF0UmlwcGxlTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRCdXR0b25Ub2dnbGVNb2R1bGUsXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERhdGVJbnB1dENvbXBvbmVudCB7XG4gIHR5cGU6IHN0cmluZztcbiAgY2h1bmtzTGVuZ3RoOiBudW1iZXI7XG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBkYXRlOiBuZXcgRm9ybUNvbnRyb2w8RGF0ZT4obnVsbCksXG4gICAgaG91cnM6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KG51bGwpLFxuICAgIG1pbnV0ZXM6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KG51bGwpLFxuICAgIHNlY29uZHM6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KG51bGwpLFxuICAgIG1lcmlkaWVtOiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyPihudWxsKSxcbiAgICBmb3JtYXR0ZWRWYWx1ZTogbmV3IEZvcm1Db250cm9sPHN0cmluZz4obnVsbCksXG4gICAgcmF3VmFsdWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KG51bGwpLFxuICB9KTtcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0YXJnZXQ6IHsgY2hlY2tlZD86IGJvb2xlYW47IHZhbHVlOiBhbnkgfSB9PigpO1xuICBzaG93VGltZTogYm9vbGVhbjtcbiAgc2tpcFBhdGNoRnJvbUNvbnRyb2w6IGJvb2xlYW47XG4gIHNraXBQYXRjaENvbnRyb2w6IGJvb2xlYW47XG4gIGNvbnRyb2xWYWx1ZTogYW55O1xuICBASW5wdXQoKSBzZXQgdmFsdWUodjogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuZGVidWcoKSkgZGVidWdnZXI7XG4gICAgaWYgKHRoaXMuc2tpcFBhdGNoRnJvbUNvbnRyb2wgJiYgdiA9PSB0aGlzLmNvbnRyb2xWYWx1ZSkge1xuICAgICAgdGhpcy5za2lwUGF0Y2hGcm9tQ29udHJvbCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodikge1xuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICB0aGlzLnNraXBQYXRjaENvbnRyb2wgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmRhdGUucGF0Y2hWYWx1ZShuZXcgRGF0ZSh2KSwgeyBlbWl0RXZlbnQ6ICF0aGlzLnNob3dUaW1lIH0pO1xuICAgICAgaWYgKCF0aGlzLnNob3dUaW1lKSByZXR1cm47XG4gICAgICBjb25zdCB0aW1lQ29tcCA9IHYuc3BsaXQoJ1QnKT8uWzFdO1xuICAgICAgLy8gaWYgKCF0aW1lQ29tcCkgcmV0dXJuO1xuXG4gICAgICBpZiAodGhpcy5kZWJ1ZygpKSBkZWJ1Z2dlcjtcbiAgICAgIGNvbnN0IFtob3VycywgbWludXRlcywgc2Vjb25kc10gPSB0aW1lQ29tcCA/IHRpbWVDb21wLnNwbGl0KCc6JykgOiBbJzEyJywgJzAwJywgJzAwJ107XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIGhvdXJzOiAoJzAnICsgKCtob3VycyAlIDEyKSkuc2xpY2UoLTIpLFxuICAgICAgICBtaW51dGVzLFxuICAgICAgICBzZWNvbmRzOiBzZWNvbmRzPy5zbGljZSgwLCAyKSxcbiAgICAgICAgbWVyaWRpZW06ICtob3VycyA+IDEyID8gMTIgOiAwLFxuICAgICAgfSk7XG4gICAgICAvLyB0aGlzLm1hdENhbGVuZGFyPy51cGRhdGVUb2RheXNEYXRlKCk7XG4gICAgICAvLyB0aGlzLm1hdENhbGVuZGFyPy5fZ29Ub0RhdGVJblZpZXcodGhpcy5mb3JtLmNvbnRyb2xzLmRhdGUudmFsdWUsJ21vbnRoJylcbiAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybS5jb250cm9scy5mb3JtYXR0ZWRWYWx1ZS52YWx1ZSkge1xuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAvLyB0aGlzLnNraXBQYXRjaENvbnRyb2wgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIGlucENsOiBzdHJpbmcgPSAnY29udHJvbC1iZy1ncmF5JztcbiAgQElucHV0KCkgY2xzOiBzdHJpbmc7XG4gIGlucHV0Q2xhc3MgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIEBJbnB1dCgpIHZhbGlkOiBib29sZWFuO1xuICBtYXg6IERhdGU7XG4gIEBJbnB1dCgnbWF4JylcbiAgc2V0IF9tYXgodjogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgaWYgKHYpIHRoaXMubWF4ID0gbmV3IERhdGUodik7XG4gIH1cbiAgbWluOiBEYXRlO1xuICBASW5wdXQoJ21pbicpXG4gIHNldCBfbWluKHY6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGlmICh2KSB0aGlzLm1pbiA9IG5ldyBEYXRlKHYpO1xuICB9XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGludmFsaWQ6IGJvb2xlYW47XG4gIGRpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgZGVidWcgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIEBJbnB1dCgndHlwZScpIHNldCBfdHlwZSh2OiBJbnB1dFR5cGUpIHtcbiAgICB0aGlzLnNob3dUaW1lID0gdiA9PSAnZGF0ZXRpbWUtbG9jYWwnO1xuICAgIHRoaXMudHlwZSA9IHY7XG4gICAgdGhpcy5jaHVua3NMZW5ndGggPSB0aGlzLnNob3dUaW1lID8gdGhpcy5pUy5kYXRlSW5wdXRDaHVua3MubGVuZ3RoIDogdGhpcy5pUy5kYXRlSW5wdXRDaHVua3MuZmluZEluZGV4KCh4KSA9PiB4LmlzVGltZSk7XG4gIH1cbiAgQElucHV0KCkgc2hvd1ZhbGlkYXRpb246IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XG4gIEBWaWV3Q2hpbGQoTWF0Q2FsZW5kYXIpIG1hdENhbGVuZGFyOiBNYXRDYWxlbmRhcjxhbnk+O1xuICBzdWJzOiB7IFt4OiBzdHJpbmddOiBTdWJzY3JpcHRpb24gfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpUzogSW5wdXRTZXJ2aWNlLFxuICAgIHB1YmxpYyBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICkge1xuICAgIHRoaXMuZm9ybWF0dGVyRnVuY3Rpb24oKTtcbiAgfVxuICBmb3JtYXR0ZXJGdW5jdGlvbiA9ICgpID0+IHtcbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoeyBmb3JtYXR0ZWRWYWx1ZSwgLi4uY2hhbmdlIH0pID0+IHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKCkpIGRlYnVnZ2VyO1xuICAgICAgaWYgKCFPYmplY3QudmFsdWVzKGNoYW5nZSkuZmlsdGVyKCh4KSA9PiB4ICE9IG51bGwpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmNvbnRyb2w/LnJlc2V0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkYXRlLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWVyaWRpZW0gfSA9IGNoYW5nZTtcbiAgICAgIGlmICghZGF0ZSkgcmV0dXJuO1xuICAgICAgY29uc3QgW2RheVN0ciwgc2hvcnRNb250aCwgZGF5LCB5ZWFyXSA9IGRhdGUudG9EYXRlU3RyaW5nKCkuc3BsaXQoJyAnKTtcbiAgICAgIGNvbnN0IGRhdGVJU09TdHJpbmcgPSBgJHt5ZWFyfS0ke0NvbmZpZy5Nb250aHNbZGF0ZT8uZ2V0TW9udGgoKV0/Lmlzb1N0cn0tJHtkYXl9YDtcbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgdGhpcy5za2lwUGF0Y2hGcm9tQ29udHJvbCA9IHRydWU7XG4gICAgICBpZiAodGhpcy5za2lwUGF0Y2hDb250cm9sKSB7XG4gICAgICAgIHRoaXMuc2tpcFBhdGNoQ29udHJvbCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXG4gICAgICAgIC8vICAgZGF0ZSxcbiAgICAgICAgLy8gICBob3VycyxcbiAgICAgICAgLy8gICBtaW51dGVzLFxuICAgICAgICAvLyAgIHNlY29uZHMsXG4gICAgICAgIC8vICAgbWVyaWRpZW0sXG4gICAgICAgIC8vICAgdGhpcy5zaG93VGltZSxcbiAgICAgICAgLy8gICBkYXRlSVNPU3RyaW5nICtcbiAgICAgICAgLy8gICAgIGBUJHsoJzAnICsgKCgraG91cnMgJSAxMikgKyBtZXJpZGllbSkpLnNsaWNlKC0yKSB8fCAnMDAnfToke21pbnV0ZXMgfHwgJzAwJ306JHtcbiAgICAgICAgLy8gICAgICAgc2Vjb25kcyB8fCAnMDAnXG4gICAgICAgIC8vICAgICB9YFxuICAgICAgICAvLyApO1xuICAgICAgICBpZiAodGhpcy5zaG93VGltZSlcbiAgICAgICAgICB0aGlzLmNvbnRyb2wucGF0Y2hWYWx1ZShkYXRlSVNPU3RyaW5nICsgYFQkeygnMCcgKyAoKCtob3VycyAlIDEyKSArIG1lcmlkaWVtKSkuc2xpY2UoLTIpIHx8ICcwMCd9OiR7bWludXRlcyB8fCAnMDAnfToke3NlY29uZHMgfHwgJzAwJ31gKTtcbiAgICAgICAgZWxzZSB0aGlzLmNvbnRyb2wucGF0Y2hWYWx1ZShkYXRlSVNPU3RyaW5nKTtcbiAgICAgICAgdGhpcy5jb250cm9sVmFsdWUgPSB0aGlzLmNvbnRyb2wudmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkLmVtaXQoeyB0YXJnZXQ6IHsgdmFsdWU6IHRoaXMuY29udHJvbC52YWx1ZSB9IH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHMuZm9ybWF0dGVkVmFsdWUucGF0Y2hWYWx1ZShcbiAgICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jb250cm9sVmFsdWUgfHwgZGF0ZSwgYE1NTS4gZGQsIHl5eXkke3RoaXMuc2hvd1RpbWUgPyAnLiBoaDptbTpzcyBhJyA6ICcnfWApLFxuICAgICAgICB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH07XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vQ2FsbGVkIG9uY2UsIGJlZm9yZSB0aGUgaW5zdGFuY2UgaXMgZGVzdHJveWVkLlxuICAgIC8vQWRkICdpbXBsZW1lbnRzIE9uRGVzdHJveScgdG8gdGhlIGNsYXNzLlxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuc3VicyB8fCB7fSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnN1YnMsIGtleSkpIHtcbiAgICAgICAgdGhpcy5zdWJzPy5ba2V5XT8udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vQ2FsbGVkIGFmdGVyIG5nQWZ0ZXJDb250ZW50SW5pdCB3aGVuIHRoZSBjb21wb25lbnQncyB2aWV3IGhhcyBiZWVuIGluaXRpYWxpemVkLiBBcHBsaWVzIHRvIGNvbXBvbmVudHMgb25seS5cbiAgICAvL0FkZCAnaW1wbGVtZW50cyBBZnRlclZpZXdJbml0JyB0byB0aGUgY2xhc3MuXG4gICAgLy8gZGVidWdnZXI7XG4gICAgaWYgKHRoaXMuZm9ybS5jb250cm9scy5kYXRlLnZhbHVlKSB7XG4gICAgICB0aGlzLm1hdENhbGVuZGFyLmFjdGl2ZURhdGUgPSBuZXcgRGF0ZSh0aGlzLmZvcm0uY29udHJvbHMuZGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3VzdG9tZGF0ZSB7eyBjbHMgfX0ge3sgaW5wdXRDbGFzcygpIH19XCIgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogcmVhZG9ubHkoKSB8fCBkaXNhYmxlZCgpIH1cIj5cbiAgPGRpdiBjbGFzcz1cInJvdyBnLTEgdy0xMDBcIj5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wgb3ZlcmZsb3ctYXV0byBoaWRlLXNjcm9sbC14XCIgW2Zvcm1Hcm91cF09XCJmb3JtMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCB3LTEwMCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBbZm9ybUdyb3VwXT1cImZvcm0yXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpUy5kYXRlSW5wdXRDaHVua3M7bGV0IGNpPWluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cIidhdXRvJ3x8aXRlbS53aWR0aFwiIGNsYXNzPVwiICBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgKm5nSWY9XCJjaTxjaHVua3NMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7aXRlbS5zZXBlcmF0b3J9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBub2Zvcm1hdCBjbGFzcz1cImQtaS1mXCIgaWQ9XCJ7e3RoaXMuaWR9fV9kaV97e2l0ZW0uZm9ybUNvbnRyb2xOYW1lfX1cIiBbdHlwZV09XCJpdGVtLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiaXRlbS5mb3JtQ29udHJvbE5hbWVcIiBbbWF0VG9vbHRpcFNob3dEZWxheV09XCIyMDAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJpdGVtLmxhYmVsXCIgW3N0eWxlLndpZHRoLmNoXT1cIml0ZW0/Lmxlbmd0aFwiIFtwbGFjZWhvbGRlcl09XCJpdGVtLnBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwidy0xMDAgYm9yZGVyLTBcIlxuICAgICAgICBbdmFsdWVdPVwiZm9ybS5jb250cm9scy5mb3JtYXR0ZWRWYWx1ZS52YWx1ZVwiXG4gICAgICAgIChjaGFuZ2UpPVwiaVMuZm9ybWF0VXNlcklucHV0KCRldmVudCwgZm9ybSwgc2hvd1RpbWUsIGlkKVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiZGQvbW0veXl5eXt7IHNob3dUaW1lID8gJyBoaDptbTpzczphYScgOiAnJyB9fVwiXG4gICAgICAgIFtyZWFkT25seV09XCJjb250cm9sPy5kaXNhYmxlZFwiIC8+XG4gICAgICA8IS0tIDxpbnB1dCBjbGFzcz1cInctMTAwIGJvcmRlci0wXCIgW3ZhbHVlXT1cImZvcm0uY29udHJvbHMuZm9ybWF0dGVkVmFsdWUudmFsdWVcIiAoY2hhbmdlKT1cImZvcm1hdFVzZXJJbnB1dCgpXCJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiY29udHJvbD8uZGlzYWJsZWRcIiBbbWF0LW1lbnUtdHJpZ2dlci1mb3JdPVwiY29udHJvbD8uZGlzYWJsZWR8fHJlYWRvbmx5P251bGw6cGlja2VyXCI+IC0tPlxuICAgIDwvZGl2PlxuICAgIEBpZiAoIWNvbnRyb2w/LmRpc2FibGVkICYmICFyZWFkb25seSkge1xuICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGVcbiAgICAgICAgICBtYXRJY29uU3VmZml4XG4gICAgICAgICAgW21hdC1tZW51LXRyaWdnZXItZm9yXT1cInBpY2tlclwiXG4gICAgICAgICAgKGNsaWNrKT1cImZvcm0uY29udHJvbHMuZGF0ZS52YWx1ZSA/IG1hdENhbFJlZi5fZ29Ub0RhdGVJblZpZXcoZm9ybS5jb250cm9scy5kYXRlLnZhbHVlLCAnbW9udGgnKSA6IG51bGxcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG1hdC1tZW51IGNsYXNzPVwiZnVsbC13aWR0aFwiICNwaWNrZXI9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYWZ0ZXJcIj5cbiAgPGRpdiBjbGFzcz1cImN1c3RvbWRhdGUtcGlja2VyXCIgW25nQ2xhc3NdPVwieyAncGUtMyc6IHNob3dUaW1lIH1cIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG0tMCBneS0yXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLWF1dG9cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWNvbnRcIiAjY2FsZW5kYXJDb250PlxuICAgICAgICAgIDxtYXQtY2FsZW5kYXJcbiAgICAgICAgICAgICNtYXRDYWxSZWZcbiAgICAgICAgICAgIFtzZWxlY3RlZF09XCJmb3JtLmNvbnRyb2xzLmRhdGUudmFsdWVcIlxuICAgICAgICAgICAgW21heERhdGVdPVwibWF4XCJcbiAgICAgICAgICAgIFttaW5EYXRlXT1cIm1pblwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwiZm9ybS5jb250cm9scy5kYXRlLnBhdGNoVmFsdWUoJGV2ZW50KVwiPjwvbWF0LWNhbGVuZGFyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmIChzaG93VGltZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLWF1dG9cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1jb250IHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQtMTAgb3ZlcmZsb3ctaGlkZGVuIG14LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1vcHRpb25zLWNvbnQgaGlkZS1zY3JvbGxcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImNhbGVuZGFyQ29udC5vZmZzZXRIZWlnaHRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGlja3ktdG9wIGJnLXdoaXRlIHJvdW5kZWQtMTAgdGV4dC1wcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdIUicgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgY2xhc3M9XCJoaWRlLXNjcm9sbFwiIFtmb3JtQ29udHJvbF09XCJmb3JtLmNvbnRyb2xzLmhvdXJzXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaVMudGltZUhvdXJzOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cInJvdW5kZWQtMTBcIiBbdmFsdWVdPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQtMTAgb3ZlcmZsb3ctaGlkZGVuIG14LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1vcHRpb25zLWNvbnQgaGlkZS1zY3JvbGxcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImNhbGVuZGFyQ29udC5vZmZzZXRIZWlnaHRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGlja3ktdG9wIGJnLXdoaXRlIHJvdW5kZWQtMTAgdGV4dC1wcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdNSU4nIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIGNsYXNzPVwiaGlkZS1zY3JvbGxcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybS5jb250cm9scy5taW51dGVzXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaVMudGltZU1pbnV0ZXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwicm91bmRlZC0xMFwiIFt2YWx1ZV09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZC0xMCBvdmVyZmxvdy1oaWRkZW4gbXgtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLW9wdGlvbnMtY29udCBoaWRlLXNjcm9sbFwiIFtzdHlsZS5oZWlnaHQucHhdPVwiY2FsZW5kYXJDb250Lm9mZnNldEhlaWdodFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreS10b3AgYmctd2hpdGUgcm91bmRlZC0xMCB0ZXh0LXByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ1MnIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIGNsYXNzPVwiaGlkZS1zY3JvbGxcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybS5jb250cm9scy5zZWNvbmRzXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaVMudGltZVNlY29uZHM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwicm91bmRlZC0xMFwiIFt2YWx1ZV09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZC0xMCBvdmVyZmxvdy1oaWRkZW4gbXgtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLW9wdGlvbnMtY29udCBoaWRlLXNjcm9sbFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIGNsYXNzPVwiaGlkZS1zY3JvbGxcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybS5jb250cm9scy5tZXJpZGllbVwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGlTLnRpbWVNZXJpZGllbTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJyb3VuZGVkLTEwXCIgW3ZhbHVlXT1cIml0ZW0uaW5jcmVtZW50b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfCB1cHBlcmNhc2UgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L21hdC1tZW51PlxuIl19
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9pbnB1dC9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwSSxPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFB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LG9EQUViLGVBQWUsOEJBQ2YsZUFBZSw4QkFDZixxQkFBcUIsc2hCQUVyQixtQkFBbUIsaU5BQ25CLGFBQWE7OzJGQUtKLGtCQUFrQjtrQkE5QjlCLFNBQVM7K0JBQ0UsWUFBWSxjQUNWLElBQUksV0FDUDt3QkFDUCxTQUFTO3dCQUNULGFBQWE7d0JBQ2IsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLFFBQVE7d0JBQ1IsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLE9BQU87d0JBQ1AsS0FBSzt3QkFDTCxJQUFJO3dCQUNKLFFBQVE7d0JBQ1IsYUFBYTt3QkFDYixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixxQkFBcUI7d0JBQ3JCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixhQUFhO3FCQUNkO3dHQW1CUyxZQUFZO3NCQUFyQixNQUFNO2dCQUtNLEtBQUs7c0JBQWpCLEtBQUs7Z0JBK0JHLEtBQUs7c0JBQWIsS0FBSztnQkFHRixJQUFJO3NCQURQLEtBQUs7dUJBQUMsS0FBSztnQkFNUixJQUFJO3NCQURQLEtBQUs7dUJBQUMsS0FBSztnQkFLSCxPQUFPO3NCQUFmLEtBQUs7Z0JBSWEsS0FBSztzQkFBdkIsS0FBSzt1QkFBQyxNQUFNO2dCQUtKLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNrQixXQUFXO3NCQUFsQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBpbmplY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgRGF0ZVBpcGUsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1N3aXRjaERlZmF1bHQsIFVwcGVyQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdE5hdGl2ZURhdGVNb2R1bGUsIE1hdFJpcHBsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0Q2FsZW5kYXIsIE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBJbnB1dENsYXNzUGlwZSB9IGZyb20gJy4uL2lucHV0cy1waXBlcy5waXBlJztcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IElucHV0U2VydmljZSB9IGZyb20gJy4uL2lucHV0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaWx0ZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy90cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvaW5kZXgubW9kZWwnO1xuaW1wb3J0IHsgQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29uZmlncy9pbmRleC5jb25maWcnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdGUtaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICAgIFVwcGVyQ2FzZVBpcGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgSW5wdXRDbGFzc1BpcGUsXG4gICAgRGF0ZVBpcGUsXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXROYXRpdmVEYXRlTW9kdWxlLFxuICAgIE5nQ2xhc3MsXG4gICAgTmdGb3IsXG4gICAgTmdJZixcbiAgICBOZ1N3aXRjaCxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICAgIE5nU3dpdGNoQ2FzZSxcbiAgICBNYXRSaXBwbGVNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSxcbiAgICBOZ1N3aXRjaERlZmF1bHQsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRNZW51TW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGUtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZUlucHV0Q29tcG9uZW50IHtcbiAgdHlwZTogc3RyaW5nO1xuICBjaHVua3NMZW5ndGg6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGZvcm0gPSBzaWduYWwoXG4gICAgbmV3IEZvcm1Hcm91cCh7XG4gICAgICBkYXRlOiBuZXcgRm9ybUNvbnRyb2w8RGF0ZT4obnVsbCksXG4gICAgICBob3VyczogbmV3IEZvcm1Db250cm9sPHN0cmluZz4obnVsbCksXG4gICAgICBtaW51dGVzOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihudWxsKSxcbiAgICAgIHNlY29uZHM6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KG51bGwpLFxuICAgICAgbWVyaWRpZW06IG5ldyBGb3JtQ29udHJvbDxudW1iZXI+KG51bGwpLFxuICAgICAgZm9ybWF0dGVkVmFsdWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KG51bGwpLFxuICAgICAgcmF3VmFsdWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KG51bGwpLFxuICAgIH0pLFxuICApO1xuICBwcm90ZWN0ZWQgZm9ybVZhbHVlID0gdG9TaWduYWwodGhpcy5mb3JtKCkudmFsdWVDaGFuZ2VzKTtcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0YXJnZXQ6IHsgY2hlY2tlZD86IGJvb2xlYW47IHZhbHVlOiBhbnkgfSB9PigpO1xuICBzaG93VGltZSA9IHNpZ25hbDxib29sZWFuPihudWxsKTtcbiAgc2tpcFBhdGNoRnJvbUNvbnRyb2w6IGJvb2xlYW47XG4gIHNraXBQYXRjaENvbnRyb2w6IGJvb2xlYW47XG4gIGNvbnRyb2xWYWx1ZTogYW55O1xuICBASW5wdXQoKSBzZXQgdmFsdWUodjogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuZGVidWcoKSkgZGVidWdnZXI7XG4gICAgaWYgKHRoaXMuc2tpcFBhdGNoRnJvbUNvbnRyb2wgJiYgdiA9PSB0aGlzLmNvbnRyb2xWYWx1ZSkge1xuICAgICAgdGhpcy5za2lwUGF0Y2hGcm9tQ29udHJvbCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodikge1xuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICB0aGlzLnNraXBQYXRjaENvbnRyb2wgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JtKCkuY29udHJvbHMuZGF0ZS5wYXRjaFZhbHVlKG5ldyBEYXRlKHYpLCB7IGVtaXRFdmVudDogIXRoaXMuc2hvd1RpbWUgfSk7XG4gICAgICBpZiAoIXRoaXMuc2hvd1RpbWUpIHJldHVybjtcbiAgICAgIGNvbnN0IHRpbWVDb21wID0gdi5zcGxpdCgnVCcpPy5bMV07XG4gICAgICAvLyBpZiAoIXRpbWVDb21wKSByZXR1cm47XG5cbiAgICAgIGlmICh0aGlzLmRlYnVnKCkpIGRlYnVnZ2VyO1xuICAgICAgY29uc3QgW2hvdXJzLCBtaW51dGVzLCBzZWNvbmRzXSA9IHRpbWVDb21wID8gdGltZUNvbXAuc3BsaXQoJzonKSA6IFsnMTInLCAnMDAnLCAnMDAnXTtcbiAgICAgIHRoaXMuZm9ybSgpLnBhdGNoVmFsdWUoe1xuICAgICAgICBob3VyczogKCcwJyArICgraG91cnMgJSAxMikpLnNsaWNlKC0yKSxcbiAgICAgICAgbWludXRlcyxcbiAgICAgICAgc2Vjb25kczogc2Vjb25kcz8uc2xpY2UoMCwgMiksXG4gICAgICAgIG1lcmlkaWVtOiAraG91cnMgPiAxMiA/IDEyIDogMCxcbiAgICAgIH0pO1xuICAgICAgLy8gdGhpcy5tYXRDYWxlbmRhcj8udXBkYXRlVG9kYXlzRGF0ZSgpO1xuICAgICAgLy8gdGhpcy5tYXRDYWxlbmRhcj8uX2dvVG9EYXRlSW5WaWV3KHRoaXMuZm9ybS5jb250cm9scy5kYXRlLnZhbHVlLCdtb250aCcpXG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm0oKS5jb250cm9scy5mb3JtYXR0ZWRWYWx1ZS52YWx1ZSkge1xuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAvLyB0aGlzLnNraXBQYXRjaENvbnRyb2wgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JtKCkucmVzZXQoKTtcbiAgICB9XG4gIH1cbiAgaW5wQ2wgPSBpbnB1dDxzdHJpbmc+KCdjb250cm9sLWJnLWdyYXknKTtcbiAgY2xzID0gaW5wdXQ8c3RyaW5nPigpO1xuICBpbnB1dENsYXNzID0gaW5wdXQ8c3RyaW5nPigpO1xuICBASW5wdXQoKSB2YWxpZDogYm9vbGVhbjtcbiAgbWF4ID0gc2lnbmFsPERhdGU+KHVuZGVmaW5lZCk7XG4gIEBJbnB1dCgnbWF4JylcbiAgc2V0IF9tYXgodjogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgaWYgKHYpIHRoaXMubWF4LnNldChuZXcgRGF0ZSh2KSk7XG4gIH1cbiAgbWluID0gc2lnbmFsPERhdGU+KHVuZGVmaW5lZCk7XG4gIEBJbnB1dCgnbWluJylcbiAgc2V0IF9taW4odjogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgaWYgKHYpIHRoaXMubWluLnNldChuZXcgRGF0ZSh2KSk7XG4gIH1cbiAgaWQgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIEBJbnB1dCgpIGludmFsaWQ6IGJvb2xlYW47XG4gIGRpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgZGVidWcgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIEBJbnB1dCgndHlwZScpIHNldCBfdHlwZSh2OiBJbnB1dFR5cGUpIHtcbiAgICB0aGlzLnNob3dUaW1lLnNldCh2ID09ICdkYXRldGltZS1sb2NhbCcpO1xuICAgIHRoaXMudHlwZSA9IHY7XG4gICAgdGhpcy5jaHVua3NMZW5ndGggPSB0aGlzLnNob3dUaW1lID8gdGhpcy5pUy5kYXRlSW5wdXRDaHVua3MubGVuZ3RoIDogdGhpcy5pUy5kYXRlSW5wdXRDaHVua3MuZmluZEluZGV4KCh4KSA9PiB4LmlzVGltZSk7XG4gIH1cbiAgQElucHV0KCkgc2hvd1ZhbGlkYXRpb246IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XG4gIEBWaWV3Q2hpbGQoTWF0Q2FsZW5kYXIpIG1hdENhbGVuZGFyOiBNYXRDYWxlbmRhcjxhbnk+O1xuICBzdWJzOiB7IFt4OiBzdHJpbmddOiBTdWJzY3JpcHRpb24gfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpUzogSW5wdXRTZXJ2aWNlLFxuICAgIHB1YmxpYyBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICkge1xuICAgIHRoaXMuZm9ybWF0dGVyRnVuY3Rpb24oKTtcbiAgfVxuICBmb3JtYXR0ZXJGdW5jdGlvbiA9ICgpID0+IHtcbiAgICB0aGlzLmZvcm0oKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh7IGZvcm1hdHRlZFZhbHVlLCAuLi5jaGFuZ2UgfSkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVidWcoKSkgZGVidWdnZXI7XG4gICAgICBpZiAoIU9iamVjdC52YWx1ZXMoY2hhbmdlKS5maWx0ZXIoKHgpID0+IHggIT0gbnVsbCkubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuY29udHJvbD8ucmVzZXQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGRhdGUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtZXJpZGllbSB9ID0gY2hhbmdlO1xuICAgICAgaWYgKCFkYXRlKSByZXR1cm47XG4gICAgICBjb25zdCBbZGF5U3RyLCBzaG9ydE1vbnRoLCBkYXksIHllYXJdID0gZGF0ZS50b0RhdGVTdHJpbmcoKS5zcGxpdCgnICcpO1xuICAgICAgY29uc3QgZGF0ZUlTT1N0cmluZyA9IGAke3llYXJ9LSR7Q29uZmlnLk1vbnRoc1tkYXRlPy5nZXRNb250aCgpXT8uaXNvU3RyfS0ke2RheX1gO1xuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICB0aGlzLnNraXBQYXRjaEZyb21Db250cm9sID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLnNraXBQYXRjaENvbnRyb2wpIHtcbiAgICAgICAgdGhpcy5za2lwUGF0Y2hDb250cm9sID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgLy8gICBkYXRlLFxuICAgICAgICAvLyAgIGhvdXJzLFxuICAgICAgICAvLyAgIG1pbnV0ZXMsXG4gICAgICAgIC8vICAgc2Vjb25kcyxcbiAgICAgICAgLy8gICBtZXJpZGllbSxcbiAgICAgICAgLy8gICB0aGlzLnNob3dUaW1lLFxuICAgICAgICAvLyAgIGRhdGVJU09TdHJpbmcgK1xuICAgICAgICAvLyAgICAgYFQkeygnMCcgKyAoKCtob3VycyAlIDEyKSArIG1lcmlkaWVtKSkuc2xpY2UoLTIpIHx8ICcwMCd9OiR7bWludXRlcyB8fCAnMDAnfToke1xuICAgICAgICAvLyAgICAgICBzZWNvbmRzIHx8ICcwMCdcbiAgICAgICAgLy8gICAgIH1gXG4gICAgICAgIC8vICk7XG4gICAgICAgIGlmICh0aGlzLnNob3dUaW1lKVxuICAgICAgICAgIHRoaXMuY29udHJvbC5wYXRjaFZhbHVlKGRhdGVJU09TdHJpbmcgKyBgVCR7KCcwJyArICgoK2hvdXJzICUgMTIpICsgbWVyaWRpZW0pKS5zbGljZSgtMikgfHwgJzAwJ306JHttaW51dGVzIHx8ICcwMCd9OiR7c2Vjb25kcyB8fCAnMDAnfWApO1xuICAgICAgICBlbHNlIHRoaXMuY29udHJvbC5wYXRjaFZhbHVlKGRhdGVJU09TdHJpbmcpO1xuICAgICAgICB0aGlzLmNvbnRyb2xWYWx1ZSA9IHRoaXMuY29udHJvbC52YWx1ZTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZWQuZW1pdCh7IHRhcmdldDogeyB2YWx1ZTogdGhpcy5jb250cm9sLnZhbHVlIH0gfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9ybSgpLmNvbnRyb2xzLmZvcm1hdHRlZFZhbHVlLnBhdGNoVmFsdWUoXG4gICAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY29udHJvbFZhbHVlIHx8IGRhdGUsIGBNTU0uIGRkLCB5eXl5JHt0aGlzLnNob3dUaW1lID8gJy4gaGg6bW06c3MgYScgOiAnJ31gKSxcbiAgICAgICAge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0pO1xuICB9O1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvL0NhbGxlZCBvbmNlLCBiZWZvcmUgdGhlIGluc3RhbmNlIGlzIGRlc3Ryb3llZC5cbiAgICAvL0FkZCAnaW1wbGVtZW50cyBPbkRlc3Ryb3knIHRvIHRoZSBjbGFzcy5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnN1YnMgfHwge30pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5zdWJzLCBrZXkpKSB7XG4gICAgICAgIHRoaXMuc3Vicz8uW2tleV0/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvL0NhbGxlZCBhZnRlciBuZ0FmdGVyQ29udGVudEluaXQgd2hlbiB0aGUgY29tcG9uZW50J3MgdmlldyBoYXMgYmVlbiBpbml0aWFsaXplZC4gQXBwbGllcyB0byBjb21wb25lbnRzIG9ubHkuXG4gICAgLy9BZGQgJ2ltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCcgdG8gdGhlIGNsYXNzLlxuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmICh0aGlzLmZvcm1WYWx1ZSgpLmRhdGUpIHtcbiAgICAgIHRoaXMubWF0Q2FsZW5kYXIuYWN0aXZlRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZm9ybVZhbHVlKCkuZGF0ZSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3VzdG9tZGF0ZSB7eyBjbHMoKSB9fSB7eyBpbnB1dENsYXNzKCkgfX1cIiBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiByZWFkb25seSgpIHx8IGRpc2FibGVkKCkgfVwiPlxuICA8ZGl2IGNsYXNzPVwicm93IGctMSB3LTEwMFwiPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbCBvdmVyZmxvdy1hdXRvIGhpZGUtc2Nyb2xsLXhcIiBbZm9ybUdyb3VwXT1cImZvcm0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHctMTAwIGFsaWduLWl0ZW1zLWNlbnRlclwiIFtmb3JtR3JvdXBdPVwiZm9ybTJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGlTLmRhdGVJbnB1dENodW5rcztsZXQgY2k9aW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGhdPVwiJ2F1dG8nfHxpdGVtLndpZHRoXCIgY2xhc3M9XCIgIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cImNpPGNodW5rc0xlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tpdGVtLnNlcGVyYXRvcn19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5vZm9ybWF0IGNsYXNzPVwiZC1pLWZcIiBpZD1cInt7dGhpcy5pZH19X2RpX3t7aXRlbS5mb3JtQ29udHJvbE5hbWV9fVwiIFt0eXBlXT1cIml0ZW0udHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJpdGVtLmZvcm1Db250cm9sTmFtZVwiIFttYXRUb29sdGlwU2hvd0RlbGF5XT1cIjIwMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIml0ZW0ubGFiZWxcIiBbc3R5bGUud2lkdGguY2hdPVwiaXRlbT8ubGVuZ3RoXCIgW3BsYWNlaG9sZGVyXT1cIml0ZW0ucGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJ3LTEwMCBib3JkZXItMFwiXG4gICAgICAgIFt2YWx1ZV09XCJmb3JtVmFsdWUoKT8uZm9ybWF0dGVkVmFsdWVcIlxuICAgICAgICAoY2hhbmdlKT1cImlTLmZvcm1hdFVzZXJJbnB1dCgkZXZlbnQsIGZvcm0oKSwgc2hvd1RpbWUoKSwgaWQoKSlcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXl7eyBzaG93VGltZSgpID8gJyBoaDptbTpzczphYScgOiAnJyB9fVwiXG4gICAgICAgIFtyZWFkT25seV09XCJkaXNhYmxlZCgpXCIgLz5cbiAgICAgIDwhLS0gPGlucHV0IGNsYXNzPVwidy0xMDAgYm9yZGVyLTBcIiBbdmFsdWVdPVwiZm9ybS5jb250cm9scy5mb3JtYXR0ZWRWYWx1ZS52YWx1ZVwiIChjaGFuZ2UpPVwiZm9ybWF0VXNlcklucHV0KClcIlxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJjb250cm9sPy5kaXNhYmxlZFwiIFttYXQtbWVudS10cmlnZ2VyLWZvcl09XCJjb250cm9sPy5kaXNhYmxlZHx8cmVhZG9ubHk/bnVsbDpwaWNrZXJcIj4gLS0+XG4gICAgPC9kaXY+XG4gICAgQGlmICghZGlzYWJsZWQoKSAmJiAhcmVhZG9ubHkoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGVcbiAgICAgICAgICBtYXRJY29uU3VmZml4XG4gICAgICAgICAgW21hdC1tZW51LXRyaWdnZXItZm9yXT1cInBpY2tlclwiXG4gICAgICAgICAgKGNsaWNrKT1cImZvcm1WYWx1ZSgpLmRhdGUgPyBtYXRDYWxSZWYuX2dvVG9EYXRlSW5WaWV3KGZvcm1WYWx1ZSgpLmRhdGUsICdtb250aCcpIDogbnVsbFwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bWF0LW1lbnUgY2xhc3M9XCJmdWxsLXdpZHRoXCIgI3BpY2tlcj1cIm1hdE1lbnVcIiB4UG9zaXRpb249XCJhZnRlclwiPlxuICA8ZGl2IGNsYXNzPVwiY3VzdG9tZGF0ZS1waWNrZXJcIiBbbmdDbGFzc109XCJ7ICdwZS0zJzogc2hvd1RpbWUoKSB9XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWNlbnRlciBtLTAgZ3ktMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy1hdXRvXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1jb250XCIgI2NhbGVuZGFyQ29udD5cbiAgICAgICAgICA8bWF0LWNhbGVuZGFyXG4gICAgICAgICAgICAjbWF0Q2FsUmVmXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwiZm9ybVZhbHVlKCkuZGF0ZVwiXG4gICAgICAgICAgICBbbWF4RGF0ZV09XCJtYXgoKVwiXG4gICAgICAgICAgICBbbWluRGF0ZV09XCJtaW4oKVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwiZm9ybSgpLmNvbnRyb2xzLmRhdGUucGF0Y2hWYWx1ZSgkZXZlbnQpXCI+PC9tYXQtY2FsZW5kYXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKHNob3dUaW1lKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy1hdXRvXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtY29udCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkLTEwIG92ZXJmbG93LWhpZGRlbiBteC0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtb3B0aW9ucy1jb250IGhpZGUtc2Nyb2xsXCIgW3N0eWxlLmhlaWdodC5weF09XCJjYWxlbmRhckNvbnQub2Zmc2V0SGVpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXRvcCBiZy13aGl0ZSByb3VuZGVkLTEwIHRleHQtcHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnSFInIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIGNsYXNzPVwiaGlkZS1zY3JvbGxcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybSgpLmNvbnRyb2xzLmhvdXJzXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaVMudGltZUhvdXJzKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwicm91bmRlZC0xMFwiIFt2YWx1ZV09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZC0xMCBvdmVyZmxvdy1oaWRkZW4gbXgtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLW9wdGlvbnMtY29udCBoaWRlLXNjcm9sbFwiIFtzdHlsZS5oZWlnaHQucHhdPVwiY2FsZW5kYXJDb250Lm9mZnNldEhlaWdodFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreS10b3AgYmctd2hpdGUgcm91bmRlZC0xMCB0ZXh0LXByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ01JTicgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgY2xhc3M9XCJoaWRlLXNjcm9sbFwiIFtmb3JtQ29udHJvbF09XCJmb3JtKCkuY29udHJvbHMubWludXRlc1wiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGlTLnRpbWVNaW51dGVzKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwicm91bmRlZC0xMFwiIFt2YWx1ZV09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZC0xMCBvdmVyZmxvdy1oaWRkZW4gbXgtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLW9wdGlvbnMtY29udCBoaWRlLXNjcm9sbFwiIFtzdHlsZS5oZWlnaHQucHhdPVwiY2FsZW5kYXJDb250Lm9mZnNldEhlaWdodFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreS10b3AgYmctd2hpdGUgcm91bmRlZC0xMCB0ZXh0LXByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ1MnIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIGNsYXNzPVwiaGlkZS1zY3JvbGxcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybSgpLmNvbnRyb2xzLnNlY29uZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBpUy50aW1lU2Vjb25kcygpOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cInJvdW5kZWQtMTBcIiBbdmFsdWVdPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQtMTAgb3ZlcmZsb3ctaGlkZGVuIG14LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1vcHRpb25zLWNvbnQgaGlkZS1zY3JvbGxcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCBjbGFzcz1cImhpZGUtc2Nyb2xsXCIgW2Zvcm1Db250cm9sXT1cImZvcm0oKS5jb250cm9scy5tZXJpZGllbVwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGlTLnRpbWVNZXJpZGllbSgpOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cInJvdW5kZWQtMTBcIiBbdmFsdWVdPVwiaXRlbS5pbmNyZW1lbnRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB8IHVwcGVyY2FzZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbWF0LW1lbnU+XG4iXX0=
|