{"version":3,"file":"NcDateTimePicker-DM2ID4VN.chunk.mjs","sources":["../node_modules/ical.js/dist/ical.js","../node_modules/@nextcloud/timezones/dist/index.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcTimezonePicker-bIwFQlmV.mjs","../node_modules/date-format-parse/es/util.js","../node_modules/date-format-parse/es/locale/en.js","../node_modules/date-format-parse/es/format.js","../node_modules/date-format-parse/es/parse.js","../node_modules/vue2-datepicker/index.esm.js","../node_modules/@nextcloud/vue/dist/Components/NcDateTimePicker.mjs"],"sourcesContent":["/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * Represents the BINARY value type, which contains extra methods for encoding and decoding.\n *\n * @memberof ICAL\n */\nclass Binary {\n  /**\n   * Creates a binary value from the given string.\n   *\n   * @param {String} aString        The binary value string\n   * @return {Binary}               The binary value instance\n   */\n  static fromString(aString) {\n    return new Binary(aString);\n  }\n\n  /**\n   * Creates a new ICAL.Binary instance\n   *\n   * @param {String} aValue     The binary data for this value\n   */\n  constructor(aValue) {\n    this.value = aValue;\n  }\n\n  /**\n   * The type name, to be used in the jCal object.\n   * @default \"binary\"\n   * @constant\n   */\n  icaltype = \"binary\";\n\n  /**\n   * Base64 decode the current value\n   *\n   * @return {String}         The base64-decoded value\n   */\n  decodeValue() {\n    return this._b64_decode(this.value);\n  }\n\n  /**\n   * Encodes the passed parameter with base64 and sets the internal\n   * value to the result.\n   *\n   * @param {String} aValue      The raw binary value to encode\n   */\n  setEncodedValue(aValue) {\n    this.value = this._b64_encode(aValue);\n  }\n\n  _b64_encode(data) {\n    // http://kevin.vanzonneveld.net\n    // +   original by: Tyler Akins (http://rumkin.com)\n    // +   improved by: Bayron Guevara\n    // +   improved by: Thunder.m\n    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n    // +   bugfixed by: Pellentesque Malesuada\n    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n    // +   improved by: Rafał Kukawski (http://kukawski.pl)\n    // *     example 1: base64_encode('Kevin van Zonneveld');\n    // *     returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='\n    // mozilla has this native\n    // - but breaks in 2.0.0.12!\n    //if (typeof this.window['atob'] == 'function') {\n    //    return atob(data);\n    //}\n    let b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" +\n              \"abcdefghijklmnopqrstuvwxyz0123456789+/=\";\n    let o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n      ac = 0,\n      enc = \"\",\n      tmp_arr = [];\n\n    if (!data) {\n      return data;\n    }\n\n    do { // pack three octets into four hexets\n      o1 = data.charCodeAt(i++);\n      o2 = data.charCodeAt(i++);\n      o3 = data.charCodeAt(i++);\n\n      bits = o1 << 16 | o2 << 8 | o3;\n\n      h1 = bits >> 18 & 0x3f;\n      h2 = bits >> 12 & 0x3f;\n      h3 = bits >> 6 & 0x3f;\n      h4 = bits & 0x3f;\n\n      // use hexets to index into b64, and append result to encoded string\n      tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n    } while (i < data.length);\n\n    enc = tmp_arr.join('');\n\n    let r = data.length % 3;\n\n    return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);\n\n  }\n\n  _b64_decode(data) {\n    // http://kevin.vanzonneveld.net\n    // +   original by: Tyler Akins (http://rumkin.com)\n    // +   improved by: Thunder.m\n    // +      input by: Aman Gupta\n    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n    // +   bugfixed by: Onno Marsman\n    // +   bugfixed by: Pellentesque Malesuada\n    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n    // +      input by: Brett Zamir (http://brett-zamir.me)\n    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n    // *     example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA==');\n    // *     returns 1: 'Kevin van Zonneveld'\n    // mozilla has this native\n    // - but breaks in 2.0.0.12!\n    //if (typeof this.window['btoa'] == 'function') {\n    //    return btoa(data);\n    //}\n    let b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" +\n              \"abcdefghijklmnopqrstuvwxyz0123456789+/=\";\n    let o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n      ac = 0,\n      dec = \"\",\n      tmp_arr = [];\n\n    if (!data) {\n      return data;\n    }\n\n    data += '';\n\n    do { // unpack four hexets into three octets using index points in b64\n      h1 = b64.indexOf(data.charAt(i++));\n      h2 = b64.indexOf(data.charAt(i++));\n      h3 = b64.indexOf(data.charAt(i++));\n      h4 = b64.indexOf(data.charAt(i++));\n\n      bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;\n\n      o1 = bits >> 16 & 0xff;\n      o2 = bits >> 8 & 0xff;\n      o3 = bits & 0xff;\n\n      if (h3 == 64) {\n        tmp_arr[ac++] = String.fromCharCode(o1);\n      } else if (h4 == 64) {\n        tmp_arr[ac++] = String.fromCharCode(o1, o2);\n      } else {\n        tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);\n      }\n    } while (i < data.length);\n\n    dec = tmp_arr.join('');\n\n    return dec;\n  }\n\n  /**\n   * The string representation of this value\n   * @return {String}\n   */\n  toString() {\n    return this.value;\n  }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\nconst DURATION_LETTERS = /([PDWHMTS]{1,1})/;\nconst DATA_PROPS_TO_COPY = [\"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"isNegative\"];\n\n/**\n * This class represents the \"duration\" value type, with various calculation\n * and manipulation methods.\n *\n * @memberof ICAL\n */\nclass Duration {\n  /**\n   * Returns a new ICAL.Duration instance from the passed seconds value.\n   *\n   * @param {Number} aSeconds       The seconds to create the instance from\n   * @return {Duration}             The newly created duration instance\n   */\n  static fromSeconds(aSeconds) {\n    return (new Duration()).fromSeconds(aSeconds);\n  }\n\n  /**\n   * Checks if the given string is an iCalendar duration value.\n   *\n   * @param {String} value      The raw ical value\n   * @return {Boolean}          True, if the given value is of the\n   *                              duration ical type\n   */\n  static isValueString(string) {\n    return (string[0] === 'P' || string[1] === 'P');\n  }\n\n  /**\n   * Creates a new {@link ICAL.Duration} instance from the passed string.\n   *\n   * @param {String} aStr       The string to parse\n   * @return {Duration}         The created duration instance\n   */\n  static fromString(aStr) {\n    let pos = 0;\n    let dict = Object.create(null);\n    let chunks = 0;\n\n    while ((pos = aStr.search(DURATION_LETTERS)) !== -1) {\n      let type = aStr[pos];\n      let numeric = aStr.slice(0, Math.max(0, pos));\n      aStr = aStr.slice(pos + 1);\n\n      chunks += parseDurationChunk(type, numeric, dict);\n    }\n\n    if (chunks < 2) {\n      // There must be at least a chunk with \"P\" and some unit chunk\n      throw new Error(\n        'invalid duration value: Not enough duration components in \"' + aStr + '\"'\n      );\n    }\n\n    return new Duration(dict);\n  }\n\n  /**\n   * Creates a new ICAL.Duration instance from the given data object.\n   *\n   * @param {Object} aData                An object with members of the duration\n   * @param {Number=} aData.weeks         Duration in weeks\n   * @param {Number=} aData.days          Duration in days\n   * @param {Number=} aData.hours         Duration in hours\n   * @param {Number=} aData.minutes       Duration in minutes\n   * @param {Number=} aData.seconds       Duration in seconds\n   * @param {Boolean=} aData.isNegative   If true, the duration is negative\n   * @return {Duration}                   The createad duration instance\n   */\n  static fromData(aData) {\n    return new Duration(aData);\n  }\n\n  /**\n   * Creates a new ICAL.Duration instance.\n   *\n   * @param {Object} data                 An object with members of the duration\n   * @param {Number=} data.weeks          Duration in weeks\n   * @param {Number=} data.days           Duration in days\n   * @param {Number=} data.hours          Duration in hours\n   * @param {Number=} data.minutes        Duration in minutes\n   * @param {Number=} data.seconds        Duration in seconds\n   * @param {Boolean=} data.isNegative    If true, the duration is negative\n   */\n  constructor(data) {\n    this.wrappedJSObject = this;\n    this.fromData(data);\n  }\n\n  /**\n   * The weeks in this duration\n   * @type {Number}\n   * @default 0\n   */\n  weeks = 0;\n\n  /**\n   * The days in this duration\n   * @type {Number}\n   * @default 0\n   */\n  days = 0;\n\n  /**\n   * The days in this duration\n   * @type {Number}\n   * @default 0\n   */\n  hours = 0;\n\n  /**\n   * The minutes in this duration\n   * @type {Number}\n   * @default 0\n   */\n  minutes = 0;\n\n  /**\n   * The seconds in this duration\n   * @type {Number}\n   * @default 0\n   */\n  seconds = 0;\n\n  /**\n   * The seconds in this duration\n   * @type {Boolean}\n   * @default false\n   */\n  isNegative = false;\n\n  /**\n   * The class identifier.\n   * @constant\n   * @type {String}\n   * @default \"icalduration\"\n   */\n  icalclass = \"icalduration\";\n\n  /**\n   * The type name, to be used in the jCal object.\n   * @constant\n   * @type {String}\n   * @default \"duration\"\n   */\n  icaltype = \"duration\";\n\n  /**\n   * Returns a clone of the duration object.\n   *\n   * @return {Duration}      The cloned object\n   */\n  clone() {\n    return Duration.fromData(this);\n  }\n\n  /**\n   * The duration value expressed as a number of seconds.\n   *\n   * @return {Number}             The duration value in seconds\n   */\n  toSeconds() {\n    let seconds = this.seconds + 60 * this.minutes + 3600 * this.hours +\n                  86400 * this.days + 7 * 86400 * this.weeks;\n    return (this.isNegative ? -seconds : seconds);\n  }\n\n  /**\n   * Reads the passed seconds value into this duration object. Afterwards,\n   * members like {@link ICAL.Duration#days days} and {@link ICAL.Duration#weeks weeks} will be set up\n   * accordingly.\n   *\n   * @param {Number} aSeconds     The duration value in seconds\n   * @return {Duration}           Returns this instance\n   */\n  fromSeconds(aSeconds) {\n    let secs = Math.abs(aSeconds);\n\n    this.isNegative = (aSeconds < 0);\n    this.days = trunc(secs / 86400);\n\n    // If we have a flat number of weeks, use them.\n    if (this.days % 7 == 0) {\n      this.weeks = this.days / 7;\n      this.days = 0;\n    } else {\n      this.weeks = 0;\n    }\n\n    secs -= (this.days + 7 * this.weeks) * 86400;\n\n    this.hours = trunc(secs / 3600);\n    secs -= this.hours * 3600;\n\n    this.minutes = trunc(secs / 60);\n    secs -= this.minutes * 60;\n\n    this.seconds = secs;\n    return this;\n  }\n\n  /**\n   * Sets up the current instance using members from the passed data object.\n   *\n   * @param {Object} aData                An object with members of the duration\n   * @param {Number=} aData.weeks         Duration in weeks\n   * @param {Number=} aData.days          Duration in days\n   * @param {Number=} aData.hours         Duration in hours\n   * @param {Number=} aData.minutes       Duration in minutes\n   * @param {Number=} aData.seconds       Duration in seconds\n   * @param {Boolean=} aData.isNegative   If true, the duration is negative\n   */\n  fromData(aData) {\n    for (let prop of DATA_PROPS_TO_COPY) {\n      if (aData && prop in aData) {\n        this[prop] = aData[prop];\n      } else {\n        this[prop] = 0;\n      }\n    }\n  }\n\n  /**\n   * Resets the duration instance to the default values, i.e. PT0S\n   */\n  reset() {\n    this.isNegative = false;\n    this.weeks = 0;\n    this.days = 0;\n    this.hours = 0;\n    this.minutes = 0;\n    this.seconds = 0;\n  }\n\n  /**\n   * Compares the duration instance with another one.\n   *\n   * @param {Duration} aOther             The instance to compare with\n   * @return {Number}                     -1, 0 or 1 for less/equal/greater\n   */\n  compare(aOther) {\n    let thisSeconds = this.toSeconds();\n    let otherSeconds = aOther.toSeconds();\n    return (thisSeconds > otherSeconds) - (thisSeconds < otherSeconds);\n  }\n\n  /**\n   * Normalizes the duration instance. For example, a duration with a value\n   * of 61 seconds will be normalized to 1 minute and 1 second.\n   */\n  normalize() {\n    this.fromSeconds(this.toSeconds());\n  }\n\n  /**\n   * The string representation of this duration.\n   * @return {String}\n   */\n  toString() {\n    if (this.toSeconds() == 0) {\n      return \"PT0S\";\n    } else {\n      let str = \"\";\n      if (this.isNegative) str += \"-\";\n      str += \"P\";\n      if (this.weeks) str += this.weeks + \"W\";\n      if (this.days) str += this.days + \"D\";\n\n      if (this.hours || this.minutes || this.seconds) {\n        str += \"T\";\n        if (this.hours) str += this.hours + \"H\";\n        if (this.minutes) str += this.minutes + \"M\";\n        if (this.seconds) str += this.seconds + \"S\";\n      }\n      return str;\n    }\n  }\n\n  /**\n   * The iCalendar string representation of this duration.\n   * @return {String}\n   */\n  toICALString() {\n    return this.toString();\n  }\n}\n\n/**\n * Internal helper function to handle a chunk of a duration.\n *\n * @private\n * @param {String} letter type of duration chunk\n * @param {String} number numeric value or -/+\n * @param {Object} dict target to assign values to\n */\nfunction parseDurationChunk(letter, number, object) {\n  let type;\n  switch (letter) {\n    case 'P':\n      if (number && number === '-') {\n        object.isNegative = true;\n      } else {\n        object.isNegative = false;\n      }\n      // period\n      break;\n    case 'D':\n      type = 'days';\n      break;\n    case 'W':\n      type = 'weeks';\n      break;\n    case 'H':\n      type = 'hours';\n      break;\n    case 'M':\n      type = 'minutes';\n      break;\n    case 'S':\n      type = 'seconds';\n      break;\n    default:\n      // Not a valid chunk\n      return 0;\n  }\n\n  if (type) {\n    if (!number && number !== 0) {\n      throw new Error(\n        'invalid duration value: Missing number before \"' + letter + '\"'\n      );\n    }\n    let num = parseInt(number, 10);\n    if (isStrictlyNaN(num)) {\n      throw new Error(\n        'invalid duration value: Invalid number \"' + number + '\" before \"' + letter + '\"'\n      );\n    }\n    object[type] = num;\n  }\n\n  return 1;\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n *\n * @ignore\n * @typedef {import(\"./types.js\").weekDay} weekDay\n * Imports the 'weekDay' type from the \"types.js\" module\n */\n\n/**\n * @classdesc\n * iCalendar Time representation (similar to JS Date object).  Fully\n * independent of system (OS) timezone / time.  Unlike JS Date, the month\n * January is 1, not zero.\n *\n * @example\n * var time = new ICAL.Time({\n *   year: 2012,\n *   month: 10,\n *   day: 11\n *   minute: 0,\n *   second: 0,\n *   isDate: false\n * });\n *\n *\n * @memberof ICAL\n*/\nclass Time {\n  static _dowCache = {};\n  static _wnCache = {};\n\n  /**\n   * Returns the days in the given month\n   *\n   * @param {Number} month      The month to check\n   * @param {Number} year       The year to check\n   * @return {Number}           The number of days in the month\n   */\n  static daysInMonth(month, year) {\n    let _daysInMonth = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n    let days = 30;\n\n    if (month < 1 || month > 12) return days;\n\n    days = _daysInMonth[month];\n\n    if (month == 2) {\n      days += Time.isLeapYear(year);\n    }\n\n    return days;\n  }\n\n  /**\n   * Checks if the year is a leap year\n   *\n   * @param {Number} year       The year to check\n   * @return {Boolean}          True, if the year is a leap year\n   */\n  static isLeapYear(year) {\n    if (year <= 1752) {\n      return ((year % 4) == 0);\n    } else {\n      return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0));\n    }\n  }\n\n  /**\n   * Create a new ICAL.Time from the day of year and year. The date is returned\n   * in floating timezone.\n   *\n   * @param {Number} aDayOfYear     The day of year\n   * @param {Number} aYear          The year to create the instance in\n   * @return {Time}                 The created instance with the calculated date\n   */\n  static fromDayOfYear(aDayOfYear, aYear) {\n    let year = aYear;\n    let doy = aDayOfYear;\n    let tt = new Time();\n    tt.auto_normalize = false;\n    let is_leap = (Time.isLeapYear(year) ? 1 : 0);\n\n    if (doy < 1) {\n      year--;\n      is_leap = (Time.isLeapYear(year) ? 1 : 0);\n      doy += Time.daysInYearPassedMonth[is_leap][12];\n      return Time.fromDayOfYear(doy, year);\n    } else if (doy > Time.daysInYearPassedMonth[is_leap][12]) {\n      is_leap = (Time.isLeapYear(year) ? 1 : 0);\n      doy -= Time.daysInYearPassedMonth[is_leap][12];\n      year++;\n      return Time.fromDayOfYear(doy, year);\n    }\n\n    tt.year = year;\n    tt.isDate = true;\n\n    for (let month = 11; month >= 0; month--) {\n      if (doy > Time.daysInYearPassedMonth[is_leap][month]) {\n        tt.month = month + 1;\n        tt.day = doy - Time.daysInYearPassedMonth[is_leap][month];\n        break;\n      }\n    }\n\n    tt.auto_normalize = true;\n    return tt;\n  }\n\n  /**\n   * Returns a new ICAL.Time instance from a date string, e.g 2015-01-02.\n   *\n   * @deprecated                Use {@link ICAL.Time.fromDateString} instead\n   * @param {String} str        The string to create from\n   * @return {Time}             The date/time instance\n   */\n  static fromStringv2(str) {\n    return new Time({\n      year: parseInt(str.slice(0, 4), 10),\n      month: parseInt(str.slice(5, 7), 10),\n      day: parseInt(str.slice(8, 10), 10),\n      isDate: true\n    });\n  }\n\n  /**\n   * Returns a new ICAL.Time instance from a date string, e.g 2015-01-02.\n   *\n   * @param {String} aValue     The string to create from\n   * @return {Time}             The date/time instance\n   */\n  static fromDateString(aValue) {\n    // Dates should have no timezone.\n    // Google likes to sometimes specify Z on dates\n    // we specifically ignore that to avoid issues.\n\n    // YYYY-MM-DD\n    // 2012-10-10\n    return new Time({\n      year: strictParseInt(aValue.slice(0, 4)),\n      month: strictParseInt(aValue.slice(5, 7)),\n      day: strictParseInt(aValue.slice(8, 10)),\n      isDate: true\n    });\n  }\n\n  /**\n   * Returns a new ICAL.Time instance from a date-time string, e.g\n   * 2015-01-02T03:04:05. If a property is specified, the timezone is set up\n   * from the property's TZID parameter.\n   *\n   * @param {String} aValue         The string to create from\n   * @param {Property=} prop        The property the date belongs to\n   * @return {Time}                 The date/time instance\n   */\n  static fromDateTimeString(aValue, prop) {\n    if (aValue.length < 19) {\n      throw new Error(\n        'invalid date-time value: \"' + aValue + '\"'\n      );\n    }\n\n    let zone;\n    let zoneId;\n\n    if (aValue[19] && aValue[19] === 'Z') {\n      zone = Timezone.utcTimezone;\n    } else if (prop) {\n      zoneId = prop.getParameter('tzid');\n\n      if (prop.parent) {\n        if (prop.parent.name === 'standard' || prop.parent.name === 'daylight') {\n          // Per RFC 5545 3.8.2.4 and 3.8.2.2, start/end date-times within\n          // these components MUST be specified in local time.\n          zone = Timezone.localTimezone;\n        } else if (zoneId) {\n          // If the desired time zone is defined within the component tree,\n          // fetch its definition and prefer that.\n          zone = prop.parent.getTimeZoneByID(zoneId);\n        }\n      }\n    }\n\n    const timeData = {\n      year: strictParseInt(aValue.slice(0, 4)),\n      month: strictParseInt(aValue.slice(5, 7)),\n      day: strictParseInt(aValue.slice(8, 10)),\n      hour: strictParseInt(aValue.slice(11, 13)),\n      minute: strictParseInt(aValue.slice(14, 16)),\n      second: strictParseInt(aValue.slice(17, 19)),\n    };\n\n    // Although RFC 5545 requires that all TZIDs used within a file have a\n    // corresponding time zone definition, we may not be parsing the full file\n    // or we may be dealing with a non-compliant file; in either case, we can\n    // check our own time zone service for the TZID in a last-ditch effort.\n    if (zoneId && !zone) {\n      timeData.timezone = zoneId;\n    }\n\n    // 2012-10-10T10:10:10(Z)?\n    return new Time(timeData, zone);\n  }\n\n  /**\n   * Returns a new ICAL.Time instance from a date or date-time string,\n   *\n   * @param {String} aValue         The string to create from\n   * @param {Property=} prop        The property the date belongs to\n   * @return {Time}                 The date/time instance\n   */\n  static fromString(aValue, aProperty) {\n    if (aValue.length > 10) {\n      return Time.fromDateTimeString(aValue, aProperty);\n    } else {\n      return Time.fromDateString(aValue);\n    }\n  }\n\n  /**\n   * Creates a new ICAL.Time instance from the given Javascript Date.\n   *\n   * @param {?Date} aDate             The Javascript Date to read, or null to reset\n   * @param {Boolean} [useUTC=false]  If true, the UTC values of the date will be used\n   */\n  static fromJSDate(aDate, useUTC) {\n    let tt = new Time();\n    return tt.fromJSDate(aDate, useUTC);\n  }\n\n  /**\n   * Creates a new ICAL.Time instance from the the passed data object.\n   *\n   * @param {Object} aData            Time initialization\n   * @param {Number=} aData.year      The year for this date\n   * @param {Number=} aData.month     The month for this date\n   * @param {Number=} aData.day       The day for this date\n   * @param {Number=} aData.hour      The hour for this date\n   * @param {Number=} aData.minute    The minute for this date\n   * @param {Number=} aData.second    The second for this date\n   * @param {Boolean=} aData.isDate   If true, the instance represents a date\n   *                                    (as opposed to a date-time)\n   * @param {Timezone=} aZone         Timezone this position occurs in\n   */\n  static fromData = function fromData(aData, aZone) {\n    let t = new Time();\n    return t.fromData(aData, aZone);\n  };\n\n  /**\n   * Creates a new ICAL.Time instance from the current moment.\n   * The instance is “floating” - has no timezone relation.\n   * To create an instance considering the time zone, call\n   * ICAL.Time.fromJSDate(new Date(), true)\n   * @return {Time}\n   */\n  static now() {\n    return Time.fromJSDate(new Date(), false);\n  }\n\n  /**\n   * Returns the date on which ISO week number 1 starts.\n   *\n   * @see Time#weekNumber\n   * @param {Number} aYear                  The year to search in\n   * @param {weekDay=} aWeekStart           The week start weekday, used for calculation.\n   * @return {Time}                         The date on which week number 1 starts\n   */\n  static weekOneStarts(aYear, aWeekStart) {\n    let t = Time.fromData({\n      year: aYear,\n      month: 1,\n      day: 1,\n      isDate: true\n    });\n\n    let dow = t.dayOfWeek();\n    let wkst = aWeekStart || Time.DEFAULT_WEEK_START;\n    if (dow > Time.THURSDAY) {\n      t.day += 7;\n    }\n    if (wkst > Time.THURSDAY) {\n      t.day -= 7;\n    }\n\n    t.day -= dow - wkst;\n\n    return t;\n  }\n\n  /**\n   * Get the dominical letter for the given year. Letters range from A - G for\n   * common years, and AG to GF for leap years.\n   *\n   * @param {Number} yr           The year to retrieve the letter for\n   * @return {String}             The dominical letter.\n   */\n  static getDominicalLetter(yr) {\n    let LTRS = \"GFEDCBA\";\n    let dom = (yr + (yr / 4 | 0) + (yr / 400 | 0) - (yr / 100 | 0) - 1) % 7;\n    let isLeap = Time.isLeapYear(yr);\n    if (isLeap) {\n      return LTRS[(dom + 6) % 7] + LTRS[dom];\n    } else {\n      return LTRS[dom];\n    }\n  }\n\n  static #epochTime = null;\n  /**\n   * January 1st, 1970 as an ICAL.Time.\n   * @type {Time}\n   * @constant\n   * @instance\n   */\n  static get epochTime() {\n    if (!this.#epochTime) {\n      this.#epochTime = Time.fromData({\n        year: 1970,\n        month: 1,\n        day: 1,\n        hour: 0,\n        minute: 0,\n        second: 0,\n        isDate: false,\n        timezone: \"Z\"\n      });\n    }\n    return this.#epochTime;\n  }\n\n  static _cmp_attr(a, b, attr) {\n    if (a[attr] > b[attr]) return 1;\n    if (a[attr] < b[attr]) return -1;\n    return 0;\n  }\n\n  /**\n   * The days that have passed in the year after a given month. The array has\n   * two members, one being an array of passed days for non-leap years, the\n   * other analog for leap years.\n   * @example\n   * var isLeapYear = ICAL.Time.isLeapYear(year);\n   * var passedDays = ICAL.Time.daysInYearPassedMonth[isLeapYear][month];\n   * @type {Array.<Array.<Number>>}\n   */\n  static daysInYearPassedMonth = [\n    [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365],\n    [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]\n  ];\n\n  static SUNDAY = 1;\n  static MONDAY = 2;\n  static TUESDAY = 3;\n  static WEDNESDAY = 4;\n  static THURSDAY = 5;\n  static FRIDAY = 6;\n  static SATURDAY = 7;\n\n  /**\n   * The default weekday for the WKST part.\n   * @constant\n   * @default ICAL.Time.MONDAY\n   */\n  static DEFAULT_WEEK_START = 2; // MONDAY\n\n  /**\n   * Creates a new ICAL.Time instance.\n   *\n   * @param {Object} data           Time initialization\n   * @param {Number=} data.year     The year for this date\n   * @param {Number=} data.month    The month for this date\n   * @param {Number=} data.day      The day for this date\n   * @param {Number=} data.hour     The hour for this date\n   * @param {Number=} data.minute   The minute for this date\n   * @param {Number=} data.second   The second for this date\n   * @param {Boolean=} data.isDate  If true, the instance represents a date (as\n   *                                  opposed to a date-time)\n   * @param {Timezone} zone         timezone this position occurs in\n   */\n  constructor(data, zone) {\n    this.wrappedJSObject = this;\n    let time = this._time = Object.create(null);\n\n    /* time defaults */\n    time.year = 0;\n    time.month = 1;\n    time.day = 1;\n    time.hour = 0;\n    time.minute = 0;\n    time.second = 0;\n    time.isDate = false;\n\n    this.fromData(data, zone);\n  }\n\n  /**\n   * The class identifier.\n   * @constant\n   * @type {String}\n   * @default \"icaltime\"\n   */\n  icalclass = \"icaltime\";\n  _cachedUnixTime = null;\n\n  /**\n   * The type name, to be used in the jCal object. This value may change and\n   * is strictly defined by the {@link ICAL.Time#isDate isDate} member.\n   * @type {String}\n   * @default \"date-time\"\n   */\n  get icaltype() {\n    return this.isDate ? 'date' : 'date-time';\n  }\n\n  /**\n   * The timezone for this time.\n   * @type {Timezone}\n   */\n  zone = null;\n\n  /**\n   * Internal uses to indicate that a change has been made and the next read\n   * operation must attempt to normalize the value (for example changing the\n   * day to 33).\n   *\n   * @type {Boolean}\n   * @private\n   */\n  _pendingNormalization = false;\n\n  /**\n   * Returns a clone of the time object.\n   *\n   * @return {Time}              The cloned object\n   */\n  clone() {\n    return new Time(this._time, this.zone);\n  }\n\n  /**\n   * Reset the time instance to epoch time\n   */\n  reset() {\n    this.fromData(Time.epochTime);\n    this.zone = Timezone.utcTimezone;\n  }\n\n  /**\n   * Reset the time instance to the given date/time values.\n   *\n   * @param {Number} year             The year to set\n   * @param {Number} month            The month to set\n   * @param {Number} day              The day to set\n   * @param {Number} hour             The hour to set\n   * @param {Number} minute           The minute to set\n   * @param {Number} second           The second to set\n   * @param {Timezone} timezone       The timezone to set\n   */\n  resetTo(year, month, day, hour, minute, second, timezone) {\n    this.fromData({\n      year: year,\n      month: month,\n      day: day,\n      hour: hour,\n      minute: minute,\n      second: second,\n      zone: timezone\n    });\n  }\n\n  /**\n   * Set up the current instance from the Javascript date value.\n   *\n   * @param {?Date} aDate             The Javascript Date to read, or null to reset\n   * @param {Boolean} [useUTC=false]  If true, the UTC values of the date will be used\n   */\n  fromJSDate(aDate, useUTC) {\n    if (!aDate) {\n      this.reset();\n    } else {\n      if (useUTC) {\n        this.zone = Timezone.utcTimezone;\n        this.year = aDate.getUTCFullYear();\n        this.month = aDate.getUTCMonth() + 1;\n        this.day = aDate.getUTCDate();\n        this.hour = aDate.getUTCHours();\n        this.minute = aDate.getUTCMinutes();\n        this.second = aDate.getUTCSeconds();\n      } else {\n        this.zone = Timezone.localTimezone;\n        this.year = aDate.getFullYear();\n        this.month = aDate.getMonth() + 1;\n        this.day = aDate.getDate();\n        this.hour = aDate.getHours();\n        this.minute = aDate.getMinutes();\n        this.second = aDate.getSeconds();\n      }\n    }\n    this._cachedUnixTime = null;\n    return this;\n  }\n\n  /**\n   * Sets up the current instance using members from the passed data object.\n   *\n   * @param {Object} aData            Time initialization\n   * @param {Number=} aData.year      The year for this date\n   * @param {Number=} aData.month     The month for this date\n   * @param {Number=} aData.day       The day for this date\n   * @param {Number=} aData.hour      The hour for this date\n   * @param {Number=} aData.minute    The minute for this date\n   * @param {Number=} aData.second    The second for this date\n   * @param {Boolean=} aData.isDate   If true, the instance represents a date\n   *                                    (as opposed to a date-time)\n   * @param {Timezone=} aZone         Timezone this position occurs in\n   */\n  fromData(aData, aZone) {\n    if (aData) {\n      for (let [key, value] of Object.entries(aData)) {\n          // ical type cannot be set\n          if (key === 'icaltype') continue;\n        this[key] = value;\n      }\n    }\n\n    if (aZone) {\n      this.zone = aZone;\n    }\n\n    if (aData && !(\"isDate\" in aData)) {\n      this.isDate = !(\"hour\" in aData);\n    } else if (aData && (\"isDate\" in aData)) {\n      this.isDate = aData.isDate;\n    }\n\n    if (aData && \"timezone\" in aData) {\n      let zone = TimezoneService.get(\n        aData.timezone\n      );\n\n      this.zone = zone || Timezone.localTimezone;\n    }\n\n    if (aData && \"zone\" in aData) {\n      this.zone = aData.zone;\n    }\n\n    if (!this.zone) {\n      this.zone = Timezone.localTimezone;\n    }\n\n    this._cachedUnixTime = null;\n    return this;\n  }\n\n  /**\n   * Calculate the day of week.\n   * @param {weekDay=} aWeekStart\n   *        The week start weekday, defaults to SUNDAY\n   * @return {weekDay}\n   */\n  dayOfWeek(aWeekStart) {\n    let firstDow = aWeekStart || Time.SUNDAY;\n    let dowCacheKey = (this.year << 12) + (this.month << 8) + (this.day << 3) + firstDow;\n    if (dowCacheKey in Time._dowCache) {\n      return Time._dowCache[dowCacheKey];\n    }\n\n    // Using Zeller's algorithm\n    let q = this.day;\n    let m = this.month + (this.month < 3 ? 12 : 0);\n    let Y = this.year - (this.month < 3 ? 1 : 0);\n\n    let h = (q + Y + trunc(((m + 1) * 26) / 10) + trunc(Y / 4));\n    { // eslint-disable-line no-constant-condition\n      h += trunc(Y / 100) * 6 + trunc(Y / 400);\n    }\n\n    // Normalize to 1 = wkst\n    h = ((h + 7 - firstDow) % 7) + 1;\n    Time._dowCache[dowCacheKey] = h;\n    return h;\n  }\n\n  /**\n   * Calculate the day of year.\n   * @return {Number}\n   */\n  dayOfYear() {\n    let is_leap = (Time.isLeapYear(this.year) ? 1 : 0);\n    let diypm = Time.daysInYearPassedMonth;\n    return diypm[is_leap][this.month - 1] + this.day;\n  }\n\n  /**\n   * Returns a copy of the current date/time, rewound to the start of the\n   * week. The resulting ICAL.Time instance is of icaltype date, even if this\n   * is a date-time.\n   *\n   * @param {weekDay=} aWeekStart\n   *        The week start weekday, defaults to SUNDAY\n   * @return {Time}      The start of the week (cloned)\n   */\n  startOfWeek(aWeekStart) {\n    let firstDow = aWeekStart || Time.SUNDAY;\n    let result = this.clone();\n    result.day -= ((this.dayOfWeek() + 7 - firstDow) % 7);\n    result.isDate = true;\n    result.hour = 0;\n    result.minute = 0;\n    result.second = 0;\n    return result;\n  }\n\n  /**\n   * Returns a copy of the current date/time, shifted to the end of the week.\n   * The resulting ICAL.Time instance is of icaltype date, even if this is a\n   * date-time.\n   *\n   * @param {weekDay=} aWeekStart\n   *        The week start weekday, defaults to SUNDAY\n   * @return {Time}      The end of the week (cloned)\n   */\n  endOfWeek(aWeekStart) {\n    let firstDow = aWeekStart || Time.SUNDAY;\n    let result = this.clone();\n    result.day += (7 - this.dayOfWeek() + firstDow - Time.SUNDAY) % 7;\n    result.isDate = true;\n    result.hour = 0;\n    result.minute = 0;\n    result.second = 0;\n    return result;\n  }\n\n  /**\n   * Returns a copy of the current date/time, rewound to the start of the\n   * month. The resulting ICAL.Time instance is of icaltype date, even if\n   * this is a date-time.\n   *\n   * @return {Time}      The start of the month (cloned)\n   */\n  startOfMonth() {\n    let result = this.clone();\n    result.day = 1;\n    result.isDate = true;\n    result.hour = 0;\n    result.minute = 0;\n    result.second = 0;\n    return result;\n  }\n\n  /**\n   * Returns a copy of the current date/time, shifted to the end of the\n   * month.  The resulting ICAL.Time instance is of icaltype date, even if\n   * this is a date-time.\n   *\n   * @return {Time}      The end of the month (cloned)\n   */\n  endOfMonth() {\n    let result = this.clone();\n    result.day = Time.daysInMonth(result.month, result.year);\n    result.isDate = true;\n    result.hour = 0;\n    result.minute = 0;\n    result.second = 0;\n    return result;\n  }\n\n  /**\n   * Returns a copy of the current date/time, rewound to the start of the\n   * year. The resulting ICAL.Time instance is of icaltype date, even if\n   * this is a date-time.\n   *\n   * @return {Time}      The start of the year (cloned)\n   */\n  startOfYear() {\n    let result = this.clone();\n    result.day = 1;\n    result.month = 1;\n    result.isDate = true;\n    result.hour = 0;\n    result.minute = 0;\n    result.second = 0;\n    return result;\n  }\n\n  /**\n   * Returns a copy of the current date/time, shifted to the end of the\n   * year.  The resulting ICAL.Time instance is of icaltype date, even if\n   * this is a date-time.\n   *\n   * @return {Time}      The end of the year (cloned)\n   */\n  endOfYear() {\n    let result = this.clone();\n    result.day = 31;\n    result.month = 12;\n    result.isDate = true;\n    result.hour = 0;\n    result.minute = 0;\n    result.second = 0;\n    return result;\n  }\n\n  /**\n   * First calculates the start of the week, then returns the day of year for\n   * this date. If the day falls into the previous year, the day is zero or negative.\n   *\n   * @param {weekDay=} aFirstDayOfWeek\n   *        The week start weekday, defaults to SUNDAY\n   * @return {Number}     The calculated day of year\n   */\n  startDoyWeek(aFirstDayOfWeek) {\n    let firstDow = aFirstDayOfWeek || Time.SUNDAY;\n    let delta = this.dayOfWeek() - firstDow;\n    if (delta < 0) delta += 7;\n    return this.dayOfYear() - delta;\n  }\n\n  /**\n   * Get the dominical letter for the current year. Letters range from A - G\n   * for common years, and AG to GF for leap years.\n   *\n   * @param {Number} yr           The year to retrieve the letter for\n   * @return {String}             The dominical letter.\n   */\n  getDominicalLetter() {\n    return Time.getDominicalLetter(this.year);\n  }\n\n  /**\n   * Finds the nthWeekDay relative to the current month (not day).  The\n   * returned value is a day relative the month that this month belongs to so\n   * 1 would indicate the first of the month and 40 would indicate a day in\n   * the following month.\n   *\n   * @param {Number} aDayOfWeek   Day of the week see the day name constants\n   * @param {Number} aPos         Nth occurrence of a given week day values\n   *        of 1 and 0 both indicate the first weekday of that type. aPos may\n   *        be either positive or negative\n   *\n   * @return {Number} numeric value indicating a day relative\n   *                   to the current month of this time object\n   */\n  nthWeekDay(aDayOfWeek, aPos) {\n    let daysInMonth = Time.daysInMonth(this.month, this.year);\n    let weekday;\n    let pos = aPos;\n\n    let start = 0;\n\n    let otherDay = this.clone();\n\n    if (pos >= 0) {\n      otherDay.day = 1;\n\n      // because 0 means no position has been given\n      // 1 and 0 indicate the same day.\n      if (pos != 0) {\n        // remove the extra numeric value\n        pos--;\n      }\n\n      // set current start offset to current day.\n      start = otherDay.day;\n\n      // find the current day of week\n      let startDow = otherDay.dayOfWeek();\n\n      // calculate the difference between current\n      // day of the week and desired day of the week\n      let offset = aDayOfWeek - startDow;\n\n\n      // if the offset goes into the past\n      // week we add 7 so it goes into the next\n      // week. We only want to go forward in time here.\n      if (offset < 0)\n        // this is really important otherwise we would\n        // end up with dates from in the past.\n        offset += 7;\n\n      // add offset to start so start is the same\n      // day of the week as the desired day of week.\n      start += offset;\n\n      // because we are going to add (and multiply)\n      // the numeric value of the day we subtract it\n      // from the start position so not to add it twice.\n      start -= aDayOfWeek;\n\n      // set week day\n      weekday = aDayOfWeek;\n    } else {\n\n      // then we set it to the last day in the current month\n      otherDay.day = daysInMonth;\n\n      // find the ends weekday\n      let endDow = otherDay.dayOfWeek();\n\n      pos++;\n\n      weekday = (endDow - aDayOfWeek);\n\n      if (weekday < 0) {\n        weekday += 7;\n      }\n\n      weekday = daysInMonth - weekday;\n    }\n\n    weekday += pos * 7;\n\n    return start + weekday;\n  }\n\n  /**\n   * Checks if current time is the nth weekday, relative to the current\n   * month.  Will always return false when rule resolves outside of current\n   * month.\n   *\n   * @param {weekDay} aDayOfWeek                 Day of week to check\n   * @param {Number} aPos                        Relative position\n   * @return {Boolean}                           True, if it is the nth weekday\n   */\n  isNthWeekDay(aDayOfWeek, aPos) {\n    let dow = this.dayOfWeek();\n\n    if (aPos === 0 && dow === aDayOfWeek) {\n      return true;\n    }\n\n    // get pos\n    let day = this.nthWeekDay(aDayOfWeek, aPos);\n\n    if (day === this.day) {\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Calculates the ISO 8601 week number. The first week of a year is the\n   * week that contains the first Thursday. The year can have 53 weeks, if\n   * January 1st is a Friday.\n   *\n   * Note there are regions where the first week of the year is the one that\n   * starts on January 1st, which may offset the week number. Also, if a\n   * different week start is specified, this will also affect the week\n   * number.\n   *\n   * @see Time.weekOneStarts\n   * @param {weekDay} aWeekStart                  The weekday the week starts with\n   * @return {Number}                             The ISO week number\n   */\n  weekNumber(aWeekStart) {\n    let wnCacheKey = (this.year << 12) + (this.month << 8) + (this.day << 3) + aWeekStart;\n    if (wnCacheKey in Time._wnCache) {\n      return Time._wnCache[wnCacheKey];\n    }\n    // This function courtesty of Julian Bucknall, published under the MIT license\n    // http://www.boyet.com/articles/publishedarticles/calculatingtheisoweeknumb.html\n    // plus some fixes to be able to use different week starts.\n    let week1;\n\n    let dt = this.clone();\n    dt.isDate = true;\n    let isoyear = this.year;\n\n    if (dt.month == 12 && dt.day > 25) {\n      week1 = Time.weekOneStarts(isoyear + 1, aWeekStart);\n      if (dt.compare(week1) < 0) {\n        week1 = Time.weekOneStarts(isoyear, aWeekStart);\n      } else {\n        isoyear++;\n      }\n    } else {\n      week1 = Time.weekOneStarts(isoyear, aWeekStart);\n      if (dt.compare(week1) < 0) {\n        week1 = Time.weekOneStarts(--isoyear, aWeekStart);\n      }\n    }\n\n    let daysBetween = (dt.subtractDate(week1).toSeconds() / 86400);\n    let answer = trunc(daysBetween / 7) + 1;\n    Time._wnCache[wnCacheKey] = answer;\n    return answer;\n  }\n\n  /**\n   * Adds the duration to the current time. The instance is modified in\n   * place.\n   *\n   * @param {Duration} aDuration         The duration to add\n   */\n  addDuration(aDuration) {\n    let mult = (aDuration.isNegative ? -1 : 1);\n\n    // because of the duration optimizations it is much\n    // more efficient to grab all the values up front\n    // then set them directly (which will avoid a normalization call).\n    // So we don't actually normalize until we need it.\n    let second = this.second;\n    let minute = this.minute;\n    let hour = this.hour;\n    let day = this.day;\n\n    second += mult * aDuration.seconds;\n    minute += mult * aDuration.minutes;\n    hour += mult * aDuration.hours;\n    day += mult * aDuration.days;\n    day += mult * 7 * aDuration.weeks;\n\n    this.second = second;\n    this.minute = minute;\n    this.hour = hour;\n    this.day = day;\n\n    this._cachedUnixTime = null;\n  }\n\n  /**\n   * Subtract the date details (_excluding_ timezone).  Useful for finding\n   * the relative difference between two time objects excluding their\n   * timezone differences.\n   *\n   * @param {Time} aDate     The date to subtract\n   * @return {Duration}      The difference as a duration\n   */\n  subtractDate(aDate) {\n    let unixTime = this.toUnixTime() + this.utcOffset();\n    let other = aDate.toUnixTime() + aDate.utcOffset();\n    return Duration.fromSeconds(unixTime - other);\n  }\n\n  /**\n   * Subtract the date details, taking timezones into account.\n   *\n   * @param {Time} aDate  The date to subtract\n   * @return {Duration}   The difference in duration\n   */\n  subtractDateTz(aDate) {\n    let unixTime = this.toUnixTime();\n    let other = aDate.toUnixTime();\n    return Duration.fromSeconds(unixTime - other);\n  }\n\n  /**\n   * Compares the ICAL.Time instance with another one.\n   *\n   * @param {Duration} aOther        The instance to compare with\n   * @return {Number}                     -1, 0 or 1 for less/equal/greater\n   */\n  compare(other) {\n    let a = this.toUnixTime();\n    let b = other.toUnixTime();\n\n    if (a > b) return 1;\n    if (b > a) return -1;\n    return 0;\n  }\n\n  /**\n   * Compares only the date part of this instance with another one.\n   *\n   * @param {Duration} other              The instance to compare with\n   * @param {Timezone} tz                 The timezone to compare in\n   * @return {Number}                     -1, 0 or 1 for less/equal/greater\n   */\n  compareDateOnlyTz(other, tz) {\n    let a = this.convertToZone(tz);\n    let b = other.convertToZone(tz);\n    let rc = 0;\n\n    if ((rc = Time._cmp_attr(a, b, \"year\")) != 0) return rc;\n    if ((rc = Time._cmp_attr(a, b, \"month\")) != 0) return rc;\n    if ((rc = Time._cmp_attr(a, b, \"day\")) != 0) return rc;\n\n    return rc;\n  }\n\n  /**\n   * Convert the instance into another timezone. The returned ICAL.Time\n   * instance is always a copy.\n   *\n   * @param {Timezone} zone      The zone to convert to\n   * @return {Time}              The copy, converted to the zone\n   */\n  convertToZone(zone) {\n    let copy = this.clone();\n    let zone_equals = (this.zone.tzid == zone.tzid);\n\n    if (!this.isDate && !zone_equals) {\n      Timezone.convert_time(copy, this.zone, zone);\n    }\n\n    copy.zone = zone;\n    return copy;\n  }\n\n  /**\n   * Calculates the UTC offset of the current date/time in the timezone it is\n   * in.\n   *\n   * @return {Number}     UTC offset in seconds\n   */\n  utcOffset() {\n    if (this.zone == Timezone.localTimezone ||\n        this.zone == Timezone.utcTimezone) {\n      return 0;\n    } else {\n      return this.zone.utcOffset(this);\n    }\n  }\n\n  /**\n   * Returns an RFC 5545 compliant ical representation of this object.\n   *\n   * @return {String} ical date/date-time\n   */\n  toICALString() {\n    let string = this.toString();\n\n    if (string.length > 10) {\n      return design$1.icalendar.value['date-time'].toICAL(string);\n    } else {\n      return design$1.icalendar.value.date.toICAL(string);\n    }\n  }\n\n  /**\n   * The string representation of this date/time, in jCal form\n   * (including : and - separators).\n   * @return {String}\n   */\n  toString() {\n    let result = this.year + '-' +\n                 pad2(this.month) + '-' +\n                 pad2(this.day);\n\n    if (!this.isDate) {\n        result += 'T' + pad2(this.hour) + ':' +\n                  pad2(this.minute) + ':' +\n                  pad2(this.second);\n\n      if (this.zone === Timezone.utcTimezone) {\n        result += 'Z';\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Converts the current instance to a Javascript date\n   * @return {Date}\n   */\n  toJSDate() {\n    if (this.zone == Timezone.localTimezone) {\n      if (this.isDate) {\n        return new Date(this.year, this.month - 1, this.day);\n      } else {\n        return new Date(this.year, this.month - 1, this.day,\n                        this.hour, this.minute, this.second, 0);\n      }\n    } else {\n      return new Date(this.toUnixTime() * 1000);\n    }\n  }\n\n  _normalize() {\n    if (this._time.isDate) {\n      this._time.hour = 0;\n      this._time.minute = 0;\n      this._time.second = 0;\n    }\n    this.adjust(0, 0, 0, 0);\n\n    return this;\n  }\n\n  /**\n   * Adjust the date/time by the given offset\n   *\n   * @param {Number} aExtraDays       The extra amount of days\n   * @param {Number} aExtraHours      The extra amount of hours\n   * @param {Number} aExtraMinutes    The extra amount of minutes\n   * @param {Number} aExtraSeconds    The extra amount of seconds\n   * @param {Number=} aTime           The time to adjust, defaults to the\n   *                                    current instance.\n   */\n  adjust(aExtraDays, aExtraHours, aExtraMinutes, aExtraSeconds, aTime) {\n\n    let minutesOverflow, hoursOverflow,\n        daysOverflow = 0, yearsOverflow = 0;\n\n    let second, minute, hour, day;\n    let daysInMonth;\n\n    let time = aTime || this._time;\n\n    if (!time.isDate) {\n      second = time.second + aExtraSeconds;\n      time.second = second % 60;\n      minutesOverflow = trunc(second / 60);\n      if (time.second < 0) {\n        time.second += 60;\n        minutesOverflow--;\n      }\n\n      minute = time.minute + aExtraMinutes + minutesOverflow;\n      time.minute = minute % 60;\n      hoursOverflow = trunc(minute / 60);\n      if (time.minute < 0) {\n        time.minute += 60;\n        hoursOverflow--;\n      }\n\n      hour = time.hour + aExtraHours + hoursOverflow;\n\n      time.hour = hour % 24;\n      daysOverflow = trunc(hour / 24);\n      if (time.hour < 0) {\n        time.hour += 24;\n        daysOverflow--;\n      }\n    }\n\n\n    // Adjust month and year first, because we need to know what month the day\n    // is in before adjusting it.\n    if (time.month > 12) {\n      yearsOverflow = trunc((time.month - 1) / 12);\n    } else if (time.month < 1) {\n      yearsOverflow = trunc(time.month / 12) - 1;\n    }\n\n    time.year += yearsOverflow;\n    time.month -= 12 * yearsOverflow;\n\n    // Now take care of the days (and adjust month if needed)\n    day = time.day + aExtraDays + daysOverflow;\n\n    if (day > 0) {\n      for (;;) {\n        daysInMonth = Time.daysInMonth(time.month, time.year);\n        if (day <= daysInMonth) {\n          break;\n        }\n\n        time.month++;\n        if (time.month > 12) {\n          time.year++;\n          time.month = 1;\n        }\n\n        day -= daysInMonth;\n      }\n    } else {\n      while (day <= 0) {\n        if (time.month == 1) {\n          time.year--;\n          time.month = 12;\n        } else {\n          time.month--;\n        }\n\n        day += Time.daysInMonth(time.month, time.year);\n      }\n    }\n\n    time.day = day;\n\n    this._cachedUnixTime = null;\n    return this;\n  }\n\n  /**\n   * Sets up the current instance from unix time, the number of seconds since\n   * January 1st, 1970.\n   *\n   * @param {Number} seconds      The seconds to set up with\n   */\n  fromUnixTime(seconds) {\n    this.zone = Timezone.utcTimezone;\n    // We could use `fromJSDate` here, but this is about twice as fast.\n    // We could also clone `epochTime` and use `adjust` for a more\n    // ical.js-centric approach, but this is about 100 times as fast.\n    let date = new Date(seconds * 1000);\n    this.year = date.getUTCFullYear();\n    this.month = date.getUTCMonth() + 1;\n    this.day = date.getUTCDate();\n    if (this._time.isDate) {\n      this.hour = 0;\n      this.minute = 0;\n      this.second = 0;\n    } else {\n      this.hour = date.getUTCHours();\n      this.minute = date.getUTCMinutes();\n      this.second = date.getUTCSeconds();\n    }\n\n    this._cachedUnixTime = null;\n  }\n\n  /**\n   * Converts the current instance to seconds since January 1st 1970.\n   *\n   * @return {Number}         Seconds since 1970\n   */\n  toUnixTime() {\n    if (this._cachedUnixTime !== null) {\n      return this._cachedUnixTime;\n    }\n    let offset = this.utcOffset();\n\n    // we use the offset trick to ensure\n    // that we are getting the actual UTC time\n    let ms = Date.UTC(\n      this.year,\n      this.month - 1,\n      this.day,\n      this.hour,\n      this.minute,\n      this.second - offset\n    );\n\n    // seconds\n    this._cachedUnixTime = ms / 1000;\n    return this._cachedUnixTime;\n  }\n\n  /**\n   * Converts time to into Object which can be serialized then re-created\n   * using the constructor.\n   *\n   * @example\n   * // toJSON will automatically be called\n   * var json = JSON.stringify(mytime);\n   *\n   * var deserialized = JSON.parse(json);\n   *\n   * var time = new ICAL.Time(deserialized);\n   *\n   * @return {Object}\n   */\n  toJSON() {\n    let copy = [\n      'year',\n      'month',\n      'day',\n      'hour',\n      'minute',\n      'second',\n      'isDate'\n    ];\n\n    let result = Object.create(null);\n\n    let i = 0;\n    let len = copy.length;\n    let prop;\n\n    for (; i < len; i++) {\n      prop = copy[i];\n      result[prop] = this[prop];\n    }\n\n    if (this.zone) {\n      result.timezone = this.zone.tzid;\n    }\n\n    return result;\n  }\n}\n\n(function setupNormalizeAttributes() {\n  // This needs to run before any instances are created!\n  function defineAttr(attr) {\n    Object.defineProperty(Time.prototype, attr, {\n      get: function getTimeAttr() {\n        if (this._pendingNormalization) {\n          this._normalize();\n          this._pendingNormalization = false;\n        }\n\n        return this._time[attr];\n      },\n      set: function setTimeAttr(val) {\n        // Check if isDate will be set and if was not set to normalize date.\n        // This avoids losing days when seconds, minutes and hours are zeroed\n        // what normalize will do when time is a date.\n        if (attr === \"isDate\" && val && !this._time.isDate) {\n          this.adjust(0, 0, 0, 0);\n        }\n        this._cachedUnixTime = null;\n        this._pendingNormalization = true;\n        this._time[attr] = val;\n      }\n    });\n\n  }\n\n    defineAttr(\"year\");\n    defineAttr(\"month\");\n    defineAttr(\"day\");\n    defineAttr(\"hour\");\n    defineAttr(\"minute\");\n    defineAttr(\"second\");\n    defineAttr(\"isDate\");\n})();\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n *\n * @ignore\n * @typedef {import(\"./types.js\").parserState} parserState\n * Imports the 'parserState' type from the \"types.js\" module\n * @typedef {import(\"./types.js\").designSet} designSet\n * Imports the 'designSet' type from the \"types.js\" module\n */\n\nconst CHAR = /[^ \\t]/;\nconst VALUE_DELIMITER = ':';\nconst PARAM_DELIMITER = ';';\nconst PARAM_NAME_DELIMITER = '=';\nconst DEFAULT_VALUE_TYPE$1 = 'unknown';\nconst DEFAULT_PARAM_TYPE = 'text';\nconst RFC6868_REPLACE_MAP$1 = { \"^'\": '\"', \"^n\": \"\\n\", \"^^\": \"^\" };\n\n/**\n * Parses iCalendar or vCard data into a raw jCal object. Consult\n * documentation on the {@tutorial layers|layers of parsing} for more\n * details.\n *\n * @function ICAL.parse\n * @memberof ICAL\n * @variation function\n * @todo Fix the API to be more clear on the return type\n * @param {String} input      The string data to parse\n * @return {Object|Object[]}  A single jCal object, or an array thereof\n */\nfunction parse(input) {\n  let state = {};\n  let root = state.component = [];\n\n  state.stack = [root];\n\n  parse._eachLine(input, function(err, line) {\n    parse._handleContentLine(line, state);\n  });\n\n\n  // when there are still items on the stack\n  // throw a fatal error, a component was not closed\n  // correctly in that case.\n  if (state.stack.length > 1) {\n    throw new ParserError(\n      'invalid ical body. component began but did not end'\n    );\n  }\n\n  state = null;\n\n  return (root.length == 1 ? root[0] : root);\n}\n\n/**\n * Parse an iCalendar property value into the jCal for a single property\n *\n * @function ICAL.parse.property\n * @param {String} str\n *   The iCalendar property string to parse\n * @param {designSet=} designSet\n *   The design data to use for this property\n * @return {Object}\n *   The jCal Object containing the property\n */\nparse.property = function(str, designSet) {\n  let state = {\n    component: [[], []],\n    designSet: designSet || design$1.defaultSet\n  };\n  parse._handleContentLine(str, state);\n  return state.component[1][0];\n};\n\n/**\n * Convenience method to parse a component. You can use ICAL.parse() directly\n * instead.\n *\n * @function ICAL.parse.component\n * @see ICAL.parse(function)\n * @param {String} str    The iCalendar component string to parse\n * @return {Object}       The jCal Object containing the component\n */\nparse.component = function(str) {\n  return parse(str);\n};\n\n\n/**\n * An error that occurred during parsing.\n *\n * @param {String} message        The error message\n * @memberof ICAL.parse\n * @extends {Error}\n */\nclass ParserError extends Error {\n  name = this.constructor.name;\n}\n\n// classes & constants\nparse.ParserError = ParserError;\n\n\n/**\n * Handles a single line of iCalendar/vCard, updating the state.\n *\n * @private\n * @function ICAL.parse._handleContentLine\n * @param {String} line          The content line to process\n * @param {parserState} state    The current state of the line parsing\n */\nparse._handleContentLine = function(line, state) {\n  // break up the parts of the line\n  let valuePos = line.indexOf(VALUE_DELIMITER);\n  let paramPos = line.indexOf(PARAM_DELIMITER);\n\n  let lastParamIndex;\n  let lastValuePos;\n\n  // name of property or begin/end\n  let name;\n  let value;\n  // params is only overridden if paramPos !== -1.\n  // we can't do params = params || {} later on\n  // because it sacrifices ops.\n  let params = {};\n\n  /**\n   * Different property cases\n   *\n   *\n   * 1. RRULE:FREQ=foo\n   *    // FREQ= is not a param but the value\n   *\n   * 2. ATTENDEE;ROLE=REQ-PARTICIPANT;\n   *    // ROLE= is a param because : has not happened yet\n   */\n    // when the parameter delimiter is after the\n    // value delimiter then it is not a parameter.\n\n  if ((paramPos !== -1 && valuePos !== -1)) {\n    // when the parameter delimiter is after the\n    // value delimiter then it is not a parameter.\n    if (paramPos > valuePos) {\n      paramPos = -1;\n    }\n  }\n\n  let parsedParams;\n  if (paramPos !== -1) {\n    name = line.slice(0, Math.max(0, paramPos)).toLowerCase();\n    parsedParams = parse._parseParameters(line.slice(Math.max(0, paramPos)), 0, state.designSet);\n    if (parsedParams[2] == -1) {\n      throw new ParserError(\"Invalid parameters in '\" + line + \"'\");\n    }\n    params = parsedParams[0];\n    lastParamIndex = parsedParams[1].length + parsedParams[2] + paramPos;\n    if ((lastValuePos =\n      line.slice(Math.max(0, lastParamIndex)).indexOf(VALUE_DELIMITER)) !== -1) {\n      value = line.slice(Math.max(0, lastParamIndex + lastValuePos + 1));\n    } else {\n      throw new ParserError(\"Missing parameter value in '\" + line + \"'\");\n    }\n  } else if (valuePos !== -1) {\n    // without parmeters (BEGIN:VCAENDAR, CLASS:PUBLIC)\n    name = line.slice(0, Math.max(0, valuePos)).toLowerCase();\n    value = line.slice(Math.max(0, valuePos + 1));\n\n    if (name === 'begin') {\n      let newComponent = [value.toLowerCase(), [], []];\n      if (state.stack.length === 1) {\n        state.component.push(newComponent);\n      } else {\n        state.component[2].push(newComponent);\n      }\n      state.stack.push(state.component);\n      state.component = newComponent;\n      if (!state.designSet) {\n        state.designSet = design$1.getDesignSet(state.component[0]);\n      }\n      return;\n    } else if (name === 'end') {\n      state.component = state.stack.pop();\n      return;\n    }\n    // If it is not begin/end, then this is a property with an empty value,\n    // which should be considered valid.\n  } else {\n    /**\n     * Invalid line.\n     * The rational to throw an error is we will\n     * never be certain that the rest of the file\n     * is sane and it is unlikely that we can serialize\n     * the result correctly either.\n     */\n    throw new ParserError(\n      'invalid line (no token \";\" or \":\") \"' + line + '\"'\n    );\n  }\n\n  let valueType;\n  let multiValue = false;\n  let structuredValue = false;\n  let propertyDetails;\n  let splitName;\n  let ungroupedName;\n\n  // fetch the ungrouped part of the name\n  if (state.designSet.propertyGroups && name.indexOf('.') !== -1) {\n    splitName = name.split('.');\n    params.group = splitName[0];\n    ungroupedName = splitName[1];\n  } else {\n    ungroupedName = name;\n  }\n\n  if (ungroupedName in state.designSet.property) {\n    propertyDetails = state.designSet.property[ungroupedName];\n\n    if ('multiValue' in propertyDetails) {\n      multiValue = propertyDetails.multiValue;\n    }\n\n    if ('structuredValue' in propertyDetails) {\n      structuredValue = propertyDetails.structuredValue;\n    }\n\n    if (value && 'detectType' in propertyDetails) {\n      valueType = propertyDetails.detectType(value);\n    }\n  }\n\n  // attempt to determine value\n  if (!valueType) {\n    if (!('value' in params)) {\n      if (propertyDetails) {\n        valueType = propertyDetails.defaultType;\n      } else {\n        valueType = DEFAULT_VALUE_TYPE$1;\n      }\n    } else {\n      // possible to avoid this?\n      valueType = params.value.toLowerCase();\n    }\n  }\n\n  delete params.value;\n\n  /**\n   * Note on `var result` juggling:\n   *\n   * I observed that building the array in pieces has adverse\n   * effects on performance, so where possible we inline the creation.\n   * It is a little ugly but resulted in ~2000 additional ops/sec.\n   */\n\n  let result;\n  if (multiValue && structuredValue) {\n    value = parse._parseMultiValue(value, structuredValue, valueType, [], multiValue, state.designSet, structuredValue);\n    result = [ungroupedName, params, valueType, value];\n  } else if (multiValue) {\n    result = [ungroupedName, params, valueType];\n    parse._parseMultiValue(value, multiValue, valueType, result, null, state.designSet, false);\n  } else if (structuredValue) {\n    value = parse._parseMultiValue(value, structuredValue, valueType, [], null, state.designSet, structuredValue);\n    result = [ungroupedName, params, valueType, value];\n  } else {\n    value = parse._parseValue(value, valueType, state.designSet, false);\n    result = [ungroupedName, params, valueType, value];\n  }\n  // rfc6350 requires that in vCard 4.0 the first component is the VERSION\n  // component with as value 4.0, note that 3.0 does not have this requirement.\n  if (state.component[0] === 'vcard' && state.component[1].length === 0 &&\n          !(name === 'version' && value === '4.0')) {\n    state.designSet = design$1.getDesignSet(\"vcard3\");\n  }\n  state.component[1].push(result);\n};\n\n/**\n * Parse a value from the raw value into the jCard/jCal value.\n *\n * @private\n * @function ICAL.parse._parseValue\n * @param {String} value          Original value\n * @param {String} type           Type of value\n * @param {Object} designSet      The design data to use for this value\n * @return {Object} varies on type\n */\nparse._parseValue = function(value, type, designSet, structuredValue) {\n  if (type in designSet.value && 'fromICAL' in designSet.value[type]) {\n    return designSet.value[type].fromICAL(value, structuredValue);\n  }\n  return value;\n};\n\n/**\n * Parse parameters from a string to object.\n *\n * @function ICAL.parse._parseParameters\n * @private\n * @param {String} line           A single unfolded line\n * @param {Number} start         Position to start looking for properties\n * @param {Object} designSet      The design data to use for this property\n * @return {Object} key/value pairs\n */\nparse._parseParameters = function(line, start, designSet) {\n  let lastParam = start;\n  let pos = 0;\n  let delim = PARAM_NAME_DELIMITER;\n  let result = {};\n  let name, lcname;\n  let value, valuePos = -1;\n  let type, multiValue, mvdelim;\n\n  // find the next '=' sign\n  // use lastParam and pos to find name\n  // check if \" is used if so get value from \"->\"\n  // then increment pos to find next ;\n\n  while ((pos !== false) &&\n         (pos = line.indexOf(delim, pos + 1)) !== -1) {\n\n    name = line.slice(lastParam + 1, pos);\n    if (name.length == 0) {\n      throw new ParserError(\"Empty parameter name in '\" + line + \"'\");\n    }\n    lcname = name.toLowerCase();\n    mvdelim = false;\n    multiValue = false;\n\n    if (lcname in designSet.param && designSet.param[lcname].valueType) {\n      type = designSet.param[lcname].valueType;\n    } else {\n      type = DEFAULT_PARAM_TYPE;\n    }\n\n    if (lcname in designSet.param) {\n      multiValue = designSet.param[lcname].multiValue;\n      if (designSet.param[lcname].multiValueSeparateDQuote) {\n        mvdelim = parse._rfc6868Escape('\"' + multiValue + '\"');\n      }\n    }\n\n    let nextChar = line[pos + 1];\n    if (nextChar === '\"') {\n      valuePos = pos + 2;\n      pos = line.indexOf('\"', valuePos);\n      if (multiValue && pos != -1) {\n          let extendedValue = true;\n          while (extendedValue) {\n            if (line[pos + 1] == multiValue && line[pos + 2] == '\"') {\n              pos = line.indexOf('\"', pos + 3);\n            } else {\n              extendedValue = false;\n            }\n          }\n        }\n      if (pos === -1) {\n        throw new ParserError(\n          'invalid line (no matching double quote) \"' + line + '\"'\n        );\n      }\n      value = line.slice(valuePos, pos);\n      lastParam = line.indexOf(PARAM_DELIMITER, pos);\n      let propValuePos = line.indexOf(VALUE_DELIMITER, pos);\n      // if either no next parameter or delimeter in property value, let's stop here\n      if (lastParam === -1 || (propValuePos !== -1 && lastParam > propValuePos)) {\n        pos = false;\n      }\n    } else {\n      valuePos = pos + 1;\n\n      // move to next \";\"\n      let nextPos = line.indexOf(PARAM_DELIMITER, valuePos);\n      let propValuePos = line.indexOf(VALUE_DELIMITER, valuePos);\n      if (propValuePos !== -1 && nextPos > propValuePos) {\n        // this is a delimiter in the property value, let's stop here\n        nextPos = propValuePos;\n        pos = false;\n      } else if (nextPos === -1) {\n        // no \";\"\n        if (propValuePos === -1) {\n          nextPos = line.length;\n        } else {\n          nextPos = propValuePos;\n        }\n        pos = false;\n      } else {\n        lastParam = nextPos;\n        pos = nextPos;\n      }\n\n      value = line.slice(valuePos, nextPos);\n    }\n\n    const length_before = value.length;\n    value = parse._rfc6868Escape(value);\n    valuePos += length_before - value.length;\n    if (multiValue) {\n      let delimiter = mvdelim || multiValue;\n      value = parse._parseMultiValue(value, delimiter, type, [], null, designSet);\n    } else {\n      value = parse._parseValue(value, type, designSet);\n    }\n\n    if (multiValue && (lcname in result)) {\n      if (Array.isArray(result[lcname])) {\n        result[lcname].push(value);\n      } else {\n        result[lcname] = [\n          result[lcname],\n          value\n        ];\n      }\n    } else {\n      result[lcname] = value;\n    }\n  }\n  return [result, value, valuePos];\n};\n\n/**\n * Internal helper for rfc6868. Exposing this on ICAL.parse so that\n * hackers can disable the rfc6868 parsing if the really need to.\n *\n * @function ICAL.parse._rfc6868Escape\n * @param {String} val        The value to escape\n * @return {String}           The escaped value\n */\nparse._rfc6868Escape = function(val) {\n  return val.replace(/\\^['n^]/g, function(x) {\n    return RFC6868_REPLACE_MAP$1[x];\n  });\n};\n\n/**\n * Parse a multi value string. This function is used either for parsing\n * actual multi-value property's values, or for handling parameter values. It\n * can be used for both multi-value properties and structured value properties.\n *\n * @private\n * @function ICAL.parse._parseMultiValue\n * @param {String} buffer           The buffer containing the full value\n * @param {String} delim            The multi-value delimiter\n * @param {String} type             The value type to be parsed\n * @param {Array.<?>} result        The array to append results to, varies on value type\n * @param {String} innerMulti       The inner delimiter to split each value with\n * @param {designSet} designSet     The design data for this value\n * @return {?|Array.<?>}            Either an array of results, or the first result\n */\nparse._parseMultiValue = function(buffer, delim, type, result, innerMulti, designSet, structuredValue) {\n  let pos = 0;\n  let lastPos = 0;\n  let value;\n  if (delim.length === 0) {\n    return buffer;\n  }\n\n  // split each piece\n  while ((pos = unescapedIndexOf(buffer, delim, lastPos)) !== -1) {\n    value = buffer.slice(lastPos, pos);\n    if (innerMulti) {\n      value = parse._parseMultiValue(value, innerMulti, type, [], null, designSet, structuredValue);\n    } else {\n      value = parse._parseValue(value, type, designSet, structuredValue);\n    }\n    result.push(value);\n    lastPos = pos + delim.length;\n  }\n\n  // on the last piece take the rest of string\n  value = buffer.slice(lastPos);\n  if (innerMulti) {\n    value = parse._parseMultiValue(value, innerMulti, type, [], null, designSet, structuredValue);\n  } else {\n    value = parse._parseValue(value, type, designSet, structuredValue);\n  }\n  result.push(value);\n\n  return result.length == 1 ? result[0] : result;\n};\n\n/**\n * Process a complete buffer of iCalendar/vCard data line by line, correctly\n * unfolding content. Each line will be processed with the given callback\n *\n * @private\n * @function ICAL.parse._eachLine\n * @param {String} buffer                         The buffer to process\n * @param {function(?String, String)} callback    The callback for each line\n */\nparse._eachLine = function(buffer, callback) {\n  let len = buffer.length;\n  let lastPos = buffer.search(CHAR);\n  let pos = lastPos;\n  let line;\n  let firstChar;\n\n  let newlineOffset;\n\n  do {\n    pos = buffer.indexOf('\\n', lastPos) + 1;\n\n    if (pos > 1 && buffer[pos - 2] === '\\r') {\n      newlineOffset = 2;\n    } else {\n      newlineOffset = 1;\n    }\n\n    if (pos === 0) {\n      pos = len;\n      newlineOffset = 0;\n    }\n\n    firstChar = buffer[lastPos];\n\n    if (firstChar === ' ' || firstChar === '\\t') {\n      // add to line\n      line += buffer.slice(lastPos + 1, pos - newlineOffset);\n    } else {\n      if (line)\n        callback(null, line);\n      // push line\n      line = buffer.slice(lastPos, pos - newlineOffset);\n    }\n\n    lastPos = pos;\n  } while (pos !== len);\n\n  // extra ending line\n  line = line.trim();\n\n  if (line.length)\n    callback(null, line);\n};\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\nconst OPTIONS = [\"tzid\", \"location\", \"tznames\", \"latitude\", \"longitude\"];\n\n/**\n * Timezone representation.\n *\n * @example\n * var vcalendar;\n * var timezoneComp = vcalendar.getFirstSubcomponent('vtimezone');\n * var tzid = timezoneComp.getFirstPropertyValue('tzid');\n *\n * var timezone = new ICAL.Timezone({\n *   component: timezoneComp,\n *   tzid\n * });\n *\n * @memberof ICAL\n */\nclass Timezone {\n  static _compare_change_fn(a, b) {\n    if (a.year < b.year) return -1;\n    else if (a.year > b.year) return 1;\n\n    if (a.month < b.month) return -1;\n    else if (a.month > b.month) return 1;\n\n    if (a.day < b.day) return -1;\n    else if (a.day > b.day) return 1;\n\n    if (a.hour < b.hour) return -1;\n    else if (a.hour > b.hour) return 1;\n\n    if (a.minute < b.minute) return -1;\n    else if (a.minute > b.minute) return 1;\n\n    if (a.second < b.second) return -1;\n    else if (a.second > b.second) return 1;\n\n    return 0;\n  }\n\n  /**\n   * Convert the date/time from one zone to the next.\n   *\n   * @param {Time} tt                  The time to convert\n   * @param {Timezone} from_zone       The source zone to convert from\n   * @param {Timezone} to_zone         The target zone to convert to\n   * @return {Time}                    The converted date/time object\n   */\n  static convert_time(tt, from_zone, to_zone) {\n    if (tt.isDate ||\n        from_zone.tzid == to_zone.tzid ||\n        from_zone == Timezone.localTimezone ||\n        to_zone == Timezone.localTimezone) {\n      tt.zone = to_zone;\n      return tt;\n    }\n\n    let utcOffset = from_zone.utcOffset(tt);\n    tt.adjust(0, 0, 0, - utcOffset);\n\n    utcOffset = to_zone.utcOffset(tt);\n    tt.adjust(0, 0, 0, utcOffset);\n\n    return null;\n  }\n\n  /**\n   * Creates a new ICAL.Timezone instance from the passed data object.\n   *\n   * @param {Component|Object} aData options for class\n   * @param {String|Component} aData.component\n   *        If aData is a simple object, then this member can be set to either a\n   *        string containing the component data, or an already parsed\n   *        ICAL.Component\n   * @param {String} aData.tzid      The timezone identifier\n   * @param {String} aData.location  The timezone locationw\n   * @param {String} aData.tznames   An alternative string representation of the\n   *                                  timezone\n   * @param {Number} aData.latitude  The latitude of the timezone\n   * @param {Number} aData.longitude The longitude of the timezone\n   */\n  static fromData(aData) {\n    let tt = new Timezone();\n    return tt.fromData(aData);\n  }\n\n  /**\n   * The instance describing the UTC timezone\n   * @type {Timezone}\n   * @constant\n   * @instance\n   */\n  static #utcTimezone = null;\n  static get utcTimezone() {\n    if (!this.#utcTimezone) {\n      this.#utcTimezone = Timezone.fromData({\n        tzid: \"UTC\"\n      });\n    }\n    return this.#utcTimezone;\n  }\n\n  /**\n   * The instance describing the local timezone\n   * @type {Timezone}\n   * @constant\n   * @instance\n   */\n  static #localTimezone = null;\n  static get localTimezone() {\n    if (!this.#localTimezone) {\n      this.#localTimezone = Timezone.fromData({\n        tzid: \"floating\"\n      });\n    }\n    return this.#localTimezone;\n  }\n\n  /**\n   * Adjust a timezone change object.\n   * @private\n   * @param {Object} change     The timezone change object\n   * @param {Number} days       The extra amount of days\n   * @param {Number} hours      The extra amount of hours\n   * @param {Number} minutes    The extra amount of minutes\n   * @param {Number} seconds    The extra amount of seconds\n   */\n  static adjust_change(change, days, hours, minutes, seconds) {\n    return Time.prototype.adjust.call(\n      change,\n      days,\n      hours,\n      minutes,\n      seconds,\n      change\n    );\n  }\n\n  static _minimumExpansionYear = -1;\n  static EXTRA_COVERAGE = 5;\n\n  /**\n   * Creates a new ICAL.Timezone instance, by passing in a tzid and component.\n   *\n   * @param {Component|Object} data options for class\n   * @param {String|Component} data.component\n   *        If data is a simple object, then this member can be set to either a\n   *        string containing the component data, or an already parsed\n   *        ICAL.Component\n   * @param {String} data.tzid      The timezone identifier\n   * @param {String} data.location  The timezone locationw\n   * @param {String} data.tznames   An alternative string representation of the\n   *                                  timezone\n   * @param {Number} data.latitude  The latitude of the timezone\n   * @param {Number} data.longitude The longitude of the timezone\n   */\n  constructor(data) {\n    this.wrappedJSObject = this;\n    this.fromData(data);\n  }\n\n\n  /**\n   * Timezone identifier\n   * @type {String}\n   */\n  tzid = \"\";\n\n  /**\n   * Timezone location\n   * @type {String}\n   */\n  location = \"\";\n\n  /**\n   * Alternative timezone name, for the string representation\n   * @type {String}\n   */\n  tznames = \"\";\n\n  /**\n   * The primary latitude for the timezone.\n   * @type {Number}\n   */\n  latitude = 0.0;\n\n  /**\n   * The primary longitude for the timezone.\n   * @type {Number}\n   */\n  longitude = 0.0;\n\n  /**\n   * The vtimezone component for this timezone.\n   * @type {Component}\n   */\n  component = null;\n\n  /**\n   * The year this timezone has been expanded to. All timezone transition\n   * dates until this year are known and can be used for calculation\n   *\n   * @private\n   * @type {Number}\n   */\n  expandedUntilYear = 0;\n\n  /**\n   * The class identifier.\n   * @constant\n   * @type {String}\n   * @default \"icaltimezone\"\n   */\n  icalclass = \"icaltimezone\";\n\n  /**\n   * Sets up the current instance using members from the passed data object.\n   *\n   * @param {Component|Object} aData options for class\n   * @param {String|Component} aData.component\n   *        If aData is a simple object, then this member can be set to either a\n   *        string containing the component data, or an already parsed\n   *        ICAL.Component\n   * @param {String} aData.tzid      The timezone identifier\n   * @param {String} aData.location  The timezone locationw\n   * @param {String} aData.tznames   An alternative string representation of the\n   *                                  timezone\n   * @param {Number} aData.latitude  The latitude of the timezone\n   * @param {Number} aData.longitude The longitude of the timezone\n   */\n  fromData(aData) {\n    this.expandedUntilYear = 0;\n    this.changes = [];\n\n    if (aData instanceof Component) {\n      // Either a component is passed directly\n      this.component = aData;\n    } else {\n      // Otherwise the component may be in the data object\n      if (aData && \"component\" in aData) {\n        if (typeof aData.component == \"string\") {\n          // If a string was passed, parse it as a component\n          let jCal = parse(aData.component);\n          this.component = new Component(jCal);\n        } else if (aData.component instanceof Component) {\n          // If it was a component already, then just set it\n          this.component = aData.component;\n        } else {\n          // Otherwise just null out the component\n          this.component = null;\n        }\n      }\n\n      // Copy remaining passed properties\n      for (let prop of OPTIONS) {\n        if (aData && prop in aData) {\n          this[prop] = aData[prop];\n        }\n      }\n    }\n\n    // If we have a component but no TZID, attempt to get it from the\n    // component's properties.\n    if (this.component instanceof Component && !this.tzid) {\n      this.tzid = this.component.getFirstPropertyValue('tzid');\n    }\n\n    return this;\n  }\n\n  /**\n   * Finds the utcOffset the given time would occur in this timezone.\n   *\n   * @param {Time} tt         The time to check for\n   * @return {Number}         utc offset in seconds\n   */\n  utcOffset(tt) {\n    if (this == Timezone.utcTimezone || this == Timezone.localTimezone) {\n      return 0;\n    }\n\n    this._ensureCoverage(tt.year);\n\n    if (!this.changes.length) {\n      return 0;\n    }\n\n    let tt_change = {\n      year: tt.year,\n      month: tt.month,\n      day: tt.day,\n      hour: tt.hour,\n      minute: tt.minute,\n      second: tt.second\n    };\n\n    let change_num = this._findNearbyChange(tt_change);\n    let change_num_to_use = -1;\n    let step = 1;\n\n    // TODO: replace with bin search?\n    for (;;) {\n      let change = clone(this.changes[change_num], true);\n      if (change.utcOffset < change.prevUtcOffset) {\n        Timezone.adjust_change(change, 0, 0, 0, change.utcOffset);\n      } else {\n        Timezone.adjust_change(change, 0, 0, 0,\n                                        change.prevUtcOffset);\n      }\n\n      let cmp = Timezone._compare_change_fn(tt_change, change);\n\n      if (cmp >= 0) {\n        change_num_to_use = change_num;\n      } else {\n        step = -1;\n      }\n\n      if (step == -1 && change_num_to_use != -1) {\n        break;\n      }\n\n      change_num += step;\n\n      if (change_num < 0) {\n        return 0;\n      }\n\n      if (change_num >= this.changes.length) {\n        break;\n      }\n    }\n\n    let zone_change = this.changes[change_num_to_use];\n    let utcOffset_change = zone_change.utcOffset - zone_change.prevUtcOffset;\n\n    if (utcOffset_change < 0 && change_num_to_use > 0) {\n      let tmp_change = clone(zone_change, true);\n      Timezone.adjust_change(tmp_change, 0, 0, 0, tmp_change.prevUtcOffset);\n\n      if (Timezone._compare_change_fn(tt_change, tmp_change) < 0) {\n        let prev_zone_change = this.changes[change_num_to_use - 1];\n\n        let want_daylight = false; // TODO\n\n        if (zone_change.is_daylight != want_daylight &&\n            prev_zone_change.is_daylight == want_daylight) {\n          zone_change = prev_zone_change;\n        }\n      }\n    }\n\n    // TODO return is_daylight?\n    return zone_change.utcOffset;\n  }\n\n  _findNearbyChange(change) {\n    // find the closest match\n    let idx = binsearchInsert(\n      this.changes,\n      change,\n      Timezone._compare_change_fn\n    );\n\n    if (idx >= this.changes.length) {\n      return this.changes.length - 1;\n    }\n\n    return idx;\n  }\n\n  _ensureCoverage(aYear) {\n    if (Timezone._minimumExpansionYear == -1) {\n      let today = Time.now();\n      Timezone._minimumExpansionYear = today.year;\n    }\n\n    let changesEndYear = aYear;\n    if (changesEndYear < Timezone._minimumExpansionYear) {\n      changesEndYear = Timezone._minimumExpansionYear;\n    }\n\n    changesEndYear += Timezone.EXTRA_COVERAGE;\n\n    if (!this.changes.length || this.expandedUntilYear < aYear) {\n      let subcomps = this.component.getAllSubcomponents();\n      let compLen = subcomps.length;\n      let compIdx = 0;\n\n      for (; compIdx < compLen; compIdx++) {\n        this._expandComponent(\n          subcomps[compIdx], changesEndYear, this.changes\n        );\n      }\n\n      this.changes.sort(Timezone._compare_change_fn);\n      this.expandedUntilYear = changesEndYear;\n    }\n  }\n\n  _expandComponent(aComponent, aYear, changes) {\n    if (!aComponent.hasProperty(\"dtstart\") ||\n        !aComponent.hasProperty(\"tzoffsetto\") ||\n        !aComponent.hasProperty(\"tzoffsetfrom\")) {\n      return null;\n    }\n\n    let dtstart = aComponent.getFirstProperty(\"dtstart\").getFirstValue();\n    let change;\n\n    function convert_tzoffset(offset) {\n      return offset.factor * (offset.hours * 3600 + offset.minutes * 60);\n    }\n\n    function init_changes() {\n      let changebase = {};\n      changebase.is_daylight = (aComponent.name == \"daylight\");\n      changebase.utcOffset = convert_tzoffset(\n        aComponent.getFirstProperty(\"tzoffsetto\").getFirstValue()\n      );\n\n      changebase.prevUtcOffset = convert_tzoffset(\n        aComponent.getFirstProperty(\"tzoffsetfrom\").getFirstValue()\n      );\n\n      return changebase;\n    }\n\n    if (!aComponent.hasProperty(\"rrule\") && !aComponent.hasProperty(\"rdate\")) {\n      change = init_changes();\n      change.year = dtstart.year;\n      change.month = dtstart.month;\n      change.day = dtstart.day;\n      change.hour = dtstart.hour;\n      change.minute = dtstart.minute;\n      change.second = dtstart.second;\n\n      Timezone.adjust_change(change, 0, 0, 0, -change.prevUtcOffset);\n      changes.push(change);\n    } else {\n      let props = aComponent.getAllProperties(\"rdate\");\n      for (let rdate of props) {\n        let time = rdate.getFirstValue();\n        change = init_changes();\n\n        change.year = time.year;\n        change.month = time.month;\n        change.day = time.day;\n\n        if (time.isDate) {\n          change.hour = dtstart.hour;\n          change.minute = dtstart.minute;\n          change.second = dtstart.second;\n\n          if (dtstart.zone != Timezone.utcTimezone) {\n            Timezone.adjust_change(change, 0, 0, 0, -change.prevUtcOffset);\n          }\n        } else {\n          change.hour = time.hour;\n          change.minute = time.minute;\n          change.second = time.second;\n\n          if (time.zone != Timezone.utcTimezone) {\n            Timezone.adjust_change(change, 0, 0, 0, -change.prevUtcOffset);\n          }\n        }\n\n        changes.push(change);\n      }\n\n      let rrule = aComponent.getFirstProperty(\"rrule\");\n\n      if (rrule) {\n        rrule = rrule.getFirstValue();\n        change = init_changes();\n\n        if (rrule.until && rrule.until.zone == Timezone.utcTimezone) {\n          rrule.until.adjust(0, 0, 0, change.prevUtcOffset);\n          rrule.until.zone = Timezone.localTimezone;\n        }\n\n        let iterator = rrule.iterator(dtstart);\n\n        let occ;\n        while ((occ = iterator.next())) {\n          change = init_changes();\n          if (occ.year > aYear || !occ) {\n            break;\n          }\n\n          change.year = occ.year;\n          change.month = occ.month;\n          change.day = occ.day;\n          change.hour = occ.hour;\n          change.minute = occ.minute;\n          change.second = occ.second;\n          change.isDate = occ.isDate;\n\n          Timezone.adjust_change(change, 0, 0, 0, -change.prevUtcOffset);\n          changes.push(change);\n        }\n      }\n    }\n\n    return changes;\n  }\n\n  /**\n   * The string representation of this timezone.\n   * @return {String}\n   */\n  toString() {\n    return (this.tznames ? this.tznames : this.tzid);\n  }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\nlet zones = null;\n\n/**\n * @classdesc\n * Singleton class to contain timezones.  Right now it is all manual registry in\n * the future we may use this class to download timezone information or handle\n * loading pre-expanded timezones.\n *\n * @exports module:ICAL.TimezoneService\n * @memberof ICAL\n */\nconst TimezoneService = {\n  get count() {\n    if (zones === null) {\n      return 0;\n    }\n\n    return Object.keys(zones).length;\n  },\n\n  reset: function() {\n    zones = Object.create(null);\n    let utc = Timezone.utcTimezone;\n\n    zones.Z = utc;\n    zones.UTC = utc;\n    zones.GMT = utc;\n  },\n  _hard_reset: function() {\n    zones = null;\n  },\n\n  /**\n   * Checks if timezone id has been registered.\n   *\n   * @param {String} tzid     Timezone identifier (e.g. America/Los_Angeles)\n   * @return {Boolean}        False, when not present\n   */\n  has: function(tzid) {\n    if (zones === null) {\n      return false;\n    }\n\n    return !!zones[tzid];\n  },\n\n  /**\n   * Returns a timezone by its tzid if present.\n   *\n   * @param {String} tzid               Timezone identifier (e.g. America/Los_Angeles)\n   * @return {Timezone | undefined}     The timezone, or undefined if not found\n   */\n  get: function(tzid) {\n    if (zones === null) {\n      this.reset();\n    }\n\n    return zones[tzid];\n  },\n\n  /**\n   * Registers a timezone object or component.\n   *\n   * @param {Component|Timezone} timezone\n   *        The initialized zone or vtimezone.\n   *\n   * @param {String=} name\n   *        The name of the timezone. Defaults to the component's TZID if not\n   *        passed.\n   */\n  register: function(timezone, name) {\n    if (zones === null) {\n      this.reset();\n    }\n\n    // This avoids a breaking change by the change of argument order\n    // TODO remove in v3\n    if (typeof timezone === \"string\" && name instanceof Timezone) {\n      [timezone, name] = [name, timezone];\n    }\n\n    if (!name) {\n      if (timezone instanceof Timezone) {\n        name = timezone.tzid;\n      } else {\n        if (timezone.name === 'vtimezone') {\n          timezone = new Timezone(timezone);\n          name = timezone.tzid;\n        }\n      }\n    }\n\n    if (!name) {\n      throw new TypeError(\"Neither a timezone nor a name was passed\");\n    }\n\n    if (timezone instanceof Timezone) {\n      zones[name] = timezone;\n    } else {\n      throw new TypeError('timezone must be ICAL.Timezone or ICAL.Component');\n    }\n  },\n\n  /**\n   * Removes a timezone by its tzid from the list.\n   *\n   * @param {String} tzid     Timezone identifier (e.g. America/Los_Angeles)\n   * @return {?Timezone}      The removed timezone, or null if not registered\n   */\n  remove: function(tzid) {\n    if (zones === null) {\n      return null;\n    }\n\n    return (delete zones[tzid]);\n  }\n};\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * Helper functions used in various places within ical.js\n * @module ICAL.helpers\n */\n\n/**\n * Compiles a list of all referenced TZIDs in all subcomponents and\n * removes any extra VTIMEZONE subcomponents. In addition, if any TZIDs\n * are referenced by a component, but a VTIMEZONE does not exist,\n * an attempt will be made to generate a VTIMEZONE using ICAL.TimezoneService.\n *\n * @param {Component} vcal     The top-level VCALENDAR component.\n * @return {Component}         The ICAL.Component that was passed in.\n */\nfunction updateTimezones(vcal) {\n  let allsubs, properties, vtimezones, reqTzid, i;\n\n  if (!vcal || vcal.name !== \"vcalendar\") {\n    //not a top-level vcalendar component\n    return vcal;\n  }\n\n  //Store vtimezone subcomponents in an object reference by tzid.\n  //Store properties from everything else in another array\n  allsubs = vcal.getAllSubcomponents();\n  properties = [];\n  vtimezones = {};\n  for (i = 0; i < allsubs.length; i++) {\n    if (allsubs[i].name === \"vtimezone\") {\n      let tzid = allsubs[i].getFirstProperty(\"tzid\").getFirstValue();\n      vtimezones[tzid] = allsubs[i];\n    } else {\n      properties = properties.concat(allsubs[i].getAllProperties());\n    }\n  }\n\n  //create an object with one entry for each required tz\n  reqTzid = {};\n  for (i = 0; i < properties.length; i++) {\n    let tzid = properties[i].getParameter(\"tzid\");\n    if (tzid) {\n      reqTzid[tzid] = true;\n    }\n  }\n\n  //delete any vtimezones that are not on the reqTzid list.\n  for (let [tzid, comp] of Object.entries(vtimezones)) {\n    if (!reqTzid[tzid]) {\n      vcal.removeSubcomponent(comp);\n    }\n  }\n\n  //create any missing, but registered timezones\n  for (let tzid of Object.keys(reqTzid)) {\n    if (!vtimezones[tzid] && TimezoneService.has(tzid)) {\n      vcal.addSubcomponent(TimezoneService.get(tzid).component);\n    }\n  }\n\n  return vcal;\n}\n\n/**\n * Checks if the given type is of the number type and also NaN.\n *\n * @param {Number} number     The number to check\n * @return {Boolean}          True, if the number is strictly NaN\n */\nfunction isStrictlyNaN(number) {\n  return typeof(number) === 'number' && isNaN(number);\n}\n\n/**\n * Parses a string value that is expected to be an integer, when the valid is\n * not an integer throws a decoration error.\n *\n * @param {String} string     Raw string input\n * @return {Number}           Parsed integer\n */\nfunction strictParseInt(string) {\n  let result = parseInt(string, 10);\n\n  if (isStrictlyNaN(result)) {\n    throw new Error(\n      'Could not extract integer from \"' + string + '\"'\n    );\n  }\n\n  return result;\n}\n\n/**\n * Creates or returns a class instance of a given type with the initialization\n * data if the data is not already an instance of the given type.\n *\n * @example\n * var time = new ICAL.Time(...);\n * var result = ICAL.helpers.formatClassType(time, ICAL.Time);\n *\n * (result instanceof ICAL.Time)\n * // => true\n *\n * result = ICAL.helpers.formatClassType({}, ICAL.Time);\n * (result isntanceof ICAL.Time)\n * // => true\n *\n *\n * @param {Object} data       object initialization data\n * @param {Object} type       object type (like ICAL.Time)\n * @return {?}                An instance of the found type.\n */\nfunction formatClassType(data, type) {\n  if (typeof(data) === 'undefined') {\n    return undefined;\n  }\n\n  if (data instanceof type) {\n    return data;\n  }\n  return new type(data);\n}\n\n/**\n * Identical to indexOf but will only match values when they are not preceded\n * by a backslash character.\n *\n * @param {String} buffer         String to search\n * @param {String} search         Value to look for\n * @param {Number} pos            Start position\n * @return {Number}               The position, or -1 if not found\n */\nfunction unescapedIndexOf(buffer, search, pos) {\n  while ((pos = buffer.indexOf(search, pos)) !== -1) {\n    if (pos > 0 && buffer[pos - 1] === '\\\\') {\n      pos += 1;\n    } else {\n      return pos;\n    }\n  }\n  return -1;\n}\n\n/**\n * Find the index for insertion using binary search.\n *\n * @param {Array} list            The list to search\n * @param {?} seekVal             The value to insert\n * @param {function(?,?)} cmpfunc The comparison func, that can\n *                                  compare two seekVals\n * @return {Number}               The insert position\n */\nfunction binsearchInsert(list, seekVal, cmpfunc) {\n  if (!list.length)\n    return 0;\n\n  let low = 0, high = list.length - 1,\n      mid, cmpval;\n\n  while (low <= high) {\n    mid = low + Math.floor((high - low) / 2);\n    cmpval = cmpfunc(seekVal, list[mid]);\n\n    if (cmpval < 0)\n      high = mid - 1;\n    else if (cmpval > 0)\n      low = mid + 1;\n    else\n      break;\n  }\n\n  if (cmpval < 0)\n    return mid; // insertion is displacing, so use mid outright.\n  else if (cmpval > 0)\n    return mid + 1;\n  else\n    return mid;\n}\n\n/**\n * Clone the passed object or primitive. By default a shallow clone will be\n * executed.\n *\n * @param {*} aSrc            The thing to clone\n * @param {Boolean=} aDeep    If true, a deep clone will be performed\n * @return {*}                The copy of the thing\n */\nfunction clone(aSrc, aDeep) {\n  if (!aSrc || typeof aSrc != \"object\") {\n    return aSrc;\n  } else if (aSrc instanceof Date) {\n    return new Date(aSrc.getTime());\n  } else if (\"clone\" in aSrc) {\n    return aSrc.clone();\n  } else if (Array.isArray(aSrc)) {\n    let arr = [];\n    for (let i = 0; i < aSrc.length; i++) {\n      arr.push(aDeep ? clone(aSrc[i], true) : aSrc[i]);\n    }\n    return arr;\n  } else {\n    let obj = {};\n    for (let [name, value] of Object.entries(aSrc)) {\n      if (aDeep) {\n        obj[name] = clone(value, true);\n      } else {\n        obj[name] = value;\n      }\n    }\n    return obj;\n  }\n}\n\n/**\n * Performs iCalendar line folding. A line ending character is inserted and\n * the next line begins with a whitespace.\n *\n * @example\n * SUMMARY:This line will be fold\n *  ed right in the middle of a word.\n *\n * @param {String} aLine      The line to fold\n * @return {String}           The folded line\n */\nfunction foldline(aLine) {\n  let result = \"\";\n  let line = aLine || \"\", pos = 0, line_length = 0;\n  //pos counts position in line for the UTF-16 presentation\n  //line_length counts the bytes for the UTF-8 presentation\n  while (line.length) {\n    let cp = line.codePointAt(pos);\n    if (cp < 128) ++line_length;\n    else if (cp < 2048) line_length += 2;//needs 2 UTF-8 bytes\n    else if (cp < 65536) line_length += 3;\n    else line_length += 4; //cp is less than 1114112\n    if (line_length < ICALmodule.foldLength + 1)\n      pos += cp > 65535 ? 2 : 1;\n    else {\n      result += ICALmodule.newLineChar + \" \" + line.slice(0, Math.max(0, pos));\n      line = line.slice(Math.max(0, pos));\n      pos = line_length = 0;\n    }\n  }\n  return result.slice(ICALmodule.newLineChar.length + 1);\n}\n\n/**\n * Pads the given string or number with zeros so it will have at least two\n * characters.\n *\n * @param {String|Number} data    The string or number to pad\n * @return {String}               The number padded as a string\n */\nfunction pad2(data) {\n  if (typeof(data) !== 'string') {\n    // handle fractions.\n    if (typeof(data) === 'number') {\n      data = parseInt(data);\n    }\n    data = String(data);\n  }\n\n  let len = data.length;\n\n  switch (len) {\n    case 0:\n      return '00';\n    case 1:\n      return '0' + data;\n    default:\n      return data;\n  }\n}\n\n/**\n * Truncates the given number, correctly handling negative numbers.\n *\n * @param {Number} number     The number to truncate\n * @return {Number}           The truncated number\n */\nfunction trunc(number) {\n  return (number < 0 ? Math.ceil(number) : Math.floor(number));\n}\n\n/**\n * Poor-man's cross-browser object extension. Doesn't support all the\n * features, but enough for our usage. Note that the target's properties are\n * not overwritten with the source properties.\n *\n * @example\n * var child = ICAL.helpers.extend(parent, {\n *   \"bar\": 123\n * });\n *\n * @param {Object} source     The object to extend\n * @param {Object} target     The object to extend with\n * @return {Object}           Returns the target.\n */\nfunction extend(source, target) {\n  for (let key in source) {\n    let descr = Object.getOwnPropertyDescriptor(source, key);\n    if (descr && !Object.getOwnPropertyDescriptor(target, key)) {\n      Object.defineProperty(target, key, descr);\n    }\n  }\n  return target;\n}\n\nvar helpers = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  updateTimezones: updateTimezones,\n  isStrictlyNaN: isStrictlyNaN,\n  strictParseInt: strictParseInt,\n  formatClassType: formatClassType,\n  unescapedIndexOf: unescapedIndexOf,\n  binsearchInsert: binsearchInsert,\n  clone: clone,\n  foldline: foldline,\n  pad2: pad2,\n  trunc: trunc,\n  extend: extend\n});\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This class represents the \"utc-offset\" value type, with various calculation and manipulation\n * methods.\n *\n * @memberof ICAL\n */\nclass UtcOffset {\n  /**\n   * Creates a new {@link ICAL.UtcOffset} instance from the passed string.\n   *\n   * @param {String} aString    The string to parse\n   * @return {Duration}         The created utc-offset instance\n   */\n  static fromString(aString) {\n    // -05:00\n    let options = {};\n    //TODO: support seconds per rfc5545 ?\n    options.factor = (aString[0] === '+') ? 1 : -1;\n    options.hours = strictParseInt(aString.slice(1, 3));\n    options.minutes = strictParseInt(aString.slice(4, 6));\n\n    return new UtcOffset(options);\n  }\n\n  /**\n   * Creates a new {@link ICAL.UtcOffset} instance from the passed seconds\n   * value.\n   *\n   * @param {Number} aSeconds       The number of seconds to convert\n   */\n  static fromSeconds(aSeconds) {\n    let instance = new UtcOffset();\n    instance.fromSeconds(aSeconds);\n    return instance;\n  }\n\n  /**\n   * Creates a new ICAL.UtcOffset instance.\n   *\n   * @param {Object} aData          An object with members of the utc offset\n   * @param {Number=} aData.hours   The hours for the utc offset\n   * @param {Number=} aData.minutes The minutes in the utc offset\n   * @param {Number=} aData.factor  The factor for the utc-offset, either -1 or 1\n   */\n  constructor(aData) {\n    this.fromData(aData);\n  }\n\n  /**\n   * The hours in the utc-offset\n   * @type {Number}\n   */\n  hours = 0;\n\n  /**\n   * The minutes in the utc-offset\n   * @type {Number}\n   */\n  minutes = 0;\n\n  /**\n   * The sign of the utc offset, 1 for positive offset, -1 for negative\n   * offsets.\n   * @type {Number}\n   */\n  factor = 1;\n\n  /**\n   * The type name, to be used in the jCal object.\n   * @constant\n   * @type {String}\n   * @default \"utc-offset\"\n   */\n  icaltype = \"utc-offset\";\n\n  /**\n   * Returns a clone of the utc offset object.\n   *\n   * @return {UtcOffset}     The cloned object\n   */\n  clone() {\n    return UtcOffset.fromSeconds(this.toSeconds());\n  }\n\n  /**\n   * Sets up the current instance using members from the passed data object.\n   *\n   * @param {Object} aData          An object with members of the utc offset\n   * @param {Number=} aData.hours   The hours for the utc offset\n   * @param {Number=} aData.minutes The minutes in the utc offset\n   * @param {Number=} aData.factor  The factor for the utc-offset, either -1 or 1\n   */\n  fromData(aData) {\n    if (aData) {\n      for (let [key, value] of Object.entries(aData)) {\n        this[key] = value;\n      }\n    }\n    this._normalize();\n  }\n\n  /**\n   * Sets up the current instance from the given seconds value. The seconds\n   * value is truncated to the minute. Offsets are wrapped when the world\n   * ends, the hour after UTC+14:00 is UTC-12:00.\n   *\n   * @param {Number} aSeconds         The seconds to convert into an offset\n   */\n  fromSeconds(aSeconds) {\n    let secs = Math.abs(aSeconds);\n\n    this.factor = aSeconds < 0 ? -1 : 1;\n    this.hours = trunc(secs / 3600);\n\n    secs -= (this.hours * 3600);\n    this.minutes = trunc(secs / 60);\n    return this;\n  }\n\n  /**\n   * Convert the current offset to a value in seconds\n   *\n   * @return {Number}                 The offset in seconds\n   */\n  toSeconds() {\n    return this.factor * (60 * this.minutes + 3600 * this.hours);\n  }\n\n  /**\n   * Compare this utc offset with another one.\n   *\n   * @param {UtcOffset} other             The other offset to compare with\n   * @return {Number}                     -1, 0 or 1 for less/equal/greater\n   */\n  compare(other) {\n    let a = this.toSeconds();\n    let b = other.toSeconds();\n    return (a > b) - (b > a);\n  }\n\n  _normalize() {\n    // Range: 97200 seconds (with 1 hour inbetween)\n    let secs = this.toSeconds();\n    let factor = this.factor;\n    while (secs < -43200) { // = UTC-12:00\n      secs += 97200;\n    }\n    while (secs > 50400) { // = UTC+14:00\n      secs -= 97200;\n    }\n\n    this.fromSeconds(secs);\n\n    // Avoid changing the factor when on zero seconds\n    if (secs == 0) {\n      this.factor = factor;\n    }\n  }\n\n  /**\n   * The iCalendar string representation of this utc-offset.\n   * @return {String}\n   */\n  toICALString() {\n    return design$1.icalendar.value['utc-offset'].toICAL(this.toString());\n  }\n\n  /**\n   * The string representation of this utc-offset.\n   * @return {String}\n   */\n  toString() {\n    return (this.factor == 1 ? \"+\" : \"-\") + pad2(this.hours) + ':' + pad2(this.minutes);\n  }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * Describes a vCard time, which has slight differences to the ICAL.Time.\n * Properties can be null if not specified, for example for dates with\n * reduced accuracy or truncation.\n *\n * Note that currently not all methods are correctly re-implemented for\n * VCardTime. For example, comparison will have undefined results when some\n * members are null.\n *\n * Also, normalization is not yet implemented for this class!\n *\n * @memberof ICAL\n * @extends {ICAL.Time}\n */\nclass VCardTime extends Time {\n  /**\n   * Returns a new ICAL.VCardTime instance from a date and/or time string.\n   *\n   * @param {String} aValue     The string to create from\n   * @param {String} aIcalType  The type for this instance, e.g. date-and-or-time\n   * @return {VCardTime}        The date/time instance\n   */\n  static fromDateAndOrTimeString(aValue, aIcalType) {\n    function part(v, s, e) {\n      return v ? strictParseInt(v.slice(s, s + e)) : null;\n    }\n    let parts = aValue.split('T');\n    let dt = parts[0], tmz = parts[1];\n    let splitzone = tmz ? design$1.vcard.value.time._splitZone(tmz) : [];\n    let zone = splitzone[0], tm = splitzone[1];\n\n    let dtlen = dt ? dt.length : 0;\n    let tmlen = tm ? tm.length : 0;\n\n    let hasDashDate = dt && dt[0] == '-' && dt[1] == '-';\n    let hasDashTime = tm && tm[0] == '-';\n\n    let o = {\n      year: hasDashDate ? null : part(dt, 0, 4),\n      month: hasDashDate && (dtlen == 4 || dtlen == 7) ? part(dt, 2, 2) : dtlen == 7 ? part(dt, 5, 2) : dtlen == 10 ? part(dt, 5, 2) : null,\n      day: dtlen == 5 ? part(dt, 3, 2) : dtlen == 7 && hasDashDate ? part(dt, 5, 2) : dtlen == 10 ? part(dt, 8, 2) : null,\n\n      hour: hasDashTime ? null : part(tm, 0, 2),\n      minute: hasDashTime && tmlen == 3 ? part(tm, 1, 2) : tmlen > 4 ? hasDashTime ? part(tm, 1, 2) : part(tm, 3, 2) : null,\n      second: tmlen == 4 ? part(tm, 2, 2) : tmlen == 6 ? part(tm, 4, 2) : tmlen == 8 ? part(tm, 6, 2) : null\n    };\n\n    if (zone == 'Z') {\n      zone = Timezone.utcTimezone;\n    } else if (zone && zone[3] == ':') {\n      zone = UtcOffset.fromString(zone);\n    } else {\n      zone = null;\n    }\n\n    return new VCardTime(o, zone, aIcalType);\n  }\n\n\n  /**\n   * Creates a new ICAL.VCardTime instance.\n   *\n   * @param {Object} data                           The data for the time instance\n   * @param {Number=} data.year                     The year for this date\n   * @param {Number=} data.month                    The month for this date\n   * @param {Number=} data.day                      The day for this date\n   * @param {Number=} data.hour                     The hour for this date\n   * @param {Number=} data.minute                   The minute for this date\n   * @param {Number=} data.second                   The second for this date\n   * @param {Timezone|UtcOffset} zone               The timezone to use\n   * @param {String} icaltype                       The type for this date/time object\n   */\n  constructor(data, zone, icaltype) {\n    super(data, zone);\n    this.icaltype = icaltype || \"date-and-or-time\";\n  }\n\n  /**\n   * The class identifier.\n   * @constant\n   * @type {String}\n   * @default \"vcardtime\"\n   */\n  icalclass = \"vcardtime\";\n\n  /**\n   * The type name, to be used in the jCal object.\n   * @type {String}\n   * @default \"date-and-or-time\"\n   */\n  icaltype = \"date-and-or-time\";\n\n  /**\n   * Returns a clone of the vcard date/time object.\n   *\n   * @return {VCardTime}     The cloned object\n   */\n  clone() {\n    return new VCardTime(this._time, this.zone, this.icaltype);\n  }\n\n  _normalize() {\n    return this;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  utcOffset() {\n    if (this.zone instanceof UtcOffset) {\n      return this.zone.toSeconds();\n    } else {\n      return Time.prototype.utcOffset.apply(this, arguments);\n    }\n  }\n\n  /**\n   * Returns an RFC 6350 compliant representation of this object.\n   *\n   * @return {String}         vcard date/time string\n   */\n  toICALString() {\n    return design$1.vcard.value[this.icaltype].toICAL(this.toString());\n  }\n\n  /**\n   * The string representation of this date/time, in jCard form\n   * (including : and - separators).\n   * @return {String}\n   */\n  toString() {\n    let y = this.year, m = this.month, d = this.day;\n    let h = this.hour, mm = this.minute, s = this.second;\n\n    let hasYear = y !== null, hasMonth = m !== null, hasDay = d !== null;\n    let hasHour = h !== null, hasMinute = mm !== null, hasSecond = s !== null;\n\n    let datepart = (hasYear ? pad2(y) + (hasMonth || hasDay ? '-' : '') : (hasMonth || hasDay ? '--' : '')) +\n                   (hasMonth ? pad2(m) : '') +\n                   (hasDay ? '-' + pad2(d) : '');\n    let timepart = (hasHour ? pad2(h) : '-') + (hasHour && hasMinute ? ':' : '') +\n                   (hasMinute ? pad2(mm) : '') + (!hasHour && !hasMinute ? '-' : '') +\n                   (hasMinute && hasSecond ? ':' : '') +\n                   (hasSecond ? pad2(s) : '');\n\n    let zone;\n    if (this.zone === Timezone.utcTimezone) {\n      zone = 'Z';\n    } else if (this.zone instanceof UtcOffset) {\n      zone = this.zone.toString();\n    } else if (this.zone === Timezone.localTimezone) {\n      zone = '';\n    } else if (this.zone instanceof Timezone) {\n      let offset = UtcOffset.fromSeconds(this.zone.utcOffset(this));\n      zone = offset.toString();\n    } else {\n      zone = '';\n    }\n\n    switch (this.icaltype) {\n      case \"time\":\n        return timepart + zone;\n      case \"date-and-or-time\":\n      case \"date-time\":\n        return datepart + (timepart == '--' ? '' : 'T' + timepart + zone);\n      case \"date\":\n        return datepart;\n    }\n    return null;\n  }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n *\n * @ignore\n * @typedef {import(\"./types.js\").weekDay} weekDay\n * Imports the 'weekDay' type from the \"types.js\" module\n */\n\n/**\n * An iterator for a single recurrence rule. This class usually doesn't have to be instanciated\n * directly, the convenience method {@link ICAL.Recur#iterator} can be used.\n *\n * @memberof ICAL\n */\nclass RecurIterator {\n  static _indexMap = {\n    \"BYSECOND\": 0,\n    \"BYMINUTE\": 1,\n    \"BYHOUR\": 2,\n    \"BYDAY\": 3,\n    \"BYMONTHDAY\": 4,\n    \"BYYEARDAY\": 5,\n    \"BYWEEKNO\": 6,\n    \"BYMONTH\": 7,\n    \"BYSETPOS\": 8\n  };\n\n  static _expandMap = {\n    \"SECONDLY\": [1, 1, 1, 1, 1, 1, 1, 1],\n    \"MINUTELY\": [2, 1, 1, 1, 1, 1, 1, 1],\n    \"HOURLY\": [2, 2, 1, 1, 1, 1, 1, 1],\n    \"DAILY\": [2, 2, 2, 1, 1, 1, 1, 1],\n    \"WEEKLY\": [2, 2, 2, 2, 3, 3, 1, 1],\n    \"MONTHLY\": [2, 2, 2, 2, 2, 3, 3, 1],\n    \"YEARLY\": [2, 2, 2, 2, 2, 2, 2, 2]\n  };\n\n  static UNKNOWN = 0;\n  static CONTRACT = 1;\n  static EXPAND = 2;\n  static ILLEGAL = 3;\n\n  /**\n   * Creates a new ICAL.RecurIterator instance. The options object may contain additional members\n   * when resuming iteration from a previous run.\n   *\n   * @param {Object} options                The iterator options\n   * @param {Recur} options.rule            The rule to iterate.\n   * @param {Time} options.dtstart          The start date of the event.\n   * @param {Boolean=} options.initialized  When true, assume that options are\n   *        from a previously constructed iterator. Initialization will not be\n   *        repeated.\n   */\n  constructor(options) {\n    this.fromData(options);\n  }\n\n  /**\n   * True when iteration is finished.\n   * @type {Boolean}\n   */\n  completed = false;\n\n  /**\n   * The rule that is being iterated\n   * @type {Recur}\n   */\n  rule = null;\n\n  /**\n   * The start date of the event being iterated.\n   * @type {Time}\n   */\n  dtstart = null;\n\n  /**\n   * The last occurrence that was returned from the\n   * {@link RecurIterator#next} method.\n   * @type {Time}\n   */\n  last = null;\n\n  /**\n   * The sequence number from the occurrence\n   * @type {Number}\n   */\n  occurrence_number = 0;\n\n  /**\n   * The indices used for the {@link ICAL.RecurIterator#by_data} object.\n   * @type {Object}\n   * @private\n   */\n  by_indices = null;\n\n  /**\n   * If true, the iterator has already been initialized\n   * @type {Boolean}\n   * @private\n   */\n  initialized = false;\n\n  /**\n   * The initializd by-data.\n   * @type {Object}\n   * @private\n   */\n  by_data = null;\n\n  /**\n   * The expanded yeardays\n   * @type {Array}\n   * @private\n   */\n  days = null;\n\n  /**\n   * The index in the {@link ICAL.RecurIterator#days} array.\n   * @type {Number}\n   * @private\n   */\n  days_index = 0;\n\n  /**\n   * Initialize the recurrence iterator from the passed data object. This\n   * method is usually not called directly, you can initialize the iterator\n   * through the constructor.\n   *\n   * @param {Object} options                The iterator options\n   * @param {Recur} options.rule            The rule to iterate.\n   * @param {Time} options.dtstart          The start date of the event.\n   * @param {Boolean=} options.initialized  When true, assume that options are\n   *        from a previously constructed iterator. Initialization will not be\n   *        repeated.\n   */\n  fromData(options) {\n    this.rule = formatClassType(options.rule, Recur);\n\n    if (!this.rule) {\n      throw new Error('iterator requires a (ICAL.Recur) rule');\n    }\n\n    this.dtstart = formatClassType(options.dtstart, Time);\n\n    if (!this.dtstart) {\n      throw new Error('iterator requires a (ICAL.Time) dtstart');\n    }\n\n    if (options.by_data) {\n      this.by_data = options.by_data;\n    } else {\n      this.by_data = clone(this.rule.parts, true);\n    }\n\n    if (options.occurrence_number)\n      this.occurrence_number = options.occurrence_number;\n\n    this.days = options.days || [];\n    if (options.last) {\n      this.last = formatClassType(options.last, Time);\n    }\n\n    this.by_indices = options.by_indices;\n\n    if (!this.by_indices) {\n      this.by_indices = {\n        \"BYSECOND\": 0,\n        \"BYMINUTE\": 0,\n        \"BYHOUR\": 0,\n        \"BYDAY\": 0,\n        \"BYMONTH\": 0,\n        \"BYWEEKNO\": 0,\n        \"BYMONTHDAY\": 0\n      };\n    }\n\n    this.initialized = options.initialized || false;\n\n    if (!this.initialized) {\n      try {\n        this.init();\n      } catch (e) {\n        if (e instanceof InvalidRecurrenceRuleError) {\n          // Init may error if there are no possible recurrence instances from\n          // the rule, but we don't want to bubble this error up. Instead, we\n          // create an empty iterator.\n          this.completed = true;\n        } else {\n          // Propagate other errors to consumers.\n          throw e;\n        }\n      }\n    }\n  }\n\n  /**\n   * Initialize the iterator\n   * @private\n   */\n  init() {\n    this.initialized = true;\n    this.last = this.dtstart.clone();\n    let parts = this.by_data;\n\n    if (\"BYDAY\" in parts) {\n      // libical does this earlier when the rule is loaded, but we postpone to\n      // now so we can preserve the original order.\n      this.sort_byday_rules(parts.BYDAY);\n    }\n\n    // If the BYYEARDAY appares, no other date rule part may appear\n    if (\"BYYEARDAY\" in parts) {\n      if (\"BYMONTH\" in parts || \"BYWEEKNO\" in parts ||\n          \"BYMONTHDAY\" in parts || \"BYDAY\" in parts) {\n        throw new Error(\"Invalid BYYEARDAY rule\");\n      }\n    }\n\n    // BYWEEKNO and BYMONTHDAY rule parts may not both appear\n    if (\"BYWEEKNO\" in parts && \"BYMONTHDAY\" in parts) {\n      throw new Error(\"BYWEEKNO does not fit to BYMONTHDAY\");\n    }\n\n    // For MONTHLY recurrences (FREQ=MONTHLY) neither BYYEARDAY nor\n    // BYWEEKNO may appear.\n    if (this.rule.freq == \"MONTHLY\" &&\n        (\"BYYEARDAY\" in parts || \"BYWEEKNO\" in parts)) {\n      throw new Error(\"For MONTHLY recurrences neither BYYEARDAY nor BYWEEKNO may appear\");\n    }\n\n    // For WEEKLY recurrences (FREQ=WEEKLY) neither BYMONTHDAY nor\n    // BYYEARDAY may appear.\n    if (this.rule.freq == \"WEEKLY\" &&\n        (\"BYYEARDAY\" in parts || \"BYMONTHDAY\" in parts)) {\n      throw new Error(\"For WEEKLY recurrences neither BYMONTHDAY nor BYYEARDAY may appear\");\n    }\n\n    // BYYEARDAY may only appear in YEARLY rules\n    if (this.rule.freq != \"YEARLY\" && \"BYYEARDAY\" in parts) {\n      throw new Error(\"BYYEARDAY may only appear in YEARLY rules\");\n    }\n\n    this.last.second = this.setup_defaults(\"BYSECOND\", \"SECONDLY\", this.dtstart.second);\n    this.last.minute = this.setup_defaults(\"BYMINUTE\", \"MINUTELY\", this.dtstart.minute);\n    this.last.hour = this.setup_defaults(\"BYHOUR\", \"HOURLY\", this.dtstart.hour);\n    this.last.day = this.setup_defaults(\"BYMONTHDAY\", \"DAILY\", this.dtstart.day);\n    this.last.month = this.setup_defaults(\"BYMONTH\", \"MONTHLY\", this.dtstart.month);\n\n    if (this.rule.freq == \"WEEKLY\") {\n      if (\"BYDAY\" in parts) {\n        let [, dow] = this.ruleDayOfWeek(parts.BYDAY[0], this.rule.wkst);\n        let wkdy = dow - this.last.dayOfWeek(this.rule.wkst);\n        if ((this.last.dayOfWeek(this.rule.wkst) < dow && wkdy >= 0) || wkdy < 0) {\n          // Initial time is after first day of BYDAY data\n          this.last.day += wkdy;\n        }\n      } else {\n        let dayName = Recur.numericDayToIcalDay(this.dtstart.dayOfWeek());\n        parts.BYDAY = [dayName];\n      }\n    }\n\n    if (this.rule.freq == \"YEARLY\") {\n      // Some yearly recurrence rules may be specific enough to not actually\n      // occur on a yearly basis, e.g. the 29th day of February or the fifth\n      // Monday of a given month. The standard isn't clear on the intended\n      // behavior in these cases, but `libical` at least will iterate until it\n      // finds a matching year.\n      // CAREFUL: Some rules may specify an occurrence that can never happen,\n      // e.g. the first Monday of April so long as it falls on the 15th\n      // through the 21st. Detecting these is non-trivial, so ensure that we\n      // stop iterating at some point.\n      const untilYear = this.rule.until ? this.rule.until.year : 20000;\n      while (this.last.year <= untilYear) {\n        this.expand_year_days(this.last.year);\n        if (this.days.length > 0) {\n          break;\n        }\n        this.increment_year(this.rule.interval);\n      }\n\n      if (this.days.length == 0) {\n        throw new InvalidRecurrenceRuleError();\n      }\n\n      this._nextByYearDay();\n    }\n\n    if (this.rule.freq == \"MONTHLY\") {\n      if (this.has_by_data(\"BYDAY\")) {\n        let tempLast = null;\n        let initLast = this.last.clone();\n        let daysInMonth = Time.daysInMonth(this.last.month, this.last.year);\n\n        // Check every weekday in BYDAY with relative dow and pos.\n        for (let bydow of this.by_data.BYDAY) {\n          this.last = initLast.clone();\n          let [pos, dow] = this.ruleDayOfWeek(bydow);\n          let dayOfMonth = this.last.nthWeekDay(dow, pos);\n\n          // If |pos| >= 6, the byday is invalid for a monthly rule.\n          if (pos >= 6 || pos <= -6) {\n            throw new Error(\"Malformed values in BYDAY part\");\n          }\n\n          // If a Byday with pos=+/-5 is not in the current month it\n          // must be searched in the next months.\n          if (dayOfMonth > daysInMonth || dayOfMonth <= 0) {\n            // Skip if we have already found a \"last\" in this month.\n            if (tempLast && tempLast.month == initLast.month) {\n              continue;\n            }\n            while (dayOfMonth > daysInMonth || dayOfMonth <= 0) {\n              this.increment_month();\n              daysInMonth = Time.daysInMonth(this.last.month, this.last.year);\n              dayOfMonth = this.last.nthWeekDay(dow, pos);\n            }\n          }\n\n          this.last.day = dayOfMonth;\n          if (!tempLast || this.last.compare(tempLast) < 0) {\n            tempLast = this.last.clone();\n          }\n        }\n        this.last = tempLast.clone();\n\n        //XXX: This feels like a hack, but we need to initialize\n        //     the BYMONTHDAY case correctly and byDayAndMonthDay handles\n        //     this case. It accepts a special flag which will avoid incrementing\n        //     the initial value without the flag days that match the start time\n        //     would be missed.\n        if (this.has_by_data('BYMONTHDAY')) {\n          this._byDayAndMonthDay(true);\n        }\n\n        if (this.last.day > daysInMonth || this.last.day == 0) {\n          throw new Error(\"Malformed values in BYDAY part\");\n        }\n      } else if (this.has_by_data(\"BYMONTHDAY\")) {\n        // Change the day value so that normalisation won't change the month.\n        this.last.day = 1;\n\n        // Get a sorted list of days in the starting month that match the rule.\n        let normalized = this.normalizeByMonthDayRules(\n          this.last.year,\n          this.last.month,\n          this.rule.parts.BYMONTHDAY\n        ).filter(d => d >= this.last.day);\n\n        if (normalized.length) {\n          // There's at least one valid day, use it.\n          this.last.day = normalized[0];\n          this.by_data.BYMONTHDAY = normalized;\n        } else {\n          // There's no occurrence in this month, find the next valid month.\n          // The longest possible sequence of skipped months is February-April-June,\n          // so we might need to call next_month up to three times.\n          if (!this.next_month() && !this.next_month() && !this.next_month()) {\n            throw new Error(\"No possible occurrences\");\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Retrieve the next occurrence from the iterator.\n   * @return {Time}\n   */\n  next(again = false) {\n    let before = (this.last ? this.last.clone() : null);\n\n    if ((this.rule.count && this.occurrence_number >= this.rule.count) ||\n        (this.rule.until && this.last.compare(this.rule.until) > 0)) {\n      this.completed = true;\n    }\n\n    if (this.completed) {\n      return null;\n    }\n\n    if (this.occurrence_number == 0 && this.last.compare(this.dtstart) >= 0) {\n      // First of all, give the instance that was initialized\n      this.occurrence_number++;\n      return this.last;\n    }\n\n    let valid;\n    do {\n      valid = 1;\n\n      switch (this.rule.freq) {\n      case \"SECONDLY\":\n        this.next_second();\n        break;\n      case \"MINUTELY\":\n        this.next_minute();\n        break;\n      case \"HOURLY\":\n        this.next_hour();\n        break;\n      case \"DAILY\":\n        this.next_day();\n        break;\n      case \"WEEKLY\":\n        this.next_week();\n        break;\n      case \"MONTHLY\":\n        valid = this.next_month();\n        break;\n      case \"YEARLY\":\n        this.next_year();\n        break;\n\n      default:\n        return null;\n      }\n    } while (!this.check_contracting_rules() ||\n             this.last.compare(this.dtstart) < 0 ||\n             !valid);\n\n    if (this.last.compare(before) == 0) {\n      if (again) {\n        throw new Error(\"Same occurrence found twice, protecting you from death by recursion\");\n      }\n      this.next(true);\n    }\n\n    if (this.rule.until && this.last.compare(this.rule.until) > 0) {\n      this.completed = true;\n      return null;\n    } else {\n      this.occurrence_number++;\n      return this.last;\n    }\n  }\n\n  next_second() {\n    return this.next_generic(\"BYSECOND\", \"SECONDLY\", \"second\", \"minute\");\n  }\n\n  increment_second(inc) {\n    return this.increment_generic(inc, \"second\", 60, \"minute\");\n  }\n\n  next_minute() {\n    return this.next_generic(\"BYMINUTE\", \"MINUTELY\",\n                             \"minute\", \"hour\", \"next_second\");\n  }\n\n  increment_minute(inc) {\n    return this.increment_generic(inc, \"minute\", 60, \"hour\");\n  }\n\n  next_hour() {\n    return this.next_generic(\"BYHOUR\", \"HOURLY\", \"hour\",\n                             \"monthday\", \"next_minute\");\n  }\n\n  increment_hour(inc) {\n    this.increment_generic(inc, \"hour\", 24, \"monthday\");\n  }\n\n  next_day() {\n    let this_freq = (this.rule.freq == \"DAILY\");\n\n    if (this.next_hour() == 0) {\n      return 0;\n    }\n\n    if (this_freq) {\n      this.increment_monthday(this.rule.interval);\n    } else {\n      this.increment_monthday(1);\n    }\n\n    return 0;\n  }\n\n  next_week() {\n    let end_of_data = 0;\n\n    if (this.next_weekday_by_week() == 0) {\n      return end_of_data;\n    }\n\n    if (this.has_by_data(\"BYWEEKNO\")) {\n      this.by_indices.BYWEEKNO++;\n\n      if (this.by_indices.BYWEEKNO == this.by_data.BYWEEKNO.length) {\n        this.by_indices.BYWEEKNO = 0;\n        end_of_data = 1;\n      }\n\n      // HACK should be first month of the year\n      this.last.month = 1;\n      this.last.day = 1;\n\n      let week_no = this.by_data.BYWEEKNO[this.by_indices.BYWEEKNO];\n\n      this.last.day += 7 * week_no;\n\n      if (end_of_data) {\n        this.increment_year(1);\n      }\n    } else {\n      // Jump to the next week\n      this.increment_monthday(7 * this.rule.interval);\n    }\n\n    return end_of_data;\n  }\n\n  /**\n   * Normalize each by day rule for a given year/month.\n   * Takes into account ordering and negative rules\n   *\n   * @private\n   * @param {Number} year         Current year.\n   * @param {Number} month        Current month.\n   * @param {Array}  rules        Array of rules.\n   *\n   * @return {Array} sorted and normalized rules.\n   *                 Negative rules will be expanded to their\n   *                 correct positive values for easier processing.\n   */\n  normalizeByMonthDayRules(year, month, rules) {\n    let daysInMonth = Time.daysInMonth(month, year);\n\n    // XXX: This is probably bad for performance to allocate\n    //      a new array for each month we scan, if possible\n    //      we should try to optimize this...\n    let newRules = [];\n\n    let ruleIdx = 0;\n    let len = rules.length;\n    let rule;\n\n    for (; ruleIdx < len; ruleIdx++) {\n      rule = parseInt(rules[ruleIdx], 10);\n      if (isNaN(rule)) {\n        throw new Error('Invalid BYMONTHDAY value');\n      }\n\n      // if this rule falls outside of given\n      // month discard it.\n      if (Math.abs(rule) > daysInMonth) {\n        continue;\n      }\n\n      // negative case\n      if (rule < 0) {\n        // we add (not subtract it is a negative number)\n        // one from the rule because 1 === last day of month\n        rule = daysInMonth + (rule + 1);\n      } else if (rule === 0) {\n        // skip zero: it is invalid.\n        continue;\n      }\n\n      // only add unique items...\n      if (newRules.indexOf(rule) === -1) {\n        newRules.push(rule);\n      }\n\n    }\n\n    // unique and sort\n    return newRules.sort(function(a, b) { return a - b; });\n  }\n\n  /**\n   * NOTES:\n   * We are given a list of dates in the month (BYMONTHDAY) (23, etc..)\n   * Also we are given a list of days (BYDAY) (MO, 2SU, etc..) when\n   * both conditions match a given date (this.last.day) iteration stops.\n   *\n   * @private\n   * @param {Boolean=} isInit     When given true will not increment the\n   *                                current day (this.last).\n   */\n  _byDayAndMonthDay(isInit) {\n    let byMonthDay; // setup in initMonth\n    let byDay = this.by_data.BYDAY;\n\n    let date;\n    let dateIdx = 0;\n    let dateLen; // setup in initMonth\n    let dayLen = byDay.length;\n\n    // we are not valid by default\n    let dataIsValid = 0;\n\n    let daysInMonth;\n    let self = this;\n    // we need a copy of this, because a DateTime gets normalized\n    // automatically if the day is out of range. At some points we\n    // set the last day to 0 to start counting.\n    let lastDay = this.last.day;\n\n    function initMonth() {\n      daysInMonth = Time.daysInMonth(\n        self.last.month, self.last.year\n      );\n\n      byMonthDay = self.normalizeByMonthDayRules(\n        self.last.year,\n        self.last.month,\n        self.by_data.BYMONTHDAY\n      );\n\n      dateLen = byMonthDay.length;\n\n      // For the case of more than one occurrence in one month\n      // we have to be sure to start searching after the last\n      // found date or at the last BYMONTHDAY, unless we are\n      // initializing the iterator because in this case we have\n      // to consider the last found date too.\n      while (byMonthDay[dateIdx] <= lastDay &&\n             !(isInit && byMonthDay[dateIdx] == lastDay) &&\n             dateIdx < dateLen - 1) {\n        dateIdx++;\n      }\n    }\n\n    function nextMonth() {\n      // since the day is incremented at the start\n      // of the loop below, we need to start at 0\n      lastDay = 0;\n      self.increment_month();\n      dateIdx = 0;\n      initMonth();\n    }\n\n    initMonth();\n\n    // should come after initMonth\n    if (isInit) {\n      lastDay -= 1;\n    }\n\n    // Use a counter to avoid an infinite loop with malformed rules.\n    // Stop checking after 4 years so we consider also a leap year.\n    let monthsCounter = 48;\n\n    while (!dataIsValid && monthsCounter) {\n      monthsCounter--;\n      // increment the current date. This is really\n      // important otherwise we may fall into the infinite\n      // loop trap. The initial date takes care of the case\n      // where the current date is the date we are looking\n      // for.\n      date = lastDay + 1;\n\n      if (date > daysInMonth) {\n        nextMonth();\n        continue;\n      }\n\n      // find next date\n      let next = byMonthDay[dateIdx++];\n\n      // this logic is dependent on the BYMONTHDAYS\n      // being in order (which is done by #normalizeByMonthDayRules)\n      if (next >= date) {\n        // if the next month day is in the future jump to it.\n        lastDay = next;\n      } else {\n        // in this case the 'next' monthday has past\n        // we must move to the month.\n        nextMonth();\n        continue;\n      }\n\n      // Now we can loop through the day rules to see\n      // if one matches the current month date.\n      for (let dayIdx = 0; dayIdx < dayLen; dayIdx++) {\n        let parts = this.ruleDayOfWeek(byDay[dayIdx]);\n        let pos = parts[0];\n        let dow = parts[1];\n\n        this.last.day = lastDay;\n        if (this.last.isNthWeekDay(dow, pos)) {\n          // when we find the valid one we can mark\n          // the conditions as met and break the loop.\n          // (Because we have this condition above\n          //  it will also break the parent loop).\n          dataIsValid = 1;\n          break;\n        }\n      }\n\n      // It is completely possible that the combination\n      // cannot be matched in the current month.\n      // When we reach the end of possible combinations\n      // in the current month we iterate to the next one.\n      // since dateIdx is incremented right after getting\n      // \"next\", we don't need dateLen -1 here.\n      if (!dataIsValid && dateIdx === dateLen) {\n        nextMonth();\n        continue;\n      }\n    }\n\n    if (monthsCounter <= 0) {\n      // Checked 4 years without finding a Byday that matches\n      // a Bymonthday. Maybe the rule is not correct.\n      throw new Error(\"Malformed values in BYDAY combined with BYMONTHDAY parts\");\n    }\n\n\n    return dataIsValid;\n  }\n\n  next_month() {\n    let data_valid = 1;\n\n    if (this.next_hour() == 0) {\n      return data_valid;\n    }\n\n    if (this.has_by_data(\"BYDAY\") && this.has_by_data(\"BYMONTHDAY\")) {\n      data_valid = this._byDayAndMonthDay();\n    } else if (this.has_by_data(\"BYDAY\")) {\n      let daysInMonth = Time.daysInMonth(this.last.month, this.last.year);\n      let setpos = 0;\n      let setpos_total = 0;\n\n      if (this.has_by_data(\"BYSETPOS\")) {\n        let last_day = this.last.day;\n        for (let day = 1; day <= daysInMonth; day++) {\n          this.last.day = day;\n          if (this.is_day_in_byday(this.last)) {\n            setpos_total++;\n            if (day <= last_day) {\n              setpos++;\n            }\n          }\n        }\n        this.last.day = last_day;\n      }\n\n      data_valid = 0;\n      let day;\n      for (day = this.last.day + 1; day <= daysInMonth; day++) {\n        this.last.day = day;\n\n        if (this.is_day_in_byday(this.last)) {\n          if (!this.has_by_data(\"BYSETPOS\") ||\n              this.check_set_position(++setpos) ||\n              this.check_set_position(setpos - setpos_total - 1)) {\n\n            data_valid = 1;\n            break;\n          }\n        }\n      }\n\n      if (day > daysInMonth) {\n        this.last.day = 1;\n        this.increment_month();\n\n        if (this.is_day_in_byday(this.last)) {\n          if (!this.has_by_data(\"BYSETPOS\") || this.check_set_position(1)) {\n            data_valid = 1;\n          }\n        } else {\n          data_valid = 0;\n        }\n      }\n    } else if (this.has_by_data(\"BYMONTHDAY\")) {\n      this.by_indices.BYMONTHDAY++;\n\n      if (this.by_indices.BYMONTHDAY >= this.by_data.BYMONTHDAY.length) {\n        this.by_indices.BYMONTHDAY = 0;\n        this.increment_month();\n        if (this.by_indices.BYMONTHDAY >= this.by_data.BYMONTHDAY.length) {\n          return 0;\n        }\n      }\n\n      let daysInMonth = Time.daysInMonth(this.last.month, this.last.year);\n      let day = this.by_data.BYMONTHDAY[this.by_indices.BYMONTHDAY];\n\n      if (day < 0) {\n        day = daysInMonth + day + 1;\n      }\n\n      if (day > daysInMonth) {\n        this.last.day = 1;\n        data_valid = this.is_day_in_byday(this.last);\n      } else {\n        this.last.day = day;\n      }\n    } else {\n      this.increment_month();\n      let daysInMonth = Time.daysInMonth(this.last.month, this.last.year);\n      if (this.by_data.BYMONTHDAY[0] > daysInMonth) {\n        data_valid = 0;\n      } else {\n        this.last.day = this.by_data.BYMONTHDAY[0];\n      }\n    }\n\n    return data_valid;\n  }\n\n  next_weekday_by_week() {\n    let end_of_data = 0;\n\n    if (this.next_hour() == 0) {\n      return end_of_data;\n    }\n\n    if (!this.has_by_data(\"BYDAY\")) {\n      return 1;\n    }\n\n    for (;;) {\n      let tt = new Time();\n      this.by_indices.BYDAY++;\n\n      if (this.by_indices.BYDAY == Object.keys(this.by_data.BYDAY).length) {\n        this.by_indices.BYDAY = 0;\n        end_of_data = 1;\n      }\n\n      let coded_day = this.by_data.BYDAY[this.by_indices.BYDAY];\n      let parts = this.ruleDayOfWeek(coded_day);\n      let dow = parts[1];\n\n      dow -= this.rule.wkst;\n\n      if (dow < 0) {\n        dow += 7;\n      }\n\n      tt.year = this.last.year;\n      tt.month = this.last.month;\n      tt.day = this.last.day;\n\n      let startOfWeek = tt.startDoyWeek(this.rule.wkst);\n\n      if (dow + startOfWeek < 1) {\n        // The selected date is in the previous year\n        if (!end_of_data) {\n          continue;\n        }\n      }\n\n      let next = Time.fromDayOfYear(startOfWeek + dow, this.last.year);\n\n      /**\n       * The normalization horrors below are due to\n       * the fact that when the year/month/day changes\n       * it can effect the other operations that come after.\n       */\n      this.last.year = next.year;\n      this.last.month = next.month;\n      this.last.day = next.day;\n\n      return end_of_data;\n    }\n  }\n\n  next_year() {\n    if (this.next_hour() == 0) {\n      return 0;\n    }\n\n    if (++this.days_index == this.days.length) {\n      this.days_index = 0;\n      do {\n        this.increment_year(this.rule.interval);\n        if (this.has_by_data(\"BYMONTHDAY\")) {\n          this.by_data.BYMONTHDAY = this.normalizeByMonthDayRules(\n            this.last.year,\n            this.last.month,\n            this.rule.parts.BYMONTHDAY\n          );\n        }\n        this.expand_year_days(this.last.year);\n      } while (this.days.length == 0);\n    }\n\n    this._nextByYearDay();\n\n    return 1;\n  }\n\n  _nextByYearDay() {\n    let doy = this.days[this.days_index];\n    let year = this.last.year;\n    if (doy < 1) {\n        // Time.fromDayOfYear(doy, year) indexes relative to the\n        // start of the given year. That is different from the\n        // semantics of BYYEARDAY where negative indexes are an\n        // offset from the end of the given year.\n        doy += 1;\n        year += 1;\n    }\n    let next = Time.fromDayOfYear(doy, year);\n    this.last.day = next.day;\n    this.last.month = next.month;\n  }\n\n  /**\n   * @param dow (eg: '1TU', '-1MO')\n   * @param {weekDay=} aWeekStart The week start weekday\n   * @return [pos, numericDow] (eg: [1, 3]) numericDow is relative to aWeekStart\n   */\n  ruleDayOfWeek(dow, aWeekStart) {\n    let matches = dow.match(/([+-]?[0-9])?(MO|TU|WE|TH|FR|SA|SU)/);\n    if (matches) {\n      let pos = parseInt(matches[1] || 0, 10);\n      dow = Recur.icalDayToNumericDay(matches[2], aWeekStart);\n      return [pos, dow];\n    } else {\n      return [0, 0];\n    }\n  }\n\n  next_generic(aRuleType, aInterval, aDateAttr, aFollowingAttr, aPreviousIncr) {\n    let has_by_rule = (aRuleType in this.by_data);\n    let this_freq = (this.rule.freq == aInterval);\n    let end_of_data = 0;\n\n    if (aPreviousIncr && this[aPreviousIncr]() == 0) {\n      return end_of_data;\n    }\n\n    if (has_by_rule) {\n      this.by_indices[aRuleType]++;\n      let dta = this.by_data[aRuleType];\n\n      if (this.by_indices[aRuleType] == dta.length) {\n        this.by_indices[aRuleType] = 0;\n        end_of_data = 1;\n      }\n      this.last[aDateAttr] = dta[this.by_indices[aRuleType]];\n    } else if (this_freq) {\n      this[\"increment_\" + aDateAttr](this.rule.interval);\n    }\n\n    if (has_by_rule && end_of_data && this_freq) {\n      this[\"increment_\" + aFollowingAttr](1);\n    }\n\n    return end_of_data;\n  }\n\n  increment_monthday(inc) {\n    for (let i = 0; i < inc; i++) {\n      let daysInMonth = Time.daysInMonth(this.last.month, this.last.year);\n      this.last.day++;\n\n      if (this.last.day > daysInMonth) {\n        this.last.day -= daysInMonth;\n        this.increment_month();\n      }\n    }\n  }\n\n  increment_month() {\n    this.last.day = 1;\n    if (this.has_by_data(\"BYMONTH\")) {\n      this.by_indices.BYMONTH++;\n\n      if (this.by_indices.BYMONTH == this.by_data.BYMONTH.length) {\n        this.by_indices.BYMONTH = 0;\n        this.increment_year(1);\n      }\n\n      this.last.month = this.by_data.BYMONTH[this.by_indices.BYMONTH];\n    } else {\n      if (this.rule.freq == \"MONTHLY\") {\n        this.last.month += this.rule.interval;\n      } else {\n        this.last.month++;\n      }\n\n      this.last.month--;\n      let years = trunc(this.last.month / 12);\n      this.last.month %= 12;\n      this.last.month++;\n\n      if (years != 0) {\n        this.increment_year(years);\n      }\n    }\n\n    if (this.has_by_data(\"BYMONTHDAY\")) {\n      this.by_data.BYMONTHDAY = this.normalizeByMonthDayRules(\n        this.last.year,\n        this.last.month,\n        this.rule.parts.BYMONTHDAY\n      );\n    }\n  }\n\n  increment_year(inc) {\n    // Don't jump into the next month if this.last is Feb 29.\n    this.last.day = 1;\n    this.last.year += inc;\n  }\n\n  increment_generic(inc, aDateAttr, aFactor, aNextIncrement) {\n    this.last[aDateAttr] += inc;\n    let nextunit = trunc(this.last[aDateAttr] / aFactor);\n    this.last[aDateAttr] %= aFactor;\n    if (nextunit != 0) {\n      this[\"increment_\" + aNextIncrement](nextunit);\n    }\n  }\n\n  has_by_data(aRuleType) {\n    return (aRuleType in this.rule.parts);\n  }\n\n  expand_year_days(aYear) {\n    let t = new Time();\n    this.days = [];\n\n    // We need our own copy with a few keys set\n    let parts = {};\n    let rules = [\"BYDAY\", \"BYWEEKNO\", \"BYMONTHDAY\", \"BYMONTH\", \"BYYEARDAY\"];\n    for (let part of rules) {\n      if (part in this.rule.parts) {\n        parts[part] = this.rule.parts[part];\n      }\n    }\n\n    if (\"BYMONTH\" in parts && \"BYWEEKNO\" in parts) {\n      let valid = 1;\n      let validWeeks = {};\n      t.year = aYear;\n      t.isDate = true;\n\n      for (let monthIdx = 0; monthIdx < this.by_data.BYMONTH.length; monthIdx++) {\n        let month = this.by_data.BYMONTH[monthIdx];\n        t.month = month;\n        t.day = 1;\n        let first_week = t.weekNumber(this.rule.wkst);\n        t.day = Time.daysInMonth(month, aYear);\n        let last_week = t.weekNumber(this.rule.wkst);\n        for (monthIdx = first_week; monthIdx < last_week; monthIdx++) {\n          validWeeks[monthIdx] = 1;\n        }\n      }\n\n      for (let weekIdx = 0; weekIdx < this.by_data.BYWEEKNO.length && valid; weekIdx++) {\n        let weekno = this.by_data.BYWEEKNO[weekIdx];\n        if (weekno < 52) {\n          valid &= validWeeks[weekIdx];\n        } else {\n          valid = 0;\n        }\n      }\n\n      if (valid) {\n        delete parts.BYMONTH;\n      } else {\n        delete parts.BYWEEKNO;\n      }\n    }\n\n    let partCount = Object.keys(parts).length;\n\n    if (partCount == 0) {\n      let t1 = this.dtstart.clone();\n      t1.year = this.last.year;\n      this.days.push(t1.dayOfYear());\n    } else if (partCount == 1 && \"BYMONTH\" in parts) {\n      for (let month of this.by_data.BYMONTH) {\n        let t2 = this.dtstart.clone();\n        t2.year = aYear;\n        t2.month = month;\n        t2.isDate = true;\n        this.days.push(t2.dayOfYear());\n      }\n    } else if (partCount == 1 && \"BYMONTHDAY\" in parts) {\n      for (let monthday of this.by_data.BYMONTHDAY) {\n        let t3 = this.dtstart.clone();\n        if (monthday < 0) {\n          let daysInMonth = Time.daysInMonth(t3.month, aYear);\n          monthday = monthday + daysInMonth + 1;\n        }\n        t3.day = monthday;\n        t3.year = aYear;\n        t3.isDate = true;\n        this.days.push(t3.dayOfYear());\n      }\n    } else if (partCount == 2 &&\n               \"BYMONTHDAY\" in parts &&\n               \"BYMONTH\" in parts) {\n      for (let month of this.by_data.BYMONTH) {\n        let daysInMonth = Time.daysInMonth(month, aYear);\n        for (let monthday of this.by_data.BYMONTHDAY) {\n          if (monthday < 0) {\n            monthday = monthday + daysInMonth + 1;\n          }\n          t.day = monthday;\n          t.month = month;\n          t.year = aYear;\n          t.isDate = true;\n\n          this.days.push(t.dayOfYear());\n        }\n      }\n    } else if (partCount == 1 && \"BYWEEKNO\" in parts) ; else if (partCount == 2 &&\n               \"BYWEEKNO\" in parts &&\n               \"BYMONTHDAY\" in parts) ; else if (partCount == 1 && \"BYDAY\" in parts) {\n      this.days = this.days.concat(this.expand_by_day(aYear));\n    } else if (partCount == 2 && \"BYDAY\" in parts && \"BYMONTH\" in parts) {\n      for (let month of this.by_data.BYMONTH) {\n        let daysInMonth = Time.daysInMonth(month, aYear);\n\n        t.year = aYear;\n        t.month = month;\n        t.day = 1;\n        t.isDate = true;\n\n        let first_dow = t.dayOfWeek();\n        let doy_offset = t.dayOfYear() - 1;\n\n        t.day = daysInMonth;\n        let last_dow = t.dayOfWeek();\n\n        if (this.has_by_data(\"BYSETPOS\")) {\n          let by_month_day = [];\n          for (let day = 1; day <= daysInMonth; day++) {\n            t.day = day;\n            if (this.is_day_in_byday(t)) {\n              by_month_day.push(day);\n            }\n          }\n\n          for (let spIndex = 0; spIndex < by_month_day.length; spIndex++) {\n            if (this.check_set_position(spIndex + 1) ||\n                this.check_set_position(spIndex - by_month_day.length)) {\n              this.days.push(doy_offset + by_month_day[spIndex]);\n            }\n          }\n        } else {\n          for (let coded_day of this.by_data.BYDAY) {\n            let bydayParts = this.ruleDayOfWeek(coded_day);\n            let pos = bydayParts[0];\n            let dow = bydayParts[1];\n            let month_day;\n\n            let first_matching_day = ((dow + 7 - first_dow) % 7) + 1;\n            let last_matching_day = daysInMonth - ((last_dow + 7 - dow) % 7);\n\n            if (pos == 0) {\n              for (let day = first_matching_day; day <= daysInMonth; day += 7) {\n                this.days.push(doy_offset + day);\n              }\n            } else if (pos > 0) {\n              month_day = first_matching_day + (pos - 1) * 7;\n\n              if (month_day <= daysInMonth) {\n                this.days.push(doy_offset + month_day);\n              }\n            } else {\n              month_day = last_matching_day + (pos + 1) * 7;\n\n              if (month_day > 0) {\n                this.days.push(doy_offset + month_day);\n              }\n            }\n          }\n        }\n      }\n      // Return dates in order of occurrence (1,2,3,...) instead\n      // of by groups of weekdays (1,8,15,...,2,9,16,...).\n      this.days.sort(function(a, b) { return a - b; }); // Comparator function allows to sort numbers.\n    } else if (partCount == 2 && \"BYDAY\" in parts && \"BYMONTHDAY\" in parts) {\n      let expandedDays = this.expand_by_day(aYear);\n\n      for (let day of expandedDays) {\n        let tt = Time.fromDayOfYear(day, aYear);\n        if (this.by_data.BYMONTHDAY.indexOf(tt.day) >= 0) {\n          this.days.push(day);\n        }\n      }\n    } else if (partCount == 3 &&\n               \"BYDAY\" in parts &&\n               \"BYMONTHDAY\" in parts &&\n               \"BYMONTH\" in parts) {\n      let expandedDays = this.expand_by_day(aYear);\n\n      for (let day of expandedDays) {\n        let tt = Time.fromDayOfYear(day, aYear);\n\n        if (this.by_data.BYMONTH.indexOf(tt.month) >= 0 &&\n            this.by_data.BYMONTHDAY.indexOf(tt.day) >= 0) {\n          this.days.push(day);\n        }\n      }\n    } else if (partCount == 2 && \"BYDAY\" in parts && \"BYWEEKNO\" in parts) {\n      let expandedDays = this.expand_by_day(aYear);\n\n      for (let day of expandedDays) {\n        let tt = Time.fromDayOfYear(day, aYear);\n        let weekno = tt.weekNumber(this.rule.wkst);\n\n        if (this.by_data.BYWEEKNO.indexOf(weekno)) {\n          this.days.push(day);\n        }\n      }\n    } else if (partCount == 3 &&\n               \"BYDAY\" in parts &&\n               \"BYWEEKNO\" in parts &&\n               \"BYMONTHDAY\" in parts) ; else if (partCount == 1 && \"BYYEARDAY\" in parts) {\n      this.days = this.days.concat(this.by_data.BYYEARDAY);\n    } else {\n      this.days = [];\n    }\n\n    let daysInYear = Time.isLeapYear(aYear) ? 366 : 365;\n    this.days.sort((a, b) => {\n      if (a < 0) a += daysInYear + 1;\n      if (b < 0) b += daysInYear + 1;\n      return a - b;\n    });\n\n    return 0;\n  }\n\n  expand_by_day(aYear) {\n\n    let days_list = [];\n    let tmp = this.last.clone();\n\n    tmp.year = aYear;\n    tmp.month = 1;\n    tmp.day = 1;\n    tmp.isDate = true;\n\n    let start_dow = tmp.dayOfWeek();\n\n    tmp.month = 12;\n    tmp.day = 31;\n    tmp.isDate = true;\n\n    let end_dow = tmp.dayOfWeek();\n    let end_year_day = tmp.dayOfYear();\n\n    for (let day of this.by_data.BYDAY) {\n      let parts = this.ruleDayOfWeek(day);\n      let pos = parts[0];\n      let dow = parts[1];\n\n      if (pos == 0) {\n        let tmp_start_doy = ((dow + 7 - start_dow) % 7) + 1;\n\n        for (let doy = tmp_start_doy; doy <= end_year_day; doy += 7) {\n          days_list.push(doy);\n        }\n\n      } else if (pos > 0) {\n        let first;\n        if (dow >= start_dow) {\n          first = dow - start_dow + 1;\n        } else {\n          first = dow - start_dow + 8;\n        }\n\n        days_list.push(first + (pos - 1) * 7);\n      } else {\n        let last;\n        pos = -pos;\n\n        if (dow <= end_dow) {\n          last = end_year_day - end_dow + dow;\n        } else {\n          last = end_year_day - end_dow + dow - 7;\n        }\n\n        days_list.push(last - (pos - 1) * 7);\n      }\n    }\n    return days_list;\n  }\n\n  is_day_in_byday(tt) {\n    if (this.by_data.BYDAY) {\n      for (let day of this.by_data.BYDAY) {\n        let parts = this.ruleDayOfWeek(day);\n        let pos = parts[0];\n        let dow = parts[1];\n        let this_dow = tt.dayOfWeek();\n\n        if ((pos == 0 && dow == this_dow) ||\n            (tt.nthWeekDay(dow, pos) == tt.day)) {\n          return 1;\n        }\n      }\n    }\n\n    return 0;\n  }\n\n  /**\n   * Checks if given value is in BYSETPOS.\n   *\n   * @private\n   * @param {Numeric} aPos position to check for.\n   * @return {Boolean} false unless BYSETPOS rules exist\n   *                   and the given value is present in rules.\n   */\n  check_set_position(aPos) {\n    if (this.has_by_data('BYSETPOS')) {\n      let idx = this.by_data.BYSETPOS.indexOf(aPos);\n      // negative numbers are not false-y\n      return idx !== -1;\n    }\n    return false;\n  }\n\n  sort_byday_rules(aRules) {\n    for (let i = 0; i < aRules.length; i++) {\n      for (let j = 0; j < i; j++) {\n        let one = this.ruleDayOfWeek(aRules[j], this.rule.wkst)[1];\n        let two = this.ruleDayOfWeek(aRules[i], this.rule.wkst)[1];\n\n        if (one > two) {\n          let tmp = aRules[i];\n          aRules[i] = aRules[j];\n          aRules[j] = tmp;\n        }\n      }\n    }\n  }\n\n  check_contract_restriction(aRuleType, v) {\n    let indexMapValue = RecurIterator._indexMap[aRuleType];\n    let ruleMapValue = RecurIterator._expandMap[this.rule.freq][indexMapValue];\n    let pass = false;\n\n    if (aRuleType in this.by_data &&\n        ruleMapValue == RecurIterator.CONTRACT) {\n\n      let ruleType = this.by_data[aRuleType];\n\n      for (let bydata of ruleType) {\n        if (bydata == v) {\n          pass = true;\n          break;\n        }\n      }\n    } else {\n      // Not a contracting byrule or has no data, test passes\n      pass = true;\n    }\n    return pass;\n  }\n\n  check_contracting_rules() {\n    let dow = this.last.dayOfWeek();\n    let weekNo = this.last.weekNumber(this.rule.wkst);\n    let doy = this.last.dayOfYear();\n\n    return (this.check_contract_restriction(\"BYSECOND\", this.last.second) &&\n            this.check_contract_restriction(\"BYMINUTE\", this.last.minute) &&\n            this.check_contract_restriction(\"BYHOUR\", this.last.hour) &&\n            this.check_contract_restriction(\"BYDAY\", Recur.numericDayToIcalDay(dow)) &&\n            this.check_contract_restriction(\"BYWEEKNO\", weekNo) &&\n            this.check_contract_restriction(\"BYMONTHDAY\", this.last.day) &&\n            this.check_contract_restriction(\"BYMONTH\", this.last.month) &&\n            this.check_contract_restriction(\"BYYEARDAY\", doy));\n  }\n\n  setup_defaults(aRuleType, req, deftime) {\n    let indexMapValue = RecurIterator._indexMap[aRuleType];\n    let ruleMapValue = RecurIterator._expandMap[this.rule.freq][indexMapValue];\n\n    if (ruleMapValue != RecurIterator.CONTRACT) {\n      if (!(aRuleType in this.by_data)) {\n        this.by_data[aRuleType] = [deftime];\n      }\n      if (this.rule.freq != req) {\n        return this.by_data[aRuleType][0];\n      }\n    }\n    return deftime;\n  }\n\n  /**\n   * Convert iterator into a serialize-able object.  Will preserve current\n   * iteration sequence to ensure the seamless continuation of the recurrence\n   * rule.\n   * @return {Object}\n   */\n  toJSON() {\n    let result = Object.create(null);\n\n    result.initialized = this.initialized;\n    result.rule = this.rule.toJSON();\n    result.dtstart = this.dtstart.toJSON();\n    result.by_data = this.by_data;\n    result.days = this.days;\n    result.last = this.last.toJSON();\n    result.by_indices = this.by_indices;\n    result.occurrence_number = this.occurrence_number;\n\n    return result;\n  }\n}\n\n/**\n * An error indicating that a recurrence rule is invalid and produces no\n * occurrences.\n *\n * @extends {Error}\n * @class\n */\nclass InvalidRecurrenceRuleError extends Error {\n  constructor() {\n    super(\"Recurrence rule has no valid occurrences\");\n  }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n *\n * @ignore\n * @typedef {import(\"./types.js\").weekDay} weekDay\n * Imports the 'weekDay' type from the \"types.js\" module\n * @typedef {import(\"./types.js\").frequencyValues} frequencyValues\n * Imports the 'frequencyValues' type from the \"types.js\" module\n */\n\nconst VALID_DAY_NAMES = /^(SU|MO|TU|WE|TH|FR|SA)$/;\nconst VALID_BYDAY_PART = /^([+-])?(5[0-3]|[1-4][0-9]|[1-9])?(SU|MO|TU|WE|TH|FR|SA)$/;\nconst DOW_MAP = {\n  SU: Time.SUNDAY,\n  MO: Time.MONDAY,\n  TU: Time.TUESDAY,\n  WE: Time.WEDNESDAY,\n  TH: Time.THURSDAY,\n  FR: Time.FRIDAY,\n  SA: Time.SATURDAY\n};\n\nconst REVERSE_DOW_MAP = Object.fromEntries(Object.entries(DOW_MAP).map(entry => entry.reverse()));\n\nconst ALLOWED_FREQ = ['SECONDLY', 'MINUTELY', 'HOURLY',\n                      'DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'];\n\n/**\n * This class represents the \"recur\" value type, used for example by RRULE. It provides methods to\n * calculate occurrences among others.\n *\n * @memberof ICAL\n */\nclass Recur {\n  /**\n   * Creates a new {@link ICAL.Recur} instance from the passed string.\n   *\n   * @param {String} string         The string to parse\n   * @return {Recur}                The created recurrence instance\n   */\n  static fromString(string) {\n    let data = this._stringToData(string, false);\n    return new Recur(data);\n  }\n\n  /**\n   * Creates a new {@link ICAL.Recur} instance using members from the passed\n   * data object.\n   *\n   * @param {Object} aData                              An object with members of the recurrence\n   * @param {frequencyValues=} aData.freq               The frequency value\n   * @param {Number=} aData.interval                    The INTERVAL value\n   * @param {weekDay=} aData.wkst                       The week start value\n   * @param {Time=} aData.until                         The end of the recurrence set\n   * @param {Number=} aData.count                       The number of occurrences\n   * @param {Array.<Number>=} aData.bysecond            The seconds for the BYSECOND part\n   * @param {Array.<Number>=} aData.byminute            The minutes for the BYMINUTE part\n   * @param {Array.<Number>=} aData.byhour              The hours for the BYHOUR part\n   * @param {Array.<String>=} aData.byday               The BYDAY values\n   * @param {Array.<Number>=} aData.bymonthday          The days for the BYMONTHDAY part\n   * @param {Array.<Number>=} aData.byyearday           The days for the BYYEARDAY part\n   * @param {Array.<Number>=} aData.byweekno            The weeks for the BYWEEKNO part\n   * @param {Array.<Number>=} aData.bymonth             The month for the BYMONTH part\n   * @param {Array.<Number>=} aData.bysetpos            The positionals for the BYSETPOS part\n   */\n  static fromData(aData) {\n    return new Recur(aData);\n  }\n\n  /**\n   * Converts a recurrence string to a data object, suitable for the fromData\n   * method.\n   *\n   * @private\n   * @param {String} string     The string to parse\n   * @param {Boolean} fmtIcal   If true, the string is considered to be an\n   *                              iCalendar string\n   * @return {Recur}            The recurrence instance\n   */\n  static _stringToData(string, fmtIcal) {\n    let dict = Object.create(null);\n\n    // split is slower in FF but fast enough.\n    // v8 however this is faster then manual split?\n    let values = string.split(';');\n    let len = values.length;\n\n    for (let i = 0; i < len; i++) {\n      let parts = values[i].split('=');\n      let ucname = parts[0].toUpperCase();\n      let lcname = parts[0].toLowerCase();\n      let name = (fmtIcal ? lcname : ucname);\n      let value = parts[1];\n\n      if (ucname in partDesign) {\n        let partArr = value.split(',');\n        let partSet = new Set();\n\n        for (let part of partArr) {\n          partSet.add(partDesign[ucname](part));\n        }\n        partArr = [...partSet];\n\n        dict[name] = (partArr.length == 1 ? partArr[0] : partArr);\n      } else if (ucname in optionDesign) {\n        optionDesign[ucname](value, dict, fmtIcal);\n      } else {\n        // Don't swallow unknown values. Just set them as they are.\n        dict[lcname] = value;\n      }\n    }\n\n    return dict;\n  }\n\n  /**\n   * Convert an ical representation of a day (SU, MO, etc..)\n   * into a numeric value of that day.\n   *\n   * @param {String} string     The iCalendar day name\n   * @param {weekDay=} aWeekStart\n   *        The week start weekday, defaults to SUNDAY\n   * @return {Number}           Numeric value of given day\n   */\n  static icalDayToNumericDay(string, aWeekStart) {\n    //XXX: this is here so we can deal\n    //     with possibly invalid string values.\n    let firstDow = aWeekStart || Time.SUNDAY;\n    return ((DOW_MAP[string] - firstDow + 7) % 7) + 1;\n  }\n\n  /**\n   * Convert a numeric day value into its ical representation (SU, MO, etc..)\n   *\n   * @param {Number} num        Numeric value of given day\n   * @param {weekDay=} aWeekStart\n   *        The week start weekday, defaults to SUNDAY\n   * @return {String}           The ICAL day value, e.g SU,MO,...\n   */\n  static numericDayToIcalDay(num, aWeekStart) {\n    //XXX: this is here so we can deal with possibly invalid number values.\n    //     Also, this allows consistent mapping between day numbers and day\n    //     names for external users.\n    let firstDow = aWeekStart || Time.SUNDAY;\n    let dow = (num + firstDow - Time.SUNDAY);\n    if (dow > 7) {\n      dow -= 7;\n    }\n    return REVERSE_DOW_MAP[dow];\n  }\n\n  /**\n   * Create a new instance of the Recur class.\n   *\n   * @param {Object} data                               An object with members of the recurrence\n   * @param {frequencyValues=} data.freq                The frequency value\n   * @param {Number=} data.interval                     The INTERVAL value\n   * @param {weekDay=} data.wkst                        The week start value\n   * @param {Time=} data.until                          The end of the recurrence set\n   * @param {Number=} data.count                        The number of occurrences\n   * @param {Array.<Number>=} data.bysecond             The seconds for the BYSECOND part\n   * @param {Array.<Number>=} data.byminute             The minutes for the BYMINUTE part\n   * @param {Array.<Number>=} data.byhour               The hours for the BYHOUR part\n   * @param {Array.<String>=} data.byday                The BYDAY values\n   * @param {Array.<Number>=} data.bymonthday           The days for the BYMONTHDAY part\n   * @param {Array.<Number>=} data.byyearday            The days for the BYYEARDAY part\n   * @param {Array.<Number>=} data.byweekno             The weeks for the BYWEEKNO part\n   * @param {Array.<Number>=} data.bymonth              The month for the BYMONTH part\n   * @param {Array.<Number>=} data.bysetpos             The positionals for the BYSETPOS part\n   */\n  constructor(data) {\n    this.wrappedJSObject = this;\n    this.parts = {};\n\n    if (data && typeof(data) === 'object') {\n      this.fromData(data);\n    }\n  }\n\n  /**\n   * An object holding the BY-parts of the recurrence rule\n   * @memberof ICAL.Recur\n   * @typedef {Object} byParts\n   * @property {Array.<Number>=} BYSECOND            The seconds for the BYSECOND part\n   * @property {Array.<Number>=} BYMINUTE            The minutes for the BYMINUTE part\n   * @property {Array.<Number>=} BYHOUR              The hours for the BYHOUR part\n   * @property {Array.<String>=} BYDAY               The BYDAY values\n   * @property {Array.<Number>=} BYMONTHDAY          The days for the BYMONTHDAY part\n   * @property {Array.<Number>=} BYYEARDAY           The days for the BYYEARDAY part\n   * @property {Array.<Number>=} BYWEEKNO            The weeks for the BYWEEKNO part\n   * @property {Array.<Number>=} BYMONTH             The month for the BYMONTH part\n   * @property {Array.<Number>=} BYSETPOS            The positionals for the BYSETPOS part\n   */\n\n  /**\n   * An object holding the BY-parts of the recurrence rule\n   * @type {byParts}\n   */\n  parts = null;\n\n  /**\n   * The interval value for the recurrence rule.\n   * @type {Number}\n   */\n  interval = 1;\n\n  /**\n   * The week start day\n   *\n   * @type {weekDay}\n   * @default ICAL.Time.MONDAY\n   */\n  wkst = Time.MONDAY;\n\n  /**\n   * The end of the recurrence\n   * @type {?Time}\n   */\n  until = null;\n\n  /**\n   * The maximum number of occurrences\n   * @type {?Number}\n   */\n  count = null;\n\n  /**\n   * The frequency value.\n   * @type {frequencyValues}\n   */\n  freq = null;\n\n  /**\n   * The class identifier.\n   * @constant\n   * @type {String}\n   * @default \"icalrecur\"\n   */\n  icalclass = \"icalrecur\";\n\n  /**\n   * The type name, to be used in the jCal object.\n   * @constant\n   * @type {String}\n   * @default \"recur\"\n   */\n  icaltype = \"recur\";\n\n  /**\n   * Create a new iterator for this recurrence rule. The passed start date\n   * must be the start date of the event, not the start of the range to\n   * search in.\n   *\n   * @example\n   * let recur = comp.getFirstPropertyValue('rrule');\n   * let dtstart = comp.getFirstPropertyValue('dtstart');\n   * let iter = recur.iterator(dtstart);\n   * for (let next = iter.next(); next; next = iter.next()) {\n   *   if (next.compare(rangeStart) < 0) {\n   *     continue;\n   *   }\n   *   console.log(next.toString());\n   * }\n   *\n   * @param {Time} aStart        The item's start date\n   * @return {RecurIterator}     The recurrence iterator\n   */\n  iterator(aStart) {\n    return new RecurIterator({\n      rule: this,\n      dtstart: aStart\n    });\n  }\n\n  /**\n   * Returns a clone of the recurrence object.\n   *\n   * @return {Recur}      The cloned object\n   */\n  clone() {\n    return new Recur(this.toJSON());\n  }\n\n  /**\n   * Checks if the current rule is finite, i.e. has a count or until part.\n   *\n   * @return {Boolean}        True, if the rule is finite\n   */\n  isFinite() {\n    return !!(this.count || this.until);\n  }\n\n  /**\n   * Checks if the current rule has a count part, and not limited by an until\n   * part.\n   *\n   * @return {Boolean}        True, if the rule is by count\n   */\n  isByCount() {\n    return !!(this.count && !this.until);\n  }\n\n  /**\n   * Adds a component (part) to the recurrence rule. This is not a component\n   * in the sense of {@link ICAL.Component}, but a part of the recurrence\n   * rule, i.e. BYMONTH.\n   *\n   * @param {String} aType            The name of the component part\n   * @param {Array|String} aValue     The component value\n   */\n  addComponent(aType, aValue) {\n    let ucname = aType.toUpperCase();\n    if (ucname in this.parts) {\n      this.parts[ucname].push(aValue);\n    } else {\n      this.parts[ucname] = [aValue];\n    }\n  }\n\n  /**\n   * Sets the component value for the given by-part.\n   *\n   * @param {String} aType        The component part name\n   * @param {Array} aValues       The component values\n   */\n  setComponent(aType, aValues) {\n    this.parts[aType.toUpperCase()] = aValues.slice();\n  }\n\n  /**\n   * Gets (a copy) of the requested component value.\n   *\n   * @param {String} aType        The component part name\n   * @return {Array}              The component part value\n   */\n  getComponent(aType) {\n    let ucname = aType.toUpperCase();\n    return (ucname in this.parts ? this.parts[ucname].slice() : []);\n  }\n\n  /**\n   * Retrieves the next occurrence after the given recurrence id. See the\n   * guide on {@tutorial terminology} for more details.\n   *\n   * NOTE: Currently, this method iterates all occurrences from the start\n   * date. It should not be called in a loop for performance reasons. If you\n   * would like to get more than one occurrence, you can iterate the\n   * occurrences manually, see the example on the\n   * {@link ICAL.Recur#iterator iterator} method.\n   *\n   * @param {Time} aStartTime        The start of the event series\n   * @param {Time} aRecurrenceId     The date of the last occurrence\n   * @return {Time}                  The next occurrence after\n   */\n  getNextOccurrence(aStartTime, aRecurrenceId) {\n    let iter = this.iterator(aStartTime);\n    let next;\n\n    do {\n      next = iter.next();\n    } while (next && next.compare(aRecurrenceId) <= 0);\n\n    if (next && aRecurrenceId.zone) {\n      next.zone = aRecurrenceId.zone;\n    }\n\n    return next;\n  }\n\n  /**\n   * Sets up the current instance using members from the passed data object.\n   *\n   * @param {Object} data                               An object with members of the recurrence\n   * @param {frequencyValues=} data.freq                The frequency value\n   * @param {Number=} data.interval                     The INTERVAL value\n   * @param {weekDay=} data.wkst                        The week start value\n   * @param {Time=} data.until                          The end of the recurrence set\n   * @param {Number=} data.count                        The number of occurrences\n   * @param {Array.<Number>=} data.bysecond             The seconds for the BYSECOND part\n   * @param {Array.<Number>=} data.byminute             The minutes for the BYMINUTE part\n   * @param {Array.<Number>=} data.byhour               The hours for the BYHOUR part\n   * @param {Array.<String>=} data.byday                The BYDAY values\n   * @param {Array.<Number>=} data.bymonthday           The days for the BYMONTHDAY part\n   * @param {Array.<Number>=} data.byyearday            The days for the BYYEARDAY part\n   * @param {Array.<Number>=} data.byweekno             The weeks for the BYWEEKNO part\n   * @param {Array.<Number>=} data.bymonth              The month for the BYMONTH part\n   * @param {Array.<Number>=} data.bysetpos             The positionals for the BYSETPOS part\n   */\n  fromData(data) {\n    for (let key in data) {\n      let uckey = key.toUpperCase();\n\n      if (uckey in partDesign) {\n        if (Array.isArray(data[key])) {\n          this.parts[uckey] = data[key];\n        } else {\n          this.parts[uckey] = [data[key]];\n        }\n      } else {\n        this[key] = data[key];\n      }\n    }\n\n    if (this.interval && typeof this.interval != \"number\") {\n      optionDesign.INTERVAL(this.interval, this);\n    }\n\n    if (this.wkst && typeof this.wkst != \"number\") {\n      this.wkst = Recur.icalDayToNumericDay(this.wkst);\n    }\n\n    if (this.until && !(this.until instanceof Time)) {\n      this.until = Time.fromString(this.until);\n    }\n  }\n\n  /**\n   * The jCal representation of this recurrence type.\n   * @return {Object}\n   */\n  toJSON() {\n    let res = Object.create(null);\n    res.freq = this.freq;\n\n    if (this.count) {\n      res.count = this.count;\n    }\n\n    if (this.interval > 1) {\n      res.interval = this.interval;\n    }\n\n    for (let [k, kparts] of Object.entries(this.parts)) {\n      if (Array.isArray(kparts) && kparts.length == 1) {\n        res[k.toLowerCase()] = kparts[0];\n      } else {\n        res[k.toLowerCase()] = clone(kparts);\n      }\n    }\n\n    if (this.until) {\n      res.until = this.until.toString();\n    }\n    if ('wkst' in this && this.wkst !== Time.DEFAULT_WEEK_START) {\n      res.wkst = Recur.numericDayToIcalDay(this.wkst);\n    }\n    return res;\n  }\n\n  /**\n   * The string representation of this recurrence rule.\n   * @return {String}\n   */\n  toString() {\n    // TODO retain order\n    let str = \"FREQ=\" + this.freq;\n    if (this.count) {\n      str += \";COUNT=\" + this.count;\n    }\n    if (this.interval > 1) {\n      str += \";INTERVAL=\" + this.interval;\n    }\n    for (let [k, v] of Object.entries(this.parts)) {\n      str += \";\" + k + \"=\" + v;\n    }\n    if (this.until) {\n      str += ';UNTIL=' + this.until.toICALString();\n    }\n    if ('wkst' in this && this.wkst !== Time.DEFAULT_WEEK_START) {\n      str += ';WKST=' + Recur.numericDayToIcalDay(this.wkst);\n    }\n    return str;\n  }\n}\n\nfunction parseNumericValue(type, min, max, value) {\n  let result = value;\n\n  if (value[0] === '+') {\n    result = value.slice(1);\n  }\n\n  result = strictParseInt(result);\n\n  if (min !== undefined && value < min) {\n    throw new Error(\n      type + ': invalid value \"' + value + '\" must be > ' + min\n    );\n  }\n\n  if (max !== undefined && value > max) {\n    throw new Error(\n      type + ': invalid value \"' + value + '\" must be < ' + min\n    );\n  }\n\n  return result;\n}\n\nconst optionDesign = {\n  FREQ: function(value, dict, fmtIcal) {\n    // yes this is actually equal or faster then regex.\n    // upside here is we can enumerate the valid values.\n    if (ALLOWED_FREQ.indexOf(value) !== -1) {\n      dict.freq = value;\n    } else {\n      throw new Error(\n        'invalid frequency \"' + value + '\" expected: \"' +\n        ALLOWED_FREQ.join(', ') + '\"'\n      );\n    }\n  },\n\n  COUNT: function(value, dict, fmtIcal) {\n    dict.count = strictParseInt(value);\n  },\n\n  INTERVAL: function(value, dict, fmtIcal) {\n    dict.interval = strictParseInt(value);\n    if (dict.interval < 1) {\n      // 0 or negative values are not allowed, some engines seem to generate\n      // it though. Assume 1 instead.\n      dict.interval = 1;\n    }\n  },\n\n  UNTIL: function(value, dict, fmtIcal) {\n    if (value.length > 10) {\n      dict.until = design$1.icalendar.value['date-time'].fromICAL(value);\n    } else {\n      dict.until = design$1.icalendar.value.date.fromICAL(value);\n    }\n    if (!fmtIcal) {\n      dict.until = Time.fromString(dict.until);\n    }\n  },\n\n  WKST: function(value, dict, fmtIcal) {\n    if (VALID_DAY_NAMES.test(value)) {\n      dict.wkst = Recur.icalDayToNumericDay(value);\n    } else {\n      throw new Error('invalid WKST value \"' + value + '\"');\n    }\n  }\n};\n\nconst partDesign = {\n  BYSECOND: parseNumericValue.bind(undefined, 'BYSECOND', 0, 60),\n  BYMINUTE: parseNumericValue.bind(undefined, 'BYMINUTE', 0, 59),\n  BYHOUR: parseNumericValue.bind(undefined, 'BYHOUR', 0, 23),\n  BYDAY: function(value) {\n    if (VALID_BYDAY_PART.test(value)) {\n      return value;\n    } else {\n      throw new Error('invalid BYDAY value \"' + value + '\"');\n    }\n  },\n  BYMONTHDAY: parseNumericValue.bind(undefined, 'BYMONTHDAY', -31, 31),\n  BYYEARDAY: parseNumericValue.bind(undefined, 'BYYEARDAY', -366, 366),\n  BYWEEKNO: parseNumericValue.bind(undefined, 'BYWEEKNO', -53, 53),\n  BYMONTH: parseNumericValue.bind(undefined, 'BYMONTH', 1, 12),\n  BYSETPOS: parseNumericValue.bind(undefined, 'BYSETPOS', -366, 366)\n};\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n * @ignore\n * @typedef {import(\"./types.js\").jCalComponent} jCalComponent\n * Imports the 'occurrenceDetails' type from the \"types.js\" module\n */\n\n/**\n * This class represents the \"period\" value type, with various calculation and manipulation methods.\n *\n * @memberof ICAL\n */\nclass Period {\n  /**\n   * Creates a new {@link ICAL.Period} instance from the passed string.\n   *\n   * @param {String} str            The string to parse\n   * @param {Property} prop         The property this period will be on\n   * @return {Period}               The created period instance\n   */\n  static fromString(str, prop) {\n    let parts = str.split('/');\n\n    if (parts.length !== 2) {\n      throw new Error(\n        'Invalid string value: \"' + str + '\" must contain a \"/\" char.'\n      );\n    }\n\n    let options = {\n      start: Time.fromDateTimeString(parts[0], prop)\n    };\n\n    let end = parts[1];\n\n    if (Duration.isValueString(end)) {\n      options.duration = Duration.fromString(end);\n    } else {\n      options.end = Time.fromDateTimeString(end, prop);\n    }\n\n    return new Period(options);\n  }\n\n  /**\n   * Creates a new {@link ICAL.Period} instance from the given data object.\n   * The passed data object cannot contain both and end date and a duration.\n   *\n   * @param {Object} aData                  An object with members of the period\n   * @param {Time=} aData.start             The start of the period\n   * @param {Time=} aData.end               The end of the period\n   * @param {Duration=} aData.duration      The duration of the period\n   * @return {Period}                       The period instance\n   */\n  static fromData(aData) {\n    return new Period(aData);\n  }\n\n  /**\n   * Returns a new period instance from the given jCal data array. The first\n   * member is always the start date string, the second member is either a\n   * duration or end date string.\n   *\n   * @param {jCalComponent} aData           The jCal data array\n   * @param {Property} aProp                The property this jCal data is on\n   * @param {Boolean} aLenient              If true, data value can be both date and date-time\n   * @return {Period}                       The period instance\n   */\n  static fromJSON(aData, aProp, aLenient) {\n    function fromDateOrDateTimeString(aValue, dateProp) {\n      if (aLenient) {\n        return Time.fromString(aValue, dateProp);\n      } else {\n        return Time.fromDateTimeString(aValue, dateProp);\n      }\n    }\n\n    if (Duration.isValueString(aData[1])) {\n      return Period.fromData({\n        start: fromDateOrDateTimeString(aData[0], aProp),\n        duration: Duration.fromString(aData[1])\n      });\n    } else {\n      return Period.fromData({\n        start: fromDateOrDateTimeString(aData[0], aProp),\n        end: fromDateOrDateTimeString(aData[1], aProp)\n      });\n    }\n  }\n\n  /**\n   * Creates a new ICAL.Period instance. The passed data object cannot contain both and end date and\n   * a duration.\n   *\n   * @param {Object} aData                  An object with members of the period\n   * @param {Time=} aData.start             The start of the period\n   * @param {Time=} aData.end               The end of the period\n   * @param {Duration=} aData.duration      The duration of the period\n   */\n  constructor(aData) {\n    this.wrappedJSObject = this;\n\n    if (aData && 'start' in aData) {\n      if (aData.start && !(aData.start instanceof Time)) {\n        throw new TypeError('.start must be an instance of ICAL.Time');\n      }\n      this.start = aData.start;\n    }\n\n    if (aData && aData.end && aData.duration) {\n      throw new Error('cannot accept both end and duration');\n    }\n\n    if (aData && 'end' in aData) {\n      if (aData.end && !(aData.end instanceof Time)) {\n        throw new TypeError('.end must be an instance of ICAL.Time');\n      }\n      this.end = aData.end;\n    }\n\n    if (aData && 'duration' in aData) {\n      if (aData.duration && !(aData.duration instanceof Duration)) {\n        throw new TypeError('.duration must be an instance of ICAL.Duration');\n      }\n      this.duration = aData.duration;\n    }\n  }\n\n\n  /**\n   * The start of the period\n   * @type {Time}\n   */\n  start = null;\n\n  /**\n   * The end of the period\n   * @type {Time}\n   */\n  end = null;\n\n  /**\n   * The duration of the period\n   * @type {Duration}\n   */\n  duration = null;\n\n  /**\n   * The class identifier.\n   * @constant\n   * @type {String}\n   * @default \"icalperiod\"\n   */\n  icalclass = \"icalperiod\";\n\n  /**\n   * The type name, to be used in the jCal object.\n   * @constant\n   * @type {String}\n   * @default \"period\"\n   */\n  icaltype = \"period\";\n\n  /**\n   * Returns a clone of the duration object.\n   *\n   * @return {Period}      The cloned object\n   */\n  clone() {\n    return Period.fromData({\n      start: this.start ? this.start.clone() : null,\n      end: this.end ? this.end.clone() : null,\n      duration: this.duration ? this.duration.clone() : null\n    });\n  }\n\n  /**\n   * Calculates the duration of the period, either directly or by subtracting\n   * start from end date.\n   *\n   * @return {Duration}      The calculated duration\n   */\n  getDuration() {\n    if (this.duration) {\n      return this.duration;\n    } else {\n      return this.end.subtractDate(this.start);\n    }\n  }\n\n  /**\n   * Calculates the end date of the period, either directly or by adding\n   * duration to start date.\n   *\n   * @return {Time}          The calculated end date\n   */\n  getEnd() {\n    if (this.end) {\n      return this.end;\n    } else {\n      let end = this.start.clone();\n      end.addDuration(this.duration);\n      return end;\n    }\n  }\n\n  /**\n   * The string representation of this period.\n   * @return {String}\n   */\n  toString() {\n    return this.start + \"/\" + (this.end || this.duration);\n  }\n\n  /**\n   * The jCal representation of this period type.\n   * @return {Object}\n   */\n  toJSON() {\n    return [this.start.toString(), (this.end || this.duration).toString()];\n  }\n\n  /**\n   * The iCalendar string representation of this period.\n   * @return {String}\n   */\n  toICALString() {\n    return this.start.toICALString() + \"/\" +\n           (this.end || this.duration).toICALString();\n  }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n * @ignore\n * @typedef {import(\"./types.js\").designSet} designSet\n * Imports the 'designSet' type from the \"types.js\" module\n */\n\n/** @module ICAL.design */\n\nconst FROM_ICAL_NEWLINE = /\\\\\\\\|\\\\;|\\\\,|\\\\[Nn]/g;\nconst TO_ICAL_NEWLINE = /\\\\|;|,|\\n/g;\nconst FROM_VCARD_NEWLINE = /\\\\\\\\|\\\\,|\\\\[Nn]/g;\nconst TO_VCARD_NEWLINE = /\\\\|,|\\n/g;\n\nfunction createTextType(fromNewline, toNewline) {\n  let result = {\n    matches: /.*/,\n\n    fromICAL: function(aValue, structuredEscape) {\n      return replaceNewline(aValue, fromNewline, structuredEscape);\n    },\n\n    toICAL: function(aValue, structuredEscape) {\n      let regEx = toNewline;\n      if (structuredEscape)\n         regEx = new RegExp(regEx.source + '|' + structuredEscape, regEx.flags);\n      return aValue.replace(regEx, function(str) {\n        switch (str) {\n        case \"\\\\\":\n          return \"\\\\\\\\\";\n        case \";\":\n          return \"\\\\;\";\n        case \",\":\n          return \"\\\\,\";\n        case \"\\n\":\n          return \"\\\\n\";\n        /* c8 ignore next 2 */\n        default:\n          return str;\n        }\n      });\n    }\n  };\n  return result;\n}\n\n// default types used multiple times\nconst DEFAULT_TYPE_TEXT = { defaultType: \"text\" };\nconst DEFAULT_TYPE_TEXT_MULTI = { defaultType: \"text\", multiValue: \",\" };\nconst DEFAULT_TYPE_TEXT_STRUCTURED = { defaultType: \"text\", structuredValue: \";\" };\nconst DEFAULT_TYPE_INTEGER = { defaultType: \"integer\" };\nconst DEFAULT_TYPE_DATETIME_DATE = { defaultType: \"date-time\", allowedTypes: [\"date-time\", \"date\"] };\nconst DEFAULT_TYPE_DATETIME = { defaultType: \"date-time\" };\nconst DEFAULT_TYPE_URI = { defaultType: \"uri\" };\nconst DEFAULT_TYPE_UTCOFFSET = { defaultType: \"utc-offset\" };\nconst DEFAULT_TYPE_RECUR = { defaultType: \"recur\" };\nconst DEFAULT_TYPE_DATE_ANDOR_TIME = { defaultType: \"date-and-or-time\", allowedTypes: [\"date-time\", \"date\", \"text\"] };\n\nfunction replaceNewlineReplace(string) {\n  switch (string) {\n    case \"\\\\\\\\\":\n      return \"\\\\\";\n    case \"\\\\;\":\n      return \";\";\n    case \"\\\\,\":\n      return \",\";\n    case \"\\\\n\":\n    case \"\\\\N\":\n      return \"\\n\";\n    /* c8 ignore next 2 */\n    default:\n      return string;\n  }\n}\n\nfunction replaceNewline(value, newline, structuredEscape) {\n  // avoid regex when possible.\n  if (value.indexOf('\\\\') === -1) {\n    return value;\n  }\n  if (structuredEscape)\n     newline = new RegExp(newline.source + '|\\\\\\\\' + structuredEscape, newline.flags);\n  return value.replace(newline, replaceNewlineReplace);\n}\n\nlet commonProperties = {\n  \"categories\": DEFAULT_TYPE_TEXT_MULTI,\n  \"url\": DEFAULT_TYPE_URI,\n  \"version\": DEFAULT_TYPE_TEXT,\n  \"uid\": DEFAULT_TYPE_TEXT\n};\n\nlet commonValues = {\n  \"boolean\": {\n    values: [\"TRUE\", \"FALSE\"],\n\n    fromICAL: function(aValue) {\n      switch (aValue) {\n        case 'TRUE':\n          return true;\n        case 'FALSE':\n          return false;\n        default:\n          //TODO: parser warning\n          return false;\n      }\n    },\n\n    toICAL: function(aValue) {\n      if (aValue) {\n        return 'TRUE';\n      }\n      return 'FALSE';\n    }\n\n  },\n  float: {\n    matches: /^[+-]?\\d+\\.\\d+$/,\n\n    fromICAL: function(aValue) {\n      let parsed = parseFloat(aValue);\n      if (isStrictlyNaN(parsed)) {\n        // TODO: parser warning\n        return 0.0;\n      }\n      return parsed;\n    },\n\n    toICAL: function(aValue) {\n      return String(aValue);\n    }\n  },\n  integer: {\n    fromICAL: function(aValue) {\n      let parsed = parseInt(aValue);\n      if (isStrictlyNaN(parsed)) {\n        return 0;\n      }\n      return parsed;\n    },\n\n    toICAL: function(aValue) {\n      return String(aValue);\n    }\n  },\n  \"utc-offset\": {\n    toICAL: function(aValue) {\n      if (aValue.length < 7) {\n        // no seconds\n        // -0500\n        return aValue.slice(0, 3) +\n               aValue.slice(4, 6);\n      } else {\n        // seconds\n        // -050000\n        return aValue.slice(0, 3) +\n               aValue.slice(4, 6) +\n               aValue.slice(7, 9);\n      }\n    },\n\n    fromICAL: function(aValue) {\n      if (aValue.length < 6) {\n        // no seconds\n        // -05:00\n        return aValue.slice(0, 3) + ':' +\n               aValue.slice(3, 5);\n      } else {\n        // seconds\n        // -05:00:00\n        return aValue.slice(0, 3) + ':' +\n               aValue.slice(3, 5) + ':' +\n               aValue.slice(5, 7);\n      }\n    },\n\n    decorate: function(aValue) {\n      return UtcOffset.fromString(aValue);\n    },\n\n    undecorate: function(aValue) {\n      return aValue.toString();\n    }\n  }\n};\n\nlet icalParams = {\n  // Although the syntax is DQUOTE uri DQUOTE, I don't think we should\n  // enforce anything aside from it being a valid content line.\n  //\n  // At least some params require - if multi values are used - DQUOTEs\n  // for each of its values - e.g. delegated-from=\"uri1\",\"uri2\"\n  // To indicate this, I introduced the new k/v pair\n  // multiValueSeparateDQuote: true\n  //\n  // \"ALTREP\": { ... },\n\n  // CN just wants a param-value\n  // \"CN\": { ... }\n\n  \"cutype\": {\n    values: [\"INDIVIDUAL\", \"GROUP\", \"RESOURCE\", \"ROOM\", \"UNKNOWN\"],\n    allowXName: true,\n    allowIanaToken: true\n  },\n\n  \"delegated-from\": {\n    valueType: \"cal-address\",\n    multiValue: \",\",\n    multiValueSeparateDQuote: true\n  },\n  \"delegated-to\": {\n    valueType: \"cal-address\",\n    multiValue: \",\",\n    multiValueSeparateDQuote: true\n  },\n  // \"DIR\": { ... }, // See ALTREP\n  \"encoding\": {\n    values: [\"8BIT\", \"BASE64\"]\n  },\n  // \"FMTTYPE\": { ... }, // See ALTREP\n  \"fbtype\": {\n    values: [\"FREE\", \"BUSY\", \"BUSY-UNAVAILABLE\", \"BUSY-TENTATIVE\"],\n    allowXName: true,\n    allowIanaToken: true\n  },\n  // \"LANGUAGE\": { ... }, // See ALTREP\n  \"member\": {\n    valueType: \"cal-address\",\n    multiValue: \",\",\n    multiValueSeparateDQuote: true\n  },\n  \"partstat\": {\n    // TODO These values are actually different per-component\n    values: [\"NEEDS-ACTION\", \"ACCEPTED\", \"DECLINED\", \"TENTATIVE\",\n             \"DELEGATED\", \"COMPLETED\", \"IN-PROCESS\"],\n    allowXName: true,\n    allowIanaToken: true\n  },\n  \"range\": {\n    values: [\"THISANDFUTURE\"]\n  },\n  \"related\": {\n    values: [\"START\", \"END\"]\n  },\n  \"reltype\": {\n    values: [\"PARENT\", \"CHILD\", \"SIBLING\"],\n    allowXName: true,\n    allowIanaToken: true\n  },\n  \"role\": {\n    values: [\"REQ-PARTICIPANT\", \"CHAIR\",\n             \"OPT-PARTICIPANT\", \"NON-PARTICIPANT\"],\n    allowXName: true,\n    allowIanaToken: true\n  },\n  \"rsvp\": {\n    values: [\"TRUE\", \"FALSE\"]\n  },\n  \"sent-by\": {\n    valueType: \"cal-address\"\n  },\n  \"tzid\": {\n    matches: /^\\//\n  },\n  \"value\": {\n    // since the value here is a 'type' lowercase is used.\n    values: [\"binary\", \"boolean\", \"cal-address\", \"date\", \"date-time\",\n             \"duration\", \"float\", \"integer\", \"period\", \"recur\", \"text\",\n             \"time\", \"uri\", \"utc-offset\"],\n    allowXName: true,\n    allowIanaToken: true\n  }\n};\n\n// When adding a value here, be sure to add it to the parameter types!\nconst icalValues = extend(commonValues, {\n  text: createTextType(FROM_ICAL_NEWLINE, TO_ICAL_NEWLINE),\n\n  uri: {\n    // TODO\n    /* ... */\n  },\n\n  \"binary\": {\n    decorate: function(aString) {\n      return Binary.fromString(aString);\n    },\n\n    undecorate: function(aBinary) {\n      return aBinary.toString();\n    }\n  },\n  \"cal-address\": {\n    // needs to be an uri\n  },\n  \"date\": {\n    decorate: function(aValue, aProp) {\n      if (design.strict) {\n        return Time.fromDateString(aValue, aProp);\n      } else {\n        return Time.fromString(aValue, aProp);\n      }\n    },\n\n    /**\n     * undecorates a time object.\n     */\n    undecorate: function(aValue) {\n      return aValue.toString();\n    },\n\n    fromICAL: function(aValue) {\n      // from: 20120901\n      // to: 2012-09-01\n      if (!design.strict && aValue.length >= 15) {\n        // This is probably a date-time, e.g. 20120901T130000Z\n        return icalValues[\"date-time\"].fromICAL(aValue);\n      } else {\n        return aValue.slice(0, 4) + '-' +\n               aValue.slice(4, 6) + '-' +\n               aValue.slice(6, 8);\n      }\n    },\n\n    toICAL: function(aValue) {\n      // from: 2012-09-01\n      // to: 20120901\n      let len = aValue.length;\n\n      if (len == 10) {\n        return aValue.slice(0, 4) +\n               aValue.slice(5, 7) +\n               aValue.slice(8, 10);\n      } else if (len >= 19) {\n        return icalValues[\"date-time\"].toICAL(aValue);\n      } else {\n        //TODO: serialize warning?\n        return aValue;\n      }\n\n    }\n  },\n  \"date-time\": {\n    fromICAL: function(aValue) {\n      // from: 20120901T130000\n      // to: 2012-09-01T13:00:00\n      if (!design.strict && aValue.length == 8) {\n        // This is probably a date, e.g. 20120901\n        return icalValues.date.fromICAL(aValue);\n      } else {\n        let result = aValue.slice(0, 4) + '-' +\n                     aValue.slice(4, 6) + '-' +\n                     aValue.slice(6, 8) + 'T' +\n                     aValue.slice(9, 11) + ':' +\n                     aValue.slice(11, 13) + ':' +\n                     aValue.slice(13, 15);\n\n        if (aValue[15] && aValue[15] === 'Z') {\n          result += 'Z';\n        }\n\n        return result;\n      }\n    },\n\n    toICAL: function(aValue) {\n      // from: 2012-09-01T13:00:00\n      // to: 20120901T130000\n      let len = aValue.length;\n\n      if (len == 10 && !design.strict) {\n        return icalValues.date.toICAL(aValue);\n      } else if (len >= 19) {\n        let result = aValue.slice(0, 4) +\n                     aValue.slice(5, 7) +\n                     // grab the (DDTHH) segment\n                     aValue.slice(8, 13) +\n                     // MM\n                     aValue.slice(14, 16) +\n                     // SS\n                     aValue.slice(17, 19);\n\n        if (aValue[19] && aValue[19] === 'Z') {\n          result += 'Z';\n        }\n        return result;\n      } else {\n        // TODO: error\n        return aValue;\n      }\n    },\n\n    decorate: function(aValue, aProp) {\n      if (design.strict) {\n        return Time.fromDateTimeString(aValue, aProp);\n      } else {\n        return Time.fromString(aValue, aProp);\n      }\n    },\n\n    undecorate: function(aValue) {\n      return aValue.toString();\n    }\n  },\n  duration: {\n    decorate: function(aValue) {\n      return Duration.fromString(aValue);\n    },\n    undecorate: function(aValue) {\n      return aValue.toString();\n    }\n  },\n  period: {\n    fromICAL: function(string) {\n      let parts = string.split('/');\n      parts[0] = icalValues['date-time'].fromICAL(parts[0]);\n\n      if (!Duration.isValueString(parts[1])) {\n        parts[1] = icalValues['date-time'].fromICAL(parts[1]);\n      }\n\n      return parts;\n    },\n\n    toICAL: function(parts) {\n      parts = parts.slice();\n      if (!design.strict && parts[0].length == 10) {\n        parts[0] = icalValues.date.toICAL(parts[0]);\n      } else {\n        parts[0] = icalValues['date-time'].toICAL(parts[0]);\n      }\n\n      if (!Duration.isValueString(parts[1])) {\n        if (!design.strict && parts[1].length == 10) {\n          parts[1] = icalValues.date.toICAL(parts[1]);\n        } else {\n          parts[1] = icalValues['date-time'].toICAL(parts[1]);\n        }\n      }\n\n      return parts.join(\"/\");\n    },\n\n    decorate: function(aValue, aProp) {\n      return Period.fromJSON(aValue, aProp, !design.strict);\n    },\n\n    undecorate: function(aValue) {\n      return aValue.toJSON();\n    }\n  },\n  recur: {\n    fromICAL: function(string) {\n      return Recur._stringToData(string, true);\n    },\n\n    toICAL: function(data) {\n      let str = \"\";\n      for (let [k, val] of Object.entries(data)) {\n        if (k == \"until\") {\n          if (val.length > 10) {\n            val = icalValues['date-time'].toICAL(val);\n          } else {\n            val = icalValues.date.toICAL(val);\n          }\n        } else if (k == \"wkst\") {\n          if (typeof val === 'number') {\n            val = Recur.numericDayToIcalDay(val);\n          }\n        } else if (Array.isArray(val)) {\n          val = val.join(\",\");\n        }\n        str += k.toUpperCase() + \"=\" + val + \";\";\n      }\n      return str.slice(0, Math.max(0, str.length - 1));\n    },\n\n    decorate: function decorate(aValue) {\n      return Recur.fromData(aValue);\n    },\n\n    undecorate: function(aRecur) {\n      return aRecur.toJSON();\n    }\n  },\n\n  time: {\n    fromICAL: function(aValue) {\n      // from: MMHHSS(Z)?\n      // to: HH:MM:SS(Z)?\n      if (aValue.length < 6) {\n        // TODO: parser exception?\n        return aValue;\n      }\n\n      // HH::MM::SSZ?\n      let result = aValue.slice(0, 2) + ':' +\n                   aValue.slice(2, 4) + ':' +\n                   aValue.slice(4, 6);\n\n      if (aValue[6] === 'Z') {\n        result += 'Z';\n      }\n\n      return result;\n    },\n\n    toICAL: function(aValue) {\n      // from: HH:MM:SS(Z)?\n      // to: MMHHSS(Z)?\n      if (aValue.length < 8) {\n        //TODO: error\n        return aValue;\n      }\n\n      let result = aValue.slice(0, 2) +\n                   aValue.slice(3, 5) +\n                   aValue.slice(6, 8);\n\n      if (aValue[8] === 'Z') {\n        result += 'Z';\n      }\n\n      return result;\n    }\n  }\n});\n\nlet icalProperties = extend(commonProperties, {\n\n  \"action\": DEFAULT_TYPE_TEXT,\n  \"attach\": { defaultType: \"uri\" },\n  \"attendee\": { defaultType: \"cal-address\" },\n  \"calscale\": DEFAULT_TYPE_TEXT,\n  \"class\": DEFAULT_TYPE_TEXT,\n  \"comment\": DEFAULT_TYPE_TEXT,\n  \"completed\": DEFAULT_TYPE_DATETIME,\n  \"contact\": DEFAULT_TYPE_TEXT,\n  \"created\": DEFAULT_TYPE_DATETIME,\n  \"description\": DEFAULT_TYPE_TEXT,\n  \"dtend\": DEFAULT_TYPE_DATETIME_DATE,\n  \"dtstamp\": DEFAULT_TYPE_DATETIME,\n  \"dtstart\": DEFAULT_TYPE_DATETIME_DATE,\n  \"due\": DEFAULT_TYPE_DATETIME_DATE,\n  \"duration\": { defaultType: \"duration\" },\n  \"exdate\": {\n    defaultType: \"date-time\",\n    allowedTypes: [\"date-time\", \"date\"],\n    multiValue: ','\n  },\n  \"exrule\": DEFAULT_TYPE_RECUR,\n  \"freebusy\": { defaultType: \"period\", multiValue: \",\" },\n  \"geo\": { defaultType: \"float\", structuredValue: \";\" },\n  \"last-modified\": DEFAULT_TYPE_DATETIME,\n  \"location\": DEFAULT_TYPE_TEXT,\n  \"method\": DEFAULT_TYPE_TEXT,\n  \"organizer\": { defaultType: \"cal-address\" },\n  \"percent-complete\": DEFAULT_TYPE_INTEGER,\n  \"priority\": DEFAULT_TYPE_INTEGER,\n  \"prodid\": DEFAULT_TYPE_TEXT,\n  \"related-to\": DEFAULT_TYPE_TEXT,\n  \"repeat\": DEFAULT_TYPE_INTEGER,\n  \"rdate\": {\n    defaultType: \"date-time\",\n    allowedTypes: [\"date-time\", \"date\", \"period\"],\n    multiValue: ',',\n    detectType: function(string) {\n      if (string.indexOf('/') !== -1) {\n        return 'period';\n      }\n      return (string.indexOf('T') === -1) ? 'date' : 'date-time';\n    }\n  },\n  \"recurrence-id\": DEFAULT_TYPE_DATETIME_DATE,\n  \"resources\": DEFAULT_TYPE_TEXT_MULTI,\n  \"request-status\": DEFAULT_TYPE_TEXT_STRUCTURED,\n  \"rrule\": DEFAULT_TYPE_RECUR,\n  \"sequence\": DEFAULT_TYPE_INTEGER,\n  \"status\": DEFAULT_TYPE_TEXT,\n  \"summary\": DEFAULT_TYPE_TEXT,\n  \"transp\": DEFAULT_TYPE_TEXT,\n  \"trigger\": { defaultType: \"duration\", allowedTypes: [\"duration\", \"date-time\"] },\n  \"tzoffsetfrom\": DEFAULT_TYPE_UTCOFFSET,\n  \"tzoffsetto\": DEFAULT_TYPE_UTCOFFSET,\n  \"tzurl\": DEFAULT_TYPE_URI,\n  \"tzid\": DEFAULT_TYPE_TEXT,\n  \"tzname\": DEFAULT_TYPE_TEXT\n});\n\n// When adding a value here, be sure to add it to the parameter types!\nconst vcardValues = extend(commonValues, {\n  text: createTextType(FROM_VCARD_NEWLINE, TO_VCARD_NEWLINE),\n  uri: createTextType(FROM_VCARD_NEWLINE, TO_VCARD_NEWLINE),\n\n  date: {\n    decorate: function(aValue) {\n      return VCardTime.fromDateAndOrTimeString(aValue, \"date\");\n    },\n    undecorate: function(aValue) {\n      return aValue.toString();\n    },\n    fromICAL: function(aValue) {\n      if (aValue.length == 8) {\n        return icalValues.date.fromICAL(aValue);\n      } else if (aValue[0] == '-' && aValue.length == 6) {\n        return aValue.slice(0, 4) + '-' + aValue.slice(4);\n      } else {\n        return aValue;\n      }\n    },\n    toICAL: function(aValue) {\n      if (aValue.length == 10) {\n        return icalValues.date.toICAL(aValue);\n      } else if (aValue[0] == '-' && aValue.length == 7) {\n        return aValue.slice(0, 4) + aValue.slice(5);\n      } else {\n        return aValue;\n      }\n    }\n  },\n\n  time: {\n    decorate: function(aValue) {\n      return VCardTime.fromDateAndOrTimeString(\"T\" + aValue, \"time\");\n    },\n    undecorate: function(aValue) {\n      return aValue.toString();\n    },\n    fromICAL: function(aValue) {\n      let splitzone = vcardValues.time._splitZone(aValue, true);\n      let zone = splitzone[0], value = splitzone[1];\n\n      //console.log(\"SPLIT: \",splitzone);\n\n      if (value.length == 6) {\n        value = value.slice(0, 2) + ':' +\n                value.slice(2, 4) + ':' +\n                value.slice(4, 6);\n      } else if (value.length == 4 && value[0] != '-') {\n        value = value.slice(0, 2) + ':' + value.slice(2, 4);\n      } else if (value.length == 5) {\n        value = value.slice(0, 3) + ':' + value.slice(3, 5);\n      }\n\n      if (zone.length == 5 && (zone[0] == '-' || zone[0] == '+')) {\n        zone = zone.slice(0, 3) + ':' + zone.slice(3);\n      }\n\n      return value + zone;\n    },\n\n    toICAL: function(aValue) {\n      let splitzone = vcardValues.time._splitZone(aValue);\n      let zone = splitzone[0], value = splitzone[1];\n\n      if (value.length == 8) {\n        value = value.slice(0, 2) +\n                value.slice(3, 5) +\n                value.slice(6, 8);\n      } else if (value.length == 5 && value[0] != '-') {\n        value = value.slice(0, 2) + value.slice(3, 5);\n      } else if (value.length == 6) {\n        value = value.slice(0, 3) + value.slice(4, 6);\n      }\n\n      if (zone.length == 6 && (zone[0] == '-' || zone[0] == '+')) {\n        zone = zone.slice(0, 3) + zone.slice(4);\n      }\n\n      return value + zone;\n    },\n\n    _splitZone: function(aValue, isFromIcal) {\n      let lastChar = aValue.length - 1;\n      let signChar = aValue.length - (isFromIcal ? 5 : 6);\n      let sign = aValue[signChar];\n      let zone, value;\n\n      if (aValue[lastChar] == 'Z') {\n        zone = aValue[lastChar];\n        value = aValue.slice(0, Math.max(0, lastChar));\n      } else if (aValue.length > 6 && (sign == '-' || sign == '+')) {\n        zone = aValue.slice(signChar);\n        value = aValue.slice(0, Math.max(0, signChar));\n      } else {\n        zone = \"\";\n        value = aValue;\n      }\n\n      return [zone, value];\n    }\n  },\n\n  \"date-time\": {\n    decorate: function(aValue) {\n      return VCardTime.fromDateAndOrTimeString(aValue, \"date-time\");\n    },\n\n    undecorate: function(aValue) {\n      return aValue.toString();\n    },\n\n    fromICAL: function(aValue) {\n      return vcardValues['date-and-or-time'].fromICAL(aValue);\n    },\n\n    toICAL: function(aValue) {\n      return vcardValues['date-and-or-time'].toICAL(aValue);\n    }\n  },\n\n  \"date-and-or-time\": {\n    decorate: function(aValue) {\n      return VCardTime.fromDateAndOrTimeString(aValue, \"date-and-or-time\");\n    },\n\n    undecorate: function(aValue) {\n      return aValue.toString();\n    },\n\n    fromICAL: function(aValue) {\n      let parts = aValue.split('T');\n      return (parts[0] ? vcardValues.date.fromICAL(parts[0]) : '') +\n             (parts[1] ? 'T' + vcardValues.time.fromICAL(parts[1]) : '');\n    },\n\n    toICAL: function(aValue) {\n      let parts = aValue.split('T');\n      return vcardValues.date.toICAL(parts[0]) +\n             (parts[1] ? 'T' + vcardValues.time.toICAL(parts[1]) : '');\n\n    }\n  },\n  timestamp: icalValues['date-time'],\n  \"language-tag\": {\n    matches: /^[a-zA-Z0-9-]+$/ // Could go with a more strict regex here\n  },\n  \"phone-number\": {\n    fromICAL: function(aValue) {\n      return Array.from(aValue).filter(function(c) {\n          return c === '\\\\' ? undefined : c;\n        }).join('');\n    },\n    toICAL: function(aValue) {\n      return Array.from(aValue).map(function(c) {\n        return c === ',' || c === \";\" ? '\\\\' + c : c;\n      }).join('');\n    }\n  }\n});\n\nlet vcardParams = {\n  \"type\": {\n    valueType: \"text\",\n    multiValue: \",\"\n  },\n  \"value\": {\n    // since the value here is a 'type' lowercase is used.\n    values: [\"text\", \"uri\", \"date\", \"time\", \"date-time\", \"date-and-or-time\",\n             \"timestamp\", \"boolean\", \"integer\", \"float\", \"utc-offset\",\n             \"language-tag\"],\n    allowXName: true,\n    allowIanaToken: true\n  }\n};\n\nlet vcardProperties = extend(commonProperties, {\n  \"adr\": { defaultType: \"text\", structuredValue: \";\", multiValue: \",\" },\n  \"anniversary\": DEFAULT_TYPE_DATE_ANDOR_TIME,\n  \"bday\": DEFAULT_TYPE_DATE_ANDOR_TIME,\n  \"caladruri\": DEFAULT_TYPE_URI,\n  \"caluri\": DEFAULT_TYPE_URI,\n  \"clientpidmap\": DEFAULT_TYPE_TEXT_STRUCTURED,\n  \"email\": DEFAULT_TYPE_TEXT,\n  \"fburl\": DEFAULT_TYPE_URI,\n  \"fn\": DEFAULT_TYPE_TEXT,\n  \"gender\": DEFAULT_TYPE_TEXT_STRUCTURED,\n  \"geo\": DEFAULT_TYPE_URI,\n  \"impp\": DEFAULT_TYPE_URI,\n  \"key\": DEFAULT_TYPE_URI,\n  \"kind\": DEFAULT_TYPE_TEXT,\n  \"lang\": { defaultType: \"language-tag\" },\n  \"logo\": DEFAULT_TYPE_URI,\n  \"member\": DEFAULT_TYPE_URI,\n  \"n\": { defaultType: \"text\", structuredValue: \";\", multiValue: \",\" },\n  \"nickname\": DEFAULT_TYPE_TEXT_MULTI,\n  \"note\": DEFAULT_TYPE_TEXT,\n  \"org\": { defaultType: \"text\", structuredValue: \";\" },\n  \"photo\": DEFAULT_TYPE_URI,\n  \"related\": DEFAULT_TYPE_URI,\n  \"rev\": { defaultType: \"timestamp\" },\n  \"role\": DEFAULT_TYPE_TEXT,\n  \"sound\": DEFAULT_TYPE_URI,\n  \"source\": DEFAULT_TYPE_URI,\n  \"tel\": { defaultType: \"uri\", allowedTypes: [\"uri\", \"text\"] },\n  \"title\": DEFAULT_TYPE_TEXT,\n  \"tz\": { defaultType: \"text\", allowedTypes: [\"text\", \"utc-offset\", \"uri\"] },\n  \"xml\": DEFAULT_TYPE_TEXT\n});\n\nlet vcard3Values = extend(commonValues, {\n  binary: icalValues.binary,\n  date: vcardValues.date,\n  \"date-time\": vcardValues[\"date-time\"],\n  \"phone-number\": vcardValues[\"phone-number\"],\n  uri: icalValues.uri,\n  text: icalValues.text,\n  time: icalValues.time,\n  vcard: icalValues.text,\n  \"utc-offset\": {\n    toICAL: function(aValue) {\n      return aValue.slice(0, 7);\n    },\n\n    fromICAL: function(aValue) {\n      return aValue.slice(0, 7);\n    },\n\n    decorate: function(aValue) {\n      return UtcOffset.fromString(aValue);\n    },\n\n    undecorate: function(aValue) {\n      return aValue.toString();\n    }\n  }\n});\n\nlet vcard3Params = {\n  \"type\": {\n    valueType: \"text\",\n    multiValue: \",\"\n  },\n  \"value\": {\n    // since the value here is a 'type' lowercase is used.\n    values: [\"text\", \"uri\", \"date\", \"date-time\", \"phone-number\", \"time\",\n             \"boolean\", \"integer\", \"float\", \"utc-offset\", \"vcard\", \"binary\"],\n    allowXName: true,\n    allowIanaToken: true\n  }\n};\n\nlet vcard3Properties = extend(commonProperties, {\n  fn: DEFAULT_TYPE_TEXT,\n  n: { defaultType: \"text\", structuredValue: \";\", multiValue: \",\" },\n  nickname: DEFAULT_TYPE_TEXT_MULTI,\n  photo: { defaultType: \"binary\", allowedTypes: [\"binary\", \"uri\"] },\n  bday: {\n    defaultType: \"date-time\",\n    allowedTypes: [\"date-time\", \"date\"],\n    detectType: function(string) {\n      return (string.indexOf('T') === -1) ? 'date' : 'date-time';\n    }\n  },\n\n  adr: { defaultType: \"text\", structuredValue: \";\", multiValue: \",\" },\n  label: DEFAULT_TYPE_TEXT,\n\n  tel: { defaultType: \"phone-number\" },\n  email: DEFAULT_TYPE_TEXT,\n  mailer: DEFAULT_TYPE_TEXT,\n\n  tz: { defaultType: \"utc-offset\", allowedTypes: [\"utc-offset\", \"text\"] },\n  geo: { defaultType: \"float\", structuredValue: \";\" },\n\n  title: DEFAULT_TYPE_TEXT,\n  role: DEFAULT_TYPE_TEXT,\n  logo: { defaultType: \"binary\", allowedTypes: [\"binary\", \"uri\"] },\n  agent: { defaultType: \"vcard\", allowedTypes: [\"vcard\", \"text\", \"uri\"] },\n  org: DEFAULT_TYPE_TEXT_STRUCTURED,\n\n  note: DEFAULT_TYPE_TEXT_MULTI,\n  prodid: DEFAULT_TYPE_TEXT,\n  rev: {\n    defaultType: \"date-time\",\n    allowedTypes: [\"date-time\", \"date\"],\n    detectType: function(string) {\n      return (string.indexOf('T') === -1) ? 'date' : 'date-time';\n    }\n  },\n  \"sort-string\": DEFAULT_TYPE_TEXT,\n  sound: { defaultType: \"binary\", allowedTypes: [\"binary\", \"uri\"] },\n\n  class: DEFAULT_TYPE_TEXT,\n  key: { defaultType: \"binary\", allowedTypes: [\"binary\", \"text\"] }\n});\n\n/**\n * iCalendar design set\n * @type {designSet}\n */\nlet icalSet = {\n  value: icalValues,\n  param: icalParams,\n  property: icalProperties,\n  propertyGroups: false\n};\n\n/**\n * vCard 4.0 design set\n * @type {designSet}\n */\nlet vcardSet = {\n  value: vcardValues,\n  param: vcardParams,\n  property: vcardProperties,\n  propertyGroups: true\n};\n\n/**\n * vCard 3.0 design set\n * @type {designSet}\n */\nlet vcard3Set = {\n  value: vcard3Values,\n  param: vcard3Params,\n  property: vcard3Properties,\n  propertyGroups: true\n};\n\n/**\n * The design data, used by the parser to determine types for properties and\n * other metadata needed to produce correct jCard/jCal data.\n *\n * @alias ICAL.design\n * @exports module:ICAL.design\n */\nconst design = {\n  /**\n   * Can be set to false to make the parser more lenient.\n   */\n  strict: true,\n\n  /**\n   * The default set for new properties and components if none is specified.\n   * @type {designSet}\n   */\n  defaultSet: icalSet,\n\n  /**\n   * The default type for unknown properties\n   * @type {String}\n   */\n  defaultType: 'unknown',\n\n  /**\n   * Holds the design set for known top-level components\n   *\n   * @type {Object}\n   * @property {designSet} vcard       vCard VCARD\n   * @property {designSet} vevent      iCalendar VEVENT\n   * @property {designSet} vtodo       iCalendar VTODO\n   * @property {designSet} vjournal    iCalendar VJOURNAL\n   * @property {designSet} valarm      iCalendar VALARM\n   * @property {designSet} vtimezone   iCalendar VTIMEZONE\n   * @property {designSet} daylight    iCalendar DAYLIGHT\n   * @property {designSet} standard    iCalendar STANDARD\n   *\n   * @example\n   * let propertyName = 'fn';\n   * let componentDesign = ICAL.design.components.vcard;\n   * let propertyDetails = componentDesign.property[propertyName];\n   * if (propertyDetails.defaultType == 'text') {\n   *   // Yep, sure is...\n   * }\n   */\n  components: {\n    vcard: vcardSet,\n    vcard3: vcard3Set,\n    vevent: icalSet,\n    vtodo: icalSet,\n    vjournal: icalSet,\n    valarm: icalSet,\n    vtimezone: icalSet,\n    daylight: icalSet,\n    standard: icalSet\n  },\n\n\n  /**\n   * The design set for iCalendar (rfc5545/rfc7265) components.\n   * @type {designSet}\n   */\n  icalendar: icalSet,\n\n  /**\n   * The design set for vCard (rfc6350/rfc7095) components.\n   * @type {designSet}\n   */\n  vcard: vcardSet,\n\n  /**\n   * The design set for vCard (rfc2425/rfc2426/rfc7095) components.\n   * @type {designSet}\n   */\n  vcard3: vcard3Set,\n\n  /**\n   * Gets the design set for the given component name.\n   *\n   * @param {String} componentName        The name of the component\n   * @return {designSet}      The design set for the component\n   */\n  getDesignSet: function(componentName) {\n    let isInDesign = componentName && componentName in design.components;\n    return isInDesign ? design.components[componentName] : design.defaultSet;\n  }\n};\nvar design$1 = design;\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n *\n * @ignore\n * @typedef {import(\"./types.js\").designSet} designSet\n * Imports the 'designSet' type from the \"types.js\" module\n */\n\nconst LINE_ENDING = '\\r\\n';\nconst DEFAULT_VALUE_TYPE = 'unknown';\nconst RFC6868_REPLACE_MAP = { '\"': \"^'\", \"\\n\": \"^n\", \"^\": \"^^\" };\n\n/**\n * Convert a full jCal/jCard array into a iCalendar/vCard string.\n *\n * @function ICAL.stringify\n * @variation function\n * @param {Array} jCal    The jCal/jCard document\n * @return {String}       The stringified iCalendar/vCard document\n */\nfunction stringify(jCal) {\n  if (typeof jCal[0] == \"string\") {\n    // This is a single component\n    jCal = [jCal];\n  }\n\n  let i = 0;\n  let len = jCal.length;\n  let result = '';\n\n  for (; i < len; i++) {\n    result += stringify.component(jCal[i]) + LINE_ENDING;\n  }\n\n  return result;\n}\n\n/**\n * Converts an jCal component array into a ICAL string.\n * Recursive will resolve sub-components.\n *\n * Exact component/property order is not saved all\n * properties will come before subcomponents.\n *\n * @function ICAL.stringify.component\n * @param {Array} component\n *        jCal/jCard fragment of a component\n * @param {designSet} designSet\n *        The design data to use for this component\n * @return {String}       The iCalendar/vCard string\n */\nstringify.component = function(component, designSet) {\n  let name = component[0].toUpperCase();\n  let result = 'BEGIN:' + name + LINE_ENDING;\n\n  let props = component[1];\n  let propIdx = 0;\n  let propLen = props.length;\n\n  let designSetName = component[0];\n  // rfc6350 requires that in vCard 4.0 the first component is the VERSION\n  // component with as value 4.0, note that 3.0 does not have this requirement.\n  if (designSetName === 'vcard' && component[1].length > 0 &&\n          !(component[1][0][0] === \"version\" && component[1][0][3] === \"4.0\")) {\n    designSetName = \"vcard3\";\n  }\n  designSet = designSet || design$1.getDesignSet(designSetName);\n\n  for (; propIdx < propLen; propIdx++) {\n    result += stringify.property(props[propIdx], designSet) + LINE_ENDING;\n  }\n\n  // Ignore subcomponents if none exist, e.g. in vCard.\n  let comps = component[2] || [];\n  let compIdx = 0;\n  let compLen = comps.length;\n\n  for (; compIdx < compLen; compIdx++) {\n    result += stringify.component(comps[compIdx], designSet) + LINE_ENDING;\n  }\n\n  result += 'END:' + name;\n  return result;\n};\n\n/**\n * Converts a single jCal/jCard property to a iCalendar/vCard string.\n *\n * @function ICAL.stringify.property\n * @param {Array} property\n *        jCal/jCard property array\n * @param {designSet} designSet\n *        The design data to use for this property\n * @param {Boolean} noFold\n *        If true, the line is not folded\n * @return {String}       The iCalendar/vCard string\n */\nstringify.property = function(property, designSet, noFold) {\n  let name = property[0].toUpperCase();\n  let jsName = property[0];\n  let params = property[1];\n\n  if (!designSet) {\n    designSet = design$1.defaultSet;\n  }\n\n  let groupName = params.group;\n  let line;\n  if (designSet.propertyGroups && groupName) {\n    line = groupName.toUpperCase() + \".\" + name;\n  } else {\n    line = name;\n  }\n\n  for (let [paramName, value] of Object.entries(params)) {\n    if (designSet.propertyGroups && paramName == 'group') {\n      continue;\n    }\n\n    let paramDesign = designSet.param[paramName];\n    let multiValue = paramDesign && paramDesign.multiValue;\n    if (multiValue && Array.isArray(value)) {\n      value = value.map(function(val) {\n        val = stringify._rfc6868Unescape(val);\n        val = stringify.paramPropertyValue(val, paramDesign.multiValueSeparateDQuote);\n        return val;\n      });\n      value = stringify.multiValue(value, multiValue, \"unknown\", null, designSet);\n    } else {\n      value = stringify._rfc6868Unescape(value);\n      value = stringify.paramPropertyValue(value);\n    }\n\n    line += ';' + paramName.toUpperCase() + '=' + value;\n  }\n\n  if (property.length === 3) {\n    // If there are no values, we must assume a blank value\n    return line + ':';\n  }\n\n  let valueType = property[2];\n\n  let propDetails;\n  let multiValue = false;\n  let structuredValue = false;\n  let isDefault = false;\n\n  if (jsName in designSet.property) {\n    propDetails = designSet.property[jsName];\n\n    if ('multiValue' in propDetails) {\n      multiValue = propDetails.multiValue;\n    }\n\n    if (('structuredValue' in propDetails) && Array.isArray(property[3])) {\n      structuredValue = propDetails.structuredValue;\n    }\n\n    if ('defaultType' in propDetails) {\n      if (valueType === propDetails.defaultType) {\n        isDefault = true;\n      }\n    } else {\n      if (valueType === DEFAULT_VALUE_TYPE) {\n        isDefault = true;\n      }\n    }\n  } else {\n    if (valueType === DEFAULT_VALUE_TYPE) {\n      isDefault = true;\n    }\n  }\n\n  // push the VALUE property if type is not the default\n  // for the current property.\n  if (!isDefault) {\n    // value will never contain ;/:/, so we don't escape it here.\n    line += ';VALUE=' + valueType.toUpperCase();\n  }\n\n  line += ':';\n\n  if (multiValue && structuredValue) {\n    line += stringify.multiValue(\n      property[3], structuredValue, valueType, multiValue, designSet, structuredValue\n    );\n  } else if (multiValue) {\n    line += stringify.multiValue(\n      property.slice(3), multiValue, valueType, null, designSet, false\n    );\n  } else if (structuredValue) {\n    line += stringify.multiValue(\n      property[3], structuredValue, valueType, null, designSet, structuredValue\n    );\n  } else {\n    line += stringify.value(property[3], valueType, designSet, false);\n  }\n\n  return noFold ? line : foldline(line);\n};\n\n/**\n * Handles escaping of property values that may contain:\n *\n *    COLON (:), SEMICOLON (;), or COMMA (,)\n *\n * If any of the above are present the result is wrapped\n * in double quotes.\n *\n * @function ICAL.stringify.paramPropertyValue\n * @param {String} value      Raw property value\n * @param {boolean} force     If value should be escaped even when unnecessary\n * @return {String}           Given or escaped value when needed\n */\nstringify.paramPropertyValue = function(value, force) {\n  if (!force &&\n      (value.indexOf(',') === -1) &&\n      (value.indexOf(':') === -1) &&\n      (value.indexOf(';') === -1)) {\n\n    return value;\n  }\n\n  return '\"' + value + '\"';\n};\n\n/**\n * Converts an array of ical values into a single\n * string based on a type and a delimiter value (like \",\").\n *\n * @function ICAL.stringify.multiValue\n * @param {Array} values      List of values to convert\n * @param {String} delim      Used to join the values (\",\", \";\", \":\")\n * @param {String} type       Lowecase ical value type\n *        (like boolean, date-time, etc..)\n * @param {?String} innerMulti If set, each value will again be processed\n *        Used for structured values\n * @param {designSet} designSet\n *        The design data to use for this property\n *\n * @return {String}           iCalendar/vCard string for value\n */\nstringify.multiValue = function(values, delim, type, innerMulti, designSet, structuredValue) {\n  let result = '';\n  let len = values.length;\n  let i = 0;\n\n  for (; i < len; i++) {\n    if (innerMulti && Array.isArray(values[i])) {\n      result += stringify.multiValue(values[i], innerMulti, type, null, designSet, structuredValue);\n    } else {\n      result += stringify.value(values[i], type, designSet, structuredValue);\n    }\n\n    if (i !== (len - 1)) {\n      result += delim;\n    }\n  }\n\n  return result;\n};\n\n/**\n * Processes a single ical value runs the associated \"toICAL\" method from the\n * design value type if available to convert the value.\n *\n * @function ICAL.stringify.value\n * @param {String|Number} value       A formatted value\n * @param {String} type               Lowercase iCalendar/vCard value type\n *  (like boolean, date-time, etc..)\n * @return {String}                   iCalendar/vCard value for single value\n */\nstringify.value = function(value, type, designSet, structuredValue) {\n  if (type in designSet.value && 'toICAL' in designSet.value[type]) {\n    return designSet.value[type].toICAL(value, structuredValue);\n  }\n  return value;\n};\n\n/**\n * Internal helper for rfc6868. Exposing this on ICAL.stringify so that\n * hackers can disable the rfc6868 parsing if the really need to.\n *\n * @param {String} val        The value to unescape\n * @return {String}           The escaped value\n */\nstringify._rfc6868Unescape = function(val) {\n  return val.replace(/[\\n^\"]/g, function(x) {\n    return RFC6868_REPLACE_MAP[x];\n  });\n};\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\nconst NAME_INDEX$1 = 0;\nconst PROP_INDEX = 1;\nconst TYPE_INDEX = 2;\nconst VALUE_INDEX = 3;\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n * @ignore\n * @typedef {import(\"./types.js\").designSet} designSet\n * Imports the 'designSet' type from the \"types.js\" module\n * @typedef {import(\"./types.js\").Geo} Geo\n * Imports the 'Geo' type from the \"types.js\" module\n */\n\n/**\n * Provides a layer on top of the raw jCal object for manipulating a single property, with its\n * parameters and value.\n *\n * @memberof ICAL\n */\nclass Property {\n  /**\n   * Create an {@link ICAL.Property} by parsing the passed iCalendar string.\n   *\n   * @param {String} str            The iCalendar string to parse\n   * @param {designSet=} designSet  The design data to use for this property\n   * @return {Property}             The created iCalendar property\n   */\n  static fromString(str, designSet) {\n    return new Property(parse.property(str, designSet));\n  }\n\n  /**\n   * Creates a new ICAL.Property instance.\n   *\n   * It is important to note that mutations done in the wrapper directly mutate the jCal object used\n   * to initialize.\n   *\n   * Can also be used to create new properties by passing the name of the property (as a String).\n   *\n   * @param {Array|String} jCal         Raw jCal representation OR the new name of the property\n   * @param {Component=} parent         Parent component\n   */\n  constructor(jCal, parent) {\n    this._parent = parent || null;\n\n    if (typeof(jCal) === 'string') {\n      // We are creating the property by name and need to detect the type\n      this.jCal = [jCal, {}, design$1.defaultType];\n      this.jCal[TYPE_INDEX] = this.getDefaultType();\n    } else {\n      this.jCal = jCal;\n    }\n    this._updateType();\n  }\n\n  /**\n   * The value type for this property\n   * @type {String}\n   */\n  get type() {\n    return this.jCal[TYPE_INDEX];\n  }\n\n  /**\n   * The name of this property, in lowercase.\n   * @type {String}\n   */\n  get name() {\n    return this.jCal[NAME_INDEX$1];\n  }\n\n  /**\n   * The parent component for this property.\n   * @type {Component}\n   */\n  get parent() {\n    return this._parent;\n  }\n\n  set parent(p) {\n    // Before setting the parent, check if the design set has changed. If it\n    // has, we later need to update the type if it was unknown before.\n    let designSetChanged = !this._parent || (p && p._designSet != this._parent._designSet);\n\n    this._parent = p;\n\n    if (this.type == design$1.defaultType && designSetChanged) {\n      this.jCal[TYPE_INDEX] = this.getDefaultType();\n      this._updateType();\n    }\n  }\n\n  /**\n   * The design set for this property, e.g. icalendar vs vcard\n   *\n   * @type {designSet}\n   * @private\n   */\n  get _designSet() {\n    return this.parent ? this.parent._designSet : design$1.defaultSet;\n  }\n\n  /**\n   * Updates the type metadata from the current jCal type and design set.\n   *\n   * @private\n   */\n  _updateType() {\n    let designSet = this._designSet;\n\n    if (this.type in designSet.value) {\n      if ('decorate' in designSet.value[this.type]) {\n        this.isDecorated = true;\n      } else {\n        this.isDecorated = false;\n      }\n\n      if (this.name in designSet.property) {\n        this.isMultiValue = ('multiValue' in designSet.property[this.name]);\n        this.isStructuredValue = ('structuredValue' in designSet.property[this.name]);\n      }\n    }\n  }\n\n  /**\n   * Hydrate a single value. The act of hydrating means turning the raw jCal\n   * value into a potentially wrapped object, for example {@link ICAL.Time}.\n   *\n   * @private\n   * @param {Number} index        The index of the value to hydrate\n   * @return {?Object}             The decorated value.\n   */\n  _hydrateValue(index) {\n    if (this._values && this._values[index]) {\n      return this._values[index];\n    }\n\n    // for the case where there is no value.\n    if (this.jCal.length <= (VALUE_INDEX + index)) {\n      return null;\n    }\n\n    if (this.isDecorated) {\n      if (!this._values) {\n        this._values = [];\n      }\n      return (this._values[index] = this._decorate(\n        this.jCal[VALUE_INDEX + index]\n      ));\n    } else {\n      return this.jCal[VALUE_INDEX + index];\n    }\n  }\n\n  /**\n   * Decorate a single value, returning its wrapped object. This is used by\n   * the hydrate function to actually wrap the value.\n   *\n   * @private\n   * @param {?} value         The value to decorate\n   * @return {Object}         The decorated value\n   */\n  _decorate(value) {\n    return this._designSet.value[this.type].decorate(value, this);\n  }\n\n  /**\n   * Undecorate a single value, returning its raw jCal data.\n   *\n   * @private\n   * @param {Object} value         The value to undecorate\n   * @return {?}                   The undecorated value\n   */\n  _undecorate(value) {\n    return this._designSet.value[this.type].undecorate(value, this);\n  }\n\n  /**\n   * Sets the value at the given index while also hydrating it. The passed\n   * value can either be a decorated or undecorated value.\n   *\n   * @private\n   * @param {?} value             The value to set\n   * @param {Number} index        The index to set it at\n   */\n  _setDecoratedValue(value, index) {\n    if (!this._values) {\n      this._values = [];\n    }\n\n    if (typeof(value) === 'object' && 'icaltype' in value) {\n      // decorated value\n      this.jCal[VALUE_INDEX + index] = this._undecorate(value);\n      this._values[index] = value;\n    } else {\n      // undecorated value\n      this.jCal[VALUE_INDEX + index] = value;\n      this._values[index] = this._decorate(value);\n    }\n  }\n\n  /**\n   * Gets a parameter on the property.\n   *\n   * @param {String}        name   Parameter name (lowercase)\n   * @return {Array|String}        Parameter value\n   */\n  getParameter(name) {\n    if (name in this.jCal[PROP_INDEX]) {\n      return this.jCal[PROP_INDEX][name];\n    } else {\n      return undefined;\n    }\n  }\n\n  /**\n   * Gets first parameter on the property.\n   *\n   * @param {String}        name   Parameter name (lowercase)\n   * @return {String}        Parameter value\n   */\n  getFirstParameter(name) {\n    let parameters = this.getParameter(name);\n\n    if (Array.isArray(parameters)) {\n      return parameters[0];\n    }\n\n    return parameters;\n  }\n\n  /**\n   * Sets a parameter on the property.\n   *\n   * @param {String}       name     The parameter name\n   * @param {Array|String} value    The parameter value\n   */\n  setParameter(name, value) {\n    let lcname = name.toLowerCase();\n    if (typeof value === \"string\" &&\n        lcname in this._designSet.param &&\n        'multiValue' in this._designSet.param[lcname]) {\n        value = [value];\n    }\n    this.jCal[PROP_INDEX][name] = value;\n  }\n\n  /**\n   * Removes a parameter\n   *\n   * @param {String} name     The parameter name\n   */\n  removeParameter(name) {\n    delete this.jCal[PROP_INDEX][name];\n  }\n\n  /**\n   * Get the default type based on this property's name.\n   *\n   * @return {String}     The default type for this property\n   */\n  getDefaultType() {\n    let name = this.jCal[NAME_INDEX$1];\n    let designSet = this._designSet;\n\n    if (name in designSet.property) {\n      let details = designSet.property[name];\n      if ('defaultType' in details) {\n        return details.defaultType;\n      }\n    }\n    return design$1.defaultType;\n  }\n\n  /**\n   * Sets type of property and clears out any existing values of the current\n   * type.\n   *\n   * @param {String} type     New iCAL type (see design.*.values)\n   */\n  resetType(type) {\n    this.removeAllValues();\n    this.jCal[TYPE_INDEX] = type;\n    this._updateType();\n  }\n\n  /**\n   * Finds the first property value.\n   *\n   * @return {Binary | Duration | Period |\n   * Recur | Time | UtcOffset | Geo | string | null}         First property value\n   */\n  getFirstValue() {\n    return this._hydrateValue(0);\n  }\n\n  /**\n   * Gets all values on the property.\n   *\n   * NOTE: this creates an array during each call.\n   *\n   * @return {Array}          List of values\n   */\n  getValues() {\n    let len = this.jCal.length - VALUE_INDEX;\n\n    if (len < 1) {\n      // it is possible for a property to have no value.\n      return [];\n    }\n\n    let i = 0;\n    let result = [];\n\n    for (; i < len; i++) {\n      result[i] = this._hydrateValue(i);\n    }\n\n    return result;\n  }\n\n  /**\n   * Removes all values from this property\n   */\n  removeAllValues() {\n    if (this._values) {\n      this._values.length = 0;\n    }\n    this.jCal.length = 3;\n  }\n\n  /**\n   * Sets the values of the property.  Will overwrite the existing values.\n   * This can only be used for multi-value properties.\n   *\n   * @param {Array} values    An array of values\n   */\n  setValues(values) {\n    if (!this.isMultiValue) {\n      throw new Error(\n        this.name + ': does not not support mulitValue.\\n' +\n        'override isMultiValue'\n      );\n    }\n\n    let len = values.length;\n    let i = 0;\n    this.removeAllValues();\n\n    if (len > 0 &&\n        typeof(values[0]) === 'object' &&\n        'icaltype' in values[0]) {\n      this.resetType(values[0].icaltype);\n    }\n\n    if (this.isDecorated) {\n      for (; i < len; i++) {\n        this._setDecoratedValue(values[i], i);\n      }\n    } else {\n      for (; i < len; i++) {\n        this.jCal[VALUE_INDEX + i] = values[i];\n      }\n    }\n  }\n\n  /**\n   * Sets the current value of the property. If this is a multi-value\n   * property, all other values will be removed.\n   *\n   * @param {String|Object} value     New property value.\n   */\n  setValue(value) {\n    this.removeAllValues();\n    if (typeof(value) === 'object' && 'icaltype' in value) {\n      this.resetType(value.icaltype);\n    }\n\n    if (this.isDecorated) {\n      this._setDecoratedValue(value, 0);\n    } else {\n      this.jCal[VALUE_INDEX] = value;\n    }\n  }\n\n  /**\n   * Returns the Object representation of this component. The returned object\n   * is a live jCal object and should be cloned if modified.\n   * @return {Object}\n   */\n  toJSON() {\n    return this.jCal;\n  }\n\n  /**\n   * The string representation of this component.\n   * @return {String}\n   */\n  toICALString() {\n    return stringify.property(\n      this.jCal, this._designSet, true\n    );\n  }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n * @ignore\n * @typedef {import(\"./types.js\").designSet} designSet\n * Imports the 'designSet' type from the \"types.js\" module\n * @typedef {import(\"./types.js\").Geo} Geo\n * Imports the 'Geo' type from the \"types.js\" module\n */\n\nconst NAME_INDEX = 0;\nconst PROPERTY_INDEX = 1;\nconst COMPONENT_INDEX = 2;\n\n/**\n * Wraps a jCal component, adding convenience methods to add, remove and update subcomponents and\n * properties.\n *\n * @memberof ICAL\n */\nclass Component {\n  /**\n   * Create an {@link ICAL.Component} by parsing the passed iCalendar string.\n   *\n   * @param {String} str        The iCalendar string to parse\n   */\n  static fromString(str) {\n    return new Component(parse.component(str));\n  }\n\n  /**\n   * Creates a new Component instance.\n   *\n   * @param {Array|String} jCal         Raw jCal component data OR name of new\n   *                                      component\n   * @param {Component=} parent     Parent component to associate\n   */\n  constructor(jCal, parent) {\n    if (typeof(jCal) === 'string') {\n      // jCal spec (name, properties, components)\n      jCal = [jCal, [], []];\n    }\n\n    // mostly for legacy reasons.\n    this.jCal = jCal;\n\n    this.parent = parent || null;\n\n    if (!this.parent && this.name === 'vcalendar') {\n      this._timezoneCache = new Map();\n    }\n  }\n\n  /**\n   * Hydrated properties are inserted into the _properties array at the same\n   * position as in the jCal array, so it is possible that the array contains\n   * undefined values for unhydrdated properties. To avoid iterating the\n   * array when checking if all properties have been hydrated, we save the\n   * count here.\n   *\n   * @type {Number}\n   * @private\n   */\n  _hydratedPropertyCount = 0;\n\n  /**\n   * The same count as for _hydratedPropertyCount, but for subcomponents\n   *\n   * @type {Number}\n   * @private\n   */\n  _hydratedComponentCount = 0;\n\n  /**\n   * A cache of hydrated time zone objects which may be used by consumers, keyed\n   * by time zone ID.\n   *\n   * @type {Map}\n   * @private\n   */\n  _timezoneCache = null;\n\n  /**\n   * @private\n   */\n  _components = null;\n\n  /**\n   * @private\n   */\n  _properties = null;\n\n  /**\n   * The name of this component\n   *\n   * @type {String}\n   */\n  get name() {\n    return this.jCal[NAME_INDEX];\n  }\n\n  /**\n   * The design set for this component, e.g. icalendar vs vcard\n   *\n   * @type {designSet}\n   * @private\n   */\n  get _designSet() {\n    let parentDesign = this.parent && this.parent._designSet;\n    return parentDesign || design$1.getDesignSet(this.name);\n  }\n\n  /**\n   * @private\n   */\n  _hydrateComponent(index) {\n    if (!this._components) {\n      this._components = [];\n      this._hydratedComponentCount = 0;\n    }\n\n    if (this._components[index]) {\n      return this._components[index];\n    }\n\n    let comp = new Component(\n      this.jCal[COMPONENT_INDEX][index],\n      this\n    );\n\n    this._hydratedComponentCount++;\n    return (this._components[index] = comp);\n  }\n\n  /**\n   * @private\n   */\n  _hydrateProperty(index) {\n    if (!this._properties) {\n      this._properties = [];\n      this._hydratedPropertyCount = 0;\n    }\n\n    if (this._properties[index]) {\n      return this._properties[index];\n    }\n\n    let prop = new Property(\n      this.jCal[PROPERTY_INDEX][index],\n      this\n    );\n\n    this._hydratedPropertyCount++;\n    return (this._properties[index] = prop);\n  }\n\n  /**\n   * Finds first sub component, optionally filtered by name.\n   *\n   * @param {String=} name        Optional name to filter by\n   * @return {?Component}     The found subcomponent\n   */\n  getFirstSubcomponent(name) {\n    if (name) {\n      let i = 0;\n      let comps = this.jCal[COMPONENT_INDEX];\n      let len = comps.length;\n\n      for (; i < len; i++) {\n        if (comps[i][NAME_INDEX] === name) {\n          let result = this._hydrateComponent(i);\n          return result;\n        }\n      }\n    } else {\n      if (this.jCal[COMPONENT_INDEX].length) {\n        return this._hydrateComponent(0);\n      }\n    }\n\n    // ensure we return a value (strict mode)\n    return null;\n  }\n\n  /**\n   * Finds all sub components, optionally filtering by name.\n   *\n   * @param {String=} name            Optional name to filter by\n   * @return {Component[]}       The found sub components\n   */\n  getAllSubcomponents(name) {\n    let jCalLen = this.jCal[COMPONENT_INDEX].length;\n    let i = 0;\n\n    if (name) {\n      let comps = this.jCal[COMPONENT_INDEX];\n      let result = [];\n\n      for (; i < jCalLen; i++) {\n        if (name === comps[i][NAME_INDEX]) {\n          result.push(\n            this._hydrateComponent(i)\n          );\n        }\n      }\n      return result;\n    } else {\n      if (!this._components ||\n          (this._hydratedComponentCount !== jCalLen)) {\n        for (; i < jCalLen; i++) {\n          this._hydrateComponent(i);\n        }\n      }\n\n      return this._components || [];\n    }\n  }\n\n  /**\n   * Returns true when a named property exists.\n   *\n   * @param {String} name     The property name\n   * @return {Boolean}        True, when property is found\n   */\n  hasProperty(name) {\n    let props = this.jCal[PROPERTY_INDEX];\n    let len = props.length;\n\n    let i = 0;\n    for (; i < len; i++) {\n      // 0 is property name\n      if (props[i][NAME_INDEX] === name) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Finds the first property, optionally with the given name.\n   *\n   * @param {String=} name        Lowercase property name\n   * @return {?Property}     The found property\n   */\n  getFirstProperty(name) {\n    if (name) {\n      let i = 0;\n      let props = this.jCal[PROPERTY_INDEX];\n      let len = props.length;\n\n      for (; i < len; i++) {\n        if (props[i][NAME_INDEX] === name) {\n          let result = this._hydrateProperty(i);\n          return result;\n        }\n      }\n    } else {\n      if (this.jCal[PROPERTY_INDEX].length) {\n        return this._hydrateProperty(0);\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Returns first property's value, if available.\n   *\n   * @param {String=} name                    Lowercase property name\n   * @return {Binary | Duration | Period |\n   * Recur | Time | UtcOffset | Geo | string | null}         The found property value.\n   */\n  getFirstPropertyValue(name) {\n    let prop = this.getFirstProperty(name);\n    if (prop) {\n      return prop.getFirstValue();\n    }\n\n    return null;\n  }\n\n  /**\n   * Get all properties in the component, optionally filtered by name.\n   *\n   * @param {String=} name        Lowercase property name\n   * @return {Property[]}    List of properties\n   */\n  getAllProperties(name) {\n    let jCalLen = this.jCal[PROPERTY_INDEX].length;\n    let i = 0;\n\n    if (name) {\n      let props = this.jCal[PROPERTY_INDEX];\n      let result = [];\n\n      for (; i < jCalLen; i++) {\n        if (name === props[i][NAME_INDEX]) {\n          result.push(\n            this._hydrateProperty(i)\n          );\n        }\n      }\n      return result;\n    } else {\n      if (!this._properties ||\n          (this._hydratedPropertyCount !== jCalLen)) {\n        for (; i < jCalLen; i++) {\n          this._hydrateProperty(i);\n        }\n      }\n\n      return this._properties || [];\n    }\n  }\n\n  /**\n   * @private\n   */\n  _removeObjectByIndex(jCalIndex, cache, index) {\n    cache = cache || [];\n    // remove cached version\n    if (cache[index]) {\n      let obj = cache[index];\n      if (\"parent\" in obj) {\n          obj.parent = null;\n      }\n    }\n\n    cache.splice(index, 1);\n\n    // remove it from the jCal\n    this.jCal[jCalIndex].splice(index, 1);\n  }\n\n  /**\n   * @private\n   */\n  _removeObject(jCalIndex, cache, nameOrObject) {\n    let i = 0;\n    let objects = this.jCal[jCalIndex];\n    let len = objects.length;\n    let cached = this[cache];\n\n    if (typeof(nameOrObject) === 'string') {\n      for (; i < len; i++) {\n        if (objects[i][NAME_INDEX] === nameOrObject) {\n          this._removeObjectByIndex(jCalIndex, cached, i);\n          return true;\n        }\n      }\n    } else if (cached) {\n      for (; i < len; i++) {\n        if (cached[i] && cached[i] === nameOrObject) {\n          this._removeObjectByIndex(jCalIndex, cached, i);\n          return true;\n        }\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * @private\n   */\n  _removeAllObjects(jCalIndex, cache, name) {\n    let cached = this[cache];\n\n    // Unfortunately we have to run through all children to reset their\n    // parent property.\n    let objects = this.jCal[jCalIndex];\n    let i = objects.length - 1;\n\n    // descending search required because splice\n    // is used and will effect the indices.\n    for (; i >= 0; i--) {\n      if (!name || objects[i][NAME_INDEX] === name) {\n        this._removeObjectByIndex(jCalIndex, cached, i);\n      }\n    }\n  }\n\n  /**\n   * Adds a single sub component.\n   *\n   * @param {Component} component        The component to add\n   * @return {Component}                 The passed in component\n   */\n  addSubcomponent(component) {\n    if (!this._components) {\n      this._components = [];\n      this._hydratedComponentCount = 0;\n    }\n\n    if (component.parent) {\n      component.parent.removeSubcomponent(component);\n    }\n\n    let idx = this.jCal[COMPONENT_INDEX].push(component.jCal);\n    this._components[idx - 1] = component;\n    this._hydratedComponentCount++;\n    component.parent = this;\n    return component;\n  }\n\n  /**\n   * Removes a single component by name or the instance of a specific\n   * component.\n   *\n   * @param {Component|String} nameOrComp    Name of component, or component\n   * @return {Boolean}                            True when comp is removed\n   */\n  removeSubcomponent(nameOrComp) {\n    let removed = this._removeObject(COMPONENT_INDEX, '_components', nameOrComp);\n    if (removed) {\n      this._hydratedComponentCount--;\n    }\n    return removed;\n  }\n\n  /**\n   * Removes all components or (if given) all components by a particular\n   * name.\n   *\n   * @param {String=} name            Lowercase component name\n   */\n  removeAllSubcomponents(name) {\n    let removed = this._removeAllObjects(COMPONENT_INDEX, '_components', name);\n    this._hydratedComponentCount = 0;\n    return removed;\n  }\n\n  /**\n   * Adds an {@link ICAL.Property} to the component.\n   *\n   * @param {Property} property      The property to add\n   * @return {Property}              The passed in property\n   */\n  addProperty(property) {\n    if (!(property instanceof Property)) {\n      throw new TypeError('must be instance of ICAL.Property');\n    }\n\n    if (!this._properties) {\n      this._properties = [];\n      this._hydratedPropertyCount = 0;\n    }\n\n    if (property.parent) {\n      property.parent.removeProperty(property);\n    }\n\n    let idx = this.jCal[PROPERTY_INDEX].push(property.jCal);\n    this._properties[idx - 1] = property;\n    this._hydratedPropertyCount++;\n    property.parent = this;\n    return property;\n  }\n\n  /**\n   * Helper method to add a property with a value to the component.\n   *\n   * @param {String}               name         Property name to add\n   * @param {String|Number|Object} value        Property value\n   * @return {Property}                    The created property\n   */\n  addPropertyWithValue(name, value) {\n    let prop = new Property(name);\n    prop.setValue(value);\n\n    this.addProperty(prop);\n\n    return prop;\n  }\n\n  /**\n   * Helper method that will update or create a property of the given name\n   * and sets its value. If multiple properties with the given name exist,\n   * only the first is updated.\n   *\n   * @param {String}               name         Property name to update\n   * @param {String|Number|Object} value        Property value\n   * @return {Property}                    The created property\n   */\n  updatePropertyWithValue(name, value) {\n    let prop = this.getFirstProperty(name);\n\n    if (prop) {\n      prop.setValue(value);\n    } else {\n      prop = this.addPropertyWithValue(name, value);\n    }\n\n    return prop;\n  }\n\n  /**\n   * Removes a single property by name or the instance of the specific\n   * property.\n   *\n   * @param {String|Property} nameOrProp     Property name or instance to remove\n   * @return {Boolean}                            True, when deleted\n   */\n  removeProperty(nameOrProp) {\n    let removed = this._removeObject(PROPERTY_INDEX, '_properties', nameOrProp);\n    if (removed) {\n      this._hydratedPropertyCount--;\n    }\n    return removed;\n  }\n\n  /**\n   * Removes all properties associated with this component, optionally\n   * filtered by name.\n   *\n   * @param {String=} name        Lowercase property name\n   * @return {Boolean}            True, when deleted\n   */\n  removeAllProperties(name) {\n    let removed = this._removeAllObjects(PROPERTY_INDEX, '_properties', name);\n    this._hydratedPropertyCount = 0;\n    return removed;\n  }\n\n  /**\n   * Returns the Object representation of this component. The returned object\n   * is a live jCal object and should be cloned if modified.\n   * @return {Object}\n   */\n  toJSON() {\n    return this.jCal;\n  }\n\n  /**\n   * The string representation of this component.\n   * @return {String}\n   */\n  toString() {\n    return stringify.component(\n      this.jCal, this._designSet\n    );\n  }\n\n  /**\n   * Retrieve a time zone definition from the component tree, if any is present.\n   * If the tree contains no time zone definitions or the TZID cannot be\n   * matched, returns null.\n   *\n   * @param {String} tzid     The ID of the time zone to retrieve\n   * @return {Timezone}  The time zone corresponding to the ID, or null\n   */\n  getTimeZoneByID(tzid) {\n    // VTIMEZONE components can only appear as a child of the VCALENDAR\n    // component; walk the tree if we're not the root.\n    if (this.parent) {\n      return this.parent.getTimeZoneByID(tzid);\n    }\n\n    // If there is no time zone cache, we are probably parsing an incomplete\n    // file and will have no time zone definitions.\n    if (!this._timezoneCache) {\n      return null;\n    }\n\n    if (this._timezoneCache.has(tzid)) {\n      return this._timezoneCache.get(tzid);\n    }\n\n    // If the time zone is not already cached, hydrate it from the\n    // subcomponents.\n    const zones = this.getAllSubcomponents('vtimezone');\n    for (const zone of zones) {\n      if (zone.getFirstProperty('tzid').getFirstValue() === tzid) {\n        const hydratedZone = new Timezone({\n          component: zone,\n          tzid: tzid,\n        });\n\n        this._timezoneCache.set(tzid, hydratedZone);\n\n        return hydratedZone;\n      }\n    }\n\n    // Per the standard, we should always have a time zone defined in a file\n    // for any referenced TZID, but don't blow up if the file is invalid.\n    return null;\n  }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * Primary class for expanding recurring rules.  Can take multiple rrules, rdates, exdate(s) and\n * iterate (in order) over each next occurrence.\n *\n * Once initialized this class can also be serialized saved and continue iteration from the last\n * point.\n *\n * NOTE: it is intended that this class is to be used with {@link ICAL.Event} which handles recurrence\n * exceptions.\n *\n * @example\n * // assuming event is a parsed ical component\n * var event;\n *\n * var expand = new ICAL.RecurExpansion({\n *   component: event,\n *   dtstart: event.getFirstPropertyValue('dtstart')\n * });\n *\n * // remember there are infinite rules so it is a good idea to limit the scope of the iterations\n * // then resume later on.\n *\n * // next is always an ICAL.Time or null\n * var next;\n *\n * while (someCondition && (next = expand.next())) {\n *   // do something with next\n * }\n *\n * // save instance for later\n * var json = JSON.stringify(expand);\n *\n * //...\n *\n * // NOTE: if the component's properties have changed you will need to rebuild the class and start\n * // over. This only works when the component's recurrence info is the same.\n * var expand = new ICAL.RecurExpansion(JSON.parse(json));\n *\n * @memberof ICAL\n */\nclass RecurExpansion {\n  /**\n   * Creates a new ICAL.RecurExpansion instance.\n   *\n   * The options object can be filled with the specified initial values. It can also contain\n   * additional members, as a result of serializing a previous expansion state, as shown in the\n   * example.\n   *\n   * @param {Object} options\n   *        Recurrence expansion options\n   * @param {Time} options.dtstart\n   *        Start time of the event\n   * @param {Component=} options.component\n   *        Component for expansion, required if not resuming.\n   */\n  constructor(options) {\n    this.ruleDates = [];\n    this.exDates = [];\n    this.fromData(options);\n  }\n\n  /**\n   * True when iteration is fully completed.\n   * @type {Boolean}\n   */\n  complete = false;\n\n  /**\n   * Array of rrule iterators.\n   *\n   * @type {RecurIterator[]}\n   * @private\n   */\n  ruleIterators = null;\n\n  /**\n   * Array of rdate instances.\n   *\n   * @type {Time[]}\n   * @private\n   */\n  ruleDates = null;\n\n  /**\n   * Array of exdate instances.\n   *\n   * @type {Time[]}\n   * @private\n   */\n  exDates = null;\n\n  /**\n   * Current position in ruleDates array.\n   * @type {Number}\n   * @private\n   */\n  ruleDateInc = 0;\n\n  /**\n   * Current position in exDates array\n   * @type {Number}\n   * @private\n   */\n  exDateInc = 0;\n\n  /**\n   * Current negative date.\n   *\n   * @type {Time}\n   * @private\n   */\n  exDate = null;\n\n  /**\n   * Current additional date.\n   *\n   * @type {Time}\n   * @private\n   */\n  ruleDate = null;\n\n  /**\n   * Start date of recurring rules.\n   *\n   * @type {Time}\n   */\n  dtstart = null;\n\n  /**\n   * Last expanded time\n   *\n   * @type {Time}\n   */\n  last = null;\n\n  /**\n   * Initialize the recurrence expansion from the data object. The options\n   * object may also contain additional members, see the\n   * {@link ICAL.RecurExpansion constructor} for more details.\n   *\n   * @param {Object} options\n   *        Recurrence expansion options\n   * @param {Time} options.dtstart\n   *        Start time of the event\n   * @param {Component=} options.component\n   *        Component for expansion, required if not resuming.\n   */\n  fromData(options) {\n    let start = formatClassType(options.dtstart, Time);\n\n    if (!start) {\n      throw new Error('.dtstart (ICAL.Time) must be given');\n    } else {\n      this.dtstart = start;\n    }\n\n    if (options.component) {\n      this._init(options.component);\n    } else {\n      this.last = formatClassType(options.last, Time) || start.clone();\n\n      if (!options.ruleIterators) {\n        throw new Error('.ruleIterators or .component must be given');\n      }\n\n      this.ruleIterators = options.ruleIterators.map(function(item) {\n        return formatClassType(item, RecurIterator);\n      });\n\n      this.ruleDateInc = options.ruleDateInc;\n      this.exDateInc = options.exDateInc;\n\n      if (options.ruleDates) {\n        this.ruleDates = options.ruleDates.map(item => formatClassType(item, Time));\n        this.ruleDate = this.ruleDates[this.ruleDateInc];\n      }\n\n      if (options.exDates) {\n        this.exDates = options.exDates.map(item => formatClassType(item, Time));\n        this.exDate = this.exDates[this.exDateInc];\n      }\n\n      if (typeof(options.complete) !== 'undefined') {\n        this.complete = options.complete;\n      }\n    }\n  }\n\n  /**\n   * Retrieve the next occurrence in the series.\n   * @return {Time}\n   */\n  next() {\n    let iter;\n    let next;\n    let compare;\n\n    let maxTries = 500;\n    let currentTry = 0;\n\n    while (true) {\n      if (currentTry++ > maxTries) {\n        throw new Error(\n          'max tries have occurred, rule may be impossible to fulfill.'\n        );\n      }\n\n      next = this.ruleDate;\n      iter = this._nextRecurrenceIter(this.last);\n\n      // no more matches\n      // because we increment the rule day or rule\n      // _after_ we choose a value this should be\n      // the only spot where we need to worry about the\n      // end of events.\n      if (!next && !iter) {\n        // there are no more iterators or rdates\n        this.complete = true;\n        break;\n      }\n\n      // no next rule day or recurrence rule is first.\n      if (!next || (iter && next.compare(iter.last) > 0)) {\n        // must be cloned, recur will reuse the time element.\n        next = iter.last.clone();\n        // move to next so we can continue\n        iter.next();\n      }\n\n      // if the ruleDate is still next increment it.\n      if (this.ruleDate === next) {\n        this._nextRuleDay();\n      }\n\n      this.last = next;\n\n      // check the negative rules\n      if (this.exDate) {\n        compare = this.exDate.compare(this.last);\n\n        if (compare < 0) {\n          this._nextExDay();\n        }\n\n        // if the current rule is excluded skip it.\n        if (compare === 0) {\n          this._nextExDay();\n          continue;\n        }\n      }\n\n      //XXX: The spec states that after we resolve the final\n      //     list of dates we execute exdate this seems somewhat counter\n      //     intuitive to what I have seen most servers do so for now\n      //     I exclude based on the original date not the one that may\n      //     have been modified by the exception.\n      return this.last;\n    }\n  }\n\n  /**\n   * Converts object into a serialize-able format. This format can be passed\n   * back into the expansion to resume iteration.\n   * @return {Object}\n   */\n  toJSON() {\n    function toJSON(item) {\n      return item.toJSON();\n    }\n\n    let result = Object.create(null);\n    result.ruleIterators = this.ruleIterators.map(toJSON);\n\n    if (this.ruleDates) {\n      result.ruleDates = this.ruleDates.map(toJSON);\n    }\n\n    if (this.exDates) {\n      result.exDates = this.exDates.map(toJSON);\n    }\n\n    result.ruleDateInc = this.ruleDateInc;\n    result.exDateInc = this.exDateInc;\n    result.last = this.last.toJSON();\n    result.dtstart = this.dtstart.toJSON();\n    result.complete = this.complete;\n\n    return result;\n  }\n\n  /**\n   * Extract all dates from the properties in the given component. The\n   * properties will be filtered by the property name.\n   *\n   * @private\n   * @param {Component} component             The component to search in\n   * @param {String} propertyName             The property name to search for\n   * @return {Time[]}                         The extracted dates.\n   */\n  _extractDates(component, propertyName) {\n    let result = [];\n    let props = component.getAllProperties(propertyName);\n\n    for (let i = 0, len = props.length; i < len; i++) {\n      for (let prop of props[i].getValues()) {\n        let idx = binsearchInsert(\n          result,\n          prop,\n          (a, b) => a.compare(b)\n        );\n\n        // ordered insert\n        result.splice(idx, 0, prop);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Initialize the recurrence expansion.\n   *\n   * @private\n   * @param {Component} component    The component to initialize from.\n   */\n  _init(component) {\n    this.ruleIterators = [];\n\n    this.last = this.dtstart.clone();\n\n    // to provide api consistency non-recurring\n    // events can also use the iterator though it will\n    // only return a single time.\n    if (!component.hasProperty('rdate') &&\n        !component.hasProperty('rrule') &&\n        !component.hasProperty('recurrence-id')) {\n      this.ruleDate = this.last.clone();\n      this.complete = true;\n      return;\n    }\n\n    if (component.hasProperty('rdate')) {\n      this.ruleDates = this._extractDates(component, 'rdate');\n\n      // special hack for cases where first rdate is prior\n      // to the start date. We only check for the first rdate.\n      // This is mostly for google's crazy recurring date logic\n      // (contacts birthdays).\n      if ((this.ruleDates[0]) &&\n          (this.ruleDates[0].compare(this.dtstart) < 0)) {\n\n        this.ruleDateInc = 0;\n        this.last = this.ruleDates[0].clone();\n      } else {\n        this.ruleDateInc = binsearchInsert(\n          this.ruleDates,\n          this.last,\n          (a, b) => a.compare(b)\n        );\n      }\n\n      this.ruleDate = this.ruleDates[this.ruleDateInc];\n    }\n\n    if (component.hasProperty('rrule')) {\n      let rules = component.getAllProperties('rrule');\n      let i = 0;\n      let len = rules.length;\n\n      let rule;\n      let iter;\n\n      for (; i < len; i++) {\n        rule = rules[i].getFirstValue();\n        iter = rule.iterator(this.dtstart);\n        this.ruleIterators.push(iter);\n\n        // increment to the next occurrence so future\n        // calls to next return times beyond the initial iteration.\n        // XXX: I find this suspicious might be a bug?\n        iter.next();\n      }\n    }\n\n    if (component.hasProperty('exdate')) {\n      this.exDates = this._extractDates(component, 'exdate');\n      // if we have a .last day we increment the index to beyond it.\n      this.exDateInc = binsearchInsert(\n        this.exDates,\n        this.last,\n        (a, b) => a.compare(b)\n      );\n\n      this.exDate = this.exDates[this.exDateInc];\n    }\n  }\n\n  /**\n   * Advance to the next exdate\n   * @private\n   */\n  _nextExDay() {\n    this.exDate = this.exDates[++this.exDateInc];\n  }\n\n  /**\n   * Advance to the next rule date\n   * @private\n   */\n  _nextRuleDay() {\n    this.ruleDate = this.ruleDates[++this.ruleDateInc];\n  }\n\n  /**\n   * Find and return the recurrence rule with the most recent event and\n   * return it.\n   *\n   * @private\n   * @return {?RecurIterator}    Found iterator.\n   */\n  _nextRecurrenceIter() {\n    let iters = this.ruleIterators;\n\n    if (iters.length === 0) {\n      return null;\n    }\n\n    let len = iters.length;\n    let iter;\n    let iterTime;\n    let iterIdx = 0;\n    let chosenIter;\n\n    // loop through each iterator\n    for (; iterIdx < len; iterIdx++) {\n      iter = iters[iterIdx];\n      iterTime = iter.last;\n\n      // if iteration is complete\n      // then we must exclude it from\n      // the search and remove it.\n      if (iter.completed) {\n        len--;\n        if (iterIdx !== 0) {\n          iterIdx--;\n        }\n        iters.splice(iterIdx, 1);\n        continue;\n      }\n\n      // find the most recent possible choice\n      if (!chosenIter || chosenIter.last.compare(iterTime) > 0) {\n        // that iterator is saved\n        chosenIter = iter;\n      }\n    }\n\n    // the chosen iterator is returned but not mutated\n    // this iterator contains the most recent event.\n    return chosenIter;\n  }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * This lets typescript resolve our custom types in the\n * generated d.ts files (jsdoc typedefs are converted to typescript types).\n * Ignore prevents the typedefs from being documented more than once.\n * @ignore\n * @typedef {import(\"./types.js\").frequencyValues} frequencyValues\n * Imports the 'frequencyValues' type from the \"types.js\" module\n * @typedef {import(\"./types.js\").occurrenceDetails} occurrenceDetails\n * Imports the 'occurrenceDetails' type from the \"types.js\" module\n */\n\n/**\n * ICAL.js is organized into multiple layers. The bottom layer is a raw jCal\n * object, followed by the component/property layer. The highest level is the\n * event representation, which this class is part of. See the\n * {@tutorial layers} guide for more details.\n *\n * @memberof ICAL\n */\nclass Event {\n  /**\n   * Creates a new ICAL.Event instance.\n   *\n   * @param {Component=} component              The ICAL.Component to base this event on\n   * @param {Object} [options]                  Options for this event\n   * @param {Boolean=} options.strictExceptions  When true, will verify exceptions are related by\n   *                                              their UUID\n   * @param {Array<Component|Event>=} options.exceptions\n   *          Exceptions to this event, either as components or events. If not\n   *            specified exceptions will automatically be set in relation of\n   *            component's parent\n   */\n  constructor(component, options) {\n    if (!(component instanceof Component)) {\n      options = component;\n      component = null;\n    }\n\n    if (component) {\n      this.component = component;\n    } else {\n      this.component = new Component('vevent');\n    }\n\n    this._rangeExceptionCache = Object.create(null);\n    this.exceptions = Object.create(null);\n    this.rangeExceptions = [];\n\n    if (options && options.strictExceptions) {\n      this.strictExceptions = options.strictExceptions;\n    }\n\n    if (options && options.exceptions) {\n      options.exceptions.forEach(this.relateException, this);\n    } else if (this.component.parent && !this.isRecurrenceException()) {\n      this.component.parent.getAllSubcomponents('vevent').forEach(function(event) {\n        if (event.hasProperty('recurrence-id')) {\n          this.relateException(event);\n        }\n      }, this);\n    }\n  }\n\n\n  static THISANDFUTURE = 'THISANDFUTURE';\n\n  /**\n   * List of related event exceptions.\n   *\n   * @type {Event[]}\n   */\n  exceptions = null;\n\n  /**\n   * When true, will verify exceptions are related by their UUID.\n   *\n   * @type {Boolean}\n   */\n  strictExceptions = false;\n\n  /**\n   * Relates a given event exception to this object.  If the given component\n   * does not share the UID of this event it cannot be related and will throw\n   * an exception.\n   *\n   * If this component is an exception it cannot have other exceptions\n   * related to it.\n   *\n   * @param {Component|Event} obj       Component or event\n   */\n  relateException(obj) {\n    if (this.isRecurrenceException()) {\n      throw new Error('cannot relate exception to exceptions');\n    }\n\n    if (obj instanceof Component) {\n      obj = new Event(obj);\n    }\n\n    if (this.strictExceptions && obj.uid !== this.uid) {\n      throw new Error('attempted to relate unrelated exception');\n    }\n\n    let id = obj.recurrenceId.toString();\n\n    // we don't sort or manage exceptions directly\n    // here the recurrence expander handles that.\n    this.exceptions[id] = obj;\n\n    // index RANGE=THISANDFUTURE exceptions so we can\n    // look them up later in getOccurrenceDetails.\n    if (obj.modifiesFuture()) {\n      let item = [\n        obj.recurrenceId.toUnixTime(), id\n      ];\n\n      // we keep them sorted so we can find the nearest\n      // value later on...\n      let idx = binsearchInsert(\n        this.rangeExceptions,\n        item,\n        compareRangeException\n      );\n\n      this.rangeExceptions.splice(idx, 0, item);\n    }\n  }\n\n  /**\n   * Checks if this record is an exception and has the RANGE=THISANDFUTURE\n   * value.\n   *\n   * @return {Boolean}        True, when exception is within range\n   */\n  modifiesFuture() {\n    if (!this.component.hasProperty('recurrence-id')) {\n      return false;\n    }\n\n    let range = this.component.getFirstProperty('recurrence-id').getParameter('range');\n    return range === Event.THISANDFUTURE;\n  }\n\n  /**\n   * Finds the range exception nearest to the given date.\n   *\n   * @param {Time} time   usually an occurrence time of an event\n   * @return {?Event}     the related event/exception or null\n   */\n  findRangeException(time) {\n    if (!this.rangeExceptions.length) {\n      return null;\n    }\n\n    let utc = time.toUnixTime();\n    let idx = binsearchInsert(\n      this.rangeExceptions,\n      [utc],\n      compareRangeException\n    );\n\n    idx -= 1;\n\n    // occurs before\n    if (idx < 0) {\n      return null;\n    }\n\n    let rangeItem = this.rangeExceptions[idx];\n\n    /* c8 ignore next 4 */\n    if (utc < rangeItem[0]) {\n      // sanity check only\n      return null;\n    }\n\n    return rangeItem[1];\n  }\n\n  /**\n   * Returns the occurrence details based on its start time.  If the\n   * occurrence has an exception will return the details for that exception.\n   *\n   * NOTE: this method is intend to be used in conjunction\n   *       with the {@link ICAL.Event#iterator iterator} method.\n   *\n   * @param {Time} occurrence               time occurrence\n   * @return {occurrenceDetails}            Information about the occurrence\n   */\n  getOccurrenceDetails(occurrence) {\n    let id = occurrence.toString();\n    let utcId = occurrence.convertToZone(Timezone.utcTimezone).toString();\n    let item;\n    let result = {\n      //XXX: Clone?\n      recurrenceId: occurrence\n    };\n\n    if (id in this.exceptions) {\n      item = result.item = this.exceptions[id];\n      result.startDate = item.startDate;\n      result.endDate = item.endDate;\n      result.item = item;\n    } else if (utcId in this.exceptions) {\n      item = this.exceptions[utcId];\n      result.startDate = item.startDate;\n      result.endDate = item.endDate;\n      result.item = item;\n    } else {\n      // range exceptions (RANGE=THISANDFUTURE) have a\n      // lower priority then direct exceptions but\n      // must be accounted for first. Their item is\n      // always the first exception with the range prop.\n      let rangeExceptionId = this.findRangeException(\n        occurrence\n      );\n      let end;\n\n      if (rangeExceptionId) {\n        let exception = this.exceptions[rangeExceptionId];\n\n        // range exception must modify standard time\n        // by the difference (if any) in start/end times.\n        result.item = exception;\n\n        let startDiff = this._rangeExceptionCache[rangeExceptionId];\n\n        if (!startDiff) {\n          let original = exception.recurrenceId.clone();\n          let newStart = exception.startDate.clone();\n\n          // zones must be same otherwise subtract may be incorrect.\n          original.zone = newStart.zone;\n          startDiff = newStart.subtractDate(original);\n\n          this._rangeExceptionCache[rangeExceptionId] = startDiff;\n        }\n\n        let start = occurrence.clone();\n        start.zone = exception.startDate.zone;\n        start.addDuration(startDiff);\n\n        end = start.clone();\n        end.addDuration(exception.duration);\n\n        result.startDate = start;\n        result.endDate = end;\n      } else {\n        // no range exception standard expansion\n        end = occurrence.clone();\n        end.addDuration(this.duration);\n\n        result.endDate = end;\n        result.startDate = occurrence;\n        result.item = this;\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Builds a recur expansion instance for a specific point in time (defaults\n   * to startDate).\n   *\n   * @param {Time=} startTime     Starting point for expansion\n   * @return {RecurExpansion}    Expansion object\n   */\n  iterator(startTime) {\n    return new RecurExpansion({\n      component: this.component,\n      dtstart: startTime || this.startDate\n    });\n  }\n\n  /**\n   * Checks if the event is recurring\n   *\n   * @return {Boolean}        True, if event is recurring\n   */\n  isRecurring() {\n    let comp = this.component;\n    return comp.hasProperty('rrule') || comp.hasProperty('rdate');\n  }\n\n  /**\n   * Checks if the event describes a recurrence exception. See\n   * {@tutorial terminology} for details.\n   *\n   * @return {Boolean}    True, if the event describes a recurrence exception\n   */\n  isRecurrenceException() {\n    return this.component.hasProperty('recurrence-id');\n  }\n\n  /**\n   * Returns the types of recurrences this event may have.\n   *\n   * Returned as an object with the following possible keys:\n   *\n   *    - YEARLY\n   *    - MONTHLY\n   *    - WEEKLY\n   *    - DAILY\n   *    - MINUTELY\n   *    - SECONDLY\n   *\n   * @return {Object.<frequencyValues, Boolean>}\n   *          Object of recurrence flags\n   */\n  getRecurrenceTypes() {\n    let rules = this.component.getAllProperties('rrule');\n    let i = 0;\n    let len = rules.length;\n    let result = Object.create(null);\n\n    for (; i < len; i++) {\n      let value = rules[i].getFirstValue();\n      result[value.freq] = true;\n    }\n\n    return result;\n  }\n\n  /**\n   * The uid of this event\n   * @type {String}\n   */\n  get uid() {\n    return this._firstProp('uid');\n  }\n\n  set uid(value) {\n    this._setProp('uid', value);\n  }\n\n  /**\n   * The start date\n   * @type {Time}\n   */\n  get startDate() {\n    return this._firstProp('dtstart');\n  }\n\n  set startDate(value) {\n    this._setTime('dtstart', value);\n  }\n\n  /**\n   * The end date. This can be the result directly from the property, or the\n   * end date calculated from start date and duration. Setting the property\n   * will remove any duration properties.\n   * @type {Time}\n   */\n  get endDate() {\n    let endDate = this._firstProp('dtend');\n    if (!endDate) {\n        let duration = this._firstProp('duration');\n        endDate = this.startDate.clone();\n        if (duration) {\n            endDate.addDuration(duration);\n        } else if (endDate.isDate) {\n            endDate.day += 1;\n        }\n    }\n    return endDate;\n  }\n\n  set endDate(value) {\n    if (this.component.hasProperty('duration')) {\n      this.component.removeProperty('duration');\n    }\n    this._setTime('dtend', value);\n  }\n\n  /**\n   * The duration. This can be the result directly from the property, or the\n   * duration calculated from start date and end date. Setting the property\n   * will remove any `dtend` properties.\n   * @type {Duration}\n   */\n  get duration() {\n    let duration = this._firstProp('duration');\n    if (!duration) {\n      return this.endDate.subtractDateTz(this.startDate);\n    }\n    return duration;\n  }\n\n  set duration(value) {\n    if (this.component.hasProperty('dtend')) {\n      this.component.removeProperty('dtend');\n    }\n\n    this._setProp('duration', value);\n  }\n\n  /**\n   * The location of the event.\n   * @type {String}\n   */\n  get location() {\n    return this._firstProp('location');\n  }\n\n  set location(value) {\n    this._setProp('location', value);\n  }\n\n  /**\n   * The attendees in the event\n   * @type {Property[]}\n   */\n  get attendees() {\n    //XXX: This is way lame we should have a better\n    //     data structure for this later.\n    return this.component.getAllProperties('attendee');\n  }\n\n  /**\n   * The event summary\n   * @type {String}\n   */\n  get summary() {\n    return this._firstProp('summary');\n  }\n\n  set summary(value) {\n    this._setProp('summary', value);\n  }\n\n  /**\n   * The event description.\n   * @type {String}\n   */\n  get description() {\n    return this._firstProp('description');\n  }\n\n  set description(value) {\n    this._setProp('description', value);\n  }\n\n  /**\n   * The event color from [rfc7986](https://datatracker.ietf.org/doc/html/rfc7986)\n   * @type {String}\n   */\n  get color() {\n    return this._firstProp('color');\n  }\n\n  set color(value) {\n    this._setProp('color', value);\n  }\n\n  /**\n   * The organizer value as an uri. In most cases this is a mailto: uri, but\n   * it can also be something else, like urn:uuid:...\n   * @type {String}\n   */\n  get organizer() {\n    return this._firstProp('organizer');\n  }\n\n  set organizer(value) {\n    this._setProp('organizer', value);\n  }\n\n  /**\n   * The sequence value for this event. Used for scheduling\n   * see {@tutorial terminology}.\n   * @type {Number}\n   */\n  get sequence() {\n    return this._firstProp('sequence');\n  }\n\n  set sequence(value) {\n    this._setProp('sequence', value);\n  }\n\n  /**\n   * The recurrence id for this event. See {@tutorial terminology} for details.\n   * @type {Time}\n   */\n  get recurrenceId() {\n    return this._firstProp('recurrence-id');\n  }\n\n  set recurrenceId(value) {\n    this._setTime('recurrence-id', value);\n  }\n\n  /**\n   * Set/update a time property's value.\n   * This will also update the TZID of the property.\n   *\n   * TODO: this method handles the case where we are switching\n   * from a known timezone to an implied timezone (one without TZID).\n   * This does _not_ handle the case of moving between a known\n   *  (by TimezoneService) timezone to an unknown timezone...\n   *\n   * We will not add/remove/update the VTIMEZONE subcomponents\n   *  leading to invalid ICAL data...\n   * @private\n   * @param {String} propName     The property name\n   * @param {Time} time           The time to set\n   */\n  _setTime(propName, time) {\n    let prop = this.component.getFirstProperty(propName);\n\n    if (!prop) {\n      prop = new Property(propName);\n      this.component.addProperty(prop);\n    }\n\n    // utc and local don't get a tzid\n    if (\n      time.zone === Timezone.localTimezone ||\n      time.zone === Timezone.utcTimezone\n    ) {\n      // remove the tzid\n      prop.removeParameter('tzid');\n    } else {\n      prop.setParameter('tzid', time.zone.tzid);\n    }\n\n    prop.setValue(time);\n  }\n\n  _setProp(name, value) {\n    this.component.updatePropertyWithValue(name, value);\n  }\n\n  _firstProp(name) {\n    return this.component.getFirstPropertyValue(name);\n  }\n\n  /**\n   * The string representation of this event.\n   * @return {String}\n   */\n  toString() {\n    return this.component.toString();\n  }\n}\n\nfunction compareRangeException(a, b) {\n  if (a[0] > b[0]) return 1;\n  if (b[0] > a[0]) return -1;\n  return 0;\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * The ComponentParser is used to process a String or jCal Object,\n * firing callbacks for various found components, as well as completion.\n *\n * @example\n * var options = {\n *   // when false no events will be emitted for type\n *   parseEvent: true,\n *   parseTimezone: true\n * };\n *\n * var parser = new ICAL.ComponentParser(options);\n *\n * parser.onevent(eventComponent) {\n *   //...\n * }\n *\n * // ontimezone, etc...\n *\n * parser.oncomplete = function() {\n *\n * };\n *\n * parser.process(stringOrComponent);\n *\n * @memberof ICAL\n */\nclass ComponentParser {\n  /**\n   * Creates a new ICAL.ComponentParser instance.\n   *\n   * @param {Object=} options                   Component parser options\n   * @param {Boolean} options.parseEvent        Whether events should be parsed\n   * @param {Boolean} options.parseTimezeone    Whether timezones should be parsed\n   */\n  constructor(options) {\n    if (typeof(options) === 'undefined') {\n      options = {};\n    }\n\n    for (let [key, value] of Object.entries(options)) {\n      this[key] = value;\n    }\n  }\n\n  /**\n   * When true, parse events\n   *\n   * @type {Boolean}\n   */\n  parseEvent = true;\n\n  /**\n   * When true, parse timezones\n   *\n   * @type {Boolean}\n   */\n  parseTimezone = true;\n\n\n  /* SAX like events here for reference */\n\n  /**\n   * Fired when parsing is complete\n   * @callback\n   */\n  oncomplete = /* c8 ignore next */ function() {};\n\n  /**\n   * Fired if an error occurs during parsing.\n   *\n   * @callback\n   * @param {Error} err details of error\n   */\n  onerror = /* c8 ignore next */ function(err) {};\n\n  /**\n   * Fired when a top level component (VTIMEZONE) is found\n   *\n   * @callback\n   * @param {Timezone} component     Timezone object\n   */\n  ontimezone = /* c8 ignore next */ function(component) {};\n\n  /**\n   * Fired when a top level component (VEVENT) is found.\n   *\n   * @callback\n   * @param {Event} component    Top level component\n   */\n  onevent = /* c8 ignore next */ function(component) {};\n\n  /**\n   * Process a string or parse ical object.  This function itself will return\n   * nothing but will start the parsing process.\n   *\n   * Events must be registered prior to calling this method.\n   *\n   * @param {Component|String|Object} ical      The component to process,\n   *        either in its final form, as a jCal Object, or string representation\n   */\n  process(ical) {\n    //TODO: this is sync now in the future we will have a incremental parser.\n    if (typeof(ical) === 'string') {\n      ical = parse(ical);\n    }\n\n    if (!(ical instanceof Component)) {\n      ical = new Component(ical);\n    }\n\n    let components = ical.getAllSubcomponents();\n    let i = 0;\n    let len = components.length;\n    let component;\n\n    for (; i < len; i++) {\n      component = components[i];\n\n      switch (component.name) {\n        case 'vtimezone':\n          if (this.parseTimezone) {\n            let tzid = component.getFirstPropertyValue('tzid');\n            if (tzid) {\n              this.ontimezone(new Timezone({\n                tzid: tzid,\n                component: component\n              }));\n            }\n          }\n          break;\n        case 'vevent':\n          if (this.parseEvent) {\n            this.onevent(new Event(component));\n          }\n          break;\n        default:\n          continue;\n      }\n    }\n\n    //XXX: ideally we should do a \"nextTick\" here\n    //     so in all cases this is actually async.\n    this.oncomplete();\n  }\n}\n\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch */\n\n/**\n * The main ICAL module. Provides access to everything else.\n *\n * @alias ICAL\n * @namespace ICAL\n * @property {ICAL.design} design\n * @property {ICAL.helpers} helpers\n */\nvar ICALmodule = {\n  /**\n   * The number of characters before iCalendar line folding should occur\n   * @type {Number}\n   * @default 75\n   */\n  foldLength: 75,\n\n  debug: false,\n\n  /**\n   * The character(s) to be used for a newline. The default value is provided by\n   * rfc5545.\n   * @type {String}\n   * @default \"\\r\\n\"\n   */\n  newLineChar: '\\r\\n',\n\n  Binary,\n  Component,\n  ComponentParser,\n  Duration,\n  Event,\n  Period,\n  Property,\n  Recur,\n  RecurExpansion,\n  RecurIterator,\n  Time,\n  Timezone,\n  TimezoneService,\n  UtcOffset,\n  VCardTime,\n\n  parse,\n  stringify,\n\n  design: design$1,\n  helpers\n};\n\nexport { ICALmodule as default };\n","import ICAL from \"ical.js\";\nfunction getSortedTimezoneList(timezoneList = [], additionalTimezones = [], globalTimezoneName = \"Global\") {\n  const sortedByContinent = /* @__PURE__ */ new Map();\n  for (const timezoneId of timezoneList) {\n    const components = timezoneId.split(\"/\");\n    let [continent, name] = [components.shift(), components.join(\"/\")];\n    if (!name) {\n      name = continent;\n      continent = globalTimezoneName;\n    }\n    if (!sortedByContinent.has(continent)) {\n      sortedByContinent.set(continent, {\n        continent,\n        regions: []\n      });\n    }\n    sortedByContinent.get(continent).regions.push({\n      label: getReadableTimezoneName(name),\n      cities: [],\n      timezoneId\n    });\n  }\n  for (const { continent, label, timezoneId } of additionalTimezones) {\n    if (!sortedByContinent.has(continent)) {\n      sortedByContinent.set(continent, {\n        continent,\n        regions: []\n      });\n    }\n    sortedByContinent.get(continent).regions.push({\n      label,\n      cities: [],\n      timezoneId\n    });\n  }\n  const sortedList = [...sortedByContinent.values()].sort((a, b) => a.continent.localeCompare(b.continent));\n  for (const { regions } of sortedList) {\n    regions.sort((a, b) => a.label.localeCompare(b.label));\n  }\n  return sortedList;\n}\nfunction getReadableTimezoneName(timezoneId) {\n  return timezoneId.split(\"_\").join(\" \").replace(\"St \", \"St. \").split(\"/\").join(\" - \");\n}\nfunction isOlsonTimezone(tzName) {\n  const hasSlash = tzName.includes(\"/\");\n  const hasSpace = tzName.includes(\" \");\n  const startsWithETC = tzName.startsWith(\"Etc\");\n  const startsWithUS = tzName.startsWith(\"US/\");\n  return hasSlash && !hasSpace && !startsWithETC && !startsWithUS;\n}\nclass Timezone {\n  /**\n   * Id of the timezone.\n   */\n  _timezoneId;\n  /**\n   * ICS representation of the timezone\n   */\n  _ics;\n  _timezone;\n  _initialized;\n  constructor(timezoneId, ics) {\n    if (timezoneId instanceof ICAL.Timezone) {\n      this._timezone = timezoneId;\n      this._initialized = true;\n    } else if (timezoneId instanceof ICAL.Component) {\n      this._timezone = new ICAL.Timezone(timezoneId);\n      this._initialized = true;\n    } else {\n      this._timezoneId = timezoneId;\n      this._ics = ics;\n      this._initialized = false;\n    }\n  }\n  /**\n   * Get the timezone id\n   */\n  get timezoneId() {\n    if (this._initialized) {\n      return this._timezone.tzid;\n    }\n    return this._timezoneId;\n  }\n  /**\n   * Get the UTC Offset for a given date in this timezone.\n   *\n   * @param year - Year of the date\n   * @param month - Month of the date (1-based)\n   * @param day - Day of the date\n   * @param hour - Hour of the date\n   * @param minute - Minute of the date\n   * @param second - Second of the date\n   */\n  offsetForArray(year, month, day, hour, minute, second) {\n    const time = new ICAL.Time({\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      isDate: false\n    });\n    return this.timezone.utcOffset(time);\n  }\n  /**\n   * Converts a timestamp to an array of year, month, day, hour, minute, second.\n   *\n   * @param {number} ms Timestamp in milliseconds\n   * @return {number[]}\n   */\n  timestampToArray(ms) {\n    const time = ICAL.Time.fromData({\n      year: 1970,\n      month: 1,\n      day: 1,\n      hour: 0,\n      minute: 0,\n      second: 0\n    });\n    time.fromUnixTime(Math.floor(ms / 1e3));\n    const local = time.convertToZone(this.timezone);\n    return [\n      local.year,\n      local.month,\n      // THIS is 1-based !\n      local.day,\n      local.hour,\n      local.minute,\n      local.second\n    ];\n  }\n  toICALTimezone() {\n    return this.timezone;\n  }\n  /**\n   * Returns the corresponding ICAL.\n   */\n  toICALJs() {\n    return this.timezone.component;\n  }\n  /**\n   * Initializes the inner ICAL.Timezone component if not already done.\n   */\n  get timezone() {\n    if (!this._initialized) {\n      const jCal = ICAL.parse(this._ics);\n      const iCalComponent = new ICAL.Component(jCal);\n      this._timezone = new ICAL.Timezone(iCalComponent);\n      this._initialized = true;\n    }\n    return this._timezone;\n  }\n  static get utc() {\n    return new Timezone(ICAL.Timezone.utcTimezone);\n  }\n  static get floating() {\n    return new Timezone(ICAL.Timezone.localTimezone);\n  }\n}\nconst version = \"2.2024a\";\nconst aliases = {\n  \"AUS Central Standard Time\": {\n    aliasTo: \"Australia/Darwin\"\n  },\n  \"AUS Eastern Standard Time\": {\n    aliasTo: \"Australia/Sydney\"\n  },\n  \"Afghanistan Standard Time\": {\n    aliasTo: \"Asia/Kabul\"\n  },\n  \"Africa/Asmera\": {\n    aliasTo: \"Africa/Asmara\"\n  },\n  \"Africa/Timbuktu\": {\n    aliasTo: \"Africa/Bamako\"\n  },\n  \"Alaskan Standard Time\": {\n    aliasTo: \"America/Anchorage\"\n  },\n  \"America/Argentina/ComodRivadavia\": {\n    aliasTo: \"America/Argentina/Catamarca\"\n  },\n  \"America/Buenos_Aires\": {\n    aliasTo: \"America/Argentina/Buenos_Aires\"\n  },\n  \"America/Louisville\": {\n    aliasTo: \"America/Kentucky/Louisville\"\n  },\n  \"America/Montreal\": {\n    aliasTo: \"America/Toronto\"\n  },\n  \"America/Santa_Isabel\": {\n    aliasTo: \"America/Tijuana\"\n  },\n  \"Arab Standard Time\": {\n    aliasTo: \"Asia/Riyadh\"\n  },\n  \"Arabian Standard Time\": {\n    aliasTo: \"Asia/Dubai\"\n  },\n  \"Arabic Standard Time\": {\n    aliasTo: \"Asia/Baghdad\"\n  },\n  \"Argentina Standard Time\": {\n    aliasTo: \"America/Argentina/Buenos_Aires\"\n  },\n  \"Asia/Calcutta\": {\n    aliasTo: \"Asia/Kolkata\"\n  },\n  \"Asia/Katmandu\": {\n    aliasTo: \"Asia/Kathmandu\"\n  },\n  \"Asia/Rangoon\": {\n    aliasTo: \"Asia/Yangon\"\n  },\n  \"Asia/Saigon\": {\n    aliasTo: \"Asia/Ho_Chi_Minh\"\n  },\n  \"Atlantic Standard Time\": {\n    aliasTo: \"America/Halifax\"\n  },\n  \"Atlantic/Faeroe\": {\n    aliasTo: \"Atlantic/Faroe\"\n  },\n  \"Atlantic/Jan_Mayen\": {\n    aliasTo: \"Europe/Oslo\"\n  },\n  \"Azerbaijan Standard Time\": {\n    aliasTo: \"Asia/Baku\"\n  },\n  \"Azores Standard Time\": {\n    aliasTo: \"Atlantic/Azores\"\n  },\n  \"Bahia Standard Time\": {\n    aliasTo: \"America/Bahia\"\n  },\n  \"Bangladesh Standard Time\": {\n    aliasTo: \"Asia/Dhaka\"\n  },\n  \"Belarus Standard Time\": {\n    aliasTo: \"Europe/Minsk\"\n  },\n  \"Canada Central Standard Time\": {\n    aliasTo: \"America/Regina\"\n  },\n  \"Cape Verde Standard Time\": {\n    aliasTo: \"Atlantic/Cape_Verde\"\n  },\n  \"Caucasus Standard Time\": {\n    aliasTo: \"Asia/Yerevan\"\n  },\n  \"Cen. Australia Standard Time\": {\n    aliasTo: \"Australia/Adelaide\"\n  },\n  \"Central America Standard Time\": {\n    aliasTo: \"America/Guatemala\"\n  },\n  \"Central Asia Standard Time\": {\n    aliasTo: \"Asia/Almaty\"\n  },\n  \"Central Brazilian Standard Time\": {\n    aliasTo: \"America/Cuiaba\"\n  },\n  \"Central Europe Standard Time\": {\n    aliasTo: \"Europe/Budapest\"\n  },\n  \"Central European Standard Time\": {\n    aliasTo: \"Europe/Warsaw\"\n  },\n  \"Central Pacific Standard Time\": {\n    aliasTo: \"Pacific/Guadalcanal\"\n  },\n  \"Central Standard Time\": {\n    aliasTo: \"America/Chicago\"\n  },\n  \"Central Standard Time (Mexico)\": {\n    aliasTo: \"America/Mexico_City\"\n  },\n  \"China Standard Time\": {\n    aliasTo: \"Asia/Shanghai\"\n  },\n  \"E. Africa Standard Time\": {\n    aliasTo: \"Africa/Nairobi\"\n  },\n  \"E. Australia Standard Time\": {\n    aliasTo: \"Australia/Brisbane\"\n  },\n  \"E. South America Standard Time\": {\n    aliasTo: \"America/Sao_Paulo\"\n  },\n  \"Eastern Standard Time\": {\n    aliasTo: \"America/New_York\"\n  },\n  \"Egypt Standard Time\": {\n    aliasTo: \"Africa/Cairo\"\n  },\n  \"Ekaterinburg Standard Time\": {\n    aliasTo: \"Asia/Yekaterinburg\"\n  },\n  \"Etc/GMT\": {\n    aliasTo: \"UTC\"\n  },\n  \"Etc/GMT+0\": {\n    aliasTo: \"UTC\"\n  },\n  \"Etc/UCT\": {\n    aliasTo: \"UTC\"\n  },\n  \"Etc/UTC\": {\n    aliasTo: \"UTC\"\n  },\n  \"Etc/Unversal\": {\n    aliasTo: \"UTC\"\n  },\n  \"Etc/Zulu\": {\n    aliasTo: \"UTC\"\n  },\n  \"Europe/Belfast\": {\n    aliasTo: \"Europe/London\"\n  },\n  \"FLE Standard Time\": {\n    aliasTo: \"Europe/Kiev\"\n  },\n  \"Fiji Standard Time\": {\n    aliasTo: \"Pacific/Fiji\"\n  },\n  GMT: {\n    aliasTo: \"UTC\"\n  },\n  \"GMT Standard Time\": {\n    aliasTo: \"Europe/London\"\n  },\n  \"GMT+0\": {\n    aliasTo: \"UTC\"\n  },\n  GMT0: {\n    aliasTo: \"UTC\"\n  },\n  \"GTB Standard Time\": {\n    aliasTo: \"Europe/Bucharest\"\n  },\n  \"Georgian Standard Time\": {\n    aliasTo: \"Asia/Tbilisi\"\n  },\n  \"Greenland Standard Time\": {\n    aliasTo: \"America/Godthab\"\n  },\n  Greenwich: {\n    aliasTo: \"UTC\"\n  },\n  \"Greenwich Standard Time\": {\n    aliasTo: \"Atlantic/Reykjavik\"\n  },\n  \"Hawaiian Standard Time\": {\n    aliasTo: \"Pacific/Honolulu\"\n  },\n  \"India Standard Time\": {\n    aliasTo: \"Asia/Calcutta\"\n  },\n  \"Iran Standard Time\": {\n    aliasTo: \"Asia/Tehran\"\n  },\n  \"Israel Standard Time\": {\n    aliasTo: \"Asia/Jerusalem\"\n  },\n  \"Jordan Standard Time\": {\n    aliasTo: \"Asia/Amman\"\n  },\n  \"Kaliningrad Standard Time\": {\n    aliasTo: \"Europe/Kaliningrad\"\n  },\n  \"Korea Standard Time\": {\n    aliasTo: \"Asia/Seoul\"\n  },\n  \"Libya Standard Time\": {\n    aliasTo: \"Africa/Tripoli\"\n  },\n  \"Line Islands Standard Time\": {\n    aliasTo: \"Pacific/Kiritimati\"\n  },\n  \"Magadan Standard Time\": {\n    aliasTo: \"Asia/Magadan\"\n  },\n  \"Mauritius Standard Time\": {\n    aliasTo: \"Indian/Mauritius\"\n  },\n  \"Middle East Standard Time\": {\n    aliasTo: \"Asia/Beirut\"\n  },\n  \"Montevideo Standard Time\": {\n    aliasTo: \"America/Montevideo\"\n  },\n  \"Morocco Standard Time\": {\n    aliasTo: \"Africa/Casablanca\"\n  },\n  \"Mountain Standard Time\": {\n    aliasTo: \"America/Denver\"\n  },\n  \"Mountain Standard Time (Mexico)\": {\n    aliasTo: \"America/Chihuahua\"\n  },\n  \"Myanmar Standard Time\": {\n    aliasTo: \"Asia/Rangoon\"\n  },\n  \"N. Central Asia Standard Time\": {\n    aliasTo: \"Asia/Novosibirsk\"\n  },\n  \"Namibia Standard Time\": {\n    aliasTo: \"Africa/Windhoek\"\n  },\n  \"Nepal Standard Time\": {\n    aliasTo: \"Asia/Katmandu\"\n  },\n  \"New Zealand Standard Time\": {\n    aliasTo: \"Pacific/Auckland\"\n  },\n  \"Newfoundland Standard Time\": {\n    aliasTo: \"America/St_Johns\"\n  },\n  \"North Asia East Standard Time\": {\n    aliasTo: \"Asia/Irkutsk\"\n  },\n  \"North Asia Standard Time\": {\n    aliasTo: \"Asia/Krasnoyarsk\"\n  },\n  \"Pacific SA Standard Time\": {\n    aliasTo: \"America/Santiago\"\n  },\n  \"Pacific Standard Time\": {\n    aliasTo: \"America/Los_Angeles\"\n  },\n  \"Pacific Standard Time (Mexico)\": {\n    aliasTo: \"America/Santa_Isabel\"\n  },\n  \"Pacific/Johnston\": {\n    aliasTo: \"Pacific/Honolulu\"\n  },\n  \"Pakistan Standard Time\": {\n    aliasTo: \"Asia/Karachi\"\n  },\n  \"Paraguay Standard Time\": {\n    aliasTo: \"America/Asuncion\"\n  },\n  \"Romance Standard Time\": {\n    aliasTo: \"Europe/Paris\"\n  },\n  \"Russia Time Zone 10\": {\n    aliasTo: \"Asia/Srednekolymsk\"\n  },\n  \"Russia Time Zone 11\": {\n    aliasTo: \"Asia/Kamchatka\"\n  },\n  \"Russia Time Zone 3\": {\n    aliasTo: \"Europe/Samara\"\n  },\n  \"Russian Standard Time\": {\n    aliasTo: \"Europe/Moscow\"\n  },\n  \"SA Eastern Standard Time\": {\n    aliasTo: \"America/Cayenne\"\n  },\n  \"SA Pacific Standard Time\": {\n    aliasTo: \"America/Bogota\"\n  },\n  \"SA Western Standard Time\": {\n    aliasTo: \"America/La_Paz\"\n  },\n  \"SE Asia Standard Time\": {\n    aliasTo: \"Asia/Bangkok\"\n  },\n  \"Samoa Standard Time\": {\n    aliasTo: \"Pacific/Apia\"\n  },\n  \"Singapore Standard Time\": {\n    aliasTo: \"Asia/Singapore\"\n  },\n  \"South Africa Standard Time\": {\n    aliasTo: \"Africa/Johannesburg\"\n  },\n  \"Sri Lanka Standard Time\": {\n    aliasTo: \"Asia/Colombo\"\n  },\n  \"Syria Standard Time\": {\n    aliasTo: \"Asia/Damascus\"\n  },\n  \"Taipei Standard Time\": {\n    aliasTo: \"Asia/Taipei\"\n  },\n  \"Tasmania Standard Time\": {\n    aliasTo: \"Australia/Hobart\"\n  },\n  \"Tokyo Standard Time\": {\n    aliasTo: \"Asia/Tokyo\"\n  },\n  \"Tonga Standard Time\": {\n    aliasTo: \"Pacific/Tongatapu\"\n  },\n  \"Turkey Standard Time\": {\n    aliasTo: \"Europe/Istanbul\"\n  },\n  UCT: {\n    aliasTo: \"UTC\"\n  },\n  \"US Eastern Standard Time\": {\n    aliasTo: \"America/Indiana/Indianapolis\"\n  },\n  \"US Mountain Standard Time\": {\n    aliasTo: \"America/Phoenix\"\n  },\n  \"US/Central\": {\n    aliasTo: \"America/Chicago\"\n  },\n  \"US/Eastern\": {\n    aliasTo: \"America/New_York\"\n  },\n  \"US/Mountain\": {\n    aliasTo: \"America/Denver\"\n  },\n  \"US/Pacific\": {\n    aliasTo: \"America/Los_Angeles\"\n  },\n  \"US/Pacific-New\": {\n    aliasTo: \"America/Los_Angeles\"\n  },\n  \"Ulaanbaatar Standard Time\": {\n    aliasTo: \"Asia/Ulaanbaatar\"\n  },\n  Universal: {\n    aliasTo: \"UTC\"\n  },\n  \"Venezuela Standard Time\": {\n    aliasTo: \"America/Caracas\"\n  },\n  \"Vladivostok Standard Time\": {\n    aliasTo: \"Asia/Vladivostok\"\n  },\n  \"W. Australia Standard Time\": {\n    aliasTo: \"Australia/Perth\"\n  },\n  \"W. Central Africa Standard Time\": {\n    aliasTo: \"Africa/Lagos\"\n  },\n  \"W. Europe Standard Time\": {\n    aliasTo: \"Europe/Berlin\"\n  },\n  \"West Asia Standard Time\": {\n    aliasTo: \"Asia/Tashkent\"\n  },\n  \"West Pacific Standard Time\": {\n    aliasTo: \"Pacific/Port_Moresby\"\n  },\n  \"Yakutsk Standard Time\": {\n    aliasTo: \"Asia/Yakutsk\"\n  },\n  Z: {\n    aliasTo: \"UTC\"\n  },\n  Zulu: {\n    aliasTo: \"UTC\"\n  },\n  utc: {\n    aliasTo: \"UTC\"\n  }\n};\nconst zones = {\n  \"Africa/Abidjan\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0051900\",\n    longitude: \"-0040200\"\n  },\n  \"Africa/Accra\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Addis_Ababa\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Algiers\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0364700\",\n    longitude: \"+0030300\"\n  },\n  \"Africa/Asmara\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Asmera\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Bamako\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Bangui\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Banjul\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Bissau\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0115100\",\n    longitude: \"-0153500\"\n  },\n  \"Africa/Blantyre\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Brazzaville\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Bujumbura\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Cairo\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700424T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1FR\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701030T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0300300\",\n    longitude: \"+0311500\"\n  },\n  \"Africa/Casablanca\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0333900\",\n    longitude: \"-0073500\"\n  },\n  \"Africa/Ceuta\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0355300\",\n    longitude: \"-0051900\"\n  },\n  \"Africa/Conakry\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Dakar\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Dar_es_Salaam\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Djibouti\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Douala\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/El_Aaiun\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0270900\",\n    longitude: \"-0131200\"\n  },\n  \"Africa/Freetown\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Gaborone\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Harare\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Johannesburg\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:SAST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0261500\",\n    longitude: \"+0280000\"\n  },\n  \"Africa/Juba\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0045100\",\n    longitude: \"+0313700\"\n  },\n  \"Africa/Kampala\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Khartoum\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0153600\",\n    longitude: \"+0323200\"\n  },\n  \"Africa/Kigali\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Kinshasa\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Lagos\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0062700\",\n    longitude: \"+0032400\"\n  },\n  \"Africa/Libreville\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Lome\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Luanda\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Lubumbashi\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Lusaka\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Malabo\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Maputo\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0255800\",\n    longitude: \"+0323500\"\n  },\n  \"Africa/Maseru\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:SAST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Mbabane\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:SAST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Mogadishu\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Monrovia\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0061800\",\n    longitude: \"-0104700\"\n  },\n  \"Africa/Nairobi\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0011700\",\n    longitude: \"+0364900\"\n  },\n  \"Africa/Ndjamena\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0120700\",\n    longitude: \"+0150300\"\n  },\n  \"Africa/Niamey\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Nouakchott\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Ouagadougou\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Porto-Novo\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Sao_Tome\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0002000\",\n    longitude: \"+0064400\"\n  },\n  \"Africa/Timbuktu\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Africa/Tripoli\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0325400\",\n    longitude: \"+0131100\"\n  },\n  \"Africa/Tunis\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0364800\",\n    longitude: \"+0101100\"\n  },\n  \"Africa/Windhoek\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0223400\",\n    longitude: \"+0170600\"\n  },\n  \"America/Adak\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:HDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:HST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0515248\",\n    longitude: \"-1763929\"\n  },\n  \"America/Anchorage\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0611305\",\n    longitude: \"-1495401\"\n  },\n  \"America/Anguilla\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Antigua\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Araguaina\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0071200\",\n    longitude: \"-0481200\"\n  },\n  \"America/Argentina/Buenos_Aires\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0343600\",\n    longitude: \"-0582700\"\n  },\n  \"America/Argentina/Catamarca\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0282800\",\n    longitude: \"-0654700\"\n  },\n  \"America/Argentina/ComodRivadavia\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Argentina/Cordoba\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0312400\",\n    longitude: \"-0641100\"\n  },\n  \"America/Argentina/Jujuy\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0241100\",\n    longitude: \"-0651800\"\n  },\n  \"America/Argentina/La_Rioja\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0292600\",\n    longitude: \"-0665100\"\n  },\n  \"America/Argentina/Mendoza\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0325300\",\n    longitude: \"-0684900\"\n  },\n  \"America/Argentina/Rio_Gallegos\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0513800\",\n    longitude: \"-0691300\"\n  },\n  \"America/Argentina/Salta\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0244700\",\n    longitude: \"-0652500\"\n  },\n  \"America/Argentina/San_Juan\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0313200\",\n    longitude: \"-0683100\"\n  },\n  \"America/Argentina/San_Luis\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0331900\",\n    longitude: \"-0662100\"\n  },\n  \"America/Argentina/Tucuman\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0264900\",\n    longitude: \"-0651300\"\n  },\n  \"America/Argentina/Ushuaia\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0544800\",\n    longitude: \"-0681800\"\n  },\n  \"America/Aruba\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Asuncion\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19701004T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700322T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0251600\",\n    longitude: \"-0574000\"\n  },\n  \"America/Atikokan\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Atka\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:HDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:HST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Bahia\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0125900\",\n    longitude: \"-0383100\"\n  },\n  \"America/Bahia_Banderas\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0204800\",\n    longitude: \"-1051500\"\n  },\n  \"America/Barbados\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0130600\",\n    longitude: \"-0593700\"\n  },\n  \"America/Belem\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0012700\",\n    longitude: \"-0482900\"\n  },\n  \"America/Belize\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0173000\",\n    longitude: \"-0881200\"\n  },\n  \"America/Blanc-Sablon\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Boa_Vista\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0024900\",\n    longitude: \"-0604000\"\n  },\n  \"America/Bogota\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0043600\",\n    longitude: \"-0740500\"\n  },\n  \"America/Boise\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0433649\",\n    longitude: \"-1161209\"\n  },\n  \"America/Buenos_Aires\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Cambridge_Bay\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0690650\",\n    longitude: \"-1050310\"\n  },\n  \"America/Campo_Grande\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0202700\",\n    longitude: \"-0543700\"\n  },\n  \"America/Cancun\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0210500\",\n    longitude: \"-0864600\"\n  },\n  \"America/Caracas\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0103000\",\n    longitude: \"-0665600\"\n  },\n  \"America/Catamarca\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Cayenne\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0045600\",\n    longitude: \"-0522000\"\n  },\n  \"America/Cayman\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Chicago\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0415100\",\n    longitude: \"-0873900\"\n  },\n  \"America/Chihuahua\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0283800\",\n    longitude: \"-1060500\"\n  },\n  \"America/Ciudad_Juarez\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0314400\",\n    longitude: \"-1062900\"\n  },\n  \"America/Coral_Harbour\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Cordoba\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Costa_Rica\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0095600\",\n    longitude: \"-0840500\"\n  },\n  \"America/Creston\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Cuiaba\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0153500\",\n    longitude: \"-0560500\"\n  },\n  \"America/Curacao\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Danmarkshavn\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0764600\",\n    longitude: \"-0184000\"\n  },\n  \"America/Dawson\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0640400\",\n    longitude: \"-1392500\"\n  },\n  \"America/Dawson_Creek\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0554600\",\n    longitude: \"-1201400\"\n  },\n  \"America/Denver\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0394421\",\n    longitude: \"-1045903\"\n  },\n  \"America/Detroit\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0421953\",\n    longitude: \"-0830245\"\n  },\n  \"America/Dominica\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Edmonton\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0533300\",\n    longitude: \"-1132800\"\n  },\n  \"America/Eirunepe\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0064000\",\n    longitude: \"-0695200\"\n  },\n  \"America/El_Salvador\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0134200\",\n    longitude: \"-0891200\"\n  },\n  \"America/Ensenada\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Fort_Nelson\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0584800\",\n    longitude: \"-1224200\"\n  },\n  \"America/Fort_Wayne\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Fortaleza\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0034300\",\n    longitude: \"-0383000\"\n  },\n  \"America/Glace_Bay\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0461200\",\n    longitude: \"-0595700\"\n  },\n  \"America/Godthab\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0100\\r\\nTZNAME:-01\\r\\nDTSTART:19700328T230000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0100\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19701025T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Goose_Bay\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"+0532000\",\n    longitude: \"-0602500\"\n  },\n  \"America/Grand_Turk\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"+0212800\",\n    longitude: \"-0710800\"\n  },\n  \"America/Grenada\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Guadeloupe\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Guatemala\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0143800\",\n    longitude: \"-0903100\"\n  },\n  \"America/Guayaquil\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0021000\",\n    longitude: \"-0795000\"\n  },\n  \"America/Guyana\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0064800\",\n    longitude: \"-0581000\"\n  },\n  \"America/Halifax\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0443900\",\n    longitude: \"-0633600\"\n  },\n  \"America/Havana\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"+0230800\",\n    longitude: \"-0822200\"\n  },\n  \"America/Hermosillo\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0290400\",\n    longitude: \"-1105800\"\n  },\n  \"America/Indiana/Indianapolis\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0394606\",\n    longitude: \"-0860929\"\n  },\n  \"America/Indiana/Knox\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0411745\",\n    longitude: \"-0863730\"\n  },\n  \"America/Indiana/Marengo\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0382232\",\n    longitude: \"-0862041\"\n  },\n  \"America/Indiana/Petersburg\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0382931\",\n    longitude: \"-0871643\"\n  },\n  \"America/Indiana/Tell_City\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0375711\",\n    longitude: \"-0864541\"\n  },\n  \"America/Indiana/Vevay\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0384452\",\n    longitude: \"-0850402\"\n  },\n  \"America/Indiana/Vincennes\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0384038\",\n    longitude: \"-0873143\"\n  },\n  \"America/Indiana/Winamac\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"+0410305\",\n    longitude: \"-0863611\"\n  },\n  \"America/Indianapolis\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Inuvik\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0682059\",\n    longitude: \"-1334300\"\n  },\n  \"America/Iqaluit\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0634400\",\n    longitude: \"-0682800\"\n  },\n  \"America/Jamaica\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0175805\",\n    longitude: \"-0764736\"\n  },\n  \"America/Jujuy\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Juneau\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0581807\",\n    longitude: \"-1342511\"\n  },\n  \"America/Kentucky/Louisville\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0381515\",\n    longitude: \"-0854534\"\n  },\n  \"America/Kentucky/Monticello\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0364947\",\n    longitude: \"-0845057\"\n  },\n  \"America/Knox_IN\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Kralendijk\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/La_Paz\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0163000\",\n    longitude: \"-0680900\"\n  },\n  \"America/Lima\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0120300\",\n    longitude: \"-0770300\"\n  },\n  \"America/Los_Angeles\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0340308\",\n    longitude: \"-1181434\"\n  },\n  \"America/Louisville\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Lower_Princes\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Maceio\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0094000\",\n    longitude: \"-0354300\"\n  },\n  \"America/Managua\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0120900\",\n    longitude: \"-0861700\"\n  },\n  \"America/Manaus\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0030800\",\n    longitude: \"-0600100\"\n  },\n  \"America/Marigot\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Martinique\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0143600\",\n    longitude: \"-0610500\"\n  },\n  \"America/Matamoros\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0255000\",\n    longitude: \"-0973000\"\n  },\n  \"America/Mazatlan\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0231300\",\n    longitude: \"-1062500\"\n  },\n  \"America/Mendoza\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Menominee\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0450628\",\n    longitude: \"-0873651\"\n  },\n  \"America/Merida\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0205800\",\n    longitude: \"-0893700\"\n  },\n  \"America/Metlakatla\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0550737\",\n    longitude: \"-1313435\"\n  },\n  \"America/Mexico_City\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0192400\",\n    longitude: \"-0990900\"\n  },\n  \"America/Miquelon\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0470300\",\n    longitude: \"-0562000\"\n  },\n  \"America/Moncton\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0460600\",\n    longitude: \"-0644700\"\n  },\n  \"America/Monterrey\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0254000\",\n    longitude: \"-1001900\"\n  },\n  \"America/Montevideo\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0345433\",\n    longitude: \"-0561245\"\n  },\n  \"America/Montreal\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Montserrat\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Nassau\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/New_York\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0404251\",\n    longitude: \"-0740023\"\n  },\n  \"America/Nipigon\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Nome\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0643004\",\n    longitude: \"-1652423\"\n  },\n  \"America/Noronha\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0035100\",\n    longitude: \"-0322500\"\n  },\n  \"America/North_Dakota/Beulah\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0471551\",\n    longitude: \"-1014640\"\n  },\n  \"America/North_Dakota/Center\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0470659\",\n    longitude: \"-1011757\"\n  },\n  \"America/North_Dakota/New_Salem\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0465042\",\n    longitude: \"-1012439\"\n  },\n  \"America/Nuuk\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0100\\r\\nTZNAME:-01\\r\\nDTSTART:19700328T230000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0100\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19701025T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0641100\",\n    longitude: \"-0514400\"\n  },\n  \"America/Ojinaga\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0293400\",\n    longitude: \"-1042500\"\n  },\n  \"America/Panama\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0085800\",\n    longitude: \"-0793200\"\n  },\n  \"America/Pangnirtung\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Paramaribo\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0055000\",\n    longitude: \"-0551000\"\n  },\n  \"America/Phoenix\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0332654\",\n    longitude: \"-1120424\"\n  },\n  \"America/Port-au-Prince\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0183200\",\n    longitude: \"-0722000\"\n  },\n  \"America/Port_of_Spain\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Porto_Acre\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Porto_Velho\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0084600\",\n    longitude: \"-0635400\"\n  },\n  \"America/Puerto_Rico\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0182806\",\n    longitude: \"-0660622\"\n  },\n  \"America/Punta_Arenas\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0530900\",\n    longitude: \"-0705500\"\n  },\n  \"America/Rainy_River\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Rankin_Inlet\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0624900\",\n    longitude: \"-0920459\"\n  },\n  \"America/Recife\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0080300\",\n    longitude: \"-0345400\"\n  },\n  \"America/Regina\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0502400\",\n    longitude: \"-1043900\"\n  },\n  \"America/Resolute\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"+0744144\",\n    longitude: \"-0944945\"\n  },\n  \"America/Rio_Branco\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0095800\",\n    longitude: \"-0674800\"\n  },\n  \"America/Rosario\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Santa_Isabel\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Santarem\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0022600\",\n    longitude: \"-0545200\"\n  },\n  \"America/Santiago\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700405T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700906T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"-0332700\",\n    longitude: \"-0704000\"\n  },\n  \"America/Santo_Domingo\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0182800\",\n    longitude: \"-0695400\"\n  },\n  \"America/Sao_Paulo\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0233200\",\n    longitude: \"-0463700\"\n  },\n  \"America/Scoresbysund\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0100\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19701025T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0100\\r\\nTZNAME:-01\\r\\nDTSTART:19700328T230000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"+0702900\",\n    longitude: \"-0215800\"\n  },\n  \"America/Shiprock\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Sitka\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0571035\",\n    longitude: \"-1351807\"\n  },\n  \"America/St_Barthelemy\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/St_Johns\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0230\\r\\nTZOFFSETTO:-0330\\r\\nTZNAME:NST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0330\\r\\nTZOFFSETTO:-0230\\r\\nTZNAME:NDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"+0473400\",\n    longitude: \"-0524300\"\n  },\n  \"America/St_Kitts\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/St_Lucia\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/St_Thomas\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/St_Vincent\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Swift_Current\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0501700\",\n    longitude: \"-1075000\"\n  },\n  \"America/Tegucigalpa\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0140600\",\n    longitude: \"-0871300\"\n  },\n  \"America/Thule\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0763400\",\n    longitude: \"-0684700\"\n  },\n  \"America/Thunder_Bay\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Tijuana\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0323200\",\n    longitude: \"-1170100\"\n  },\n  \"America/Toronto\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0433900\",\n    longitude: \"-0792300\"\n  },\n  \"America/Tortola\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Vancouver\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0491600\",\n    longitude: \"-1230700\"\n  },\n  \"America/Virgin\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"America/Whitehorse\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0604300\",\n    longitude: \"-1350300\"\n  },\n  \"America/Winnipeg\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0495300\",\n    longitude: \"-0970900\"\n  },\n  \"America/Yakutat\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0593249\",\n    longitude: \"-1394338\"\n  },\n  \"America/Yellowknife\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Antarctica/Casey\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0661700\",\n    longitude: \"+1103100\"\n  },\n  \"Antarctica/Davis\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0683500\",\n    longitude: \"+0775800\"\n  },\n  \"Antarctica/DumontDUrville\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Antarctica/Macquarie\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"-0543000\",\n    longitude: \"+1585700\"\n  },\n  \"Antarctica/Mawson\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0673600\",\n    longitude: \"+0625300\"\n  },\n  \"Antarctica/McMurdo\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:NZDT\\r\\nDTSTART:19700927T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:NZST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Antarctica/Palmer\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0644800\",\n    longitude: \"-0640600\"\n  },\n  \"Antarctica/Rothera\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0673400\",\n    longitude: \"-0680800\"\n  },\n  \"Antarctica/South_Pole\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:NZDT\\r\\nDTSTART:19700927T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:NZST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Antarctica/Syowa\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Antarctica/Troll\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:+02\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0720041\",\n    longitude: \"+0023206\"\n  },\n  \"Antarctica/Vostok\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0782400\",\n    longitude: \"+1065400\"\n  },\n  \"Arctic/Longyearbyen\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Aden\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Almaty\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0431500\",\n    longitude: \"+0765700\"\n  },\n  \"Asia/Amman\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0315700\",\n    longitude: \"+0355600\"\n  },\n  \"Asia/Anadyr\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0644500\",\n    longitude: \"+1772900\"\n  },\n  \"Asia/Aqtau\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0443100\",\n    longitude: \"+0501600\"\n  },\n  \"Asia/Aqtobe\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0501700\",\n    longitude: \"+0571000\"\n  },\n  \"Asia/Ashgabat\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0375700\",\n    longitude: \"+0582300\"\n  },\n  \"Asia/Ashkhabad\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Atyrau\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0470700\",\n    longitude: \"+0515600\"\n  },\n  \"Asia/Baghdad\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0332100\",\n    longitude: \"+0442500\"\n  },\n  \"Asia/Bahrain\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Baku\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0402300\",\n    longitude: \"+0495100\"\n  },\n  \"Asia/Bangkok\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0134500\",\n    longitude: \"+1003100\"\n  },\n  \"Asia/Barnaul\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0532200\",\n    longitude: \"+0834500\"\n  },\n  \"Asia/Beirut\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0335300\",\n    longitude: \"+0353000\"\n  },\n  \"Asia/Bishkek\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0425400\",\n    longitude: \"+0743600\"\n  },\n  \"Asia/Brunei\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Calcutta\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0530\\r\\nTZOFFSETTO:+0530\\r\\nTZNAME:IST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Chita\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0520300\",\n    longitude: \"+1132800\"\n  },\n  \"Asia/Choibalsan\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0480400\",\n    longitude: \"+1143000\"\n  },\n  \"Asia/Chongqing\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Chungking\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Colombo\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0530\\r\\nTZOFFSETTO:+0530\\r\\nTZNAME:+0530\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0065600\",\n    longitude: \"+0795100\"\n  },\n  \"Asia/Dacca\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Damascus\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0333000\",\n    longitude: \"+0361800\"\n  },\n  \"Asia/Dhaka\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0234300\",\n    longitude: \"+0902500\"\n  },\n  \"Asia/Dili\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0083300\",\n    longitude: \"+1253500\"\n  },\n  \"Asia/Dubai\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0251800\",\n    longitude: \"+0551800\"\n  },\n  \"Asia/Dushanbe\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0383500\",\n    longitude: \"+0684800\"\n  },\n  \"Asia/Famagusta\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0350700\",\n    longitude: \"+0335700\"\n  },\n  \"Asia/Gaza\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700328T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701031T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SA\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0313000\",\n    longitude: \"+0342800\"\n  },\n  \"Asia/Harbin\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Hebron\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700328T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701031T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SA\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0313200\",\n    longitude: \"+0350542\"\n  },\n  \"Asia/Ho_Chi_Minh\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0104500\",\n    longitude: \"+1064000\"\n  },\n  \"Asia/Hong_Kong\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:HKT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0221700\",\n    longitude: \"+1140900\"\n  },\n  \"Asia/Hovd\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0480100\",\n    longitude: \"+0913900\"\n  },\n  \"Asia/Irkutsk\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0521600\",\n    longitude: \"+1042000\"\n  },\n  \"Asia/Istanbul\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Jakarta\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:WIB\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0061000\",\n    longitude: \"+1064800\"\n  },\n  \"Asia/Jayapura\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:WIT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0023200\",\n    longitude: \"+1404200\"\n  },\n  \"Asia/Jerusalem\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:IDT\\r\\nDTSTART:19700327T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:IST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0314650\",\n    longitude: \"+0351326\"\n  },\n  \"Asia/Kabul\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0430\\r\\nTZOFFSETTO:+0430\\r\\nTZNAME:+0430\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0343100\",\n    longitude: \"+0691200\"\n  },\n  \"Asia/Kamchatka\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0530100\",\n    longitude: \"+1583900\"\n  },\n  \"Asia/Karachi\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:PKT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0245200\",\n    longitude: \"+0670300\"\n  },\n  \"Asia/Kashgar\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Kathmandu\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0545\\r\\nTZOFFSETTO:+0545\\r\\nTZNAME:+0545\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0274300\",\n    longitude: \"+0851900\"\n  },\n  \"Asia/Katmandu\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0545\\r\\nTZOFFSETTO:+0545\\r\\nTZNAME:+0545\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Khandyga\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0623923\",\n    longitude: \"+1353314\"\n  },\n  \"Asia/Kolkata\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0530\\r\\nTZOFFSETTO:+0530\\r\\nTZNAME:IST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0223200\",\n    longitude: \"+0882200\"\n  },\n  \"Asia/Krasnoyarsk\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0560100\",\n    longitude: \"+0925000\"\n  },\n  \"Asia/Kuala_Lumpur\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Kuching\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0013300\",\n    longitude: \"+1102000\"\n  },\n  \"Asia/Kuwait\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Macao\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Macau\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0221150\",\n    longitude: \"+1133230\"\n  },\n  \"Asia/Magadan\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0593400\",\n    longitude: \"+1504800\"\n  },\n  \"Asia/Makassar\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:WITA\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0050700\",\n    longitude: \"+1192400\"\n  },\n  \"Asia/Manila\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:PST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0143500\",\n    longitude: \"+1210000\"\n  },\n  \"Asia/Muscat\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Nicosia\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"+0351000\",\n    longitude: \"+0332200\"\n  },\n  \"Asia/Novokuznetsk\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0534500\",\n    longitude: \"+0870700\"\n  },\n  \"Asia/Novosibirsk\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0550200\",\n    longitude: \"+0825500\"\n  },\n  \"Asia/Omsk\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0550000\",\n    longitude: \"+0732400\"\n  },\n  \"Asia/Oral\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0511300\",\n    longitude: \"+0512100\"\n  },\n  \"Asia/Phnom_Penh\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Pontianak\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:WIB\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0000200\",\n    longitude: \"+1092000\"\n  },\n  \"Asia/Pyongyang\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:KST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0390100\",\n    longitude: \"+1254500\"\n  },\n  \"Asia/Qatar\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0251700\",\n    longitude: \"+0513200\"\n  },\n  \"Asia/Qostanay\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0531200\",\n    longitude: \"+0633700\"\n  },\n  \"Asia/Qyzylorda\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0444800\",\n    longitude: \"+0652800\"\n  },\n  \"Asia/Rangoon\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0630\\r\\nTZOFFSETTO:+0630\\r\\nTZNAME:+0630\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Riyadh\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0243800\",\n    longitude: \"+0464300\"\n  },\n  \"Asia/Saigon\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Sakhalin\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0465800\",\n    longitude: \"+1424200\"\n  },\n  \"Asia/Samarkand\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0394000\",\n    longitude: \"+0664800\"\n  },\n  \"Asia/Seoul\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:KST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0373300\",\n    longitude: \"+1265800\"\n  },\n  \"Asia/Shanghai\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0311400\",\n    longitude: \"+1212800\"\n  },\n  \"Asia/Singapore\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0011700\",\n    longitude: \"+1035100\"\n  },\n  \"Asia/Srednekolymsk\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0672800\",\n    longitude: \"+1534300\"\n  },\n  \"Asia/Taipei\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0250300\",\n    longitude: \"+1213000\"\n  },\n  \"Asia/Tashkent\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0412000\",\n    longitude: \"+0691800\"\n  },\n  \"Asia/Tbilisi\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0414300\",\n    longitude: \"+0444900\"\n  },\n  \"Asia/Tehran\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0330\\r\\nTZOFFSETTO:+0330\\r\\nTZNAME:+0330\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0354000\",\n    longitude: \"+0512600\"\n  },\n  \"Asia/Tel_Aviv\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:IDT\\r\\nDTSTART:19700327T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:IST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Thimbu\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Thimphu\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0272800\",\n    longitude: \"+0893900\"\n  },\n  \"Asia/Tokyo\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:JST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0353916\",\n    longitude: \"+1394441\"\n  },\n  \"Asia/Tomsk\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0563000\",\n    longitude: \"+0845800\"\n  },\n  \"Asia/Ujung_Pandang\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:WITA\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Ulaanbaatar\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0475500\",\n    longitude: \"+1065300\"\n  },\n  \"Asia/Ulan_Bator\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Urumqi\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0434800\",\n    longitude: \"+0873500\"\n  },\n  \"Asia/Ust-Nera\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0643337\",\n    longitude: \"+1431336\"\n  },\n  \"Asia/Vientiane\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Asia/Vladivostok\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0431000\",\n    longitude: \"+1315600\"\n  },\n  \"Asia/Yakutsk\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0620000\",\n    longitude: \"+1294000\"\n  },\n  \"Asia/Yangon\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0630\\r\\nTZOFFSETTO:+0630\\r\\nTZNAME:+0630\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0164700\",\n    longitude: \"+0961000\"\n  },\n  \"Asia/Yekaterinburg\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0565100\",\n    longitude: \"+0603600\"\n  },\n  \"Asia/Yerevan\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0401100\",\n    longitude: \"+0443000\"\n  },\n  \"Atlantic/Azores\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:19700329T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:-0100\\r\\nTZNAME:-01\\r\\nDTSTART:19701025T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0374400\",\n    longitude: \"-0254000\"\n  },\n  \"Atlantic/Bermuda\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0321700\",\n    longitude: \"-0644600\"\n  },\n  \"Atlantic/Canary\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WEST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:WET\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0280600\",\n    longitude: \"-0152400\"\n  },\n  \"Atlantic/Cape_Verde\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0100\\r\\nTZOFFSETTO:-0100\\r\\nTZNAME:-01\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0145500\",\n    longitude: \"-0233100\"\n  },\n  \"Atlantic/Faeroe\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WEST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:WET\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Atlantic/Faroe\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WEST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:WET\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0620100\",\n    longitude: \"-0064600\"\n  },\n  \"Atlantic/Jan_Mayen\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Atlantic/Madeira\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WEST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:WET\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0323800\",\n    longitude: \"-0165400\"\n  },\n  \"Atlantic/Reykjavik\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Atlantic/South_Georgia\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0541600\",\n    longitude: \"-0363200\"\n  },\n  \"Atlantic/St_Helena\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Atlantic/Stanley\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0514200\",\n    longitude: \"-0575100\"\n  },\n  \"Australia/ACT\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n    ]\n  },\n  \"Australia/Adelaide\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1030\\r\\nTZOFFSETTO:+0930\\r\\nTZNAME:ACST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0930\\r\\nTZOFFSETTO:+1030\\r\\nTZNAME:ACDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"-0345500\",\n    longitude: \"+1383500\"\n  },\n  \"Australia/Brisbane\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0272800\",\n    longitude: \"+1530200\"\n  },\n  \"Australia/Broken_Hill\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1030\\r\\nTZOFFSETTO:+0930\\r\\nTZNAME:ACST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0930\\r\\nTZOFFSETTO:+1030\\r\\nTZNAME:ACDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"-0315700\",\n    longitude: \"+1412700\"\n  },\n  \"Australia/Canberra\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n    ]\n  },\n  \"Australia/Currie\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Australia/Darwin\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0930\\r\\nTZOFFSETTO:+0930\\r\\nTZNAME:ACST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0122800\",\n    longitude: \"+1305000\"\n  },\n  \"Australia/Eucla\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0845\\r\\nTZOFFSETTO:+0845\\r\\nTZNAME:+0845\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0314300\",\n    longitude: \"+1285200\"\n  },\n  \"Australia/Hobart\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0425300\",\n    longitude: \"+1471900\"\n  },\n  \"Australia/LHI\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1030\\r\\nTZNAME:+1030\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1030\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n    ]\n  },\n  \"Australia/Lindeman\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0201600\",\n    longitude: \"+1490000\"\n  },\n  \"Australia/Lord_Howe\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1030\\r\\nTZNAME:+1030\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1030\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"-0313300\",\n    longitude: \"+1590500\"\n  },\n  \"Australia/Melbourne\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"-0374900\",\n    longitude: \"+1445800\"\n  },\n  \"Australia/NSW\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n    ]\n  },\n  \"Australia/North\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0930\\r\\nTZOFFSETTO:+0930\\r\\nTZNAME:ACST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Australia/Perth\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:AWST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0315700\",\n    longitude: \"+1155100\"\n  },\n  \"Australia/Queensland\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Australia/South\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1030\\r\\nTZOFFSETTO:+0930\\r\\nTZNAME:ACST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0930\\r\\nTZOFFSETTO:+1030\\r\\nTZNAME:ACDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n    ]\n  },\n  \"Australia/Sydney\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"-0335200\",\n    longitude: \"+1511300\"\n  },\n  \"Australia/Tasmania\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Australia/Victoria\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n    ]\n  },\n  \"Australia/West\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:AWST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Australia/Yancowinna\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1030\\r\\nTZOFFSETTO:+0930\\r\\nTZNAME:ACST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0930\\r\\nTZOFFSETTO:+1030\\r\\nTZNAME:ACDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n    ]\n  },\n  \"Brazil/Acre\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Brazil/DeNoronha\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Brazil/East\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Brazil/West\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Canada/Atlantic\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Canada/Central\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Canada/Eastern\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Canada/Mountain\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Canada/Newfoundland\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0230\\r\\nTZOFFSETTO:-0330\\r\\nTZNAME:NST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0330\\r\\nTZOFFSETTO:-0230\\r\\nTZNAME:NDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\"\n    ]\n  },\n  \"Canada/Pacific\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Canada/Saskatchewan\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Canada/Yukon\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Chile/Continental\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700405T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700906T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU\\r\\nEND:DAYLIGHT\"\n    ]\n  },\n  \"Chile/EasterIsland\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:-06\\r\\nDTSTART:19700404T220000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SA\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700905T220000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SA\\r\\nEND:DAYLIGHT\"\n    ]\n  },\n  \"Europe/Amsterdam\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Andorra\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0423000\",\n    longitude: \"+0013100\"\n  },\n  \"Europe/Astrakhan\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0462100\",\n    longitude: \"+0480300\"\n  },\n  \"Europe/Athens\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0375800\",\n    longitude: \"+0234300\"\n  },\n  \"Europe/Belfast\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:BST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Belgrade\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0445000\",\n    longitude: \"+0203000\"\n  },\n  \"Europe/Berlin\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0523000\",\n    longitude: \"+0132200\"\n  },\n  \"Europe/Bratislava\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Brussels\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0505000\",\n    longitude: \"+0042000\"\n  },\n  \"Europe/Bucharest\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0442600\",\n    longitude: \"+0260600\"\n  },\n  \"Europe/Budapest\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0473000\",\n    longitude: \"+0190500\"\n  },\n  \"Europe/Busingen\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Chisinau\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0470000\",\n    longitude: \"+0285000\"\n  },\n  \"Europe/Copenhagen\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Dublin\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:IST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"+0532000\",\n    longitude: \"-0061500\"\n  },\n  \"Europe/Gibraltar\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0360800\",\n    longitude: \"-0052100\"\n  },\n  \"Europe/Guernsey\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:BST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Helsinki\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0601000\",\n    longitude: \"+0245800\"\n  },\n  \"Europe/Isle_of_Man\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:BST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Istanbul\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0410100\",\n    longitude: \"+0285800\"\n  },\n  \"Europe/Jersey\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:BST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Kaliningrad\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0544300\",\n    longitude: \"+0203000\"\n  },\n  \"Europe/Kiev\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\"\n    ]\n  },\n  \"Europe/Kirov\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:MSK\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0583600\",\n    longitude: \"+0493900\"\n  },\n  \"Europe/Kyiv\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"+0502600\",\n    longitude: \"+0303100\"\n  },\n  \"Europe/Lisbon\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:WET\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WEST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"+0384300\",\n    longitude: \"-0090800\"\n  },\n  \"Europe/Ljubljana\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/London\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:BST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0513030\",\n    longitude: \"+0000731\"\n  },\n  \"Europe/Luxembourg\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Madrid\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0402400\",\n    longitude: \"-0034100\"\n  },\n  \"Europe/Malta\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0355400\",\n    longitude: \"+0143100\"\n  },\n  \"Europe/Mariehamn\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Minsk\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0535400\",\n    longitude: \"+0273400\"\n  },\n  \"Europe/Monaco\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Moscow\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:MSK\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0554521\",\n    longitude: \"+0373704\"\n  },\n  \"Europe/Nicosia\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\"\n    ]\n  },\n  \"Europe/Oslo\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Paris\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0485200\",\n    longitude: \"+0022000\"\n  },\n  \"Europe/Podgorica\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Prague\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0500500\",\n    longitude: \"+0142600\"\n  },\n  \"Europe/Riga\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0565700\",\n    longitude: \"+0240600\"\n  },\n  \"Europe/Rome\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0415400\",\n    longitude: \"+0122900\"\n  },\n  \"Europe/Samara\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0531200\",\n    longitude: \"+0500900\"\n  },\n  \"Europe/San_Marino\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Sarajevo\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Saratov\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0513400\",\n    longitude: \"+0460200\"\n  },\n  \"Europe/Simferopol\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:MSK\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0445700\",\n    longitude: \"+0340600\"\n  },\n  \"Europe/Skopje\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Sofia\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0424100\",\n    longitude: \"+0231900\"\n  },\n  \"Europe/Stockholm\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Tallinn\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0592500\",\n    longitude: \"+0244500\"\n  },\n  \"Europe/Tirane\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0412000\",\n    longitude: \"+0195000\"\n  },\n  \"Europe/Tiraspol\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Ulyanovsk\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0542000\",\n    longitude: \"+0482400\"\n  },\n  \"Europe/Uzhgorod\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\"\n    ]\n  },\n  \"Europe/Vaduz\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Vatican\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Vienna\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0481300\",\n    longitude: \"+0162000\"\n  },\n  \"Europe/Vilnius\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0544100\",\n    longitude: \"+0251900\"\n  },\n  \"Europe/Volgograd\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:MSK\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0484400\",\n    longitude: \"+0442500\"\n  },\n  \"Europe/Warsaw\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0521500\",\n    longitude: \"+0210000\"\n  },\n  \"Europe/Zagreb\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Europe/Zaporozhye\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\"\n    ]\n  },\n  \"Europe/Zurich\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0472300\",\n    longitude: \"+0083200\"\n  },\n  \"Indian/Antananarivo\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Indian/Chagos\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0072000\",\n    longitude: \"+0722500\"\n  },\n  \"Indian/Christmas\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Indian/Cocos\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0630\\r\\nTZOFFSETTO:+0630\\r\\nTZNAME:+0630\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Indian/Comoro\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Indian/Kerguelen\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Indian/Mahe\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Indian/Maldives\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0041000\",\n    longitude: \"+0733000\"\n  },\n  \"Indian/Mauritius\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0201000\",\n    longitude: \"+0573000\"\n  },\n  \"Indian/Mayotte\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Indian/Reunion\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Mexico/BajaNorte\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Mexico/BajaSur\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Mexico/General\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Pacific/Apia\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0135000\",\n    longitude: \"-1714400\"\n  },\n  \"Pacific/Auckland\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:NZDT\\r\\nDTSTART:19700927T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:NZST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0365200\",\n    longitude: \"+1744600\"\n  },\n  \"Pacific/Bougainville\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0061300\",\n    longitude: \"+1553400\"\n  },\n  \"Pacific/Chatham\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1245\\r\\nTZOFFSETTO:+1345\\r\\nTZNAME:+1345\\r\\nDTSTART:19700927T024500\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1345\\r\\nTZOFFSETTO:+1245\\r\\nTZNAME:+1245\\r\\nDTSTART:19700405T034500\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0435700\",\n    longitude: \"-1763300\"\n  },\n  \"Pacific/Chuuk\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Pacific/Easter\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:-06\\r\\nDTSTART:19700404T220000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SA\\r\\nEND:STANDARD\",\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700905T220000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SA\\r\\nEND:DAYLIGHT\"\n    ],\n    latitude: \"-0270900\",\n    longitude: \"-1092600\"\n  },\n  \"Pacific/Efate\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0174000\",\n    longitude: \"+1682500\"\n  },\n  \"Pacific/Enderbury\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Pacific/Fakaofo\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0092200\",\n    longitude: \"-1711400\"\n  },\n  \"Pacific/Fiji\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0180800\",\n    longitude: \"+1782500\"\n  },\n  \"Pacific/Funafuti\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Pacific/Galapagos\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:-06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0005400\",\n    longitude: \"-0893600\"\n  },\n  \"Pacific/Gambier\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:-09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0230800\",\n    longitude: \"-1345700\"\n  },\n  \"Pacific/Guadalcanal\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0093200\",\n    longitude: \"+1601200\"\n  },\n  \"Pacific/Guam\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:ChST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0132800\",\n    longitude: \"+1444500\"\n  },\n  \"Pacific/Honolulu\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:HST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0211825\",\n    longitude: \"-1575130\"\n  },\n  \"Pacific/Johnston\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:HST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Pacific/Kanton\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0024700\",\n    longitude: \"-1714300\"\n  },\n  \"Pacific/Kiritimati\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1400\\r\\nTZOFFSETTO:+1400\\r\\nTZNAME:+14\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0015200\",\n    longitude: \"-1572000\"\n  },\n  \"Pacific/Kosrae\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0051900\",\n    longitude: \"+1625900\"\n  },\n  \"Pacific/Kwajalein\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0090500\",\n    longitude: \"+1672000\"\n  },\n  \"Pacific/Majuro\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Pacific/Marquesas\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0930\\r\\nTZOFFSETTO:-0930\\r\\nTZNAME:-0930\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0090000\",\n    longitude: \"-1393000\"\n  },\n  \"Pacific/Midway\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1100\\r\\nTZOFFSETTO:-1100\\r\\nTZNAME:SST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Pacific/Nauru\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0003100\",\n    longitude: \"+1665500\"\n  },\n  \"Pacific/Niue\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1100\\r\\nTZOFFSETTO:-1100\\r\\nTZNAME:-11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0190100\",\n    longitude: \"-1695500\"\n  },\n  \"Pacific/Norfolk\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0290300\",\n    longitude: \"+1675800\"\n  },\n  \"Pacific/Noumea\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0221600\",\n    longitude: \"+1662700\"\n  },\n  \"Pacific/Pago_Pago\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1100\\r\\nTZOFFSETTO:-1100\\r\\nTZNAME:SST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0141600\",\n    longitude: \"-1704200\"\n  },\n  \"Pacific/Palau\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0072000\",\n    longitude: \"+1342900\"\n  },\n  \"Pacific/Pitcairn\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:-08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0250400\",\n    longitude: \"-1300500\"\n  },\n  \"Pacific/Pohnpei\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Pacific/Ponape\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Pacific/Port_Moresby\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0093000\",\n    longitude: \"+1471000\"\n  },\n  \"Pacific/Rarotonga\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:-10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0211400\",\n    longitude: \"-1594600\"\n  },\n  \"Pacific/Saipan\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:ChST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Pacific/Samoa\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1100\\r\\nTZOFFSETTO:-1100\\r\\nTZNAME:SST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Pacific/Tahiti\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:-10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0173200\",\n    longitude: \"-1493400\"\n  },\n  \"Pacific/Tarawa\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"+0012500\",\n    longitude: \"+1730000\"\n  },\n  \"Pacific/Tongatapu\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ],\n    latitude: \"-0210800\",\n    longitude: \"-1751200\"\n  },\n  \"Pacific/Truk\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Pacific/Wake\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Pacific/Wallis\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"Pacific/Yap\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"US/Alaska\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"US/Aleutian\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:HDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:HST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"US/Arizona\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"US/Central\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"US/East-Indiana\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"US/Eastern\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"US/Hawaii\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:HST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"US/Indiana-Starke\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"US/Michigan\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"US/Mountain\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"US/Pacific\": {\n    ics: [\n      \"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\"\n    ]\n  },\n  \"US/Samoa\": {\n    ics: [\n      \"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1100\\r\\nTZOFFSETTO:-1100\\r\\nTZNAME:SST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"\n    ]\n  }\n};\nconst tzData = {\n  version,\n  aliases,\n  zones\n};\nclass TimezoneManager {\n  /**\n   * Map of aliases\n   * Alias name => timezoneId\n   */\n  _aliases = /* @__PURE__ */ new Map();\n  /**\n   * Map of Timezones\n   * timezoneId => Timezone\n   */\n  _timezones = /* @__PURE__ */ new Map();\n  /**\n   * List of aliases that were registered while their targets were missing\n   * [[aliasName, timezoneId], ...]\n   */\n  _pendingAliases = [];\n  /**\n   * Gets a timezone for the given id.\n   *\n   * @param timezoneId - The id of the timezone\n   */\n  getTimezoneForId(timezoneId) {\n    let level = 0;\n    while (level++ < 20) {\n      if (this._timezones.has(timezoneId)) {\n        return this._timezones.get(timezoneId);\n      }\n      if (this._aliases.has(timezoneId)) {\n        timezoneId = this._aliases.get(timezoneId);\n      } else {\n        return null;\n      }\n    }\n    console.error(\"TimezoneManager.getTimezoneForIdRec() exceeds recursion limits\");\n    return null;\n  }\n  /**\n   * Checks if there is a timezone for the given id stored in this manager.\n   *\n   * @param timezoneId - The id of the timezone\n   */\n  hasTimezoneForId(timezoneId) {\n    return this._timezones.has(timezoneId) || this._aliases.has(timezoneId);\n  }\n  /**\n   * Checks if the given timezone id is an alias.\n   *\n   * @param timezoneId - The id of the timezone\n   */\n  isAlias(timezoneId) {\n    return !this._timezones.has(timezoneId) && this._aliases.has(timezoneId);\n  }\n  /**\n   * Lists all timezones.\n   *\n   * @param includeAliases - Whether or not to include aliases\n   */\n  listAllTimezones(includeAliases = false) {\n    const timezones = Array.from(this._timezones.keys());\n    if (includeAliases) {\n      return timezones.concat(Array.from(this._aliases.keys()));\n    }\n    return timezones;\n  }\n  /**\n   * Registers a timezone\n   *\n   * @param timezone - The timezone-object to register\n   */\n  registerTimezone(timezone) {\n    this._timezones.set(timezone.timezoneId, timezone);\n    ICAL.TimezoneService.register(timezone.toICALTimezone(), timezone.timezoneId);\n    this._pendingAliases = this._pendingAliases.filter(([aliasName, timezoneId]) => {\n      if (timezoneId !== timezone.timezoneId) {\n        return true;\n      }\n      ICAL.TimezoneService.register(timezone.toICALTimezone(), aliasName);\n      return false;\n    });\n  }\n  registerDefaultTimezones() {\n    console.debug(`@nextcloud/calendar-js app is using version ${tzData.version} of the timezone database`);\n    for (const tzid in tzData.zones) {\n      const ics = [\n        \"BEGIN:VTIMEZONE\",\n        \"TZID:\" + tzid,\n        ...tzData.zones[tzid].ics,\n        \"END:VTIMEZONE\"\n      ].join(\"\\r\\n\");\n      this.registerTimezoneFromICS(tzid, ics);\n    }\n    for (const tzid in tzData.aliases) {\n      this.registerAlias(tzid, tzData.aliases[tzid].aliasTo);\n    }\n  }\n  /**\n   * Registers a timezone based on ics data.\n   *\n   * @param timezoneId - The id of the timezone\n   * @param ics - The iCalendar timezone definition\n   */\n  registerTimezoneFromICS(timezoneId, ics) {\n    const timezone = new Timezone(timezoneId, ics);\n    this.registerTimezone(timezone);\n  }\n  /**\n   * Registers a new timezone-alias\n   *\n   * @param aliasName - The timezone-id of the alias\n   * @param timezoneId - The timezone-id to resolve the alias to\n   */\n  registerAlias(aliasName, timezoneId) {\n    this._aliases.set(aliasName, timezoneId);\n    const resolvedTimezone = this.getTimezoneForId(timezoneId);\n    if (!resolvedTimezone) {\n      this._pendingAliases.push([aliasName, timezoneId]);\n      return;\n    }\n    ICAL.TimezoneService.register(resolvedTimezone.toICALTimezone(), aliasName);\n  }\n  /**\n   * Unregisters a timezone.\n   *\n   * @param timezoneId - Unregisters a timezone by Id\n   */\n  unregisterTimezones(timezoneId) {\n    this._timezones.delete(timezoneId);\n    ICAL.TimezoneService.remove(timezoneId);\n  }\n  /**\n   * Unregisters a timezone-alias.\n   *\n   * @param aliasName - The alias to unregister\n   */\n  unregisterAlias(aliasName) {\n    this._aliases.delete(aliasName);\n    this._pendingAliases = this._pendingAliases.filter(([pendingAliasName]) => pendingAliasName !== aliasName);\n    ICAL.TimezoneService.remove(aliasName);\n  }\n  /**\n   * Clear all timezones\n   */\n  clearAllTimezones() {\n    this._aliases = /* @__PURE__ */ new Map();\n    this._pendingAliases = [];\n    this._timezones = /* @__PURE__ */ new Map();\n    ICAL.TimezoneService.reset();\n    timezoneManager.registerTimezone(Timezone.utc);\n    timezoneManager.registerTimezone(Timezone.floating);\n    timezoneManager.registerAlias(\"GMT\", Timezone.utc.timezoneId);\n    timezoneManager.registerAlias(\"Z\", Timezone.utc.timezoneId);\n  }\n}\nconst timezoneManager = new TimezoneManager();\ntimezoneManager.clearAllTimezones();\nfunction getTimezoneManager() {\n  return timezoneManager;\n}\nexport {\n  Timezone,\n  getReadableTimezoneName,\n  getSortedTimezoneList,\n  getTimezoneManager,\n  isOlsonTimezone\n};\n","import { r as register, B as t24, a as t, C as t42 } from \"./_l10n-CW0YfIWk.mjs\";\nimport { getTimezoneManager as getTimezoneManager$1 } from \"@nextcloud/timezones\";\nimport { G as GenRandomId } from \"./GenRandomId-CMooMQt0.mjs\";\nimport { N as NcSelect } from \"./NcSelect-BUOuXJUQ.mjs\";\nimport { u as useModelMigration } from \"./useModelMigration-EhAWvqDD.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t24);\nfunction getSortedTimezoneList(timezoneList = [], additionalTimezones = []) {\n  const sortedByContinent = {};\n  const sortedList = [];\n  for (const timezoneId of timezoneList) {\n    const components = timezoneId.split(\"/\");\n    let [continent, name] = [components.shift(), components.join(\"/\")];\n    if (!name) {\n      name = continent;\n      continent = t(\"Global\");\n    }\n    sortedByContinent[continent] = sortedByContinent[continent] || {\n      continent,\n      regions: []\n    };\n    sortedByContinent[continent].regions.push({\n      label: getReadableTimezoneName(name),\n      cities: [],\n      timezoneId\n    });\n  }\n  for (const additionalTimezone of additionalTimezones) {\n    const { continent, label, timezoneId } = additionalTimezone;\n    sortedByContinent[continent] = sortedByContinent[continent] || {\n      continent,\n      regions: []\n    };\n    sortedByContinent[continent].regions.push({\n      label,\n      cities: [],\n      timezoneId\n    });\n  }\n  for (const continent in sortedByContinent) {\n    if (!Object.prototype.hasOwnProperty.call(sortedByContinent, continent)) {\n      continue;\n    }\n    sortedByContinent[continent].regions.sort((a, b) => {\n      if (a.label < b.label) {\n        return -1;\n      }\n      return 1;\n    });\n    sortedList.push(sortedByContinent[continent]);\n  }\n  sortedList.sort((a, b) => {\n    if (a.continent < b.continent) {\n      return -1;\n    }\n    return 1;\n  });\n  return sortedList;\n}\nfunction getReadableTimezoneName(timezoneId) {\n  return timezoneId.split(\"_\").join(\" \").replace(\"St \", \"St. \").split(\"/\").join(\" - \");\n}\nconst timezoneManager = getTimezoneManager$1();\nlet initialized = false;\nfunction getTimezoneManager() {\n  if (!initialized) {\n    timezoneManager.registerDefaultTimezones();\n    initialized = true;\n  }\n  return timezoneManager;\n}\nregister(t42);\nconst _sfc_main = {\n  name: \"NcTimezonePicker\",\n  components: {\n    NcSelect\n  },\n  model: {\n    prop: \"modelValue\",\n    event: \"update:modelValue\"\n  },\n  props: {\n    /**\n     * An array of additional timezones to include with the standard database. Useful if there is a custom timezone, e.g. read from user data\n     */\n    additionalTimezones: {\n      type: Array,\n      default: () => []\n    },\n    /**\n     * Removed in v9 - use `modelValue` (`v-model`) instead\n     * @deprecated\n     */\n    value: {\n      type: String,\n      default: void 0\n    },\n    /**\n     * The selected timezone. Use v-model for two-way binding. The default timezone is floating, which means a time independent of timezone. See https://icalendar.org/CalDAV-Access-RFC-4791/7-3-date-and-floating-time.html for details.\n     */\n    modelValue: {\n      type: String,\n      default: \"floating\"\n    },\n    /**\n     * ID of the inner vue-select element, can be used for labels like: `vs-${uid}__combobox`\n     */\n    uid: {\n      type: [String, Number],\n      default: () => `tz-${GenRandomId(5)}`\n    }\n  },\n  emits: [\n    /**\n     * Removed in v9 - use `update:modelValue` (`v-model`) instead\n     * @deprecated\n     */\n    \"input\",\n    /**\n     * Two-way binding of the value prop. Use v-model=\"selectedTimezone\" for two-way binding\n     */\n    \"update:modelValue\",\n    /** Same as update:modelValue for Vue 2 compatibility */\n    \"update:model-value\"\n  ],\n  setup() {\n    const model = useModelMigration(\"value\", \"input\");\n    return {\n      model\n    };\n  },\n  computed: {\n    placeholder() {\n      return t(\"Type to search time zone\");\n    },\n    selectedTimezone() {\n      for (const additionalTimezone of this.additionalTimezones) {\n        if (additionalTimezone.timezoneId === this.model) {\n          return additionalTimezone;\n        }\n      }\n      return {\n        label: getReadableTimezoneName(this.model),\n        timezoneId: this.model\n      };\n    },\n    options() {\n      const timezoneManager2 = getTimezoneManager();\n      const timezoneList = getSortedTimezoneList(timezoneManager2.listAllTimezones(), this.additionalTimezones);\n      let timezonesGrouped = [];\n      Object.values(timezoneList).forEach((group) => {\n        timezonesGrouped = timezonesGrouped.concat(group.regions);\n      });\n      return timezonesGrouped;\n    }\n  },\n  methods: {\n    t,\n    change(newValue) {\n      if (!newValue) {\n        return;\n      }\n      this.model = newValue.timezoneId;\n    },\n    /**\n     * Returns whether this is a continent label,\n     * or an actual timezone. Continent labels are not selectable.\n     *\n     * @param {string} option The option\n     * @return {boolean}\n     */\n    isSelectable(option) {\n      return !option.timezoneId.startsWith(\"tz-group__\");\n    },\n    /**\n     * Function to filter the timezone list.\n     * We search in the timezoneId, so both continent and region names can be matched.\n     *\n     * @param {object} option The timezone option\n     * @param {string} label The label of the timezone\n     * @param {string} search The search string\n     * @return {boolean}\n     */\n    filterBy(option, label, search) {\n      const terms = search.trim().split(\" \");\n      if (option.timezoneId.startsWith(\"tz-group__\")) {\n        return option.regions.some((region) => {\n          return this.matchTimezoneId(region.timezoneId, terms);\n        });\n      }\n      return this.matchTimezoneId(option.timezoneId, terms);\n    },\n    matchTimezoneId(timezoneId, terms) {\n      return terms.every((term) => timezoneId.toLowerCase().includes(term.toLowerCase()));\n    }\n  }\n};\nvar _sfc_render = function render() {\n  var _vm = this, _c = _vm._self._c;\n  return _c(\"NcSelect\", { attrs: { \"aria-label-combobox\": _vm.t(\"Search for time zone\"), \"clearable\": false, \"filter-by\": _vm.filterBy, \"multiple\": false, \"options\": _vm.options, \"placeholder\": _vm.placeholder, \"selectable\": _vm.isSelectable, \"uid\": _vm.uid, \"value\": _vm.selectedTimezone, \"label\": \"label\" }, on: { \"option:selected\": _vm.change } });\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n  _sfc_main,\n  _sfc_render,\n  _sfc_staticRenderFns,\n  false,\n  null,\n  null\n);\nconst NcTimezonePicker = __component__.exports;\nexport {\n  NcTimezonePicker as N\n};\n//# sourceMappingURL=NcTimezonePicker-bIwFQlmV.mjs.map\n","export function isDate(value) {\n  return value instanceof Date || Object.prototype.toString.call(value) === '[object Date]';\n}\nexport function toDate(value) {\n  if (isDate(value)) {\n    return new Date(value.getTime());\n  }\n\n  if (value == null) {\n    return new Date(NaN);\n  }\n\n  return new Date(value);\n}\nexport function isValidDate(value) {\n  return isDate(value) && !isNaN(value.getTime());\n}\nexport function startOfWeek(value) {\n  var firstDayOfWeek = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n  if (!(firstDayOfWeek >= 0 && firstDayOfWeek <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6');\n  }\n\n  var date = toDate(value);\n  var day = date.getDay();\n  var diff = (day + 7 - firstDayOfWeek) % 7;\n  date.setDate(date.getDate() - diff);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}\nexport function startOfWeekYear(value) {\n  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n      _ref$firstDayOfWeek = _ref.firstDayOfWeek,\n      firstDayOfWeek = _ref$firstDayOfWeek === void 0 ? 0 : _ref$firstDayOfWeek,\n      _ref$firstWeekContain = _ref.firstWeekContainsDate,\n      firstWeekContainsDate = _ref$firstWeekContain === void 0 ? 1 : _ref$firstWeekContain;\n\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7');\n  }\n\n  var date = toDate(value);\n  var year = date.getFullYear();\n  var firstDateOfFirstWeek = new Date(0);\n\n  for (var i = year + 1; i >= year - 1; i--) {\n    firstDateOfFirstWeek.setFullYear(i, 0, firstWeekContainsDate);\n    firstDateOfFirstWeek.setHours(0, 0, 0, 0);\n    firstDateOfFirstWeek = startOfWeek(firstDateOfFirstWeek, firstDayOfWeek);\n\n    if (date.getTime() >= firstDateOfFirstWeek.getTime()) {\n      break;\n    }\n  }\n\n  return firstDateOfFirstWeek;\n}\nexport function getWeek(value) {\n  var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n      _ref2$firstDayOfWeek = _ref2.firstDayOfWeek,\n      firstDayOfWeek = _ref2$firstDayOfWeek === void 0 ? 0 : _ref2$firstDayOfWeek,\n      _ref2$firstWeekContai = _ref2.firstWeekContainsDate,\n      firstWeekContainsDate = _ref2$firstWeekContai === void 0 ? 1 : _ref2$firstWeekContai;\n\n  var date = toDate(value);\n  var firstDateOfThisWeek = startOfWeek(date, firstDayOfWeek);\n  var firstDateOfFirstWeek = startOfWeekYear(date, {\n    firstDayOfWeek: firstDayOfWeek,\n    firstWeekContainsDate: firstWeekContainsDate\n  });\n  var diff = firstDateOfThisWeek.getTime() - firstDateOfFirstWeek.getTime();\n  return Math.round(diff / (7 * 24 * 3600 * 1000)) + 1;\n}","var locale = {\n  months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n  monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  weekdaysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n  firstDayOfWeek: 0,\n  firstWeekContainsDate: 1\n};\nexport default locale;","import { toDate, isValidDate, getWeek } from './util';\nimport defaultLocale from './locale/en';\nvar REGEX_FORMAT = /\\[([^\\]]+)]|YYYY|YY?|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|m{1,2}|s{1,2}|Z{1,2}|S{1,3}|w{1,2}|x|X|a|A/g;\n\nfunction pad(val) {\n  var len = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n  var output = \"\".concat(Math.abs(val));\n  var sign = val < 0 ? '-' : '';\n\n  while (output.length < len) {\n    output = \"0\".concat(output);\n  }\n\n  return sign + output;\n}\n\nfunction getOffset(date) {\n  return Math.round(date.getTimezoneOffset() / 15) * 15;\n}\n\nfunction formatTimezone(offset) {\n  var delimeter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  var sign = offset > 0 ? '-' : '+';\n  var absOffset = Math.abs(offset);\n  var hours = Math.floor(absOffset / 60);\n  var minutes = absOffset % 60;\n  return sign + pad(hours, 2) + delimeter + pad(minutes, 2);\n}\n\nvar meridiem = function meridiem(h, _, isLowercase) {\n  var word = h < 12 ? 'AM' : 'PM';\n  return isLowercase ? word.toLocaleLowerCase() : word;\n};\n\nvar formatFlags = {\n  Y: function Y(date) {\n    var y = date.getFullYear();\n    return y <= 9999 ? \"\".concat(y) : \"+\".concat(y);\n  },\n  // Year: 00, 01, ..., 99\n  YY: function YY(date) {\n    return pad(date.getFullYear(), 4).substr(2);\n  },\n  // Year: 1900, 1901, ..., 2099\n  YYYY: function YYYY(date) {\n    return pad(date.getFullYear(), 4);\n  },\n  // Month: 1, 2, ..., 12\n  M: function M(date) {\n    return date.getMonth() + 1;\n  },\n  // Month: 01, 02, ..., 12\n  MM: function MM(date) {\n    return pad(date.getMonth() + 1, 2);\n  },\n  MMM: function MMM(date, locale) {\n    return locale.monthsShort[date.getMonth()];\n  },\n  MMMM: function MMMM(date, locale) {\n    return locale.months[date.getMonth()];\n  },\n  // Day of month: 1, 2, ..., 31\n  D: function D(date) {\n    return date.getDate();\n  },\n  // Day of month: 01, 02, ..., 31\n  DD: function DD(date) {\n    return pad(date.getDate(), 2);\n  },\n  // Hour: 0, 1, ... 23\n  H: function H(date) {\n    return date.getHours();\n  },\n  // Hour: 00, 01, ..., 23\n  HH: function HH(date) {\n    return pad(date.getHours(), 2);\n  },\n  // Hour: 1, 2, ..., 12\n  h: function h(date) {\n    var hours = date.getHours();\n\n    if (hours === 0) {\n      return 12;\n    }\n\n    if (hours > 12) {\n      return hours % 12;\n    }\n\n    return hours;\n  },\n  // Hour: 01, 02, ..., 12\n  hh: function hh() {\n    var hours = formatFlags.h.apply(formatFlags, arguments);\n    return pad(hours, 2);\n  },\n  // Minute: 0, 1, ..., 59\n  m: function m(date) {\n    return date.getMinutes();\n  },\n  // Minute: 00, 01, ..., 59\n  mm: function mm(date) {\n    return pad(date.getMinutes(), 2);\n  },\n  // Second: 0, 1, ..., 59\n  s: function s(date) {\n    return date.getSeconds();\n  },\n  // Second: 00, 01, ..., 59\n  ss: function ss(date) {\n    return pad(date.getSeconds(), 2);\n  },\n  // 1/10 of second: 0, 1, ..., 9\n  S: function S(date) {\n    return Math.floor(date.getMilliseconds() / 100);\n  },\n  // 1/100 of second: 00, 01, ..., 99\n  SS: function SS(date) {\n    return pad(Math.floor(date.getMilliseconds() / 10), 2);\n  },\n  // Millisecond: 000, 001, ..., 999\n  SSS: function SSS(date) {\n    return pad(date.getMilliseconds(), 3);\n  },\n  // Day of week: 0, 1, ..., 6\n  d: function d(date) {\n    return date.getDay();\n  },\n  // Day of week: 'Su', 'Mo', ..., 'Sa'\n  dd: function dd(date, locale) {\n    return locale.weekdaysMin[date.getDay()];\n  },\n  // Day of week: 'Sun', 'Mon',..., 'Sat'\n  ddd: function ddd(date, locale) {\n    return locale.weekdaysShort[date.getDay()];\n  },\n  // Day of week: 'Sunday', 'Monday', ...,'Saturday'\n  dddd: function dddd(date, locale) {\n    return locale.weekdays[date.getDay()];\n  },\n  // AM, PM\n  A: function A(date, locale) {\n    var meridiemFunc = locale.meridiem || meridiem;\n    return meridiemFunc(date.getHours(), date.getMinutes(), false);\n  },\n  // am, pm\n  a: function a(date, locale) {\n    var meridiemFunc = locale.meridiem || meridiem;\n    return meridiemFunc(date.getHours(), date.getMinutes(), true);\n  },\n  // Timezone: -01:00, +00:00, ... +12:00\n  Z: function Z(date) {\n    return formatTimezone(getOffset(date), ':');\n  },\n  // Timezone: -0100, +0000, ... +1200\n  ZZ: function ZZ(date) {\n    return formatTimezone(getOffset(date));\n  },\n  // Seconds timestamp: 512969520\n  X: function X(date) {\n    return Math.floor(date.getTime() / 1000);\n  },\n  // Milliseconds timestamp: 512969520900\n  x: function x(date) {\n    return date.getTime();\n  },\n  w: function w(date, locale) {\n    return getWeek(date, {\n      firstDayOfWeek: locale.firstDayOfWeek,\n      firstWeekContainsDate: locale.firstWeekContainsDate\n    });\n  },\n  ww: function ww(date, locale) {\n    return pad(formatFlags.w(date, locale), 2);\n  }\n};\nexport function format(val, str) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var formatStr = str ? String(str) : 'YYYY-MM-DDTHH:mm:ss.SSSZ';\n  var date = toDate(val);\n\n  if (!isValidDate(date)) {\n    return 'Invalid Date';\n  }\n\n  var locale = options.locale || defaultLocale;\n  return formatStr.replace(REGEX_FORMAT, function (match, p1) {\n    if (p1) {\n      return p1;\n    }\n\n    if (typeof formatFlags[match] === 'function') {\n      return \"\".concat(formatFlags[match](date, locale));\n    }\n\n    return match;\n  });\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport defaultLocale from './locale/en';\nimport { startOfWeekYear } from './util';\nvar formattingTokens = /(\\[[^\\[]*\\])|(MM?M?M?|Do|DD?|ddd?d?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|S{1,3}|x|X|ZZ?|.)/g;\nvar match1 = /\\d/; // 0 - 9\n\nvar match2 = /\\d\\d/; // 00 - 99\n\nvar match3 = /\\d{3}/; // 000 - 999\n\nvar match4 = /\\d{4}/; // 0000 - 9999\n\nvar match1to2 = /\\d\\d?/; // 0 - 99\n\nvar matchShortOffset = /[+-]\\d\\d:?\\d\\d/; // +00:00 -00:00 +0000 or -0000\n\nvar matchSigned = /[+-]?\\d+/; // -inf - inf\n\nvar matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n// const matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i; // Word\n\nvar YEAR = 'year';\nvar MONTH = 'month';\nvar DAY = 'day';\nvar HOUR = 'hour';\nvar MINUTE = 'minute';\nvar SECOND = 'second';\nvar MILLISECOND = 'millisecond';\nvar parseFlags = {};\n\nvar addParseFlag = function addParseFlag(token, regex, callback) {\n  var tokens = Array.isArray(token) ? token : [token];\n  var func;\n\n  if (typeof callback === 'string') {\n    func = function func(input) {\n      var value = parseInt(input, 10);\n      return _defineProperty({}, callback, value);\n    };\n  } else {\n    func = callback;\n  }\n\n  tokens.forEach(function (key) {\n    parseFlags[key] = [regex, func];\n  });\n};\n\nvar escapeStringRegExp = function escapeStringRegExp(str) {\n  return str.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n};\n\nvar matchWordRegExp = function matchWordRegExp(localeKey) {\n  return function (locale) {\n    var array = locale[localeKey];\n\n    if (!Array.isArray(array)) {\n      throw new Error(\"Locale[\".concat(localeKey, \"] need an array\"));\n    }\n\n    return new RegExp(array.map(escapeStringRegExp).join('|'));\n  };\n};\n\nvar matchWordCallback = function matchWordCallback(localeKey, key) {\n  return function (input, locale) {\n    var array = locale[localeKey];\n\n    if (!Array.isArray(array)) {\n      throw new Error(\"Locale[\".concat(localeKey, \"] need an array\"));\n    }\n\n    var index = array.indexOf(input);\n\n    if (index < 0) {\n      throw new Error('Invalid Word');\n    }\n\n    return _defineProperty({}, key, index);\n  };\n};\n\naddParseFlag('Y', matchSigned, YEAR);\naddParseFlag('YY', match2, function (input) {\n  var year = new Date().getFullYear();\n  var cent = Math.floor(year / 100);\n  var value = parseInt(input, 10);\n  value = (value > 68 ? cent - 1 : cent) * 100 + value;\n  return _defineProperty({}, YEAR, value);\n});\naddParseFlag('YYYY', match4, YEAR);\naddParseFlag('M', match1to2, function (input) {\n  return _defineProperty({}, MONTH, parseInt(input, 10) - 1);\n});\naddParseFlag('MM', match2, function (input) {\n  return _defineProperty({}, MONTH, parseInt(input, 10) - 1);\n});\naddParseFlag('MMM', matchWordRegExp('monthsShort'), matchWordCallback('monthsShort', MONTH));\naddParseFlag('MMMM', matchWordRegExp('months'), matchWordCallback('months', MONTH));\naddParseFlag('D', match1to2, DAY);\naddParseFlag('DD', match2, DAY);\naddParseFlag(['H', 'h'], match1to2, HOUR);\naddParseFlag(['HH', 'hh'], match2, HOUR);\naddParseFlag('m', match1to2, MINUTE);\naddParseFlag('mm', match2, MINUTE);\naddParseFlag('s', match1to2, SECOND);\naddParseFlag('ss', match2, SECOND);\naddParseFlag('S', match1, function (input) {\n  return _defineProperty({}, MILLISECOND, parseInt(input, 10) * 100);\n});\naddParseFlag('SS', match2, function (input) {\n  return _defineProperty({}, MILLISECOND, parseInt(input, 10) * 10);\n});\naddParseFlag('SSS', match3, MILLISECOND);\n\nfunction matchMeridiem(locale) {\n  return locale.meridiemParse || /[ap]\\.?m?\\.?/i;\n}\n\nfunction defaultIsPM(input) {\n  return \"\".concat(input).toLowerCase().charAt(0) === 'p';\n}\n\naddParseFlag(['A', 'a'], matchMeridiem, function (input, locale) {\n  var isPM = typeof locale.isPM === 'function' ? locale.isPM(input) : defaultIsPM(input);\n  return {\n    isPM: isPM\n  };\n});\n\nfunction offsetFromString(str) {\n  var _ref8 = str.match(/([+-]|\\d\\d)/g) || ['-', '0', '0'],\n      _ref9 = _slicedToArray(_ref8, 3),\n      symbol = _ref9[0],\n      hour = _ref9[1],\n      minute = _ref9[2];\n\n  var minutes = parseInt(hour, 10) * 60 + parseInt(minute, 10);\n\n  if (minutes === 0) {\n    return 0;\n  }\n\n  return symbol === '+' ? -minutes : +minutes;\n}\n\naddParseFlag(['Z', 'ZZ'], matchShortOffset, function (input) {\n  return {\n    offset: offsetFromString(input)\n  };\n});\naddParseFlag('x', matchSigned, function (input) {\n  return {\n    date: new Date(parseInt(input, 10))\n  };\n});\naddParseFlag('X', matchTimestamp, function (input) {\n  return {\n    date: new Date(parseFloat(input) * 1000)\n  };\n});\naddParseFlag('d', match1, 'weekday');\naddParseFlag('dd', matchWordRegExp('weekdaysMin'), matchWordCallback('weekdaysMin', 'weekday'));\naddParseFlag('ddd', matchWordRegExp('weekdaysShort'), matchWordCallback('weekdaysShort', 'weekday'));\naddParseFlag('dddd', matchWordRegExp('weekdays'), matchWordCallback('weekdays', 'weekday'));\naddParseFlag('w', match1to2, 'week');\naddParseFlag('ww', match2, 'week');\n\nfunction to24hour(hour, isPM) {\n  if (hour !== undefined && isPM !== undefined) {\n    if (isPM) {\n      if (hour < 12) {\n        return hour + 12;\n      }\n    } else if (hour === 12) {\n      return 0;\n    }\n  }\n\n  return hour;\n}\n\nfunction getFullInputArray(input) {\n  var backupDate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n  var result = [0, 0, 1, 0, 0, 0, 0];\n  var backupArr = [backupDate.getFullYear(), backupDate.getMonth(), backupDate.getDate(), backupDate.getHours(), backupDate.getMinutes(), backupDate.getSeconds(), backupDate.getMilliseconds()];\n  var useBackup = true;\n\n  for (var i = 0; i < 7; i++) {\n    if (input[i] === undefined) {\n      result[i] = useBackup ? backupArr[i] : result[i];\n    } else {\n      result[i] = input[i];\n      useBackup = false;\n    }\n  }\n\n  return result;\n}\n\nfunction createDate(y, m, d, h, M, s, ms) {\n  var date;\n\n  if (y < 100 && y >= 0) {\n    date = new Date(y + 400, m, d, h, M, s, ms);\n\n    if (isFinite(date.getFullYear())) {\n      date.setFullYear(y);\n    }\n  } else {\n    date = new Date(y, m, d, h, M, s, ms);\n  }\n\n  return date;\n}\n\nfunction createUTCDate() {\n  var date;\n\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  var y = args[0];\n\n  if (y < 100 && y >= 0) {\n    args[0] += 400;\n    date = new Date(Date.UTC.apply(Date, args)); // eslint-disable-next-line no-restricted-globals\n\n    if (isFinite(date.getUTCFullYear())) {\n      date.setUTCFullYear(y);\n    }\n  } else {\n    date = new Date(Date.UTC.apply(Date, args));\n  }\n\n  return date;\n}\n\nfunction makeParser(dateString, format, locale) {\n  var tokens = format.match(formattingTokens);\n\n  if (!tokens) {\n    throw new Error();\n  }\n\n  var length = tokens.length;\n  var mark = {};\n\n  for (var i = 0; i < length; i += 1) {\n    var token = tokens[i];\n    var parseTo = parseFlags[token];\n\n    if (!parseTo) {\n      var word = token.replace(/^\\[|\\]$/g, '');\n\n      if (dateString.indexOf(word) === 0) {\n        dateString = dateString.substr(word.length);\n      } else {\n        throw new Error('not match');\n      }\n    } else {\n      var regex = typeof parseTo[0] === 'function' ? parseTo[0](locale) : parseTo[0];\n      var parser = parseTo[1];\n      var value = (regex.exec(dateString) || [])[0];\n      var obj = parser(value, locale);\n      mark = _objectSpread({}, mark, {}, obj);\n      dateString = dateString.replace(value, '');\n    }\n  }\n\n  return mark;\n}\n\nexport function parse(str, format) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  try {\n    var _options$locale = options.locale,\n        _locale = _options$locale === void 0 ? defaultLocale : _options$locale,\n        _options$backupDate = options.backupDate,\n        backupDate = _options$backupDate === void 0 ? new Date() : _options$backupDate;\n\n    var parseResult = makeParser(str, format, _locale);\n    var year = parseResult.year,\n        month = parseResult.month,\n        day = parseResult.day,\n        hour = parseResult.hour,\n        minute = parseResult.minute,\n        second = parseResult.second,\n        millisecond = parseResult.millisecond,\n        isPM = parseResult.isPM,\n        date = parseResult.date,\n        offset = parseResult.offset,\n        weekday = parseResult.weekday,\n        week = parseResult.week;\n\n    if (date) {\n      return date;\n    }\n\n    var inputArray = [year, month, day, hour, minute, second, millisecond];\n    inputArray[3] = to24hour(inputArray[3], isPM); // check week\n\n    if (week !== undefined && month === undefined && day === undefined) {\n      // new Date(year, 3) make sure in current year\n      var firstDate = startOfWeekYear(year === undefined ? backupDate : new Date(year, 3), {\n        firstDayOfWeek: _locale.firstDayOfWeek,\n        firstWeekContainsDate: _locale.firstWeekContainsDate\n      });\n      return new Date(firstDate.getTime() + (week - 1) * 7 * 24 * 3600 * 1000);\n    }\n\n    var parsedDate;\n    var result = getFullInputArray(inputArray, backupDate);\n\n    if (offset !== undefined) {\n      result[6] += offset * 60 * 1000;\n      parsedDate = createUTCDate.apply(void 0, _toConsumableArray(result));\n    } else {\n      parsedDate = createDate.apply(void 0, _toConsumableArray(result));\n    } // check weekday\n\n\n    if (weekday !== undefined && parsedDate.getDay() !== weekday) {\n      return new Date(NaN);\n    }\n\n    return parsedDate;\n  } catch (e) {\n    return new Date(NaN);\n  }\n}","import { getWeek, format, parse } from 'date-format-parse';\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n\n  var target = _objectWithoutPropertiesLoose(source, excluded);\n\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(n);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _extends$1() {\n  return _extends$1 = Object.assign || function (a) {\n    for (var b, c = 1; c < arguments.length; c++) {\n      for (var d in b = arguments[c], b) {\n        Object.prototype.hasOwnProperty.call(b, d) && (a[d] = b[d]);\n      }\n    }\n\n    return a;\n  }, _extends$1.apply(this, arguments);\n}\n\nvar normalMerge = [\"attrs\", \"props\", \"domProps\"],\n    toArrayMerge = [\"class\", \"style\", \"directives\"],\n    functionalMerge = [\"on\", \"nativeOn\"],\n    mergeJsxProps = function mergeJsxProps(a) {\n  return a.reduce(function (c, a) {\n    for (var b in a) {\n      if (!c[b]) c[b] = a[b];else if (-1 !== normalMerge.indexOf(b)) c[b] = _extends$1({}, c[b], a[b]);else if (-1 !== toArrayMerge.indexOf(b)) {\n        var d = c[b] instanceof Array ? c[b] : [c[b]],\n            e = a[b] instanceof Array ? a[b] : [a[b]];\n        c[b] = d.concat(e);\n      } else if (-1 !== functionalMerge.indexOf(b)) {\n        for (var f in a[b]) {\n          if (c[b][f]) {\n            var g = c[b][f] instanceof Array ? c[b][f] : [c[b][f]],\n                h = a[b][f] instanceof Array ? a[b][f] : [a[b][f]];\n            c[b][f] = g.concat(h);\n          } else c[b][f] = a[b][f];\n        }\n      } else if (\"hook\" == b) for (var i in a[b]) {\n        c[b][i] = c[b][i] ? mergeFn(c[b][i], a[b][i]) : a[b][i];\n      } else c[b] = a[b];\n    }\n\n    return c;\n  }, {});\n},\n    mergeFn = function mergeFn(a, b) {\n  return function () {\n    a && a.apply(this, arguments), b && b.apply(this, arguments);\n  };\n};\n\nvar helper = mergeJsxProps;\n\n// new Date(10, 0, 1) The year from 0 to 99 will be incremented by 1900 automatically.\nfunction createDate(y) {\n  var M = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  var d = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n  var h = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n  var m = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n  var s = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n  var ms = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n  var date = new Date(y, M, d, h, m, s, ms);\n\n  if (y < 100 && y >= 0) {\n    date.setFullYear(y);\n  }\n\n  return date;\n}\nfunction isValidDate(date) {\n  return date instanceof Date && !isNaN(date);\n}\nfunction isValidRangeDate(date) {\n  return Array.isArray(date) && date.length === 2 && date.every(isValidDate) && date[0] <= date[1];\n}\nfunction isValidDates(dates) {\n  return Array.isArray(dates) && dates.every(isValidDate);\n}\nfunction getValidDate(value) {\n  var date = new Date(value);\n\n  if (isValidDate(date)) {\n    return date;\n  }\n\n  for (var _len = arguments.length, backup = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    backup[_key - 1] = arguments[_key];\n  }\n\n  if (backup.length) {\n    return getValidDate.apply(void 0, backup);\n  }\n\n  return new Date();\n}\nfunction startOfYear(value) {\n  var date = new Date(value);\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}\nfunction startOfMonth(value) {\n  var date = new Date(value);\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}\nfunction startOfDay(value) {\n  var date = new Date(value);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}\nfunction getCalendar(_ref) {\n  var firstDayOfWeek = _ref.firstDayOfWeek,\n      year = _ref.year,\n      month = _ref.month;\n  var arr = []; // change to the last day of the last month\n\n  var calendar = createDate(year, month, 0);\n  var lastDayInLastMonth = calendar.getDate(); // getDay() 0 is Sunday, 1 is Monday\n\n  var firstDayInLastMonth = lastDayInLastMonth - (calendar.getDay() + 7 - firstDayOfWeek) % 7;\n\n  for (var i = firstDayInLastMonth; i <= lastDayInLastMonth; i++) {\n    arr.push(createDate(year, month, i - lastDayInLastMonth));\n  } // change to the last day of the current month\n\n\n  calendar.setMonth(month + 1, 0);\n  var lastDayInCurrentMonth = calendar.getDate();\n\n  for (var _i = 1; _i <= lastDayInCurrentMonth; _i++) {\n    arr.push(createDate(year, month, _i));\n  }\n\n  var lastMonthLength = lastDayInLastMonth - firstDayInLastMonth + 1;\n  var nextMonthLength = 6 * 7 - lastMonthLength - lastDayInCurrentMonth;\n\n  for (var _i2 = 1; _i2 <= nextMonthLength; _i2++) {\n    arr.push(createDate(year, month, lastDayInCurrentMonth + _i2));\n  }\n\n  return arr;\n}\nfunction setMonth(dirtyDate, dirtyMonth) {\n  var date = new Date(dirtyDate);\n  var month = typeof dirtyMonth === 'function' ? dirtyMonth(date.getMonth()) : Number(dirtyMonth);\n  var year = date.getFullYear();\n  var daysInMonth = createDate(year, month + 1, 0).getDate();\n  var day = date.getDate();\n  date.setMonth(month, Math.min(day, daysInMonth));\n  return date;\n}\nfunction setYear(dirtyDate, dirtyYear) {\n  var date = new Date(dirtyDate);\n  var year = typeof dirtyYear === 'function' ? dirtyYear(date.getFullYear()) : dirtyYear;\n  date.setFullYear(year);\n  return date;\n}\nfunction assignTime(target, source) {\n  var date = new Date(target);\n  var time = new Date(source);\n  date.setHours(time.getHours(), time.getMinutes(), time.getSeconds());\n  return date;\n}\n\n/**\n * chunk the array\n * @param {Array} arr\n * @param {Number} size\n */\nfunction chunk(arr, size) {\n  if (!Array.isArray(arr)) {\n    return [];\n  }\n\n  var result = [];\n  var len = arr.length;\n  var i = 0;\n  size = size || len;\n\n  while (i < len) {\n    result.push(arr.slice(i, i += size));\n  }\n\n  return result;\n}\n/**\n * isObject\n * @param {*} obj\n * @returns {Boolean}\n */\n\nfunction isObject(obj) {\n  return Object.prototype.toString.call(obj) === '[object Object]';\n}\n/**\n * pick object\n * @param {Object} obj\n * @param {Array|String} props\n */\n\nfunction pick(obj, props) {\n  if (!isObject(obj)) return {};\n\n  if (!Array.isArray(props)) {\n    props = [props];\n  }\n\n  var res = {};\n  props.forEach(function (prop) {\n    if (prop in obj) {\n      res[prop] = obj[prop];\n    }\n  });\n  return res;\n}\n/**\n * deep merge two object without merging array\n * @param {object} target\n * @param {object} source\n */\n\nfunction mergeDeep(target, source) {\n  if (!isObject(target)) {\n    return {};\n  }\n\n  var result = target;\n\n  if (isObject(source)) {\n    Object.keys(source).forEach(function (key) {\n      var value = source[key];\n\n      if (isObject(value) && isObject(target[key])) {\n        value = mergeDeep(target[key], value);\n      }\n\n      result = _objectSpread2({}, result, _defineProperty({}, key, value));\n    });\n  }\n\n  return result;\n}\n\nfunction unwrapExports (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar en = createCommonjsModule(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\nvar locale = {\n  months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n  monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  weekdaysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n  firstDayOfWeek: 0,\n  firstWeekContainsDate: 1\n};\nvar _default = locale;\nexports[\"default\"] = _default;\nmodule.exports = exports.default;\n});\n\nvar en$1 = unwrapExports(en);\n\nvar lang = {\n  formatLocale: en$1,\n  yearFormat: 'YYYY',\n  monthFormat: 'MMM',\n  monthBeforeYear: true\n};\n\nvar defaultLocale = 'en';\nvar locales = {};\nlocales[defaultLocale] = lang;\nfunction locale(name, object, isLocal) {\n  if (typeof name !== 'string') return locales[defaultLocale];\n  var l = defaultLocale;\n\n  if (locales[name]) {\n    l = name;\n  }\n\n  if (object) {\n    locales[name] = object;\n    l = name;\n  }\n\n  if (!isLocal) {\n    defaultLocale = l;\n  }\n\n  return locales[name] || locales[defaultLocale];\n}\n/**\n * get locale object\n * @param {string} name lang\n */\n\nfunction getLocale(name) {\n  return locale(name, null, true);\n}\n\n/* istanbul ignore file */\nfunction rafThrottle(fn) {\n  var isRunning = false;\n  return function fnBinfRaf() {\n    var _this = this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (isRunning) return;\n    isRunning = true;\n    requestAnimationFrame(function () {\n      isRunning = false;\n      fn.apply(_this, args);\n    });\n  };\n}\n\n/**\n * get the hidden element width, height\n * @param {HTMLElement} element dom\n */\nfunction getPopupElementSize(element) {\n  var originalDisplay = element.style.display;\n  var originalVisibility = element.style.visibility;\n  element.style.display = 'block';\n  element.style.visibility = 'hidden';\n  var styles = window.getComputedStyle(element);\n  var width = element.offsetWidth + parseInt(styles.marginLeft, 10) + parseInt(styles.marginRight, 10);\n  var height = element.offsetHeight + parseInt(styles.marginTop, 10) + parseInt(styles.marginBottom, 10);\n  element.style.display = originalDisplay;\n  element.style.visibility = originalVisibility;\n  return {\n    width: width,\n    height: height\n  };\n}\n/**\n * get the popup position\n * @param {HTMLElement} el relative element\n * @param {Number} targetWidth target element's width\n * @param {Number} targetHeight target element's height\n * @param {Boolean} fixed\n */\n\nfunction getRelativePosition(el, targetWidth, targetHeight, fixed) {\n  var left = 0;\n  var top = 0;\n  var offsetX = 0;\n  var offsetY = 0;\n  var relativeRect = el.getBoundingClientRect();\n  var dw = document.documentElement.clientWidth;\n  var dh = document.documentElement.clientHeight;\n\n  if (fixed) {\n    offsetX = window.pageXOffset + relativeRect.left;\n    offsetY = window.pageYOffset + relativeRect.top;\n  }\n\n  if (dw - relativeRect.left < targetWidth && relativeRect.right < targetWidth) {\n    left = offsetX - relativeRect.left + 1;\n  } else if (relativeRect.left + relativeRect.width / 2 <= dw / 2) {\n    left = offsetX;\n  } else {\n    left = offsetX + relativeRect.width - targetWidth;\n  }\n\n  if (relativeRect.top <= targetHeight && dh - relativeRect.bottom <= targetHeight) {\n    top = offsetY + dh - relativeRect.top - targetHeight;\n  } else if (relativeRect.top + relativeRect.height / 2 <= dh / 2) {\n    top = offsetY + relativeRect.height;\n  } else {\n    top = offsetY - targetHeight;\n  }\n\n  return {\n    left: \"\".concat(left, \"px\"),\n    top: \"\".concat(top, \"px\")\n  };\n}\nfunction getScrollParent(node) {\n  var until = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.body;\n\n  if (!node || node === until) {\n    return null;\n  }\n\n  var style = function style(value, prop) {\n    return getComputedStyle(value, null).getPropertyValue(prop);\n  };\n\n  var regex = /(auto|scroll)/;\n  var scroll = regex.test(style(node, 'overflow') + style(node, 'overflow-y') + style(node, 'overflow-x'));\n  return scroll ? node : getScrollParent(node.parentNode, until);\n}\n\n//\nvar script = {\n  name: 'Popup',\n  inject: {\n    prefixClass: {\n      default: 'mx'\n    }\n  },\n  props: {\n    visible: {\n      type: Boolean,\n      default: false\n    },\n    appendToBody: {\n      type: Boolean,\n      default: true\n    }\n  },\n  data: function data() {\n    return {\n      top: '',\n      left: ''\n    };\n  },\n  watch: {\n    visible: {\n      immediate: true,\n      handler: function handler(val) {\n        var _this = this;\n\n        this.$nextTick(function () {\n          if (val) {\n            _this.displayPopup();\n          }\n        });\n      }\n    }\n  },\n  mounted: function mounted() {\n    var _this2 = this;\n\n    if (this.appendToBody) {\n      document.body.appendChild(this.$el);\n    }\n\n    this._clickoutEvent = 'ontouchend' in document ? 'touchstart' : 'mousedown';\n    document.addEventListener(this._clickoutEvent, this.handleClickOutside); // change the popup position when resize or scroll\n\n    var relativeElement = this.$parent.$el;\n    this._displayPopup = rafThrottle(function () {\n      return _this2.displayPopup();\n    });\n    this._scrollParent = getScrollParent(relativeElement) || window;\n\n    this._scrollParent.addEventListener('scroll', this._displayPopup);\n\n    window.addEventListener('resize', this._displayPopup);\n  },\n  beforeDestroy: function beforeDestroy() {\n    if (this.appendToBody && this.$el.parentNode) {\n      this.$el.parentNode.removeChild(this.$el);\n    }\n\n    document.removeEventListener(this._clickoutEvent, this.handleClickOutside);\n\n    this._scrollParent.removeEventListener('scroll', this._displayPopup);\n\n    window.removeEventListener('resize', this._displayPopup);\n  },\n  methods: {\n    handleClickOutside: function handleClickOutside(evt) {\n      if (!this.visible) return;\n      var target = evt.target;\n      var el = this.$el;\n\n      if (el && !el.contains(target)) {\n        this.$emit('clickoutside', evt);\n      }\n    },\n    displayPopup: function displayPopup() {\n      if (!this.visible) return;\n      var popup = this.$el;\n      var relativeElement = this.$parent.$el;\n      var appendToBody = this.appendToBody;\n\n      if (!this._popupRect) {\n        this._popupRect = getPopupElementSize(popup);\n      }\n\n      var _this$_popupRect = this._popupRect,\n          width = _this$_popupRect.width,\n          height = _this$_popupRect.height;\n\n      var _getRelativePosition = getRelativePosition(relativeElement, width, height, appendToBody),\n          left = _getRelativePosition.left,\n          top = _getRelativePosition.top;\n\n      this.left = left;\n      this.top = top;\n    }\n  }\n};\n\nfunction normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier\n/* server only */\n, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {\n  if (typeof shadowMode !== 'boolean') {\n    createInjectorSSR = createInjector;\n    createInjector = shadowMode;\n    shadowMode = false;\n  } // Vue.extend constructor export interop.\n\n\n  var options = typeof script === 'function' ? script.options : script; // render functions\n\n  if (template && template.render) {\n    options.render = template.render;\n    options.staticRenderFns = template.staticRenderFns;\n    options._compiled = true; // functional template\n\n    if (isFunctionalTemplate) {\n      options.functional = true;\n    }\n  } // scopedId\n\n\n  if (scopeId) {\n    options._scopeId = scopeId;\n  }\n\n  var hook;\n\n  if (moduleIdentifier) {\n    // server build\n    hook = function hook(context) {\n      // 2.3 injection\n      context = context || // cached call\n      this.$vnode && this.$vnode.ssrContext || // stateful\n      this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext; // functional\n      // 2.2 with runInNewContext: true\n\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__;\n      } // inject component styles\n\n\n      if (style) {\n        style.call(this, createInjectorSSR(context));\n      } // register component module identifier for async chunk inference\n\n\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier);\n      }\n    }; // used by ssr in case component is cached and beforeCreate\n    // never gets called\n\n\n    options._ssrRegister = hook;\n  } else if (style) {\n    hook = shadowMode ? function (context) {\n      style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot));\n    } : function (context) {\n      style.call(this, createInjector(context));\n    };\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // register for functional component in vue file\n      var originalRender = options.render;\n\n      options.render = function renderWithStyleInjection(h, context) {\n        hook.call(context);\n        return originalRender(h, context);\n      };\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate;\n      options.beforeCreate = existing ? [].concat(existing, hook) : [hook];\n    }\n  }\n\n  return script;\n}\n\n/* script */\nvar __vue_script__ = script;\n/* template */\n\nvar __vue_render__ = function __vue_render__() {\n  var _vm = this;\n\n  var _h = _vm.$createElement;\n\n  var _c = _vm._self._c || _h;\n\n  return _c('transition', {\n    attrs: {\n      \"name\": _vm.prefixClass + \"-zoom-in-down\"\n    }\n  }, [_vm.visible ? _c('div', {\n    class: _vm.prefixClass + \"-datepicker-main \" + _vm.prefixClass + \"-datepicker-popup\",\n    style: {\n      top: _vm.top,\n      left: _vm.left,\n      position: 'absolute'\n    }\n  }, [_vm._t(\"default\")], 2) : _vm._e()]);\n};\n\nvar __vue_staticRenderFns__ = [];\n/* style */\n\nvar __vue_inject_styles__ = undefined;\n/* scoped */\n\nvar __vue_scope_id__ = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__ = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__ = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__ = normalizeComponent({\n  render: __vue_render__,\n  staticRenderFns: __vue_staticRenderFns__\n}, __vue_inject_styles__, __vue_script__, __vue_scope_id__, __vue_is_functional_template__, __vue_module_identifier__, false, undefined, undefined, undefined);\n\n/* script */\n\n/* template */\nvar __vue_render__$1 = function __vue_render__() {\n  var _vm = this;\n\n  var _h = _vm.$createElement;\n\n  var _c = _vm._self._c || _h;\n\n  return _c('svg', {\n    attrs: {\n      \"xmlns\": \"http://www.w3.org/2000/svg\",\n      \"viewBox\": \"0 0 1024 1024\",\n      \"width\": \"1em\",\n      \"height\": \"1em\"\n    }\n  }, [_c('path', {\n    attrs: {\n      \"d\": \"M940.218182 107.054545h-209.454546V46.545455h-65.163636v60.50909H363.054545V46.545455H297.890909v60.50909H83.781818c-18.618182 0-32.581818 13.963636-32.581818 32.581819v805.236363c0 18.618182 13.963636 32.581818 32.581818 32.581818h861.090909c18.618182 0 32.581818-13.963636 32.581818-32.581818V139.636364c-4.654545-18.618182-18.618182-32.581818-37.236363-32.581819zM297.890909 172.218182V232.727273h65.163636V172.218182h307.2V232.727273h65.163637V172.218182h176.872727v204.8H116.363636V172.218182h181.527273zM116.363636 912.290909V442.181818h795.927273v470.109091H116.363636z\"\n    }\n  })]);\n};\n\nvar __vue_staticRenderFns__$1 = [];\n/* style */\n\nvar __vue_inject_styles__$1 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$1 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$1 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$1 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$1 = normalizeComponent({\n  render: __vue_render__$1,\n  staticRenderFns: __vue_staticRenderFns__$1\n}, __vue_inject_styles__$1, {}, __vue_scope_id__$1, __vue_is_functional_template__$1, __vue_module_identifier__$1, false, undefined, undefined, undefined);\n\n/* script */\n\n/* template */\nvar __vue_render__$2 = function __vue_render__() {\n  var _vm = this;\n\n  var _h = _vm.$createElement;\n\n  var _c = _vm._self._c || _h;\n\n  return _c('svg', {\n    attrs: {\n      \"xmlns\": \"http://www.w3.org/2000/svg\",\n      \"viewBox\": \"0 0 24 24\",\n      \"width\": \"1em\",\n      \"height\": \"1em\"\n    }\n  }, [_c('path', {\n    attrs: {\n      \"d\": \"M0 0h24v24H0z\",\n      \"fill\": \"none\"\n    }\n  }), _vm._v(\" \"), _c('path', {\n    attrs: {\n      \"d\": \"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"\n    }\n  }), _vm._v(\" \"), _c('path', {\n    attrs: {\n      \"d\": \"M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z\"\n    }\n  })]);\n};\n\nvar __vue_staticRenderFns__$2 = [];\n/* style */\n\nvar __vue_inject_styles__$2 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$2 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$2 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$2 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$2 = normalizeComponent({\n  render: __vue_render__$2,\n  staticRenderFns: __vue_staticRenderFns__$2\n}, __vue_inject_styles__$2, {}, __vue_scope_id__$2, __vue_is_functional_template__$2, __vue_module_identifier__$2, false, undefined, undefined, undefined);\n\n/* script */\n\n/* template */\nvar __vue_render__$3 = function __vue_render__() {\n  var _vm = this;\n\n  var _h = _vm.$createElement;\n\n  var _c = _vm._self._c || _h;\n\n  return _c('svg', {\n    attrs: {\n      \"xmlns\": \"http://www.w3.org/2000/svg\",\n      \"viewBox\": \"0 0 1024 1024\",\n      \"width\": \"1em\",\n      \"height\": \"1em\"\n    }\n  }, [_c('path', {\n    attrs: {\n      \"d\": \"M810.005333 274.005333l-237.994667 237.994667 237.994667 237.994667-60.010667 60.010667-237.994667-237.994667-237.994667 237.994667-60.010667-60.010667 237.994667-237.994667-237.994667-237.994667 60.010667-60.010667 237.994667 237.994667 237.994667-237.994667z\"\n    }\n  })]);\n};\n\nvar __vue_staticRenderFns__$3 = [];\n/* style */\n\nvar __vue_inject_styles__$3 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$3 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$3 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$3 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$3 = normalizeComponent({\n  render: __vue_render__$3,\n  staticRenderFns: __vue_staticRenderFns__$3\n}, __vue_inject_styles__$3, {}, __vue_scope_id__$3, __vue_is_functional_template__$3, __vue_module_identifier__$3, false, undefined, undefined, undefined);\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar script$1 = {\n  props: {\n    type: String,\n    disabled: Boolean\n  },\n  inject: {\n    prefixClass: {\n      default: 'mx'\n    }\n  }\n};\n\n/* script */\nvar __vue_script__$1 = script$1;\n/* template */\n\nvar __vue_render__$4 = function __vue_render__() {\n  var _vm = this;\n\n  var _h = _vm.$createElement;\n\n  var _c = _vm._self._c || _h;\n\n  return _c('button', _vm._g({\n    class: [_vm.prefixClass + \"-btn \" + _vm.prefixClass + \"-btn-text \" + _vm.prefixClass + \"-btn-icon-\" + _vm.type, {\n      disabled: _vm.disabled\n    }],\n    attrs: {\n      \"type\": \"button\",\n      \"disabled\": _vm.disabled\n    }\n  }, _vm.$listeners), [_c('i', {\n    class: _vm.prefixClass + \"-icon-\" + _vm.type\n  })]);\n};\n\nvar __vue_staticRenderFns__$4 = [];\n/* style */\n\nvar __vue_inject_styles__$4 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$4 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$4 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$4 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$4 = normalizeComponent({\n  render: __vue_render__$4,\n  staticRenderFns: __vue_staticRenderFns__$4\n}, __vue_inject_styles__$4, __vue_script__$1, __vue_scope_id__$4, __vue_is_functional_template__$4, __vue_module_identifier__$4, false, undefined, undefined, undefined);\n\nvar script$2 = {\n  name: 'TableDate',\n  components: {\n    IconButton: __vue_component__$4\n  },\n  inject: {\n    getLocale: {\n      default: function _default() {\n        return getLocale;\n      }\n    },\n    getWeek: {\n      default: function _default() {\n        return getWeek;\n      }\n    },\n    prefixClass: {\n      default: 'mx'\n    },\n    onDateMouseEnter: {\n      default: undefined\n    },\n    onDateMouseLeave: {\n      default: undefined\n    }\n  },\n  props: {\n    disabledCalendarChanger: {\n      type: Function,\n      default: function _default() {\n        return false;\n      }\n    },\n    calendar: {\n      type: Date,\n      default: function _default() {\n        return new Date();\n      }\n    },\n    showWeekNumber: {\n      type: Boolean,\n      default: false\n    },\n    titleFormat: {\n      type: String,\n      default: 'YYYY-MM-DD'\n    },\n    getRowClasses: {\n      type: Function,\n      default: function _default() {\n        return [];\n      }\n    },\n    getCellClasses: {\n      type: Function,\n      default: function _default() {\n        return [];\n      }\n    }\n  },\n  computed: {\n    firstDayOfWeek: function firstDayOfWeek() {\n      return this.getLocale().formatLocale.firstDayOfWeek || 0;\n    },\n    yearMonth: function yearMonth() {\n      var _this$getLocale = this.getLocale(),\n          yearFormat = _this$getLocale.yearFormat,\n          monthBeforeYear = _this$getLocale.monthBeforeYear,\n          _this$getLocale$month = _this$getLocale.monthFormat,\n          monthFormat = _this$getLocale$month === void 0 ? 'MMM' : _this$getLocale$month;\n\n      var yearLabel = {\n        panel: 'year',\n        label: this.formatDate(this.calendar, yearFormat)\n      };\n      var monthLabel = {\n        panel: 'month',\n        label: this.formatDate(this.calendar, monthFormat)\n      };\n      return monthBeforeYear ? [monthLabel, yearLabel] : [yearLabel, monthLabel];\n    },\n    days: function days() {\n      var locale = this.getLocale();\n      var days = locale.days || locale.formatLocale.weekdaysMin;\n      return days.concat(days).slice(this.firstDayOfWeek, this.firstDayOfWeek + 7);\n    },\n    dates: function dates() {\n      var year = this.calendar.getFullYear();\n      var month = this.calendar.getMonth();\n      var arr = getCalendar({\n        firstDayOfWeek: this.firstDayOfWeek,\n        year: year,\n        month: month\n      });\n      return chunk(arr, 7);\n    }\n  },\n  methods: {\n    isDisabledArrows: function isDisabledArrows(type) {\n      var date = new Date(this.calendar);\n\n      switch (type) {\n        case 'last-year':\n          date.setFullYear(date.getFullYear() - 1, date.getMonth() + 1, 0);\n          date.setHours(23, 59, 59, 999);\n          break;\n\n        case 'next-year':\n          date.setFullYear(date.getFullYear() + 1);\n          break;\n\n        case 'last-month':\n          date.setMonth(date.getMonth(), 0);\n          date.setHours(23, 59, 59, 999);\n          break;\n\n        case 'next-month':\n          date.setMonth(date.getMonth() + 1);\n          break;\n      }\n\n      return this.disabledCalendarChanger(date, type);\n    },\n    handleIconLeftClick: function handleIconLeftClick() {\n      this.$emit('changecalendar', setMonth(this.calendar, function (v) {\n        return v - 1;\n      }), 'last-month');\n    },\n    handleIconRightClick: function handleIconRightClick() {\n      this.$emit('changecalendar', setMonth(this.calendar, function (v) {\n        return v + 1;\n      }), 'next-month');\n    },\n    handleIconDoubleLeftClick: function handleIconDoubleLeftClick() {\n      this.$emit('changecalendar', setYear(this.calendar, function (v) {\n        return v - 1;\n      }), 'last-year');\n    },\n    handleIconDoubleRightClick: function handleIconDoubleRightClick() {\n      this.$emit('changecalendar', setYear(this.calendar, function (v) {\n        return v + 1;\n      }), 'next-year');\n    },\n    handlePanelChange: function handlePanelChange(panel) {\n      this.$emit('changepanel', panel);\n    },\n    handleMouseEnter: function handleMouseEnter(cell) {\n      if (typeof this.onDateMouseEnter === 'function') {\n        this.onDateMouseEnter(cell);\n      }\n    },\n    handleMouseLeave: function handleMouseLeave(cell) {\n      if (typeof this.onDateMouseLeave === 'function') {\n        this.onDateMouseLeave(cell);\n      }\n    },\n    handleCellClick: function handleCellClick(evt) {\n      var target = evt.target;\n\n      if (target.tagName.toUpperCase() === 'DIV') {\n        target = target.parentNode;\n      }\n\n      var index = target.getAttribute('data-row-col');\n\n      if (index) {\n        var _index$split$map = index.split(',').map(function (v) {\n          return parseInt(v, 10);\n        }),\n            _index$split$map2 = _slicedToArray(_index$split$map, 2),\n            row = _index$split$map2[0],\n            col = _index$split$map2[1];\n\n        var date = this.dates[row][col];\n        this.$emit('select', new Date(date));\n      }\n    },\n    formatDate: function formatDate(date, fmt) {\n      return format(date, fmt, {\n        locale: this.getLocale().formatLocale\n      });\n    },\n    getCellTitle: function getCellTitle(date) {\n      var fmt = this.titleFormat;\n      return this.formatDate(date, fmt);\n    },\n    getWeekNumber: function getWeekNumber(date) {\n      return this.getWeek(date, this.getLocale().formatLocale);\n    }\n  }\n};\n\n/* script */\nvar __vue_script__$2 = script$2;\n/* template */\n\nvar __vue_render__$5 = function __vue_render__() {\n  var _vm = this;\n\n  var _h = _vm.$createElement;\n\n  var _c = _vm._self._c || _h;\n\n  return _c('div', {\n    class: _vm.prefixClass + \"-calendar \" + _vm.prefixClass + \"-calendar-panel-date\"\n  }, [_c('div', {\n    class: _vm.prefixClass + \"-calendar-header\"\n  }, [_c('icon-button', {\n    attrs: {\n      \"type\": \"double-left\",\n      \"disabled\": _vm.isDisabledArrows('last-year')\n    },\n    on: {\n      \"click\": _vm.handleIconDoubleLeftClick\n    }\n  }), _vm._v(\" \"), _c('icon-button', {\n    attrs: {\n      \"type\": \"left\",\n      \"disabled\": _vm.isDisabledArrows('last-month')\n    },\n    on: {\n      \"click\": _vm.handleIconLeftClick\n    }\n  }), _vm._v(\" \"), _c('icon-button', {\n    attrs: {\n      \"type\": \"double-right\",\n      \"disabled\": _vm.isDisabledArrows('next-year')\n    },\n    on: {\n      \"click\": _vm.handleIconDoubleRightClick\n    }\n  }), _vm._v(\" \"), _c('icon-button', {\n    attrs: {\n      \"type\": \"right\",\n      \"disabled\": _vm.isDisabledArrows('next-month')\n    },\n    on: {\n      \"click\": _vm.handleIconRightClick\n    }\n  }), _vm._v(\" \"), _c('span', {\n    class: _vm.prefixClass + \"-calendar-header-label\"\n  }, _vm._l(_vm.yearMonth, function (item) {\n    return _c('button', {\n      key: item.panel,\n      class: _vm.prefixClass + \"-btn \" + _vm.prefixClass + \"-btn-text \" + _vm.prefixClass + \"-btn-current-\" + item.panel,\n      attrs: {\n        \"type\": \"button\"\n      },\n      on: {\n        \"click\": function click($event) {\n          return _vm.handlePanelChange(item.panel);\n        }\n      }\n    }, [_vm._v(\"\\n        \" + _vm._s(item.label) + \"\\n      \")]);\n  }), 0)], 1), _vm._v(\" \"), _c('div', {\n    class: _vm.prefixClass + \"-calendar-content\"\n  }, [_c('table', {\n    class: _vm.prefixClass + \"-table \" + _vm.prefixClass + \"-table-date\"\n  }, [_c('thead', [_c('tr', [_vm.showWeekNumber ? _c('th', {\n    class: _vm.prefixClass + \"-week-number-header\"\n  }) : _vm._e(), _vm._v(\" \"), _vm._l(_vm.days, function (day) {\n    return _c('th', {\n      key: day\n    }, [_vm._v(_vm._s(day))]);\n  })], 2)]), _vm._v(\" \"), _c('tbody', {\n    on: {\n      \"click\": _vm.handleCellClick\n    }\n  }, _vm._l(_vm.dates, function (row, i) {\n    return _c('tr', {\n      key: i,\n      class: [_vm.prefixClass + \"-date-row\", _vm.getRowClasses(row)]\n    }, [_vm.showWeekNumber ? _c('td', {\n      class: _vm.prefixClass + \"-week-number\",\n      attrs: {\n        \"data-row-col\": i + \",0\"\n      }\n    }, [_vm._v(\"\\n            \" + _vm._s(_vm.getWeekNumber(row[0])) + \"\\n          \")]) : _vm._e(), _vm._v(\" \"), _vm._l(row, function (cell, j) {\n      return _c('td', {\n        key: j,\n        staticClass: \"cell\",\n        class: _vm.getCellClasses(cell),\n        attrs: {\n          \"data-row-col\": i + \",\" + j,\n          \"title\": _vm.getCellTitle(cell)\n        },\n        on: {\n          \"mouseenter\": function mouseenter($event) {\n            return _vm.handleMouseEnter(cell);\n          },\n          \"mouseleave\": function mouseleave($event) {\n            return _vm.handleMouseLeave(cell);\n          }\n        }\n      }, [_c('div', [_vm._v(_vm._s(cell.getDate()))])]);\n    })], 2);\n  }), 0)])])]);\n};\n\nvar __vue_staticRenderFns__$5 = [];\n/* style */\n\nvar __vue_inject_styles__$5 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$5 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$5 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$5 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$5 = normalizeComponent({\n  render: __vue_render__$5,\n  staticRenderFns: __vue_staticRenderFns__$5\n}, __vue_inject_styles__$5, __vue_script__$2, __vue_scope_id__$5, __vue_is_functional_template__$5, __vue_module_identifier__$5, false, undefined, undefined, undefined);\n\n//\nvar script$3 = {\n  name: 'TableMonth',\n  components: {\n    IconButton: __vue_component__$4\n  },\n  inject: {\n    getLocale: {\n      default: function _default() {\n        return getLocale;\n      }\n    },\n    prefixClass: {\n      default: 'mx'\n    }\n  },\n  props: {\n    disabledCalendarChanger: {\n      type: Function,\n      default: function _default() {\n        return false;\n      }\n    },\n    calendar: {\n      type: Date,\n      default: function _default() {\n        return new Date();\n      }\n    },\n    getCellClasses: {\n      type: Function,\n      default: function _default() {\n        return [];\n      }\n    }\n  },\n  computed: {\n    calendarYear: function calendarYear() {\n      return this.calendar.getFullYear();\n    },\n    months: function months() {\n      var locale = this.getLocale();\n      var monthsLocale = locale.months || locale.formatLocale.monthsShort;\n      var months = monthsLocale.map(function (text, month) {\n        return {\n          text: text,\n          month: month\n        };\n      });\n      return chunk(months, 3);\n    }\n  },\n  methods: {\n    isDisabledArrows: function isDisabledArrows(type) {\n      var date = new Date(this.calendar);\n\n      switch (type) {\n        case 'last-year':\n          date.setFullYear(date.getFullYear() - 1, 11, 31);\n          date.setHours(23, 59, 59, 999);\n          break;\n\n        case 'next-year':\n          date.setFullYear(date.getFullYear() + 1, 0, 1);\n          break;\n      }\n\n      return this.disabledCalendarChanger(date, type);\n    },\n    handleIconDoubleLeftClick: function handleIconDoubleLeftClick() {\n      this.$emit('changecalendar', setYear(this.calendar, function (v) {\n        return v - 1;\n      }), 'last-year');\n    },\n    handleIconDoubleRightClick: function handleIconDoubleRightClick() {\n      this.$emit('changecalendar', setYear(this.calendar, function (v) {\n        return v + 1;\n      }), 'next-year');\n    },\n    handlePanelChange: function handlePanelChange() {\n      this.$emit('changepanel', 'year');\n    },\n    handleClick: function handleClick(evt) {\n      var target = evt.target;\n\n      if (target.tagName.toUpperCase() === 'DIV') {\n        target = target.parentNode;\n      }\n\n      var month = target.getAttribute('data-month');\n\n      if (month && !target.classList.contains('disabled')) {\n        this.$emit('select', parseInt(month, 10));\n      }\n    }\n  }\n};\n\n/* script */\nvar __vue_script__$3 = script$3;\n/* template */\n\nvar __vue_render__$6 = function __vue_render__() {\n  var _vm = this;\n\n  var _h = _vm.$createElement;\n\n  var _c = _vm._self._c || _h;\n\n  return _c('div', {\n    class: _vm.prefixClass + \"-calendar \" + _vm.prefixClass + \"-calendar-panel-month\"\n  }, [_c('div', {\n    class: _vm.prefixClass + \"-calendar-header\"\n  }, [_c('icon-button', {\n    attrs: {\n      \"type\": \"double-left\",\n      \"disabled\": _vm.isDisabledArrows('last-year')\n    },\n    on: {\n      \"click\": _vm.handleIconDoubleLeftClick\n    }\n  }), _vm._v(\" \"), _c('icon-button', {\n    attrs: {\n      \"type\": \"double-right\",\n      \"disabled\": _vm.isDisabledArrows('next-year')\n    },\n    on: {\n      \"click\": _vm.handleIconDoubleRightClick\n    }\n  }), _vm._v(\" \"), _c('span', {\n    class: _vm.prefixClass + \"-calendar-header-label\"\n  }, [_c('button', {\n    class: _vm.prefixClass + \"-btn \" + _vm.prefixClass + \"-btn-text\",\n    attrs: {\n      \"type\": \"button\"\n    },\n    on: {\n      \"click\": _vm.handlePanelChange\n    }\n  }, [_vm._v(\"\\n        \" + _vm._s(_vm.calendarYear) + \"\\n      \")])])], 1), _vm._v(\" \"), _c('div', {\n    class: _vm.prefixClass + \"-calendar-content\"\n  }, [_c('table', {\n    class: _vm.prefixClass + \"-table \" + _vm.prefixClass + \"-table-month\",\n    on: {\n      \"click\": _vm.handleClick\n    }\n  }, _vm._l(_vm.months, function (row, i) {\n    return _c('tr', {\n      key: i\n    }, _vm._l(row, function (cell, j) {\n      return _c('td', {\n        key: j,\n        staticClass: \"cell\",\n        class: _vm.getCellClasses(cell.month),\n        attrs: {\n          \"data-month\": cell.month\n        }\n      }, [_c('div', [_vm._v(_vm._s(cell.text))])]);\n    }), 0);\n  }), 0)])]);\n};\n\nvar __vue_staticRenderFns__$6 = [];\n/* style */\n\nvar __vue_inject_styles__$6 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$6 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$6 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$6 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$6 = normalizeComponent({\n  render: __vue_render__$6,\n  staticRenderFns: __vue_staticRenderFns__$6\n}, __vue_inject_styles__$6, __vue_script__$3, __vue_scope_id__$6, __vue_is_functional_template__$6, __vue_module_identifier__$6, false, undefined, undefined, undefined);\n\n//\nvar script$4 = {\n  name: 'TableYear',\n  components: {\n    IconButton: __vue_component__$4\n  },\n  inject: {\n    prefixClass: {\n      default: 'mx'\n    }\n  },\n  props: {\n    disabledCalendarChanger: {\n      type: Function,\n      default: function _default() {\n        return false;\n      }\n    },\n    calendar: {\n      type: Date,\n      default: function _default() {\n        return new Date();\n      }\n    },\n    getCellClasses: {\n      type: Function,\n      default: function _default() {\n        return [];\n      }\n    },\n    getYearPanel: {\n      type: Function\n    }\n  },\n  computed: {\n    years: function years() {\n      var calendar = new Date(this.calendar);\n\n      if (typeof this.getYearPanel === 'function') {\n        return this.getYearPanel(calendar);\n      }\n\n      return this.getYears(calendar);\n    },\n    firstYear: function firstYear() {\n      return this.years[0][0];\n    },\n    lastYear: function lastYear() {\n      var last = function last(arr) {\n        return arr[arr.length - 1];\n      };\n\n      return last(last(this.years));\n    }\n  },\n  methods: {\n    isDisabledArrows: function isDisabledArrows(type) {\n      var date = new Date(this.calendar);\n\n      switch (type) {\n        case 'last-decade':\n          date.setFullYear(this.firstYear - 1, 11, 31);\n          date.setHours(23, 59, 59, 999);\n          break;\n\n        case 'next-decade':\n          date.setFullYear(this.lastYear + 1, 0, 1);\n          break;\n      }\n\n      return this.disabledCalendarChanger(date, type);\n    },\n    getYears: function getYears(calendar) {\n      var firstYear = Math.floor(calendar.getFullYear() / 10) * 10;\n      var years = [];\n\n      for (var i = 0; i < 10; i++) {\n        years.push(firstYear + i);\n      }\n\n      return chunk(years, 2);\n    },\n    handleIconDoubleLeftClick: function handleIconDoubleLeftClick() {\n      this.$emit('changecalendar', setYear(this.calendar, function (v) {\n        return v - 10;\n      }), 'last-decade');\n    },\n    handleIconDoubleRightClick: function handleIconDoubleRightClick() {\n      this.$emit('changecalendar', setYear(this.calendar, function (v) {\n        return v + 10;\n      }), 'next-decade');\n    },\n    handleClick: function handleClick(evt) {\n      var target = evt.target;\n\n      if (target.tagName.toUpperCase() === 'DIV') {\n        target = target.parentNode;\n      }\n\n      var year = target.getAttribute('data-year');\n\n      if (year && !target.classList.contains('disabled')) {\n        this.$emit('select', parseInt(year, 10));\n      }\n    }\n  }\n};\n\n/* script */\nvar __vue_script__$4 = script$4;\n/* template */\n\nvar __vue_render__$7 = function __vue_render__() {\n  var _vm = this;\n\n  var _h = _vm.$createElement;\n\n  var _c = _vm._self._c || _h;\n\n  return _c('div', {\n    class: _vm.prefixClass + \"-calendar \" + _vm.prefixClass + \"-calendar-panel-year\"\n  }, [_c('div', {\n    class: _vm.prefixClass + \"-calendar-header\"\n  }, [_c('icon-button', {\n    attrs: {\n      \"type\": \"double-left\",\n      \"disabled\": _vm.isDisabledArrows('last-decade')\n    },\n    on: {\n      \"click\": _vm.handleIconDoubleLeftClick\n    }\n  }), _vm._v(\" \"), _c('icon-button', {\n    attrs: {\n      \"type\": \"double-right\",\n      \"disabled\": _vm.isDisabledArrows('next-decade')\n    },\n    on: {\n      \"click\": _vm.handleIconDoubleRightClick\n    }\n  }), _vm._v(\" \"), _c('span', {\n    class: _vm.prefixClass + \"-calendar-header-label\"\n  }, [_c('span', [_vm._v(_vm._s(_vm.firstYear))]), _vm._v(\" \"), _c('span', {\n    class: _vm.prefixClass + \"-calendar-decade-separator\"\n  }), _vm._v(\" \"), _c('span', [_vm._v(_vm._s(_vm.lastYear))])])], 1), _vm._v(\" \"), _c('div', {\n    class: _vm.prefixClass + \"-calendar-content\"\n  }, [_c('table', {\n    class: _vm.prefixClass + \"-table \" + _vm.prefixClass + \"-table-year\",\n    on: {\n      \"click\": _vm.handleClick\n    }\n  }, _vm._l(_vm.years, function (row, i) {\n    return _c('tr', {\n      key: i\n    }, _vm._l(row, function (cell, j) {\n      return _c('td', {\n        key: j,\n        staticClass: \"cell\",\n        class: _vm.getCellClasses(cell),\n        attrs: {\n          \"data-year\": cell\n        }\n      }, [_c('div', [_vm._v(_vm._s(cell))])]);\n    }), 0);\n  }), 0)])]);\n};\n\nvar __vue_staticRenderFns__$7 = [];\n/* style */\n\nvar __vue_inject_styles__$7 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$7 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$7 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$7 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$7 = normalizeComponent({\n  render: __vue_render__$7,\n  staticRenderFns: __vue_staticRenderFns__$7\n}, __vue_inject_styles__$7, __vue_script__$4, __vue_scope_id__$7, __vue_is_functional_template__$7, __vue_module_identifier__$7, false, undefined, undefined, undefined);\n\nvar CalendarPanel = {\n  name: 'CalendarPanel',\n  inject: {\n    prefixClass: {\n      default: 'mx'\n    },\n    dispatchDatePicker: {\n      default: function _default() {\n        return function () {};\n      }\n    }\n  },\n  props: {\n    value: {},\n    defaultValue: {\n      default: function _default() {\n        var date = new Date();\n        date.setHours(0, 0, 0, 0);\n        return date;\n      }\n    },\n    defaultPanel: {\n      type: String\n    },\n    disabledCalendarChanger: {\n      type: Function,\n      default: function _default() {\n        return false;\n      }\n    },\n    disabledDate: {\n      type: Function,\n      default: function _default() {\n        return false;\n      }\n    },\n    type: {\n      type: String,\n      default: 'date'\n    },\n    getClasses: {\n      type: Function,\n      default: function _default() {\n        return [];\n      }\n    },\n    showWeekNumber: {\n      type: Boolean,\n      default: undefined\n    },\n    getYearPanel: {\n      type: Function\n    },\n    titleFormat: {\n      type: String,\n      default: 'YYYY-MM-DD'\n    },\n    calendar: Date,\n    // update date when select year or month\n    partialUpdate: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data: function data() {\n    var panels = ['date', 'month', 'year'];\n    var index = Math.max(panels.indexOf(this.type), panels.indexOf(this.defaultPanel));\n    var panel = index !== -1 ? panels[index] : 'date';\n    return {\n      panel: panel,\n      innerCalendar: new Date()\n    };\n  },\n  computed: {\n    innerValue: function innerValue() {\n      var value = Array.isArray(this.value) ? this.value : [this.value];\n      var map = {\n        year: startOfYear,\n        month: startOfMonth,\n        date: startOfDay\n      };\n      var start = map[this.type] || map.date;\n      return value.filter(isValidDate).map(function (v) {\n        return start(v);\n      });\n    },\n    calendarYear: function calendarYear() {\n      return this.innerCalendar.getFullYear();\n    },\n    calendarMonth: function calendarMonth() {\n      return this.innerCalendar.getMonth();\n    }\n  },\n  watch: {\n    value: {\n      immediate: true,\n      handler: 'initCalendar'\n    },\n    calendar: {\n      handler: 'initCalendar'\n    },\n    defaultValue: {\n      handler: 'initCalendar'\n    }\n  },\n  methods: {\n    initCalendar: function initCalendar() {\n      var calendarDate = this.calendar;\n\n      if (!isValidDate(calendarDate)) {\n        var length = this.innerValue.length;\n        calendarDate = getValidDate(length > 0 ? this.innerValue[length - 1] : this.defaultValue);\n      }\n\n      this.innerCalendar = startOfMonth(calendarDate);\n    },\n    isDisabled: function isDisabled(date) {\n      return this.disabledDate(new Date(date), this.innerValue);\n    },\n    emitDate: function emitDate(date, type) {\n      if (!this.isDisabled(date)) {\n        this.$emit('select', date, type, this.innerValue); // someone need get the first selected date to set range value. (#429)\n\n        this.dispatchDatePicker('pick', date, type);\n      }\n    },\n    handleCalendarChange: function handleCalendarChange(calendar, type) {\n      var oldCalendar = new Date(this.innerCalendar);\n      this.innerCalendar = calendar;\n      this.$emit('update:calendar', calendar);\n      this.dispatchDatePicker('calendar-change', calendar, oldCalendar, type);\n    },\n    handelPanelChange: function handelPanelChange(panel) {\n      var oldPanel = this.panel;\n      this.panel = panel;\n      this.dispatchDatePicker('panel-change', panel, oldPanel);\n    },\n    handleSelectYear: function handleSelectYear(year) {\n      if (this.type === 'year') {\n        var date = this.getYearCellDate(year);\n        this.emitDate(date, 'year');\n      } else {\n        this.handleCalendarChange(createDate(year, this.calendarMonth), 'year');\n        this.handelPanelChange('month');\n\n        if (this.partialUpdate && this.innerValue.length === 1) {\n          var _date = new Date(this.innerValue[0]);\n\n          _date.setFullYear(year);\n\n          this.emitDate(_date, 'year');\n        }\n      }\n    },\n    handleSelectMonth: function handleSelectMonth(month) {\n      if (this.type === 'month') {\n        var date = this.getMonthCellDate(month);\n        this.emitDate(date, 'month');\n      } else {\n        this.handleCalendarChange(createDate(this.calendarYear, month), 'month');\n        this.handelPanelChange('date');\n\n        if (this.partialUpdate && this.innerValue.length === 1) {\n          var _date2 = new Date(this.innerValue[0]);\n\n          _date2.setFullYear(this.calendarYear);\n\n          this.emitDate(setMonth(_date2, month), 'month');\n        }\n      }\n    },\n    handleSelectDate: function handleSelectDate(date) {\n      this.emitDate(date, this.type === 'week' ? 'week' : 'date');\n    },\n    getMonthCellDate: function getMonthCellDate(month) {\n      return createDate(this.calendarYear, month);\n    },\n    getYearCellDate: function getYearCellDate(year) {\n      return createDate(year, 0);\n    },\n    getDateClasses: function getDateClasses(cellDate) {\n      var notCurrentMonth = cellDate.getMonth() !== this.calendarMonth;\n      var classes = [];\n\n      if (cellDate.getTime() === new Date().setHours(0, 0, 0, 0)) {\n        classes.push('today');\n      }\n\n      if (notCurrentMonth) {\n        classes.push('not-current-month');\n      }\n\n      var state = this.getStateClass(cellDate);\n\n      if (!(state === 'active' && notCurrentMonth)) {\n        classes.push(state);\n      }\n\n      return classes.concat(this.getClasses(cellDate, this.innerValue, classes.join(' ')));\n    },\n    getMonthClasses: function getMonthClasses(month) {\n      var classes = [];\n\n      if (this.type !== 'month') {\n        if (this.calendarMonth === month) {\n          classes.push('active');\n        }\n\n        var _cellDate = this.getMonthCellDate(month);\n\n        if (this.disabledCalendarChanger(_cellDate, 'month')) {\n          classes.push('disabled');\n        }\n\n        return classes;\n      }\n\n      var cellDate = this.getMonthCellDate(month);\n      classes.push(this.getStateClass(cellDate));\n      return classes.concat(this.getClasses(cellDate, this.innerValue, classes.join(' ')));\n    },\n    getYearClasses: function getYearClasses(year) {\n      var classes = [];\n\n      if (this.type !== 'year') {\n        if (this.calendarYear === year) {\n          classes.push('active');\n        }\n\n        var _cellDate2 = this.getYearCellDate(year);\n\n        if (this.disabledCalendarChanger(_cellDate2, 'year')) {\n          classes.push('disabled');\n        }\n\n        return classes;\n      }\n\n      var cellDate = this.getYearCellDate(year);\n      classes.push(this.getStateClass(cellDate));\n      return classes.concat(this.getClasses(cellDate, this.innerValue, classes.join(' ')));\n    },\n    getStateClass: function getStateClass(cellDate) {\n      if (this.isDisabled(cellDate)) {\n        return 'disabled';\n      }\n\n      if (this.innerValue.some(function (v) {\n        return v.getTime() === cellDate.getTime();\n      })) {\n        return 'active';\n      }\n\n      return '';\n    },\n    getWeekState: function getWeekState(row) {\n      if (this.type !== 'week') return '';\n      var start = row[0].getTime();\n      var end = row[6].getTime();\n      var active = this.innerValue.some(function (v) {\n        var time = v.getTime();\n        return time >= start && time <= end;\n      });\n      return active ? \"\".concat(this.prefixClass, \"-active-week\") : '';\n    }\n  },\n  render: function render() {\n    var h = arguments[0];\n    var panel = this.panel,\n        innerCalendar = this.innerCalendar;\n\n    if (panel === 'year') {\n      return h(__vue_component__$7, {\n        \"attrs\": {\n          \"disabledCalendarChanger\": this.disabledCalendarChanger,\n          \"calendar\": innerCalendar,\n          \"getCellClasses\": this.getYearClasses,\n          \"getYearPanel\": this.getYearPanel\n        },\n        \"on\": {\n          \"select\": this.handleSelectYear,\n          \"changecalendar\": this.handleCalendarChange\n        }\n      });\n    }\n\n    if (panel === 'month') {\n      return h(__vue_component__$6, {\n        \"attrs\": {\n          \"disabledCalendarChanger\": this.disabledCalendarChanger,\n          \"calendar\": innerCalendar,\n          \"getCellClasses\": this.getMonthClasses\n        },\n        \"on\": {\n          \"select\": this.handleSelectMonth,\n          \"changepanel\": this.handelPanelChange,\n          \"changecalendar\": this.handleCalendarChange\n        }\n      });\n    }\n\n    return h(__vue_component__$5, {\n      \"attrs\": {\n        \"disabledCalendarChanger\": this.disabledCalendarChanger,\n        \"calendar\": innerCalendar,\n        \"getCellClasses\": this.getDateClasses,\n        \"getRowClasses\": this.getWeekState,\n        \"titleFormat\": this.titleFormat,\n        \"showWeekNumber\": typeof this.showWeekNumber === 'boolean' ? this.showWeekNumber : this.type === 'week'\n      },\n      \"class\": _defineProperty({}, \"\".concat(this.prefixClass, \"-calendar-week-mode\"), this.type === 'week'),\n      \"on\": {\n        \"select\": this.handleSelectDate,\n        \"changepanel\": this.handelPanelChange,\n        \"changecalendar\": this.handleCalendarChange\n      }\n    });\n  }\n};\n\nvar CalendarRange = {\n  name: 'CalendarRange',\n  components: {\n    CalendarPanel: CalendarPanel\n  },\n  provide: function provide() {\n    return {\n      onDateMouseEnter: this.onDateMouseEnter,\n      onDateMouseLeave: this.onDateMouseLeave\n    };\n  },\n  inject: {\n    prefixClass: {\n      default: 'mx'\n    }\n  },\n  props: _objectSpread2({}, CalendarPanel.props),\n  data: function data() {\n    return {\n      innerValue: [],\n      calendars: [],\n      hoveredValue: null\n    };\n  },\n  computed: {\n    // Minimum difference between start and end calendars\n    calendarMinDiff: function calendarMinDiff() {\n      var map = {\n        date: 1,\n        // type:date  min 1 month\n        month: 1 * 12,\n        // type:month min 1 year\n        year: 10 * 12 // type:year  min 10 year\n\n      };\n      return map[this.type] || map.date;\n    },\n    calendarMaxDiff: function calendarMaxDiff() {\n      return Infinity;\n    },\n    defaultValues: function defaultValues() {\n      return Array.isArray(this.defaultValue) ? this.defaultValue : [this.defaultValue, this.defaultValue];\n    }\n  },\n  watch: {\n    value: {\n      immediate: true,\n      handler: function handler() {\n        var _this = this;\n\n        this.innerValue = isValidRangeDate(this.value) ? this.value : [new Date(NaN), new Date(NaN)];\n        var calendars = this.innerValue.map(function (v, i) {\n          return startOfMonth(getValidDate(v, _this.defaultValues[i]));\n        });\n        this.updateCalendars(calendars);\n      }\n    }\n  },\n  methods: {\n    handleSelect: function handleSelect(date, type) {\n      var _this$innerValue = _slicedToArray(this.innerValue, 2),\n          startValue = _this$innerValue[0],\n          endValue = _this$innerValue[1];\n\n      if (isValidDate(startValue) && !isValidDate(endValue)) {\n        if (startValue.getTime() > date.getTime()) {\n          this.innerValue = [date, startValue];\n        } else {\n          this.innerValue = [startValue, date];\n        }\n\n        this.emitDate(this.innerValue, type);\n      } else {\n        this.innerValue = [date, new Date(NaN)];\n      }\n    },\n    onDateMouseEnter: function onDateMouseEnter(cell) {\n      this.hoveredValue = cell;\n    },\n    onDateMouseLeave: function onDateMouseLeave() {\n      this.hoveredValue = null;\n    },\n    emitDate: function emitDate(dates, type) {\n      this.$emit('select', dates, type);\n    },\n    updateStartCalendar: function updateStartCalendar(value) {\n      this.updateCalendars([value, this.calendars[1]], 1);\n    },\n    updateEndCalendar: function updateEndCalendar(value) {\n      this.updateCalendars([this.calendars[0], value], 0);\n    },\n    updateCalendars: function updateCalendars(calendars) {\n      var adjustIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      var gap = this.getCalendarGap(calendars);\n\n      if (gap) {\n        var calendar = new Date(calendars[adjustIndex]);\n        calendar.setMonth(calendar.getMonth() + (adjustIndex === 0 ? -gap : gap));\n        calendars[adjustIndex] = calendar;\n      }\n\n      this.calendars = calendars;\n    },\n    getCalendarGap: function getCalendarGap(calendars) {\n      var _calendars = _slicedToArray(calendars, 2),\n          calendarLeft = _calendars[0],\n          calendarRight = _calendars[1];\n\n      var yearDiff = calendarRight.getFullYear() - calendarLeft.getFullYear();\n      var monthDiff = calendarRight.getMonth() - calendarLeft.getMonth();\n      var diff = yearDiff * 12 + monthDiff;\n      var min = this.calendarMinDiff;\n      var max = this.calendarMaxDiff;\n\n      if (diff < min) {\n        return min - diff;\n      }\n\n      if (diff > max) {\n        return max - diff;\n      }\n\n      return 0;\n    },\n    getRangeClasses: function getRangeClasses(cellDate, currentDates, classnames) {\n      var classes = [].concat(this.getClasses(cellDate, currentDates, classnames));\n      if (/disabled|active/.test(classnames)) return classes;\n\n      var inRange = function inRange(data, range) {\n        var fn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (v) {\n          return v.getTime();\n        };\n        var value = fn(data);\n\n        var _range$map = range.map(fn),\n            _range$map2 = _slicedToArray(_range$map, 2),\n            min = _range$map2[0],\n            max = _range$map2[1];\n\n        if (min > max) {\n          var _ref = [max, min];\n          min = _ref[0];\n          max = _ref[1];\n        }\n\n        return value > min && value < max;\n      };\n\n      if (currentDates.length === 2 && inRange(cellDate, currentDates)) {\n        return classes.concat('in-range');\n      }\n\n      if (currentDates.length === 1 && this.hoveredValue && inRange(cellDate, [currentDates[0], this.hoveredValue])) {\n        return classes.concat('hover-in-range');\n      }\n\n      return classes;\n    }\n  },\n  render: function render() {\n    var _this2 = this;\n\n    var h = arguments[0];\n    var calendarRange = this.calendars.map(function (calendar, index) {\n      var props = _objectSpread2({}, _this2.$props, {\n        calendar: calendar,\n        value: _this2.innerValue,\n        defaultValue: _this2.defaultValues[index],\n        getClasses: _this2.getRangeClasses,\n        // don't update when range is true\n        partialUpdate: false\n      });\n\n      var on = {\n        select: _this2.handleSelect,\n        'update:calendar': index === 0 ? _this2.updateStartCalendar : _this2.updateEndCalendar\n      };\n      return h(\"calendar-panel\", {\n        \"props\": _objectSpread2({}, props),\n        \"on\": _objectSpread2({}, on)\n      });\n    });\n    var prefixClass = this.prefixClass;\n    return h(\"div\", {\n      \"class\": \"\".concat(prefixClass, \"-range-wrapper\")\n    }, [calendarRange]);\n  }\n};\n\nvar scrollBarWidth;\nfunction getScrollbarWidth () {\n  if (typeof window === 'undefined') return 0;\n  if (scrollBarWidth !== undefined) return scrollBarWidth;\n  var outer = document.createElement('div');\n  outer.style.visibility = 'hidden';\n  outer.style.overflow = 'scroll';\n  outer.style.width = '100px';\n  outer.style.position = 'absolute';\n  outer.style.top = '-9999px';\n  document.body.appendChild(outer);\n  var inner = document.createElement('div');\n  inner.style.width = '100%';\n  outer.appendChild(inner);\n  scrollBarWidth = outer.offsetWidth - inner.offsetWidth;\n  outer.parentNode.removeChild(outer);\n  return scrollBarWidth;\n}\n\n//\nvar script$5 = {\n  inject: {\n    prefixClass: {\n      default: 'mx'\n    }\n  },\n  data: function data() {\n    return {\n      scrollbarWidth: 0,\n      thumbTop: '',\n      thumbHeight: ''\n    };\n  },\n  created: function created() {\n    this.scrollbarWidth = getScrollbarWidth();\n    document.addEventListener('mouseup', this.handleDragend);\n  },\n  beforeDestroy: function beforeDestroy() {\n    document.addEventListener('mouseup', this.handleDragend);\n  },\n  mounted: function mounted() {\n    this.$nextTick(this.getThumbSize);\n  },\n  methods: {\n    getThumbSize: function getThumbSize() {\n      var wrap = this.$refs.wrap;\n      if (!wrap) return;\n      var heightPercentage = wrap.clientHeight * 100 / wrap.scrollHeight;\n      this.thumbHeight = heightPercentage < 100 ? \"\".concat(heightPercentage, \"%\") : '';\n    },\n    handleScroll: function handleScroll(evt) {\n      var el = evt.currentTarget;\n      var scrollHeight = el.scrollHeight,\n          scrollTop = el.scrollTop;\n      this.thumbTop = \"\".concat(scrollTop * 100 / scrollHeight, \"%\");\n    },\n    handleDragstart: function handleDragstart(evt) {\n      evt.stopImmediatePropagation();\n      this._draggable = true;\n      var offsetTop = this.$refs.thumb.offsetTop;\n      this._prevY = evt.clientY - offsetTop;\n      document.addEventListener('mousemove', this.handleDraging);\n    },\n    handleDraging: function handleDraging(evt) {\n      if (!this._draggable) return;\n      var clientY = evt.clientY;\n      var wrap = this.$refs.wrap;\n      var scrollHeight = wrap.scrollHeight,\n          clientHeight = wrap.clientHeight;\n      var offsetY = clientY - this._prevY;\n      var top = offsetY * scrollHeight / clientHeight;\n      wrap.scrollTop = top;\n    },\n    handleDragend: function handleDragend() {\n      if (this._draggable) {\n        this._draggable = false;\n        document.removeEventListener('mousemove', this.handleDraging);\n      }\n    }\n  }\n};\n\n/* script */\nvar __vue_script__$5 = script$5;\n/* template */\n\nvar __vue_render__$8 = function __vue_render__() {\n  var _vm = this;\n\n  var _h = _vm.$createElement;\n\n  var _c = _vm._self._c || _h;\n\n  return _c('div', {\n    class: _vm.prefixClass + \"-scrollbar\",\n    style: {\n      position: 'relative',\n      overflow: 'hidden'\n    }\n  }, [_c('div', {\n    ref: \"wrap\",\n    class: _vm.prefixClass + \"-scrollbar-wrap\",\n    style: {\n      marginRight: \"-\" + _vm.scrollbarWidth + \"px\"\n    },\n    on: {\n      \"scroll\": _vm.handleScroll\n    }\n  }, [_vm._t(\"default\")], 2), _vm._v(\" \"), _c('div', {\n    class: _vm.prefixClass + \"-scrollbar-track\"\n  }, [_c('div', {\n    ref: \"thumb\",\n    class: _vm.prefixClass + \"-scrollbar-thumb\",\n    style: {\n      height: _vm.thumbHeight,\n      top: _vm.thumbTop\n    },\n    on: {\n      \"mousedown\": _vm.handleDragstart\n    }\n  })])]);\n};\n\nvar __vue_staticRenderFns__$8 = [];\n/* style */\n\nvar __vue_inject_styles__$8 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$8 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$8 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$8 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$8 = normalizeComponent({\n  render: __vue_render__$8,\n  staticRenderFns: __vue_staticRenderFns__$8\n}, __vue_inject_styles__$8, __vue_script__$5, __vue_scope_id__$8, __vue_is_functional_template__$8, __vue_module_identifier__$8, false, undefined, undefined, undefined);\n\n//\n\nvar padNumber = function padNumber(value) {\n  value = parseInt(value, 10);\n  return value < 10 ? \"0\".concat(value) : \"\".concat(value);\n};\n\nvar generateOptions = function generateOptions(length, step, options) {\n  if (Array.isArray(options)) {\n    return options.filter(function (v) {\n      return v >= 0 && v < length;\n    });\n  }\n\n  if (step <= 0) {\n    step = 1;\n  }\n\n  var arr = [];\n\n  for (var i = 0; i < length; i += step) {\n    arr.push(i);\n  }\n\n  return arr;\n};\n\nvar scrollTo = function scrollTo(element, to) {\n  var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n  // jump to target if duration zero\n  if (duration <= 0) {\n    requestAnimationFrame(function () {\n      element.scrollTop = to;\n    });\n    return;\n  }\n\n  var difference = to - element.scrollTop;\n  var tick = difference / duration * 10;\n  requestAnimationFrame(function () {\n    var scrollTop = element.scrollTop + tick;\n\n    if (scrollTop >= to) {\n      element.scrollTop = to;\n      return;\n    }\n\n    element.scrollTop = scrollTop;\n    scrollTo(element, to, duration - 10);\n  });\n};\n\nvar script$6 = {\n  name: 'ListColumns',\n  components: {\n    ScrollbarVertical: __vue_component__$8\n  },\n  inject: {\n    prefixClass: {\n      default: 'mx'\n    }\n  },\n  props: {\n    date: Date,\n    scrollDuration: {\n      type: Number,\n      default: 100\n    },\n    getClasses: {\n      type: Function,\n      default: function _default() {\n        return [];\n      }\n    },\n    hourOptions: Array,\n    minuteOptions: Array,\n    secondOptions: Array,\n    showHour: {\n      type: Boolean,\n      default: true\n    },\n    showMinute: {\n      type: Boolean,\n      default: true\n    },\n    showSecond: {\n      type: Boolean,\n      default: true\n    },\n    hourStep: {\n      type: Number,\n      default: 1\n    },\n    minuteStep: {\n      type: Number,\n      default: 1\n    },\n    secondStep: {\n      type: Number,\n      default: 1\n    },\n    use12h: {\n      type: Boolean,\n      default: false\n    }\n  },\n  computed: {\n    columns: function columns() {\n      var cols = [];\n      if (this.showHour) cols.push({\n        type: 'hour',\n        list: this.getHoursList()\n      });\n      if (this.showMinute) cols.push({\n        type: 'minute',\n        list: this.getMinutesList()\n      });\n      if (this.showSecond) cols.push({\n        type: 'second',\n        list: this.getSecondsList()\n      });\n      if (this.use12h) cols.push({\n        type: 'ampm',\n        list: this.getAMPMList()\n      });\n      return cols.filter(function (v) {\n        return v.list.length > 0;\n      });\n    }\n  },\n  watch: {\n    date: {\n      handler: function handler() {\n        var _this = this;\n\n        this.$nextTick(function () {\n          _this.scrollToSelected(_this.scrollDuration);\n        });\n      }\n    }\n  },\n  mounted: function mounted() {\n    this.scrollToSelected(0);\n  },\n  methods: {\n    getHoursList: function getHoursList() {\n      var _this2 = this;\n\n      return generateOptions(this.use12h ? 12 : 24, this.hourStep, this.hourOptions).map(function (num) {\n        var date = new Date(_this2.date);\n        var text = padNumber(num);\n\n        if (_this2.use12h) {\n          if (num === 0) {\n            text = '12';\n          }\n\n          if (date.getHours() >= 12) {\n            num += 12;\n          }\n        }\n\n        var value = date.setHours(num);\n        return {\n          value: value,\n          text: text\n        };\n      });\n    },\n    getMinutesList: function getMinutesList() {\n      var _this3 = this;\n\n      return generateOptions(60, this.minuteStep, this.minuteOptions).map(function (num) {\n        var value = new Date(_this3.date).setMinutes(num);\n        return {\n          value: value,\n          text: padNumber(num)\n        };\n      });\n    },\n    getSecondsList: function getSecondsList() {\n      var _this4 = this;\n\n      return generateOptions(60, this.secondStep, this.secondOptions).map(function (num) {\n        var value = new Date(_this4.date).setSeconds(num);\n        return {\n          value: value,\n          text: padNumber(num)\n        };\n      });\n    },\n    getAMPMList: function getAMPMList() {\n      var _this5 = this;\n\n      return ['AM', 'PM'].map(function (text, i) {\n        var date = new Date(_this5.date);\n        var value = date.setHours(date.getHours() % 12 + i * 12);\n        return {\n          text: text,\n          value: value\n        };\n      });\n    },\n    scrollToSelected: function scrollToSelected(duration) {\n      var elements = this.$el.querySelectorAll('.active');\n\n      for (var i = 0; i < elements.length; i++) {\n        var element = elements[i];\n        var scrollElement = getScrollParent(element, this.$el);\n\n        if (scrollElement) {\n          var to = element.offsetTop;\n          scrollTo(scrollElement, to, duration);\n        }\n      }\n    },\n    handleSelect: function handleSelect(evt) {\n      var target = evt.target,\n          currentTarget = evt.currentTarget;\n      if (target.tagName.toUpperCase() !== 'LI') return;\n      var type = currentTarget.getAttribute('data-type');\n      var colIndex = parseInt(currentTarget.getAttribute('data-index'), 10);\n      var cellIndex = parseInt(target.getAttribute('data-index'), 10);\n      var value = this.columns[colIndex].list[cellIndex].value;\n      this.$emit('select', value, type);\n    }\n  }\n};\n\n/* script */\nvar __vue_script__$6 = script$6;\n/* template */\n\nvar __vue_render__$9 = function __vue_render__() {\n  var _vm = this;\n\n  var _h = _vm.$createElement;\n\n  var _c = _vm._self._c || _h;\n\n  return _c('div', {\n    class: _vm.prefixClass + \"-time-columns\"\n  }, _vm._l(_vm.columns, function (col, i) {\n    return _c('scrollbar-vertical', {\n      key: i,\n      class: _vm.prefixClass + \"-time-column\"\n    }, [_c('ul', {\n      class: _vm.prefixClass + \"-time-list\",\n      attrs: {\n        \"data-type\": col.type,\n        \"data-index\": i\n      },\n      on: {\n        \"click\": _vm.handleSelect\n      }\n    }, _vm._l(col.list, function (item, j) {\n      return _c('li', {\n        key: item.value,\n        class: [_vm.prefixClass + \"-time-item\", _vm.getClasses(item.value, col.type)],\n        attrs: {\n          \"data-index\": j\n        }\n      }, [_vm._v(\"\\n        \" + _vm._s(item.text) + \"\\n      \")]);\n    }), 0)]);\n  }), 1);\n};\n\nvar __vue_staticRenderFns__$9 = [];\n/* style */\n\nvar __vue_inject_styles__$9 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$9 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$9 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$9 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$9 = normalizeComponent({\n  render: __vue_render__$9,\n  staticRenderFns: __vue_staticRenderFns__$9\n}, __vue_inject_styles__$9, __vue_script__$6, __vue_scope_id__$9, __vue_is_functional_template__$9, __vue_module_identifier__$9, false, undefined, undefined, undefined);\n\n//\n\nfunction parseOption() {\n  var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  var values = time.split(':');\n\n  if (values.length >= 2) {\n    var hours = parseInt(values[0], 10);\n    var minutes = parseInt(values[1], 10);\n    return {\n      hours: hours,\n      minutes: minutes\n    };\n  }\n\n  return null;\n}\n\nvar scrollTo$1 = function scrollTo(element, to) {\n  if (element) {\n    element.scrollTop = to;\n  }\n};\n\nvar script$7 = {\n  name: 'ListOptions',\n  components: {\n    ScrollbarVertical: __vue_component__$8\n  },\n  inject: {\n    getLocale: {\n      default: function _default() {\n        return getLocale;\n      }\n    },\n    prefixClass: {\n      default: 'mx'\n    }\n  },\n  props: {\n    date: Date,\n    options: {\n      type: [Object, Function],\n      default: function _default() {\n        return [];\n      }\n    },\n    format: {\n      type: String,\n      default: 'HH:mm:ss'\n    },\n    getClasses: {\n      type: Function,\n      default: function _default() {\n        return [];\n      }\n    }\n  },\n  computed: {\n    list: function list() {\n      var result = [];\n      var options = this.options;\n\n      if (typeof options === 'function') {\n        return options() || [];\n      }\n\n      var start = parseOption(options.start);\n      var end = parseOption(options.end);\n      var step = parseOption(options.step);\n      var fmt = options.format || this.format;\n\n      if (start && end && step) {\n        var startMinutes = start.minutes + start.hours * 60;\n        var endMinutes = end.minutes + end.hours * 60;\n        var stepMinutes = step.minutes + step.hours * 60;\n        var len = Math.floor((endMinutes - startMinutes) / stepMinutes);\n\n        for (var i = 0; i <= len; i++) {\n          var timeMinutes = startMinutes + i * stepMinutes;\n          var hours = Math.floor(timeMinutes / 60);\n          var minutes = timeMinutes % 60;\n          var value = new Date(this.date).setHours(hours, minutes, 0);\n          result.push({\n            value: value,\n            text: this.formatDate(value, fmt)\n          });\n        }\n      }\n\n      return result;\n    }\n  },\n  mounted: function mounted() {\n    this.scrollToSelected();\n  },\n  methods: {\n    formatDate: function formatDate(date, fmt) {\n      return format(date, fmt, {\n        locale: this.getLocale().formatLocale\n      });\n    },\n    scrollToSelected: function scrollToSelected() {\n      var element = this.$el.querySelector('.active');\n      if (!element) return;\n      var scrollElement = getScrollParent(element, this.$el);\n      if (!scrollElement) return;\n      var to = element.offsetTop;\n      scrollTo$1(scrollElement, to);\n    },\n    handleSelect: function handleSelect(value) {\n      this.$emit('select', value, 'time');\n    }\n  }\n};\n\n/* script */\nvar __vue_script__$7 = script$7;\n/* template */\n\nvar __vue_render__$a = function __vue_render__() {\n  var _vm = this;\n\n  var _h = _vm.$createElement;\n\n  var _c = _vm._self._c || _h;\n\n  return _c('scrollbar-vertical', _vm._l(_vm.list, function (item) {\n    return _c('div', {\n      key: item.value,\n      class: [_vm.prefixClass + \"-time-option\", _vm.getClasses(item.value)],\n      on: {\n        \"click\": function click($event) {\n          return _vm.handleSelect(item.value);\n        }\n      }\n    }, [_vm._v(\"\\n    \" + _vm._s(item.text) + \"\\n  \")]);\n  }), 0);\n};\n\nvar __vue_staticRenderFns__$a = [];\n/* style */\n\nvar __vue_inject_styles__$a = undefined;\n/* scoped */\n\nvar __vue_scope_id__$a = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$a = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$a = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$a = normalizeComponent({\n  render: __vue_render__$a,\n  staticRenderFns: __vue_staticRenderFns__$a\n}, __vue_inject_styles__$a, __vue_script__$7, __vue_scope_id__$a, __vue_is_functional_template__$a, __vue_module_identifier__$a, false, undefined, undefined, undefined);\n\n//\nvar script$8 = {\n  name: 'TimePanel',\n  components: {\n    ListColumns: __vue_component__$9,\n    ListOptions: __vue_component__$a\n  },\n  inject: {\n    getLocale: {\n      default: function _default() {\n        return getLocale;\n      }\n    },\n    prefixClass: {\n      default: 'mx'\n    }\n  },\n  props: {\n    value: {},\n    defaultValue: {\n      default: function _default() {\n        var date = new Date();\n        date.setHours(0, 0, 0, 0);\n        return date;\n      }\n    },\n    format: {\n      default: 'HH:mm:ss'\n    },\n    timeTitleFormat: {\n      type: String,\n      default: 'YYYY-MM-DD'\n    },\n    showTimeHeader: {\n      type: Boolean,\n      default: false\n    },\n    disabledTime: {\n      type: Function,\n      default: function _default() {\n        return false;\n      }\n    },\n    timePickerOptions: {\n      type: [Object, Function],\n      default: function _default() {\n        return null;\n      }\n    },\n    hourOptions: Array,\n    minuteOptions: Array,\n    secondOptions: Array,\n    hourStep: {\n      type: Number,\n      default: 1\n    },\n    minuteStep: {\n      type: Number,\n      default: 1\n    },\n    secondStep: {\n      type: Number,\n      default: 1\n    },\n    showHour: {\n      type: Boolean,\n      default: undefined\n    },\n    showMinute: {\n      type: Boolean,\n      default: undefined\n    },\n    showSecond: {\n      type: Boolean,\n      default: undefined\n    },\n    use12h: {\n      type: Boolean,\n      default: undefined\n    },\n    scrollDuration: {\n      type: Number,\n      default: 100\n    }\n  },\n  data: function data() {\n    return {\n      innerValue: getValidDate(this.value, this.defaultValue)\n    };\n  },\n  computed: {\n    title: function title() {\n      var titleFormat = this.timeTitleFormat;\n      var date = new Date(this.innerValue);\n      return this.formatDate(date, titleFormat);\n    },\n    innerForamt: function innerForamt() {\n      return typeof this.format === 'string' ? this.format : 'HH:mm:ss';\n    },\n    ShowHourMinuteSecondAMPM: function ShowHourMinuteSecondAMPM() {\n      var _this = this;\n\n      var fmt = this.innerForamt;\n      var defaultProps = {\n        showHour: /[HhKk]/.test(fmt),\n        showMinute: /m/.test(fmt),\n        showSecond: /s/.test(fmt),\n        use12h: /a/i.test(fmt)\n      };\n      var obj = {};\n      Object.keys(defaultProps).forEach(function (key) {\n        obj[key] = typeof _this[key] === 'boolean' ? _this[key] : defaultProps[key];\n      });\n      return obj;\n    }\n  },\n  watch: {\n    value: {\n      immediate: true,\n      handler: function handler() {\n        this.innerValue = getValidDate(this.value, this.defaultValue);\n      }\n    }\n  },\n  methods: {\n    formatDate: function formatDate(date, fmt) {\n      return format(date, fmt, {\n        locale: this.getLocale().formatLocale\n      });\n    },\n    isDisabledTime: function isDisabledTime(value) {\n      return this.disabledTime(new Date(value));\n    },\n    isDisabledHour: function isDisabledHour(date) {\n      var value = new Date(date);\n      return this.isDisabledTime(value) && this.isDisabledTime(value.setMinutes(0, 0, 0)) && this.isDisabledTime(value.setMinutes(59, 59, 999));\n    },\n    isDisabledMinute: function isDisabledMinute(date) {\n      var value = new Date(date);\n      return this.isDisabledTime(value) && this.isDisabledTime(value.setSeconds(0, 0)) && this.isDisabledTime(value.setSeconds(59, 999));\n    },\n    isDisabledAMPM: function isDisabledAMPM(date) {\n      var value = new Date(date);\n      var minHour = value.getHours() < 12 ? 0 : 12;\n      var maxHour = minHour + 11;\n      return this.isDisabledTime(value) && this.isDisabledTime(value.setHours(minHour, 0, 0, 0)) && this.isDisabledTime(value.setHours(maxHour, 59, 59, 999));\n    },\n    isDisabled: function isDisabled(date, type) {\n      if (type === 'hour') {\n        return this.isDisabledHour(date);\n      }\n\n      if (type === 'minute') {\n        return this.isDisabledMinute(date);\n      }\n\n      if (type === 'ampm') {\n        return this.isDisabledAMPM(date);\n      }\n\n      return this.isDisabledTime(date);\n    },\n    handleSelect: function handleSelect(value, type) {\n      var date = new Date(value);\n\n      if (!this.isDisabled(value, type)) {\n        this.innerValue = date;\n\n        if (!this.isDisabledTime(date)) {\n          this.$emit('select', date, type);\n        }\n      }\n    },\n    handleClickTitle: function handleClickTitle() {\n      this.$emit('clicktitle');\n    },\n    getClasses: function getClasses(value, type) {\n      var cellDate = new Date(value);\n\n      if (this.isDisabled(value, type)) {\n        return 'disabled';\n      }\n\n      if (cellDate.getTime() === this.innerValue.getTime()) {\n        return 'active';\n      }\n\n      return '';\n    }\n  }\n};\n\n/* script */\nvar __vue_script__$8 = script$8;\n/* template */\n\nvar __vue_render__$b = function __vue_render__() {\n  var _vm = this;\n\n  var _h = _vm.$createElement;\n\n  var _c = _vm._self._c || _h;\n\n  return _c('div', {\n    class: _vm.prefixClass + \"-time\"\n  }, [_vm.showTimeHeader ? _c('div', {\n    class: _vm.prefixClass + \"-time-header\"\n  }, [_c('button', {\n    class: _vm.prefixClass + \"-btn \" + _vm.prefixClass + \"-btn-text \" + _vm.prefixClass + \"-time-header-title\",\n    attrs: {\n      \"type\": \"button\"\n    },\n    on: {\n      \"click\": _vm.handleClickTitle\n    }\n  }, [_vm._v(\"\\n      \" + _vm._s(_vm.title) + \"\\n    \")])]) : _vm._e(), _vm._v(\" \"), _c('div', {\n    class: _vm.prefixClass + \"-time-content\"\n  }, [_vm.timePickerOptions ? _c('list-options', {\n    attrs: {\n      \"date\": _vm.innerValue,\n      \"get-classes\": _vm.getClasses,\n      \"options\": _vm.timePickerOptions,\n      \"format\": _vm.innerForamt\n    },\n    on: {\n      \"select\": _vm.handleSelect\n    }\n  }) : _c('list-columns', _vm._b({\n    attrs: {\n      \"date\": _vm.innerValue,\n      \"get-classes\": _vm.getClasses,\n      \"hour-options\": _vm.hourOptions,\n      \"minute-options\": _vm.minuteOptions,\n      \"second-options\": _vm.secondOptions,\n      \"hour-step\": _vm.hourStep,\n      \"minute-step\": _vm.minuteStep,\n      \"second-step\": _vm.secondStep,\n      \"scroll-duration\": _vm.scrollDuration\n    },\n    on: {\n      \"select\": _vm.handleSelect\n    }\n  }, 'list-columns', _vm.ShowHourMinuteSecondAMPM, false))], 1)]);\n};\n\nvar __vue_staticRenderFns__$b = [];\n/* style */\n\nvar __vue_inject_styles__$b = undefined;\n/* scoped */\n\nvar __vue_scope_id__$b = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$b = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$b = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$b = normalizeComponent({\n  render: __vue_render__$b,\n  staticRenderFns: __vue_staticRenderFns__$b\n}, __vue_inject_styles__$b, __vue_script__$8, __vue_scope_id__$b, __vue_is_functional_template__$b, __vue_module_identifier__$b, false, undefined, undefined, undefined);\n\nvar TimeRange = {\n  name: 'TimeRange',\n  inject: {\n    prefixClass: {\n      default: 'mx'\n    }\n  },\n  props: _objectSpread2({}, __vue_component__$b.props),\n  data: function data() {\n    return {\n      startValue: new Date(NaN),\n      endValue: new Date(NaN)\n    };\n  },\n  watch: {\n    value: {\n      immediate: true,\n      handler: function handler() {\n        if (isValidRangeDate(this.value)) {\n          var _this$value = _slicedToArray(this.value, 2),\n              startValue = _this$value[0],\n              endValue = _this$value[1];\n\n          this.startValue = startValue;\n          this.endValue = endValue;\n        } else {\n          this.startValue = new Date(NaN);\n          this.endValue = new Date(NaN);\n        }\n      }\n    }\n  },\n  methods: {\n    emitChange: function emitChange(type, index) {\n      var date = [this.startValue, this.endValue];\n      this.$emit('select', date, type === 'time' ? 'time-range' : type, index);\n    },\n    handleSelectStart: function handleSelectStart(date, type) {\n      this.startValue = date; // check the NaN\n\n      if (!(this.endValue.getTime() >= date.getTime())) {\n        this.endValue = date;\n      }\n\n      this.emitChange(type, 0);\n    },\n    handleSelectEnd: function handleSelectEnd(date, type) {\n      // check the NaN\n      this.endValue = date;\n\n      if (!(this.startValue.getTime() <= date.getTime())) {\n        this.startValue = date;\n      }\n\n      this.emitChange(type, 1);\n    },\n    disabledStartTime: function disabledStartTime(date) {\n      return this.disabledTime(date, 0);\n    },\n    disabledEndTime: function disabledEndTime(date) {\n      return date.getTime() < this.startValue.getTime() || this.disabledTime(date, 1);\n    }\n  },\n  render: function render() {\n    var h = arguments[0];\n    var defaultValues = Array.isArray(this.defaultValue) ? this.defaultValue : [this.defaultValue, this.defaultValue];\n    var prefixClass = this.prefixClass;\n    return h(\"div\", {\n      \"class\": \"\".concat(prefixClass, \"-range-wrapper\")\n    }, [h(__vue_component__$b, {\n      \"props\": _objectSpread2({}, _objectSpread2({}, this.$props, {\n        value: this.startValue,\n        defaultValue: defaultValues[0],\n        disabledTime: this.disabledStartTime\n      })),\n      \"on\": _objectSpread2({}, _objectSpread2({}, this.$listeners, {\n        select: this.handleSelectStart\n      }))\n    }), h(__vue_component__$b, {\n      \"props\": _objectSpread2({}, _objectSpread2({}, this.$props, {\n        value: this.endValue,\n        defaultValue: defaultValues[1],\n        disabledTime: this.disabledEndTime\n      })),\n      \"on\": _objectSpread2({}, _objectSpread2({}, this.$listeners, {\n        select: this.handleSelectEnd\n      }))\n    })]);\n  }\n};\n\nvar DatetimePanel = {\n  name: 'DatetimePanel',\n  inject: {\n    prefixClass: {\n      default: 'mx'\n    }\n  },\n  emits: ['select', 'update:show-time-panel'],\n  props: _objectSpread2({}, CalendarPanel.props, {}, __vue_component__$b.props, {\n    showTimePanel: {\n      type: Boolean,\n      default: undefined\n    }\n  }),\n  data: function data() {\n    return {\n      defaultTimeVisible: false,\n      currentValue: this.value\n    };\n  },\n  computed: {\n    timeVisible: function timeVisible() {\n      return typeof this.showTimePanel === 'boolean' ? this.showTimePanel : this.defaultTimeVisible;\n    }\n  },\n  watch: {\n    value: function value(val) {\n      this.currentValue = val;\n    }\n  },\n  methods: {\n    closeTimePanel: function closeTimePanel() {\n      this.defaultTimeVisible = false;\n      this.$emit('update:show-time-panel', false);\n    },\n    openTimePanel: function openTimePanel() {\n      this.defaultTimeVisible = true;\n      this.$emit('update:show-time-panel', true);\n    },\n    emitDate: function emitDate(date, type) {\n      this.$emit('select', date, type);\n    },\n    handleSelect: function handleSelect(date, type) {\n      if (type === 'date') {\n        this.openTimePanel();\n      }\n\n      var datetime = assignTime(date, getValidDate(this.value, this.defaultValue));\n\n      if (this.disabledTime(new Date(datetime))) {\n        // set the time of defalutValue;\n        datetime = assignTime(date, this.defaultValue);\n\n        if (this.disabledTime(new Date(datetime))) {\n          // if disabled don't emit date\n          this.currentValue = datetime;\n          return;\n        }\n      }\n\n      this.emitDate(datetime, type);\n    }\n  },\n  render: function render() {\n    var h = arguments[0];\n    var calendarProps = {\n      props: _objectSpread2({}, pick(this.$props, Object.keys(CalendarPanel.props)), {\n        type: 'date',\n        value: this.currentValue\n      }),\n      on: {\n        select: this.handleSelect\n      }\n    };\n    var timeProps = {\n      props: _objectSpread2({}, pick(this.$props, Object.keys(__vue_component__$b.props)), {\n        showTimeHeader: true,\n        value: this.currentValue\n      }),\n      on: {\n        select: this.emitDate,\n        clicktitle: this.closeTimePanel\n      }\n    };\n    var prefixClass = this.prefixClass;\n    return h(\"div\", [h(CalendarPanel, helper([{}, calendarProps])), this.timeVisible && h(__vue_component__$b, helper([{\n      \"class\": \"\".concat(prefixClass, \"-calendar-time\")\n    }, timeProps]))]);\n  }\n};\n\nvar DatetimeRange = {\n  name: 'DatetimeRange',\n  inject: {\n    prefixClass: {\n      default: 'mx'\n    }\n  },\n  emits: ['select', 'update:show-time-panel'],\n  props: _objectSpread2({}, CalendarRange.props, {}, TimeRange.props, {\n    showTimePanel: {\n      type: Boolean,\n      default: undefined\n    }\n  }),\n  data: function data() {\n    return {\n      defaultTimeVisible: false,\n      currentValue: this.value\n    };\n  },\n  computed: {\n    timeVisible: function timeVisible() {\n      return typeof this.showTimePanel === 'boolean' ? this.showTimePanel : this.defaultTimeVisible;\n    }\n  },\n  watch: {\n    value: function value(val) {\n      this.currentValue = val;\n    }\n  },\n  methods: {\n    closeTimePanel: function closeTimePanel() {\n      this.defaultTimeVisible = false;\n      this.$emit('update:show-time-panel', false);\n    },\n    openTimePanel: function openTimePanel() {\n      this.defaultTimeVisible = true;\n      this.$emit('update:show-time-panel', true);\n    },\n    emitDate: function emitDate(dates, type) {\n      this.$emit('select', dates, type);\n    },\n    handleSelect: function handleSelect(dates, type) {\n      var _this = this;\n\n      if (type === 'date') {\n        this.openTimePanel();\n      }\n\n      var defaultValues = Array.isArray(this.defaultValue) ? this.defaultValue : [this.defaultValue, this.defaultValue];\n      var datetimes = dates.map(function (date, i) {\n        var time = isValidRangeDate(_this.value) ? _this.value[i] : defaultValues[i];\n        return assignTime(date, time);\n      });\n\n      if (datetimes[1].getTime() < datetimes[0].getTime()) {\n        datetimes = [datetimes[0], datetimes[0]];\n      }\n\n      if (datetimes.some(this.disabledTime)) {\n        datetimes = dates.map(function (date, i) {\n          return assignTime(date, defaultValues[i]);\n        });\n\n        if (datetimes.some(this.disabledTime)) {\n          this.currentValue = datetimes;\n          return;\n        }\n      }\n\n      this.emitDate(datetimes, type);\n    }\n  },\n  render: function render() {\n    var h = arguments[0];\n    var calendarProps = {\n      props: _objectSpread2({}, pick(this.$props, Object.keys(CalendarRange.props)), {\n        type: 'date',\n        value: this.currentValue\n      }),\n      on: {\n        select: this.handleSelect\n      }\n    };\n    var timeProps = {\n      props: _objectSpread2({}, pick(this.$props, Object.keys(TimeRange.props)), {\n        value: this.currentValue,\n        showTimeHeader: true\n      }),\n      on: {\n        select: this.emitDate,\n        clicktitle: this.closeTimePanel\n      }\n    };\n    var prefixClass = this.prefixClass;\n    return h(\"div\", [h(CalendarRange, helper([{}, calendarProps])), this.timeVisible && h(TimeRange, helper([{\n      \"class\": \"\".concat(prefixClass, \"-calendar-time\")\n    }, timeProps]))]);\n  }\n};\n\nvar componentMap = {\n  default: CalendarPanel,\n  time: __vue_component__$b,\n  datetime: DatetimePanel\n};\nvar componentRangeMap = {\n  default: CalendarRange,\n  time: TimeRange,\n  datetime: DatetimeRange\n};\nvar DatePicker = {\n  name: 'DatePicker',\n  provide: function provide() {\n    var _this = this;\n\n    return {\n      // make locale reactive\n      getLocale: function getLocale() {\n        return _this.locale;\n      },\n      getWeek: this.getWeek,\n      prefixClass: this.prefixClass,\n      dispatchDatePicker: this.$emit.bind(this)\n    };\n  },\n  props: _objectSpread2({}, DatetimePanel.props, {\n    value: {},\n    valueType: {\n      type: String,\n      default: 'date' // date, format, timestamp, or token like 'YYYY-MM-DD'\n\n    },\n    type: {\n      type: String,\n      // ['date', 'datetime', 'time', 'year', 'month', 'week']\n      default: 'date'\n    },\n    format: {\n      type: String\n    },\n    formatter: {\n      type: Object\n    },\n    range: {\n      type: Boolean,\n      default: false\n    },\n    multiple: {\n      type: Boolean,\n      default: false\n    },\n    rangeSeparator: {\n      type: String\n    },\n    lang: {\n      type: [String, Object]\n    },\n    placeholder: {\n      type: String,\n      default: ''\n    },\n    editable: {\n      type: Boolean,\n      default: true\n    },\n    disabled: {\n      type: Boolean,\n      default: false\n    },\n    clearable: {\n      type: Boolean,\n      default: true\n    },\n    prefixClass: {\n      type: String,\n      default: 'mx'\n    },\n    inputClass: {},\n    inputAttr: {\n      type: Object,\n      default: function _default() {\n        return {};\n      }\n    },\n    appendToBody: {\n      type: Boolean,\n      default: true\n    },\n    open: {\n      type: Boolean,\n      default: undefined\n    },\n    popupClass: {},\n    popupStyle: {\n      type: Object,\n      default: function _default() {\n        return {};\n      }\n    },\n    inline: {\n      type: Boolean,\n      default: false\n    },\n    confirm: {\n      type: Boolean,\n      default: false\n    },\n    confirmText: {\n      type: String,\n      default: 'OK'\n    },\n    renderInputText: {\n      type: Function\n    },\n    shortcuts: {\n      type: Array,\n      validator: function validator(value) {\n        return Array.isArray(value) && value.every(function (v) {\n          return isObject(v) && typeof v.text === 'string' && typeof v.onClick === 'function';\n        });\n      },\n      default: function _default() {\n        return [];\n      }\n    }\n  }),\n  data: function data() {\n    return {\n      // cache the innervalue, wait to confirm\n      currentValue: null,\n      userInput: null,\n      defaultOpen: false,\n      mouseInInput: false\n    };\n  },\n  computed: {\n    popupVisible: function popupVisible() {\n      return !this.disabled && (typeof this.open === 'boolean' ? this.open : this.defaultOpen);\n    },\n    innerRangeSeparator: function innerRangeSeparator() {\n      return this.rangeSeparator || (this.multiple ? ',' : ' ~ ');\n    },\n    innerFormat: function innerFormat() {\n      var map = {\n        date: 'YYYY-MM-DD',\n        datetime: 'YYYY-MM-DD HH:mm:ss',\n        year: 'YYYY',\n        month: 'YYYY-MM',\n        time: 'HH:mm:ss',\n        week: 'w'\n      };\n      return this.format || map[this.type] || map.date;\n    },\n    innerValue: function innerValue() {\n      var value = this.value;\n\n      if (this.validMultipleType) {\n        value = Array.isArray(value) ? value : [];\n        return value.map(this.value2date);\n      }\n\n      if (this.range) {\n        value = Array.isArray(value) ? value.slice(0, 2) : [null, null];\n        return value.map(this.value2date);\n      }\n\n      return this.value2date(value);\n    },\n    text: function text() {\n      var _this2 = this;\n\n      if (this.userInput !== null) {\n        return this.userInput;\n      }\n\n      if (typeof this.renderInputText === 'function') {\n        return this.renderInputText(this.innerValue);\n      }\n\n      if (!this.isValidValue(this.innerValue)) {\n        return '';\n      }\n\n      if (Array.isArray(this.innerValue)) {\n        return this.innerValue.map(function (v) {\n          return _this2.formatDate(v);\n        }).join(this.innerRangeSeparator);\n      }\n\n      return this.formatDate(this.innerValue);\n    },\n    showClearIcon: function showClearIcon() {\n      return !this.disabled && this.clearable && this.text && this.mouseInInput;\n    },\n    locale: function locale() {\n      if (isObject(this.lang)) {\n        return mergeDeep(getLocale(), this.lang);\n      }\n\n      return getLocale(this.lang);\n    },\n    validMultipleType: function validMultipleType() {\n      var types = ['date', 'month', 'year'];\n      return this.multiple && !this.range && types.indexOf(this.type) !== -1;\n    }\n  },\n  watch: {\n    innerValue: {\n      immediate: true,\n      handler: function handler(val) {\n        this.currentValue = val;\n      }\n    },\n    popupVisible: {\n      handler: function handler(val) {\n        if (val) {\n          this.currentValue = this.innerValue;\n        }\n      }\n    }\n  },\n  created: function created() {\n    if (_typeof(this.format) === 'object') {\n      console.warn(\"[vue2-datepicker]: The prop `format` don't support Object any more. You can use the new prop `formatter` to replace it\");\n    }\n  },\n  methods: {\n    handleMouseEnter: function handleMouseEnter() {\n      this.mouseInInput = true;\n    },\n    handleMouseLeave: function handleMouseLeave() {\n      this.mouseInInput = false;\n    },\n    handleClickOutSide: function handleClickOutSide(evt) {\n      var target = evt.target;\n\n      if (!this.$el.contains(target)) {\n        this.closePopup();\n      }\n    },\n    getFormatter: function getFormatter(key) {\n      return isObject(this.formatter) && this.formatter[key] || isObject(this.format) && this.format[key];\n    },\n    getWeek: function getWeek$1(date, options) {\n      if (typeof this.getFormatter('getWeek') === 'function') {\n        return this.getFormatter('getWeek')(date, options);\n      }\n\n      return getWeek(date, options);\n    },\n    parseDate: function parseDate(value, fmt) {\n      fmt = fmt || this.innerFormat;\n\n      if (typeof this.getFormatter('parse') === 'function') {\n        return this.getFormatter('parse')(value, fmt);\n      }\n\n      var backupDate = new Date();\n      return parse(value, fmt, {\n        locale: this.locale.formatLocale,\n        backupDate: backupDate\n      });\n    },\n    formatDate: function formatDate(date, fmt) {\n      fmt = fmt || this.innerFormat;\n\n      if (typeof this.getFormatter('stringify') === 'function') {\n        return this.getFormatter('stringify')(date, fmt);\n      }\n\n      return format(date, fmt, {\n        locale: this.locale.formatLocale\n      });\n    },\n    // transform the outer value to inner date\n    value2date: function value2date(value) {\n      switch (this.valueType) {\n        case 'date':\n          return value instanceof Date ? new Date(value.getTime()) : new Date(NaN);\n\n        case 'timestamp':\n          return typeof value === 'number' ? new Date(value) : new Date(NaN);\n\n        case 'format':\n          return typeof value === 'string' ? this.parseDate(value) : new Date(NaN);\n\n        default:\n          return typeof value === 'string' ? this.parseDate(value, this.valueType) : new Date(NaN);\n      }\n    },\n    // transform the inner date to outer value\n    date2value: function date2value(date) {\n      if (!isValidDate(date)) return null;\n\n      switch (this.valueType) {\n        case 'date':\n          return date;\n\n        case 'timestamp':\n          return date.getTime();\n\n        case 'format':\n          return this.formatDate(date);\n\n        default:\n          return this.formatDate(date, this.valueType);\n      }\n    },\n    emitValue: function emitValue(date, type) {\n      var close = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      // fix IE11/10 trigger input event when input is focused. (placeholder !== '')\n      this.userInput = null;\n      var value = Array.isArray(date) ? date.map(this.date2value) : this.date2value(date);\n      this.$emit('input', value);\n      this.$emit('change', value, type);\n\n      if (close) {\n        this.closePopup();\n      }\n\n      return value;\n    },\n    isValidValue: function isValidValue(value) {\n      if (this.validMultipleType) {\n        return isValidDates(value);\n      }\n\n      if (this.range) {\n        return isValidRangeDate(value);\n      }\n\n      return isValidDate(value);\n    },\n    isValidValueAndNotDisabled: function isValidValueAndNotDisabled(value) {\n      if (!this.isValidValue(value)) {\n        return false;\n      }\n\n      var disabledDate = typeof this.disabledDate === 'function' ? this.disabledDate : function () {\n        return false;\n      };\n      var disabledTime = typeof this.disabledTime === 'function' ? this.disabledTime : function () {\n        return false;\n      };\n\n      if (!Array.isArray(value)) {\n        value = [value];\n      }\n\n      return value.every(function (v) {\n        return !disabledDate(v) && !disabledTime(v);\n      });\n    },\n    handleMultipleDates: function handleMultipleDates(date, dates) {\n      if (this.validMultipleType && dates) {\n        var nextDates = dates.filter(function (v) {\n          return v.getTime() !== date.getTime();\n        });\n\n        if (nextDates.length === dates.length) {\n          nextDates.push(date);\n        }\n\n        return nextDates;\n      }\n\n      return date;\n    },\n    handleSelectDate: function handleSelectDate(val, type, dates) {\n      val = this.handleMultipleDates(val, dates);\n\n      if (this.confirm) {\n        this.currentValue = val;\n      } else {\n        this.emitValue(val, type, // this.type === 'datetime', click the time should close popup\n        !this.validMultipleType && (type === this.type || type === 'time'));\n      }\n    },\n    clear: function clear() {\n      this.emitValue(this.range ? [null, null] : null);\n      this.$emit('clear');\n    },\n    handleClear: function handleClear(evt) {\n      evt.stopPropagation();\n      this.clear();\n    },\n    handleConfirmDate: function handleConfirmDate() {\n      var value = this.emitValue(this.currentValue);\n      this.$emit('confirm', value);\n    },\n    handleSelectShortcut: function handleSelectShortcut(evt) {\n      var index = evt.currentTarget.getAttribute('data-index');\n      var item = this.shortcuts[parseInt(index, 10)];\n\n      if (isObject(item) && typeof item.onClick === 'function') {\n        var date = item.onClick(this);\n\n        if (date) {\n          this.emitValue(date);\n        }\n      }\n    },\n    openPopup: function openPopup(evt) {\n      if (this.popupVisible || this.disabled) return;\n      this.defaultOpen = true;\n      this.$emit('open', evt);\n      this.$emit('update:open', true);\n    },\n    closePopup: function closePopup() {\n      if (!this.popupVisible) return;\n      this.defaultOpen = false;\n      this.$emit('close');\n      this.$emit('update:open', false);\n    },\n    blur: function blur() {\n      // when use slot input\n      if (this.$refs.input) {\n        this.$refs.input.blur();\n      }\n    },\n    focus: function focus() {\n      if (this.$refs.input) {\n        this.$refs.input.focus();\n      }\n    },\n    handleInputChange: function handleInputChange() {\n      var _this3 = this;\n\n      if (!this.editable || this.userInput === null) return;\n      var text = this.userInput.trim();\n      this.userInput = null;\n\n      if (text === '') {\n        this.clear();\n        return;\n      }\n\n      var date;\n\n      if (this.validMultipleType) {\n        date = text.split(this.innerRangeSeparator).map(function (v) {\n          return _this3.parseDate(v.trim());\n        });\n      } else if (this.range) {\n        var arr = text.split(this.innerRangeSeparator);\n\n        if (arr.length !== 2) {\n          // Maybe the separator during the day is the same as the separator for the date\n          // eg: 2019-10-09-2020-01-02\n          arr = text.split(this.innerRangeSeparator.trim());\n        }\n\n        date = arr.map(function (v) {\n          return _this3.parseDate(v.trim());\n        });\n      } else {\n        date = this.parseDate(text);\n      }\n\n      if (this.isValidValueAndNotDisabled(date)) {\n        this.emitValue(date);\n        this.blur();\n      } else {\n        this.$emit('input-error', text);\n      }\n    },\n    handleInputInput: function handleInputInput(evt) {\n      // slot input v-model\n      this.userInput = typeof evt === 'string' ? evt : evt.target.value;\n    },\n    handleInputKeydown: function handleInputKeydown(evt) {\n      var keyCode = evt.keyCode; // Tab 9 or Enter 13\n\n      if (keyCode === 9) {\n        this.closePopup();\n      } else if (keyCode === 13) {\n        this.handleInputChange();\n      }\n    },\n    handleInputBlur: function handleInputBlur(evt) {\n      // tab close\n      this.$emit('blur', evt);\n    },\n    handleInputFocus: function handleInputFocus(evt) {\n      this.openPopup(evt);\n      this.$emit('focus', evt);\n    },\n    hasSlot: function hasSlot(name) {\n      return !!(this.$slots[name] || this.$scopedSlots[name]);\n    },\n    renderSlot: function renderSlot(name, fallback, props) {\n      var slotFn = this.$scopedSlots[name];\n\n      if (slotFn) {\n        return slotFn(props) || fallback;\n      }\n\n      return this.$slots[name] || fallback;\n    },\n    renderInput: function renderInput() {\n      var h = this.$createElement;\n      var prefixClass = this.prefixClass;\n\n      var props = _objectSpread2({\n        name: 'date',\n        type: 'text',\n        autocomplete: 'off',\n        value: this.text,\n        class: this.inputClass || \"\".concat(this.prefixClass, \"-input\"),\n        readonly: !this.editable,\n        disabled: this.disabled,\n        placeholder: this.placeholder\n      }, this.inputAttr);\n\n      var value = props.value,\n          className = props.class,\n          attrs = _objectWithoutProperties(props, [\"value\", \"class\"]);\n\n      var events = {\n        keydown: this.handleInputKeydown,\n        focus: this.handleInputFocus,\n        blur: this.handleInputBlur,\n        input: this.handleInputInput,\n        change: this.handleInputChange\n      };\n      var input = this.renderSlot('input', h(\"input\", {\n        \"domProps\": {\n          \"value\": value\n        },\n        \"class\": className,\n        \"attrs\": _objectSpread2({}, attrs),\n        \"on\": _objectSpread2({}, events),\n        \"ref\": \"input\"\n      }), {\n        props: props,\n        events: events\n      });\n      var calendarIcon = this.type === 'time' ? h(__vue_component__$2) : h(__vue_component__$1); // remove touchstart event to avoid opens the popup while scrolling in mobile #469\n\n      return h(\"div\", {\n        \"class\": \"\".concat(prefixClass, \"-input-wrapper\"),\n        \"on\": {\n          \"mouseenter\": this.handleMouseEnter,\n          \"mouseleave\": this.handleMouseLeave,\n          \"click\": this.openPopup\n        },\n        \"ref\": \"inputWrapper\"\n      }, [input, this.showClearIcon ? h(\"i\", {\n        \"class\": \"\".concat(prefixClass, \"-icon-clear\"),\n        \"on\": {\n          \"click\": this.handleClear\n        }\n      }, [this.renderSlot('icon-clear', h(__vue_component__$3))]) : h(\"i\", {\n        \"class\": \"\".concat(prefixClass, \"-icon-calendar\")\n      }, [this.renderSlot('icon-calendar', calendarIcon)])]);\n    },\n    renderContent: function renderContent() {\n      var h = this.$createElement;\n      var map = this.range ? componentRangeMap : componentMap;\n      var Component = map[this.type] || map.default;\n\n      var props = _objectSpread2({}, pick(this.$props, Object.keys(Component.props)), {\n        value: this.currentValue\n      });\n\n      var on = _objectSpread2({}, pick(this.$listeners, Component.emits || []), {\n        select: this.handleSelectDate\n      });\n\n      var content = h(Component, helper([{}, {\n        props: props,\n        on: on,\n        ref: 'picker'\n      }]));\n      return h(\"div\", {\n        \"class\": \"\".concat(this.prefixClass, \"-datepicker-body\")\n      }, [this.renderSlot('content', content, {\n        value: this.currentValue,\n        emit: this.handleSelectDate\n      })]);\n    },\n    renderSidebar: function renderSidebar() {\n      var _this4 = this;\n\n      var h = this.$createElement;\n      var prefixClass = this.prefixClass;\n      return h(\"div\", {\n        \"class\": \"\".concat(prefixClass, \"-datepicker-sidebar\")\n      }, [this.renderSlot('sidebar', null, {\n        value: this.currentValue,\n        emit: this.handleSelectDate\n      }), this.shortcuts.map(function (v, i) {\n        return h(\"button\", {\n          \"key\": i,\n          \"attrs\": {\n            \"data-index\": i,\n            \"type\": \"button\"\n          },\n          \"class\": \"\".concat(prefixClass, \"-btn \").concat(prefixClass, \"-btn-text \").concat(prefixClass, \"-btn-shortcut\"),\n          \"on\": {\n            \"click\": _this4.handleSelectShortcut\n          }\n        }, [v.text]);\n      })]);\n    },\n    renderHeader: function renderHeader() {\n      var h = this.$createElement;\n      return h(\"div\", {\n        \"class\": \"\".concat(this.prefixClass, \"-datepicker-header\")\n      }, [this.renderSlot('header', null, {\n        value: this.currentValue,\n        emit: this.handleSelectDate\n      })]);\n    },\n    renderFooter: function renderFooter() {\n      var h = this.$createElement;\n      var prefixClass = this.prefixClass;\n      return h(\"div\", {\n        \"class\": \"\".concat(prefixClass, \"-datepicker-footer\")\n      }, [this.renderSlot('footer', null, {\n        value: this.currentValue,\n        emit: this.handleSelectDate\n      }), this.confirm ? h(\"button\", {\n        \"attrs\": {\n          \"type\": \"button\"\n        },\n        \"class\": \"\".concat(prefixClass, \"-btn \").concat(prefixClass, \"-datepicker-btn-confirm\"),\n        \"on\": {\n          \"click\": this.handleConfirmDate\n        }\n      }, [this.confirmText]) : null]);\n    }\n  },\n  render: function render() {\n    var _class;\n\n    var h = arguments[0];\n    var prefixClass = this.prefixClass,\n        inline = this.inline,\n        disabled = this.disabled;\n    var sidedar = this.hasSlot('sidebar') || this.shortcuts.length ? this.renderSidebar() : null;\n    var content = h(\"div\", {\n      \"class\": \"\".concat(prefixClass, \"-datepicker-content\")\n    }, [this.hasSlot('header') ? this.renderHeader() : null, this.renderContent(), this.hasSlot('footer') || this.confirm ? this.renderFooter() : null]);\n    return h(\"div\", {\n      \"class\": (_class = {}, _defineProperty(_class, \"\".concat(prefixClass, \"-datepicker\"), true), _defineProperty(_class, \"\".concat(prefixClass, \"-datepicker-range\"), this.range), _defineProperty(_class, \"\".concat(prefixClass, \"-datepicker-inline\"), inline), _defineProperty(_class, \"disabled\", disabled), _class)\n    }, [!inline ? this.renderInput() : null, !inline ? h(__vue_component__, {\n      \"ref\": \"popup\",\n      \"class\": this.popupClass,\n      \"style\": this.popupStyle,\n      \"attrs\": {\n        \"visible\": this.popupVisible,\n        \"appendToBody\": this.appendToBody\n      },\n      \"on\": {\n        \"clickoutside\": this.handleClickOutSide\n      }\n    }, [sidedar, content]) : h(\"div\", {\n      \"class\": \"\".concat(prefixClass, \"-datepicker-main\")\n    }, [sidedar, content])]);\n  }\n};\n\nDatePicker.locale = locale;\n\nDatePicker.install = function install(Vue) {\n  Vue.component(DatePicker.name, DatePicker);\n};\n\nif (typeof window !== 'undefined' && window.Vue) {\n  DatePicker.install(window.Vue);\n}\n\n_extends(DatePicker, {\n  CalendarPanel: CalendarPanel,\n  CalendarRange: CalendarRange,\n  TimePanel: __vue_component__$b,\n  TimeRange: TimeRange,\n  DatetimePanel: DatetimePanel,\n  DatetimeRange: DatetimeRange\n});\n\nexport default DatePicker;\n","import '../assets/NcDateTimePicker-FNnAz7ls.css';\nimport { r as register, K as t37, a as t } from \"../chunks/_l10n-CW0YfIWk.mjs\";\nimport { G as GenRandomId } from \"../chunks/GenRandomId-CMooMQt0.mjs\";\nimport { u as useModelMigration } from \"../chunks/useModelMigration-EhAWvqDD.mjs\";\nimport { N as NcTimezonePicker } from \"../chunks/NcTimezonePicker-bIwFQlmV.mjs\";\nimport { N as NcPopover } from \"../chunks/NcPopover-CAJVK-MR.mjs\";\nimport { n as normalizeComponent } from \"../chunks/_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { getFirstDay, getDayNamesMin, getDayNamesShort, getDayNames, getMonthNamesShort, getMonthNames } from \"@nextcloud/l10n\";\nimport DatePicker from \"vue2-datepicker\";\nimport { S as ScopeComponent } from \"../chunks/ScopeComponent-CNZNqO-O.mjs\";\nregister(t37);\nconst _sfc_main$2 = {\n  name: \"CalendarBlankIcon\",\n  emits: [\"click\"],\n  props: {\n    title: {\n      type: String\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n};\nvar _sfc_render$2 = function render() {\n  var _vm = this, _c = _vm._self._c;\n  return _c(\"span\", _vm._b({ staticClass: \"material-design-icon calendar-blank-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n    return _vm.$emit(\"click\", $event);\n  } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M19,19H5V8H19M16,1V3H8V1H6V3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3H18V1\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n  _sfc_main$2,\n  _sfc_render$2,\n  _sfc_staticRenderFns$2,\n  false,\n  null,\n  null\n);\nconst CalendarBlank = __component__$2.exports;\nconst _sfc_main$1 = {\n  name: \"WebIcon\",\n  emits: [\"click\"],\n  props: {\n    title: {\n      type: String\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n};\nvar _sfc_render$1 = function render2() {\n  var _vm = this, _c = _vm._self._c;\n  return _c(\"span\", _vm._b({ staticClass: \"material-design-icon web-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n    return _vm.$emit(\"click\", $event);\n  } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M16.36,14C16.44,13.34 16.5,12.68 16.5,12C16.5,11.32 16.44,10.66 16.36,10H19.74C19.9,10.64 20,11.31 20,12C20,12.69 19.9,13.36 19.74,14M14.59,19.56C15.19,18.45 15.65,17.25 15.97,16H18.92C17.96,17.65 16.43,18.93 14.59,19.56M14.34,14H9.66C9.56,13.34 9.5,12.68 9.5,12C9.5,11.32 9.56,10.65 9.66,10H14.34C14.43,10.65 14.5,11.32 14.5,12C14.5,12.68 14.43,13.34 14.34,14M12,19.96C11.17,18.76 10.5,17.43 10.09,16H13.91C13.5,17.43 12.83,18.76 12,19.96M8,8H5.08C6.03,6.34 7.57,5.06 9.4,4.44C8.8,5.55 8.35,6.75 8,8M5.08,16H8C8.35,17.25 8.8,18.45 9.4,19.56C7.57,18.93 6.03,17.65 5.08,16M4.26,14C4.1,13.36 4,12.69 4,12C4,11.31 4.1,10.64 4.26,10H7.64C7.56,10.66 7.5,11.32 7.5,12C7.5,12.68 7.56,13.34 7.64,14M12,4.03C12.83,5.23 13.5,6.57 13.91,8H10.09C10.5,6.57 11.17,5.23 12,4.03M18.92,8H15.97C15.65,6.75 15.19,5.55 14.59,4.44C16.43,5.07 17.96,6.34 18.92,8M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n  _sfc_main$1,\n  _sfc_render$1,\n  _sfc_staticRenderFns$1,\n  false,\n  null,\n  null\n);\nconst Web = __component__$1.exports;\nconst formatMap = {\n  date: \"YYYY-MM-DD\",\n  datetime: \"YYYY-MM-DD H:mm:ss\",\n  year: \"YYYY\",\n  month: \"YYYY-MM\",\n  time: \"H:mm:ss\",\n  week: \"w\"\n};\nconst _sfc_main = {\n  name: \"NcDateTimePicker\",\n  components: {\n    CalendarBlank,\n    DatePicker,\n    NcPopover,\n    NcTimezonePicker,\n    Web\n  },\n  inheritAttrs: false,\n  model: {\n    prop: \"modelValue\",\n    event: \"update:modelValue\"\n  },\n  props: {\n    clearable: {\n      type: Boolean,\n      default: false\n    },\n    minuteStep: {\n      type: Number,\n      default: 10\n    },\n    /**\n     * Since 8.25.0: Support 'date-range', 'time-range' and 'datetime-range' values.\n     */\n    type: {\n      type: String,\n      default: \"date\",\n      validator: (type) => [\"date\", \"time\", \"datetime\", \"week\", \"month\", \"year\", \"date-range\", \"time-range\", \"datetime-range\"].includes(type)\n    },\n    /**\n     * Either `moment.js` formatting tokens or a function taking a Date object and returning a string.\n     * Warning: In v9 this will change the accepted token format to standardized Unicode tokens instead!\n     */\n    format: {\n      type: [String, Function],\n      default: null\n    },\n    /**\n     * @deprecated use `format` instead\n     */\n    formatter: {\n      type: Object,\n      default: null\n    },\n    lang: {\n      type: Object,\n      default: null\n    },\n    /**\n     * Removed in v9 - use `modelValue` (`v-model`) instead\n     * @deprecated\n     */\n    // eslint-disable-next-line\n    value: {\n      default: void 0\n    },\n    /**\n     * The value to initialize, but also two-way bind the selected date. The date is – like the `Date` object in\n     * JavaScript – tied to UTC. The selected time zone does not have an influence of the selected time and date\n     * value. You have to translate the time yourself when you want to factor in time zones.\n     */\n    // eslint-disable-next-line\n    modelValue: {\n      default: () => /* @__PURE__ */ new Date()\n    },\n    /**\n     * The preselected IANA time zone ID for the time zone picker, only relevant in combination with `:show-timezone-select=\"true\"`. Example: `Europe/Berlin`. The prop supports two-way binding through the .sync modifier.\n     */\n    timezoneId: {\n      type: String,\n      default: \"UTC\"\n    },\n    showTimezoneSelect: {\n      type: Boolean,\n      default: false\n    },\n    highlightTimezone: {\n      type: Boolean,\n      default: false\n    },\n    appendToBody: {\n      type: Boolean,\n      default: false\n    },\n    showWeekNumber: {\n      type: Boolean,\n      default: false\n    },\n    placeholder: {\n      type: String,\n      default: null\n    },\n    /**\n     * @deprecated use the 'date-range' or 'datetime-range' type instead.\n     */\n    range: {\n      type: Boolean,\n      default: false\n    }\n  },\n  emits: [\n    /**\n     * Removed in v9 - use `update:modelValue` (`v-model`) instead\n     * @deprecated\n     */\n    \"update:value\",\n    \"update:modelValue\",\n    /** Same as update:modelValue for Vue 2 compatibility */\n    \"update:model-value\",\n    \"update:timezone-id\"\n  ],\n  setup() {\n    const model = useModelMigration(\"value\", \"update:value\");\n    return {\n      model,\n      timezoneDialogHeaderId: `timezone-dialog-header-${GenRandomId()}`\n    };\n  },\n  data() {\n    return {\n      showTimezonePopover: false,\n      tzVal: this.timezoneId\n    };\n  },\n  computed: {\n    realType() {\n      return this.type.split(\"-\")[0];\n    },\n    /**\n     * Datepicker language\n     * https://github.com/mengxiong10/vue2-datepicker/blob/master/locale.md\n     *\n     * @return {object}\n     */\n    defaultLang() {\n      return {\n        formatLocale: {\n          months: getMonthNames(),\n          monthsShort: getMonthNamesShort(),\n          weekdays: getDayNames(),\n          weekdaysShort: getDayNamesShort(),\n          weekdaysMin: getDayNamesMin(),\n          // 0 = sunday, 1 = monday\n          firstDayOfWeek: getFirstDay()\n        },\n        monthFormat: \"MMMM\"\n      };\n    },\n    /**\n     * Translated placeholder\n     *\n     * @return {string}\n     */\n    defaultPlaceholder() {\n      if (this.realType === \"time\") {\n        return t(\"Pick a time\");\n      }\n      if (this.realType === \"month\") {\n        return t(\"Pick a month\");\n      }\n      if (this.realType === \"year\") {\n        return t(\"Pick a year\");\n      }\n      if (this.realType === \"week\") {\n        return t(\"Pick a week\");\n      }\n      if (this.realType === \"date\") {\n        return t(\"Pick a date\");\n      }\n      return t(\"Pick a date and a time\");\n    },\n    /**\n     * Is the range picker enabled\n     */\n    internalRange() {\n      return this.range || this.type.endsWith(\"-range\");\n    },\n    internalFormat() {\n      if (this.format && typeof this.format === \"string\") {\n        return this.format;\n      }\n      return formatMap[this.realType] || formatMap.date;\n    },\n    /**\n     * The formatter used for the vue-datepicker to fix nextcloud-libraries/nextcloud-vue#5044\n     */\n    internalFormatter() {\n      const getWeek = (date) => {\n        const firstThursday = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n        firstThursday.setUTCDate(firstThursday.getUTCDate() + 4 - (firstThursday.getUTCDay() || 7));\n        const yearStart = new Date(Date.UTC(firstThursday.getUTCFullYear(), 0, 1));\n        return Math.ceil(((firstThursday - yearStart) / 864e5 + 1) / 7);\n      };\n      return {\n        getWeek,\n        // wrape the format if it is a function\n        ...typeof this.format === \"function\" ? { stringify: this.format } : {},\n        // allow to override it by users using the `formatter` prop\n        ...this.formatter ?? {}\n      };\n    }\n  },\n  methods: {\n    t,\n    handleSelectYear(year) {\n      const value = this.$refs.datepicker.currentValue;\n      if (value) {\n        try {\n          const date = new Date(new Date(value).setFullYear(year));\n          this.$refs.datepicker.selectDate(date);\n        } catch (error) {\n          console.error(\"Invalid value\", value, year);\n        }\n      }\n    },\n    handleSelectMonth(month) {\n      const value = this.$refs.datepicker.currentValue;\n      if (value) {\n        try {\n          const date = new Date(new Date(value).setMonth(month));\n          this.$refs.datepicker.selectDate(date);\n        } catch (error) {\n          console.error(\"Invalid value\", value, month);\n        }\n      }\n    },\n    /**\n     * Toggles the visibility of the time zone popover\n     */\n    toggleTimezonePopover() {\n      if (!this.showTimezoneSelect) {\n        return;\n      }\n      this.showTimezonePopover = !this.showTimezonePopover;\n    }\n  }\n};\nvar _sfc_render = function render3() {\n  var _vm = this, _c = _vm._self._c;\n  return _c(\"DatePicker\", _vm._g(_vm._b({ ref: \"datepicker\", attrs: { \"append-to-body\": _vm.appendToBody, \"clearable\": _vm.clearable, \"format\": _vm.internalFormat, \"formatter\": _vm.internalFormatter, \"lang\": _vm.lang ? _vm.lang : _vm.defaultLang, \"minute-step\": _vm.minuteStep, \"placeholder\": _vm.placeholder ? _vm.placeholder : _vm.defaultPlaceholder, \"popup-class\": { \"show-week-number\": _vm.showWeekNumber }, \"range\": _vm.internalRange, \"show-week-number\": _vm.showWeekNumber, \"type\": _vm.realType, \"value\": _vm.model }, on: { \"select-year\": _vm.handleSelectYear, \"select-month\": _vm.handleSelectMonth, \"input\": function($event) {\n    _vm.model = $event;\n  } }, scopedSlots: _vm._u([{ key: \"icon-calendar\", fn: function() {\n    return [_vm.showTimezoneSelect ? _c(\"NcPopover\", { attrs: { \"popup-role\": \"dialog\", \"shown\": _vm.showTimezonePopover, \"popover-base-class\": \"timezone-select__popper\" }, on: { \"update:shown\": function($event) {\n      _vm.showTimezonePopover = $event;\n    } }, scopedSlots: _vm._u([{ key: \"trigger\", fn: function({ attrs }) {\n      return [_c(\"button\", _vm._b({ staticClass: \"datetime-picker-inline-icon\", class: { \"datetime-picker-inline-icon--highlighted\": _vm.highlightTimezone }, on: { \"mousedown\": function($event) {\n        $event.stopPropagation();\n        $event.preventDefault();\n        return (() => {\n        }).apply(null, arguments);\n      } } }, \"button\", attrs, false), [_c(\"Web\", { attrs: { \"size\": 20 } })], 1)];\n    } }], null, false, 270852355) }, [_c(\"div\", { attrs: { \"role\": \"dialog\", \"aria-labelledby\": _vm.timezoneDialogHeaderId } }, [_c(\"div\", { staticClass: \"timezone-popover-wrapper__label\" }, [_c(\"strong\", { attrs: { \"id\": _vm.timezoneDialogHeaderId } }, [_vm._v(\" \" + _vm._s(_vm.t(\"Please select a time zone:\")) + \" \")])]), _c(\"NcTimezonePicker\", { staticClass: \"timezone-popover-wrapper__timezone-select\", on: { \"input\": function($event) {\n      return _vm.$emit(\"update:timezone-id\", arguments[0]);\n    } }, model: { value: _vm.tzVal, callback: function($$v) {\n      _vm.tzVal = $$v;\n    }, expression: \"tzVal\" } })], 1)]) : _c(\"CalendarBlank\", { attrs: { \"size\": 20 } })];\n  }, proxy: true }, _vm._l(_vm.$scopedSlots, function(_, slot) {\n    return { key: slot, fn: function(scope) {\n      return [_vm._t(slot, null, null, scope)];\n    } };\n  })], null, true) }, \"DatePicker\", _vm.$attrs, false), _vm.$listeners));\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n  _sfc_main,\n  _sfc_render,\n  _sfc_staticRenderFns,\n  false,\n  null,\n  \"abcdc981\"\n);\nconst NcDateTimePicker = __component__.exports;\nScopeComponent(NcDateTimePicker);\nexport {\n  NcDateTimePicker as default\n};\n//# sourceMappingURL=NcDateTimePicker.mjs.map\n"],"names":["Binary","aString","aValue","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","i","ac","enc","tmp_arr","r","dec","DURATION_LETTERS","DATA_PROPS_TO_COPY","Duration","aSeconds","string","aStr","pos","dict","chunks","type","numeric","parseDurationChunk","aData","seconds","secs","trunc","prop","aOther","thisSeconds","otherSeconds","str","letter","number","object","num","isStrictlyNaN","Time","month","year","_daysInMonth","days","aDayOfYear","aYear","doy","tt","is_leap","strictParseInt","zone","zoneId","Timezone","timeData","aProperty","aDate","useUTC","aZone","aWeekStart","t","dow","wkst","yr","LTRS","dom","#epochTime","a","b","attr","time","day","hour","minute","second","timezone","key","value","TimezoneService","firstDow","dowCacheKey","q","m","Y","h","result","aFirstDayOfWeek","delta","aDayOfWeek","aPos","daysInMonth","weekday","start","otherDay","startDow","offset","endDow","wnCacheKey","week1","dt","isoyear","daysBetween","answer","aDuration","mult","unixTime","other","tz","rc","copy","zone_equals","design$1","pad2","aExtraDays","aExtraHours","aExtraMinutes","aExtraSeconds","aTime","minutesOverflow","hoursOverflow","daysOverflow","yearsOverflow","date","ms","len","defineAttr","val","CHAR","VALUE_DELIMITER","PARAM_DELIMITER","PARAM_NAME_DELIMITER","DEFAULT_VALUE_TYPE$1","DEFAULT_PARAM_TYPE","RFC6868_REPLACE_MAP$1","parse","input","state","root","err","line","ParserError","designSet","valuePos","paramPos","lastParamIndex","lastValuePos","name","params","parsedParams","newComponent","valueType","multiValue","structuredValue","propertyDetails","splitName","ungroupedName","lastParam","delim","lcname","mvdelim","extendedValue","propValuePos","nextPos","length_before","delimiter","x","buffer","innerMulti","lastPos","unescapedIndexOf","callback","firstChar","newlineOffset","OPTIONS","Timezone$1","from_zone","to_zone","utcOffset","#utcTimezone","#localTimezone","change","hours","minutes","Component","jCal","tt_change","change_num","change_num_to_use","step","clone","zone_change","tmp_change","prev_zone_change","want_daylight","idx","binsearchInsert","today","changesEndYear","subcomps","compLen","compIdx","aComponent","changes","dtstart","convert_tzoffset","init_changes","changebase","props","rdate","rrule","iterator","occ","zones","utc","tzid","updateTimezones","vcal","allsubs","properties","vtimezones","reqTzid","comp","formatClassType","search","list","seekVal","cmpfunc","low","high","mid","cmpval","aSrc","aDeep","arr","obj","foldline","aLine","line_length","cp","ICALmodule","extend","source","target","descr","helpers","UtcOffset","options","instance","factor","VCardTime","aIcalType","part","v","s","e","parts","tmz","splitzone","tm","dtlen","tmlen","hasDashDate","hasDashTime","o","icaltype","y","d","mm","hasYear","hasMonth","hasDay","hasHour","hasMinute","hasSecond","datepart","timepart","RecurIterator","Recur","InvalidRecurrenceRuleError","wkdy","dayName","untilYear","tempLast","initLast","bydow","dayOfMonth","normalized","again","before","valid","inc","this_freq","end_of_data","week_no","rules","newRules","ruleIdx","rule","isInit","byMonthDay","byDay","dateIdx","dateLen","dayLen","dataIsValid","self","lastDay","initMonth","nextMonth","monthsCounter","next","dayIdx","data_valid","setpos","setpos_total","last_day","coded_day","startOfWeek","matches","aRuleType","aInterval","aDateAttr","aFollowingAttr","aPreviousIncr","has_by_rule","dta","years","aFactor","aNextIncrement","nextunit","validWeeks","monthIdx","first_week","last_week","weekIdx","partCount","t1","t2","monthday","t3","first_dow","doy_offset","last_dow","by_month_day","spIndex","bydayParts","month_day","first_matching_day","last_matching_day","expandedDays","weekno","daysInYear","days_list","tmp","start_dow","end_dow","end_year_day","tmp_start_doy","first","last","this_dow","aRules","j","one","two","indexMapValue","ruleMapValue","pass","ruleType","bydata","weekNo","req","deftime","VALID_DAY_NAMES","VALID_BYDAY_PART","DOW_MAP","REVERSE_DOW_MAP","entry","ALLOWED_FREQ","fmtIcal","values","ucname","partDesign","partArr","partSet","optionDesign","aStart","aType","aValues","aStartTime","aRecurrenceId","iter","uckey","res","k","kparts","parseNumericValue","min","max","Period","end","aProp","aLenient","fromDateOrDateTimeString","dateProp","FROM_ICAL_NEWLINE","TO_ICAL_NEWLINE","FROM_VCARD_NEWLINE","TO_VCARD_NEWLINE","createTextType","fromNewline","toNewline","structuredEscape","replaceNewline","regEx","DEFAULT_TYPE_TEXT","DEFAULT_TYPE_TEXT_MULTI","DEFAULT_TYPE_TEXT_STRUCTURED","DEFAULT_TYPE_INTEGER","DEFAULT_TYPE_DATETIME_DATE","DEFAULT_TYPE_DATETIME","DEFAULT_TYPE_URI","DEFAULT_TYPE_UTCOFFSET","DEFAULT_TYPE_RECUR","DEFAULT_TYPE_DATE_ANDOR_TIME","replaceNewlineReplace","newline","commonProperties","commonValues","parsed","icalParams","icalValues","aBinary","design","aRecur","icalProperties","vcardValues","isFromIcal","lastChar","signChar","sign","c","vcardParams","vcardProperties","vcard3Values","vcard3Params","vcard3Properties","icalSet","vcardSet","vcard3Set","componentName","LINE_ENDING","DEFAULT_VALUE_TYPE","RFC6868_REPLACE_MAP","stringify","component","propIdx","propLen","designSetName","comps","property","noFold","jsName","groupName","paramName","paramDesign","propDetails","isDefault","force","NAME_INDEX$1","PROP_INDEX","TYPE_INDEX","VALUE_INDEX","Property","parent","p","designSetChanged","index","parameters","details","NAME_INDEX","PROPERTY_INDEX","COMPONENT_INDEX","jCalLen","jCalIndex","cache","nameOrObject","objects","cached","nameOrComp","removed","nameOrProp","hydratedZone","RecurExpansion","item","compare","maxTries","currentTry","toJSON","propertyName","iters","iterTime","iterIdx","chosenIter","Event","event","id","compareRangeException","rangeItem","occurrence","utcId","rangeExceptionId","exception","startDiff","original","newStart","startTime","endDate","duration","propName","ComponentParser","ical","components","timezoneId","ics","ICAL","local","iCalComponent","version","aliases","tzData","TimezoneManager","level","includeAliases","timezones","aliasName","resolvedTimezone","pendingAliasName","timezoneManager","getTimezoneManager","register","t24","getSortedTimezoneList","timezoneList","additionalTimezones","sortedByContinent","sortedList","continent","getReadableTimezoneName","additionalTimezone","label","getTimezoneManager$1","initialized","t42","_sfc_main","NcSelect","GenRandomId","useModelMigration","timezoneManager2","timezonesGrouped","group","newValue","option","terms","region","term","_sfc_render","_vm","_c","_sfc_staticRenderFns","__component__","normalizeComponent","NcTimezonePicker","isDate","toDate","isValidDate","firstDayOfWeek","diff","startOfWeekYear","_ref","_ref$firstDayOfWeek","_ref$firstWeekContain","firstWeekContainsDate","firstDateOfFirstWeek","getWeek","_ref2","_ref2$firstDayOfWeek","_ref2$firstWeekContai","firstDateOfThisWeek","locale","REGEX_FORMAT","pad","output","getOffset","formatTimezone","delimeter","absOffset","meridiem","_","isLowercase","word","formatFlags","meridiemFunc","format","formatStr","defaultLocale","match","p1","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","arr2","ownKeys","enumerableOnly","keys","symbols","sym","_objectSpread","_defineProperty","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","_arr","_n","_d","_e","_i","_s","formattingTokens","match1","match2","match3","match4","match1to2","matchShortOffset","matchSigned","matchTimestamp","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","parseFlags","addParseFlag","token","regex","tokens","func","escapeStringRegExp","matchWordRegExp","localeKey","array","matchWordCallback","cent","matchMeridiem","defaultIsPM","isPM","offsetFromString","_ref8","_ref9","symbol","to24hour","getFullInputArray","backupDate","backupArr","useBackup","createDate","M","createUTCDate","_len","args","_key","makeParser","dateString","length","mark","parseTo","parser","_options$locale","_locale","_options$backupDate","parseResult","millisecond","week","inputArray","firstDate","parsedDate","_typeof","_extends","_objectSpread2","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","_unsupportedIterableToArray","minLen","_arrayLikeToArray","n","_extends$1","normalMerge","toArrayMerge","functionalMerge","mergeJsxProps","f","g","mergeFn","helper","isValidRangeDate","isValidDates","dates","getValidDate","backup","startOfYear","startOfMonth","startOfDay","getCalendar","calendar","lastDayInLastMonth","firstDayInLastMonth","lastDayInCurrentMonth","lastMonthLength","nextMonthLength","_i2","setMonth","dirtyDate","dirtyMonth","setYear","dirtyYear","assignTime","chunk","size","isObject","pick","mergeDeep","unwrapExports","createCommonjsModule","fn","module","en","exports","_default","en$1","lang","locales","isLocal","l","getLocale","rafThrottle","isRunning","_this","getPopupElementSize","element","originalDisplay","originalVisibility","styles","width","height","getRelativePosition","el","targetWidth","targetHeight","fixed","left","top","offsetX","offsetY","relativeRect","dw","dh","getScrollParent","node","until","style","scroll","script","_this2","relativeElement","evt","popup","appendToBody","_this$_popupRect","_getRelativePosition","template","scopeId","isFunctionalTemplate","moduleIdentifier","shadowMode","createInjector","createInjectorSSR","createInjectorShadow","__vue_script__","__vue_render__","_h","__vue_staticRenderFns__","__vue_inject_styles__","__vue_component__","__vue_render__$1","__vue_staticRenderFns__$1","__vue_inject_styles__$1","__vue_component__$1","__vue_render__$2","__vue_staticRenderFns__$2","__vue_inject_styles__$2","__vue_component__$2","__vue_render__$3","__vue_staticRenderFns__$3","__vue_inject_styles__$3","__vue_component__$3","script$1","__vue_script__$1","__vue_render__$4","__vue_staticRenderFns__$4","__vue_inject_styles__$4","__vue_component__$4","script$2","_this$getLocale","yearFormat","monthBeforeYear","_this$getLocale$month","monthFormat","yearLabel","monthLabel","panel","cell","_index$split$map","_index$split$map2","row","col","fmt","__vue_script__$2","__vue_render__$5","$event","__vue_staticRenderFns__$5","__vue_inject_styles__$5","__vue_component__$5","script$3","monthsLocale","months","text","__vue_script__$3","__vue_render__$6","__vue_staticRenderFns__$6","__vue_inject_styles__$6","__vue_component__$6","script$4","firstYear","__vue_script__$4","__vue_render__$7","__vue_staticRenderFns__$7","__vue_inject_styles__$7","__vue_component__$7","CalendarPanel","panels","map","calendarDate","oldCalendar","oldPanel","_date","_date2","cellDate","notCurrentMonth","classes","_cellDate","_cellDate2","active","innerCalendar","CalendarRange","calendars","_this$innerValue","startValue","endValue","adjustIndex","gap","_calendars","calendarLeft","calendarRight","yearDiff","monthDiff","currentDates","classnames","inRange","range","_range$map","_range$map2","calendarRange","on","prefixClass","scrollBarWidth","getScrollbarWidth","outer","inner","script$5","wrap","heightPercentage","scrollHeight","scrollTop","offsetTop","clientY","clientHeight","__vue_script__$5","__vue_render__$8","__vue_staticRenderFns__$8","__vue_inject_styles__$8","__vue_component__$8","padNumber","generateOptions","scrollTo","to","difference","tick","script$6","cols","_this3","_this4","_this5","elements","scrollElement","currentTarget","colIndex","cellIndex","__vue_script__$6","__vue_render__$9","__vue_staticRenderFns__$9","__vue_inject_styles__$9","__vue_component__$9","parseOption","scrollTo$1","script$7","startMinutes","endMinutes","stepMinutes","timeMinutes","__vue_script__$7","__vue_render__$a","__vue_staticRenderFns__$a","__vue_inject_styles__$a","__vue_component__$a","script$8","titleFormat","defaultProps","minHour","maxHour","__vue_script__$8","__vue_render__$b","__vue_staticRenderFns__$b","__vue_inject_styles__$b","__vue_component__$b","TimeRange","_this$value","defaultValues","DatetimePanel","datetime","calendarProps","timeProps","DatetimeRange","datetimes","componentMap","componentRangeMap","DatePicker","types","close","disabledDate","disabledTime","nextDates","keyCode","fallback","slotFn","className","attrs","events","calendarIcon","content","_class","inline","disabled","sidedar","Vue","t37","_sfc_main$2","_sfc_render$2","_sfc_staticRenderFns$2","__component__$2","CalendarBlank","_sfc_main$1","_sfc_render$1","_sfc_staticRenderFns$1","__component__$1","Web","formatMap","NcPopover","getMonthNames","getMonthNamesShort","getDayNames","getDayNamesShort","getDayNamesMin","getFirstDay","firstThursday","yearStart","$$v","slot","scope","NcDateTimePicker","ScopeComponent"],"mappings":"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V,EACD,mCAAoC,CAClC,QAAS,6BACV,EACD,uBAAwB,CACtB,QAAS,gCACV,EACD,qBAAsB,CACpB,QAAS,6BACV,EACD,mBAAoB,CAClB,QAAS,iBACV,EACD,uBAAwB,CACtB,QAAS,iBACV,EACD,qBAAsB,CACpB,QAAS,aACV,EACD,wBAAyB,CACvB,QAAS,YACV,EACD,uBAAwB,CACtB,QAAS,cACV,EACD,0BAA2B,CACzB,QAAS,gCACV,EACD,gBAAiB,CACf,QAAS,cACV,EACD,gBAAiB,CACf,QAAS,gBACV,EACD,eAAgB,CACd,QAAS,aACV,EACD,cAAe,CACb,QAAS,kBACV,EACD,yBAA0B,CACxB,QAAS,iBACV,EACD,kBAAmB,CACjB,QAAS,gBACV,EACD,qBAAsB,CACpB,QAAS,aACV,EACD,2BAA4B,CAC1B,QAAS,WACV,EACD,uBAAwB,CACtB,QAAS,iBACV,EACD,sBAAuB,CACrB,QAAS,eACV,EACD,2BAA4B,CAC1B,QAAS,YACV,EACD,wBAAyB,CACvB,QAAS,cACV,EACD,+BAAgC,CAC9B,QAAS,gBACV,EACD,2BAA4B,CAC1B,QAAS,qBACV,EACD,yBAA0B,CACxB,QAAS,cACV,EACD,+BAAgC,CAC9B,QAAS,oBACV,EACD,gCAAiC,CAC/B,QAAS,mBACV,EACD,6BAA8B,CAC5B,QAAS,aACV,EACD,kCAAmC,CACjC,QAAS,gBACV,EACD,+BAAgC,CAC9B,QAAS,iBACV,EACD,iCAAkC,CAChC,QAAS,eACV,EACD,gCAAiC,CAC/B,QAAS,qBACV,EACD,wBAAyB,CACvB,QAAS,iBACV,EACD,iCAAkC,CAChC,QAAS,qBACV,EACD,sBAAuB,CACrB,QAAS,eACV,EACD,0BAA2B,CACzB,QAAS,gBACV,EACD,6BAA8B,CAC5B,QAAS,oBACV,EACD,iCAAkC,CAChC,QAAS,mBACV,EACD,wBAAyB,CACvB,QAAS,kBACV,EACD,sBAAuB,CACrB,QAAS,cACV,EACD,6BAA8B,CAC5B,QAAS,oBACV,EACD,UAAW,CACT,QAAS,KACV,EACD,YAAa,CACX,QAAS,KACV,EACD,UAAW,CACT,QAAS,KACV,EACD,UAAW,CACT,QAAS,KACV,EACD,eAAgB,CACd,QAAS,KACV,EACD,WAAY,CACV,QAAS,KACV,EACD,iBAAkB,CAChB,QAAS,eACV,EACD,oBAAqB,CACnB,QAAS,aACV,EACD,qBAAsB,CACpB,QAAS,cACV,EACD,IAAK,CACH,QAAS,KACV,EACD,oBAAqB,CACnB,QAAS,eACV,EACD,QAAS,CACP,QAAS,KACV,EACD,KAAM,CACJ,QAAS,KACV,EACD,oBAAqB,CACnB,QAAS,kBACV,EACD,yBAA0B,CACxB,QAAS,cACV,EACD,0BAA2B,CACzB,QAAS,iBACV,EACD,UAAW,CACT,QAAS,KACV,EACD,0BAA2B,CACzB,QAAS,oBACV,EACD,yBAA0B,CACxB,QAAS,kBACV,EACD,sBAAuB,CACrB,QAAS,eACV,EACD,qBAAsB,CACpB,QAAS,aACV,EACD,uBAAwB,CACtB,QAAS,gBACV,EACD,uBAAwB,CACtB,QAAS,YACV,EACD,4BAA6B,CAC3B,QAAS,oBACV,EACD,sBAAuB,CACrB,QAAS,YACV,EACD,sBAAuB,CACrB,QAAS,gBACV,EACD,6BAA8B,CAC5B,QAAS,oBACV,EACD,wBAAyB,CACvB,QAAS,cACV,EACD,0BAA2B,CACzB,QAAS,kBACV,EACD,4BAA6B,CAC3B,QAAS,aACV,EACD,2BAA4B,CAC1B,QAAS,oBACV,EACD,wBAAyB,CACvB,QAAS,mBACV,EACD,yBAA0B,CACxB,QAAS,gBACV,EACD,kCAAmC,CACjC,QAAS,mBACV,EACD,wBAAyB,CACvB,QAAS,cACV,EACD,gCAAiC,CAC/B,QAAS,kBACV,EACD,wBAAyB,CACvB,QAAS,iBACV,EACD,sBAAuB,CACrB,QAAS,eACV,EACD,4BAA6B,CAC3B,QAAS,kBACV,EACD,6BAA8B,CAC5B,QAAS,kBACV,EACD,gCAAiC,CAC/B,QAAS,cACV,EACD,2BAA4B,CAC1B,QAAS,kBACV,EACD,2BAA4B,CAC1B,QAAS,kBACV,EACD,wBAAyB,CACvB,QAAS,qBACV,EACD,iCAAkC,CAChC,QAAS,sBACV,EACD,mBAAoB,CAClB,QAAS,kBACV,EACD,yBAA0B,CACxB,QAAS,cACV,EACD,yBAA0B,CACxB,QAAS,kBACV,EACD,wBAAyB,CACvB,QAAS,cACV,EACD,sBAAuB,CACrB,QAAS,oBACV,EACD,sBAAuB,CACrB,QAAS,gBACV,EACD,qBAAsB,CACpB,QAAS,eACV,EACD,wBAAyB,CACvB,QAAS,eACV,EACD,2BAA4B,CAC1B,QAAS,iBACV,EACD,2BAA4B,CAC1B,QAAS,gBACV,EACD,2BAA4B,CAC1B,QAAS,gBACV,EACD,wBAAyB,CACvB,QAAS,cACV,EACD,sBAAuB,CACrB,QAAS,cACV,EACD,0BAA2B,CACzB,QAAS,gBACV,EACD,6BAA8B,CAC5B,QAAS,qBACV,EACD,0BAA2B,CACzB,QAAS,cACV,EACD,sBAAuB,CACrB,QAAS,eACV,EACD,uBAAwB,CACtB,QAAS,aACV,EACD,yBAA0B,CACxB,QAAS,kBACV,EACD,sBAAuB,CACrB,QAAS,YACV,EACD,sBAAuB,CACrB,QAAS,mBACV,EACD,uBAAwB,CACtB,QAAS,iBACV,EACD,IAAK,CACH,QAAS,KACV,EACD,2BAA4B,CAC1B,QAAS,8BACV,EACD,4BAA6B,CAC3B,QAAS,iBACV,EACD,aAAc,CACZ,QAAS,iBACV,EACD,aAAc,CACZ,QAAS,kBACV,EACD,cAAe,CACb,QAAS,gBACV,EACD,aAAc,CACZ,QAAS,qBACV,EACD,iBAAkB,CAChB,QAAS,qBACV,EACD,4BAA6B,CAC3B,QAAS,kBACV,EACD,UAAW,CACT,QAAS,KACV,EACD,0BAA2B,CACzB,QAAS,iBACV,EACD,4BAA6B,CAC3B,QAAS,kBACV,EACD,6BAA8B,CAC5B,QAAS,iBACV,EACD,kCAAmC,CACjC,QAAS,cACV,EACD,0BAA2B,CACzB,QAAS,eACV,EACD,0BAA2B,CACzB,QAAS,eACV,EACD,6BAA8B,CAC5B,QAAS,sBACV,EACD,wBAAyB,CACvB,QAAS,cACV,EACD,EAAG,CACD,QAAS,KACV,EACD,KAAM,CACJ,QAAS,KACV,EACD,IAAK,CACH,QAAS,KACb,CACA,EACM7T,GAAQ,CACZ,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iCAAkC,CAChC,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,8BAA+B,CAC7B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mCAAoC,CAClC,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,4BAA6B,CAC3B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,0BAA2B,CACzB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,6BAA8B,CAC5B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,4BAA6B,CAC3B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iCAAkC,CAChC,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,0BAA2B,CACzB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,6BAA8B,CAC5B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,6BAA8B,CAC5B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,4BAA6B,CAC3B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,4BAA6B,CAC3B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,yBAA0B,CACxB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,wBAAyB,CACvB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,wBAAyB,CACvB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,wBAAyB,CACvB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,+BAAgC,CAC9B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,0BAA2B,CACzB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,6BAA8B,CAC5B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,4BAA6B,CAC3B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,wBAAyB,CACvB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,4BAA6B,CAC3B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,0BAA2B,CACzB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,8BAA+B,CAC7B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,8BAA+B,CAC7B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,wBAAyB,CACvB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,8BAA+B,CAC7B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,8BAA+B,CAC7B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iCAAkC,CAChC,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,yBAA0B,CACxB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,wBAAyB,CACvB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,wBAAyB,CACvB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,wBAAyB,CACvB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,wBAAyB,CACvB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,4BAA6B,CAC3B,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,wBAAyB,CACvB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,YAAa,CACX,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,YAAa,CACX,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,YAAa,CACX,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,YAAa,CACX,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,YAAa,CACX,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,YAAa,CACX,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,YAAa,CACX,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,yBAA0B,CACxB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,wBAAyB,CACvB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,sBAAuB,CACrB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,qBAAsB,CACpB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,mBAAoB,CAClB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,uBAAwB,CACtB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,gBAAiB,CACf,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACD,EACD,SAAU,WACV,UAAW,UACZ,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,eAAgB,CACd,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,iBAAkB,CAChB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,YAAa,CACX,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,kBAAmB,CACjB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,YAAa,CACX,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,oBAAqB,CACnB,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,cAAe,CACb,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,aAAc,CACZ,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACG,EACD,WAAY,CACV,IAAK,CACH;AAAA;AAAA;AAAA;AAAA;AAAA,aACN,CACA,CACA,EACM8T,GAAS,CACb,QAAAF,GACA,QAAAC,GACA,MAAA7T,EACF,EACA,MAAM+T,EAAgB,CAKpB,SAA2B,IAAI,IAK/B,WAA6B,IAAI,IAKjC,gBAAkB,CAAE,EAMpB,iBAAiBR,EAAY,CAC3B,IAAIS,EAAQ,EACZ,KAAOA,IAAU,IAAI,CACnB,GAAI,KAAK,WAAW,IAAIT,CAAU,EAChC,OAAO,KAAK,WAAW,IAAIA,CAAU,EAEvC,GAAI,KAAK,SAAS,IAAIA,CAAU,EAC9BA,EAAa,KAAK,SAAS,IAAIA,CAAU,MAElC,QAAA,IAEf,CACI,OAAQ,QAAA,MAAM,gEAAgE,EACvE,IACX,CAME,iBAAiBA,EAAY,CAC3B,OAAO,KAAK,WAAW,IAAIA,CAAU,GAAK,KAAK,SAAS,IAAIA,CAAU,CAC1E,CAME,QAAQA,EAAY,CAClB,MAAO,CAAC,KAAK,WAAW,IAAIA,CAAU,GAAK,KAAK,SAAS,IAAIA,CAAU,CAC3E,CAME,iBAAiBU,EAAiB,GAAO,CACvC,MAAMC,EAAY,MAAM,KAAK,KAAK,WAAW,MAAM,EACnD,OAAID,EACKC,EAAU,OAAO,MAAM,KAAK,KAAK,SAAS,KAAI,CAAE,CAAC,EAEnDA,CACX,CAME,iBAAiB3c,EAAU,CACzB,KAAK,WAAW,IAAIA,EAAS,WAAYA,CAAQ,EACjDkc,EAAK,gBAAgB,SAASlc,EAAS,eAAgB,EAAEA,EAAS,UAAU,EAC5E,KAAK,gBAAkB,KAAK,gBAAgB,OAAO,CAAC,CAAC4c,EAAWZ,CAAU,IACpEA,IAAehc,EAAS,WACnB,IAETkc,EAAK,gBAAgB,SAASlc,EAAS,eAAc,EAAI4c,CAAS,EAC3D,GACR,CACL,CACE,0BAA2B,CACzB,QAAQ,MAAM,+CAA+CL,GAAO,OAAO,2BAA2B,EACtG,UAAW5T,KAAQ4T,GAAO,MAAO,CAC/B,MAAMN,EAAM,CACV,kBACA,QAAUtT,EACV,GAAG4T,GAAO,MAAM5T,CAAI,EAAE,IACtB,eACR,EAAQ,KAAK;AAAA,CAAM,EACb,KAAK,wBAAwBA,EAAMsT,CAAG,CAC5C,CACI,UAAWtT,KAAQ4T,GAAO,QACxB,KAAK,cAAc5T,EAAM4T,GAAO,QAAQ5T,CAAI,EAAE,OAAO,CAE3D,CAOE,wBAAwBqT,EAAYC,EAAK,CACvC,MAAMjc,EAAW,IAAItB,GAASsd,EAAYC,CAAG,EAC7C,KAAK,iBAAiBjc,CAAQ,CAClC,CAOE,cAAc4c,EAAWZ,EAAY,CACnC,KAAK,SAAS,IAAIY,EAAWZ,CAAU,EACvC,MAAMa,EAAmB,KAAK,iBAAiBb,CAAU,EACzD,GAAI,CAACa,EAAkB,CACrB,KAAK,gBAAgB,KAAK,CAACD,EAAWZ,CAAU,CAAC,EACjD,MACN,CACIE,EAAK,gBAAgB,SAASW,EAAiB,eAAc,EAAID,CAAS,CAC9E,CAME,oBAAoBZ,EAAY,CAC9B,KAAK,WAAW,OAAOA,CAAU,EACjCE,EAAK,gBAAgB,OAAOF,CAAU,CAC1C,CAME,gBAAgBY,EAAW,CACzB,KAAK,SAAS,OAAOA,CAAS,EAC9B,KAAK,gBAAkB,KAAK,gBAAgB,OAAO,CAAC,CAACE,CAAgB,IAAMA,IAAqBF,CAAS,EACzGV,EAAK,gBAAgB,OAAOU,CAAS,CACzC,CAIE,mBAAoB,CAClB,KAAK,SAA2B,IAAI,IACpC,KAAK,gBAAkB,CAAE,EACzB,KAAK,WAA6B,IAAI,IACtCV,EAAK,gBAAgB,MAAO,EAC5Ba,GAAgB,iBAAiBre,GAAS,GAAG,EAC7Cqe,GAAgB,iBAAiBre,GAAS,QAAQ,EAClDqe,GAAgB,cAAc,MAAOre,GAAS,IAAI,UAAU,EAC5Dqe,GAAgB,cAAc,IAAKre,GAAS,IAAI,UAAU,CAC9D,CACA,CACA,MAAMqe,GAAkB,IAAIP,GAC5BO,GAAgB,kBAAmB,EACnC,SAASC,IAAqB,CAC5B,OAAOD,EACT,CClhIAE,GAASC,EAAG,EACZ,SAASC,GAAsBC,EAAe,GAAIC,EAAsB,CAAA,EAAI,CAC1E,MAAMC,EAAoB,CAAE,EACtBC,EAAa,CAAE,EACrB,UAAWvB,KAAcoB,EAAc,CACrC,MAAMrB,EAAaC,EAAW,MAAM,GAAG,EACvC,GAAI,CAACwB,EAAWjZ,CAAI,EAAI,CAACwX,EAAW,MAAK,EAAIA,EAAW,KAAK,GAAG,CAAC,EAC5DxX,IACHA,EAAOiZ,EACPA,EAAYve,EAAE,QAAQ,GAExBqe,EAAkBE,CAAS,EAAIF,EAAkBE,CAAS,GAAK,CAC7D,UAAAA,EACA,QAAS,CAAA,CACV,EACDF,EAAkBE,CAAS,EAAE,QAAQ,KAAK,CACxC,MAAOC,GAAwBlZ,CAAI,EACnC,OAAQ,CAAE,EACV,WAAAyX,CACN,CAAK,CACL,CACE,UAAW0B,KAAsBL,EAAqB,CACpD,KAAM,CAAE,UAAAG,EAAW,MAAAG,EAAO,WAAA3B,CAAY,EAAG0B,EACzCJ,EAAkBE,CAAS,EAAIF,EAAkBE,CAAS,GAAK,CAC7D,UAAAA,EACA,QAAS,CAAA,CACV,EACDF,EAAkBE,CAAS,EAAE,QAAQ,KAAK,CACxC,MAAAG,EACA,OAAQ,CAAE,EACV,WAAA3B,CACN,CAAK,CACL,CACE,UAAWwB,KAAaF,EACjB,OAAO,UAAU,eAAe,KAAKA,EAAmBE,CAAS,IAGtEF,EAAkBE,CAAS,EAAE,QAAQ,KAAK,CAAChe,EAAGC,IACxCD,EAAE,MAAQC,EAAE,MACP,GAEF,CACR,EACD8d,EAAW,KAAKD,EAAkBE,CAAS,CAAC,GAE9C,OAAAD,EAAW,KAAK,CAAC/d,EAAGC,IACdD,EAAE,UAAYC,EAAE,UACX,GAEF,CACR,EACM8d,CACT,CACA,SAASE,GAAwBzB,EAAY,CAC3C,OAAOA,EAAW,MAAM,GAAG,EAAE,KAAK,GAAG,EAAE,QAAQ,MAAO,MAAM,EAAE,MAAM,GAAG,EAAE,KAAK,KAAK,CACrF,CACA,MAAMe,GAAkBa,GAAsB,EAC9C,IAAIC,GAAc,GAClB,SAASb,IAAqB,CAC5B,OAAKa,KACHd,GAAgB,yBAA0B,EAC1Cc,GAAc,IAETd,EACT,CACAE,GAASa,EAAG,EACZ,MAAMC,GAAY,CAChB,KAAM,mBACN,WAAY,CACV,SAAAC,EACD,EACD,MAAO,CACL,KAAM,aACN,MAAO,mBACR,EACD,MAAO,CAIL,oBAAqB,CACnB,KAAM,MACN,QAAS,IAAM,CAAA,CAChB,EAKD,MAAO,CACL,KAAM,OACN,QAAS,MACV,EAID,WAAY,CACV,KAAM,OACN,QAAS,UACV,EAID,IAAK,CACH,KAAM,CAAC,OAAQ,MAAM,EACrB,QAAS,IAAM,MAAMC,GAAY,CAAC,CAAC,EACzC,CACG,EACD,MAAO,CAKL,QAIA,oBAEA,oBACD,EACD,OAAQ,CAEN,MAAO,CACL,MAFYC,GAAkB,QAAS,OAAO,CAG/C,CACF,EACD,SAAU,CACR,aAAc,CACZ,OAAOjf,EAAE,0BAA0B,CACpC,EACD,kBAAmB,CACjB,UAAWye,KAAsB,KAAK,oBACpC,GAAIA,EAAmB,aAAe,KAAK,MACzC,OAAOA,EAGX,MAAO,CACL,MAAOD,GAAwB,KAAK,KAAK,EACzC,WAAY,KAAK,KAClB,CACF,EACD,SAAU,CACR,MAAMU,EAAmBnB,GAAoB,EACvCI,EAAeD,GAAsBgB,EAAiB,iBAAkB,EAAE,KAAK,mBAAmB,EACxG,IAAIC,EAAmB,CAAE,EACzB,OAAA,OAAO,OAAOhB,CAAY,EAAE,QAASiB,GAAU,CAC7CD,EAAmBA,EAAiB,OAAOC,EAAM,OAAO,CAChE,CAAO,EACMD,CACb,CACG,EACD,QAAS,CACP,EAAAnf,EACA,OAAOqf,EAAU,CACVA,IAGL,KAAK,MAAQA,EAAS,WACvB,EAQD,aAAaC,EAAQ,CACnB,MAAO,CAACA,EAAO,WAAW,WAAW,YAAY,CAClD,EAUD,SAASA,EAAQZ,EAAOvU,EAAQ,CAC9B,MAAMoV,EAAQpV,EAAO,KAAI,EAAG,MAAM,GAAG,EACrC,OAAImV,EAAO,WAAW,WAAW,YAAY,EACpCA,EAAO,QAAQ,KAAME,GACnB,KAAK,gBAAgBA,EAAO,WAAYD,CAAK,CACrD,EAEI,KAAK,gBAAgBD,EAAO,WAAYC,CAAK,CACrD,EACD,gBAAgBxC,EAAYwC,EAAO,CACjC,OAAOA,EAAM,MAAOE,GAAS1C,EAAW,YAAa,EAAC,SAAS0C,EAAK,YAAW,CAAE,CAAC,CACxF,CACA,CACA,EACA,IAAIC,GAAc,UAAkB,CAClC,IAAIC,EAAM,KAAMC,EAAKD,EAAI,MAAM,GAC/B,OAAOC,EAAG,WAAY,CAAE,MAAO,CAAE,sBAAuBD,EAAI,EAAE,sBAAsB,EAAG,UAAa,GAAO,YAAaA,EAAI,SAAU,SAAY,GAAO,QAAWA,EAAI,QAAS,YAAeA,EAAI,YAAa,WAAcA,EAAI,aAAc,IAAOA,EAAI,IAAK,MAASA,EAAI,iBAAkB,MAAS,SAAW,GAAI,CAAE,kBAAmBA,EAAI,MAAM,EAAI,CAC7V,EACIE,GAAuB,CAAE,EACzBC,GAAgCC,GAClCjB,GACAY,GACAG,GACA,GACA,KACA,IACF,EACA,MAAMG,GAAmBF,GAAc,QClNhC,SAASG,GAAOhf,EAAO,CAC5B,OAAOA,aAAiB,MAAQ,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,eAC5E,CACO,SAASif,GAAOjf,EAAO,CAC5B,OAAIgf,GAAOhf,CAAK,EACP,IAAI,KAAKA,EAAM,SAAS,EAG7BA,GAAS,KACJ,IAAI,KAAK,GAAG,EAGd,IAAI,KAAKA,CAAK,CACvB,CACO,SAASkf,GAAYlf,EAAO,CACjC,OAAOgf,GAAOhf,CAAK,GAAK,CAAC,MAAMA,EAAM,SAAS,CAChD,CACO,SAASgP,GAAYhP,EAAO,CACjC,IAAImf,EAAiB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAEzF,GAAI,EAAEA,GAAkB,GAAKA,GAAkB,GAC7C,MAAM,IAAI,WAAW,sCAAsC,EAG7D,IAAItc,EAAOoc,GAAOjf,CAAK,EACnBN,EAAMmD,EAAK,OAAQ,EACnBuc,GAAQ1f,EAAM,EAAIyf,GAAkB,EACxC,OAAAtc,EAAK,QAAQA,EAAK,QAAO,EAAKuc,CAAI,EAClCvc,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EACjBA,CACT,CACO,SAASwc,GAAgBrf,EAAO,CACrC,IAAIsf,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAE,EAC7EC,EAAsBD,EAAK,eAC3BH,EAAiBI,IAAwB,OAAS,EAAIA,EACtDC,EAAwBF,EAAK,sBAC7BG,EAAwBD,IAA0B,OAAS,EAAIA,EAEnE,GAAI,EAAEC,GAAyB,GAAKA,GAAyB,GAC3D,MAAM,IAAI,WAAW,+CAA+C,EAOtE,QAJI5c,EAAOoc,GAAOjf,CAAK,EACnBnC,EAAOgF,EAAK,YAAa,EACzB6c,EAAuB,IAAI,KAAK,CAAC,EAE5B/jB,EAAIkC,EAAO,EAAGlC,GAAKkC,EAAO,IACjC6hB,EAAqB,YAAY/jB,EAAG,EAAG8jB,CAAqB,EAC5DC,EAAqB,SAAS,EAAG,EAAG,EAAG,CAAC,EACxCA,EAAuB1Q,GAAY0Q,EAAsBP,CAAc,EAEnE,EAAAtc,EAAK,QAAO,GAAM6c,EAAqB,QAAO,IALd/jB,IAKpC,CAKF,OAAO+jB,CACT,CACO,SAASC,GAAQ3f,EAAO,CAC7B,IAAI4f,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAE,EAC9EC,EAAuBD,EAAM,eAC7BT,EAAiBU,IAAyB,OAAS,EAAIA,EACvDC,EAAwBF,EAAM,sBAC9BH,EAAwBK,IAA0B,OAAS,EAAIA,EAE/Djd,EAAOoc,GAAOjf,CAAK,EACnB+f,EAAsB/Q,GAAYnM,EAAMsc,CAAc,EACtDO,EAAuBL,GAAgBxc,EAAM,CAC/C,eAAgBsc,EAChB,sBAAuBM,CAC3B,CAAG,EACGL,EAAOW,EAAoB,QAAO,EAAKL,EAAqB,QAAS,EACzE,OAAO,KAAK,MAAMN,GAAQ,EAAI,GAAK,KAAO,IAAK,EAAI,CACrD,CCzEA,IAAIY,GAAS,CACX,OAAQ,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,UAAU,EACjI,YAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAChG,SAAU,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,UAAU,EACvF,cAAe,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAC/D,YAAa,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAI,EACtD,eAAgB,EAChB,sBAAuB,CACzB,ECNIC,GAAe,sGAEnB,SAASC,EAAIjd,EAAK,CAKhB,QAJIF,EAAM,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAC1Eod,EAAS,GAAG,OAAO,KAAK,IAAIld,CAAG,CAAC,EAChC0T,EAAO1T,EAAM,EAAI,IAAM,GAEpBkd,EAAO,OAASpd,GACrBod,EAAS,IAAI,OAAOA,CAAM,EAG5B,OAAOxJ,EAAOwJ,CAChB,CAEA,SAASC,GAAUvd,EAAM,CACvB,OAAO,KAAK,MAAMA,EAAK,kBAAmB,EAAG,EAAE,EAAI,EACrD,CAEA,SAASwd,GAAenf,EAAQ,CAC9B,IAAIof,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAChF3J,EAAOzV,EAAS,EAAI,IAAM,IAC1Bqf,EAAY,KAAK,IAAIrf,CAAM,EAC3BsF,EAAQ,KAAK,MAAM+Z,EAAY,EAAE,EACjC9Z,EAAU8Z,EAAY,GAC1B,OAAO5J,EAAOuJ,EAAI1Z,EAAO,CAAC,EAAI8Z,EAAYJ,EAAIzZ,EAAS,CAAC,CAC1D,CAEA,IAAI+Z,GAAW,SAAkBjgB,EAAGkgB,EAAGC,EAAa,CAClD,IAAIC,EAAOpgB,EAAI,GAAK,KAAO,KAC3B,OAAOmgB,EAAcC,EAAK,kBAAiB,EAAKA,CAClD,EAEIC,GAAc,CAChB,EAAG,SAAW/d,EAAM,CAClB,IAAI+I,EAAI/I,EAAK,YAAa,EAC1B,OAAO+I,GAAK,KAAO,GAAG,OAAOA,CAAC,EAAI,IAAI,OAAOA,CAAC,CAC/C,EAED,GAAI,SAAY/I,EAAM,CACpB,OAAOqd,EAAIrd,EAAK,YAAW,EAAI,CAAC,EAAE,OAAO,CAAC,CAC3C,EAED,KAAM,SAAcA,EAAM,CACxB,OAAOqd,EAAIrd,EAAK,YAAW,EAAI,CAAC,CACjC,EAED,EAAG,SAAWA,EAAM,CAClB,OAAOA,EAAK,SAAQ,EAAK,CAC1B,EAED,GAAI,SAAYA,EAAM,CACpB,OAAOqd,EAAIrd,EAAK,SAAQ,EAAK,EAAG,CAAC,CAClC,EACD,IAAK,SAAaA,EAAMmd,EAAQ,CAC9B,OAAOA,EAAO,YAAYnd,EAAK,SAAQ,CAAE,CAC1C,EACD,KAAM,SAAcA,EAAMmd,EAAQ,CAChC,OAAOA,EAAO,OAAOnd,EAAK,SAAQ,CAAE,CACrC,EAED,EAAG,SAAWA,EAAM,CAClB,OAAOA,EAAK,QAAS,CACtB,EAED,GAAI,SAAYA,EAAM,CACpB,OAAOqd,EAAIrd,EAAK,QAAO,EAAI,CAAC,CAC7B,EAED,EAAG,SAAWA,EAAM,CAClB,OAAOA,EAAK,SAAU,CACvB,EAED,GAAI,SAAYA,EAAM,CACpB,OAAOqd,EAAIrd,EAAK,SAAQ,EAAI,CAAC,CAC9B,EAED,EAAG,SAAWA,EAAM,CAClB,IAAI2D,EAAQ3D,EAAK,SAAU,EAE3B,OAAI2D,IAAU,EACL,GAGLA,EAAQ,GACHA,EAAQ,GAGVA,CACR,EAED,GAAI,UAAc,CAChB,IAAIA,EAAQoa,GAAY,EAAE,MAAMA,GAAa,SAAS,EACtD,OAAOV,EAAI1Z,EAAO,CAAC,CACpB,EAED,EAAG,SAAW3D,EAAM,CAClB,OAAOA,EAAK,WAAY,CACzB,EAED,GAAI,SAAYA,EAAM,CACpB,OAAOqd,EAAIrd,EAAK,WAAU,EAAI,CAAC,CAChC,EAED,EAAG,SAAWA,EAAM,CAClB,OAAOA,EAAK,WAAY,CACzB,EAED,GAAI,SAAYA,EAAM,CACpB,OAAOqd,EAAIrd,EAAK,WAAU,EAAI,CAAC,CAChC,EAED,EAAG,SAAWA,EAAM,CAClB,OAAO,KAAK,MAAMA,EAAK,gBAAe,EAAK,GAAG,CAC/C,EAED,GAAI,SAAYA,EAAM,CACpB,OAAOqd,EAAI,KAAK,MAAMrd,EAAK,kBAAoB,EAAE,EAAG,CAAC,CACtD,EAED,IAAK,SAAaA,EAAM,CACtB,OAAOqd,EAAIrd,EAAK,gBAAe,EAAI,CAAC,CACrC,EAED,EAAG,SAAWA,EAAM,CAClB,OAAOA,EAAK,OAAQ,CACrB,EAED,GAAI,SAAYA,EAAMmd,EAAQ,CAC5B,OAAOA,EAAO,YAAYnd,EAAK,OAAM,CAAE,CACxC,EAED,IAAK,SAAaA,EAAMmd,EAAQ,CAC9B,OAAOA,EAAO,cAAcnd,EAAK,OAAM,CAAE,CAC1C,EAED,KAAM,SAAcA,EAAMmd,EAAQ,CAChC,OAAOA,EAAO,SAASnd,EAAK,OAAM,CAAE,CACrC,EAED,EAAG,SAAWA,EAAMmd,EAAQ,CAC1B,IAAIa,EAAeb,EAAO,UAAYQ,GACtC,OAAOK,EAAahe,EAAK,SAAQ,EAAIA,EAAK,WAAY,EAAE,EAAK,CAC9D,EAED,EAAG,SAAWA,EAAMmd,EAAQ,CAC1B,IAAIa,EAAeb,EAAO,UAAYQ,GACtC,OAAOK,EAAahe,EAAK,SAAQ,EAAIA,EAAK,WAAY,EAAE,EAAI,CAC7D,EAED,EAAG,SAAWA,EAAM,CAClB,OAAOwd,GAAeD,GAAUvd,CAAI,EAAG,GAAG,CAC3C,EAED,GAAI,SAAYA,EAAM,CACpB,OAAOwd,GAAeD,GAAUvd,CAAI,CAAC,CACtC,EAED,EAAG,SAAWA,EAAM,CAClB,OAAO,KAAK,MAAMA,EAAK,QAAO,EAAK,GAAI,CACxC,EAED,EAAG,SAAWA,EAAM,CAClB,OAAOA,EAAK,QAAS,CACtB,EACD,EAAG,SAAWA,EAAMmd,EAAQ,CAC1B,OAAOL,GAAQ9c,EAAM,CACnB,eAAgBmd,EAAO,eACvB,sBAAuBA,EAAO,qBACpC,CAAK,CACF,EACD,GAAI,SAAYnd,EAAMmd,EAAQ,CAC5B,OAAOE,EAAIU,GAAY,EAAE/d,EAAMmd,CAAM,EAAG,CAAC,CAC7C,CACA,EACO,SAASc,GAAO7d,EAAK5F,EAAK,CAC/B,IAAIoN,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAE,EAChFsW,EAAY1jB,EAAM,OAAOA,CAAG,EAAI,2BAChCwF,EAAOoc,GAAOhc,CAAG,EAErB,GAAI,CAACic,GAAYrc,CAAI,EACnB,MAAO,eAGT,IAAImd,EAASvV,EAAQ,QAAUuW,GAC/B,OAAOD,EAAU,QAAQd,GAAc,SAAUgB,EAAOC,EAAI,CAC1D,OAAIA,IAIA,OAAON,GAAYK,CAAK,GAAM,WACzB,GAAG,OAAOL,GAAYK,CAAK,EAAEpe,EAAMmd,CAAM,CAAC,EAG5CiB,EACX,CAAG,CACH,CCrMA,SAASE,GAAmBvX,EAAK,CAAE,OAAOwX,GAAmBxX,CAAG,GAAKyX,GAAiBzX,CAAG,GAAK0X,IAAqB,CAEnH,SAASA,IAAqB,CAAE,MAAM,IAAI,UAAU,iDAAiD,CAAE,CAEvG,SAASD,GAAiB3N,EAAM,CAAE,GAAI,OAAO,YAAY,OAAOA,CAAI,GAAK,OAAO,UAAU,SAAS,KAAKA,CAAI,IAAM,qBAAsB,OAAO,MAAM,KAAKA,CAAI,CAAE,CAEhK,SAAS0N,GAAmBxX,EAAK,CAAE,GAAI,MAAM,QAAQA,CAAG,EAAG,CAAE,QAASjO,EAAI,EAAG4lB,EAAO,IAAI,MAAM3X,EAAI,MAAM,EAAGjO,EAAIiO,EAAI,OAAQjO,IAAO4lB,EAAK5lB,CAAC,EAAIiO,EAAIjO,CAAC,EAAK,OAAO4lB,CAAO,CAAA,CAEpK,SAASC,GAAQhkB,EAAQikB,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKlkB,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAImkB,EAAU,OAAO,sBAAsBnkB,CAAM,EAAOikB,IAAgBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBpkB,EAAQokB,CAAG,EAAE,UAAa,CAAA,GAAGF,EAAK,KAAK,MAAMA,EAAMC,CAAO,EAAK,OAAOD,CAAK,CAEnV,SAASG,GAAcxX,EAAQ,CAAE,QAAS1O,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIyO,EAAS,UAAUzO,CAAC,GAAK,KAAO,UAAUA,CAAC,EAAI,CAAE,EAAMA,EAAI,EAAK6lB,GAAQpX,EAAQ,EAAI,EAAE,QAAQ,SAAUrK,EAAK,CAAE+hB,GAAgBzX,EAAQtK,EAAKqK,EAAOrK,CAAG,CAAC,CAAE,CAAE,EAAc,OAAO,0BAA6B,OAAO,iBAAiBsK,EAAQ,OAAO,0BAA0BD,CAAM,CAAC,EAAYoX,GAAQpX,CAAM,EAAE,QAAQ,SAAUrK,EAAK,CAAE,OAAO,eAAesK,EAAQtK,EAAK,OAAO,yBAAyBqK,EAAQrK,CAAG,CAAC,CAAE,CAAE,CAAI,CAAG,OAAOsK,CAAO,CAEpgB,SAAS0X,GAAenY,EAAKjO,EAAG,CAAE,OAAOqmB,GAAgBpY,CAAG,GAAKqY,GAAsBrY,EAAKjO,CAAC,GAAKumB,GAAgB,CAAG,CAErH,SAASA,IAAmB,CAAE,MAAM,IAAI,UAAU,sDAAsD,CAAE,CAE1G,SAASD,GAAsBrY,EAAKjO,EAAG,CAAE,GAAM,OAAO,YAAY,OAAOiO,CAAG,GAAK,OAAO,UAAU,SAAS,KAAKA,CAAG,IAAM,qBAAmC,CAAA,IAAIuY,EAAO,CAAA,EAAQC,EAAK,GAAUC,EAAK,GAAWC,EAAK,OAAW,GAAI,CAAE,QAASC,EAAK3Y,EAAI,OAAO,QAAQ,EAAG,EAAE4Y,EAAI,EAAEJ,GAAMI,EAAKD,EAAG,QAAQ,QAAoBJ,EAAK,KAAKK,EAAG,KAAK,EAAO,EAAA7mB,GAAKwmB,EAAK,SAAWxmB,IAA3DymB,EAAK,GAA6B,CAAoC,OAAUve,EAAK,CAAEwe,EAAK,GAAMC,EAAKze,CAAM,QAAA,CAAW,GAAI,CAAM,CAACue,GAAMG,EAAG,QAAa,MAAMA,EAAG,OAAS,CAAK,QAAA,CAAW,GAAIF,EAAI,MAAMC,CAAG,EAAK,OAAOH,CAAAA,CAAK,CAE1gB,SAASH,GAAgBpY,EAAK,CAAE,GAAI,MAAM,QAAQA,CAAG,EAAG,OAAOA,CAAI,CAEnE,SAASkY,GAAgBjY,EAAK9J,EAAKC,EAAO,CAAE,OAAID,KAAO8J,EAAO,OAAO,eAAeA,EAAK9J,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAY6J,EAAI9J,CAAG,EAAIC,EAAgB6J,CAAI,CAI/M,IAAI4Y,GAAmB,6FACnBC,GAAS,KAETC,GAAS,OAETC,GAAS,QAETC,GAAS,QAETC,GAAY,QAEZC,GAAmB,iBAEnBC,GAAc,WAEdC,GAAiB,uBAGjBC,GAAO,OACPC,GAAQ,QACRC,GAAM,MACNC,GAAO,OACPC,GAAS,SACTC,GAAS,SACTC,GAAc,cACdC,GAAa,CAAE,EAEfC,EAAe,SAAsBC,EAAOC,EAAO/d,EAAU,CAC/D,IAAIge,EAAS,MAAM,QAAQF,CAAK,EAAIA,EAAQ,CAACA,CAAK,EAC9CG,EAEA,OAAOje,GAAa,SACtBie,EAAO,SAAcpgB,EAAO,CAC1B,IAAI1D,EAAQ,SAAS0D,EAAO,EAAE,EAC9B,OAAOoe,GAAgB,CAAA,EAAIjc,EAAU7F,CAAK,CAC3C,EAED8jB,EAAOje,EAGTge,EAAO,QAAQ,SAAU9jB,EAAK,CAC5B0jB,GAAW1jB,CAAG,EAAI,CAAC6jB,EAAOE,CAAI,CAClC,CAAG,CACH,EAEIC,GAAqB,SAA4B1mB,EAAK,CACxD,OAAOA,EAAI,QAAQ,sBAAuB,MAAM,CAClD,EAEI2mB,GAAkB,SAAyBC,EAAW,CACxD,OAAO,SAAUjE,EAAQ,CACvB,IAAIkE,EAAQlE,EAAOiE,CAAS,EAE5B,GAAI,CAAC,MAAM,QAAQC,CAAK,EACtB,MAAM,IAAI,MAAM,UAAU,OAAOD,EAAW,iBAAiB,CAAC,EAGhE,OAAO,IAAI,OAAOC,EAAM,IAAIH,EAAkB,EAAE,KAAK,GAAG,CAAC,CAC1D,CACH,EAEII,GAAoB,SAA2BF,EAAWlkB,EAAK,CACjE,OAAO,SAAU2D,EAAOsc,EAAQ,CAC9B,IAAIkE,EAAQlE,EAAOiE,CAAS,EAE5B,GAAI,CAAC,MAAM,QAAQC,CAAK,EACtB,MAAM,IAAI,MAAM,UAAU,OAAOD,EAAW,iBAAiB,CAAC,EAGhE,IAAIjL,EAAQkL,EAAM,QAAQxgB,CAAK,EAE/B,GAAIsV,EAAQ,EACV,MAAM,IAAI,MAAM,cAAc,EAGhC,OAAO8I,GAAgB,CAAA,EAAI/hB,EAAKiZ,CAAK,CACtC,CACH,EAEA0K,EAAa,IAAKV,GAAaE,EAAI,EACnCQ,EAAa,KAAMf,GAAQ,SAAUjf,EAAO,CAC1C,IAAI7F,EAAO,IAAI,KAAM,EAAC,YAAa,EAC/BumB,EAAO,KAAK,MAAMvmB,EAAO,GAAG,EAC5BmC,EAAQ,SAAS0D,EAAO,EAAE,EAC9B,OAAA1D,GAASA,EAAQ,GAAKokB,EAAO,EAAIA,GAAQ,IAAMpkB,EACxC8hB,GAAgB,CAAA,EAAIoB,GAAMljB,CAAK,CACxC,CAAC,EACD0jB,EAAa,OAAQb,GAAQK,EAAI,EACjCQ,EAAa,IAAKZ,GAAW,SAAUpf,EAAO,CAC5C,OAAOoe,GAAgB,CAAA,EAAIqB,GAAO,SAASzf,EAAO,EAAE,EAAI,CAAC,CAC3D,CAAC,EACDggB,EAAa,KAAMf,GAAQ,SAAUjf,EAAO,CAC1C,OAAOoe,GAAgB,CAAA,EAAIqB,GAAO,SAASzf,EAAO,EAAE,EAAI,CAAC,CAC3D,CAAC,EACDggB,EAAa,MAAOM,GAAgB,aAAa,EAAGG,GAAkB,cAAehB,EAAK,CAAC,EAC3FO,EAAa,OAAQM,GAAgB,QAAQ,EAAGG,GAAkB,SAAUhB,EAAK,CAAC,EAClFO,EAAa,IAAKZ,GAAWM,EAAG,EAChCM,EAAa,KAAMf,GAAQS,EAAG,EAC9BM,EAAa,CAAC,IAAK,GAAG,EAAGZ,GAAWO,EAAI,EACxCK,EAAa,CAAC,KAAM,IAAI,EAAGf,GAAQU,EAAI,EACvCK,EAAa,IAAKZ,GAAWQ,EAAM,EACnCI,EAAa,KAAMf,GAAQW,EAAM,EACjCI,EAAa,IAAKZ,GAAWS,EAAM,EACnCG,EAAa,KAAMf,GAAQY,EAAM,EACjCG,EAAa,IAAKhB,GAAQ,SAAUhf,EAAO,CACzC,OAAOoe,GAAgB,CAAA,EAAI0B,GAAa,SAAS9f,EAAO,EAAE,EAAI,GAAG,CACnE,CAAC,EACDggB,EAAa,KAAMf,GAAQ,SAAUjf,EAAO,CAC1C,OAAOoe,GAAgB,CAAA,EAAI0B,GAAa,SAAS9f,EAAO,EAAE,EAAI,EAAE,CAClE,CAAC,EACDggB,EAAa,MAAOd,GAAQY,EAAW,EAEvC,SAASa,GAAcrE,EAAQ,CAC7B,OAAOA,EAAO,eAAiB,eACjC,CAEA,SAASsE,GAAY5gB,EAAO,CAC1B,MAAO,GAAG,OAAOA,CAAK,EAAE,YAAW,EAAG,OAAO,CAAC,IAAM,GACtD,CAEAggB,EAAa,CAAC,IAAK,GAAG,EAAGW,GAAe,SAAU3gB,EAAOsc,EAAQ,CAC/D,IAAIuE,EAAO,OAAOvE,EAAO,MAAS,WAAaA,EAAO,KAAKtc,CAAK,EAAI4gB,GAAY5gB,CAAK,EACrF,MAAO,CACL,KAAM6gB,CACP,CACH,CAAC,EAED,SAASC,GAAiBnnB,EAAK,CAC7B,IAAIonB,EAAQpnB,EAAI,MAAM,cAAc,GAAK,CAAC,IAAK,IAAK,GAAG,EACnDqnB,EAAQ3C,GAAe0C,EAAO,CAAC,EAC/BE,EAASD,EAAM,CAAC,EAChB/kB,EAAO+kB,EAAM,CAAC,EACd9kB,EAAS8kB,EAAM,CAAC,EAEhBje,EAAU,SAAS9G,EAAM,EAAE,EAAI,GAAK,SAASC,EAAQ,EAAE,EAE3D,OAAI6G,IAAY,EACP,EAGFke,IAAW,IAAM,CAACle,EAAU,CAACA,CACtC,CAEAid,EAAa,CAAC,IAAK,IAAI,EAAGX,GAAkB,SAAUrf,EAAO,CAC3D,MAAO,CACL,OAAQ8gB,GAAiB9gB,CAAK,CAC/B,CACH,CAAC,EACDggB,EAAa,IAAKV,GAAa,SAAUtf,EAAO,CAC9C,MAAO,CACL,KAAM,IAAI,KAAK,SAASA,EAAO,EAAE,CAAC,CACnC,CACH,CAAC,EACDggB,EAAa,IAAKT,GAAgB,SAAUvf,EAAO,CACjD,MAAO,CACL,KAAM,IAAI,KAAK,WAAWA,CAAK,EAAI,GAAI,CACxC,CACH,CAAC,EACDggB,EAAa,IAAKhB,GAAQ,SAAS,EACnCgB,EAAa,KAAMM,GAAgB,aAAa,EAAGG,GAAkB,cAAe,SAAS,CAAC,EAC9FT,EAAa,MAAOM,GAAgB,eAAe,EAAGG,GAAkB,gBAAiB,SAAS,CAAC,EACnGT,EAAa,OAAQM,GAAgB,UAAU,EAAGG,GAAkB,WAAY,SAAS,CAAC,EAC1FT,EAAa,IAAKZ,GAAW,MAAM,EACnCY,EAAa,KAAMf,GAAQ,MAAM,EAEjC,SAASiC,GAASjlB,EAAM4kB,EAAM,CAC5B,GAAI5kB,IAAS,QAAa4kB,IAAS,QACjC,GAAIA,GACF,GAAI5kB,EAAO,GACT,OAAOA,EAAO,WAEPA,IAAS,GAClB,SAIJ,OAAOA,CACT,CAEA,SAASklB,GAAkBnhB,EAAO,CAMhC,QALIohB,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,IAAI,KACrFtkB,EAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAC7BukB,EAAY,CAACD,EAAW,YAAW,EAAIA,EAAW,SAAQ,EAAIA,EAAW,QAAS,EAAEA,EAAW,SAAU,EAAEA,EAAW,WAAY,EAAEA,EAAW,WAAY,EAAEA,EAAW,iBAAiB,EACzLE,EAAY,GAEPrpB,EAAI,EAAGA,EAAI,EAAGA,IACjB+H,EAAM/H,CAAC,IAAM,OACf6E,EAAO7E,CAAC,EAAIqpB,EAAYD,EAAUppB,CAAC,EAAI6E,EAAO7E,CAAC,GAE/C6E,EAAO7E,CAAC,EAAI+H,EAAM/H,CAAC,EACnBqpB,EAAY,IAIhB,OAAOxkB,CACT,CAEA,SAASykB,GAAWrZ,EAAGvL,EAAGwL,EAAGtL,EAAG2kB,EAAGla,EAAGlI,EAAI,CACxC,IAAID,EAEJ,OAAI+I,EAAI,KAAOA,GAAK,GAClB/I,EAAO,IAAI,KAAK+I,EAAI,IAAKvL,EAAGwL,EAAGtL,EAAG2kB,EAAGla,EAAGlI,CAAE,EAEtC,SAASD,EAAK,YAAW,CAAE,GAC7BA,EAAK,YAAY+I,CAAC,GAGpB/I,EAAO,IAAI,KAAK+I,EAAGvL,EAAGwL,EAAGtL,EAAG2kB,EAAGla,EAAGlI,CAAE,EAG/BD,CACT,CAEA,SAASsiB,IAAgB,CAGvB,QAFItiB,EAEKuiB,EAAO,UAAU,OAAQC,EAAO,IAAI,MAAMD,CAAI,EAAGE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,CAAI,EAAI,UAAUA,CAAI,EAG7B,IAAI1Z,EAAIyZ,EAAK,CAAC,EAEd,OAAIzZ,EAAI,KAAOA,GAAK,GAClByZ,EAAK,CAAC,GAAK,IACXxiB,EAAO,IAAI,KAAK,KAAK,IAAI,MAAM,KAAMwiB,CAAI,CAAC,EAEtC,SAASxiB,EAAK,eAAc,CAAE,GAChCA,EAAK,eAAe+I,CAAC,GAGvB/I,EAAO,IAAI,KAAK,KAAK,IAAI,MAAM,KAAMwiB,CAAI,CAAC,EAGrCxiB,CACT,CAEA,SAAS0iB,GAAWC,EAAY1E,EAAQd,EAAQ,CAC9C,IAAI6D,EAAS/C,EAAO,MAAM2B,EAAgB,EAE1C,GAAI,CAACoB,EACH,MAAM,IAAI,MAMZ,QAHI4B,EAAS5B,EAAO,OAChB6B,EAAO,CAAE,EAEJ/pB,EAAI,EAAGA,EAAI8pB,EAAQ9pB,GAAK,EAAG,CAClC,IAAIgoB,EAAQE,EAAOloB,CAAC,EAChBgqB,EAAUlC,GAAWE,CAAK,EAE9B,GAAKgC,EAQE,CACL,IAAI/B,EAAQ,OAAO+B,EAAQ,CAAC,GAAM,WAAaA,EAAQ,CAAC,EAAE3F,CAAM,EAAI2F,EAAQ,CAAC,EACzEC,EAASD,EAAQ,CAAC,EAClB3lB,GAAS4jB,EAAM,KAAK4B,CAAU,GAAK,CAAE,GAAE,CAAC,EACxC3b,EAAM+b,EAAO5lB,EAAOggB,CAAM,EAC9B0F,EAAO7D,GAAc,CAAA,EAAI6D,EAAM,CAAA,EAAI7b,CAAG,EACtC2b,EAAaA,EAAW,QAAQxlB,EAAO,EAAE,CAC/C,KAfkB,CACZ,IAAI2gB,EAAOgD,EAAM,QAAQ,WAAY,EAAE,EAEvC,GAAI6B,EAAW,QAAQ7E,CAAI,IAAM,EAC/B6E,EAAaA,EAAW,OAAO7E,EAAK,MAAM,MAE1C,OAAM,IAAI,MAAM,WAAW,CAEnC,CAQA,CAEE,OAAO+E,CACT,CAEO,SAASjiB,GAAMpG,EAAKyjB,EAAQ,CACjC,IAAIrW,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAE,EAEpF,GAAI,CACF,IAAIob,EAAkBpb,EAAQ,OAC1Bqb,EAAUD,IAAoB,OAAS7E,GAAgB6E,EACvDE,EAAsBtb,EAAQ,WAC9Bqa,EAAaiB,IAAwB,OAAS,IAAI,KAASA,EAE3DC,EAAcT,GAAWloB,EAAKyjB,EAAQgF,CAAO,EAC7CjoB,EAAOmoB,EAAY,KACnBpoB,EAAQooB,EAAY,MACpBtmB,EAAMsmB,EAAY,IAClBrmB,EAAOqmB,EAAY,KACnBpmB,EAASomB,EAAY,OACrBnmB,EAASmmB,EAAY,OACrBC,EAAcD,EAAY,YAC1BzB,EAAOyB,EAAY,KACnBnjB,EAAOmjB,EAAY,KACnB9kB,EAAS8kB,EAAY,OACrBllB,GAAUklB,EAAY,QACtBE,EAAOF,EAAY,KAEvB,GAAInjB,EACF,OAAOA,EAGT,IAAIsjB,GAAa,CAACtoB,EAAMD,EAAO8B,EAAKC,EAAMC,EAAQC,EAAQomB,CAAW,EAGrE,GAFAE,GAAW,CAAC,EAAIvB,GAASuB,GAAW,CAAC,EAAG5B,CAAI,EAExC2B,IAAS,QAAatoB,IAAU,QAAa8B,IAAQ,OAAW,CAElE,IAAI0mB,GAAY/G,GAAgBxhB,IAAS,OAAYinB,EAAa,IAAI,KAAKjnB,EAAM,CAAC,EAAG,CACnF,eAAgBioB,EAAQ,eACxB,sBAAuBA,EAAQ,qBACvC,CAAO,EACD,OAAO,IAAI,KAAKM,GAAU,WAAaF,EAAO,GAAK,EAAI,GAAK,KAAO,GAAI,CAC7E,CAEI,IAAIG,GACA7lB,GAASqkB,GAAkBsB,GAAYrB,CAAU,EAUrD,OARI5jB,IAAW,QACbV,GAAO,CAAC,GAAKU,EAAS,GAAK,IAC3BmlB,GAAalB,GAAc,MAAM,OAAQhE,GAAmB3gB,EAAM,CAAC,GAEnE6lB,GAAapB,GAAW,MAAM,OAAQ9D,GAAmB3gB,EAAM,CAAC,EAI9DM,KAAY,QAAaulB,GAAW,OAAM,IAAOvlB,GAC5C,IAAI,KAAK,GAAG,EAGdulB,EACR,MAAW,CACV,OAAO,IAAI,KAAK,GAAG,CACvB,CACA,CC/VA,SAASC,GAAQzc,EAAK,CACpB,0BAEA,OAAI,OAAO,QAAW,YAAc,OAAO,OAAO,UAAa,SAC7Dyc,GAAU,SAAUzc,EAAK,CACvB,OAAO,OAAOA,CACf,EAEDyc,GAAU,SAAUzc,EAAK,CACvB,OAAOA,GAAO,OAAO,QAAW,YAAcA,EAAI,cAAgB,QAAUA,IAAQ,OAAO,UAAY,SAAW,OAAOA,CAC1H,EAGIyc,GAAQzc,CAAG,CACpB,CAEA,SAASiY,GAAgBjY,EAAK9J,EAAKC,EAAO,CACxC,OAAID,KAAO8J,EACT,OAAO,eAAeA,EAAK9J,EAAK,CAC9B,MAAOC,EACP,WAAY,GACZ,aAAc,GACd,SAAU,EAChB,CAAK,EAED6J,EAAI9J,CAAG,EAAIC,EAGN6J,CACT,CAEA,SAAS0c,IAAW,CAClB,OAAAA,GAAW,OAAO,QAAU,SAAUlc,EAAQ,CAC5C,QAAS1O,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAIyO,EAAS,UAAUzO,CAAC,EAExB,QAASoE,KAAOqK,EACV,OAAO,UAAU,eAAe,KAAKA,EAAQrK,CAAG,IAClDsK,EAAOtK,CAAG,EAAIqK,EAAOrK,CAAG,EAGlC,CAEI,OAAOsK,CACR,EAEMkc,GAAS,MAAM,KAAM,SAAS,CACvC,CAEA,SAAS/E,GAAQhkB,EAAQikB,EAAgB,CACvC,IAAIC,EAAO,OAAO,KAAKlkB,CAAM,EAE7B,GAAI,OAAO,sBAAuB,CAChC,IAAImkB,EAAU,OAAO,sBAAsBnkB,CAAM,EAC7CikB,IAAgBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAC1D,OAAO,OAAO,yBAAyBpkB,EAAQokB,CAAG,EAAE,UAC1D,CAAK,GACDF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CACjC,CAEE,OAAOD,CACT,CAEA,SAAS8E,EAAenc,EAAQ,CAC9B,QAAS1O,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAIyO,EAAS,UAAUzO,CAAC,GAAK,KAAO,UAAUA,CAAC,EAAI,CAAE,EAEjDA,EAAI,EACN6lB,GAAQ,OAAOpX,CAAM,EAAG,EAAI,EAAE,QAAQ,SAAUrK,EAAK,CACnD+hB,GAAgBzX,EAAQtK,EAAKqK,EAAOrK,CAAG,CAAC,CAChD,CAAO,EACQ,OAAO,0BAChB,OAAO,iBAAiBsK,EAAQ,OAAO,0BAA0BD,CAAM,CAAC,EAExEoX,GAAQ,OAAOpX,CAAM,CAAC,EAAE,QAAQ,SAAUrK,EAAK,CAC7C,OAAO,eAAesK,EAAQtK,EAAK,OAAO,yBAAyBqK,EAAQrK,CAAG,CAAC,CACvF,CAAO,CAEP,CAEE,OAAOsK,CACT,CAEA,SAASoc,GAA8Brc,EAAQsc,EAAU,CACvD,GAAItc,GAAU,KAAM,MAAO,CAAE,EAC7B,IAAIC,EAAS,CAAE,EACXsc,EAAa,OAAO,KAAKvc,CAAM,EAC/BrK,EAAKpE,EAET,IAAKA,EAAI,EAAGA,EAAIgrB,EAAW,OAAQhrB,IACjCoE,EAAM4mB,EAAWhrB,CAAC,EACd,EAAA+qB,EAAS,QAAQ3mB,CAAG,GAAK,KAC7BsK,EAAOtK,CAAG,EAAIqK,EAAOrK,CAAG,GAG1B,OAAOsK,CACT,CAEA,SAASuc,GAAyBxc,EAAQsc,EAAU,CAClD,GAAItc,GAAU,KAAM,MAAO,CAAE,EAE7B,IAAIC,EAASoc,GAA8Brc,EAAQsc,CAAQ,EAEvD3mB,EAAKpE,EAET,GAAI,OAAO,sBAAuB,CAChC,IAAIkrB,EAAmB,OAAO,sBAAsBzc,CAAM,EAE1D,IAAKzO,EAAI,EAAGA,EAAIkrB,EAAiB,OAAQlrB,IACvCoE,EAAM8mB,EAAiBlrB,CAAC,EACpB,EAAA+qB,EAAS,QAAQ3mB,CAAG,GAAK,IACxB,OAAO,UAAU,qBAAqB,KAAKqK,EAAQrK,CAAG,IAC3DsK,EAAOtK,CAAG,EAAIqK,EAAOrK,CAAG,EAE9B,CAEE,OAAOsK,CACT,CAEA,SAAS0X,GAAenY,EAAKjO,EAAG,CAC9B,OAAOqmB,GAAgBpY,CAAG,GAAKqY,GAAsBrY,EAAKjO,CAAC,GAAKmrB,GAA4Bld,EAAKjO,CAAC,GAAKumB,GAAkB,CAC3H,CAEA,SAASF,GAAgBpY,EAAK,CAC5B,GAAI,MAAM,QAAQA,CAAG,EAAG,OAAOA,CACjC,CAEA,SAASqY,GAAsBrY,EAAKjO,EAAG,CACrC,GAAI,EAAA,OAAO,OAAW,KAAe,EAAE,OAAO,YAAY,OAAOiO,CAAG,IACpE,CAAIuY,IAAAA,EAAO,CAAE,EACTC,EAAK,GACLC,EAAK,GACLC,EAAK,OAET,GAAI,CACF,QAASC,EAAK3Y,EAAI,OAAO,QAAQ,EAAG,EAAE4Y,EAAI,EAAEJ,GAAMI,EAAKD,EAAG,KAAI,GAAI,QAChEJ,EAAK,KAAKK,EAAG,KAAK,EAEd,EAAA7mB,GAAKwmB,EAAK,SAAWxmB,IAH8CymB,EAAK,GAG5E,CAEH,OAAQve,EAAK,CACZwe,EAAK,GACLC,EAAKze,CACT,QAAY,CACR,GAAI,CACE,CAACue,GAAMG,EAAG,QAAa,MAAMA,EAAG,OAAW,CACrD,QAAc,CACR,GAAIF,EAAI,MAAMC,CACpB,CACA,CAEE,OAAOH,CACT,CAAA,CAEA,SAAS2E,GAA4Bpb,EAAGqb,EAAQ,CAC9C,GAAKrb,EACL,CAAA,GAAI,OAAOA,GAAM,SAAU,OAAOsb,GAAkBtb,EAAGqb,CAAM,EAC7D,IAAIE,EAAI,OAAO,UAAU,SAAS,KAAKvb,CAAC,EAAE,MAAM,EAAG,EAAE,EAErD,GADIub,IAAM,UAAYvb,EAAE,cAAaub,EAAIvb,EAAE,YAAY,MACnDub,IAAM,OAASA,IAAM,MAAO,OAAO,MAAM,KAAKA,CAAC,EACnD,GAAIA,IAAM,aAAe,2CAA2C,KAAKA,CAAC,EAAG,OAAOD,GAAkBtb,EAAGqb,CAAM,CACjH,CAAA,CAEA,SAASC,GAAkBpd,EAAK7G,EAAK,EAC/BA,GAAO,MAAQA,EAAM6G,EAAI,UAAQ7G,EAAM6G,EAAI,QAE/C,QAASjO,EAAI,EAAG4lB,EAAO,IAAI,MAAMxe,CAAG,EAAGpH,EAAIoH,EAAKpH,IAAK4lB,EAAK5lB,CAAC,EAAIiO,EAAIjO,CAAC,EAEpE,OAAO4lB,CACT,CAEA,SAASW,IAAmB,CAC1B,MAAM,IAAI,UAAU;AAAA,mFAA2I,CACjK,CAEA,SAASgF,IAAa,CACpB,OAAOA,GAAa,OAAO,QAAU,SAAU5nB,EAAG,CAChD,QAASC,EAAGqX,EAAI,EAAGA,EAAI,UAAU,OAAQA,IACvC,QAAS/K,KAAKtM,EAAI,UAAUqX,CAAC,EAAGrX,EAC9B,OAAO,UAAU,eAAe,KAAKA,EAAGsM,CAAC,IAAMvM,EAAEuM,CAAC,EAAItM,EAAEsM,CAAC,GAI7D,OAAOvM,CACR,EAAE4nB,GAAW,MAAM,KAAM,SAAS,CACrC,CAEA,IAAIC,GAAc,CAAC,QAAS,QAAS,UAAU,EAC3CC,GAAe,CAAC,QAAS,QAAS,YAAY,EAC9CC,GAAkB,CAAC,KAAM,UAAU,EACnCC,GAAgB,SAAuBhoB,EAAG,CAC5C,OAAOA,EAAE,OAAO,SAAUsX,EAAGtX,EAAG,CAC9B,QAASC,KAAKD,EACZ,GAAI,CAACsX,EAAErX,CAAC,EAAGqX,EAAErX,CAAC,EAAID,EAAEC,CAAC,UAAkB4nB,GAAY,QAAQ5nB,CAAC,IAA5B,GAA+BqX,EAAErX,CAAC,EAAI2nB,GAAW,CAAE,EAAEtQ,EAAErX,CAAC,EAAGD,EAAEC,CAAC,CAAC,UAAkB6nB,GAAa,QAAQ7nB,CAAC,IAA7B,GAAgC,CACxI,IAAIsM,EAAI+K,EAAErX,CAAC,YAAa,MAAQqX,EAAErX,CAAC,EAAI,CAACqX,EAAErX,CAAC,CAAC,EACxC0L,EAAI3L,EAAEC,CAAC,YAAa,MAAQD,EAAEC,CAAC,EAAI,CAACD,EAAEC,CAAC,CAAC,EAC5CqX,EAAErX,CAAC,EAAIsM,EAAE,OAAOZ,CAAC,CAClB,SAAiBoc,GAAgB,QAAQ9nB,CAAC,IAAhC,GACT,QAASgoB,KAAKjoB,EAAEC,CAAC,EACf,GAAIqX,EAAErX,CAAC,EAAEgoB,CAAC,EAAG,CACX,IAAIC,EAAI5Q,EAAErX,CAAC,EAAEgoB,CAAC,YAAa,MAAQ3Q,EAAErX,CAAC,EAAEgoB,CAAC,EAAI,CAAC3Q,EAAErX,CAAC,EAAEgoB,CAAC,CAAC,EACjDhnB,EAAIjB,EAAEC,CAAC,EAAEgoB,CAAC,YAAa,MAAQjoB,EAAEC,CAAC,EAAEgoB,CAAC,EAAI,CAACjoB,EAAEC,CAAC,EAAEgoB,CAAC,CAAC,EACrD3Q,EAAErX,CAAC,EAAEgoB,CAAC,EAAIC,EAAE,OAAOjnB,CAAC,CAChC,MAAiBqW,EAAErX,CAAC,EAAEgoB,CAAC,EAAIjoB,EAAEC,CAAC,EAAEgoB,CAAC,UAENhoB,GAAV,OAAa,QAAS5D,KAAK2D,EAAEC,CAAC,EACvCqX,EAAErX,CAAC,EAAE5D,CAAC,EAAIib,EAAErX,CAAC,EAAE5D,CAAC,EAAI8rB,GAAQ7Q,EAAErX,CAAC,EAAE5D,CAAC,EAAG2D,EAAEC,CAAC,EAAE5D,CAAC,CAAC,EAAI2D,EAAEC,CAAC,EAAE5D,CAAC,OACjDib,EAAErX,CAAC,EAAID,EAAEC,CAAC,EAGnB,OAAOqX,CACR,EAAE,EAAE,CACP,EACI6Q,GAAU,SAAiBnoB,EAAGC,EAAG,CACnC,OAAO,UAAY,CACjBD,GAAKA,EAAE,MAAM,KAAM,SAAS,EAAGC,GAAKA,EAAE,MAAM,KAAM,SAAS,CAC5D,CACH,EAEImoB,GAASJ,GAGb,SAASrC,EAAWrZ,EAAG,CACrB,IAAIsZ,EAAI,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EACxErZ,EAAI,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EACxEtL,EAAI,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EACxEF,EAAI,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EACxE2K,EAAI,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EACxElI,EAAK,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EACzED,EAAO,IAAI,KAAK+I,EAAGsZ,EAAGrZ,EAAGtL,EAAGF,EAAG2K,EAAGlI,CAAE,EAExC,OAAI8I,EAAI,KAAOA,GAAK,GAClB/I,EAAK,YAAY+I,CAAC,EAGb/I,CACT,CACA,SAASqc,EAAYrc,EAAM,CACzB,OAAOA,aAAgB,MAAQ,CAAC,MAAMA,CAAI,CAC5C,CACA,SAAS8kB,GAAiB9kB,EAAM,CAC9B,OAAO,MAAM,QAAQA,CAAI,GAAKA,EAAK,SAAW,GAAKA,EAAK,MAAMqc,CAAW,GAAKrc,EAAK,CAAC,GAAKA,EAAK,CAAC,CACjG,CACA,SAAS+kB,GAAaC,EAAO,CAC3B,OAAO,MAAM,QAAQA,CAAK,GAAKA,EAAM,MAAM3I,CAAW,CACxD,CACA,SAAS4I,GAAa9nB,EAAO,CAC3B,IAAI6C,EAAO,IAAI,KAAK7C,CAAK,EAEzB,GAAIkf,EAAYrc,CAAI,EAClB,OAAOA,EAGT,QAASuiB,EAAO,UAAU,OAAQ2C,EAAS,IAAI,MAAM3C,EAAO,EAAIA,EAAO,EAAI,CAAC,EAAGE,EAAO,EAAGA,EAAOF,EAAME,IACpGyC,EAAOzC,EAAO,CAAC,EAAI,UAAUA,CAAI,EAGnC,OAAIyC,EAAO,OACFD,GAAa,MAAM,OAAQC,CAAM,EAGnC,IAAI,IACb,CACA,SAASC,GAAYhoB,EAAO,CAC1B,IAAI6C,EAAO,IAAI,KAAK7C,CAAK,EACzB,OAAA6C,EAAK,SAAS,EAAG,CAAC,EAClBA,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EACjBA,CACT,CACA,SAASolB,GAAajoB,EAAO,CAC3B,IAAI6C,EAAO,IAAI,KAAK7C,CAAK,EACzB,OAAA6C,EAAK,QAAQ,CAAC,EACdA,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EACjBA,CACT,CACA,SAASqlB,GAAWloB,EAAO,CACzB,IAAI6C,EAAO,IAAI,KAAK7C,CAAK,EACzB,OAAA6C,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EACjBA,CACT,CACA,SAASslB,GAAY7I,EAAM,CAWzB,QAVIH,EAAiBG,EAAK,eACtBzhB,EAAOyhB,EAAK,KACZ1hB,EAAQ0hB,EAAK,MACb1V,EAAM,CAAA,EAENwe,EAAWnD,EAAWpnB,EAAMD,EAAO,CAAC,EACpCyqB,EAAqBD,EAAS,UAE9BE,EAAsBD,GAAsBD,EAAS,SAAW,EAAIjJ,GAAkB,EAEjFxjB,EAAI2sB,EAAqB3sB,GAAK0sB,EAAoB1sB,IACzDiO,EAAI,KAAKqb,EAAWpnB,EAAMD,EAAOjC,EAAI0sB,CAAkB,CAAC,EAI1DD,EAAS,SAASxqB,EAAQ,EAAG,CAAC,EAG9B,QAFI2qB,EAAwBH,EAAS,QAAS,EAErC7F,EAAK,EAAGA,GAAMgG,EAAuBhG,IAC5C3Y,EAAI,KAAKqb,EAAWpnB,EAAMD,EAAO2kB,CAAE,CAAC,EAMtC,QAHIiG,EAAkBH,EAAqBC,EAAsB,EAC7DG,EAAkB,EAAI,EAAID,EAAkBD,EAEvCG,EAAM,EAAGA,GAAOD,EAAiBC,IACxC9e,EAAI,KAAKqb,EAAWpnB,EAAMD,EAAO2qB,EAAwBG,CAAG,CAAC,EAG/D,OAAO9e,CACT,CACA,SAAS+e,GAASC,EAAWC,EAAY,CACvC,IAAIhmB,EAAO,IAAI,KAAK+lB,CAAS,EACzBhrB,EAAQ,OAAOirB,GAAe,WAAaA,EAAWhmB,EAAK,SAAU,CAAA,EAAI,OAAOgmB,CAAU,EAC1FhrB,EAAOgF,EAAK,YAAa,EACzBhC,EAAcokB,EAAWpnB,EAAMD,EAAQ,EAAG,CAAC,EAAE,QAAS,EACtD8B,EAAMmD,EAAK,QAAS,EACxB,OAAAA,EAAK,SAASjF,EAAO,KAAK,IAAI8B,EAAKmB,CAAW,CAAC,EACxCgC,CACT,CACA,SAASimB,GAAQF,EAAWG,EAAW,CACrC,IAAIlmB,EAAO,IAAI,KAAK+lB,CAAS,EACzB/qB,EAAO,OAAOkrB,GAAc,WAAaA,EAAUlmB,EAAK,YAAa,CAAA,EAAIkmB,EAC7E,OAAAlmB,EAAK,YAAYhF,CAAI,EACdgF,CACT,CACA,SAASmmB,GAAW3e,EAAQD,EAAQ,CAClC,IAAIvH,EAAO,IAAI,KAAKwH,CAAM,EACtB5K,EAAO,IAAI,KAAK2K,CAAM,EAC1B,OAAAvH,EAAK,SAASpD,EAAK,SAAU,EAAEA,EAAK,WAAY,EAAEA,EAAK,YAAY,EAC5DoD,CACT,CAOA,SAASomB,GAAMrf,EAAKsf,EAAM,CACxB,GAAI,CAAC,MAAM,QAAQtf,CAAG,EACpB,MAAO,CAAE,EAGX,IAAIpJ,EAAS,CAAE,EACXuC,EAAM6G,EAAI,OACVjO,EAAI,EAGR,IAFAutB,EAAOA,GAAQnmB,EAERpH,EAAIoH,GACTvC,EAAO,KAAKoJ,EAAI,MAAMjO,EAAGA,GAAKutB,CAAI,CAAC,EAGrC,OAAO1oB,CACT,CAOA,SAAS2oB,EAAStf,EAAK,CACrB,OAAO,OAAO,UAAU,SAAS,KAAKA,CAAG,IAAM,iBACjD,CAOA,SAASuf,GAAKvf,EAAK3B,EAAO,CACxB,GAAI,CAACihB,EAAStf,CAAG,EAAG,MAAO,CAAE,EAExB,MAAM,QAAQ3B,CAAK,IACtBA,EAAQ,CAACA,CAAK,GAGhB,IAAI0L,EAAM,CAAE,EACZ,OAAA1L,EAAM,QAAQ,SAAUjL,EAAM,CACxBA,KAAQ4M,IACV+J,EAAI3W,CAAI,EAAI4M,EAAI5M,CAAI,EAE1B,CAAG,EACM2W,CACT,CAOA,SAASyV,GAAUhf,EAAQD,EAAQ,CACjC,GAAI,CAAC+e,EAAS9e,CAAM,EAClB,MAAO,CAAE,EAGX,IAAI7J,EAAS6J,EAEb,OAAI8e,EAAS/e,CAAM,GACjB,OAAO,KAAKA,CAAM,EAAE,QAAQ,SAAUrK,EAAK,CACzC,IAAIC,EAAQoK,EAAOrK,CAAG,EAElBopB,EAASnpB,CAAK,GAAKmpB,EAAS9e,EAAOtK,CAAG,CAAC,IACzCC,EAAQqpB,GAAUhf,EAAOtK,CAAG,EAAGC,CAAK,GAGtCQ,EAASgmB,EAAe,CAAA,EAAIhmB,EAAQshB,GAAgB,GAAI/hB,EAAKC,CAAK,CAAC,CACzE,CAAK,EAGIQ,CACT,CAEA,SAAS8oB,GAAe9jB,EAAG,CAC1B,OAAOA,GAAKA,EAAE,YAAc,OAAO,UAAU,eAAe,KAAKA,EAAG,SAAS,EAAIA,EAAE,QAAaA,CACjG,CAEA,SAAS+jB,GAAqBC,EAAIC,EAAQ,CACzC,OAAOA,EAAS,CAAE,QAAS,CAAA,GAAMD,EAAGC,EAAQA,EAAO,OAAO,EAAGA,EAAO,OACrE,CAEA,IAAIC,GAAKH,GAAqB,SAAUE,EAAQE,EAAS,CAEzD,OAAO,eAAeA,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,QAAa,OACrB,IAAI3J,EAAS,CACX,OAAQ,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,UAAU,EACjI,YAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAChG,SAAU,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,UAAU,EACvF,cAAe,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAC/D,YAAa,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAI,EACtD,eAAgB,EAChB,sBAAuB,CACzB,EACI4J,EAAW5J,EACf2J,EAAQ,QAAaC,EACrBH,EAAO,QAAUE,EAAQ,OACzB,CAAC,EAEGE,GAAOP,GAAcI,EAAE,EAEvBI,GAAO,CACT,aAAcD,GACd,WAAY,OACZ,YAAa,MACb,gBAAiB,EACnB,EAEI7I,GAAgB,KAChB+I,GAAU,CAAE,EAChBA,GAAQ/I,EAAa,EAAI8I,GACzB,SAAS9J,GAAO3b,EAAM7G,EAAQwsB,EAAS,CACrC,GAAI,OAAO3lB,GAAS,SAAU,OAAO0lB,GAAQ/I,EAAa,EAC1D,IAAIiJ,EAAIjJ,GAER,OAAI+I,GAAQ1lB,CAAI,IACd4lB,EAAI5lB,GAGF7G,IACFusB,GAAQ1lB,CAAI,EAAI7G,EAChBysB,EAAI5lB,GAGD2lB,IACHhJ,GAAgBiJ,GAGXF,GAAQ1lB,CAAI,GAAK0lB,GAAQ/I,EAAa,CAC/C,CAMA,SAASkJ,GAAU7lB,EAAM,CACvB,OAAO2b,GAAO3b,EAAM,KAAM,EAAI,CAChC,CAGA,SAAS8lB,GAAYX,EAAI,CACvB,IAAIY,EAAY,GAChB,OAAO,UAAqB,CAG1B,QAFIC,EAAQ,KAEHjF,EAAO,UAAU,OAAQC,EAAO,IAAI,MAAMD,CAAI,EAAGE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,CAAI,EAAI,UAAUA,CAAI,EAGzB8E,IACJA,EAAY,GACZ,sBAAsB,UAAY,CAChCA,EAAY,GACZZ,EAAG,MAAMa,EAAOhF,CAAI,CAC1B,CAAK,EACF,CACH,CAMA,SAASiF,GAAoBC,EAAS,CACpC,IAAIC,EAAkBD,EAAQ,MAAM,QAChCE,EAAqBF,EAAQ,MAAM,WACvCA,EAAQ,MAAM,QAAU,QACxBA,EAAQ,MAAM,WAAa,SAC3B,IAAIG,EAAS,OAAO,iBAAiBH,CAAO,EACxCI,EAAQJ,EAAQ,YAAc,SAASG,EAAO,WAAY,EAAE,EAAI,SAASA,EAAO,YAAa,EAAE,EAC/FE,EAASL,EAAQ,aAAe,SAASG,EAAO,UAAW,EAAE,EAAI,SAASA,EAAO,aAAc,EAAE,EACrG,OAAAH,EAAQ,MAAM,QAAUC,EACxBD,EAAQ,MAAM,WAAaE,EACpB,CACL,MAAOE,EACP,OAAQC,CACT,CACH,CASA,SAASC,GAAoBC,EAAIC,EAAaC,EAAcC,EAAO,CACjE,IAAIC,EAAO,EACPC,EAAM,EACNC,EAAU,EACVC,EAAU,EACVC,EAAeR,EAAG,sBAAuB,EACzCS,EAAK,SAAS,gBAAgB,YAC9BC,EAAK,SAAS,gBAAgB,aAElC,OAAIP,IACFG,EAAU,OAAO,YAAcE,EAAa,KAC5CD,EAAU,OAAO,YAAcC,EAAa,KAG1CC,EAAKD,EAAa,KAAOP,GAAeO,EAAa,MAAQP,EAC/DG,EAAOE,EAAUE,EAAa,KAAO,EAC5BA,EAAa,KAAOA,EAAa,MAAQ,GAAKC,EAAK,EAC5DL,EAAOE,EAEPF,EAAOE,EAAUE,EAAa,MAAQP,EAGpCO,EAAa,KAAON,GAAgBQ,EAAKF,EAAa,QAAUN,EAClEG,EAAME,EAAUG,EAAKF,EAAa,IAAMN,EAC/BM,EAAa,IAAMA,EAAa,OAAS,GAAKE,EAAK,EAC5DL,EAAME,EAAUC,EAAa,OAE7BH,EAAME,EAAUL,EAGX,CACL,KAAM,GAAG,OAAOE,EAAM,IAAI,EAC1B,IAAK,GAAG,OAAOC,EAAK,IAAI,CACzB,CACH,CACA,SAASM,GAAgBC,EAAM,CAC7B,IAAIC,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,SAAS,KAEzF,GAAI,CAACD,GAAQA,IAASC,EACpB,OAAO,KAGT,IAAIC,EAAQ,SAAe5rB,EAAO/C,EAAM,CACtC,OAAO,iBAAiB+C,EAAO,IAAI,EAAE,iBAAiB/C,CAAI,CAC3D,EAEG2mB,EAAQ,gBACRiI,EAASjI,EAAM,KAAKgI,EAAMF,EAAM,UAAU,EAAIE,EAAMF,EAAM,YAAY,EAAIE,EAAMF,EAAM,YAAY,CAAC,EACvG,OAAOG,EAASH,EAAOD,GAAgBC,EAAK,WAAYC,CAAK,CAC/D,CAGA,IAAIG,GAAS,CACX,KAAM,QACN,OAAQ,CACN,YAAa,CACX,QAAS,IACf,CACG,EACD,MAAO,CACL,QAAS,CACP,KAAM,QACN,QAAS,EACV,EACD,aAAc,CACZ,KAAM,QACN,QAAS,EACf,CACG,EACD,KAAM,UAAgB,CACpB,MAAO,CACL,IAAK,GACL,KAAM,EACP,CACF,EACD,MAAO,CACL,QAAS,CACP,UAAW,GACX,QAAS,SAAiB7oB,EAAK,CAC7B,IAAIonB,EAAQ,KAEZ,KAAK,UAAU,UAAY,CACrBpnB,GACFonB,EAAM,aAAc,CAEhC,CAAS,CACT,CACA,CACG,EACD,QAAS,UAAmB,CAC1B,IAAI0B,EAAS,KAET,KAAK,cACP,SAAS,KAAK,YAAY,KAAK,GAAG,EAGpC,KAAK,eAAiB,eAAgB,SAAW,aAAe,YAChE,SAAS,iBAAiB,KAAK,eAAgB,KAAK,kBAAkB,EAEtE,IAAIC,EAAkB,KAAK,QAAQ,IACnC,KAAK,cAAgB7B,GAAY,UAAY,CAC3C,OAAO4B,EAAO,aAAc,CAClC,CAAK,EACD,KAAK,cAAgBN,GAAgBO,CAAe,GAAK,OAEzD,KAAK,cAAc,iBAAiB,SAAU,KAAK,aAAa,EAEhE,OAAO,iBAAiB,SAAU,KAAK,aAAa,CACrD,EACD,cAAe,UAAyB,CAClC,KAAK,cAAgB,KAAK,IAAI,YAChC,KAAK,IAAI,WAAW,YAAY,KAAK,GAAG,EAG1C,SAAS,oBAAoB,KAAK,eAAgB,KAAK,kBAAkB,EAEzE,KAAK,cAAc,oBAAoB,SAAU,KAAK,aAAa,EAEnE,OAAO,oBAAoB,SAAU,KAAK,aAAa,CACxD,EACD,QAAS,CACP,mBAAoB,SAA4BC,EAAK,CACnD,GAAK,KAAK,QACV,KAAI5hB,EAAS4hB,EAAI,OACbnB,EAAK,KAAK,IAEVA,GAAM,CAACA,EAAG,SAASzgB,CAAM,GAC3B,KAAK,MAAM,eAAgB4hB,CAAG,CAEjC,CAAA,EACD,aAAc,UAAwB,CACpC,GAAK,KAAK,QACV,CAAIC,IAAAA,EAAQ,KAAK,IACbF,EAAkB,KAAK,QAAQ,IAC/BG,EAAe,KAAK,aAEnB,KAAK,aACR,KAAK,WAAa7B,GAAoB4B,CAAK,GAG7C,IAAIE,EAAmB,KAAK,WACxBzB,EAAQyB,EAAiB,MACzBxB,EAASwB,EAAiB,OAE1BC,EAAuBxB,GAAoBmB,EAAiBrB,EAAOC,EAAQuB,CAAY,EACvFjB,EAAOmB,EAAqB,KAC5BlB,EAAMkB,EAAqB,IAE/B,KAAK,KAAOnB,EACZ,KAAK,IAAMC,CAAAA,CACjB,CACA,CACA,EAEA,SAASrM,EAAmBwN,EAAUV,EAAOE,EAAQS,EAASC,EAAsBC,EAElFC,EAAYC,EAAgBC,EAAmBC,EAAsB,CAQrE,IAAIpiB,EAAU,OAAOqhB,GAAW,WAAaA,EAAO,QAAUA,EAE9D,OAAIQ,GAAYA,EAAS,SACvB7hB,EAAQ,OAAS6hB,EAAS,OAC1B7hB,EAAQ,gBAAkB6hB,EAAS,gBACnC7hB,EAAQ,UAAY,IAiEfqhB,CACT,CAGA,IAAIgB,GAAiBhB,GAGjBiB,GAAiB,UAA0B,CAC7C,IAAIrO,EAAM,KAENsO,EAAKtO,EAAI,eAETC,EAAKD,EAAI,MAAM,IAAMsO,EAEzB,OAAOrO,EAAG,aAAc,CACtB,MAAO,CACL,KAAQD,EAAI,YAAc,eAChC,CACG,EAAE,CAACA,EAAI,QAAUC,EAAG,MAAO,CAC1B,MAAOD,EAAI,YAAc,oBAAsBA,EAAI,YAAc,oBACjE,MAAO,CACL,IAAKA,EAAI,IACT,KAAMA,EAAI,KACV,SAAU,UAChB,CACA,EAAK,CAACA,EAAI,GAAG,SAAS,CAAC,EAAG,CAAC,EAAIA,EAAI,GAAE,CAAE,CAAC,CACxC,EAEIuO,GAA0B,CAAE,EAG5BC,GAAwB,OAgBxBC,GAAoBrO,EAAmB,CACzC,OAAQiO,GACR,gBAAiBE,EACnB,EAAGC,GAAuBJ,EAAmI,EAKzJM,GAAmB,UAA0B,CAC/C,IAAI1O,EAAM,KAENsO,EAAKtO,EAAI,eAETC,EAAKD,EAAI,MAAM,IAAMsO,EAEzB,OAAOrO,EAAG,MAAO,CACf,MAAO,CACL,MAAS,6BACT,QAAW,gBACX,MAAS,MACT,OAAU,KAChB,CACA,EAAK,CAACA,EAAG,OAAQ,CACb,MAAO,CACL,EAAK,kkBACX,CACG,CAAA,CAAC,CAAC,CACL,EAEI0O,GAA4B,CAAE,EAG9BC,GAA0B,OAgB1BC,GAAsBzO,EAAmB,CAC3C,OAAQsO,GACR,gBAAiBC,EACnB,EAAGC,GAAyB,CAAA,CAA6H,EAKrJE,GAAmB,UAA0B,CAC/C,IAAI9O,EAAM,KAENsO,EAAKtO,EAAI,eAETC,EAAKD,EAAI,MAAM,IAAMsO,EAEzB,OAAOrO,EAAG,MAAO,CACf,MAAO,CACL,MAAS,6BACT,QAAW,YACX,MAAS,MACT,OAAU,KAChB,CACA,EAAK,CAACA,EAAG,OAAQ,CACb,MAAO,CACL,EAAK,gBACL,KAAQ,MACd,CACA,CAAG,EAAGD,EAAI,GAAG,GAAG,EAAGC,EAAG,OAAQ,CAC1B,MAAO,CACL,EAAK,iJACX,CACA,CAAG,EAAGD,EAAI,GAAG,GAAG,EAAGC,EAAG,OAAQ,CAC1B,MAAO,CACL,EAAK,0CACX,CACG,CAAA,CAAC,CAAC,CACL,EAEI8O,GAA4B,CAAE,EAG9BC,GAA0B,OAgB1BC,GAAsB7O,EAAmB,CAC3C,OAAQ0O,GACR,gBAAiBC,EACnB,EAAGC,GAAyB,CAAA,CAA6H,EAKrJE,GAAmB,UAA0B,CAC/C,IAAIlP,EAAM,KAENsO,EAAKtO,EAAI,eAETC,EAAKD,EAAI,MAAM,IAAMsO,EAEzB,OAAOrO,EAAG,MAAO,CACf,MAAO,CACL,MAAS,6BACT,QAAW,gBACX,MAAS,MACT,OAAU,KAChB,CACA,EAAK,CAACA,EAAG,OAAQ,CACb,MAAO,CACL,EAAK,sQACX,CACG,CAAA,CAAC,CAAC,CACL,EAEIkP,GAA4B,CAAE,EAG9BC,GAA0B,OAgB1BC,GAAsBjP,EAAmB,CAC3C,OAAQ8O,GACR,gBAAiBC,EACnB,EAAGC,GAAyB,CAAA,CAA6H,EAkBrJE,GAAW,CACb,MAAO,CACL,KAAM,OACN,SAAU,OACX,EACD,OAAQ,CACN,YAAa,CACX,QAAS,IACf,CACA,CACA,EAGIC,GAAmBD,GAGnBE,GAAmB,UAA0B,CAC/C,IAAIxP,EAAM,KAENsO,EAAKtO,EAAI,eAETC,EAAKD,EAAI,MAAM,IAAMsO,EAEzB,OAAOrO,EAAG,SAAUD,EAAI,GAAG,CACzB,MAAO,CAACA,EAAI,YAAc,QAAUA,EAAI,YAAc,aAAeA,EAAI,YAAc,aAAeA,EAAI,KAAM,CAC9G,SAAUA,EAAI,QACpB,CAAK,EACD,MAAO,CACL,KAAQ,SACR,SAAYA,EAAI,QACtB,CACG,EAAEA,EAAI,UAAU,EAAG,CAACC,EAAG,IAAK,CAC3B,MAAOD,EAAI,YAAc,SAAWA,EAAI,IACzC,CAAA,CAAC,CAAC,CACL,EAEIyP,GAA4B,CAAE,EAG9BC,GAA0B,OAgB1BC,GAAsBvP,EAAmB,CAC3C,OAAQoP,GACR,gBAAiBC,EACnB,EAAGC,GAAyBH,EAA2I,EAEnKK,GAAW,CACb,KAAM,YACN,WAAY,CACV,WAAYD,EACb,EACD,OAAQ,CACN,UAAW,CACT,QAAS,UAAoB,CAC3B,OAAOnE,EACf,CACK,EACD,QAAS,CACP,QAAS,UAAoB,CAC3B,OAAOvK,EACf,CACK,EACD,YAAa,CACX,QAAS,IACV,EACD,iBAAkB,CAChB,QAAS,MACV,EACD,iBAAkB,CAChB,QAAS,MACf,CACG,EACD,MAAO,CACL,wBAAyB,CACvB,KAAM,SACN,QAAS,UAAoB,CAC3B,MAAO,EACf,CACK,EACD,SAAU,CACR,KAAM,KACN,QAAS,UAAoB,CAC3B,OAAO,IAAI,IACnB,CACK,EACD,eAAgB,CACd,KAAM,QACN,QAAS,EACV,EACD,YAAa,CACX,KAAM,OACN,QAAS,YACV,EACD,cAAe,CACb,KAAM,SACN,QAAS,UAAoB,CAC3B,MAAO,CAAE,CACjB,CACK,EACD,eAAgB,CACd,KAAM,SACN,QAAS,UAAoB,CAC3B,MAAO,CAAE,CACjB,CACA,CACG,EACD,SAAU,CACR,eAAgB,UAA0B,CACxC,OAAO,KAAK,UAAS,EAAG,aAAa,gBAAkB,CACxD,EACD,UAAW,UAAqB,CAC9B,IAAI4O,EAAkB,KAAK,UAAW,EAClCC,EAAaD,EAAgB,WAC7BE,EAAkBF,EAAgB,gBAClCG,EAAwBH,EAAgB,YACxCI,EAAcD,IAA0B,OAAS,MAAQA,EAEzDE,EAAY,CACd,MAAO,OACP,MAAO,KAAK,WAAW,KAAK,SAAUJ,CAAU,CACjD,EACGK,EAAa,CACf,MAAO,QACP,MAAO,KAAK,WAAW,KAAK,SAAUF,CAAW,CAClD,EACD,OAAOF,EAAkB,CAACI,EAAYD,CAAS,EAAI,CAACA,EAAWC,CAAU,CAC1E,EACD,KAAM,UAAgB,CACpB,IAAI7O,EAAS,KAAK,UAAW,EACzBjiB,EAAOiiB,EAAO,MAAQA,EAAO,aAAa,YAC9C,OAAOjiB,EAAK,OAAOA,CAAI,EAAE,MAAM,KAAK,eAAgB,KAAK,eAAiB,CAAC,CAC5E,EACD,MAAO,UAAiB,CACtB,IAAIF,EAAO,KAAK,SAAS,YAAa,EAClCD,EAAQ,KAAK,SAAS,SAAU,EAChCgM,EAAMue,GAAY,CACpB,eAAgB,KAAK,eACrB,KAAMtqB,EACN,MAAOD,CACf,CAAO,EACD,OAAOqrB,GAAMrf,EAAK,CAAC,CACzB,CACG,EACD,QAAS,CACP,iBAAkB,SAA0BlN,EAAM,CAChD,IAAImG,EAAO,IAAI,KAAK,KAAK,QAAQ,EAEjC,OAAQnG,EAAI,CACV,IAAK,YACHmG,EAAK,YAAYA,EAAK,YAAa,EAAG,EAAGA,EAAK,SAAQ,EAAK,EAAG,CAAC,EAC/DA,EAAK,SAAS,GAAI,GAAI,GAAI,GAAG,EAC7B,MAEF,IAAK,YACHA,EAAK,YAAYA,EAAK,YAAW,EAAK,CAAC,EACvC,MAEF,IAAK,aACHA,EAAK,SAASA,EAAK,SAAQ,EAAI,CAAC,EAChCA,EAAK,SAAS,GAAI,GAAI,GAAI,GAAG,EAC7B,MAEF,IAAK,aACHA,EAAK,SAASA,EAAK,SAAQ,EAAK,CAAC,EACjC,KACV,CAEM,OAAO,KAAK,wBAAwBA,EAAMnG,CAAI,CAC/C,EACD,oBAAqB,UAA+B,CAClD,KAAK,MAAM,iBAAkBisB,GAAS,KAAK,SAAU,SAAU5d,EAAG,CAChE,OAAOA,EAAI,CACZ,CAAA,EAAG,YAAY,CACjB,EACD,qBAAsB,UAAgC,CACpD,KAAK,MAAM,iBAAkB4d,GAAS,KAAK,SAAU,SAAU5d,EAAG,CAChE,OAAOA,EAAI,CACZ,CAAA,EAAG,YAAY,CACjB,EACD,0BAA2B,UAAqC,CAC9D,KAAK,MAAM,iBAAkB+d,GAAQ,KAAK,SAAU,SAAU/d,EAAG,CAC/D,OAAOA,EAAI,CACZ,CAAA,EAAG,WAAW,CAChB,EACD,2BAA4B,UAAsC,CAChE,KAAK,MAAM,iBAAkB+d,GAAQ,KAAK,SAAU,SAAU/d,EAAG,CAC/D,OAAOA,EAAI,CACZ,CAAA,EAAG,WAAW,CAChB,EACD,kBAAmB,SAA2B+jB,EAAO,CACnD,KAAK,MAAM,cAAeA,CAAK,CAChC,EACD,iBAAkB,SAA0BC,EAAM,CAC5C,OAAO,KAAK,kBAAqB,YACnC,KAAK,iBAAiBA,CAAI,CAE7B,EACD,iBAAkB,SAA0BA,EAAM,CAC5C,OAAO,KAAK,kBAAqB,YACnC,KAAK,iBAAiBA,CAAI,CAE7B,EACD,gBAAiB,SAAyB9C,EAAK,CAC7C,IAAI5hB,EAAS4hB,EAAI,OAEb5hB,EAAO,QAAQ,YAAW,IAAO,QACnCA,EAASA,EAAO,YAGlB,IAAI2O,EAAQ3O,EAAO,aAAa,cAAc,EAE9C,GAAI2O,EAAO,CACT,IAAIgW,EAAmBhW,EAAM,MAAM,GAAG,EAAE,IAAI,SAAUjO,EAAG,CACvD,OAAO,SAASA,EAAG,EAAE,CAC/B,CAAS,EACGkkB,EAAoBlN,GAAeiN,EAAkB,CAAC,EACtDE,EAAMD,EAAkB,CAAC,EACzBE,EAAMF,EAAkB,CAAC,EAEzBpsB,EAAO,KAAK,MAAMqsB,CAAG,EAAEC,CAAG,EAC9B,KAAK,MAAM,SAAU,IAAI,KAAKtsB,CAAI,CAAC,CAC3C,CACK,EACD,WAAY,SAAoBA,EAAMusB,EAAK,CACzC,OAAOtO,GAAOje,EAAMusB,EAAK,CACvB,OAAQ,KAAK,YAAY,YACjC,CAAO,CACF,EACD,aAAc,SAAsBvsB,EAAM,CACxC,IAAIusB,EAAM,KAAK,YACf,OAAO,KAAK,WAAWvsB,EAAMusB,CAAG,CACjC,EACD,cAAe,SAAuBvsB,EAAM,CAC1C,OAAO,KAAK,QAAQA,EAAM,KAAK,UAAW,EAAC,YAAY,CAC7D,CACA,CACA,EAGIwsB,GAAmBf,GAGnBgB,GAAmB,UAA0B,CAC/C,IAAI5Q,EAAM,KAENsO,EAAKtO,EAAI,eAETC,EAAKD,EAAI,MAAM,IAAMsO,EAEzB,OAAOrO,EAAG,MAAO,CACf,MAAOD,EAAI,YAAc,aAAeA,EAAI,YAAc,sBAC9D,EAAK,CAACC,EAAG,MAAO,CACZ,MAAOD,EAAI,YAAc,kBAC7B,EAAK,CAACC,EAAG,cAAe,CACpB,MAAO,CACL,KAAQ,cACR,SAAYD,EAAI,iBAAiB,WAAW,CAC7C,EACD,GAAI,CACF,MAASA,EAAI,yBACnB,CACA,CAAG,EAAGA,EAAI,GAAG,GAAG,EAAGC,EAAG,cAAe,CACjC,MAAO,CACL,KAAQ,OACR,SAAYD,EAAI,iBAAiB,YAAY,CAC9C,EACD,GAAI,CACF,MAASA,EAAI,mBACnB,CACA,CAAG,EAAGA,EAAI,GAAG,GAAG,EAAGC,EAAG,cAAe,CACjC,MAAO,CACL,KAAQ,eACR,SAAYD,EAAI,iBAAiB,WAAW,CAC7C,EACD,GAAI,CACF,MAASA,EAAI,0BACnB,CACA,CAAG,EAAGA,EAAI,GAAG,GAAG,EAAGC,EAAG,cAAe,CACjC,MAAO,CACL,KAAQ,QACR,SAAYD,EAAI,iBAAiB,YAAY,CAC9C,EACD,GAAI,CACF,MAASA,EAAI,oBACnB,CACA,CAAG,EAAGA,EAAI,GAAG,GAAG,EAAGC,EAAG,OAAQ,CAC1B,MAAOD,EAAI,YAAc,wBAC1B,EAAEA,EAAI,GAAGA,EAAI,UAAW,SAAUzE,EAAM,CACvC,OAAO0E,EAAG,SAAU,CAClB,IAAK1E,EAAK,MACV,MAAOyE,EAAI,YAAc,QAAUA,EAAI,YAAc,aAAeA,EAAI,YAAc,gBAAkBzE,EAAK,MAC7G,MAAO,CACL,KAAQ,QACT,EACD,GAAI,CACF,MAAS,SAAesV,EAAQ,CAC9B,OAAO7Q,EAAI,kBAAkBzE,EAAK,KAAK,CACjD,CACA,CACK,EAAE,CAACyE,EAAI,GAAG;AAAA,UAAeA,EAAI,GAAGzE,EAAK,KAAK,EAAI;AAAA,OAAU,CAAC,CAAC,CAC/D,CAAG,EAAG,CAAC,CAAC,EAAG,CAAC,EAAGyE,EAAI,GAAG,GAAG,EAAGC,EAAG,MAAO,CAClC,MAAOD,EAAI,YAAc,mBAC7B,EAAK,CAACC,EAAG,QAAS,CACd,MAAOD,EAAI,YAAc,UAAYA,EAAI,YAAc,aAC3D,EAAK,CAACC,EAAG,QAAS,CAACA,EAAG,KAAM,CAACD,EAAI,eAAiBC,EAAG,KAAM,CACvD,MAAOD,EAAI,YAAc,qBAC1B,CAAA,EAAIA,EAAI,KAAMA,EAAI,GAAG,GAAG,EAAGA,EAAI,GAAGA,EAAI,KAAM,SAAUhf,EAAK,CAC1D,OAAOif,EAAG,KAAM,CACd,IAAKjf,CACX,EAAO,CAACgf,EAAI,GAAGA,EAAI,GAAGhf,CAAG,CAAC,CAAC,CAAC,CAC5B,CAAG,CAAC,EAAG,CAAC,CAAC,CAAC,EAAGgf,EAAI,GAAG,GAAG,EAAGC,EAAG,QAAS,CAClC,GAAI,CACF,MAASD,EAAI,eACnB,CACA,EAAKA,EAAI,GAAGA,EAAI,MAAO,SAAUwQ,EAAK,EAAG,CACrC,OAAOvQ,EAAG,KAAM,CACd,IAAK,EACL,MAAO,CAACD,EAAI,YAAc,YAAaA,EAAI,cAAcwQ,CAAG,CAAC,CAC9D,EAAE,CAACxQ,EAAI,eAAiBC,EAAG,KAAM,CAChC,MAAOD,EAAI,YAAc,eACzB,MAAO,CACL,eAAgB,EAAI,IAC5B,CACK,EAAE,CAACA,EAAI,GAAG;AAAA,cAAmBA,EAAI,GAAGA,EAAI,cAAcwQ,EAAI,CAAC,CAAC,CAAC,EAAI;AAAA,WAAc,CAAC,CAAC,EAAIxQ,EAAI,KAAMA,EAAI,GAAG,GAAG,EAAGA,EAAI,GAAGwQ,EAAK,SAAUH,EAAMld,EAAG,CAC1I,OAAO8M,EAAG,KAAM,CACd,IAAK9M,EACL,YAAa,OACb,MAAO6M,EAAI,eAAeqQ,CAAI,EAC9B,MAAO,CACL,eAAgB,EAAI,IAAMld,EAC1B,MAAS6M,EAAI,aAAaqQ,CAAI,CAC/B,EACD,GAAI,CACF,WAAc,SAAoBQ,EAAQ,CACxC,OAAO7Q,EAAI,iBAAiBqQ,CAAI,CACjC,EACD,WAAc,SAAoBQ,EAAQ,CACxC,OAAO7Q,EAAI,iBAAiBqQ,CAAI,CAC5C,CACA,CACO,EAAE,CAACpQ,EAAG,MAAO,CAACD,EAAI,GAAGA,EAAI,GAAGqQ,EAAK,QAAO,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACtD,CAAK,CAAC,EAAG,CAAC,CACP,CAAA,EAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACb,EAEIS,GAA4B,CAAE,EAG9BC,GAA0B,OAgB1BC,GAAsB5Q,EAAmB,CAC3C,OAAQwQ,GACR,gBAAiBE,EACnB,EAAGC,GAAyBJ,EAA2I,EAGnKM,GAAW,CACb,KAAM,aACN,WAAY,CACV,WAAYtB,EACb,EACD,OAAQ,CACN,UAAW,CACT,QAAS,UAAoB,CAC3B,OAAOnE,EACf,CACK,EACD,YAAa,CACX,QAAS,IACf,CACG,EACD,MAAO,CACL,wBAAyB,CACvB,KAAM,SACN,QAAS,UAAoB,CAC3B,MAAO,EACf,CACK,EACD,SAAU,CACR,KAAM,KACN,QAAS,UAAoB,CAC3B,OAAO,IAAI,IACnB,CACK,EACD,eAAgB,CACd,KAAM,SACN,QAAS,UAAoB,CAC3B,MAAO,CAAE,CACjB,CACA,CACG,EACD,SAAU,CACR,aAAc,UAAwB,CACpC,OAAO,KAAK,SAAS,YAAa,CACnC,EACD,OAAQ,UAAkB,CACxB,IAAIlK,EAAS,KAAK,UAAW,EACzB4P,EAAe5P,EAAO,QAAUA,EAAO,aAAa,YACpD6P,EAASD,EAAa,IAAI,SAAUE,EAAMlyB,EAAO,CACnD,MAAO,CACL,KAAMkyB,EACN,MAAOlyB,CACR,CACT,CAAO,EACD,OAAOqrB,GAAM4G,EAAQ,CAAC,CAC5B,CACG,EACD,QAAS,CACP,iBAAkB,SAA0BnzB,EAAM,CAChD,IAAImG,EAAO,IAAI,KAAK,KAAK,QAAQ,EAEjC,OAAQnG,EAAI,CACV,IAAK,YACHmG,EAAK,YAAYA,EAAK,YAAa,EAAG,EAAG,GAAI,EAAE,EAC/CA,EAAK,SAAS,GAAI,GAAI,GAAI,GAAG,EAC7B,MAEF,IAAK,YACHA,EAAK,YAAYA,EAAK,YAAa,EAAG,EAAG,EAAG,CAAC,EAC7C,KACV,CAEM,OAAO,KAAK,wBAAwBA,EAAMnG,CAAI,CAC/C,EACD,0BAA2B,UAAqC,CAC9D,KAAK,MAAM,iBAAkBosB,GAAQ,KAAK,SAAU,SAAU/d,EAAG,CAC/D,OAAOA,EAAI,CACZ,CAAA,EAAG,WAAW,CAChB,EACD,2BAA4B,UAAsC,CAChE,KAAK,MAAM,iBAAkB+d,GAAQ,KAAK,SAAU,SAAU/d,EAAG,CAC/D,OAAOA,EAAI,CACZ,CAAA,EAAG,WAAW,CAChB,EACD,kBAAmB,UAA6B,CAC9C,KAAK,MAAM,cAAe,MAAM,CACjC,EACD,YAAa,SAAqBkhB,EAAK,CACrC,IAAI5hB,EAAS4hB,EAAI,OAEb5hB,EAAO,QAAQ,YAAW,IAAO,QACnCA,EAASA,EAAO,YAGlB,IAAIzM,EAAQyM,EAAO,aAAa,YAAY,EAExCzM,GAAS,CAACyM,EAAO,UAAU,SAAS,UAAU,GAChD,KAAK,MAAM,SAAU,SAASzM,EAAO,EAAE,CAAC,CAEhD,CACA,CACA,EAGImyB,GAAmBJ,GAGnBK,GAAmB,UAA0B,CAC/C,IAAItR,EAAM,KAENsO,EAAKtO,EAAI,eAETC,EAAKD,EAAI,MAAM,IAAMsO,EAEzB,OAAOrO,EAAG,MAAO,CACf,MAAOD,EAAI,YAAc,aAAeA,EAAI,YAAc,uBAC9D,EAAK,CAACC,EAAG,MAAO,CACZ,MAAOD,EAAI,YAAc,kBAC7B,EAAK,CAACC,EAAG,cAAe,CACpB,MAAO,CACL,KAAQ,cACR,SAAYD,EAAI,iBAAiB,WAAW,CAC7C,EACD,GAAI,CACF,MAASA,EAAI,yBACnB,CACA,CAAG,EAAGA,EAAI,GAAG,GAAG,EAAGC,EAAG,cAAe,CACjC,MAAO,CACL,KAAQ,eACR,SAAYD,EAAI,iBAAiB,WAAW,CAC7C,EACD,GAAI,CACF,MAASA,EAAI,0BACnB,CACA,CAAG,EAAGA,EAAI,GAAG,GAAG,EAAGC,EAAG,OAAQ,CAC1B,MAAOD,EAAI,YAAc,wBAC7B,EAAK,CAACC,EAAG,SAAU,CACf,MAAOD,EAAI,YAAc,QAAUA,EAAI,YAAc,YACrD,MAAO,CACL,KAAQ,QACT,EACD,GAAI,CACF,MAASA,EAAI,iBACnB,CACA,EAAK,CAACA,EAAI,GAAG;AAAA,UAAeA,EAAI,GAAGA,EAAI,YAAY,EAAI;AAAA,OAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAG,CAAC,EAAGA,EAAI,GAAG,GAAG,EAAGC,EAAG,MAAO,CAChG,MAAOD,EAAI,YAAc,mBAC7B,EAAK,CAACC,EAAG,QAAS,CACd,MAAOD,EAAI,YAAc,UAAYA,EAAI,YAAc,eACvD,GAAI,CACF,MAASA,EAAI,WACnB,CACA,EAAKA,EAAI,GAAGA,EAAI,OAAQ,SAAUwQ,EAAK,EAAG,CACtC,OAAOvQ,EAAG,KAAM,CACd,IAAK,CACN,EAAED,EAAI,GAAGwQ,EAAK,SAAUH,EAAMld,EAAG,CAChC,OAAO8M,EAAG,KAAM,CACd,IAAK9M,EACL,YAAa,OACb,MAAO6M,EAAI,eAAeqQ,EAAK,KAAK,EACpC,MAAO,CACL,aAAcA,EAAK,KAC7B,CACO,EAAE,CAACpQ,EAAG,MAAO,CAACD,EAAI,GAAGA,EAAI,GAAGqQ,EAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAC5C,CAAA,EAAG,CAAC,CACT,CAAG,EAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CACX,EAEIkB,GAA4B,CAAE,EAG9BC,GAA0B,OAgB1BC,GAAsBrR,EAAmB,CAC3C,OAAQkR,GACR,gBAAiBC,EACnB,EAAGC,GAAyBH,EAA2I,EAGnKK,GAAW,CACb,KAAM,YACN,WAAY,CACV,WAAY/B,EACb,EACD,OAAQ,CACN,YAAa,CACX,QAAS,IACf,CACG,EACD,MAAO,CACL,wBAAyB,CACvB,KAAM,SACN,QAAS,UAAoB,CAC3B,MAAO,EACf,CACK,EACD,SAAU,CACR,KAAM,KACN,QAAS,UAAoB,CAC3B,OAAO,IAAI,IACnB,CACK,EACD,eAAgB,CACd,KAAM,SACN,QAAS,UAAoB,CAC3B,MAAO,CAAE,CACjB,CACK,EACD,aAAc,CACZ,KAAM,QACZ,CACG,EACD,SAAU,CACR,MAAO,UAAiB,CACtB,IAAIjG,EAAW,IAAI,KAAK,KAAK,QAAQ,EAErC,OAAI,OAAO,KAAK,cAAiB,WACxB,KAAK,aAAaA,CAAQ,EAG5B,KAAK,SAASA,CAAQ,CAC9B,EACD,UAAW,UAAqB,CAC9B,OAAO,KAAK,MAAM,CAAC,EAAE,CAAC,CACvB,EACD,SAAU,UAAoB,CAC5B,IAAI1W,EAAO,SAAc9H,EAAK,CAC5B,OAAOA,EAAIA,EAAI,OAAS,CAAC,CAC1B,EAED,OAAO8H,EAAKA,EAAK,KAAK,KAAK,CAAC,CAClC,CACG,EACD,QAAS,CACP,iBAAkB,SAA0BhV,EAAM,CAChD,IAAImG,EAAO,IAAI,KAAK,KAAK,QAAQ,EAEjC,OAAQnG,EAAI,CACV,IAAK,cACHmG,EAAK,YAAY,KAAK,UAAY,EAAG,GAAI,EAAE,EAC3CA,EAAK,SAAS,GAAI,GAAI,GAAI,GAAG,EAC7B,MAEF,IAAK,cACHA,EAAK,YAAY,KAAK,SAAW,EAAG,EAAG,CAAC,EACxC,KACV,CAEM,OAAO,KAAK,wBAAwBA,EAAMnG,CAAI,CAC/C,EACD,SAAU,SAAkB0rB,EAAU,CAIpC,QAHIiI,EAAY,KAAK,MAAMjI,EAAS,YAAa,EAAG,EAAE,EAAI,GACtD3Y,EAAQ,CAAE,EAEL9T,EAAI,EAAGA,EAAI,GAAIA,IACtB8T,EAAM,KAAK4gB,EAAY10B,CAAC,EAG1B,OAAOstB,GAAMxZ,EAAO,CAAC,CACtB,EACD,0BAA2B,UAAqC,CAC9D,KAAK,MAAM,iBAAkBqZ,GAAQ,KAAK,SAAU,SAAU/d,EAAG,CAC/D,OAAOA,EAAI,EACZ,CAAA,EAAG,aAAa,CAClB,EACD,2BAA4B,UAAsC,CAChE,KAAK,MAAM,iBAAkB+d,GAAQ,KAAK,SAAU,SAAU/d,EAAG,CAC/D,OAAOA,EAAI,EACZ,CAAA,EAAG,aAAa,CAClB,EACD,YAAa,SAAqBkhB,EAAK,CACrC,IAAI5hB,EAAS4hB,EAAI,OAEb5hB,EAAO,QAAQ,YAAW,IAAO,QACnCA,EAASA,EAAO,YAGlB,IAAIxM,EAAOwM,EAAO,aAAa,WAAW,EAEtCxM,GAAQ,CAACwM,EAAO,UAAU,SAAS,UAAU,GAC/C,KAAK,MAAM,SAAU,SAASxM,EAAM,EAAE,CAAC,CAE/C,CACA,CACA,EAGIyyB,GAAmBF,GAGnBG,GAAmB,UAA0B,CAC/C,IAAI7R,EAAM,KAENsO,EAAKtO,EAAI,eAETC,EAAKD,EAAI,MAAM,IAAMsO,EAEzB,OAAOrO,EAAG,MAAO,CACf,MAAOD,EAAI,YAAc,aAAeA,EAAI,YAAc,sBAC9D,EAAK,CAACC,EAAG,MAAO,CACZ,MAAOD,EAAI,YAAc,kBAC7B,EAAK,CAACC,EAAG,cAAe,CACpB,MAAO,CACL,KAAQ,cACR,SAAYD,EAAI,iBAAiB,aAAa,CAC/C,EACD,GAAI,CACF,MAASA,EAAI,yBACnB,CACA,CAAG,EAAGA,EAAI,GAAG,GAAG,EAAGC,EAAG,cAAe,CACjC,MAAO,CACL,KAAQ,eACR,SAAYD,EAAI,iBAAiB,aAAa,CAC/C,EACD,GAAI,CACF,MAASA,EAAI,0BACnB,CACA,CAAG,EAAGA,EAAI,GAAG,GAAG,EAAGC,EAAG,OAAQ,CAC1B,MAAOD,EAAI,YAAc,wBAC7B,EAAK,CAACC,EAAG,OAAQ,CAACD,EAAI,GAAGA,EAAI,GAAGA,EAAI,SAAS,CAAC,CAAC,CAAC,EAAGA,EAAI,GAAG,GAAG,EAAGC,EAAG,OAAQ,CACvE,MAAOD,EAAI,YAAc,4BAC1B,CAAA,EAAGA,EAAI,GAAG,GAAG,EAAGC,EAAG,OAAQ,CAACD,EAAI,GAAGA,EAAI,GAAGA,EAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAG,CAAC,EAAGA,EAAI,GAAG,GAAG,EAAGC,EAAG,MAAO,CACzF,MAAOD,EAAI,YAAc,mBAC7B,EAAK,CAACC,EAAG,QAAS,CACd,MAAOD,EAAI,YAAc,UAAYA,EAAI,YAAc,cACvD,GAAI,CACF,MAASA,EAAI,WACnB,CACA,EAAKA,EAAI,GAAGA,EAAI,MAAO,SAAUwQ,EAAK,EAAG,CACrC,OAAOvQ,EAAG,KAAM,CACd,IAAK,CACN,EAAED,EAAI,GAAGwQ,EAAK,SAAUH,EAAMld,EAAG,CAChC,OAAO8M,EAAG,KAAM,CACd,IAAK9M,EACL,YAAa,OACb,MAAO6M,EAAI,eAAeqQ,CAAI,EAC9B,MAAO,CACL,YAAaA,CACvB,CACO,EAAE,CAACpQ,EAAG,MAAO,CAACD,EAAI,GAAGA,EAAI,GAAGqQ,CAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACvC,CAAA,EAAG,CAAC,CACT,CAAG,EAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CACX,EAEIyB,GAA4B,CAAE,EAG9BC,GAA0B,OAgB1BC,GAAsB5R,EAAmB,CAC3C,OAAQyR,GACR,gBAAiBC,EACnB,EAAGC,GAAyBH,EAA2I,EAEnKK,GAAgB,CAClB,KAAM,gBACN,OAAQ,CACN,YAAa,CACX,QAAS,IACV,EACD,mBAAoB,CAClB,QAAS,UAAoB,CAC3B,OAAO,UAAY,CAAE,CAC7B,CACA,CACG,EACD,MAAO,CACL,MAAO,CAAE,EACT,aAAc,CACZ,QAAS,UAAoB,CAC3B,IAAI9tB,EAAO,IAAI,KACf,OAAAA,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EACjBA,CACf,CACK,EACD,aAAc,CACZ,KAAM,MACP,EACD,wBAAyB,CACvB,KAAM,SACN,QAAS,UAAoB,CAC3B,MAAO,EACf,CACK,EACD,aAAc,CACZ,KAAM,SACN,QAAS,UAAoB,CAC3B,MAAO,EACf,CACK,EACD,KAAM,CACJ,KAAM,OACN,QAAS,MACV,EACD,WAAY,CACV,KAAM,SACN,QAAS,UAAoB,CAC3B,MAAO,CAAE,CACjB,CACK,EACD,eAAgB,CACd,KAAM,QACN,QAAS,MACV,EACD,aAAc,CACZ,KAAM,QACP,EACD,YAAa,CACX,KAAM,OACN,QAAS,YACV,EACD,SAAU,KAEV,cAAe,CACb,KAAM,QACN,QAAS,EACf,CACG,EACD,KAAM,UAAgB,CACpB,IAAI+tB,EAAS,CAAC,OAAQ,QAAS,MAAM,EACjC5X,EAAQ,KAAK,IAAI4X,EAAO,QAAQ,KAAK,IAAI,EAAGA,EAAO,QAAQ,KAAK,YAAY,CAAC,EAC7E9B,EAAQ9V,IAAU,GAAK4X,EAAO5X,CAAK,EAAI,OAC3C,MAAO,CACL,MAAO8V,EACP,cAAe,IAAI,IACpB,CACF,EACD,SAAU,CACR,WAAY,UAAsB,CAChC,IAAI9uB,EAAQ,MAAM,QAAQ,KAAK,KAAK,EAAI,KAAK,MAAQ,CAAC,KAAK,KAAK,EAC5D6wB,EAAM,CACR,KAAM7I,GACN,MAAOC,GACP,KAAMC,EACP,EACGnnB,EAAQ8vB,EAAI,KAAK,IAAI,GAAKA,EAAI,KAClC,OAAO7wB,EAAM,OAAOkf,CAAW,EAAE,IAAI,SAAUnU,EAAG,CAChD,OAAOhK,EAAMgK,CAAC,CACtB,CAAO,CACF,EACD,aAAc,UAAwB,CACpC,OAAO,KAAK,cAAc,YAAa,CACxC,EACD,cAAe,UAAyB,CACtC,OAAO,KAAK,cAAc,SAAU,CAC1C,CACG,EACD,MAAO,CACL,MAAO,CACL,UAAW,GACX,QAAS,cACV,EACD,SAAU,CACR,QAAS,cACV,EACD,aAAc,CACZ,QAAS,cACf,CACG,EACD,QAAS,CACP,aAAc,UAAwB,CACpC,IAAI+lB,EAAe,KAAK,SAExB,GAAI,CAAC5R,EAAY4R,CAAY,EAAG,CAC9B,IAAIrL,EAAS,KAAK,WAAW,OAC7BqL,EAAehJ,GAAarC,EAAS,EAAI,KAAK,WAAWA,EAAS,CAAC,EAAI,KAAK,YAAY,CAChG,CAEM,KAAK,cAAgBwC,GAAa6I,CAAY,CAC/C,EACD,WAAY,SAAoBjuB,EAAM,CACpC,OAAO,KAAK,aAAa,IAAI,KAAKA,CAAI,EAAG,KAAK,UAAU,CACzD,EACD,SAAU,SAAkBA,EAAMnG,EAAM,CACjC,KAAK,WAAWmG,CAAI,IACvB,KAAK,MAAM,SAAUA,EAAMnG,EAAM,KAAK,UAAU,EAEhD,KAAK,mBAAmB,OAAQmG,EAAMnG,CAAI,EAE7C,EACD,qBAAsB,SAA8B0rB,EAAU1rB,EAAM,CAClE,IAAIq0B,EAAc,IAAI,KAAK,KAAK,aAAa,EAC7C,KAAK,cAAgB3I,EACrB,KAAK,MAAM,kBAAmBA,CAAQ,EACtC,KAAK,mBAAmB,kBAAmBA,EAAU2I,EAAar0B,CAAI,CACvE,EACD,kBAAmB,SAA2BoyB,EAAO,CACnD,IAAIkC,EAAW,KAAK,MACpB,KAAK,MAAQlC,EACb,KAAK,mBAAmB,eAAgBA,EAAOkC,CAAQ,CACxD,EACD,iBAAkB,SAA0BnzB,EAAM,CAChD,GAAI,KAAK,OAAS,OAAQ,CACxB,IAAIgF,EAAO,KAAK,gBAAgBhF,CAAI,EACpC,KAAK,SAASgF,EAAM,MAAM,CAClC,SACQ,KAAK,qBAAqBoiB,EAAWpnB,EAAM,KAAK,aAAa,EAAG,MAAM,EACtE,KAAK,kBAAkB,OAAO,EAE1B,KAAK,eAAiB,KAAK,WAAW,SAAW,EAAG,CACtD,IAAIozB,EAAQ,IAAI,KAAK,KAAK,WAAW,CAAC,CAAC,EAEvCA,EAAM,YAAYpzB,CAAI,EAEtB,KAAK,SAASozB,EAAO,MAAM,CACrC,CAEK,EACD,kBAAmB,SAA2BrzB,EAAO,CACnD,GAAI,KAAK,OAAS,QAAS,CACzB,IAAIiF,EAAO,KAAK,iBAAiBjF,CAAK,EACtC,KAAK,SAASiF,EAAM,OAAO,CACnC,SACQ,KAAK,qBAAqBoiB,EAAW,KAAK,aAAcrnB,CAAK,EAAG,OAAO,EACvE,KAAK,kBAAkB,MAAM,EAEzB,KAAK,eAAiB,KAAK,WAAW,SAAW,EAAG,CACtD,IAAIszB,EAAS,IAAI,KAAK,KAAK,WAAW,CAAC,CAAC,EAExCA,EAAO,YAAY,KAAK,YAAY,EAEpC,KAAK,SAASvI,GAASuI,EAAQtzB,CAAK,EAAG,OAAO,CACxD,CAEK,EACD,iBAAkB,SAA0BiF,EAAM,CAChD,KAAK,SAASA,EAAM,KAAK,OAAS,OAAS,OAAS,MAAM,CAC3D,EACD,iBAAkB,SAA0BjF,EAAO,CACjD,OAAOqnB,EAAW,KAAK,aAAcrnB,CAAK,CAC3C,EACD,gBAAiB,SAAyBC,EAAM,CAC9C,OAAOonB,EAAWpnB,EAAM,CAAC,CAC1B,EACD,eAAgB,SAAwBszB,EAAU,CAChD,IAAIC,EAAkBD,EAAS,SAAU,IAAK,KAAK,cAC/CE,EAAU,CAAE,EAEZF,EAAS,YAAc,IAAI,KAAM,EAAC,SAAS,EAAG,EAAG,EAAG,CAAC,GACvDE,EAAQ,KAAK,OAAO,EAGlBD,GACFC,EAAQ,KAAK,mBAAmB,EAGlC,IAAI1tB,EAAQ,KAAK,cAAcwtB,CAAQ,EAEvC,OAAMxtB,IAAU,UAAYytB,GAC1BC,EAAQ,KAAK1tB,CAAK,EAGb0tB,EAAQ,OAAO,KAAK,WAAWF,EAAU,KAAK,WAAYE,EAAQ,KAAK,GAAG,CAAC,CAAC,CACpF,EACD,gBAAiB,SAAyBzzB,EAAO,CAC/C,IAAIyzB,EAAU,CAAE,EAEhB,GAAI,KAAK,OAAS,QAAS,CACrB,KAAK,gBAAkBzzB,GACzByzB,EAAQ,KAAK,QAAQ,EAGvB,IAAIC,EAAY,KAAK,iBAAiB1zB,CAAK,EAE3C,OAAI,KAAK,wBAAwB0zB,EAAW,OAAO,GACjDD,EAAQ,KAAK,UAAU,EAGlBA,CACf,CAEM,IAAIF,EAAW,KAAK,iBAAiBvzB,CAAK,EAC1C,OAAAyzB,EAAQ,KAAK,KAAK,cAAcF,CAAQ,CAAC,EAClCE,EAAQ,OAAO,KAAK,WAAWF,EAAU,KAAK,WAAYE,EAAQ,KAAK,GAAG,CAAC,CAAC,CACpF,EACD,eAAgB,SAAwBxzB,EAAM,CAC5C,IAAIwzB,EAAU,CAAE,EAEhB,GAAI,KAAK,OAAS,OAAQ,CACpB,KAAK,eAAiBxzB,GACxBwzB,EAAQ,KAAK,QAAQ,EAGvB,IAAIE,EAAa,KAAK,gBAAgB1zB,CAAI,EAE1C,OAAI,KAAK,wBAAwB0zB,EAAY,MAAM,GACjDF,EAAQ,KAAK,UAAU,EAGlBA,CACf,CAEM,IAAIF,EAAW,KAAK,gBAAgBtzB,CAAI,EACxC,OAAAwzB,EAAQ,KAAK,KAAK,cAAcF,CAAQ,CAAC,EAClCE,EAAQ,OAAO,KAAK,WAAWF,EAAU,KAAK,WAAYE,EAAQ,KAAK,GAAG,CAAC,CAAC,CACpF,EACD,cAAe,SAAuBF,EAAU,CAC9C,OAAI,KAAK,WAAWA,CAAQ,EACnB,WAGL,KAAK,WAAW,KAAK,SAAUpmB,EAAG,CACpC,OAAOA,EAAE,YAAcomB,EAAS,QAAS,CACjD,CAAO,EACQ,SAGF,EACR,EACD,aAAc,SAAsBjC,EAAK,CACvC,GAAI,KAAK,OAAS,OAAQ,MAAO,GACjC,IAAInuB,EAAQmuB,EAAI,CAAC,EAAE,QAAS,EACxB/a,EAAM+a,EAAI,CAAC,EAAE,QAAS,EACtBsC,EAAS,KAAK,WAAW,KAAK,SAAUzmB,EAAG,CAC7C,IAAItL,EAAOsL,EAAE,QAAS,EACtB,OAAOtL,GAAQsB,GAAStB,GAAQ0U,CACxC,CAAO,EACD,OAAOqd,EAAS,GAAG,OAAO,KAAK,YAAa,cAAc,EAAI,EACpE,CACG,EACD,OAAQ,UAAkB,CACxB,IAAIjxB,EAAI,UAAU,CAAC,EACfuuB,EAAQ,KAAK,MACb2C,EAAgB,KAAK,cAEzB,OAAI3C,IAAU,OACLvuB,EAAEmwB,GAAqB,CAC5B,MAAS,CACP,wBAA2B,KAAK,wBAChC,SAAYe,EACZ,eAAkB,KAAK,eACvB,aAAgB,KAAK,YACtB,EACD,GAAM,CACJ,OAAU,KAAK,iBACf,eAAkB,KAAK,oBACjC,CACA,CAAO,EAGC3C,IAAU,QACLvuB,EAAE4vB,GAAqB,CAC5B,MAAS,CACP,wBAA2B,KAAK,wBAChC,SAAYsB,EACZ,eAAkB,KAAK,eACxB,EACD,GAAM,CACJ,OAAU,KAAK,kBACf,YAAe,KAAK,kBACpB,eAAkB,KAAK,oBACjC,CACA,CAAO,EAGIlxB,EAAEmvB,GAAqB,CAC5B,MAAS,CACP,wBAA2B,KAAK,wBAChC,SAAY+B,EACZ,eAAkB,KAAK,eACvB,cAAiB,KAAK,aACtB,YAAe,KAAK,YACpB,eAAkB,OAAO,KAAK,gBAAmB,UAAY,KAAK,eAAiB,KAAK,OAAS,MAClG,EACD,MAAS3P,GAAgB,GAAI,GAAG,OAAO,KAAK,YAAa,qBAAqB,EAAG,KAAK,OAAS,MAAM,EACrG,GAAM,CACJ,OAAU,KAAK,iBACf,YAAe,KAAK,kBACpB,eAAkB,KAAK,oBAC/B,CACA,CAAK,CACL,CACA,EAEI4P,GAAgB,CAClB,KAAM,gBACN,WAAY,CACV,cAAef,EAChB,EACD,QAAS,UAAmB,CAC1B,MAAO,CACL,iBAAkB,KAAK,iBACvB,iBAAkB,KAAK,gBACxB,CACF,EACD,OAAQ,CACN,YAAa,CACX,QAAS,IACf,CACG,EACD,MAAOnK,EAAe,GAAImK,GAAc,KAAK,EAC7C,KAAM,UAAgB,CACpB,MAAO,CACL,WAAY,CAAE,EACd,UAAW,CAAE,EACb,aAAc,IACf,CACF,EACD,SAAU,CAER,gBAAiB,UAA2B,CAC1C,IAAIE,EAAM,CACR,KAAM,EAEN,MAAO,GAEP,KAAM,GAEP,EACD,OAAOA,EAAI,KAAK,IAAI,GAAKA,EAAI,IAC9B,EACD,gBAAiB,UAA2B,CAC1C,MACD,IAAA,EACD,cAAe,UAAyB,CACtC,OAAO,MAAM,QAAQ,KAAK,YAAY,EAAI,KAAK,aAAe,CAAC,KAAK,aAAc,KAAK,YAAY,CACzG,CACG,EACD,MAAO,CACL,MAAO,CACL,UAAW,GACX,QAAS,UAAmB,CAC1B,IAAIxG,EAAQ,KAEZ,KAAK,WAAa1C,GAAiB,KAAK,KAAK,EAAI,KAAK,MAAQ,CAAC,IAAI,KAAK,GAAG,EAAG,IAAI,KAAK,GAAG,CAAC,EAC3F,IAAIgK,EAAY,KAAK,WAAW,IAAI,SAAU5mB,EAAGpP,EAAG,CAClD,OAAOssB,GAAaH,GAAa/c,EAAGsf,EAAM,cAAc1uB,CAAC,CAAC,CAAC,CACrE,CAAS,EACD,KAAK,gBAAgBg2B,CAAS,CACtC,CACA,CACG,EACD,QAAS,CACP,aAAc,SAAsB9uB,EAAMnG,EAAM,CAC9C,IAAIk1B,EAAmB7P,GAAe,KAAK,WAAY,CAAC,EACpD8P,EAAaD,EAAiB,CAAC,EAC/BE,EAAWF,EAAiB,CAAC,EAE7B1S,EAAY2S,CAAU,GAAK,CAAC3S,EAAY4S,CAAQ,GAC9CD,EAAW,QAAO,EAAKhvB,EAAK,QAAO,EACrC,KAAK,WAAa,CAACA,EAAMgvB,CAAU,EAEnC,KAAK,WAAa,CAACA,EAAYhvB,CAAI,EAGrC,KAAK,SAAS,KAAK,WAAYnG,CAAI,GAEnC,KAAK,WAAa,CAACmG,EAAM,IAAI,KAAK,GAAG,CAAC,CAEzC,EACD,iBAAkB,SAA0BksB,EAAM,CAChD,KAAK,aAAeA,CACrB,EACD,iBAAkB,UAA4B,CAC5C,KAAK,aAAe,IACrB,EACD,SAAU,SAAkBlH,EAAOnrB,EAAM,CACvC,KAAK,MAAM,SAAUmrB,EAAOnrB,CAAI,CACjC,EACD,oBAAqB,SAA6BsD,EAAO,CACvD,KAAK,gBAAgB,CAACA,EAAO,KAAK,UAAU,CAAC,CAAC,EAAG,CAAC,CACnD,EACD,kBAAmB,SAA2BA,EAAO,CACnD,KAAK,gBAAgB,CAAC,KAAK,UAAU,CAAC,EAAGA,CAAK,EAAG,CAAC,CACnD,EACD,gBAAiB,SAAyB2xB,EAAW,CACnD,IAAII,EAAc,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAClFC,EAAM,KAAK,eAAeL,CAAS,EAEvC,GAAIK,EAAK,CACP,IAAI5J,EAAW,IAAI,KAAKuJ,EAAUI,CAAW,CAAC,EAC9C3J,EAAS,SAASA,EAAS,SAAU,GAAI2J,IAAgB,EAAI,CAACC,EAAMA,EAAI,EACxEL,EAAUI,CAAW,EAAI3J,CACjC,CAEM,KAAK,UAAYuJ,CAClB,EACD,eAAgB,SAAwBA,EAAW,CACjD,IAAIM,EAAalQ,GAAe4P,EAAW,CAAC,EACxCO,EAAeD,EAAW,CAAC,EAC3BE,EAAgBF,EAAW,CAAC,EAE5BG,EAAWD,EAAc,YAAW,EAAKD,EAAa,YAAa,EACnEG,EAAYF,EAAc,SAAQ,EAAKD,EAAa,SAAU,EAC9D9S,EAAOgT,EAAW,GAAKC,EACvBre,EAAM,KAAK,gBACXC,EAAM,KAAK,gBAEf,OAAImL,EAAOpL,EACFA,EAAMoL,EAGXA,EAAOnL,EACFA,EAAMmL,EAGR,CACR,EACD,gBAAiB,SAAyB+R,EAAUmB,EAAcC,EAAY,CAC5E,IAAIlB,EAAU,CAAE,EAAC,OAAO,KAAK,WAAWF,EAAUmB,EAAcC,CAAU,CAAC,EAC3E,GAAI,kBAAkB,KAAKA,CAAU,EAAG,OAAOlB,EAE/C,IAAImB,EAAU,SAAiBv3B,EAAMw3B,EAAO,CAC1C,IAAIjJ,EAAK,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,SAAUze,EAAG,CACxF,OAAOA,EAAE,QAAS,CACnB,EACG/K,EAAQwpB,EAAGvuB,CAAI,EAEfy3B,EAAaD,EAAM,IAAIjJ,CAAE,EACzBmJ,EAAc5Q,GAAe2Q,EAAY,CAAC,EAC1C1e,EAAM2e,EAAY,CAAC,EACnB1e,EAAM0e,EAAY,CAAC,EAEvB,GAAI3e,EAAMC,EAAK,CACb,IAAIqL,EAAO,CAACrL,EAAKD,CAAG,EACpBA,EAAMsL,EAAK,CAAC,EACZrL,EAAMqL,EAAK,CAAC,CACtB,CAEQ,OAAOtf,EAAQgU,GAAOhU,EAAQiU,CAC/B,EAED,OAAIqe,EAAa,SAAW,GAAKE,EAAQrB,EAAUmB,CAAY,EACtDjB,EAAQ,OAAO,UAAU,EAG9BiB,EAAa,SAAW,GAAK,KAAK,cAAgBE,EAAQrB,EAAU,CAACmB,EAAa,CAAC,EAAG,KAAK,YAAY,CAAC,EACnGjB,EAAQ,OAAO,gBAAgB,EAGjCA,CACb,CACG,EACD,OAAQ,UAAkB,CACxB,IAAItF,EAAS,KAETxrB,EAAI,UAAU,CAAC,EACfqyB,EAAgB,KAAK,UAAU,IAAI,SAAUxK,EAAUpP,EAAO,CAChE,IAAI9Q,EAAQse,EAAe,GAAIuF,EAAO,OAAQ,CAC5C,SAAU3D,EACV,MAAO2D,EAAO,WACd,aAAcA,EAAO,cAAc/S,CAAK,EACxC,WAAY+S,EAAO,gBAEnB,cAAe,EACvB,CAAO,EAEG8G,EAAK,CACP,OAAQ9G,EAAO,aACf,kBAAmB/S,IAAU,EAAI+S,EAAO,oBAAsBA,EAAO,iBACtE,EACD,OAAOxrB,EAAE,iBAAkB,CACzB,MAASimB,EAAe,CAAE,EAAEte,CAAK,EACjC,GAAMse,EAAe,CAAA,EAAIqM,CAAE,CACnC,CAAO,CACP,CAAK,EACGC,EAAc,KAAK,YACvB,OAAOvyB,EAAE,MAAO,CACd,MAAS,GAAG,OAAOuyB,EAAa,gBAAgB,CACtD,EAAO,CAACF,CAAa,CAAC,CACtB,CACA,EAEIG,GACJ,SAASC,IAAqB,CAC5B,GAAI,OAAO,OAAW,IAAa,MAAO,GAC1C,GAAID,KAAmB,OAAW,OAAOA,GACzC,IAAIE,EAAQ,SAAS,cAAc,KAAK,EACxCA,EAAM,MAAM,WAAa,SACzBA,EAAM,MAAM,SAAW,SACvBA,EAAM,MAAM,MAAQ,QACpBA,EAAM,MAAM,SAAW,WACvBA,EAAM,MAAM,IAAM,UAClB,SAAS,KAAK,YAAYA,CAAK,EAC/B,IAAIC,EAAQ,SAAS,cAAc,KAAK,EACxC,OAAAA,EAAM,MAAM,MAAQ,OACpBD,EAAM,YAAYC,CAAK,EACvBH,GAAiBE,EAAM,YAAcC,EAAM,YAC3CD,EAAM,WAAW,YAAYA,CAAK,EAC3BF,EACT,CAGA,IAAII,GAAW,CACb,OAAQ,CACN,YAAa,CACX,QAAS,IACf,CACG,EACD,KAAM,UAAgB,CACpB,MAAO,CACL,eAAgB,EAChB,SAAU,GACV,YAAa,EACd,CACF,EACD,QAAS,UAAmB,CAC1B,KAAK,eAAiBH,GAAmB,EACzC,SAAS,iBAAiB,UAAW,KAAK,aAAa,CACxD,EACD,cAAe,UAAyB,CACtC,SAAS,iBAAiB,UAAW,KAAK,aAAa,CACxD,EACD,QAAS,UAAmB,CAC1B,KAAK,UAAU,KAAK,YAAY,CACjC,EACD,QAAS,CACP,aAAc,UAAwB,CACpC,IAAII,EAAO,KAAK,MAAM,KACtB,GAAKA,EACL,CAAIC,IAAAA,EAAmBD,EAAK,aAAe,IAAMA,EAAK,aACtD,KAAK,YAAcC,EAAmB,IAAM,GAAG,OAAOA,EAAkB,GAAG,EAAI,EAAA,CAChF,EACD,aAAc,SAAsBpH,EAAK,CACvC,IAAInB,EAAKmB,EAAI,cACTqH,EAAexI,EAAG,aAClByI,EAAYzI,EAAG,UACnB,KAAK,SAAW,GAAG,OAAOyI,EAAY,IAAMD,EAAc,GAAG,CAC9D,EACD,gBAAiB,SAAyBrH,EAAK,CAC7CA,EAAI,yBAA0B,EAC9B,KAAK,WAAa,GAClB,IAAIuH,EAAY,KAAK,MAAM,MAAM,UACjC,KAAK,OAASvH,EAAI,QAAUuH,EAC5B,SAAS,iBAAiB,YAAa,KAAK,aAAa,CAC1D,EACD,cAAe,SAAuBvH,EAAK,CACzC,GAAK,KAAK,WACV,CAAA,IAAIwH,EAAUxH,EAAI,QACdmH,EAAO,KAAK,MAAM,KAClBE,EAAeF,EAAK,aACpBM,EAAeN,EAAK,aACpB/H,EAAUoI,EAAU,KAAK,OACzBtI,EAAME,EAAUiI,EAAeI,EACnCN,EAAK,UAAYjI,EAClB,EACD,cAAe,UAAyB,CAClC,KAAK,aACP,KAAK,WAAa,GAClB,SAAS,oBAAoB,YAAa,KAAK,aAAa,EAEpE,CACA,CACA,EAGIwI,GAAmBR,GAGnBS,GAAmB,UAA0B,CAC/C,IAAIlV,EAAM,KAENsO,EAAKtO,EAAI,eAETC,EAAKD,EAAI,MAAM,IAAMsO,EAEzB,OAAOrO,EAAG,MAAO,CACf,MAAOD,EAAI,YAAc,aACzB,MAAO,CACL,SAAU,WACV,SAAU,QAChB,CACA,EAAK,CAACC,EAAG,MAAO,CACZ,IAAK,OACL,MAAOD,EAAI,YAAc,kBACzB,MAAO,CACL,YAAa,IAAMA,EAAI,eAAiB,IACzC,EACD,GAAI,CACF,OAAUA,EAAI,YACpB,CACG,EAAE,CAACA,EAAI,GAAG,SAAS,CAAC,EAAG,CAAC,EAAGA,EAAI,GAAG,GAAG,EAAGC,EAAG,MAAO,CACjD,MAAOD,EAAI,YAAc,kBAC7B,EAAK,CAACC,EAAG,MAAO,CACZ,IAAK,QACL,MAAOD,EAAI,YAAc,mBACzB,MAAO,CACL,OAAQA,EAAI,YACZ,IAAKA,EAAI,QACV,EACD,GAAI,CACF,UAAaA,EAAI,eACvB,CACA,CAAG,CAAC,CAAC,CAAC,CAAC,CACP,EAEImV,GAA4B,CAAE,EAG9BC,GAA0B,OAgB1BC,GAAsBjV,EAAmB,CAC3C,OAAQ8U,GACR,gBAAiBC,EACnB,EAAGC,GAAyBH,EAA2I,EAInKK,GAAY,SAAmBh0B,EAAO,CACxC,OAAAA,EAAQ,SAASA,EAAO,EAAE,EACnBA,EAAQ,GAAK,IAAI,OAAOA,CAAK,EAAI,GAAG,OAAOA,CAAK,CACzD,EAEIi0B,GAAkB,SAAyBxO,EAAQ1e,EAAM0D,EAAS,CACpE,GAAI,MAAM,QAAQA,CAAO,EACvB,OAAOA,EAAQ,OAAO,SAAUM,EAAG,CACjC,OAAOA,GAAK,GAAKA,EAAI0a,CAC3B,CAAK,EAGC1e,GAAQ,IACVA,EAAO,GAKT,QAFI6C,EAAM,CAAE,EAEH,EAAI,EAAG,EAAI6b,EAAQ,GAAK1e,EAC/B6C,EAAI,KAAK,CAAC,EAGZ,OAAOA,CACT,EAEIsqB,GAAW,SAASA,EAAS3J,EAAS4J,EAAI,CAC5C,IAAI1Y,EAAW,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAGnF,GAAIA,GAAY,EAAG,CACjB,sBAAsB,UAAY,CAChC8O,EAAQ,UAAY4J,CAC1B,CAAK,EACD,MACJ,CAEE,IAAIC,EAAaD,EAAK5J,EAAQ,UAC1B8J,EAAOD,EAAa3Y,EAAW,GACnC,sBAAsB,UAAY,CAChC,IAAI8X,EAAYhJ,EAAQ,UAAY8J,EAEpC,GAAId,GAAaY,EAAI,CACnB5J,EAAQ,UAAY4J,EACpB,MACN,CAEI5J,EAAQ,UAAYgJ,EACpBW,EAAS3J,EAAS4J,EAAI1Y,EAAW,EAAE,CACvC,CAAG,CACH,EAEI6Y,GAAW,CACb,KAAM,cACN,WAAY,CACV,kBAAmBP,EACpB,EACD,OAAQ,CACN,YAAa,CACX,QAAS,IACf,CACG,EACD,MAAO,CACL,KAAM,KACN,eAAgB,CACd,KAAM,OACN,QAAS,GACV,EACD,WAAY,CACV,KAAM,SACN,QAAS,UAAoB,CAC3B,MAAO,CAAE,CACjB,CACK,EACD,YAAa,MACb,cAAe,MACf,cAAe,MACf,SAAU,CACR,KAAM,QACN,QAAS,EACV,EACD,WAAY,CACV,KAAM,QACN,QAAS,EACV,EACD,WAAY,CACV,KAAM,QACN,QAAS,EACV,EACD,SAAU,CACR,KAAM,OACN,QAAS,CACV,EACD,WAAY,CACV,KAAM,OACN,QAAS,CACV,EACD,WAAY,CACV,KAAM,OACN,QAAS,CACV,EACD,OAAQ,CACN,KAAM,QACN,QAAS,EACf,CACG,EACD,SAAU,CACR,QAAS,UAAmB,CAC1B,IAAIQ,EAAO,CAAE,EACb,OAAI,KAAK,UAAUA,EAAK,KAAK,CAC3B,KAAM,OACN,KAAM,KAAK,aAAY,CAC/B,CAAO,EACG,KAAK,YAAYA,EAAK,KAAK,CAC7B,KAAM,SACN,KAAM,KAAK,eAAc,CACjC,CAAO,EACG,KAAK,YAAYA,EAAK,KAAK,CAC7B,KAAM,SACN,KAAM,KAAK,eAAc,CACjC,CAAO,EACG,KAAK,QAAQA,EAAK,KAAK,CACzB,KAAM,OACN,KAAM,KAAK,YAAW,CAC9B,CAAO,EACMA,EAAK,OAAO,SAAUxpB,EAAG,CAC9B,OAAOA,EAAE,KAAK,OAAS,CAC/B,CAAO,CACP,CACG,EACD,MAAO,CACL,KAAM,CACJ,QAAS,UAAmB,CAC1B,IAAIsf,EAAQ,KAEZ,KAAK,UAAU,UAAY,CACzBA,EAAM,iBAAiBA,EAAM,cAAc,CACrD,CAAS,CACT,CACA,CACG,EACD,QAAS,UAAmB,CAC1B,KAAK,iBAAiB,CAAC,CACxB,EACD,QAAS,CACP,aAAc,UAAwB,CACpC,IAAI0B,EAAS,KAEb,OAAOkI,GAAgB,KAAK,OAAS,GAAK,GAAI,KAAK,SAAU,KAAK,WAAW,EAAE,IAAI,SAAUx2B,EAAK,CAChG,IAAIoF,EAAO,IAAI,KAAKkpB,EAAO,IAAI,EAC3B+D,EAAOkE,GAAUv2B,CAAG,EAEpBsuB,EAAO,SACLtuB,IAAQ,IACVqyB,EAAO,MAGLjtB,EAAK,SAAU,GAAI,KACrBpF,GAAO,KAIX,IAAIuC,EAAQ6C,EAAK,SAASpF,CAAG,EAC7B,MAAO,CACL,MAAOuC,EACP,KAAM8vB,CACP,CACT,CAAO,CACF,EACD,eAAgB,UAA0B,CACxC,IAAI0E,EAAS,KAEb,OAAOP,GAAgB,GAAI,KAAK,WAAY,KAAK,aAAa,EAAE,IAAI,SAAUx2B,EAAK,CACjF,IAAIuC,EAAQ,IAAI,KAAKw0B,EAAO,IAAI,EAAE,WAAW/2B,CAAG,EAChD,MAAO,CACL,MAAOuC,EACP,KAAMg0B,GAAUv2B,CAAG,CACpB,CACT,CAAO,CACF,EACD,eAAgB,UAA0B,CACxC,IAAIg3B,EAAS,KAEb,OAAOR,GAAgB,GAAI,KAAK,WAAY,KAAK,aAAa,EAAE,IAAI,SAAUx2B,EAAK,CACjF,IAAIuC,EAAQ,IAAI,KAAKy0B,EAAO,IAAI,EAAE,WAAWh3B,CAAG,EAChD,MAAO,CACL,MAAOuC,EACP,KAAMg0B,GAAUv2B,CAAG,CACpB,CACT,CAAO,CACF,EACD,YAAa,UAAuB,CAClC,IAAIi3B,EAAS,KAEb,MAAO,CAAC,KAAM,IAAI,EAAE,IAAI,SAAU5E,EAAMn0B,EAAG,CACzC,IAAIkH,EAAO,IAAI,KAAK6xB,EAAO,IAAI,EAC3B10B,EAAQ6C,EAAK,SAASA,EAAK,WAAa,GAAKlH,EAAI,EAAE,EACvD,MAAO,CACL,KAAMm0B,EACN,MAAO9vB,CACR,CACT,CAAO,CACF,EACD,iBAAkB,SAA0Byb,EAAU,CAGpD,QAFIkZ,EAAW,KAAK,IAAI,iBAAiB,SAAS,EAEzCh5B,EAAI,EAAGA,EAAIg5B,EAAS,OAAQh5B,IAAK,CACxC,IAAI4uB,EAAUoK,EAASh5B,CAAC,EACpBi5B,EAAgBnJ,GAAgBlB,EAAS,KAAK,GAAG,EAErD,GAAIqK,EAAe,CACjB,IAAIT,EAAK5J,EAAQ,UACjB2J,GAASU,EAAeT,EAAI1Y,CAAQ,CAC9C,CACA,CACK,EACD,aAAc,SAAsBwQ,EAAK,CACvC,IAAI5hB,EAAS4hB,EAAI,OACb4I,EAAgB5I,EAAI,cACxB,GAAI5hB,EAAO,QAAQ,YAAW,IAAO,KACrC,KAAI3N,EAAOm4B,EAAc,aAAa,WAAW,EAC7CC,EAAW,SAASD,EAAc,aAAa,YAAY,EAAG,EAAE,EAChEE,EAAY,SAAS1qB,EAAO,aAAa,YAAY,EAAG,EAAE,EAC1DrK,EAAQ,KAAK,QAAQ80B,CAAQ,EAAE,KAAKC,CAAS,EAAE,MACnD,KAAK,MAAM,SAAU/0B,EAAOtD,CAAI,CACtC,CAAA,CACA,CACA,EAGIs4B,GAAmBV,GAGnBW,GAAmB,UAA0B,CAC/C,IAAIvW,EAAM,KAENsO,EAAKtO,EAAI,eAETC,EAAKD,EAAI,MAAM,IAAMsO,EAEzB,OAAOrO,EAAG,MAAO,CACf,MAAOD,EAAI,YAAc,eAC7B,EAAKA,EAAI,GAAGA,EAAI,QAAS,SAAUyQ,EAAK,EAAG,CACvC,OAAOxQ,EAAG,qBAAsB,CAC9B,IAAK,EACL,MAAOD,EAAI,YAAc,cAC/B,EAAO,CAACC,EAAG,KAAM,CACX,MAAOD,EAAI,YAAc,aACzB,MAAO,CACL,YAAayQ,EAAI,KACjB,aAAc,CACf,EACD,GAAI,CACF,MAASzQ,EAAI,YACrB,CACA,EAAOA,EAAI,GAAGyQ,EAAI,KAAM,SAAUlV,EAAMpI,EAAG,CACrC,OAAO8M,EAAG,KAAM,CACd,IAAK1E,EAAK,MACV,MAAO,CAACyE,EAAI,YAAc,aAAcA,EAAI,WAAWzE,EAAK,MAAOkV,EAAI,IAAI,CAAC,EAC5E,MAAO,CACL,aAActd,CACxB,CACO,EAAE,CAAC6M,EAAI,GAAG;AAAA,UAAeA,EAAI,GAAGzE,EAAK,IAAI,EAAI;AAAA,OAAU,CAAC,CAAC,CAChE,CAAK,EAAG,CAAC,CAAC,CAAC,CACR,CAAA,EAAG,CAAC,CACP,EAEIib,GAA4B,CAAE,EAG9BC,GAA0B,OAgB1BC,GAAsBtW,EAAmB,CAC3C,OAAQmW,GACR,gBAAiBC,EACnB,EAAGC,GAAyBH,EAA2I,EAIvK,SAASK,IAAc,CACrB,IAAI51B,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC3EsT,EAAStT,EAAK,MAAM,GAAG,EAE3B,GAAIsT,EAAO,QAAU,EAAG,CACtB,IAAIvM,EAAQ,SAASuM,EAAO,CAAC,EAAG,EAAE,EAC9BtM,EAAU,SAASsM,EAAO,CAAC,EAAG,EAAE,EACpC,MAAO,CACL,MAAOvM,EACP,QAASC,CACV,CACL,CAEE,OAAO,IACT,CAEA,IAAI6uB,GAAa,SAAkB/K,EAAS4J,EAAI,CAC1C5J,IACFA,EAAQ,UAAY4J,EAExB,EAEIoB,GAAW,CACb,KAAM,cACN,WAAY,CACV,kBAAmBxB,EACpB,EACD,OAAQ,CACN,UAAW,CACT,QAAS,UAAoB,CAC3B,OAAO7J,EACf,CACK,EACD,YAAa,CACX,QAAS,IACf,CACG,EACD,MAAO,CACL,KAAM,KACN,QAAS,CACP,KAAM,CAAC,OAAQ,QAAQ,EACvB,QAAS,UAAoB,CAC3B,MAAO,CAAE,CACjB,CACK,EACD,OAAQ,CACN,KAAM,OACN,QAAS,UACV,EACD,WAAY,CACV,KAAM,SACN,QAAS,UAAoB,CAC3B,MAAO,CAAE,CACjB,CACA,CACG,EACD,SAAU,CACR,KAAM,UAAgB,CACpB,IAAI1pB,EAAS,CAAE,EACXiK,EAAU,KAAK,QAEnB,GAAI,OAAOA,GAAY,WACrB,OAAOA,EAAS,GAAI,CAAE,EAGxB,IAAI1J,EAAQs0B,GAAY5qB,EAAQ,KAAK,EACjC0J,EAAMkhB,GAAY5qB,EAAQ,GAAG,EAC7B1D,EAAOsuB,GAAY5qB,EAAQ,IAAI,EAC/B2kB,EAAM3kB,EAAQ,QAAU,KAAK,OAEjC,GAAI1J,GAASoT,GAAOpN,EAMlB,QALIyuB,EAAez0B,EAAM,QAAUA,EAAM,MAAQ,GAC7C00B,EAAathB,EAAI,QAAUA,EAAI,MAAQ,GACvCuhB,EAAc3uB,EAAK,QAAUA,EAAK,MAAQ,GAC1ChE,EAAM,KAAK,OAAO0yB,EAAaD,GAAgBE,CAAW,EAErD/5B,EAAI,EAAGA,GAAKoH,EAAKpH,IAAK,CAC7B,IAAIg6B,EAAcH,EAAe75B,EAAI+5B,EACjClvB,EAAQ,KAAK,MAAMmvB,EAAc,EAAE,EACnClvB,EAAUkvB,EAAc,GACxB31B,EAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,SAASwG,EAAOC,EAAS,CAAC,EAC1DjG,EAAO,KAAK,CACV,MAAOR,EACP,KAAM,KAAK,WAAWA,EAAOovB,CAAG,CAC5C,CAAW,CACX,CAGM,OAAO5uB,CACb,CACG,EACD,QAAS,UAAmB,CAC1B,KAAK,iBAAkB,CACxB,EACD,QAAS,CACP,WAAY,SAAoBqC,EAAMusB,EAAK,CACzC,OAAOtO,GAAOje,EAAMusB,EAAK,CACvB,OAAQ,KAAK,YAAY,YACjC,CAAO,CACF,EACD,iBAAkB,UAA4B,CAC5C,IAAI7E,EAAU,KAAK,IAAI,cAAc,SAAS,EAC9C,GAAKA,EACL,CAAA,IAAIqK,EAAgBnJ,GAAgBlB,EAAS,KAAK,GAAG,EACrD,GAAKqK,EACL,KAAIT,EAAK5J,EAAQ,UACjB+K,GAAWV,EAAeT,CAAE,GAC7B,EACD,aAAc,SAAsBn0B,EAAO,CACzC,KAAK,MAAM,SAAUA,EAAO,MAAM,CACxC,CACA,CACA,EAGI41B,GAAmBL,GAGnBM,GAAmB,UAA0B,CAC/C,IAAInX,EAAM,KAENsO,EAAKtO,EAAI,eAETC,EAAKD,EAAI,MAAM,IAAMsO,EAEzB,OAAOrO,EAAG,qBAAsBD,EAAI,GAAGA,EAAI,KAAM,SAAUzE,EAAM,CAC/D,OAAO0E,EAAG,MAAO,CACf,IAAK1E,EAAK,MACV,MAAO,CAACyE,EAAI,YAAc,eAAgBA,EAAI,WAAWzE,EAAK,KAAK,CAAC,EACpE,GAAI,CACF,MAAS,SAAesV,EAAQ,CAC9B,OAAO7Q,EAAI,aAAazE,EAAK,KAAK,CAC5C,CACA,CACK,EAAE,CAACyE,EAAI,GAAG;AAAA,MAAWA,EAAI,GAAGzE,EAAK,IAAI,EAAI;AAAA,GAAM,CAAC,CAAC,CACnD,CAAA,EAAG,CAAC,CACP,EAEI6b,GAA4B,CAAE,EAG9BC,GAA0B,OAgB1BC,GAAsBlX,EAAmB,CAC3C,OAAQ+W,GACR,gBAAiBC,EACnB,EAAGC,GAAyBH,EAA2I,EAGnKK,GAAW,CACb,KAAM,YACN,WAAY,CACV,YAAab,GACb,YAAaY,EACd,EACD,OAAQ,CACN,UAAW,CACT,QAAS,UAAoB,CAC3B,OAAO9L,EACf,CACK,EACD,YAAa,CACX,QAAS,IACf,CACG,EACD,MAAO,CACL,MAAO,CAAE,EACT,aAAc,CACZ,QAAS,UAAoB,CAC3B,IAAIrnB,EAAO,IAAI,KACf,OAAAA,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EACjBA,CACf,CACK,EACD,OAAQ,CACN,QAAS,UACV,EACD,gBAAiB,CACf,KAAM,OACN,QAAS,YACV,EACD,eAAgB,CACd,KAAM,QACN,QAAS,EACV,EACD,aAAc,CACZ,KAAM,SACN,QAAS,UAAoB,CAC3B,MAAO,EACf,CACK,EACD,kBAAmB,CACjB,KAAM,CAAC,OAAQ,QAAQ,EACvB,QAAS,UAAoB,CAC3B,OAAO,IACf,CACK,EACD,YAAa,MACb,cAAe,MACf,cAAe,MACf,SAAU,CACR,KAAM,OACN,QAAS,CACV,EACD,WAAY,CACV,KAAM,OACN,QAAS,CACV,EACD,WAAY,CACV,KAAM,OACN,QAAS,CACV,EACD,SAAU,CACR,KAAM,QACN,QAAS,MACV,EACD,WAAY,CACV,KAAM,QACN,QAAS,MACV,EACD,WAAY,CACV,KAAM,QACN,QAAS,MACV,EACD,OAAQ,CACN,KAAM,QACN,QAAS,MACV,EACD,eAAgB,CACd,KAAM,OACN,QAAS,GACf,CACG,EACD,KAAM,UAAgB,CACpB,MAAO,CACL,WAAYilB,GAAa,KAAK,MAAO,KAAK,YAAY,CACvD,CACF,EACD,SAAU,CACR,MAAO,UAAiB,CACtB,IAAIoO,EAAc,KAAK,gBACnBrzB,EAAO,IAAI,KAAK,KAAK,UAAU,EACnC,OAAO,KAAK,WAAWA,EAAMqzB,CAAW,CACzC,EACD,YAAa,UAAuB,CAClC,OAAO,OAAO,KAAK,QAAW,SAAW,KAAK,OAAS,UACxD,EACD,yBAA0B,UAAoC,CAC5D,IAAI7L,EAAQ,KAER+E,EAAM,KAAK,YACX+G,EAAe,CACjB,SAAU,SAAS,KAAK/G,CAAG,EAC3B,WAAY,IAAI,KAAKA,CAAG,EACxB,WAAY,IAAI,KAAKA,CAAG,EACxB,OAAQ,KAAK,KAAKA,CAAG,CACtB,EACGvlB,EAAM,CAAE,EACZ,OAAA,OAAO,KAAKssB,CAAY,EAAE,QAAQ,SAAUp2B,EAAK,CAC/C8J,EAAI9J,CAAG,EAAI,OAAOsqB,EAAMtqB,CAAG,GAAM,UAAYsqB,EAAMtqB,CAAG,EAAIo2B,EAAap2B,CAAG,CAClF,CAAO,EACM8J,CACb,CACG,EACD,MAAO,CACL,MAAO,CACL,UAAW,GACX,QAAS,UAAmB,CAC1B,KAAK,WAAaie,GAAa,KAAK,MAAO,KAAK,YAAY,CACpE,CACA,CACG,EACD,QAAS,CACP,WAAY,SAAoBjlB,EAAMusB,EAAK,CACzC,OAAOtO,GAAOje,EAAMusB,EAAK,CACvB,OAAQ,KAAK,YAAY,YACjC,CAAO,CACF,EACD,eAAgB,SAAwBpvB,EAAO,CAC7C,OAAO,KAAK,aAAa,IAAI,KAAKA,CAAK,CAAC,CACzC,EACD,eAAgB,SAAwB6C,EAAM,CAC5C,IAAI7C,EAAQ,IAAI,KAAK6C,CAAI,EACzB,OAAO,KAAK,eAAe7C,CAAK,GAAK,KAAK,eAAeA,EAAM,WAAW,EAAG,EAAG,CAAC,CAAC,GAAK,KAAK,eAAeA,EAAM,WAAW,GAAI,GAAI,GAAG,CAAC,CACzI,EACD,iBAAkB,SAA0B6C,EAAM,CAChD,IAAI7C,EAAQ,IAAI,KAAK6C,CAAI,EACzB,OAAO,KAAK,eAAe7C,CAAK,GAAK,KAAK,eAAeA,EAAM,WAAW,EAAG,CAAC,CAAC,GAAK,KAAK,eAAeA,EAAM,WAAW,GAAI,GAAG,CAAC,CAClI,EACD,eAAgB,SAAwB6C,EAAM,CAC5C,IAAI7C,EAAQ,IAAI,KAAK6C,CAAI,EACrBuzB,EAAUp2B,EAAM,SAAU,EAAG,GAAK,EAAI,GACtCq2B,EAAUD,EAAU,GACxB,OAAO,KAAK,eAAep2B,CAAK,GAAK,KAAK,eAAeA,EAAM,SAASo2B,EAAS,EAAG,EAAG,CAAC,CAAC,GAAK,KAAK,eAAep2B,EAAM,SAASq2B,EAAS,GAAI,GAAI,GAAG,CAAC,CACvJ,EACD,WAAY,SAAoBxzB,EAAMnG,EAAM,CAC1C,OAAIA,IAAS,OACJ,KAAK,eAAemG,CAAI,EAG7BnG,IAAS,SACJ,KAAK,iBAAiBmG,CAAI,EAG/BnG,IAAS,OACJ,KAAK,eAAemG,CAAI,EAG1B,KAAK,eAAeA,CAAI,CAChC,EACD,aAAc,SAAsB7C,EAAOtD,EAAM,CAC/C,IAAImG,EAAO,IAAI,KAAK7C,CAAK,EAEpB,KAAK,WAAWA,EAAOtD,CAAI,IAC9B,KAAK,WAAamG,EAEb,KAAK,eAAeA,CAAI,GAC3B,KAAK,MAAM,SAAUA,EAAMnG,CAAI,EAGpC,EACD,iBAAkB,UAA4B,CAC5C,KAAK,MAAM,YAAY,CACxB,EACD,WAAY,SAAoBsD,EAAOtD,EAAM,CAC3C,IAAIy0B,EAAW,IAAI,KAAKnxB,CAAK,EAE7B,OAAI,KAAK,WAAWA,EAAOtD,CAAI,EACtB,WAGLy0B,EAAS,QAAS,IAAK,KAAK,WAAW,QAAO,EACzC,SAGF,EACb,CACA,CACA,EAGImF,GAAmBL,GAGnBM,GAAmB,UAA0B,CAC/C,IAAI7X,EAAM,KAENsO,EAAKtO,EAAI,eAETC,EAAKD,EAAI,MAAM,IAAMsO,EAEzB,OAAOrO,EAAG,MAAO,CACf,MAAOD,EAAI,YAAc,OAC1B,EAAE,CAACA,EAAI,eAAiBC,EAAG,MAAO,CACjC,MAAOD,EAAI,YAAc,cAC7B,EAAK,CAACC,EAAG,SAAU,CACf,MAAOD,EAAI,YAAc,QAAUA,EAAI,YAAc,aAAeA,EAAI,YAAc,qBACtF,MAAO,CACL,KAAQ,QACT,EACD,GAAI,CACF,MAASA,EAAI,gBACnB,CACA,EAAK,CAACA,EAAI,GAAG;AAAA,QAAaA,EAAI,GAAGA,EAAI,KAAK,EAAI;AAAA,KAAQ,CAAC,CAAC,CAAC,CAAC,EAAIA,EAAI,KAAMA,EAAI,GAAG,GAAG,EAAGC,EAAG,MAAO,CAC3F,MAAOD,EAAI,YAAc,eAC1B,EAAE,CAACA,EAAI,kBAAoBC,EAAG,eAAgB,CAC7C,MAAO,CACL,KAAQD,EAAI,WACZ,cAAeA,EAAI,WACnB,QAAWA,EAAI,kBACf,OAAUA,EAAI,WACf,EACD,GAAI,CACF,OAAUA,EAAI,YACpB,CACG,CAAA,EAAIC,EAAG,eAAgBD,EAAI,GAAG,CAC7B,MAAO,CACL,KAAQA,EAAI,WACZ,cAAeA,EAAI,WACnB,eAAgBA,EAAI,YACpB,iBAAkBA,EAAI,cACtB,iBAAkBA,EAAI,cACtB,YAAaA,EAAI,SACjB,cAAeA,EAAI,WACnB,cAAeA,EAAI,WACnB,kBAAmBA,EAAI,cACxB,EACD,GAAI,CACF,OAAUA,EAAI,YACpB,CACA,EAAK,eAAgBA,EAAI,yBAA0B,EAAK,CAAC,CAAC,EAAG,CAAC,CAAC,CAAC,CAChE,EAEI8X,GAA4B,CAAE,EAG9BC,GAA0B,OAgB1BC,GAAsB5X,EAAmB,CAC3C,OAAQyX,GACR,gBAAiBC,EACnB,EAAGC,GAAyBH,EAA2I,EAEnKK,GAAY,CACd,KAAM,YACN,OAAQ,CACN,YAAa,CACX,QAAS,IACf,CACG,EACD,MAAOnQ,EAAe,GAAIkQ,GAAoB,KAAK,EACnD,KAAM,UAAgB,CACpB,MAAO,CACL,WAAY,IAAI,KAAK,GAAG,EACxB,SAAU,IAAI,KAAK,GAAG,CACvB,CACF,EACD,MAAO,CACL,MAAO,CACL,UAAW,GACX,QAAS,UAAmB,CAC1B,GAAI/O,GAAiB,KAAK,KAAK,EAAG,CAChC,IAAIiP,EAAc7U,GAAe,KAAK,MAAO,CAAC,EAC1C8P,EAAa+E,EAAY,CAAC,EAC1B9E,EAAW8E,EAAY,CAAC,EAE5B,KAAK,WAAa/E,EAClB,KAAK,SAAWC,CAC1B,MACU,KAAK,WAAa,IAAI,KAAK,GAAG,EAC9B,KAAK,SAAW,IAAI,KAAK,GAAG,CAEtC,CACA,CACG,EACD,QAAS,CACP,WAAY,SAAoBp1B,EAAMsc,EAAO,CAC3C,IAAInW,EAAO,CAAC,KAAK,WAAY,KAAK,QAAQ,EAC1C,KAAK,MAAM,SAAUA,EAAMnG,IAAS,OAAS,aAAeA,EAAMsc,CAAK,CACxE,EACD,kBAAmB,SAA2BnW,EAAMnG,EAAM,CACxD,KAAK,WAAamG,EAEZ,KAAK,SAAS,QAAS,GAAIA,EAAK,QAAO,IAC3C,KAAK,SAAWA,GAGlB,KAAK,WAAWnG,EAAM,CAAC,CACxB,EACD,gBAAiB,SAAyBmG,EAAMnG,EAAM,CAEpD,KAAK,SAAWmG,EAEV,KAAK,WAAW,QAAS,GAAIA,EAAK,QAAO,IAC7C,KAAK,WAAaA,GAGpB,KAAK,WAAWnG,EAAM,CAAC,CACxB,EACD,kBAAmB,SAA2BmG,EAAM,CAClD,OAAO,KAAK,aAAaA,EAAM,CAAC,CACjC,EACD,gBAAiB,SAAyBA,EAAM,CAC9C,OAAOA,EAAK,UAAY,KAAK,WAAW,QAAS,GAAI,KAAK,aAAaA,EAAM,CAAC,CACpF,CACG,EACD,OAAQ,UAAkB,CACxB,IAAItC,EAAI,UAAU,CAAC,EACfs2B,EAAgB,MAAM,QAAQ,KAAK,YAAY,EAAI,KAAK,aAAe,CAAC,KAAK,aAAc,KAAK,YAAY,EAC5G/D,EAAc,KAAK,YACvB,OAAOvyB,EAAE,MAAO,CACd,MAAS,GAAG,OAAOuyB,EAAa,gBAAgB,CACtD,EAAO,CAACvyB,EAAEm2B,GAAqB,CACzB,MAASlQ,EAAe,CAAE,EAAEA,EAAe,CAAE,EAAE,KAAK,OAAQ,CAC1D,MAAO,KAAK,WACZ,aAAcqQ,EAAc,CAAC,EAC7B,aAAc,KAAK,iBAC3B,CAAO,CAAC,EACF,GAAMrQ,EAAe,CAAE,EAAEA,EAAe,CAAE,EAAE,KAAK,WAAY,CAC3D,OAAQ,KAAK,iBACrB,CAAO,CAAC,CACR,CAAK,EAAGjmB,EAAEm2B,GAAqB,CACzB,MAASlQ,EAAe,CAAE,EAAEA,EAAe,CAAE,EAAE,KAAK,OAAQ,CAC1D,MAAO,KAAK,SACZ,aAAcqQ,EAAc,CAAC,EAC7B,aAAc,KAAK,eAC3B,CAAO,CAAC,EACF,GAAMrQ,EAAe,CAAE,EAAEA,EAAe,CAAE,EAAE,KAAK,WAAY,CAC3D,OAAQ,KAAK,eACrB,CAAO,CAAC,CACH,CAAA,CAAC,CAAC,CACP,CACA,EAEIsQ,GAAgB,CAClB,KAAM,gBACN,OAAQ,CACN,YAAa,CACX,QAAS,IACf,CACG,EACD,MAAO,CAAC,SAAU,wBAAwB,EAC1C,MAAOtQ,EAAe,GAAImK,GAAc,MAAO,CAAE,EAAE+F,GAAoB,MAAO,CAC5E,cAAe,CACb,KAAM,QACN,QAAS,MACf,CACA,CAAG,EACD,KAAM,UAAgB,CACpB,MAAO,CACL,mBAAoB,GACpB,aAAc,KAAK,KACpB,CACF,EACD,SAAU,CACR,YAAa,UAAuB,CAClC,OAAO,OAAO,KAAK,eAAkB,UAAY,KAAK,cAAgB,KAAK,kBACjF,CACG,EACD,MAAO,CACL,MAAO,SAAezzB,EAAK,CACzB,KAAK,aAAeA,CAC1B,CACG,EACD,QAAS,CACP,eAAgB,UAA0B,CACxC,KAAK,mBAAqB,GAC1B,KAAK,MAAM,yBAA0B,EAAK,CAC3C,EACD,cAAe,UAAyB,CACtC,KAAK,mBAAqB,GAC1B,KAAK,MAAM,yBAA0B,EAAI,CAC1C,EACD,SAAU,SAAkBJ,EAAMnG,EAAM,CACtC,KAAK,MAAM,SAAUmG,EAAMnG,CAAI,CAChC,EACD,aAAc,SAAsBmG,EAAMnG,EAAM,CAC1CA,IAAS,QACX,KAAK,cAAe,EAGtB,IAAIq6B,EAAW/N,GAAWnmB,EAAMilB,GAAa,KAAK,MAAO,KAAK,YAAY,CAAC,EAE3E,GAAI,KAAK,aAAa,IAAI,KAAKiP,CAAQ,CAAC,IAEtCA,EAAW/N,GAAWnmB,EAAM,KAAK,YAAY,EAEzC,KAAK,aAAa,IAAI,KAAKk0B,CAAQ,CAAC,GAAG,CAEzC,KAAK,aAAeA,EACpB,MACV,CAGM,KAAK,SAASA,EAAUr6B,CAAI,CAClC,CACG,EACD,OAAQ,UAAkB,CACxB,IAAI6D,EAAI,UAAU,CAAC,EACfy2B,EAAgB,CAClB,MAAOxQ,EAAe,GAAI4C,GAAK,KAAK,OAAQ,OAAO,KAAKuH,GAAc,KAAK,CAAC,EAAG,CAC7E,KAAM,OACN,MAAO,KAAK,YACpB,CAAO,EACD,GAAI,CACF,OAAQ,KAAK,YACrB,CACK,EACGsG,EAAY,CACd,MAAOzQ,EAAe,GAAI4C,GAAK,KAAK,OAAQ,OAAO,KAAKsN,GAAoB,KAAK,CAAC,EAAG,CACnF,eAAgB,GAChB,MAAO,KAAK,YACpB,CAAO,EACD,GAAI,CACF,OAAQ,KAAK,SACb,WAAY,KAAK,cACzB,CACK,EACG5D,EAAc,KAAK,YACvB,OAAOvyB,EAAE,MAAO,CAACA,EAAEowB,GAAejJ,GAAO,CAAC,CAAE,EAAEsP,CAAa,CAAC,CAAC,EAAG,KAAK,aAAez2B,EAAEm2B,GAAqBhP,GAAO,CAAC,CACjH,MAAS,GAAG,OAAOoL,EAAa,gBAAgB,CACtD,EAAOmE,CAAS,CAAC,CAAC,CAAC,CAAC,CACpB,CACA,EAEIC,GAAgB,CAClB,KAAM,gBACN,OAAQ,CACN,YAAa,CACX,QAAS,IACf,CACG,EACD,MAAO,CAAC,SAAU,wBAAwB,EAC1C,MAAO1Q,EAAe,GAAIkL,GAAc,MAAO,CAAE,EAAEiF,GAAU,MAAO,CAClE,cAAe,CACb,KAAM,QACN,QAAS,MACf,CACA,CAAG,EACD,KAAM,UAAgB,CACpB,MAAO,CACL,mBAAoB,GACpB,aAAc,KAAK,KACpB,CACF,EACD,SAAU,CACR,YAAa,UAAuB,CAClC,OAAO,OAAO,KAAK,eAAkB,UAAY,KAAK,cAAgB,KAAK,kBACjF,CACG,EACD,MAAO,CACL,MAAO,SAAe1zB,EAAK,CACzB,KAAK,aAAeA,CAC1B,CACG,EACD,QAAS,CACP,eAAgB,UAA0B,CACxC,KAAK,mBAAqB,GAC1B,KAAK,MAAM,yBAA0B,EAAK,CAC3C,EACD,cAAe,UAAyB,CACtC,KAAK,mBAAqB,GAC1B,KAAK,MAAM,yBAA0B,EAAI,CAC1C,EACD,SAAU,SAAkB4kB,EAAOnrB,EAAM,CACvC,KAAK,MAAM,SAAUmrB,EAAOnrB,CAAI,CACjC,EACD,aAAc,SAAsBmrB,EAAOnrB,EAAM,CAC/C,IAAI2tB,EAAQ,KAER3tB,IAAS,QACX,KAAK,cAAe,EAGtB,IAAIm6B,EAAgB,MAAM,QAAQ,KAAK,YAAY,EAAI,KAAK,aAAe,CAAC,KAAK,aAAc,KAAK,YAAY,EAC5GM,EAAYtP,EAAM,IAAI,SAAUhlB,EAAMlH,EAAG,CAC3C,IAAI8D,EAAOkoB,GAAiB0C,EAAM,KAAK,EAAIA,EAAM,MAAM1uB,CAAC,EAAIk7B,EAAcl7B,CAAC,EAC3E,OAAOqtB,GAAWnmB,EAAMpD,CAAI,CACpC,CAAO,EAMD,GAJI03B,EAAU,CAAC,EAAE,QAAO,EAAKA,EAAU,CAAC,EAAE,YACxCA,EAAY,CAACA,EAAU,CAAC,EAAGA,EAAU,CAAC,CAAC,GAGrCA,EAAU,KAAK,KAAK,YAAY,IAClCA,EAAYtP,EAAM,IAAI,SAAUhlB,EAAMlH,EAAG,CACvC,OAAOqtB,GAAWnmB,EAAMg0B,EAAcl7B,CAAC,CAAC,CAClD,CAAS,EAEGw7B,EAAU,KAAK,KAAK,YAAY,GAAG,CACrC,KAAK,aAAeA,EACpB,MACV,CAGM,KAAK,SAASA,EAAWz6B,CAAI,CACnC,CACG,EACD,OAAQ,UAAkB,CACxB,IAAI6D,EAAI,UAAU,CAAC,EACfy2B,EAAgB,CAClB,MAAOxQ,EAAe,GAAI4C,GAAK,KAAK,OAAQ,OAAO,KAAKsI,GAAc,KAAK,CAAC,EAAG,CAC7E,KAAM,OACN,MAAO,KAAK,YACpB,CAAO,EACD,GAAI,CACF,OAAQ,KAAK,YACrB,CACK,EACGuF,EAAY,CACd,MAAOzQ,EAAe,GAAI4C,GAAK,KAAK,OAAQ,OAAO,KAAKuN,GAAU,KAAK,CAAC,EAAG,CACzE,MAAO,KAAK,aACZ,eAAgB,EACxB,CAAO,EACD,GAAI,CACF,OAAQ,KAAK,SACb,WAAY,KAAK,cACzB,CACK,EACG7D,EAAc,KAAK,YACvB,OAAOvyB,EAAE,MAAO,CAACA,EAAEmxB,GAAehK,GAAO,CAAC,CAAE,EAAEsP,CAAa,CAAC,CAAC,EAAG,KAAK,aAAez2B,EAAEo2B,GAAWjP,GAAO,CAAC,CACvG,MAAS,GAAG,OAAOoL,EAAa,gBAAgB,CACtD,EAAOmE,CAAS,CAAC,CAAC,CAAC,CAAC,CACpB,CACA,EAEIG,GAAe,CACjB,QAASzG,GACT,KAAM+F,GACN,SAAUI,EACZ,EACIO,GAAoB,CACtB,QAAS3F,GACT,KAAMiF,GACN,SAAUO,EACZ,EACII,GAAa,CACf,KAAM,aACN,QAAS,UAAmB,CAC1B,IAAIjN,EAAQ,KAEZ,MAAO,CAEL,UAAW,UAAqB,CAC9B,OAAOA,EAAM,MACd,EACD,QAAS,KAAK,QACd,YAAa,KAAK,YAClB,mBAAoB,KAAK,MAAM,KAAK,IAAI,CACzC,CACF,EACD,MAAO7D,EAAe,GAAIsQ,GAAc,MAAO,CAC7C,MAAO,CAAE,EACT,UAAW,CACT,KAAM,OACN,QAAS,MAEV,EACD,KAAM,CACJ,KAAM,OAEN,QAAS,MACV,EACD,OAAQ,CACN,KAAM,MACP,EACD,UAAW,CACT,KAAM,MACP,EACD,MAAO,CACL,KAAM,QACN,QAAS,EACV,EACD,SAAU,CACR,KAAM,QACN,QAAS,EACV,EACD,eAAgB,CACd,KAAM,MACP,EACD,KAAM,CACJ,KAAM,CAAC,OAAQ,MAAM,CACtB,EACD,YAAa,CACX,KAAM,OACN,QAAS,EACV,EACD,SAAU,CACR,KAAM,QACN,QAAS,EACV,EACD,SAAU,CACR,KAAM,QACN,QAAS,EACV,EACD,UAAW,CACT,KAAM,QACN,QAAS,EACV,EACD,YAAa,CACX,KAAM,OACN,QAAS,IACV,EACD,WAAY,CAAE,EACd,UAAW,CACT,KAAM,OACN,QAAS,UAAoB,CAC3B,MAAO,CAAE,CACjB,CACK,EACD,aAAc,CACZ,KAAM,QACN,QAAS,EACV,EACD,KAAM,CACJ,KAAM,QACN,QAAS,MACV,EACD,WAAY,CAAE,EACd,WAAY,CACV,KAAM,OACN,QAAS,UAAoB,CAC3B,MAAO,CAAE,CACjB,CACK,EACD,OAAQ,CACN,KAAM,QACN,QAAS,EACV,EACD,QAAS,CACP,KAAM,QACN,QAAS,EACV,EACD,YAAa,CACX,KAAM,OACN,QAAS,IACV,EACD,gBAAiB,CACf,KAAM,QACP,EACD,UAAW,CACT,KAAM,MACN,UAAW,SAAmB92B,EAAO,CACnC,OAAO,MAAM,QAAQA,CAAK,GAAKA,EAAM,MAAM,SAAU+K,EAAG,CACtD,OAAOoe,EAASpe,CAAC,GAAK,OAAOA,EAAE,MAAS,UAAY,OAAOA,EAAE,SAAY,UACnF,CAAS,CACF,EACD,QAAS,UAAoB,CAC3B,MAAO,CAAE,CACjB,CACA,CACA,CAAG,EACD,KAAM,UAAgB,CACpB,MAAO,CAEL,aAAc,KACd,UAAW,KACX,YAAa,GACb,aAAc,EACf,CACF,EACD,SAAU,CACR,aAAc,UAAwB,CACpC,MAAO,CAAC,KAAK,WAAa,OAAO,KAAK,MAAS,UAAY,KAAK,KAAO,KAAK,YAC7E,EACD,oBAAqB,UAA+B,CAClD,OAAO,KAAK,iBAAmB,KAAK,SAAW,IAAM,MACtD,EACD,YAAa,UAAuB,CAClC,IAAI8lB,EAAM,CACR,KAAM,aACN,SAAU,sBACV,KAAM,OACN,MAAO,UACP,KAAM,WACN,KAAM,GACP,EACD,OAAO,KAAK,QAAUA,EAAI,KAAK,IAAI,GAAKA,EAAI,IAC7C,EACD,WAAY,UAAsB,CAChC,IAAI7wB,EAAQ,KAAK,MAEjB,OAAI,KAAK,mBACPA,EAAQ,MAAM,QAAQA,CAAK,EAAIA,EAAQ,CAAE,EAClCA,EAAM,IAAI,KAAK,UAAU,GAG9B,KAAK,OACPA,EAAQ,MAAM,QAAQA,CAAK,EAAIA,EAAM,MAAM,EAAG,CAAC,EAAI,CAAC,KAAM,IAAI,EACvDA,EAAM,IAAI,KAAK,UAAU,GAG3B,KAAK,WAAWA,CAAK,CAC7B,EACD,KAAM,UAAgB,CACpB,IAAI+rB,EAAS,KAEb,OAAI,KAAK,YAAc,KACd,KAAK,UAGV,OAAO,KAAK,iBAAoB,WAC3B,KAAK,gBAAgB,KAAK,UAAU,EAGxC,KAAK,aAAa,KAAK,UAAU,EAIlC,MAAM,QAAQ,KAAK,UAAU,EACxB,KAAK,WAAW,IAAI,SAAUhhB,EAAG,CACtC,OAAOghB,EAAO,WAAWhhB,CAAC,CACpC,CAAS,EAAE,KAAK,KAAK,mBAAmB,EAG3B,KAAK,WAAW,KAAK,UAAU,EAT7B,EAUV,EACD,cAAe,UAAyB,CACtC,MAAO,CAAC,KAAK,UAAY,KAAK,WAAa,KAAK,MAAQ,KAAK,YAC9D,EACD,OAAQ,UAAkB,CACxB,OAAIoe,EAAS,KAAK,IAAI,EACbE,GAAUa,KAAa,KAAK,IAAI,EAGlCA,GAAU,KAAK,IAAI,CAC3B,EACD,kBAAmB,UAA6B,CAC9C,IAAIqN,EAAQ,CAAC,OAAQ,QAAS,MAAM,EACpC,OAAO,KAAK,UAAY,CAAC,KAAK,OAASA,EAAM,QAAQ,KAAK,IAAI,IAAM,EAC1E,CACG,EACD,MAAO,CACL,WAAY,CACV,UAAW,GACX,QAAS,SAAiBt0B,EAAK,CAC7B,KAAK,aAAeA,CAC5B,CACK,EACD,aAAc,CACZ,QAAS,SAAiBA,EAAK,CACzBA,IACF,KAAK,aAAe,KAAK,WAEnC,CACA,CACG,EACD,QAAS,UAAmB,CACtBqjB,GAAQ,KAAK,MAAM,IAAM,UAC3B,QAAQ,KAAK,wHAAwH,CAExI,EACD,QAAS,CACP,iBAAkB,UAA4B,CAC5C,KAAK,aAAe,EACrB,EACD,iBAAkB,UAA4B,CAC5C,KAAK,aAAe,EACrB,EACD,mBAAoB,SAA4B2F,EAAK,CACnD,IAAI5hB,EAAS4hB,EAAI,OAEZ,KAAK,IAAI,SAAS5hB,CAAM,GAC3B,KAAK,WAAY,CAEpB,EACD,aAAc,SAAsBtK,EAAK,CACvC,OAAOopB,EAAS,KAAK,SAAS,GAAK,KAAK,UAAUppB,CAAG,GAAKopB,EAAS,KAAK,MAAM,GAAK,KAAK,OAAOppB,CAAG,CACnG,EACD,QAAS,SAAmB8C,EAAM4H,EAAS,CACzC,OAAI,OAAO,KAAK,aAAa,SAAS,GAAM,WACnC,KAAK,aAAa,SAAS,EAAE5H,EAAM4H,CAAO,EAG5CkV,GAAQ9c,EAAM4H,CAAO,CAC7B,EACD,UAAW,SAAmBzK,EAAOovB,EAAK,CAGxC,GAFAA,EAAMA,GAAO,KAAK,YAEd,OAAO,KAAK,aAAa,OAAO,GAAM,WACxC,OAAO,KAAK,aAAa,OAAO,EAAEpvB,EAAOovB,CAAG,EAG9C,IAAItK,EAAa,IAAI,KACrB,OAAOrhB,GAAMzD,EAAOovB,EAAK,CACvB,OAAQ,KAAK,OAAO,aACpB,WAAYtK,CACpB,CAAO,CACF,EACD,WAAY,SAAoBjiB,EAAMusB,EAAK,CAGzC,OAFAA,EAAMA,GAAO,KAAK,YAEd,OAAO,KAAK,aAAa,WAAW,GAAM,WACrC,KAAK,aAAa,WAAW,EAAEvsB,EAAMusB,CAAG,EAG1CtO,GAAOje,EAAMusB,EAAK,CACvB,OAAQ,KAAK,OAAO,YAC5B,CAAO,CACF,EAED,WAAY,SAAoBpvB,EAAO,CACrC,OAAQ,KAAK,UAAS,CACpB,IAAK,OACH,OAAOA,aAAiB,KAAO,IAAI,KAAKA,EAAM,SAAS,EAAI,IAAI,KAAK,GAAG,EAEzE,IAAK,YACH,OAAO,OAAOA,GAAU,SAAW,IAAI,KAAKA,CAAK,EAAI,IAAI,KAAK,GAAG,EAEnE,IAAK,SACH,OAAO,OAAOA,GAAU,SAAW,KAAK,UAAUA,CAAK,EAAI,IAAI,KAAK,GAAG,EAEzE,QACE,OAAO,OAAOA,GAAU,SAAW,KAAK,UAAUA,EAAO,KAAK,SAAS,EAAI,IAAI,KAAK,GAAG,CACjG,CACK,EAED,WAAY,SAAoB6C,EAAM,CACpC,GAAI,CAACqc,EAAYrc,CAAI,EAAG,OAAO,KAE/B,OAAQ,KAAK,UAAS,CACpB,IAAK,OACH,OAAOA,EAET,IAAK,YACH,OAAOA,EAAK,QAAS,EAEvB,IAAK,SACH,OAAO,KAAK,WAAWA,CAAI,EAE7B,QACE,OAAO,KAAK,WAAWA,EAAM,KAAK,SAAS,CACrD,CACK,EACD,UAAW,SAAmBA,EAAMnG,EAAM,CACxC,IAAI86B,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAEhF,KAAK,UAAY,KACjB,IAAIx3B,EAAQ,MAAM,QAAQ6C,CAAI,EAAIA,EAAK,IAAI,KAAK,UAAU,EAAI,KAAK,WAAWA,CAAI,EAClF,OAAK,KAAA,MAAM,QAAS7C,CAAK,EACzB,KAAK,MAAM,SAAUA,EAAOtD,CAAI,EAE5B86B,GACF,KAAK,WAAY,EAGZx3B,CACR,EACD,aAAc,SAAsBA,EAAO,CACzC,OAAI,KAAK,kBACA4nB,GAAa5nB,CAAK,EAGvB,KAAK,MACA2nB,GAAiB3nB,CAAK,EAGxBkf,EAAYlf,CAAK,CACzB,EACD,2BAA4B,SAAoCA,EAAO,CACrE,GAAI,CAAC,KAAK,aAAaA,CAAK,EAC1B,MAAO,GAGT,IAAIy3B,EAAe,OAAO,KAAK,cAAiB,WAAa,KAAK,aAAe,UAAY,CAC3F,MAAO,EACR,EACGC,EAAe,OAAO,KAAK,cAAiB,WAAa,KAAK,aAAe,UAAY,CAC3F,MAAO,EACR,EAED,OAAK,MAAM,QAAQ13B,CAAK,IACtBA,EAAQ,CAACA,CAAK,GAGTA,EAAM,MAAM,SAAU+K,EAAG,CAC9B,MAAO,CAAC0sB,EAAa1sB,CAAC,GAAK,CAAC2sB,EAAa3sB,CAAC,CAClD,CAAO,CACF,EACD,oBAAqB,SAA6BlI,EAAMglB,EAAO,CAC7D,GAAI,KAAK,mBAAqBA,EAAO,CACnC,IAAI8P,EAAY9P,EAAM,OAAO,SAAU9c,EAAG,CACxC,OAAOA,EAAE,YAAclI,EAAK,QAAS,CAC/C,CAAS,EAED,OAAI80B,EAAU,SAAW9P,EAAM,QAC7B8P,EAAU,KAAK90B,CAAI,EAGd80B,CACf,CAEM,OAAO90B,CACR,EACD,iBAAkB,SAA0BI,EAAKvG,EAAMmrB,EAAO,CAC5D5kB,EAAM,KAAK,oBAAoBA,EAAK4kB,CAAK,EAErC,KAAK,QACP,KAAK,aAAe5kB,EAEpB,KAAK,UAAUA,EAAKvG,EACpB,CAAC,KAAK,oBAAsBA,IAAS,KAAK,MAAQA,IAAS,OAAO,CAErE,EACD,MAAO,UAAiB,CACtB,KAAK,UAAU,KAAK,MAAQ,CAAC,KAAM,IAAI,EAAI,IAAI,EAC/C,KAAK,MAAM,OAAO,CACnB,EACD,YAAa,SAAqBuvB,EAAK,CACrCA,EAAI,gBAAiB,EACrB,KAAK,MAAO,CACb,EACD,kBAAmB,UAA6B,CAC9C,IAAIjsB,EAAQ,KAAK,UAAU,KAAK,YAAY,EAC5C,KAAK,MAAM,UAAWA,CAAK,CAC5B,EACD,qBAAsB,SAA8BisB,EAAK,CACvD,IAAIjT,EAAQiT,EAAI,cAAc,aAAa,YAAY,EACnDhS,EAAO,KAAK,UAAU,SAASjB,EAAO,EAAE,CAAC,EAE7C,GAAImQ,EAASlP,CAAI,GAAK,OAAOA,EAAK,SAAY,WAAY,CACxD,IAAIpX,EAAOoX,EAAK,QAAQ,IAAI,EAExBpX,GACF,KAAK,UAAUA,CAAI,CAE7B,CACK,EACD,UAAW,SAAmBopB,EAAK,CAC7B,KAAK,cAAgB,KAAK,WAC9B,KAAK,YAAc,GACnB,KAAK,MAAM,OAAQA,CAAG,EACtB,KAAK,MAAM,cAAe,EAAI,EAC/B,EACD,WAAY,UAAsB,CAC3B,KAAK,eACV,KAAK,YAAc,GACnB,KAAK,MAAM,OAAO,EAClB,KAAK,MAAM,cAAe,EAAK,EAChC,EACD,KAAM,UAAgB,CAEhB,KAAK,MAAM,OACb,KAAK,MAAM,MAAM,KAAM,CAE1B,EACD,MAAO,UAAiB,CAClB,KAAK,MAAM,OACb,KAAK,MAAM,MAAM,MAAO,CAE3B,EACD,kBAAmB,UAA6B,CAC9C,IAAIuI,EAAS,KAEb,GAAI,EAAC,CAAA,KAAK,UAAY,KAAK,YAAc,MACzC,CAAI1E,IAAAA,EAAO,KAAK,UAAU,KAAM,EAGhC,GAFA,KAAK,UAAY,KAEbA,IAAS,GAAI,CACf,KAAK,MAAO,EACZ,MACR,CAEM,IAAIjtB,EAEJ,GAAI,KAAK,kBACPA,EAAOitB,EAAK,MAAM,KAAK,mBAAmB,EAAE,IAAI,SAAU/kB,EAAG,CAC3D,OAAOypB,EAAO,UAAUzpB,EAAE,KAAI,CAAE,CAC1C,CAAS,UACQ,KAAK,MAAO,CACrB,IAAInB,EAAMkmB,EAAK,MAAM,KAAK,mBAAmB,EAEzClmB,EAAI,SAAW,IAGjBA,EAAMkmB,EAAK,MAAM,KAAK,oBAAoB,KAAI,CAAE,GAGlDjtB,EAAO+G,EAAI,IAAI,SAAUmB,EAAG,CAC1B,OAAOypB,EAAO,UAAUzpB,EAAE,KAAI,CAAE,CAC1C,CAAS,CACT,MACQlI,EAAO,KAAK,UAAUitB,CAAI,EAGxB,KAAK,2BAA2BjtB,CAAI,GACtC,KAAK,UAAUA,CAAI,EACnB,KAAK,KAAM,GAEX,KAAK,MAAM,cAAeitB,CAAI,CAAA,CAEjC,EACD,iBAAkB,SAA0B7D,EAAK,CAE/C,KAAK,UAAY,OAAOA,GAAQ,SAAWA,EAAMA,EAAI,OAAO,KAC7D,EACD,mBAAoB,SAA4BA,EAAK,CACnD,IAAI2L,EAAU3L,EAAI,QAEd2L,IAAY,EACd,KAAK,WAAY,EACRA,IAAY,IACrB,KAAK,kBAAmB,CAE3B,EACD,gBAAiB,SAAyB3L,EAAK,CAE7C,KAAK,MAAM,OAAQA,CAAG,CACvB,EACD,iBAAkB,SAA0BA,EAAK,CAC/C,KAAK,UAAUA,CAAG,EAClB,KAAK,MAAM,QAASA,CAAG,CACxB,EACD,QAAS,SAAiB5nB,EAAM,CAC9B,MAAO,CAAC,EAAE,KAAK,OAAOA,CAAI,GAAK,KAAK,aAAaA,CAAI,EACtD,EACD,WAAY,SAAoBA,EAAMwzB,EAAU3vB,EAAO,CACrD,IAAI4vB,EAAS,KAAK,aAAazzB,CAAI,EAEnC,OAAIyzB,EACKA,EAAO5vB,CAAK,GAAK2vB,EAGnB,KAAK,OAAOxzB,CAAI,GAAKwzB,CAC7B,EACD,YAAa,UAAuB,CAClC,IAAIt3B,EAAI,KAAK,eACTuyB,EAAc,KAAK,YAEnB5qB,EAAQse,EAAe,CACzB,KAAM,OACN,KAAM,OACN,aAAc,MACd,MAAO,KAAK,KACZ,MAAO,KAAK,YAAc,GAAG,OAAO,KAAK,YAAa,QAAQ,EAC9D,SAAU,CAAC,KAAK,SAChB,SAAU,KAAK,SACf,YAAa,KAAK,WAC1B,EAAS,KAAK,SAAS,EAEbxmB,EAAQkI,EAAM,MACd6vB,EAAY7vB,EAAM,MAClB8vB,EAAQpR,GAAyB1e,EAAO,CAAC,QAAS,OAAO,CAAC,EAE1D+vB,EAAS,CACX,QAAS,KAAK,mBACd,MAAO,KAAK,iBACZ,KAAM,KAAK,gBACX,MAAO,KAAK,iBACZ,OAAQ,KAAK,iBACd,EACGv0B,EAAQ,KAAK,WAAW,QAASnD,EAAE,QAAS,CAC9C,SAAY,CACV,MAASP,CACV,EACD,MAAS+3B,EACT,MAASvR,EAAe,CAAE,EAAEwR,CAAK,EACjC,GAAMxR,EAAe,CAAE,EAAEyR,CAAM,EAC/B,IAAO,OACf,CAAO,EAAG,CACF,MAAO/vB,EACP,OAAQ+vB,CAChB,CAAO,EACGC,EAAe,KAAK,OAAS,OAAS33B,EAAEotB,EAAmB,EAAIptB,EAAEgtB,EAAmB,EAExF,OAAOhtB,EAAE,MAAO,CACd,MAAS,GAAG,OAAOuyB,EAAa,gBAAgB,EAChD,GAAM,CACJ,WAAc,KAAK,iBACnB,WAAc,KAAK,iBACnB,MAAS,KAAK,SACf,EACD,IAAO,cACR,EAAE,CAACpvB,EAAO,KAAK,cAAgBnD,EAAE,IAAK,CACrC,MAAS,GAAG,OAAOuyB,EAAa,aAAa,EAC7C,GAAM,CACJ,MAAS,KAAK,WACxB,CACA,EAAS,CAAC,KAAK,WAAW,aAAcvyB,EAAEwtB,EAAmB,CAAC,CAAC,CAAC,EAAIxtB,EAAE,IAAK,CACnE,MAAS,GAAG,OAAOuyB,EAAa,gBAAgB,CACxD,EAAS,CAAC,KAAK,WAAW,gBAAiBoF,CAAY,CAAC,CAAC,CAAC,CAAC,CACtD,EACD,cAAe,UAAyB,CACtC,IAAI33B,EAAI,KAAK,eACTswB,EAAM,KAAK,MAAQwG,GAAoBD,GACvC1wB,EAAYmqB,EAAI,KAAK,IAAI,GAAKA,EAAI,QAElC3oB,EAAQse,EAAe,CAAE,EAAE4C,GAAK,KAAK,OAAQ,OAAO,KAAK1iB,EAAU,KAAK,CAAC,EAAG,CAC9E,MAAO,KAAK,YACpB,CAAO,EAEGmsB,EAAKrM,EAAe,CAAA,EAAI4C,GAAK,KAAK,WAAY1iB,EAAU,OAAS,CAAA,CAAE,EAAG,CACxE,OAAQ,KAAK,gBACrB,CAAO,EAEGyxB,EAAU53B,EAAEmG,EAAWghB,GAAO,CAAC,CAAA,EAAI,CACrC,MAAOxf,EACP,GAAI2qB,EACJ,IAAK,QACN,CAAA,CAAC,CAAC,EACH,OAAOtyB,EAAE,MAAO,CACd,MAAS,GAAG,OAAO,KAAK,YAAa,kBAAkB,CACxD,EAAE,CAAC,KAAK,WAAW,UAAW43B,EAAS,CACtC,MAAO,KAAK,aACZ,KAAM,KAAK,gBACZ,CAAA,CAAC,CAAC,CACJ,EACD,cAAe,UAAyB,CACtC,IAAI1D,EAAS,KAETl0B,EAAI,KAAK,eACTuyB,EAAc,KAAK,YACvB,OAAOvyB,EAAE,MAAO,CACd,MAAS,GAAG,OAAOuyB,EAAa,qBAAqB,CACtD,EAAE,CAAC,KAAK,WAAW,UAAW,KAAM,CACnC,MAAO,KAAK,aACZ,KAAM,KAAK,gBACnB,CAAO,EAAG,KAAK,UAAU,IAAI,SAAU/nB,EAAG,EAAG,CACrC,OAAOxK,EAAE,SAAU,CACjB,IAAO,EACP,MAAS,CACP,aAAc,EACd,KAAQ,QACT,EACD,MAAS,GAAG,OAAOuyB,EAAa,OAAO,EAAE,OAAOA,EAAa,YAAY,EAAE,OAAOA,EAAa,eAAe,EAC9G,GAAM,CACJ,MAAS2B,EAAO,oBAC5B,CACA,EAAW,CAAC1pB,EAAE,IAAI,CAAC,CACZ,CAAA,CAAC,CAAC,CACJ,EACD,aAAc,UAAwB,CACpC,IAAIxK,EAAI,KAAK,eACb,OAAOA,EAAE,MAAO,CACd,MAAS,GAAG,OAAO,KAAK,YAAa,oBAAoB,CAC1D,EAAE,CAAC,KAAK,WAAW,SAAU,KAAM,CAClC,MAAO,KAAK,aACZ,KAAM,KAAK,gBACZ,CAAA,CAAC,CAAC,CACJ,EACD,aAAc,UAAwB,CACpC,IAAIA,EAAI,KAAK,eACTuyB,EAAc,KAAK,YACvB,OAAOvyB,EAAE,MAAO,CACd,MAAS,GAAG,OAAOuyB,EAAa,oBAAoB,CACrD,EAAE,CAAC,KAAK,WAAW,SAAU,KAAM,CAClC,MAAO,KAAK,aACZ,KAAM,KAAK,gBACZ,CAAA,EAAG,KAAK,QAAUvyB,EAAE,SAAU,CAC7B,MAAS,CACP,KAAQ,QACT,EACD,MAAS,GAAG,OAAOuyB,EAAa,OAAO,EAAE,OAAOA,EAAa,yBAAyB,EACtF,GAAM,CACJ,MAAS,KAAK,iBACxB,CACO,EAAE,CAAC,KAAK,WAAW,CAAC,EAAI,IAAI,CAAC,CACpC,CACG,EACD,OAAQ,UAAkB,CACxB,IAAIsF,EAEA73B,EAAI,UAAU,CAAC,EACfuyB,EAAc,KAAK,YACnBuF,EAAS,KAAK,OACdC,EAAW,KAAK,SAChBC,EAAU,KAAK,QAAQ,SAAS,GAAK,KAAK,UAAU,OAAS,KAAK,cAAe,EAAG,KACpFJ,EAAU53B,EAAE,MAAO,CACrB,MAAS,GAAG,OAAOuyB,EAAa,qBAAqB,CAC3D,EAAO,CAAC,KAAK,QAAQ,QAAQ,EAAI,KAAK,aAAY,EAAK,KAAM,KAAK,cAAe,EAAE,KAAK,QAAQ,QAAQ,GAAK,KAAK,QAAU,KAAK,eAAiB,IAAI,CAAC,EACnJ,OAAOvyB,EAAE,MAAO,CACd,OAAU63B,EAAS,CAAE,EAAEtW,GAAgBsW,EAAQ,GAAG,OAAOtF,EAAa,aAAa,EAAG,EAAI,EAAGhR,GAAgBsW,EAAQ,GAAG,OAAOtF,EAAa,mBAAmB,EAAG,KAAK,KAAK,EAAGhR,GAAgBsW,EAAQ,GAAG,OAAOtF,EAAa,oBAAoB,EAAGuF,CAAM,EAAGvW,GAAgBsW,EAAQ,WAAYE,CAAQ,EAAGF,EACnT,EAAO,CAAEC,EAA8B,KAArB,KAAK,YAAW,EAAYA,EAWjB93B,EAAE,MAAO,CAChC,MAAS,GAAG,OAAOuyB,EAAa,kBAAkB,CACnD,EAAE,CAACyF,EAASJ,CAAO,CAAC,EAb8B53B,EAAE4sB,GAAmB,CACtE,IAAO,QACP,MAAS,KAAK,WACd,MAAS,KAAK,WACd,MAAS,CACP,QAAW,KAAK,aAChB,aAAgB,KAAK,YACtB,EACD,GAAM,CACJ,aAAgB,KAAK,kBAC7B,CACK,EAAE,CAACoL,EAASJ,CAAO,CAAC,CAEC,CAAC,CAC3B,CACA,EAEAb,GAAW,OAAStX,GAEpBsX,GAAW,QAAU,SAAiBkB,EAAK,CACzCA,EAAI,UAAUlB,GAAW,KAAMA,EAAU,CAC3C,EAEI,OAAO,OAAW,KAAe,OAAO,KAC1CA,GAAW,QAAQ,OAAO,GAAG,EAG/B/Q,GAAS+Q,GAAY,CACnB,cAAe3G,GACf,cAAee,GACf,UAAWgF,GACX,UAAWC,GACX,cAAeG,GACf,cAAeI,EACjB,CAAC,EC7+HDna,GAAS0b,EAAG,EACZ,MAAMC,GAAc,CAClB,KAAM,oBACN,MAAO,CAAC,OAAO,EACf,MAAO,CACL,MAAO,CACL,KAAM,MACP,EACD,UAAW,CACT,KAAM,OACN,QAAS,cACV,EACD,KAAM,CACJ,KAAM,OACN,QAAS,EACf,CACA,CACA,EACA,IAAIC,GAAgB,UAAkB,CACpC,IAAIja,EAAM,KAAMC,EAAKD,EAAI,MAAM,GAC/B,OAAOC,EAAG,OAAQD,EAAI,GAAG,CAAE,YAAa,2CAA4C,MAAO,CAAE,cAAeA,EAAI,MAAQ,KAAO,OAAQ,aAAcA,EAAI,MAAO,KAAQ,KAAK,EAAI,GAAI,CAAE,MAAS,SAAS6Q,EAAQ,CAC/M,OAAO7Q,EAAI,MAAM,QAAS6Q,CAAM,CACjC,CAAA,GAAM,OAAQ7Q,EAAI,OAAQ,EAAK,EAAG,CAACC,EAAG,MAAO,CAAE,YAAa,4BAA6B,MAAO,CAAE,KAAQD,EAAI,UAAW,MAASA,EAAI,KAAM,OAAUA,EAAI,KAAM,QAAW,WAAW,CAAI,EAAE,CAACC,EAAG,OAAQ,CAAE,MAAO,CAAE,EAAK,kHAAkH,GAAM,CAACD,EAAI,MAAQC,EAAG,QAAS,CAACD,EAAI,GAAGA,EAAI,GAAGA,EAAI,KAAK,CAAC,CAAC,CAAC,EAAIA,EAAI,GAAE,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACxZ,EACIka,GAAyB,CAAE,EAC3BC,GAAkC/Z,GACpC4Z,GACAC,GACAC,GACA,GACA,KACA,IACF,EACA,MAAME,GAAgBD,GAAgB,QAChCE,GAAc,CAClB,KAAM,UACN,MAAO,CAAC,OAAO,EACf,MAAO,CACL,MAAO,CACL,KAAM,MACP,EACD,UAAW,CACT,KAAM,OACN,QAAS,cACV,EACD,KAAM,CACJ,KAAM,OACN,QAAS,EACf,CACA,CACA,EACA,IAAIC,GAAgB,UAAmB,CACrC,IAAIta,EAAM,KAAMC,EAAKD,EAAI,MAAM,GAC/B,OAAOC,EAAG,OAAQD,EAAI,GAAG,CAAE,YAAa,gCAAiC,MAAO,CAAE,cAAeA,EAAI,MAAQ,KAAO,OAAQ,aAAcA,EAAI,MAAO,KAAQ,KAAK,EAAI,GAAI,CAAE,MAAS,SAAS6Q,EAAQ,CACpM,OAAO7Q,EAAI,MAAM,QAAS6Q,CAAM,CACjC,CAAA,GAAM,OAAQ7Q,EAAI,OAAQ,EAAK,EAAG,CAACC,EAAG,MAAO,CAAE,YAAa,4BAA6B,MAAO,CAAE,KAAQD,EAAI,UAAW,MAASA,EAAI,KAAM,OAAUA,EAAI,KAAM,QAAW,WAAW,CAAI,EAAE,CAACC,EAAG,OAAQ,CAAE,MAAO,CAAE,EAAK,s5BAAs5B,GAAM,CAACD,EAAI,MAAQC,EAAG,QAAS,CAACD,EAAI,GAAGA,EAAI,GAAGA,EAAI,KAAK,CAAC,CAAC,CAAC,EAAIA,EAAI,GAAE,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAC5rC,EACIua,GAAyB,CAAE,EAC3BC,GAAkCpa,GACpCia,GACAC,GACAC,GACA,GACA,KACA,IACF,EACA,MAAME,GAAMD,GAAgB,QACtBE,GAAY,CAChB,KAAM,aACN,SAAU,qBACV,KAAM,OACN,MAAO,UACP,KAAM,UACN,KAAM,GACR,EACMvb,GAAY,CAChB,KAAM,mBACN,WAAY,CACV,cAAAib,GACA,WAAAxB,GACA,UAAA+B,GACA,iBAAAta,GACA,IAAAoa,EACD,EACD,aAAc,GACd,MAAO,CACL,KAAM,aACN,MAAO,mBACR,EACD,MAAO,CACL,UAAW,CACT,KAAM,QACN,QAAS,EACV,EACD,WAAY,CACV,KAAM,OACN,QAAS,EACV,EAID,KAAM,CACJ,KAAM,OACN,QAAS,OACT,UAAYz8B,GAAS,CAAC,OAAQ,OAAQ,WAAY,OAAQ,QAAS,OAAQ,aAAc,aAAc,gBAAgB,EAAE,SAASA,CAAI,CACvI,EAKD,OAAQ,CACN,KAAM,CAAC,OAAQ,QAAQ,EACvB,QAAS,IACV,EAID,UAAW,CACT,KAAM,OACN,QAAS,IACV,EACD,KAAM,CACJ,KAAM,OACN,QAAS,IACV,EAMD,MAAO,CACL,QAAS,MACV,EAOD,WAAY,CACV,QAAS,IAAsB,IAAI,IACpC,EAID,WAAY,CACV,KAAM,OACN,QAAS,KACV,EACD,mBAAoB,CAClB,KAAM,QACN,QAAS,EACV,EACD,kBAAmB,CACjB,KAAM,QACN,QAAS,EACV,EACD,aAAc,CACZ,KAAM,QACN,QAAS,EACV,EACD,eAAgB,CACd,KAAM,QACN,QAAS,EACV,EACD,YAAa,CACX,KAAM,OACN,QAAS,IACV,EAID,MAAO,CACL,KAAM,QACN,QAAS,EACf,CACG,EACD,MAAO,CAKL,eACA,oBAEA,qBACA,oBACD,EACD,OAAQ,CAEN,MAAO,CACL,MAFYshB,GAAkB,QAAS,cAAc,EAGrD,uBAAwB,0BAA0BD,IAAa,EAChE,CACF,EACD,MAAO,CACL,MAAO,CACL,oBAAqB,GACrB,MAAO,KAAK,UACb,CACF,EACD,SAAU,CACR,UAAW,CACT,OAAO,KAAK,KAAK,MAAM,GAAG,EAAE,CAAC,CAC9B,EAOD,aAAc,CACZ,MAAO,CACL,aAAc,CACZ,OAAQub,GAAe,EACvB,YAAaC,GAAoB,EACjC,SAAUC,GAAa,EACvB,cAAeC,GAAkB,EACjC,YAAaC,GAAgB,EAE7B,eAAgBC,GAAW,CAC5B,EACD,YAAa,MACd,CACF,EAMD,oBAAqB,CACnB,OAAI,KAAK,WAAa,OACb56B,EAAE,aAAa,EAEpB,KAAK,WAAa,QACbA,EAAE,cAAc,EAErB,KAAK,WAAa,OACbA,EAAE,aAAa,EAEpB,KAAK,WAAa,OACbA,EAAE,aAAa,EAEpB,KAAK,WAAa,OACbA,EAAE,aAAa,EAEjBA,EAAE,wBAAwB,CAClC,EAID,eAAgB,CACd,OAAO,KAAK,OAAS,KAAK,KAAK,SAAS,QAAQ,CACjD,EACD,gBAAiB,CACf,OAAI,KAAK,QAAU,OAAO,KAAK,QAAW,SACjC,KAAK,OAEPq6B,GAAU,KAAK,QAAQ,GAAKA,GAAU,IAC9C,EAID,mBAAoB,CAOlB,MAAO,CACL,QAPev2B,GAAS,CACxB,MAAM+2B,EAAgB,IAAI,KAAK,KAAK,IAAI/2B,EAAK,YAAa,EAAEA,EAAK,SAAQ,EAAIA,EAAK,QAAS,CAAA,CAAC,EAC5F+2B,EAAc,WAAWA,EAAc,WAAY,EAAG,GAAKA,EAAc,aAAe,EAAE,EAC1F,MAAMC,EAAY,IAAI,KAAK,KAAK,IAAID,EAAc,eAAgB,EAAE,EAAG,CAAC,CAAC,EACzE,OAAO,KAAK,OAAOA,EAAgBC,GAAa,MAAQ,GAAK,CAAC,CAC/D,EAIC,GAAG,OAAO,KAAK,QAAW,WAAa,CAAE,UAAW,KAAK,MAAM,EAAK,CAAE,EAEtE,GAAG,KAAK,WAAa,CAAA,CACtB,CACP,CACG,EACD,QAAS,CACP,EAAA96B,EACA,iBAAiBlB,EAAM,CACrB,MAAMmC,EAAQ,KAAK,MAAM,WAAW,aACpC,GAAIA,EACF,GAAI,CACF,MAAM6C,EAAO,IAAI,KAAK,IAAI,KAAK7C,CAAK,EAAE,YAAYnC,CAAI,CAAC,EACvD,KAAK,MAAM,WAAW,WAAWgF,CAAI,CACtC,MAAe,CACd,QAAQ,MAAM,gBAAiB7C,EAAOnC,CAAI,CACpD,CAEK,EACD,kBAAkBD,EAAO,CACvB,MAAMoC,EAAQ,KAAK,MAAM,WAAW,aACpC,GAAIA,EACF,GAAI,CACF,MAAM6C,EAAO,IAAI,KAAK,IAAI,KAAK7C,CAAK,EAAE,SAASpC,CAAK,CAAC,EACrD,KAAK,MAAM,WAAW,WAAWiF,CAAI,CACtC,MAAe,CACd,QAAQ,MAAM,gBAAiB7C,EAAOpC,CAAK,CACrD,CAEK,EAID,uBAAwB,CACjB,KAAK,qBAGV,KAAK,oBAAsB,CAAC,KAAK,oBACvC,CACA,CACA,EACA,IAAI6gB,GAAc,UAAmB,CACnC,IAAIC,EAAM,KAAMC,EAAKD,EAAI,MAAM,GAC/B,OAAOC,EAAG,aAAcD,EAAI,GAAGA,EAAI,GAAG,CAAE,IAAK,aAAc,MAAO,CAAE,iBAAkBA,EAAI,aAAc,UAAaA,EAAI,UAAW,OAAUA,EAAI,eAAgB,UAAaA,EAAI,kBAAmB,KAAQA,EAAI,KAAOA,EAAI,KAAOA,EAAI,YAAa,cAAeA,EAAI,WAAY,YAAeA,EAAI,YAAcA,EAAI,YAAcA,EAAI,mBAAoB,cAAe,CAAE,mBAAoBA,EAAI,cAAgB,EAAE,MAASA,EAAI,cAAe,mBAAoBA,EAAI,eAAgB,KAAQA,EAAI,SAAU,MAASA,EAAI,KAAO,EAAE,GAAI,CAAE,cAAeA,EAAI,iBAAkB,eAAgBA,EAAI,kBAAmB,MAAS,SAAS6Q,EAAQ,CACpnB7Q,EAAI,MAAQ6Q,CAChB,GAAO,YAAa7Q,EAAI,GAAG,CAAC,CAAE,IAAK,gBAAiB,GAAI,UAAW,CAC/D,MAAO,CAACA,EAAI,mBAAqBC,EAAG,YAAa,CAAE,MAAO,CAAE,aAAc,SAAU,MAASD,EAAI,oBAAqB,qBAAsB,yBAAyB,EAAI,GAAI,CAAE,eAAgB,SAAS6Q,EAAQ,CAC9M7Q,EAAI,oBAAsB6Q,CAC3B,CAAA,EAAI,YAAa7Q,EAAI,GAAG,CAAC,CAAE,IAAK,UAAW,GAAI,SAAS,CAAE,MAAAsZ,GAAS,CAClE,MAAO,CAACrZ,EAAG,SAAUD,EAAI,GAAG,CAAE,YAAa,8BAA+B,MAAO,CAAE,2CAA4CA,EAAI,iBAAmB,EAAE,GAAI,CAAE,UAAa,SAAS6Q,EAAQ,CAC1L,OAAAA,EAAO,gBAAiB,EACxBA,EAAO,eAAgB,GACf,IAAM,CACtB,GAAW,MAAM,KAAM,SAAS,CAChC,CAAS,CAAA,EAAI,SAAUyI,EAAO,EAAK,EAAG,CAACrZ,EAAG,MAAO,CAAE,MAAO,CAAE,KAAQ,EAAI,CAAA,CAAE,CAAC,EAAG,CAAC,CAAC,CAC3E,CAAA,CAAE,EAAG,KAAM,GAAO,SAAS,CAAG,EAAE,CAACA,EAAG,MAAO,CAAE,MAAO,CAAE,KAAQ,SAAU,kBAAmBD,EAAI,sBAAsB,GAAM,CAACC,EAAG,MAAO,CAAE,YAAa,iCAAiC,EAAI,CAACA,EAAG,SAAU,CAAE,MAAO,CAAE,GAAMD,EAAI,uBAA0B,EAAE,CAACA,EAAI,GAAG,IAAMA,EAAI,GAAGA,EAAI,EAAE,4BAA4B,CAAC,EAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAGC,EAAG,mBAAoB,CAAE,YAAa,4CAA6C,GAAI,CAAE,MAAS,SAAS4Q,EAAQ,CACjb,OAAO7Q,EAAI,MAAM,qBAAsB,UAAU,CAAC,CAAC,CACzD,CAAO,EAAE,MAAO,CAAE,MAAOA,EAAI,MAAO,SAAU,SAASob,EAAK,CACtDpb,EAAI,MAAQob,CAClB,EAAO,WAAY,OAAS,CAAA,CAAE,CAAC,EAAG,CAAC,CAAC,CAAC,EAAInb,EAAG,gBAAiB,CAAE,MAAO,CAAE,KAAQ,EAAE,CAAI,CAAA,CAAC,CACvF,EAAK,MAAO,EAAM,EAAED,EAAI,GAAGA,EAAI,aAAc,SAAS+B,EAAGsZ,EAAM,CAC3D,MAAO,CAAE,IAAKA,EAAM,GAAI,SAASC,EAAO,CACtC,MAAO,CAACtb,EAAI,GAAGqb,EAAM,KAAM,KAAMC,CAAK,CAAC,CAC7C,CAAO,CACJ,CAAA,CAAC,EAAG,KAAM,EAAI,CAAG,EAAE,aAActb,EAAI,OAAQ,EAAK,EAAGA,EAAI,UAAU,CAAC,CACvE,EACIE,GAAuB,CAAE,EACzBC,GAAgCC,GAClCjB,GACAY,GACAG,GACA,GACA,KACA,UACF,EACK,MAACqb,GAAmBpb,GAAc,QACvCqb,GAAeD,EAAgB","x_google_ignoreList":[0,1,2,3,4,5,6,7,8]}