{"version":3,"file":"uoa-auth.mjs","sources":["../../../projects/auth/src/lib/core/services/urlbuilder.service.ts","../../../projects/auth/src/lib/core/services/storage.service.ts","../../../projects/auth/src/lib/core/services/pkce.service.ts","../../../projects/auth/src/lib/core/services/cognito-config.service.ts","../../../projects/auth/src/lib/core/services/auth.service.ts","../../../projects/auth/src/lib/core/interceptors/auth.interceptor.ts","../../../projects/auth/src/lib/core/auth.module.ts","../../../projects/auth/src/lib/core/services/login.service.ts","../../../projects/auth/src/lib/core/guards/auth.guard.ts","../../../projects/auth/src/lib/core/guards/login-success.guard.ts","../../../projects/auth/src/public-api.ts","../../../projects/auth/src/uoa-auth.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { ReplaySubject } from 'rxjs';\r\n\r\nimport { Auth2UrlsDto, Cognito2UrlsDto, DiscoverUrlsDto } from '../interfaces';\r\nimport { CognitoConfigService } from './cognito-config.service';\r\nimport { ChallengePair } from './pkce.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UrlBuilder {\r\n  private _discoveryEndpoint: string;\r\n  private _authorizeEndpoint: string;\r\n  public cognitoUrls = new ReplaySubject<Cognito2UrlsDto>(1);\r\n\r\n  constructor(private _httpClient: HttpClient) {}\r\n\r\n  public getEndPoints(config: CognitoConfigService): void {\r\n    this._discoveryEndpoint = `https://cognito-idp.${config.cognitoAwsRegion}.amazonaws.com/${config.cognitoUserPoolId}/.well-known/openid-configuration`;\r\n    this._httpClient\r\n      .get<DiscoverUrlsDto>(this._discoveryEndpoint)\r\n      .subscribe((res) => this.cognitoUrls.next(this.buildCognitoUrls(res, config)));\r\n  }\r\n\r\n  public buildCognitoUrls(urls: DiscoverUrlsDto, config: CognitoConfigService): Cognito2UrlsDto {\r\n    this._authorizeEndpoint = urls.authorization_endpoint;\r\n    return {\r\n      discoveryEndpoint: this._discoveryEndpoint,\r\n      authorizeEndpoint: urls.authorization_endpoint,\r\n      tokenEndpoint: urls.token_endpoint,\r\n      logoutUrl: `https://${config.cognitoDomain}.auth.${config.cognitoAwsRegion}.amazoncognito.com/logout`,\r\n      redirectUrl: config.redirectUri,\r\n    };\r\n  }\r\n\r\n  public buildCognitoAuthUrl(config: CognitoConfigService, codeChallenge: ChallengePair): Auth2UrlsDto {\r\n    return {\r\n      authorizeUrl: `${this._authorizeEndpoint}?client_id=${config.cognitoClientId}&response_type=code&redirect_uri=${\r\n        config.redirectUri\r\n      }&code_challenge=${codeChallenge.codeChallenge}&code_challenge_method=${config.codeChallengeMethod}&scope=${encodeURI(\r\n        config.scopes\r\n      )}`,\r\n      codeVerifier: codeChallenge.codeVerifier,\r\n    };\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport abstract class StorageService {\r\n  abstract getItem(key: string): Promise<any>;\r\n\r\n  abstract setItem(key: string, val: any): Promise<void>;\r\n\r\n  abstract removeItem(key: string): void;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { lib, SHA256, enc } from 'crypto-js';\r\nimport { StorageService } from './storage.service';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\nexport interface ChallengePair {\r\n  codeVerifier: string;\r\n  codeChallenge: string;\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class PkceService {\r\n  public challengePair$: BehaviorSubject<ChallengePair> = new BehaviorSubject(null);\r\n\r\n  constructor(private storageService: StorageService) {}\r\n\r\n  public clearChallengeFromStorage(): void {\r\n    this.storageService.removeItem('codeVerifier');\r\n  }\r\n\r\n  public loadChallengePair(): void {\r\n    this._challengeFromStorage().then((challenge) => {\r\n      const challengePair = this.challengePair$.getValue();\r\n      if (!challengePair && challenge) {\r\n        this.challengePair$.next(challenge);\r\n      } else {\r\n        this.generateChallengePair();\r\n      }\r\n    });\r\n  }\r\n\r\n  public generateChallengePair(): void {\r\n    const codeVerifier = this._stripSymbols(lib.WordArray.random(32).toString(enc.Base64));\r\n    const codeChallenge = this._stripSymbols(SHA256(codeVerifier).toString(enc.Base64));\r\n    this.storageService.setItem('codeVerifier', codeVerifier);\r\n    this.challengePair$.next({ codeChallenge, codeVerifier });\r\n  }\r\n\r\n  private async _challengeFromStorage(): Promise<ChallengePair> {\r\n    const codeVerifier = await this.storageService.getItem('codeVerifier');\r\n    if (!codeVerifier) return null;\r\n    return { codeChallenge: null, codeVerifier };\r\n  }\r\n\r\n  private _stripSymbols(str: string): string {\r\n    return str.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { TokenFilter } from '../interfaces/token-filter.interface';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CognitoConfigService {\r\n  public cognitoAwsRegion: string;\r\n  public cognitoUserPoolId: string;\r\n  public cognitoDomain: string;\r\n  public cognitoClientId: string;\r\n  public redirectUri: string;\r\n  public logoutUri: string;\r\n  public codeChallengeMethod: string;\r\n  public scopes: string;\r\n  public bearerTokenUrlFilter: TokenFilter[];\r\n  public errorPage = 'error';\r\n  public navigateWithoutToken = true;\r\n  public useRefreshToken = true;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\n\r\nimport { ReplaySubject, combineLatest, BehaviorSubject } from 'rxjs';\r\nimport { filter, take } from 'rxjs/operators';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\n\r\nimport { BypassErrorService } from '@uoa/error-pages';\r\n\r\nimport { Auth2UrlsDto, UserInfoDto, Cognito2UrlsDto } from '../interfaces';\r\nimport { UrlBuilder } from './urlbuilder.service';\r\nimport { CognitoConfigService } from './cognito-config.service';\r\nimport { StorageService } from './storage.service';\r\nimport { PkceService } from './pkce.service';\r\nimport jwt_decode from 'jwt-decode';\r\n\r\n@UntilDestroy()\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AuthService {\r\n  private _oAuth2Urls$: ReplaySubject<Auth2UrlsDto> = new ReplaySubject(1);\r\n  private _cognitoUrls$: ReplaySubject<Cognito2UrlsDto> = new ReplaySubject(1);\r\n  public loggedIn$: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n  public userInfo$: BehaviorSubject<UserInfoDto> = new BehaviorSubject(undefined);\r\n\r\n  constructor(\r\n    private _httpClient: HttpClient,\r\n    private _router: Router,\r\n    private _urlBuilder: UrlBuilder,\r\n    private _pkceService: PkceService,\r\n    private _cognitoConfig: CognitoConfigService,\r\n    private _storageService: StorageService,\r\n    private _bypassErrorService: BypassErrorService\r\n  ) {\r\n    this._cognitoUrls$ = this._urlBuilder.cognitoUrls;\r\n    this._urlBuilder.getEndPoints(this._cognitoConfig);\r\n    combineLatest([this._pkceService.challengePair$, this._cognitoUrls$])\r\n      .pipe(\r\n        filter(([challengePair, urls]) => !!challengePair),\r\n        untilDestroyed(this)\r\n      )\r\n      .subscribe(([pair, url]) => this._oAuth2Urls$.next(this._urlBuilder.buildCognitoAuthUrl(this._cognitoConfig, pair)));\r\n  }\r\n\r\n  public async hasTokenExpired(): Promise<boolean> {\r\n    const expiresAt = await this._storageService.getItem('expiresAt');\r\n    if (!expiresAt) return true;\r\n\r\n    // be careful expiresAt is in seconds and Date.now() in milliseconds\r\n    return expiresAt && Date.now() >= Number(expiresAt) - 10000;\r\n  }\r\n\r\n  public async obtainValidAccessToken(): Promise<string | void> {\r\n    let validToken = true;\r\n    if (await this.hasTokenExpired()) {\r\n      // check if we have a refreshToken\r\n      const refreshToken = await this._storageService.getItem('refreshToken');\r\n      if (refreshToken && this._cognitoConfig.useRefreshToken) {\r\n        await this._exchangeRefreshTokenForTokens(refreshToken);\r\n        validToken = true;\r\n      } else {\r\n        validToken = false; // invalid token and no refresh token\r\n      }\r\n    }\r\n    let token: string;\r\n    if (validToken) {\r\n      token = await this._storageService.getItem('accessToken');\r\n    }\r\n    if (!token) {\r\n      this.loggedIn$.next(false);\r\n      if (this._cognitoConfig.navigateWithoutToken) {\r\n        return this._navigateToAuthUrl();\r\n      }\r\n    } else {\r\n      this.loggedIn$.next(true);\r\n    }\r\n\r\n    return token;\r\n  }\r\n\r\n  public async exchangeCodeForTokens(code) {\r\n    this._pkceService.loadChallengePair();\r\n    const urls = await this._cognitoUrls$.pipe(take(1)).toPromise();\r\n    const oAthUrls = await this._oAuth2Urls$.pipe(take(1)).toPromise();\r\n\r\n    const headers = new HttpHeaders({\r\n      'Content-Type': 'application/x-www-form-urlencoded',\r\n    });\r\n    const body = new HttpParams()\r\n      .set('client_id', this._cognitoConfig.cognitoClientId)\r\n      .set('redirect_uri', urls.redirectUrl)\r\n      .set('code', code)\r\n      .set('code_verifier', oAthUrls.codeVerifier)\r\n      .set('grant_type', 'authorization_code');\r\n\r\n    const response = await this._httpClient.post(urls.tokenEndpoint, body.toString(), { headers }).toPromise();\r\n    if (response) {\r\n      await this._storeTokens(response);\r\n    }\r\n    this._pkceService.clearChallengeFromStorage();\r\n    this.returnToTargetRoute();\r\n  }\r\n\r\n  public logout(): void {\r\n    this._cognitoUrls$.subscribe((urls) => {\r\n      this._clearOurTokens();\r\n      this._clearTargetUrl();\r\n      window.open(\r\n        `${urls.logoutUrl}?client_id=${this._cognitoConfig.cognitoClientId}&logout_uri=${this._cognitoConfig.logoutUri}`,\r\n        '_self'\r\n      );\r\n    });\r\n  }\r\n\r\n  public returnToTargetRoute() {\r\n    this._storageService.getItem('targetUrl').then((res) => {\r\n      const url = res ? res : '/';\r\n      this._router.navigateByUrl(url);\r\n    });\r\n  }\r\n\r\n  public async getUserInfos(): Promise<UserInfoDto> {\r\n    const idToken = await this._storageService.getItem('idToken');\r\n    const userInfos: UserInfoDto = {};\r\n    if (idToken) {\r\n      const decodedToken = jwt_decode(idToken);\r\n      userInfos.upi = decodedToken['identities'][0].userId;\r\n      userInfos.userId = decodedToken['custom:EmpID'];\r\n      userInfos.firstName = decodedToken['given_name'];\r\n      userInfos.lastName = decodedToken['family_name'];\r\n      userInfos.email = decodedToken['email'];\r\n      userInfos.groups = decodedToken['custom:Groups'] ? decodedToken['custom:Groups']?.slice(1, -1).split(',') : [];\r\n      this.userInfo$.next(userInfos);\r\n    } else {\r\n      this.userInfo$.next(undefined);\r\n    }\r\n    return userInfos;\r\n  }\r\n\r\n  ////////////// ######## PRIVATE ######## \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\r\n\r\n  private _navigateToAuthUrl(): void {\r\n    this._pkceService.generateChallengePair();\r\n    this._oAuth2Urls$.pipe(take(1)).subscribe((urls) => window.open(urls.authorizeUrl, '_self'));\r\n  }\r\n\r\n  private async _storeTokens(tokens): Promise<void> {\r\n    // store auth data in storage\r\n    await this._storageService.setItem('refreshToken', tokens.refresh_token);\r\n    await this._storageService.setItem('accessToken', tokens.access_token);\r\n    await this._storageService.setItem('idToken', tokens.id_token);\r\n    await this._storageService.setItem('expiresAt', Date.now() + tokens.expires_in * 1000);\r\n    await this.getUserInfos();\r\n  }\r\n\r\n  private _clearOurTokens(): void {\r\n    this._storageService.removeItem('refreshToken');\r\n    this._storageService.removeItem('accessToken');\r\n    this._storageService.removeItem('idToken');\r\n    this._storageService.removeItem('expiresAt');\r\n    this._pkceService.clearChallengeFromStorage();\r\n  }\r\n\r\n  private _clearTargetUrl(): void {\r\n    this._storageService.removeItem('targetUrl');\r\n  }\r\n\r\n  private async _exchangeRefreshTokenForTokens(refreshToken): Promise<void> {\r\n    const headers = new HttpHeaders({\r\n      'Content-Type': 'application/x-www-form-urlencoded',\r\n    });\r\n\r\n    const body = new HttpParams()\r\n      .set('refresh_token', refreshToken)\r\n      .set('client_id', this._cognitoConfig.cognitoClientId)\r\n      .set('grant_type', 'refresh_token');\r\n\r\n    const urls = await this._cognitoUrls$.pipe(take(1)).toPromise();\r\n    this._bypassErrorService.bypassError(urls.tokenEndpoint, [400, 401, 403, 404]);\r\n\r\n    const tokens = await this._httpClient\r\n      .post(urls.tokenEndpoint, body.toString(), { headers })\r\n      .toPromise()\r\n      .catch((_) => {\r\n        this._clearOurTokens();\r\n        this._navigateToAuthUrl();\r\n      });\r\n    const allTokens = { ...tokens, refresh_token: refreshToken };\r\n    if (tokens) {\r\n      await this._storeTokens(allTokens);\r\n    }\r\n  }\r\n}\r\n","import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';\r\nimport { Injectable, Injector } from '@angular/core';\r\nimport { Observable, from } from 'rxjs';\r\n\r\nimport { CognitoConfigService } from '../services/cognito-config.service';\r\nimport { AuthService } from '../services/auth.service';\r\nimport { TokenFilter } from '../interfaces';\r\n\r\n@Injectable()\r\nexport class AuthInterceptor implements HttpInterceptor {\r\n  private _authService: AuthService;\r\n  constructor(private _injector: Injector, private cognitoConfig: CognitoConfigService) {}\r\n\r\n  public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n    const tokenFilter = this._needTokenType(req, this.cognitoConfig.bearerTokenUrlFilter);\r\n    console.debug('Url to check for token', req.url);\r\n    console.debug('Need Token', tokenFilter);\r\n\r\n    if (tokenFilter.hasUrl) {\r\n      return from(this._handleAccessToken(req, next, tokenFilter.optional));\r\n    }\r\n    return next.handle(req);\r\n  }\r\n\r\n  private async _handleAccessToken(req: HttpRequest<any>, next: HttpHandler, optionalToken: boolean) {\r\n    this._authService = this._injector.get(AuthService);\r\n\r\n    if (optionalToken !== true || (await this._authService.hasTokenExpired()) === false) {\r\n      const token = 'Bearer ' + (await this._authService.obtainValidAccessToken());\r\n      req = this._appendAuthHeader(req, token);\r\n    }\r\n    return next.handle(req).toPromise();\r\n  }\r\n\r\n  private _appendAuthHeader(req: HttpRequest<any>, formattedToken: string) {\r\n    const headers = req.headers.append('Authorization', formattedToken);\r\n    return req.clone({ headers });\r\n  }\r\n\r\n  private _needTokenType(req: HttpRequest<any>, tokenFilters: TokenFilter[]): CheckToken {\r\n    let result = false;\r\n    let optional = false;\r\n\r\n    tokenFilters.forEach((keyWord) => {\r\n      if (req.url.includes(keyWord.url)) {\r\n        if (keyWord.optional === true) {\r\n          optional = true;\r\n          if (keyWord.publicPaths && keyWord.publicPaths.length > 0) {\r\n            optional = this._matchUrl(req.url, keyWord.url, keyWord.publicPaths);\r\n          } else if (keyWord.protectedPaths && keyWord.protectedPaths.length > 0) {\r\n            optional = !this._matchUrl(req.url, keyWord.url, keyWord.protectedPaths);\r\n          }\r\n        }\r\n        result = true;\r\n      }\r\n    });\r\n    return { hasUrl: result, optional };\r\n  }\r\n\r\n  private _matchUrl(requestUrl: string, baseUrl: string, paths: string[]): boolean {\r\n    for (let k = 0; k < paths.length; k++) {\r\n      const url = `${baseUrl}/${paths[k]}`;\r\n      if (requestUrl.includes(url)) {\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n}\r\n\r\nexport interface CheckToken {\r\n  hasUrl: boolean;\r\n  optional: boolean;\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\n\r\nimport { AuthInterceptor } from './interceptors/auth.interceptor';\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [CommonModule, HttpClientModule],\r\n  providers: [{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }],\r\n  exports: [],\r\n})\r\nexport class AuthModule {}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router, RouterStateSnapshot, UrlTree } from '@angular/router';\r\n\r\nimport { StorageService } from './storage.service';\r\nimport { AuthService } from './auth.service';\r\nimport { UserInfoDto } from '../interfaces';\r\nimport { CognitoConfigService } from './cognito-config.service';\r\nimport { Observable } from 'rxjs';\r\nimport { distinctUntilChanged } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LoginService {\r\n  public loggedIn$: Observable<boolean>;\r\n  public userInfo$: Observable<UserInfoDto>;\r\n\r\n  constructor(\r\n    private _authService: AuthService,\r\n    private _storageService: StorageService,\r\n    private _router: Router,\r\n    private _cognitoConfig: CognitoConfigService\r\n  ) {\r\n    this.loggedIn$ = this._authService.loggedIn$.pipe(distinctUntilChanged());\r\n    this.userInfo$ = this._authService.userInfo$.pipe(distinctUntilChanged());\r\n  }\r\n\r\n  public async isAuthenticated(): Promise<boolean> {\r\n    const token = await this._storageService.getItem('accessToken');\r\n    const authenticated = !(await this._authService.hasTokenExpired()) && !!token;\r\n    this._authService.loggedIn$.next(authenticated);\r\n    if (authenticated) {\r\n      this.getUserInfo();\r\n    }\r\n    return authenticated;\r\n  }\r\n\r\n  public async doLogin(targetReturnUrl?: string): Promise<boolean | string | void> {\r\n    this._storageService.setItem('targetUrl', targetReturnUrl);\r\n    return await this._authService.obtainValidAccessToken();\r\n  }\r\n\r\n  /**\r\n   *  It is to handle login success case only to use returned code to get token, not Authentication.\r\n   *  So it should always return true or redirect if there is an error from server.\r\n   */\r\n  async loginSuccess(state: RouterStateSnapshot): Promise<boolean | UrlTree> {\r\n    const code = state.root.queryParamMap.get('code');\r\n    const error = state.root.queryParamMap.get('error');\r\n    const errorDescription = state.root.queryParamMap.get('error_description');\r\n    if (code) {\r\n      await this._authService.exchangeCodeForTokens(code);\r\n      console.debug('code exchange happened successfully');\r\n    } else if (error) {\r\n      console.debug('Auth error Code: ', error);\r\n      console.debug('Auth Error Description: ', errorDescription);\r\n      return Promise.resolve(this._router.createUrlTree([`${this._cognitoConfig.errorPage}/403`]));\r\n    }\r\n    return Promise.resolve(true);\r\n  }\r\n\r\n  public async getUserInfo(): Promise<UserInfoDto> {\r\n    return await this._authService.getUserInfos();\r\n  }\r\n\r\n  public logout(): void {\r\n    this._authService.logout();\r\n  }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot, UrlTree } from '@angular/router';\r\nimport { LoginService } from '../services/login.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nclass AuthGuardService {\r\n  constructor(private _loginService: LoginService) {}\r\n  async canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<UrlTree | boolean> {\r\n    const isLoginSuccess = await this._loginService.loginSuccess(state);\r\n    if (true !== isLoginSuccess) {\r\n      return isLoginSuccess;\r\n    } else {\r\n      return !!(await this._loginService.doLogin(state.url));\r\n    }\r\n  }\r\n}\r\n\r\nexport const AuthGuard: CanActivateFn = (next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<UrlTree | boolean> => {\r\n  return inject(AuthGuardService).canActivate(next, state);\r\n};\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot, UrlTree } from '@angular/router';\r\n\r\nimport { LoginService } from '../services/login.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nclass LoginSuccessGuardService {\r\n  constructor(private _loginService: LoginService) {}\r\n  async canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean | UrlTree> {\r\n    return await this._loginService.loginSuccess(state);\r\n  }\r\n}\r\n\r\nexport const LoginSuccessGuard: CanActivateFn = (next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean | UrlTree> => {\r\n  return inject(LoginSuccessGuardService).canActivate(next, state);\r\n};\r\n","/*\r\n * Public API Surface of auth\r\n */\r\n\r\nexport * from './lib/core/auth.module';\r\nexport * from './lib/core/services/cognito-config.service';\r\nexport * from './lib/core/services/login.service';\r\nexport * from './lib/core/interfaces';\r\nexport * from './lib/core/guards/auth.guard';\r\nexport * from './lib/core/guards/login-success.guard';\r\nexport * from './lib/core/services/storage.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.StorageService","i3.UrlBuilder","i4.PkceService","i5.CognitoConfigService","i6.StorageService","i1.CognitoConfigService","i1.AuthService","i2.StorageService","i3","i4.CognitoConfigService","i1.LoginService"],"mappings":"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"}