{"version":3,"file":"ems-web-app-utils.mjs","sources":["../../src/lib/utils.service.ts","../../src/lib/utils.component.ts","../../src/lib/utils.module.ts","../../src/public-api.ts","../../src/ems-web-app-utils.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class UtilsService {\n\n  constructor() { }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'lib-utils',\n  template: `\n    <p>\n      utils works!\n    </p>\n  `,\n  styles: [\n  ]\n})\nexport class UtilsComponent implements OnInit {\n\n  constructor() { }\n\n  ngOnInit(): void {\n  }\n\n}\n","import { NgModule } from '@angular/core';\nimport { UtilsComponent } from './utils.component';\nimport * as _ from 'underscore';\n\nexport function alphabetize(...parameters: any[]): any {\n  if (typeof parameters[0] === 'string') {\n    // if this method is supplied as a callback to Array.sort\n    const a = parameters[0];\n    const b = parameters[1];\n    if (a > b) return 1;\n    if (a < b) return -1;\n    return 0;\n  } else {\n    // if we're sorting a list with a supplied key to alphabetize\n    const list = parameters[0];\n    const property = parameters[1];\n    list.sort((a: any, b: any) => {\n      if (a[property] > b[property]) return 1;\n      if (a[property] < b[property]) return -1;\n      return 0;\n    });\n    return list;\n  }\n}\n\nexport function clone(obj: any): any {\n  if (obj === null || obj === undefined) return obj;\n  return JSON.parse(JSON.stringify(obj));\n}\n\nexport function convertToEST(date: string): string {\n  const gmtDate = new Date(date + \" GMT\");\n  const options: Intl.DateTimeFormatOptions = {\n    timeZone: 'America/New_York',\n    year: \"numeric\",\n    month: 'numeric',\n    day: 'numeric',\n    hour: 'numeric',\n    minute: 'numeric',\n    second: 'numeric',\n    hour12: true\n  };\n  \n  const formatter = new Intl.DateTimeFormat('en-US', options);\n  return formatter.format(gmtDate);\n}\n\nexport function dateStrings(date?: Date) {\n  date = date || new Date();\n  return {\n    year: date.getFullYear(),\n    month: (date.getMonth() + 1).toString().padStart(2, '0'),\n    date: date.getDate().toString().padStart(2, '0'),\n    time: `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`,\n    seconds: date.getSeconds().toString().padStart(2, '0'),\n  };\n}\n\nexport function delay(method: () => void, ms: number = 0): number {\n  return window.setTimeout(method, ms);\n}\n\nexport function download(content: string, name: string, extension: string = 'csv') {\n  const blob = new Blob([content]);\n  name = kebab(name);\n\n  if ((window.navigator as any).msSaveOrOpenBlob) (window.navigator as any).msSaveBlob(blob, `${name}.${extension}`);\n  else {\n    const a = window.document.createElement('a');\n    a.href = window.URL.createObjectURL(blob);\n    a.download = `${name}.${extension}`;\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n  }\n}\n\nexport function empty(e: any): boolean {\n  return falsy(e);\n}\n\nexport function enumKeys<O extends object, K extends keyof O = keyof O>(obj: O): K[] {\n    return Object.keys(obj).filter(k => Number.isNaN(+k)) as K[];\n}\n\nexport function enumValues<O extends object, K extends keyof O = keyof O>(obj: O): any[] {\n    const output = []\n    for (const value of enumKeys(obj)) {\n      output.push(obj[value]);    \n    }\n    return output as any[];\n}\n\nexport function falsy(e: any): boolean {\n  if (typeof e === 'string' && trim(e).match(/^false$/i)) return true;\n  if (typeof e === 'string') return _.isEmpty(e.replace(/\\s+/gim, ''));\n  if (typeof e === 'boolean') return e === false;\n  if (!isNaN(parseInt(e, 10))) return e === 0;\n  return _.isEmpty(e);\n}\n\nexport function focus(selector: string): number {\n  const element = document.querySelector(selector) as HTMLElement;\n  if(!element || !element.focus) return 0;\n  return delay(() => element.focus());\n}\n\nexport function getLargestRemainder(values: number[], desiredSum: number) {\n  let sum = 0;\n  let valueParts = values.map((value: number, index: number) => {\n    const integerValue = value || 0;\n    sum += integerValue;\n    return {\n      integer: integerValue,\n      decimal: value % 1,\n      originalIndex: index,\n    };\n  });\n\n  if (sum !== desiredSum && sum) {\n    valueParts = valueParts.sort((a, b) => b.decimal - a.decimal);\n\n    const diff = desiredSum - sum;\n    let i = 0;\n\n    while (i < diff) {\n      valueParts[i].integer++;\n      i++;\n    }\n  }\n\n  return valueParts.sort((a, b) => a.originalIndex - b.originalIndex).map((p) => p.integer);\n}\n\nexport function getparams(requestedProperty?: string): any {\n  const vars = {} as any;\n  const parts = window.location.href.replace(/[?&#]+([^=&]+)=([^&]*)/gi, ((m: any, key: string, value: any) => {\n    vars[key] = value;\n  }) as any);\n\n  for (const prop in vars) {\n    if (vars[prop].toLowerCase() === 'true') vars[prop] = true;\n    else if (vars[prop].toLowerCase() === 'false') vars[prop] = false;\n    else if (!isNaN(parseFloat(vars[prop])) && !vars[prop].match(/[^0-9]+/gim)) vars[prop] = parseFloat(vars[prop]);\n  }\n\n  if (requestedProperty) return vars[requestedProperty];\n  return vars;\n}\n\nexport function isset(e: any): boolean {\n  return truthy(e);\n}\n\nexport function kebab(e: string): string {\n  if (_.isEmpty(e)) return e;\n  return e.toLowerCase().replace(/\\s+/gim, '-').replace(/_/g, '-').replace(/-+/g, '-');\n}\n\nexport function paginate(method: (offset: number, limit: number) => any, offset: number, limit: number, key: string, output: any[] = [], callback?: (allRows:any[], newRows: any[]) => void, prevResolve?: (result: any) => void) {\n    return new Promise(async (resolve: (result: any) => void, reject: (result: any) => void) => {\n      let response;\n      try {\n        response = await method(offset, limit);\n      } catch(e: any) {\n        reject(e);\n      }\n      \n      output = output.concat(response[key]);\n      \n      if(callback) callback(output, response[key]);\n      \n      if(response.nextPage) {\n        await paginate(method, response.nextPage, limit, key, output, callback, prevResolve ?? resolve)\n      } else {\n        (prevResolve ?? resolve)(output);\n      }\n      \n    });\n}\n\nexport function prepareSearchString(value: string): string {\n    if(!value) return \"\";\n    return value.toLowerCase().replace(/\\s+/gim,\"\");\n}\n\nexport function replaceItem(array: any[], item: any, key: string = 'id', position: string = 'current'): any {\n  const lookup = {} as any;\n  lookup[key] = item[key];\n\n  const oldItem = _.findWhere(array, lookup);\n\n  if (!oldItem) {\n    array.unshift(item);\n    return item;\n  }\n\n  const index = array.indexOf(oldItem);\n\n  if (position === 'first') {\n    array.splice(index, 1);\n    array.unshift(item);\n  } else {\n    array.splice(index, 1, item);\n  }\n\n  return item;\n}\n\nexport function sleep(duration: number = 0) {\n  return new Promise((resolve: (value: any) => void) => {\n    delay(() => resolve(duration), duration);\n  });\n}\n\nexport function snakecase(e: string): string {\n  if (_.isEmpty(e)) return e;\n  return e.toLowerCase().replace(/\\s+/gim, '_').replace(/-/g, '_').replace(/_+/g, '_');\n}\n\nexport function tick(returnValue?: any): Promise<any> {\n  return new Promise((resolve: (response: any) => void, reject: (response: any) => void) => {\n    delay(() => resolve(returnValue));\n  });\n}\n\nexport function timestamp(date?: Date, includeTime: boolean = true): string {\n  const info = dateStrings(date);\n  const time = ` ${info.time}:${info.seconds}`;\n  return `${info.year}-${info.month}-${info.date}${includeTime ? time : ''}`;\n}\n\nexport function trace(...parameters: any[]) {\n  if (!getparams().debug) return;\n\n  for (let i = 0, count = parameters.length; i < count; i++) {\n    // tslint:disable-next-line\n    console.log(parameters[i]);\n  }\n}\n\nexport function trim(e: string): string {\n  if (_.isEmpty(e)) return e;\n  return e.replace(/^\\s+/, '').replace(/\\s+$/, '');\n}\n\nexport function truthy(e: any): boolean {\n  return !falsy(e);\n}\n\nexport function validateEmail(email: string | null): RegExpMatchArray | null {\n  if (!email) return null;\n\n  return String(email)\n    .toLowerCase()\n    .match(\n      /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n    );\n}\n\nexport function viewport(el: HTMLElement, percentVisible: number = 100): boolean {\n  const rect = el.getBoundingClientRect();\n  const windowHeight = window.innerHeight || document.documentElement.clientHeight;\n\n  return !(\n    Math.floor(100 - ((rect.top >= 0 ? 0 : rect.top) / +-(rect.height / 1)) * 100) < percentVisible ||\n    Math.floor(100 - ((rect.bottom - windowHeight) / rect.height) * 100) < percentVisible\n  );\n}\n\nexport function password(length: number): string {\n  const upperCaseChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n  const lowerCaseChars = 'abcdefghijklmnopqrstuvwxyz';\n  const numbers = '0123456789';\n  const specialChars = '!@#$%^&*()-_=+[]|;:,.?';\n  length = length ?? 8;\n\n  // Ensure each type of character appears at least once\n  const password = [\n    upperCaseChars[Math.floor(Math.random() * upperCaseChars.length)], // One uppercase\n    lowerCaseChars[Math.floor(Math.random() * lowerCaseChars.length)], // One lowercase\n    numbers[Math.floor(Math.random() * numbers.length)], // One number\n    specialChars[Math.floor(Math.random() * specialChars.length)], // One special char\n  ];\n\n  // Pool of all allowed characters for remaining password characters\n  const allChars = upperCaseChars + lowerCaseChars + numbers + specialChars;\n\n  // Fill the rest of the password length (64 characters) with random characters\n  for (let i = password.length; i < length; i++) {\n    password.push(allChars[Math.floor(Math.random() * allChars.length)]);\n  }\n\n  // Shuffle the password array to ensure randomness, then join it into a string\n  const randomPassword = password.sort(() => Math.random() - 0.5).join('');\n  return randomPassword;\n}\n\n\n\n@NgModule({\n  declarations: [\n  ],\n  imports: [\n  ],\n  exports: [\n  ]\n})\nexport class UtilsModule { }\n","/*\n * Public API Surface of utils\n */\n\nexport * from './lib/utils.service';\nexport * from './lib/utils.component';\nexport * from './lib/utils.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAKa,YAAY,CAAA;AAEvB,IAAA,WAAA,GAAA,GAAiB;;yGAFN,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,YAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCQY,cAAc,CAAA;AAEzB,IAAA,WAAA,GAAA,GAAiB;IAEjB,QAAQ,GAAA;KACP;;2GALU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EARf,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAIU,cAAc,EAAA,UAAA,EAAA,CAAA;kBAV1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;AACD,oBAAA,MAAM,EAAE,EACP;AACF,iBAAA,CAAA;;;ACPe,SAAA,WAAW,CAAC,GAAG,UAAiB,EAAA;AAC9C,IAAA,IAAI,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;;AAErC,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACxB,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;AACrB,QAAA,OAAO,CAAC,CAAC;AACV,KAAA;AAAM,SAAA;;AAEL,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3B,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAI;YAC3B,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC;AACzC,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;AACH,CAAC;AAEK,SAAU,KAAK,CAAC,GAAQ,EAAA;AAC5B,IAAA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;AAAE,QAAA,OAAO,GAAG,CAAC;IAClD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC;AAEK,SAAU,YAAY,CAAC,IAAY,EAAA;IACvC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;AACxC,IAAA,MAAM,OAAO,GAA+B;AAC1C,QAAA,QAAQ,EAAE,kBAAkB;AAC5B,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,MAAM,EAAE,IAAI;KACb,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5D,IAAA,OAAO,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAEK,SAAU,WAAW,CAAC,IAAW,EAAA;AACrC,IAAA,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;IAC1B,OAAO;AACL,QAAA,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;AACxB,QAAA,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACxD,QAAA,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAChD,QAAA,IAAI,EAAE,CAAA,EAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAA;AACvG,QAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;KACvD,CAAC;AACJ,CAAC;SAEe,KAAK,CAAC,MAAkB,EAAE,KAAa,CAAC,EAAA;IACtD,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACvC,CAAC;AAEK,SAAU,QAAQ,CAAC,OAAe,EAAE,IAAY,EAAE,YAAoB,KAAK,EAAA;IAC/E,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACjC,IAAA,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;AAEnB,IAAA,IAAK,MAAM,CAAC,SAAiB,CAAC,gBAAgB;AAAG,QAAA,MAAM,CAAC,SAAiB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC,CAAC;AAC9G,SAAA;QACH,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAI,CAAA,EAAA,SAAS,EAAE,CAAC;AACpC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,KAAK,EAAE,CAAC;AACV,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC9B,KAAA;AACH,CAAC;AAEK,SAAU,KAAK,CAAC,CAAM,EAAA;AAC1B,IAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAEK,SAAU,QAAQ,CAAgD,GAAM,EAAA;IAC1E,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAQ,CAAC;AACjE,CAAC;AAEK,SAAU,UAAU,CAAgD,GAAM,EAAA;IAC5E,MAAM,MAAM,GAAG,EAAE,CAAA;AACjB,IAAA,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;QACjC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACzB,KAAA;AACD,IAAA,OAAO,MAAe,CAAC;AAC3B,CAAC;AAEK,SAAU,KAAK,CAAC,CAAM,EAAA;AAC1B,IAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC;IACpE,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,QAAA,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,KAAK,KAAK,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5C,IAAA,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAEK,SAAU,KAAK,CAAC,QAAgB,EAAA;IACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAgB,CAAC;AAChE,IAAA,IAAG,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;AAAE,QAAA,OAAO,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AACtC,CAAC;AAEe,SAAA,mBAAmB,CAAC,MAAgB,EAAE,UAAkB,EAAA;IACtE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAa,EAAE,KAAa,KAAI;AAC3D,QAAA,MAAM,YAAY,GAAG,KAAK,IAAI,CAAC,CAAC;QAChC,GAAG,IAAI,YAAY,CAAC;QACpB,OAAO;AACL,YAAA,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,KAAK,GAAG,CAAC;AAClB,YAAA,aAAa,EAAE,KAAK;SACrB,CAAC;AACJ,KAAC,CAAC,CAAC;AAEH,IAAA,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,EAAE;QAC7B,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;AAE9D,QAAA,MAAM,IAAI,GAAG,UAAU,GAAG,GAAG,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,OAAO,CAAC,GAAG,IAAI,EAAE;AACf,YAAA,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AACxB,YAAA,CAAC,EAAE,CAAC;AACL,SAAA;AACF,KAAA;AAED,IAAA,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;AAC5F,CAAC;AAEK,SAAU,SAAS,CAAC,iBAA0B,EAAA;IAClD,MAAM,IAAI,GAAG,EAAS,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,GAAG,CAAC,CAAM,EAAE,GAAW,EAAE,KAAU,KAAI;AAC1G,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;KACnB,EAAS,CAAC;AAEX,IAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACvB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;aACtD,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;aAC7D,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjH,KAAA;AAED,IAAA,IAAI,iBAAiB;AAAE,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACtD,IAAA,OAAO,IAAI,CAAC;AACd,CAAC;AAEK,SAAU,KAAK,CAAC,CAAM,EAAA;AAC1B,IAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAEK,SAAU,KAAK,CAAC,CAAS,EAAA;AAC7B,IAAA,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC;IAC3B,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACvF,CAAC;SAEe,QAAQ,CAAC,MAA8C,EAAE,MAAc,EAAE,KAAa,EAAE,GAAW,EAAE,MAAgB,GAAA,EAAE,EAAE,QAAkD,EAAE,WAAmC,EAAA;IAC5N,OAAO,IAAI,OAAO,CAAC,OAAO,OAA8B,EAAE,MAA6B,KAAI;AACzF,QAAA,IAAI,QAAQ,CAAC;QACb,IAAI;YACF,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACxC,SAAA;AAAC,QAAA,OAAM,CAAM,EAAE;YACd,MAAM,CAAC,CAAC,CAAC,CAAC;AACX,SAAA;QAED,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAEtC,QAAA,IAAG,QAAQ;YAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAE7C,IAAG,QAAQ,CAAC,QAAQ,EAAE;YACpB,MAAM,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,IAAI,OAAO,CAAC,CAAA;AAChG,SAAA;AAAM,aAAA;AACL,YAAA,CAAC,WAAW,IAAI,OAAO,EAAE,MAAM,CAAC,CAAC;AAClC,SAAA;AAEH,KAAC,CAAC,CAAC;AACP,CAAC;AAEK,SAAU,mBAAmB,CAAC,KAAa,EAAA;AAC7C,IAAA,IAAG,CAAC,KAAK;AAAE,QAAA,OAAO,EAAE,CAAC;IACrB,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAC,EAAE,CAAC,CAAC;AACpD,CAAC;AAEK,SAAU,WAAW,CAAC,KAAY,EAAE,IAAS,EAAE,GAAc,GAAA,IAAI,EAAE,QAAA,GAAmB,SAAS,EAAA;IACnG,MAAM,MAAM,GAAG,EAAS,CAAC;IACzB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAExB,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAE3C,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACpB,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAErC,IAAI,QAAQ,KAAK,OAAO,EAAE;AACxB,QAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACvB,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACrB,KAAA;AAAM,SAAA;QACL,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9B,KAAA;AAED,IAAA,OAAO,IAAI,CAAC;AACd,CAAC;AAEe,SAAA,KAAK,CAAC,QAAA,GAAmB,CAAC,EAAA;AACxC,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAA6B,KAAI;QACnD,KAAK,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC3C,KAAC,CAAC,CAAC;AACL,CAAC;AAEK,SAAU,SAAS,CAAC,CAAS,EAAA;AACjC,IAAA,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC;IAC3B,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACvF,CAAC;AAEK,SAAU,IAAI,CAAC,WAAiB,EAAA;IACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAgC,EAAE,MAA+B,KAAI;QACvF,KAAK,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;AACpC,KAAC,CAAC,CAAC;AACL,CAAC;SAEe,SAAS,CAAC,IAAW,EAAE,cAAuB,IAAI,EAAA;AAChE,IAAA,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,OAAO,CAAA,CAAE,CAAC;IAC7C,OAAO,CAAA,EAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAG,EAAA,WAAW,GAAG,IAAI,GAAG,EAAE,CAAA,CAAE,CAAC;AAC7E,CAAC;AAEe,SAAA,KAAK,CAAC,GAAG,UAAiB,EAAA;AACxC,IAAA,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK;QAAE,OAAO;AAE/B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;;QAEzD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5B,KAAA;AACH,CAAC;AAEK,SAAU,IAAI,CAAC,CAAS,EAAA;AAC5B,IAAA,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC;AAC3B,IAAA,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAEK,SAAU,MAAM,CAAC,CAAM,EAAA;AAC3B,IAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAEK,SAAU,aAAa,CAAC,KAAoB,EAAA;AAChD,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI,CAAC;IAExB,OAAO,MAAM,CAAC,KAAK,CAAC;AACjB,SAAA,WAAW,EAAE;SACb,KAAK,CACJ,uJAAuJ,CACxJ,CAAC;AACN,CAAC;SAEe,QAAQ,CAAC,EAAe,EAAE,iBAAyB,GAAG,EAAA;AACpE,IAAA,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;IACxC,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC;AAEjF,IAAA,OAAO,EACL,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,cAAc;QAC/F,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,cAAc,CACtF,CAAC;AACJ,CAAC;AAEK,SAAU,QAAQ,CAAC,MAAc,EAAA;IACrC,MAAM,cAAc,GAAG,4BAA4B,CAAC;IACpD,MAAM,cAAc,GAAG,4BAA4B,CAAC;IACpD,MAAM,OAAO,GAAG,YAAY,CAAC;IAC7B,MAAM,YAAY,GAAG,wBAAwB,CAAC;AAC9C,IAAA,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC;;AAGrB,IAAA,MAAM,QAAQ,GAAG;AACf,QAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AACjE,QAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AACjE,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACnD,QAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;KAC9D,CAAC;;IAGF,MAAM,QAAQ,GAAG,cAAc,GAAG,cAAc,GAAG,OAAO,GAAG,YAAY,CAAC;;AAG1E,IAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;QAC7C,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtE,KAAA;;IAGD,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzE,IAAA,OAAO,cAAc,CAAC;AACxB,CAAC;MAYY,WAAW,CAAA;;wGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAX,WAAW,EAAA,CAAA,CAAA;AAAX,WAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,YALb,EACR,CAAA,EAAA,CAAA,CAAA;2FAIU,WAAW,EAAA,UAAA,EAAA,CAAA;kBARvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EACb;AACD,oBAAA,OAAO,EAAE,EACR;AACD,oBAAA,OAAO,EAAE,EACR;AACF,iBAAA,CAAA;;;ACnTD;;AAEG;;ACFH;;AAEG;;;;"}