@xsolla/payment-client-core 0.2.91 → 0.2.93
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/core/payment/actions/next-actions.mjs +3 -1
- package/esm2022/lib/core/payment/actions/redirect/google-three-ds-redirect.action.class.mjs +20 -0
- package/esm2022/lib/core/payment/actions/redirect/redirect.action.class.mjs +16 -8
- package/esm2022/lib/core/payment/actions/redirect/redirect.action.type.mjs +1 -1
- package/esm2022/lib/core/payment/field-names.enum.mjs +2 -1
- package/esm2022/lib/core/payment/form/validators/required/required.validator.mjs +1 -2
- package/esm2022/lib/core/payment/payment-configuration.interface.mjs +1 -1
- package/esm2022/lib/core/payment/payment-configurations/types/google-pay-form-configuration.interface.mjs +2 -0
- package/esm2022/lib/core/payment/payment-configurations/types/is-credit-card-settings.guard.mjs +5 -0
- package/esm2022/lib/core/payment/payment-configurations/types/is-google-pay-settings.guard.mjs +5 -0
- package/esm2022/lib/core/payment/payment-settings/payment-settings.service.mjs +8 -5
- package/esm2022/lib/core/payment/payment.service.mjs +13 -5
- package/esm2022/lib/core/sdk-payment-systems/google-pay/google-pay.service.mjs +18 -2
- package/esm2022/lib/core/sdk-payment-systems/sdk-payment-systems-initial-data.interface.mjs +1 -1
- package/esm2022/lib/core-library.service.mjs +1 -1
- package/fesm2022/xsolla-payment-client-core.mjs +75 -17
- package/fesm2022/xsolla-payment-client-core.mjs.map +1 -1
- package/lib/core/payment/actions/redirect/google-three-ds-redirect.action.class.d.ts +9 -0
- package/lib/core/payment/actions/redirect/redirect.action.class.d.ts +2 -1
- package/lib/core/payment/actions/redirect/redirect.action.type.d.ts +1 -0
- package/lib/core/payment/field-names.enum.d.ts +1 -0
- package/lib/core/payment/payment-configuration.interface.d.ts +4 -2
- package/lib/core/payment/payment-configurations/types/google-pay-form-configuration.interface.d.ts +8 -0
- package/lib/core/payment/payment-configurations/types/is-credit-card-settings.guard.d.ts +3 -0
- package/lib/core/payment/payment-configurations/types/is-google-pay-settings.guard.d.ts +3 -0
- package/lib/core/payment/payment.service.d.ts +4 -1
- package/lib/core/sdk-payment-systems/google-pay/google-pay.service.d.ts +6 -0
- package/lib/core/sdk-payment-systems/sdk-payment-systems-initial-data.interface.d.ts +1 -0
- package/lib/core-library.service.d.ts +4 -1
- package/package.json +1 -1
- package/xsolla-payment-client-core-0.2.93.tgz +0 -0
- package/xsolla-payment-client-core-0.2.91.tgz +0 -0
|
@@ -16,7 +16,8 @@ import { overrideFieldConfigs } from './form/overrided-fields/override-field-con
|
|
|
16
16
|
import { TaggedError } from '../exceptions-handling/errors';
|
|
17
17
|
import { updateAfterErrorRules } from './update-submit-response/update-after-error-rules.const';
|
|
18
18
|
import { fieldsAllowedToExternalChange } from './external-change-fields.const';
|
|
19
|
-
import {
|
|
19
|
+
import { isGooglePaySettingsGuard } from './payment-configurations/types/is-google-pay-settings.guard';
|
|
20
|
+
import { isCreditCardSettingsGuard } from './payment-configurations/types/is-credit-card-settings.guard';
|
|
20
21
|
import * as i0 from "@angular/core";
|
|
21
22
|
import * as i1 from "../exceptions-handling/logger/logger.service";
|
|
22
23
|
import * as i2 from "./requests/initialize/initialize.service";
|
|
@@ -168,7 +169,10 @@ export class PaymentService {
|
|
|
168
169
|
this.fields = this.getFields();
|
|
169
170
|
this.form = this.formService.createForm(this.fields);
|
|
170
171
|
this.syncService.setup(this.form, this.fields, this.config);
|
|
171
|
-
return
|
|
172
|
+
return {
|
|
173
|
+
response: submitResponse,
|
|
174
|
+
nextAction: this.nextActionService.getNextAction(submitResponse),
|
|
175
|
+
};
|
|
172
176
|
}
|
|
173
177
|
setupInitialFieldValues() {
|
|
174
178
|
const fieldsToOverride = this.config.overrideFormFields;
|
|
@@ -210,6 +214,9 @@ export class PaymentService {
|
|
|
210
214
|
throw new Error('Should submit form first');
|
|
211
215
|
}
|
|
212
216
|
const sdkPaymentData = this.getSdkPaymentDataFromResponse(this.data);
|
|
217
|
+
const shouldHandleUserBackRedirectOnSdkSide = isGooglePaySettingsGuard(this.config)
|
|
218
|
+
? !!this.config.paymentMethodSettings?.useSdkHandlerForUserBackRedirect
|
|
219
|
+
: false;
|
|
213
220
|
return Promise.resolve({
|
|
214
221
|
data: sdkPaymentData.checkoutData,
|
|
215
222
|
sandbox: this.settingsService.isSandboxMode()
|
|
@@ -220,6 +227,7 @@ export class PaymentService {
|
|
|
220
227
|
submitResponse: isSubmitResponse(this.data) ? this.data : null,
|
|
221
228
|
summary: sdkPaymentData.summary,
|
|
222
229
|
locale: this.translateService.getCurrentLang(),
|
|
230
|
+
shouldHandleUserBackRedirectOnSdkSide,
|
|
223
231
|
});
|
|
224
232
|
}
|
|
225
233
|
getQrCode() {
|
|
@@ -326,8 +334,8 @@ export class PaymentService {
|
|
|
326
334
|
}
|
|
327
335
|
externalChangeFieldValue(name, value) {
|
|
328
336
|
const isFieldAllowedForExternalChange = fieldsAllowedToExternalChange.has(name);
|
|
329
|
-
const isExternalVault = this.config
|
|
330
|
-
this.config.
|
|
337
|
+
const isExternalVault = isCreditCardSettingsGuard(this.config) &&
|
|
338
|
+
this.config.paymentMethodSettings?.useExternalVault;
|
|
331
339
|
if (!isFieldAllowedForExternalChange || !isExternalVault)
|
|
332
340
|
return;
|
|
333
341
|
const formControl = this.form?.get(name);
|
|
@@ -555,4 +563,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
|
|
|
555
563
|
providedIn: 'root',
|
|
556
564
|
}]
|
|
557
565
|
}], ctorParameters: () => [{ type: i1.LoggerService }, { type: i2.InitializeService }, { type: i3.SubmitService }, { type: i4.SyncService }, { type: i5.FormService }, { type: i6.StatusService }, { type: i7.FinanceDetailsService }, { type: i8.CreditCardStateService }, { type: i9.NextActionService }, { type: i10.InitializeNextActionService }, { type: i11.ControlConfigService }, { type: i12.ThreeDsService }, { type: i13.FormMessagesService }, { type: i14.SettingsService }, { type: i15.CountryService }, { type: i16.CheckStatusActionCreator }, { type: i17.PrintInstructionService }, { type: i18.PaymentBehaviourService }, { type: i19.TranslateService }, { type: i20.UserBehaviourAnalyticsService }] });
|
|
558
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGF5bWVudC1jbGllbnQtY29yZS9zcmMvbGliL2NvcmUvcGF5bWVudC9wYXltZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFDZixNQUFNLEVBRU4sT0FBTyxFQUNQLElBQUksRUFDSixTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBcUIsU0FBUyxFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUVsRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQWM5RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2RUFBNkUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0ZBQWtGLENBQUM7QUFJbkgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFJakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFjaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBRy9FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxXQUFXLEVBQUUs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QXNCLENBQUMsZUFBZSxFQUN0Qyx1QkFBdUIsQ0FBQyxLQUFLLEVBQzdCO2dCQUNFLGFBQWEsRUFBRSxlQUFlLENBQUMsV0FBVzthQUMzQyxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FDckMsc0JBQXNCLENBQUMsV0FBVyxFQUNsQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQzdCO1lBQ0UsYUFBYSxFQUFFLGVBQWUsQ0FBQyxXQUFXO1NBQzNDLENBQ0YsQ0FBQztJQUNKLENBQUM7OEdBL3NCVSxjQUFjO2tIQUFkLGNBQWMsY0FGYixNQUFNOzsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgZmlsdGVyLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xTdGF0dXMsIEZvcm1Hcm91cCwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1Ym1pdFJlc3BvbnNlIH0gZnJvbSAnLi9yZXF1ZXN0cy9zdWJtaXQvcmVzcG9uc2Uvc3VibWl0LXJlc3BvbnNlLmNsYXNzJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi9mb3JtL2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBJbml0aWFsaXplUmVzcG9uc2UgfSBmcm9tICcuL3JlcXVlc3RzL2luaXRpYWxpemUvcmVzcG9uc2UvaW5pdGlhbGl6ZS1yZXNwb25zZS5jbGFzcyc7XG5pbXBvcnQgeyBJbml0aWFsaXplU2VydmljZSB9IGZyb20gJy4vcmVxdWVzdHMvaW5pdGlhbGl6ZS9pbml0aWFsaXplLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnLi9zdGF0dXMvc3RhdHVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTdWJtaXRTZXJ2aWNlIH0gZnJvbSAnLi9yZXF1ZXN0cy9zdWJtaXQvc3VibWl0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3luY1NlcnZpY2UgfSBmcm9tICcuL3JlcXVlc3RzL3N5bmMvc3luYy5zZXJ2aWNlJztcbmltcG9ydCB7IFN0YXR1c1NlcnZpY2UgfSBmcm9tICcuL3N0YXR1cy9zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBOZXh0QWN0aW9uU2VydmljZSB9IGZyb20gJy4vYWN0aW9ucy9uZXh0LWFjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEluaXRpYWxpemVOZXh0QWN0aW9uU2VydmljZSB9IGZyb20gJy4vaW5pdGlhbGl6ZS1hY3Rpb25zL2luaXRpYWxpemUtbmV4dC1hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDb250cm9sQ29uZmlnIH0gZnJvbSAnLi9mb3JtL2NvbnRyb2xzL2NvbnRyb2wtY29uZmlnJztcbmltcG9ydCB7IENvbnRyb2xDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9mb3JtL2NvbnRyb2xzL2NvbnRyb2wtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmluYW5jZURldGFpbHMgfSBmcm9tICcuL2ZpbmFuY2UtZGV0YWlscy9maW5hbmNlLWRldGFpbHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZpbmFuY2VEZXRhaWxzU2VydmljZSB9IGZyb20gJy4vZmluYW5jZS1kZXRhaWxzL2ZpbmFuY2UtZGV0YWlscy5zZXJ2aWNlJztcbmltcG9ydCB7IE5leHRBY3Rpb24gfSBmcm9tICcuL2FjdGlvbnMvbmV4dC1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFVzZXJCZWhhdmlvdXJBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi4vdXNlci1iZWhhdmlvdXItYW5hbHl0aWNzL3VzZXItYmVoYXZpb3VyLWFuYWx5dGljcy5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJCZWhhdmlvdXJFdmVudE5hbWUgfSBmcm9tICcuLi91c2VyLWJlaGF2aW91ci1hbmFseXRpY3MvdXNlci1iZWhhdmlvdXItZXZlbnQtbmFtZS5lbnVtJztcbmltcG9ydCB7IHVzZXJCZWhhdmlvdXJFdmVudFR5cGVzIH0gZnJvbSAnLi4vdXNlci1iZWhhdmlvdXItYW5hbHl0aWNzL3VzZXItYmVoYXZpb3VyLWV2ZW50L3VzZXItYmVoYXZpb3VyLWV2ZW50LXR5cGVzJztcbmltcG9ydCB7IGV2ZW50Q2F0ZWdvcmllcyB9IGZyb20gJy4uL3VzZXItYmVoYXZpb3VyLWFuYWx5dGljcy91c2VyLWJlaGF2aW91ci1ldmVudC91c2VyLWJlaGF2aW91ci1ldmVudC1jYXRlZ29yaWVzJztcbmltcG9ydCB7IFhwc1N1bW1hcnkgfSBmcm9tICcuL3hwcy1zdW1tYXJ5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJy4vZmllbGQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBheW1lbnRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9wYXltZW50LWNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IGlzU3VibWl0UmVzcG9uc2UgfSBmcm9tICcuL3JlcXVlc3RzL3N1Ym1pdC9pcy1zdWJtaXQtcmVzcG9uc2UuZnVuY3Rpb24nO1xuaW1wb3J0IHsgWHBzQm9vbGVhbiB9IGZyb20gJy4uL3hwcy1ib29sZWFuLmVudW0nO1xuaW1wb3J0IHsgU3RhdHVzUmVxdWVzdFBhcmFtcyB9IGZyb20gJy4vc3RhdHVzL3N0YXR1cy1yZXF1ZXN0L3N0YXR1cy1yZXF1ZXN0LXBhcmFtcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJy4vZm9ybS92YWxpZGF0b3JzL3ZhbGlkYXRpb24tZXJyb3JzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJbnB1dEV2ZW50TmFtZSB9IGZyb20gJy4vZm9ybS9pbnB1dC1ldmVudC5lbnVtJztcbmltcG9ydCB7IEZvcm1GaWVsZHNTdGF0dXMgfSBmcm9tICcuL2Zvcm0vZm9ybS1maWVsZHMtc3RhdHVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUaHJlZURzU2VydmljZSB9IGZyb20gJy4vdGhyZWUtZHMvdGhyZWUtZHMuc2VydmljZSc7XG5pbXBvcnQgeyBYcHNDb21tYW5kIH0gZnJvbSAnLi94cHMtY29tYW5kLmVudW0nO1xuaW1wb3J0IHsgQ3JlZGl0Q2FyZFN0YXRlU2VydmljZSB9IGZyb20gJy4vY3JlZGl0LWNhcmQtc3RhdGUvY3JlZGl0LWNhcmQtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBGaWVsZE5hbWVzIH0gZnJvbSAnLi9maWVsZC1uYW1lcy5lbnVtJztcbmltcG9ydCB7IEZvcm1TdGF0ZSB9IGZyb20gJy4vZm9ybS9mb3JtLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGb3JtTWVzc2FnZXNTZXJ2aWNlIH0gZnJvbSAnLi9mb3JtLW1lc3NhZ2VzL2Zvcm0tbWVzc2FnZXMuc2VydmljZSc7XG5pbXBvcnQgeyBYcHNNZXNzYWdlIH0gZnJvbSAnLi94cHMtbWVzc2FnZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2V0dGluZ3Mvc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBDb3VudHJ5U2VydmljZSB9IGZyb20gJy4uL2NvdW50cnkvY291bnRyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFNka1BheW1lbnRTeXN0ZW1zSW5pdGlhbERhdGEgfSBmcm9tICcuLi9zZGstcGF5bWVudC1zeXN0ZW1zL3Nkay1wYXltZW50LXN5c3RlbXMtaW5pdGlhbC1kYXRhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGb3JtUmVzcG9uc2UgfSBmcm9tICcuL2Zvcm0tcmVzcG9uc2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IENoZWNrU3RhdHVzQWN0aW9uQ3JlYXRvciB9IGZyb20gJy4vYWN0aW9ucy9jaGVjay1zdGF0dXMvY2hlY2stc3RhdHVzLmFjdGlvbi5jbGFzcyc7XG5pbXBvcnQgeyBDb250cm9sU3RhdHVzIH0gZnJvbSAnLi9mb3JtL2NvbnRyb2wtc3RhdHVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJbml0aWFsaXplZEZvcm0gfSBmcm9tICcuL2luaXRpYWxpemVkLWZvcm0uaW50ZWZhY2UnO1xuaW1wb3J0IHsgQ2FzaFBheW1lbnREYXRhIH0gZnJvbSAnLi9jYXNoLXBheW1lbnQtZGF0YS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUHJpbnRJbnN0cnVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi94c29sbGEtbnVtYmVyL2FwaS9wcmludC1pbnN0cnVjdGlvbi9wcmludC1pbnN0cnVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN5bmNSZXNwb25zZSB9IGZyb20gJy4vcmVxdWVzdHMvc3luYy9yZXNwb25zZS9zeW5jLXJlc3BvbnNlLmNsYXNzJztcbmltcG9ydCB7IEVycm9yVGFncyB9IGZyb20gJy4uL2V4Y2VwdGlvbnMtaGFuZGxpbmcvZXJyb3JzL2Vsay1lcnJvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IEJlaGF2aW91clN0cmF0ZWd5IH0gZnJvbSAnLi9wYXltZW50LWJlaGF2aW91ci9zdHJhdGVnaWVzL2JlaGF2aW91ci1zdHJhdGVneS5hYnN0cmFjdCc7XG5pbXBvcnQgeyBQYXltZW50QmVoYXZpb3VyU2VydmljZSB9IGZyb20gJy4vcGF5bWVudC1iZWhhdmlvdXIvcGF5bWVudC1iZWhhdmlvdXIuc2VydmljZSc7XG5pbXBvcnQgeyBmaWVsZHNBbGxvd2VkVG9PdmVycmlkZSB9IGZyb20gJy4vZm9ybS9vdmVycmlkZWQtZmllbGRzL2ZpZWxkcy1hbGxvd2VkLXRvLW92ZXJyaWRlJztcbmltcG9ydCB7IG92ZXJyaWRlRmllbGRDb25maWdzIH0gZnJvbSAnLi9mb3JtL292ZXJyaWRlZC1maWVsZHMvb3ZlcnJpZGUtZmllbGQtY29uZmlnJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9leGNlcHRpb25zLWhhbmRsaW5nL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUYWdnZWRFcnJvciB9IGZyb20gJy4uL2V4Y2VwdGlvbnMtaGFuZGxpbmcvZXJyb3JzJztcbmltcG9ydCB7IHVwZGF0ZUFmdGVyRXJyb3JSdWxlcyB9IGZyb20gJy4vdXBkYXRlLXN1Ym1pdC1yZXNwb25zZS91cGRhdGUtYWZ0ZXItZXJyb3ItcnVsZXMuY29uc3QnO1xuaW1wb3J0IHsgZmllbGRzQWxsb3dlZFRvRXh0ZXJuYWxDaGFuZ2UgfSBmcm9tICcuL2V4dGVybmFsLWNoYW5nZS1maWVsZHMuY29uc3QnO1xuaW1wb3J0IHsgY3JlZGl0Q2FyZFBheW1lbnRNZXRob2RJZCB9IGZyb20gJy4vY3JlZGl0LWNhcmQtcGF5bWVudC1tZXRob2RzLWlkLnZhcmlhYmxlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBheW1lbnRTZXJ2aWNlIHtcbiAgcHVibGljIGZvcm06IFVudHlwZWRGb3JtR3JvdXAgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgZ2V0IGZvcm1GaWVsZHNTdGF0dXMkKCk6IE9ic2VydmFibGU8Rm9ybUZpZWxkc1N0YXR1cz4ge1xuICAgIHJldHVybiB0aGlzLmZvcm1GaWVsZHNTdGF0dXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZmlsdGVyKEJvb2xlYW4pKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGF5bWVudEZvcm0kKCk6IE9ic2VydmFibGU8Rm9ybUNvbnRyb2xTdGF0dXMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BheW1lbnRGb3JtJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZm9ybVJlc3BvbnNlJCgpOiBPYnNlcnZhYmxlPEZvcm1SZXNwb25zZSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVJlc3BvbnNlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZm9ybVJlc3BvbnNlVmFsdWUoKTogRm9ybVJlc3BvbnNlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1SZXNwb25zZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGF0YTogSW5pdGlhbGl6ZVJlc3BvbnNlIHwgU3VibWl0UmVzcG9uc2UgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBmaW5hbmNlRGV0YWlsczogRmluYW5jZURldGFpbHMgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBmb2N1c0ZpZWxkTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZmllbGRzOiBGaWVsZFtdID0gW107XG4gIHByaXZhdGUgaXNTdWJtaXRBdHRlbXB0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjb25maWchOiBQYXltZW50Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBmb3JtRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYXltZW50Rm9ybSQgPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8Rm9ybUNvbnRyb2xTdGF0dXMgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmb3JtRmllbGRzU3RhdHVzU3ViamVjdCA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxGb3JtRmllbGRzU3RhdHVzIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1SZXNwb25zZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZvcm1SZXNwb25zZSB8IG51bGw+KFxuICAgIG51bGxcbiAgKTtcblxuICBwcml2YXRlIGlzU2F2aW5nTWV0aG9kTW9kZSA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbml0aWFsaXplU2VydmljZTogSW5pdGlhbGl6ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdWJtaXRTZXJ2aWNlOiBTdWJtaXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3luY1NlcnZpY2U6IFN5bmNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhdHVzU2VydmljZTogU3RhdHVzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbmFuY2VEZXRhaWxzU2VydmljZTogRmluYW5jZURldGFpbHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3JlZGl0Q2FyZFN0YXRlU2VydmljZTogQ3JlZGl0Q2FyZFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5leHRBY3Rpb25TZXJ2aWNlOiBOZXh0QWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluaXRpYWxpemVOZXh0QWN0aW9uU2VydmljZTogSW5pdGlhbGl6ZU5leHRBY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbENvbmZpZ1NlcnZpY2U6IENvbnRyb2xDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGhyZWVEc1NlcnZpY2U6IFRocmVlRHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybU1lc3NhZ2VzU2VydmljZTogRm9ybU1lc3NhZ2VzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY291bnRyeVNlcnZpY2U6IENvdW50cnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hlY2tTdGF0dXNBY3Rpb25DcmVhdG9yOiBDaGVja1N0YXR1c0FjdGlvbkNyZWF0b3IsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmludEluc3RydWN0aW9uU2VydmljZTogUHJpbnRJbnN0cnVjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXltZW50QmVoYXZpb3VyU2VydmljZTogUGF5bWVudEJlaGF2aW91clNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlckJlaGF2aW91ckFuYWx5dGljc1NlcnZpY2U6IFVzZXJCZWhhdmlvdXJBbmFseXRpY3NTZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZShcbiAgICBjb25maWc6IFBheW1lbnRDb25maWd1cmF0aW9uXG4gICk6IFByb21pc2U8SW5pdGlhbGl6ZWRGb3JtPiB7XG4gICAgdGhpcy5kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgdGhpcy5mb3JtRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHRoaXMuaXNTdWJtaXRBdHRlbXB0ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubGlzdGVuRmluYW5jZURldGFpbHMoKTtcblxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuZGF0YSA9IGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVNlcnZpY2UucmVxdWVzdChjb25maWcpO1xuXG4gICAgdGhpcy5pbml0aWFsaXplQmVoYXZpb3VyU3RyYXRlZ2llcygpO1xuXG4gICAgdGhpcy5lbWl0Rm9ybVJlc3BvbnNlKHRoaXMuZGF0YSk7XG5cbiAgICB0aGlzLmZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XG4gICAgdGhpcy5zZXR1cEluaXRpYWxGaWVsZFZhbHVlcygpO1xuXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtU2VydmljZS5jcmVhdGVGb3JtKHRoaXMuZmllbGRzKTtcblxuICAgIHRoaXMudXBkYXRlUGlkQ29uZmlnKCk7XG4gICAgdGhpcy5zZXR1cFN5bmNTZXJ2aWNlKHRoaXMuZm9ybSwgdGhpcy5maWVsZHMsIGNvbmZpZyk7XG4gICAgdGhpcy5saXN0ZW5Gb3JtU3RhdHVzQ2hhbmdlcyh0aGlzLmZvcm0pO1xuXG4gICAgY29uc3QgaXNOZWVkQXV0b1N1Ym1pdCA9IHRoaXMuY2FuQXV0b1N1Ym1pdCgpO1xuXG4gICAgaWYgKGlzTmVlZEF1dG9TdWJtaXQpIHtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb24gPSBhd2FpdCB0aGlzLnN1Ym1pdCgpO1xuXG4gICAgICBpZiAobmV4dEFjdGlvbikge1xuICAgICAgICB0aGlzLm5leHRBY3Rpb25TZXJ2aWNlLmVtaXRGbG93VXBkYXRlcyhuZXh0QWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmVtaXRGaW5hbmNlRGV0YWlscyh0aGlzLmRhdGEucGF5bWVudEZvcm0/LnN1bW1hcnkpO1xuICAgIHRoaXMuZW1pdEZvcm1GaWVsZHNTdGF0dXModGhpcy5mb3JtKTtcblxuICAgIHRoaXMuZW1pdEZvcm1NZXNzYWdlcyh0aGlzLmdldEluaXRpYWxpemVNZXNzYWdlcygpKTtcblxuICAgIHJldHVybiB7XG4gICAgICBmaWVsZHM6IHRoaXMuZmllbGRzLmZpbHRlcihcbiAgICAgICAgKGZpZWxkOiBGaWVsZCkgPT4gZmllbGQ/LmlzVmlzaWJsZSA9PT0gWHBzQm9vbGVhbi50cnVlXG4gICAgICApLFxuICAgICAgaXNGb3JtQXV0b1N1Ym1pdHRlZDogaXNOZWVkQXV0b1N1Ym1pdCxcbiAgICAgIG5leHRBY3Rpb246IHRoaXMuaW5pdGlhbGl6ZU5leHRBY3Rpb25TZXJ2aWNlLmdldE5leHRBY3Rpb24odGhpcy5kYXRhKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN1Ym1pdCgpOiBQcm9taXNlPE5leHRBY3Rpb24gfCBudWxsIHwgdm9pZD4ge1xuICAgIGlmICghdGhpcy5mb3JtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Zvcm0gaXMgZW1wdHkhJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMubG9nU3VibWl0QXR0ZW1wdCgpO1xuICAgICAgdGhpcy5pc1N1Ym1pdEF0dGVtcHRlZCA9IHRydWU7XG4gICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgdGhpcy5lbWl0Rm9ybUZpZWxkc1N0YXR1cyh0aGlzLmZvcm0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nU3VibWl0KCk7XG5cbiAgICB0aGlzLmlzU2F2aW5nTWV0aG9kTW9kZSA9IHRoaXMuZmllbGRzLnNvbWUoXG4gICAgICAoeyBuYW1lLCB2YWx1ZSB9KSA9PlxuICAgICAgICBuYW1lID09PSAnc2F2ZVBzQWNjb3VudE9ubHknICYmIHZhbHVlID09PSBYcHNCb29sZWFuLnRydWVcbiAgICApO1xuICAgIGNvbnN0IHN1Ym1pdFJlc3BvbnNlID0gYXdhaXQgdGhpcy5zdWJtaXRTZXJ2aWNlLnJlcXVlc3QoXG4gICAgICB0aGlzLmZpZWxkcyxcbiAgICAgIHRoaXMuZm9ybSxcbiAgICAgIHRoaXMuY29uZmlnXG4gICAgKTtcblxuICAgIHRoaXMuaGFuZGxlU3VibWl0V2l0aEVycm9ycyhzdWJtaXRSZXNwb25zZSk7XG5cbiAgICB0aGlzLmRhdGEgPSBzdWJtaXRSZXNwb25zZTtcbiAgICB0aGlzLmluaXRpYWxpemVCZWhhdmlvdXJTdHJhdGVnaWVzKCk7XG5cbiAgICB0aGlzLmVtaXRGb3JtUmVzcG9uc2UodGhpcy5kYXRhKTtcblxuICAgIGlmICghdGhpcy5pc1NhdmluZ01ldGhvZE1vZGUpIHtcbiAgICAgIHRoaXMuZW1pdEZpbmFuY2VEZXRhaWxzKHN1Ym1pdFJlc3BvbnNlLnN1bW1hcnksIGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0Rm9ybU1lc3NhZ2VzKHN1Ym1pdFJlc3BvbnNlLm1lc3NhZ2VzKTtcblxuICAgIC8vIEhhbmRsZSAzZHMgZmxvd1xuICAgIGlmIChcbiAgICAgIHN1Ym1pdFJlc3BvbnNlLmN1cnJlbnRDb21tYW5kID09PSBYcHNDb21tYW5kLmNyZWF0ZSAmJlxuICAgICAgc3VibWl0UmVzcG9uc2UucGFyYW1ldGVycy50aHJlZURTRm9ybVxuICAgICkge1xuICAgICAgdGhpcy5ydW5UaHJlZURzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5maWVsZHMgPSB0aGlzLmdldEZpZWxkcygpO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybVNlcnZpY2UuY3JlYXRlRm9ybSh0aGlzLmZpZWxkcyk7XG5cbiAgICB0aGlzLmxpc3RlbkZvcm1TdGF0dXNDaGFuZ2VzKHRoaXMuZm9ybSk7XG4gICAgdGhpcy5zeW5jU2VydmljZS5zZXR1cCh0aGlzLmZvcm0sIHRoaXMuZmllbGRzLCB0aGlzLmNvbmZpZyk7XG5cbiAgICByZXR1cm4gdGhpcy5uZXh0QWN0aW9uU2VydmljZS5nZXROZXh0QWN0aW9uKHN1Ym1pdFJlc3BvbnNlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdWJtaXRXaXRoRmllbGRzKGZpZWxkcz86IEZpZWxkW10pOiBQcm9taXNlPFN1Ym1pdFJlc3BvbnNlPiB7XG4gICAgaWYgKCF0aGlzLmZvcm0pIHtcbiAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcihcbiAgICAgICAgbmV3IFRhZ2dlZEVycm9yKCdzdWJtaXQgZXJyb3I6IHRyeWluZyB0byBzdWJtaXQgd2l0aCBubyBmb3JtJywgW1xuICAgICAgICAgIEVycm9yVGFncy5HT09HTEVQQVksXG4gICAgICAgIF0pXG4gICAgICApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb3JtIGlzIGVtcHR5IScpO1xuICAgIH1cblxuICAgIHRoaXMuaXNTYXZpbmdNZXRob2RNb2RlID0gdGhpcy5maWVsZHMuc29tZShcbiAgICAgICh7IG5hbWUsIHZhbHVlIH0pID0+XG4gICAgICAgIG5hbWUgPT09ICdzYXZlUHNBY2NvdW50T25seScgJiYgdmFsdWUgPT09IFhwc0Jvb2xlYW4udHJ1ZVxuICAgICk7XG4gICAgY29uc3Qgc3VibWl0UmVzcG9uc2UgPSBhd2FpdCB0aGlzLnN1Ym1pdFNlcnZpY2UucmVxdWVzdChcbiAgICAgIGZpZWxkcyA/PyB0aGlzLmZpZWxkcyxcbiAgICAgIHRoaXMuZm9ybSxcbiAgICAgIHRoaXMuY29uZmlnXG4gICAgKTtcblxuICAgIHRoaXMuZGF0YSA9IHN1Ym1pdFJlc3BvbnNlO1xuICAgIHRoaXMuZW1pdEZvcm1SZXNwb25zZSh0aGlzLmRhdGEpO1xuXG4gICAgaWYgKCF0aGlzLmlzU2F2aW5nTWV0aG9kTW9kZSkge1xuICAgICAgdGhpcy5lbWl0RmluYW5jZURldGFpbHMoc3VibWl0UmVzcG9uc2Uuc3VtbWFyeSwgZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmVtaXRGb3JtTWVzc2FnZXMoc3VibWl0UmVzcG9uc2UubWVzc2FnZXMpO1xuXG4gICAgdGhpcy5maWVsZHMgPSB0aGlzLmdldEZpZWxkcygpO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybVNlcnZpY2UuY3JlYXRlRm9ybSh0aGlzLmZpZWxkcyk7XG5cbiAgICB0aGlzLnN5bmNTZXJ2aWNlLnNldHVwKHRoaXMuZm9ybSwgdGhpcy5maWVsZHMsIHRoaXMuY29uZmlnKTtcblxuICAgIHJldHVybiBzdWJtaXRSZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXR1cEluaXRpYWxGaWVsZFZhbHVlcygpOiB2b2lkIHtcbiAgICBjb25zdCBmaWVsZHNUb092ZXJyaWRlID0gdGhpcy5jb25maWcub3ZlcnJpZGVGb3JtRmllbGRzO1xuICAgIGlmICghZmllbGRzVG9PdmVycmlkZSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgb3ZlcnJpZGFibGVOYW1lcyA9IG5ldyBTZXQoXG4gICAgICBPYmplY3Qua2V5cyhmaWVsZHNUb092ZXJyaWRlKS5maWx0ZXIoKG5hbWUpID0+XG4gICAgICAgIGZpZWxkc0FsbG93ZWRUb092ZXJyaWRlLmhhcyhuYW1lIGFzIEZpZWxkTmFtZXMpXG4gICAgICApXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgZmllbGQgb2YgdGhpcy5maWVsZHMpIHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGZpZWxkLm5hbWU7XG4gICAgICBpZiAoIW92ZXJyaWRhYmxlTmFtZXMuaGFzKGZpZWxkTmFtZSkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBjb25maWcgPSBvdmVycmlkZUZpZWxkQ29uZmlnc1tmaWVsZE5hbWVdO1xuICAgICAgaWYgKCFjb25maWcpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBvdmVycmlkZGVuVmFsdWUgPSBmaWVsZHNUb092ZXJyaWRlW2ZpZWxkTmFtZV0/LmluaXRpYWxWYWx1ZTtcblxuICAgICAgZmllbGQudmFsdWUgPSBTdHJpbmcoXG4gICAgICAgIGNvbmZpZy52YWxpZGF0b3Iob3ZlcnJpZGRlblZhbHVlKVxuICAgICAgICAgID8gb3ZlcnJpZGRlblZhbHVlXG4gICAgICAgICAgOiBjb25maWcuZGVmYXVsdFZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWVsZHMoKTogRmllbGRbXSB7XG4gICAgaWYgKHRoaXMuZGF0YSBpbnN0YW5jZW9mIFN1Ym1pdFJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmZpZWxkcyA/PyBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhPy5wYXltZW50Rm9ybT8uZmllbGRzID8/IFtdO1xuICB9XG5cbiAgcHVibGljIGdldENvbnRyb2xTdGF0dXMobmFtZTogRmllbGROYW1lcyk6IENvbnRyb2xTdGF0dXMgfCBudWxsIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtPy5nZXQobmFtZSk7XG4gICAgaWYgKCFjb250cm9sKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIGVycm9yczogY29udHJvbC5lcnJvcnMsXG4gICAgICBzdGF0dXM6IGNvbnRyb2wuc3RhdHVzLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SW5pdGlhbERhdGFGb3JTZGtQYXltZW50U3lzdGVtcygpOiBQcm9taXNlPFNka1BheW1lbnRTeXN0ZW1zSW5pdGlhbERhdGE+IHtcbiAgICBpZiAoIXRoaXMuZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaG91bGQgc3VibWl0IGZvcm0gZmlyc3QnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZGtQYXltZW50RGF0YSA9IHRoaXMuZ2V0U2RrUGF5bWVudERhdGFGcm9tUmVzcG9uc2UodGhpcy5kYXRhKTtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgZGF0YTogc2RrUGF5bWVudERhdGEuY2hlY2tvdXREYXRhLFxuICAgICAgc2FuZGJveDogdGhpcy5zZXR0aW5nc1NlcnZpY2UuaXNTYW5kYm94TW9kZSgpXG4gICAgICAgID8gWHBzQm9vbGVhbi50cnVlXG4gICAgICAgIDogWHBzQm9vbGVhbi5mYWxzZSxcbiAgICAgIGNvdW50cnk6IHRoaXMuY291bnRyeVNlcnZpY2UuZ2V0Q291bnRyeSgpLFxuICAgICAgZmllbGRzOiBzZGtQYXltZW50RGF0YS5maWVsZHMsXG4gICAgICBzdWJtaXRSZXNwb25zZTogaXNTdWJtaXRSZXNwb25zZSh0aGlzLmRhdGEpID8gdGhpcy5kYXRhIDogbnVsbCxcbiAgICAgIHN1bW1hcnk6IHNka1BheW1lbnREYXRhLnN1bW1hcnksXG4gICAgICBsb2NhbGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXRDdXJyZW50TGFuZygpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFFyQ29kZSgpOiBzdHJpbmcge1xuICAgIGlmICghaXNTdWJtaXRSZXNwb25zZSh0aGlzLmRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBzdWJtaXQgZm9ybSBmaXJzdCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRhdGEucGFyYW1ldGVycy5mb3JtLnFyLnRpdGxlO1xuICB9XG5cbiAgcHVibGljIGdldENhc2hQYXltZW50RGF0YSgpOiBDYXNoUGF5bWVudERhdGEge1xuICAgIGlmICghaXNTdWJtaXRSZXNwb25zZSh0aGlzLmRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBzdWJtaXQgZm9ybSBmaXJzdCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNhc2hJbnN0cnVjdGlvbkZpZWxkID0gdGhpcy5kYXRhLmZpZWxkcy5maW5kKFxuICAgICAgKGZpZWxkKSA9PiBmaWVsZC5uYW1lID09PSAncGF5bWVudF9pbnN0cnVjdGlvbidcbiAgICApO1xuXG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgaXNDYXNoUGF5bWVudE1ldGhvZDogISFjYXNoSW5zdHJ1Y3Rpb25GaWVsZCxcbiAgICAgIHhzb2xsYU51bWJlcjogdGhpcy5kYXRhLnhzb2xsYU51bWJlci5hY2NvdW50WHNvbGxhLFxuICAgICAgcGlkOiB0aGlzLmRhdGEucGFyYW1ldGVycy5waWQsXG4gICAgICBwdWJsaWNJZDogdGhpcy5kYXRhLnBhcmFtZXRlcnMucHVibGljX2lkLFxuICAgICAgdGl0bGU6IHRoaXMuZGF0YS5wYXJhbWV0ZXJzLnRpdGxlLFxuICAgICAgcHJvamVjdE5hbWU6IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnByb2plY3QubmFtZSxcbiAgICAgIGluc3RydWN0aW9uOiBjYXNoSW5zdHJ1Y3Rpb25GaWVsZD8udGl0bGUsXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgcHJpbnRVcmw6IHRoaXMucHJpbnRJbnN0cnVjdGlvblNlcnZpY2UuZ2V0UHJpbnRJbnN0cnVjdGlvblVybChwYXJhbXMpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0UGlkKCk6IG51bWJlciB8IG51bGwge1xuICAgIGlmICh0aGlzLmRhdGEgaW5zdGFuY2VvZiBTdWJtaXRSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5wYXJhbWV0ZXJzLnBpZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhIGluc3RhbmNlb2YgSW5pdGlhbGl6ZVJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhLnBheW1lbnRGb3JtPy5waWQgPz8gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdWJtaXRCdXR0b25UZXh0KCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmRhdGEgaW5zdGFuY2VvZiBTdWJtaXRSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5wYXJhbWV0ZXJzLmJ1eURhdGEudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSBpbnN0YW5jZW9mIEluaXRpYWxpemVSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5wYXltZW50Rm9ybT8uYnV5RGF0YS52YWx1ZSA/PyBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlKGZpZWxkOiBGaWVsZCk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHtcbiAgICBjb25zdCBzeW5jRXJyb3JzID0gdGhpcy5zeW5jU2VydmljZS5nZXRTeW5jVmFsaWRhdGlvbkVycm9ycyhmaWVsZCk7XG5cbiAgICBpZiAoc3luY0Vycm9ycykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzeW5jRXJyb3JzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zeW5jU2VydmljZS52YWxpZGF0ZShmaWVsZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2FsY3VsYXRlRmllbGQoXG4gICAgY2hhbmdlZEZpZWxkOiBGaWVsZCxcbiAgICBmaWVsZHM6IEZpZWxkW11cbiAgKTogUHJvbWlzZTxTeW5jUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5zeW5jU2VydmljZS5yZXF1ZXN0KGNoYW5nZWRGaWVsZCwgZmllbGRzLCBuZXcgRm9ybUdyb3VwKHt9KSk7XG4gIH1cblxuICBwdWJsaWMgcnVuVGhyZWVEcygpOiB2b2lkIHtcbiAgICBpZiAoIWlzU3VibWl0UmVzcG9uc2UodGhpcy5kYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaG91bGQgc3VibWl0IGZvcm0gZmlyc3QnKTtcbiAgICB9XG5cbiAgICB0aGlzLnRocmVlRHNTZXJ2aWNlLmNoZWNrVGhyZWVEcyh0aGlzLmRhdGEpO1xuICB9XG5cbiAgcHVibGljIGdldEZpbmFuY2VEZXRhaWxzKCk6IEZpbmFuY2VEZXRhaWxzIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZmluYW5jZURldGFpbHM7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRmllbGRGb3JtU3RhdGUoZmllbGROYW1lOiBzdHJpbmcsIGZvcm1TdGF0ZTogRm9ybVN0YXRlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgdGhpcy5mb3JtU2VydmljZS51cGRhdGVGaWVsZEZvcm1TdGF0ZShcbiAgICAgICAgdGhpcy5mb3JtLFxuICAgICAgICB0aGlzLmZpZWxkcyxcbiAgICAgICAgZmllbGROYW1lLFxuICAgICAgICBmb3JtU3RhdGVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEZpZWxkRm9ybVN0YXRlKGZpZWxkTmFtZTogRmllbGROYW1lcyk6IEZvcm1TdGF0ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmZvcm1TZXJ2aWNlLmdldEZpZWxkRm9ybVN0YXRlKGZpZWxkTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U3RhdHVzKCk6IFByb21pc2U8U3RhdHVzPiB7XG4gICAgaWYgKCFpc1N1Ym1pdFJlc3BvbnNlKHRoaXMuZGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2hvdWxkIHN1Ym1pdCBmb3JtIGZpcnN0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zOiBTdGF0dXNSZXF1ZXN0UGFyYW1zID0ge1xuICAgICAgcGlkOiB0aGlzLmNvbmZpZy5wYXltZW50TWV0aG9kSWQsXG4gICAgICBpbnZvaWNlOiBwYXJzZUludCh0aGlzLmRhdGEuZml4SW52b2ljZSA/PyAnJyksXG4gICAgICBzaWduYXR1cmU6IHRoaXMuZGF0YS5zaWduYXR1cmUgPz8gJycsXG4gICAgICBsb2NhbGU6XG4gICAgICAgIHRoaXMuZGF0YS5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT09ICdsb2NhbGUnKT8udmFsdWUgPz9cbiAgICAgICAgJ2VuJyxcbiAgICAgIGlzU2F2ZVBheW1lbnRBY2NvdW50OiB0aGlzLmlzU2F2aW5nTWV0aG9kTW9kZVxuICAgICAgICA/IFhwc0Jvb2xlYW4udHJ1ZVxuICAgICAgICA6IFhwc0Jvb2xlYW4uZmFsc2UsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNTZXJ2aWNlLmdldFN0YXR1cyhwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RlbkZpbmFsU3RhdHVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaW52b2ljZSB9ID0gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcblxuICAgIHRoaXMuc3RhdHVzU2VydmljZVxuICAgICAgLmxpc3RlbkZpbmFsU3RhdHVzKGludm9pY2UgYXMgdW5rbm93biBhcyBudW1iZXIpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubmV4dEFjdGlvblNlcnZpY2UuZW1pdEZsb3dVcGRhdGVzKFxuICAgICAgICAgIHRoaXMuY2hlY2tTdGF0dXNBY3Rpb25DcmVhdG9yLmdldEFjdGlvbkRhdGEoKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmllbGRDb25maWcoZmllbGQ6IEZpZWxkKTogQ29udHJvbENvbmZpZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xDb25maWdTZXJ2aWNlLmdldENvbmZpZyhmaWVsZCk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlRmllbGRWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZm9ybT8uZ2V0KG5hbWUpO1xuICAgIGZvcm1Db250cm9sPy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZXh0ZXJuYWxDaGFuZ2VGaWVsZFZhbHVlKG5hbWU6IEZpZWxkTmFtZXMsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpc0ZpZWxkQWxsb3dlZEZvckV4dGVybmFsQ2hhbmdlID1cbiAgICAgIGZpZWxkc0FsbG93ZWRUb0V4dGVybmFsQ2hhbmdlLmhhcyhuYW1lKTtcblxuICAgIGNvbnN0IGlzRXh0ZXJuYWxWYXVsdCA9XG4gICAgICB0aGlzLmNvbmZpZy5wYXltZW50TWV0aG9kU2V0dGluZ3M/LnVzZUV4dGVybmFsVmF1bHQgJiZcbiAgICAgIHRoaXMuY29uZmlnLnBheW1lbnRNZXRob2RJZCA9PT0gY3JlZGl0Q2FyZFBheW1lbnRNZXRob2RJZDtcblxuICAgIGlmICghaXNGaWVsZEFsbG93ZWRGb3JFeHRlcm5hbENoYW5nZSB8fCAhaXNFeHRlcm5hbFZhdWx0KSByZXR1cm47XG5cbiAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZm9ybT8uZ2V0KG5hbWUpO1xuICAgIGZvcm1Db250cm9sPy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlRmllbGRTdGF0ZShuYW1lOiBzdHJpbmcsIHN0YXRlOiBJbnB1dEV2ZW50TmFtZSk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5mb3JtPy5nZXQobmFtZSk7XG5cbiAgICBpZiAoIXRoaXMuZm9ybSB8fCAhZm9ybUNvbnRyb2wpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICBjYXNlIElucHV0RXZlbnROYW1lLmJsdXI6IHtcbiAgICAgICAgZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmZvY3VzRmllbGROYW1lID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIElucHV0RXZlbnROYW1lLmZvY3VzOiB7XG4gICAgICAgIGZvcm1Db250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmZvY3VzRmllbGROYW1lID0gbmFtZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0Rm9ybUZpZWxkc1N0YXR1cyh0aGlzLmZvcm0pO1xuICB9XG5cbiAgcHVibGljIGFkZEV4dHJhRmllbGQobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaXNIYXZlRmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLm5hbWUgPT09IG5hbWU7XG4gICAgfSk7XG5cbiAgICBpZiAoaXNIYXZlRmllbGQpIHtcbiAgICAgIHRoaXMuZmllbGRzID0gdGhpcy5maWVsZHMubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICBpZiAoZmllbGQubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIGZpZWxkLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZCA9IHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICB0aXRsZTogJycsXG4gICAgICB0eXBlOiAndGV4dCcsXG4gICAgICBleGFtcGxlOiAnJyxcbiAgICAgIGlzTWFuZGF0b3J5OiBYcHNCb29sZWFuLnRydWUsXG4gICAgICBpc1Zpc2libGU6IFhwc0Jvb2xlYW4uZmFsc2UsXG4gICAgfSBhcyBGaWVsZDtcblxuICAgIHRoaXMuZmllbGRzLnB1c2goZmllbGQpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95QmVoYXZpb3VyU3RyYXRlZ2llcyh0aGlzLmNvbmZpZyk7XG5cbiAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgIHRoaXMuZmluYW5jZURldGFpbHMgPSBudWxsO1xuICAgIHRoaXMuZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWVsZHMgPSBbXTtcbiAgICB0aGlzLmZvcm1EZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG5cbiAgICB0aGlzLnRocmVlRHNTZXJ2aWNlLnN0b3BDaGVja2luZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0RmluYW5jZURldGFpbHMoc3VtbWFyeT86IFhwc1N1bW1hcnksIG5lZWRMb2dDYXJ0ID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMuZmluYW5jZURldGFpbHNTZXJ2aWNlLmVtaXRXaXRoU3VtbWFyeShzdW1tYXJ5LCBuZWVkTG9nQ2FydCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDcmVkaXRDYXJkU3RhdGUoe1xuICAgIGlkQ2FyZFR5cGUsXG4gICAgY2FyZEJpbkNvdW50cnksXG4gIH06IHtcbiAgICBpZENhcmRUeXBlOiBzdHJpbmc7XG4gICAgY2FyZEJpbkNvdW50cnk/OiBzdHJpbmc7XG4gIH0pOiB2b2lkIHtcbiAgICB0aGlzLmNyZWRpdENhcmRTdGF0ZVNlcnZpY2UuZW1pdCh7IGlkQ2FyZFR5cGUsIGNhcmRCaW5Db3VudHJ5IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Rm9ybUZpZWxkc1N0YXR1cyhmb3JtOiBVbnR5cGVkRm9ybUdyb3VwKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUZpZWxkc1N0YXR1czogRm9ybUZpZWxkc1N0YXR1cyA9IHt9O1xuXG4gICAgT2JqZWN0LmtleXMoZm9ybS5jb250cm9scykuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm0uY29udHJvbHNbbmFtZV07XG4gICAgICBmb3JtRmllbGRzU3RhdHVzW25hbWVdID0ge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB2YWxpZGF0aW9uU3RhdHVzOiBjb250cm9sLnN0YXR1cyxcbiAgICAgICAgZXJyb3JzOiBjb250cm9sLmVycm9ycyxcbiAgICAgICAgaXNGb2N1c2VkOiB0aGlzLmZvY3VzRmllbGROYW1lID09PSBuYW1lLFxuICAgICAgICBpc1RvdWNoZWQ6IGNvbnRyb2wudG91Y2hlZCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1GaWVsZHNTdGF0dXNTdWJqZWN0Lm5leHQoZm9ybUZpZWxkc1N0YXR1cyk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRGb3JtTWVzc2FnZXMobWVzc2FnZXM/OiBYcHNNZXNzYWdlW10pOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1NZXNzYWdlc1NlcnZpY2UuZW1pdE9uUmVzcG9uc2UobWVzc2FnZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFN5bmNTZXJ2aWNlKFxuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXAsXG4gICAgZmllbGRzOiBGaWVsZFtdLFxuICAgIGNvbmZpZzogUGF5bWVudENvbmZpZ3VyYXRpb25cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5zeW5jU2VydmljZS5zZXR1cChmb3JtLCBmaWVsZHMsIGNvbmZpZyk7XG4gICAgdGhpcy5zeW5jU2VydmljZS5kYXRhJFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5lbWl0RmluYW5jZURldGFpbHMocmVzcG9uc2Uuc3VtbWFyeSk7XG4gICAgICAgIHRoaXMuZW1pdEZvcm1NZXNzYWdlcyhyZXNwb25zZS5tZXNzYWdlcyk7XG4gICAgICAgIHRoaXMuZW1pdEZvcm1SZXNwb25zZShyZXNwb25zZSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuc3luY1NlcnZpY2UuZmllbGRBc3luY1ZhbGlkYXRpb24kXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChmaWVsZEFzeW5jVmFsaWRhdGlvbikgPT4ge1xuICAgICAgICBzd2l0Y2ggKGZpZWxkQXN5bmNWYWxpZGF0aW9uLmZpZWxkLm5hbWUpIHtcbiAgICAgICAgICBjYXNlIEZpZWxkTmFtZXMuY2FyZE51bWJlcjpcbiAgICAgICAgICAgIHRoaXMuZW1pdENyZWRpdENhcmRTdGF0ZSh7XG4gICAgICAgICAgICAgIGlkQ2FyZFR5cGU6IGZpZWxkQXN5bmNWYWxpZGF0aW9uLnJlc3BvbnNlLnBhcmFtZXRlcnMuaWRDYXJkVHlwZSxcbiAgICAgICAgICAgICAgY2FyZEJpbkNvdW50cnk6XG4gICAgICAgICAgICAgICAgZmllbGRBc3luY1ZhbGlkYXRpb24ucmVzcG9uc2UucGFyYW1ldGVycy5jYXJkQmluQ291bnRyeSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRmluYW5jZURldGFpbHMoKTogdm9pZCB7XG4gICAgdGhpcy5maW5hbmNlRGV0YWlsc1NlcnZpY2UuZGF0YSRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKGZpbmFuY2VEZXRhaWxzKSA9PiAodGhpcy5maW5hbmNlRGV0YWlscyA9IGZpbmFuY2VEZXRhaWxzKSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvcm1TdGF0dXNDaGFuZ2VzKGZvcm06IFVudHlwZWRGb3JtR3JvdXApOiB2b2lkIHtcbiAgICBmb3JtLnN0YXR1c0NoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmZvcm1EZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChzdGF0dXM6IEZvcm1Db250cm9sU3RhdHVzKSA9PiB7XG4gICAgICAgIHRoaXMuZW1pdEZvcm1GaWVsZHNTdGF0dXMoZm9ybSk7XG4gICAgICAgIHRoaXMuX3BheW1lbnRGb3JtJC5uZXh0KHN0YXR1cyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qXG4gICAqIGluIGNhc2UgdGhlIGZvcm0gcGlkIGNoYW5nZXMgZGVzcGl0ZSB0aGUgb25lIHBhc3NlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb25cbiAgICogICovXG4gIHByaXZhdGUgdXBkYXRlUGlkQ29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRQaWQgPSB0aGlzLmdldFBpZCgpO1xuICAgIGlmIChjdXJyZW50UGlkKSB7XG4gICAgICB0aGlzLmNvbmZpZy5wYXltZW50TWV0aG9kSWQgPSBjdXJyZW50UGlkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdEZvcm1SZXNwb25zZShkYXRhOiBGb3JtUmVzcG9uc2VbJ2RhdGEnXSk6IHZvaWQge1xuICAgIGxldCB0eXBlOiBGb3JtUmVzcG9uc2VbJ3R5cGUnXTtcbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEluaXRpYWxpemVSZXNwb25zZSkge1xuICAgICAgdHlwZSA9ICdpbml0aWFsaXplJztcbiAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBTdWJtaXRSZXNwb25zZSkge1xuICAgICAgdHlwZSA9ICdzdWJtaXQnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlID0gJ3N5bmMnO1xuICAgIH1cbiAgICB0aGlzLl9mb3JtUmVzcG9uc2UkLm5leHQoe1xuICAgICAgdHlwZSxcbiAgICAgIGRhdGEsXG4gICAgICB0b2tlbjogdGhpcy5zZXR0aW5nc1NlcnZpY2UudG9rZW4sXG4gICAgICBpc1NhbmRib3g6IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmlzU2FuZGJveE1vZGUoKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5pdGlhbGl6ZU1lc3NhZ2VzKCk6IFhwc01lc3NhZ2VbXSB7XG4gICAgY29uc3QgbWVzc2FnZXMgPSAodGhpcy5kYXRhIGFzIEluaXRpYWxpemVSZXNwb25zZSkucGF5bWVudEZvcm0/Lm1lc3NhZ2VzO1xuICAgIGNvbnN0IGtvcmVhTm90aWZpY2F0aW9uID0gKHRoaXMuZGF0YSBhcyBJbml0aWFsaXplUmVzcG9uc2UpLnBheW1lbnRGb3JtXG4gICAgICA/LmtvcmVhTm90aWZpY2F0aW9uO1xuICAgIGlmIChrb3JlYU5vdGlmaWNhdGlvbikge1xuICAgICAgbWVzc2FnZXM/LnB1c2goeyBjb2RlOiAnMCcsIG1lc3NhZ2U6IGtvcmVhTm90aWZpY2F0aW9uPy50aXRsZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VzID8/IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5BdXRvU3VibWl0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5kYXRhIGFzIEluaXRpYWxpemVSZXNwb25zZTtcbiAgICBpZiAoIXJlc3BvbnNlLnBheW1lbnRGb3JtKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgaXNSZWRpcmVjdE1ldGhvZCA9IHJlc3BvbnNlLnBheW1lbnRGb3JtLmlzQ2hlY2tvdXQ7XG4gICAgY29uc3QgY2FuU2tpcEZvcm0gPSByZXNwb25zZS5wYXltZW50Rm9ybS5za2lwRm9ybTtcblxuICAgIGNvbnN0IGlzU3VpdGFibGVCeVN0cmF0ZWd5ID0gdGhpcy5hdXRvU3VibWl0QmVoYXZpb3VyU3RyYXRlZ2llcyhcbiAgICAgIHRoaXMuY29uZmlnXG4gICAgKTtcblxuICAgIHJldHVybiAoIWlzUmVkaXJlY3RNZXRob2QgJiYgY2FuU2tpcEZvcm0pIHx8IGlzU3VpdGFibGVCeVN0cmF0ZWd5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZGtQYXltZW50RGF0YUZyb21SZXNwb25zZShcbiAgICBkYXRhOiBTdWJtaXRSZXNwb25zZSB8IEluaXRpYWxpemVSZXNwb25zZVxuICApOiB7XG4gICAgY2hlY2tvdXREYXRhOiBzdHJpbmcgfCBudWxsO1xuICAgIGZpZWxkczogRmllbGRbXTtcbiAgICBzdW1tYXJ5OiBYcHNTdW1tYXJ5IHwgbnVsbDtcbiAgfSB7XG4gICAgaWYgKGlzU3VibWl0UmVzcG9uc2UoZGF0YSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoZWNrb3V0RGF0YTogZGF0YS5wYXJhbWV0ZXJzPy5jaGVja291dC5kYXRhLmRhdGEsXG4gICAgICAgIGZpZWxkczogZGF0YS5maWVsZHMsXG4gICAgICAgIHN1bW1hcnk6IGRhdGEuc3VtbWFyeSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrb3V0RGF0YTogbnVsbCxcbiAgICAgIGZpZWxkczogZGF0YS5wYXltZW50Rm9ybT8uZmllbGRzID8/IFtdLFxuICAgICAgc3VtbWFyeTogZGF0YS5wYXltZW50Rm9ybT8uc3VtbWFyeSA/PyBudWxsLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVCZWhhdmlvdXJTdHJhdGVnaWVzKCk6IHZvaWQge1xuICAgIGNvbnN0IGJlaGF2aW91clN0cmF0ZWdpZXMgPVxuICAgICAgdGhpcy5wYXltZW50QmVoYXZpb3VyU2VydmljZS5nZXRBcHBsaWNhYmxlQmVoYXZpb3VyU3RyYXRlZ2llcyhcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmNvbmZpZ1xuICAgICAgKTtcblxuICAgIGJlaGF2aW91clN0cmF0ZWdpZXMuZm9yRWFjaCgoc3RyYXRlZ3k6IEJlaGF2aW91clN0cmF0ZWd5KSA9PiB7XG4gICAgICBzdHJhdGVneS5vbkluaXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveUJlaGF2aW91clN0cmF0ZWdpZXMoY29uZmlnOiBQYXltZW50Q29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGJlaGF2aW91clN0cmF0ZWdpZXMgPVxuICAgICAgdGhpcy5wYXltZW50QmVoYXZpb3VyU2VydmljZS5nZXRBcHBsaWNhYmxlQmVoYXZpb3VyU3RyYXRlZ2llcyhcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICBjb25maWdcbiAgICAgICk7XG5cbiAgICBiZWhhdmlvdXJTdHJhdGVnaWVzLmZvckVhY2goKHN0cmF0ZWd5OiBCZWhhdmlvdXJTdHJhdGVneSkgPT4ge1xuICAgICAgc3RyYXRlZ3kub25EZXN0cm95KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGF1dG9TdWJtaXRCZWhhdmlvdXJTdHJhdGVnaWVzKGNvbmZpZzogUGF5bWVudENvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBiZWhhdmlvdXJTdHJhdGVnaWVzID1cbiAgICAgIHRoaXMucGF5bWVudEJlaGF2aW91clNlcnZpY2UuZ2V0QXBwbGljYWJsZUJlaGF2aW91clN0cmF0ZWdpZXMoXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgY29uZmlnXG4gICAgICApO1xuXG4gICAgcmV0dXJuIGJlaGF2aW91clN0cmF0ZWdpZXMuc29tZSgoc3RyYXRlZ3k6IEJlaGF2aW91clN0cmF0ZWd5KSA9PiB7XG4gICAgICByZXR1cm4gc3RyYXRlZ3kuY2FuQXV0b1N1Ym1pdCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTdWJtaXRXaXRoRXJyb3JzKHN1Ym1pdFJlc3BvbnNlOiBTdWJtaXRSZXNwb25zZSk6IHZvaWQge1xuICAgIGlmICghc3VibWl0UmVzcG9uc2UuZXJyb3JzPy5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IGZpZWxkc01hcCA9IHRoaXMuZmllbGRzLnJlZHVjZSgobWFwLCBmaWVsZCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSB0aGlzLmZvcm0/LmdldChmaWVsZC5uYW1lKT8udmFsdWUgPz8gZmllbGQudmFsdWU7XG4gICAgICAgIG1hcC5zZXQoZmllbGQubmFtZSwgZmllbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwO1xuICAgIH0sIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCkpO1xuXG4gICAgdXBkYXRlQWZ0ZXJFcnJvclJ1bGVzLmZvckVhY2goKHJ1bGUpID0+XG4gICAgICBydWxlLmFwcGx5KHN1Ym1pdFJlc3BvbnNlLCBmaWVsZHNNYXApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nU3VibWl0QXR0ZW1wdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJCZWhhdmlvdXJBbmFseXRpY3NTZXJ2aWNlLnNlbmQoXG4gICAgICBVc2VyQmVoYXZpb3VyRXZlbnROYW1lLmF0dGVtcHRCdXlOb3csXG4gICAgICB1c2VyQmVoYXZpb3VyRXZlbnRUeXBlcy5jbGlja1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1N1Ym1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1N1Ym1pdEF0dGVtcHRlZCkge1xuICAgICAgdGhpcy51c2VyQmVoYXZpb3VyQW5hbHl0aWNzU2VydmljZS5zZW5kKFxuICAgICAgICBVc2VyQmVoYXZpb3VyRXZlbnROYW1lLmF0dGVtcHRDb250aW51ZSxcbiAgICAgICAgdXNlckJlaGF2aW91ckV2ZW50VHlwZXMuY2xpY2ssXG4gICAgICAgIHtcbiAgICAgICAgICBldmVudENhdGVnb3J5OiBldmVudENhdGVnb3JpZXMud2l0aEludm9pY2UsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyQmVoYXZpb3VyQW5hbHl0aWNzU2VydmljZS5zZW5kKFxuICAgICAgVXNlckJlaGF2aW91ckV2ZW50TmFtZS5jbGlja0J0blBheSxcbiAgICAgIHVzZXJCZWhhdmlvdXJFdmVudFR5cGVzLmNsaWNrLFxuICAgICAge1xuICAgICAgICBldmVudENhdGVnb3J5OiBldmVudENhdGVnb3JpZXMud2l0aEludm9pY2UsXG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIl19
|
|
566
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGF5bWVudC1jbGllbnQtY29yZS9zcmMvbGliL2NvcmUvcGF5bWVudC9wYXltZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFDZixNQUFNLEVBRU4sT0FBTyxFQUNQLElBQUksRUFDSixTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBcUIsU0FBUyxFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUVsRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQWM5RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2RUFBNkUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0ZBQWtGLENBQUM7QUFJbkgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFJakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFjaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBRy9FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxXQUFXLEVBQUUs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QUUsRUFBRSxDQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FDdEMsQ0FBQztJQUNKLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FDckMsc0JBQXNCLENBQUMsYUFBYSxFQUNwQyx1QkFBdUIsQ0FBQyxLQUFLLENBQzlCLENBQUM7SUFDSixDQUFDO0lBRU8sU0FBUztRQUNmLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FDckMsc0JBQXNCLENBQUMsZUFBZSxFQUN0Qyx1QkFBdUIsQ0FBQyxLQUFLLEVBQzdCO2dCQUNFLGFBQWEsRUFBRSxlQUFlLENBQUMsV0FBVzthQUMzQyxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FDckMsc0JBQXNCLENBQUMsV0FBVyxFQUNsQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQzdCO1lBQ0UsYUFBYSxFQUFFLGVBQWUsQ0FBQyxXQUFXO1NBQzNDLENBQ0YsQ0FBQztJQUNKLENBQUM7OEdBNXRCVSxjQUFjO2tIQUFkLGNBQWMsY0FGYixNQUFNOzsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgZmlsdGVyLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xTdGF0dXMsIEZvcm1Hcm91cCwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1Ym1pdFJlc3BvbnNlIH0gZnJvbSAnLi9yZXF1ZXN0cy9zdWJtaXQvcmVzcG9uc2Uvc3VibWl0LXJlc3BvbnNlLmNsYXNzJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi9mb3JtL2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBJbml0aWFsaXplUmVzcG9uc2UgfSBmcm9tICcuL3JlcXVlc3RzL2luaXRpYWxpemUvcmVzcG9uc2UvaW5pdGlhbGl6ZS1yZXNwb25zZS5jbGFzcyc7XG5pbXBvcnQgeyBJbml0aWFsaXplU2VydmljZSB9IGZyb20gJy4vcmVxdWVzdHMvaW5pdGlhbGl6ZS9pbml0aWFsaXplLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnLi9zdGF0dXMvc3RhdHVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTdWJtaXRTZXJ2aWNlIH0gZnJvbSAnLi9yZXF1ZXN0cy9zdWJtaXQvc3VibWl0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3luY1NlcnZpY2UgfSBmcm9tICcuL3JlcXVlc3RzL3N5bmMvc3luYy5zZXJ2aWNlJztcbmltcG9ydCB7IFN0YXR1c1NlcnZpY2UgfSBmcm9tICcuL3N0YXR1cy9zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBOZXh0QWN0aW9uU2VydmljZSB9IGZyb20gJy4vYWN0aW9ucy9uZXh0LWFjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEluaXRpYWxpemVOZXh0QWN0aW9uU2VydmljZSB9IGZyb20gJy4vaW5pdGlhbGl6ZS1hY3Rpb25zL2luaXRpYWxpemUtbmV4dC1hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDb250cm9sQ29uZmlnIH0gZnJvbSAnLi9mb3JtL2NvbnRyb2xzL2NvbnRyb2wtY29uZmlnJztcbmltcG9ydCB7IENvbnRyb2xDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9mb3JtL2NvbnRyb2xzL2NvbnRyb2wtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmluYW5jZURldGFpbHMgfSBmcm9tICcuL2ZpbmFuY2UtZGV0YWlscy9maW5hbmNlLWRldGFpbHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZpbmFuY2VEZXRhaWxzU2VydmljZSB9IGZyb20gJy4vZmluYW5jZS1kZXRhaWxzL2ZpbmFuY2UtZGV0YWlscy5zZXJ2aWNlJztcbmltcG9ydCB7IE5leHRBY3Rpb24gfSBmcm9tICcuL2FjdGlvbnMvbmV4dC1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFVzZXJCZWhhdmlvdXJBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi4vdXNlci1iZWhhdmlvdXItYW5hbHl0aWNzL3VzZXItYmVoYXZpb3VyLWFuYWx5dGljcy5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJCZWhhdmlvdXJFdmVudE5hbWUgfSBmcm9tICcuLi91c2VyLWJlaGF2aW91ci1hbmFseXRpY3MvdXNlci1iZWhhdmlvdXItZXZlbnQtbmFtZS5lbnVtJztcbmltcG9ydCB7IHVzZXJCZWhhdmlvdXJFdmVudFR5cGVzIH0gZnJvbSAnLi4vdXNlci1iZWhhdmlvdXItYW5hbHl0aWNzL3VzZXItYmVoYXZpb3VyLWV2ZW50L3VzZXItYmVoYXZpb3VyLWV2ZW50LXR5cGVzJztcbmltcG9ydCB7IGV2ZW50Q2F0ZWdvcmllcyB9IGZyb20gJy4uL3VzZXItYmVoYXZpb3VyLWFuYWx5dGljcy91c2VyLWJlaGF2aW91ci1ldmVudC91c2VyLWJlaGF2aW91ci1ldmVudC1jYXRlZ29yaWVzJztcbmltcG9ydCB7IFhwc1N1bW1hcnkgfSBmcm9tICcuL3hwcy1zdW1tYXJ5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJy4vZmllbGQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBheW1lbnRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9wYXltZW50LWNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IGlzU3VibWl0UmVzcG9uc2UgfSBmcm9tICcuL3JlcXVlc3RzL3N1Ym1pdC9pcy1zdWJtaXQtcmVzcG9uc2UuZnVuY3Rpb24nO1xuaW1wb3J0IHsgWHBzQm9vbGVhbiB9IGZyb20gJy4uL3hwcy1ib29sZWFuLmVudW0nO1xuaW1wb3J0IHsgU3RhdHVzUmVxdWVzdFBhcmFtcyB9IGZyb20gJy4vc3RhdHVzL3N0YXR1cy1yZXF1ZXN0L3N0YXR1cy1yZXF1ZXN0LXBhcmFtcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJy4vZm9ybS92YWxpZGF0b3JzL3ZhbGlkYXRpb24tZXJyb3JzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJbnB1dEV2ZW50TmFtZSB9IGZyb20gJy4vZm9ybS9pbnB1dC1ldmVudC5lbnVtJztcbmltcG9ydCB7IEZvcm1GaWVsZHNTdGF0dXMgfSBmcm9tICcuL2Zvcm0vZm9ybS1maWVsZHMtc3RhdHVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUaHJlZURzU2VydmljZSB9IGZyb20gJy4vdGhyZWUtZHMvdGhyZWUtZHMuc2VydmljZSc7XG5pbXBvcnQgeyBYcHNDb21tYW5kIH0gZnJvbSAnLi94cHMtY29tYW5kLmVudW0nO1xuaW1wb3J0IHsgQ3JlZGl0Q2FyZFN0YXRlU2VydmljZSB9IGZyb20gJy4vY3JlZGl0LWNhcmQtc3RhdGUvY3JlZGl0LWNhcmQtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBGaWVsZE5hbWVzIH0gZnJvbSAnLi9maWVsZC1uYW1lcy5lbnVtJztcbmltcG9ydCB7IEZvcm1TdGF0ZSB9IGZyb20gJy4vZm9ybS9mb3JtLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGb3JtTWVzc2FnZXNTZXJ2aWNlIH0gZnJvbSAnLi9mb3JtLW1lc3NhZ2VzL2Zvcm0tbWVzc2FnZXMuc2VydmljZSc7XG5pbXBvcnQgeyBYcHNNZXNzYWdlIH0gZnJvbSAnLi94cHMtbWVzc2FnZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2V0dGluZ3Mvc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBDb3VudHJ5U2VydmljZSB9IGZyb20gJy4uL2NvdW50cnkvY291bnRyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFNka1BheW1lbnRTeXN0ZW1zSW5pdGlhbERhdGEgfSBmcm9tICcuLi9zZGstcGF5bWVudC1zeXN0ZW1zL3Nkay1wYXltZW50LXN5c3RlbXMtaW5pdGlhbC1kYXRhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGb3JtUmVzcG9uc2UgfSBmcm9tICcuL2Zvcm0tcmVzcG9uc2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IENoZWNrU3RhdHVzQWN0aW9uQ3JlYXRvciB9IGZyb20gJy4vYWN0aW9ucy9jaGVjay1zdGF0dXMvY2hlY2stc3RhdHVzLmFjdGlvbi5jbGFzcyc7XG5pbXBvcnQgeyBDb250cm9sU3RhdHVzIH0gZnJvbSAnLi9mb3JtL2NvbnRyb2wtc3RhdHVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJbml0aWFsaXplZEZvcm0gfSBmcm9tICcuL2luaXRpYWxpemVkLWZvcm0uaW50ZWZhY2UnO1xuaW1wb3J0IHsgQ2FzaFBheW1lbnREYXRhIH0gZnJvbSAnLi9jYXNoLXBheW1lbnQtZGF0YS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUHJpbnRJbnN0cnVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi94c29sbGEtbnVtYmVyL2FwaS9wcmludC1pbnN0cnVjdGlvbi9wcmludC1pbnN0cnVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN5bmNSZXNwb25zZSB9IGZyb20gJy4vcmVxdWVzdHMvc3luYy9yZXNwb25zZS9zeW5jLXJlc3BvbnNlLmNsYXNzJztcbmltcG9ydCB7IEVycm9yVGFncyB9IGZyb20gJy4uL2V4Y2VwdGlvbnMtaGFuZGxpbmcvZXJyb3JzL2Vsay1lcnJvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IEJlaGF2aW91clN0cmF0ZWd5IH0gZnJvbSAnLi9wYXltZW50LWJlaGF2aW91ci9zdHJhdGVnaWVzL2JlaGF2aW91ci1zdHJhdGVneS5hYnN0cmFjdCc7XG5pbXBvcnQgeyBQYXltZW50QmVoYXZpb3VyU2VydmljZSB9IGZyb20gJy4vcGF5bWVudC1iZWhhdmlvdXIvcGF5bWVudC1iZWhhdmlvdXIuc2VydmljZSc7XG5pbXBvcnQgeyBmaWVsZHNBbGxvd2VkVG9PdmVycmlkZSB9IGZyb20gJy4vZm9ybS9vdmVycmlkZWQtZmllbGRzL2ZpZWxkcy1hbGxvd2VkLXRvLW92ZXJyaWRlJztcbmltcG9ydCB7IG92ZXJyaWRlRmllbGRDb25maWdzIH0gZnJvbSAnLi9mb3JtL292ZXJyaWRlZC1maWVsZHMvb3ZlcnJpZGUtZmllbGQtY29uZmlnJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9leGNlcHRpb25zLWhhbmRsaW5nL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUYWdnZWRFcnJvciB9IGZyb20gJy4uL2V4Y2VwdGlvbnMtaGFuZGxpbmcvZXJyb3JzJztcbmltcG9ydCB7IHVwZGF0ZUFmdGVyRXJyb3JSdWxlcyB9IGZyb20gJy4vdXBkYXRlLXN1Ym1pdC1yZXNwb25zZS91cGRhdGUtYWZ0ZXItZXJyb3ItcnVsZXMuY29uc3QnO1xuaW1wb3J0IHsgZmllbGRzQWxsb3dlZFRvRXh0ZXJuYWxDaGFuZ2UgfSBmcm9tICcuL2V4dGVybmFsLWNoYW5nZS1maWVsZHMuY29uc3QnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgaXNHb29nbGVQYXlTZXR0aW5nc0d1YXJkIH0gZnJvbSAnLi9wYXltZW50LWNvbmZpZ3VyYXRpb25zL3R5cGVzL2lzLWdvb2dsZS1wYXktc2V0dGluZ3MuZ3VhcmQnO1xuaW1wb3J0IHsgaXNDcmVkaXRDYXJkU2V0dGluZ3NHdWFyZCB9IGZyb20gJy4vcGF5bWVudC1jb25maWd1cmF0aW9ucy90eXBlcy9pcy1jcmVkaXQtY2FyZC1zZXR0aW5ncy5ndWFyZCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQYXltZW50U2VydmljZSB7XG4gIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwIHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIGdldCBmb3JtRmllbGRzU3RhdHVzJCgpOiBPYnNlcnZhYmxlPEZvcm1GaWVsZHNTdGF0dXM+IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtRmllbGRzU3RhdHVzU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGZpbHRlcihCb29sZWFuKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBheW1lbnRGb3JtJCgpOiBPYnNlcnZhYmxlPEZvcm1Db250cm9sU3RhdHVzIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLl9wYXltZW50Rm9ybSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvcm1SZXNwb25zZSQoKTogT2JzZXJ2YWJsZTxGb3JtUmVzcG9uc2UgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1SZXNwb25zZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvcm1SZXNwb25zZVZhbHVlKCk6IEZvcm1SZXNwb25zZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9mb3JtUmVzcG9uc2UkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIGRhdGE6IEluaXRpYWxpemVSZXNwb25zZSB8IFN1Ym1pdFJlc3BvbnNlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZmluYW5jZURldGFpbHM6IEZpbmFuY2VEZXRhaWxzIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZm9jdXNGaWVsZE5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGZpZWxkczogRmllbGRbXSA9IFtdO1xuICBwcml2YXRlIGlzU3VibWl0QXR0ZW1wdGVkID0gZmFsc2U7XG4gIHByaXZhdGUgY29uZmlnITogUGF5bWVudENvbmZpZ3VyYXRpb247XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgZm9ybURlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGF5bWVudEZvcm0kID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PEZvcm1Db250cm9sU3RhdHVzIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZm9ybUZpZWxkc1N0YXR1c1N1YmplY3QgPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8Rm9ybUZpZWxkc1N0YXR1cyB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtUmVzcG9uc2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGb3JtUmVzcG9uc2UgfCBudWxsPihcbiAgICBudWxsXG4gICk7XG5cbiAgcHJpdmF0ZSBpc1NhdmluZ01ldGhvZE1vZGUgPSBmYWxzZTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5pdGlhbGl6ZVNlcnZpY2U6IEluaXRpYWxpemVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3VibWl0U2VydmljZTogU3VibWl0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN5bmNTZXJ2aWNlOiBTeW5jU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YXR1c1NlcnZpY2U6IFN0YXR1c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaW5hbmNlRGV0YWlsc1NlcnZpY2U6IEZpbmFuY2VEZXRhaWxzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNyZWRpdENhcmRTdGF0ZVNlcnZpY2U6IENyZWRpdENhcmRTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZXh0QWN0aW9uU2VydmljZTogTmV4dEFjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbml0aWFsaXplTmV4dEFjdGlvblNlcnZpY2U6IEluaXRpYWxpemVOZXh0QWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xDb25maWdTZXJ2aWNlOiBDb250cm9sQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRocmVlRHNTZXJ2aWNlOiBUaHJlZURzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1NZXNzYWdlc1NlcnZpY2U6IEZvcm1NZXNzYWdlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvdW50cnlTZXJ2aWNlOiBDb3VudHJ5U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoZWNrU3RhdHVzQWN0aW9uQ3JlYXRvcjogQ2hlY2tTdGF0dXNBY3Rpb25DcmVhdG9yLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJpbnRJbnN0cnVjdGlvblNlcnZpY2U6IFByaW50SW5zdHJ1Y3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGF5bWVudEJlaGF2aW91clNlcnZpY2U6IFBheW1lbnRCZWhhdmlvdXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJCZWhhdmlvdXJBbmFseXRpY3NTZXJ2aWNlOiBVc2VyQmVoYXZpb3VyQW5hbHl0aWNzU2VydmljZVxuICApIHt9XG5cbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemUoXG4gICAgY29uZmlnOiBQYXltZW50Q29uZmlndXJhdGlvblxuICApOiBQcm9taXNlPEluaXRpYWxpemVkRm9ybT4ge1xuICAgIHRoaXMuZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHRoaXMuZm9ybURlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICB0aGlzLmlzU3VibWl0QXR0ZW1wdGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLmxpc3RlbkZpbmFuY2VEZXRhaWxzKCk7XG5cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmRhdGEgPSBhd2FpdCB0aGlzLmluaXRpYWxpemVTZXJ2aWNlLnJlcXVlc3QoY29uZmlnKTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZUJlaGF2aW91clN0cmF0ZWdpZXMoKTtcblxuICAgIHRoaXMuZW1pdEZvcm1SZXNwb25zZSh0aGlzLmRhdGEpO1xuXG4gICAgdGhpcy5maWVsZHMgPSB0aGlzLmdldEZpZWxkcygpO1xuICAgIHRoaXMuc2V0dXBJbml0aWFsRmllbGRWYWx1ZXMoKTtcblxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybVNlcnZpY2UuY3JlYXRlRm9ybSh0aGlzLmZpZWxkcyk7XG5cbiAgICB0aGlzLnVwZGF0ZVBpZENvbmZpZygpO1xuICAgIHRoaXMuc2V0dXBTeW5jU2VydmljZSh0aGlzLmZvcm0sIHRoaXMuZmllbGRzLCBjb25maWcpO1xuICAgIHRoaXMubGlzdGVuRm9ybVN0YXR1c0NoYW5nZXModGhpcy5mb3JtKTtcblxuICAgIGNvbnN0IGlzTmVlZEF1dG9TdWJtaXQgPSB0aGlzLmNhbkF1dG9TdWJtaXQoKTtcblxuICAgIGlmIChpc05lZWRBdXRvU3VibWl0KSB7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uID0gYXdhaXQgdGhpcy5zdWJtaXQoKTtcblxuICAgICAgaWYgKG5leHRBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5uZXh0QWN0aW9uU2VydmljZS5lbWl0Rmxvd1VwZGF0ZXMobmV4dEFjdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0RmluYW5jZURldGFpbHModGhpcy5kYXRhLnBheW1lbnRGb3JtPy5zdW1tYXJ5KTtcbiAgICB0aGlzLmVtaXRGb3JtRmllbGRzU3RhdHVzKHRoaXMuZm9ybSk7XG5cbiAgICB0aGlzLmVtaXRGb3JtTWVzc2FnZXModGhpcy5nZXRJbml0aWFsaXplTWVzc2FnZXMoKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZmllbGRzOiB0aGlzLmZpZWxkcy5maWx0ZXIoXG4gICAgICAgIChmaWVsZDogRmllbGQpID0+IGZpZWxkPy5pc1Zpc2libGUgPT09IFhwc0Jvb2xlYW4udHJ1ZVxuICAgICAgKSxcbiAgICAgIGlzRm9ybUF1dG9TdWJtaXR0ZWQ6IGlzTmVlZEF1dG9TdWJtaXQsXG4gICAgICBuZXh0QWN0aW9uOiB0aGlzLmluaXRpYWxpemVOZXh0QWN0aW9uU2VydmljZS5nZXROZXh0QWN0aW9uKHRoaXMuZGF0YSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdWJtaXQoKTogUHJvbWlzZTxOZXh0QWN0aW9uIHwgbnVsbCB8IHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZm9ybSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb3JtIGlzIGVtcHR5IScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5mb3JtLnZhbGlkKSB7XG4gICAgICB0aGlzLmxvZ1N1Ym1pdEF0dGVtcHQoKTtcbiAgICAgIHRoaXMuaXNTdWJtaXRBdHRlbXB0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHRoaXMuZW1pdEZvcm1GaWVsZHNTdGF0dXModGhpcy5mb3JtKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZ1N1Ym1pdCgpO1xuXG4gICAgdGhpcy5pc1NhdmluZ01ldGhvZE1vZGUgPSB0aGlzLmZpZWxkcy5zb21lKFxuICAgICAgKHsgbmFtZSwgdmFsdWUgfSkgPT5cbiAgICAgICAgbmFtZSA9PT0gJ3NhdmVQc0FjY291bnRPbmx5JyAmJiB2YWx1ZSA9PT0gWHBzQm9vbGVhbi50cnVlXG4gICAgKTtcbiAgICBjb25zdCBzdWJtaXRSZXNwb25zZSA9IGF3YWl0IHRoaXMuc3VibWl0U2VydmljZS5yZXF1ZXN0KFxuICAgICAgdGhpcy5maWVsZHMsXG4gICAgICB0aGlzLmZvcm0sXG4gICAgICB0aGlzLmNvbmZpZ1xuICAgICk7XG5cbiAgICB0aGlzLmhhbmRsZVN1Ym1pdFdpdGhFcnJvcnMoc3VibWl0UmVzcG9uc2UpO1xuXG4gICAgdGhpcy5kYXRhID0gc3VibWl0UmVzcG9uc2U7XG4gICAgdGhpcy5pbml0aWFsaXplQmVoYXZpb3VyU3RyYXRlZ2llcygpO1xuXG4gICAgdGhpcy5lbWl0Rm9ybVJlc3BvbnNlKHRoaXMuZGF0YSk7XG5cbiAgICBpZiAoIXRoaXMuaXNTYXZpbmdNZXRob2RNb2RlKSB7XG4gICAgICB0aGlzLmVtaXRGaW5hbmNlRGV0YWlscyhzdWJtaXRSZXNwb25zZS5zdW1tYXJ5LCBmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuZW1pdEZvcm1NZXNzYWdlcyhzdWJtaXRSZXNwb25zZS5tZXNzYWdlcyk7XG5cbiAgICAvLyBIYW5kbGUgM2RzIGZsb3dcbiAgICBpZiAoXG4gICAgICBzdWJtaXRSZXNwb25zZS5jdXJyZW50Q29tbWFuZCA9PT0gWHBzQ29tbWFuZC5jcmVhdGUgJiZcbiAgICAgIHN1Ym1pdFJlc3BvbnNlLnBhcmFtZXRlcnMudGhyZWVEU0Zvcm1cbiAgICApIHtcbiAgICAgIHRoaXMucnVuVGhyZWVEcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmllbGRzID0gdGhpcy5nZXRGaWVsZHMoKTtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1TZXJ2aWNlLmNyZWF0ZUZvcm0odGhpcy5maWVsZHMpO1xuXG4gICAgdGhpcy5saXN0ZW5Gb3JtU3RhdHVzQ2hhbmdlcyh0aGlzLmZvcm0pO1xuICAgIHRoaXMuc3luY1NlcnZpY2Uuc2V0dXAodGhpcy5mb3JtLCB0aGlzLmZpZWxkcywgdGhpcy5jb25maWcpO1xuXG4gICAgcmV0dXJuIHRoaXMubmV4dEFjdGlvblNlcnZpY2UuZ2V0TmV4dEFjdGlvbihzdWJtaXRSZXNwb25zZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3VibWl0V2l0aEZpZWxkcyhmaWVsZHM/OiBGaWVsZFtdKTogUHJvbWlzZTx7XG4gICAgcmVzcG9uc2U6IFN1Ym1pdFJlc3BvbnNlO1xuICAgIG5leHRBY3Rpb246IE5leHRBY3Rpb24gfCBudWxsIHwgdm9pZDtcbiAgfT4ge1xuICAgIGlmICghdGhpcy5mb3JtKSB7XG4gICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoXG4gICAgICAgIG5ldyBUYWdnZWRFcnJvcignc3VibWl0IGVycm9yOiB0cnlpbmcgdG8gc3VibWl0IHdpdGggbm8gZm9ybScsIFtcbiAgICAgICAgICBFcnJvclRhZ3MuR09PR0xFUEFZLFxuICAgICAgICBdKVxuICAgICAgKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZm9ybSBpcyBlbXB0eSEnKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzU2F2aW5nTWV0aG9kTW9kZSA9IHRoaXMuZmllbGRzLnNvbWUoXG4gICAgICAoeyBuYW1lLCB2YWx1ZSB9KSA9PlxuICAgICAgICBuYW1lID09PSAnc2F2ZVBzQWNjb3VudE9ubHknICYmIHZhbHVlID09PSBYcHNCb29sZWFuLnRydWVcbiAgICApO1xuICAgIGNvbnN0IHN1Ym1pdFJlc3BvbnNlID0gYXdhaXQgdGhpcy5zdWJtaXRTZXJ2aWNlLnJlcXVlc3QoXG4gICAgICBmaWVsZHMgPz8gdGhpcy5maWVsZHMsXG4gICAgICB0aGlzLmZvcm0sXG4gICAgICB0aGlzLmNvbmZpZ1xuICAgICk7XG5cbiAgICB0aGlzLmRhdGEgPSBzdWJtaXRSZXNwb25zZTtcbiAgICB0aGlzLmVtaXRGb3JtUmVzcG9uc2UodGhpcy5kYXRhKTtcblxuICAgIGlmICghdGhpcy5pc1NhdmluZ01ldGhvZE1vZGUpIHtcbiAgICAgIHRoaXMuZW1pdEZpbmFuY2VEZXRhaWxzKHN1Ym1pdFJlc3BvbnNlLnN1bW1hcnksIGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0Rm9ybU1lc3NhZ2VzKHN1Ym1pdFJlc3BvbnNlLm1lc3NhZ2VzKTtcblxuICAgIHRoaXMuZmllbGRzID0gdGhpcy5nZXRGaWVsZHMoKTtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1TZXJ2aWNlLmNyZWF0ZUZvcm0odGhpcy5maWVsZHMpO1xuXG4gICAgdGhpcy5zeW5jU2VydmljZS5zZXR1cCh0aGlzLmZvcm0sIHRoaXMuZmllbGRzLCB0aGlzLmNvbmZpZyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVzcG9uc2U6IHN1Ym1pdFJlc3BvbnNlLFxuICAgICAgbmV4dEFjdGlvbjogdGhpcy5uZXh0QWN0aW9uU2VydmljZS5nZXROZXh0QWN0aW9uKHN1Ym1pdFJlc3BvbnNlKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHNldHVwSW5pdGlhbEZpZWxkVmFsdWVzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpZWxkc1RvT3ZlcnJpZGUgPSB0aGlzLmNvbmZpZy5vdmVycmlkZUZvcm1GaWVsZHM7XG4gICAgaWYgKCFmaWVsZHNUb092ZXJyaWRlKSByZXR1cm47XG5cbiAgICBjb25zdCBvdmVycmlkYWJsZU5hbWVzID0gbmV3IFNldChcbiAgICAgIE9iamVjdC5rZXlzKGZpZWxkc1RvT3ZlcnJpZGUpLmZpbHRlcigobmFtZSkgPT5cbiAgICAgICAgZmllbGRzQWxsb3dlZFRvT3ZlcnJpZGUuaGFzKG5hbWUgYXMgRmllbGROYW1lcylcbiAgICAgIClcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLmZpZWxkcykge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gZmllbGQubmFtZTtcbiAgICAgIGlmICghb3ZlcnJpZGFibGVOYW1lcy5oYXMoZmllbGROYW1lKSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGNvbmZpZyA9IG92ZXJyaWRlRmllbGRDb25maWdzW2ZpZWxkTmFtZV07XG4gICAgICBpZiAoIWNvbmZpZykgY29udGludWU7XG5cbiAgICAgIGNvbnN0IG92ZXJyaWRkZW5WYWx1ZSA9IGZpZWxkc1RvT3ZlcnJpZGVbZmllbGROYW1lXT8uaW5pdGlhbFZhbHVlO1xuXG4gICAgICBmaWVsZC52YWx1ZSA9IFN0cmluZyhcbiAgICAgICAgY29uZmlnLnZhbGlkYXRvcihvdmVycmlkZGVuVmFsdWUpXG4gICAgICAgICAgPyBvdmVycmlkZGVuVmFsdWVcbiAgICAgICAgICA6IGNvbmZpZy5kZWZhdWx0VmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEZpZWxkcygpOiBGaWVsZFtdIHtcbiAgICBpZiAodGhpcy5kYXRhIGluc3RhbmNlb2YgU3VibWl0UmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGEuZmllbGRzID8/IFtdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRhdGE/LnBheW1lbnRGb3JtPy5maWVsZHMgPz8gW107XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29udHJvbFN0YXR1cyhuYW1lOiBGaWVsZE5hbWVzKTogQ29udHJvbFN0YXR1cyB8IG51bGwge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0/LmdldChuYW1lKTtcbiAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgZXJyb3JzOiBjb250cm9sLmVycm9ycyxcbiAgICAgIHN0YXR1czogY29udHJvbC5zdGF0dXMsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRJbml0aWFsRGF0YUZvclNka1BheW1lbnRTeXN0ZW1zKCk6IFByb21pc2U8U2RrUGF5bWVudFN5c3RlbXNJbml0aWFsRGF0YT4ge1xuICAgIGlmICghdGhpcy5kYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBzdWJtaXQgZm9ybSBmaXJzdCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHNka1BheW1lbnREYXRhID0gdGhpcy5nZXRTZGtQYXltZW50RGF0YUZyb21SZXNwb25zZSh0aGlzLmRhdGEpO1xuXG4gICAgY29uc3Qgc2hvdWxkSGFuZGxlVXNlckJhY2tSZWRpcmVjdE9uU2RrU2lkZSA9IGlzR29vZ2xlUGF5U2V0dGluZ3NHdWFyZChcbiAgICAgIHRoaXMuY29uZmlnXG4gICAgKVxuICAgICAgPyAhIXRoaXMuY29uZmlnLnBheW1lbnRNZXRob2RTZXR0aW5ncz8udXNlU2RrSGFuZGxlckZvclVzZXJCYWNrUmVkaXJlY3RcbiAgICAgIDogZmFsc2U7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIGRhdGE6IHNka1BheW1lbnREYXRhLmNoZWNrb3V0RGF0YSxcbiAgICAgIHNhbmRib3g6IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmlzU2FuZGJveE1vZGUoKVxuICAgICAgICA/IFhwc0Jvb2xlYW4udHJ1ZVxuICAgICAgICA6IFhwc0Jvb2xlYW4uZmFsc2UsXG4gICAgICBjb3VudHJ5OiB0aGlzLmNvdW50cnlTZXJ2aWNlLmdldENvdW50cnkoKSxcbiAgICAgIGZpZWxkczogc2RrUGF5bWVudERhdGEuZmllbGRzLFxuICAgICAgc3VibWl0UmVzcG9uc2U6IGlzU3VibWl0UmVzcG9uc2UodGhpcy5kYXRhKSA/IHRoaXMuZGF0YSA6IG51bGwsXG4gICAgICBzdW1tYXJ5OiBzZGtQYXltZW50RGF0YS5zdW1tYXJ5LFxuICAgICAgbG9jYWxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0Q3VycmVudExhbmcoKSxcbiAgICAgIHNob3VsZEhhbmRsZVVzZXJCYWNrUmVkaXJlY3RPblNka1NpZGUsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UXJDb2RlKCk6IHN0cmluZyB7XG4gICAgaWYgKCFpc1N1Ym1pdFJlc3BvbnNlKHRoaXMuZGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2hvdWxkIHN1Ym1pdCBmb3JtIGZpcnN0Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGF0YS5wYXJhbWV0ZXJzLmZvcm0ucXIudGl0bGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FzaFBheW1lbnREYXRhKCk6IENhc2hQYXltZW50RGF0YSB7XG4gICAgaWYgKCFpc1N1Ym1pdFJlc3BvbnNlKHRoaXMuZGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2hvdWxkIHN1Ym1pdCBmb3JtIGZpcnN0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2FzaEluc3RydWN0aW9uRmllbGQgPSB0aGlzLmRhdGEuZmllbGRzLmZpbmQoXG4gICAgICAoZmllbGQpID0+IGZpZWxkLm5hbWUgPT09ICdwYXltZW50X2luc3RydWN0aW9uJ1xuICAgICk7XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpc0Nhc2hQYXltZW50TWV0aG9kOiAhIWNhc2hJbnN0cnVjdGlvbkZpZWxkLFxuICAgICAgeHNvbGxhTnVtYmVyOiB0aGlzLmRhdGEueHNvbGxhTnVtYmVyLmFjY291bnRYc29sbGEsXG4gICAgICBwaWQ6IHRoaXMuZGF0YS5wYXJhbWV0ZXJzLnBpZCxcbiAgICAgIHB1YmxpY0lkOiB0aGlzLmRhdGEucGFyYW1ldGVycy5wdWJsaWNfaWQsXG4gICAgICB0aXRsZTogdGhpcy5kYXRhLnBhcmFtZXRlcnMudGl0bGUsXG4gICAgICBwcm9qZWN0TmFtZTogdGhpcy5zZXR0aW5nc1NlcnZpY2UucHJvamVjdC5uYW1lLFxuICAgICAgaW5zdHJ1Y3Rpb246IGNhc2hJbnN0cnVjdGlvbkZpZWxkPy50aXRsZSxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBwcmludFVybDogdGhpcy5wcmludEluc3RydWN0aW9uU2VydmljZS5nZXRQcmludEluc3RydWN0aW9uVXJsKHBhcmFtcyksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQaWQoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZGF0YSBpbnN0YW5jZW9mIFN1Ym1pdFJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhLnBhcmFtZXRlcnMucGlkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGEgaW5zdGFuY2VvZiBJbml0aWFsaXplUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGEucGF5bWVudEZvcm0/LnBpZCA/PyBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldFN1Ym1pdEJ1dHRvblRleHQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZGF0YSBpbnN0YW5jZW9mIFN1Ym1pdFJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhLnBhcmFtZXRlcnMuYnV5RGF0YS52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhIGluc3RhbmNlb2YgSW5pdGlhbGl6ZVJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhLnBheW1lbnRGb3JtPy5idXlEYXRhLnZhbHVlID8/IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdmFsaWRhdGUoZmllbGQ6IEZpZWxkKTogUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4ge1xuICAgIGNvbnN0IHN5bmNFcnJvcnMgPSB0aGlzLnN5bmNTZXJ2aWNlLmdldFN5bmNWYWxpZGF0aW9uRXJyb3JzKGZpZWxkKTtcblxuICAgIGlmIChzeW5jRXJyb3JzKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN5bmNFcnJvcnMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN5bmNTZXJ2aWNlLnZhbGlkYXRlKGZpZWxkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjYWxjdWxhdGVGaWVsZChcbiAgICBjaGFuZ2VkRmllbGQ6IEZpZWxkLFxuICAgIGZpZWxkczogRmllbGRbXVxuICApOiBQcm9taXNlPFN5bmNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnN5bmNTZXJ2aWNlLnJlcXVlc3QoY2hhbmdlZEZpZWxkLCBmaWVsZHMsIG5ldyBGb3JtR3JvdXAoe30pKTtcbiAgfVxuXG4gIHB1YmxpYyBydW5UaHJlZURzKCk6IHZvaWQge1xuICAgIGlmICghaXNTdWJtaXRSZXNwb25zZSh0aGlzLmRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBzdWJtaXQgZm9ybSBmaXJzdCcpO1xuICAgIH1cblxuICAgIHRoaXMudGhyZWVEc1NlcnZpY2UuY2hlY2tUaHJlZURzKHRoaXMuZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmluYW5jZURldGFpbHMoKTogRmluYW5jZURldGFpbHMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5maW5hbmNlRGV0YWlscztcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVGaWVsZEZvcm1TdGF0ZShmaWVsZE5hbWU6IHN0cmluZywgZm9ybVN0YXRlOiBGb3JtU3RhdGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlLnVwZGF0ZUZpZWxkRm9ybVN0YXRlKFxuICAgICAgICB0aGlzLmZvcm0sXG4gICAgICAgIHRoaXMuZmllbGRzLFxuICAgICAgICBmaWVsZE5hbWUsXG4gICAgICAgIGZvcm1TdGF0ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0RmllbGRGb3JtU3RhdGUoZmllbGROYW1lOiBGaWVsZE5hbWVzKTogRm9ybVN0YXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVNlcnZpY2UuZ2V0RmllbGRGb3JtU3RhdGUoZmllbGROYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTdGF0dXMoKTogUHJvbWlzZTxTdGF0dXM+IHtcbiAgICBpZiAoIWlzU3VibWl0UmVzcG9uc2UodGhpcy5kYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaG91bGQgc3VibWl0IGZvcm0gZmlyc3QnKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXM6IFN0YXR1c1JlcXVlc3RQYXJhbXMgPSB7XG4gICAgICBwaWQ6IHRoaXMuY29uZmlnLnBheW1lbnRNZXRob2RJZCxcbiAgICAgIGludm9pY2U6IHBhcnNlSW50KHRoaXMuZGF0YS5maXhJbnZvaWNlID8/ICcnKSxcbiAgICAgIHNpZ25hdHVyZTogdGhpcy5kYXRhLnNpZ25hdHVyZSA/PyAnJyxcbiAgICAgIGxvY2FsZTpcbiAgICAgICAgdGhpcy5kYXRhLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PT0gJ2xvY2FsZScpPy52YWx1ZSA/P1xuICAgICAgICAnZW4nLFxuICAgICAgaXNTYXZlUGF5bWVudEFjY291bnQ6IHRoaXMuaXNTYXZpbmdNZXRob2RNb2RlXG4gICAgICAgID8gWHBzQm9vbGVhbi50cnVlXG4gICAgICAgIDogWHBzQm9vbGVhbi5mYWxzZSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnN0YXR1c1NlcnZpY2UuZ2V0U3RhdHVzKHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdGVuRmluYWxTdGF0dXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBpbnZvaWNlIH0gPSBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuXG4gICAgdGhpcy5zdGF0dXNTZXJ2aWNlXG4gICAgICAubGlzdGVuRmluYWxTdGF0dXMoaW52b2ljZSBhcyB1bmtub3duIGFzIG51bWJlcilcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5uZXh0QWN0aW9uU2VydmljZS5lbWl0Rmxvd1VwZGF0ZXMoXG4gICAgICAgICAgdGhpcy5jaGVja1N0YXR1c0FjdGlvbkNyZWF0b3IuZ2V0QWN0aW9uRGF0YSgpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWVsZENvbmZpZyhmaWVsZDogRmllbGQpOiBDb250cm9sQ29uZmlnIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKGZpZWxkKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VGaWVsZFZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5mb3JtPy5nZXQobmFtZSk7XG4gICAgZm9ybUNvbnRyb2w/LnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBleHRlcm5hbENoYW5nZUZpZWxkVmFsdWUobmFtZTogRmllbGROYW1lcywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGlzRmllbGRBbGxvd2VkRm9yRXh0ZXJuYWxDaGFuZ2UgPVxuICAgICAgZmllbGRzQWxsb3dlZFRvRXh0ZXJuYWxDaGFuZ2UuaGFzKG5hbWUpO1xuXG4gICAgY29uc3QgaXNFeHRlcm5hbFZhdWx0ID1cbiAgICAgIGlzQ3JlZGl0Q2FyZFNldHRpbmdzR3VhcmQodGhpcy5jb25maWcpICYmXG4gICAgICB0aGlzLmNvbmZpZy5wYXltZW50TWV0aG9kU2V0dGluZ3M/LnVzZUV4dGVybmFsVmF1bHQ7XG5cbiAgICBpZiAoIWlzRmllbGRBbGxvd2VkRm9yRXh0ZXJuYWxDaGFuZ2UgfHwgIWlzRXh0ZXJuYWxWYXVsdCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm0/LmdldChuYW1lKTtcbiAgICBmb3JtQ29udHJvbD8uc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZUZpZWxkU3RhdGUobmFtZTogc3RyaW5nLCBzdGF0ZTogSW5wdXRFdmVudE5hbWUpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZm9ybT8uZ2V0KG5hbWUpO1xuXG4gICAgaWYgKCF0aGlzLmZvcm0gfHwgIWZvcm1Db250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgY2FzZSBJbnB1dEV2ZW50TmFtZS5ibHVyOiB7XG4gICAgICAgIGZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5mb2N1c0ZpZWxkTmFtZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBJbnB1dEV2ZW50TmFtZS5mb2N1czoge1xuICAgICAgICBmb3JtQ29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5mb2N1c0ZpZWxkTmFtZSA9IG5hbWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdEZvcm1GaWVsZHNTdGF0dXModGhpcy5mb3JtKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRFeHRyYUZpZWxkKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGlzSGF2ZUZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgoZmllbGQpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5uYW1lID09PSBuYW1lO1xuICAgIH0pO1xuXG4gICAgaWYgKGlzSGF2ZUZpZWxkKSB7XG4gICAgICB0aGlzLmZpZWxkcyA9IHRoaXMuZmllbGRzLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgaWYgKGZpZWxkLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICBmaWVsZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGQgPSB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgdGl0bGU6ICcnLFxuICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgZXhhbXBsZTogJycsXG4gICAgICBpc01hbmRhdG9yeTogWHBzQm9vbGVhbi50cnVlLFxuICAgICAgaXNWaXNpYmxlOiBYcHNCb29sZWFuLmZhbHNlLFxuICAgIH0gYXMgRmllbGQ7XG5cbiAgICB0aGlzLmZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveUJlaGF2aW91clN0cmF0ZWdpZXModGhpcy5jb25maWcpO1xuXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICB0aGlzLmZpbmFuY2VEZXRhaWxzID0gbnVsbDtcbiAgICB0aGlzLmZvcm0gPSBudWxsO1xuICAgIHRoaXMuZmllbGRzID0gW107XG4gICAgdGhpcy5mb3JtRGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuXG4gICAgdGhpcy50aHJlZURzU2VydmljZS5zdG9wQ2hlY2tpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEZpbmFuY2VEZXRhaWxzKHN1bW1hcnk/OiBYcHNTdW1tYXJ5LCBuZWVkTG9nQ2FydCA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLmZpbmFuY2VEZXRhaWxzU2VydmljZS5lbWl0V2l0aFN1bW1hcnkoc3VtbWFyeSwgbmVlZExvZ0NhcnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q3JlZGl0Q2FyZFN0YXRlKHtcbiAgICBpZENhcmRUeXBlLFxuICAgIGNhcmRCaW5Db3VudHJ5LFxuICB9OiB7XG4gICAgaWRDYXJkVHlwZTogc3RyaW5nO1xuICAgIGNhcmRCaW5Db3VudHJ5Pzogc3RyaW5nO1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5jcmVkaXRDYXJkU3RhdGVTZXJ2aWNlLmVtaXQoeyBpZENhcmRUeXBlLCBjYXJkQmluQ291bnRyeSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEZvcm1GaWVsZHNTdGF0dXMoZm9ybTogVW50eXBlZEZvcm1Hcm91cCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1GaWVsZHNTdGF0dXM6IEZvcm1GaWVsZHNTdGF0dXMgPSB7fTtcblxuICAgIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtLmNvbnRyb2xzW25hbWVdO1xuICAgICAgZm9ybUZpZWxkc1N0YXR1c1tuYW1lXSA9IHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsaWRhdGlvblN0YXR1czogY29udHJvbC5zdGF0dXMsXG4gICAgICAgIGVycm9yczogY29udHJvbC5lcnJvcnMsXG4gICAgICAgIGlzRm9jdXNlZDogdGhpcy5mb2N1c0ZpZWxkTmFtZSA9PT0gbmFtZSxcbiAgICAgICAgaXNUb3VjaGVkOiBjb250cm9sLnRvdWNoZWQsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzU3RhdHVzU3ViamVjdC5uZXh0KGZvcm1GaWVsZHNTdGF0dXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Rm9ybU1lc3NhZ2VzKG1lc3NhZ2VzPzogWHBzTWVzc2FnZVtdKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtTWVzc2FnZXNTZXJ2aWNlLmVtaXRPblJlc3BvbnNlKG1lc3NhZ2VzKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBTeW5jU2VydmljZShcbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwLFxuICAgIGZpZWxkczogRmllbGRbXSxcbiAgICBjb25maWc6IFBheW1lbnRDb25maWd1cmF0aW9uXG4gICk6IHZvaWQge1xuICAgIHRoaXMuc3luY1NlcnZpY2Uuc2V0dXAoZm9ybSwgZmllbGRzLCBjb25maWcpO1xuICAgIHRoaXMuc3luY1NlcnZpY2UuZGF0YSRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuZW1pdEZpbmFuY2VEZXRhaWxzKHJlc3BvbnNlLnN1bW1hcnkpO1xuICAgICAgICB0aGlzLmVtaXRGb3JtTWVzc2FnZXMocmVzcG9uc2UubWVzc2FnZXMpO1xuICAgICAgICB0aGlzLmVtaXRGb3JtUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnN5bmNTZXJ2aWNlLmZpZWxkQXN5bmNWYWxpZGF0aW9uJFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoZmllbGRBc3luY1ZhbGlkYXRpb24pID0+IHtcbiAgICAgICAgc3dpdGNoIChmaWVsZEFzeW5jVmFsaWRhdGlvbi5maWVsZC5uYW1lKSB7XG4gICAgICAgICAgY2FzZSBGaWVsZE5hbWVzLmNhcmROdW1iZXI6XG4gICAgICAgICAgICB0aGlzLmVtaXRDcmVkaXRDYXJkU3RhdGUoe1xuICAgICAgICAgICAgICBpZENhcmRUeXBlOiBmaWVsZEFzeW5jVmFsaWRhdGlvbi5yZXNwb25zZS5wYXJhbWV0ZXJzLmlkQ2FyZFR5cGUsXG4gICAgICAgICAgICAgIGNhcmRCaW5Db3VudHJ5OlxuICAgICAgICAgICAgICAgIGZpZWxkQXN5bmNWYWxpZGF0aW9uLnJlc3BvbnNlLnBhcmFtZXRlcnMuY2FyZEJpbkNvdW50cnksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZpbmFuY2VEZXRhaWxzKCk6IHZvaWQge1xuICAgIHRoaXMuZmluYW5jZURldGFpbHNTZXJ2aWNlLmRhdGEkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChmaW5hbmNlRGV0YWlscykgPT4gKHRoaXMuZmluYW5jZURldGFpbHMgPSBmaW5hbmNlRGV0YWlscykpO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JtU3RhdHVzQ2hhbmdlcyhmb3JtOiBVbnR5cGVkRm9ybUdyb3VwKTogdm9pZCB7XG4gICAgZm9ybS5zdGF0dXNDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5mb3JtRGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdHVzOiBGb3JtQ29udHJvbFN0YXR1cykgPT4ge1xuICAgICAgICB0aGlzLmVtaXRGb3JtRmllbGRzU3RhdHVzKGZvcm0pO1xuICAgICAgICB0aGlzLl9wYXltZW50Rm9ybSQubmV4dChzdGF0dXMpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKlxuICAgKiBpbiBjYXNlIHRoZSBmb3JtIHBpZCBjaGFuZ2VzIGRlc3BpdGUgdGhlIG9uZSBwYXNzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uXG4gICAqICAqL1xuICBwcml2YXRlIHVwZGF0ZVBpZENvbmZpZygpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50UGlkID0gdGhpcy5nZXRQaWQoKTtcbiAgICBpZiAoY3VycmVudFBpZCkge1xuICAgICAgdGhpcy5jb25maWcucGF5bWVudE1ldGhvZElkID0gY3VycmVudFBpZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXRGb3JtUmVzcG9uc2UoZGF0YTogRm9ybVJlc3BvbnNlWydkYXRhJ10pOiB2b2lkIHtcbiAgICBsZXQgdHlwZTogRm9ybVJlc3BvbnNlWyd0eXBlJ107XG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBJbml0aWFsaXplUmVzcG9uc2UpIHtcbiAgICAgIHR5cGUgPSAnaW5pdGlhbGl6ZSc7XG4gICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgU3VibWl0UmVzcG9uc2UpIHtcbiAgICAgIHR5cGUgPSAnc3VibWl0JztcbiAgICB9IGVsc2Uge1xuICAgICAgdHlwZSA9ICdzeW5jJztcbiAgICB9XG4gICAgdGhpcy5fZm9ybVJlc3BvbnNlJC5uZXh0KHtcbiAgICAgIHR5cGUsXG4gICAgICBkYXRhLFxuICAgICAgdG9rZW46IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnRva2VuLFxuICAgICAgaXNTYW5kYm94OiB0aGlzLnNldHRpbmdzU2VydmljZS5pc1NhbmRib3hNb2RlKCksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxpemVNZXNzYWdlcygpOiBYcHNNZXNzYWdlW10ge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gKHRoaXMuZGF0YSBhcyBJbml0aWFsaXplUmVzcG9uc2UpLnBheW1lbnRGb3JtPy5tZXNzYWdlcztcbiAgICBjb25zdCBrb3JlYU5vdGlmaWNhdGlvbiA9ICh0aGlzLmRhdGEgYXMgSW5pdGlhbGl6ZVJlc3BvbnNlKS5wYXltZW50Rm9ybVxuICAgICAgPy5rb3JlYU5vdGlmaWNhdGlvbjtcbiAgICBpZiAoa29yZWFOb3RpZmljYXRpb24pIHtcbiAgICAgIG1lc3NhZ2VzPy5wdXNoKHsgY29kZTogJzAnLCBtZXNzYWdlOiBrb3JlYU5vdGlmaWNhdGlvbj8udGl0bGUgfSk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlcyA/PyBbXTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuQXV0b1N1Ym1pdCgpOiBib29sZWFuIHtcbiAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuZGF0YSBhcyBJbml0aWFsaXplUmVzcG9uc2U7XG4gICAgaWYgKCFyZXNwb25zZS5wYXltZW50Rm9ybSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGlzUmVkaXJlY3RNZXRob2QgPSByZXNwb25zZS5wYXltZW50Rm9ybS5pc0NoZWNrb3V0O1xuICAgIGNvbnN0IGNhblNraXBGb3JtID0gcmVzcG9uc2UucGF5bWVudEZvcm0uc2tpcEZvcm07XG5cbiAgICBjb25zdCBpc1N1aXRhYmxlQnlTdHJhdGVneSA9IHRoaXMuYXV0b1N1Ym1pdEJlaGF2aW91clN0cmF0ZWdpZXMoXG4gICAgICB0aGlzLmNvbmZpZ1xuICAgICk7XG5cbiAgICByZXR1cm4gKCFpc1JlZGlyZWN0TWV0aG9kICYmIGNhblNraXBGb3JtKSB8fCBpc1N1aXRhYmxlQnlTdHJhdGVneTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2RrUGF5bWVudERhdGFGcm9tUmVzcG9uc2UoXG4gICAgZGF0YTogU3VibWl0UmVzcG9uc2UgfCBJbml0aWFsaXplUmVzcG9uc2VcbiAgKToge1xuICAgIGNoZWNrb3V0RGF0YTogc3RyaW5nIHwgbnVsbDtcbiAgICBmaWVsZHM6IEZpZWxkW107XG4gICAgc3VtbWFyeTogWHBzU3VtbWFyeSB8IG51bGw7XG4gIH0ge1xuICAgIGlmIChpc1N1Ym1pdFJlc3BvbnNlKGRhdGEpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjaGVja291dERhdGE6IGRhdGEucGFyYW1ldGVycz8uY2hlY2tvdXQuZGF0YS5kYXRhLFxuICAgICAgICBmaWVsZHM6IGRhdGEuZmllbGRzLFxuICAgICAgICBzdW1tYXJ5OiBkYXRhLnN1bW1hcnksXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjaGVja291dERhdGE6IG51bGwsXG4gICAgICBmaWVsZHM6IGRhdGEucGF5bWVudEZvcm0/LmZpZWxkcyA/PyBbXSxcbiAgICAgIHN1bW1hcnk6IGRhdGEucGF5bWVudEZvcm0/LnN1bW1hcnkgPz8gbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQmVoYXZpb3VyU3RyYXRlZ2llcygpOiB2b2lkIHtcbiAgICBjb25zdCBiZWhhdmlvdXJTdHJhdGVnaWVzID1cbiAgICAgIHRoaXMucGF5bWVudEJlaGF2aW91clNlcnZpY2UuZ2V0QXBwbGljYWJsZUJlaGF2aW91clN0cmF0ZWdpZXMoXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy5jb25maWdcbiAgICAgICk7XG5cbiAgICBiZWhhdmlvdXJTdHJhdGVnaWVzLmZvckVhY2goKHN0cmF0ZWd5OiBCZWhhdmlvdXJTdHJhdGVneSkgPT4ge1xuICAgICAgc3RyYXRlZ3kub25Jbml0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lCZWhhdmlvdXJTdHJhdGVnaWVzKGNvbmZpZzogUGF5bWVudENvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBiZWhhdmlvdXJTdHJhdGVnaWVzID1cbiAgICAgIHRoaXMucGF5bWVudEJlaGF2aW91clNlcnZpY2UuZ2V0QXBwbGljYWJsZUJlaGF2aW91clN0cmF0ZWdpZXMoXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgY29uZmlnXG4gICAgICApO1xuXG4gICAgYmVoYXZpb3VyU3RyYXRlZ2llcy5mb3JFYWNoKChzdHJhdGVneTogQmVoYXZpb3VyU3RyYXRlZ3kpID0+IHtcbiAgICAgIHN0cmF0ZWd5Lm9uRGVzdHJveSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhdXRvU3VibWl0QmVoYXZpb3VyU3RyYXRlZ2llcyhjb25maWc6IFBheW1lbnRDb25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYmVoYXZpb3VyU3RyYXRlZ2llcyA9XG4gICAgICB0aGlzLnBheW1lbnRCZWhhdmlvdXJTZXJ2aWNlLmdldEFwcGxpY2FibGVCZWhhdmlvdXJTdHJhdGVnaWVzKFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIGNvbmZpZ1xuICAgICAgKTtcblxuICAgIHJldHVybiBiZWhhdmlvdXJTdHJhdGVnaWVzLnNvbWUoKHN0cmF0ZWd5OiBCZWhhdmlvdXJTdHJhdGVneSkgPT4ge1xuICAgICAgcmV0dXJuIHN0cmF0ZWd5LmNhbkF1dG9TdWJtaXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU3VibWl0V2l0aEVycm9ycyhzdWJtaXRSZXNwb25zZTogU3VibWl0UmVzcG9uc2UpOiB2b2lkIHtcbiAgICBpZiAoIXN1Ym1pdFJlc3BvbnNlLmVycm9ycz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICBjb25zdCBmaWVsZHNNYXAgPSB0aGlzLmZpZWxkcy5yZWR1Y2UoKG1hcCwgZmllbGQpID0+IHtcbiAgICAgIGlmIChmaWVsZC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5mb3JtPy5nZXQoZmllbGQubmFtZSk/LnZhbHVlID8/IGZpZWxkLnZhbHVlO1xuICAgICAgICBtYXAuc2V0KGZpZWxkLm5hbWUsIGZpZWxkVmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LCBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpKTtcblxuICAgIHVwZGF0ZUFmdGVyRXJyb3JSdWxlcy5mb3JFYWNoKChydWxlKSA9PlxuICAgICAgcnVsZS5hcHBseShzdWJtaXRSZXNwb25zZSwgZmllbGRzTWFwKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1N1Ym1pdEF0dGVtcHQoKTogdm9pZCB7XG4gICAgdGhpcy51c2VyQmVoYXZpb3VyQW5hbHl0aWNzU2VydmljZS5zZW5kKFxuICAgICAgVXNlckJlaGF2aW91ckV2ZW50TmFtZS5hdHRlbXB0QnV5Tm93LFxuICAgICAgdXNlckJlaGF2aW91ckV2ZW50VHlwZXMuY2xpY2tcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2dTdWJtaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTdWJtaXRBdHRlbXB0ZWQpIHtcbiAgICAgIHRoaXMudXNlckJlaGF2aW91ckFuYWx5dGljc1NlcnZpY2Uuc2VuZChcbiAgICAgICAgVXNlckJlaGF2aW91ckV2ZW50TmFtZS5hdHRlbXB0Q29udGludWUsXG4gICAgICAgIHVzZXJCZWhhdmlvdXJFdmVudFR5cGVzLmNsaWNrLFxuICAgICAgICB7XG4gICAgICAgICAgZXZlbnRDYXRlZ29yeTogZXZlbnRDYXRlZ29yaWVzLndpdGhJbnZvaWNlLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMudXNlckJlaGF2aW91ckFuYWx5dGljc1NlcnZpY2Uuc2VuZChcbiAgICAgIFVzZXJCZWhhdmlvdXJFdmVudE5hbWUuY2xpY2tCdG5QYXksXG4gICAgICB1c2VyQmVoYXZpb3VyRXZlbnRUeXBlcy5jbGljayxcbiAgICAgIHtcbiAgICAgICAgZXZlbnRDYXRlZ29yeTogZXZlbnRDYXRlZ29yaWVzLndpdGhJbnZvaWNlLFxuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, filter, take } from 'rxjs';
|
|
2
|
+
import { BehaviorSubject, filter, Subject, take } from 'rxjs';
|
|
3
3
|
import { AppError } from '../../exceptions-handling/errors/app-error.class';
|
|
4
4
|
import { ErrorTags } from '../../exceptions-handling/errors/elk-error-types.enum';
|
|
5
5
|
import { CheckStatusActionCreator } from '../../payment/actions/check-status/check-status.action.class';
|
|
@@ -26,12 +26,24 @@ export class GooglePayService {
|
|
|
26
26
|
this.injector = injector;
|
|
27
27
|
this.googlePayScriptUrl = 'https://pay.google.com/gp/p/js/pay.js';
|
|
28
28
|
this.readyToPay = new BehaviorSubject(null);
|
|
29
|
+
this.paymentWindowIsReady = new Subject();
|
|
30
|
+
this.paymentWindowIsClose = new Subject();
|
|
31
|
+
this.error = new Subject();
|
|
29
32
|
this.googlePaymentClient = null;
|
|
30
33
|
this.paymentService = null;
|
|
31
34
|
}
|
|
32
35
|
get readyToPay$() {
|
|
33
36
|
return this.readyToPay.asObservable();
|
|
34
37
|
}
|
|
38
|
+
get paymentWindowIsReady$() {
|
|
39
|
+
return this.paymentWindowIsReady.asObservable();
|
|
40
|
+
}
|
|
41
|
+
get paymentWindowIsClose$() {
|
|
42
|
+
return this.paymentWindowIsClose.asObservable();
|
|
43
|
+
}
|
|
44
|
+
get error$() {
|
|
45
|
+
return this.error.asObservable();
|
|
46
|
+
}
|
|
35
47
|
isReadyToPay() {
|
|
36
48
|
return this.readyToPay.getValue();
|
|
37
49
|
}
|
|
@@ -109,16 +121,20 @@ export class GooglePayService {
|
|
|
109
121
|
.get(CheckStatusActionCreator)
|
|
110
122
|
.getActionData();
|
|
111
123
|
try {
|
|
124
|
+
this.paymentWindowIsReady.next();
|
|
112
125
|
const paymentData = await this.googlePaymentClient.loadPaymentData(paymentDataRequest);
|
|
113
126
|
if (!paymentData?.paymentMethodData?.tokenizationData?.token) {
|
|
114
127
|
this.loggerService.error(new TaggedError('Token is missing', [ErrorTags.GOOGLEPAY]));
|
|
115
128
|
throw new AppError('Google Pay: token is missing');
|
|
116
129
|
}
|
|
117
130
|
this.paymentService.handleSuccessfulPayment?.(paymentData);
|
|
131
|
+
this.paymentWindowIsClose.next();
|
|
118
132
|
return checkStatusAction;
|
|
119
133
|
}
|
|
120
134
|
catch (error) {
|
|
121
135
|
this.paymentService.handleFailedPayment?.(error);
|
|
136
|
+
this.paymentWindowIsClose.next();
|
|
137
|
+
this.error.next(error);
|
|
122
138
|
const isClosedByUser = this.isClosedByUser(error?.message ?? '');
|
|
123
139
|
const isCanceledStatus = this.isCanceledStatus(error.statusCode ?? '');
|
|
124
140
|
if (isClosedByUser || isCanceledStatus)
|
|
@@ -239,4 +255,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
|
|
|
239
255
|
type: Inject,
|
|
240
256
|
args: [windowToken]
|
|
241
257
|
}] }, { type: i1.LoggerService }, { type: i2.PaymentSystemProcessingService }, { type: i3.GooglePayCheckoutPaymentService }, { type: i4.GooglePayInstantPaymentService }, { type: i0.Injector }] });
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLXBheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGF5bWVudC1jbGllbnQtY29yZS9zcmMvbGliL2NvcmUvc2RrLXBheW1lbnQtc3lzdGVtcy9nb29nbGUtcGF5L2dvb2dsZS1wYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBYyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUVsRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUd4RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFjakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7QUFNL0QsTUFBTSxPQUFPLGdCQUFnQjtJQVkzQixJQUFZLHFCQUFxQjtRQUMvQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBWSxpQ0FBaUM7UUFDM0MsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3BDLENBQUM7SUFFRCxZQUVtQixNQUFzQixFQUN0QixhQUE0QixFQUM1Qiw4QkFBOEQsRUFDOUQsK0JBQWdFLEVBQ2hFLDhCQUE4RCxFQUM5RCxRQUFrQjtRQUxsQixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixtQ0FBOEIsR0FBOUIsOEJBQThCLENBQWdDO1FBQzlELG9DQUErQixH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QyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN4RSxDQUFDOzhHQTdUVSxnQkFBZ0Isa0JBcUJqQixXQUFXO2tIQXJCVixnQkFBZ0IsY0FGZixNQUFNOzsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFzQkksTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwcEVycm9yIH0gZnJvbSAnLi4vLi4vZXhjZXB0aW9ucy1oYW5kbGluZy9lcnJvcnMvYXBwLWVycm9yLmNsYXNzJztcbmltcG9ydCB7IEVycm9yVGFncyB9IGZyb20gJy4uLy4uL2V4Y2VwdGlvbnMtaGFuZGxpbmcvZXJyb3JzL2Vsay1lcnJvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IEV4dGVuZGVkV2luZG93IH0gZnJvbSAnLi4vLi4vZXh0ZW5kZWQtd2luZG93LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDaGVja1N0YXR1c0FjdGlvbkNyZWF0b3IgfSBmcm9tICcuLi8uLi9wYXltZW50L2FjdGlvbnMvY2hlY2stc3RhdHVzL2NoZWNrLXN0YXR1cy5hY3Rpb24uY2xhc3MnO1xuaW1wb3J0IHsgQ2hlY2tTdGF0dXNBY3Rpb24gfSBmcm9tICcuLi8uLi9wYXltZW50L2FjdGlvbnMvY2hlY2stc3RhdHVzL2NoZWNrLXN0YXR1cy5hY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBOZXh0QWN0aW9uIH0gZnJvbSAnLi4vLi4vcGF5bWVudC9hY3Rpb25zL25leHQtYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyB3aW5kb3dUb2tlbiB9IGZyb20gJy4uLy4uL3dpbmRvdy50b2tlbic7XG5pbXBvcnQgeyBQYXltZW50U3lzdGVtUHJvY2Vzc2luZ1NlcnZpY2UgfSBmcm9tICcuLi9wYXltZW50LXN5c3RlbXMvcGF5bWVudC1zeXN0ZW0tcHJvY2Vzc2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IENoZWNrUGF5bWVudERldmljZURhdGEgfSBmcm9tICcuL2NoZWNrLXBheW1lbnQtZGV2aWNlLWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdvb2dsZVBheUluaXRQYXJhbXMgfSBmcm9tICcuL2dvb2dsZS1wYXktaW5pdC1wYXJhbXMuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEdvb2dsZVBheUNsaWVudCxcbiAgR29vZ2xlUGF5Q2xpZW50SW5pdERhdGEsXG4gIFBheW1lbnRBdXRob3JpemVkSGFuZGxlcixcbiAgUGF5bWVudERhdGFDaGFuZ2VkSGFuZGxlcixcbn0gZnJvbSAnLi9nb29nbGUtcGF5LWxpYnJhcnkuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdvb2dsZVBheUNoZWNrb3V0UGF5bWVudFNlcnZpY2UgfSBmcm9tICcuL3BheW1lbnQvZ29vZ2xlLXBheS1jaGVja291dC1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgR29vZ2xlUGF5SW5zdGFudFBheW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9wYXltZW50L2dvb2dsZS1wYXktaW5zdGFudC1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgR29vZ2xlUGF5UGF5bWVudFNlcnZpY2UgfSBmcm9tICcuL3BheW1lbnQvZ29vZ2xlLXBheS1wYXltZW50LXNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9leGNlcHRpb25zLWhhbmRsaW5nL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUYWdnZWRFcnJvciB9IGZyb20gJy4uLy4uL2V4Y2VwdGlvbnMtaGFuZGxpbmcvZXJyb3JzJztcbmltcG9ydCB7IEdvb2dsZVBheUJ1dHRvbkNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2dvb2dsZS1wYXktYnV0dG9uLWNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdvb2dsZVBheVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGdvb2dsZVBheVNjcmlwdFVybCA9ICdodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzJztcblxuICBwcml2YXRlIHJlYWRvbmx5IHJlYWR5VG9QYXkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4gfCBudWxsPihudWxsKTtcblxuICBwcml2YXRlIGdvb2dsZVBheW1lbnRDbGllbnQ6IEdvb2dsZVBheUNsaWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGluaXRQYXJhbXMhOiBHb29nbGVQYXlJbml0UGFyYW1zO1xuICBwcml2YXRlIHBheW1lbnRTZXJ2aWNlOiBHb29nbGVQYXlQYXltZW50U2VydmljZSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgb25QYXltZW50RGF0YUNoYW5nZWQhOiBQYXltZW50RGF0YUNoYW5nZWRIYW5kbGVyO1xuICBwcml2YXRlIG9uUGF5bWVudEF1dGhvcml6ZWQhOiBQYXltZW50QXV0aG9yaXplZEhhbmRsZXI7XG5cbiAgcHJpdmF0ZSBnZXQgbGlicmFyeVdhc0luaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMud2luZG93Lmdvb2dsZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGdvb2dsZVBheW1lbnRDbGllbnRXYXNJbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmdvb2dsZVBheW1lbnRDbGllbnQ7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgQEluamVjdCh3aW5kb3dUb2tlbilcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdzogRXh0ZW5kZWRXaW5kb3csXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGF5bWVudFN5c3RlbVByb2Nlc3NpbmdTZXJ2aWNlOiBQYXltZW50U3lzdGVtUHJvY2Vzc2luZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBnb29nbGVQYXlDaGVja291dFBheW1lbnRTZXJ2aWNlOiBHb29nbGVQYXlDaGVja291dFBheW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZ29vZ2xlUGF5SW5zdGFudFBheW1lbnRTZXJ2aWNlOiBHb29nbGVQYXlJbnN0YW50UGF5bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXQgcmVhZHlUb1BheSQoKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnJlYWR5VG9QYXkuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgaXNSZWFkeVRvUGF5KCk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeVRvUGF5LmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgaW5pdEdvb2dsZVBheUxpYnJhcnkoZGF0YTogR29vZ2xlUGF5SW5pdFBhcmFtcyk6IHZvaWQge1xuICAgIHRoaXMuaW5pdFBhcmFtcyA9IGRhdGE7XG4gICAgdGhpcy5vblBheW1lbnREYXRhQ2hhbmdlZCA9IGRhdGEub25QYXltZW50RGF0YUNoYW5nZWQ7XG4gICAgdGhpcy5vblBheW1lbnRBdXRob3JpemVkID0gZGF0YS5vblBheW1lbnRBdXRob3JpemVkO1xuXG4gICAgaWYgKHRoaXMubGlicmFyeVdhc0luaXRpYWxpemVkICYmIHRoaXMuZ29vZ2xlUGF5bWVudENsaWVudFdhc0luaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGlicmFyeVdhc0luaXRpYWxpemVkICYmICF0aGlzLmdvb2dsZVBheW1lbnRDbGllbnRXYXNJbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5zZXR1cEdvb2dsZVBheUNsaWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGF5bWVudFN5c3RlbVByb2Nlc3NpbmdTZXJ2aWNlLmxvYWRTY3JpcHQoXG4gICAgICB0aGlzLmdvb2dsZVBheVNjcmlwdFVybCxcbiAgICAgIHRoaXMub25Mb2FkU2NyaXB0LmJpbmQodGhpcylcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNoZWNrUGF5bWVudERldmljZShkYXRhOiBDaGVja1BheW1lbnREZXZpY2VEYXRhKTogdm9pZCB7XG4gICAgdGhpcy5wYXltZW50U3lzdGVtUHJvY2Vzc2luZ1NlcnZpY2UuaW5pdGlhbGl6ZSRcbiAgICAgIC5waXBlKGZpbHRlcihCb29sZWFuKSwgdGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuZ29vZ2xlUGF5bWVudENsaWVudCkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcihcbiAgICAgICAgICAgIG5ldyBUYWdnZWRFcnJvcignR29vZ2xlIHBheW1lbnQgY2xpZW50IGlzIG5vdCBpbml0aWFsaXplZCcsIFtcbiAgICAgICAgICAgICAgRXJyb3JUYWdzLkdPT0dMRVBBWSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aHJvdyBuZXcgQXBwRXJyb3IoXG4gICAgICAgICAgICBgR29vZ2xlIFBheTogR29vZ2xlIHBheW1lbnQgY2xpZW50IGlzIG5vdCBpbml0aWFsaXplZGBcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wYXltZW50U2VydmljZSA9IHRoaXMuZ2V0UGF5bWVudFNlcnZpY2UoKTtcbiAgICAgICAgY29uc3QgaW5pdERhdGEgPSB0aGlzLnBheW1lbnRTZXJ2aWNlLnByZXBhcmVQYXltZW50KHtcbiAgICAgICAgICBpbml0UGFyYW1zOiB0aGlzLmluaXRQYXJhbXMsXG4gICAgICAgICAgY2hlY2tEZXZpY2VEYXRhOiBkYXRhLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWluaXREYXRhKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKFxuICAgICAgICAgICAgbmV3IFRhZ2dlZEVycm9yKCdObyBpbml0aWFsaXphdGlvbiBkYXRhJywgW0Vycm9yVGFncy5HT09HTEVQQVldKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3cgbmV3IEFwcEVycm9yKCdHb29nbGUgUGF5OiBubyBpbml0aWFsaXphdGlvbiBkYXRhJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdvb2dsZVBheW1lbnRDbGllbnRcbiAgICAgICAgICAuaXNSZWFkeVRvUGF5KGluaXREYXRhLmlzUmVhZHlUb1BheVJlcXVlc3QpXG4gICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0ICYmIHRoaXMuZ29vZ2xlUGF5bWVudENsaWVudCkge1xuICAgICAgICAgICAgICB0aGlzLmdvb2dsZVBheW1lbnRDbGllbnQucHJlZmV0Y2hQYXltZW50RGF0YShcbiAgICAgICAgICAgICAgICBpbml0RGF0YS5wYXltZW50RGF0YVJlcXVlc3RcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkeVRvUGF5Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVhZHlUb1BheS5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdD8udG9TdHJpbmcoKSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGlzSGF2ZVBheW1lbnRDbGllbnQgPSBCb29sZWFuKFxuICAgICAgICAgICAgICB0aGlzLmdvb2dsZVBheW1lbnRDbGllbnRcbiAgICAgICAgICAgICkudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgdGhyb3cgbmV3IEFwcEVycm9yKFxuICAgICAgICAgICAgICBgR29vZ2xlIFBheTogcG9zc2libHkgbm8gcmVzcG9uc2UucmVzdWx0IG9yIGdvb2dsZVBheW1lbnRDbGllbnQgaXMgbWlzc2luZywgcmVzdWx0IC0gJHtyZXN1bHR9LCBpc0hhdmVQYXltZW50Q2xpZW50IC0gJHtpc0hhdmVQYXltZW50Q2xpZW50fWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlYWR5VG9QYXkubmV4dChmYWxzZSk7XG5cbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gKGVycm9yIGFzIHN0cmluZykgPz8gJyc7XG5cbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXBwRXJyb3IoXG4gICAgICAgICAgICAgIGBHb29nbGUgUGF5OiBkZXZpY2UgaXMgbm90IHJlYWR5IHRvIHBheSwgJHttZXNzYWdlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcm9jZWVkQ2hlY2tvdXQoKTogUHJvbWlzZTxDaGVja1N0YXR1c0FjdGlvbiB8IG51bGw+IHtcbiAgICBpZiAoIXRoaXMuZ29vZ2xlUGF5bWVudENsaWVudCkge1xuICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKFxuICAgICAgICBuZXcgVGFnZ2VkRXJyb3IoXG4gICAgICAgICAgJ0dvb2dsZSBwYXltZW50IGNsaWVudCBpcyBub3QgaW5pdGlhbGl6ZWQgdG8gcHJvY2VlZCBjaGVja291dCcsXG4gICAgICAgICAgW0Vycm9yVGFncy5HT09HTEVQQVldXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICB0aHJvdyBuZXcgQXBwRXJyb3IoXG4gICAgICAgIGBHb29nbGUgUGF5LiBwcm9jZWVkQ2hlY2tvdXQ6IG5vIGdvb2dsZSBwYXltZW50IGNsaWVudGBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnBheW1lbnRTZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoXG4gICAgICAgIG5ldyBUYWdnZWRFcnJvcihcbiAgICAgICAgICAnR29vZ2xlIHBheW1lbnQgc2VydmljZSBpcyBub3QgaW5pdGlhbGl6ZWQgdG8gcHJvY2VlZCBjaGVja291dCcsXG4gICAgICAgICAgW0Vycm9yVGFncy5HT09HTEVQQVldXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICB0aHJvdyBuZXcgQXBwRXJyb3IoXG4gICAgICAgIGBHb29nbGUgUGF5LiBwcm9jZWVkQ2hlY2tvdXQ6IG5vIGdvb2dsZSBwYXltZW50IHNlcnZpY2VgXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IHRoaXMucGF5bWVudFNlcnZpY2UuZ2V0UGF5bWVudFJlcXVlc3QoKTtcblxuICAgIGlmICghcGF5bWVudERhdGFSZXF1ZXN0KSB7XG4gICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoXG4gICAgICAgIG5ldyBUYWdnZWRFcnJvcignTm8gZGF0YSBmb3IgcGF5bWVudCBkYXRhIHJlcXVlc3QnLCBbXG4gICAgICAgICAgRXJyb3JUYWdzLkdPT0dMRVBBWSxcbiAgICAgICAgXSlcbiAgICAgICk7XG4gICAgICB0aHJvdyBuZXcgQXBwRXJyb3IoYEdvb2dsZSBQYXk6IE5vIGRhdGEgZm9yIHBheW1lbnQgZGF0YSByZXF1ZXN0YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tTdGF0dXNBY3Rpb246IE5leHRBY3Rpb24gPSB0aGlzLmluamVjdG9yXG4gICAgICAuZ2V0PENoZWNrU3RhdHVzQWN0aW9uQ3JlYXRvcj4oQ2hlY2tTdGF0dXNBY3Rpb25DcmVhdG9yKVxuICAgICAgLmdldEFjdGlvbkRhdGEoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IHRoaXMuZ29vZ2xlUGF5bWVudENsaWVudC5sb2FkUGF5bWVudERhdGEoXG4gICAgICAgIHBheW1lbnREYXRhUmVxdWVzdFxuICAgICAgKTtcblxuICAgICAgaWYgKCFwYXltZW50RGF0YT8ucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcihcbiAgICAgICAgICBuZXcgVGFnZ2VkRXJyb3IoJ1Rva2VuIGlzIG1pc3NpbmcnLCBbRXJyb3JUYWdzLkdPT0dMRVBBWV0pXG4gICAgICAgICk7XG4gICAgICAgIHRocm93IG5ldyBBcHBFcnJvcignR29vZ2xlIFBheTogdG9rZW4gaXMgbWlzc2luZycpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLmhhbmRsZVN1Y2Nlc3NmdWxQYXltZW50Py4ocGF5bWVudERhdGEpO1xuICAgICAgcmV0dXJuIGNoZWNrU3RhdHVzQWN0aW9uO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICB0aGlzLnBheW1lbnRTZXJ2aWNlLmhhbmRsZUZhaWxlZFBheW1lbnQ/LihlcnJvcik7XG5cbiAgICAgIGNvbnN0IGlzQ2xvc2VkQnlVc2VyID0gdGhpcy5pc0Nsb3NlZEJ5VXNlcihcbiAgICAgICAgKGVycm9yIGFzIHsgbWVzc2FnZTogc3RyaW5nIH0pPy5tZXNzYWdlID8/ICcnXG4gICAgICApO1xuICAgICAgY29uc3QgaXNDYW5jZWxlZFN0YXR1cyA9IHRoaXMuaXNDYW5jZWxlZFN0YXR1cyhcbiAgICAgICAgKGVycm9yIGFzIHsgc3RhdHVzQ29kZTogc3RyaW5nIH0pLnN0YXR1c0NvZGUgPz8gJydcbiAgICAgICk7XG5cbiAgICAgIGlmIChpc0Nsb3NlZEJ5VXNlciB8fCBpc0NhbmNlbGVkU3RhdHVzKSByZXR1cm4gbnVsbDtcblxuICAgICAgcmV0dXJuIGNoZWNrU3RhdHVzQWN0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVCdXR0b24oXG4gICAgb25DbGlja0hhbmRsZXI6ICgpID0+IHZvaWQsXG4gICAgY29uZmlndXJhdGlvbjogR29vZ2xlUGF5QnV0dG9uQ29uZmlndXJhdGlvblxuICApOiBIVE1MQnV0dG9uRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5nb29nbGVQYXltZW50Q2xpZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxvd2VkUGF5bWVudE1ldGhvZHMgPVxuICAgICAgdGhpcy5wYXltZW50U2VydmljZT8uZ2V0QWxsb3dlZFBheW1lbnRNZXRob2RzKCkgfHwgW107XG5cbiAgICByZXR1cm4gdGhpcy5nb29nbGVQYXltZW50Q2xpZW50LmNyZWF0ZUJ1dHRvbih7XG4gICAgICBvbkNsaWNrOiBvbkNsaWNrSGFuZGxlcixcbiAgICAgIGFsbG93ZWRQYXltZW50TWV0aG9kczogYWxsb3dlZFBheW1lbnRNZXRob2RzLFxuICAgICAgYnV0dG9uU2l6ZU1vZGU6ICdmaWxsJyxcbiAgICAgIGJ1dHRvblR5cGU6ICdidXknLFxuICAgICAgYnV0dG9uQ29sb3I6IGNvbmZpZ3VyYXRpb24uY29sb3IgPz8gJ2RlZmF1bHQnLFxuICAgICAgYnV0dG9uTG9jYWxlOiB0aGlzLmdldExvY2FsZUZvckJ1dHRvbihjb25maWd1cmF0aW9uLmxvY2FsZSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwR29vZ2xlUGF5Q2xpZW50KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy53aW5kb3cuZ29vZ2xlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSB0aGlzLmluaXRQYXJhbXMuaXNTYW5kYm94ID8gJ1RFU1QnIDogJ1BST0RVQ1RJT04nO1xuICAgIGNvbnN0IGdvb2dsZVBheW1lbnRDbGllbnREYXRhOiBHb29nbGVQYXlDbGllbnRJbml0RGF0YSA9IHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5pbml0UGFyYW1zLmlzSW5zdGFudFBheUZsb3cpIHtcbiAgICAgIGdvb2dsZVBheW1lbnRDbGllbnREYXRhLnBheW1lbnREYXRhQ2FsbGJhY2tzID0ge1xuICAgICAgICBvblBheW1lbnREYXRhQ2hhbmdlZDogdGhpcy5vblBheW1lbnREYXRhQ2hhbmdlZCxcbiAgICAgICAgb25QYXltZW50QXV0aG9yaXplZDogdGhpcy5vblBheW1lbnRBdXRob3JpemVkLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmdvb2dsZVBheW1lbnRDbGllbnQgPVxuICAgICAgbmV3IHRoaXMud2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoXG4gICAgICAgIGdvb2dsZVBheW1lbnRDbGllbnREYXRhXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkxvYWRTY3JpcHQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLndpbmRvdy5nb29nbGUpIHtcbiAgICAgIGNvbnN0IHJldHJ5VGltZW91dCA9IDEwMDA7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpc0F2YWlsYWJsZUdvb2dsZUNsaWVudCA9ICEhdGhpcy53aW5kb3cuZ29vZ2xlO1xuXG4gICAgICAgIGlmIChpc0F2YWlsYWJsZUdvb2dsZUNsaWVudCkge1xuICAgICAgICAgIHRoaXMuc2V0dXBHb29nbGVQYXlDbGllbnQoKTtcblxuICAgICAgICAgIHRoaXMucGF5bWVudFN5c3RlbVByb2Nlc3NpbmdTZXJ2aWNlLmVtaXRJbml0aWFsaXplKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9LCByZXRyeVRpbWVvdXQpO1xuXG4gICAgICB0aHJvdyBuZXcgQXBwRXJyb3IoJ0dvb2dsZSBQYXk6IGdvb2dsZSBsaWJyYXJ5IG5vdyBpcyBhdmFpbGFibGUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXR1cEdvb2dsZVBheUNsaWVudCgpO1xuXG4gICAgICB0aGlzLnBheW1lbnRTeXN0ZW1Qcm9jZXNzaW5nU2VydmljZS5lbWl0SW5pdGlhbGl6ZSh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBheW1lbnRTZXJ2aWNlKCk6IEdvb2dsZVBheVBheW1lbnRTZXJ2aWNlIHtcbiAgICBpZiAodGhpcy5pbml0UGFyYW1zLmlzSW5zdGFudFBheUZsb3cpXG4gICAgICByZXR1cm4gdGhpcy5nb29nbGVQYXlJbnN0YW50UGF5bWVudFNlcnZpY2U7XG4gICAgcmV0dXJuIHRoaXMuZ29vZ2xlUGF5Q2hlY2tvdXRQYXltZW50U2VydmljZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNDbG9zZWRCeVVzZXIobWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygndXNlciBjbG9zZWQgdGhlIHBheW1lbnQgcmVxdWVzdCB1aScpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0NhbmNlbGVkU3RhdHVzKHN0YXR1c0NvZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0dXNDb2RlLnRvTG93ZXJDYXNlKCkgPT09ICdjYW5jZWxlZCc7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsZUZvckJ1dHRvbih1c2VyTG9jYWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFsbG93ZWRMb2NhbGVzID0gW1xuICAgICAgJ2VuJyxcbiAgICAgICdhcicsXG4gICAgICAnYmcnLFxuICAgICAgJ2NhJyxcbiAgICAgICdjcycsXG4gICAgICAnZGEnLFxuICAgICAgJ2RlJyxcbiAgICAgICdlbCcsXG4gICAgICAnZXMnLFxuICAgICAgJ2V0JyxcbiAgICAgICdmaScsXG4gICAgICAnZnInLFxuICAgICAgJ2hyJyxcbiAgICAgICdpZCcsXG4gICAgICAnaXQnLFxuICAgICAgJ2phJyxcbiAgICAgICdrbycsXG4gICAgICAnbXMnLFxuICAgICAgJ25sJyxcbiAgICAgICdubycsXG4gICAgICAncGwnLFxuICAgICAgJ3B0JyxcbiAgICAgICdydScsXG4gICAgICAnc2snLFxuICAgICAgJ3NsJyxcbiAgICAgICdzcicsXG4gICAgICAnc3YnLFxuICAgICAgJ3RoJyxcbiAgICAgICd0cicsXG4gICAgICAndWsnLFxuICAgICAgJ3poJyxcbiAgICBdO1xuXG4gICAgaWYgKFsnY24nLCAnemhfSEFOVCddLmluY2x1ZGVzKHVzZXJMb2NhbGUpKSB7XG4gICAgICByZXR1cm4gJ3poJztcbiAgICB9XG5cbiAgICBpZiAoWyd6aF9IQU5TJ10uaW5jbHVkZXModXNlckxvY2FsZSkpIHtcbiAgICAgIHJldHVybiAndHcnO1xuICAgIH1cblxuICAgIHJldHVybiBhbGxvd2VkTG9jYWxlcy5maW5kKChsb2NhbGUpID0+IGxvY2FsZSA9PT0gdXNlckxvY2FsZSkgPz8gJ2VuJztcbiAgfVxufVxuIl19
|
|
258
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLXBheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGF5bWVudC1jbGllbnQtY29yZS9zcmMvbGliL2NvcmUvc2RrLXBheW1lbnQtc3lzdGVtcy9nb29nbGUtcGF5L2dvb2dsZS1wYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBYyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM1RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdURBQXVELENBQUM7QUFFbEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFHeEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBY2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7O0FBTS9ELE1BQU0sT0FBTyxnQkFBZ0I7SUFlM0IsSUFBWSxxQkFBcUI7UUFDL0IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVksaUNBQWlDO1FBQzNDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsWUFFbUIsTUFBc0IsRUFDdEIsYUFBNEIsRUFDNUIsOEJBQThELEVBQzlELCtCQUFnRSxFQUNoRSw4QkFBOEQsRUFDOUQsUUFBa0I7UUFMbEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUNBQThCLEdBQTlCLDhCQUE4QixDQUFnQztRQUM5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SUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1NBQ0wsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDM0MsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN4RSxDQUFDOzhHQW5WVSxnQkFBZ0Isa0JBd0JqQixXQUFXO2tIQXhCVixnQkFBZ0IsY0FGZixNQUFNOzsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkF5QkksTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIE9ic2VydmFibGUsIFN1YmplY3QsIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwcEVycm9yIH0gZnJvbSAnLi4vLi4vZXhjZXB0aW9ucy1oYW5kbGluZy9lcnJvcnMvYXBwLWVycm9yLmNsYXNzJztcbmltcG9ydCB7IEVycm9yVGFncyB9IGZyb20gJy4uLy4uL2V4Y2VwdGlvbnMtaGFuZGxpbmcvZXJyb3JzL2Vsay1lcnJvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IEV4dGVuZGVkV2luZG93IH0gZnJvbSAnLi4vLi4vZXh0ZW5kZWQtd2luZG93LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDaGVja1N0YXR1c0FjdGlvbkNyZWF0b3IgfSBmcm9tICcuLi8uLi9wYXltZW50L2FjdGlvbnMvY2hlY2stc3RhdHVzL2NoZWNrLXN0YXR1cy5hY3Rpb24uY2xhc3MnO1xuaW1wb3J0IHsgQ2hlY2tTdGF0dXNBY3Rpb24gfSBmcm9tICcuLi8uLi9wYXltZW50L2FjdGlvbnMvY2hlY2stc3RhdHVzL2NoZWNrLXN0YXR1cy5hY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBOZXh0QWN0aW9uIH0gZnJvbSAnLi4vLi4vcGF5bWVudC9hY3Rpb25zL25leHQtYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyB3aW5kb3dUb2tlbiB9IGZyb20gJy4uLy4uL3dpbmRvdy50b2tlbic7XG5pbXBvcnQgeyBQYXltZW50U3lzdGVtUHJvY2Vzc2luZ1NlcnZpY2UgfSBmcm9tICcuLi9wYXltZW50LXN5c3RlbXMvcGF5bWVudC1zeXN0ZW0tcHJvY2Vzc2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IENoZWNrUGF5bWVudERldmljZURhdGEgfSBmcm9tICcuL2NoZWNrLXBheW1lbnQtZGV2aWNlLWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdvb2dsZVBheUluaXRQYXJhbXMgfSBmcm9tICcuL2dvb2dsZS1wYXktaW5pdC1wYXJhbXMuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEdvb2dsZVBheUNsaWVudCxcbiAgR29vZ2xlUGF5Q2xpZW50SW5pdERhdGEsXG4gIFBheW1lbnRBdXRob3JpemVkSGFuZGxlcixcbiAgUGF5bWVudERhdGFDaGFuZ2VkSGFuZGxlcixcbn0gZnJvbSAnLi9nb29nbGUtcGF5LWxpYnJhcnkuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdvb2dsZVBheUNoZWNrb3V0UGF5bWVudFNlcnZpY2UgfSBmcm9tICcuL3BheW1lbnQvZ29vZ2xlLXBheS1jaGVja291dC1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgR29vZ2xlUGF5SW5zdGFudFBheW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9wYXltZW50L2dvb2dsZS1wYXktaW5zdGFudC1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgR29vZ2xlUGF5UGF5bWVudFNlcnZpY2UgfSBmcm9tICcuL3BheW1lbnQvZ29vZ2xlLXBheS1wYXltZW50LXNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9leGNlcHRpb25zLWhhbmRsaW5nL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUYWdnZWRFcnJvciB9IGZyb20gJy4uLy4uL2V4Y2VwdGlvbnMtaGFuZGxpbmcvZXJyb3JzJztcbmltcG9ydCB7IEdvb2dsZVBheUJ1dHRvbkNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2dvb2dsZS1wYXktYnV0dG9uLWNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdvb2dsZVBheVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGdvb2dsZVBheVNjcmlwdFVybCA9ICdodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzJztcblxuICBwcml2YXRlIHJlYWRvbmx5IHJlYWR5VG9QYXkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4gfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwYXltZW50V2luZG93SXNSZWFkeSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGF5bWVudFdpbmRvd0lzQ2xvc2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yID0gbmV3IFN1YmplY3Q8dW5rbm93bj4oKTtcblxuICBwcml2YXRlIGdvb2dsZVBheW1lbnRDbGllbnQ6IEdvb2dsZVBheUNsaWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGluaXRQYXJhbXMhOiBHb29nbGVQYXlJbml0UGFyYW1zO1xuICBwcml2YXRlIHBheW1lbnRTZXJ2aWNlOiBHb29nbGVQYXlQYXltZW50U2VydmljZSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgb25QYXltZW50RGF0YUNoYW5nZWQhOiBQYXltZW50RGF0YUNoYW5nZWRIYW5kbGVyO1xuICBwcml2YXRlIG9uUGF5bWVudEF1dGhvcml6ZWQhOiBQYXltZW50QXV0aG9yaXplZEhhbmRsZXI7XG5cbiAgcHJpdmF0ZSBnZXQgbGlicmFyeVdhc0luaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMud2luZG93Lmdvb2dsZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGdvb2dsZVBheW1lbnRDbGllbnRXYXNJbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmdvb2dsZVBheW1lbnRDbGllbnQ7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgQEluamVjdCh3aW5kb3dUb2tlbilcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdzogRXh0ZW5kZWRXaW5kb3csXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGF5bWVudFN5c3RlbVByb2Nlc3NpbmdTZXJ2aWNlOiBQYXltZW50U3lzdGVtUHJvY2Vzc2luZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBnb29nbGVQYXlDaGVja291dFBheW1lbnRTZXJ2aWNlOiBHb29nbGVQYXlDaGVja291dFBheW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZ29vZ2xlUGF5SW5zdGFudFBheW1lbnRTZXJ2aWNlOiBHb29nbGVQYXlJbnN0YW50UGF5bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXQgcmVhZHlUb1BheSQoKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnJlYWR5VG9QYXkuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBheW1lbnRXaW5kb3dJc1JlYWR5JCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5wYXltZW50V2luZG93SXNSZWFkeS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGF5bWVudFdpbmRvd0lzQ2xvc2UkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnBheW1lbnRXaW5kb3dJc0Nsb3NlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBlcnJvciQoKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3IuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgaXNSZWFkeVRvUGF5KCk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeVRvUGF5LmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgaW5pdEdvb2dsZVBheUxpYnJhcnkoZGF0YTogR29vZ2xlUGF5SW5pdFBhcmFtcyk6IHZvaWQge1xuICAgIHRoaXMuaW5pdFBhcmFtcyA9IGRhdGE7XG4gICAgdGhpcy5vblBheW1lbnREYXRhQ2hhbmdlZCA9IGRhdGEub25QYXltZW50RGF0YUNoYW5nZWQ7XG4gICAgdGhpcy5vblBheW1lbnRBdXRob3JpemVkID0gZGF0YS5vblBheW1lbnRBdXRob3JpemVkO1xuXG4gICAgaWYgKHRoaXMubGlicmFyeVdhc0luaXRpYWxpemVkICYmIHRoaXMuZ29vZ2xlUGF5bWVudENsaWVudFdhc0luaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGlicmFyeVdhc0luaXRpYWxpemVkICYmICF0aGlzLmdvb2dsZVBheW1lbnRDbGllbnRXYXNJbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5zZXR1cEdvb2dsZVBheUNsaWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGF5bWVudFN5c3RlbVByb2Nlc3NpbmdTZXJ2aWNlLmxvYWRTY3JpcHQoXG4gICAgICB0aGlzLmdvb2dsZVBheVNjcmlwdFVybCxcbiAgICAgIHRoaXMub25Mb2FkU2NyaXB0LmJpbmQodGhpcylcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNoZWNrUGF5bWVudERldmljZShkYXRhOiBDaGVja1BheW1lbnREZXZpY2VEYXRhKTogdm9pZCB7XG4gICAgdGhpcy5wYXltZW50U3lzdGVtUHJvY2Vzc2luZ1NlcnZpY2UuaW5pdGlhbGl6ZSRcbiAgICAgIC5waXBlKGZpbHRlcihCb29sZWFuKSwgdGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuZ29vZ2xlUGF5bWVudENsaWVudCkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcihcbiAgICAgICAgICAgIG5ldyBUYWdnZWRFcnJvcignR29vZ2xlIHBheW1lbnQgY2xpZW50IGlzIG5vdCBpbml0aWFsaXplZCcsIFtcbiAgICAgICAgICAgICAgRXJyb3JUYWdzLkdPT0dMRVBBWSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aHJvdyBuZXcgQXBwRXJyb3IoXG4gICAgICAgICAgICBgR29vZ2xlIFBheTogR29vZ2xlIHBheW1lbnQgY2xpZW50IGlzIG5vdCBpbml0aWFsaXplZGBcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wYXltZW50U2VydmljZSA9IHRoaXMuZ2V0UGF5bWVudFNlcnZpY2UoKTtcbiAgICAgICAgY29uc3QgaW5pdERhdGEgPSB0aGlzLnBheW1lbnRTZXJ2aWNlLnByZXBhcmVQYXltZW50KHtcbiAgICAgICAgICBpbml0UGFyYW1zOiB0aGlzLmluaXRQYXJhbXMsXG4gICAgICAgICAgY2hlY2tEZXZpY2VEYXRhOiBkYXRhLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWluaXREYXRhKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKFxuICAgICAgICAgICAgbmV3IFRhZ2dlZEVycm9yKCdObyBpbml0aWFsaXphdGlvbiBkYXRhJywgW0Vycm9yVGFncy5HT09HTEVQQVldKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3cgbmV3IEFwcEVycm9yKCdHb29nbGUgUGF5OiBubyBpbml0aWFsaXphdGlvbiBkYXRhJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdvb2dsZVBheW1lbnRDbGllbnRcbiAgICAgICAgICAuaXNSZWFkeVRvUGF5KGluaXREYXRhLmlzUmVhZHlUb1BheVJlcXVlc3QpXG4gICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0ICYmIHRoaXMuZ29vZ2xlUGF5bWVudENsaWVudCkge1xuICAgICAgICAgICAgICB0aGlzLmdvb2dsZVBheW1lbnRDbGllbnQucHJlZmV0Y2hQYXltZW50RGF0YShcbiAgICAgICAgICAgICAgICBpbml0RGF0YS5wYXltZW50RGF0YVJlcXVlc3RcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkeVRvUGF5Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVhZHlUb1BheS5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdD8udG9TdHJpbmcoKSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGlzSGF2ZVBheW1lbnRDbGllbnQgPSBCb29sZWFuKFxuICAgICAgICAgICAgICB0aGlzLmdvb2dsZVBheW1lbnRDbGllbnRcbiAgICAgICAgICAgICkudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgdGhyb3cgbmV3IEFwcEVycm9yKFxuICAgICAgICAgICAgICBgR29vZ2xlIFBheTogcG9zc2libHkgbm8gcmVzcG9uc2UucmVzdWx0IG9yIGdvb2dsZVBheW1lbnRDbGllbnQgaXMgbWlzc2luZywgcmVzdWx0IC0gJHtyZXN1bHR9LCBpc0hhdmVQYXltZW50Q2xpZW50IC0gJHtpc0hhdmVQYXltZW50Q2xpZW50fWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlYWR5VG9QYXkubmV4dChmYWxzZSk7XG5cbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gKGVycm9yIGFzIHN0cmluZykgPz8gJyc7XG5cbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXBwRXJyb3IoXG4gICAgICAgICAgICAgIGBHb29nbGUgUGF5OiBkZXZpY2UgaXMgbm90IHJlYWR5IHRvIHBheSwgJHttZXNzYWdlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcm9jZWVkQ2hlY2tvdXQoKTogUHJvbWlzZTxDaGVja1N0YXR1c0FjdGlvbiB8IG51bGw+IHtcbiAgICBpZiAoIXRoaXMuZ29vZ2xlUGF5bWVudENsaWVudCkge1xuICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKFxuICAgICAgICBuZXcgVGFnZ2VkRXJyb3IoXG4gICAgICAgICAgJ0dvb2dsZSBwYXltZW50IGNsaWVudCBpcyBub3QgaW5pdGlhbGl6ZWQgdG8gcHJvY2VlZCBjaGVja291dCcsXG4gICAgICAgICAgW0Vycm9yVGFncy5HT09HTEVQQVldXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICB0aHJvdyBuZXcgQXBwRXJyb3IoXG4gICAgICAgIGBHb29nbGUgUGF5LiBwcm9jZWVkQ2hlY2tvdXQ6IG5vIGdvb2dsZSBwYXltZW50IGNsaWVudGBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnBheW1lbnRTZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoXG4gICAgICAgIG5ldyBUYWdnZWRFcnJvcihcbiAgICAgICAgICAnR29vZ2xlIHBheW1lbnQgc2VydmljZSBpcyBub3QgaW5pdGlhbGl6ZWQgdG8gcHJvY2VlZCBjaGVja291dCcsXG4gICAgICAgICAgW0Vycm9yVGFncy5HT09HTEVQQVldXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICB0aHJvdyBuZXcgQXBwRXJyb3IoXG4gICAgICAgIGBHb29nbGUgUGF5LiBwcm9jZWVkQ2hlY2tvdXQ6IG5vIGdvb2dsZSBwYXltZW50IHNlcnZpY2VgXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IHRoaXMucGF5bWVudFNlcnZpY2UuZ2V0UGF5bWVudFJlcXVlc3QoKTtcblxuICAgIGlmICghcGF5bWVudERhdGFSZXF1ZXN0KSB7XG4gICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoXG4gICAgICAgIG5ldyBUYWdnZWRFcnJvcignTm8gZGF0YSBmb3IgcGF5bWVudCBkYXRhIHJlcXVlc3QnLCBbXG4gICAgICAgICAgRXJyb3JUYWdzLkdPT0dMRVBBWSxcbiAgICAgICAgXSlcbiAgICAgICk7XG4gICAgICB0aHJvdyBuZXcgQXBwRXJyb3IoYEdvb2dsZSBQYXk6IE5vIGRhdGEgZm9yIHBheW1lbnQgZGF0YSByZXF1ZXN0YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tTdGF0dXNBY3Rpb246IE5leHRBY3Rpb24gPSB0aGlzLmluamVjdG9yXG4gICAgICAuZ2V0PENoZWNrU3RhdHVzQWN0aW9uQ3JlYXRvcj4oQ2hlY2tTdGF0dXNBY3Rpb25DcmVhdG9yKVxuICAgICAgLmdldEFjdGlvbkRhdGEoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnBheW1lbnRXaW5kb3dJc1JlYWR5Lm5leHQoKTtcblxuICAgICAgY29uc3QgcGF5bWVudERhdGEgPSBhd2FpdCB0aGlzLmdvb2dsZVBheW1lbnRDbGllbnQubG9hZFBheW1lbnREYXRhKFxuICAgICAgICBwYXltZW50RGF0YVJlcXVlc3RcbiAgICAgICk7XG5cbiAgICAgIGlmICghcGF5bWVudERhdGE/LnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlbikge1xuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgbmV3IFRhZ2dlZEVycm9yKCdUb2tlbiBpcyBtaXNzaW5nJywgW0Vycm9yVGFncy5HT09HTEVQQVldKVxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBuZXcgQXBwRXJyb3IoJ0dvb2dsZSBQYXk6IHRva2VuIGlzIG1pc3NpbmcnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wYXltZW50U2VydmljZS5oYW5kbGVTdWNjZXNzZnVsUGF5bWVudD8uKHBheW1lbnREYXRhKTtcblxuICAgICAgdGhpcy5wYXltZW50V2luZG93SXNDbG9zZS5uZXh0KCk7XG5cbiAgICAgIHJldHVybiBjaGVja1N0YXR1c0FjdGlvbjtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgdGhpcy5wYXltZW50U2VydmljZS5oYW5kbGVGYWlsZWRQYXltZW50Py4oZXJyb3IpO1xuICAgICAgdGhpcy5wYXltZW50V2luZG93SXNDbG9zZS5uZXh0KCk7XG4gICAgICB0aGlzLmVycm9yLm5leHQoZXJyb3IpO1xuXG4gICAgICBjb25zdCBpc0Nsb3NlZEJ5VXNlciA9IHRoaXMuaXNDbG9zZWRCeVVzZXIoXG4gICAgICAgIChlcnJvciBhcyB7IG1lc3NhZ2U6IHN0cmluZyB9KT8ubWVzc2FnZSA/PyAnJ1xuICAgICAgKTtcblxuICAgICAgY29uc3QgaXNDYW5jZWxlZFN0YXR1cyA9IHRoaXMuaXNDYW5jZWxlZFN0YXR1cyhcbiAgICAgICAgKGVycm9yIGFzIHsgc3RhdHVzQ29kZTogc3RyaW5nIH0pLnN0YXR1c0NvZGUgPz8gJydcbiAgICAgICk7XG4gICAgICBpZiAoaXNDbG9zZWRCeVVzZXIgfHwgaXNDYW5jZWxlZFN0YXR1cykgcmV0dXJuIG51bGw7XG5cbiAgICAgIHJldHVybiBjaGVja1N0YXR1c0FjdGlvbjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQnV0dG9uKFxuICAgIG9uQ2xpY2tIYW5kbGVyOiAoKSA9PiB2b2lkLFxuICAgIGNvbmZpZ3VyYXRpb246IEdvb2dsZVBheUJ1dHRvbkNvbmZpZ3VyYXRpb25cbiAgKTogSFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuZ29vZ2xlUGF5bWVudENsaWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgYWxsb3dlZFBheW1lbnRNZXRob2RzID1cbiAgICAgIHRoaXMucGF5bWVudFNlcnZpY2U/LmdldEFsbG93ZWRQYXltZW50TWV0aG9kcygpIHx8IFtdO1xuXG4gICAgcmV0dXJuIHRoaXMuZ29vZ2xlUGF5bWVudENsaWVudC5jcmVhdGVCdXR0b24oe1xuICAgICAgb25DbGljazogb25DbGlja0hhbmRsZXIsXG4gICAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IGFsbG93ZWRQYXltZW50TWV0aG9kcyxcbiAgICAgIGJ1dHRvblNpemVNb2RlOiAnZmlsbCcsXG4gICAgICBidXR0b25UeXBlOiAnYnV5JyxcbiAgICAgIGJ1dHRvbkNvbG9yOiBjb25maWd1cmF0aW9uLmNvbG9yID8/ICdkZWZhdWx0JyxcbiAgICAgIGJ1dHRvbkxvY2FsZTogdGhpcy5nZXRMb2NhbGVGb3JCdXR0b24oY29uZmlndXJhdGlvbi5sb2NhbGUpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEdvb2dsZVBheUNsaWVudCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMud2luZG93Lmdvb2dsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gdGhpcy5pbml0UGFyYW1zLmlzU2FuZGJveCA/ICdURVNUJyA6ICdQUk9EVUNUSU9OJztcbiAgICBjb25zdCBnb29nbGVQYXltZW50Q2xpZW50RGF0YTogR29vZ2xlUGF5Q2xpZW50SW5pdERhdGEgPSB7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuaW5pdFBhcmFtcy5pc0luc3RhbnRQYXlGbG93KSB7XG4gICAgICBnb29nbGVQYXltZW50Q2xpZW50RGF0YS5wYXltZW50RGF0YUNhbGxiYWNrcyA9IHtcbiAgICAgICAgb25QYXltZW50RGF0YUNoYW5nZWQ6IHRoaXMub25QYXltZW50RGF0YUNoYW5nZWQsXG4gICAgICAgIG9uUGF5bWVudEF1dGhvcml6ZWQ6IHRoaXMub25QYXltZW50QXV0aG9yaXplZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5nb29nbGVQYXltZW50Q2xpZW50ID1cbiAgICAgIG5ldyB0aGlzLndpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KFxuICAgICAgICBnb29nbGVQYXltZW50Q2xpZW50RGF0YVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Mb2FkU2NyaXB0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy53aW5kb3cuZ29vZ2xlKSB7XG4gICAgICBjb25zdCByZXRyeVRpbWVvdXQgPSAxMDAwO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgaXNBdmFpbGFibGVHb29nbGVDbGllbnQgPSAhIXRoaXMud2luZG93Lmdvb2dsZTtcblxuICAgICAgICBpZiAoaXNBdmFpbGFibGVHb29nbGVDbGllbnQpIHtcbiAgICAgICAgICB0aGlzLnNldHVwR29vZ2xlUGF5Q2xpZW50KCk7XG5cbiAgICAgICAgICB0aGlzLnBheW1lbnRTeXN0ZW1Qcm9jZXNzaW5nU2VydmljZS5lbWl0SW5pdGlhbGl6ZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSwgcmV0cnlUaW1lb3V0KTtcblxuICAgICAgdGhyb3cgbmV3IEFwcEVycm9yKCdHb29nbGUgUGF5OiBnb29nbGUgbGlicmFyeSBub3cgaXMgYXZhaWxhYmxlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0dXBHb29nbGVQYXlDbGllbnQoKTtcblxuICAgICAgdGhpcy5wYXltZW50U3lzdGVtUHJvY2Vzc2luZ1NlcnZpY2UuZW1pdEluaXRpYWxpemUodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXltZW50U2VydmljZSgpOiBHb29nbGVQYXlQYXltZW50U2VydmljZSB7XG4gICAgaWYgKHRoaXMuaW5pdFBhcmFtcy5pc0luc3RhbnRQYXlGbG93KVxuICAgICAgcmV0dXJuIHRoaXMuZ29vZ2xlUGF5SW5zdGFudFBheW1lbnRTZXJ2aWNlO1xuICAgIHJldHVybiB0aGlzLmdvb2dsZVBheUNoZWNrb3V0UGF5bWVudFNlcnZpY2U7XG4gIH1cblxuICBwcml2YXRlIGlzQ2xvc2VkQnlVc2VyKG1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3VzZXIgY2xvc2VkIHRoZSBwYXltZW50IHJlcXVlc3QgdWknKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNDYW5jZWxlZFN0YXR1cyhzdGF0dXNDb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RhdHVzQ29kZS50b0xvd2VyQ2FzZSgpID09PSAnY2FuY2VsZWQnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhbGVGb3JCdXR0b24odXNlckxvY2FsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBhbGxvd2VkTG9jYWxlcyA9IFtcbiAgICAgICdlbicsXG4gICAgICAnYXInLFxuICAgICAgJ2JnJyxcbiAgICAgICdjYScsXG4gICAgICAnY3MnLFxuICAgICAgJ2RhJyxcbiAgICAgICdkZScsXG4gICAgICAnZWwnLFxuICAgICAgJ2VzJyxcbiAgICAgICdldCcsXG4gICAgICAnZmknLFxuICAgICAgJ2ZyJyxcbiAgICAgICdocicsXG4gICAgICAnaWQnLFxuICAgICAgJ2l0JyxcbiAgICAgICdqYScsXG4gICAgICAna28nLFxuICAgICAgJ21zJyxcbiAgICAgICdubCcsXG4gICAgICAnbm8nLFxuICAgICAgJ3BsJyxcbiAgICAgICdwdCcsXG4gICAgICAncnUnLFxuICAgICAgJ3NrJyxcbiAgICAgICdzbCcsXG4gICAgICAnc3InLFxuICAgICAgJ3N2JyxcbiAgICAgICd0aCcsXG4gICAgICAndHInLFxuICAgICAgJ3VrJyxcbiAgICAgICd6aCcsXG4gICAgXTtcblxuICAgIGlmIChbJ2NuJywgJ3poX0hBTlQnXS5pbmNsdWRlcyh1c2VyTG9jYWxlKSkge1xuICAgICAgcmV0dXJuICd6aCc7XG4gICAgfVxuXG4gICAgaWYgKFsnemhfSEFOUyddLmluY2x1ZGVzKHVzZXJMb2NhbGUpKSB7XG4gICAgICByZXR1cm4gJ3R3JztcbiAgICB9XG5cbiAgICByZXR1cm4gYWxsb3dlZExvY2FsZXMuZmluZCgobG9jYWxlKSA9PiBsb2NhbGUgPT09IHVzZXJMb2NhbGUpID8/ICdlbic7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLXBheW1lbnQtc3lzdGVtcy1pbml0aWFsLWRhdGEuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGF5bWVudC1jbGllbnQtY29yZS9zcmMvbGliL2NvcmUvc2RrLXBheW1lbnQtc3lzdGVtcy9zZGstcGF5bWVudC1zeXN0ZW1zLWluaXRpYWwtZGF0YS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpZWxkIH0gZnJvbSAnLi4vcGF5bWVudC9maWVsZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU3VibWl0UmVzcG9uc2UgfSBmcm9tICcuLi9wYXltZW50L3JlcXVlc3RzL3N1Ym1pdC9yZXNwb25zZS9zdWJtaXQtcmVzcG9uc2UuY2xhc3MnO1xuaW1wb3J0IHsgWHBzU3VtbWFyeSB9IGZyb20gJy4uL3BheW1lbnQveHBzLXN1bW1hcnkuaW50ZXJmYWNlJztcbmltcG9ydCB7IFhwc0Jvb2xlYW4gfSBmcm9tICcuLi94cHMtYm9vbGVhbi5lbnVtJztcblxuZXhwb3J0IGludGVyZmFjZSBTZGtQYXltZW50U3lzdGVtc0luaXRpYWxEYXRhIHtcbiAgc2FuZGJveDogWHBzQm9vbGVhbjtcbiAgY291bnRyeTogc3RyaW5nO1xuICBmaWVsZHM6IEZpZWxkW107XG4gIHN1bW1hcnk6IFhwc1N1bW1hcnkgfCBudWxsO1xuICBzdWJtaXRSZXNwb25zZTogU3VibWl0UmVzcG9uc2UgfCBudWxsO1xuICBkYXRhOiBzdHJpbmcgfCBudWxsO1xuICBsb2NhbGU6IHN0cmluZztcbiAgc2hvdWxkSGFuZGxlVXNlckJhY2tSZWRpcmVjdE9uU2RrU2lkZTogYm9vbGVhbjtcbn1cbiJdfQ==
|