ng-easycommerce 0.0.625 → 0.0.626

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.
@@ -5,15 +5,17 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  import { Component, Input, Output, EventEmitter } from '@angular/core';
8
- import { FormGroup, FormBuilder, Validators } from '@angular/forms';
8
+ import { FormGroup, FormBuilder, Validators, ValidatorFn, AbstractControl, ValidationErrors } from '@angular/forms';
9
9
  import { Router } from "@angular/router";
10
10
  import { ComponentHelper } from '../../../classes/component-helper';
11
11
  import { AnalyticsService } from '../../../services/analytics.service';
12
12
  import { AuthService } from '../../../services/auth.service';
13
13
  import { ToastService } from '../../../utils/toast.service';
14
14
  import { ChannelConfigService } from '../../../services/channel-config.service';
15
+ import { BehaviorSubject } from 'rxjs';
16
+ import { Constants } from '../../../core.consts';
15
17
  let RegisterFormEcComponent = class RegisterFormEcComponent extends ComponentHelper {
16
- constructor(authService, toastr, router, analyticsService, formBuilder, channelConfigService) {
18
+ constructor(authService, toastr, router, analyticsService, formBuilder, channelConfigService, consts) {
17
19
  super();
18
20
  this.authService = authService;
19
21
  this.toastr = toastr;
@@ -21,6 +23,13 @@ let RegisterFormEcComponent = class RegisterFormEcComponent extends ComponentHel
21
23
  this.analyticsService = analyticsService;
22
24
  this.formBuilder = formBuilder;
23
25
  this.channelConfigService = channelConfigService;
26
+ this.consts = consts;
27
+ this.provincesSubject = new BehaviorSubject([]);
28
+ this.countriesSubject = new BehaviorSubject([]);
29
+ this.documentTypesSubject = new BehaviorSubject([]);
30
+ this.provinces$ = this.provincesSubject.asObservable();
31
+ this.countries$ = this.countriesSubject.asObservable();
32
+ this.documentTypes$ = this.documentTypesSubject.asObservable();
24
33
  this.isLogged = true;
25
34
  this.darkMode = false;
26
35
  this.redirect = true;
@@ -62,7 +71,8 @@ let RegisterFormEcComponent = class RegisterFormEcComponent extends ComponentHel
62
71
  return;
63
72
  }
64
73
  if (this.registerForm.valid) {
65
- this.authService.signUp(this.registerForm.value).toPromise().then(res => {
74
+ const normalizedData = this.normalizeRegisterData(this.registerForm.value);
75
+ this.authService.signUp(normalizedData).toPromise().then(res => {
66
76
  this.register_loading = false;
67
77
  let messageKey;
68
78
  switch (true) {
@@ -104,6 +114,18 @@ let RegisterFormEcComponent = class RegisterFormEcComponent extends ComponentHel
104
114
  this.register_loading = false;
105
115
  }
106
116
  };
117
+ this.onCountrySelected = (value) => {
118
+ $('#selectOpPais').attr('disabled', true);
119
+ this.registerForm.controls['countryCode'].setValue(value);
120
+ this.registerForm.controls['provinceCode'].setValue('');
121
+ value != '' && this.provincesSubject.next(this.countriesSubject.value.find(country => country.code == value).provinces);
122
+ };
123
+ this.onGenderSelected = (value) => {
124
+ $('#selectOpSexo').attr('disabled', true);
125
+ };
126
+ this.onProvincesSelected = (value) => {
127
+ $('#selectOpProvincia').attr('disabled', true);
128
+ };
107
129
  this.ecOnConstruct();
108
130
  }
109
131
  ngOnInit() {
@@ -115,7 +137,40 @@ let RegisterFormEcComponent = class RegisterFormEcComponent extends ComponentHel
115
137
  plainPassword2: ['', Validators.required],
116
138
  newsletter: [false],
117
139
  terms: ['', Validators.required],
118
- birthday: [''],
140
+ birthday: [null, [this.optionalMaxLengthValidator(11)]],
141
+ // Dirección (opcional, pero si se envía, se recomienda enviar todos los campos internos)
142
+ countryCode: [''],
143
+ provinceCode: [null],
144
+ street: [null],
145
+ city: [''],
146
+ postcode: [''],
147
+ // Datos empresa (opcionales)
148
+ companyName: [''],
149
+ legalDenomination: [''],
150
+ // Datos personales adicionales (opcionales)
151
+ gender: [null],
152
+ phoneNumber: ['', [Validators.pattern('[0-9]+')]],
153
+ subscribedToNewsletter: [false],
154
+ documentType: [null],
155
+ documentNumber: [''],
156
+ // Comentarios y contacto (opcionales)
157
+ comments: ['', []],
158
+ contactFirstName: ['', []],
159
+ contactLastName: ['', []],
160
+ contactCompanyPosition: ['', []],
161
+ contactEmail: ['', []],
162
+ contactDocumentType: ['', []],
163
+ contactDocumentNumber: ['', []],
164
+ }, {
165
+ validators: [this.direccionCompletaValidator()]
166
+ });
167
+ this.authService.getCountriesData().then(res => {
168
+ this.countriesSubject.next(res);
169
+ let documentTypes = [];
170
+ res.map(paises => {
171
+ this.consts.getLocale().toLocaleLowerCase().includes(paises.code.toLocaleLowerCase()) && (documentTypes = paises.documentTypes || []);
172
+ });
173
+ this.documentTypesSubject.next(documentTypes);
119
174
  });
120
175
  this.channelConfigService.channelConfig$.subscribe((config) => {
121
176
  if (config && config.isAccountVerificationRequired !== undefined) {
@@ -133,8 +188,38 @@ let RegisterFormEcComponent = class RegisterFormEcComponent extends ComponentHel
133
188
  });
134
189
  this.ecOnInit();
135
190
  }
136
- prueba() {
137
- this.toastr.showPersistent('hola');
191
+ direccionCompletaValidator() {
192
+ return (control) => {
193
+ var _a, _b, _c, _d, _e;
194
+ const street = (_a = control.get('street')) === null || _a === void 0 ? void 0 : _a.value;
195
+ const city = (_b = control.get('city')) === null || _b === void 0 ? void 0 : _b.value;
196
+ const provinceCode = (_c = control.get('provinceCode')) === null || _c === void 0 ? void 0 : _c.value;
197
+ const countryCode = (_d = control.get('countryCode')) === null || _d === void 0 ? void 0 : _d.value;
198
+ const postcode = (_e = control.get('postcode')) === null || _e === void 0 ? void 0 : _e.value;
199
+ const hasValue = (val) => val !== null && val !== undefined && val.toString().trim() !== '';
200
+ const anyFieldSet = [street, city, provinceCode, countryCode, postcode].some(hasValue);
201
+ const allFieldsSet = [street, city, provinceCode, countryCode, postcode].every(hasValue);
202
+ // Si al menos un campo de dirección está establecido, todos deben estarlo
203
+ // Si no hay ningún campo de dirección establecido, no se aplica la validación
204
+ if (anyFieldSet && !allFieldsSet) {
205
+ return { direccionIncompleta: true };
206
+ }
207
+ return null;
208
+ };
209
+ }
210
+ optionalMaxLengthValidator(max) {
211
+ return (control) => {
212
+ if (!control.value)
213
+ return null;
214
+ return control.value.length > max ? { maxLength: true } : null;
215
+ };
216
+ }
217
+ normalizeRegisterData(data) {
218
+ const normalizeString = (val) => val === undefined || val === null || val.toString().trim() === '' ? null : val.toString().trim();
219
+ const normalizeBool = (val) => typeof val === 'boolean' ? val : val === 'true' ? true : val === 'false' ? false : null;
220
+ return Object.assign(Object.assign({}, data), { birthday: normalizeString(data.birthday) || '', companyName: normalizeString(data.companyName), legalDenomination: normalizeString(data.legalDenomination), gender: normalizeString(data.gender), phoneNumber: normalizeString(data.phoneNumber), subscribedToNewsletter: normalizeBool(data.subscribedToNewsletter), documentType: normalizeString(data.documentType), documentNumber: normalizeString(data.documentNumber), comments: normalizeString(data.comments), contactFirstName: normalizeString(data.contactFirstName), contactLastName: normalizeString(data.contactLastName), contactCompanyPosition: normalizeString(data.contactCompanyPosition), contactEmail: normalizeString(data.contactEmail), contactDocumentType: normalizeString(data.contactDocumentType), contactDocumentNumber: normalizeString(data.contactDocumentNumber),
221
+ // Dirección
222
+ countryCode: normalizeString(data.countryCode), provinceCode: normalizeString(data.provinceCode), street: normalizeString(data.street), city: normalizeString(data.city), postcode: normalizeString(data.postcode) });
138
223
  }
139
224
  };
140
225
  RegisterFormEcComponent.ctorParameters = () => [
@@ -143,7 +228,8 @@ RegisterFormEcComponent.ctorParameters = () => [
143
228
  { type: Router },
144
229
  { type: AnalyticsService },
145
230
  { type: FormBuilder },
146
- { type: ChannelConfigService }
231
+ { type: ChannelConfigService },
232
+ { type: Constants }
147
233
  ];
148
234
  __decorate([
149
235
  Input()
@@ -165,4 +251,4 @@ RegisterFormEcComponent = __decorate([
165
251
  })
166
252
  ], RegisterFormEcComponent);
167
253
  export { RegisterFormEcComponent };
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2F1dGgtZWMvcmVnaXN0ZXItZm9ybS1lYy9yZWdpc3Rlci1mb3JtLWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQU9oRixJQUFhLHVCQUF1QixHQUFwQyxNQUFhLHVCQUF3QixTQUFRLGVBQWU7SUF1QnhELFlBQ1csV0FBd0IsRUFDckIsTUFBb0IsRUFDdkIsTUFBYyxFQUNkLGdCQUFrQyxFQUMvQixXQUF3QixFQUMxQixvQkFBMEM7UUFFbEQsS0FBSyxFQUFFLENBQUM7UUFQRCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3ZCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQy9CLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQzFCLHlCQUFvQixHQUFwQixv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QUFNO1lBQ0ksZ0JBQWdCO1lBQ2xCLFdBQVc7WUFDSixvQkFBb0I7O0FBM0I3QztJQUFSLEtBQUssRUFBRTt5REFBa0I7QUFDakI7SUFBUixLQUFLLEVBQUU7eURBQWlCO0FBQ2hCO0lBQVIsS0FBSyxFQUFFO3lEQUFpQjtBQUNmO0lBQVQsTUFBTSxFQUFFO3NEQUE0QjtBQUw1Qix1QkFBdUI7SUFMbkMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLHNCQUFzQjtRQUNoQyxzM0ZBQThDOztLQUVqRCxDQUFDO0dBQ1csdUJBQXVCLENBc0luQztTQXRJWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbmFseXRpY3Muc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2hhbm5lbC1jb25maWcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLXJlZ2lzdGVyLWZvcm0tZWMnLFxuICAgIHRlbXBsYXRlVXJsOiAncmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ3JlZ2lzdGVyLWZvcm0tZWMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSZWdpc3RlckZvcm1FY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHVibGljIGlzTG9nZ2VkOiBCb29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBkYXJrTW9kZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHJlZGlyZWN0ID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBjb21wbGV0ZSA9IHRydWU7XG4gICAgQE91dHB1dCgpIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHB1YmxpYyBzdWNjZXNzOiBCb29sZWFuID0gZmFsc2VcbiAgICBwdWJsaWMgY2FtcG9zcGVyc29uYWp1cmlkaWNhOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHJlZ2lzdGVyX2xvYWRpbmc6IGJvb2xlYW47XG4gICAgcHVibGljIHJlZ2lzdGVyRm9ybTogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyByZWdpc3Ryb1VzdWFyaW86IGFueSA9IHtcbiAgICAgICAgZmlyc3ROYW1lOiAnJyxcbiAgICAgICAgbGFzdE5hbWU6ICcnLFxuICAgICAgICBlbWFpbDogJycsXG4gICAgICAgIHBsYWluUGFzc3dvcmQ6ICcnLFxuICAgICAgICBwbGFpblBhc3N3b3JkMjogJycsXG4gICAgICAgIG5ld3NsZXR0ZXI6IGZhbHNlLFxuICAgICAgICB0ZXJtczogZmFsc2UsXG4gICAgICAgIGJpcnRoZGF5OiAnJywgLy8gTnVldm8gY2FtcG8gcGFyYSBlbCBjdW1wbGVhw7Fvc1xuICAgIH07XG4gICAgcHVibGljIGlzQWNjb3VudFZlcmlmaWNhdGlvblJlcXVpcmVkID0gZmFsc2U7XG4gICAgcHVibGljIGlzU2VuZFdlbGNvbWVFbWFpbCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCB0b2FzdHI6IFRvYXN0U2VydmljZSxcbiAgICAgICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwdWJsaWMgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgZmlyc3ROYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgbGFzdE5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBlbWFpbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIHBsYWluUGFzc3dvcmQ6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBwbGFpblBhc3N3b3JkMjogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIG5ld3NsZXR0ZXI6IFtmYWxzZV0sXG4gICAgICAgICAgICB0ZXJtczogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIGJpcnRoZGF5OiBbJyddLCAvLyBDYW1wbyBubyBvYmxpZ2F0b3Jpb1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQWNjb3VudFZlcmlmaWNhdGlvblJlcXVpcmVkID0gY29uZmlnLmlzQWNjb3VudFZlcmlmaWNhdGlvblJlcXVpcmVkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuaXNTZW5kV2VsY29tZUVtYWlsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NlbmRXZWxjb21lRW1haWwgPSBjb25maWcuaXNTZW5kV2VsY29tZUVtYWlsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTZW5kV2VsY29tZUVtYWlsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXG5cbiAgICB9XG5cbiAgICBzZXRQcm9wID0gKHByb3AsIGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMucmVnaXN0cm9Vc3VhcmlvW3Byb3BdID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIH1cbiAgICByZWRpcmVjdEhvbWUgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nKVxuICAgIH1cblxuICAgIHJlZ2lzdGVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJfbG9hZGluZyA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5yZWdpc3RlckZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3coJ2ludmFsaWQtZm9ybScpO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMucmVnaXN0ZXJGb3JtLnZhbHVlLnBsYWluUGFzc3dvcmQgIT0gdGhpcy5yZWdpc3RlckZvcm0udmFsdWUucGxhaW5QYXNzd29yZDIpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3coJ0xhcyBjb250cmFzZcOxYXMgbm8gY29pbmNpZGVuJyk7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyX2xvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlZ2lzdGVyRm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5zaWduVXAodGhpcy5yZWdpc3RlckZvcm0udmFsdWUpLnRvUHJvbWlzZSgpLnRoZW4oXG4gICAgICAgICAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlS2V5OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB0aGlzLmlzQWNjb3VudFZlcmlmaWNhdGlvblJlcXVpcmVkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VLZXkgPSAncmVnaXN0ZXItb2snO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB0aGlzLmlzU2VuZFdlbGNvbWVFbWFpbDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlS2V5ID0gJ3JlZ2lzdGVyLXdlbGNvbWUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlS2V5ID0gJ3JlZ2lzdGVyLXN1Y2Nlc3MnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3dQZXJzaXN0ZW50KG1lc3NhZ2VLZXkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdzaWduX3VwJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3ROYW1lOiB0aGlzLnJlZ2lzdGVyRm9ybS52YWx1ZS5maXJzdE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0TmFtZTogdGhpcy5yZWdpc3RlckZvcm0udmFsdWUubGFzdE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWFpbDogdGhpcy5yZWdpc3RlckZvcm0udmFsdWUuZW1haWxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWR5LmVtaXQodHJ1ZSlcblxuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZUtleSAhPT0gJ3JlZ2lzdGVyLW9rJyAmJiB0aGlzLnJlZGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRm9ybS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlZGlyZWN0ICYmIG1lc3NhZ2VLZXkgPT09ICdyZWdpc3Rlci1vaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJ2hvbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyX2xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3dQZXJzaXN0ZW50KCdFbCBlbWFpbCBpbmdyZXNhZG8geWEgc2UgZW5jdWVudHJhIHJlZ2lzdHJhZG8uJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5zaG93KCdFcnJvciBlbiBlbCByZWdpc3Ryby4gVnVlbHZhIGEgaW50ZW50YXJsbyBtw6FzIHRhcmRlLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuc2hvdygnaW52YWxpZC1mb3JtJyk7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyX2xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcnVlYmEoKXtcbiAgICAgICAgdGhpcy50b2FzdHIuc2hvd1BlcnNpc3RlbnQoJ2hvbGEnKTtcbiAgICB9XG59Il19
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2F1dGgtZWMvcmVnaXN0ZXItZm9ybS1lYy9yZWdpc3Rlci1mb3JtLWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBUWpELElBQWEsdUJBQXVCLEdBQXBDLE1BQWEsdUJBQXdCLFNBQVEsZUFBZTtJQStCeEQsWUFDVyxXQUF3QixFQUNyQixNQUFvQixFQUN2QixNQUFjLEVBQ2QsZ0JBQWtDLEVBQy9CLFdBQXdCLEVBQzFCLG9CQUEwQyxFQUMzQyxNQUFpQjtRQUV4QixLQUFLLEVBQUUsQ0FBQztRQVJELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FB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QUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUN0RCxzQkFBc0IsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQ3BFLFlBQVksRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUNoRCxtQkFBbUIsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQzlELHFCQUFxQixFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUM7WUFDbEUsWUFBWTtZQUNaLFdBQVcsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUM5QyxZQUFZLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDaEQsTUFBTSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQ3BDLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUNoQyxRQUFRLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFDMUM7SUFDTixDQUFDO0NBRUosQ0FBQTs7WUE1TjJCLFdBQVc7WUFDYixZQUFZO1lBQ2YsTUFBTTtZQUNJLGdCQUFnQjtZQUNsQixXQUFXO1lBQ0osb0JBQW9CO1lBQ25DLFNBQVM7O0FBNUJuQjtJQUFSLEtBQUssRUFBRTt5REFBa0I7QUFDakI7SUFBUixLQUFLLEVBQUU7eURBQWlCO0FBQ2hCO0lBQVIsS0FBSyxFQUFFO3lEQUFpQjtBQUNmO0lBQVQsTUFBTSxFQUFFO3NEQUE0QjtBQWI1Qix1QkFBdUI7SUFMbkMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLHNCQUFzQjtRQUNoQyxzM0ZBQThDOztLQUVqRCxDQUFDO0dBQ1csdUJBQXVCLENBNFBuQztTQTVQWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzLCBWYWxpZGF0b3JGbiwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbmFseXRpY3Muc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2hhbm5lbC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uLy4uLy4uL2NvcmUuY29uc3RzJztcbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtcmVnaXN0ZXItZm9ybS1lYycsXG4gICAgdGVtcGxhdGVVcmw6ICdyZWdpc3Rlci1mb3JtLWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsncmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJlZ2lzdGVyRm9ybUVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIHByb3RlY3RlZCBwcm92aW5jZXNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuICAgIHByb3RlY3RlZCBjb3VudHJpZXNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuICAgIHByb3RlY3RlZCBkb2N1bWVudFR5cGVzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcblxuICAgIHB1YmxpYyBwcm92aW5jZXMkID0gdGhpcy5wcm92aW5jZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBjb3VudHJpZXMkID0gdGhpcy5jb3VudHJpZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBkb2N1bWVudFR5cGVzJCA9IHRoaXMuZG9jdW1lbnRUeXBlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGlzTG9nZ2VkOiBCb29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBkYXJrTW9kZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHJlZGlyZWN0ID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBjb21wbGV0ZSA9IHRydWU7XG4gICAgQE91dHB1dCgpIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHB1YmxpYyBzdWNjZXNzOiBCb29sZWFuID0gZmFsc2VcbiAgICBwdWJsaWMgY2FtcG9zcGVyc29uYWp1cmlkaWNhOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHJlZ2lzdGVyX2xvYWRpbmc6IGJvb2xlYW47XG4gICAgcHVibGljIHJlZ2lzdGVyRm9ybTogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyByZWdpc3Ryb1VzdWFyaW86IGFueSA9IHtcbiAgICAgICAgZmlyc3ROYW1lOiAnJyxcbiAgICAgICAgbGFzdE5hbWU6ICcnLFxuICAgICAgICBlbWFpbDogJycsXG4gICAgICAgIHBsYWluUGFzc3dvcmQ6ICcnLFxuICAgICAgICBwbGFpblBhc3N3b3JkMjogJycsXG4gICAgICAgIG5ld3NsZXR0ZXI6IGZhbHNlLFxuICAgICAgICB0ZXJtczogZmFsc2UsXG4gICAgICAgIGJpcnRoZGF5OiAnJywgLy8gTnVldm8gY2FtcG8gcGFyYSBlbCBjdW1wbGVhw7Fvc1xuICAgIH07XG4gICAgcHVibGljIGlzQWNjb3VudFZlcmlmaWNhdGlvblJlcXVpcmVkID0gZmFsc2U7XG4gICAgcHVibGljIGlzU2VuZFdlbGNvbWVFbWFpbCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCB0b2FzdHI6IFRvYXN0U2VydmljZSxcbiAgICAgICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwdWJsaWMgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBjb25zdHM6IENvbnN0YW50c1xuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVjT25Db25zdHJ1Y3QoKVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBmaXJzdE5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBsYXN0TmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIGVtYWlsOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgcGxhaW5QYXNzd29yZDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIHBsYWluUGFzc3dvcmQyOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgbmV3c2xldHRlcjogW2ZhbHNlXSxcbiAgICAgICAgICAgIHRlcm1zOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgYmlydGhkYXk6IFtudWxsLCBbdGhpcy5vcHRpb25hbE1heExlbmd0aFZhbGlkYXRvcigxMSldXSxcbiAgICAgICAgICAgIC8vIERpcmVjY2nDs24gKG9wY2lvbmFsLCBwZXJvIHNpIHNlIGVudsOtYSwgc2UgcmVjb21pZW5kYSBlbnZpYXIgdG9kb3MgbG9zIGNhbXBvcyBpbnRlcm5vcylcbiAgICAgICAgICAgIGNvdW50cnlDb2RlOiBbJyddLFxuICAgICAgICAgICAgcHJvdmluY2VDb2RlOiBbbnVsbF0sXG4gICAgICAgICAgICBzdHJlZXQ6IFtudWxsXSxcbiAgICAgICAgICAgIGNpdHk6IFsnJ10sXG4gICAgICAgICAgICBwb3N0Y29kZTogWycnXSxcbiAgICAgICAgICAgIC8vIERhdG9zIGVtcHJlc2EgKG9wY2lvbmFsZXMpXG4gICAgICAgICAgICBjb21wYW55TmFtZTogWycnXSxcbiAgICAgICAgICAgIGxlZ2FsRGVub21pbmF0aW9uOiBbJyddLFxuICAgICAgICAgICAgLy8gRGF0b3MgcGVyc29uYWxlcyBhZGljaW9uYWxlcyAob3BjaW9uYWxlcylcbiAgICAgICAgICAgIGdlbmRlcjogW251bGxdLFxuICAgICAgICAgICAgcGhvbmVOdW1iZXI6IFsnJywgW1ZhbGlkYXRvcnMucGF0dGVybignWzAtOV0rJyldXSxcbiAgICAgICAgICAgIHN1YnNjcmliZWRUb05ld3NsZXR0ZXI6IFtmYWxzZV0sXG4gICAgICAgICAgICBkb2N1bWVudFR5cGU6IFtudWxsXSxcbiAgICAgICAgICAgIGRvY3VtZW50TnVtYmVyOiBbJyddLFxuICAgICAgICAgICAgLy8gQ29tZW50YXJpb3MgeSBjb250YWN0byAob3BjaW9uYWxlcykgXG4gICAgICAgICAgICBjb21tZW50czogWycnLCBbXV0sXG4gICAgICAgICAgICBjb250YWN0Rmlyc3ROYW1lOiBbJycsIFtdXSxcbiAgICAgICAgICAgIGNvbnRhY3RMYXN0TmFtZTogWycnLCBbXV0sXG4gICAgICAgICAgICBjb250YWN0Q29tcGFueVBvc2l0aW9uOiBbJycsIFtdXSxcbiAgICAgICAgICAgIGNvbnRhY3RFbWFpbDogWycnLCBbXV0sXG4gICAgICAgICAgICBjb250YWN0RG9jdW1lbnRUeXBlOiBbJycsIFtdXSxcbiAgICAgICAgICAgIGNvbnRhY3REb2N1bWVudE51bWJlcjogWycnLCBbXV0sXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IFt0aGlzLmRpcmVjY2lvbkNvbXBsZXRhVmFsaWRhdG9yKCldXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldENvdW50cmllc0RhdGEoKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvdW50cmllc1N1YmplY3QubmV4dChyZXMpO1xuICAgICAgICAgICAgbGV0IGRvY3VtZW50VHlwZXMgPSBbXVxuICAgICAgICAgICAgcmVzLm1hcChwYWlzZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uc3RzLmdldExvY2FsZSgpLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMocGFpc2VzLmNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKSkgJiYgKGRvY3VtZW50VHlwZXMgPSBwYWlzZXMuZG9jdW1lbnRUeXBlcyB8fCBbXSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFR5cGVzU3ViamVjdC5uZXh0KGRvY3VtZW50VHlwZXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQWNjb3VudFZlcmlmaWNhdGlvblJlcXVpcmVkID0gY29uZmlnLmlzQWNjb3VudFZlcmlmaWNhdGlvblJlcXVpcmVkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuaXNTZW5kV2VsY29tZUVtYWlsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NlbmRXZWxjb21lRW1haWwgPSBjb25maWcuaXNTZW5kV2VsY29tZUVtYWlsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTZW5kV2VsY29tZUVtYWlsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXG5cbiAgICB9XG5cbiAgICBzZXRQcm9wID0gKHByb3AsIGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMucmVnaXN0cm9Vc3VhcmlvW3Byb3BdID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIH1cbiAgICByZWRpcmVjdEhvbWUgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nKVxuICAgIH1cblxuICAgIHJlZ2lzdGVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJfbG9hZGluZyA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5yZWdpc3RlckZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3coJ2ludmFsaWQtZm9ybScpO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMucmVnaXN0ZXJGb3JtLnZhbHVlLnBsYWluUGFzc3dvcmQgIT0gdGhpcy5yZWdpc3RlckZvcm0udmFsdWUucGxhaW5QYXNzd29yZDIpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3coJ0xhcyBjb250cmFzZcOxYXMgbm8gY29pbmNpZGVuJyk7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyX2xvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlZ2lzdGVyRm9ybS52YWxpZCkge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZERhdGEgPSB0aGlzLm5vcm1hbGl6ZVJlZ2lzdGVyRGF0YSh0aGlzLnJlZ2lzdGVyRm9ybS52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ25VcChub3JtYWxpemVkRGF0YSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyX2xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2VLZXk6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHRoaXMuaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUtleSA9ICdyZWdpc3Rlci1vayc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHRoaXMuaXNTZW5kV2VsY29tZUVtYWlsOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VLZXkgPSAncmVnaXN0ZXItd2VsY29tZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VLZXkgPSAncmVnaXN0ZXItc3VjY2Vzcyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuc2hvd1BlcnNpc3RlbnQobWVzc2FnZUtleSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3NpZ25fdXAnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdE5hbWU6IHRoaXMucmVnaXN0ZXJGb3JtLnZhbHVlLmZpcnN0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3ROYW1lOiB0aGlzLnJlZ2lzdGVyRm9ybS52YWx1ZS5sYXN0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsOiB0aGlzLnJlZ2lzdGVyRm9ybS52YWx1ZS5lbWFpbFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZHkuZW1pdCh0cnVlKVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlS2V5ICE9PSAncmVnaXN0ZXItb2snICYmIHRoaXMucmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJGb3JtLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVkaXJlY3QgJiYgbWVzc2FnZUtleSA9PT0gJ3JlZ2lzdGVyLW9rJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnaG9tZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJfbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuc2hvd1BlcnNpc3RlbnQoJ0VsIGVtYWlsIGluZ3Jlc2FkbyB5YSBzZSBlbmN1ZW50cmEgcmVnaXN0cmFkby4nKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3coJ0Vycm9yIGVuIGVsIHJlZ2lzdHJvLiBWdWVsdmEgYSBpbnRlbnRhcmxvIG3DoXMgdGFyZGUuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5zaG93KCdpbnZhbGlkLWZvcm0nKTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJfbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlyZWNjaW9uQ29tcGxldGFWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmVldCA9IGNvbnRyb2wuZ2V0KCdzdHJlZXQnKT8udmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjaXR5ID0gY29udHJvbC5nZXQoJ2NpdHknKT8udmFsdWU7XG4gICAgICAgICAgICBjb25zdCBwcm92aW5jZUNvZGUgPSBjb250cm9sLmdldCgncHJvdmluY2VDb2RlJyk/LnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgY291bnRyeUNvZGUgPSBjb250cm9sLmdldCgnY291bnRyeUNvZGUnKT8udmFsdWU7XG4gICAgICAgICAgICBjb25zdCBwb3N0Y29kZSA9IGNvbnRyb2wuZ2V0KCdwb3N0Y29kZScpPy52YWx1ZTtcblxuICAgICAgICAgICAgY29uc3QgaGFzVmFsdWUgPSAodmFsOiBhbnkpOiBib29sZWFuID0+IHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwudG9TdHJpbmcoKS50cmltKCkgIT09ICcnO1xuXG4gICAgICAgICAgICBjb25zdCBhbnlGaWVsZFNldCA9IFtzdHJlZXQsIGNpdHksIHByb3ZpbmNlQ29kZSwgY291bnRyeUNvZGUsIHBvc3Rjb2RlXS5zb21lKGhhc1ZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IGFsbEZpZWxkc1NldCA9IFtzdHJlZXQsIGNpdHksIHByb3ZpbmNlQ29kZSwgY291bnRyeUNvZGUsIHBvc3Rjb2RlXS5ldmVyeShoYXNWYWx1ZSk7XG4gICAgICAgICAgICAvLyBTaSBhbCBtZW5vcyB1biBjYW1wbyBkZSBkaXJlY2Npw7NuIGVzdMOhIGVzdGFibGVjaWRvLCB0b2RvcyBkZWJlbiBlc3RhcmxvXG4gICAgICAgICAgICAvLyBTaSBubyBoYXkgbmluZ8O6biBjYW1wbyBkZSBkaXJlY2Npw7NuIGVzdGFibGVjaWRvLCBubyBzZSBhcGxpY2EgbGEgdmFsaWRhY2nDs25cbiAgICAgICAgICAgIGlmIChhbnlGaWVsZFNldCAmJiAhYWxsRmllbGRzU2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGlyZWNjaW9uSW5jb21wbGV0YTogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBvcHRpb25hbE1heExlbmd0aFZhbGlkYXRvcihtYXg6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gbWF4ID8geyBtYXhMZW5ndGg6IHRydWUgfSA6IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgb25Db3VudHJ5U2VsZWN0ZWQgPSAodmFsdWUpID0+IHtcbiAgICAgICAgJCgnI3NlbGVjdE9wUGFpcycpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJGb3JtLmNvbnRyb2xzWydjb3VudHJ5Q29kZSddLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckZvcm0uY29udHJvbHNbJ3Byb3ZpbmNlQ29kZSddLnNldFZhbHVlKCcnKTtcbiAgICAgICAgdmFsdWUgIT0gJycgJiYgdGhpcy5wcm92aW5jZXNTdWJqZWN0Lm5leHQodGhpcy5jb3VudHJpZXNTdWJqZWN0LnZhbHVlLmZpbmQoY291bnRyeSA9PiBjb3VudHJ5LmNvZGUgPT0gdmFsdWUpLnByb3ZpbmNlcyk7XG4gICAgfVxuXG4gICAgb25HZW5kZXJTZWxlY3RlZCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICAkKCcjc2VsZWN0T3BTZXhvJykuYXR0cignZGlzYWJsZWQnLCB0cnVlKTtcbiAgICB9XG5cbiAgICBvblByb3ZpbmNlc1NlbGVjdGVkID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICQoJyNzZWxlY3RPcFByb3ZpbmNpYScpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3JtYWxpemVSZWdpc3RlckRhdGEoZGF0YTogYW55KTogYW55IHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplU3RyaW5nID0gKHZhbDogYW55KTogc3RyaW5nIHwgbnVsbCA9PlxuICAgICAgICAgICAgdmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsIHx8IHZhbC50b1N0cmluZygpLnRyaW0oKSA9PT0gJycgPyBudWxsIDogdmFsLnRvU3RyaW5nKCkudHJpbSgpO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZUJvb2wgPSAodmFsOiBhbnkpOiBib29sZWFuIHwgbnVsbCA9PlxuICAgICAgICAgICAgdHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nID8gdmFsIDogdmFsID09PSAndHJ1ZScgPyB0cnVlIDogdmFsID09PSAnZmFsc2UnID8gZmFsc2UgOiBudWxsO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgICAgYmlydGhkYXk6IG5vcm1hbGl6ZVN0cmluZyhkYXRhLmJpcnRoZGF5KSB8fCAnJyxcbiAgICAgICAgICAgIGNvbXBhbnlOYW1lOiBub3JtYWxpemVTdHJpbmcoZGF0YS5jb21wYW55TmFtZSksXG4gICAgICAgICAgICBsZWdhbERlbm9taW5hdGlvbjogbm9ybWFsaXplU3RyaW5nKGRhdGEubGVnYWxEZW5vbWluYXRpb24pLFxuICAgICAgICAgICAgZ2VuZGVyOiBub3JtYWxpemVTdHJpbmcoZGF0YS5nZW5kZXIpLFxuICAgICAgICAgICAgcGhvbmVOdW1iZXI6IG5vcm1hbGl6ZVN0cmluZyhkYXRhLnBob25lTnVtYmVyKSxcbiAgICAgICAgICAgIHN1YnNjcmliZWRUb05ld3NsZXR0ZXI6IG5vcm1hbGl6ZUJvb2woZGF0YS5zdWJzY3JpYmVkVG9OZXdzbGV0dGVyKSxcbiAgICAgICAgICAgIGRvY3VtZW50VHlwZTogbm9ybWFsaXplU3RyaW5nKGRhdGEuZG9jdW1lbnRUeXBlKSxcbiAgICAgICAgICAgIGRvY3VtZW50TnVtYmVyOiBub3JtYWxpemVTdHJpbmcoZGF0YS5kb2N1bWVudE51bWJlciksXG4gICAgICAgICAgICBjb21tZW50czogbm9ybWFsaXplU3RyaW5nKGRhdGEuY29tbWVudHMpLFxuICAgICAgICAgICAgY29udGFjdEZpcnN0TmFtZTogbm9ybWFsaXplU3RyaW5nKGRhdGEuY29udGFjdEZpcnN0TmFtZSksXG4gICAgICAgICAgICBjb250YWN0TGFzdE5hbWU6IG5vcm1hbGl6ZVN0cmluZyhkYXRhLmNvbnRhY3RMYXN0TmFtZSksXG4gICAgICAgICAgICBjb250YWN0Q29tcGFueVBvc2l0aW9uOiBub3JtYWxpemVTdHJpbmcoZGF0YS5jb250YWN0Q29tcGFueVBvc2l0aW9uKSxcbiAgICAgICAgICAgIGNvbnRhY3RFbWFpbDogbm9ybWFsaXplU3RyaW5nKGRhdGEuY29udGFjdEVtYWlsKSxcbiAgICAgICAgICAgIGNvbnRhY3REb2N1bWVudFR5cGU6IG5vcm1hbGl6ZVN0cmluZyhkYXRhLmNvbnRhY3REb2N1bWVudFR5cGUpLFxuICAgICAgICAgICAgY29udGFjdERvY3VtZW50TnVtYmVyOiBub3JtYWxpemVTdHJpbmcoZGF0YS5jb250YWN0RG9jdW1lbnROdW1iZXIpLFxuICAgICAgICAgICAgLy8gRGlyZWNjacOzblxuICAgICAgICAgICAgY291bnRyeUNvZGU6IG5vcm1hbGl6ZVN0cmluZyhkYXRhLmNvdW50cnlDb2RlKSxcbiAgICAgICAgICAgIHByb3ZpbmNlQ29kZTogbm9ybWFsaXplU3RyaW5nKGRhdGEucHJvdmluY2VDb2RlKSxcbiAgICAgICAgICAgIHN0cmVldDogbm9ybWFsaXplU3RyaW5nKGRhdGEuc3RyZWV0KSxcbiAgICAgICAgICAgIGNpdHk6IG5vcm1hbGl6ZVN0cmluZyhkYXRhLmNpdHkpLFxuICAgICAgICAgICAgcG9zdGNvZGU6IG5vcm1hbGl6ZVN0cmluZyhkYXRhLnBvc3Rjb2RlKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbn0iXX0=
@@ -11,6 +11,17 @@ var __extends = (this && this.__extends) || (function () {
11
11
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
12
  };
13
13
  })();
14
+ var __assign = (this && this.__assign) || function () {
15
+ __assign = Object.assign || function(t) {
16
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
17
+ s = arguments[i];
18
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
19
+ t[p] = s[p];
20
+ }
21
+ return t;
22
+ };
23
+ return __assign.apply(this, arguments);
24
+ };
14
25
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
15
26
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
27
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -18,16 +29,18 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
18
29
  return c > 3 && r && Object.defineProperty(target, key, r), r;
19
30
  };
20
31
  import { Component, Input, Output, EventEmitter } from '@angular/core';
21
- import { FormGroup, FormBuilder, Validators } from '@angular/forms';
32
+ import { FormGroup, FormBuilder, Validators, ValidatorFn, AbstractControl, ValidationErrors } from '@angular/forms';
22
33
  import { Router } from "@angular/router";
23
34
  import { ComponentHelper } from '../../../classes/component-helper';
24
35
  import { AnalyticsService } from '../../../services/analytics.service';
25
36
  import { AuthService } from '../../../services/auth.service';
26
37
  import { ToastService } from '../../../utils/toast.service';
27
38
  import { ChannelConfigService } from '../../../services/channel-config.service';
39
+ import { BehaviorSubject } from 'rxjs';
40
+ import { Constants } from '../../../core.consts';
28
41
  var RegisterFormEcComponent = /** @class */ (function (_super) {
29
42
  __extends(RegisterFormEcComponent, _super);
30
- function RegisterFormEcComponent(authService, toastr, router, analyticsService, formBuilder, channelConfigService) {
43
+ function RegisterFormEcComponent(authService, toastr, router, analyticsService, formBuilder, channelConfigService, consts) {
31
44
  var _this = _super.call(this) || this;
32
45
  _this.authService = authService;
33
46
  _this.toastr = toastr;
@@ -35,6 +48,13 @@ var RegisterFormEcComponent = /** @class */ (function (_super) {
35
48
  _this.analyticsService = analyticsService;
36
49
  _this.formBuilder = formBuilder;
37
50
  _this.channelConfigService = channelConfigService;
51
+ _this.consts = consts;
52
+ _this.provincesSubject = new BehaviorSubject([]);
53
+ _this.countriesSubject = new BehaviorSubject([]);
54
+ _this.documentTypesSubject = new BehaviorSubject([]);
55
+ _this.provinces$ = _this.provincesSubject.asObservable();
56
+ _this.countries$ = _this.countriesSubject.asObservable();
57
+ _this.documentTypes$ = _this.documentTypesSubject.asObservable();
38
58
  _this.isLogged = true;
39
59
  _this.darkMode = false;
40
60
  _this.redirect = true;
@@ -76,7 +96,8 @@ var RegisterFormEcComponent = /** @class */ (function (_super) {
76
96
  return;
77
97
  }
78
98
  if (_this.registerForm.valid) {
79
- _this.authService.signUp(_this.registerForm.value).toPromise().then(function (res) {
99
+ var normalizedData = _this.normalizeRegisterData(_this.registerForm.value);
100
+ _this.authService.signUp(normalizedData).toPromise().then(function (res) {
80
101
  _this.register_loading = false;
81
102
  var messageKey;
82
103
  switch (true) {
@@ -118,6 +139,18 @@ var RegisterFormEcComponent = /** @class */ (function (_super) {
118
139
  _this.register_loading = false;
119
140
  }
120
141
  };
142
+ _this.onCountrySelected = function (value) {
143
+ $('#selectOpPais').attr('disabled', true);
144
+ _this.registerForm.controls['countryCode'].setValue(value);
145
+ _this.registerForm.controls['provinceCode'].setValue('');
146
+ value != '' && _this.provincesSubject.next(_this.countriesSubject.value.find(function (country) { return country.code == value; }).provinces);
147
+ };
148
+ _this.onGenderSelected = function (value) {
149
+ $('#selectOpSexo').attr('disabled', true);
150
+ };
151
+ _this.onProvincesSelected = function (value) {
152
+ $('#selectOpProvincia').attr('disabled', true);
153
+ };
121
154
  _this.ecOnConstruct();
122
155
  return _this;
123
156
  }
@@ -131,7 +164,40 @@ var RegisterFormEcComponent = /** @class */ (function (_super) {
131
164
  plainPassword2: ['', Validators.required],
132
165
  newsletter: [false],
133
166
  terms: ['', Validators.required],
134
- birthday: [''],
167
+ birthday: [null, [this.optionalMaxLengthValidator(11)]],
168
+ // Dirección (opcional, pero si se envía, se recomienda enviar todos los campos internos)
169
+ countryCode: [''],
170
+ provinceCode: [null],
171
+ street: [null],
172
+ city: [''],
173
+ postcode: [''],
174
+ // Datos empresa (opcionales)
175
+ companyName: [''],
176
+ legalDenomination: [''],
177
+ // Datos personales adicionales (opcionales)
178
+ gender: [null],
179
+ phoneNumber: ['', [Validators.pattern('[0-9]+')]],
180
+ subscribedToNewsletter: [false],
181
+ documentType: [null],
182
+ documentNumber: [''],
183
+ // Comentarios y contacto (opcionales)
184
+ comments: ['', []],
185
+ contactFirstName: ['', []],
186
+ contactLastName: ['', []],
187
+ contactCompanyPosition: ['', []],
188
+ contactEmail: ['', []],
189
+ contactDocumentType: ['', []],
190
+ contactDocumentNumber: ['', []],
191
+ }, {
192
+ validators: [this.direccionCompletaValidator()]
193
+ });
194
+ this.authService.getCountriesData().then(function (res) {
195
+ _this.countriesSubject.next(res);
196
+ var documentTypes = [];
197
+ res.map(function (paises) {
198
+ _this.consts.getLocale().toLocaleLowerCase().includes(paises.code.toLocaleLowerCase()) && (documentTypes = paises.documentTypes || []);
199
+ });
200
+ _this.documentTypesSubject.next(documentTypes);
135
201
  });
136
202
  this.channelConfigService.channelConfig$.subscribe(function (config) {
137
203
  if (config && config.isAccountVerificationRequired !== undefined) {
@@ -149,8 +215,42 @@ var RegisterFormEcComponent = /** @class */ (function (_super) {
149
215
  });
150
216
  this.ecOnInit();
151
217
  };
152
- RegisterFormEcComponent.prototype.prueba = function () {
153
- this.toastr.showPersistent('hola');
218
+ RegisterFormEcComponent.prototype.direccionCompletaValidator = function () {
219
+ return function (control) {
220
+ var _a, _b, _c, _d, _e;
221
+ var street = (_a = control.get('street')) === null || _a === void 0 ? void 0 : _a.value;
222
+ var city = (_b = control.get('city')) === null || _b === void 0 ? void 0 : _b.value;
223
+ var provinceCode = (_c = control.get('provinceCode')) === null || _c === void 0 ? void 0 : _c.value;
224
+ var countryCode = (_d = control.get('countryCode')) === null || _d === void 0 ? void 0 : _d.value;
225
+ var postcode = (_e = control.get('postcode')) === null || _e === void 0 ? void 0 : _e.value;
226
+ var hasValue = function (val) { return val !== null && val !== undefined && val.toString().trim() !== ''; };
227
+ var anyFieldSet = [street, city, provinceCode, countryCode, postcode].some(hasValue);
228
+ var allFieldsSet = [street, city, provinceCode, countryCode, postcode].every(hasValue);
229
+ // Si al menos un campo de dirección está establecido, todos deben estarlo
230
+ // Si no hay ningún campo de dirección establecido, no se aplica la validación
231
+ if (anyFieldSet && !allFieldsSet) {
232
+ return { direccionIncompleta: true };
233
+ }
234
+ return null;
235
+ };
236
+ };
237
+ RegisterFormEcComponent.prototype.optionalMaxLengthValidator = function (max) {
238
+ return function (control) {
239
+ if (!control.value)
240
+ return null;
241
+ return control.value.length > max ? { maxLength: true } : null;
242
+ };
243
+ };
244
+ RegisterFormEcComponent.prototype.normalizeRegisterData = function (data) {
245
+ var normalizeString = function (val) {
246
+ return val === undefined || val === null || val.toString().trim() === '' ? null : val.toString().trim();
247
+ };
248
+ var normalizeBool = function (val) {
249
+ return typeof val === 'boolean' ? val : val === 'true' ? true : val === 'false' ? false : null;
250
+ };
251
+ return __assign(__assign({}, data), { birthday: normalizeString(data.birthday) || '', companyName: normalizeString(data.companyName), legalDenomination: normalizeString(data.legalDenomination), gender: normalizeString(data.gender), phoneNumber: normalizeString(data.phoneNumber), subscribedToNewsletter: normalizeBool(data.subscribedToNewsletter), documentType: normalizeString(data.documentType), documentNumber: normalizeString(data.documentNumber), comments: normalizeString(data.comments), contactFirstName: normalizeString(data.contactFirstName), contactLastName: normalizeString(data.contactLastName), contactCompanyPosition: normalizeString(data.contactCompanyPosition), contactEmail: normalizeString(data.contactEmail), contactDocumentType: normalizeString(data.contactDocumentType), contactDocumentNumber: normalizeString(data.contactDocumentNumber),
252
+ // Dirección
253
+ countryCode: normalizeString(data.countryCode), provinceCode: normalizeString(data.provinceCode), street: normalizeString(data.street), city: normalizeString(data.city), postcode: normalizeString(data.postcode) });
154
254
  };
155
255
  RegisterFormEcComponent.ctorParameters = function () { return [
156
256
  { type: AuthService },
@@ -158,7 +258,8 @@ var RegisterFormEcComponent = /** @class */ (function (_super) {
158
258
  { type: Router },
159
259
  { type: AnalyticsService },
160
260
  { type: FormBuilder },
161
- { type: ChannelConfigService }
261
+ { type: ChannelConfigService },
262
+ { type: Constants }
162
263
  ]; };
163
264
  __decorate([
164
265
  Input()
@@ -182,4 +283,4 @@ var RegisterFormEcComponent = /** @class */ (function (_super) {
182
283
  return RegisterFormEcComponent;
183
284
  }(ComponentHelper));
184
285
  export { RegisterFormEcComponent };
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2F1dGgtZWMvcmVnaXN0ZXItZm9ybS1lYy9yZWdpc3Rlci1mb3JtLWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFPaEY7SUFBNkMsMkNBQWU7SUF1QnhELGlDQUNXLFdBQXdCLEVBQ3JCLE1BQW9CLEVBQ3ZCLE1BQWMsRUFDZCxnQkFBa0MsRUFDL0IsV0FBd0IsRUFDMUIsb0JBQTBDO1FBTnRELFlBUUksaUJBQU8sU0FFVjtRQVRVLGlCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3JCLFlBQU0sR0FBTixNQUFNLENBQWM7UUFDdkIsWUFBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHNCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDL0IsaUJBQVcsR0FBWCxXQUFXLENBQWE7UUFDMUIsMEJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtR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QjdDO1FBQVIsS0FBSyxFQUFFOzZEQUFrQjtJQUNqQjtRQUFSLEtBQUssRUFBRTs2REFBaUI7SUFDaEI7UUFBUixLQUFLLEVBQUU7NkRBQWlCO0lBQ2Y7UUFBVCxNQUFNLEVBQUU7MERBQTRCO0lBTDVCLHVCQUF1QjtRQUxuQyxTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsc0JBQXNCO1lBQ2hDLHMzRkFBOEM7O1NBRWpELENBQUM7T0FDVyx1QkFBdUIsQ0FzSW5DO0lBQUQsOEJBQUM7Q0FBQSxBQXRJRCxDQUE2QyxlQUFlLEdBc0kzRDtTQXRJWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbmFseXRpY3Muc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2hhbm5lbC1jb25maWcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLXJlZ2lzdGVyLWZvcm0tZWMnLFxuICAgIHRlbXBsYXRlVXJsOiAncmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ3JlZ2lzdGVyLWZvcm0tZWMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSZWdpc3RlckZvcm1FY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHVibGljIGlzTG9nZ2VkOiBCb29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBkYXJrTW9kZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHJlZGlyZWN0ID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBjb21wbGV0ZSA9IHRydWU7XG4gICAgQE91dHB1dCgpIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHB1YmxpYyBzdWNjZXNzOiBCb29sZWFuID0gZmFsc2VcbiAgICBwdWJsaWMgY2FtcG9zcGVyc29uYWp1cmlkaWNhOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHJlZ2lzdGVyX2xvYWRpbmc6IGJvb2xlYW47XG4gICAgcHVibGljIHJlZ2lzdGVyRm9ybTogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyByZWdpc3Ryb1VzdWFyaW86IGFueSA9IHtcbiAgICAgICAgZmlyc3ROYW1lOiAnJyxcbiAgICAgICAgbGFzdE5hbWU6ICcnLFxuICAgICAgICBlbWFpbDogJycsXG4gICAgICAgIHBsYWluUGFzc3dvcmQ6ICcnLFxuICAgICAgICBwbGFpblBhc3N3b3JkMjogJycsXG4gICAgICAgIG5ld3NsZXR0ZXI6IGZhbHNlLFxuICAgICAgICB0ZXJtczogZmFsc2UsXG4gICAgICAgIGJpcnRoZGF5OiAnJywgLy8gTnVldm8gY2FtcG8gcGFyYSBlbCBjdW1wbGVhw7Fvc1xuICAgIH07XG4gICAgcHVibGljIGlzQWNjb3VudFZlcmlmaWNhdGlvblJlcXVpcmVkID0gZmFsc2U7XG4gICAgcHVibGljIGlzU2VuZFdlbGNvbWVFbWFpbCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCB0b2FzdHI6IFRvYXN0U2VydmljZSxcbiAgICAgICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwdWJsaWMgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgZmlyc3ROYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgbGFzdE5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBlbWFpbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIHBsYWluUGFzc3dvcmQ6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBwbGFpblBhc3N3b3JkMjogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIG5ld3NsZXR0ZXI6IFtmYWxzZV0sXG4gICAgICAgICAgICB0ZXJtczogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIGJpcnRoZGF5OiBbJyddLCAvLyBDYW1wbyBubyBvYmxpZ2F0b3Jpb1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQWNjb3VudFZlcmlmaWNhdGlvblJlcXVpcmVkID0gY29uZmlnLmlzQWNjb3VudFZlcmlmaWNhdGlvblJlcXVpcmVkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuaXNTZW5kV2VsY29tZUVtYWlsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NlbmRXZWxjb21lRW1haWwgPSBjb25maWcuaXNTZW5kV2VsY29tZUVtYWlsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTZW5kV2VsY29tZUVtYWlsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXG5cbiAgICB9XG5cbiAgICBzZXRQcm9wID0gKHByb3AsIGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMucmVnaXN0cm9Vc3VhcmlvW3Byb3BdID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIH1cbiAgICByZWRpcmVjdEhvbWUgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nKVxuICAgIH1cblxuICAgIHJlZ2lzdGVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJfbG9hZGluZyA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5yZWdpc3RlckZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3coJ2ludmFsaWQtZm9ybScpO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMucmVnaXN0ZXJGb3JtLnZhbHVlLnBsYWluUGFzc3dvcmQgIT0gdGhpcy5yZWdpc3RlckZvcm0udmFsdWUucGxhaW5QYXNzd29yZDIpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3coJ0xhcyBjb250cmFzZcOxYXMgbm8gY29pbmNpZGVuJyk7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyX2xvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlZ2lzdGVyRm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5zaWduVXAodGhpcy5yZWdpc3RlckZvcm0udmFsdWUpLnRvUHJvbWlzZSgpLnRoZW4oXG4gICAgICAgICAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlS2V5OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB0aGlzLmlzQWNjb3VudFZlcmlmaWNhdGlvblJlcXVpcmVkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VLZXkgPSAncmVnaXN0ZXItb2snO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB0aGlzLmlzU2VuZFdlbGNvbWVFbWFpbDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlS2V5ID0gJ3JlZ2lzdGVyLXdlbGNvbWUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlS2V5ID0gJ3JlZ2lzdGVyLXN1Y2Nlc3MnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3dQZXJzaXN0ZW50KG1lc3NhZ2VLZXkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdzaWduX3VwJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3ROYW1lOiB0aGlzLnJlZ2lzdGVyRm9ybS52YWx1ZS5maXJzdE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0TmFtZTogdGhpcy5yZWdpc3RlckZvcm0udmFsdWUubGFzdE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWFpbDogdGhpcy5yZWdpc3RlckZvcm0udmFsdWUuZW1haWxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWR5LmVtaXQodHJ1ZSlcblxuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZUtleSAhPT0gJ3JlZ2lzdGVyLW9rJyAmJiB0aGlzLnJlZGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRm9ybS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlZGlyZWN0ICYmIG1lc3NhZ2VLZXkgPT09ICdyZWdpc3Rlci1vaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJ2hvbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyX2xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3dQZXJzaXN0ZW50KCdFbCBlbWFpbCBpbmdyZXNhZG8geWEgc2UgZW5jdWVudHJhIHJlZ2lzdHJhZG8uJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5zaG93KCdFcnJvciBlbiBlbCByZWdpc3Ryby4gVnVlbHZhIGEgaW50ZW50YXJsbyBtw6FzIHRhcmRlLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuc2hvdygnaW52YWxpZC1mb3JtJyk7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyX2xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcnVlYmEoKXtcbiAgICAgICAgdGhpcy50b2FzdHIuc2hvd1BlcnNpc3RlbnQoJ2hvbGEnKTtcbiAgICB9XG59Il19
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2F1dGgtZWMvcmVnaXN0ZXItZm9ybS1lYy9yZWdpc3Rlci1mb3JtLWVjLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBUWpEO0lBQTZDLDJDQUFlO0lBK0J4RCxpQ0FDVyxXQUF3QixFQUNyQixNQUFvQixFQUN2QixNQUFjLEVBQ2QsZ0JBQWtDLEVBQy9CLFdBQXdCLEVBQzFCLG9CQUEwQyxFQUMzQyxNQUFpQjtRQVA1QixZQVNJLGlCQUFPLFNBRVY7UUFWVSxpQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNy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ZSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUNwRSxZQUFZLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDaEQsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUM5RCxxQkFBcUIsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ2xFLFlBQVk7WUFDWixXQUFXLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFDOUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQ2hELE1BQU0sRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUNwQyxJQUFJLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDaEMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQzFDO0lBQ04sQ0FBQzs7Z0JBMU51QixXQUFXO2dCQUNiLFlBQVk7Z0JBQ2YsTUFBTTtnQkFDSSxnQkFBZ0I7Z0JBQ2xCLFdBQVc7Z0JBQ0osb0JBQW9CO2dCQUNuQyxTQUFTOztJQTVCbkI7UUFBUixLQUFLLEVBQUU7NkRBQWtCO0lBQ2pCO1FBQVIsS0FBSyxFQUFFOzZEQUFpQjtJQUNoQjtRQUFSLEtBQUssRUFBRTs2REFBaUI7SUFDZjtRQUFULE1BQU0sRUFBRTswREFBNEI7SUFiNUIsdUJBQXVCO1FBTG5DLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxzQkFBc0I7WUFDaEMsczNGQUE4Qzs7U0FFakQsQ0FBQztPQUNXLHVCQUF1QixDQTRQbkM7SUFBRCw4QkFBQztDQUFBLEFBNVBELENBQTZDLGVBQWUsR0E0UDNEO1NBNVBZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIFZhbGlkYXRvckZuLCBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXInO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FuYWx5dGljcy5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vLi4vY29yZS5jb25zdHMnO1xuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1yZWdpc3Rlci1mb3JtLWVjJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3JlZ2lzdGVyLWZvcm0tZWMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydyZWdpc3Rlci1mb3JtLWVjLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmVnaXN0ZXJGb3JtRWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgcHJvdGVjdGVkIHByb3ZpbmNlc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG4gICAgcHJvdGVjdGVkIGNvdW50cmllc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG4gICAgcHJvdGVjdGVkIGRvY3VtZW50VHlwZXNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuXG4gICAgcHVibGljIHByb3ZpbmNlcyQgPSB0aGlzLnByb3ZpbmNlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGNvdW50cmllcyQgPSB0aGlzLmNvdW50cmllc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGRvY3VtZW50VHlwZXMkID0gdGhpcy5kb2N1bWVudFR5cGVzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgaXNMb2dnZWQ6IEJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGRhcmtNb2RlID0gZmFsc2U7XG4gICAgQElucHV0KCkgcmVkaXJlY3QgPSB0cnVlO1xuICAgIEBJbnB1dCgpIGNvbXBsZXRlID0gdHJ1ZTtcbiAgICBAT3V0cHV0KCkgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgcHVibGljIHN1Y2Nlc3M6IEJvb2xlYW4gPSBmYWxzZVxuICAgIHB1YmxpYyBjYW1wb3NwZXJzb25hanVyaWRpY2E6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgcmVnaXN0ZXJfbG9hZGluZzogYm9vbGVhbjtcbiAgICBwdWJsaWMgcmVnaXN0ZXJGb3JtOiBGb3JtR3JvdXA7XG4gICAgcHVibGljIHJlZ2lzdHJvVXN1YXJpbzogYW55ID0ge1xuICAgICAgICBmaXJzdE5hbWU6ICcnLFxuICAgICAgICBsYXN0TmFtZTogJycsXG4gICAgICAgIGVtYWlsOiAnJyxcbiAgICAgICAgcGxhaW5QYXNzd29yZDogJycsXG4gICAgICAgIHBsYWluUGFzc3dvcmQyOiAnJyxcbiAgICAgICAgbmV3c2xldHRlcjogZmFsc2UsXG4gICAgICAgIHRlcm1zOiBmYWxzZSxcbiAgICAgICAgYmlydGhkYXk6ICcnLCAvLyBOdWV2byBjYW1wbyBwYXJhIGVsIGN1bXBsZWHDsW9zXG4gICAgfTtcbiAgICBwdWJsaWMgaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNTZW5kV2VsY29tZUVtYWlsID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHRvYXN0cjogVG9hc3RTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHB1YmxpYyBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIGNoYW5uZWxDb25maWdTZXJ2aWNlOiBDaGFubmVsQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHVibGljIGNvbnN0czogQ29uc3RhbnRzXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG5cbiAgICAgICAgdGhpcy5yZWdpc3RlckZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGZpcnN0TmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIGxhc3ROYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgZW1haWw6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBwbGFpblBhc3N3b3JkOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgcGxhaW5QYXNzd29yZDI6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBuZXdzbGV0dGVyOiBbZmFsc2VdLFxuICAgICAgICAgICAgdGVybXM6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBiaXJ0aGRheTogW251bGwsIFt0aGlzLm9wdGlvbmFsTWF4TGVuZ3RoVmFsaWRhdG9yKDExKV1dLFxuICAgICAgICAgICAgLy8gRGlyZWNjacOzbiAob3BjaW9uYWwsIHBlcm8gc2kgc2UgZW52w61hLCBzZSByZWNvbWllbmRhIGVudmlhciB0b2RvcyBsb3MgY2FtcG9zIGludGVybm9zKVxuICAgICAgICAgICAgY291bnRyeUNvZGU6IFsnJ10sXG4gICAgICAgICAgICBwcm92aW5jZUNvZGU6IFtudWxsXSxcbiAgICAgICAgICAgIHN0cmVldDogW251bGxdLFxuICAgICAgICAgICAgY2l0eTogWycnXSxcbiAgICAgICAgICAgIHBvc3Rjb2RlOiBbJyddLFxuICAgICAgICAgICAgLy8gRGF0b3MgZW1wcmVzYSAob3BjaW9uYWxlcylcbiAgICAgICAgICAgIGNvbXBhbnlOYW1lOiBbJyddLFxuICAgICAgICAgICAgbGVnYWxEZW5vbWluYXRpb246IFsnJ10sXG4gICAgICAgICAgICAvLyBEYXRvcyBwZXJzb25hbGVzIGFkaWNpb25hbGVzIChvcGNpb25hbGVzKVxuICAgICAgICAgICAgZ2VuZGVyOiBbbnVsbF0sXG4gICAgICAgICAgICBwaG9uZU51bWJlcjogWycnLCBbVmFsaWRhdG9ycy5wYXR0ZXJuKCdbMC05XSsnKV1dLFxuICAgICAgICAgICAgc3Vic2NyaWJlZFRvTmV3c2xldHRlcjogW2ZhbHNlXSxcbiAgICAgICAgICAgIGRvY3VtZW50VHlwZTogW251bGxdLFxuICAgICAgICAgICAgZG9jdW1lbnROdW1iZXI6IFsnJ10sXG4gICAgICAgICAgICAvLyBDb21lbnRhcmlvcyB5IGNvbnRhY3RvIChvcGNpb25hbGVzKSBcbiAgICAgICAgICAgIGNvbW1lbnRzOiBbJycsIFtdXSxcbiAgICAgICAgICAgIGNvbnRhY3RGaXJzdE5hbWU6IFsnJywgW11dLFxuICAgICAgICAgICAgY29udGFjdExhc3ROYW1lOiBbJycsIFtdXSxcbiAgICAgICAgICAgIGNvbnRhY3RDb21wYW55UG9zaXRpb246IFsnJywgW11dLFxuICAgICAgICAgICAgY29udGFjdEVtYWlsOiBbJycsIFtdXSxcbiAgICAgICAgICAgIGNvbnRhY3REb2N1bWVudFR5cGU6IFsnJywgW11dLFxuICAgICAgICAgICAgY29udGFjdERvY3VtZW50TnVtYmVyOiBbJycsIFtdXSxcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdmFsaWRhdG9yczogW3RoaXMuZGlyZWNjaW9uQ29tcGxldGFWYWxpZGF0b3IoKV1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q291bnRyaWVzRGF0YSgpLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuY291bnRyaWVzU3ViamVjdC5uZXh0KHJlcyk7XG4gICAgICAgICAgICBsZXQgZG9jdW1lbnRUeXBlcyA9IFtdXG4gICAgICAgICAgICByZXMubWFwKHBhaXNlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCkudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyhwYWlzZXMuY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpKSAmJiAoZG9jdW1lbnRUeXBlcyA9IHBhaXNlcy5kb2N1bWVudFR5cGVzIHx8IFtdKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50VHlwZXNTdWJqZWN0Lm5leHQoZG9jdW1lbnRUeXBlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoYW5uZWxDb25maWdTZXJ2aWNlLmNoYW5uZWxDb25maWckLnN1YnNjcmliZShcbiAgICAgICAgICAgIChjb25maWcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5pc0FjY291bnRWZXJpZmljYXRpb25SZXF1aXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQgPSBjb25maWcuaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0FjY291bnRWZXJpZmljYXRpb25SZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5pc1NlbmRXZWxjb21lRW1haWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2VuZFdlbGNvbWVFbWFpbCA9IGNvbmZpZy5pc1NlbmRXZWxjb21lRW1haWw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NlbmRXZWxjb21lRW1haWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmVjT25Jbml0KClcblxuICAgIH1cblxuICAgIHNldFByb3AgPSAocHJvcCwgZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5yZWdpc3Ryb1VzdWFyaW9bcHJvcF0gPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgfVxuICAgIHJlZGlyZWN0SG9tZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycpXG4gICAgfVxuXG4gICAgcmVnaXN0ZXIgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnJlZ2lzdGVyRm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuc2hvdygnaW52YWxpZC1mb3JtJyk7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyX2xvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJlZ2lzdGVyX2xvYWRpbmcgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5yZWdpc3RlckZvcm0udmFsdWUucGxhaW5QYXNzd29yZCAhPSB0aGlzLnJlZ2lzdGVyRm9ybS52YWx1ZS5wbGFpblBhc3N3b3JkMikge1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuc2hvdygnTGFzIGNvbnRyYXNlw7FhcyBubyBjb2luY2lkZW4nKTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJfbG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVnaXN0ZXJGb3JtLnZhbGlkKSB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRGF0YSA9IHRoaXMubm9ybWFsaXplUmVnaXN0ZXJEYXRhKHRoaXMucmVnaXN0ZXJGb3JtLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2lnblVwKG5vcm1hbGl6ZWREYXRhKS50b1Byb21pc2UoKS50aGVuKFxuICAgICAgICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJfbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZUtleTogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdGhpcy5pc0FjY291bnRWZXJpZmljYXRpb25SZXF1aXJlZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlS2V5ID0gJ3JlZ2lzdGVyLW9rJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdGhpcy5pc1NlbmRXZWxjb21lRW1haWw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUtleSA9ICdyZWdpc3Rlci13ZWxjb21lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUtleSA9ICdyZWdpc3Rlci1zdWNjZXNzJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5zaG93UGVyc2lzdGVudChtZXNzYWdlS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnc2lnbl91cCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0TmFtZTogdGhpcy5yZWdpc3RlckZvcm0udmFsdWUuZmlyc3ROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE5hbWU6IHRoaXMucmVnaXN0ZXJGb3JtLnZhbHVlLmxhc3ROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW1haWw6IHRoaXMucmVnaXN0ZXJGb3JtLnZhbHVlLmVtYWlsXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkeS5lbWl0KHRydWUpXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VLZXkgIT09ICdyZWdpc3Rlci1vaycgJiYgdGhpcy5yZWRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlckZvcm0ucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWRpcmVjdCAmJiBtZXNzYWdlS2V5ID09PSAncmVnaXN0ZXItb2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdob21lJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5zaG93UGVyc2lzdGVudCgnRWwgZW1haWwgaW5ncmVzYWRvIHlhIHNlIGVuY3VlbnRyYSByZWdpc3RyYWRvLicpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuc2hvdygnRXJyb3IgZW4gZWwgcmVnaXN0cm8uIFZ1ZWx2YSBhIGludGVudGFybG8gbcOhcyB0YXJkZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3coJ2ludmFsaWQtZm9ybScpO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkaXJlY2Npb25Db21wbGV0YVZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RyZWV0ID0gY29udHJvbC5nZXQoJ3N0cmVldCcpPy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGNpdHkgPSBjb250cm9sLmdldCgnY2l0eScpPy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpbmNlQ29kZSA9IGNvbnRyb2wuZ2V0KCdwcm92aW5jZUNvZGUnKT8udmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjb3VudHJ5Q29kZSA9IGNvbnRyb2wuZ2V0KCdjb3VudHJ5Q29kZScpPy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHBvc3Rjb2RlID0gY29udHJvbC5nZXQoJ3Bvc3Rjb2RlJyk/LnZhbHVlO1xuXG4gICAgICAgICAgICBjb25zdCBoYXNWYWx1ZSA9ICh2YWw6IGFueSk6IGJvb2xlYW4gPT4gdmFsICE9PSBudWxsICYmIHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbC50b1N0cmluZygpLnRyaW0oKSAhPT0gJyc7XG5cbiAgICAgICAgICAgIGNvbnN0IGFueUZpZWxkU2V0ID0gW3N0cmVldCwgY2l0eSwgcHJvdmluY2VDb2RlLCBjb3VudHJ5Q29kZSwgcG9zdGNvZGVdLnNvbWUoaGFzVmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgYWxsRmllbGRzU2V0ID0gW3N0cmVldCwgY2l0eSwgcHJvdmluY2VDb2RlLCBjb3VudHJ5Q29kZSwgcG9zdGNvZGVdLmV2ZXJ5KGhhc1ZhbHVlKTtcbiAgICAgICAgICAgIC8vIFNpIGFsIG1lbm9zIHVuIGNhbXBvIGRlIGRpcmVjY2nDs24gZXN0w6EgZXN0YWJsZWNpZG8sIHRvZG9zIGRlYmVuIGVzdGFybG9cbiAgICAgICAgICAgIC8vIFNpIG5vIGhheSBuaW5nw7puIGNhbXBvIGRlIGRpcmVjY2nDs24gZXN0YWJsZWNpZG8sIG5vIHNlIGFwbGljYSBsYSB2YWxpZGFjacOzblxuICAgICAgICAgICAgaWYgKGFueUZpZWxkU2V0ICYmICFhbGxGaWVsZHNTZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkaXJlY2Npb25JbmNvbXBsZXRhOiB0cnVlIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG9wdGlvbmFsTWF4TGVuZ3RoVmFsaWRhdG9yKG1heDogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgICAgICAgIGlmICghY29udHJvbC52YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbC52YWx1ZS5sZW5ndGggPiBtYXggPyB7IG1heExlbmd0aDogdHJ1ZSB9IDogbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBvbkNvdW50cnlTZWxlY3RlZCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICAkKCcjc2VsZWN0T3BQYWlzJykuYXR0cignZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckZvcm0uY29udHJvbHNbJ2NvdW50cnlDb2RlJ10uc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRm9ybS5jb250cm9sc1sncHJvdmluY2VDb2RlJ10uc2V0VmFsdWUoJycpO1xuICAgICAgICB2YWx1ZSAhPSAnJyAmJiB0aGlzLnByb3ZpbmNlc1N1YmplY3QubmV4dCh0aGlzLmNvdW50cmllc1N1YmplY3QudmFsdWUuZmluZChjb3VudHJ5ID0+IGNvdW50cnkuY29kZSA9PSB2YWx1ZSkucHJvdmluY2VzKTtcbiAgICB9XG5cbiAgICBvbkdlbmRlclNlbGVjdGVkID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICQoJyNzZWxlY3RPcFNleG8nKS5hdHRyKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgIH1cblxuICAgIG9uUHJvdmluY2VzU2VsZWN0ZWQgPSAodmFsdWUpID0+IHtcbiAgICAgICAgJCgnI3NlbGVjdE9wUHJvdmluY2lhJykuYXR0cignZGlzYWJsZWQnLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vcm1hbGl6ZVJlZ2lzdGVyRGF0YShkYXRhOiBhbnkpOiBhbnkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVTdHJpbmcgPSAodmFsOiBhbnkpOiBzdHJpbmcgfCBudWxsID0+XG4gICAgICAgICAgICB2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09IG51bGwgfHwgdmFsLnRvU3RyaW5nKCkudHJpbSgpID09PSAnJyA/IG51bGwgOiB2YWwudG9TdHJpbmcoKS50cmltKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplQm9vbCA9ICh2YWw6IGFueSk6IGJvb2xlYW4gfCBudWxsID0+XG4gICAgICAgICAgICB0eXBlb2YgdmFsID09PSAnYm9vbGVhbicgPyB2YWwgOiB2YWwgPT09ICd0cnVlJyA/IHRydWUgOiB2YWwgPT09ICdmYWxzZScgPyBmYWxzZSA6IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICBiaXJ0aGRheTogbm9ybWFsaXplU3RyaW5nKGRhdGEuYmlydGhkYXkpIHx8ICcnLFxuICAgICAgICAgICAgY29tcGFueU5hbWU6IG5vcm1hbGl6ZVN0cmluZyhkYXRhLmNvbXBhbnlOYW1lKSxcbiAgICAgICAgICAgIGxlZ2FsRGVub21pbmF0aW9uOiBub3JtYWxpemVTdHJpbmcoZGF0YS5sZWdhbERlbm9taW5hdGlvbiksXG4gICAgICAgICAgICBnZW5kZXI6IG5vcm1hbGl6ZVN0cmluZyhkYXRhLmdlbmRlciksXG4gICAgICAgICAgICBwaG9uZU51bWJlcjogbm9ybWFsaXplU3RyaW5nKGRhdGEucGhvbmVOdW1iZXIpLFxuICAgICAgICAgICAgc3Vic2NyaWJlZFRvTmV3c2xldHRlcjogbm9ybWFsaXplQm9vbChkYXRhLnN1YnNjcmliZWRUb05ld3NsZXR0ZXIpLFxuICAgICAgICAgICAgZG9jdW1lbnRUeXBlOiBub3JtYWxpemVTdHJpbmcoZGF0YS5kb2N1bWVudFR5cGUpLFxuICAgICAgICAgICAgZG9jdW1lbnROdW1iZXI6IG5vcm1hbGl6ZVN0cmluZyhkYXRhLmRvY3VtZW50TnVtYmVyKSxcbiAgICAgICAgICAgIGNvbW1lbnRzOiBub3JtYWxpemVTdHJpbmcoZGF0YS5jb21tZW50cyksXG4gICAgICAgICAgICBjb250YWN0Rmlyc3ROYW1lOiBub3JtYWxpemVTdHJpbmcoZGF0YS5jb250YWN0Rmlyc3ROYW1lKSxcbiAgICAgICAgICAgIGNvbnRhY3RMYXN0TmFtZTogbm9ybWFsaXplU3RyaW5nKGRhdGEuY29udGFjdExhc3ROYW1lKSxcbiAgICAgICAgICAgIGNvbnRhY3RDb21wYW55UG9zaXRpb246IG5vcm1hbGl6ZVN0cmluZyhkYXRhLmNvbnRhY3RDb21wYW55UG9zaXRpb24pLFxuICAgICAgICAgICAgY29udGFjdEVtYWlsOiBub3JtYWxpemVTdHJpbmcoZGF0YS5jb250YWN0RW1haWwpLFxuICAgICAgICAgICAgY29udGFjdERvY3VtZW50VHlwZTogbm9ybWFsaXplU3RyaW5nKGRhdGEuY29udGFjdERvY3VtZW50VHlwZSksXG4gICAgICAgICAgICBjb250YWN0RG9jdW1lbnROdW1iZXI6IG5vcm1hbGl6ZVN0cmluZyhkYXRhLmNvbnRhY3REb2N1bWVudE51bWJlciksXG4gICAgICAgICAgICAvLyBEaXJlY2Npw7NuXG4gICAgICAgICAgICBjb3VudHJ5Q29kZTogbm9ybWFsaXplU3RyaW5nKGRhdGEuY291bnRyeUNvZGUpLFxuICAgICAgICAgICAgcHJvdmluY2VDb2RlOiBub3JtYWxpemVTdHJpbmcoZGF0YS5wcm92aW5jZUNvZGUpLFxuICAgICAgICAgICAgc3RyZWV0OiBub3JtYWxpemVTdHJpbmcoZGF0YS5zdHJlZXQpLFxuICAgICAgICAgICAgY2l0eTogbm9ybWFsaXplU3RyaW5nKGRhdGEuY2l0eSksXG4gICAgICAgICAgICBwb3N0Y29kZTogbm9ybWFsaXplU3RyaW5nKGRhdGEucG9zdGNvZGUpLFxuICAgICAgICB9O1xuICAgIH1cblxufSJdfQ==