UNPKG

ngx-auth-firebaseui-updated

Version:

From ngx-auth-firbaseui but updated to fix dependency issues with Angular 16. Open Source Library for Angular Web Apps to integrate a material user interface for firebase authentication

244 lines 29.3 kB
// @angular/* import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { HttpClientModule } from '@angular/common/http'; import { RouterModule } from '@angular/router'; // @angular/fire import { FIREBASE_APP_NAME, FIREBASE_OPTIONS } from '@angular/fire/compat'; import { AngularFireAuthModule } from '@angular/fire/compat/auth'; import { AngularFirestoreModule } from '@angular/fire/compat/firestore'; // @angular/material import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatChipsModule } from '@angular/material/chips'; import { MatDialogModule } from '@angular/material/dialog'; import { MatDividerModule } from '@angular/material/divider'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatMenuModule } from '@angular/material/menu'; import { MatProgressBarModule } from '@angular/material/progress-bar'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSnackBarModule } from '@angular/material/snack-bar'; import { MatTabsModule } from '@angular/material/tabs'; import { MatTooltipModule } from '@angular/material/tooltip'; import { MatPasswordStrengthModule } from '@angular-material-extensions/password-strength'; import { NgxAuthFirebaseuiLoginComponent } from './components/ngx-auth-firebaseui-login/ngx-auth-firebaseui-login.component'; import { NgxAuthFirebaseuiRegisterComponent } from './components/ngx-auth-firebaseui-register/ngx-auth-firebaseui-register.component'; // ngx-auth-firebaseui // components import { AuthComponent } from './components/ngx-auth-firebaseui/auth.component'; import { UserComponent } from './components/ngx-auth-firebaseui-user/user.component'; import { AuthProvidersComponent } from './components/providers/auth.providers.component'; import { EmailConfirmationComponent } from './components/email-confirmation/email-confirmation.component'; import { ngxAuthFirebaseUIConfigFactory } from './interfaces/config.interface'; import { NgxAuthFirebaseuiAvatarComponent } from './components/ngx-auth-firebaseui-avatar/ngx-auth-firebaseui-avatar.component'; import { LegalityDialogComponent } from './components/legality-dialog/legality-dialog.component'; // guards import { LoggedInGuard } from './guards/logged-in.guard'; // services import { FirestoreSyncService } from './services/firestore-sync.service'; import { AuthProcessService } from './services/auth-process.service'; import { NgxAuthFirebaseUIConfigToken, UserProvidedConfigToken } from './tokens'; import * as i0 from "@angular/core"; import * as i1 from "@angular/material/icon"; import * as i2 from "@angular/platform-browser"; import * as i3 from "./services/auth-process.service"; // interfaces // ################################################################################################### // Export module's public API // components export { LegalityDialogComponent } from './components/legality-dialog/legality-dialog.component'; export { NgxAuthFirebaseuiAvatarComponent } from './components/ngx-auth-firebaseui-avatar/ngx-auth-firebaseui-avatar.component'; export { UserComponent } from './components/ngx-auth-firebaseui-user/user.component'; export { AuthComponent } from './components/ngx-auth-firebaseui/auth.component'; export { AuthProvidersComponent } from './components/providers/auth.providers.component'; export { NgxAuthFirebaseuiLoginComponent } from './components/ngx-auth-firebaseui-login/ngx-auth-firebaseui-login.component'; export { NgxAuthFirebaseuiRegisterComponent } from './components/ngx-auth-firebaseui-register/ngx-auth-firebaseui-register.component'; // guards export { LoggedInGuard } from './guards/logged-in.guard'; // services export { AuthProcessService, AuthProvider } from './services/auth-process.service'; export { FirestoreSyncService } from './services/firestore-sync.service'; export class NgxAuthFirebaseUIModule { constructor(iconRegistry, sanitizer, auth) { this.iconRegistry = iconRegistry; this.sanitizer = sanitizer; auth.listenToUserEvents(); this.registerProviderIcons(); } static forRoot(configFactory, appNameFactory = () => undefined, config = {}) { return { ngModule: NgxAuthFirebaseUIModule, providers: [ { provide: FIREBASE_OPTIONS, useValue: configFactory }, { provide: FIREBASE_APP_NAME, useFactory: appNameFactory }, { provide: UserProvidedConfigToken, useValue: config }, { provide: NgxAuthFirebaseUIConfigToken, useFactory: ngxAuthFirebaseUIConfigFactory, deps: [UserProvidedConfigToken] }, AuthProcessService, FirestoreSyncService, LoggedInGuard ] }; } registerProviderIcons() { this.iconRegistry .addSvgIcon('google', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/mdi/google.svg')) .addSvgIcon('apple', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/mdi/apple.svg')) .addSvgIcon('google-colored', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/google.svg')) .addSvgIcon('facebook', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/mdi/facebook.svg')) .addSvgIcon('twitter', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/mdi/twitter.svg')) .addSvgIcon('github', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/mdi/github-circle.svg')) .addSvgIcon('microsoft', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/mdi/microsoft.svg')) .addSvgIcon('yahoo', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/mdi/yahoo.svg')) .addSvgIcon('phone', this.sanitizer.bypassSecurityTrustResourceUrl('/assets/phone.svg')); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxAuthFirebaseUIModule, deps: [{ token: i1.MatIconRegistry }, { token: i2.DomSanitizer }, { token: i3.AuthProcessService }], target: i0.ɵɵFactoryTarget.NgModule }); } static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: NgxAuthFirebaseUIModule, declarations: [AuthComponent, UserComponent, NgxAuthFirebaseuiAvatarComponent, AuthProvidersComponent, EmailConfirmationComponent, LegalityDialogComponent, NgxAuthFirebaseuiLoginComponent, NgxAuthFirebaseuiRegisterComponent], imports: [CommonModule, // HTTP RouterModule, HttpClientModule, // FLEX_LAYOUT // FORMS FormsModule, ReactiveFormsModule, // MATERIAL2 MatTabsModule, MatCardModule, MatInputModule, MatButtonModule, MatIconModule, MatSnackBarModule, MatDividerModule, MatChipsModule, MatTooltipModule, MatDialogModule, MatCheckboxModule, MatProgressSpinnerModule, MatProgressBarModule, MatDialogModule, MatMenuModule, // ANGULAR MATERIAL EXTENSIONS MatPasswordStrengthModule, // ANGULARFIRE2 AngularFireAuthModule, AngularFirestoreModule], exports: [AuthComponent, UserComponent, NgxAuthFirebaseuiAvatarComponent, AuthProvidersComponent, EmailConfirmationComponent, // LoggedInGuard, AngularFireAuthModule, AngularFirestoreModule, NgxAuthFirebaseuiLoginComponent, NgxAuthFirebaseuiRegisterComponent] }); } static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxAuthFirebaseUIModule, imports: [CommonModule, // HTTP RouterModule, HttpClientModule, // FLEX_LAYOUT // FORMS FormsModule, ReactiveFormsModule, // MATERIAL2 MatTabsModule, MatCardModule, MatInputModule, MatButtonModule, MatIconModule, MatSnackBarModule, MatDividerModule, MatChipsModule, MatTooltipModule, MatDialogModule, MatCheckboxModule, MatProgressSpinnerModule, MatProgressBarModule, MatDialogModule, MatMenuModule, // ANGULAR MATERIAL EXTENSIONS MatPasswordStrengthModule, // ANGULARFIRE2 AngularFireAuthModule, AngularFirestoreModule, // LoggedInGuard, AngularFireAuthModule, AngularFirestoreModule] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxAuthFirebaseUIModule, decorators: [{ type: NgModule, args: [{ imports: [ CommonModule, // HTTP RouterModule, HttpClientModule, // FLEX_LAYOUT // FORMS FormsModule, ReactiveFormsModule, // MATERIAL2 MatTabsModule, MatCardModule, MatInputModule, MatButtonModule, MatIconModule, MatSnackBarModule, MatDividerModule, MatChipsModule, MatTooltipModule, MatDialogModule, MatCheckboxModule, MatProgressSpinnerModule, MatProgressBarModule, MatDialogModule, MatMenuModule, // ANGULAR MATERIAL EXTENSIONS MatPasswordStrengthModule, // ANGULARFIRE2 AngularFireAuthModule, AngularFirestoreModule, ], exports: [ AuthComponent, UserComponent, NgxAuthFirebaseuiAvatarComponent, AuthProvidersComponent, EmailConfirmationComponent, // LoggedInGuard, AngularFireAuthModule, AngularFirestoreModule, NgxAuthFirebaseuiLoginComponent, NgxAuthFirebaseuiRegisterComponent ], declarations: [ AuthComponent, UserComponent, NgxAuthFirebaseuiAvatarComponent, AuthProvidersComponent, EmailConfirmationComponent, LegalityDialogComponent, NgxAuthFirebaseuiLoginComponent, NgxAuthFirebaseuiRegisterComponent ] }] }], ctorParameters: function () { return [{ type: i1.MatIconRegistry }, { type: i2.DomSanitizer }, { type: i3.AuthProcessService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWF1dGgtZmlyZWJhc2V1aS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYXV0aC1maXJlYmFzZXVpL3NyYy9saWIvbmd4LWF1dGgtZmlyZWJhc2V1aS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYTtBQUNiLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQXNCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLGdCQUFnQjtBQUNoQixPQUFPLEVBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxvQkFBb0I7QUFDcEIsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBQyxhQUFhLEVBQWtCLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFFM0QsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFHekYsT0FBTyxFQUFDLCtCQUErQixFQUFDLE1BQU0sNEVBQTRFLENBQUM7QUFDM0gsT0FBTyxFQUFDLGtDQUFrQyxFQUFDLE1BQU0sa0ZBQWtGLENBQUM7QUFJcEksc0JBQXNCO0FBQ3RCLGFBQWE7QUFDYixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saURBQWlELENBQUM7QUFDOUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ25GLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLDhEQUE4RCxDQUFDO0FBQ3hHLE9BQU8sRUFBMEIsOEJBQThCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RyxPQUFPLEVBQUMsZ0NBQWdDLEVBQUMsTUFBTSw4RUFBOEUsQ0FBQztBQUM5SCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUMvRixTQUFTO0FBQ1QsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELFdBQVc7QUFDWCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUMsNEJBQTRCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxVQUFVLENBQUM7Ozs7O0FBQy9FLGFBQWE7QUFDYixzR0FBc0c7QUFDdEcsNkJBQTZCO0FBQzdCLGFBQWE7QUFDYixPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUMvRixPQUFPLEVBQWUsZ0NBQWdDLEVBQUMsTUFBTSw4RUFBOEUsQ0FBQztBQUM1SSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0RBQXNELENBQUM7QUFDbkYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQzlFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQywrQkFBK0IsRUFBQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzNILE9BQU8sRUFBQyxrQ0FBa0MsRUFBQyxNQUFNLGtGQUFrRixDQUFDO0FBR3BJLFNBQVM7QUFDVCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFHdkQsV0FBVztBQUNYLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQTBEdkUsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyxZQUFvQixZQUE2QixFQUFVLFNBQXVCLEVBQUUsSUFBd0I7UUFBeEYsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUNoRixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBR0QsTUFBTSxDQUFDLE9BQU8sQ0FDWixhQUE4QixFQUM5QixpQkFBMkMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUMxRCxTQUFrQyxFQUFFO1FBR3BDLE9BQU87WUFDTCxRQUFRLEVBQUUsdUJBQXVCO1lBQ2pDLFNBQVMsRUFDUDtnQkFDRTtvQkFDRSxPQUFPLEVBQUUsZ0JBQWdCO29CQUN6QixRQUFRLEVBQUUsYUFBYTtpQkFDeEI7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsVUFBVSxFQUFFLGNBQWM7aUJBQzNCO2dCQUNELEVBQUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUM7Z0JBQ3BEO29CQUNFLE9BQU8sRUFBRSw0QkFBNEI7b0JBQ3JDLFVBQVUsRUFBRSw4QkFBOEI7b0JBQzFDLElBQUksRUFBRSxDQUFDLHVCQUF1QixDQUFDO2lCQUNoQztnQkFDRCxrQkFBa0I7Z0JBQ2xCLG9CQUFvQjtnQkFDcEIsYUFBYTthQUNkO1NBQ0osQ0FBQztJQUNKLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLFlBQVk7YUFDZCxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsd0JBQXdCLENBQUMsQ0FBQzthQUM3RixVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsdUJBQXVCLENBQUMsQ0FBQzthQUMzRixVQUFVLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2FBQ2pHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2FBQ2pHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2FBQy9GLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO2FBQ3BHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2FBQ25HLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2FBQzNGLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDN0YsQ0FBQzsrR0FqRFUsdUJBQXVCO2dIQUF2Qix1QkFBdUIsaUJBVmhDLGFBQWE7WUFDYixhQUFhO1lBQ2IsZ0NBQWdDO1lBQ2hDLHNCQUFzQjtZQUN0QiwwQkFBMEI7WUFDMUIsdUJBQXVCO1lBQ3ZCLCtCQUErQjtZQUMvQixrQ0FBa0MsYUFsRGxDLFlBQVk7WUFDWixPQUFPO1lBQ1AsWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixjQUFjO1lBQ2QsUUFBUTtZQUNSLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsWUFBWTtZQUNaLGFBQWE7WUFDYixhQUFhO1lBQ2IsY0FBYztZQUNkLGVBQWU7WUFDZixhQUFhO1lBQ2IsaUJBQWlCO1lBQ2pCLGdCQUFnQjtZQUNoQixjQUFjO1lBQ2QsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixpQkFBaUI7WUFDakIsd0JBQXdCO1lBQ3hCLG9CQUFvQjtZQUNwQixlQUFlO1lBQ2YsYUFBYTtZQUNiLDhCQUE4QjtZQUM5Qix5QkFBeUI7WUFDekIsZUFBZTtZQUNmLHFCQUFxQjtZQUNyQixzQkFBc0IsYUFHdEIsYUFBYTtZQUNiLGFBQWE7WUFDYixnQ0FBZ0M7WUFDaEMsc0JBQXNCO1lBQ3RCLDBCQUEwQjtZQUMxQixpQkFBaUI7WUFDakIscUJBQXFCO1lBQ3JCLHNCQUFzQjtZQUN0QiwrQkFBK0I7WUFDL0Isa0NBQWtDO2dIQWF6Qix1QkFBdUIsWUFyRGhDLFlBQVk7WUFDWixPQUFPO1lBQ1AsWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixjQUFjO1lBQ2QsUUFBUTtZQUNSLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsWUFBWTtZQUNaLGFBQWE7WUFDYixhQUFhO1lBQ2IsY0FBYztZQUNkLGVBQWU7WUFDZixhQUFhO1lBQ2IsaUJBQWlCO1lBQ2pCLGdCQUFnQjtZQUNoQixjQUFjO1lBQ2QsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixpQkFBaUI7WUFDakIsd0JBQXdCO1lBQ3hCLG9CQUFvQjtZQUNwQixlQUFlO1lBQ2YsYUFBYTtZQUNiLDhCQUE4QjtZQUM5Qix5QkFBeUI7WUFDekIsZUFBZTtZQUNmLHFCQUFxQjtZQUNyQixzQkFBc0I7WUFRdEIsaUJBQWlCO1lBQ2pCLHFCQUFxQjtZQUNyQixzQkFBc0I7OzRGQWViLHVCQUF1QjtrQkF2RG5DLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osT0FBTzt3QkFDUCxZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxRQUFRO3dCQUNSLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsaUJBQWlCO3dCQUNqQix3QkFBd0I7d0JBQ3hCLG9CQUFvQjt3QkFDcEIsZUFBZTt3QkFDZixhQUFhO3dCQUNiLDhCQUE4Qjt3QkFDOUIseUJBQXlCO3dCQUN6QixlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIsc0JBQXNCO3FCQUN2QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsYUFBYTt3QkFDYixhQUFhO3dCQUNiLGdDQUFnQzt3QkFDaEMsc0JBQXNCO3dCQUN0QiwwQkFBMEI7d0JBQzFCLGlCQUFpQjt3QkFDakIscUJBQXFCO3dCQUNyQixzQkFBc0I7d0JBQ3RCLCtCQUErQjt3QkFDL0Isa0NBQWtDO3FCQUNuQztvQkFDRCxZQUFZLEVBQUU7d0JBQ1osYUFBYTt3QkFDYixhQUFhO3dCQUNiLGdDQUFnQzt3QkFDaEMsc0JBQXNCO3dCQUN0QiwwQkFBMEI7d0JBQzFCLHVCQUF1Qjt3QkFDdkIsK0JBQStCO3dCQUMvQixrQ0FBa0M7cUJBQ25DO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGFuZ3VsYXIvKlxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge01vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7SHR0cENsaWVudE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG4vLyBAYW5ndWxhci9maXJlXG5pbXBvcnQge0ZJUkVCQVNFX0FQUF9OQU1FLCBGSVJFQkFTRV9PUFRJT05TfSBmcm9tICdAYW5ndWxhci9maXJlL2NvbXBhdCc7XG5pbXBvcnQge0ZpcmViYXNlT3B0aW9uc30gZnJvbSAnQGZpcmViYXNlL2FwcC10eXBlcyc7XG5pbXBvcnQge0FuZ3VsYXJGaXJlQXV0aE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9jb21wYXQvYXV0aCc7XG5pbXBvcnQge0FuZ3VsYXJGaXJlc3RvcmVNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvY29tcGF0L2ZpcmVzdG9yZSc7XG4vLyBAYW5ndWxhci9tYXRlcmlhbFxuaW1wb3J0IHtNYXRCdXR0b25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQge01hdENhcmRNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHtNYXRDaGVja2JveE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHtNYXRDaGlwc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuaW1wb3J0IHtNYXREaWFsb2dNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge01hdERpdmlkZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuaW1wb3J0IHtNYXRJY29uTW9kdWxlLCBNYXRJY29uUmVnaXN0cnl9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHtNYXRJbnB1dE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHtNYXRNZW51TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7TWF0UHJvZ3Jlc3NCYXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQge01hdFByb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQge01hdFNuYWNrQmFyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHtNYXRUYWJzTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7TWF0VG9vbHRpcE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5cbmltcG9ydCB7TWF0UGFzc3dvcmRTdHJlbmd0aE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXItbWF0ZXJpYWwtZXh0ZW5zaW9ucy9wYXNzd29yZC1zdHJlbmd0aCc7XG5cblxuaW1wb3J0IHtOZ3hBdXRoRmlyZWJhc2V1aUxvZ2luQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvbmd4LWF1dGgtZmlyZWJhc2V1aS1sb2dpbi9uZ3gtYXV0aC1maXJlYmFzZXVpLWxvZ2luLmNvbXBvbmVudCc7XG5pbXBvcnQge05neEF1dGhGaXJlYmFzZXVpUmVnaXN0ZXJDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9uZ3gtYXV0aC1maXJlYmFzZXVpLXJlZ2lzdGVyL25neC1hdXRoLWZpcmViYXNldWktcmVnaXN0ZXIuY29tcG9uZW50JztcblxuXG5pbXBvcnQge0RvbVNhbml0aXplcn0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG4vLyBuZ3gtYXV0aC1maXJlYmFzZXVpXG4vLyBjb21wb25lbnRzXG5pbXBvcnQge0F1dGhDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9uZ3gtYXV0aC1maXJlYmFzZXVpL2F1dGguY29tcG9uZW50JztcbmltcG9ydCB7VXNlckNvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL25neC1hdXRoLWZpcmViYXNldWktdXNlci91c2VyLmNvbXBvbmVudCc7XG5pbXBvcnQge0F1dGhQcm92aWRlcnNDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9wcm92aWRlcnMvYXV0aC5wcm92aWRlcnMuY29tcG9uZW50JztcbmltcG9ydCB7RW1haWxDb25maXJtYXRpb25Db21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9lbWFpbC1jb25maXJtYXRpb24vZW1haWwtY29uZmlybWF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge05neEF1dGhGaXJlYmFzZVVJQ29uZmlnLCBuZ3hBdXRoRmlyZWJhc2VVSUNvbmZpZ0ZhY3Rvcnl9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7Tmd4QXV0aEZpcmViYXNldWlBdmF0YXJDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9uZ3gtYXV0aC1maXJlYmFzZXVpLWF2YXRhci9uZ3gtYXV0aC1maXJlYmFzZXVpLWF2YXRhci5jb21wb25lbnQnO1xuaW1wb3J0IHtMZWdhbGl0eURpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2xlZ2FsaXR5LWRpYWxvZy9sZWdhbGl0eS1kaWFsb2cuY29tcG9uZW50Jztcbi8vIGd1YXJkc1xuaW1wb3J0IHtMb2dnZWRJbkd1YXJkfSBmcm9tICcuL2d1YXJkcy9sb2dnZWQtaW4uZ3VhcmQnO1xuLy8gc2VydmljZXNcbmltcG9ydCB7RmlyZXN0b3JlU3luY1NlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvZmlyZXN0b3JlLXN5bmMuc2VydmljZSc7XG5pbXBvcnQge0F1dGhQcm9jZXNzU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlcy9hdXRoLXByb2Nlc3Muc2VydmljZSc7XG5pbXBvcnQge05neEF1dGhGaXJlYmFzZVVJQ29uZmlnVG9rZW4sIFVzZXJQcm92aWRlZENvbmZpZ1Rva2VufSBmcm9tICcuL3Rva2Vucyc7XG4vLyBpbnRlcmZhY2VzXG4vLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIEV4cG9ydCBtb2R1bGUncyBwdWJsaWMgQVBJXG4vLyBjb21wb25lbnRzXG5leHBvcnQge0xlZ2FsaXR5RGlhbG9nQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvbGVnYWxpdHktZGlhbG9nL2xlZ2FsaXR5LWRpYWxvZy5jb21wb25lbnQnO1xuZXhwb3J0IHtMaW5rTWVudUl0ZW0sIE5neEF1dGhGaXJlYmFzZXVpQXZhdGFyQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvbmd4LWF1dGgtZmlyZWJhc2V1aS1hdmF0YXIvbmd4LWF1dGgtZmlyZWJhc2V1aS1hdmF0YXIuY29tcG9uZW50JztcbmV4cG9ydCB7VXNlckNvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL25neC1hdXRoLWZpcmViYXNldWktdXNlci91c2VyLmNvbXBvbmVudCc7XG5leHBvcnQge0F1dGhDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9uZ3gtYXV0aC1maXJlYmFzZXVpL2F1dGguY29tcG9uZW50JztcbmV4cG9ydCB7QXV0aFByb3ZpZGVyc0NvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb3ZpZGVycy9hdXRoLnByb3ZpZGVycy5jb21wb25lbnQnO1xuZXhwb3J0IHtOZ3hBdXRoRmlyZWJhc2V1aUxvZ2luQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvbmd4LWF1dGgtZmlyZWJhc2V1aS1sb2dpbi9uZ3gtYXV0aC1maXJlYmFzZXVpLWxvZ2luLmNvbXBvbmVudCc7XG5leHBvcnQge05neEF1dGhGaXJlYmFzZXVpUmVnaXN0ZXJDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9uZ3gtYXV0aC1maXJlYmFzZXVpLXJlZ2lzdGVyL25neC1hdXRoLWZpcmViYXNldWktcmVnaXN0ZXIuY29tcG9uZW50JztcblxuXG4vLyBndWFyZHNcbmV4cG9ydCB7TG9nZ2VkSW5HdWFyZH0gZnJvbSAnLi9ndWFyZHMvbG9nZ2VkLWluLmd1YXJkJztcbi8vIGludGVyZmFjZXNcbmV4cG9ydCB7Tmd4QXV0aEZpcmViYXNlVUlDb25maWd9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbi8vIHNlcnZpY2VzXG5leHBvcnQge0F1dGhQcm9jZXNzU2VydmljZSwgQXV0aFByb3ZpZGVyfSBmcm9tICcuL3NlcnZpY2VzL2F1dGgtcHJvY2Vzcy5zZXJ2aWNlJztcbmV4cG9ydCB7RmlyZXN0b3JlU3luY1NlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvZmlyZXN0b3JlLXN5bmMuc2VydmljZSc7XG5cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICAvLyBIVFRQXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIEh0dHBDbGllbnRNb2R1bGUsXG4gICAgLy8gRkxFWF9MQVlPVVRcbiAgICAvLyBGT1JNU1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgLy8gTUFURVJJQUwyXG4gICAgTWF0VGFic01vZHVsZSxcbiAgICBNYXRDYXJkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFNuYWNrQmFyTW9kdWxlLFxuICAgIE1hdERpdmlkZXJNb2R1bGUsXG4gICAgTWF0Q2hpcHNNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXREaWFsb2dNb2R1bGUsXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgIE1hdFByb2dyZXNzQmFyTW9kdWxlLFxuICAgIE1hdERpYWxvZ01vZHVsZSxcbiAgICBNYXRNZW51TW9kdWxlLFxuICAgIC8vIEFOR1VMQVIgTUFURVJJQUwgRVhURU5TSU9OU1xuICAgIE1hdFBhc3N3b3JkU3RyZW5ndGhNb2R1bGUsXG4gICAgLy8gQU5HVUxBUkZJUkUyXG4gICAgQW5ndWxhckZpcmVBdXRoTW9kdWxlLFxuICAgIEFuZ3VsYXJGaXJlc3RvcmVNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBBdXRoQ29tcG9uZW50LFxuICAgIFVzZXJDb21wb25lbnQsXG4gICAgTmd4QXV0aEZpcmViYXNldWlBdmF0YXJDb21wb25lbnQsXG4gICAgQXV0aFByb3ZpZGVyc0NvbXBvbmVudCxcbiAgICBFbWFpbENvbmZpcm1hdGlvbkNvbXBvbmVudCxcbiAgICAvLyBMb2dnZWRJbkd1YXJkLFxuICAgIEFuZ3VsYXJGaXJlQXV0aE1vZHVsZSxcbiAgICBBbmd1bGFyRmlyZXN0b3JlTW9kdWxlLFxuICAgIE5neEF1dGhGaXJlYmFzZXVpTG9naW5Db21wb25lbnQsXG4gICAgTmd4QXV0aEZpcmViYXNldWlSZWdpc3RlckNvbXBvbmVudFxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBBdXRoQ29tcG9uZW50LFxuICAgIFVzZXJDb21wb25lbnQsXG4gICAgTmd4QXV0aEZpcmViYXNldWlBdmF0YXJDb21wb25lbnQsXG4gICAgQXV0aFByb3ZpZGVyc0NvbXBvbmVudCxcbiAgICBFbWFpbENvbmZpcm1hdGlvbkNvbXBvbmVudCxcbiAgICBMZWdhbGl0eURpYWxvZ0NvbXBvbmVudCxcbiAgICBOZ3hBdXRoRmlyZWJhc2V1aUxvZ2luQ29tcG9uZW50LFxuICAgIE5neEF1dGhGaXJlYmFzZXVpUmVnaXN0ZXJDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hBdXRoRmlyZWJhc2VVSU1vZHVsZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaWNvblJlZ2lzdHJ5OiBNYXRJY29uUmVnaXN0cnksIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsIGF1dGg6IEF1dGhQcm9jZXNzU2VydmljZSkge1xuICAgIGF1dGgubGlzdGVuVG9Vc2VyRXZlbnRzKCk7XG4gICAgdGhpcy5yZWdpc3RlclByb3ZpZGVySWNvbnMoKTtcbiAgfVxuXG5cbiAgc3RhdGljIGZvclJvb3QoXG4gICAgY29uZmlnRmFjdG9yeTogRmlyZWJhc2VPcHRpb25zLFxuICAgIGFwcE5hbWVGYWN0b3J5OiAoKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQgPSAoKSA9PiB1bmRlZmluZWQsXG4gICAgY29uZmlnOiBOZ3hBdXRoRmlyZWJhc2VVSUNvbmZpZyA9IHt9XG4gICk6IE1vZHVsZVdpdGhQcm92aWRlcnM8Tmd4QXV0aEZpcmViYXNlVUlNb2R1bGU+IHtcblxuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTmd4QXV0aEZpcmViYXNlVUlNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6XG4gICAgICAgIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGSVJFQkFTRV9PUFRJT05TLFxuICAgICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZ0ZhY3RvcnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZJUkVCQVNFX0FQUF9OQU1FLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogYXBwTmFtZUZhY3RvcnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtwcm92aWRlOiBVc2VyUHJvdmlkZWRDb25maWdUb2tlbiwgdXNlVmFsdWU6IGNvbmZpZ30sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTmd4QXV0aEZpcmViYXNlVUlDb25maWdUb2tlbixcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IG5neEF1dGhGaXJlYmFzZVVJQ29uZmlnRmFjdG9yeSxcbiAgICAgICAgICAgIGRlcHM6IFtVc2VyUHJvdmlkZWRDb25maWdUb2tlbl1cbiAgICAgICAgICB9LFxuICAgICAgICAgIEF1dGhQcm9jZXNzU2VydmljZSxcbiAgICAgICAgICBGaXJlc3RvcmVTeW5jU2VydmljZSxcbiAgICAgICAgICBMb2dnZWRJbkd1YXJkXG4gICAgICAgIF1cbiAgICB9O1xuICB9XG5cbiAgcmVnaXN0ZXJQcm92aWRlckljb25zKCkge1xuICAgIHRoaXMuaWNvblJlZ2lzdHJ5XG4gICAgICAuYWRkU3ZnSWNvbignZ29vZ2xlJywgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCcvYXNzZXRzL21kaS9nb29nbGUuc3ZnJykpXG4gICAgICAuYWRkU3ZnSWNvbignYXBwbGUnLCB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoJy9hc3NldHMvbWRpL2FwcGxlLnN2ZycpKVxuICAgICAgLmFkZFN2Z0ljb24oJ2dvb2dsZS1jb2xvcmVkJywgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCcvYXNzZXRzL2dvb2dsZS5zdmcnKSlcbiAgICAgIC5hZGRTdmdJY29uKCdmYWNlYm9vaycsIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCgnL2Fzc2V0cy9tZGkvZmFjZWJvb2suc3ZnJykpXG4gICAgICAuYWRkU3ZnSWNvbigndHdpdHRlcicsIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCgnL2Fzc2V0cy9tZGkvdHdpdHRlci5zdmcnKSlcbiAgICAgIC5hZGRTdmdJY29uKCdnaXRodWInLCB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoJy9hc3NldHMvbWRpL2dpdGh1Yi1jaXJjbGUuc3ZnJykpXG4gICAgICAuYWRkU3ZnSWNvbignbWljcm9zb2Z0JywgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCcvYXNzZXRzL21kaS9taWNyb3NvZnQuc3ZnJykpXG4gICAgICAuYWRkU3ZnSWNvbigneWFob28nLCB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoJy9hc3NldHMvbWRpL3lhaG9vLnN2ZycpKVxuICAgICAgLmFkZFN2Z0ljb24oJ3Bob25lJywgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCcvYXNzZXRzL3Bob25lLnN2ZycpKTtcbiAgfVxufVxuIl19