{"version":3,"file":"dav-settings-personal-availability.mjs","sources":["../node_modules/@nextcloud/vue/dist/chunks/NcListItemIcon-D_ReDycv.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSelectUsers-DlE8EHdq.mjs","../node_modules/@nextcloud/sharing/dist/share/ShareType.js","../build/frontend/apps/dav/src/utils/date.ts","../build/frontend/apps/dav/src/components/AbsenceForm.vue","../node_modules/icalzone/dist/zones.js","../node_modules/icalzone/dist/index.js","../node_modules/ical.js/dist/ical.js","../node_modules/@nextcloud/calendar-availability-vue/node_modules/uuid/dist-browser/stringify.js","../node_modules/@nextcloud/calendar-availability-vue/node_modules/uuid/dist-browser/rng.js","../node_modules/@nextcloud/calendar-availability-vue/node_modules/uuid/dist-browser/native.js","../node_modules/@nextcloud/calendar-availability-vue/node_modules/uuid/dist-browser/v4.js","../node_modules/@nextcloud/calendar-availability-vue/dist/index.mjs","../build/frontend/apps/dav/src/dav/client.ts","../build/frontend/apps/dav/src/service/CalendarService.ts","../build/frontend/apps/dav/src/service/PreferenceService.ts","../build/frontend/apps/dav/src/components/AvailabilityForm.vue","../build/frontend/apps/dav/src/views/UserAvailability.vue","../build/frontend/apps/dav/src/settings-personal-availability.ts"],"sourcesContent":["import '../assets/NcListItemIcon-aquns6B7.css';\nimport \"escape-html\";\nimport \"striptags\";\nimport { resolveComponent, createElementBlock, openBlock, normalizeStyle, normalizeClass, createVNode, createElementVNode, renderSlot, mergeProps, createBlock, createCommentVNode, toDisplayString } from \"vue\";\nimport \"../composables/useIsDarkTheme/index.mjs\";\nimport \"@nextcloud/router\";\nimport \"../functions/isDarkTheme/index.mjs\";\nimport \"./NcMentionBubble.vue_vue_type_style_index_0_scoped_45238efd_lang-D6LzDiYf.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { u as userStatus, N as NcAvatar } from \"./NcAvatar-Dxm05R6e.mjs\";\nimport { _ as _sfc_main$1 } from \"./NcHighlight.vue_vue_type_script_lang-DnWQDM_2.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-BvLanNaW.mjs\";\nconst margin = 8;\nconst defaultSize = 32;\nconst _sfc_main = {\n name: \"NcListItemIcon\",\n components: {\n NcAvatar,\n NcHighlight: _sfc_main$1,\n NcIconSvgWrapper\n },\n mixins: [\n userStatus\n ],\n props: {\n /**\n * Default first line text\n */\n name: {\n type: String,\n required: true\n },\n /**\n * Secondary optional line\n * Only visible on size of 32 and above\n */\n subname: {\n type: String,\n default: \"\"\n },\n /**\n * Icon class to be displayed at the end of the component\n */\n icon: {\n type: String,\n default: \"\"\n },\n /**\n * SVG icon to be displayed at the end of the component\n */\n iconSvg: {\n type: String,\n default: \"\"\n },\n /**\n * Descriptive name for the icon\n */\n iconName: {\n type: String,\n default: \"\"\n },\n /**\n * Search within the highlight of name/subname\n */\n search: {\n type: String,\n default: \"\"\n },\n /**\n * Set a size in px that will define the avatar height/width\n * and therefore, the height of the component\n */\n avatarSize: {\n type: Number,\n default: defaultSize\n },\n /**\n * Disable the margins of this component.\n * Useful for integration in `NcSelect` for example\n */\n noMargin: {\n type: Boolean,\n default: false\n },\n /**\n * See the [Avatar](#Avatar) displayName prop\n * Fallback to name\n */\n displayName: {\n type: String,\n default: null\n },\n /**\n * See the [Avatar](#Avatar) isNoUser prop\n * Enable/disable the UserStatus fetching\n */\n isNoUser: {\n type: Boolean,\n default: false\n },\n /**\n * Unique list item ID\n */\n id: {\n type: String,\n default: null\n }\n },\n setup() {\n return {\n margin,\n defaultSize\n };\n },\n computed: {\n hasIcon() {\n return this.icon !== \"\";\n },\n hasIconSvg() {\n return this.iconSvg !== \"\";\n },\n isValidSubname() {\n return this.subname?.trim?.() !== \"\";\n },\n isSizeBigEnough() {\n return this.avatarSize >= 26;\n },\n cssVars() {\n const margin2 = this.noMargin ? 0 : this.margin;\n return {\n \"--height\": this.avatarSize + 2 * margin2 + \"px\",\n \"--margin\": this.margin + \"px\"\n };\n },\n /**\n * Separates the search property into two parts, the first one is the search part on the name, the second on the subname.\n *\n * @return {[string, string]}\n */\n searchParts() {\n const EMAIL_NOTATION = /^([^<]*)<([^>]+)>?$/;\n const match = this.search.match(EMAIL_NOTATION);\n if (this.isNoUser || !match) {\n return [this.search, this.search];\n }\n return [match[1].trim(), match[2]];\n }\n },\n beforeMount() {\n if (!this.isNoUser && !this.subname) {\n this.fetchUserStatus(this.user);\n }\n }\n};\nconst _hoisted_1 = [\"id\"];\nconst _hoisted_2 = { class: \"option__details\" };\nconst _hoisted_3 = { key: 1 };\nconst _hoisted_4 = [\"aria-label\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcAvatar = resolveComponent(\"NcAvatar\");\n const _component_NcHighlight = resolveComponent(\"NcHighlight\");\n const _component_NcIconSvgWrapper = resolveComponent(\"NcIconSvgWrapper\");\n return openBlock(), createElementBlock(\"span\", {\n id: $props.id,\n class: normalizeClass([\"option\", { \"option--compact\": $props.avatarSize < $setup.defaultSize }]),\n style: normalizeStyle($options.cssVars)\n }, [\n createVNode(_component_NcAvatar, mergeProps(_ctx.$attrs, {\n \"disable-menu\": true,\n \"disable-tooltip\": true,\n \"display-name\": $props.displayName || $props.name,\n \"is-no-user\": $props.isNoUser,\n size: $props.avatarSize,\n class: \"option__avatar\"\n }), null, 16, [\"display-name\", \"is-no-user\", \"size\"]),\n createElementVNode(\"div\", _hoisted_2, [\n createVNode(_component_NcHighlight, {\n class: \"option__lineone\",\n text: $props.name,\n search: $options.searchParts[0]\n }, null, 8, [\"text\", \"search\"]),\n $options.isValidSubname && $options.isSizeBigEnough ? (openBlock(), createBlock(_component_NcHighlight, {\n key: 0,\n class: \"option__linetwo\",\n text: $props.subname,\n search: $options.searchParts[1]\n }, null, 8, [\"text\", \"search\"])) : _ctx.hasStatus ? (openBlock(), createElementBlock(\"span\", _hoisted_3, [\n createElementVNode(\"span\", null, toDisplayString(_ctx.userStatus.icon), 1),\n createElementVNode(\"span\", null, toDisplayString(_ctx.userStatus.message), 1)\n ])) : createCommentVNode(\"\", true)\n ]),\n renderSlot(_ctx.$slots, \"default\", {}, () => [\n $options.hasIconSvg ? (openBlock(), createBlock(_component_NcIconSvgWrapper, {\n key: 0,\n class: \"option__icon\",\n svg: $props.iconSvg,\n name: $props.iconName\n }, null, 8, [\"svg\", \"name\"])) : $options.hasIcon ? (openBlock(), createElementBlock(\"span\", {\n key: 1,\n class: normalizeClass([\"icon option__icon\", $props.icon]),\n \"aria-label\": $props.iconName\n }, null, 10, _hoisted_4)) : createCommentVNode(\"\", true)\n ], true)\n ], 14, _hoisted_1);\n}\nconst NcListItemIcon = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-60a83836\"]]);\nexport {\n NcListItemIcon as N\n};\n//# sourceMappingURL=NcListItemIcon-D_ReDycv.mjs.map\n","import '../assets/NcSelectUsers-BWhtNRbI.css';\nimport { defineComponent, mergeModels, useModel, ref, watch, createBlock, openBlock, unref, mergeProps, withCtx, createVNode } from \"vue\";\nimport { N as NcListItemIcon } from \"./NcListItemIcon-D_ReDycv.mjs\";\nimport { N as NcSelect } from \"./NcSelect-Ba00b95n.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcSelectUsers\",\n props: /* @__PURE__ */ mergeModels({\n ariaLabelClearSelected: {},\n ariaLabelListbox: {},\n ariaLabelDeselectOption: { type: Function },\n disabled: { type: Boolean },\n inputId: {},\n inputLabel: {},\n labelOutside: { type: Boolean },\n keepOpen: { type: Boolean },\n loading: { type: Boolean },\n multiple: { type: Boolean },\n noWrap: { type: Boolean },\n options: {},\n placeholder: {},\n required: { type: Boolean }\n }, {\n \"modelValue\": {},\n \"modelModifiers\": {}\n }),\n emits: /* @__PURE__ */ mergeModels([\"search\"], [\"update:modelValue\"]),\n setup(__props, { emit: __emit }) {\n const modelValue = useModel(__props, \"modelValue\");\n const emit = __emit;\n const search = ref(\"\");\n watch(search, () => emit(\"search\", search.value));\n const clickableArea = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-clickable-area\"));\n const gridBaseLine = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-grid-baseline\"));\n const avatarSize = clickableArea - 2 * gridBaseLine;\n function filterBy(option, label, search2) {\n const EMAIL_NOTATION = /[^<]*<([^>]+)/;\n const match = search2.match(EMAIL_NOTATION);\n const subname = option.subname?.toLocaleLowerCase() ?? \"\";\n return match && subname.indexOf(match[1].toLocaleLowerCase()) > -1 || `${label} ${option.subname}`.toLocaleLowerCase().indexOf(search2.toLocaleLowerCase()) > -1;\n }\n return (_ctx, _cache) => {\n return openBlock(), createBlock(unref(NcSelect), mergeProps({\n modelValue: modelValue.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),\n class: \"nc-select-users\"\n }, _ctx.$props, {\n \"filter-by\": filterBy,\n label: \"displayName\",\n onSearch: _cache[1] || (_cache[1] = ($event) => search.value = $event)\n }), {\n option: withCtx((option) => [\n createVNode(unref(NcListItemIcon), mergeProps(option, {\n \"avatar-size\": 32,\n name: option.displayName,\n search: search.value\n }), null, 16, [\"name\", \"search\"])\n ]),\n \"selected-option\": withCtx((selectedOption) => [\n createVNode(unref(NcListItemIcon), mergeProps(selectedOption, {\n \"avatar-size\": avatarSize,\n name: selectedOption.displayName,\n \"no-margin\": \"\",\n search: search.value\n }), null, 16, [\"name\", \"search\"])\n ]),\n _: 1\n }, 16, [\"modelValue\"]);\n };\n }\n});\nconst NcSelectUsers = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-4fbb6472\"]]);\nexport {\n NcSelectUsers as N\n};\n//# sourceMappingURL=NcSelectUsers-DlE8EHdq.mjs.map\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: GPL-3.0-or-later\n */\nexport var ShareType;\n(function (ShareType) {\n ShareType[ShareType[\"User\"] = 0] = \"User\";\n ShareType[ShareType[\"Group\"] = 1] = \"Group\";\n ShareType[ShareType[\"Link\"] = 3] = \"Link\";\n ShareType[ShareType[\"Email\"] = 4] = \"Email\";\n ShareType[ShareType[\"Remote\"] = 6] = \"Remote\";\n /**\n * Was called `Circle` before Nextcloud 29\n */\n ShareType[ShareType[\"Team\"] = 7] = \"Team\";\n ShareType[ShareType[\"Guest\"] = 8] = \"Guest\";\n ShareType[ShareType[\"RemoteGroup\"] = 9] = \"RemoteGroup\";\n ShareType[ShareType[\"Room\"] = 10] = \"Room\";\n ShareType[ShareType[\"Deck\"] = 12] = \"Deck\";\n /**\n * @since 26.0.0\n */\n ShareType[ShareType[\"FederatedGroup\"] = 14] = \"FederatedGroup\";\n /**\n * Third party share types\n *\n * @since 25.0.0\n */\n ShareType[ShareType[\"ScienceMesh\"] = 15] = \"ScienceMesh\";\n})(ShareType || (ShareType = {}));\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/**\n * Format a date as 'YYYY-MM-DD'.\n *\n * @param date - A date instance to format.\n */\nexport function formatDateAsYMD(date: Date): `${number}-${number}-${number}` {\n\tconst year = date.getFullYear()\n\tconst month = (date.getMonth() + 1).toString().padStart(2, '0') as `${number}`\n\tconst day = date.getDate().toString().padStart(2, '0') as `${number}`\n\treturn `${year}-${month}-${day}`\n}\n","\n\n\n\n\n\n\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.zonesMap = exports.defaultStart = void 0;\nexports.defaultStart = \"19700101T000000\";\nexports.zonesMap = new Map([\n [\n \"Africa/Abidjan\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Accra\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Addis_Ababa\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Algiers\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"CET\"\n }\n }\n ],\n [\n \"Africa/Asmara\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Bamako\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Bangui\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Banjul\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Bissau\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Blantyre\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Brazzaville\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Bujumbura\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Cairo\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"EET\"\n }\n }\n ],\n [\n \"Africa/Casablanca\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"+01\"\n }\n }\n ],\n [\n \"Africa/Ceuta\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Africa/Conakry\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Dakar\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Dar_es_Salaam\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Djibouti\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Douala\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/El_Aaiun\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"+01\"\n }\n }\n ],\n [\n \"Africa/Freetown\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Gaborone\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Harare\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Johannesburg\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"SAST\"\n }\n }\n ],\n [\n \"Africa/Juba\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Kampala\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Khartoum\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Kigali\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Kinshasa\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Lagos\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Libreville\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Lome\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Luanda\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Lubumbashi\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Lusaka\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Malabo\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Maputo\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"Africa/Maseru\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"SAST\"\n }\n }\n ],\n [\n \"Africa/Mbabane\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"SAST\"\n }\n }\n ],\n [\n \"Africa/Mogadishu\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Monrovia\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Nairobi\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Africa/Ndjamena\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Niamey\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Nouakchott\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Ouagadougou\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Africa/Porto-Novo\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Sao_Tome\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"WAT\"\n }\n }\n ],\n [\n \"Africa/Tripoli\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"EET\"\n }\n }\n ],\n [\n \"Africa/Tunis\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"CET\"\n }\n }\n ],\n [\n \"Africa/Windhoek\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"CAT\"\n }\n }\n ],\n [\n \"America/Adak\",\n {\n \"s\": {\n \"f\": \"-0900\",\n \"t\": \"-1000\",\n \"n\": \"HST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-1000\",\n \"t\": \"-0900\",\n \"n\": \"HDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Anchorage\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"t\": \"-0900\",\n \"n\": \"AKST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0900\",\n \"t\": \"-0800\",\n \"n\": \"AKDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Anguilla\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Antigua\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Araguaina\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Buenos_Aires\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Catamarca\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Cordoba\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Jujuy\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/La_Rioja\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Mendoza\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Rio_Gallegos\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Salta\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/San_Juan\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/San_Luis\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Tucuman\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Argentina/Ushuaia\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Aruba\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Asuncion\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"-04\",\n \"s\": \"19700322T000000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"4SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"-03\",\n \"s\": \"19701004T000000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Atikokan\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"EST\"\n }\n }\n ],\n [\n \"America/Bahia_Banderas\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700405T020000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Bahia\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Barbados\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Belem\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Belize\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Blanc-Sablon\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Boa_Vista\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\"\n }\n }\n ],\n [\n \"America/Bogota\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"-05\"\n }\n }\n ],\n [\n \"America/Boise\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Cambridge_Bay\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Campo_Grande\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\",\n \"s\": \"19700215T000000\",\n \"r\": {\n \"m\": 2,\n \"d\": \"3SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"-03\",\n \"s\": \"19701101T000000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Cancun\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"EST\"\n }\n }\n ],\n [\n \"America/Caracas\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\"\n }\n }\n ],\n [\n \"America/Cayenne\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Cayman\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"EST\"\n }\n }\n ],\n [\n \"America/Chicago\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Chihuahua\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700405T020000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Costa_Rica\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Creston\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"n\": \"MST\"\n }\n }\n ],\n [\n \"America/Cuiaba\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\",\n \"s\": \"19700215T000000\",\n \"r\": {\n \"m\": 2,\n \"d\": \"3SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"-03\",\n \"s\": \"19701101T000000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Curacao\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Danmarkshavn\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"America/Dawson_Creek\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"n\": \"MST\"\n }\n }\n ],\n [\n \"America/Dawson\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"t\": \"-0800\",\n \"n\": \"PST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0800\",\n \"t\": \"-0700\",\n \"n\": \"PDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Denver\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Detroit\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Dominica\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Edmonton\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Eirunepe\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"-05\"\n }\n }\n ],\n [\n \"America/El_Salvador\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Fort_Nelson\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"n\": \"MST\"\n }\n }\n ],\n [\n \"America/Fortaleza\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Glace_Bay\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"AST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"ADT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Godthab\",\n {\n \"s\": {\n \"f\": \"-0200\",\n \"t\": \"-0300\",\n \"n\": \"-03\",\n \"s\": \"19701024T230000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SA\"\n }\n },\n \"d\": {\n \"f\": \"-0300\",\n \"t\": \"-0200\",\n \"n\": \"-02\",\n \"s\": \"19700328T220000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SA\"\n }\n }\n }\n ],\n [\n \"America/Goose_Bay\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"AST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"ADT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Grand_Turk\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Grenada\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Guadeloupe\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Guatemala\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Guayaquil\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"-05\"\n }\n }\n ],\n [\n \"America/Guyana\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\"\n }\n }\n ],\n [\n \"America/Halifax\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"AST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"ADT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Havana\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"CST\",\n \"s\": \"19701101T010000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"CDT\",\n \"s\": \"19700308T000000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Hermosillo\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"n\": \"MST\"\n }\n }\n ],\n [\n \"America/Indiana/Indianapolis\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Indiana/Knox\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Indiana/Marengo\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Indiana/Petersburg\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Indiana/Tell_City\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Indiana/Vevay\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Indiana/Vincennes\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Indiana/Winamac\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Inuvik\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Iqaluit\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Jamaica\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"EST\"\n }\n }\n ],\n [\n \"America/Juneau\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"t\": \"-0900\",\n \"n\": \"AKST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0900\",\n \"t\": \"-0800\",\n \"n\": \"AKDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Kentucky/Louisville\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Kentucky/Monticello\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Kralendijk\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/La_Paz\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\"\n }\n }\n ],\n [\n \"America/Lima\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"-05\"\n }\n }\n ],\n [\n \"America/Los_Angeles\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"t\": \"-0800\",\n \"n\": \"PST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0800\",\n \"t\": \"-0700\",\n \"n\": \"PDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Lower_Princes\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Maceio\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Managua\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Manaus\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\"\n }\n }\n ],\n [\n \"America/Marigot\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Martinique\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Matamoros\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Mazatlan\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700405T020000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Menominee\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Merida\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700405T020000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Metlakatla\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"t\": \"-0900\",\n \"n\": \"AKST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0900\",\n \"t\": \"-0800\",\n \"n\": \"AKDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Mexico_City\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700405T020000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Miquelon\",\n {\n \"s\": {\n \"f\": \"-0200\",\n \"t\": \"-0300\",\n \"n\": \"-03\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0300\",\n \"t\": \"-0200\",\n \"n\": \"-02\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Moncton\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"AST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"ADT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Monterrey\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700405T020000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Montevideo\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Montserrat\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Nassau\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/New_York\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Nipigon\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Nome\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"t\": \"-0900\",\n \"n\": \"AKST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0900\",\n \"t\": \"-0800\",\n \"n\": \"AKDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Noronha\",\n {\n \"s\": {\n \"f\": \"-0200\",\n \"n\": \"-02\"\n }\n }\n ],\n [\n \"America/North_Dakota/Beulah\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/North_Dakota/Center\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/North_Dakota/New_Salem\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Ojinaga\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Panama\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"EST\"\n }\n }\n ],\n [\n \"America/Pangnirtung\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Paramaribo\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Phoenix\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"n\": \"MST\"\n }\n }\n ],\n [\n \"America/Port_of_Spain\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Port-au-Prince\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Porto_Velho\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\"\n }\n }\n ],\n [\n \"America/Puerto_Rico\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Punta_Arenas\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Rainy_River\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Rankin_Inlet\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Recife\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Regina\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Resolute\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Rio_Branco\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"-05\"\n }\n }\n ],\n [\n \"America/Santarem\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"America/Santiago\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"-04\",\n \"s\": \"19700405T000000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"-03\",\n \"s\": \"19700906T000000\",\n \"r\": {\n \"m\": 9,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Santo_Domingo\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Sao_Paulo\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\",\n \"s\": \"19700215T000000\",\n \"r\": {\n \"m\": 2,\n \"d\": \"3SU\"\n }\n },\n \"d\": {\n \"f\": \"-0300\",\n \"t\": \"-0200\",\n \"n\": \"-02\",\n \"s\": \"19701101T000000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"America/Scoresbysund\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"t\": \"-0100\",\n \"n\": \"-01\",\n \"s\": \"19701025T010000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0100\",\n \"t\": \"+0000\",\n \"n\": \"+00\",\n \"s\": \"19700329T000000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"America/Sitka\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"t\": \"-0900\",\n \"n\": \"AKST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0900\",\n \"t\": \"-0800\",\n \"n\": \"AKDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/St_Barthelemy\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/St_Johns\",\n {\n \"s\": {\n \"f\": \"-0230\",\n \"t\": \"-0330\",\n \"n\": \"NST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0330\",\n \"t\": \"-0230\",\n \"n\": \"NDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/St_Kitts\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/St_Lucia\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/St_Thomas\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/St_Vincent\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Swift_Current\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Tegucigalpa\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"America/Thule\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"AST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"ADT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Thunder_Bay\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Tijuana\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"t\": \"-0800\",\n \"n\": \"PST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0800\",\n \"t\": \"-0700\",\n \"n\": \"PDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Toronto\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"t\": \"-0500\",\n \"n\": \"EST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0500\",\n \"t\": \"-0400\",\n \"n\": \"EDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Tortola\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"AST\"\n }\n }\n ],\n [\n \"America/Vancouver\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"t\": \"-0800\",\n \"n\": \"PST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0800\",\n \"t\": \"-0700\",\n \"n\": \"PDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Whitehorse\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"t\": \"-0800\",\n \"n\": \"PST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0800\",\n \"t\": \"-0700\",\n \"n\": \"PDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Winnipeg\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"CST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"CDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Yakutat\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"t\": \"-0900\",\n \"n\": \"AKST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0900\",\n \"t\": \"-0800\",\n \"n\": \"AKDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"America/Yellowknife\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"t\": \"-0700\",\n \"n\": \"MST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0700\",\n \"t\": \"-0600\",\n \"n\": \"MDT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"Antarctica/Casey\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Antarctica/Davis\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Antarctica/DumontDUrville\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"+10\"\n }\n }\n ],\n [\n \"Antarctica/Macquarie\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Antarctica/Mawson\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Antarctica/McMurdo\",\n {\n \"s\": {\n \"f\": \"+1300\",\n \"t\": \"+1200\",\n \"n\": \"NZST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1200\",\n \"t\": \"+1300\",\n \"n\": \"NZDT\",\n \"s\": \"19700927T020000\",\n \"r\": {\n \"m\": 9,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Antarctica/Palmer\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"Antarctica/Rothera\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"Antarctica/Syowa\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Antarctica/Troll\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0000\",\n \"n\": \"+00\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0200\",\n \"n\": \"+02\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Antarctica/Vostok\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Arctic/Longyearbyen\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Asia/Aden\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Asia/Almaty\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Asia/Amman\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701030T010000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1FR\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700326T235959\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1TH\"\n }\n }\n }\n ],\n [\n \"Asia/Anadyr\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Asia/Aqtau\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Aqtobe\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Ashgabat\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Atyrau\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Baghdad\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Asia/Bahrain\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Asia/Baku\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Asia/Bangkok\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Barnaul\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Beirut\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T000000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T000000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Asia/Bishkek\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Asia/Brunei\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Asia/Chita\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"+09\"\n }\n }\n ],\n [\n \"Asia/Choibalsan\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Asia/Colombo\",\n {\n \"s\": {\n \"f\": \"+0530\",\n \"n\": \"+0530\"\n }\n }\n ],\n [\n \"Asia/Damascus\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701030T000000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1FR\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700327T000000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1FR\"\n }\n }\n }\n ],\n [\n \"Asia/Dhaka\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Asia/Dili\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"+09\"\n }\n }\n ],\n [\n \"Asia/Dubai\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Asia/Dushanbe\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Famagusta\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Asia/Gaza\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701031T010000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SA\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700328T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"4SA\"\n }\n }\n }\n ],\n [\n \"Asia/Hebron\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701031T010000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SA\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700328T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"4SA\"\n }\n }\n }\n ],\n [\n \"Asia/Ho_Chi_Minh\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Hong_Kong\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"HKT\"\n }\n }\n ],\n [\n \"Asia/Hovd\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Irkutsk\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Asia/Istanbul\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Asia/Jakarta\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"WIB\"\n }\n }\n ],\n [\n \"Asia/Jayapura\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"WIT\"\n }\n }\n ],\n [\n \"Asia/Jerusalem\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"IST\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"IDT\",\n \"s\": \"19700327T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1FR\"\n }\n }\n }\n ],\n [\n \"Asia/Kabul\",\n {\n \"s\": {\n \"f\": \"+0430\",\n \"n\": \"+0430\"\n }\n }\n ],\n [\n \"Asia/Kamchatka\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Asia/Karachi\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"PKT\"\n }\n }\n ],\n [\n \"Asia/Kathmandu\",\n {\n \"s\": {\n \"f\": \"+0545\",\n \"n\": \"+0545\"\n }\n }\n ],\n [\n \"Asia/Khandyga\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"+09\"\n }\n }\n ],\n [\n \"Asia/Kolkata\",\n {\n \"s\": {\n \"f\": \"+0530\",\n \"n\": \"IST\"\n }\n }\n ],\n [\n \"Asia/Krasnoyarsk\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Kuala_Lumpur\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Asia/Kuching\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Asia/Kuwait\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Asia/Macau\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"Asia/Magadan\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Asia/Makassar\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"WITA\"\n }\n }\n ],\n [\n \"Asia/Manila\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"PST\"\n }\n }\n ],\n [\n \"Asia/Muscat\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Asia/Nicosia\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Asia/Novokuznetsk\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Novosibirsk\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Omsk\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Asia/Oral\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Phnom_Penh\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Pontianak\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"WIB\"\n }\n }\n ],\n [\n \"Asia/Pyongyang\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"KST\"\n }\n }\n ],\n [\n \"Asia/Qatar\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Asia/Qyzylorda\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Asia/Riyadh\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Asia/Sakhalin\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Asia/Samarkand\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Seoul\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"KST\"\n }\n }\n ],\n [\n \"Asia/Shanghai\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"Asia/Singapore\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Asia/Srednekolymsk\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Asia/Taipei\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"CST\"\n }\n }\n ],\n [\n \"Asia/Tashkent\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Tbilisi\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Asia/Tehran\",\n {\n \"s\": {\n \"f\": \"+0430\",\n \"t\": \"+0330\",\n \"n\": \"+0330\",\n \"s\": \"19700921T000000\",\n \"r\": {\n \"m\": 9,\n \"d\": \"3SU\"\n }\n },\n \"d\": {\n \"f\": \"+0330\",\n \"t\": \"+0430\",\n \"n\": \"+0430\",\n \"s\": \"19700321T000000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"3SU\"\n }\n }\n }\n ],\n [\n \"Asia/Thimphu\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Asia/Tokyo\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"JST\"\n }\n }\n ],\n [\n \"Asia/Tomsk\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Ulaanbaatar\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Asia/Urumqi\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Asia/Ust-Nera\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"+10\"\n }\n }\n ],\n [\n \"Asia/Vientiane\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Asia/Vladivostok\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"+10\"\n }\n }\n ],\n [\n \"Asia/Yakutsk\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"+09\"\n }\n }\n ],\n [\n \"Asia/Yangon\",\n {\n \"s\": {\n \"f\": \"+0630\",\n \"n\": \"+0630\"\n }\n }\n ],\n [\n \"Asia/Yekaterinburg\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Asia/Yerevan\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Atlantic/Azores\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"t\": \"-0100\",\n \"n\": \"-01\",\n \"s\": \"19701025T010000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0100\",\n \"t\": \"+0000\",\n \"n\": \"+00\",\n \"s\": \"19700329T000000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Atlantic/Bermuda\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"t\": \"-0400\",\n \"n\": \"AST\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"-0400\",\n \"t\": \"-0300\",\n \"n\": \"ADT\",\n \"s\": \"19700308T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"2SU\"\n }\n }\n }\n ],\n [\n \"Atlantic/Canary\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"WET\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"WEST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Atlantic/Cape_Verde\",\n {\n \"s\": {\n \"f\": \"-0100\",\n \"n\": \"-01\"\n }\n }\n ],\n [\n \"Atlantic/Faroe\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"WET\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"WEST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Atlantic/Madeira\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"WET\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"WEST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Atlantic/Reykjavik\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Atlantic/South_Georgia\",\n {\n \"s\": {\n \"f\": \"-0200\",\n \"n\": \"-02\"\n }\n }\n ],\n [\n \"Atlantic/St_Helena\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Atlantic/Stanley\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"Australia/Adelaide\",\n {\n \"s\": {\n \"f\": \"+1030\",\n \"t\": \"+0930\",\n \"n\": \"ACST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0930\",\n \"t\": \"+1030\",\n \"n\": \"ACDT\",\n \"s\": \"19701004T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Australia/Brisbane\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"AEST\"\n }\n }\n ],\n [\n \"Australia/Broken_Hill\",\n {\n \"s\": {\n \"f\": \"+1030\",\n \"t\": \"+0930\",\n \"n\": \"ACST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0930\",\n \"t\": \"+1030\",\n \"n\": \"ACDT\",\n \"s\": \"19701004T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Australia/Currie\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"t\": \"+1000\",\n \"n\": \"AEST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1000\",\n \"t\": \"+1100\",\n \"n\": \"AEDT\",\n \"s\": \"19701004T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Australia/Darwin\",\n {\n \"s\": {\n \"f\": \"+0930\",\n \"n\": \"ACST\"\n }\n }\n ],\n [\n \"Australia/Eucla\",\n {\n \"s\": {\n \"f\": \"+0845\",\n \"n\": \"+0845\"\n }\n }\n ],\n [\n \"Australia/Hobart\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"t\": \"+1000\",\n \"n\": \"AEST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1000\",\n \"t\": \"+1100\",\n \"n\": \"AEDT\",\n \"s\": \"19701004T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Australia/Lindeman\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"AEST\"\n }\n }\n ],\n [\n \"Australia/Lord_Howe\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"t\": \"+1030\",\n \"n\": \"+1030\",\n \"s\": \"19700405T020000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1030\",\n \"t\": \"+1100\",\n \"n\": \"+11\",\n \"s\": \"19701004T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Australia/Melbourne\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"t\": \"+1000\",\n \"n\": \"AEST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1000\",\n \"t\": \"+1100\",\n \"n\": \"AEDT\",\n \"s\": \"19701004T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Australia/Perth\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"AWST\"\n }\n }\n ],\n [\n \"Australia/Sydney\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"t\": \"+1000\",\n \"n\": \"AEST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1000\",\n \"t\": \"+1100\",\n \"n\": \"AEDT\",\n \"s\": \"19701004T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Etc/GMT-0\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Etc/GMT-1\",\n {\n \"s\": {\n \"f\": \"-0100\",\n \"n\": \"-01\"\n }\n }\n ],\n [\n \"Etc/GMT-10\",\n {\n \"s\": {\n \"f\": \"-1000\",\n \"n\": \"-10\"\n }\n }\n ],\n [\n \"Etc/GMT-11\",\n {\n \"s\": {\n \"f\": \"-1100\",\n \"n\": \"-11\"\n }\n }\n ],\n [\n \"Etc/GMT-12\",\n {\n \"s\": {\n \"f\": \"-1200\",\n \"n\": \"-12\"\n }\n }\n ],\n [\n \"Etc/GMT-2\",\n {\n \"s\": {\n \"f\": \"-0200\",\n \"n\": \"-02\"\n }\n }\n ],\n [\n \"Etc/GMT-3\",\n {\n \"s\": {\n \"f\": \"-0300\",\n \"n\": \"-03\"\n }\n }\n ],\n [\n \"Etc/GMT-4\",\n {\n \"s\": {\n \"f\": \"-0400\",\n \"n\": \"-04\"\n }\n }\n ],\n [\n \"Etc/GMT-5\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"n\": \"-05\"\n }\n }\n ],\n [\n \"Etc/GMT-6\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"-06\"\n }\n }\n ],\n [\n \"Etc/GMT-7\",\n {\n \"s\": {\n \"f\": \"-0700\",\n \"n\": \"-07\"\n }\n }\n ],\n [\n \"Etc/GMT-8\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"n\": \"-08\"\n }\n }\n ],\n [\n \"Etc/GMT-9\",\n {\n \"s\": {\n \"f\": \"-0900\",\n \"n\": \"-09\"\n }\n }\n ],\n [\n \"Etc/GMT\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Etc/GMT+0\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Etc/GMT+1\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"n\": \"+01\"\n }\n }\n ],\n [\n \"Etc/GMT+10\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"+10\"\n }\n }\n ],\n [\n \"Etc/GMT+11\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Etc/GMT+12\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Etc/GMT+13\",\n {\n \"s\": {\n \"f\": \"+1300\",\n \"n\": \"+13\"\n }\n }\n ],\n [\n \"Etc/GMT+14\",\n {\n \"s\": {\n \"f\": \"+1400\",\n \"n\": \"+14\"\n }\n }\n ],\n [\n \"Etc/GMT+2\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"+02\"\n }\n }\n ],\n [\n \"Etc/GMT+3\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Etc/GMT+4\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Etc/GMT+5\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Etc/GMT+6\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Etc/GMT+7\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Etc/GMT+8\",\n {\n \"s\": {\n \"f\": \"+0800\",\n \"n\": \"+08\"\n }\n }\n ],\n [\n \"Etc/GMT+9\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"+09\"\n }\n }\n ],\n [\n \"Etc/GMT0\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Etc/Greenwich\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"GMT\"\n }\n }\n ],\n [\n \"Etc/UCT\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"UCT\"\n }\n }\n ],\n [\n \"Etc/Universal\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"UTC\"\n }\n }\n ],\n [\n \"Etc/UTC\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"UTC\"\n }\n }\n ],\n [\n \"Etc/Zulu\",\n {\n \"s\": {\n \"f\": \"+0000\",\n \"n\": \"UTC\"\n }\n }\n ],\n [\n \"Europe/Amsterdam\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Andorra\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Astrakhan\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Europe/Athens\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Belgrade\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Berlin\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Bratislava\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Brussels\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Bucharest\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Budapest\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Busingen\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Chisinau\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Copenhagen\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Dublin\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"GMT\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"IST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Gibraltar\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Guernsey\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"GMT\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"BST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Helsinki\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Isle_of_Man\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"GMT\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"BST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Istanbul\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Europe/Jersey\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"GMT\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"BST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Kaliningrad\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"n\": \"EET\"\n }\n }\n ],\n [\n \"Europe/Kiev\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Kirov\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Europe/Lisbon\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"WET\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"WEST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Ljubljana\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/London\",\n {\n \"s\": {\n \"f\": \"+0100\",\n \"t\": \"+0000\",\n \"n\": \"GMT\",\n \"s\": \"19701025T020000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0000\",\n \"t\": \"+0100\",\n \"n\": \"BST\",\n \"s\": \"19700329T010000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Luxembourg\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Madrid\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Malta\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Mariehamn\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Minsk\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"+03\"\n }\n }\n ],\n [\n \"Europe/Monaco\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Moscow\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"MSK\"\n }\n }\n ],\n [\n \"Europe/Nicosia\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Oslo\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Paris\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Podgorica\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Prague\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Riga\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Rome\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Samara\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Europe/San_Marino\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Sarajevo\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Saratov\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Europe/Simferopol\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"MSK\"\n }\n }\n ],\n [\n \"Europe/Skopje\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Sofia\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Stockholm\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Tallinn\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Tirane\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Ulyanovsk\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Europe/Uzhgorod\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Vaduz\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Vatican\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Vienna\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Vilnius\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Volgograd\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Europe/Warsaw\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Zagreb\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Zaporozhye\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"t\": \"+0200\",\n \"n\": \"EET\",\n \"s\": \"19701025T040000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0200\",\n \"t\": \"+0300\",\n \"n\": \"EEST\",\n \"s\": \"19700329T030000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Europe/Zurich\",\n {\n \"s\": {\n \"f\": \"+0200\",\n \"t\": \"+0100\",\n \"n\": \"CET\",\n \"s\": \"19701025T030000\",\n \"r\": {\n \"m\": 10,\n \"d\": \"-1SU\"\n }\n },\n \"d\": {\n \"f\": \"+0100\",\n \"t\": \"+0200\",\n \"n\": \"CEST\",\n \"s\": \"19700329T020000\",\n \"r\": {\n \"m\": 3,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Indian/Antananarivo\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Indian/Chagos\",\n {\n \"s\": {\n \"f\": \"+0600\",\n \"n\": \"+06\"\n }\n }\n ],\n [\n \"Indian/Christmas\",\n {\n \"s\": {\n \"f\": \"+0700\",\n \"n\": \"+07\"\n }\n }\n ],\n [\n \"Indian/Cocos\",\n {\n \"s\": {\n \"f\": \"+0630\",\n \"n\": \"+0630\"\n }\n }\n ],\n [\n \"Indian/Comoro\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Indian/Kerguelen\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Indian/Mahe\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Indian/Maldives\",\n {\n \"s\": {\n \"f\": \"+0500\",\n \"n\": \"+05\"\n }\n }\n ],\n [\n \"Indian/Mauritius\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Indian/Mayotte\",\n {\n \"s\": {\n \"f\": \"+0300\",\n \"n\": \"EAT\"\n }\n }\n ],\n [\n \"Indian/Reunion\",\n {\n \"s\": {\n \"f\": \"+0400\",\n \"n\": \"+04\"\n }\n }\n ],\n [\n \"Pacific/Apia\",\n {\n \"s\": {\n \"f\": \"+1400\",\n \"t\": \"+1300\",\n \"n\": \"+13\",\n \"s\": \"19700405T040000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1300\",\n \"t\": \"+1400\",\n \"n\": \"+14\",\n \"s\": \"19700927T030000\",\n \"r\": {\n \"m\": 9,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Pacific/Auckland\",\n {\n \"s\": {\n \"f\": \"+1300\",\n \"t\": \"+1200\",\n \"n\": \"NZST\",\n \"s\": \"19700405T030000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1200\",\n \"t\": \"+1300\",\n \"n\": \"NZDT\",\n \"s\": \"19700927T020000\",\n \"r\": {\n \"m\": 9,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Pacific/Bougainville\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Pacific/Chatham\",\n {\n \"s\": {\n \"f\": \"+1345\",\n \"t\": \"+1245\",\n \"n\": \"+1245\",\n \"s\": \"19700405T034500\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SU\"\n }\n },\n \"d\": {\n \"f\": \"+1245\",\n \"t\": \"+1345\",\n \"n\": \"+1345\",\n \"s\": \"19700927T024500\",\n \"r\": {\n \"m\": 9,\n \"d\": \"-1SU\"\n }\n }\n }\n ],\n [\n \"Pacific/Chuuk\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"+10\"\n }\n }\n ],\n [\n \"Pacific/Easter\",\n {\n \"s\": {\n \"f\": \"-0500\",\n \"t\": \"-0600\",\n \"n\": \"-06\",\n \"s\": \"19700404T220000\",\n \"r\": {\n \"m\": 4,\n \"d\": \"1SA\"\n }\n },\n \"d\": {\n \"f\": \"-0600\",\n \"t\": \"-0500\",\n \"n\": \"-05\",\n \"s\": \"19700905T220000\",\n \"r\": {\n \"m\": 9,\n \"d\": \"1SA\"\n }\n }\n }\n ],\n [\n \"Pacific/Efate\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Pacific/Enderbury\",\n {\n \"s\": {\n \"f\": \"+1300\",\n \"n\": \"+13\"\n }\n }\n ],\n [\n \"Pacific/Fakaofo\",\n {\n \"s\": {\n \"f\": \"+1300\",\n \"n\": \"+13\"\n }\n }\n ],\n [\n \"Pacific/Fiji\",\n {\n \"s\": {\n \"f\": \"+1300\",\n \"t\": \"+1200\",\n \"n\": \"+12\",\n \"s\": \"19700118T030000\",\n \"r\": {\n \"m\": 1,\n \"d\": \"-2SU\"\n }\n },\n \"d\": {\n \"f\": \"+1200\",\n \"t\": \"+1300\",\n \"n\": \"+13\",\n \"s\": \"19701101T020000\",\n \"r\": {\n \"m\": 11,\n \"d\": \"1SU\"\n }\n }\n }\n ],\n [\n \"Pacific/Funafuti\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Pacific/Galapagos\",\n {\n \"s\": {\n \"f\": \"-0600\",\n \"n\": \"-06\"\n }\n }\n ],\n [\n \"Pacific/Gambier\",\n {\n \"s\": {\n \"f\": \"-0900\",\n \"n\": \"-09\"\n }\n }\n ],\n [\n \"Pacific/Guadalcanal\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Pacific/Guam\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"ChST\"\n }\n }\n ],\n [\n \"Pacific/Honolulu\",\n {\n \"s\": {\n \"f\": \"-1000\",\n \"n\": \"HST\"\n }\n }\n ],\n [\n \"Pacific/Kiritimati\",\n {\n \"s\": {\n \"f\": \"+1400\",\n \"n\": \"+14\"\n }\n }\n ],\n [\n \"Pacific/Kosrae\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Pacific/Kwajalein\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Pacific/Majuro\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Pacific/Marquesas\",\n {\n \"s\": {\n \"f\": \"-0930\",\n \"n\": \"-0930\"\n }\n }\n ],\n [\n \"Pacific/Midway\",\n {\n \"s\": {\n \"f\": \"-1100\",\n \"n\": \"SST\"\n }\n }\n ],\n [\n \"Pacific/Nauru\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Pacific/Niue\",\n {\n \"s\": {\n \"f\": \"-1100\",\n \"n\": \"-11\"\n }\n }\n ],\n [\n \"Pacific/Norfolk\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Pacific/Noumea\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Pacific/Pago_Pago\",\n {\n \"s\": {\n \"f\": \"-1100\",\n \"n\": \"SST\"\n }\n }\n ],\n [\n \"Pacific/Palau\",\n {\n \"s\": {\n \"f\": \"+0900\",\n \"n\": \"+09\"\n }\n }\n ],\n [\n \"Pacific/Pitcairn\",\n {\n \"s\": {\n \"f\": \"-0800\",\n \"n\": \"-08\"\n }\n }\n ],\n [\n \"Pacific/Pohnpei\",\n {\n \"s\": {\n \"f\": \"+1100\",\n \"n\": \"+11\"\n }\n }\n ],\n [\n \"Pacific/Port_Moresby\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"+10\"\n }\n }\n ],\n [\n \"Pacific/Rarotonga\",\n {\n \"s\": {\n \"f\": \"-1000\",\n \"n\": \"-10\"\n }\n }\n ],\n [\n \"Pacific/Saipan\",\n {\n \"s\": {\n \"f\": \"+1000\",\n \"n\": \"ChST\"\n }\n }\n ],\n [\n \"Pacific/Tahiti\",\n {\n \"s\": {\n \"f\": \"-1000\",\n \"n\": \"-10\"\n }\n }\n ],\n [\n \"Pacific/Tarawa\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Pacific/Tongatapu\",\n {\n \"s\": {\n \"f\": \"+1300\",\n \"n\": \"+13\"\n }\n }\n ],\n [\n \"Pacific/Wake\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ],\n [\n \"Pacific/Wallis\",\n {\n \"s\": {\n \"f\": \"+1200\",\n \"n\": \"+12\"\n }\n }\n ]\n]);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getZoneString = exports.getZoneLines = void 0;\nconst zones_1 = require(\"./zones\"); // This module must be generated with `yarn run build-zones`.\nfunction renderZoneSub(data) {\n const { n, f, t, r, s } = data;\n return [\n `TZNAME:${n}`,\n `TZOFFSETFROM:${f}`,\n `TZOFFSETTO:${t || f}`,\n `DTSTART:${s || zones_1.defaultStart}`,\n ...(r ? [`RRULE:FREQ=${r.f || 'YEARLY'};BYMONTH=${r.m};BYDAY=${r.d}`] : []),\n ];\n}\n/**\n * Tries to resolve a given time zone to iCalendar time zone component\n * (`VTIMEZONE`) as string array (usually for further processing).\n * @param zoneName Time zone name (e.g. `America/Los_Angeles`)\n * @param includeWrapper Set to `false` to avoid including lines for\n * `BEGIN:VTIMEZONE` and `END:VTIMEZONE`.\n * @returns Lines of the iCalendar time zone component (`VTIMEZONE`), each line\n * individually as an array of strings.\n */\nfunction getZoneLines(zoneName, includeWrapper = true) {\n const zoneData = zones_1.zonesMap.get(zoneName);\n if (zoneData) {\n const { s, d } = zoneData;\n const lines = [\n ...(includeWrapper ? ['BEGIN:VTIMEZONE'] : []),\n `TZID:${zoneName}`,\n // `X-LIC-LOCATION:${zoneName}`, // Who uses this?\n 'BEGIN:STANDARD',\n ...renderZoneSub(s),\n 'END:STANDARD',\n ...(d ? [\n 'BEGIN:DAYLIGHT',\n ...renderZoneSub(d),\n 'END:DAYLIGHT',\n ] : []),\n ...(includeWrapper ? ['END:VTIMEZONE'] : []),\n ];\n return lines;\n }\n}\nexports.getZoneLines = getZoneLines;\n/**\n * Tries to resolve a given time zone to iCalendar time zone component\n * (`VTIMEZONE`) as string.\n * @param zoneName Time zone name (e.g. `America/Los_Angeles`)\n * @param includeWrapper Set to `false` to avoid including lines for\n * `BEGIN:VTIMEZONE` and `END:VTIMEZONE`.\n * @returns The iCalendar time zone component (`VTIMEZONE`) as string\n * with `\\r\\n` line breaks.\n */\nfunction getZoneString(zoneName, includeWrapper = true) {\n const lines = getZoneLines(zoneName, includeWrapper);\n return lines === null || lines === void 0 ? void 0 : lines.join('\\r\\n');\n}\nexports.getZoneString = getZoneString;\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 * 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\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 let hasWeeks = false;\n if (this.weeks) {\n if (this.days || this.hours || this.minutes || this.seconds) {\n str += (this.weeks * 7 + this.days) + \"D\";\n } else {\n str += (this.weeks + \"W\");\n hasWeeks = true;\n }\n } else if (this.days) {\n str += (this.days + \"D\");\n }\n\n if (!hasWeeks) {\n if (this.hours || this.minutes || this.seconds) {\n str += \"T\";\n if (this.hours) {\n str += this.hours + \"H\";\n }\n\n if (this.minutes) {\n str += this.minutes + \"M\";\n }\n\n if (this.seconds) {\n str += this.seconds + \"S\";\n }\n }\n }\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/**\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 * Compare this period with a date or other period. To maintain the logic where a.compare(b)\n * returns 1 when a > b, this function will return 1 when the period is after the date, 0 when the\n * date is within the period, and -1 when the period is before the date. When comparing two\n * periods, as soon as they overlap in any way this will return 0.\n *\n * @param {Time|Period} dt The date or other period to compare with\n */\n compare(dt) {\n if (dt.compare(this.start) < 0) {\n return 1;\n } else if (dt.compare(this.getEnd()) > 0) {\n return -1;\n } else {\n return 0;\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/**\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 * @ignore\n * @typedef {import(\"./types.js\").timeInit} timeInit\n * Imports the 'timeInit' 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.slice(-1) === '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 {timeInit} aData Time initialization\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.>}\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 {timeInit} data Time initialization\n * @param {Timezone} zone timezone this position occurs in\n */\n constructor(data, zone) {\n this.wrappedJSObject = this;\n\n /**\n * @type {timeInit}\n * @private\n */\n this._time = Object.create(null);\n\n /* time defaults */\n this._time.year = 0;\n this._time.month = 1;\n this._time.day = 1;\n this._time.hour = 0;\n this._time.minute = 0;\n this._time.second = 0;\n this._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 * The year of this date.\n * @type {Number}\n */\n get year() {\n return this._getTimeAttr('year');\n }\n\n set year(val) {\n this._setTimeAttr('year', val);\n }\n\n /**\n * The month of this date.\n * @type {Number}\n */\n get month() {\n return this._getTimeAttr('month');\n }\n\n set month(val) {\n this._setTimeAttr('month', val);\n }\n\n /**\n * The day of this date.\n * @type {Number}\n */\n get day() {\n return this._getTimeAttr('day');\n }\n\n set day(val) {\n this._setTimeAttr('day', val);\n }\n\n /**\n * The hour of this date-time.\n * @type {Number}\n */\n get hour() {\n return this._getTimeAttr('hour');\n }\n\n set hour(val) {\n this._setTimeAttr('hour', val);\n }\n\n /**\n * The minute of this date-time.\n * @type {Number}\n */\n get minute() {\n return this._getTimeAttr('minute');\n }\n\n set minute(val) {\n this._setTimeAttr('minute', val);\n }\n\n /**\n * The second of this date-time.\n * @type {Number}\n */\n get second() {\n return this._getTimeAttr('second');\n }\n\n set second(val) {\n this._setTimeAttr('second', val);\n }\n\n /**\n * If true, the instance represents a date (as opposed to a date-time)\n * @type {Boolean}\n */\n get isDate() {\n return this._getTimeAttr('isDate');\n }\n\n set isDate(val) {\n this._setTimeAttr('isDate', val);\n }\n\n /**\n * @private\n * @param {String} attr Attribute to get (one of: year, month,\n * day, hour, minute, second, isDate)\n * @return {Number|Boolean} Current value for the attribute\n */\n _getTimeAttr(attr) {\n if (this._pendingNormalization) {\n this._normalize();\n this._pendingNormalization = false;\n }\n\n return this._time[attr];\n }\n\n /**\n * @private\n * @param {String} attr Attribute to set (one of: year, month,\n * day, hour, minute, second, isDate)\n * @param {Number|Boolean} val New value for the attribute\n */\n _setTimeAttr(attr, 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 * 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 {timeInit} aData Time initialization\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, or a period.\n *\n * @param {Time|Period} aOther The instance to compare with\n * @return {Number} -1, 0 or 1 for less/equal/greater\n */\n compare(other) {\n if (other instanceof Period) {\n return -1 * other.compare(this);\n } else {\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 /**\n * Compares only the date part of this instance with another one.\n *\n * @param {Time} 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.icalendar.value['date-time'].toICAL(string);\n } else {\n return design.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/* 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/**\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.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 // Handle parameter values with multiple entries\n let parsedParamLength;\n if (typeof parsedParams[1] === 'string') {\n parsedParamLength = parsedParams[1].length;\n } else {\n parsedParamLength = parsedParams[1].reduce((accumulator, currentValue) => {\n return accumulator + currentValue.length;\n }, 0);\n }\n lastParamIndex = parsedParamLength + 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.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.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 {Array} Array containing key/valye pairs of parsed parameters, the\n * parsed value, and the position of the last parameter found\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\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\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/**\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 binsearchInsert: binsearchInsert,\n clone: clone,\n extend: extend,\n foldline: foldline,\n formatClassType: formatClassType,\n isStrictlyNaN: isStrictlyNaN,\n pad2: pad2,\n strictParseInt: strictParseInt,\n trunc: trunc,\n unescapedIndexOf: unescapedIndexOf,\n updateTimezones: updateTimezones\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/**\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.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/**\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 {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.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.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/**\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 // The BYYEARDAY may only appear with BYDAY\n if (\"BYYEARDAY\" in parts) {\n if (\"BYMONTH\" in parts || \"BYWEEKNO\" in parts ||\n \"BYMONTHDAY\" 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 // If there's no occurrence in this year, try the following years. This\n // would only happen looking for day 366 or -366.\n if (!this._nextByYearDay() && !this.next_year() && !this.next_year() && !this.next_year()) {\n // This should not be possible, but just in case it is, stop.\n throw new InvalidRecurrenceRuleError();\n }\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 InvalidRecurrenceRuleError();\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 let invalid_count = 0;\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 if (valid) {\n invalid_count = 0;\n } else if (++invalid_count == 336) {\n // We've been through all 91 month variations and not found a recurrence. Stop.\n // (12 months and 29-day February × 7 starting days.)\n this.completed = true;\n return null;\n }\n break;\n case \"YEARLY\":\n valid = this.next_year();\n if (valid) {\n invalid_count = 0;\n } else if (++invalid_count == 28) {\n // We've been through all 14 year variations and not found a recurrence. Stop.\n // (365-day and 366-day years × 7 starting days.)\n this.completed = true;\n return null;\n }\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.length == 0 || ++this.days_index == this.days.length) {\n this.days_index = 0;\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 if (this.days.length == 0) {\n return 0;\n }\n }\n\n return this._nextByYearDay();\n }\n\n _nextByYearDay() {\n let doy = this.days[this.days_index];\n let year = this.last.year;\n\n if (Math.abs(doy) == 366 && !Time.isLeapYear(this.last.year)) {\n return 0;\n }\n\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 return 1;\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 if (partCount == 2 && \"BYYEARDAY\" in parts && \"BYDAY\" in parts) {\n let daysInYear = Time.isLeapYear(aYear) ? 366 : 365;\n let expandedDays = new Set(this.expand_by_day(aYear));\n\n for (let doy of this.by_data.BYYEARDAY) {\n if (doy < 0) {\n doy += daysInYear + 1;\n }\n\n if (expandedDays.has(doy)) {\n this.days.push(doy);\n }\n }\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/**\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.=} aData.bysecond The seconds for the BYSECOND part\n * @param {Array.=} aData.byminute The minutes for the BYMINUTE part\n * @param {Array.=} aData.byhour The hours for the BYHOUR part\n * @param {Array.=} aData.byday The BYDAY values\n * @param {Array.=} aData.bymonthday The days for the BYMONTHDAY part\n * @param {Array.=} aData.byyearday The days for the BYYEARDAY part\n * @param {Array.=} aData.byweekno The weeks for the BYWEEKNO part\n * @param {Array.=} aData.bymonth The month for the BYMONTH part\n * @param {Array.=} 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.=} data.bysecond The seconds for the BYSECOND part\n * @param {Array.=} data.byminute The minutes for the BYMINUTE part\n * @param {Array.=} data.byhour The hours for the BYHOUR part\n * @param {Array.=} data.byday The BYDAY values\n * @param {Array.=} data.bymonthday The days for the BYMONTHDAY part\n * @param {Array.=} data.byyearday The days for the BYYEARDAY part\n * @param {Array.=} data.byweekno The weeks for the BYWEEKNO part\n * @param {Array.=} data.bymonth The month for the BYMONTH part\n * @param {Array.=} 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.=} BYSECOND The seconds for the BYSECOND part\n * @property {Array.=} BYMINUTE The minutes for the BYMINUTE part\n * @property {Array.=} BYHOUR The hours for the BYHOUR part\n * @property {Array.=} BYDAY The BYDAY values\n * @property {Array.=} BYMONTHDAY The days for the BYMONTHDAY part\n * @property {Array.=} BYYEARDAY The days for the BYYEARDAY part\n * @property {Array.=} BYWEEKNO The weeks for the BYWEEKNO part\n * @property {Array.=} BYMONTH The month for the BYMONTH part\n * @property {Array.=} 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.=} data.bysecond The seconds for the BYSECOND part\n * @param {Array.=} data.byminute The minutes for the BYMINUTE part\n * @param {Array.=} data.byhour The hours for the BYHOUR part\n * @param {Array.=} data.byday The BYDAY values\n * @param {Array.=} data.bymonthday The days for the BYMONTHDAY part\n * @param {Array.=} data.byyearday The days for the BYYEARDAY part\n * @param {Array.=} data.byweekno The weeks for the BYWEEKNO part\n * @param {Array.=} data.bymonth The month for the BYMONTH part\n * @param {Array.=} 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.icalendar.value['date-time'].fromICAL(value);\n } else {\n dict.until = design.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/**\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: vcardValues.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 name: \"ical\",\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 name: \"vcard4\",\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 name: \"vcard3\",\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};\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/**\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.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.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.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.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.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.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/**\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\nconst PROPERTY_NAME_INDEX = 0;\nconst PROPERTY_VALUE_INDEX = 3;\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 if (!parentDesign && this.name == \"vcard\") {\n // We can't decide on vcard3 vs vcard4 just based on the component name, the version number is\n // in the version property. We also can't use hydrated properties here because it would lead\n // to recursion, but the spec says that the version property needs to be the very first one.\n let versionProp = this.jCal[PROPERTY_INDEX]?.[0];\n\n if (versionProp && versionProp[PROPERTY_NAME_INDEX] == \"version\" && versionProp[PROPERTY_VALUE_INDEX] == \"3.0\") {\n return design.getDesignSet(\"vcard3\");\n }\n }\n\n return parentDesign || design.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/**\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 * Compare two ICAL.Time objects. When the second parameter is a DATE and the first parameter is\n * DATE-TIME, strip the time and compare only the days.\n *\n * @private\n * @param {Time} a The one object to compare\n * @param {Time} b The other object to compare\n */\n _compare_special(a, b) {\n if (!a.isDate && b.isDate)\n return new Time({ year: a.year, month: a.month, day: a.day }).compare(b);\n return a.compare(b);\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 // EXDATE can be in DATE format, but DTSTART is in DATE-TIME format\n compare = this._compare_special(this.last, this.exDate);\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 // When DTSTART is in DATE-TIME format, EXDATE is in DATE format and EXDATE is\n // the date of DTSTART, _compare_special finds this out and compareTime fails.\n this.exDateInc = binsearchInsert(\n this.exDates,\n this.last,\n this._compare_special\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/**\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=} 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.}\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/**\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/**\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,\n helpers\n};\n\nexport { ICALmodule as default };\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nexport default v4;\n","import './assets/index-CkcnNJJ0.css';\nimport { NcButton, NcDateTimePickerNative } from \"@nextcloud/vue\";\nimport IconDelete from \"vue-material-design-icons/TrashCanOutline.vue\";\nimport IconAdd from \"vue-material-design-icons/Plus.vue\";\nimport { getFirstDay } from \"@nextcloud/l10n\";\nimport { resolveComponent, createElementBlock, openBlock, Fragment, renderList, createElementVNode, createBlock, toDisplayString, createCommentVNode, createVNode, withCtx } from \"vue\";\nimport { getZoneString } from \"icalzone\";\nimport ICAL from \"ical.js\";\nimport { v4 } from \"uuid\";\nimport { getLoggerBuilder } from \"@nextcloud/logger\";\nconst _export_sfc = (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n};\nconst _sfc_main = {\n name: \"CalendarAvailability\",\n components: {\n NcDateTimePickerNative,\n NcButton,\n IconAdd,\n IconDelete\n },\n props: {\n slots: {\n type: Object,\n required: true\n },\n loading: {\n type: Boolean,\n default: false\n },\n l10nTo: {\n type: String,\n required: true\n },\n l10nDeleteSlot: {\n type: String,\n required: true\n },\n l10nEmptyDay: {\n type: String,\n required: true\n },\n l10nAddSlot: {\n type: String,\n required: true\n },\n l10nWeekDayListLabel: {\n type: String,\n default: \"Weekdays\"\n },\n l10nMonday: {\n type: String,\n required: true\n },\n l10nTuesday: {\n type: String,\n required: true\n },\n l10nWednesday: {\n type: String,\n required: true\n },\n l10nThursday: {\n type: String,\n required: true\n },\n l10nFriday: {\n type: String,\n required: true\n },\n l10nSaturday: {\n type: String,\n required: true\n },\n l10nSunday: {\n type: String,\n required: true\n },\n l10nStartPickerLabel: {\n type: Function,\n default: (dayName) => `Pick a start time for ${dayName}`\n },\n l10nEndPickerLabel: {\n type: Function,\n default: (dayName) => `Pick a end time for ${dayName}`\n }\n },\n data() {\n return {\n internalSlots: this.slotsToInternalData(this.slots)\n };\n },\n watch: {\n slots() {\n this.internalSlots = this.slotsToInternalData(this.slots);\n }\n },\n methods: {\n timeStampSlotsToDateObjectSlots(slots) {\n return slots.map((slot) => ({\n start: new Date(slot.start * 1e3),\n end: new Date(slot.end * 1e3)\n }));\n },\n slotsToInternalData() {\n const moToSa = [\n {\n id: \"MO\",\n displayName: this.l10nMonday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.MO)\n },\n {\n id: \"TU\",\n displayName: this.l10nTuesday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.TU)\n },\n {\n id: \"WE\",\n displayName: this.l10nWednesday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.WE)\n },\n {\n id: \"TH\",\n displayName: this.l10nThursday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.TH)\n },\n {\n id: \"FR\",\n displayName: this.l10nFriday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.FR)\n },\n {\n id: \"SA\",\n displayName: this.l10nSaturday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.SA)\n }\n ];\n const sunday = {\n id: \"SU\",\n displayName: this.l10nSunday,\n slots: this.timeStampSlotsToDateObjectSlots(this.slots.SU)\n };\n return getFirstDay() === 1 ? [...moToSa, sunday] : [sunday, ...moToSa];\n },\n internalDataToSlots() {\n const converted = {};\n this.internalSlots.forEach(({ id, slots }) => {\n converted[id] = slots.map((slot) => ({\n start: Math.round(slot.start.getTime() / 1e3),\n end: Math.round(slot.end.getTime() / 1e3)\n }));\n });\n return converted;\n },\n addSlot(day) {\n const start = /* @__PURE__ */ new Date();\n start.setHours(9, 0, 0, 0);\n const end = /* @__PURE__ */ new Date();\n end.setHours(17, 0, 0, 0);\n day.slots.push({\n start,\n end\n });\n this.onChangeSlots();\n },\n removeSlot(day, idx) {\n day.slots.splice(idx, 1);\n this.onChangeSlots();\n },\n onChangeSlots() {\n this.$emit(\"update:slots\", this.internalDataToSlots());\n }\n }\n};\nconst _hoisted_1 = [\"aria-label\"];\nconst _hoisted_2 = { class: \"label-weekday\" };\nconst _hoisted_3 = [\"id\"];\nconst _hoisted_4 = { class: \"availability-slot-group\" };\nconst _hoisted_5 = { class: \"to-text\" };\nconst _hoisted_6 = {\n key: 0,\n class: \"empty-content\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcDateTimePickerNative = resolveComponent(\"NcDateTimePickerNative\");\n const _component_IconDelete = resolveComponent(\"IconDelete\");\n const _component_NcButton = resolveComponent(\"NcButton\");\n const _component_IconAdd = resolveComponent(\"IconAdd\");\n return openBlock(), createElementBlock(\"ul\", {\n class: \"week-day-container\",\n \"aria-label\": $props.l10nWeekDayListLabel\n }, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($data.internalSlots, (day) => {\n return openBlock(), createElementBlock(\"li\", {\n key: `day-label-${day.id}`,\n class: \"day-container\"\n }, [\n createElementVNode(\"div\", _hoisted_2, [\n createElementVNode(\"span\", {\n id: day.displayName + \"-label\"\n }, toDisplayString(day.displayName), 9, _hoisted_3)\n ]),\n (openBlock(), createElementBlock(\"div\", {\n key: `day-slots-${day.id}`,\n class: \"availability-slots\"\n }, [\n createElementVNode(\"div\", _hoisted_4, [\n (openBlock(true), createElementBlock(Fragment, null, renderList(day.slots, (slot, idx) => {\n return openBlock(), createElementBlock(\"div\", {\n key: `slot-${day.id}-${idx}`,\n class: \"availability-slot\"\n }, [\n createVNode(_component_NcDateTimePickerNative, {\n id: `start-${day.id}-${idx}`,\n modelValue: slot.start,\n \"onUpdate:modelValue\": ($event) => slot.start = $event,\n type: \"time\",\n label: $props.l10nStartPickerLabel?.(day.displayName),\n \"hide-label\": true,\n class: \"start-date\",\n onChange: $options.onChangeSlots\n }, null, 8, [\"id\", \"modelValue\", \"onUpdate:modelValue\", \"label\", \"onChange\"]),\n createElementVNode(\"span\", _hoisted_5, toDisplayString($props.l10nTo), 1),\n createVNode(_component_NcDateTimePickerNative, {\n id: `end-${day.id}-${idx}`,\n modelValue: slot.end,\n \"onUpdate:modelValue\": ($event) => slot.end = $event,\n type: \"time\",\n label: $props.l10nEndPickerLabel?.(day.displayName),\n \"hide-label\": true,\n class: \"end-date\",\n onChange: $options.onChangeSlots\n }, null, 8, [\"id\", \"modelValue\", \"onUpdate:modelValue\", \"label\", \"onChange\"]),\n (openBlock(), createBlock(_component_NcButton, {\n key: `slot-${day.id}-${idx}-btn`,\n type: \"tertiary\",\n class: \"button\",\n \"aria-label\": $props.l10nDeleteSlot,\n title: $props.l10nDeleteSlot,\n onClick: ($event) => $options.removeSlot(day, idx)\n }, {\n icon: withCtx(() => [\n createVNode(_component_IconDelete, { size: 20 })\n ]),\n _: 2\n }, 1032, [\"aria-label\", \"title\", \"onClick\"]))\n ]);\n }), 128))\n ]),\n day.slots.length === 0 ? (openBlock(), createElementBlock(\"span\", _hoisted_6, toDisplayString($props.l10nEmptyDay), 1)) : createCommentVNode(\"\", true)\n ])),\n (openBlock(), createBlock(_component_NcButton, {\n key: `add-slot-${day.id}`,\n disabled: $props.loading,\n class: \"add-another button\",\n title: $props.l10nAddSlot,\n \"aria-label\": $props.l10nAddSlot,\n onClick: ($event) => $options.addSlot(day)\n }, {\n icon: withCtx(() => [\n createVNode(_component_IconAdd, { size: 20 })\n ]),\n _: 2\n }, 1032, [\"disabled\", \"title\", \"aria-label\", \"onClick\"]))\n ]);\n }), 128))\n ], 8, _hoisted_1);\n}\nconst CalendarAvailability = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-3ef03e87\"]]);\nconst logger = getLoggerBuilder().detectUser().setApp(\"@nextcloud/calendar-availability-vue\").build();\nfunction getEmptySlots() {\n return {\n MO: [],\n TU: [],\n WE: [],\n TH: [],\n FR: [],\n SA: [],\n SU: []\n };\n}\nfunction vavailabilityToSlots(vavailability) {\n const parsedIcal = ICAL.parse(vavailability);\n const vcalendarComp = new ICAL.Component(parsedIcal);\n const vavailabilityComp = vcalendarComp.getFirstSubcomponent(\"vavailability\");\n let timezoneId;\n const timezoneComp = vcalendarComp.getFirstSubcomponent(\"vtimezone\");\n if (timezoneComp) {\n timezoneId = timezoneComp.getFirstProperty(\"tzid\").getFirstValue();\n }\n const availableComps = vavailabilityComp.getAllSubcomponents(\"available\");\n const slots = getEmptySlots();\n availableComps.forEach((availableComp) => {\n const startIcalDate = availableComp.getFirstProperty(\"dtstart\").getFirstValue();\n const endIcalDate = availableComp.getFirstProperty(\"dtend\").getFirstValue();\n const rrule = availableComp.getFirstProperty(\"rrule\");\n const start = /* @__PURE__ */ new Date();\n start.setHours(startIcalDate.hour, startIcalDate.minute, 0, 0);\n const end = /* @__PURE__ */ new Date();\n end.setHours(endIcalDate.hour, endIcalDate.minute, 0, 0);\n if (rrule.getFirstValue().freq !== \"WEEKLY\") {\n logger.warn(\"rrule not supported\", {\n rrule: rrule.toICALString()\n });\n return;\n }\n rrule.getFirstValue().getComponent(\"BYDAY\").forEach((day) => {\n slots[day].push({\n start: start.getTime() / 1e3,\n end: end.getTime() / 1e3\n });\n });\n });\n return {\n slots,\n timezoneId\n };\n}\nfunction slotsToVavailability(slots, timezoneId) {\n const vcalendarComp = new ICAL.Component(\"vcalendar\");\n vcalendarComp.addPropertyWithValue(\"prodid\", \"Nextcloud DAV app\");\n const predefinedTimezoneIcal = getZoneString(timezoneId);\n if (predefinedTimezoneIcal) {\n const timezoneComp = new ICAL.Component(ICAL.parse(predefinedTimezoneIcal));\n vcalendarComp.addSubcomponent(timezoneComp);\n } else {\n const timezoneComp = new ICAL.Component(\"vtimezone\");\n timezoneComp.addPropertyWithValue(\"tzid\", timezoneId);\n vcalendarComp.addSubcomponent(timezoneComp);\n }\n const vavailabilityComp = new ICAL.Component(\"vavailability\");\n const deduplicated = slots.reduce((acc, slot) => {\n const start = new Date(slot.start * 1e3);\n const end = new Date(slot.end * 1e3);\n const key = [\n start.getHours(),\n start.getMinutes(),\n end.getHours(),\n end.getMinutes()\n ].join(\"-\");\n return {\n ...acc,\n [key]: [...acc[key] ?? [], slot]\n };\n }, {});\n Object.keys(deduplicated).map((key) => {\n const slots2 = deduplicated[key];\n const start = slots2[0].start;\n const end = slots2[0].end;\n const days = slots2.map((slot) => slot.day).filter((day, index, self) => self.indexOf(day) === index);\n const availableComp = new ICAL.Component(\"available\");\n const startTimeProp = availableComp.addPropertyWithValue(\"dtstart\", ICAL.Time.fromJSDate(new Date(start * 1e3), false));\n startTimeProp.setParameter(\"tzid\", timezoneId);\n const endTimeProp = availableComp.addPropertyWithValue(\"dtend\", ICAL.Time.fromJSDate(new Date(end * 1e3), false));\n endTimeProp.setParameter(\"tzid\", timezoneId);\n availableComp.addPropertyWithValue(\"uid\", v4());\n availableComp.addPropertyWithValue(\"rrule\", {\n freq: \"WEEKLY\",\n byday: days\n });\n return availableComp;\n }).map(vavailabilityComp.addSubcomponent.bind(vavailabilityComp));\n vcalendarComp.addSubcomponent(vavailabilityComp);\n return vcalendarComp.toString();\n}\nexport {\n CalendarAvailability,\n getEmptySlots,\n slotsToVavailability,\n vavailabilityToSlots\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { WebDAVClient } from 'webdav'\n\nimport { getCurrentUser, getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth'\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { createClient } from 'webdav'\n\nlet client: WebDAVClient | undefined = undefined\n\n/**\n * Get the WebDAV client for the current user on the calendars endpoint.\n */\nexport function getClient(): WebDAVClient {\n\tif (!client) {\n\t\t// init webdav client\n\t\tconst remote = generateRemoteUrl(`dav/calendars/${getCurrentUser()!.uid}`)\n\t\tclient = createClient(remote)\n\n\t\t// set CSRF token header\n\t\tconst setHeaders = (token) => {\n\t\t\tclient!.setHeaders({\n\t\t\t\t// Add this so the server knows it is an request from the browser\n\t\t\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t\t\t// Inject user auth\n\t\t\t\trequesttoken: token ?? '',\n\t\t\t})\n\t\t}\n\n\t\t// refresh headers when request token changes\n\t\tonRequestTokenUpdate(setHeaders)\n\t\tsetHeaders(getRequestToken())\n\t}\n\n\treturn client\n}\n","/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport {\n\tslotsToVavailability,\n\tvavailabilityToSlots,\n} from '@nextcloud/calendar-availability-vue'\nimport { parseXML } from 'webdav'\nimport { getClient } from '../dav/client.ts'\nimport { logger } from './logger.ts'\n\n/**\n * Get an object representing empty time slots for each day of the week.\n */\nexport function getEmptySlots() {\n\treturn {\n\t\tMO: [],\n\t\tTU: [],\n\t\tWE: [],\n\t\tTH: [],\n\t\tFR: [],\n\t\tSA: [],\n\t\tSU: [],\n\t}\n}\n\n/**\n * Find the availability of the schedule inbox.\n */\nexport async function findScheduleInboxAvailability() {\n\tconst response = await getClient().customRequest('inbox', {\n\t\tmethod: 'PROPFIND',\n\t\tdata: `\n\t\t\t\n\t\t\t \n\t\t\t\t\n\t\t\t \n\t\t\t`,\n\t})\n\n\tconst xml = await parseXML(await response.text())\n\n\tif (!xml) {\n\t\treturn undefined\n\t}\n\n\tconst availability = xml?.multistatus?.response[0]?.propstat?.prop['calendar-availability']\n\tif (!availability) {\n\t\treturn undefined\n\t}\n\n\treturn vavailabilityToSlots(availability)\n}\n\n/**\n * Save the availability of the schedule inbox.\n *\n * @param slots - The availability slots to save.\n * @param timezoneId - The timezone identifier.\n */\nexport async function saveScheduleInboxAvailability(slots, timezoneId) {\n\tconst all = [...Object.keys(slots).flatMap((dayId) => slots[dayId].map((slot) => ({\n\t\t...slot,\n\t\tday: dayId,\n\t})))]\n\n\tconst vavailability = slotsToVavailability(all, timezoneId)\n\n\tlogger.debug('New availability ical created', {\n\t\tvavailability,\n\t})\n\n\tawait getClient().customRequest('inbox', {\n\t\tmethod: 'PROPPATCH',\n\t\tdata: `\n\t\t\t\n\t\t\t \n\t\t\t\t\n\t\t\t\t ${vavailability}\n\t\t\t\t\n\t\t\t \n\t\t\t`,\n\t})\n}\n","/*!\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Enable user status automation based on availability\n */\nexport async function enableUserStatusAutomation(): Promise {\n\tawait axios.post(\n\t\tgenerateOcsUrl('/apps/provisioning_api/api/v1/config/users/{appId}/{configKey}', {\n\t\t\tappId: 'dav',\n\t\t\tconfigKey: 'user_status_automation',\n\t\t}),\n\t\t{\n\t\t\tconfigValue: 'yes',\n\t\t},\n\t)\n}\n\n/**\n * Disable user status automation based on availability\n */\nexport async function disableUserStatusAutomation(): Promise {\n\tawait axios.delete(generateOcsUrl('/apps/provisioning_api/api/v1/config/users/{appId}/{configKey}', {\n\t\tappId: 'dav',\n\t\tconfigKey: 'user_status_automation',\n\t}))\n}\n","\n\n\n\n\n\n\n","\n\n\n\n\n","/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { createApp } from 'vue'\nimport UserAvailability from './views/UserAvailability.vue'\n\nconst app = createApp(UserAvailability)\napp.mount('#settings-personal-availability')\n"],"names":["margin","defaultSize","_sfc_main","NcAvatar","_sfc_main$1","NcIconSvgWrapper","userStatus","margin2","EMAIL_NOTATION","match","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","_component_NcAvatar","resolveComponent","_component_NcHighlight","_component_NcIconSvgWrapper","openBlock","createElementBlock","normalizeClass","normalizeStyle","createVNode","mergeProps","createElementVNode","createBlock","toDisplayString","createCommentVNode","renderSlot","NcListItemIcon","_export_sfc","defineComponent","mergeModels","__props","__emit","modelValue","useModel","emit","search","ref","watch","clickableArea","gridBaseLine","avatarSize","filterBy","option","label","search2","subname","unref","NcSelect","$event","withCtx","selectedOption","NcSelectUsers","ShareType","formatDateAsYMD","date","year","month","day","NcButton","NcTextField","NcTextArea","NcDateTimePickerNative","t","firstDay","lastDay","status","message","replacementUserId","replacementUserDisplayName","loadState","result","query","shareType","request","axios","generateOcsUrl","error","logger","data","exact","rawExactSuggestions","rawSuggestions","exactSuggestions","share","suggestions","allSuggestions","nameCounts","item","debounce","args","getCurrentUser","showSuccess","showError","_createElementBlock","_createElementVNode","_createVNode","_component_NcDateTimePickerNative","_toDisplayString","_component_NcSelectUsers","_component_NcTextField","_component_NcTextArea","_component_NcButton","zones","dist","zones_1","require$$0","renderZoneSub","n","f","r","s","getZoneLines","zoneName","includeWrapper","zoneData","d","getZoneString","Binary","aString","aValue","b64","o1","o2","o3","h1","h2","h3","h4","bits","i","ac","enc","tmp_arr","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","hasWeeks","letter","number","object","num","isStrictlyNaN","Period","parts","options","Time","end","aProp","aLenient","fromDateOrDateTimeString","dateProp","dt","_daysInMonth","days","aDayOfYear","aYear","doy","tt","is_leap","strictParseInt","zone","zoneId","Timezone","timeData","aProperty","aDate","useUTC","aZone","aWeekStart","dow","wkst","yr","LTRS","dom","#epochTime","a","b","attr","val","hour","minute","second","timezone","key","value","TimezoneService","firstDow","dowCacheKey","q","m","Y","h","aFirstDayOfWeek","delta","aDayOfWeek","aPos","daysInMonth","weekday","start","otherDay","startDow","offset","endDow","wnCacheKey","week1","isoyear","daysBetween","answer","aDuration","mult","unixTime","other","tz","rc","copy","zone_equals","design","pad2","aExtraDays","aExtraHours","aExtraMinutes","aExtraSeconds","aTime","minutesOverflow","hoursOverflow","daysOverflow","yearsOverflow","time","ms","len","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","parsedParamLength","accumulator","currentValue","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","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","utc","tzid","updateTimezones","vcal","allsubs","properties","vtimezones","reqTzid","comp","formatClassType","list","seekVal","cmpfunc","low","high","mid","cmpval","aSrc","aDeep","arr","obj","foldline","aLine","line_length","cp","ICALmodule","extend","source","target","descr","helpers","UtcOffset","instance","factor","VCardTime","aIcalType","part","v","e","tmz","splitzone","tm","dtlen","tmlen","hasDashDate","hasDashTime","o","icaltype","y","mm","hasYear","hasMonth","hasDay","hasHour","hasMinute","hasSecond","datepart","timepart","RecurIterator","Recur","InvalidRecurrenceRuleError","wkdy","dayName","untilYear","tempLast","initLast","bydow","dayOfMonth","normalized","again","before","valid","invalid_count","inc","this_freq","end_of_data","week_no","rules","newRules","ruleIdx","rule","isInit","byMonthDay","byDay","dateIdx","dateLen","dayLen","dataIsValid","self","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","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","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","PROPERTY_NAME_INDEX","PROPERTY_VALUE_INDEX","parentDesign","versionProp","jCalLen","jCalIndex","cache","nameOrObject","objects","cached","nameOrComp","removed","nameOrProp","hydratedZone","RecurExpansion","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","byteToHex","unsafeStringify","getRandomValues","rnds8","rng","randomUUID","native","_v4","buf","rnds","v4","sfc","IconAdd","IconDelete","slots","slot","moToSa","sunday","getFirstDay","converted","_hoisted_5","_hoisted_6","_component_IconDelete","_component_IconAdd","Fragment","renderList","CalendarAvailability","getLoggerBuilder","getEmptySlots","vavailabilityToSlots","vavailability","parsedIcal","ICAL","vcalendarComp","vavailabilityComp","timezoneId","timezoneComp","availableComps","availableComp","startIcalDate","endIcalDate","slotsToVavailability","predefinedTimezoneIcal","deduplicated","acc","slots2","client","getClient","remote","generateRemoteUrl","createClient","setHeaders","token","onRequestTokenUpdate","getRequestToken","findScheduleInboxAvailability","response","xml","parseXML","availability","saveScheduleInboxAvailability","all","dayId","enableUserStatusAutomation","disableUserStatusAutomation","getCapabilities","loading","saving","automated","onMounted","slotData","save","_unref","NcCheckboxRadioSwitch","hideAbsenceSettings","NcSettingsSection","AvailabilityForm","_createBlock","AbsenceForm","app","createApp","UserAvailability"],"mappings":"8mBAYA,MAAMA,GAAS,EACTC,GAAc,GACdC,GAAY,CAChB,KAAM,iBACN,WAAY,CACV,SAAAC,GACA,YAAaC,GACb,iBAAAC,EACJ,EACE,OAAQ,CACNC,EACJ,EACE,MAAO,CAIL,KAAM,CACJ,KAAM,OACN,SAAU,EAChB,EAKI,QAAS,CACP,KAAM,OACN,QAAS,EACf,EAII,KAAM,CACJ,KAAM,OACN,QAAS,EACf,EAII,QAAS,CACP,KAAM,OACN,QAAS,EACf,EAII,SAAU,CACR,KAAM,OACN,QAAS,EACf,EAII,OAAQ,CACN,KAAM,OACN,QAAS,EACf,EAKI,WAAY,CACV,KAAM,OACN,QAASL,EACf,EAKI,SAAU,CACR,KAAM,QACN,QAAS,EACf,EAKI,YAAa,CACX,KAAM,OACN,QAAS,IACf,EAKI,SAAU,CACR,KAAM,QACN,QAAS,EACf,EAII,GAAI,CACF,KAAM,OACN,QAAS,IACf,CACA,EACE,OAAQ,CACN,MAAO,CACL,OAAAD,GACA,YAAAC,EACN,CACE,EACA,SAAU,CACR,SAAU,CACR,OAAO,KAAK,OAAS,EACvB,EACA,YAAa,CACX,OAAO,KAAK,UAAY,EAC1B,EACA,gBAAiB,CACf,OAAO,KAAK,SAAS,OAAI,IAAS,EACpC,EACA,iBAAkB,CAChB,OAAO,KAAK,YAAc,EAC5B,EACA,SAAU,CACR,MAAMM,EAAU,KAAK,SAAW,EAAI,KAAK,OACzC,MAAO,CACL,WAAY,KAAK,WAAa,EAAIA,EAAU,KAC5C,WAAY,KAAK,OAAS,IAClC,CACI,EAMA,aAAc,CACZ,MAAMC,EAAiB,sBACjBC,EAAQ,KAAK,OAAO,MAAMD,CAAc,EAC9C,OAAI,KAAK,UAAY,CAACC,EACb,CAAC,KAAK,OAAQ,KAAK,MAAM,EAE3B,CAACA,EAAM,CAAC,EAAE,KAAI,EAAIA,EAAM,CAAC,CAAC,CACnC,CACJ,EACE,aAAc,CACR,CAAC,KAAK,UAAY,CAAC,KAAK,SAC1B,KAAK,gBAAgB,KAAK,IAAI,CAElC,CACF,EACMC,GAAa,CAAC,IAAI,EAClBC,GAAa,CAAE,MAAO,iBAAiB,EACvCC,GAAa,CAAE,IAAK,CAAC,EACrBC,GAAa,CAAC,YAAY,EAChC,SAASC,GAAYC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,EAAU,CAClE,MAAMC,EAAsBC,EAAiB,UAAU,EACjDC,EAAyBD,EAAiB,aAAa,EACvDE,EAA8BF,EAAiB,kBAAkB,EACvE,OAAOG,EAAS,EAAIC,EAAmB,OAAQ,CAC7C,GAAIT,EAAO,GACX,MAAOU,GAAe,CAAC,SAAU,CAAE,kBAAmBV,EAAO,WAAaC,EAAO,WAAW,CAAE,CAAC,EAC/F,MAAOU,GAAeR,EAAS,OAAO,CAC1C,EAAK,CACDS,EAAYR,EAAqBS,GAAWf,EAAK,OAAQ,CACvD,eAAgB,GAChB,kBAAmB,GACnB,eAAgBE,EAAO,aAAeA,EAAO,KAC7C,aAAcA,EAAO,SACrB,KAAMA,EAAO,WACb,MAAO,gBACb,CAAK,EAAG,KAAM,GAAI,CAAC,eAAgB,aAAc,MAAM,CAAC,EACpDc,EAAmB,MAAOpB,GAAY,CACpCkB,EAAYN,EAAwB,CAClC,MAAO,kBACP,KAAMN,EAAO,KACb,OAAQG,EAAS,YAAY,CAAC,CACtC,EAAS,KAAM,EAAG,CAAC,OAAQ,QAAQ,CAAC,EAC9BA,EAAS,gBAAkBA,EAAS,iBAAmBK,EAAS,EAAIO,GAAYT,EAAwB,CACtG,IAAK,EACL,MAAO,kBACP,KAAMN,EAAO,QACb,OAAQG,EAAS,YAAY,CAAC,CACtC,EAAS,KAAM,EAAG,CAAC,OAAQ,QAAQ,CAAC,GAAKL,EAAK,WAAaU,EAAS,EAAIC,EAAmB,OAAQd,GAAY,CACvGmB,EAAmB,OAAQ,KAAME,EAAgBlB,EAAK,WAAW,IAAI,EAAG,CAAC,EACzEgB,EAAmB,OAAQ,KAAME,EAAgBlB,EAAK,WAAW,OAAO,EAAG,CAAC,CACpF,CAAO,GAAKmB,GAAmB,GAAI,EAAI,CACvC,CAAK,EACDC,GAAWpB,EAAK,OAAQ,UAAW,CAAA,EAAI,IAAM,CAC3CK,EAAS,YAAcK,IAAaO,GAAYR,EAA6B,CAC3E,IAAK,EACL,MAAO,eACP,IAAKP,EAAO,QACZ,KAAMA,EAAO,QACrB,EAAS,KAAM,EAAG,CAAC,MAAO,MAAM,CAAC,GAAKG,EAAS,SAAWK,IAAaC,EAAmB,OAAQ,CAC1F,IAAK,EACL,MAAOC,GAAe,CAAC,oBAAqBV,EAAO,IAAI,CAAC,EACxD,aAAcA,EAAO,QAC7B,EAAS,KAAM,GAAIJ,EAAU,GAAKqB,GAAmB,GAAI,EAAI,CAC7D,EAAO,EAAI,CACX,EAAK,GAAIxB,EAAU,CACnB,CACA,MAAM0B,GAAiCC,GAAYnC,GAAW,CAAC,CAAC,SAAUY,EAAW,EAAG,CAAC,YAAa,iBAAiB,CAAC,CAAC,ECxMnHZ,GAA4BoC,GAAgB,CAChD,OAAQ,gBACR,MAAuBC,GAAY,CACjC,uBAAwB,CAAA,EACxB,iBAAkB,CAAA,EAClB,wBAAyB,CAAE,KAAM,QAAQ,EACzC,SAAU,CAAE,KAAM,OAAO,EACzB,QAAS,CAAA,EACT,WAAY,CAAA,EACZ,aAAc,CAAE,KAAM,OAAO,EAC7B,SAAU,CAAE,KAAM,OAAO,EACzB,QAAS,CAAE,KAAM,OAAO,EACxB,SAAU,CAAE,KAAM,OAAO,EACzB,OAAQ,CAAE,KAAM,OAAO,EACvB,QAAS,CAAA,EACT,YAAa,CAAA,EACb,SAAU,CAAE,KAAM,OAAO,CAC7B,EAAK,CACD,WAAc,CAAA,EACd,eAAkB,CAAA,CACtB,CAAG,EACD,MAAuBA,GAAY,CAAC,QAAQ,EAAG,CAAC,mBAAmB,CAAC,EACpE,MAAMC,EAAS,CAAE,KAAMC,CAAM,EAAI,CAC/B,MAAMC,EAAaC,GAASH,EAAS,YAAY,EAC3CI,EAAOH,EACPI,EAASC,GAAI,EAAE,EACrBC,GAAMF,EAAQ,IAAMD,EAAK,SAAUC,EAAO,KAAK,CAAC,EAChD,MAAMG,EAAgB,OAAO,SAAS,OAAO,iBAAiB,SAAS,IAAI,EAAE,iBAAiB,0BAA0B,CAAC,EACnHC,EAAe,OAAO,SAAS,OAAO,iBAAiB,SAAS,IAAI,EAAE,iBAAiB,yBAAyB,CAAC,EACjHC,EAAaF,EAAgB,EAAIC,EACvC,SAASE,EAASC,EAAQC,EAAOC,EAAS,CACxC,MAAM9C,EAAiB,gBACjBC,EAAQ6C,EAAQ,MAAM9C,CAAc,EACpC+C,EAAUH,EAAO,SAAS,kBAAiB,GAAM,GACvD,OAAO3C,GAAS8C,EAAQ,QAAQ9C,EAAM,CAAC,EAAE,kBAAiB,CAAE,EAAI,IAAM,GAAG4C,CAAK,IAAID,EAAO,OAAO,GAAG,oBAAoB,QAAQE,EAAQ,kBAAiB,CAAE,EAAI,EAChK,CACA,MAAO,CAACvC,EAAMC,KACLS,EAAS,EAAIO,GAAYwB,EAAMC,EAAQ,EAAG3B,GAAW,CAC1D,WAAYY,EAAW,MACvB,sBAAuB1B,EAAO,CAAC,IAAMA,EAAO,CAAC,EAAK0C,GAAWhB,EAAW,MAAQgB,GAChF,MAAO,iBACf,EAAS3C,EAAK,OAAQ,CACd,YAAaoC,EACb,MAAO,cACP,SAAUnC,EAAO,CAAC,IAAMA,EAAO,CAAC,EAAK0C,GAAWb,EAAO,MAAQa,EACvE,CAAO,EAAG,CACF,OAAQC,EAASP,GAAW,CAC1BvB,EAAY2B,EAAMpB,EAAc,EAAGN,GAAWsB,EAAQ,CACpD,cAAe,GACf,KAAMA,EAAO,YACb,OAAQP,EAAO,KAC3B,CAAW,EAAG,KAAM,GAAI,CAAC,OAAQ,QAAQ,CAAC,CAC1C,CAAS,EACD,kBAAmBc,EAASC,GAAmB,CAC7C/B,EAAY2B,EAAMpB,EAAc,EAAGN,GAAW8B,EAAgB,CAC5D,cAAeV,EACf,KAAMU,EAAe,YACrB,YAAa,GACb,OAAQf,EAAO,KAC3B,CAAW,EAAG,KAAM,GAAI,CAAC,OAAQ,QAAQ,CAAC,CAC1C,CAAS,EACD,EAAG,CACX,EAAS,GAAI,CAAC,YAAY,CAAC,EAEzB,CACF,CAAC,EACKgB,GAAgCxB,GAAYnC,GAAW,CAAC,CAAC,YAAa,iBAAiB,CAAC,CAAC,ECnExF,IAAI4D,IACV,SAAUA,EAAW,CAClBA,EAAUA,EAAU,KAAU,CAAC,EAAI,OACnCA,EAAUA,EAAU,MAAW,CAAC,EAAI,QACpCA,EAAUA,EAAU,KAAU,CAAC,EAAI,OACnCA,EAAUA,EAAU,MAAW,CAAC,EAAI,QACpCA,EAAUA,EAAU,OAAY,CAAC,EAAI,SAIrCA,EAAUA,EAAU,KAAU,CAAC,EAAI,OACnCA,EAAUA,EAAU,MAAW,CAAC,EAAI,QACpCA,EAAUA,EAAU,YAAiB,CAAC,EAAI,cAC1CA,EAAUA,EAAU,KAAU,EAAE,EAAI,OACpCA,EAAUA,EAAU,KAAU,EAAE,EAAI,OAIpCA,EAAUA,EAAU,eAAoB,EAAE,EAAI,iBAM9CA,EAAUA,EAAU,YAAiB,EAAE,EAAI,aAC/C,GAAGA,KAAcA,GAAY,CAAA,EAAG,ECnBzB,SAASC,GAAgBC,EAA6C,CAC5E,MAAMC,EAAOD,EAAK,YAAA,EACZE,GAASF,EAAK,SAAA,EAAa,GAAG,WAAW,SAAS,EAAG,GAAG,EACxDG,EAAMH,EAAK,QAAA,EAAU,WAAW,SAAS,EAAG,GAAG,EACrD,MAAO,GAAGC,CAAI,IAAIC,CAAK,IAAIC,CAAG,EAC/B,CCmDA,MAAKjE,GAAU,CACd,KAAM,cACN,WAAY,CACX,SAAAkE,eACAC,GACA,WAAAC,GACA,uBAAAC,GACA,cAAAV,IAGD,OAAQ,CACP,MAAO,GAAEW,CAAA,CACV,EAEA,MAAO,CACN,KAAM,CAAE,SAAAC,EAAU,QAAAC,EAAS,OAAAC,EAAQ,QAAAC,EAAS,kBAAAC,EAAmB,2BAAAC,GAA+BC,GAAU,MAAO,UAAW,CAAA,CAAE,EAC5H,MAAO,CACN,QAAS,GACT,OAAQJ,GAAU,GAClB,QAASC,GAAW,GACpB,SAAUH,EAAW,IAAI,KAAKA,CAAQ,EAAI,IAAI,KAC9C,QAASC,EAAU,IAAI,KAAKA,CAAO,EAAI,KACvC,kBAAAG,EACA,gBAAiBA,EAAoB,CAAE,KAAMA,EAAmB,YAAaC,CAAyB,EAAM,KAC5G,cAAe,GACf,QAAS,CAAA,CACV,CACD,EAEA,SAAU,CAIT,OAAQ,CAEP,MAAML,EAAW,IAAI,KAAK,KAAK,UAAU,QAAO,CAAE,EAC5CC,EAAU,IAAI,KAAK,KAAK,SAAS,QAAO,CAAE,EAChD,OAAAD,GAAU,SAAS,EAAG,EAAG,EAAG,CAAC,EAC7BC,GAAS,SAAS,EAAG,EAAG,EAAG,CAAC,EAErB,CAAC,CAAC,KAAK,UACV,CAAC,CAAC,KAAK,SACP,CAAC,CAAC,KAAK,QACP,CAAC,CAAC,KAAK,SACPA,GAAWD,CAChB,GAGD,QAAS,CACR,WAAY,CACX,KAAK,OAAS,GACd,KAAK,QAAU,GACf,KAAK,SAAW,IAAI,KACpB,KAAK,QAAU,IAChB,EAQA,qBAAqBO,EAAQ,CAC5B,MAAO,CACN,KAAMA,EAAO,MAAQA,EAAO,MAAM,UAClC,YAAaA,EAAO,MAAQA,EAAO,MACnC,SAAUA,EAAO,IAAM,EACxB,CACD,EAEA,MAAM,UAAUC,EAAO,CACtB,KAAK,cAAgB,GACrB,MAAM,KAAK,uBAAuBA,EAAM,KAAI,CAAE,CAC/C,EAOA,MAAM,eAAepC,EAAQ,CAC5B,MAAMqC,EAAY,CACjBpB,GAAU,IACX,EAEA,IAAIqB,EAAU,KACd,GAAI,CACHA,EAAU,MAAMC,GAAM,IAAIC,GAAe,mCAAmC,EAAG,CAC9E,OAAQ,CACP,OAAQ,OACR,SAAU,OACV,OAAAxC,EACA,UAAAqC,GAED,CACF,OAASI,EAAO,CACfC,EAAO,MAAM,6BAA8B,CAAE,MAAAD,CAAI,CAAG,EACpD,MACD,CAEA,MAAME,EAAOL,EAAQ,KAAK,IAAI,KACxBM,EAAQN,EAAQ,KAAK,IAAI,KAAK,MACpCK,EAAK,MAAQ,CAAA,EACb,MAAME,EAAsBD,EAAM,MAC5BE,EAAiBH,EAAK,MAC5BD,EAAO,KAAK,8BAA+B,CAAE,oBAAAG,EAAqB,eAAAC,EAAgB,EAElF,MAAMC,EAAmBF,EACvB,IAAKG,GAAU,KAAK,qBAAqBA,CAAK,CAAC,EAC3CC,EAAcH,EAClB,IAAKE,GAAU,KAAK,qBAAqBA,CAAK,CAAC,EAE3CE,EAAiBH,EAAiB,OAAOE,CAAW,EAGpDE,EAAaD,EAAe,OAAO,CAACC,EAAYhB,KAChDA,EAAO,cAGPgB,EAAWhB,EAAO,WAAW,IACjCgB,EAAWhB,EAAO,WAAW,EAAI,GAElCgB,EAAWhB,EAAO,WAAW,KACtBgB,GACL,CAAA,CAAE,EAEL,KAAK,QAAUD,EAAe,IAAKE,GAE9BD,EAAWC,EAAK,WAAW,EAAI,GAAK,CAACA,EAAK,KACtC,CAAE,GAAGA,EAAM,KAAMA,EAAK,0BAAyB,EAEhDA,CACP,EAED,KAAK,cAAgB,GACrBV,EAAO,KAAK,0BAA2B,CAAE,QAAS,KAAK,OAAM,CAAG,CACjE,EAOA,uBAAwBW,GAAS,YAAYC,EAAM,CAClD,KAAK,eAAe,GAAGA,CAAI,CAC5B,EAAG,GAAG,EAEN,MAAM,UAAW,CAChB,GAAK,KAAK,MAIV,CAAA,KAAK,QAAU,GACf,GAAI,CACH,MAAMf,GAAM,KAAKC,GAAe,wCAAyC,CAAE,OAAQe,GAAc,EAAG,GAAE,CAAG,EAAG,CAC3G,SAAUrC,GAAgB,KAAK,QAAQ,EACvC,QAASA,GAAgB,KAAK,OAAO,EACrC,OAAQ,KAAK,OACb,QAAS,KAAK,QACd,kBAAmB,KAAK,iBAAiB,MAAQ,KACjD,EACDsC,GAAY7B,EAAE,MAAO,eAAe,CAAC,CACtC,OAASc,EAAO,CACfgB,GAAU9B,EAAE,MAAO,sCAAsC,CAAC,EAC1De,EAAO,MAAM,yBAA0B,CAAE,MAAAD,EAAO,CACjD,SACC,KAAK,QAAU,EAChB,CAAA,CACD,EAEA,MAAM,cAAe,CACpB,KAAK,QAAU,GACf,GAAI,CACH,MAAMF,GAAM,OAAOC,GAAe,wCAAyC,CAAE,OAAQe,KAAiB,IAAK,CAAC,EAC5G,KAAK,UAAS,EACdC,GAAY7B,EAAE,MAAO,iBAAiB,CAAC,CACxC,OAASc,EAAO,CACfgB,GAAU9B,EAAE,MAAO,uCAAuC,CAAC,EAC3De,EAAO,MAAM,0BAA2B,CAAE,MAAAD,EAAO,CAClD,QAAA,CACC,KAAK,QAAU,EAChB,CACD,EAEF,EAnPO5E,GAAA,CAAA,MAAM,gBAAgB,EAcpBC,GAAA,CAAA,IAAI,0BAA0B,EAWhCC,GAAA,CAAA,MAAM,kBAAkB,oJA1B9B2F,EAwCO,OAAA,CAxCD,MAAM,UAAW,gCAAgBnF,EAAA,UAAAA,EAAA,SAAA,GAAA+E,CAAA,EAAQ,CAAA,SAAA,CAAA,KAC9CK,EAaM,MAbN9F,GAaM,CAZL+F,EAKoBC,EAAA,CAJnB,GAAG,+BACMvF,EAAA,8CAAAA,EAAA,SAAQuC,GAChB,MAAOxC,EAAA,EAAC,MAAA,WAAA,EACT,MAAM,yBACL,SAAU,mCACZuF,EAKoBC,EAAA,CAJnB,GAAG,8BACMvF,EAAA,6CAAAA,EAAA,QAAOuC,GACf,MAAOxC,EAAA,EAAC,MAAA,sBAAA,EACT,MAAM,yBACL,SAAU,qCAEbsF,EAAoG,QAApG7F,GAAoGgG,EAA3DzF,EAAA,EAAC,MAAA,sCAAA,CAAA,EAAA,CAAA,EAC1CuF,EAMuBG,EAAA,YALbzF,EAAA,qDAAAA,EAAA,gBAAeuC,GACxB,WAAS,2BACR,QAASvC,EAAA,cACT,YAAaD,EAAA,EAAC,MAAA,yBAAA,EACd,QAASC,EAAA,QACT,SAAQC,EAAA,+EACVqF,EAA2FI,EAAA,YAArE1F,EAAA,4CAAAA,EAAA,OAAMuC,GAAG,MAAOxC,EAAA,EAAC,MAAA,sBAAA,EAAkC,SAAU,mCACnFuF,EAA2FK,EAAA,YAAtE3F,EAAA,6CAAAA,EAAA,QAAOuC,GAAG,MAAOxC,EAAA,EAAC,MAAA,sBAAA,EAAkC,SAAU,mCAEnFsF,EAaM,MAbN5F,GAaM,CAZL6F,EAKWM,EAAA,CAJT,SAAU5F,EAAA,SAAO,CAAKC,EAAA,MACvB,QAAQ,UACR,KAAK,qBACL,IAAsB,MAAnBF,EAAA,EAAC,MAAA,MAAA,CAAA,EAAA,CAAA,yBAELuF,EAKWM,EAAA,CAJT,SAAU5F,EAAA,SAAO,CAAKC,EAAA,MACvB,QAAQ,QACP,QAAOA,EAAA,yBACR,IAAiC,MAA9BF,EAAA,EAAC,MAAA,iBAAA,CAAA,EAAA,CAAA,4JC1CR,OAAO,eAAe8F,GAAS,aAAc,CAAE,MAAO,GAAM,EAC5DA,GAAA,SAAmBA,GAAA,aAAuB,OAC1CA,GAAA,aAAuB,kBACvBA,GAAA,SAAmB,IAAI,IAAI,CACvB,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,MACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,MACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,MACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iCACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,8BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,4BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,0BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,6BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,4BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iCACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,0BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,6BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,6BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,4BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,4BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,yBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,+BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,0BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,6BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,4BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,4BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,0BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,8BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,8BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,8BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,8BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,iCACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,yBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,4BACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,OACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,OACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,OACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,MACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,QACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,QACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,OACrB,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,yBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,MACrB,CACA,GAEI,CACI,wBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,MACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,OACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,MACrB,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,QACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,MACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,UACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,aACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,YACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,WACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,UACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,UACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,WACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,OACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,cACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,OACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,QACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,QACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,CACA,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,EACL,EAAK,MACzB,GAEY,EAAK,CACD,EAAK,QACL,EAAK,QACL,EAAK,MACL,EAAK,kBACL,EAAK,CACD,EAAK,GACL,EAAK,KACzB,CACA,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,sBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,MACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,qBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,OACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,eACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,iBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,gBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,mBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,kBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,uBACA,CACI,EAAK,CACD,EAAK,QACL,EAAK,KACrB,CACA,GAEI,CACI,oBACA,CACI,EAAK,CACD,EAAK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","x_google_ignoreList":[0,1,2,5,6,7,8,9,10,11,12]}