UNPKG

@auth0/angular-jwt

Version:

JSON Web Token helper library for Angular

1 lines 22.7 kB
{"version":3,"file":"auth0-angular-jwt.umd.js","sources":["../../../projects/angular-jwt/src/lib/jwtoptions.token.ts","../../../projects/angular-jwt/src/lib/jwthelper.service.ts","../../../projects/angular-jwt/src/lib/jwt.interceptor.ts","../../../projects/angular-jwt/src/lib/angular-jwt.module.ts","../../../projects/angular-jwt/src/index.ts","../../../projects/angular-jwt/src/auth0-angular-jwt.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const JWT_OPTIONS = new InjectionToken('JWT_OPTIONS');\n","import { HttpRequest } from '@angular/common/http';\n// tslint:disable:no-bitwise\n\nimport { Injectable, Inject } from '@angular/core';\nimport { JWT_OPTIONS } from './jwtoptions.token';\n\n@Injectable()\nexport class JwtHelperService {\n tokenGetter: () => string | Promise<string>;\n\n constructor(@Inject(JWT_OPTIONS) config: any = null) {\n this.tokenGetter = (config && config.tokenGetter) || function () {};\n }\n\n public urlBase64Decode(str: string): string {\n let output = str.replace(/-/g, '+').replace(/_/g, '/');\n switch (output.length % 4) {\n case 0: {\n break;\n }\n case 2: {\n output += '==';\n break;\n }\n case 3: {\n output += '=';\n break;\n }\n default: {\n throw new Error('Illegal base64url string!');\n }\n }\n return this.b64DecodeUnicode(output);\n }\n\n // credits for decoder goes to https://github.com/atk\n private b64decode(str: string): string {\n const chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n let output = '';\n\n str = String(str).replace(/=+$/, '');\n\n if (str.length % 4 === 1) {\n throw new Error(\n `'atob' failed: The string to be decoded is not correctly encoded.`\n );\n }\n\n for (\n // initialize result and counters\n let bc = 0, bs: any, buffer: any, idx = 0;\n // get next character\n (buffer = str.charAt(idx++));\n // character found in table? initialize bit storage and add its ascii value;\n ~buffer &&\n ((bs = bc % 4 ? bs * 64 + buffer : buffer),\n // and if not first of each 4 characters,\n // convert the first 8 bits to one ascii character\n bc++ % 4)\n ? (output += String.fromCharCode(255 & (bs >> ((-2 * bc) & 6))))\n : 0\n ) {\n // try to find character in table (0-63, not found => -1)\n buffer = chars.indexOf(buffer);\n }\n return output;\n }\n\n private b64DecodeUnicode(str: any) {\n return decodeURIComponent(\n Array.prototype.map\n .call(this.b64decode(str), (c: any) => {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join('')\n );\n }\n\n public decodeToken<T = any>(token: string): T | null;\n public decodeToken<T = any>(token: Promise<string>): Promise<T | null>;\n public decodeToken<T = any>(): null | T | Promise<T | null>;\n public decodeToken<T = any>(token: string | Promise<string> = this.tokenGetter()): null | T | Promise<T | null> {\n if (token instanceof Promise) {\n return token.then(t => this._decodeToken(t));\n }\n\n return this._decodeToken(token);\n }\n\n private _decodeToken<T = any>(token: string): null | T {\n if (!token || token === '') {\n return null;\n }\n\n const parts = token.split('.');\n\n if (parts.length !== 3) {\n throw new Error(\n `The inspected token doesn't appear to be a JWT. Check to make sure it has three parts and see https://jwt.io for more.`\n );\n }\n\n const decoded = this.urlBase64Decode(parts[1]);\n if (!decoded) {\n throw new Error('Cannot decode the token.');\n }\n\n return JSON.parse(decoded);\n }\n\n public getTokenExpirationDate(token: string): Date | null;\n public getTokenExpirationDate(token: Promise<string>): Promise<Date | null>;\n public getTokenExpirationDate(): null | Date | Promise<Date | null>;\n public getTokenExpirationDate(\n token: string | Promise<string> = this.tokenGetter()\n ): Date | null | Promise<Date | null> {\n if (token instanceof Promise) {\n return token.then(t => this._getTokenExpirationDate(t));\n }\n\n return this._getTokenExpirationDate(token);\n }\n\n private _getTokenExpirationDate(token: string): Date | null {\n let decoded: any;\n decoded = this.decodeToken(token);\n\n if (!decoded || !decoded.hasOwnProperty('exp')) {\n return null;\n }\n\n const date = new Date(0);\n date.setUTCSeconds(decoded.exp);\n\n return date;\n }\n\n public isTokenExpired(token?: undefined, offsetSeconds?: number): boolean | Promise<boolean>;\n public isTokenExpired(token: string | null, offsetSeconds?: number): boolean;\n public isTokenExpired(token: Promise<string>, offsetSeconds?: number): Promise<boolean>;\n public isTokenExpired(\n token: undefined | null | string | Promise<string> = this.tokenGetter(),\n offsetSeconds?: number\n ): boolean | Promise<boolean> {\n if (token instanceof Promise) {\n return token.then(t => this._isTokenExpired(t, offsetSeconds));\n }\n\n return this._isTokenExpired(token, offsetSeconds);\n }\n\n private _isTokenExpired(\n token: string | null,\n offsetSeconds?: number\n ): boolean {\n if (!token || token === '') {\n return true;\n }\n const date = this.getTokenExpirationDate(token);\n offsetSeconds = offsetSeconds || 0;\n\n if (date === null) {\n return false;\n }\n\n return !(date.valueOf() > new Date().valueOf() + offsetSeconds * 1000);\n }\n\n public getAuthScheme(\n authScheme: Function | string | undefined,\n request: HttpRequest<any>\n ): string | undefined {\n if (typeof authScheme === 'function') {\n return authScheme(request);\n }\n\n return authScheme;\n }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor,\n} from '@angular/common/http';\nimport { DOCUMENT } from '@angular/common';\nimport { JwtHelperService } from './jwthelper.service';\nimport { JWT_OPTIONS } from './jwtoptions.token';\n\nimport { map, mergeMap } from 'rxjs/operators';\nimport { defer, from, Observable, of } from 'rxjs';\n\nconst fromPromiseOrValue = <T>(input: T | Promise<T>) => {\n if (input instanceof Promise) {\n return defer(() => input);\n }\n return of(input);\n};\n@Injectable()\nexport class JwtInterceptor implements HttpInterceptor {\n tokenGetter: (\n request?: HttpRequest<any>\n ) => string | null | Promise<string | null>;\n headerName: string;\n authScheme: string | ((request?: HttpRequest<any>) => string);\n allowedDomains: Array<string | RegExp>;\n disallowedRoutes: Array<string | RegExp>;\n throwNoTokenError: boolean;\n skipWhenExpired: boolean;\n standardPorts: string[] = ['80', '443'];\n\n constructor(\n @Inject(JWT_OPTIONS) config: any,\n public jwtHelper: JwtHelperService,\n @Inject(DOCUMENT) private document: Document\n ) {\n this.tokenGetter = config.tokenGetter;\n this.headerName = config.headerName || 'Authorization';\n this.authScheme =\n config.authScheme || config.authScheme === ''\n ? config.authScheme\n : 'Bearer ';\n this.allowedDomains = config.allowedDomains || [];\n this.disallowedRoutes = config.disallowedRoutes || [];\n this.throwNoTokenError = config.throwNoTokenError || false;\n this.skipWhenExpired = config.skipWhenExpired;\n }\n\n isAllowedDomain(request: HttpRequest<any>): boolean {\n const requestUrl: URL = new URL(request.url, this.document.location.origin);\n\n // If the host equals the current window origin,\n // the domain is allowed by default\n if (requestUrl.host === this.document.location.host) {\n return true;\n }\n\n // If not the current domain, check the allowed list\n const hostName = `${requestUrl.hostname}${\n requestUrl.port && !this.standardPorts.includes(requestUrl.port)\n ? ':' + requestUrl.port\n : ''\n }`;\n\n return (\n this.allowedDomains.findIndex((domain) =>\n typeof domain === 'string'\n ? domain === hostName\n : domain instanceof RegExp\n ? domain.test(hostName)\n : false\n ) > -1\n );\n }\n\n isDisallowedRoute(request: HttpRequest<any>): boolean {\n const requestedUrl: URL = new URL(\n request.url,\n this.document.location.origin\n );\n\n return (\n this.disallowedRoutes.findIndex((route: string | RegExp) => {\n if (typeof route === 'string') {\n const parsedRoute: URL = new URL(\n route,\n this.document.location.origin\n );\n return (\n parsedRoute.hostname === requestedUrl.hostname &&\n parsedRoute.pathname === requestedUrl.pathname\n );\n }\n\n if (route instanceof RegExp) {\n return route.test(request.url);\n }\n\n return false;\n }) > -1\n );\n }\n\n handleInterception(\n token: string | null,\n request: HttpRequest<any>,\n next: HttpHandler\n ) {\n const authScheme = this.jwtHelper.getAuthScheme(this.authScheme, request);\n\n if (!token && this.throwNoTokenError) {\n throw new Error('Could not get token from tokenGetter function.');\n }\n\n let tokenIsExpired = of(false);\n\n if (this.skipWhenExpired) {\n tokenIsExpired = token ? fromPromiseOrValue(this.jwtHelper.isTokenExpired(token)) : of(true);\n }\n\n if (token) {\n return tokenIsExpired.pipe(\n map((isExpired) =>\n isExpired && this.skipWhenExpired\n ? request.clone()\n : request.clone({\n setHeaders: {\n [this.headerName]: `${authScheme}${token}`,\n },\n })\n ),\n mergeMap((innerRequest) => next.handle(innerRequest))\n );\n }\n\n return next.handle(request);\n }\n\n intercept(\n request: HttpRequest<any>,\n next: HttpHandler\n ): Observable<HttpEvent<any>> {\n if (!this.isAllowedDomain(request) || this.isDisallowedRoute(request)) {\n return next.handle(request);\n }\n const token = this.tokenGetter(request);\n\n return fromPromiseOrValue(token).pipe(\n mergeMap((asyncToken: string | null) => {\n return this.handleInterception(asyncToken, request, next);\n })\n );\n }\n}\n","import {\n NgModule,\n ModuleWithProviders,\n Optional,\n SkipSelf,\n Provider,\n} from '@angular/core';\nimport { HttpRequest, HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { JwtInterceptor } from './jwt.interceptor';\nimport { JWT_OPTIONS } from './jwtoptions.token';\nimport { JwtHelperService } from './jwthelper.service';\n\nexport interface JwtConfig {\n tokenGetter?: (\n request?: HttpRequest<any>\n ) => string | null | Promise<string | null>;\n headerName?: string;\n authScheme?: string | ((request?: HttpRequest<any>) => string);\n allowedDomains?: Array<string | RegExp>;\n disallowedRoutes?: Array<string | RegExp>;\n throwNoTokenError?: boolean;\n skipWhenExpired?: boolean;\n}\n\nexport interface JwtModuleOptions {\n jwtOptionsProvider?: Provider;\n config?: JwtConfig;\n}\n\n@NgModule()\nexport class JwtModule {\n constructor(@Optional() @SkipSelf() parentModule: JwtModule) {\n if (parentModule) {\n throw new Error(\n `JwtModule is already loaded. It should only be imported in your application's main module.`\n );\n }\n }\n static forRoot(options: JwtModuleOptions): ModuleWithProviders<JwtModule> {\n return {\n ngModule: JwtModule,\n providers: [\n {\n provide: HTTP_INTERCEPTORS,\n useClass: JwtInterceptor,\n multi: true,\n },\n options.jwtOptionsProvider || {\n provide: JWT_OPTIONS,\n useValue: options.config,\n },\n JwtHelperService,\n ],\n };\n }\n}\n","/*\n * Public API Surface of angular-jwt\n */\n\nexport * from './lib/jwt.interceptor';\nexport * from './lib/jwthelper.service';\nexport * from './lib/jwtoptions.token';\nexport * from './lib/angular-jwt.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["InjectionToken","i0","Injectable","Inject","defer","of","map","mergeMap","i1.JwtHelperService","DOCUMENT","HTTP_INTERCEPTORS","NgModule","Optional","SkipSelf"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;QAEa,WAAW,GAAG,IAAIA,iBAAc,CAAC,aAAa;;ICD3D;AAMA,QAAA,gBAAA,kBAAA,YAAA;IAGE,IAAA,SAAA,gBAAA,CAAiC,MAAkB,EAAA;IAAlB,QAAA,IAAA,MAAA,KAAA,KAAA,CAAA,EAAA,EAAA,MAAkB,GAAA,IAAA,CAAA,EAAA;IACjD,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,KAAK,YAAA,GAAc,CAAC;SACrE;QAEM,gBAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAgB,GAAW,EAAA;IAChC,QAAA,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvD,QAAA,QAAQ,MAAM,CAAC,MAAM,GAAG,CAAC;gBACvB,KAAK,CAAC,EAAE;oBACN,MAAM;IACP,aAAA;gBACD,KAAK,CAAC,EAAE;oBACN,MAAM,IAAI,IAAI,CAAC;oBACf,MAAM;IACP,aAAA;gBACD,KAAK,CAAC,EAAE;oBACN,MAAM,IAAI,GAAG,CAAC;oBACd,MAAM;IACP,aAAA;IACD,YAAA,SAAS;IACP,gBAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC9C,aAAA;IACF,SAAA;IACD,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;SACtC,CAAA;;QAGO,gBAAS,CAAA,SAAA,CAAA,SAAA,GAAT,UAAU,GAAW,EAAA;YAC3B,IAAM,KAAK,GACT,mEAAmE,CAAC;YACtE,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,QAAA,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAErC,QAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;IACxB,YAAA,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACH,SAAA;IAED,QAAA;;IAEE,QAAA,IAAI,EAAE,GAAG,CAAC,EAAE,EAAO,GAAA,KAAA,CAAA,EAAE,MAAW,GAAA,KAAA,CAAA,EAAE,GAAG,GAAG,CAAC;;aAExC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;;IAE3B,QAAA,CAAC,MAAM;IACP,aAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,MAAM;;;oBAGzC,EAAE,EAAE,GAAG,CAAC,CAAC;mBACJ,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;kBAC7D,CAAC,EACL;;IAEA,YAAA,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,SAAA;IACD,QAAA,OAAO,MAAM,CAAC;SACf,CAAA;QAEO,gBAAgB,CAAA,SAAA,CAAA,gBAAA,GAAhB,UAAiB,GAAQ,EAAA;IAC/B,QAAA,OAAO,kBAAkB,CACvB,KAAK,CAAC,SAAS,CAAC,GAAG;iBAChB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,UAAC,CAAM,EAAA;gBAChC,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,SAAC,CAAC;IACD,aAAA,IAAI,CAAC,EAAE,CAAC,CACZ,CAAC;SACH,CAAA;QAKM,gBAAW,CAAA,SAAA,CAAA,WAAA,GAAX,UAAqB,KAAoD,EAAA;YAAzE,IAMN,KAAA,GAAA,IAAA,CAAA;IAN2B,QAAA,IAAA,KAAA,KAAA,KAAA,CAAA,EAAA,EAAA,KAAA,GAAkC,IAAI,CAAC,WAAW,EAAE,CAAA,EAAA;YAC9E,IAAI,KAAK,YAAY,OAAO,EAAE;IAC5B,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,UAAA,CAAC,EAAI,EAAA,OAAA,KAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAApB,EAAoB,CAAC,CAAC;IAC9C,SAAA;IAED,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SACjC,CAAA;QAEO,gBAAY,CAAA,SAAA,CAAA,YAAA,GAAZ,UAAsB,KAAa,EAAA;IACzC,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,EAAE;IAC1B,YAAA,OAAO,IAAI,CAAC;IACb,SAAA;YAED,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE/B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;IACtB,YAAA,MAAM,IAAI,KAAK,CACb,wHAAwH,CACzH,CAAC;IACH,SAAA;YAED,IAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,OAAO,EAAE;IACZ,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC7C,SAAA;IAED,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC5B,CAAA;QAKM,gBAAsB,CAAA,SAAA,CAAA,sBAAA,GAAtB,UACL,KAAoD,EAAA;YAD/C,IAQN,KAAA,GAAA,IAAA,CAAA;IAPC,QAAA,IAAA,KAAA,KAAA,KAAA,CAAA,EAAA,EAAA,KAAA,GAAkC,IAAI,CAAC,WAAW,EAAE,CAAA,EAAA;YAEpD,IAAI,KAAK,YAAY,OAAO,EAAE;IAC5B,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,UAAA,CAAC,EAAI,EAAA,OAAA,KAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAA/B,EAA+B,CAAC,CAAC;IACzD,SAAA;IAED,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;SAC5C,CAAA;QAEO,gBAAuB,CAAA,SAAA,CAAA,uBAAA,GAAvB,UAAwB,KAAa,EAAA;IAC3C,QAAA,IAAI,OAAY,CAAC;IACjB,QAAA,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAElC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;IAC9C,YAAA,OAAO,IAAI,CAAC;IACb,SAAA;IAED,QAAA,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEhC,QAAA,OAAO,IAAI,CAAC;SACb,CAAA;IAKM,IAAA,gBAAA,CAAA,SAAA,CAAA,cAAc,GAAd,UACL,KAAuE,EACvE,aAAsB,EAAA;YAFjB,IASN,KAAA,GAAA,IAAA,CAAA;IARC,QAAA,IAAA,KAAA,KAAA,KAAA,CAAA,EAAA,EAAA,KAAA,GAAqD,IAAI,CAAC,WAAW,EAAE,CAAA,EAAA;YAGvE,IAAI,KAAK,YAAY,OAAO,EAAE;IAC5B,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,eAAe,CAAC,CAAC,EAAE,aAAa,CAAC,CAAtC,EAAsC,CAAC,CAAC;IAChE,SAAA;YAED,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;SACnD,CAAA;IAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,eAAe,GAAf,UACN,KAAoB,EACpB,aAAsB,EAAA;IAEtB,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,EAAE;IAC1B,YAAA,OAAO,IAAI,CAAC;IACb,SAAA;YACD,IAAM,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAChD,QAAA,aAAa,GAAG,aAAa,IAAI,CAAC,CAAC;YAEnC,IAAI,IAAI,KAAK,IAAI,EAAE;IACjB,YAAA,OAAO,KAAK,CAAC;IACd,SAAA;IAED,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,aAAa,GAAG,IAAI,CAAC,CAAC;SACxE,CAAA;IAEM,IAAA,gBAAA,CAAA,SAAA,CAAA,aAAa,GAAb,UACL,UAAyC,EACzC,OAAyB,EAAA;IAEzB,QAAA,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;IACpC,YAAA,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5B,SAAA;IAED,QAAA,OAAO,UAAU,CAAC;SACnB,CAAA;;;IA3KU,gBAAA,CAAA,IAAA,GAAAC,aAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAAA,aAAA,EAAA,IAAA,EAAA,gBAAgB,kBAGP,WAAW,EAAA,CAAA,EAAA,MAAA,EAAAA,aAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4IAHpB,gBAAgB,EAAA,CAAA,CAAA;sHAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;sBAD5BC,aAAU;;;kCAIIC,SAAM;mCAAC,WAAW,CAAA;;;;ICIjC,IAAM,kBAAkB,GAAG,UAAI,KAAqB,EAAA;QAClD,IAAI,KAAK,YAAY,OAAO,EAAE;YAC5B,OAAOC,UAAK,CAAC,YAAM,EAAA,OAAA,KAAK,CAAL,EAAK,CAAC,CAAC;IAC3B,KAAA;IACD,IAAA,OAAOC,OAAE,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,CAAC;AAEF,QAAA,cAAA,kBAAA,YAAA;IAYE,IAAA,SAAA,cAAA,CACuB,MAAW,EACzB,SAA2B,EACR,QAAkB,EAAA;IADrC,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;IACR,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;YAL9C,IAAA,CAAA,aAAa,GAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAOtC,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YACtC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,eAAe,CAAC;IACvD,QAAA,IAAI,CAAC,UAAU;IACb,YAAA,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,KAAK,EAAE;sBACzC,MAAM,CAAC,UAAU;sBACjB,SAAS,CAAC;YAChB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;YAClD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,KAAK,CAAC;IAC3D,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;SAC/C;QAED,cAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAgB,OAAyB,EAAA;IACvC,QAAA,IAAM,UAAU,GAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;;;YAI5E,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;IACnD,YAAA,OAAO,IAAI,CAAC;IACb,SAAA;;YAGD,IAAM,QAAQ,GAAG,EAAG,GAAA,UAAU,CAAC,QAAQ,IACrC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;IAC9D,cAAE,GAAG,GAAG,UAAU,CAAC,IAAI;kBACrB,EACN,CAAE,CAAC;IAEH,QAAA,QACE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,UAAC,MAAM,EACnC,EAAA,OAAA,OAAO,MAAM,KAAK,QAAQ;kBACtB,MAAM,KAAK,QAAQ;kBACnB,MAAM,YAAY,MAAM;IAC1B,kBAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;sBACrB,KAAK,CAJT,EAIS,CACV,GAAG,CAAC,CAAC,EACN;SACH,CAAA;QAED,cAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAkB,OAAyB,EAAA;YAA3C,IA0BC,KAAA,GAAA,IAAA,CAAA;IAzBC,QAAA,IAAM,YAAY,GAAQ,IAAI,GAAG,CAC/B,OAAO,CAAC,GAAG,EACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAC9B,CAAC;YAEF,QACE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAC,KAAsB,EAAA;IACrD,YAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;IAC7B,gBAAA,IAAM,WAAW,GAAQ,IAAI,GAAG,CAC9B,KAAK,EACL,KAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAC9B,CAAC;IACF,gBAAA,QACE,WAAW,CAAC,QAAQ,KAAK,YAAY,CAAC,QAAQ;IAC9C,oBAAA,WAAW,CAAC,QAAQ,KAAK,YAAY,CAAC,QAAQ,EAC9C;IACH,aAAA;gBAED,IAAI,KAAK,YAAY,MAAM,EAAE;oBAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,aAAA;IAED,YAAA,OAAO,KAAK,CAAC;IACf,SAAC,CAAC,GAAG,CAAC,CAAC,EACP;SACH,CAAA;IAED,IAAA,cAAA,CAAA,SAAA,CAAA,kBAAkB,GAAlB,UACE,KAAoB,EACpB,OAAyB,EACzB,IAAiB,EAAA;YAHnB,IAiCC,KAAA,GAAA,IAAA,CAAA;IA5BC,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAE1E,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,iBAAiB,EAAE;IACpC,YAAA,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACnE,SAAA;IAED,QAAA,IAAI,cAAc,GAAGA,OAAE,CAAC,KAAK,CAAC,CAAC;YAE/B,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,cAAc,GAAG,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,GAAGA,OAAE,CAAC,IAAI,CAAC,CAAC;IAC9F,SAAA;IAED,QAAA,IAAI,KAAK,EAAE;IACT,YAAA,OAAO,cAAc,CAAC,IAAI,CACxBC,aAAG,CAAC,UAAC,SAAS,EAAA;;IACZ,gBAAA,OAAA,SAAS,IAAI,KAAI,CAAC,eAAe;IAC/B,sBAAE,OAAO,CAAC,KAAK,EAAE;IACjB,sBAAE,OAAO,CAAC,KAAK,CAAC;4BACZ,UAAU,GAAA,EAAA,GAAA,EAAA;IACR,4BAAA,EAAA,CAAC,KAAI,CAAC,UAAU,IAAG,EAAG,GAAA,UAAU,GAAG,KAAO;IAC3C,4BAAA,EAAA,CAAA;yBACF,CAAC,CAAA;IANN,aAMM,CACP,EACDC,kBAAQ,CAAC,UAAC,YAAY,IAAK,OAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAA,CAAC,CACtD,CAAC;IACH,SAAA;IAED,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;SAC7B,CAAA;IAED,IAAA,cAAA,CAAA,SAAA,CAAA,SAAS,GAAT,UACE,OAAyB,EACzB,IAAiB,EAAA;YAFnB,IAcC,KAAA,GAAA,IAAA,CAAA;IAVC,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE;IACrE,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,SAAA;YACD,IAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAExC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,CACnCA,kBAAQ,CAAC,UAAC,UAAyB,EAAA;gBACjC,OAAO,KAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;aAC3D,CAAC,CACH,CAAC;SACH,CAAA;;;sIArIU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAaf,WAAW,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAEXC,eAAQ,EAAA,CAAA,EAAA,MAAA,EAAAR,aAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;0IAfP,cAAc,EAAA,CAAA,CAAA;sHAAd,cAAc,EAAA,UAAA,EAAA,CAAA;sBAD1BC,aAAU;;;kCAcNC,SAAM;mCAAC,WAAW,CAAA;kEAEiB,QAAQ,EAAA,UAAA,EAAA,CAAA;kCAA3CA,SAAM;mCAACM,eAAQ,CAAA;;;;ACNpB,QAAA,SAAA,kBAAA,YAAA;IACE,IAAA,SAAA,SAAA,CAAoC,YAAuB,EAAA;IACzD,QAAA,IAAI,YAAY,EAAE;IAChB,YAAA,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F,CAAC;IACH,SAAA;SACF;QACM,SAAO,CAAA,OAAA,GAAd,UAAe,OAAyB,EAAA;YACtC,OAAO;IACL,YAAA,QAAQ,EAAE,SAAS;IACnB,YAAA,SAAS,EAAE;IACT,gBAAA;IACE,oBAAA,OAAO,EAAEC,sBAAiB;IAC1B,oBAAA,QAAQ,EAAE,cAAc;IACxB,oBAAA,KAAK,EAAE,IAAI;IACZ,iBAAA;oBACD,OAAO,CAAC,kBAAkB,IAAI;IAC5B,oBAAA,OAAO,EAAE,WAAW;wBACpB,QAAQ,EAAE,OAAO,CAAC,MAAM;IACzB,iBAAA;oBACD,gBAAgB;IACjB,aAAA;aACF,CAAC;SACH,CAAA;;;IAxBU,SAAA,CAAA,IAAA,GAAAT,aAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAAA,aAAA,EAAA,IAAA,EAAA,SAAS,kBAC8B,SAAS,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAAA,aAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;kIADhD,SAAS,EAAA,CAAA,CAAA;kIAAT,SAAS,EAAA,CAAA,CAAA;sHAAT,SAAS,EAAA,UAAA,EAAA,CAAA;sBADrBU,WAAQ;;4BAE2C,SAAS,EAAA,UAAA,EAAA,CAAA;kCAA9CC,WAAQ;;kCAAIC,WAAQ;;;;IC/BnC;;IAEG;;ICFH;;IAEG;;;;;;;;;;;;;"}