@eyepop.ai/eyepop-render-2d 3.7.0 → 3.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/eyepop.render2d.index.d.mts +2 -2
- package/dist/eyepop.render2d.index.d.ts +2 -2
- package/dist/eyepop.render2d.index.js +16 -16
- package/dist/eyepop.render2d.index.js.map +1 -1
- package/dist/eyepop.render2d.index.mjs +16 -16
- package/dist/eyepop.render2d.index.mjs.map +1 -1
- package/dist/eyepop.render2d.min.js +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.ts","../style.ts","../render.ts","../render-box.ts","../renderer-2d.ts","../render-blur.ts","../render-face.ts","../render-hand.ts","../render-pose.ts","../render-trail.ts","../render-mask.ts","../render-contour.ts","../render-keypoints.ts","../render-text.ts","../render-classes.ts"],"sourcesContent":["import { Prediction } from '@eyepop.ai/eyepop'\nimport { CanvasRenderingContext2D } from 'canvas'\nimport { Renderer2d } from './renderer-2d'\nimport { RenderBlur, RenderBlurOptions } from './render-blur'\nimport { RenderBox, RenderBoxOptions } from './render-box'\nimport { RenderFace, RenderFaceOptions } from './render-face'\nimport { RenderHand, RenderHandOptions } from './render-hand'\nimport { RenderPose, RenderPoseOptions } from './render-pose'\nimport { RenderTrail, RenderTrailOptions } from './render-trail'\nimport { RenderMask, RenderMaskOptions } from './render-mask'\nimport { RenderContour, RenderContourOptions } from './render-contour'\nimport { RenderKeyPoints, RenderKeyPointsOptions } from './render-keypoints'\nimport { Render, RenderTarget } from './render'\nimport { RenderText, RenderTextOptions } from './render-text'\nimport { RenderClasses, RenderClassesOptions } from './render-classes'\n\nexport interface Renderer extends RenderTarget {\n draw(p: Prediction, color?: string): void\n}\n\nexport namespace Render2d {\n export function renderer(context: CanvasRenderingContext2D, rules: Render[] | undefined = undefined): Renderer {\n return new Renderer2d({ context, rules })\n }\n export function renderBlur(options: Partial<RenderBlurOptions> = {}): Render {\n return new RenderBlur(options)\n }\n export function renderBox(options: Partial<RenderBoxOptions> = {}): Render {\n return new RenderBox(options)\n }\n export function renderClasses(options: Partial<RenderClassesOptions> = {}): Render {\n return new RenderClasses(options)\n }\n export function renderMask(options: Partial<RenderMaskOptions> = {}): Render {\n return new RenderMask(options)\n }\n export function renderContour(options: Partial<RenderContourOptions> = {}): Render {\n return new RenderContour(options)\n }\n export function renderFace(options: Partial<RenderFaceOptions> = {}): Render {\n return new RenderFace(options)\n }\n export function renderKeypoints(options: Partial<RenderKeyPointsOptions> = {}): Render {\n return new RenderKeyPoints(options)\n }\n export function renderHand(options: Partial<RenderHandOptions> = {}): Render {\n return new RenderHand(options)\n }\n export function renderPose(options: Partial<RenderPoseOptions> = {}): Render {\n return new RenderPose(options)\n }\n export function renderText(options: Partial<RenderTextOptions> = {}): Render {\n return new RenderText(options)\n }\n export function renderTrail(options: Partial<RenderTrailOptions> = {}): Render {\n return new RenderTrail(options)\n }\n}\n\nexport * from './render-blur'\nexport * from './render-box'\nexport * from './render-classes'\nexport * from './render-contour'\nexport * from './render-face'\nexport * from './render-hand'\nexport * from './render-keypoints'\nexport * from './render-mask'\nexport * from './render-pose'\nexport * from './render-text'\nexport * from './render-trail'\nexport * from './renderer-2d'\nexport * from './render'\nexport default Render2d\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { ResizeObserver } from '@juggle/resize-observer'\nexport interface Colors {\n primary_color: string\n secondary_color: string\n right_color: string\n left_color: string\n opacity_color: string\n white: string\n black: string\n blank_color: string\n}\nexport class Style {\n public font: string\n public colors: Colors\n public scale: number = 1.0\n public cornerWidth: number = 0.3\n public cornerPadding: number = 0.04\n\n private static defaultColors = {\n primary_color: '#2fa7d7',\n secondary_color: '#94e0ff',\n right_color: '#000000',\n left_color: '#ffffff',\n opacity_color: 'rgba(47, 167, 215, 0.2)',\n white: '#FFFFFF',\n black: '#111111',\n blank_color: '#000000',\n }\n\n constructor(context: CanvasRenderingContext2D) {\n this.colors = Style.defaultColors\n if ('document' in globalThis && 'implementation' in globalThis.document) {\n const resizeObserver = new ResizeObserver(entries => {\n const rect = entries[0].contentRect\n this.font = this.calculateFont(rect.width, rect.height)\n this.scale = this.calculateScale(context)\n })\n // @ts-ignore\n resizeObserver.observe(context.canvas)\n }\n\n this.font = this.calculateFont(context.canvas.width, context.canvas.height)\n this.scale = this.calculateScale(context)\n }\n\n private calculateFont(w: number, h: number): string {\n const textSize = Math.floor(Math.max(12, 0.035 * Math.min(w, h)))\n return textSize + 'px Times New Roman'\n }\n\n private calculateScale(context: CanvasRenderingContext2D): number {\n const _screen = typeof screen == 'undefined' ? null : screen\n const _window = typeof window == 'undefined' ? null : window\n const width = _screen?.width ?? context.canvas.width\n const height = _screen?.height ?? context.canvas.height\n\n // This scale provides a normalizing value of the canvas size to the screen size,\n // allowing context drawing of the same size objects on different sized canvases/screens.\n const scale = Math.max(context.canvas.width / width, context.canvas.height / height) * (_window?.devicePixelRatio ?? 1)\n return scale\n }\n}\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { Style } from './style'\nimport { StreamTime } from '@eyepop.ai/eyepop'\n\nexport const DEFAULT_TARGET = \"$..objects[?(@.category=='person')]\"\nexport interface RenderTarget {\n target: string\n}\n\nexport interface Render extends RenderTarget {\n start(context: CanvasRenderingContext2D, style: Style): void\n\n draw(element: any, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime, color?: string): void\n}\n","import { PredictedObject, StreamTime, PredictedClass } from '@eyepop.ai/eyepop'\nimport { Style } from './style'\nimport { CanvasRenderingContext2D } from 'canvas'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport enum BoxType {\n Rich = 'rich',\n Simple = 'simple',\n SimpleSelected = 'simpleSelected',\n}\n\nexport type RenderBoxOptions = {\n showClass?: boolean // Whether to show class labels, such as \"person\"\n showNestedClasses?: boolean // Whether to show nested classes, such as \"person\" + \"necklace\"\n showText?: boolean // Whether to show text labels\n showConfidence?: boolean // Whether to show confidence, such as \"0.95\"\n showTraceId?: boolean // Whether to show trace ID, such as \"132\"\n boxType?: BoxType // The style of the box bounds\n} & RenderTarget\n\nexport class RenderBox implements Render {\n public target: string = DEFAULT_TARGET\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n private showClass: boolean\n private showNestedClasses: boolean\n private showConfidence: boolean\n private showTraceId: boolean\n private boxType?: BoxType\n\n constructor(options: Partial<RenderBoxOptions> = {}) {\n const { showClass = true, showConfidence = false, showTraceId = false, showNestedClasses = false, target = '$..objects.*', boxType = BoxType.Rich } = options\n\n this.target = target\n this.showClass = showClass\n this.showNestedClasses = showNestedClasses\n this.showConfidence = showConfidence\n this.showTraceId = showTraceId\n this.boxType = boxType\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime, color?: string): void {\n if (this.boxType === BoxType.Simple) {\n this.drawSimple(element, xOffset, yOffset, xScale, yScale, streamTime, color)\n return\n } else if (this.boxType === BoxType.SimpleSelected) {\n this.drawSimpleSelected(element, xOffset, yOffset, xScale, yScale, streamTime, color)\n return\n }\n\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const x = xOffset + element.x * xScale\n const y = yOffset + element.y * yScale\n const w = element.width * xScale\n const h = element.height * yScale\n\n // Sort the element's objects based on the element.object.category\n if (element.objects) {\n element.objects.sort((a, b) => {\n if (!a.category || !b.category) return 0\n\n return a.category.localeCompare(b.category)\n })\n }\n\n let canvasDimension = Math.min(w, h)\n\n const lineWidth = Math.max(canvasDimension * 0.0025, style.scale)\n\n //faded blue background\n context.beginPath()\n context.rect(x, y, w, h)\n context.lineWidth = lineWidth\n context.strokeStyle = style.colors.opacity_color\n context.fillStyle = style.colors.opacity_color\n context.fill()\n context.stroke()\n\n let cornerSize = canvasDimension * style.cornerWidth\n cornerSize = Math.max(cornerSize, style.scale * 20)\n cornerSize = Math.min(cornerSize, w - 4 * lineWidth)\n cornerSize = Math.min(cornerSize, h - 4 * lineWidth)\n\n let corners = this.createCornerPoints(x, y, w, h, cornerSize, style.scale)\n\n corners.forEach(corner => {\n context.beginPath()\n context.moveTo(corner[0].x, corner[0].y)\n context.lineTo(corner[1].x, corner[1].y)\n context.lineTo(corner[2].x, corner[2].y)\n context.strokeStyle = style.colors.primary_color\n context.lineWidth = lineWidth\n context.stroke()\n })\n\n let padding = canvasDimension * style.cornerPadding\n padding = Math.max(padding, style.scale * 4)\n\n cornerSize = cornerSize - padding * 1.33\n cornerSize = Math.min(cornerSize, w)\n cornerSize = Math.min(cornerSize, h)\n\n const corners2 = this.createCornerPoints(x, y, w, h, cornerSize, padding, padding / 2)\n\n corners2.forEach(corner => {\n context.beginPath()\n context.moveTo(corner[0].x, corner[0].y)\n context.lineTo(corner[1].x, corner[1].y)\n context.lineTo(corner[2].x, corner[2].y)\n context.strokeStyle = style.colors.secondary_color\n context.lineWidth = lineWidth\n context.stroke()\n })\n\n padding *= 1.5\n\n let boundingBoxWidth = element.width * xScale - 2 * padding\n let boundingBoxHeight = element.height * yScale - 2 * padding\n boundingBoxHeight = Math.max(boundingBoxHeight, 0)\n boundingBoxWidth = Math.max(boundingBoxWidth, 0)\n\n let fontSize = this.getMinFontSize(context, element, boundingBoxWidth, boundingBoxHeight, style)\n let label = ''\n\n if (this.showClass && element.classLabel) {\n label = element.classLabel\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n\n if (this.showNestedClasses && element?.classes) {\n // Sort the classes based category\n element.classes.sort((a: any, b: any) => {\n return a.category.localeCompare(b.category)\n })\n\n for (let i = 0; i < element.classes.length; i++) {\n label = element.classes[i]?.classLabel\n\n if (!label) continue\n\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n }\n\n if (this.showTraceId && element.traceId) {\n label = 'ID: ' + element.traceId\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n\n if (this.showConfidence && element.confidence) {\n label = Math.round(element.confidence * 100) + '%'\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n }\n\n public drawSimple(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime, color?: string): void {\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const x = xOffset + element.x * xScale\n const y = yOffset + element.y * yScale\n const w = element.width * xScale\n const h = element.height * yScale\n\n // Sort the element's objects based on the element.object.category\n if (element.objects) {\n element.objects.sort((a, b) => {\n if (!a.category || !b.category) return 0\n\n return a.category.localeCompare(b.category)\n })\n }\n const scale = style.scale\n\n //faded blue background\n context.beginPath()\n context.rect(x, y, w, h)\n context.lineWidth = scale * 4\n context.strokeStyle = color || style.colors.primary_color\n context.stroke()\n\n let canvasDimension = Math.min(context.canvas.width, context.canvas.height)\n\n let padding = Math.max(Math.min(w / 25, canvasDimension * style.cornerWidth), scale)\n\n let boundingBoxWidth = element.width * xScale - 3 * padding\n let boundingBoxHeight = element.height * yScale - 3 * padding\n\n boundingBoxHeight = Math.max(boundingBoxHeight, 0)\n boundingBoxWidth = Math.max(boundingBoxWidth, 0)\n\n let fontSize = this.getMinFontSize(context, element, boundingBoxWidth, boundingBoxHeight, style)\n let label = ''\n\n if (this.showClass && element.classLabel) {\n label = element.classLabel\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n\n if (this.showNestedClasses && element?.classes) {\n // Sort the classes based category\n element.classes.sort((a: any, b: any) => {\n return a.category.localeCompare(b.category)\n })\n\n for (let i = 0; i < element.classes.length; i++) {\n label = element.classes[i]?.classLabel\n\n if (!label) continue\n\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n }\n\n if (this.showTraceId && element.traceId) {\n label = 'ID: ' + element.traceId\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n\n if (this.showConfidence && element.confidence) {\n label = Math.round(element.confidence * 100) + '%'\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n }\n\n public drawSimpleSelected(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime, color?: string): void {\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const x = xOffset + element.x * xScale\n const y = yOffset + element.y * yScale\n const w = element.width * xScale\n const h = element.height * yScale\n\n // Sort the element's objects based on the element.object.category\n if (element.objects) {\n element.objects.sort((a, b) => {\n if (!a.category || !b.category) return 0\n\n return a.category.localeCompare(b.category)\n })\n }\n const scale = style.scale\n\n //faded blue background\n context.beginPath()\n context.rect(x, y, w, h)\n context.lineWidth = scale * 4\n context.strokeStyle = color || style.colors.primary_color\n //context.fillStyle = style.colors.opacity_color\n //context.fill()\n context.stroke()\n\n const desiredPercentage = 0.005\n\n let canvasDimension = Math.min(context.canvas.width, context.canvas.height)\n\n // Draw the corners as circles at each corner of the bounding box\n let cornerSize = canvasDimension * desiredPercentage\n\n let padding = Math.max(Math.min(w / 25, canvasDimension * style.cornerWidth), scale)\n\n let corners = this.createCornerPoints(x, y, w, h, cornerSize, padding)\n\n corners.forEach((corner: any) => {\n context.beginPath()\n context.arc(corner.x, corner.y, cornerSize, 0, 2 * Math.PI)\n context.lineWidth = scale * 4\n context.strokeStyle = color || style.colors.primary_color\n context.fillStyle = 'white'\n context.fill()\n context.stroke()\n })\n\n let cornerDots = this.createCenterPoints(x, y, w, h, cornerSize)\n\n cornerDots.forEach((corner: any) => {\n context.beginPath()\n context.arc(corner.x, corner.y, cornerSize, 0, 2 * Math.PI)\n context.lineWidth = scale * 4\n context.strokeStyle = color || style.colors.primary_color\n context.fillStyle = 'white'\n context.fill()\n context.stroke()\n })\n\n let boundingBoxWidth = element.width * xScale - 3 * padding\n let boundingBoxHeight = element.height * yScale - 3 * padding\n\n boundingBoxHeight = Math.max(boundingBoxHeight, 0)\n boundingBoxWidth = Math.max(boundingBoxWidth, 0)\n\n let fontSize = this.getMinFontSize(context, element, boundingBoxWidth, boundingBoxHeight, style)\n let label = ''\n\n if (this.showClass && element.classLabel) {\n label = element.classLabel\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n\n if (this.showNestedClasses && element?.classes) {\n // Sort the classes based category\n element.classes.sort((a: any, b: any) => {\n return a.category.localeCompare(b.category)\n })\n\n for (let i = 0; i < element.classes.length; i++) {\n label = element.classes[i]?.classLabel\n\n if (!label) continue\n\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n }\n\n if (this.showTraceId && element.traceId) {\n label = 'ID: ' + element.traceId\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n\n if (this.showConfidence && element.confidence) {\n label = Math.round(element.confidence * 100) + '%'\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n }\n\n createCornerPoints(x: number, y: number, w: number, h: number, cornerSize: number, padding: number = 1, insetPadding: number = 1): Array<Array<{ x: number; y: number }>> {\n const adjustedX = x + padding\n const adjustedY = y + padding\n const adjustedW = w - 2 * padding\n const adjustedH = h - 2 * padding\n\n const innerCornerSize = cornerSize - insetPadding\n\n return [\n // Top left corner\n [\n // Inner top left corner\n { x: adjustedX + insetPadding, y: adjustedY + innerCornerSize },\n { x: adjustedX + insetPadding, y: adjustedY + insetPadding },\n { x: adjustedX + innerCornerSize, y: adjustedY + insetPadding },\n ],\n // Bottom left corner\n [\n // Inner bottom left corner\n { x: adjustedX + insetPadding, y: adjustedY + adjustedH - innerCornerSize - insetPadding },\n { x: adjustedX + insetPadding, y: adjustedY + adjustedH - insetPadding },\n { x: adjustedX + innerCornerSize, y: adjustedY + adjustedH - insetPadding },\n ],\n // Top right corner\n [\n // Inner top right corner\n { x: adjustedX + adjustedW - innerCornerSize - insetPadding, y: adjustedY + insetPadding },\n { x: adjustedX + adjustedW - insetPadding, y: adjustedY + insetPadding },\n { x: adjustedX + adjustedW - insetPadding, y: adjustedY + innerCornerSize },\n ],\n // Bottom right corner\n [\n // Inner bottom right corner\n { x: adjustedX + adjustedW - innerCornerSize - insetPadding, y: adjustedY + adjustedH - insetPadding },\n { x: adjustedX + adjustedW - insetPadding, y: adjustedY + adjustedH - insetPadding },\n { x: adjustedX + adjustedW - insetPadding, y: adjustedY + adjustedH - innerCornerSize - insetPadding },\n ],\n ]\n }\n\n createCenterPoints(x: number, y: number, w: number, h: number, cornerSize: number): Array<{ x: number; y: number }> {\n return [\n // Top left point\n { x: x, y: y },\n // Top right point\n { x: x + w, y: y },\n // Bottom left point\n { x: x, y: y + h },\n // Bottom right point\n { x: x + w, y: y + h },\n\n // Top middle point\n { x: x + w / 2, y: y },\n // Bottom middle point\n { x: x + w / 2, y: y + h },\n // Left middle point\n { x: x, y: y + h / 2 },\n // Right middle point\n { x: x + w, y: y + h / 2 },\n ]\n }\n\n // Draw a label on the canvas, scaling the font size to fit the bounding box\n drawLabel(\n label: string,\n context: CanvasRenderingContext2D,\n element: any,\n yScale: number,\n xScale: number,\n yOffset: number,\n xOffset: number,\n style: Style,\n boundingBoxWidth: number,\n padding: number,\n scaleToBounds = false,\n fontSize?: number,\n ): number {\n context.fillStyle = '#ffffff'\n context.textAlign = 'left'\n context.textBaseline = 'top'\n\n // Set the original font size\n context.font = style.font\n\n // Measure the text with the original font size\n let textDetails = context.measureText(label)\n\n // Calculate the scale factor\n let scaleFactor = boundingBoxWidth / textDetails.width\n\n let fontType = style.font.split(' ')[1]\n if (fontSize) {\n context.font = `${fontSize}px ` + fontType\n } else {\n // We calculate the font size if it is not provided,\n // further scaling it up to the bounds of the rect if enabled\n let fontSize = parseInt(style.font.split(' ')[0])\n\n if (scaleToBounds) {\n fontSize *= scaleFactor\n } else {\n // Apply the scale factor to the font size, but limit the maximum size to the original font size\n fontSize = Math.min(fontSize, fontSize * scaleFactor)\n }\n context.font = `${fontSize}px ${fontType}`\n }\n\n // Measure the text again with the new font size\n textDetails = context.measureText(label)\n\n let xPos = element.x * xScale + xOffset + 1.5 * padding\n let yPos = element.y * yScale + yOffset + 1.5 * padding\n\n context.fillText(label, xPos, yPos)\n const boxSize = padding + textDetails.actualBoundingBoxAscent + textDetails.actualBoundingBoxDescent\n yPos += boxSize\n return padding + textDetails.actualBoundingBoxDescent\n }\n\n static toTitleCase(str: string) {\n if (!str) return ''\n return str.replace(/\\w\\S*/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()\n })\n }\n\n // Gets the largest label from all the labels to be displayed\n getMinFontSize(context: CanvasRenderingContext2D, element: any, width: number, height: number, style: any, scaleToWidth: boolean = false): number {\n let largestLabel = ''\n\n if (this.showClass && element.classLabel) {\n const label = element.classLabel\n const formattedLabel = `${RenderBox.toTitleCase(label)}`\n if (formattedLabel.length > largestLabel.length) {\n largestLabel = formattedLabel\n }\n }\n\n if (this.showNestedClasses && element?.classes) {\n for (let i = 0; i < element.classes.length; i++) {\n const label = element.classes[i].classLabel\n const formattedLabel = `${RenderBox.toTitleCase(label)}`\n if (formattedLabel.length > largestLabel.length) {\n largestLabel = formattedLabel\n }\n }\n }\n\n if (this.showTraceId && element.traceId) {\n const label = `ID: ${element.traceId}`\n const formattedLabel = `${RenderBox.toTitleCase(label)}`\n if (formattedLabel.length > largestLabel.length) {\n largestLabel = formattedLabel\n }\n }\n\n if (this.showConfidence && element.confidence) {\n const label = `${Math.round(element.confidence * 100)}%`\n const formattedLabel = `${RenderBox.toTitleCase(label)}`\n if (formattedLabel.length > largestLabel.length) {\n largestLabel = formattedLabel\n }\n }\n\n let fontSize = this.getFontSize(largestLabel, context, style, width, height, scaleToWidth)\n\n return fontSize\n }\n\n getFontSize(label: string, context: CanvasRenderingContext2D, style: Style, boundingBoxWidth: number, boundingBoxHeight: number, scaleToWidth: boolean = false): number {\n context.textAlign = 'left'\n context.textBaseline = 'top'\n\n // Set the original font size\n context.font = style.font\n\n // Measure the text with the original font size\n let textDetails = context.measureText(label)\n\n // Calculate the scale factor\n let scaleFactor = boundingBoxWidth / (textDetails.actualBoundingBoxLeft + textDetails.actualBoundingBoxRight)\n\n // make sure the text fits in the height as well\n let fontSize = parseInt(style.font.split(' ')[0])\n\n if (scaleToWidth) {\n fontSize *= scaleFactor\n } else {\n fontSize = Math.min(fontSize, fontSize * scaleFactor)\n }\n\n fontSize = Math.max(fontSize, 0)\n\n return fontSize\n }\n}\n","import { Renderer } from './index'\nimport { CanvasRenderingContext2D } from 'canvas'\nimport { Prediction, StreamTime } from '@eyepop.ai/eyepop'\nimport { Style } from './style'\nimport { DEFAULT_TARGET, Render } from './render'\nimport { RenderBox } from './render-box'\nimport * as jp from 'jsonpath'\n\nexport type Renderer2dOptions = {\n context: CanvasRenderingContext2D\n rules?: Render[] | Render | undefined\n}\n\nexport class Renderer2d implements Renderer {\n public target: string = DEFAULT_TARGET\n\n private readonly context: CanvasRenderingContext2D\n private readonly style: Style\n\n private readonly rules: Render[]\n\n private static readonly defaultRules: Render[] = [new RenderBox()]\n\n constructor(options: Renderer2dOptions) {\n const { context, rules } = options\n\n this.context = context\n if (rules) {\n if (Array.isArray(rules)) {\n this.rules = rules\n } else {\n this.rules = [rules]\n }\n } else {\n this.rules = Renderer2d.defaultRules\n }\n this.style = new Style(context)\n for (let i = 0; i < this.rules.length; i++) {\n this.rules[i].start(this.context, this.style)\n }\n }\n\n public draw(p: Prediction, color?: string) {\n const x_scale = this.context.canvas.width / p.source_width\n const y_scale = this.context.canvas.height / p.source_height\n const streamTime = p as StreamTime\n for (let i = 0; i < this.rules.length; i++) {\n const rule = this.rules[i]\n const targets = jp.query(p, rule.target)\n for (let j = 0; j < targets.length; j++) {\n rule.draw(targets[j], 0, 0, x_scale, y_scale, streamTime, color)\n }\n }\n }\n}\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { Style } from './style'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\nimport { StreamTime, PredictedObject } from '@eyepop.ai/eyepop'\n\nexport type RenderBlurOptions = {} & RenderTarget\n\nexport class RenderBlur implements Render {\n public target: string = DEFAULT_TARGET\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderBlurOptions> = {}) {\n const { target = DEFAULT_TARGET } = options\n this.target = target\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(object: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n const x = xOffset + object.x * xScale\n const y = yOffset + object.y * yScale\n const w = object.width * xScale\n const h = object.height * yScale\n\n context.beginPath()\n context.rect(x, y, w, h)\n context.lineWidth = style.scale\n context.strokeStyle = style.colors.black\n context.fillStyle = style.colors.black\n context.fill()\n context.stroke()\n }\n}\n\nexport default RenderBlur\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { Style } from './style'\nimport { PredictedMesh, PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderFaceOptions = { showLabels: boolean } & RenderTarget\n\nexport class RenderFace implements Render {\n public target: string = DEFAULT_TARGET\n public showLabels: boolean = false\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderFaceOptions> = {}) {\n const { showLabels = false, target = '$..objects[?(@.classLabel==\"face\")]' } = options\n this.target = target\n this.showLabels = showLabels\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n if (element.meshs) {\n for (let i = 0; i < element.meshs.length; i++) {\n const mesh = element.meshs[i]\n if (mesh.category == '3d-face-mesh') {\n this.render3dFaceMesh(mesh, xOffset, yOffset, xScale, yScale)\n }\n }\n }\n this.renderExpressions(element, xOffset, yOffset, xScale, yScale)\n }\n\n private renderExpressions(face: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number) {\n let expressions = []\n if (face.classes) {\n for (let i = 0; i < face.classes.length; i++) {\n if (face.classes[i].confidence > 0.95) {\n const label = <string>EXPRESSION_LABELS.get(face.classes[i].classLabel)\n if (label) {\n expressions.push(label)\n }\n }\n }\n }\n if (expressions.length > 0) {\n const label = expressions.join(', ')\n const padding = 10\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n context.beginPath()\n context.lineWidth = style.scale\n context.strokeStyle = style.colors.primary_color\n context.fillStyle = style.colors.primary_color\n context.font = style.font\n context.textBaseline = 'hanging'\n\n const tw = context.measureText(label)\n\n const x = xOffset + face.x * xScale\n const y = yOffset + face.y * yScale\n if (context.roundRect) {\n context.roundRect(x, y, tw.width + padding * 2, 24, [0, 0, 20, 0])\n } else {\n context.fillRect(x, y, tw.width + padding * 2, 24)\n }\n\n context.fill()\n\n if (this.showLabels) {\n context.fillStyle = style.colors.secondary_color\n context.fillText(label, Math.max(0, x) + padding, Math.max(0, y))\n }\n context.closePath()\n }\n }\n\n private render3dFaceMesh(mesh: PredictedMesh, xOffset: number, yOffset: number, xScale: number, yScale: number) {\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n const radius = style.scale\n context.lineWidth = radius\n context.strokeStyle = style.colors.primary_color\n context.fillStyle = style.colors.primary_color\n this.renderConnections(context, FACE_LANDMARKS_TESSELATION, mesh, xOffset, yOffset, xScale, yScale)\n\n context.lineWidth = radius * 1.5\n context.strokeStyle = style.colors.secondary_color\n context.fillStyle = style.colors.secondary_color\n this.renderConnections(context, FACE_LANDMARKS_CONTOURS, mesh, xOffset, yOffset, xScale, yScale)\n\n context.lineWidth = radius * 1.5\n context.strokeStyle = style.colors.right_color\n context.fillStyle = style.colors.right_color\n this.renderConnections(context, FACE_LANDMARKS_RIGHT_IRIS, mesh, xOffset, yOffset, xScale, yScale)\n\n context.lineWidth = radius * 1.5\n context.strokeStyle = style.colors.left_color\n context.fillStyle = style.colors.left_color\n this.renderConnections(context, FACE_LANDMARKS_LEFT_IRIS, mesh, xOffset, yOffset, xScale, yScale)\n }\n\n private renderConnections(context: CanvasRenderingContext2D, connections: number[][], mesh: PredictedMesh, xOffset: number, yOffset: number, xScale: number, yScale: number) {\n context.beginPath()\n for (let i = 0; i < connections.length; i++) {\n let x1 = mesh.points[connections[i][0]].x\n let x2 = mesh.points[connections[i][1]].x\n let y1 = mesh.points[connections[i][0]].y\n let y2 = mesh.points[connections[i][1]].y\n x1 = xOffset + x1 * xScale\n x2 = xOffset + x2 * xScale\n y1 = yOffset + y1 * yScale\n y2 = yOffset + y2 * yScale\n context.moveTo(x1, y1)\n context.lineTo(x2, y2)\n }\n context.stroke()\n }\n}\n\nconst EXPRESSION_LABELS = new Map<string, string>([\n ['happy', 'happy'],\n ['neutral', 'neutral'],\n ['sad', 'sad'],\n ['surprise', 'surprise'],\n ['angry', 'angry'],\n ['fear', 'fear'],\n ['disgust', 'disgust'],\n])\n\n/**\n * Face mesh connection from Google Mediapipe\n *\n * @see https://storage.googleapis.com/mediapipe-assets/documentation/mediapipe_face_landmark_fullsize.png\n * @see https://github.com/google/mediapipe/blob/252c7eef253dfe866e98b4f679fc4d6af616d0a0/mediapipe/tasks/web/vision/face_landmarker/face_landmarks_connections.ts#L4\n */\n\n/** Landmarks for lips */\nconst FACE_LANDMARKS_LIPS = [\n [61, 146],\n [146, 91],\n [91, 181],\n [181, 84],\n [84, 17],\n [17, 314],\n [314, 405],\n [405, 321],\n [321, 375],\n [375, 291],\n [61, 185],\n [185, 40],\n [40, 39],\n [39, 37],\n [37, 0],\n [0, 267],\n [267, 269],\n [269, 270],\n [270, 409],\n [409, 291],\n [78, 95],\n [95, 88],\n [88, 178],\n [178, 87],\n [87, 14],\n [14, 317],\n [317, 402],\n [402, 318],\n [318, 324],\n [324, 308],\n [78, 191],\n [191, 80],\n [80, 81],\n [81, 82],\n [82, 13],\n [13, 312],\n [312, 311],\n [311, 310],\n [310, 415],\n [415, 308],\n]\n\n/** Landmarks for left eye */\nconst FACE_LANDMARKS_LEFT_EYE = [\n [263, 249],\n [249, 390],\n [390, 373],\n [373, 374],\n [374, 380],\n [380, 381],\n [381, 382],\n [382, 362],\n [263, 466],\n [466, 388],\n [388, 387],\n [387, 386],\n [386, 385],\n [385, 384],\n [384, 398],\n [398, 362],\n]\n\n/** Landmarks for left eyebrow */\nconst FACE_LANDMARKS_LEFT_EYEBROW = [\n [276, 283],\n [283, 282],\n [282, 295],\n [295, 285],\n [300, 293],\n [293, 334],\n [334, 296],\n [296, 336],\n]\n\n/** Landmarks for left iris */\nconst FACE_LANDMARKS_LEFT_IRIS = [\n [474, 475],\n [475, 476],\n [476, 477],\n [477, 474],\n]\n\n/** Landmarks for right eye */\nconst FACE_LANDMARKS_RIGHT_EYE = [\n [33, 7],\n [7, 163],\n [163, 144],\n [144, 145],\n [145, 153],\n [153, 154],\n [154, 155],\n [155, 133],\n [33, 246],\n [246, 161],\n [161, 160],\n [160, 159],\n [159, 158],\n [158, 157],\n [157, 173],\n [173, 133],\n]\n\n/** Landmarks for right eyebrow */\nconst FACE_LANDMARKS_RIGHT_EYEBROW = [\n [46, 53],\n [53, 52],\n [52, 65],\n [65, 55],\n [70, 63],\n [63, 105],\n [105, 66],\n [66, 107],\n]\n\n/** Landmarks for right iris */\nconst FACE_LANDMARKS_RIGHT_IRIS = [\n [469, 470],\n [470, 471],\n [471, 472],\n [472, 469],\n]\n\n/** Landmarks for face oval */\nconst FACE_LANDMARKS_FACE_OVAL = [\n [10, 338],\n [338, 297],\n [297, 332],\n [332, 284],\n [284, 251],\n [251, 389],\n [389, 356],\n [356, 454],\n [454, 323],\n [323, 361],\n [361, 288],\n [288, 397],\n [397, 365],\n [365, 379],\n [379, 378],\n [378, 400],\n [400, 377],\n [377, 152],\n [152, 148],\n [148, 176],\n [176, 149],\n [149, 150],\n [150, 136],\n [136, 172],\n [172, 58],\n [58, 132],\n [132, 93],\n [93, 234],\n [234, 127],\n [127, 162],\n [162, 21],\n [21, 54],\n [54, 103],\n [103, 67],\n [67, 109],\n [109, 10],\n]\n\n/** Landmarks for contours */\nconst FACE_LANDMARKS_CONTOURS = [\n ...FACE_LANDMARKS_LIPS,\n ...FACE_LANDMARKS_LEFT_EYE,\n ...FACE_LANDMARKS_LEFT_EYEBROW,\n ...FACE_LANDMARKS_RIGHT_EYE,\n ...FACE_LANDMARKS_RIGHT_EYEBROW,\n ...FACE_LANDMARKS_FACE_OVAL,\n]\n\n/** Landmarks for face tesselation */\nconst FACE_LANDMARKS_TESSELATION = [\n [127, 34],\n [34, 139],\n [139, 127],\n [11, 0],\n [0, 37],\n [37, 11],\n [232, 231],\n [231, 120],\n [120, 232],\n [72, 37],\n [37, 39],\n [39, 72],\n [128, 121],\n [121, 47],\n [47, 128],\n [232, 121],\n [121, 128],\n [128, 232],\n [104, 69],\n [69, 67],\n [67, 104],\n [175, 171],\n [171, 148],\n [148, 175],\n [118, 50],\n [50, 101],\n [101, 118],\n [73, 39],\n [39, 40],\n [40, 73],\n [9, 151],\n [151, 108],\n [108, 9],\n [48, 115],\n [115, 131],\n [131, 48],\n [194, 204],\n [204, 211],\n [211, 194],\n [74, 40],\n [40, 185],\n [185, 74],\n [80, 42],\n [42, 183],\n [183, 80],\n [40, 92],\n [92, 186],\n [186, 40],\n [230, 229],\n [229, 118],\n [118, 230],\n [202, 212],\n [212, 214],\n [214, 202],\n [83, 18],\n [18, 17],\n [17, 83],\n [76, 61],\n [61, 146],\n [146, 76],\n [160, 29],\n [29, 30],\n [30, 160],\n [56, 157],\n [157, 173],\n [173, 56],\n [106, 204],\n [204, 194],\n [194, 106],\n [135, 214],\n [214, 192],\n [192, 135],\n [203, 165],\n [165, 98],\n [98, 203],\n [21, 71],\n [71, 68],\n [68, 21],\n [51, 45],\n [45, 4],\n [4, 51],\n [144, 24],\n [24, 23],\n [23, 144],\n [77, 146],\n [146, 91],\n [91, 77],\n [205, 50],\n [50, 187],\n [187, 205],\n [201, 200],\n [200, 18],\n [18, 201],\n [91, 106],\n [106, 182],\n [182, 91],\n [90, 91],\n [91, 181],\n [181, 90],\n [85, 84],\n [84, 17],\n [17, 85],\n [206, 203],\n [203, 36],\n [36, 206],\n [148, 171],\n [171, 140],\n [140, 148],\n [92, 40],\n [40, 39],\n [39, 92],\n [193, 189],\n [189, 244],\n [244, 193],\n [159, 158],\n [158, 28],\n [28, 159],\n [247, 246],\n [246, 161],\n [161, 247],\n [236, 3],\n [3, 196],\n [196, 236],\n [54, 68],\n [68, 104],\n [104, 54],\n [193, 168],\n [168, 8],\n [8, 193],\n [117, 228],\n [228, 31],\n [31, 117],\n [189, 193],\n [193, 55],\n [55, 189],\n [98, 97],\n [97, 99],\n [99, 98],\n [126, 47],\n [47, 100],\n [100, 126],\n [166, 79],\n [79, 218],\n [218, 166],\n [155, 154],\n [154, 26],\n [26, 155],\n [209, 49],\n [49, 131],\n [131, 209],\n [135, 136],\n [136, 150],\n [150, 135],\n [47, 126],\n [126, 217],\n [217, 47],\n [223, 52],\n [52, 53],\n [53, 223],\n [45, 51],\n [51, 134],\n [134, 45],\n [211, 170],\n [170, 140],\n [140, 211],\n [67, 69],\n [69, 108],\n [108, 67],\n [43, 106],\n [106, 91],\n [91, 43],\n [230, 119],\n [119, 120],\n [120, 230],\n [226, 130],\n [130, 247],\n [247, 226],\n [63, 53],\n [53, 52],\n [52, 63],\n [238, 20],\n [20, 242],\n [242, 238],\n [46, 70],\n [70, 156],\n [156, 46],\n [78, 62],\n [62, 96],\n [96, 78],\n [46, 53],\n [53, 63],\n [63, 46],\n [143, 34],\n [34, 227],\n [227, 143],\n [123, 117],\n [117, 111],\n [111, 123],\n [44, 125],\n [125, 19],\n [19, 44],\n [236, 134],\n [134, 51],\n [51, 236],\n [216, 206],\n [206, 205],\n [205, 216],\n [154, 153],\n [153, 22],\n [22, 154],\n [39, 37],\n [37, 167],\n [167, 39],\n [200, 201],\n [201, 208],\n [208, 200],\n [36, 142],\n [142, 100],\n [100, 36],\n [57, 212],\n [212, 202],\n [202, 57],\n [20, 60],\n [60, 99],\n [99, 20],\n [28, 158],\n [158, 157],\n [157, 28],\n [35, 226],\n [226, 113],\n [113, 35],\n [160, 159],\n [159, 27],\n [27, 160],\n [204, 202],\n [202, 210],\n [210, 204],\n [113, 225],\n [225, 46],\n [46, 113],\n [43, 202],\n [202, 204],\n [204, 43],\n [62, 76],\n [76, 77],\n [77, 62],\n [137, 123],\n [123, 116],\n [116, 137],\n [41, 38],\n [38, 72],\n [72, 41],\n [203, 129],\n [129, 142],\n [142, 203],\n [64, 98],\n [98, 240],\n [240, 64],\n [49, 102],\n [102, 64],\n [64, 49],\n [41, 73],\n [73, 74],\n [74, 41],\n [212, 216],\n [216, 207],\n [207, 212],\n [42, 74],\n [74, 184],\n [184, 42],\n [169, 170],\n [170, 211],\n [211, 169],\n [170, 149],\n [149, 176],\n [176, 170],\n [105, 66],\n [66, 69],\n [69, 105],\n [122, 6],\n [6, 168],\n [168, 122],\n [123, 147],\n [147, 187],\n [187, 123],\n [96, 77],\n [77, 90],\n [90, 96],\n [65, 55],\n [55, 107],\n [107, 65],\n [89, 90],\n [90, 180],\n [180, 89],\n [101, 100],\n [100, 120],\n [120, 101],\n [63, 105],\n [105, 104],\n [104, 63],\n [93, 137],\n [137, 227],\n [227, 93],\n [15, 86],\n [86, 85],\n [85, 15],\n [129, 102],\n [102, 49],\n [49, 129],\n [14, 87],\n [87, 86],\n [86, 14],\n [55, 8],\n [8, 9],\n [9, 55],\n [100, 47],\n [47, 121],\n [121, 100],\n [145, 23],\n [23, 22],\n [22, 145],\n [88, 89],\n [89, 179],\n [179, 88],\n [6, 122],\n [122, 196],\n [196, 6],\n [88, 95],\n [95, 96],\n [96, 88],\n [138, 172],\n [172, 136],\n [136, 138],\n [215, 58],\n [58, 172],\n [172, 215],\n [115, 48],\n [48, 219],\n [219, 115],\n [42, 80],\n [80, 81],\n [81, 42],\n [195, 3],\n [3, 51],\n [51, 195],\n [43, 146],\n [146, 61],\n [61, 43],\n [171, 175],\n [175, 199],\n [199, 171],\n [81, 82],\n [82, 38],\n [38, 81],\n [53, 46],\n [46, 225],\n [225, 53],\n [144, 163],\n [163, 110],\n [110, 144],\n [52, 65],\n [65, 66],\n [66, 52],\n [229, 228],\n [228, 117],\n [117, 229],\n [34, 127],\n [127, 234],\n [234, 34],\n [107, 108],\n [108, 69],\n [69, 107],\n [109, 108],\n [108, 151],\n [151, 109],\n [48, 64],\n [64, 235],\n [235, 48],\n [62, 78],\n [78, 191],\n [191, 62],\n [129, 209],\n [209, 126],\n [126, 129],\n [111, 35],\n [35, 143],\n [143, 111],\n [117, 123],\n [123, 50],\n [50, 117],\n [222, 65],\n [65, 52],\n [52, 222],\n [19, 125],\n [125, 141],\n [141, 19],\n [221, 55],\n [55, 65],\n [65, 221],\n [3, 195],\n [195, 197],\n [197, 3],\n [25, 7],\n [7, 33],\n [33, 25],\n [220, 237],\n [237, 44],\n [44, 220],\n [70, 71],\n [71, 139],\n [139, 70],\n [122, 193],\n [193, 245],\n [245, 122],\n [247, 130],\n [130, 33],\n [33, 247],\n [71, 21],\n [21, 162],\n [162, 71],\n [170, 169],\n [169, 150],\n [150, 170],\n [188, 174],\n [174, 196],\n [196, 188],\n [216, 186],\n [186, 92],\n [92, 216],\n [2, 97],\n [97, 167],\n [167, 2],\n [141, 125],\n [125, 241],\n [241, 141],\n [164, 167],\n [167, 37],\n [37, 164],\n [72, 38],\n [38, 12],\n [12, 72],\n [38, 82],\n [82, 13],\n [13, 38],\n [63, 68],\n [68, 71],\n [71, 63],\n [226, 35],\n [35, 111],\n [111, 226],\n [101, 50],\n [50, 205],\n [205, 101],\n [206, 92],\n [92, 165],\n [165, 206],\n [209, 198],\n [198, 217],\n [217, 209],\n [165, 167],\n [167, 97],\n [97, 165],\n [220, 115],\n [115, 218],\n [218, 220],\n [133, 112],\n [112, 243],\n [243, 133],\n [239, 238],\n [238, 241],\n [241, 239],\n [214, 135],\n [135, 169],\n [169, 214],\n [190, 173],\n [173, 133],\n [133, 190],\n [171, 208],\n [208, 32],\n [32, 171],\n [125, 44],\n [44, 237],\n [237, 125],\n [86, 87],\n [87, 178],\n [178, 86],\n [85, 86],\n [86, 179],\n [179, 85],\n [84, 85],\n [85, 180],\n [180, 84],\n [83, 84],\n [84, 181],\n [181, 83],\n [201, 83],\n [83, 182],\n [182, 201],\n [137, 93],\n [93, 132],\n [132, 137],\n [76, 62],\n [62, 183],\n [183, 76],\n [61, 76],\n [76, 184],\n [184, 61],\n [57, 61],\n [61, 185],\n [185, 57],\n [212, 57],\n [57, 186],\n [186, 212],\n [214, 207],\n [207, 187],\n [187, 214],\n [34, 143],\n [143, 156],\n [156, 34],\n [79, 239],\n [239, 237],\n [237, 79],\n [123, 137],\n [137, 177],\n [177, 123],\n [44, 1],\n [1, 4],\n [4, 44],\n [201, 194],\n [194, 32],\n [32, 201],\n [64, 102],\n [102, 129],\n [129, 64],\n [213, 215],\n [215, 138],\n [138, 213],\n [59, 166],\n [166, 219],\n [219, 59],\n [242, 99],\n [99, 97],\n [97, 242],\n [2, 94],\n [94, 141],\n [141, 2],\n [75, 59],\n [59, 235],\n [235, 75],\n [24, 110],\n [110, 228],\n [228, 24],\n [25, 130],\n [130, 226],\n [226, 25],\n [23, 24],\n [24, 229],\n [229, 23],\n [22, 23],\n [23, 230],\n [230, 22],\n [26, 22],\n [22, 231],\n [231, 26],\n [112, 26],\n [26, 232],\n [232, 112],\n [189, 190],\n [190, 243],\n [243, 189],\n [221, 56],\n [56, 190],\n [190, 221],\n [28, 56],\n [56, 221],\n [221, 28],\n [27, 28],\n [28, 222],\n [222, 27],\n [29, 27],\n [27, 223],\n [223, 29],\n [30, 29],\n [29, 224],\n [224, 30],\n [247, 30],\n [30, 225],\n [225, 247],\n [238, 79],\n [79, 20],\n [20, 238],\n [166, 59],\n [59, 75],\n [75, 166],\n [60, 75],\n [75, 240],\n [240, 60],\n [147, 177],\n [177, 215],\n [215, 147],\n [20, 79],\n [79, 166],\n [166, 20],\n [187, 147],\n [147, 213],\n [213, 187],\n [112, 233],\n [233, 244],\n [244, 112],\n [233, 128],\n [128, 245],\n [245, 233],\n [128, 114],\n [114, 188],\n [188, 128],\n [114, 217],\n [217, 174],\n [174, 114],\n [131, 115],\n [115, 220],\n [220, 131],\n [217, 198],\n [198, 236],\n [236, 217],\n [198, 131],\n [131, 134],\n [134, 198],\n [177, 132],\n [132, 58],\n [58, 177],\n [143, 35],\n [35, 124],\n [124, 143],\n [110, 163],\n [163, 7],\n [7, 110],\n [228, 110],\n [110, 25],\n [25, 228],\n [356, 389],\n [389, 368],\n [368, 356],\n [11, 302],\n [302, 267],\n [267, 11],\n [452, 350],\n [350, 349],\n [349, 452],\n [302, 303],\n [303, 269],\n [269, 302],\n [357, 343],\n [343, 277],\n [277, 357],\n [452, 453],\n [453, 357],\n [357, 452],\n [333, 332],\n [332, 297],\n [297, 333],\n [175, 152],\n [152, 377],\n [377, 175],\n [347, 348],\n [348, 330],\n [330, 347],\n [303, 304],\n [304, 270],\n [270, 303],\n [9, 336],\n [336, 337],\n [337, 9],\n [278, 279],\n [279, 360],\n [360, 278],\n [418, 262],\n [262, 431],\n [431, 418],\n [304, 408],\n [408, 409],\n [409, 304],\n [310, 415],\n [415, 407],\n [407, 310],\n [270, 409],\n [409, 410],\n [410, 270],\n [450, 348],\n [348, 347],\n [347, 450],\n [422, 430],\n [430, 434],\n [434, 422],\n [313, 314],\n [314, 17],\n [17, 313],\n [306, 307],\n [307, 375],\n [375, 306],\n [387, 388],\n [388, 260],\n [260, 387],\n [286, 414],\n [414, 398],\n [398, 286],\n [335, 406],\n [406, 418],\n [418, 335],\n [364, 367],\n [367, 416],\n [416, 364],\n [423, 358],\n [358, 327],\n [327, 423],\n [251, 284],\n [284, 298],\n [298, 251],\n [281, 5],\n [5, 4],\n [4, 281],\n [373, 374],\n [374, 253],\n [253, 373],\n [307, 320],\n [320, 321],\n [321, 307],\n [425, 427],\n [427, 411],\n [411, 425],\n [421, 313],\n [313, 18],\n [18, 421],\n [321, 405],\n [405, 406],\n [406, 321],\n [320, 404],\n [404, 405],\n [405, 320],\n [315, 16],\n [16, 17],\n [17, 315],\n [426, 425],\n [425, 266],\n [266, 426],\n [377, 400],\n [400, 369],\n [369, 377],\n [322, 391],\n [391, 269],\n [269, 322],\n [417, 465],\n [465, 464],\n [464, 417],\n [386, 257],\n [257, 258],\n [258, 386],\n [466, 260],\n [260, 388],\n [388, 466],\n [456, 399],\n [399, 419],\n [419, 456],\n [284, 332],\n [332, 333],\n [333, 284],\n [417, 285],\n [285, 8],\n [8, 417],\n [346, 340],\n [340, 261],\n [261, 346],\n [413, 441],\n [441, 285],\n [285, 413],\n [327, 460],\n [460, 328],\n [328, 327],\n [355, 371],\n [371, 329],\n [329, 355],\n [392, 439],\n [439, 438],\n [438, 392],\n [382, 341],\n [341, 256],\n [256, 382],\n [429, 420],\n [420, 360],\n [360, 429],\n [364, 394],\n [394, 379],\n [379, 364],\n [277, 343],\n [343, 437],\n [437, 277],\n [443, 444],\n [444, 283],\n [283, 443],\n [275, 440],\n [440, 363],\n [363, 275],\n [431, 262],\n [262, 369],\n [369, 431],\n [297, 338],\n [338, 337],\n [337, 297],\n [273, 375],\n [375, 321],\n [321, 273],\n [450, 451],\n [451, 349],\n [349, 450],\n [446, 342],\n [342, 467],\n [467, 446],\n [293, 334],\n [334, 282],\n [282, 293],\n [458, 461],\n [461, 462],\n [462, 458],\n [276, 353],\n [353, 383],\n [383, 276],\n [308, 324],\n [324, 325],\n [325, 308],\n [276, 300],\n [300, 293],\n [293, 276],\n [372, 345],\n [345, 447],\n [447, 372],\n [352, 345],\n [345, 340],\n [340, 352],\n [274, 1],\n [1, 19],\n [19, 274],\n [456, 248],\n [248, 281],\n [281, 456],\n [436, 427],\n [427, 425],\n [425, 436],\n [381, 256],\n [256, 252],\n [252, 381],\n [269, 391],\n [391, 393],\n [393, 269],\n [200, 199],\n [199, 428],\n [428, 200],\n [266, 330],\n [330, 329],\n [329, 266],\n [287, 273],\n [273, 422],\n [422, 287],\n [250, 462],\n [462, 328],\n [328, 250],\n [258, 286],\n [286, 384],\n [384, 258],\n [265, 353],\n [353, 342],\n [342, 265],\n [387, 259],\n [259, 257],\n [257, 387],\n [424, 431],\n [431, 430],\n [430, 424],\n [342, 353],\n [353, 276],\n [276, 342],\n [273, 335],\n [335, 424],\n [424, 273],\n [292, 325],\n [325, 307],\n [307, 292],\n [366, 447],\n [447, 345],\n [345, 366],\n [271, 303],\n [303, 302],\n [302, 271],\n [423, 266],\n [266, 371],\n [371, 423],\n [294, 455],\n [455, 460],\n [460, 294],\n [279, 278],\n [278, 294],\n [294, 279],\n [271, 272],\n [272, 304],\n [304, 271],\n [432, 434],\n [434, 427],\n [427, 432],\n [272, 407],\n [407, 408],\n [408, 272],\n [394, 430],\n [430, 431],\n [431, 394],\n [395, 369],\n [369, 400],\n [400, 395],\n [334, 333],\n [333, 299],\n [299, 334],\n [351, 417],\n [417, 168],\n [168, 351],\n [352, 280],\n [280, 411],\n [411, 352],\n [325, 319],\n [319, 320],\n [320, 325],\n [295, 296],\n [296, 336],\n [336, 295],\n [319, 403],\n [403, 404],\n [404, 319],\n [330, 348],\n [348, 349],\n [349, 330],\n [293, 298],\n [298, 333],\n [333, 293],\n [323, 454],\n [454, 447],\n [447, 323],\n [15, 16],\n [16, 315],\n [315, 15],\n [358, 429],\n [429, 279],\n [279, 358],\n [14, 15],\n [15, 316],\n [316, 14],\n [285, 336],\n [336, 9],\n [9, 285],\n [329, 349],\n [349, 350],\n [350, 329],\n [374, 380],\n [380, 252],\n [252, 374],\n [318, 402],\n [402, 403],\n [403, 318],\n [6, 197],\n [197, 419],\n [419, 6],\n [318, 319],\n [319, 325],\n [325, 318],\n [367, 364],\n [364, 365],\n [365, 367],\n [435, 367],\n [367, 397],\n [397, 435],\n [344, 438],\n [438, 439],\n [439, 344],\n [272, 271],\n [271, 311],\n [311, 272],\n [195, 5],\n [5, 281],\n [281, 195],\n [273, 287],\n [287, 291],\n [291, 273],\n [396, 428],\n [428, 199],\n [199, 396],\n [311, 271],\n [271, 268],\n [268, 311],\n [283, 444],\n [444, 445],\n [445, 283],\n [373, 254],\n [254, 339],\n [339, 373],\n [282, 334],\n [334, 296],\n [296, 282],\n [449, 347],\n [347, 346],\n [346, 449],\n [264, 447],\n [447, 454],\n [454, 264],\n [336, 296],\n [296, 299],\n [299, 336],\n [338, 10],\n [10, 151],\n [151, 338],\n [278, 439],\n [439, 455],\n [455, 278],\n [292, 407],\n [407, 415],\n [415, 292],\n [358, 371],\n [371, 355],\n [355, 358],\n [340, 345],\n [345, 372],\n [372, 340],\n [346, 347],\n [347, 280],\n [280, 346],\n [442, 443],\n [443, 282],\n [282, 442],\n [19, 94],\n [94, 370],\n [370, 19],\n [441, 442],\n [442, 295],\n [295, 441],\n [248, 419],\n [419, 197],\n [197, 248],\n [263, 255],\n [255, 359],\n [359, 263],\n [440, 275],\n [275, 274],\n [274, 440],\n [300, 383],\n [383, 368],\n [368, 300],\n [351, 412],\n [412, 465],\n [465, 351],\n [263, 467],\n [467, 466],\n [466, 263],\n [301, 368],\n [368, 389],\n [389, 301],\n [395, 378],\n [378, 379],\n [379, 395],\n [412, 351],\n [351, 419],\n [419, 412],\n [436, 426],\n [426, 322],\n [322, 436],\n [2, 164],\n [164, 393],\n [393, 2],\n [370, 462],\n [462, 461],\n [461, 370],\n [164, 0],\n [0, 267],\n [267, 164],\n [302, 11],\n [11, 12],\n [12, 302],\n [268, 12],\n [12, 13],\n [13, 268],\n [293, 300],\n [300, 301],\n [301, 293],\n [446, 261],\n [261, 340],\n [340, 446],\n [330, 266],\n [266, 425],\n [425, 330],\n [426, 423],\n [423, 391],\n [391, 426],\n [429, 355],\n [355, 437],\n [437, 429],\n [391, 327],\n [327, 326],\n [326, 391],\n [440, 457],\n [457, 438],\n [438, 440],\n [341, 382],\n [382, 362],\n [362, 341],\n [459, 457],\n [457, 461],\n [461, 459],\n [434, 430],\n [430, 394],\n [394, 434],\n [414, 463],\n [463, 362],\n [362, 414],\n [396, 369],\n [369, 262],\n [262, 396],\n [354, 461],\n [461, 457],\n [457, 354],\n [316, 403],\n [403, 402],\n [402, 316],\n [315, 404],\n [404, 403],\n [403, 315],\n [314, 405],\n [405, 404],\n [404, 314],\n [313, 406],\n [406, 405],\n [405, 313],\n [421, 418],\n [418, 406],\n [406, 421],\n [366, 401],\n [401, 361],\n [361, 366],\n [306, 408],\n [408, 407],\n [407, 306],\n [291, 409],\n [409, 408],\n [408, 291],\n [287, 410],\n [410, 409],\n [409, 287],\n [432, 436],\n [436, 410],\n [410, 432],\n [434, 416],\n [416, 411],\n [411, 434],\n [264, 368],\n [368, 383],\n [383, 264],\n [309, 438],\n [438, 457],\n [457, 309],\n [352, 376],\n [376, 401],\n [401, 352],\n [274, 275],\n [275, 4],\n [4, 274],\n [421, 428],\n [428, 262],\n [262, 421],\n [294, 327],\n [327, 358],\n [358, 294],\n [433, 416],\n [416, 367],\n [367, 433],\n [289, 455],\n [455, 439],\n [439, 289],\n [462, 370],\n [370, 326],\n [326, 462],\n [2, 326],\n [326, 370],\n [370, 2],\n [305, 460],\n [460, 455],\n [455, 305],\n [254, 449],\n [449, 448],\n [448, 254],\n [255, 261],\n [261, 446],\n [446, 255],\n [253, 450],\n [450, 449],\n [449, 253],\n [252, 451],\n [451, 450],\n [450, 252],\n [256, 452],\n [452, 451],\n [451, 256],\n [341, 453],\n [453, 452],\n [452, 341],\n [413, 464],\n [464, 463],\n [463, 413],\n [441, 413],\n [413, 414],\n [414, 441],\n [258, 442],\n [442, 441],\n [441, 258],\n [257, 443],\n [443, 442],\n [442, 257],\n [259, 444],\n [444, 443],\n [443, 259],\n [260, 445],\n [445, 444],\n [444, 260],\n [467, 342],\n [342, 445],\n [445, 467],\n [459, 458],\n [458, 250],\n [250, 459],\n [289, 392],\n [392, 290],\n [290, 289],\n [290, 328],\n [328, 460],\n [460, 290],\n [376, 433],\n [433, 435],\n [435, 376],\n [250, 290],\n [290, 392],\n [392, 250],\n [411, 416],\n [416, 433],\n [433, 411],\n [341, 463],\n [463, 464],\n [464, 341],\n [453, 464],\n [464, 465],\n [465, 453],\n [357, 465],\n [465, 412],\n [412, 357],\n [343, 412],\n [412, 399],\n [399, 343],\n [360, 363],\n [363, 440],\n [440, 360],\n [437, 399],\n [399, 456],\n [456, 437],\n [420, 456],\n [456, 363],\n [363, 420],\n [401, 435],\n [435, 288],\n [288, 401],\n [372, 383],\n [383, 353],\n [353, 372],\n [339, 255],\n [255, 249],\n [249, 339],\n [448, 261],\n [261, 255],\n [255, 448],\n [133, 243],\n [243, 190],\n [190, 133],\n [133, 155],\n [155, 112],\n [112, 133],\n [33, 246],\n [246, 247],\n [247, 33],\n [33, 130],\n [130, 25],\n [25, 33],\n [398, 384],\n [384, 286],\n [286, 398],\n [362, 398],\n [398, 414],\n [414, 362],\n [362, 463],\n [463, 341],\n [341, 362],\n [263, 359],\n [359, 467],\n [467, 263],\n [263, 249],\n [249, 255],\n [255, 263],\n [466, 467],\n [467, 260],\n [260, 466],\n [75, 60],\n [60, 166],\n [166, 75],\n [238, 239],\n [239, 79],\n [79, 238],\n [162, 127],\n [127, 139],\n [139, 162],\n [72, 11],\n [11, 37],\n [37, 72],\n [121, 232],\n [232, 120],\n [120, 121],\n [73, 72],\n [72, 39],\n [39, 73],\n [114, 128],\n [128, 47],\n [47, 114],\n [233, 232],\n [232, 128],\n [128, 233],\n [103, 104],\n [104, 67],\n [67, 103],\n [152, 175],\n [175, 148],\n [148, 152],\n [119, 118],\n [118, 101],\n [101, 119],\n [74, 73],\n [73, 40],\n [40, 74],\n [107, 9],\n [9, 108],\n [108, 107],\n [49, 48],\n [48, 131],\n [131, 49],\n [32, 194],\n [194, 211],\n [211, 32],\n [184, 74],\n [74, 185],\n [185, 184],\n [191, 80],\n [80, 183],\n [183, 191],\n [185, 40],\n [40, 186],\n [186, 185],\n [119, 230],\n [230, 118],\n [118, 119],\n [210, 202],\n [202, 214],\n [214, 210],\n [84, 83],\n [83, 17],\n [17, 84],\n [77, 76],\n [76, 146],\n [146, 77],\n [161, 160],\n [160, 30],\n [30, 161],\n [190, 56],\n [56, 173],\n [173, 190],\n [182, 106],\n [106, 194],\n [194, 182],\n [138, 135],\n [135, 192],\n [192, 138],\n [129, 203],\n [203, 98],\n [98, 129],\n [54, 21],\n [21, 68],\n [68, 54],\n [5, 51],\n [51, 4],\n [4, 5],\n [145, 144],\n [144, 23],\n [23, 145],\n [90, 77],\n [77, 91],\n [91, 90],\n [207, 205],\n [205, 187],\n [187, 207],\n [83, 201],\n [201, 18],\n [18, 83],\n [181, 91],\n [91, 182],\n [182, 181],\n [180, 90],\n [90, 181],\n [181, 180],\n [16, 85],\n [85, 17],\n [17, 16],\n [205, 206],\n [206, 36],\n [36, 205],\n [176, 148],\n [148, 140],\n [140, 176],\n [165, 92],\n [92, 39],\n [39, 165],\n [245, 193],\n [193, 244],\n [244, 245],\n [27, 159],\n [159, 28],\n [28, 27],\n [30, 247],\n [247, 161],\n [161, 30],\n [174, 236],\n [236, 196],\n [196, 174],\n [103, 54],\n [54, 104],\n [104, 103],\n [55, 193],\n [193, 8],\n [8, 55],\n [111, 117],\n [117, 31],\n [31, 111],\n [221, 189],\n [189, 55],\n [55, 221],\n [240, 98],\n [98, 99],\n [99, 240],\n [142, 126],\n [126, 100],\n [100, 142],\n [219, 166],\n [166, 218],\n [218, 219],\n [112, 155],\n [155, 26],\n [26, 112],\n [198, 209],\n [209, 131],\n [131, 198],\n [169, 135],\n [135, 150],\n [150, 169],\n [114, 47],\n [47, 217],\n [217, 114],\n [224, 223],\n [223, 53],\n [53, 224],\n [220, 45],\n [45, 134],\n [134, 220],\n [32, 211],\n [211, 140],\n [140, 32],\n [109, 67],\n [67, 108],\n [108, 109],\n [146, 43],\n [43, 91],\n [91, 146],\n [231, 230],\n [230, 120],\n [120, 231],\n [113, 226],\n [226, 247],\n [247, 113],\n [105, 63],\n [63, 52],\n [52, 105],\n [241, 238],\n [238, 242],\n [242, 241],\n [124, 46],\n [46, 156],\n [156, 124],\n [95, 78],\n [78, 96],\n [96, 95],\n [70, 46],\n [46, 63],\n [63, 70],\n [116, 143],\n [143, 227],\n [227, 116],\n [116, 123],\n [123, 111],\n [111, 116],\n [1, 44],\n [44, 19],\n [19, 1],\n [3, 236],\n [236, 51],\n [51, 3],\n [207, 216],\n [216, 205],\n [205, 207],\n [26, 154],\n [154, 22],\n [22, 26],\n [165, 39],\n [39, 167],\n [167, 165],\n [199, 200],\n [200, 208],\n [208, 199],\n [101, 36],\n [36, 100],\n [100, 101],\n [43, 57],\n [57, 202],\n [202, 43],\n [242, 20],\n [20, 99],\n [99, 242],\n [56, 28],\n [28, 157],\n [157, 56],\n [124, 35],\n [35, 113],\n [113, 124],\n [29, 160],\n [160, 27],\n [27, 29],\n [211, 204],\n [204, 210],\n [210, 211],\n [124, 113],\n [113, 46],\n [46, 124],\n [106, 43],\n [43, 204],\n [204, 106],\n [96, 62],\n [62, 77],\n [77, 96],\n [227, 137],\n [137, 116],\n [116, 227],\n [73, 41],\n [41, 72],\n [72, 73],\n [36, 203],\n [203, 142],\n [142, 36],\n [235, 64],\n [64, 240],\n [240, 235],\n [48, 49],\n [49, 64],\n [64, 48],\n [42, 41],\n [41, 74],\n [74, 42],\n [214, 212],\n [212, 207],\n [207, 214],\n [183, 42],\n [42, 184],\n [184, 183],\n [210, 169],\n [169, 211],\n [211, 210],\n [140, 170],\n [170, 176],\n [176, 140],\n [104, 105],\n [105, 69],\n [69, 104],\n [193, 122],\n [122, 168],\n [168, 193],\n [50, 123],\n [123, 187],\n [187, 50],\n [89, 96],\n [96, 90],\n [90, 89],\n [66, 65],\n [65, 107],\n [107, 66],\n [179, 89],\n [89, 180],\n [180, 179],\n [119, 101],\n [101, 120],\n [120, 119],\n [68, 63],\n [63, 104],\n [104, 68],\n [234, 93],\n [93, 227],\n [227, 234],\n [16, 15],\n [15, 85],\n [85, 16],\n [209, 129],\n [129, 49],\n [49, 209],\n [15, 14],\n [14, 86],\n [86, 15],\n [107, 55],\n [55, 9],\n [9, 107],\n [120, 100],\n [100, 121],\n [121, 120],\n [153, 145],\n [145, 22],\n [22, 153],\n [178, 88],\n [88, 179],\n [179, 178],\n [197, 6],\n [6, 196],\n [196, 197],\n [89, 88],\n [88, 96],\n [96, 89],\n [135, 138],\n [138, 136],\n [136, 135],\n [138, 215],\n [215, 172],\n [172, 138],\n [218, 115],\n [115, 219],\n [219, 218],\n [41, 42],\n [42, 81],\n [81, 41],\n [5, 195],\n [195, 51],\n [51, 5],\n [57, 43],\n [43, 61],\n [61, 57],\n [208, 171],\n [171, 199],\n [199, 208],\n [41, 81],\n [81, 38],\n [38, 41],\n [224, 53],\n [53, 225],\n [225, 224],\n [24, 144],\n [144, 110],\n [110, 24],\n [105, 52],\n [52, 66],\n [66, 105],\n [118, 229],\n [229, 117],\n [117, 118],\n [227, 34],\n [34, 234],\n [234, 227],\n [66, 107],\n [107, 69],\n [69, 66],\n [10, 109],\n [109, 151],\n [151, 10],\n [219, 48],\n [48, 235],\n [235, 219],\n [183, 62],\n [62, 191],\n [191, 183],\n [142, 129],\n [129, 126],\n [126, 142],\n [116, 111],\n [111, 143],\n [143, 116],\n [118, 117],\n [117, 50],\n [50, 118],\n [223, 222],\n [222, 52],\n [52, 223],\n [94, 19],\n [19, 141],\n [141, 94],\n [222, 221],\n [221, 65],\n [65, 222],\n [196, 3],\n [3, 197],\n [197, 196],\n [45, 220],\n [220, 44],\n [44, 45],\n [156, 70],\n [70, 139],\n [139, 156],\n [188, 122],\n [122, 245],\n [245, 188],\n [139, 71],\n [71, 162],\n [162, 139],\n [149, 170],\n [170, 150],\n [150, 149],\n [122, 188],\n [188, 196],\n [196, 122],\n [206, 216],\n [216, 92],\n [92, 206],\n [164, 2],\n [2, 167],\n [167, 164],\n [242, 141],\n [141, 241],\n [241, 242],\n [0, 164],\n [164, 37],\n [37, 0],\n [11, 72],\n [72, 12],\n [12, 11],\n [12, 38],\n [38, 13],\n [13, 12],\n [70, 63],\n [63, 71],\n [71, 70],\n [31, 226],\n [226, 111],\n [111, 31],\n [36, 101],\n [101, 205],\n [205, 36],\n [203, 206],\n [206, 165],\n [165, 203],\n [126, 209],\n [209, 217],\n [217, 126],\n [98, 165],\n [165, 97],\n [97, 98],\n [237, 220],\n [220, 218],\n [218, 237],\n [237, 239],\n [239, 241],\n [241, 237],\n [210, 214],\n [214, 169],\n [169, 210],\n [140, 171],\n [171, 32],\n [32, 140],\n [241, 125],\n [125, 237],\n [237, 241],\n [179, 86],\n [86, 178],\n [178, 179],\n [180, 85],\n [85, 179],\n [179, 180],\n [181, 84],\n [84, 180],\n [180, 181],\n [182, 83],\n [83, 181],\n [181, 182],\n [194, 201],\n [201, 182],\n [182, 194],\n [177, 137],\n [137, 132],\n [132, 177],\n [184, 76],\n [76, 183],\n [183, 184],\n [185, 61],\n [61, 184],\n [184, 185],\n [186, 57],\n [57, 185],\n [185, 186],\n [216, 212],\n [212, 186],\n [186, 216],\n [192, 214],\n [214, 187],\n [187, 192],\n [139, 34],\n [34, 156],\n [156, 139],\n [218, 79],\n [79, 237],\n [237, 218],\n [147, 123],\n [123, 177],\n [177, 147],\n [45, 44],\n [44, 4],\n [4, 45],\n [208, 201],\n [201, 32],\n [32, 208],\n [98, 64],\n [64, 129],\n [129, 98],\n [192, 213],\n [213, 138],\n [138, 192],\n [235, 59],\n [59, 219],\n [219, 235],\n [141, 242],\n [242, 97],\n [97, 141],\n [97, 2],\n [2, 141],\n [141, 97],\n [240, 75],\n [75, 235],\n [235, 240],\n [229, 24],\n [24, 228],\n [228, 229],\n [31, 25],\n [25, 226],\n [226, 31],\n [230, 23],\n [23, 229],\n [229, 230],\n [231, 22],\n [22, 230],\n [230, 231],\n [232, 26],\n [26, 231],\n [231, 232],\n [233, 112],\n [112, 232],\n [232, 233],\n [244, 189],\n [189, 243],\n [243, 244],\n [189, 221],\n [221, 190],\n [190, 189],\n [222, 28],\n [28, 221],\n [221, 222],\n [223, 27],\n [27, 222],\n [222, 223],\n [224, 29],\n [29, 223],\n [223, 224],\n [225, 30],\n [30, 224],\n [224, 225],\n [113, 247],\n [247, 225],\n [225, 113],\n [99, 60],\n [60, 240],\n [240, 99],\n [213, 147],\n [147, 215],\n [215, 213],\n [60, 20],\n [20, 166],\n [166, 60],\n [192, 187],\n [187, 213],\n [213, 192],\n [243, 112],\n [112, 244],\n [244, 243],\n [244, 233],\n [233, 245],\n [245, 244],\n [245, 128],\n [128, 188],\n [188, 245],\n [188, 114],\n [114, 174],\n [174, 188],\n [134, 131],\n [131, 220],\n [220, 134],\n [174, 217],\n [217, 236],\n [236, 174],\n [236, 198],\n [198, 134],\n [134, 236],\n [215, 177],\n [177, 58],\n [58, 215],\n [156, 143],\n [143, 124],\n [124, 156],\n [25, 110],\n [110, 7],\n [7, 25],\n [31, 228],\n [228, 25],\n [25, 31],\n [264, 356],\n [356, 368],\n [368, 264],\n [0, 11],\n [11, 267],\n [267, 0],\n [451, 452],\n [452, 349],\n [349, 451],\n [267, 302],\n [302, 269],\n [269, 267],\n [350, 357],\n [357, 277],\n [277, 350],\n [350, 452],\n [452, 357],\n [357, 350],\n [299, 333],\n [333, 297],\n [297, 299],\n [396, 175],\n [175, 377],\n [377, 396],\n [280, 347],\n [347, 330],\n [330, 280],\n [269, 303],\n [303, 270],\n [270, 269],\n [151, 9],\n [9, 337],\n [337, 151],\n [344, 278],\n [278, 360],\n [360, 344],\n [424, 418],\n [418, 431],\n [431, 424],\n [270, 304],\n [304, 409],\n [409, 270],\n [272, 310],\n [310, 407],\n [407, 272],\n [322, 270],\n [270, 410],\n [410, 322],\n [449, 450],\n [450, 347],\n [347, 449],\n [432, 422],\n [422, 434],\n [434, 432],\n [18, 313],\n [313, 17],\n [17, 18],\n [291, 306],\n [306, 375],\n [375, 291],\n [259, 387],\n [387, 260],\n [260, 259],\n [424, 335],\n [335, 418],\n [418, 424],\n [434, 364],\n [364, 416],\n [416, 434],\n [391, 423],\n [423, 327],\n [327, 391],\n [301, 251],\n [251, 298],\n [298, 301],\n [275, 281],\n [281, 4],\n [4, 275],\n [254, 373],\n [373, 253],\n [253, 254],\n [375, 307],\n [307, 321],\n [321, 375],\n [280, 425],\n [425, 411],\n [411, 280],\n [200, 421],\n [421, 18],\n [18, 200],\n [335, 321],\n [321, 406],\n [406, 335],\n [321, 320],\n [320, 405],\n [405, 321],\n [314, 315],\n [315, 17],\n [17, 314],\n [423, 426],\n [426, 266],\n [266, 423],\n [396, 377],\n [377, 369],\n [369, 396],\n [270, 322],\n [322, 269],\n [269, 270],\n [413, 417],\n [417, 464],\n [464, 413],\n [385, 386],\n [386, 258],\n [258, 385],\n [248, 456],\n [456, 419],\n [419, 248],\n [298, 284],\n [284, 333],\n [333, 298],\n [168, 417],\n [417, 8],\n [8, 168],\n [448, 346],\n [346, 261],\n [261, 448],\n [417, 413],\n [413, 285],\n [285, 417],\n [326, 327],\n [327, 328],\n [328, 326],\n [277, 355],\n [355, 329],\n [329, 277],\n [309, 392],\n [392, 438],\n [438, 309],\n [381, 382],\n [382, 256],\n [256, 381],\n [279, 429],\n [429, 360],\n [360, 279],\n [365, 364],\n [364, 379],\n [379, 365],\n [355, 277],\n [277, 437],\n [437, 355],\n [282, 443],\n [443, 283],\n [283, 282],\n [281, 275],\n [275, 363],\n [363, 281],\n [395, 431],\n [431, 369],\n [369, 395],\n [299, 297],\n [297, 337],\n [337, 299],\n [335, 273],\n [273, 321],\n [321, 335],\n [348, 450],\n [450, 349],\n [349, 348],\n [359, 446],\n [446, 467],\n [467, 359],\n [283, 293],\n [293, 282],\n [282, 283],\n [250, 458],\n [458, 462],\n [462, 250],\n [300, 276],\n [276, 383],\n [383, 300],\n [292, 308],\n [308, 325],\n [325, 292],\n [283, 276],\n [276, 293],\n [293, 283],\n [264, 372],\n [372, 447],\n [447, 264],\n [346, 352],\n [352, 340],\n [340, 346],\n [354, 274],\n [274, 19],\n [19, 354],\n [363, 456],\n [456, 281],\n [281, 363],\n [426, 436],\n [436, 425],\n [425, 426],\n [380, 381],\n [381, 252],\n [252, 380],\n [267, 269],\n [269, 393],\n [393, 267],\n [421, 200],\n [200, 428],\n [428, 421],\n [371, 266],\n [266, 329],\n [329, 371],\n [432, 287],\n [287, 422],\n [422, 432],\n [290, 250],\n [250, 328],\n [328, 290],\n [385, 258],\n [258, 384],\n [384, 385],\n [446, 265],\n [265, 342],\n [342, 446],\n [386, 387],\n [387, 257],\n [257, 386],\n [422, 424],\n [424, 430],\n [430, 422],\n [445, 342],\n [342, 276],\n [276, 445],\n [422, 273],\n [273, 424],\n [424, 422],\n [306, 292],\n [292, 307],\n [307, 306],\n [352, 366],\n [366, 345],\n [345, 352],\n [268, 271],\n [271, 302],\n [302, 268],\n [358, 423],\n [423, 371],\n [371, 358],\n [327, 294],\n [294, 460],\n [460, 327],\n [331, 279],\n [279, 294],\n [294, 331],\n [303, 271],\n [271, 304],\n [304, 303],\n [436, 432],\n [432, 427],\n [427, 436],\n [304, 272],\n [272, 408],\n [408, 304],\n [395, 394],\n [394, 431],\n [431, 395],\n [378, 395],\n [395, 400],\n [400, 378],\n [296, 334],\n [334, 299],\n [299, 296],\n [6, 351],\n [351, 168],\n [168, 6],\n [376, 352],\n [352, 411],\n [411, 376],\n [307, 325],\n [325, 320],\n [320, 307],\n [285, 295],\n [295, 336],\n [336, 285],\n [320, 319],\n [319, 404],\n [404, 320],\n [329, 330],\n [330, 349],\n [349, 329],\n [334, 293],\n [293, 333],\n [333, 334],\n [366, 323],\n [323, 447],\n [447, 366],\n [316, 15],\n [15, 315],\n [315, 316],\n [331, 358],\n [358, 279],\n [279, 331],\n [317, 14],\n [14, 316],\n [316, 317],\n [8, 285],\n [285, 9],\n [9, 8],\n [277, 329],\n [329, 350],\n [350, 277],\n [253, 374],\n [374, 252],\n [252, 253],\n [319, 318],\n [318, 403],\n [403, 319],\n [351, 6],\n [6, 419],\n [419, 351],\n [324, 318],\n [318, 325],\n [325, 324],\n [397, 367],\n [367, 365],\n [365, 397],\n [288, 435],\n [435, 397],\n [397, 288],\n [278, 344],\n [344, 439],\n [439, 278],\n [310, 272],\n [272, 311],\n [311, 310],\n [248, 195],\n [195, 281],\n [281, 248],\n [375, 273],\n [273, 291],\n [291, 375],\n [175, 396],\n [396, 199],\n [199, 175],\n [312, 311],\n [311, 268],\n [268, 312],\n [276, 283],\n [283, 445],\n [445, 276],\n [390, 373],\n [373, 339],\n [339, 390],\n [295, 282],\n [282, 296],\n [296, 295],\n [448, 449],\n [449, 346],\n [346, 448],\n [356, 264],\n [264, 454],\n [454, 356],\n [337, 336],\n [336, 299],\n [299, 337],\n [337, 338],\n [338, 151],\n [151, 337],\n [294, 278],\n [278, 455],\n [455, 294],\n [308, 292],\n [292, 415],\n [415, 308],\n [429, 358],\n [358, 355],\n [355, 429],\n [265, 340],\n [340, 372],\n [372, 265],\n [352, 346],\n [346, 280],\n [280, 352],\n [295, 442],\n [442, 282],\n [282, 295],\n [354, 19],\n [19, 370],\n [370, 354],\n [285, 441],\n [441, 295],\n [295, 285],\n [195, 248],\n [248, 197],\n [197, 195],\n [457, 440],\n [440, 274],\n [274, 457],\n [301, 300],\n [300, 368],\n [368, 301],\n [417, 351],\n [351, 465],\n [465, 417],\n [251, 301],\n [301, 389],\n [389, 251],\n [394, 395],\n [395, 379],\n [379, 394],\n [399, 412],\n [412, 419],\n [419, 399],\n [410, 436],\n [436, 322],\n [322, 410],\n [326, 2],\n [2, 393],\n [393, 326],\n [354, 370],\n [370, 461],\n [461, 354],\n [393, 164],\n [164, 267],\n [267, 393],\n [268, 302],\n [302, 12],\n [12, 268],\n [312, 268],\n [268, 13],\n [13, 312],\n [298, 293],\n [293, 301],\n [301, 298],\n [265, 446],\n [446, 340],\n [340, 265],\n [280, 330],\n [330, 425],\n [425, 280],\n [322, 426],\n [426, 391],\n [391, 322],\n [420, 429],\n [429, 437],\n [437, 420],\n [393, 391],\n [391, 326],\n [326, 393],\n [344, 440],\n [440, 438],\n [438, 344],\n [458, 459],\n [459, 461],\n [461, 458],\n [364, 434],\n [434, 394],\n [394, 364],\n [428, 396],\n [396, 262],\n [262, 428],\n [274, 354],\n [354, 457],\n [457, 274],\n [317, 316],\n [316, 402],\n [402, 317],\n [316, 315],\n [315, 403],\n [403, 316],\n [315, 314],\n [314, 404],\n [404, 315],\n [314, 313],\n [313, 405],\n [405, 314],\n [313, 421],\n [421, 406],\n [406, 313],\n [323, 366],\n [366, 361],\n [361, 323],\n [292, 306],\n [306, 407],\n [407, 292],\n [306, 291],\n [291, 408],\n [408, 306],\n [291, 287],\n [287, 409],\n [409, 291],\n [287, 432],\n [432, 410],\n [410, 287],\n [427, 434],\n [434, 411],\n [411, 427],\n [372, 264],\n [264, 383],\n [383, 372],\n [459, 309],\n [309, 457],\n [457, 459],\n [366, 352],\n [352, 401],\n [401, 366],\n [1, 274],\n [274, 4],\n [4, 1],\n [418, 421],\n [421, 262],\n [262, 418],\n [331, 294],\n [294, 358],\n [358, 331],\n [435, 433],\n [433, 367],\n [367, 435],\n [392, 289],\n [289, 439],\n [439, 392],\n [328, 462],\n [462, 326],\n [326, 328],\n [94, 2],\n [2, 370],\n [370, 94],\n [289, 305],\n [305, 455],\n [455, 289],\n [339, 254],\n [254, 448],\n [448, 339],\n [359, 255],\n [255, 446],\n [446, 359],\n [254, 253],\n [253, 449],\n [449, 254],\n [253, 252],\n [252, 450],\n [450, 253],\n [252, 256],\n [256, 451],\n [451, 252],\n [256, 341],\n [341, 452],\n [452, 256],\n [414, 413],\n [413, 463],\n [463, 414],\n [286, 441],\n [441, 414],\n [414, 286],\n [286, 258],\n [258, 441],\n [441, 286],\n [258, 257],\n [257, 442],\n [442, 258],\n [257, 259],\n [259, 443],\n [443, 257],\n [259, 260],\n [260, 444],\n [444, 259],\n [260, 467],\n [467, 445],\n [445, 260],\n [309, 459],\n [459, 250],\n [250, 309],\n [305, 289],\n [289, 290],\n [290, 305],\n [305, 290],\n [290, 460],\n [460, 305],\n [401, 376],\n [376, 435],\n [435, 401],\n [309, 250],\n [250, 392],\n [392, 309],\n [376, 411],\n [411, 433],\n [433, 376],\n [453, 341],\n [341, 464],\n [464, 453],\n [357, 453],\n [453, 465],\n [465, 357],\n [343, 357],\n [357, 412],\n [412, 343],\n [437, 343],\n [343, 399],\n [399, 437],\n [344, 360],\n [360, 440],\n [440, 344],\n [420, 437],\n [437, 456],\n [456, 420],\n [360, 420],\n [420, 363],\n [363, 360],\n [361, 401],\n [401, 288],\n [288, 361],\n [265, 372],\n [372, 353],\n [353, 265],\n [390, 339],\n [339, 249],\n [249, 390],\n [339, 448],\n [448, 255],\n [255, 339],\n]\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { Style } from './style'\nimport { PredictedKeyPoint, PredictedKeyPoints, PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderHandOptions = {} & RenderTarget\nexport class RenderHand implements Render {\n public target: string = DEFAULT_TARGET\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderHandOptions> = {}) {\n const { target = '$..objects[?(@.classLabel==\"hand circumference\")]' } = options\n this.target = target\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n if (element.keyPoints) {\n let fillColor = this.getFillColor(element)\n for (let i = 0; i < element.keyPoints.length; i++) {\n const keyPoints = element.keyPoints[i]\n if (keyPoints.category == HAND_KEYPOINTS_CATEGORY) {\n this.renderKeyPoints(keyPoints, fillColor, Math.max(element.width, element.height), xOffset, yOffset, xScale, yScale)\n }\n }\n }\n }\n\n private renderKeyPoints(keyPoints: PredictedKeyPoints, fillColor: string, width: number, xOffset: number, yOffset: number, xScale: number, yScale: number) {\n const labelsToPoints = new Map<string, PredictedKeyPoint>()\n let maxZ = 1.0\n let minZ = -1.0\n for (let i = 0; i < keyPoints.points.length; i++) {\n const keyPoint = keyPoints.points[i]\n labelsToPoints.set(keyPoint.classLabel, keyPoint)\n if (keyPoint.z) {\n if (keyPoint.z > maxZ) {\n maxZ = keyPoint.z\n }\n if (keyPoint.z < minZ) {\n minZ = keyPoint.z\n }\n }\n }\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n for (var i = 0; i < HAND_CONNECTIONS.length; i++) {\n const connection = HAND_CONNECTIONS[i]\n const point1 = labelsToPoints.get(connection[0])\n const point2 = labelsToPoints.get(connection[1])\n\n if (!point1 || !point1.x) continue\n\n if (!point2 || !point2.x) continue\n\n const x1 = xOffset + point1.x * xScale\n const y1 = yOffset + point1.y * yScale\n const x2 = xOffset + point2.x * xScale\n const y2 = yOffset + point2.y * yScale\n\n context.beginPath()\n context.lineWidth = style.scale\n context.strokeStyle = style.colors.primary_color\n context.fillStyle = style.colors.primary_color\n context.moveTo(x1, y1)\n context.lineTo(x2, y2)\n context.stroke()\n context.closePath()\n }\n\n const MIN_RADIUS = style.scale * 2\n const MAX_RADIUS = Math.min(MIN_RADIUS * 2, width / 100)\n\n for (var i = 0; i < keyPoints.points.length; i++) {\n const p = keyPoints.points[i]\n const x = xOffset + p.x * xScale\n const y = yOffset + p.y * yScale\n const z = p.z ?? 0.0 * Math.max(xScale, yScale)\n const radius = MAX_RADIUS - ((z - minZ) * (MAX_RADIUS - MIN_RADIUS)) / (maxZ - minZ)\n\n //draw circle\n context.beginPath()\n context.arc(x, y, radius, 0, Math.PI * 2, false)\n context.fillStyle = fillColor\n context.fill()\n context.strokeStyle = style.colors.secondary_color\n context.stroke()\n }\n }\n\n private getFillColor(element: PredictedObject) {\n const style = this.style\n if (!style) {\n throw new Error('render() called before start()')\n }\n let fillColor = style.colors.primary_color\n if (element.classes) {\n for (let i = 0; i < element.classes.length; i++) {\n if (element.classes[i].category == HAND_KEYPOINTS_CATEGORY) {\n if (element.classes[i].classLabel == 'right') {\n fillColor = style.colors.right_color\n break\n } else if (element.classes[i].classLabel == 'left') {\n fillColor = style.colors.left_color\n break\n }\n }\n }\n }\n return fillColor\n }\n}\n\nconst HAND_KEYPOINTS_CATEGORY = '3d-hand-points'\n\nconst HAND_CONNECTIONS = [\n ['wrist', 'thumb cmc'],\n ['thumb cmc', 'thumb mcp'],\n ['thumb mcp', 'thumb ip'],\n ['thumb ip', 'thumb tip'],\n\n ['wrist', 'index finger mcp'],\n ['index finger mcp', 'index finger pip'],\n ['index finger pip', 'index finger dip'],\n ['index finger dip', 'index finger tip'],\n\n ['wrist', 'middle finger mcp'],\n ['middle finger mcp', 'middle finger pip'],\n ['middle finger pip', 'middle finger dip'],\n ['middle finger dip', 'middle finger tip'],\n\n ['wrist', 'ring finger mcp'],\n ['ring finger mcp', 'ring finger pip'],\n ['ring finger pip', 'ring finger dip'],\n ['ring finger dip', 'ring finger tip'],\n\n ['wrist', 'pinky mcp'],\n ['pinky mcp', 'pinky pip'],\n ['pinky pip', 'pinky dip'],\n ['pinky dip', 'pinky tip'],\n\n ['index finger mcp', 'middle finger mcp'],\n ['middle finger mcp', 'ring finger mcp'],\n ['ring finger mcp', 'pinky mcp'],\n]\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { Style } from './style'\nimport { PredictedKeyPoint, PredictedKeyPoints, PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderPoseOptions = {} & RenderTarget\n\nexport class RenderPose implements Render {\n public target: string = DEFAULT_TARGET\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderPoseOptions> = {}) {\n const { target = '$..objects[?(@.category==\"person\")]' } = options\n this.target = target\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n if (element.keyPoints) {\n for (let i = 0; i < element.keyPoints.length; i++) {\n const keyPoints = element.keyPoints[i]\n if (keyPoints.category == POSE_2D_CATEGORY) {\n this.renderPose(keyPoints, POSE_2D_CONNECTIONS, Math.max(element.width, element.height), xOffset, yOffset, xScale, yScale)\n } else if (keyPoints.category == POSE_3D_CATEGORY) {\n this.renderPose(keyPoints, POSE_3D_CONNECTIONS, Math.max(element.width, element.height), xOffset, yOffset, xScale, yScale)\n }\n }\n }\n }\n\n private renderPose(keyPoints: PredictedKeyPoints, connections: string[][], width: number, xOffset: number, yOffset: number, xScale: number, yScale: number) {\n const labelsToPoints = new Map<string, PredictedKeyPoint>()\n let maxZ = 1.0\n let minZ = -1.0\n for (let i = 0; i < keyPoints.points.length; i++) {\n const keyPoint = keyPoints.points[i]\n labelsToPoints.set(keyPoint.classLabel, keyPoint)\n if (keyPoint.z) {\n if (keyPoint.z > maxZ) {\n maxZ = keyPoint.z\n }\n if (keyPoint.z < minZ) {\n minZ = keyPoint.z\n }\n }\n }\n\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n for (var i = 0; i < connections.length; i++) {\n const connection = connections[i]\n const point1 = labelsToPoints.get(connection[0])\n const point2 = labelsToPoints.get(connection[1])\n\n if (!point1 || !point1.x) continue\n\n if (!point2 || !point2.x) continue\n\n const x1 = xOffset + point1.x * xScale\n const y1 = yOffset + point1.y * yScale\n const x2 = xOffset + point2.x * xScale\n const y2 = yOffset + point2.y * yScale\n\n context.beginPath()\n context.lineWidth = style.scale * 1\n context.strokeStyle = style.colors.primary_color\n context.fillStyle = style.colors.primary_color\n context.moveTo(x1, y1)\n context.lineTo(x2, y2)\n context.stroke()\n context.closePath()\n }\n\n const MIN_RADIUS = style.scale * 2\n const MAX_RADIUS = Math.min(MIN_RADIUS * 2, width / 100)\n\n for (var i = 0; i < keyPoints.points.length; i++) {\n const p = keyPoints.points[i]\n const x = xOffset + p.x * xScale\n const y = yOffset + p.y * yScale\n const z = p.z ?? 0.0 * Math.max(xScale, yScale)\n const radius = MAX_RADIUS - ((z - minZ) * (MAX_RADIUS - MIN_RADIUS)) / (maxZ - minZ)\n\n //draw circle\n context.beginPath()\n context.arc(x, y, radius, 0, Math.PI * 2, false)\n if (p.classLabel.includes('left')) {\n context.fillStyle = style.colors.left_color\n } else if (p.classLabel.includes('right')) {\n context.fillStyle = style.colors.right_color\n } else {\n context.fillStyle = style.colors.primary_color\n }\n context.fill()\n context.strokeStyle = style.colors.secondary_color\n context.stroke()\n }\n }\n}\n\nconst POSE_2D_CATEGORY = '2d-body-points'\nconst POSE_3D_CATEGORY = '3d-body-points'\n\nconst POSE_2D_CONNECTIONS = [\n ['left shoulder', 'right shoulder'],\n ['left hip', 'right hip'],\n\n ['left shoulder', 'left elbow'],\n ['left elbow', 'left wrist'],\n ['left shoulder', 'right hip'],\n ['left hip', 'left knee'],\n ['left knee', 'left ankle'],\n\n ['right shoulder', 'right elbow'],\n ['right elbow', 'right wrist'],\n ['right shoulder', 'left hip'],\n ['right hip', 'right knee'],\n ['right knee', 'right ankle'],\n]\n\nconst POSE_3D_CONNECTIONS = [\n ['mouth (right)', 'mouth (left)'],\n ['right ear', 'right eye (outer)'],\n ['right eye (outer)', 'right eye'],\n ['right eye', 'right eye (inner)'],\n ['right eye (inner)', 'nose'],\n ['nose', 'left eye (inner)'],\n ['left eye (inner)', 'left eye'],\n ['left eye', 'left eye (outer)'],\n ['left eye (outer)', 'left ear'],\n\n ['right shoulder', 'left shoulder'],\n ['left shoulder', 'right hip'],\n ['left hip', 'right hip'],\n ['left hip', 'right shoulder'],\n\n ['right shoulder', 'right elbow'],\n ['right elbow', 'right wrist'],\n ['right wrist', 'right thumb'],\n ['right wrist', 'right pinky'],\n ['right wrist', 'right index'],\n ['right pinky', 'right index'],\n\n ['left shoulder', 'left elbow'],\n ['left elbow', 'left wrist'],\n ['left wrist', 'left thumb'],\n ['left wrist', 'left pinky'],\n ['left wrist', 'left index'],\n ['left pinky', 'left index'],\n\n ['right hip', 'right knee'],\n ['right knee', 'right ankle'],\n ['right ankle', 'right foot index'],\n ['right ankle', 'right heel'],\n ['right heel', 'right foot index'],\n\n ['left hip', 'left knee'],\n ['left knee', 'left ankle'],\n ['left ankle', 'left foot index'],\n ['left ankle', 'left heel'],\n ['left heel', 'left foot index'],\n]\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { Style } from './style'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\nimport { Point2d, PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport * as jp from 'jsonpath'\n\ninterface TraceEntry {\n readonly timestamp: number\n readonly points: Point2d[]\n next: TraceEntry | null\n}\n\nexport type RenderTrailOptions = {\n trailLengthSeconds: number\n traceDetails?: string | undefined\n} & RenderTarget\n\n// trim the traces every 10 seconds\nconst TRIM_INTERVAL = 1000 * 1000 * 1000 * 10\nexport class RenderTrail implements Render {\n public target: string = DEFAULT_TARGET\n\n private readonly traceDetails: string | undefined\n private readonly trailLengthNanos: number\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n private traces: Map<number, TraceEntry>\n private lastTrim: number\n\n constructor(options: Partial<RenderTrailOptions> = {}) {\n const { target = '$..objects[?(@.traceId)]', trailLengthSeconds = 1, traceDetails } = options\n this.target = target\n\n this.trailLengthNanos = trailLengthSeconds * 1000 * 1000 * 1000\n this.traceDetails = traceDetails\n this.lastTrim = 0\n this.traces = new Map()\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n if (!element.traceId || streamTime.timestamp === undefined) {\n return\n }\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const points: Point2d[] = []\n\n if (this.traceDetails) {\n const targets = jp.query(element, this.traceDetails)\n if (targets && targets.length) {\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n if ('x' in target && 'y' in target) {\n if ('width' in target && 'height' in target) {\n const object = target as PredictedObject\n const point: Point2d = {\n x: object.x + object.width / 2,\n y: object.y + object.height / 2,\n }\n points.push(point)\n } else {\n points.push(target as Point2d)\n }\n }\n }\n }\n } else {\n const point: Point2d = {\n x: element.x + element.width / 2,\n y: element.y + element.height / 2,\n }\n points.push(point)\n }\n\n const head: TraceEntry = {\n points: points,\n timestamp: streamTime.timestamp,\n next: this.traces.get(element.traceId) ?? null,\n }\n this.traces.set(element.traceId, head)\n\n const radius = (element.width * xScale) / 40\n let n = 0\n for (let entry: TraceEntry | null = head; entry != null; entry = entry.next) {\n n += 1\n const age = streamTime.timestamp - entry.timestamp\n if (age < this.trailLengthNanos) {\n const alpha = 1.0 - age / this.trailLengthNanos\n this.drawTraceEntry(entry.points, radius, alpha, xOffset, yOffset, xScale, yScale, context, style)\n } else {\n entry.next = null\n }\n }\n\n if (streamTime.timestamp - this.lastTrim > TRIM_INTERVAL) {\n this.traces.forEach((traceEntry: TraceEntry, traceId: number) => {\n // @ts-ignore\n const age = streamTime.timestamp - traceEntry.timestamp\n if (age > this.trailLengthNanos) {\n this.traces.delete(traceId)\n }\n })\n }\n }\n\n private drawTraceEntry(points: Point2d[], radius: number, alpha: number, xOffset: number, yOffset: number, xScale: number, yScale: number, context: CanvasRenderingContext2D, style: Style): void {\n context.globalAlpha = alpha\n context.fillStyle = style.colors.secondary_color\n context.strokeStyle = style.colors.secondary_color\n for (let i = 0; i < points.length; i++) {\n const p = points[i]\n context.beginPath()\n context.globalAlpha = alpha\n context.arc(p.x * xScale + xOffset, p.y * yScale + yOffset, radius * alpha, 0, Math.PI * 2, false)\n context.fill()\n context.stroke()\n }\n }\n}\n","import { Point2d, PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport { Style } from './style'\nimport { CanvasRenderingContext2D } from 'canvas'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderMaskOptions = {} & RenderTarget\n\nexport class RenderMask implements Render {\n public target: string = DEFAULT_TARGET\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderMaskOptions> = {}) {\n const { target = '$..objects[?(@.mask)]' } = options\n this.target = target\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n if (!element.mask) {\n return\n }\n\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const buffer = Buffer.from(element.mask.bitmap, 'base64')\n const offscreenCanvas = new OffscreenCanvas(element.mask.width, element.mask.height)\n const offscreenContext = offscreenCanvas.getContext('2d')\n\n if (!offscreenContext) {\n throw new Error('cannot render a mask without offscreen context')\n }\n\n const aPixel = offscreenContext.createImageData(1, 1)\n const d = aPixel.data\n d[0] = 80\n d[1] = 80\n d[2] = 80\n d[3] = 128\n for (let y = 0; y < element.mask.height; y++) {\n const line = y * element.mask.stride\n for (let s = 0; s < element.mask.stride; s++) {\n const byte = buffer[line + s]\n for (let p = 0; p < 8; p++) {\n const x = s * 8 + p\n if (x >= element.mask.width) {\n break\n }\n const bit = (byte >> (7 - (p % 8))) & 1\n if (bit) {\n offscreenContext.putImageData(aPixel, x, y)\n }\n }\n }\n }\n const bitmap = offscreenCanvas.transferToImageBitmap()\n\n context.drawImage(\n // @ts-ignore - wouldn't work for node, but then we errored out above already\n bitmap,\n element.x + xOffset,\n element.y + yOffset,\n element.width * xScale,\n element.height * yScale,\n )\n }\n}\n","import { Point2d, PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport { Style } from './style'\nimport { CanvasRenderingContext2D } from 'canvas'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderContourOptions = {} & RenderTarget\n\nexport class RenderContour implements Render {\n public target: string = DEFAULT_TARGET\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderContourOptions> = {}) {\n const { target = '$..objects[?(@.contours)]' } = options\n this.target = target\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n if (!element.contours || !element.contours.length) {\n return\n }\n\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const lineWidth = Math.max(1, Math.max(context.canvas.width, context.canvas.height) / 360)\n\n for (let j = 0; j < element.contours.length; j++) {\n const contour = element.contours[j]\n\n if (contour.points.length < 2) {\n continue\n }\n //faded blue background\n context.beginPath()\n context.lineWidth = lineWidth\n context.strokeStyle = style.colors.primary_color\n context.fillStyle = style.colors.opacity_color\n let p = contour.points[contour.points.length - 1]\n context.moveTo(p.x * xScale + xOffset, p.y * yScale + yOffset)\n for (let i = 0; i < contour.points.length; i++) {\n p = contour.points[i]\n context.lineTo(p.x * xScale + xOffset, p.y * yScale + yOffset)\n }\n\n context.closePath()\n context.stroke()\n\n if (contour.cutouts && contour.cutouts.length) {\n for (let k = 0; k < contour.cutouts.length; k++) {\n const points = contour.cutouts[k]\n if (points.length < 2) {\n continue\n }\n p = points[points.length - 1]\n context.moveTo(p.x * xScale + xOffset, p.y * yScale + yOffset)\n for (let i = 0; i < points.length; i++) {\n p = points[i]\n context.lineTo(p.x * xScale + xOffset, p.y * yScale + yOffset)\n }\n context.closePath()\n context.stroke()\n }\n }\n\n context.fill()\n }\n }\n}\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { Style } from './style'\nimport { PredictedKeyPoint, PredictedKeyPoints, PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderKeyPointsOptions = { showLabels: boolean } & RenderTarget\nexport class RenderKeyPoints implements Render {\n public target: string = DEFAULT_TARGET\n public showLabels: boolean = false\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderKeyPointsOptions> = {}) {\n const { showLabels = false, target = '$..objects[?(@.keyPoints)]' } = options\n this.target = target\n this.showLabels = showLabels\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n if (element.keyPoints) {\n const style = this.style\n if (!style) {\n throw new Error('render() called before start()')\n }\n let fillColor = style.colors.primary_color\n for (let i = 0; i < element.keyPoints.length; i++) {\n const keyPoints = element.keyPoints[i]\n this.renderKeyPoints(keyPoints, fillColor, Math.max(element.width, element.height), xOffset, yOffset, xScale, yScale)\n }\n }\n }\n\n private renderKeyPoints(keyPoints: PredictedKeyPoints, fillColor: string, width: number, xOffset: number, yOffset: number, xScale: number, yScale: number) {\n let maxZ = 1.0\n let minZ = -1.0\n for (let i = 0; i < keyPoints.points.length; i++) {\n const keyPoint = keyPoints.points[i]\n if (keyPoint.z) {\n if (keyPoint.z > maxZ) {\n maxZ = keyPoint.z\n }\n if (keyPoint.z < minZ) {\n minZ = keyPoint.z\n }\n }\n }\n\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const MIN_RADIUS = 2\n const MAX_RADIUS = Math.min(MIN_RADIUS * 2, width / 100)\n\n for (var i = 0; i < keyPoints.points.length; i++) {\n const p = keyPoints.points[i]\n const x = xOffset + p.x * xScale\n const y = yOffset + p.y * yScale\n const z = p.z ?? 0.0 * Math.max(xScale, yScale)\n const radius = MAX_RADIUS - ((z - minZ) * (MAX_RADIUS - MIN_RADIUS)) / (maxZ - minZ)\n\n //draw circle\n context.beginPath()\n context.arc(x, y, radius, 0, Math.PI * 2, false)\n context.fillStyle = fillColor\n context.fill()\n context.strokeStyle = style.colors.secondary_color\n context.stroke()\n\n if (!this.showLabels) continue\n\n // label\n let label\n if (typeof p.visible == 'undefined') {\n label = p.classLabel\n } else {\n label = `${p.classLabel} (${p.visible ? 'visible' : 'invisible'})`\n }\n\n context.font = style.font\n context.fillStyle = '#ffffff'\n context.textAlign = 'left'\n context.textBaseline = 'top'\n const tw = context.measureText(label)\n let xPos = p.x * xScale + xOffset + radius\n let yPos = p.y * yScale + yOffset - (radius + tw.actualBoundingBoxAscent + tw.actualBoundingBoxDescent)\n context.fillText(label, xPos, yPos)\n }\n }\n}\n","import { PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport { Style } from './style'\nimport { CanvasRenderingContext2D } from 'canvas'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderTextOptions = {\n showText: boolean // Whether to show labels, such as OCR text\n fitToBounds: boolean // Whether to scale the font size to fit the bounding box\n textPadding?: number // Padding as percentage of container (0.0-1.0)\n} & RenderTarget\n\nexport class RenderText implements Render {\n public target: string = DEFAULT_TARGET\n public fitToBounds: boolean = true\n public textPadding: number = 0.1\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderTextOptions> = {}) {\n const { target = '$..objects[?(@.texts)]', fitToBounds = true, textPadding = 0.1 } = options\n this.target = target\n this.fitToBounds = fitToBounds\n this.textPadding = Math.max(0.02, Math.min(0.2, textPadding)) // Clamp between 2% and 20%\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n // Safety checks to prevent freezes\n if (!element || element.width <= 0 || element.height <= 0 || !element.texts || element.texts.length === 0) {\n return\n }\n\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const w = element.width * xScale\n const h = element.height * yScale\n\n let canvasDimension = Math.min(context.canvas.width, context.canvas.height)\n\n let padding = canvasDimension * this.textPadding * style.cornerPadding\n padding = Math.min(padding, w * this.textPadding, h * this.textPadding)\n\n const boundingBoxWidth = w - padding * 2\n const boundingBoxHeight = h - padding * 2\n\n let fontSize = this.getMinFontSize(context, element, boundingBoxWidth, boundingBoxHeight, style, this.fitToBounds)\n let label = ''\n\n // Collect text metrics for centering\n const fontType = style.font.split(' ')[1]\n context.font = `${fontSize}px ${fontType}`\n\n // Calculate total text height for vertical centering\n let totalTextHeight = 0\n const textMetrics = []\n\n for (let i = 0; i < element.texts.length; i++) {\n label = element.texts[i]?.text || ''\n if (!label) continue\n\n const metrics = context.measureText(label)\n const lineHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent\n totalTextHeight += lineHeight\n\n textMetrics.push({\n text: label,\n width: metrics.width,\n height: lineHeight,\n })\n }\n\n // Add spacing between lines\n const spacing = fontSize * 0.2\n if (element.texts.length > 1) {\n totalTextHeight += spacing * (element.texts.length - 1)\n }\n\n // Calculate vertical position for centering all text\n let textY = element.y * yScale + yOffset + (h - totalTextHeight) / 2\n\n // Now draw each line of text centered\n for (let i = 0; i < textMetrics.length; i++) {\n const metrics = textMetrics[i]\n\n // Center text horizontally\n let textX = element.x * xScale + xOffset + (w - metrics.width) / 2\n\n this.drawText(metrics.text, context, textX, textY, style, fontSize)\n\n // Move to next line\n textY += metrics.height + spacing\n }\n }\n\n // Draw a label on the canvas\n drawText(text: string, context: CanvasRenderingContext2D, xPos: number, yPos: number, style: Style, fontSize: number): void {\n context.fillStyle = '#ffffff'\n context.textAlign = 'left'\n context.textBaseline = 'top'\n\n // Set the font size\n let fontType = style.font.split(' ')[1]\n context.font = `${fontSize}px ${fontType}`\n\n // Draw the text\n context.fillText(text, xPos, yPos)\n }\n\n static toTitleCase(str: string) {\n if (!str) return ''\n return str.replace(/\\w\\S*/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()\n })\n }\n\n // Gets the optimal font size for all labels to fit in the bounding box\n getMinFontSize(context: CanvasRenderingContext2D, element: any, width: number, height: number, style: any, scaleToFit: boolean = false): number {\n const textLines = (element.texts || []).map((t: any) => t?.text || '').filter((t: string) => t)\n const textCount = textLines.length\n if (textCount === 0) return parseInt(style.font.split(' ')[0])\n\n const baseFontSize = parseInt(style.font.split(' ')[0])\n if (!scaleToFit) {\n return baseFontSize\n }\n\n // Simple direct approach focused on performance\n try {\n const fontType = style.font.split(' ')[1]\n\n // For single line, calculate directly based on height and width constraints\n if (textCount === 1) {\n // Target 90% of height for single line to leave small padding\n const targetHeight = height * 0.9\n\n // Start with a height-based size and measure\n let fontSize = Math.floor(targetHeight)\n context.font = `${fontSize}px ${fontType}`\n const metrics = context.measureText(textLines[0])\n\n // If width exceeds container, scale down proportionally\n if (metrics.width > width) {\n // Simple, direct calculation\n fontSize = Math.floor(fontSize * (width / metrics.width) * 0.95)\n }\n\n return Math.max(5, fontSize)\n }\n\n // For multiple lines, allocate height based on line count\n // Faster approach - one direct calculation\n\n // Set aside 10% of height for spacing between lines\n const availableHeight = height * 0.9\n const lineSpacing = textCount > 1 ? (availableHeight * 0.1) / (textCount - 1) : 0\n\n // Calculate height per line\n const heightPerLine = (availableHeight - (textCount - 1) * lineSpacing) / textCount\n\n // Initial font size based on height per line\n let fontSize = Math.floor(heightPerLine)\n context.font = `${fontSize}px ${fontType}`\n\n // Find longest line at this font size\n let maxWidth = 0\n for (const line of textLines) {\n const lineWidth = context.measureText(line).width\n maxWidth = Math.max(maxWidth, lineWidth)\n }\n\n // Scale down if width constraint is exceeded\n if (maxWidth > width) {\n fontSize = Math.floor(fontSize * (width / maxWidth) * 0.95)\n }\n\n return Math.max(5, fontSize)\n } catch (error) {\n // Ultra-safe fallback that will never cause performance issues\n return Math.min(height / (textCount + 1), width / 10)\n }\n }\n}\n","import { PredictedObject, StreamTime, PredictedClass } from '@eyepop.ai/eyepop'\nimport { Style } from './style'\nimport { Canvas, CanvasRenderingContext2D } from 'canvas'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderClassesOptions = {\n showConfidence?: boolean // Whether to show confidence, such as \"male 95%\"\n showDottedOutline?: boolean // Whether to show a dotted outline around the object\n classProperties?: ClassificationProperties[] // Classes to disable rendering for\n labelSizePercentage?: number // The label size as a percentage of the image width\n} & RenderTarget\n\nexport type ClassificationProperties = {\n color?: string\n disabled?: boolean\n disabledOpacity?: number\n}\n\nexport class RenderClasses implements Render {\n public target: string = '$'\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n private showConfidence: boolean\n private labelSizePercentage: number\n\n private classProperties: { [classLabel: string]: ClassificationProperties } = {}\n\n constructor(options: Partial<RenderClassesOptions> = {}) {\n const { showConfidence = false, classProperties = {}, target = '$', labelSizePercentage = 0.05 } = options\n\n this.target = target\n this.showConfidence = showConfidence\n this.classProperties = classProperties\n this.labelSizePercentage = labelSizePercentage\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime, color?: string): void {\n const context = this.context\n const style = this.style\n\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const canvas = context?.canvas as HTMLCanvasElement | Canvas\n const width = canvas?.width ?? 640\n const height = canvas?.height ?? 480\n\n // Calculate sizes based on image dimensions\n const baseSize = Math.min(width, height) * this.labelSizePercentage\n const xPadding = baseSize * 0.3\n const yPadding = baseSize * 2.4\n const fontSize = baseSize * 1.3\n\n let yOff = height - yPadding\n let xOff = xPadding\n\n if (element.classes) {\n let labelHeight = 0\n\n // Find the maximum label height, to keep the label height consistent\n element.classes.forEach((cls: PredictedClass) => {\n let label = cls.classLabel\n style.font = `${fontSize}px serif`\n context.font = style.font\n\n const textDetails = context?.measureText(label)\n const currentLabelHeight = textDetails.actualBoundingBoxAscent + textDetails.actualBoundingBoxDescent + 2 * xPadding * 0.5\n labelHeight = Math.max(currentLabelHeight, labelHeight)\n })\n\n // Draw the labels\n element.classes.forEach((cls: PredictedClass) => {\n let label = cls.classLabel\n const properties = this.classProperties?.[cls.classLabel]\n\n const drawDisabled = properties?.disabled ?? false\n style.colors.primary_color = properties?.color ?? '#009dff'\n\n if (drawDisabled) {\n context.globalAlpha = properties?.disabledOpacity ?? 0.5\n }\n\n if (this.showConfidence && cls.confidence) {\n label += ` ${Math.round(cls.confidence * 100)}%`\n }\n\n const textDetails = context.measureText(label)\n const labelWidth = textDetails.width + 2 * xPadding * 0.5\n const borderRadius = labelHeight / 2\n\n this.drawLabel(label, context, xOff, yOff, style, drawDisabled, xPadding * 0.5, yPadding, labelWidth, labelHeight, borderRadius)\n\n xOff += labelWidth + xPadding\n\n const maxWidth = width * 0.9 - xPadding\n\n if (xOff + labelWidth > maxWidth) {\n xOff = xPadding\n yOff -= yPadding\n }\n })\n }\n }\n\n drawLabel(\n label: string,\n context: CanvasRenderingContext2D,\n xOffset: number,\n yOffset: number,\n style: Style,\n drawDisabled: boolean,\n xPadding: number,\n yPadding: number,\n labelWidth: number,\n labelHeight: number,\n borderRadius: number,\n ) {\n context.font = style.font\n context.fillStyle = style.colors.primary_color\n\n if (drawDisabled) {\n context.globalAlpha = 0.5\n } else {\n context.globalAlpha = 1\n }\n\n context.strokeStyle = '#ffffff'\n context.setLineDash([labelHeight / 10, labelHeight / 10])\n context.lineWidth = labelHeight / 20\n // Don't stroke yet - need to define the path first\n\n context.beginPath()\n context.moveTo(xOffset + borderRadius, yOffset - labelHeight / 2)\n context.lineTo(xOffset + labelWidth - borderRadius, yOffset - labelHeight / 2)\n context.quadraticCurveTo(xOffset + labelWidth, yOffset - labelHeight / 2, xOffset + labelWidth, yOffset - labelHeight / 2 + borderRadius)\n context.lineTo(xOffset + labelWidth, yOffset + labelHeight / 2 - borderRadius)\n context.quadraticCurveTo(xOffset + labelWidth, yOffset + labelHeight / 2, xOffset + labelWidth - borderRadius, yOffset + labelHeight / 2)\n context.lineTo(xOffset + borderRadius, yOffset + labelHeight / 2)\n context.quadraticCurveTo(xOffset, yOffset + labelHeight / 2, xOffset, yOffset + labelHeight / 2 - borderRadius)\n context.lineTo(xOffset, yOffset - labelHeight / 2 + borderRadius)\n context.quadraticCurveTo(xOffset, yOffset - labelHeight / 2, xOffset + borderRadius, yOffset - labelHeight / 2)\n context.closePath()\n context.fill()\n context.stroke() // Apply the stroke to the path\n\n context.fillStyle = '#ffffff'\n context.textAlign = 'left'\n context.textBaseline = 'middle'\n context.fillText(label, xOffset + xPadding, yOffset)\n }\n}\n"],"mappings":"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AA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AA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AA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,CAAC;AAAA,EACN,CAAC,GAAG,CAAC;AAAA,EACL,CAAC,GAAG,EAAE;AAAA,EACN,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,GAAG,EAAE;AAAA,EACN,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,CAAC;AAAA,EACL,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,EAAE;AAAA,EACN,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AA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AA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,CAAC;AAAA,EACN,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,CAAC;AAAA,EACN,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,CAAC;AAAA,EACN,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,CAAC;AAAA,EACN,CAAC,GAAG,EAAE;AAAA,EACN,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,CAAC;AAAA,EACN,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,EAAE;AAAA,EACN,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,EAAE;AAAA,EACN,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,CAAC;AAAA,EACL,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,CAAC;AAAA,EACL,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,CAAC;AAAA,EACN,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AA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","names":["BoxType","fontSize","i","i","jp","i","fontSize","Render2d"]}
|
|
1
|
+
{"version":3,"sources":["../index.ts","../style.ts","../render.ts","../render-box.ts","../renderer-2d.ts","../render-blur.ts","../render-face.ts","../render-hand.ts","../render-pose.ts","../render-trail.ts","../render-mask.ts","../render-contour.ts","../render-keypoints.ts","../render-text.ts","../render-classes.ts"],"sourcesContent":["import { Prediction } from '@eyepop.ai/eyepop'\nimport { CanvasRenderingContext2D } from 'canvas'\nimport { Renderer2d } from './renderer-2d'\nimport { RenderBlur, RenderBlurOptions } from './render-blur'\nimport { RenderBox, RenderBoxOptions } from './render-box'\nimport { RenderFace, RenderFaceOptions } from './render-face'\nimport { RenderHand, RenderHandOptions } from './render-hand'\nimport { RenderPose, RenderPoseOptions } from './render-pose'\nimport { RenderTrail, RenderTrailOptions } from './render-trail'\nimport { RenderMask, RenderMaskOptions } from './render-mask'\nimport { RenderContour, RenderContourOptions } from './render-contour'\nimport { RenderKeyPoints, RenderKeyPointsOptions } from './render-keypoints'\nimport { Render, RenderTarget } from './render'\nimport { RenderText, RenderTextOptions } from './render-text'\nimport { RenderClasses, RenderClassesOptions } from './render-classes'\n\nexport interface Renderer extends RenderTarget {\n draw(p: Prediction, color?: string): void\n}\n\nexport namespace Render2d {\n export function renderer(context: CanvasRenderingContext2D, rules: Render[] | undefined = undefined): Renderer {\n return new Renderer2d({ context, rules })\n }\n export function renderBlur(options: Partial<RenderBlurOptions> = {}): Render {\n return new RenderBlur(options)\n }\n export function renderBox(options: Partial<RenderBoxOptions> = {}): Render {\n return new RenderBox(options)\n }\n export function renderClasses(options: Partial<RenderClassesOptions> = {}): Render {\n return new RenderClasses(options)\n }\n export function renderMask(options: Partial<RenderMaskOptions> = {}): Render {\n return new RenderMask(options)\n }\n export function renderContour(options: Partial<RenderContourOptions> = {}): Render {\n return new RenderContour(options)\n }\n export function renderFace(options: Partial<RenderFaceOptions> = {}): Render {\n return new RenderFace(options)\n }\n export function renderKeypoints(options: Partial<RenderKeyPointsOptions> = {}): Render {\n return new RenderKeyPoints(options)\n }\n export function renderHand(options: Partial<RenderHandOptions> = {}): Render {\n return new RenderHand(options)\n }\n export function renderPose(options: Partial<RenderPoseOptions> = {}): Render {\n return new RenderPose(options)\n }\n export function renderText(options: Partial<RenderTextOptions> = {}): Render {\n return new RenderText(options)\n }\n export function renderTrail(options: Partial<RenderTrailOptions> = {}): Render {\n return new RenderTrail(options)\n }\n}\n\nexport * from './render-blur'\nexport * from './render-box'\nexport * from './render-classes'\nexport * from './render-contour'\nexport * from './render-face'\nexport * from './render-hand'\nexport * from './render-keypoints'\nexport * from './render-mask'\nexport * from './render-pose'\nexport * from './render-text'\nexport * from './render-trail'\nexport * from './renderer-2d'\nexport * from './render'\nexport default Render2d\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { ResizeObserver } from '@juggle/resize-observer'\nexport interface Colors {\n primary_color: string\n secondary_color: string\n right_color: string\n left_color: string\n opacity_color: string\n white: string\n black: string\n blank_color: string\n}\nexport class Style {\n public font: string\n public colors: Colors\n public scale: number = 1.0\n public cornerWidth: number = 0.3\n public cornerPadding: number = 0.04\n\n private static defaultColors = {\n primary_color: '#2fa7d7',\n secondary_color: '#94e0ff',\n right_color: '#000000',\n left_color: '#ffffff',\n opacity_color: 'rgba(47, 167, 215, 0.2)',\n white: '#FFFFFF',\n black: '#111111',\n blank_color: '#000000',\n }\n\n constructor(context: CanvasRenderingContext2D) {\n this.colors = Style.defaultColors\n if ('document' in globalThis && 'implementation' in globalThis.document) {\n const resizeObserver = new ResizeObserver(entries => {\n const rect = entries[0].contentRect\n this.font = this.calculateFont(rect.width, rect.height)\n this.scale = this.calculateScale(context)\n })\n // @ts-ignore\n resizeObserver.observe(context.canvas)\n }\n\n this.font = this.calculateFont(context.canvas.width, context.canvas.height)\n this.scale = this.calculateScale(context)\n }\n\n private calculateFont(w: number, h: number): string {\n const textSize = Math.floor(Math.max(12, 0.035 * Math.min(w, h)))\n return textSize + 'px Times New Roman'\n }\n\n private calculateScale(context: CanvasRenderingContext2D): number {\n const _screen = typeof screen == 'undefined' ? null : screen\n const _window = typeof window == 'undefined' ? null : window\n const width = _screen?.width ?? context.canvas.width\n const height = _screen?.height ?? context.canvas.height\n\n // This scale provides a normalizing value of the canvas size to the screen size,\n // allowing context drawing of the same size objects on different sized canvases/screens.\n const scale = Math.max(context.canvas.width / width, context.canvas.height / height) * (_window?.devicePixelRatio ?? 1)\n return scale\n }\n}\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { Style } from './style'\nimport { StreamTime } from '@eyepop.ai/eyepop'\n\nexport const DEFAULT_TARGET = \"$..objects[?(@.category=='person')]\"\nexport interface RenderTarget {\n target: string\n}\n\nexport interface Render extends RenderTarget {\n start(context: CanvasRenderingContext2D, style: Style): void\n\n draw(element: any, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime, color?: string): void\n}\n","import { PredictedObject, StreamTime, PredictedClass } from '@eyepop.ai/eyepop'\nimport { Style } from './style'\nimport { CanvasRenderingContext2D } from 'canvas'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport enum BoxType {\n Rich = 'rich',\n Simple = 'simple',\n SimpleSelected = 'simpleSelected',\n}\n\nexport type RenderBoxOptions = {\n showClass?: boolean // Whether to show class labels, such as \"person\"\n showNestedClasses?: boolean // Whether to show nested classes, such as \"person\" + \"necklace\"\n showText?: boolean // Whether to show text labels\n showConfidence?: boolean // Whether to show confidence, such as \"0.95\"\n showTrackId?: boolean // Whether to show trace ID, such as \"132\"\n boxType?: BoxType // The style of the box bounds\n} & RenderTarget\n\nexport class RenderBox implements Render {\n public target: string = DEFAULT_TARGET\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n private showClass: boolean\n private showNestedClasses: boolean\n private showConfidence: boolean\n private showTrackId: boolean\n private boxType?: BoxType\n\n constructor(options: Partial<RenderBoxOptions> = {}) {\n const { showClass = true, showConfidence = false, showTrackId = false, showNestedClasses = false, target = '$..objects.*', boxType = BoxType.Rich } = options\n\n this.target = target\n this.showClass = showClass\n this.showNestedClasses = showNestedClasses\n this.showConfidence = showConfidence\n this.showTrackId = showTrackId\n this.boxType = boxType\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime, color?: string): void {\n if (this.boxType === BoxType.Simple) {\n this.drawSimple(element, xOffset, yOffset, xScale, yScale, streamTime, color)\n return\n } else if (this.boxType === BoxType.SimpleSelected) {\n this.drawSimpleSelected(element, xOffset, yOffset, xScale, yScale, streamTime, color)\n return\n }\n\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const x = xOffset + element.x * xScale\n const y = yOffset + element.y * yScale\n const w = element.width * xScale\n const h = element.height * yScale\n\n // Sort the element's objects based on the element.object.category\n if (element.objects) {\n element.objects.sort((a, b) => {\n if (!a.category || !b.category) return 0\n\n return a.category.localeCompare(b.category)\n })\n }\n\n let canvasDimension = Math.min(w, h)\n\n const lineWidth = Math.max(canvasDimension * 0.0025, style.scale)\n\n //faded blue background\n context.beginPath()\n context.rect(x, y, w, h)\n context.lineWidth = lineWidth\n context.strokeStyle = style.colors.opacity_color\n context.fillStyle = style.colors.opacity_color\n context.fill()\n context.stroke()\n\n let cornerSize = canvasDimension * style.cornerWidth\n cornerSize = Math.max(cornerSize, style.scale * 20)\n cornerSize = Math.min(cornerSize, w - 4 * lineWidth)\n cornerSize = Math.min(cornerSize, h - 4 * lineWidth)\n\n let corners = this.createCornerPoints(x, y, w, h, cornerSize, style.scale)\n\n corners.forEach(corner => {\n context.beginPath()\n context.moveTo(corner[0].x, corner[0].y)\n context.lineTo(corner[1].x, corner[1].y)\n context.lineTo(corner[2].x, corner[2].y)\n context.strokeStyle = style.colors.primary_color\n context.lineWidth = lineWidth\n context.stroke()\n })\n\n let padding = canvasDimension * style.cornerPadding\n padding = Math.max(padding, style.scale * 4)\n\n cornerSize = cornerSize - padding * 1.33\n cornerSize = Math.min(cornerSize, w)\n cornerSize = Math.min(cornerSize, h)\n\n const corners2 = this.createCornerPoints(x, y, w, h, cornerSize, padding, padding / 2)\n\n corners2.forEach(corner => {\n context.beginPath()\n context.moveTo(corner[0].x, corner[0].y)\n context.lineTo(corner[1].x, corner[1].y)\n context.lineTo(corner[2].x, corner[2].y)\n context.strokeStyle = style.colors.secondary_color\n context.lineWidth = lineWidth\n context.stroke()\n })\n\n padding *= 1.5\n\n let boundingBoxWidth = element.width * xScale - 2 * padding\n let boundingBoxHeight = element.height * yScale - 2 * padding\n boundingBoxHeight = Math.max(boundingBoxHeight, 0)\n boundingBoxWidth = Math.max(boundingBoxWidth, 0)\n\n let fontSize = this.getMinFontSize(context, element, boundingBoxWidth, boundingBoxHeight, style)\n let label = ''\n\n if (this.showClass && element.classLabel) {\n label = element.classLabel\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n\n if (this.showNestedClasses && element?.classes) {\n // Sort the classes based category\n element.classes.sort((a: any, b: any) => {\n return a.category.localeCompare(b.category)\n })\n\n for (let i = 0; i < element.classes.length; i++) {\n label = element.classes[i]?.classLabel\n\n if (!label) continue\n\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n }\n\n if (this.showTrackId && element.trackId) {\n label = 'ID: ' + element.trackId\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n\n if (this.showConfidence && element.confidence) {\n label = Math.round(element.confidence * 100) + '%'\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n }\n\n public drawSimple(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime, color?: string): void {\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const x = xOffset + element.x * xScale\n const y = yOffset + element.y * yScale\n const w = element.width * xScale\n const h = element.height * yScale\n\n // Sort the element's objects based on the element.object.category\n if (element.objects) {\n element.objects.sort((a, b) => {\n if (!a.category || !b.category) return 0\n\n return a.category.localeCompare(b.category)\n })\n }\n const scale = style.scale\n\n //faded blue background\n context.beginPath()\n context.rect(x, y, w, h)\n context.lineWidth = scale * 4\n context.strokeStyle = color || style.colors.primary_color\n context.stroke()\n\n let canvasDimension = Math.min(context.canvas.width, context.canvas.height)\n\n let padding = Math.max(Math.min(w / 25, canvasDimension * style.cornerWidth), scale)\n\n let boundingBoxWidth = element.width * xScale - 3 * padding\n let boundingBoxHeight = element.height * yScale - 3 * padding\n\n boundingBoxHeight = Math.max(boundingBoxHeight, 0)\n boundingBoxWidth = Math.max(boundingBoxWidth, 0)\n\n let fontSize = this.getMinFontSize(context, element, boundingBoxWidth, boundingBoxHeight, style)\n let label = ''\n\n if (this.showClass && element.classLabel) {\n label = element.classLabel\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n\n if (this.showNestedClasses && element?.classes) {\n // Sort the classes based category\n element.classes.sort((a: any, b: any) => {\n return a.category.localeCompare(b.category)\n })\n\n for (let i = 0; i < element.classes.length; i++) {\n label = element.classes[i]?.classLabel\n\n if (!label) continue\n\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n }\n\n if (this.showTrackId && element.trackId) {\n label = 'ID: ' + element.trackId\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n\n if (this.showConfidence && element.confidence) {\n label = Math.round(element.confidence * 100) + '%'\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n }\n\n public drawSimpleSelected(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime, color?: string): void {\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const x = xOffset + element.x * xScale\n const y = yOffset + element.y * yScale\n const w = element.width * xScale\n const h = element.height * yScale\n\n // Sort the element's objects based on the element.object.category\n if (element.objects) {\n element.objects.sort((a, b) => {\n if (!a.category || !b.category) return 0\n\n return a.category.localeCompare(b.category)\n })\n }\n const scale = style.scale\n\n //faded blue background\n context.beginPath()\n context.rect(x, y, w, h)\n context.lineWidth = scale * 4\n context.strokeStyle = color || style.colors.primary_color\n //context.fillStyle = style.colors.opacity_color\n //context.fill()\n context.stroke()\n\n const desiredPercentage = 0.005\n\n let canvasDimension = Math.min(context.canvas.width, context.canvas.height)\n\n // Draw the corners as circles at each corner of the bounding box\n let cornerSize = canvasDimension * desiredPercentage\n\n let padding = Math.max(Math.min(w / 25, canvasDimension * style.cornerWidth), scale)\n\n let corners = this.createCornerPoints(x, y, w, h, cornerSize, padding)\n\n corners.forEach((corner: any) => {\n context.beginPath()\n context.arc(corner.x, corner.y, cornerSize, 0, 2 * Math.PI)\n context.lineWidth = scale * 4\n context.strokeStyle = color || style.colors.primary_color\n context.fillStyle = 'white'\n context.fill()\n context.stroke()\n })\n\n let cornerDots = this.createCenterPoints(x, y, w, h, cornerSize)\n\n cornerDots.forEach((corner: any) => {\n context.beginPath()\n context.arc(corner.x, corner.y, cornerSize, 0, 2 * Math.PI)\n context.lineWidth = scale * 4\n context.strokeStyle = color || style.colors.primary_color\n context.fillStyle = 'white'\n context.fill()\n context.stroke()\n })\n\n let boundingBoxWidth = element.width * xScale - 3 * padding\n let boundingBoxHeight = element.height * yScale - 3 * padding\n\n boundingBoxHeight = Math.max(boundingBoxHeight, 0)\n boundingBoxWidth = Math.max(boundingBoxWidth, 0)\n\n let fontSize = this.getMinFontSize(context, element, boundingBoxWidth, boundingBoxHeight, style)\n let label = ''\n\n if (this.showClass && element.classLabel) {\n label = element.classLabel\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n\n if (this.showNestedClasses && element?.classes) {\n // Sort the classes based category\n element.classes.sort((a: any, b: any) => {\n return a.category.localeCompare(b.category)\n })\n\n for (let i = 0; i < element.classes.length; i++) {\n label = element.classes[i]?.classLabel\n\n if (!label) continue\n\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n }\n\n if (this.showTrackId && element.trackId) {\n label = 'ID: ' + element.trackId\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n\n if (this.showConfidence && element.confidence) {\n label = Math.round(element.confidence * 100) + '%'\n label = RenderBox.toTitleCase(label)\n yOffset += this.drawLabel(label, context, element, yScale, xScale, yOffset, xOffset, style, boundingBoxWidth, padding, false, fontSize)\n }\n }\n\n createCornerPoints(x: number, y: number, w: number, h: number, cornerSize: number, padding: number = 1, insetPadding: number = 1): Array<Array<{ x: number; y: number }>> {\n const adjustedX = x + padding\n const adjustedY = y + padding\n const adjustedW = w - 2 * padding\n const adjustedH = h - 2 * padding\n\n const innerCornerSize = cornerSize - insetPadding\n\n return [\n // Top left corner\n [\n // Inner top left corner\n { x: adjustedX + insetPadding, y: adjustedY + innerCornerSize },\n { x: adjustedX + insetPadding, y: adjustedY + insetPadding },\n { x: adjustedX + innerCornerSize, y: adjustedY + insetPadding },\n ],\n // Bottom left corner\n [\n // Inner bottom left corner\n { x: adjustedX + insetPadding, y: adjustedY + adjustedH - innerCornerSize - insetPadding },\n { x: adjustedX + insetPadding, y: adjustedY + adjustedH - insetPadding },\n { x: adjustedX + innerCornerSize, y: adjustedY + adjustedH - insetPadding },\n ],\n // Top right corner\n [\n // Inner top right corner\n { x: adjustedX + adjustedW - innerCornerSize - insetPadding, y: adjustedY + insetPadding },\n { x: adjustedX + adjustedW - insetPadding, y: adjustedY + insetPadding },\n { x: adjustedX + adjustedW - insetPadding, y: adjustedY + innerCornerSize },\n ],\n // Bottom right corner\n [\n // Inner bottom right corner\n { x: adjustedX + adjustedW - innerCornerSize - insetPadding, y: adjustedY + adjustedH - insetPadding },\n { x: adjustedX + adjustedW - insetPadding, y: adjustedY + adjustedH - insetPadding },\n { x: adjustedX + adjustedW - insetPadding, y: adjustedY + adjustedH - innerCornerSize - insetPadding },\n ],\n ]\n }\n\n createCenterPoints(x: number, y: number, w: number, h: number, cornerSize: number): Array<{ x: number; y: number }> {\n return [\n // Top left point\n { x: x, y: y },\n // Top right point\n { x: x + w, y: y },\n // Bottom left point\n { x: x, y: y + h },\n // Bottom right point\n { x: x + w, y: y + h },\n\n // Top middle point\n { x: x + w / 2, y: y },\n // Bottom middle point\n { x: x + w / 2, y: y + h },\n // Left middle point\n { x: x, y: y + h / 2 },\n // Right middle point\n { x: x + w, y: y + h / 2 },\n ]\n }\n\n // Draw a label on the canvas, scaling the font size to fit the bounding box\n drawLabel(\n label: string,\n context: CanvasRenderingContext2D,\n element: any,\n yScale: number,\n xScale: number,\n yOffset: number,\n xOffset: number,\n style: Style,\n boundingBoxWidth: number,\n padding: number,\n scaleToBounds = false,\n fontSize?: number,\n ): number {\n context.fillStyle = '#ffffff'\n context.textAlign = 'left'\n context.textBaseline = 'top'\n\n // Set the original font size\n context.font = style.font\n\n // Measure the text with the original font size\n let textDetails = context.measureText(label)\n\n // Calculate the scale factor\n let scaleFactor = boundingBoxWidth / textDetails.width\n\n let fontType = style.font.split(' ')[1]\n if (fontSize) {\n context.font = `${fontSize}px ` + fontType\n } else {\n // We calculate the font size if it is not provided,\n // further scaling it up to the bounds of the rect if enabled\n let fontSize = parseInt(style.font.split(' ')[0])\n\n if (scaleToBounds) {\n fontSize *= scaleFactor\n } else {\n // Apply the scale factor to the font size, but limit the maximum size to the original font size\n fontSize = Math.min(fontSize, fontSize * scaleFactor)\n }\n context.font = `${fontSize}px ${fontType}`\n }\n\n // Measure the text again with the new font size\n textDetails = context.measureText(label)\n\n let xPos = element.x * xScale + xOffset + 1.5 * padding\n let yPos = element.y * yScale + yOffset + 1.5 * padding\n\n context.fillText(label, xPos, yPos)\n const boxSize = padding + textDetails.actualBoundingBoxAscent + textDetails.actualBoundingBoxDescent\n yPos += boxSize\n return padding + textDetails.actualBoundingBoxDescent\n }\n\n static toTitleCase(str: string) {\n if (!str) return ''\n return str.replace(/\\w\\S*/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()\n })\n }\n\n // Gets the largest label from all the labels to be displayed\n getMinFontSize(context: CanvasRenderingContext2D, element: any, width: number, height: number, style: any, scaleToWidth: boolean = false): number {\n let largestLabel = ''\n\n if (this.showClass && element.classLabel) {\n const label = element.classLabel\n const formattedLabel = `${RenderBox.toTitleCase(label)}`\n if (formattedLabel.length > largestLabel.length) {\n largestLabel = formattedLabel\n }\n }\n\n if (this.showNestedClasses && element?.classes) {\n for (let i = 0; i < element.classes.length; i++) {\n const label = element.classes[i].classLabel\n const formattedLabel = `${RenderBox.toTitleCase(label)}`\n if (formattedLabel.length > largestLabel.length) {\n largestLabel = formattedLabel\n }\n }\n }\n\n if (this.showTrackId && element.trackId) {\n const label = `ID: ${element.trackId}`\n const formattedLabel = `${RenderBox.toTitleCase(label)}`\n if (formattedLabel.length > largestLabel.length) {\n largestLabel = formattedLabel\n }\n }\n\n if (this.showConfidence && element.confidence) {\n const label = `${Math.round(element.confidence * 100)}%`\n const formattedLabel = `${RenderBox.toTitleCase(label)}`\n if (formattedLabel.length > largestLabel.length) {\n largestLabel = formattedLabel\n }\n }\n\n let fontSize = this.getFontSize(largestLabel, context, style, width, height, scaleToWidth)\n\n return fontSize\n }\n\n getFontSize(label: string, context: CanvasRenderingContext2D, style: Style, boundingBoxWidth: number, boundingBoxHeight: number, scaleToWidth: boolean = false): number {\n context.textAlign = 'left'\n context.textBaseline = 'top'\n\n // Set the original font size\n context.font = style.font\n\n // Measure the text with the original font size\n let textDetails = context.measureText(label)\n\n // Calculate the scale factor\n let scaleFactor = boundingBoxWidth / (textDetails.actualBoundingBoxLeft + textDetails.actualBoundingBoxRight)\n\n // make sure the text fits in the height as well\n let fontSize = parseInt(style.font.split(' ')[0])\n\n if (scaleToWidth) {\n fontSize *= scaleFactor\n } else {\n fontSize = Math.min(fontSize, fontSize * scaleFactor)\n }\n\n fontSize = Math.max(fontSize, 0)\n\n return fontSize\n }\n}\n","import { Renderer } from './index'\nimport { CanvasRenderingContext2D } from 'canvas'\nimport { Prediction, StreamTime } from '@eyepop.ai/eyepop'\nimport { Style } from './style'\nimport { DEFAULT_TARGET, Render } from './render'\nimport { RenderBox } from './render-box'\nimport * as jp from 'jsonpath'\n\nexport type Renderer2dOptions = {\n context: CanvasRenderingContext2D\n rules?: Render[] | Render | undefined\n}\n\nexport class Renderer2d implements Renderer {\n public target: string = DEFAULT_TARGET\n\n private readonly context: CanvasRenderingContext2D\n private readonly style: Style\n\n private readonly rules: Render[]\n\n private static readonly defaultRules: Render[] = [new RenderBox()]\n\n constructor(options: Renderer2dOptions) {\n const { context, rules } = options\n\n this.context = context\n if (rules) {\n if (Array.isArray(rules)) {\n this.rules = rules\n } else {\n this.rules = [rules]\n }\n } else {\n this.rules = Renderer2d.defaultRules\n }\n this.style = new Style(context)\n for (let i = 0; i < this.rules.length; i++) {\n this.rules[i].start(this.context, this.style)\n }\n }\n\n public draw(p: Prediction, color?: string) {\n const x_scale = this.context.canvas.width / p.source_width\n const y_scale = this.context.canvas.height / p.source_height\n const streamTime = p as StreamTime\n for (let i = 0; i < this.rules.length; i++) {\n const rule = this.rules[i]\n const targets = jp.query(p, rule.target)\n for (let j = 0; j < targets.length; j++) {\n rule.draw(targets[j], 0, 0, x_scale, y_scale, streamTime, color)\n }\n }\n }\n}\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { Style } from './style'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\nimport { StreamTime, PredictedObject } from '@eyepop.ai/eyepop'\n\nexport type RenderBlurOptions = {} & RenderTarget\n\nexport class RenderBlur implements Render {\n public target: string = DEFAULT_TARGET\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderBlurOptions> = {}) {\n const { target = DEFAULT_TARGET } = options\n this.target = target\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(object: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n const x = xOffset + object.x * xScale\n const y = yOffset + object.y * yScale\n const w = object.width * xScale\n const h = object.height * yScale\n\n context.beginPath()\n context.rect(x, y, w, h)\n context.lineWidth = style.scale\n context.strokeStyle = style.colors.black\n context.fillStyle = style.colors.black\n context.fill()\n context.stroke()\n }\n}\n\nexport default RenderBlur\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { Style } from './style'\nimport { PredictedMesh, PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderFaceOptions = { showLabels: boolean } & RenderTarget\n\nexport class RenderFace implements Render {\n public target: string = DEFAULT_TARGET\n public showLabels: boolean = false\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderFaceOptions> = {}) {\n const { showLabels = false, target = '$..objects[?(@.classLabel==\"face\")]' } = options\n this.target = target\n this.showLabels = showLabels\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n if (element.meshs) {\n for (let i = 0; i < element.meshs.length; i++) {\n const mesh = element.meshs[i]\n if (mesh.category == '3d-face-mesh') {\n this.render3dFaceMesh(mesh, xOffset, yOffset, xScale, yScale)\n }\n }\n }\n this.renderExpressions(element, xOffset, yOffset, xScale, yScale)\n }\n\n private renderExpressions(face: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number) {\n let expressions = []\n if (face.classes) {\n for (let i = 0; i < face.classes.length; i++) {\n if (face.classes[i].confidence > 0.95) {\n const label = <string>EXPRESSION_LABELS.get(face.classes[i].classLabel)\n if (label) {\n expressions.push(label)\n }\n }\n }\n }\n if (expressions.length > 0) {\n const label = expressions.join(', ')\n const padding = 10\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n context.beginPath()\n context.lineWidth = style.scale\n context.strokeStyle = style.colors.primary_color\n context.fillStyle = style.colors.primary_color\n context.font = style.font\n context.textBaseline = 'hanging'\n\n const tw = context.measureText(label)\n\n const x = xOffset + face.x * xScale\n const y = yOffset + face.y * yScale\n if (context.roundRect) {\n context.roundRect(x, y, tw.width + padding * 2, 24, [0, 0, 20, 0])\n } else {\n context.fillRect(x, y, tw.width + padding * 2, 24)\n }\n\n context.fill()\n\n if (this.showLabels) {\n context.fillStyle = style.colors.secondary_color\n context.fillText(label, Math.max(0, x) + padding, Math.max(0, y))\n }\n context.closePath()\n }\n }\n\n private render3dFaceMesh(mesh: PredictedMesh, xOffset: number, yOffset: number, xScale: number, yScale: number) {\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n const radius = style.scale\n context.lineWidth = radius\n context.strokeStyle = style.colors.primary_color\n context.fillStyle = style.colors.primary_color\n this.renderConnections(context, FACE_LANDMARKS_TESSELATION, mesh, xOffset, yOffset, xScale, yScale)\n\n context.lineWidth = radius * 1.5\n context.strokeStyle = style.colors.secondary_color\n context.fillStyle = style.colors.secondary_color\n this.renderConnections(context, FACE_LANDMARKS_CONTOURS, mesh, xOffset, yOffset, xScale, yScale)\n\n context.lineWidth = radius * 1.5\n context.strokeStyle = style.colors.right_color\n context.fillStyle = style.colors.right_color\n this.renderConnections(context, FACE_LANDMARKS_RIGHT_IRIS, mesh, xOffset, yOffset, xScale, yScale)\n\n context.lineWidth = radius * 1.5\n context.strokeStyle = style.colors.left_color\n context.fillStyle = style.colors.left_color\n this.renderConnections(context, FACE_LANDMARKS_LEFT_IRIS, mesh, xOffset, yOffset, xScale, yScale)\n }\n\n private renderConnections(context: CanvasRenderingContext2D, connections: number[][], mesh: PredictedMesh, xOffset: number, yOffset: number, xScale: number, yScale: number) {\n context.beginPath()\n for (let i = 0; i < connections.length; i++) {\n let x1 = mesh.points[connections[i][0]].x\n let x2 = mesh.points[connections[i][1]].x\n let y1 = mesh.points[connections[i][0]].y\n let y2 = mesh.points[connections[i][1]].y\n x1 = xOffset + x1 * xScale\n x2 = xOffset + x2 * xScale\n y1 = yOffset + y1 * yScale\n y2 = yOffset + y2 * yScale\n context.moveTo(x1, y1)\n context.lineTo(x2, y2)\n }\n context.stroke()\n }\n}\n\nconst EXPRESSION_LABELS = new Map<string, string>([\n ['happy', 'happy'],\n ['neutral', 'neutral'],\n ['sad', 'sad'],\n ['surprise', 'surprise'],\n ['angry', 'angry'],\n ['fear', 'fear'],\n ['disgust', 'disgust'],\n])\n\n/**\n * Face mesh connection from Google Mediapipe\n *\n * @see https://storage.googleapis.com/mediapipe-assets/documentation/mediapipe_face_landmark_fullsize.png\n * @see https://github.com/google/mediapipe/blob/252c7eef253dfe866e98b4f679fc4d6af616d0a0/mediapipe/tasks/web/vision/face_landmarker/face_landmarks_connections.ts#L4\n */\n\n/** Landmarks for lips */\nconst FACE_LANDMARKS_LIPS = [\n [61, 146],\n [146, 91],\n [91, 181],\n [181, 84],\n [84, 17],\n [17, 314],\n [314, 405],\n [405, 321],\n [321, 375],\n [375, 291],\n [61, 185],\n [185, 40],\n [40, 39],\n [39, 37],\n [37, 0],\n [0, 267],\n [267, 269],\n [269, 270],\n [270, 409],\n [409, 291],\n [78, 95],\n [95, 88],\n [88, 178],\n [178, 87],\n [87, 14],\n [14, 317],\n [317, 402],\n [402, 318],\n [318, 324],\n [324, 308],\n [78, 191],\n [191, 80],\n [80, 81],\n [81, 82],\n [82, 13],\n [13, 312],\n [312, 311],\n [311, 310],\n [310, 415],\n [415, 308],\n]\n\n/** Landmarks for left eye */\nconst FACE_LANDMARKS_LEFT_EYE = [\n [263, 249],\n [249, 390],\n [390, 373],\n [373, 374],\n [374, 380],\n [380, 381],\n [381, 382],\n [382, 362],\n [263, 466],\n [466, 388],\n [388, 387],\n [387, 386],\n [386, 385],\n [385, 384],\n [384, 398],\n [398, 362],\n]\n\n/** Landmarks for left eyebrow */\nconst FACE_LANDMARKS_LEFT_EYEBROW = [\n [276, 283],\n [283, 282],\n [282, 295],\n [295, 285],\n [300, 293],\n [293, 334],\n [334, 296],\n [296, 336],\n]\n\n/** Landmarks for left iris */\nconst FACE_LANDMARKS_LEFT_IRIS = [\n [474, 475],\n [475, 476],\n [476, 477],\n [477, 474],\n]\n\n/** Landmarks for right eye */\nconst FACE_LANDMARKS_RIGHT_EYE = [\n [33, 7],\n [7, 163],\n [163, 144],\n [144, 145],\n [145, 153],\n [153, 154],\n [154, 155],\n [155, 133],\n [33, 246],\n [246, 161],\n [161, 160],\n [160, 159],\n [159, 158],\n [158, 157],\n [157, 173],\n [173, 133],\n]\n\n/** Landmarks for right eyebrow */\nconst FACE_LANDMARKS_RIGHT_EYEBROW = [\n [46, 53],\n [53, 52],\n [52, 65],\n [65, 55],\n [70, 63],\n [63, 105],\n [105, 66],\n [66, 107],\n]\n\n/** Landmarks for right iris */\nconst FACE_LANDMARKS_RIGHT_IRIS = [\n [469, 470],\n [470, 471],\n [471, 472],\n [472, 469],\n]\n\n/** Landmarks for face oval */\nconst FACE_LANDMARKS_FACE_OVAL = [\n [10, 338],\n [338, 297],\n [297, 332],\n [332, 284],\n [284, 251],\n [251, 389],\n [389, 356],\n [356, 454],\n [454, 323],\n [323, 361],\n [361, 288],\n [288, 397],\n [397, 365],\n [365, 379],\n [379, 378],\n [378, 400],\n [400, 377],\n [377, 152],\n [152, 148],\n [148, 176],\n [176, 149],\n [149, 150],\n [150, 136],\n [136, 172],\n [172, 58],\n [58, 132],\n [132, 93],\n [93, 234],\n [234, 127],\n [127, 162],\n [162, 21],\n [21, 54],\n [54, 103],\n [103, 67],\n [67, 109],\n [109, 10],\n]\n\n/** Landmarks for contours */\nconst FACE_LANDMARKS_CONTOURS = [\n ...FACE_LANDMARKS_LIPS,\n ...FACE_LANDMARKS_LEFT_EYE,\n ...FACE_LANDMARKS_LEFT_EYEBROW,\n ...FACE_LANDMARKS_RIGHT_EYE,\n ...FACE_LANDMARKS_RIGHT_EYEBROW,\n ...FACE_LANDMARKS_FACE_OVAL,\n]\n\n/** Landmarks for face tesselation */\nconst FACE_LANDMARKS_TESSELATION = [\n [127, 34],\n [34, 139],\n [139, 127],\n [11, 0],\n [0, 37],\n [37, 11],\n [232, 231],\n [231, 120],\n [120, 232],\n [72, 37],\n [37, 39],\n [39, 72],\n [128, 121],\n [121, 47],\n [47, 128],\n [232, 121],\n [121, 128],\n [128, 232],\n [104, 69],\n [69, 67],\n [67, 104],\n [175, 171],\n [171, 148],\n [148, 175],\n [118, 50],\n [50, 101],\n [101, 118],\n [73, 39],\n [39, 40],\n [40, 73],\n [9, 151],\n [151, 108],\n [108, 9],\n [48, 115],\n [115, 131],\n [131, 48],\n [194, 204],\n [204, 211],\n [211, 194],\n [74, 40],\n [40, 185],\n [185, 74],\n [80, 42],\n [42, 183],\n [183, 80],\n [40, 92],\n [92, 186],\n [186, 40],\n [230, 229],\n [229, 118],\n [118, 230],\n [202, 212],\n [212, 214],\n [214, 202],\n [83, 18],\n [18, 17],\n [17, 83],\n [76, 61],\n [61, 146],\n [146, 76],\n [160, 29],\n [29, 30],\n [30, 160],\n [56, 157],\n [157, 173],\n [173, 56],\n [106, 204],\n [204, 194],\n [194, 106],\n [135, 214],\n [214, 192],\n [192, 135],\n [203, 165],\n [165, 98],\n [98, 203],\n [21, 71],\n [71, 68],\n [68, 21],\n [51, 45],\n [45, 4],\n [4, 51],\n [144, 24],\n [24, 23],\n [23, 144],\n [77, 146],\n [146, 91],\n [91, 77],\n [205, 50],\n [50, 187],\n [187, 205],\n [201, 200],\n [200, 18],\n [18, 201],\n [91, 106],\n [106, 182],\n [182, 91],\n [90, 91],\n [91, 181],\n [181, 90],\n [85, 84],\n [84, 17],\n [17, 85],\n [206, 203],\n [203, 36],\n [36, 206],\n [148, 171],\n [171, 140],\n [140, 148],\n [92, 40],\n [40, 39],\n [39, 92],\n [193, 189],\n [189, 244],\n [244, 193],\n [159, 158],\n [158, 28],\n [28, 159],\n [247, 246],\n [246, 161],\n [161, 247],\n [236, 3],\n [3, 196],\n [196, 236],\n [54, 68],\n [68, 104],\n [104, 54],\n [193, 168],\n [168, 8],\n [8, 193],\n [117, 228],\n [228, 31],\n [31, 117],\n [189, 193],\n [193, 55],\n [55, 189],\n [98, 97],\n [97, 99],\n [99, 98],\n [126, 47],\n [47, 100],\n [100, 126],\n [166, 79],\n [79, 218],\n [218, 166],\n [155, 154],\n [154, 26],\n [26, 155],\n [209, 49],\n [49, 131],\n [131, 209],\n [135, 136],\n [136, 150],\n [150, 135],\n [47, 126],\n [126, 217],\n [217, 47],\n [223, 52],\n [52, 53],\n [53, 223],\n [45, 51],\n [51, 134],\n [134, 45],\n [211, 170],\n [170, 140],\n [140, 211],\n [67, 69],\n [69, 108],\n [108, 67],\n [43, 106],\n [106, 91],\n [91, 43],\n [230, 119],\n [119, 120],\n [120, 230],\n [226, 130],\n [130, 247],\n [247, 226],\n [63, 53],\n [53, 52],\n [52, 63],\n [238, 20],\n [20, 242],\n [242, 238],\n [46, 70],\n [70, 156],\n [156, 46],\n [78, 62],\n [62, 96],\n [96, 78],\n [46, 53],\n [53, 63],\n [63, 46],\n [143, 34],\n [34, 227],\n [227, 143],\n [123, 117],\n [117, 111],\n [111, 123],\n [44, 125],\n [125, 19],\n [19, 44],\n [236, 134],\n [134, 51],\n [51, 236],\n [216, 206],\n [206, 205],\n [205, 216],\n [154, 153],\n [153, 22],\n [22, 154],\n [39, 37],\n [37, 167],\n [167, 39],\n [200, 201],\n [201, 208],\n [208, 200],\n [36, 142],\n [142, 100],\n [100, 36],\n [57, 212],\n [212, 202],\n [202, 57],\n [20, 60],\n [60, 99],\n [99, 20],\n [28, 158],\n [158, 157],\n [157, 28],\n [35, 226],\n [226, 113],\n [113, 35],\n [160, 159],\n [159, 27],\n [27, 160],\n [204, 202],\n [202, 210],\n [210, 204],\n [113, 225],\n [225, 46],\n [46, 113],\n [43, 202],\n [202, 204],\n [204, 43],\n [62, 76],\n [76, 77],\n [77, 62],\n [137, 123],\n [123, 116],\n [116, 137],\n [41, 38],\n [38, 72],\n [72, 41],\n [203, 129],\n [129, 142],\n [142, 203],\n [64, 98],\n [98, 240],\n [240, 64],\n [49, 102],\n [102, 64],\n [64, 49],\n [41, 73],\n [73, 74],\n [74, 41],\n [212, 216],\n [216, 207],\n [207, 212],\n [42, 74],\n [74, 184],\n [184, 42],\n [169, 170],\n [170, 211],\n [211, 169],\n [170, 149],\n [149, 176],\n [176, 170],\n [105, 66],\n [66, 69],\n [69, 105],\n [122, 6],\n [6, 168],\n [168, 122],\n [123, 147],\n [147, 187],\n [187, 123],\n [96, 77],\n [77, 90],\n [90, 96],\n [65, 55],\n [55, 107],\n [107, 65],\n [89, 90],\n [90, 180],\n [180, 89],\n [101, 100],\n [100, 120],\n [120, 101],\n [63, 105],\n [105, 104],\n [104, 63],\n [93, 137],\n [137, 227],\n [227, 93],\n [15, 86],\n [86, 85],\n [85, 15],\n [129, 102],\n [102, 49],\n [49, 129],\n [14, 87],\n [87, 86],\n [86, 14],\n [55, 8],\n [8, 9],\n [9, 55],\n [100, 47],\n [47, 121],\n [121, 100],\n [145, 23],\n [23, 22],\n [22, 145],\n [88, 89],\n [89, 179],\n [179, 88],\n [6, 122],\n [122, 196],\n [196, 6],\n [88, 95],\n [95, 96],\n [96, 88],\n [138, 172],\n [172, 136],\n [136, 138],\n [215, 58],\n [58, 172],\n [172, 215],\n [115, 48],\n [48, 219],\n [219, 115],\n [42, 80],\n [80, 81],\n [81, 42],\n [195, 3],\n [3, 51],\n [51, 195],\n [43, 146],\n [146, 61],\n [61, 43],\n [171, 175],\n [175, 199],\n [199, 171],\n [81, 82],\n [82, 38],\n [38, 81],\n [53, 46],\n [46, 225],\n [225, 53],\n [144, 163],\n [163, 110],\n [110, 144],\n [52, 65],\n [65, 66],\n [66, 52],\n [229, 228],\n [228, 117],\n [117, 229],\n [34, 127],\n [127, 234],\n [234, 34],\n [107, 108],\n [108, 69],\n [69, 107],\n [109, 108],\n [108, 151],\n [151, 109],\n [48, 64],\n [64, 235],\n [235, 48],\n [62, 78],\n [78, 191],\n [191, 62],\n [129, 209],\n [209, 126],\n [126, 129],\n [111, 35],\n [35, 143],\n [143, 111],\n [117, 123],\n [123, 50],\n [50, 117],\n [222, 65],\n [65, 52],\n [52, 222],\n [19, 125],\n [125, 141],\n [141, 19],\n [221, 55],\n [55, 65],\n [65, 221],\n [3, 195],\n [195, 197],\n [197, 3],\n [25, 7],\n [7, 33],\n [33, 25],\n [220, 237],\n [237, 44],\n [44, 220],\n [70, 71],\n [71, 139],\n [139, 70],\n [122, 193],\n [193, 245],\n [245, 122],\n [247, 130],\n [130, 33],\n [33, 247],\n [71, 21],\n [21, 162],\n [162, 71],\n [170, 169],\n [169, 150],\n [150, 170],\n [188, 174],\n [174, 196],\n [196, 188],\n [216, 186],\n [186, 92],\n [92, 216],\n [2, 97],\n [97, 167],\n [167, 2],\n [141, 125],\n [125, 241],\n [241, 141],\n [164, 167],\n [167, 37],\n [37, 164],\n [72, 38],\n [38, 12],\n [12, 72],\n [38, 82],\n [82, 13],\n [13, 38],\n [63, 68],\n [68, 71],\n [71, 63],\n [226, 35],\n [35, 111],\n [111, 226],\n [101, 50],\n [50, 205],\n [205, 101],\n [206, 92],\n [92, 165],\n [165, 206],\n [209, 198],\n [198, 217],\n [217, 209],\n [165, 167],\n [167, 97],\n [97, 165],\n [220, 115],\n [115, 218],\n [218, 220],\n [133, 112],\n [112, 243],\n [243, 133],\n [239, 238],\n [238, 241],\n [241, 239],\n [214, 135],\n [135, 169],\n [169, 214],\n [190, 173],\n [173, 133],\n [133, 190],\n [171, 208],\n [208, 32],\n [32, 171],\n [125, 44],\n [44, 237],\n [237, 125],\n [86, 87],\n [87, 178],\n [178, 86],\n [85, 86],\n [86, 179],\n [179, 85],\n [84, 85],\n [85, 180],\n [180, 84],\n [83, 84],\n [84, 181],\n [181, 83],\n [201, 83],\n [83, 182],\n [182, 201],\n [137, 93],\n [93, 132],\n [132, 137],\n [76, 62],\n [62, 183],\n [183, 76],\n [61, 76],\n [76, 184],\n [184, 61],\n [57, 61],\n [61, 185],\n [185, 57],\n [212, 57],\n [57, 186],\n [186, 212],\n [214, 207],\n [207, 187],\n [187, 214],\n [34, 143],\n [143, 156],\n [156, 34],\n [79, 239],\n [239, 237],\n [237, 79],\n [123, 137],\n [137, 177],\n [177, 123],\n [44, 1],\n [1, 4],\n [4, 44],\n [201, 194],\n [194, 32],\n [32, 201],\n [64, 102],\n [102, 129],\n [129, 64],\n [213, 215],\n [215, 138],\n [138, 213],\n [59, 166],\n [166, 219],\n [219, 59],\n [242, 99],\n [99, 97],\n [97, 242],\n [2, 94],\n [94, 141],\n [141, 2],\n [75, 59],\n [59, 235],\n [235, 75],\n [24, 110],\n [110, 228],\n [228, 24],\n [25, 130],\n [130, 226],\n [226, 25],\n [23, 24],\n [24, 229],\n [229, 23],\n [22, 23],\n [23, 230],\n [230, 22],\n [26, 22],\n [22, 231],\n [231, 26],\n [112, 26],\n [26, 232],\n [232, 112],\n [189, 190],\n [190, 243],\n [243, 189],\n [221, 56],\n [56, 190],\n [190, 221],\n [28, 56],\n [56, 221],\n [221, 28],\n [27, 28],\n [28, 222],\n [222, 27],\n [29, 27],\n [27, 223],\n [223, 29],\n [30, 29],\n [29, 224],\n [224, 30],\n [247, 30],\n [30, 225],\n [225, 247],\n [238, 79],\n [79, 20],\n [20, 238],\n [166, 59],\n [59, 75],\n [75, 166],\n [60, 75],\n [75, 240],\n [240, 60],\n [147, 177],\n [177, 215],\n [215, 147],\n [20, 79],\n [79, 166],\n [166, 20],\n [187, 147],\n [147, 213],\n [213, 187],\n [112, 233],\n [233, 244],\n [244, 112],\n [233, 128],\n [128, 245],\n [245, 233],\n [128, 114],\n [114, 188],\n [188, 128],\n [114, 217],\n [217, 174],\n [174, 114],\n [131, 115],\n [115, 220],\n [220, 131],\n [217, 198],\n [198, 236],\n [236, 217],\n [198, 131],\n [131, 134],\n [134, 198],\n [177, 132],\n [132, 58],\n [58, 177],\n [143, 35],\n [35, 124],\n [124, 143],\n [110, 163],\n [163, 7],\n [7, 110],\n [228, 110],\n [110, 25],\n [25, 228],\n [356, 389],\n [389, 368],\n [368, 356],\n [11, 302],\n [302, 267],\n [267, 11],\n [452, 350],\n [350, 349],\n [349, 452],\n [302, 303],\n [303, 269],\n [269, 302],\n [357, 343],\n [343, 277],\n [277, 357],\n [452, 453],\n [453, 357],\n [357, 452],\n [333, 332],\n [332, 297],\n [297, 333],\n [175, 152],\n [152, 377],\n [377, 175],\n [347, 348],\n [348, 330],\n [330, 347],\n [303, 304],\n [304, 270],\n [270, 303],\n [9, 336],\n [336, 337],\n [337, 9],\n [278, 279],\n [279, 360],\n [360, 278],\n [418, 262],\n [262, 431],\n [431, 418],\n [304, 408],\n [408, 409],\n [409, 304],\n [310, 415],\n [415, 407],\n [407, 310],\n [270, 409],\n [409, 410],\n [410, 270],\n [450, 348],\n [348, 347],\n [347, 450],\n [422, 430],\n [430, 434],\n [434, 422],\n [313, 314],\n [314, 17],\n [17, 313],\n [306, 307],\n [307, 375],\n [375, 306],\n [387, 388],\n [388, 260],\n [260, 387],\n [286, 414],\n [414, 398],\n [398, 286],\n [335, 406],\n [406, 418],\n [418, 335],\n [364, 367],\n [367, 416],\n [416, 364],\n [423, 358],\n [358, 327],\n [327, 423],\n [251, 284],\n [284, 298],\n [298, 251],\n [281, 5],\n [5, 4],\n [4, 281],\n [373, 374],\n [374, 253],\n [253, 373],\n [307, 320],\n [320, 321],\n [321, 307],\n [425, 427],\n [427, 411],\n [411, 425],\n [421, 313],\n [313, 18],\n [18, 421],\n [321, 405],\n [405, 406],\n [406, 321],\n [320, 404],\n [404, 405],\n [405, 320],\n [315, 16],\n [16, 17],\n [17, 315],\n [426, 425],\n [425, 266],\n [266, 426],\n [377, 400],\n [400, 369],\n [369, 377],\n [322, 391],\n [391, 269],\n [269, 322],\n [417, 465],\n [465, 464],\n [464, 417],\n [386, 257],\n [257, 258],\n [258, 386],\n [466, 260],\n [260, 388],\n [388, 466],\n [456, 399],\n [399, 419],\n [419, 456],\n [284, 332],\n [332, 333],\n [333, 284],\n [417, 285],\n [285, 8],\n [8, 417],\n [346, 340],\n [340, 261],\n [261, 346],\n [413, 441],\n [441, 285],\n [285, 413],\n [327, 460],\n [460, 328],\n [328, 327],\n [355, 371],\n [371, 329],\n [329, 355],\n [392, 439],\n [439, 438],\n [438, 392],\n [382, 341],\n [341, 256],\n [256, 382],\n [429, 420],\n [420, 360],\n [360, 429],\n [364, 394],\n [394, 379],\n [379, 364],\n [277, 343],\n [343, 437],\n [437, 277],\n [443, 444],\n [444, 283],\n [283, 443],\n [275, 440],\n [440, 363],\n [363, 275],\n [431, 262],\n [262, 369],\n [369, 431],\n [297, 338],\n [338, 337],\n [337, 297],\n [273, 375],\n [375, 321],\n [321, 273],\n [450, 451],\n [451, 349],\n [349, 450],\n [446, 342],\n [342, 467],\n [467, 446],\n [293, 334],\n [334, 282],\n [282, 293],\n [458, 461],\n [461, 462],\n [462, 458],\n [276, 353],\n [353, 383],\n [383, 276],\n [308, 324],\n [324, 325],\n [325, 308],\n [276, 300],\n [300, 293],\n [293, 276],\n [372, 345],\n [345, 447],\n [447, 372],\n [352, 345],\n [345, 340],\n [340, 352],\n [274, 1],\n [1, 19],\n [19, 274],\n [456, 248],\n [248, 281],\n [281, 456],\n [436, 427],\n [427, 425],\n [425, 436],\n [381, 256],\n [256, 252],\n [252, 381],\n [269, 391],\n [391, 393],\n [393, 269],\n [200, 199],\n [199, 428],\n [428, 200],\n [266, 330],\n [330, 329],\n [329, 266],\n [287, 273],\n [273, 422],\n [422, 287],\n [250, 462],\n [462, 328],\n [328, 250],\n [258, 286],\n [286, 384],\n [384, 258],\n [265, 353],\n [353, 342],\n [342, 265],\n [387, 259],\n [259, 257],\n [257, 387],\n [424, 431],\n [431, 430],\n [430, 424],\n [342, 353],\n [353, 276],\n [276, 342],\n [273, 335],\n [335, 424],\n [424, 273],\n [292, 325],\n [325, 307],\n [307, 292],\n [366, 447],\n [447, 345],\n [345, 366],\n [271, 303],\n [303, 302],\n [302, 271],\n [423, 266],\n [266, 371],\n [371, 423],\n [294, 455],\n [455, 460],\n [460, 294],\n [279, 278],\n [278, 294],\n [294, 279],\n [271, 272],\n [272, 304],\n [304, 271],\n [432, 434],\n [434, 427],\n [427, 432],\n [272, 407],\n [407, 408],\n [408, 272],\n [394, 430],\n [430, 431],\n [431, 394],\n [395, 369],\n [369, 400],\n [400, 395],\n [334, 333],\n [333, 299],\n [299, 334],\n [351, 417],\n [417, 168],\n [168, 351],\n [352, 280],\n [280, 411],\n [411, 352],\n [325, 319],\n [319, 320],\n [320, 325],\n [295, 296],\n [296, 336],\n [336, 295],\n [319, 403],\n [403, 404],\n [404, 319],\n [330, 348],\n [348, 349],\n [349, 330],\n [293, 298],\n [298, 333],\n [333, 293],\n [323, 454],\n [454, 447],\n [447, 323],\n [15, 16],\n [16, 315],\n [315, 15],\n [358, 429],\n [429, 279],\n [279, 358],\n [14, 15],\n [15, 316],\n [316, 14],\n [285, 336],\n [336, 9],\n [9, 285],\n [329, 349],\n [349, 350],\n [350, 329],\n [374, 380],\n [380, 252],\n [252, 374],\n [318, 402],\n [402, 403],\n [403, 318],\n [6, 197],\n [197, 419],\n [419, 6],\n [318, 319],\n [319, 325],\n [325, 318],\n [367, 364],\n [364, 365],\n [365, 367],\n [435, 367],\n [367, 397],\n [397, 435],\n [344, 438],\n [438, 439],\n [439, 344],\n [272, 271],\n [271, 311],\n [311, 272],\n [195, 5],\n [5, 281],\n [281, 195],\n [273, 287],\n [287, 291],\n [291, 273],\n [396, 428],\n [428, 199],\n [199, 396],\n [311, 271],\n [271, 268],\n [268, 311],\n [283, 444],\n [444, 445],\n [445, 283],\n [373, 254],\n [254, 339],\n [339, 373],\n [282, 334],\n [334, 296],\n [296, 282],\n [449, 347],\n [347, 346],\n [346, 449],\n [264, 447],\n [447, 454],\n [454, 264],\n [336, 296],\n [296, 299],\n [299, 336],\n [338, 10],\n [10, 151],\n [151, 338],\n [278, 439],\n [439, 455],\n [455, 278],\n [292, 407],\n [407, 415],\n [415, 292],\n [358, 371],\n [371, 355],\n [355, 358],\n [340, 345],\n [345, 372],\n [372, 340],\n [346, 347],\n [347, 280],\n [280, 346],\n [442, 443],\n [443, 282],\n [282, 442],\n [19, 94],\n [94, 370],\n [370, 19],\n [441, 442],\n [442, 295],\n [295, 441],\n [248, 419],\n [419, 197],\n [197, 248],\n [263, 255],\n [255, 359],\n [359, 263],\n [440, 275],\n [275, 274],\n [274, 440],\n [300, 383],\n [383, 368],\n [368, 300],\n [351, 412],\n [412, 465],\n [465, 351],\n [263, 467],\n [467, 466],\n [466, 263],\n [301, 368],\n [368, 389],\n [389, 301],\n [395, 378],\n [378, 379],\n [379, 395],\n [412, 351],\n [351, 419],\n [419, 412],\n [436, 426],\n [426, 322],\n [322, 436],\n [2, 164],\n [164, 393],\n [393, 2],\n [370, 462],\n [462, 461],\n [461, 370],\n [164, 0],\n [0, 267],\n [267, 164],\n [302, 11],\n [11, 12],\n [12, 302],\n [268, 12],\n [12, 13],\n [13, 268],\n [293, 300],\n [300, 301],\n [301, 293],\n [446, 261],\n [261, 340],\n [340, 446],\n [330, 266],\n [266, 425],\n [425, 330],\n [426, 423],\n [423, 391],\n [391, 426],\n [429, 355],\n [355, 437],\n [437, 429],\n [391, 327],\n [327, 326],\n [326, 391],\n [440, 457],\n [457, 438],\n [438, 440],\n [341, 382],\n [382, 362],\n [362, 341],\n [459, 457],\n [457, 461],\n [461, 459],\n [434, 430],\n [430, 394],\n [394, 434],\n [414, 463],\n [463, 362],\n [362, 414],\n [396, 369],\n [369, 262],\n [262, 396],\n [354, 461],\n [461, 457],\n [457, 354],\n [316, 403],\n [403, 402],\n [402, 316],\n [315, 404],\n [404, 403],\n [403, 315],\n [314, 405],\n [405, 404],\n [404, 314],\n [313, 406],\n [406, 405],\n [405, 313],\n [421, 418],\n [418, 406],\n [406, 421],\n [366, 401],\n [401, 361],\n [361, 366],\n [306, 408],\n [408, 407],\n [407, 306],\n [291, 409],\n [409, 408],\n [408, 291],\n [287, 410],\n [410, 409],\n [409, 287],\n [432, 436],\n [436, 410],\n [410, 432],\n [434, 416],\n [416, 411],\n [411, 434],\n [264, 368],\n [368, 383],\n [383, 264],\n [309, 438],\n [438, 457],\n [457, 309],\n [352, 376],\n [376, 401],\n [401, 352],\n [274, 275],\n [275, 4],\n [4, 274],\n [421, 428],\n [428, 262],\n [262, 421],\n [294, 327],\n [327, 358],\n [358, 294],\n [433, 416],\n [416, 367],\n [367, 433],\n [289, 455],\n [455, 439],\n [439, 289],\n [462, 370],\n [370, 326],\n [326, 462],\n [2, 326],\n [326, 370],\n [370, 2],\n [305, 460],\n [460, 455],\n [455, 305],\n [254, 449],\n [449, 448],\n [448, 254],\n [255, 261],\n [261, 446],\n [446, 255],\n [253, 450],\n [450, 449],\n [449, 253],\n [252, 451],\n [451, 450],\n [450, 252],\n [256, 452],\n [452, 451],\n [451, 256],\n [341, 453],\n [453, 452],\n [452, 341],\n [413, 464],\n [464, 463],\n [463, 413],\n [441, 413],\n [413, 414],\n [414, 441],\n [258, 442],\n [442, 441],\n [441, 258],\n [257, 443],\n [443, 442],\n [442, 257],\n [259, 444],\n [444, 443],\n [443, 259],\n [260, 445],\n [445, 444],\n [444, 260],\n [467, 342],\n [342, 445],\n [445, 467],\n [459, 458],\n [458, 250],\n [250, 459],\n [289, 392],\n [392, 290],\n [290, 289],\n [290, 328],\n [328, 460],\n [460, 290],\n [376, 433],\n [433, 435],\n [435, 376],\n [250, 290],\n [290, 392],\n [392, 250],\n [411, 416],\n [416, 433],\n [433, 411],\n [341, 463],\n [463, 464],\n [464, 341],\n [453, 464],\n [464, 465],\n [465, 453],\n [357, 465],\n [465, 412],\n [412, 357],\n [343, 412],\n [412, 399],\n [399, 343],\n [360, 363],\n [363, 440],\n [440, 360],\n [437, 399],\n [399, 456],\n [456, 437],\n [420, 456],\n [456, 363],\n [363, 420],\n [401, 435],\n [435, 288],\n [288, 401],\n [372, 383],\n [383, 353],\n [353, 372],\n [339, 255],\n [255, 249],\n [249, 339],\n [448, 261],\n [261, 255],\n [255, 448],\n [133, 243],\n [243, 190],\n [190, 133],\n [133, 155],\n [155, 112],\n [112, 133],\n [33, 246],\n [246, 247],\n [247, 33],\n [33, 130],\n [130, 25],\n [25, 33],\n [398, 384],\n [384, 286],\n [286, 398],\n [362, 398],\n [398, 414],\n [414, 362],\n [362, 463],\n [463, 341],\n [341, 362],\n [263, 359],\n [359, 467],\n [467, 263],\n [263, 249],\n [249, 255],\n [255, 263],\n [466, 467],\n [467, 260],\n [260, 466],\n [75, 60],\n [60, 166],\n [166, 75],\n [238, 239],\n [239, 79],\n [79, 238],\n [162, 127],\n [127, 139],\n [139, 162],\n [72, 11],\n [11, 37],\n [37, 72],\n [121, 232],\n [232, 120],\n [120, 121],\n [73, 72],\n [72, 39],\n [39, 73],\n [114, 128],\n [128, 47],\n [47, 114],\n [233, 232],\n [232, 128],\n [128, 233],\n [103, 104],\n [104, 67],\n [67, 103],\n [152, 175],\n [175, 148],\n [148, 152],\n [119, 118],\n [118, 101],\n [101, 119],\n [74, 73],\n [73, 40],\n [40, 74],\n [107, 9],\n [9, 108],\n [108, 107],\n [49, 48],\n [48, 131],\n [131, 49],\n [32, 194],\n [194, 211],\n [211, 32],\n [184, 74],\n [74, 185],\n [185, 184],\n [191, 80],\n [80, 183],\n [183, 191],\n [185, 40],\n [40, 186],\n [186, 185],\n [119, 230],\n [230, 118],\n [118, 119],\n [210, 202],\n [202, 214],\n [214, 210],\n [84, 83],\n [83, 17],\n [17, 84],\n [77, 76],\n [76, 146],\n [146, 77],\n [161, 160],\n [160, 30],\n [30, 161],\n [190, 56],\n [56, 173],\n [173, 190],\n [182, 106],\n [106, 194],\n [194, 182],\n [138, 135],\n [135, 192],\n [192, 138],\n [129, 203],\n [203, 98],\n [98, 129],\n [54, 21],\n [21, 68],\n [68, 54],\n [5, 51],\n [51, 4],\n [4, 5],\n [145, 144],\n [144, 23],\n [23, 145],\n [90, 77],\n [77, 91],\n [91, 90],\n [207, 205],\n [205, 187],\n [187, 207],\n [83, 201],\n [201, 18],\n [18, 83],\n [181, 91],\n [91, 182],\n [182, 181],\n [180, 90],\n [90, 181],\n [181, 180],\n [16, 85],\n [85, 17],\n [17, 16],\n [205, 206],\n [206, 36],\n [36, 205],\n [176, 148],\n [148, 140],\n [140, 176],\n [165, 92],\n [92, 39],\n [39, 165],\n [245, 193],\n [193, 244],\n [244, 245],\n [27, 159],\n [159, 28],\n [28, 27],\n [30, 247],\n [247, 161],\n [161, 30],\n [174, 236],\n [236, 196],\n [196, 174],\n [103, 54],\n [54, 104],\n [104, 103],\n [55, 193],\n [193, 8],\n [8, 55],\n [111, 117],\n [117, 31],\n [31, 111],\n [221, 189],\n [189, 55],\n [55, 221],\n [240, 98],\n [98, 99],\n [99, 240],\n [142, 126],\n [126, 100],\n [100, 142],\n [219, 166],\n [166, 218],\n [218, 219],\n [112, 155],\n [155, 26],\n [26, 112],\n [198, 209],\n [209, 131],\n [131, 198],\n [169, 135],\n [135, 150],\n [150, 169],\n [114, 47],\n [47, 217],\n [217, 114],\n [224, 223],\n [223, 53],\n [53, 224],\n [220, 45],\n [45, 134],\n [134, 220],\n [32, 211],\n [211, 140],\n [140, 32],\n [109, 67],\n [67, 108],\n [108, 109],\n [146, 43],\n [43, 91],\n [91, 146],\n [231, 230],\n [230, 120],\n [120, 231],\n [113, 226],\n [226, 247],\n [247, 113],\n [105, 63],\n [63, 52],\n [52, 105],\n [241, 238],\n [238, 242],\n [242, 241],\n [124, 46],\n [46, 156],\n [156, 124],\n [95, 78],\n [78, 96],\n [96, 95],\n [70, 46],\n [46, 63],\n [63, 70],\n [116, 143],\n [143, 227],\n [227, 116],\n [116, 123],\n [123, 111],\n [111, 116],\n [1, 44],\n [44, 19],\n [19, 1],\n [3, 236],\n [236, 51],\n [51, 3],\n [207, 216],\n [216, 205],\n [205, 207],\n [26, 154],\n [154, 22],\n [22, 26],\n [165, 39],\n [39, 167],\n [167, 165],\n [199, 200],\n [200, 208],\n [208, 199],\n [101, 36],\n [36, 100],\n [100, 101],\n [43, 57],\n [57, 202],\n [202, 43],\n [242, 20],\n [20, 99],\n [99, 242],\n [56, 28],\n [28, 157],\n [157, 56],\n [124, 35],\n [35, 113],\n [113, 124],\n [29, 160],\n [160, 27],\n [27, 29],\n [211, 204],\n [204, 210],\n [210, 211],\n [124, 113],\n [113, 46],\n [46, 124],\n [106, 43],\n [43, 204],\n [204, 106],\n [96, 62],\n [62, 77],\n [77, 96],\n [227, 137],\n [137, 116],\n [116, 227],\n [73, 41],\n [41, 72],\n [72, 73],\n [36, 203],\n [203, 142],\n [142, 36],\n [235, 64],\n [64, 240],\n [240, 235],\n [48, 49],\n [49, 64],\n [64, 48],\n [42, 41],\n [41, 74],\n [74, 42],\n [214, 212],\n [212, 207],\n [207, 214],\n [183, 42],\n [42, 184],\n [184, 183],\n [210, 169],\n [169, 211],\n [211, 210],\n [140, 170],\n [170, 176],\n [176, 140],\n [104, 105],\n [105, 69],\n [69, 104],\n [193, 122],\n [122, 168],\n [168, 193],\n [50, 123],\n [123, 187],\n [187, 50],\n [89, 96],\n [96, 90],\n [90, 89],\n [66, 65],\n [65, 107],\n [107, 66],\n [179, 89],\n [89, 180],\n [180, 179],\n [119, 101],\n [101, 120],\n [120, 119],\n [68, 63],\n [63, 104],\n [104, 68],\n [234, 93],\n [93, 227],\n [227, 234],\n [16, 15],\n [15, 85],\n [85, 16],\n [209, 129],\n [129, 49],\n [49, 209],\n [15, 14],\n [14, 86],\n [86, 15],\n [107, 55],\n [55, 9],\n [9, 107],\n [120, 100],\n [100, 121],\n [121, 120],\n [153, 145],\n [145, 22],\n [22, 153],\n [178, 88],\n [88, 179],\n [179, 178],\n [197, 6],\n [6, 196],\n [196, 197],\n [89, 88],\n [88, 96],\n [96, 89],\n [135, 138],\n [138, 136],\n [136, 135],\n [138, 215],\n [215, 172],\n [172, 138],\n [218, 115],\n [115, 219],\n [219, 218],\n [41, 42],\n [42, 81],\n [81, 41],\n [5, 195],\n [195, 51],\n [51, 5],\n [57, 43],\n [43, 61],\n [61, 57],\n [208, 171],\n [171, 199],\n [199, 208],\n [41, 81],\n [81, 38],\n [38, 41],\n [224, 53],\n [53, 225],\n [225, 224],\n [24, 144],\n [144, 110],\n [110, 24],\n [105, 52],\n [52, 66],\n [66, 105],\n [118, 229],\n [229, 117],\n [117, 118],\n [227, 34],\n [34, 234],\n [234, 227],\n [66, 107],\n [107, 69],\n [69, 66],\n [10, 109],\n [109, 151],\n [151, 10],\n [219, 48],\n [48, 235],\n [235, 219],\n [183, 62],\n [62, 191],\n [191, 183],\n [142, 129],\n [129, 126],\n [126, 142],\n [116, 111],\n [111, 143],\n [143, 116],\n [118, 117],\n [117, 50],\n [50, 118],\n [223, 222],\n [222, 52],\n [52, 223],\n [94, 19],\n [19, 141],\n [141, 94],\n [222, 221],\n [221, 65],\n [65, 222],\n [196, 3],\n [3, 197],\n [197, 196],\n [45, 220],\n [220, 44],\n [44, 45],\n [156, 70],\n [70, 139],\n [139, 156],\n [188, 122],\n [122, 245],\n [245, 188],\n [139, 71],\n [71, 162],\n [162, 139],\n [149, 170],\n [170, 150],\n [150, 149],\n [122, 188],\n [188, 196],\n [196, 122],\n [206, 216],\n [216, 92],\n [92, 206],\n [164, 2],\n [2, 167],\n [167, 164],\n [242, 141],\n [141, 241],\n [241, 242],\n [0, 164],\n [164, 37],\n [37, 0],\n [11, 72],\n [72, 12],\n [12, 11],\n [12, 38],\n [38, 13],\n [13, 12],\n [70, 63],\n [63, 71],\n [71, 70],\n [31, 226],\n [226, 111],\n [111, 31],\n [36, 101],\n [101, 205],\n [205, 36],\n [203, 206],\n [206, 165],\n [165, 203],\n [126, 209],\n [209, 217],\n [217, 126],\n [98, 165],\n [165, 97],\n [97, 98],\n [237, 220],\n [220, 218],\n [218, 237],\n [237, 239],\n [239, 241],\n [241, 237],\n [210, 214],\n [214, 169],\n [169, 210],\n [140, 171],\n [171, 32],\n [32, 140],\n [241, 125],\n [125, 237],\n [237, 241],\n [179, 86],\n [86, 178],\n [178, 179],\n [180, 85],\n [85, 179],\n [179, 180],\n [181, 84],\n [84, 180],\n [180, 181],\n [182, 83],\n [83, 181],\n [181, 182],\n [194, 201],\n [201, 182],\n [182, 194],\n [177, 137],\n [137, 132],\n [132, 177],\n [184, 76],\n [76, 183],\n [183, 184],\n [185, 61],\n [61, 184],\n [184, 185],\n [186, 57],\n [57, 185],\n [185, 186],\n [216, 212],\n [212, 186],\n [186, 216],\n [192, 214],\n [214, 187],\n [187, 192],\n [139, 34],\n [34, 156],\n [156, 139],\n [218, 79],\n [79, 237],\n [237, 218],\n [147, 123],\n [123, 177],\n [177, 147],\n [45, 44],\n [44, 4],\n [4, 45],\n [208, 201],\n [201, 32],\n [32, 208],\n [98, 64],\n [64, 129],\n [129, 98],\n [192, 213],\n [213, 138],\n [138, 192],\n [235, 59],\n [59, 219],\n [219, 235],\n [141, 242],\n [242, 97],\n [97, 141],\n [97, 2],\n [2, 141],\n [141, 97],\n [240, 75],\n [75, 235],\n [235, 240],\n [229, 24],\n [24, 228],\n [228, 229],\n [31, 25],\n [25, 226],\n [226, 31],\n [230, 23],\n [23, 229],\n [229, 230],\n [231, 22],\n [22, 230],\n [230, 231],\n [232, 26],\n [26, 231],\n [231, 232],\n [233, 112],\n [112, 232],\n [232, 233],\n [244, 189],\n [189, 243],\n [243, 244],\n [189, 221],\n [221, 190],\n [190, 189],\n [222, 28],\n [28, 221],\n [221, 222],\n [223, 27],\n [27, 222],\n [222, 223],\n [224, 29],\n [29, 223],\n [223, 224],\n [225, 30],\n [30, 224],\n [224, 225],\n [113, 247],\n [247, 225],\n [225, 113],\n [99, 60],\n [60, 240],\n [240, 99],\n [213, 147],\n [147, 215],\n [215, 213],\n [60, 20],\n [20, 166],\n [166, 60],\n [192, 187],\n [187, 213],\n [213, 192],\n [243, 112],\n [112, 244],\n [244, 243],\n [244, 233],\n [233, 245],\n [245, 244],\n [245, 128],\n [128, 188],\n [188, 245],\n [188, 114],\n [114, 174],\n [174, 188],\n [134, 131],\n [131, 220],\n [220, 134],\n [174, 217],\n [217, 236],\n [236, 174],\n [236, 198],\n [198, 134],\n [134, 236],\n [215, 177],\n [177, 58],\n [58, 215],\n [156, 143],\n [143, 124],\n [124, 156],\n [25, 110],\n [110, 7],\n [7, 25],\n [31, 228],\n [228, 25],\n [25, 31],\n [264, 356],\n [356, 368],\n [368, 264],\n [0, 11],\n [11, 267],\n [267, 0],\n [451, 452],\n [452, 349],\n [349, 451],\n [267, 302],\n [302, 269],\n [269, 267],\n [350, 357],\n [357, 277],\n [277, 350],\n [350, 452],\n [452, 357],\n [357, 350],\n [299, 333],\n [333, 297],\n [297, 299],\n [396, 175],\n [175, 377],\n [377, 396],\n [280, 347],\n [347, 330],\n [330, 280],\n [269, 303],\n [303, 270],\n [270, 269],\n [151, 9],\n [9, 337],\n [337, 151],\n [344, 278],\n [278, 360],\n [360, 344],\n [424, 418],\n [418, 431],\n [431, 424],\n [270, 304],\n [304, 409],\n [409, 270],\n [272, 310],\n [310, 407],\n [407, 272],\n [322, 270],\n [270, 410],\n [410, 322],\n [449, 450],\n [450, 347],\n [347, 449],\n [432, 422],\n [422, 434],\n [434, 432],\n [18, 313],\n [313, 17],\n [17, 18],\n [291, 306],\n [306, 375],\n [375, 291],\n [259, 387],\n [387, 260],\n [260, 259],\n [424, 335],\n [335, 418],\n [418, 424],\n [434, 364],\n [364, 416],\n [416, 434],\n [391, 423],\n [423, 327],\n [327, 391],\n [301, 251],\n [251, 298],\n [298, 301],\n [275, 281],\n [281, 4],\n [4, 275],\n [254, 373],\n [373, 253],\n [253, 254],\n [375, 307],\n [307, 321],\n [321, 375],\n [280, 425],\n [425, 411],\n [411, 280],\n [200, 421],\n [421, 18],\n [18, 200],\n [335, 321],\n [321, 406],\n [406, 335],\n [321, 320],\n [320, 405],\n [405, 321],\n [314, 315],\n [315, 17],\n [17, 314],\n [423, 426],\n [426, 266],\n [266, 423],\n [396, 377],\n [377, 369],\n [369, 396],\n [270, 322],\n [322, 269],\n [269, 270],\n [413, 417],\n [417, 464],\n [464, 413],\n [385, 386],\n [386, 258],\n [258, 385],\n [248, 456],\n [456, 419],\n [419, 248],\n [298, 284],\n [284, 333],\n [333, 298],\n [168, 417],\n [417, 8],\n [8, 168],\n [448, 346],\n [346, 261],\n [261, 448],\n [417, 413],\n [413, 285],\n [285, 417],\n [326, 327],\n [327, 328],\n [328, 326],\n [277, 355],\n [355, 329],\n [329, 277],\n [309, 392],\n [392, 438],\n [438, 309],\n [381, 382],\n [382, 256],\n [256, 381],\n [279, 429],\n [429, 360],\n [360, 279],\n [365, 364],\n [364, 379],\n [379, 365],\n [355, 277],\n [277, 437],\n [437, 355],\n [282, 443],\n [443, 283],\n [283, 282],\n [281, 275],\n [275, 363],\n [363, 281],\n [395, 431],\n [431, 369],\n [369, 395],\n [299, 297],\n [297, 337],\n [337, 299],\n [335, 273],\n [273, 321],\n [321, 335],\n [348, 450],\n [450, 349],\n [349, 348],\n [359, 446],\n [446, 467],\n [467, 359],\n [283, 293],\n [293, 282],\n [282, 283],\n [250, 458],\n [458, 462],\n [462, 250],\n [300, 276],\n [276, 383],\n [383, 300],\n [292, 308],\n [308, 325],\n [325, 292],\n [283, 276],\n [276, 293],\n [293, 283],\n [264, 372],\n [372, 447],\n [447, 264],\n [346, 352],\n [352, 340],\n [340, 346],\n [354, 274],\n [274, 19],\n [19, 354],\n [363, 456],\n [456, 281],\n [281, 363],\n [426, 436],\n [436, 425],\n [425, 426],\n [380, 381],\n [381, 252],\n [252, 380],\n [267, 269],\n [269, 393],\n [393, 267],\n [421, 200],\n [200, 428],\n [428, 421],\n [371, 266],\n [266, 329],\n [329, 371],\n [432, 287],\n [287, 422],\n [422, 432],\n [290, 250],\n [250, 328],\n [328, 290],\n [385, 258],\n [258, 384],\n [384, 385],\n [446, 265],\n [265, 342],\n [342, 446],\n [386, 387],\n [387, 257],\n [257, 386],\n [422, 424],\n [424, 430],\n [430, 422],\n [445, 342],\n [342, 276],\n [276, 445],\n [422, 273],\n [273, 424],\n [424, 422],\n [306, 292],\n [292, 307],\n [307, 306],\n [352, 366],\n [366, 345],\n [345, 352],\n [268, 271],\n [271, 302],\n [302, 268],\n [358, 423],\n [423, 371],\n [371, 358],\n [327, 294],\n [294, 460],\n [460, 327],\n [331, 279],\n [279, 294],\n [294, 331],\n [303, 271],\n [271, 304],\n [304, 303],\n [436, 432],\n [432, 427],\n [427, 436],\n [304, 272],\n [272, 408],\n [408, 304],\n [395, 394],\n [394, 431],\n [431, 395],\n [378, 395],\n [395, 400],\n [400, 378],\n [296, 334],\n [334, 299],\n [299, 296],\n [6, 351],\n [351, 168],\n [168, 6],\n [376, 352],\n [352, 411],\n [411, 376],\n [307, 325],\n [325, 320],\n [320, 307],\n [285, 295],\n [295, 336],\n [336, 285],\n [320, 319],\n [319, 404],\n [404, 320],\n [329, 330],\n [330, 349],\n [349, 329],\n [334, 293],\n [293, 333],\n [333, 334],\n [366, 323],\n [323, 447],\n [447, 366],\n [316, 15],\n [15, 315],\n [315, 316],\n [331, 358],\n [358, 279],\n [279, 331],\n [317, 14],\n [14, 316],\n [316, 317],\n [8, 285],\n [285, 9],\n [9, 8],\n [277, 329],\n [329, 350],\n [350, 277],\n [253, 374],\n [374, 252],\n [252, 253],\n [319, 318],\n [318, 403],\n [403, 319],\n [351, 6],\n [6, 419],\n [419, 351],\n [324, 318],\n [318, 325],\n [325, 324],\n [397, 367],\n [367, 365],\n [365, 397],\n [288, 435],\n [435, 397],\n [397, 288],\n [278, 344],\n [344, 439],\n [439, 278],\n [310, 272],\n [272, 311],\n [311, 310],\n [248, 195],\n [195, 281],\n [281, 248],\n [375, 273],\n [273, 291],\n [291, 375],\n [175, 396],\n [396, 199],\n [199, 175],\n [312, 311],\n [311, 268],\n [268, 312],\n [276, 283],\n [283, 445],\n [445, 276],\n [390, 373],\n [373, 339],\n [339, 390],\n [295, 282],\n [282, 296],\n [296, 295],\n [448, 449],\n [449, 346],\n [346, 448],\n [356, 264],\n [264, 454],\n [454, 356],\n [337, 336],\n [336, 299],\n [299, 337],\n [337, 338],\n [338, 151],\n [151, 337],\n [294, 278],\n [278, 455],\n [455, 294],\n [308, 292],\n [292, 415],\n [415, 308],\n [429, 358],\n [358, 355],\n [355, 429],\n [265, 340],\n [340, 372],\n [372, 265],\n [352, 346],\n [346, 280],\n [280, 352],\n [295, 442],\n [442, 282],\n [282, 295],\n [354, 19],\n [19, 370],\n [370, 354],\n [285, 441],\n [441, 295],\n [295, 285],\n [195, 248],\n [248, 197],\n [197, 195],\n [457, 440],\n [440, 274],\n [274, 457],\n [301, 300],\n [300, 368],\n [368, 301],\n [417, 351],\n [351, 465],\n [465, 417],\n [251, 301],\n [301, 389],\n [389, 251],\n [394, 395],\n [395, 379],\n [379, 394],\n [399, 412],\n [412, 419],\n [419, 399],\n [410, 436],\n [436, 322],\n [322, 410],\n [326, 2],\n [2, 393],\n [393, 326],\n [354, 370],\n [370, 461],\n [461, 354],\n [393, 164],\n [164, 267],\n [267, 393],\n [268, 302],\n [302, 12],\n [12, 268],\n [312, 268],\n [268, 13],\n [13, 312],\n [298, 293],\n [293, 301],\n [301, 298],\n [265, 446],\n [446, 340],\n [340, 265],\n [280, 330],\n [330, 425],\n [425, 280],\n [322, 426],\n [426, 391],\n [391, 322],\n [420, 429],\n [429, 437],\n [437, 420],\n [393, 391],\n [391, 326],\n [326, 393],\n [344, 440],\n [440, 438],\n [438, 344],\n [458, 459],\n [459, 461],\n [461, 458],\n [364, 434],\n [434, 394],\n [394, 364],\n [428, 396],\n [396, 262],\n [262, 428],\n [274, 354],\n [354, 457],\n [457, 274],\n [317, 316],\n [316, 402],\n [402, 317],\n [316, 315],\n [315, 403],\n [403, 316],\n [315, 314],\n [314, 404],\n [404, 315],\n [314, 313],\n [313, 405],\n [405, 314],\n [313, 421],\n [421, 406],\n [406, 313],\n [323, 366],\n [366, 361],\n [361, 323],\n [292, 306],\n [306, 407],\n [407, 292],\n [306, 291],\n [291, 408],\n [408, 306],\n [291, 287],\n [287, 409],\n [409, 291],\n [287, 432],\n [432, 410],\n [410, 287],\n [427, 434],\n [434, 411],\n [411, 427],\n [372, 264],\n [264, 383],\n [383, 372],\n [459, 309],\n [309, 457],\n [457, 459],\n [366, 352],\n [352, 401],\n [401, 366],\n [1, 274],\n [274, 4],\n [4, 1],\n [418, 421],\n [421, 262],\n [262, 418],\n [331, 294],\n [294, 358],\n [358, 331],\n [435, 433],\n [433, 367],\n [367, 435],\n [392, 289],\n [289, 439],\n [439, 392],\n [328, 462],\n [462, 326],\n [326, 328],\n [94, 2],\n [2, 370],\n [370, 94],\n [289, 305],\n [305, 455],\n [455, 289],\n [339, 254],\n [254, 448],\n [448, 339],\n [359, 255],\n [255, 446],\n [446, 359],\n [254, 253],\n [253, 449],\n [449, 254],\n [253, 252],\n [252, 450],\n [450, 253],\n [252, 256],\n [256, 451],\n [451, 252],\n [256, 341],\n [341, 452],\n [452, 256],\n [414, 413],\n [413, 463],\n [463, 414],\n [286, 441],\n [441, 414],\n [414, 286],\n [286, 258],\n [258, 441],\n [441, 286],\n [258, 257],\n [257, 442],\n [442, 258],\n [257, 259],\n [259, 443],\n [443, 257],\n [259, 260],\n [260, 444],\n [444, 259],\n [260, 467],\n [467, 445],\n [445, 260],\n [309, 459],\n [459, 250],\n [250, 309],\n [305, 289],\n [289, 290],\n [290, 305],\n [305, 290],\n [290, 460],\n [460, 305],\n [401, 376],\n [376, 435],\n [435, 401],\n [309, 250],\n [250, 392],\n [392, 309],\n [376, 411],\n [411, 433],\n [433, 376],\n [453, 341],\n [341, 464],\n [464, 453],\n [357, 453],\n [453, 465],\n [465, 357],\n [343, 357],\n [357, 412],\n [412, 343],\n [437, 343],\n [343, 399],\n [399, 437],\n [344, 360],\n [360, 440],\n [440, 344],\n [420, 437],\n [437, 456],\n [456, 420],\n [360, 420],\n [420, 363],\n [363, 360],\n [361, 401],\n [401, 288],\n [288, 361],\n [265, 372],\n [372, 353],\n [353, 265],\n [390, 339],\n [339, 249],\n [249, 390],\n [339, 448],\n [448, 255],\n [255, 339],\n]\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { Style } from './style'\nimport { PredictedKeyPoint, PredictedKeyPoints, PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderHandOptions = {} & RenderTarget\nexport class RenderHand implements Render {\n public target: string = DEFAULT_TARGET\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderHandOptions> = {}) {\n const { target = '$..objects[?(@.classLabel==\"hand circumference\")]' } = options\n this.target = target\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n if (element.keyPoints) {\n let fillColor = this.getFillColor(element)\n for (let i = 0; i < element.keyPoints.length; i++) {\n const keyPoints = element.keyPoints[i]\n if (keyPoints.category == HAND_KEYPOINTS_CATEGORY) {\n this.renderKeyPoints(keyPoints, fillColor, Math.max(element.width, element.height), xOffset, yOffset, xScale, yScale)\n }\n }\n }\n }\n\n private renderKeyPoints(keyPoints: PredictedKeyPoints, fillColor: string, width: number, xOffset: number, yOffset: number, xScale: number, yScale: number) {\n const labelsToPoints = new Map<string, PredictedKeyPoint>()\n let maxZ = 1.0\n let minZ = -1.0\n for (let i = 0; i < keyPoints.points.length; i++) {\n const keyPoint = keyPoints.points[i]\n labelsToPoints.set(keyPoint.classLabel, keyPoint)\n if (keyPoint.z) {\n if (keyPoint.z > maxZ) {\n maxZ = keyPoint.z\n }\n if (keyPoint.z < minZ) {\n minZ = keyPoint.z\n }\n }\n }\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n for (var i = 0; i < HAND_CONNECTIONS.length; i++) {\n const connection = HAND_CONNECTIONS[i]\n const point1 = labelsToPoints.get(connection[0])\n const point2 = labelsToPoints.get(connection[1])\n\n if (!point1 || !point1.x) continue\n\n if (!point2 || !point2.x) continue\n\n const x1 = xOffset + point1.x * xScale\n const y1 = yOffset + point1.y * yScale\n const x2 = xOffset + point2.x * xScale\n const y2 = yOffset + point2.y * yScale\n\n context.beginPath()\n context.lineWidth = style.scale\n context.strokeStyle = style.colors.primary_color\n context.fillStyle = style.colors.primary_color\n context.moveTo(x1, y1)\n context.lineTo(x2, y2)\n context.stroke()\n context.closePath()\n }\n\n const MIN_RADIUS = style.scale * 2\n const MAX_RADIUS = Math.min(MIN_RADIUS * 2, width / 100)\n\n for (var i = 0; i < keyPoints.points.length; i++) {\n const p = keyPoints.points[i]\n const x = xOffset + p.x * xScale\n const y = yOffset + p.y * yScale\n const z = p.z ?? 0.0 * Math.max(xScale, yScale)\n const radius = MAX_RADIUS - ((z - minZ) * (MAX_RADIUS - MIN_RADIUS)) / (maxZ - minZ)\n\n //draw circle\n context.beginPath()\n context.arc(x, y, radius, 0, Math.PI * 2, false)\n context.fillStyle = fillColor\n context.fill()\n context.strokeStyle = style.colors.secondary_color\n context.stroke()\n }\n }\n\n private getFillColor(element: PredictedObject) {\n const style = this.style\n if (!style) {\n throw new Error('render() called before start()')\n }\n let fillColor = style.colors.primary_color\n if (element.classes) {\n for (let i = 0; i < element.classes.length; i++) {\n if (element.classes[i].category == HAND_KEYPOINTS_CATEGORY) {\n if (element.classes[i].classLabel == 'right') {\n fillColor = style.colors.right_color\n break\n } else if (element.classes[i].classLabel == 'left') {\n fillColor = style.colors.left_color\n break\n }\n }\n }\n }\n return fillColor\n }\n}\n\nconst HAND_KEYPOINTS_CATEGORY = '3d-hand-points'\n\nconst HAND_CONNECTIONS = [\n ['wrist', 'thumb cmc'],\n ['thumb cmc', 'thumb mcp'],\n ['thumb mcp', 'thumb ip'],\n ['thumb ip', 'thumb tip'],\n\n ['wrist', 'index finger mcp'],\n ['index finger mcp', 'index finger pip'],\n ['index finger pip', 'index finger dip'],\n ['index finger dip', 'index finger tip'],\n\n ['wrist', 'middle finger mcp'],\n ['middle finger mcp', 'middle finger pip'],\n ['middle finger pip', 'middle finger dip'],\n ['middle finger dip', 'middle finger tip'],\n\n ['wrist', 'ring finger mcp'],\n ['ring finger mcp', 'ring finger pip'],\n ['ring finger pip', 'ring finger dip'],\n ['ring finger dip', 'ring finger tip'],\n\n ['wrist', 'pinky mcp'],\n ['pinky mcp', 'pinky pip'],\n ['pinky pip', 'pinky dip'],\n ['pinky dip', 'pinky tip'],\n\n ['index finger mcp', 'middle finger mcp'],\n ['middle finger mcp', 'ring finger mcp'],\n ['ring finger mcp', 'pinky mcp'],\n]\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { Style } from './style'\nimport { PredictedKeyPoint, PredictedKeyPoints, PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderPoseOptions = {} & RenderTarget\n\nexport class RenderPose implements Render {\n public target: string = DEFAULT_TARGET\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderPoseOptions> = {}) {\n const { target = '$..objects[?(@.category==\"person\")]' } = options\n this.target = target\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n if (element.keyPoints) {\n for (let i = 0; i < element.keyPoints.length; i++) {\n const keyPoints = element.keyPoints[i]\n if (keyPoints.category == POSE_2D_CATEGORY) {\n this.renderPose(keyPoints, POSE_2D_CONNECTIONS, Math.max(element.width, element.height), xOffset, yOffset, xScale, yScale)\n } else if (keyPoints.category == POSE_3D_CATEGORY) {\n this.renderPose(keyPoints, POSE_3D_CONNECTIONS, Math.max(element.width, element.height), xOffset, yOffset, xScale, yScale)\n }\n }\n }\n }\n\n private renderPose(keyPoints: PredictedKeyPoints, connections: string[][], width: number, xOffset: number, yOffset: number, xScale: number, yScale: number) {\n const labelsToPoints = new Map<string, PredictedKeyPoint>()\n let maxZ = 1.0\n let minZ = -1.0\n for (let i = 0; i < keyPoints.points.length; i++) {\n const keyPoint = keyPoints.points[i]\n labelsToPoints.set(keyPoint.classLabel, keyPoint)\n if (keyPoint.z) {\n if (keyPoint.z > maxZ) {\n maxZ = keyPoint.z\n }\n if (keyPoint.z < minZ) {\n minZ = keyPoint.z\n }\n }\n }\n\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n for (var i = 0; i < connections.length; i++) {\n const connection = connections[i]\n const point1 = labelsToPoints.get(connection[0])\n const point2 = labelsToPoints.get(connection[1])\n\n if (!point1 || !point1.x) continue\n\n if (!point2 || !point2.x) continue\n\n const x1 = xOffset + point1.x * xScale\n const y1 = yOffset + point1.y * yScale\n const x2 = xOffset + point2.x * xScale\n const y2 = yOffset + point2.y * yScale\n\n context.beginPath()\n context.lineWidth = style.scale * 1\n context.strokeStyle = style.colors.primary_color\n context.fillStyle = style.colors.primary_color\n context.moveTo(x1, y1)\n context.lineTo(x2, y2)\n context.stroke()\n context.closePath()\n }\n\n const MIN_RADIUS = style.scale * 2\n const MAX_RADIUS = Math.min(MIN_RADIUS * 2, width / 100)\n\n for (var i = 0; i < keyPoints.points.length; i++) {\n const p = keyPoints.points[i]\n const x = xOffset + p.x * xScale\n const y = yOffset + p.y * yScale\n const z = p.z ?? 0.0 * Math.max(xScale, yScale)\n const radius = MAX_RADIUS - ((z - minZ) * (MAX_RADIUS - MIN_RADIUS)) / (maxZ - minZ)\n\n //draw circle\n context.beginPath()\n context.arc(x, y, radius, 0, Math.PI * 2, false)\n if (p.classLabel.includes('left')) {\n context.fillStyle = style.colors.left_color\n } else if (p.classLabel.includes('right')) {\n context.fillStyle = style.colors.right_color\n } else {\n context.fillStyle = style.colors.primary_color\n }\n context.fill()\n context.strokeStyle = style.colors.secondary_color\n context.stroke()\n }\n }\n}\n\nconst POSE_2D_CATEGORY = '2d-body-points'\nconst POSE_3D_CATEGORY = '3d-body-points'\n\nconst POSE_2D_CONNECTIONS = [\n ['left shoulder', 'right shoulder'],\n ['left hip', 'right hip'],\n\n ['left shoulder', 'left elbow'],\n ['left elbow', 'left wrist'],\n ['left shoulder', 'right hip'],\n ['left hip', 'left knee'],\n ['left knee', 'left ankle'],\n\n ['right shoulder', 'right elbow'],\n ['right elbow', 'right wrist'],\n ['right shoulder', 'left hip'],\n ['right hip', 'right knee'],\n ['right knee', 'right ankle'],\n]\n\nconst POSE_3D_CONNECTIONS = [\n ['mouth (right)', 'mouth (left)'],\n ['right ear', 'right eye (outer)'],\n ['right eye (outer)', 'right eye'],\n ['right eye', 'right eye (inner)'],\n ['right eye (inner)', 'nose'],\n ['nose', 'left eye (inner)'],\n ['left eye (inner)', 'left eye'],\n ['left eye', 'left eye (outer)'],\n ['left eye (outer)', 'left ear'],\n\n ['right shoulder', 'left shoulder'],\n ['left shoulder', 'right hip'],\n ['left hip', 'right hip'],\n ['left hip', 'right shoulder'],\n\n ['right shoulder', 'right elbow'],\n ['right elbow', 'right wrist'],\n ['right wrist', 'right thumb'],\n ['right wrist', 'right pinky'],\n ['right wrist', 'right index'],\n ['right pinky', 'right index'],\n\n ['left shoulder', 'left elbow'],\n ['left elbow', 'left wrist'],\n ['left wrist', 'left thumb'],\n ['left wrist', 'left pinky'],\n ['left wrist', 'left index'],\n ['left pinky', 'left index'],\n\n ['right hip', 'right knee'],\n ['right knee', 'right ankle'],\n ['right ankle', 'right foot index'],\n ['right ankle', 'right heel'],\n ['right heel', 'right foot index'],\n\n ['left hip', 'left knee'],\n ['left knee', 'left ankle'],\n ['left ankle', 'left foot index'],\n ['left ankle', 'left heel'],\n ['left heel', 'left foot index'],\n]\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { Style } from './style'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\nimport { Point2d, PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport * as jp from 'jsonpath'\n\ninterface TraceEntry {\n readonly timestamp: number\n readonly points: Point2d[]\n next: TraceEntry | null\n}\n\nexport type RenderTrailOptions = {\n trailLengthSeconds: number\n traceDetails?: string | undefined\n} & RenderTarget\n\n// trim the traces every 10 seconds\nconst TRIM_INTERVAL = 1000 * 1000 * 1000 * 10\nexport class RenderTrail implements Render {\n public target: string = DEFAULT_TARGET\n\n private readonly traceDetails: string | undefined\n private readonly trailLengthNanos: number\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n private traces: Map<number, TraceEntry>\n private lastTrim: number\n\n constructor(options: Partial<RenderTrailOptions> = {}) {\n const { target = '$..objects[?(@.trackId)]', trailLengthSeconds = 1, traceDetails } = options\n this.target = target\n\n this.trailLengthNanos = trailLengthSeconds * 1000 * 1000 * 1000\n this.traceDetails = traceDetails\n this.lastTrim = 0\n this.traces = new Map()\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n if (!element.trackId || streamTime.timestamp === undefined) {\n return\n }\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const points: Point2d[] = []\n\n if (this.traceDetails) {\n const targets = jp.query(element, this.traceDetails)\n if (targets && targets.length) {\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n if ('x' in target && 'y' in target) {\n if ('width' in target && 'height' in target) {\n const object = target as PredictedObject\n const point: Point2d = {\n x: object.x + object.width / 2,\n y: object.y + object.height / 2,\n }\n points.push(point)\n } else {\n points.push(target as Point2d)\n }\n }\n }\n }\n } else {\n const point: Point2d = {\n x: element.x + element.width / 2,\n y: element.y + element.height / 2,\n }\n points.push(point)\n }\n\n const head: TraceEntry = {\n points: points,\n timestamp: streamTime.timestamp,\n next: this.traces.get(element.trackId) ?? null,\n }\n this.traces.set(element.trackId, head)\n\n const radius = (element.width * xScale) / 40\n let n = 0\n for (let entry: TraceEntry | null = head; entry != null; entry = entry.next) {\n n += 1\n const age = streamTime.timestamp - entry.timestamp\n if (age < this.trailLengthNanos) {\n const alpha = 1.0 - age / this.trailLengthNanos\n this.drawTraceEntry(entry.points, radius, alpha, xOffset, yOffset, xScale, yScale, context, style)\n } else {\n entry.next = null\n }\n }\n\n if (streamTime.timestamp - this.lastTrim > TRIM_INTERVAL) {\n this.traces.forEach((traceEntry: TraceEntry, trackId: number) => {\n // @ts-ignore\n const age = streamTime.timestamp - traceEntry.timestamp\n if (age > this.trailLengthNanos) {\n this.traces.delete(trackId)\n }\n })\n }\n }\n\n private drawTraceEntry(points: Point2d[], radius: number, alpha: number, xOffset: number, yOffset: number, xScale: number, yScale: number, context: CanvasRenderingContext2D, style: Style): void {\n context.globalAlpha = alpha\n context.fillStyle = style.colors.secondary_color\n context.strokeStyle = style.colors.secondary_color\n for (let i = 0; i < points.length; i++) {\n const p = points[i]\n context.beginPath()\n context.globalAlpha = alpha\n context.arc(p.x * xScale + xOffset, p.y * yScale + yOffset, radius * alpha, 0, Math.PI * 2, false)\n context.fill()\n context.stroke()\n }\n }\n}\n","import { Point2d, PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport { Style } from './style'\nimport { CanvasRenderingContext2D } from 'canvas'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderMaskOptions = {} & RenderTarget\n\nexport class RenderMask implements Render {\n public target: string = DEFAULT_TARGET\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderMaskOptions> = {}) {\n const { target = '$..objects[?(@.mask)]' } = options\n this.target = target\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n if (!element.mask) {\n return\n }\n\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const buffer = Buffer.from(element.mask.bitmap, 'base64')\n const offscreenCanvas = new OffscreenCanvas(element.mask.width, element.mask.height)\n const offscreenContext = offscreenCanvas.getContext('2d')\n\n if (!offscreenContext) {\n throw new Error('cannot render a mask without offscreen context')\n }\n\n const aPixel = offscreenContext.createImageData(1, 1)\n const d = aPixel.data\n d[0] = 80\n d[1] = 80\n d[2] = 80\n d[3] = 128\n for (let y = 0; y < element.mask.height; y++) {\n const line = y * element.mask.stride\n for (let s = 0; s < element.mask.stride; s++) {\n const byte = buffer[line + s]\n for (let p = 0; p < 8; p++) {\n const x = s * 8 + p\n if (x >= element.mask.width) {\n break\n }\n const bit = (byte >> (7 - (p % 8))) & 1\n if (bit) {\n offscreenContext.putImageData(aPixel, x, y)\n }\n }\n }\n }\n const bitmap = offscreenCanvas.transferToImageBitmap()\n\n context.drawImage(\n // @ts-ignore - wouldn't work for node, but then we errored out above already\n bitmap,\n element.x + xOffset,\n element.y + yOffset,\n element.width * xScale,\n element.height * yScale,\n )\n }\n}\n","import { Point2d, PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport { Style } from './style'\nimport { CanvasRenderingContext2D } from 'canvas'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderContourOptions = {} & RenderTarget\n\nexport class RenderContour implements Render {\n public target: string = DEFAULT_TARGET\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderContourOptions> = {}) {\n const { target = '$..objects[?(@.contours)]' } = options\n this.target = target\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n if (!element.contours || !element.contours.length) {\n return\n }\n\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const lineWidth = Math.max(1, Math.max(context.canvas.width, context.canvas.height) / 360)\n\n for (let j = 0; j < element.contours.length; j++) {\n const contour = element.contours[j]\n\n if (contour.points.length < 2) {\n continue\n }\n //faded blue background\n context.beginPath()\n context.lineWidth = lineWidth\n context.strokeStyle = style.colors.primary_color\n context.fillStyle = style.colors.opacity_color\n let p = contour.points[contour.points.length - 1]\n context.moveTo(p.x * xScale + xOffset, p.y * yScale + yOffset)\n for (let i = 0; i < contour.points.length; i++) {\n p = contour.points[i]\n context.lineTo(p.x * xScale + xOffset, p.y * yScale + yOffset)\n }\n\n context.closePath()\n context.stroke()\n\n if (contour.cutouts && contour.cutouts.length) {\n for (let k = 0; k < contour.cutouts.length; k++) {\n const points = contour.cutouts[k]\n if (points.length < 2) {\n continue\n }\n p = points[points.length - 1]\n context.moveTo(p.x * xScale + xOffset, p.y * yScale + yOffset)\n for (let i = 0; i < points.length; i++) {\n p = points[i]\n context.lineTo(p.x * xScale + xOffset, p.y * yScale + yOffset)\n }\n context.closePath()\n context.stroke()\n }\n }\n\n context.fill()\n }\n }\n}\n","import { CanvasRenderingContext2D } from 'canvas'\nimport { Style } from './style'\nimport { PredictedKeyPoint, PredictedKeyPoints, PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderKeyPointsOptions = { showLabels: boolean } & RenderTarget\nexport class RenderKeyPoints implements Render {\n public target: string = DEFAULT_TARGET\n public showLabels: boolean = false\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderKeyPointsOptions> = {}) {\n const { showLabels = false, target = '$..objects[?(@.keyPoints)]' } = options\n this.target = target\n this.showLabels = showLabels\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n if (element.keyPoints) {\n const style = this.style\n if (!style) {\n throw new Error('render() called before start()')\n }\n let fillColor = style.colors.primary_color\n for (let i = 0; i < element.keyPoints.length; i++) {\n const keyPoints = element.keyPoints[i]\n this.renderKeyPoints(keyPoints, fillColor, Math.max(element.width, element.height), xOffset, yOffset, xScale, yScale)\n }\n }\n }\n\n private renderKeyPoints(keyPoints: PredictedKeyPoints, fillColor: string, width: number, xOffset: number, yOffset: number, xScale: number, yScale: number) {\n let maxZ = 1.0\n let minZ = -1.0\n for (let i = 0; i < keyPoints.points.length; i++) {\n const keyPoint = keyPoints.points[i]\n if (keyPoint.z) {\n if (keyPoint.z > maxZ) {\n maxZ = keyPoint.z\n }\n if (keyPoint.z < minZ) {\n minZ = keyPoint.z\n }\n }\n }\n\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const MIN_RADIUS = 2\n const MAX_RADIUS = Math.min(MIN_RADIUS * 2, width / 100)\n\n for (var i = 0; i < keyPoints.points.length; i++) {\n const p = keyPoints.points[i]\n const x = xOffset + p.x * xScale\n const y = yOffset + p.y * yScale\n const z = p.z ?? 0.0 * Math.max(xScale, yScale)\n const radius = MAX_RADIUS - ((z - minZ) * (MAX_RADIUS - MIN_RADIUS)) / (maxZ - minZ)\n\n //draw circle\n context.beginPath()\n context.arc(x, y, radius, 0, Math.PI * 2, false)\n context.fillStyle = fillColor\n context.fill()\n context.strokeStyle = style.colors.secondary_color\n context.stroke()\n\n if (!this.showLabels) continue\n\n // label\n let label\n if (typeof p.visible == 'undefined') {\n label = p.classLabel\n } else {\n label = `${p.classLabel} (${p.visible ? 'visible' : 'invisible'})`\n }\n\n context.font = style.font\n context.fillStyle = '#ffffff'\n context.textAlign = 'left'\n context.textBaseline = 'top'\n const tw = context.measureText(label)\n let xPos = p.x * xScale + xOffset + radius\n let yPos = p.y * yScale + yOffset - (radius + tw.actualBoundingBoxAscent + tw.actualBoundingBoxDescent)\n context.fillText(label, xPos, yPos)\n }\n }\n}\n","import { PredictedObject, StreamTime } from '@eyepop.ai/eyepop'\nimport { Style } from './style'\nimport { CanvasRenderingContext2D } from 'canvas'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderTextOptions = {\n showText: boolean // Whether to show labels, such as OCR text\n fitToBounds: boolean // Whether to scale the font size to fit the bounding box\n textPadding?: number // Padding as percentage of container (0.0-1.0)\n} & RenderTarget\n\nexport class RenderText implements Render {\n public target: string = DEFAULT_TARGET\n public fitToBounds: boolean = true\n public textPadding: number = 0.1\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n constructor(options: Partial<RenderTextOptions> = {}) {\n const { target = '$..objects[?(@.texts)]', fitToBounds = true, textPadding = 0.1 } = options\n this.target = target\n this.fitToBounds = fitToBounds\n this.textPadding = Math.max(0.02, Math.min(0.2, textPadding)) // Clamp between 2% and 20%\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void {\n // Safety checks to prevent freezes\n if (!element || element.width <= 0 || element.height <= 0 || !element.texts || element.texts.length === 0) {\n return\n }\n\n const context = this.context\n const style = this.style\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const w = element.width * xScale\n const h = element.height * yScale\n\n let canvasDimension = Math.min(context.canvas.width, context.canvas.height)\n\n let padding = canvasDimension * this.textPadding * style.cornerPadding\n padding = Math.min(padding, w * this.textPadding, h * this.textPadding)\n\n const boundingBoxWidth = w - padding * 2\n const boundingBoxHeight = h - padding * 2\n\n let fontSize = this.getMinFontSize(context, element, boundingBoxWidth, boundingBoxHeight, style, this.fitToBounds)\n let label = ''\n\n // Collect text metrics for centering\n const fontType = style.font.split(' ')[1]\n context.font = `${fontSize}px ${fontType}`\n\n // Calculate total text height for vertical centering\n let totalTextHeight = 0\n const textMetrics = []\n\n for (let i = 0; i < element.texts.length; i++) {\n label = element.texts[i]?.text || ''\n if (!label) continue\n\n const metrics = context.measureText(label)\n const lineHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent\n totalTextHeight += lineHeight\n\n textMetrics.push({\n text: label,\n width: metrics.width,\n height: lineHeight,\n })\n }\n\n // Add spacing between lines\n const spacing = fontSize * 0.2\n if (element.texts.length > 1) {\n totalTextHeight += spacing * (element.texts.length - 1)\n }\n\n // Calculate vertical position for centering all text\n let textY = element.y * yScale + yOffset + (h - totalTextHeight) / 2\n\n // Now draw each line of text centered\n for (let i = 0; i < textMetrics.length; i++) {\n const metrics = textMetrics[i]\n\n // Center text horizontally\n let textX = element.x * xScale + xOffset + (w - metrics.width) / 2\n\n this.drawText(metrics.text, context, textX, textY, style, fontSize)\n\n // Move to next line\n textY += metrics.height + spacing\n }\n }\n\n // Draw a label on the canvas\n drawText(text: string, context: CanvasRenderingContext2D, xPos: number, yPos: number, style: Style, fontSize: number): void {\n context.fillStyle = '#ffffff'\n context.textAlign = 'left'\n context.textBaseline = 'top'\n\n // Set the font size\n let fontType = style.font.split(' ')[1]\n context.font = `${fontSize}px ${fontType}`\n\n // Draw the text\n context.fillText(text, xPos, yPos)\n }\n\n static toTitleCase(str: string) {\n if (!str) return ''\n return str.replace(/\\w\\S*/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()\n })\n }\n\n // Gets the optimal font size for all labels to fit in the bounding box\n getMinFontSize(context: CanvasRenderingContext2D, element: any, width: number, height: number, style: any, scaleToFit: boolean = false): number {\n const textLines = (element.texts || []).map((t: any) => t?.text || '').filter((t: string) => t)\n const textCount = textLines.length\n if (textCount === 0) return parseInt(style.font.split(' ')[0])\n\n const baseFontSize = parseInt(style.font.split(' ')[0])\n if (!scaleToFit) {\n return baseFontSize\n }\n\n // Simple direct approach focused on performance\n try {\n const fontType = style.font.split(' ')[1]\n\n // For single line, calculate directly based on height and width constraints\n if (textCount === 1) {\n // Target 90% of height for single line to leave small padding\n const targetHeight = height * 0.9\n\n // Start with a height-based size and measure\n let fontSize = Math.floor(targetHeight)\n context.font = `${fontSize}px ${fontType}`\n const metrics = context.measureText(textLines[0])\n\n // If width exceeds container, scale down proportionally\n if (metrics.width > width) {\n // Simple, direct calculation\n fontSize = Math.floor(fontSize * (width / metrics.width) * 0.95)\n }\n\n return Math.max(5, fontSize)\n }\n\n // For multiple lines, allocate height based on line count\n // Faster approach - one direct calculation\n\n // Set aside 10% of height for spacing between lines\n const availableHeight = height * 0.9\n const lineSpacing = textCount > 1 ? (availableHeight * 0.1) / (textCount - 1) : 0\n\n // Calculate height per line\n const heightPerLine = (availableHeight - (textCount - 1) * lineSpacing) / textCount\n\n // Initial font size based on height per line\n let fontSize = Math.floor(heightPerLine)\n context.font = `${fontSize}px ${fontType}`\n\n // Find longest line at this font size\n let maxWidth = 0\n for (const line of textLines) {\n const lineWidth = context.measureText(line).width\n maxWidth = Math.max(maxWidth, lineWidth)\n }\n\n // Scale down if width constraint is exceeded\n if (maxWidth > width) {\n fontSize = Math.floor(fontSize * (width / maxWidth) * 0.95)\n }\n\n return Math.max(5, fontSize)\n } catch (error) {\n // Ultra-safe fallback that will never cause performance issues\n return Math.min(height / (textCount + 1), width / 10)\n }\n }\n}\n","import { PredictedObject, StreamTime, PredictedClass } from '@eyepop.ai/eyepop'\nimport { Style } from './style'\nimport { Canvas, CanvasRenderingContext2D } from 'canvas'\nimport { Render, DEFAULT_TARGET, RenderTarget } from './render'\n\nexport type RenderClassesOptions = {\n showConfidence?: boolean // Whether to show confidence, such as \"male 95%\"\n showDottedOutline?: boolean // Whether to show a dotted outline around the object\n classProperties?: ClassificationProperties[] // Classes to disable rendering for\n labelSizePercentage?: number // The label size as a percentage of the image width\n} & RenderTarget\n\nexport type ClassificationProperties = {\n color?: string\n disabled?: boolean\n disabledOpacity?: number\n}\n\nexport class RenderClasses implements Render {\n public target: string = '$'\n\n private context: CanvasRenderingContext2D | undefined\n private style: Style | undefined\n\n private showConfidence: boolean\n private labelSizePercentage: number\n\n private classProperties: { [classLabel: string]: ClassificationProperties } = {}\n\n constructor(options: Partial<RenderClassesOptions> = {}) {\n const { showConfidence = false, classProperties = {}, target = '$', labelSizePercentage = 0.05 } = options\n\n this.target = target\n this.showConfidence = showConfidence\n this.classProperties = classProperties\n this.labelSizePercentage = labelSizePercentage\n }\n\n start(context: CanvasRenderingContext2D, style: Style) {\n this.context = context\n this.style = style\n }\n\n public draw(element: PredictedObject, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime, color?: string): void {\n const context = this.context\n const style = this.style\n\n if (!context || !style) {\n throw new Error('render() called before start()')\n }\n\n const canvas = context?.canvas as HTMLCanvasElement | Canvas\n const width = canvas?.width ?? 640\n const height = canvas?.height ?? 480\n\n // Calculate sizes based on image dimensions\n const baseSize = Math.min(width, height) * this.labelSizePercentage\n const xPadding = baseSize * 0.3\n const yPadding = baseSize * 2.4\n const fontSize = baseSize * 1.3\n\n let yOff = height - yPadding\n let xOff = xPadding\n\n if (element.classes) {\n let labelHeight = 0\n\n // Find the maximum label height, to keep the label height consistent\n element.classes.forEach((cls: PredictedClass) => {\n let label = cls.classLabel\n style.font = `${fontSize}px serif`\n context.font = style.font\n\n const textDetails = context?.measureText(label)\n const currentLabelHeight = textDetails.actualBoundingBoxAscent + textDetails.actualBoundingBoxDescent + 2 * xPadding * 0.5\n labelHeight = Math.max(currentLabelHeight, labelHeight)\n })\n\n // Draw the labels\n element.classes.forEach((cls: PredictedClass) => {\n let label = cls.classLabel\n const properties = this.classProperties?.[cls.classLabel]\n\n const drawDisabled = properties?.disabled ?? false\n style.colors.primary_color = properties?.color ?? '#009dff'\n\n if (drawDisabled) {\n context.globalAlpha = properties?.disabledOpacity ?? 0.5\n }\n\n if (this.showConfidence && cls.confidence) {\n label += ` ${Math.round(cls.confidence * 100)}%`\n }\n\n const textDetails = context.measureText(label)\n const labelWidth = textDetails.width + 2 * xPadding * 0.5\n const borderRadius = labelHeight / 2\n\n this.drawLabel(label, context, xOff, yOff, style, drawDisabled, xPadding * 0.5, yPadding, labelWidth, labelHeight, borderRadius)\n\n xOff += labelWidth + xPadding\n\n const maxWidth = width * 0.9 - xPadding\n\n if (xOff + labelWidth > maxWidth) {\n xOff = xPadding\n yOff -= yPadding\n }\n })\n }\n }\n\n drawLabel(\n label: string,\n context: CanvasRenderingContext2D,\n xOffset: number,\n yOffset: number,\n style: Style,\n drawDisabled: boolean,\n xPadding: number,\n yPadding: number,\n labelWidth: number,\n labelHeight: number,\n borderRadius: number,\n ) {\n context.font = style.font\n context.fillStyle = style.colors.primary_color\n\n if (drawDisabled) {\n context.globalAlpha = 0.5\n } else {\n context.globalAlpha = 1\n }\n\n context.strokeStyle = '#ffffff'\n context.setLineDash([labelHeight / 10, labelHeight / 10])\n context.lineWidth = labelHeight / 20\n // Don't stroke yet - need to define the path first\n\n context.beginPath()\n context.moveTo(xOffset + borderRadius, yOffset - labelHeight / 2)\n context.lineTo(xOffset + labelWidth - borderRadius, yOffset - labelHeight / 2)\n context.quadraticCurveTo(xOffset + labelWidth, yOffset - labelHeight / 2, xOffset + labelWidth, yOffset - labelHeight / 2 + borderRadius)\n context.lineTo(xOffset + labelWidth, yOffset + labelHeight / 2 - borderRadius)\n context.quadraticCurveTo(xOffset + labelWidth, yOffset + labelHeight / 2, xOffset + labelWidth - borderRadius, yOffset + labelHeight / 2)\n context.lineTo(xOffset + borderRadius, yOffset + labelHeight / 2)\n context.quadraticCurveTo(xOffset, yOffset + labelHeight / 2, xOffset, yOffset + labelHeight / 2 - borderRadius)\n context.lineTo(xOffset, yOffset - labelHeight / 2 + borderRadius)\n context.quadraticCurveTo(xOffset, yOffset - labelHeight / 2, xOffset + borderRadius, yOffset - labelHeight / 2)\n context.closePath()\n context.fill()\n context.stroke() // Apply the stroke to the path\n\n context.fillStyle = '#ffffff'\n context.textAlign = 'left'\n context.textBaseline = 'middle'\n context.fillText(label, xOffset + xPadding, yOffset)\n }\n}\n"],"mappings":"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AA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AA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AA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,CAAC;AAAA,EACN,CAAC,GAAG,CAAC;AAAA,EACL,CAAC,GAAG,EAAE;AAAA,EACN,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,GAAG,EAAE;AAAA,EACN,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,CAAC;AAAA,EACL,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,EAAE;AAAA,EACN,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AA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AA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,CAAC;AAAA,EACN,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,CAAC;AAAA,EACN,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,CAAC;AAAA,EACN,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,CAAC;AAAA,EACN,CAAC,GAAG,EAAE;AAAA,EACN,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,IAAI,CAAC;AAAA,EACN,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,EAAE;AAAA,EACN,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,EAAE;AAAA,EACN,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,EAAE;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,CAAC;AAAA,EACL,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,IAAI,GAAG;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,CAAC;AAAA,EACP,CAAC,GAAG,CAAC;AAAA,EACL,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,IAAI,CAAC;AAAA,EACN,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,KAAK,EAAE;AAAA,EACR,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AA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","names":["BoxType","fontSize","i","i","jp","i","fontSize","Render2d"]}
|