{"version":3,"sources":["../src/domain.ts","../src/smart.ts"],"names":["Schema","Data","createSign"],"mappings":"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","file":"smart.cjs","sourcesContent":["import { Data, Effect, Schema } from \"effect\";\n\nconst NonEmptyStringSchema = Schema.String.pipe(Schema.nonEmptyString());\n\nconst isIsoDateString = (value: string): boolean => {\n  const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value);\n  if (!match) {\n    return false;\n  }\n\n  const [, year, month, day] = match;\n  const parsed = new Date(`${value}T00:00:00.000Z`);\n  return (\n    parsed.getUTCFullYear() === Number(year) &&\n    parsed.getUTCMonth() + 1 === Number(month) &&\n    parsed.getUTCDate() === Number(day)\n  );\n};\n\nconst IsoDateStringSchema = Schema.String.pipe(\n  Schema.filter(\n    (value) => isIsoDateString(value) || \"must be a valid ISO date string\"\n  )\n);\n\nconst UnitsSchema = Schema.Number.pipe(Schema.int(), Schema.positive());\nconst NpiSchema = Schema.String.pipe(Schema.pattern(/^\\d{10}$/));\nconst TinSchema = Schema.String.pipe(Schema.pattern(/^\\d{2}-\\d{7}$/));\n\nexport const SupportingInfoSchema = Schema.Struct({\n  id: NonEmptyStringSchema,\n  value: NonEmptyStringSchema,\n  source: Schema.Literal(\"chart\", \"patient\", \"payer\", \"external\")\n});\n\nexport type SupportingInfo = typeof SupportingInfoSchema.Type;\n\nexport const SupportingInfoListSchema = Schema.Array(SupportingInfoSchema);\n\nexport const decodeSupportingInfoList = (\n  input: unknown\n): Effect.Effect<ReadonlyArray<SupportingInfo>, ProtocolError> =>\n  Effect.suspend(() =>\n    Schema.decodeUnknown(SupportingInfoListSchema)(input).pipe(\n      Effect.mapError(\n        (detail) =>\n          new ProtocolError({\n            kind: \"validation\",\n            reason: \"invalid-evidence\",\n            detail\n          })\n      )\n    )\n  ).pipe(\n    Effect.catchAllDefect((detail) =>\n      Effect.fail(\n        new ProtocolError({\n          kind: \"validation\",\n          reason: \"invalid-evidence\",\n          detail\n        })\n      )\n    )\n  );\n\nexport const DocumentationRequirementSchema = Schema.Struct({\n  id: NonEmptyStringSchema,\n  description: NonEmptyStringSchema,\n  questionnaire: NonEmptyStringSchema\n});\n\nexport type DocumentationRequirement =\n  typeof DocumentationRequirementSchema.Type;\n\nexport const AuthorizationRequestSchema = Schema.Struct({\n  patient: Schema.Struct({\n    memberId: NonEmptyStringSchema,\n    dob: IsoDateStringSchema\n  }),\n  provider: Schema.Struct({\n    npi: NpiSchema,\n    tin: TinSchema\n  }),\n  service: Schema.Struct({\n    code: NonEmptyStringSchema,\n    codeSystem: NonEmptyStringSchema,\n    diagnosis: Schema.Array(NonEmptyStringSchema),\n    placeOfService: NonEmptyStringSchema,\n    requestedStart: IsoDateStringSchema,\n    units: UnitsSchema,\n    urgency: Schema.Literal(\"standard\", \"expedited\")\n  }),\n  supportingInfo: Schema.Array(SupportingInfoSchema)\n});\n\nexport type AuthorizationRequest = typeof AuthorizationRequestSchema.Type;\n\nexport type ProtocolErrorKind =\n  | \"validation\"\n  | \"transport\"\n  | \"workflow\"\n  | \"payer\";\n\nexport type ProtocolErrorReason =\n  | \"invalid-request\"\n  | \"invalid-evidence\"\n  | \"invalid-determination\"\n  | \"invalid-terminal-determination\"\n  | \"invalid-resume-token\"\n  | \"invalid-subscription-event\"\n  | \"unknown-subscription\"\n  | \"subscription-timeout\"\n  | \"evidence-required\"\n  | \"evidence-missing-requirements\"\n  | \"evidence-collection-failed\"\n  | \"max-steps-exceeded\"\n  | \"policy-evaluation-failed\"\n  | \"policy-review-failed\"\n  | \"http-error\"\n  | \"http-timeout\"\n  | \"http-request-failed\"\n  | \"missing-base-url\"\n  | \"smart-auth-configuration-invalid\"\n  | \"smart-configuration-failed\"\n  | \"smart-token-request-failed\"\n  | \"smart-token-response-invalid\"\n  | \"transport-authorize-failed\"\n  | \"transport-resume-failed\"\n  | \"transport-await-failed\"\n  | \"transport-audit-failed\"\n  | \"transport-verify-failed\"\n  | \"transport-capabilities-failed\"\n  | (string & {});\n\n/**\n * Structured protocol failure raised by the SDK and Effect services.\n *\n * @example\n * try {\n *   await client.request(request);\n * } catch (error) {\n *   if (error instanceof ProtocolError && error.kind === \"validation\") {\n *     console.error(error.reason, error.detail);\n *   }\n * }\n */\nexport class ProtocolError extends Data.TaggedError(\"ProtocolError\")<{\n  readonly reason: ProtocolErrorReason;\n  readonly kind?: ProtocolErrorKind;\n  readonly detail?: unknown;\n  readonly requestId?: string;\n}> {\n  override get message(): string {\n    const kind = this.kind ? `${this.kind}: ` : \"\";\n    return `${kind}${this.reason}`;\n  }\n}\n\nexport const decodeAuthorizationRequest = (\n  input: unknown\n): Effect.Effect<AuthorizationRequest, ProtocolError> =>\n  Effect.suspend(() =>\n    Schema.decodeUnknown(AuthorizationRequestSchema)(input).pipe(\n      Effect.mapError(\n        (detail) =>\n          new ProtocolError({\n            kind: \"validation\",\n            reason: \"invalid-request\",\n            detail\n          })\n      )\n    )\n  ).pipe(\n    Effect.catchAllDefect((detail) =>\n      Effect.fail(\n        new ProtocolError({\n          kind: \"validation\",\n          reason: \"invalid-request\",\n          detail\n        })\n      )\n    )\n  );\n\nexport type DeterminationStatus =\n  | \"approved\"\n  | \"denied\"\n  | \"info-needed\"\n  | \"pended\"\n  | \"error\";\n\nexport type NextAction =\n  | \"none\"\n  | \"attach-evidence\"\n  | \"await-payer\"\n  | \"appeal\"\n  | \"contact-payer\";\n\nexport type PendingReason =\n  | \"human-review\"\n  | \"payer-processing\"\n  | \"external-records\";\n\nexport type DeterminationBy = \"rules\" | \"clinical-reviewer\" | null;\n\nexport interface SignatureReceipt {\n  readonly alg: \"EdDSA\";\n  readonly format: \"detached-json\";\n  readonly keyId: string;\n  readonly issuedAt: string;\n  readonly requestHash: string;\n  readonly payloadHash: string;\n  readonly nonce: string;\n  readonly signature: string;\n}\n\nexport interface X278Capabilities {\n  readonly protocol: \"x278\";\n  readonly implementation: string;\n  readonly endpoints: {\n    readonly authorize: string;\n    readonly resume: string;\n    readonly awaitDetermination: string;\n    readonly auditLog?: string;\n    readonly verify?: string;\n  };\n  readonly signing?: {\n    readonly alg: SignatureReceipt[\"alg\"];\n    readonly publicKeyPem?: string;\n  };\n}\n\nexport const SignatureReceiptSchema = Schema.Struct({\n  alg: Schema.Literal(\"EdDSA\"),\n  format: Schema.Literal(\"detached-json\"),\n  keyId: Schema.String,\n  issuedAt: Schema.String,\n  requestHash: Schema.String,\n  payloadHash: Schema.String,\n  nonce: Schema.String,\n  signature: Schema.String\n});\n\nexport interface DeterminationBase {\n  readonly authId: string;\n  readonly status: DeterminationStatus;\n  readonly nextAction: NextAction;\n  readonly ruleSetVersion: string;\n  readonly expiresAt: string | null;\n  readonly determinationBy: DeterminationBy;\n}\n\nexport interface ApprovedDetermination extends DeterminationBase {\n  readonly status: \"approved\";\n  readonly nextAction: \"none\";\n  readonly authNumber: string;\n  readonly approvedUnits: number;\n  readonly validFrom: string;\n  readonly validThrough: string;\n  readonly determinationBy: \"rules\" | \"clinical-reviewer\";\n  readonly signature: SignatureReceipt;\n}\n\nexport const ApprovedDeterminationSchema = Schema.Struct({\n  authId: Schema.String,\n  status: Schema.Literal(\"approved\"),\n  nextAction: Schema.Literal(\"none\"),\n  ruleSetVersion: Schema.String,\n  expiresAt: Schema.NullOr(Schema.String),\n  determinationBy: Schema.Literal(\"rules\", \"clinical-reviewer\"),\n  authNumber: Schema.String,\n  approvedUnits: UnitsSchema,\n  validFrom: IsoDateStringSchema,\n  validThrough: IsoDateStringSchema,\n  signature: SignatureReceiptSchema\n});\n\nexport type UnsignedApprovedDetermination = Omit<\n  ApprovedDetermination,\n  \"signature\"\n>;\n\nexport interface DeniedDetermination extends DeterminationBase {\n  readonly status: \"denied\";\n  readonly nextAction: \"appeal\";\n  readonly reasonCode: string;\n  readonly reasonText: string;\n  readonly appealPath: string;\n  readonly determinationBy: \"rules\" | \"clinical-reviewer\";\n  readonly signature: SignatureReceipt;\n}\n\nexport const DeniedDeterminationSchema = Schema.Struct({\n  authId: Schema.String,\n  status: Schema.Literal(\"denied\"),\n  nextAction: Schema.Literal(\"appeal\"),\n  ruleSetVersion: Schema.String,\n  expiresAt: Schema.NullOr(Schema.String),\n  determinationBy: Schema.Literal(\"rules\", \"clinical-reviewer\"),\n  reasonCode: Schema.String,\n  reasonText: Schema.String,\n  appealPath: Schema.String,\n  signature: SignatureReceiptSchema\n});\n\nexport type UnsignedDeniedDetermination = Omit<DeniedDetermination, \"signature\">;\n\nexport type UnsignedTerminalDetermination =\n  | UnsignedApprovedDetermination\n  | UnsignedDeniedDetermination;\n\nexport interface InfoNeededDetermination extends DeterminationBase {\n  readonly status: \"info-needed\";\n  readonly nextAction: \"attach-evidence\";\n  readonly documentationRequired: ReadonlyArray<DocumentationRequirement>;\n  readonly resumeToken: string;\n  readonly determinationBy: null;\n}\n\nexport const InfoNeededDeterminationSchema = Schema.Struct({\n  authId: Schema.String,\n  status: Schema.Literal(\"info-needed\"),\n  nextAction: Schema.Literal(\"attach-evidence\"),\n  ruleSetVersion: Schema.String,\n  expiresAt: Schema.NullOr(Schema.String),\n  determinationBy: Schema.Null,\n  documentationRequired: Schema.Array(DocumentationRequirementSchema),\n  resumeToken: Schema.String\n});\n\nexport interface PendedDetermination extends DeterminationBase {\n  readonly status: \"pended\";\n  readonly nextAction: \"await-payer\";\n  readonly pendingReason: PendingReason;\n  readonly subscription: string;\n  readonly determinationBy: \"clinical-reviewer\" | null;\n}\n\nexport const PendedDeterminationSchema = Schema.Struct({\n  authId: Schema.String,\n  status: Schema.Literal(\"pended\"),\n  nextAction: Schema.Literal(\"await-payer\"),\n  ruleSetVersion: Schema.String,\n  expiresAt: Schema.NullOr(Schema.String),\n  determinationBy: Schema.NullOr(Schema.Literal(\"clinical-reviewer\")),\n  pendingReason: Schema.Literal(\n    \"human-review\",\n    \"payer-processing\",\n    \"external-records\"\n  ),\n  subscription: Schema.String\n});\n\nexport interface ErrorDetermination extends DeterminationBase {\n  readonly status: \"error\";\n  readonly nextAction: \"contact-payer\";\n  readonly reasonCode: string;\n  readonly reasonText: string;\n  readonly determinationBy: null;\n}\n\nexport const ErrorDeterminationSchema = Schema.Struct({\n  authId: Schema.String,\n  status: Schema.Literal(\"error\"),\n  nextAction: Schema.Literal(\"contact-payer\"),\n  ruleSetVersion: Schema.String,\n  expiresAt: Schema.NullOr(Schema.String),\n  determinationBy: Schema.Null,\n  reasonCode: Schema.String,\n  reasonText: Schema.String\n});\n\nexport type TerminalDetermination =\n  | ApprovedDetermination\n  | DeniedDetermination;\n\nexport type NonTerminalDetermination =\n  | InfoNeededDetermination\n  | PendedDetermination;\n\nexport type Determination =\n  | TerminalDetermination\n  | NonTerminalDetermination\n  | ErrorDetermination;\n\nexport const TerminalDeterminationSchema = Schema.Union(\n  ApprovedDeterminationSchema,\n  DeniedDeterminationSchema\n);\n\nexport const DeterminationSchema = Schema.Union(\n  ApprovedDeterminationSchema,\n  DeniedDeterminationSchema,\n  InfoNeededDeterminationSchema,\n  PendedDeterminationSchema,\n  ErrorDeterminationSchema\n);\n\nexport const decodeDetermination = (\n  input: unknown\n): Effect.Effect<Determination, ProtocolError> =>\n  Effect.suspend(() =>\n    Schema.decodeUnknown(DeterminationSchema)(input).pipe(\n      Effect.mapError(\n        (detail) =>\n          new ProtocolError({\n            kind: \"validation\",\n            reason: \"invalid-determination\",\n            detail\n          })\n      )\n    )\n  ).pipe(\n    Effect.catchAllDefect((detail) =>\n      Effect.fail(\n        new ProtocolError({\n          kind: \"validation\",\n          reason: \"invalid-determination\",\n          detail\n        })\n      )\n    )\n  );\n\nexport const decodeTerminalDetermination = (\n  input: unknown\n): Effect.Effect<TerminalDetermination, ProtocolError> =>\n  Effect.suspend(() =>\n    Schema.decodeUnknown(TerminalDeterminationSchema)(input).pipe(\n      Effect.mapError(\n        (detail) =>\n          new ProtocolError({\n            kind: \"validation\",\n            reason: \"invalid-terminal-determination\",\n            detail\n          })\n      )\n    )\n  ).pipe(\n    Effect.catchAllDefect((detail) =>\n      Effect.fail(\n        new ProtocolError({\n          kind: \"validation\",\n          reason: \"invalid-terminal-determination\",\n          detail\n        })\n      )\n    )\n  );\n\nexport interface AuditRecord {\n  readonly authId: string;\n  readonly status: TerminalDetermination[\"status\"];\n  readonly requestHash: string;\n  readonly determinationHash: string;\n  readonly signatureKeyId: string;\n  readonly appendedAt: string;\n}\n","import { createSign } from \"node:crypto\";\nimport { ProtocolError } from \"./domain.js\";\nimport type { X278Fetch } from \"./http.js\";\n\nexport interface SmartBackendToken {\n  readonly accessToken: string;\n  readonly tokenType: string;\n  readonly expiresAt: number;\n  readonly scope?: string;\n}\n\nexport interface SmartConfiguration {\n  readonly token_endpoint: string;\n  readonly token_endpoint_auth_methods_supported?: ReadonlyArray<string>;\n  readonly token_endpoint_auth_signing_alg_values_supported?: ReadonlyArray<string>;\n  readonly scopes_supported?: ReadonlyArray<string>;\n  readonly [key: string]: unknown;\n}\n\nexport type SmartBackendAuthentication =\n  | {\n      readonly method: \"client-secret-basic\";\n      readonly clientSecret: string;\n    }\n  | {\n      readonly method: \"client-secret-post\";\n      readonly clientSecret: string;\n    }\n  | {\n      readonly method: \"private-key-jwt\";\n      readonly privateKeyPem?: string;\n      readonly keyId?: string;\n      readonly alg?: \"RS384\" | string;\n      readonly signJwt?: (\n        header: SmartJwtHeader,\n        claims: SmartClientAssertionClaims\n      ) => string | Promise<string>;\n      readonly assertionTtlSeconds?: number;\n    };\n\nexport interface SmartBackendTokenProviderOptions {\n  readonly tokenEndpoint: string | URL;\n  readonly clientId: string;\n  readonly scopes: string | ReadonlyArray<string>;\n  readonly authentication: SmartBackendAuthentication;\n  readonly fetch?: X278Fetch;\n  readonly now?: () => number;\n  readonly randomUUID?: () => string;\n  readonly cacheSkewSeconds?: number;\n}\n\nexport interface SmartJwtHeader {\n  readonly alg: string;\n  readonly typ: \"JWT\";\n  readonly kid?: string;\n}\n\nexport interface SmartClientAssertionClaims {\n  readonly iss: string;\n  readonly sub: string;\n  readonly aud: string;\n  readonly exp: number;\n  readonly iat: number;\n  readonly jti: string;\n}\n\ninterface TokenResponse {\n  readonly access_token?: unknown;\n  readonly token_type?: unknown;\n  readonly expires_in?: unknown;\n  readonly scope?: unknown;\n}\n\nconst clientAssertionType =\n  \"urn:ietf:params:oauth:client-assertion-type:jwt-bearer\";\n\nconst base64Url = (input: string | Buffer): string =>\n  Buffer.from(input)\n    .toString(\"base64\")\n    .replaceAll(\"+\", \"-\")\n    .replaceAll(\"/\", \"_\")\n    .replaceAll(\"=\", \"\");\n\nconst base64 = (input: string): string => Buffer.from(input).toString(\"base64\");\n\nconst formComponent = (input: string): string =>\n  new URLSearchParams({ value: input }).toString().slice(\"value=\".length);\n\nconst jsonPart = (value: unknown): string => base64Url(JSON.stringify(value));\n\nconst signRs384 = (signingInput: string, privateKeyPem: string): string => {\n  const signer = createSign(\"RSA-SHA384\");\n  signer.update(signingInput);\n  signer.end();\n  return base64Url(signer.sign(privateKeyPem));\n};\n\nconst createPrivateKeyJwt = async (\n  options: SmartBackendTokenProviderOptions,\n  auth: Extract<SmartBackendAuthentication, { readonly method: \"private-key-jwt\" }>\n): Promise<string> => {\n  const nowSeconds = Math.floor((options.now?.() ?? Date.now()) / 1000);\n  const alg = auth.alg ?? \"RS384\";\n  const header: SmartJwtHeader = {\n    alg,\n    typ: \"JWT\",\n    ...(auth.keyId ? { kid: auth.keyId } : {})\n  };\n  const claims: SmartClientAssertionClaims = {\n    iss: options.clientId,\n    sub: options.clientId,\n    aud: options.tokenEndpoint.toString(),\n    iat: nowSeconds,\n    exp: nowSeconds + (auth.assertionTtlSeconds ?? 300),\n    jti: options.randomUUID?.() ?? crypto.randomUUID()\n  };\n\n  if (auth.signJwt) {\n    return auth.signJwt(header, claims);\n  }\n\n  if (!auth.privateKeyPem || alg !== \"RS384\") {\n    throw new ProtocolError({\n      kind: \"validation\",\n      reason: \"smart-auth-configuration-invalid\",\n      detail:\n        \"Built-in SMART private_key_jwt signing supports RS384 privateKeyPem. Provide signJwt for other algorithms.\"\n    });\n  }\n\n  const signingInput = `${jsonPart(header)}.${jsonPart(claims)}`;\n  return `${signingInput}.${signRs384(signingInput, auth.privateKeyPem)}`;\n};\n\nconst decodeTokenResponse = (\n  body: TokenResponse,\n  nowMs: number,\n  cacheSkewSeconds: number\n): SmartBackendToken => {\n  if (typeof body.access_token !== \"string\") {\n    throw new ProtocolError({\n      kind: \"transport\",\n      reason: \"smart-token-response-invalid\",\n      detail: body\n    });\n  }\n\n  const expiresIn =\n    typeof body.expires_in === \"number\" && Number.isFinite(body.expires_in)\n      ? body.expires_in\n      : 300;\n  const tokenType =\n    typeof body.token_type === \"string\" ? body.token_type : \"Bearer\";\n  const expiresAt = nowMs + Math.max(0, expiresIn - cacheSkewSeconds) * 1000;\n\n  return {\n    accessToken: body.access_token,\n    tokenType,\n    expiresAt,\n    ...(typeof body.scope === \"string\" ? { scope: body.scope } : {})\n  };\n};\n\nconst parseJsonResponse = <A>(\n  responseText: string,\n  reason:\n    | \"smart-configuration-failed\"\n    | \"smart-token-request-failed\"\n    | \"smart-token-response-invalid\"\n): A => {\n  if (!responseText) {\n    return {} as A;\n  }\n\n  try {\n    return JSON.parse(responseText) as A;\n  } catch (detail) {\n    throw new ProtocolError({\n      kind: \"transport\",\n      reason,\n      detail: { body: responseText, cause: detail }\n    });\n  }\n};\n\nexport const createSmartBackendTokenProvider = (\n  options: SmartBackendTokenProviderOptions\n): (() => Promise<string>) => {\n  const fetcher = options.fetch ?? ((input, init) => fetch(input, init));\n  const tokenEndpoint = options.tokenEndpoint.toString();\n  const scope =\n    typeof options.scopes === \"string\"\n      ? options.scopes\n      : options.scopes.join(\" \");\n  const cacheSkewSeconds = options.cacheSkewSeconds ?? 30;\n  let cached: SmartBackendToken | undefined;\n\n  return async () => {\n    const nowMs = options.now?.() ?? Date.now();\n    if (cached && cached.expiresAt > nowMs) {\n      return cached.accessToken;\n    }\n\n    const body = new URLSearchParams({\n      grant_type: \"client_credentials\",\n      scope\n    });\n    const headers = new Headers({\n      accept: \"application/json\",\n      \"content-type\": \"application/x-www-form-urlencoded\"\n    });\n\n    if (options.authentication.method === \"client-secret-basic\") {\n      headers.set(\n        \"authorization\",\n        `Basic ${base64(\n          `${formComponent(options.clientId)}:${formComponent(\n            options.authentication.clientSecret\n          )}`\n        )}`\n      );\n    } else if (options.authentication.method === \"client-secret-post\") {\n      body.set(\"client_id\", options.clientId);\n      body.set(\"client_secret\", options.authentication.clientSecret);\n    } else {\n      body.set(\"client_id\", options.clientId);\n      body.set(\"client_assertion_type\", clientAssertionType);\n      body.set(\n        \"client_assertion\",\n        await createPrivateKeyJwt(options, options.authentication)\n      );\n    }\n\n    const response = await fetcher(tokenEndpoint, {\n      method: \"POST\",\n      headers,\n      body\n    });\n    const responseText = await response.text();\n    const responseBody = parseJsonResponse<TokenResponse>(\n      responseText,\n      response.ok ? \"smart-token-response-invalid\" : \"smart-token-request-failed\"\n    );\n\n    if (!response.ok) {\n      const requestId = response.headers.get(\"x-request-id\") ?? undefined;\n      throw new ProtocolError({\n        kind: \"transport\",\n        reason: \"smart-token-request-failed\",\n        ...(requestId ? { requestId } : {}),\n        detail: {\n          status: response.status,\n          statusText: response.statusText,\n          body: responseBody\n        }\n      });\n    }\n\n    cached = decodeTokenResponse(responseBody, nowMs, cacheSkewSeconds);\n    return cached.accessToken;\n  };\n};\n\nexport const discoverSmartConfiguration = async (\n  fhirBaseUrl: string | URL,\n  fetcher: X278Fetch = (input, init) => fetch(input, init)\n): Promise<SmartConfiguration> => {\n  const base = new URL(fhirBaseUrl.toString());\n  if (!base.pathname.endsWith(\"/\")) {\n    base.pathname = `${base.pathname}/`;\n  }\n  const url = new URL(\".well-known/smart-configuration\", base);\n  const response = await fetcher(url, { method: \"GET\" });\n  const body = parseJsonResponse<SmartConfiguration>(\n    await response.text(),\n    \"smart-configuration-failed\"\n  );\n\n  if (!response.ok || typeof body.token_endpoint !== \"string\") {\n    throw new ProtocolError({\n      kind: \"transport\",\n      reason: \"smart-configuration-failed\",\n      detail: { status: response.status, body }\n    });\n  }\n\n  return body;\n};\n"]}