PageSourceSearch

https://ecomilk.ru/local/templates/main/assets/js/index.min.js

js ecomilk.ru collected 2026-10-06 13:09:17 UTC 1,849,568 bytes, 2 lines download raw bytes

1/*! For license information please see index.min.js.LICENSE.txt */
2(self.webpackChunkekomilk_html=self.webpackChunkekomilk_html||[]).push([[57],{4602:()=>{},6850:()=>{},6292:()=>{},2266:()=>{},882:()=>{},3746:()=>{},4386:()=>{},322:()=>{},4626:()=>{},2446:()=>{},7566:()=>{},6006:()=>{},2942:()=>{},9946:()=>{},7538:()=>{},1396:()=>{},1374:()=>{},4834:()=>{},3282:()=>{},8382:()=>{},2598:()=>{},1814:()=>{},3496:()=>{},1438:()=>{},7016:()=>{},344:()=>{},928:()=>{},4874:()=>{},6358:()=>{},5630:()=>{},3290:()=>{},4624:()=>{},2243:()=>{},1798:()=>{},7426:()=>{},868:()=>{},3118:()=>{},9250:()=>{},2986:()=>{},4476:()=>{},9730:()=>{},8958:()=>{},2690:()=>{},8516:()=>{},612:()=>{},3542:()=>{},4490:()=>{},2454:()=>{},9062:()=>{},1186:()=>{},2546:()=>{},7362:()=>{},476:()=>{},2930:()=>{},3228:()=>{},858:()=>{},3438:()=>{},7372:()=>{},9402:()=>{},9852:()=>{},4854:()=>{},1966:()=>{},9764:()=>{},1516:()=>{},8716:()=>{},9758:()=>{},1566:()=>{},8410:()=>{},2510:()=>{},1072:()=>{},6506:()=>{},534:()=>{},3806:()=>{},7355:()=>{},7293:function(e){"undefined"!=typeof self&&self,e.exports=(()=>{var e={646:e=>{e.exports=function(e){if(Array.isArray(e)){for(var n=0,t=new Array(e.length);n<e.length;n++)t[n]=e[n];return t}}},713:e=>{e.exports=function(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}},860:e=>{e.exports=function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}},206:e=>{e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}},319:(e,n,t)=>{var s=t(646),i=t(860),a=t(206);e.exports=function(e){return s(e)||i(e)||a()}},8:e=>{function n(t){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?e.exports=n=function(e){return typeof e}:e.exports=n=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(t)}e.exports=n}},n={};function t(s){var i=n[s];if(void 0!==i)return i.exports;
vendor: 22,122 bytes, line 2
2var a=n[s]={exports:{}};return e[s](a,a.exports,t),a.exports}t.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},t.d=(e,n)=>{for(var s in n)t.o(n,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:n[s]})},t.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var s={};return(()=>{"use strict";t.r(s),t.d(s,{VueSelect:()=>f,default:()=>b,mixins:()=>_});var e=t(319),n=t.n(e),i=t(8),a=t.n(i),r=t(713),o=t.n(r);const l={props:{autoscroll:{type:Boolean,default:!0}},watch:{typeAheadPointer:function(){this.autoscroll&&this.maybeAdjustScroll()},open:function(e){var n=this;this.autoscroll&&e&&this.$nextTick((function(){return n.maybeAdjustScroll()}))}},methods:{maybeAdjustScroll:function(){var e,n=(null===(e=this.$refs.dropdownMenu)||void 0===e?void 0:e.children[this.typeAheadPointer])||!1;if(n){var t=this.getDropdownViewport(),s=n.getBoundingClientRect(),i=s.top,a=s.bottom,r=s.height;if(i<t.top)return this.$refs.dropdownMenu.scrollTop=n.offsetTop;if(a>t.bottom)return this.$refs.dropdownMenu.scrollTop=n.offsetTop-(t.height-r)}},getDropdownViewport:function(){return this.$refs.dropdownMenu?this.$refs.dropdownMenu.getBoundingClientRect():{height:0,top:0,bottom:0}}}},c={data:function(){return{typeAheadPointer:-1}},watch:{filteredOptions:function(){for(var e=0;e<this.filteredOptions.length;e++)if(this.selectable(this.filteredOptions[e])){this.typeAheadPointer=e;break}},open:function(e){e&&this.typeAheadToLastSelected()},selectedValue:function(){this.open&&this.typeAheadToLastSelected()}},methods:{typeAheadUp:function(){for(var e=this.typeAheadPointer-1;e>=0;e--)if(this.selectable(this.filteredOptions[e])){this.typeAheadPointer=e;break}},typeAheadDown:function(){for(var e=this.typeAheadPointer+1;e<this.filteredOptions.length;e++)if(this.selectable(this.filteredOptions[e])){this.typeAheadPointer=e;break}},typeAheadSelect:function(){var e=this.filteredOptions[this.typeAheadPointer];e&&this.selectable(e)&&this.select(e)},typeAheadToLastSelected:function(){var e=0!==this.selectedValue.length?this.filteredOptions.indexOf(this.selectedValue[this.selectedValue.length-1]):-1;-1!==e&&(this.typeAheadPointer=e)}}},d={props:{loading:{type:Boolean,default:!1}},data:function(){return{mutableLoading:!1}},watch:{search:function(){this.$emit("search",this.search,this.toggleLoading)},loading:function(e){this.mutableLoading=e}},methods:{toggleLoading:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return this.mutableLoading=null==e?!this.mutableLoading:e}}};function u(e,n,t,s,i,a,r,o){var l,c="function"==typeof e?e.options:e;if(n&&(c.render=n,c.staticRenderFns=t,c._compiled=!0),s&&(c.functional=!0),a&&(c._scopeId="data-v-"+a),r?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(r)},c._ssrRegister=l):i&&(l=o?function(){i.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:i),l)if(c.functional){c._injectStyles=l;var d=c.render;c.render=function(e,n){return l.call(n),d(e,n)}}else{var u=c.beforeCreate;c.beforeCreate=u?[].concat(u,l):[l]}return{exports:e,options:c}}const p={Deselect:u({},(function(){var e=this.$createElement,n=this._self._c||e;return n("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",width:"10",height:"10"}},[n("path",{attrs:{d:"M6.895455 5l2.842897-2.842898c.348864-.348863.348864-.914488 0-1.263636L9.106534.261648c-.348864-.348864-.914489-.348864-1.263636 0L5 3.104545 2.157102.261648c-.348863-.348864-.914488-.348864-1.263636 0L.261648.893466c-.348864.348864-.348864.914489 0 1.263636L3.104545 5 .261648 7.842898c-.348864.348863-.348864.914488 0 1.263636l.631818.631818c.348864.348864.914773.348864 1.263636 0L5 6.895455l2.842898 2.842897c.348863.348864.914772.348864 1.263636 0l.631818-.631818c.348864-.348864.348864-.914489 0-1.263636L6.895455 5z"}})])}),[],!1,null,null,null).exports,OpenIndicator:u({},(function(){var e=this.$createElement,n=this._self._c||e;return n("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"10"}},[n("path",{attrs:{d:"M9.211364 7.59931l4.48338-4.867229c.407008-.441854.407008-1.158247 0-1.60046l-.73712-.80023c-.407008-.441854-1.066904-.441854-1.474243 0L7 5.198617 2.51662.33139c-.407008-.441853-1.066904-.441853-1.474243 0l-.737121.80023c-.407008.441854-.407008 1.158248 0 1.600461l4.48338 4.867228L7 10l2.211364-2.40069z"}})])}),[],!1,null,null,null).exports},h={inserted:function(e,n,t){var s=t.context;if(s.appendToBody){var i=s.$refs.toggle.getBoundingClientRect(),a=i.height,r=i.top,o=i.left,l=i.width,c=window.scrollX||window.pageXOffset,d=window.scrollY||window.pageYOffset;e.unbindPosition=s.calculatePosition(e,s,{width:l+"px",left:c+o+"px",top:d+r+a+"px"}),document.body.appendChild(e)}},unbind:function(e,n,t){t.context.appendToBody&&(e.unbindPosition&&"function"==typeof e.unbindPosition&&e.unbindPosition(),e.parentNode&&e.parentNode.removeChild(e))}};var m=0;function v(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,s)}return t}function g(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?v(Object(t),!0).forEach((function(n){o()(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):v(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}const f=u({components:g({},p),directives:{appendToBody:h},mixins:[l,c,d],props:{value:{},components:{type:Object,default:function(){return{}}},options:{type:Array,default:function(){return[]}},disabled:{type:Boolean,default:!1},clearable:{type:Boolean,default:!0},deselectFromDropdown:{type:Boolean,default:!1},searchable:{type:Boolean,default:!0},multiple:{type:Boolean,default:!1},placeholder:{type:String,default:""},transition:{type:String,default:"vs__fade"},clearSearchOnSelect:{type:Boolean,default:!0},closeOnSelect:{type:Boolean,default:!0},label:{type:String,default:"label"},autocomplete:{type:String,default:"off"},reduce:{type:Function,default:function(e){return e}},selectable:{type:Function,default:function(e){return!0}},getOptionLabel:{type:Function,default:function(e){return"object"===a()(e)?e.hasOwnProperty(this.label)?e[this.label]:console.warn('[vue-select warn]: Label key "option.'.concat(this.label,'" does not')+" exist in options object ".concat(JSON.stringify(e),".\n")+"https://vue-select.org/api/props.html#getoptionlabel"):e}},getOptionKey:{type:Function,default:function(e){if("object"!==a()(e))return e;try{return e.hasOwnProperty("id")?e.id:function(e){var n={};return Object.keys(e).sort().forEach((function(t){n[t]=e[t]})),JSON.stringify(n)}(e)}catch(n){return console.warn("[vue-select warn]: Could not stringify this option to generate unique key. Please provide'getOptionKey' prop to return a unique key for each option.\nhttps://vue-select.org/api/props.html#getoptionkey",e,n)}}},onTab:{type:Function,default:function(){this.selectOnTab&&!this.isComposing&&this.typeAheadSelect()}},taggable:{type:Boolean,default:!1},tabindex:{type:Number,default:null},pushTags:{type:Boolean,default:!1},filterable:{type:Boolean,default:!0},filterBy:{type:Function,default:function(e,n,t){return(n||"").toLocaleLowerCase().indexOf(t.toLocaleLowerCase())>-1}},filter:{type:Function,default:function(e,n){var t=this;return e.filter((function(e){var s=t.getOptionLabel(e);return"number"==typeof s&&(s=s.toString()),t.filterBy(e,s,n)}))}},createOption:{type:Function,default:function(e){return"object"===a()(this.optionList[0])?o()({},this.label,e):e}},resetOnOptionsChange:{default:!1,validator:function(e){return["function","boolean"].includes(a()(e))}},clearSearchOnBlur:{type:Function,default:function(e){var n=e.clearSearchOnSelect,t=e.multiple;return n&&!t}},noDrop:{type:Boolean,default:!1},inputId:{type:String},dir:{type:String,default:"auto"},selectOnTab:{type:Boolean,default:!1},selectOnKeyCodes:{type:Array,default:function(){return[13]}},searchInputQuerySelector:{type:String,default:"[type=search]"},mapKeydown:{type:Function,default:function(e,n){return e}},appendToBody:{type:Boolean,default:!1},calculatePosition:{type:Function,default:function(e,n,t){var s=t.width,i=t.top,a=t.left;e.style.top=i,e.style.left=a,e.style.width=s}},dropdownShouldOpen:{type:Function,default:function(e){var n=e.noDrop,t=e.open,s=e.mutableLoading;return!n&&t&&!s}},uid:{type:[String,Number],default:function(){return++m}}},data:function(){return{search:"",open:!1,isComposing:!1,pushedTags:[],_value:[]}},computed:{isTrackingValues:function(){return void 0===this.value||this.$options.propsData.hasOwnProperty("reduce")},selectedValue:function(){var e=this.value;return this.isTrackingValues&&(e=this.$data._value),null!=e&&""!==e?[].concat(e):[]},optionList:function(){return this.options.concat(this.pushTags?this.pushedTags:[])},searchEl:function(){return this.$scopedSlots.search?this.$refs.selectedOptions.querySelector(this.searchInputQuerySelector):this.$refs.search},scope:function(){var e=this,n={search:this.search,loading:this.loading,searching:this.searching,filteredOptions:this.filteredOptions};return{search:{attributes:g({disabled:this.disabled,placeholder:this.searchPlaceholder,tabindex:this.tabindex,readonly:!this.searchable,id:this.inputId,"aria-autocomplete":"list","aria-labelledby":"vs".concat(this.uid,"__combobox"),"aria-controls":"vs".concat(this.uid,"__listbox"),ref:"search",type:"search",autocomplete:this.autocomplete,value:this.search},this.dropdownOpen&&this.filteredOptions[this.typeAheadPointer]?{"aria-activedescendant":"vs".concat(this.uid,"__option-").concat(this.typeAheadPointer)}:{}),events:{compositionstart:function(){return e.isComposing=!0},compositionend:function(){return e.isComposing=!1},keydown:this.onSearchKeyDown,keypress:this.onSearchKeyPress,blur:this.onSearchBlur,focus:this.onSearchFocus,input:function(n){return e.search=n.target.value}}},spinner:{loading:this.mutableLoading},noOptions:{search:this.search,loading:this.mutableLoading,searching:this.searching},openIndicator:{attributes:{ref:"openIndicator",role:"presentation",class:"vs__open-indicator"}},listHeader:n,listFooter:n,header:g({},n,{deselect:this.deselect}),footer:g({},n,{deselect:this.deselect})}},childComponents:function(){return g({},p,{},this.components)},stateClasses:function(){return{"vs--open":this.dropdownOpen,"vs--single":!this.multiple,"vs--multiple":this.multiple,"vs--searching":this.searching&&!this.noDrop,"vs--searchable":this.searchable&&!this.noDrop,"vs--unsearchable":!this.searchable,"vs--loading":this.mutableLoading,"vs--disabled":this.disabled}},searching:function(){return!!this.search},dropdownOpen:function(){return this.dropdownShouldOpen(this)},searchPlaceholder:function(){return this.isValueEmpty&&this.placeholder?this.placeholder:void 0},filteredOptions:function(){var e=[].concat(this.optionList);if(!this.filterable&&!this.taggable)return e;var n=this.search.length?this.filter(e,this.search,this):e;if(this.taggable&&this.search.length){var t=this.createOption(this.search);this.optionExists(t)||n.unshift(t)}return n},isValueEmpty:function(){return 0===this.selectedValue.length},showClearButton:function(){return!this.multiple&&this.clearable&&!this.open&&!this.isValueEmpty}},watch:{options:function(e,n){var t=this;!this.taggable&&("function"==typeof t.resetOnOptionsChange?t.resetOnOptionsChange(e,n,t.selectedValue):t.resetOnOptionsChange)&&this.clearSelection(),this.value&&this.isTrackingValues&&this.setInternalValueFromOptions(this.value)},value:{immediate:!0,handler:function(e){this.isTrackingValues&&this.setInternalValueFromOptions(e)}},multiple:function(){this.clearSelection()},open:function(e){this.$emit(e?"open":"close")},search:function(e){e.length&&(this.open=!0)}},created:function(){this.mutableLoading=this.loading,this.$on("option:created",this.pushTag)},methods:{setInternalValueFromOptions:function(e){var n=this;Array.isArray(e)?this.$data._value=e.map((function(e){return n.findOptionFromReducedValue(e)})):this.$data._value=this.findOptionFromReducedValue(e)},select:function(e){this.$emit("option:selecting",e),this.isOptionSelected(e)?this.deselectFromDropdown&&(this.clearable||this.multiple&&this.selectedValue.length>1)&&this.deselect(e):(this.taggable&&!this.optionExists(e)&&this.$emit("option:created",e),this.multiple&&(e=this.selectedValue.concat(e)),this.updateValue(e),this.$emit("option:selected",e)),this.onAfterSelect(e)},deselect:function(e){var n=this;this.$emit("option:deselecting",e),this.updateValue(this.selectedValue.filter((function(t){return!n.optionComparator(t,e)}))),this.$emit("option:deselected",e)},clearSelection:function(){this.updateValue(this.multiple?[]:null)},onAfterSelect:function(e){var n=this;this.closeOnSelect&&(this.open=!this.open),this.clearSearchOnSelect&&(this.search=""),this.noDrop&&this.multiple&&this.$nextTick((function(){return n.$refs.search.focus()}))},updateValue:function(e){var n=this;void 0===this.value&&(this.$data._value=e),null!==e&&(e=Array.isArray(e)?e.map((function(e){return n.reduce(e)})):this.reduce(e)),this.$emit("input",e)},toggleDropdown:function(e){var t=e.target!==this.searchEl;t&&e.preventDefault();var s=[].concat(n()(this.$refs.deselectButtons||[]),n()([this.$refs.clearButton]||0));void 0===this.searchEl||s.filter(Boolean).some((function(n){return n.contains(e.target)||n===e.target}))?e.preventDefault():this.open&&t?this.searchEl.blur():this.disabled||(this.open=!0,this.searchEl.focus())},isOptionSelected:function(e){var n=this;return this.selectedValue.some((function(t){return n.optionComparator(t,e)}))},isOptionDeselectable:function(e){return this.isOptionSelected(e)&&this.deselectFromDropdown},optionComparator:function(e,n){return this.getOptionKey(e)===this.getOptionKey(n)},findOptionFromReducedValue:function(e){var t=this,s=[].concat(n()(this.options),n()(this.pushedTags)).filter((function(n){return JSON.stringify(t.reduce(n))===JSON.stringify(e)}));return 1===s.length?s[0]:s.find((function(e){return t.optionComparator(e,t.$data._value)}))||e},closeSearchOptions:function(){this.open=!1,this.$emit("search:blur")},maybeDeleteValue:function(){if(!this.searchEl.value.length&&this.selectedValue&&this.selectedValue.length&&this.clearable){var e=null;this.multiple&&(e=n()(this.selectedValue.slice(0,this.selectedValue.length-1))),this.updateValue(e)}},optionExists:function(e){var n=this;return this.optionList.some((function(t){return n.optionComparator(t,e)}))},normalizeOptionForSlot:function(e){return"object"===a()(e)?e:o()({},this.label,e)},pushTag:function(e){this.pushedTags.push(e)},onEscape:function(){this.search.length?this.search="":this.open=!1},onSearchBlur:function(){if(!this.mousedown||this.searching){var e=this.clearSearchOnSelect,n=this.multiple;return this.clearSearchOnBlur({clearSearchOnSelect:e,multiple:n})&&(this.search=""),void this.closeSearchOptions()}this.mousedown=!1,0!==this.search.length||0!==this.options.length||this.closeSearchOptions()},onSearchFocus:function(){this.open=!0,this.$emit("search:focus")},onMousedown:function(){this.mousedown=!0},onMouseUp:function(){this.mousedown=!1},onSearchKeyDown:function(e){var n=this,t=function(e){return e.preventDefault(),!n.isComposing&&n.typeAheadSelect()},s={8:function(e){return n.maybeDeleteValue()},9:function(e){return n.onTab()},27:function(e){return n.onEscape()},38:function(e){if(e.preventDefault(),n.open)return n.typeAheadUp();n.open=!0},40:function(e){if(e.preventDefault(),n.open)return n.typeAheadDown();n.open=!0}};this.selectOnKeyCodes.forEach((function(e){return s[e]=t}));var i=this.mapKeydown(s,this);if("function"==typeof i[e.keyCode])return i[e.keyCode](e)},onSearchKeyPress:function(e){this.open||32!==e.keyCode||(e.preventDefault(),this.open=!0)}}},(function(){var e=this,n=e.$createElement,t=e._self._c||n;return t("div",{staticClass:"v-select",class:e.stateClasses,attrs:{dir:e.dir}},[e._t("header",null,null,e.scope.header),e._v(" "),t("div",{ref:"toggle",staticClass:"vs__dropdown-toggle",attrs:{id:"vs"+e.uid+"__combobox",role:"combobox","aria-expanded":e.dropdownOpen.toString(),"aria-owns":"vs"+e.uid+"__listbox","aria-label":"Search for option"},on:{mousedown:function(n){return e.toggleDropdown(n)}}},[t("div",{ref:"selectedOptions",staticClass:"vs__selected-options"},[e._l(e.selectedValue,(function(n){return e._t("selected-option-container",[t("span",{key:e.getOptionKey(n),staticClass:"vs__selected"},[e._t("selected-option",[e._v("\n            "+e._s(e.getOptionLabel(n))+"\n          ")],null,e.normalizeOptionForSlot(n)),e._v(" "),e.multiple?t("button",{ref:"deselectButtons",refInFor:!0,staticClass:"vs__deselect",attrs:{disabled:e.disabled,type:"button",title:"Deselect "+e.getOptionLabel(n),"aria-label":"Deselect "+e.getOptionLabel(n)},on:{click:function(t){return e.deselect(n)}}},[t(e.childComponents.Deselect,{tag:"component"})],1):e._e()],2)],{option:e.normalizeOptionForSlot(n),deselect:e.deselect,multiple:e.multiple,disabled:e.disabled})})),e._v(" "),e._t("search",[t("input",e._g(e._b({staticClass:"vs__search"},"input",e.scope.search.attributes,!1),e.scope.search.events))],null,e.scope.search)],2),e._v(" "),t("div",{ref:"actions",staticClass:"vs__actions"},[t("button",{directives:[{name:"show",rawName:"v-show",value:e.showClearButton,expression:"showClearButton"}],ref:"clearButton",staticClass:"vs__clear",attrs:{disabled:e.disabled,type:"button",title:"Clear Selected","aria-label":"Clear Selected"},on:{click:e.clearSelection}},[t(e.childComponents.Deselect,{tag:"component"})],1),e._v(" "),e._t("open-indicator",[e.noDrop?e._e():t(e.childComponents.OpenIndicator,e._b({tag:"component"},"component",e.scope.openIndicator.attributes,!1))],null,e.scope.openIndicator),e._v(" "),e._t("spinner",[t("div",{directives:[{name:"show",rawName:"v-show",value:e.mutableLoading,expression:"mutableLoading"}],staticClass:"vs__spinner"},[e._v("Loading...")])],null,e.scope.spinner)],2)]),e._v(" "),t("transition",{attrs:{name:e.transition}},[e.dropdownOpen?t("ul",{directives:[{name:"append-to-body",rawName:"v-append-to-body"}],key:"vs"+e.uid+"__listbox",ref:"dropdownMenu",staticClass:"vs__dropdown-menu",attrs:{id:"vs"+e.uid+"__listbox",role:"listbox",tabindex:"-1"},on:{mousedown:function(n){return n.preventDefault(),e.onMousedown(n)},mouseup:e.onMouseUp}},[e._t("list-header",null,null,e.scope.listHeader),e._v(" "),e._l(e.filteredOptions,(function(n,s){return t("li",{key:e.getOptionKey(n),staticClass:"vs__dropdown-option",class:{"vs__dropdown-option--deselect":e.isOptionDeselectable(n)&&s===e.typeAheadPointer,"vs__dropdown-option--selected":e.isOptionSelected(n),"vs__dropdown-option--highlight":s===e.typeAheadPointer,"vs__dropdown-option--disabled":!e.selectable(n)},attrs:{id:"vs"+e.uid+"__option-"+s,role:"option","aria-selected":s===e.typeAheadPointer||null},on:{mouseover:function(t){e.selectable(n)&&(e.typeAheadPointer=s)},click:function(t){t.preventDefault(),t.stopPropagation(),e.selectable(n)&&e.select(n)}}},[e._t("option",[e._v("\n          "+e._s(e.getOptionLabel(n))+"\n        ")],null,e.normalizeOptionForSlot(n))],2)})),e._v(" "),0===e.filteredOptions.length?t("li",{staticClass:"vs__no-options"},[e._t("no-options",[e._v("\n          Sorry, no matching options.\n        ")],null,e.scope.noOptions)],2):e._e(),e._v(" "),e._t("list-footer",null,null,e.scope.listFooter)],2):t("ul",{staticStyle:{display:"none",visibility:"hidden"},attrs:{id:"vs"+e.uid+"__listbox",role:"listbox"}})]),e._v(" "),e._t("footer",null,null,e.scope.footer)],2)}),[],!1,null,null,null).exports,_={ajax:d,pointer:c,pointerScroll:l},b=f})(),s})()},2226:(e,n,t)=>{"use strict";e.exports=t.p+"assets/api/product-offers.json"},8033:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/sprite.svg"},7296:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/arrow-right-sm.svg"},5539:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/arrow-right.svg"},9621:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/artw.svg"},3063:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/clock.svg"},7777:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/close.svg"},2380:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/drop.svg"},4389:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/footer-ok.svg"},3642:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/footer-vk.svg"},9882:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/home.svg"},5967:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/info.svg"},3926:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/logo.svg"},5393:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/plate.svg"},110:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/play.svg"},3162:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/recipes-all.svg"},2617:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/recipes-brine-cheese.svg"},7879:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/recipes-butter.svg"},8548:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/recipes-coctail.svg"},701:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/recipes-creme-cheese.svg"},3995:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/recipes-curd.svg"},6644:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/recipes-fused-cheese.svg"},4012:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/recipes-kefir.svg"},8292:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/recipes-milk.svg"},3221:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/recipes-sour-creme-product.
2svg"},6671:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/recipes-sour-creme.svg"},1455:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/recipes-yogurt.svg"},7180:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/tg.svg"},963:(e,n,t)=>{"use strict";e.exports=t.p+"assets/images/sprites/svg/wu.svg"},5010:(e,n,t)=>{"use strict";e.exports=t.p+"components/Advantages/Advantages.json"},9976:(e,n,t)=>{"use strict";e.exports=t.p+"components/BrandListCarousel/BrandListCarousel.json"},5688:(e,n,t)=>{"use strict";e.exports=t.p+"components/Catalog/Catalog.json"},7464:(e,n,t)=>{"use strict";e.exports=t.p+"components/CompanyHistory/CompanyHistory.json"},4824:(e,n,t)=>{"use strict";e.exports=t.p+"components/Contacts/Contacts.json"},7932:(e,n,t)=>{"use strict";e.exports=t.p+"components/Footer/Footer.json"},3392:(e,n,t)=>{"use strict";e.exports=t.p+"components/GallerySlider/GallerySlider.json"},4840:(e,n,t)=>{"use strict";e.exports=t.p+"components/Header/Header.json"},2274:(e,n,t)=>{"use strict";e.exports=t.p+"components/HistoryNumbers/HistoryNumbers.json"},6872:(e,n,t)=>{"use strict";e.exports=t.p+"components/MediaBlock/MediaBlock.json"},5900:(e,n,t)=>{"use strict";e.exports=t.p+"components/Nutrients/Nutrients.json"},2004:(e,n,t)=>{"use strict";e.exports=t.p+"components/Partners/Partners.json"},9892:(e,n,t)=>{"use strict";e.exports=t.p+"components/ProductDetail/ProductDetail.json"},5806:(e,n,t)=>{"use strict";e.exports=t.p+"components/ProductsCarousel/ProductsCarousel.json"},8686:(e,n,t)=>{"use strict";e.exports=t.p+"components/PromoCatalog/PromoCatalog.json"},2500:(e,n,t)=>{"use strict";e.exports=t.p+"components/Qualities/Qualities.json"},1600:(e,n,t)=>{"use strict";e.exports=t.p+"components/ReadAlso/ReadAlso.json"},3620:(e,n,t)=>{"use strict";e.exports=t.p+"components/RecipeDetail/RecipeDetail.json"},7816:(e,n,t)=>{"use strict";e.exports=t.p+"components/Recipes/Recipes.json"},1202:(e,n,t)=>{"use strict";e.exports=t.p+"components/RecipesPromo/RecipesPromo.json"},6736:(e,n,t)=>{"use strict";e.exports=t.p+"components/Reviews/Reviews.json"},6892:(e,n,t)=>{"use strict";e.exports=t.p+"components/SectionListCarousel/SectionListCarousel.json"},5816:(e,n,t)=>{"use strict";e.exports=t.p+"components/Sharing/Sharing.json"},2616:(e,n,t)=>{"use strict";e.exports=t.p+"components/TitleSection/TitleSection.json"},8008:(e,n,t)=>{"use strict";e.exports=t.p+"components/VideoSlider/VideoSlider.json"},4519:(e,n,t)=>{"use strict";e.exports=t.p+"data/index.json"},3294:(e,n,t)=>{"use strict";e.exports=t.p+"data/news.json"},6730:(e,n,t)=>{"use strict";e.exports=t.p+"shared/ui/Pagination/Pagination.json"},1614:e=>{"use strict";e.exports='\n\n\n<section\n  class="about"\n  >\n  <div class="about__content">\n    <img\n      class="about__bg-logo"\n      src="/assets/images/about/bg-logo.svg"\n      alt="экомилк"\n      loading="lazy"\n    >\n\n    <picture class="about__image-container">\n      <source media="(min-width: 768px)" srcset="/assets/images/about/cows-desktop.webp">\n      <img class="about__image" src="/assets/images/about/cows-mobile.webp" alt="экомилк">\n    </picture>\n\n    <div class="about__info">\n      \n\n\n  \n<div\n  class="number-item about__info-item"\n        >\n  <div class="number-item__top">\n    <span class="number-item__number">6</span>\n      </div>\n      <div class="number-item__caption">\n      торговых марок\n    </div>\n  </div>\n      \n\n\n  \n<div\n  class="number-item about__info-item"\n        >\n  <div class="number-item__top">\n    <span class="number-item__number">50</span>\n          <span class="number-item__addition">+</span>\n      </div>\n      <div class="number-item__caption">\n      наименований\n    </div>\n  </div>\n      \n\n\n  \n<div\n  class="number-item about__info-item"\n        >\n  <div class="number-item__top">\n    <span class="number-item__number">15</span>\n      </div>\n      <div class="number-item__caption">\n      лет на рынке\n    </div>\n  </div>\n    </div>\n  </div>\n</section>\n'},5766:e=>{"use strict";e.exports='\n\n\n<div\n  class="advantage-card "\n  >\n  <div class="advantage-card__name"></div>\n  <div class="advantage-card__text">\n    \n  </div>\n\n  <img src="" alt="" class="advantage-card__picture">\n</div>\n'},2792:e=>{"use strict";e.exports='\n\n\n\n<section\n  class="advantages"\n  >\n  <h2 class="advantages__heading">Наши ценности</h2>\n\n  <div class="advantages__slider swiper js-advantages-carousel">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          \n\n\n<div\n  class="advantage-card "\n  >\n  <div class="advantage-card__name">Энергия</div>\n  <div class="advantage-card__text">\n    Мы ценим профессионализм и инициативу, которые помогают решать сложные задачи, вдохновлять на постоянное движение вперёд. Мы уверены, что работа должна приносить радость. Любовь к своему делу в синергии с целеустромелённостью позволяют сдвигать горы.\n  </div>
2\n\n  <img src="assets/images/advantages/milk-or-yogurt-realistic-splashes-on-blue-backgrou.webp" alt="Энергия" class="advantage-card__picture">\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<div\n  class="advantage-card advantage-card_theme_dark"\n  >\n  <div class="advantage-card__name">Команда</div>\n  <div class="advantage-card__text">\n    Мы достигаем результата вместе и ценим вклад каждого. Наша особая гордость – это по-настоящему дружественная атмосфера, в которой опытные профессионалы, начинающие специалисты и собственники бизнеса могут свободно общаться и слышать друг друга.\n  </div>\n\n  <img src="assets/images/advantages/white-heart-shape-milk-splash-isolated-on-white-ba.webp" alt="Команда" class="advantage-card__picture">\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<div\n  class="advantage-card advantage-card_theme_primary"\n  >\n  <div class="advantage-card__name">Открытость</div>\n  <div class="advantage-card__text">\n    Мы открыто и честно высказываем своё мнение для достижения лучших результатов. Мы предлагаем новые идеи, инвестируем в освоение передовых технологий для реализации амбициозных проектов. Нестандартный подход, любознательность дают нам возможность видеть перспективы и новые горизонты.\n  </div>\n\n  <img src="assets/images/advantages/cow.webp" alt="Открытость" class="advantage-card__picture">\n</div>\n        </div>\n          </div>\n  </div>\n</section>\n'},8214:e=>{"use strict";e.exports='\n\n\n<a\n  class="brand-card brand-card_theme_white "\n  href=""\n  >\n  <div class="brand-card__text">\n    \n  </div>\n\n  <img\n    class="brand-card__image"\n    src=""\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n'},7798:e=>{"use strict";e.exports='\n\n\n\n<div\n  class="brand-list-carousel js-brand-list-carousel"\n  >\n  <div\n    class="brand-list-carousel__all-mobile"\n    data-popup-invoker="brands-filter"\n  >\n    <span class="brand-list-carousel__all-mobile-text">Все бренды</span>\n\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon brand-list-carousel__all-mobile-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" />\n</svg>\n  </div>\n\n  \n\n\n\n<div\n  class="popup popup_type_ordinary"\n  data-popup="brands-filter"\n  >\n  <div class="popup__wrapper">\n    <div class="popup__content">\n      <button type="button" class="popup__close js-popup-close">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon popup__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n      </button>\n\n            <div class="brand-popup__inner">\n        <div class="brand-popup__title">\n          Фильтр\n        </div>\n\n        <div class="brand-popup__brands">\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/ecomilk.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/cheese.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/dessert.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/courtyard.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/altai.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/cow.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n          \n          <a\n            class="brand-popup__brand-all"\n            href="#"\n          >
2\n            <span class="brand-popup__brand-all-text">Все бренды</span>\n\n            <img\n              class="brand-popup__brand-all-image"\n              src="/assets/images/brand-list-popup/all.webp"\n              alt="логотип брэнда"\n              loading="lazy"\n            >\n          </a>\n        </div>\n      </div>\n        </div>\n  </div>\n</div>\n\n  \n\n  \n<a\n  class="brand-card brand-card_theme_white isActive brand-list-carousel__all"\n  href="#"\n            class="brand-list-carousel__all"\n      >\n  <div class="brand-card__text">\n    Все бренды\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/all-brands.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n\n  <div class="brand-list-carousel__slider js-brand-list-carousel-slider swiper">\n    <div class="brand-list-carousel__slider-wrapper swiper-wrapper">\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Экомилк\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/ecomilk.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Экомилк. Сыры\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/cheese.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Экомилк Oh!Dessert\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/dessert.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Деревенское подворье\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/courtyard.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Алтайская коллекция\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/altai.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Альпийская коровка\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/cow.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n          </div>\n  </div>\n</div>\n'},9782:e=>{"use strict";e.exports='\n\n\n\n\n<div\n  class="catalog"\n  >\n  <div class="catalog__carousels">\n    \n\n\n\n<div\n  class="brand-list-carousel js-brand-list-carousel"\n  >\n  <div\n    class="brand-list-carousel__all-mobile"\n    data-popup-invoker="brands-filter"\n  >\n    <span class="brand-list-carousel__all-mobile-text">Все бренды</span>\n\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon brand-list-carousel__all-mobile-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" />\n</svg>\n  </div>\n\n  \n\n\n\n<div\n  class="popup popup_type_ordinary"\n  data-popup="brands-filter"\n  >\n  <div class="popup__wrapper">\n    <div class="popup__content">\n      <button type="button" class="popup__close js-popup-close">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon popup__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n      </button>\n\n            <div class="brand-popup__inner">\n        <div class="brand-popup__title">\n          Фильтр\n        </div>\n\n        <div class="brand-popup__brands">\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/ecomilk.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/cheese.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/dessert.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/courtyard.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/altai.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/cow.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n          \n          <a\n            class="brand-popup__brand-all"\n            href="#"\n          >
2\n            <span class="brand-popup__brand-all-text">Все бренды</span>\n\n            <img\n              class="brand-popup__brand-all-image"\n              src="/assets/images/brand-list-popup/all.webp"\n              alt="логотип брэнда"\n              loading="lazy"\n            >\n          </a>\n        </div>\n      </div>\n        </div>\n  </div>\n</div>\n\n  \n\n  \n<a\n  class="brand-card brand-card_theme_white isActive brand-list-carousel__all"\n  href="#"\n            class="brand-list-carousel__all"\n      >\n  <div class="brand-card__text">\n    Все бренды\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/all-brands.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n\n  <div class="brand-list-carousel__slider js-brand-list-carousel-slider swiper">\n    <div class="brand-list-carousel__slider-wrapper swiper-wrapper">\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Экомилк\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/ecomilk.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Экомилк. Сыры\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/cheese.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Экомилк Oh!Dessert\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/dessert.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Деревенское подворье\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/courtyard.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Алтайская коллекция\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/altai.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Альпийская коровка\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/cow.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n          </div>\n  </div>\n</div>\n    \n\n\n\n\n<div\n  class="section-list-carousel js-section-list-carousel"\n  >\n  \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  section-list-carousel__prev js-section-list-carousel-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n  \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white isActive section-list-carousel__all"\n  href="#"\n            class="section-list-carousel__all"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-all" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Все товары\n  </div>\n</a>\n\n  <div class="section-list-carousel__slider js-section-list-carousel-slider swiper">\n    <div class="section-list-carousel__slider-wrapper swiper-wrapper">\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-butter" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Масло сливочное\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-milk" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Молоко\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-kefir" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Кефир\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-curd" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Творог\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-sour-creme" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сметана\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-fused-cheese" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сыр плавленный\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-brine-cheese" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сыр рассольный\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-creme-cheese" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сыр творожный\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-yogurt" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Густой йогурт\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-coctail" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Коктейли\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-sour-creme-product" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сметанный продукт\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-milk" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Масло сливочное\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-kefir" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Молоко\n  </div>\n</a>\n        </div>\n          </div>\n  </div>\n\n  \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   section-list-carousel__next js-section-list-carousel-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n</div>\n  </div>\n\n  <div class="catalog__cards">\n    <picture class="catalog__banner">\n      <source media="(min-width: 1680px)" srcset="/assets/images/catalog-list/catalog-banner-desktop.webp">\n      <source media="(min-width: 1280px)" srcset="/assets/images/catalog-list/catalog-banner-desktop-sm.webp">\n      <source media="(min-width: 768px)" srcset="/assets/images/catalog-list/catalog-banner-tablet.webp">\n      <img class="catalog__banner-image" src="/assets/images/catalog-list/catalog-banner-mobile.webp" alt="выбор покупателей">\n    </picture>\n\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_low-in-calories product-card__promo-label"\n        >\n  Мало калорий\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-1.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творог десертный клубника 5%</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_hit product-card__promo-label"\n        >\n  Хит\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-2.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Сыр греческий Fetica</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          275 г\n        </div>\n              <div class="\n        product-card__weight\n              ">\n          400 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_new product-card__promo-label"\n        >\n  Новинка\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-3.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творожная масса Ваниль</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-4.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Йогурт с кленовым сиропом <br>и грецким орехом 4,2%</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          130 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_new product-card__promo-label"\n        >\n  Новинка\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-3.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творожная масса Ваниль</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_new product-card__promo-label"\n        >\n  Новинка\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-3.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творожная масса Ваниль</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>
2\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_low-in-calories product-card__promo-label"\n        >\n  Мало калорий\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-1.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творог десертный клубника 5%</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_hit product-card__promo-label"\n        >\n  Хит\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-2.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Сыр греческий Fetica</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          275 г\n        </div>\n              <div class="\n        product-card__weight\n              ">\n          400 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_new product-card__promo-label"\n        >\n  Новинка\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-3.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творожная масса Ваниль</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_low-in-calories product-card__promo-label"\n        >\n  Мало калорий\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-1.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творог десертный клубника 5%</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_hit product-card__promo-label"\n        >\n  Хит\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-2.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Сыр греческий Fetica</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          275 г\n        </div>\n              <div class="\n        product-card__weight\n              ">\n          400 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_new product-card__promo-label"\n        >\n  Новинка\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-3.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творожная масса Ваниль</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>
2\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_new product-card__promo-label"\n        >\n  Новинка\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-3.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творожная масса Ваниль</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n      </div>\n\n  \n\n  \n<div\n  class="pagination pagination_theme_white catalog__pagination"\n            >\n\t<div class="pagination__pages">\n\t\t<a href="#" class="pagination__round-link pagination__round-link_prev">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon pagination__icon-arrow"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\t\t</a>\n\n          <a\n        href="#"\n        class="\n          pagination__round-link\n          pagination__round-link_active                            "\n      >\n        1\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                                      "\n      >\n        2\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                    pagination__round-link_disabled                  "\n      >\n        ...\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                              pagination__round-link_hidden        "\n      >\n        5\n      </a>\n    \n\t\t<a href="#" class="pagination__round-link">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon pagination__icon-arrow"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\t\t</a>\n\t</div>\n\n\t<div class="pagination__more">\n\t  \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_white  pagination__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Показать еще 6</span>\n  \n</a>\n\t</div>\n</div>\n</div>\n'},8898:e=>{"use strict";e.exports='\n\n\n\n<section\n  class="company-history js-company-history"\n  >\n  <div class="company-history__slider swiper js-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          \n\n\n\n\n<div\n  class="split-blocks  split-blocks_last-show"\n  >\n  <div class="split-blocks__block">\n                  <div class="info-block-container">\n                \n\n\n<div\n  class="info-block info-block_size_xs"\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon circle-brand-icon_size_xs info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/cow-head-white.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/history-white.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n                ">\n      1999 год\n    </h2>\n  \n      <p class="info-block__text">Вторым продуктом, который мы вывели на рынок, стала сметана. Этот важный шаг был сделан в 2007 году, и с тех пор наша сметана завоевала любовь покупателей, благодаря своему нежному вкусу и натуральному составу.</p>\n  \n  </div>\n              </div>\n              </div>\n\n  <div class="split-blocks__block">\n                  \n\n\n<div\n  class="media-block"\n  >\n      <img\n      src="/assets/images/split-blocks/curd.webp"\n      alt="картинка"\n      loading="lazy"\n      class="media-block__picture"\n    >\n  </div>\n              </div>\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n\n<div\n  class="split-blocks  split-blocks_last-show"\n  >\n  <div class="split-blocks__block">\n                  <div class="info-block-container">\n                \n\n\n<div\n  class="info-block info-block_size_xs"\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon circle-brand-icon_size_xs info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/cow-head-white.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/history-white.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n                ">\n      2007 год\n    </h2>\n  \n      <p class="info-block__text">Вторым продуктом, который мы вывели на рынок, стала сметана. Этот важный шаг был сделан в 2007 году, и с тех пор наша сметана завоевала любовь покупателей, благодаря своему нежному вкусу и натуральному составу.</p>\n  \n  </div>\n              </div>\n              </div>\n\n  <div class="split-blocks__block">\n                  \n\n\n<div\n  class="media-block"\n  >\n      <img\n      src="/assets/images/split-blocks/curd.webp"\n      alt="картинка"\n      loading="lazy"\n      class="media-block__picture"\n    >\n  </div>\n              </div>\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n\n<div\n  class="split-blocks  split-blocks_last-show"\n  >\n  <div class="split-blocks__block">\n                  <div class="info-block-container">\n                \n\n\n<div\n  class="info-block info-block_size_xs"\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon circle-brand-icon_size_xs info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/cow-head-white.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/history-white.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n                ">\n      2015 год\n    </h2>\n  \n      <p class="info-block__text">
2222 Вторым продуктом, который мы вывели на рынок, стала сметана. Этот важный шаг был сделан в 2007 году, и с тех пор наша сметана завоевала любовь покупателей, благодаря своему нежному вкусу и натуральному составу.</p>\n  \n  </div>\n              </div>\n              </div>\n\n  <div class="split-blocks__block">\n                  \n\n\n<div\n  class="media-block"\n  >\n      <img\n      src="/assets/images/split-blocks/curd.webp"\n      alt="картинка"\n      loading="lazy"\n      class="media-block__picture"\n    >\n  </div>\n              </div>\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n\n<div\n  class="split-blocks  split-blocks_last-show"\n  >\n  <div class="split-blocks__block">\n                  <div class="info-block-container">\n                \n\n\n<div\n  class="info-block info-block_size_xs"\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon circle-brand-icon_size_xs info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/cow-head-white.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/history-white.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n                ">\n      2017 год\n    </h2>\n  \n      <p class="info-block__text">222 Вторым продуктом, который мы вывели на рынок, стала сметана. Этот важный шаг был сделан в 2007 году, и с тех пор наша сметана завоевала любовь покупателей, благодаря своему нежному вкусу и натуральному составу.</p>\n  \n  </div>\n              </div>\n              </div>\n\n  <div class="split-blocks__block">\n                  \n\n\n<div\n  class="media-block"\n  >\n      <img\n      src="/assets/images/split-blocks/curd.webp"\n      alt="картинка"\n      loading="lazy"\n      class="media-block__picture"\n    >\n  </div>\n              </div>\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n\n<div\n  class="split-blocks  split-blocks_last-show"\n  >\n  <div class="split-blocks__block">\n                  <div class="info-block-container">\n                \n\n\n<div\n  class="info-block info-block_size_xs"\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon circle-brand-icon_size_xs info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/cow-head-white.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/history-white.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n                ">\n      2020 год\n    </h2>\n  \n      <p class="info-block__text">2020 Вторым продуктом, который мы вывели на рынок, стала сметана. Этот важный шаг был сделан в 2007 году, и с тех пор наша сметана завоевала любовь покупателей, благодаря своему нежному вкусу и натуральному составу.</p>\n  \n  </div>\n              </div>\n              </div>\n\n  <div class="split-blocks__block">\n                  \n\n\n<div\n  class="media-block"\n  >\n      <img\n      src="/assets/images/split-blocks/curd.webp"\n      alt="картинка"\n      loading="lazy"\n      class="media-block__picture"\n    >\n  </div>\n              </div>\n</div>\n        </div>\n          </div>\n  </div>\n\n  <div class="company-history__scale js-scale">\n    <div class="company-history__scale-wrapper">\n              <div\n          data-step="0"\n          class="company-history__scale-step isActive"\n        >\n          <div class="company-history__scale-step-value">\n            \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon company-history__scale-step-value-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-drop" />\n</svg>\n            <div class="company-history__scale-step-value-text">1999</div>\n          </div>\n          <div class="company-history__scale-step-track"></div>\n        </div>\n              <div\n          data-step="1"\n          class="company-history__scale-step "\n        >\n          <div class="company-history__scale-step-value">\n            \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon company-history__scale-step-value-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-drop" />\n</svg>\n            <div class="company-history__scale-step-value-text">2007</div>\n          </div>\n          <div class="company-history__scale-step-track"></div>\n        </div>\n              <div\n          data-step="2"\n          class="company-history__scale-step "\n        >\n          <div class="company-history__scale-step-value">\n            \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon company-history__scale-step-value-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-drop" />\n</svg>\n            <div class="company-history__scale-step-value-text">2015</div>\n          </div>\n          <div class="company-history__scale-step-track"></div>\n        </div>\n              <div\n          data-step="3"\n          class="company-history__scale-step "\n        >\n          <div class="company-history__scale-step-value">\n            \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon company-history__scale-step-value-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-drop" />\n</svg>\n            <div class="company-history__scale-step-value-text">2017</div>\n          </div>\n          <div class="company-history__scale-step-track"></div>\n        </div>\n              <div\n          data-step="4"\n          class="company-history__scale-step "\n        >\n          <div class="company-history__scale-step-value">\n            \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon company-history__scale-step-value-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-drop" />\n</svg>\n            <div class="company-history__scale-step-value-text">2020</div>\n          </div>\n          <div class="company-history__scale-step-track"></div>\n        </div>\n          </div>\n  </div>\n</section>\n'},774:e=>{"use strict";e.exports='<div\n  class="contacts js-contacts"\n  data-pin="assets/images/contacts/mark.svg"\n>\n  <h1 class="contacts__title">Контакты</h1>\n\n  \n\n  \n<div\n  class="switch-box contacts__switcher js-contacts-switch-box"\n        >\n  <div class="switch-box__highlights js-switch-highlight"></div>\n      <button\n      type="button"\n      data-value="contacts-office"\n      class="switch-box__button"\n    >\n      Офис\n    </button>\n      <button\n      type="button"\n      data-value="contacts-factory"\n      class="switch-box__button"\n    >\n      Завод\n    </button>\n  </div>\n\n      <div\n      data-id="contacts-office"\n      class="js-contacts-tab contacts__item isActive"\n    >\n      <div class="contact-box">\n        <p>Центральный офис «Экомилк»</p>\n        <div class="contacts__address">Москва, ул. Верейская, д.17, офис 213</div>\n\n                \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_outline-white  contacts__button"\n  \n\t                href="https://yandex.ru/maps/?rtext=~55.710661, 37.443703&rtt=mt"\n                target="_blank"\n      >
2\n\n      <span class="button__text">Проложить маршрут</span>\n  \n</a>\n      </div>\n\n              <div class="contact-box">\n          <p>Отдел продаж</p>\n                                    <a href="tel:+7 495 771-74-23">+7 495 771-74-23</a>\n              <br>\n                                                <a href="mailto:[email protected]">[email protected]</a>\n                              </div>\n          </div>\n      <div\n      data-id="contacts-factory"\n      class="js-contacts-tab contacts__item "\n    >\n      <div class="contact-box">\n        <p>ЗАО Озерецкий молочный комбинат</p>\n        <div class="contacts__address">Московская обл., Дмитровский р-н, с. Озерецкое, 7А </div>\n\n                \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_outline-white  contacts__button"\n  \n\t                href="https://yandex.ru/maps/?rtext=~56.063273, 37.3955&rtt=mt"\n                target="_blank"\n      >\n\n      <span class="button__text">Проложить маршрут</span>\n  \n</a>\n      </div>\n\n              <div class="contact-box">\n          <p>Контакты завода</p>\n                                    <a href="tel:+7 495 987 45 17">+7 495 987 45 17</a>\n              <br>\n                                                <a href="mailto:[email protected]">[email protected]</a>\n                              </div>\n          </div>\n  \n  <div class="contact-box">\n    <p>Отдел HR</p>\n    <a href="mailto:[email protected]">[email protected]</a>\n  </div>\n\n  <div class="contact-box">\n    <p>Посмотреть актуальные вакансии</p>\n    <a\n      href="https://hh.ru"\n      target="_blank"\n      class="button button_theme_outline-white contacts__button"\n    >
2\n      <span class="button__text">Перейти на hh.ru</span>\n      <img src="assets/images/hh-logo.svg" alt="HeadHunter логотип">\n    </a>\n  </div>\n\n  <div id="map-container" class="contacts__map"></div>\n</div>\n'},3670:e=>{"use strict";e.exports='\n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n'},234:e=>{"use strict";e.exports='\n\n\n<div\n  class="error"\n  >\n  <picture class="error__image-container">\n    <source media="(min-width: 768px)" srcset="/assets/images/404/404-desktop.webp" />\n    <img class="error__image" src="/assets/images/404/404-mobile.webp" alt="404" />\n  </picture>\n\n  <div class="error__text">\n    Кажется, данной страницы не существует.\n    <br />Попробуйте уточнить адрес илиначните с главного.\n  </div>\n\n  \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_transparent-light  error__button"\n  \n\t                href="main.html"\n      >\n\n      <span class="button__text">Перейти на главную</span>\n  \n</a>\n</div>\n'},4470:e=>{"use strict";e.exports='\n\n\n<section\n  id="feedback-app"\n  class="feedback"\n  >\n  <div class="feedback__wrapper">\n    <h2 class="feedback__heading">\n      Есть вопросы? Свяжитесь с&nbsp;нами\n    </h2>\n\n    <feedback\n      action="https://ecomilk.artw.dev/ajax/forms/feedback"\n      class="feedback__form"\n    ></feedback>\n\n    <div class="feedback__picture">\n      <img src="/assets/images/feedback/cow-big.webp" alt="Корова">\n    </div>\n  </div>\n</section>\n'},2806:e=>{"use strict";e.exports='\n<footer class="footer">\n  <div class="footer__body">\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">
2\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n'},9526:e=>{"use strict";e.exports='\n\n\n<div\n  class="full-page-slider swiper"\n  >\n  <div class="full-page-slider__wrapper swiper-wrapper">\n      </div>\n</div>\n'},8910:e=>{"use strict";e.exports='\n\n\n\n      \n<div class="gallery-slider js-gallery-slider">\n  <div class="gallery-slider__wrapper swiper-wrapper">\n              <div class="gallery-slider__slide swiper-slide">\n                  <div\n            class="gallery-slider__slide-image-wrapper"\n            data-popup-invoker="newsGallery"\n            data-image-number="0"\n          >\n            <img\n              class="gallery-slider__slide-image"\n              src="/assets/images/news-detail/slider/image-1.webp"\n              alt="фото"\n              loading="lazy"\n            >\n          </div>\n                        </div>\n          <div class="gallery-slider__slide swiper-slide">\n                  <div\n            class="gallery-slider__slide-image-wrapper"\n            data-popup-invoker="newsGallery"\n            data-image-number="1"\n          >\n            <img\n              class="gallery-slider__slide-image"\n              src="/assets/images/news-detail/slider/image-2.webp"\n              alt="фото"\n              loading="lazy"\n            >\n          </div>\n                            <div\n            class="gallery-slider__slide-image-wrapper"\n            data-popup-invoker="newsGallery"\n            data-image-number="2"\n          >\n            <img\n              class="gallery-slider__slide-image"\n              src="/assets/images/news-detail/slider/image-3.webp"\n              alt="фото"\n              loading="lazy"\n            >\n          </div>\n                        </div>\n          <div class="gallery-slider__slide swiper-slide">\n                  <div\n            class="gallery-slider__slide-image-wrapper"\n            data-popup-invoker="newsGallery"\n            data-image-number="3"\n          >\n            <img\n              class="gallery-slider__slide-image"\n              src="/assets/images/news-detail/sli
2der/image-4.webp"\n              alt="фото"\n              loading="lazy"\n            >\n          </div>\n                        </div>\n      </div>\n\n  <div class="gallery-slider__controls">\n    \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  gallery-slider__prev js-gallery-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   gallery-slider__next js-gallery-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n  </div>\n\n  \n\n\n\n<div\n  class="popup popup_type_gallery"\n  data-popup="newsGallery"\n  >\n  <div class="popup__wrapper">\n    <div class="popup__content">\n      <button type="button" class="popup__close js-popup-close">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon popup__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n      </button>\n\n            <div class="gallery-popup-slider js-gallery-popup-slider">\n        <div class="gallery-popup-slider__wrapper swiper-wrapper">\n                      <div class="gallery-popup-slider__slide swiper-slide">\n              <img\n                class="gallery-popup-slider__slide-image"\n                src="/assets/images/news-detail/slider/image-1.webp"\n                alt="фото"\n                loading="lazy"\n              >\n            </div>\n                      <div class="gallery-popup-slider__slide swiper-slide">\n              <img\n                class="gallery-popup-slider__slide-image"\n                src="/assets/images/news-detail/slider/image-2.webp"\n                alt="фото"\n                loading="lazy"\n              >\n            </div>\n                      <div class="gallery-popup-slider__slide swiper-slide">\n              <img\n                class="gallery-popup-slider__slide-image"\n                src="/assets/images/news-detail/slider/image-3.webp"\n                alt="фото"\n                loading="lazy"\n              >\n            </div>\n                      <div class="gallery-popup-slider__slide swiper-slide">\n              <img\n                class="gallery-popup-slider__slide-image"\n                src="/assets/images/news-detail/slider/image-4.webp"\n                alt="фото"\n                loading="lazy"\n              >\n            </div>\n                  </div>\n\n        <div class="gallery-popup-slider__controls">\n          \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-white round-button_reverse  gallery-popup-slider__prev js-gallery-popup-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n          \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-white   gallery-popup-slider__next js-gallery-popup-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n        </div>\n      </div>\n        </div>\n  </div>\n</div>\n</div>\n'},3366:e=>{"use strict";e.exports='\n\n\n\n<header\n  class="header  js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n'},6780:e=>{"use strict";e.exports='\n\n\n\n<section\n  class="history-numbers"\n  >\n  <div class="history-numbers__content">\n    <div class="history-numbers__info">\n              <div class="history-numbers__info-item">\n          \n\n\n\n<div\n  class="number-item"\n  >\n  <div class="number-item__top">\n    <span class="number-item__number">6</span>\n      </div>\n      <div class="number-item__caption">\n      торговых марок\n    </div>\n  </div>\n        </div>\n              <div class="history-numbers__info-item">\n          \n\n\n\n<div\n  class="number-item"\n  >\n  <div class="number-item__top">\n    <span class="number-item__number">50</span>\n          <span class="number-item__addition">+</span>\n      </div>\n      <div class="number-item__caption">\n      наименований\n    </div>\n  </div>\n        </div>\n              <div class="history-numbers__info-item">\n          \n\n\n\n<div\n  class="number-item"\n  >\n  <div class="number-item__top">\n    <span class="number-item__number">15</span>\n      </div>\n      <div class="number-item__caption">\n      лет на рынке\n    </div>\n  </div>\n        </div>\n              <div class="history-numbers__info-item">\n          \n\n\n\n<div\n  class="number-item"\n  >\n  <div class="number-item__top">\n    <span class="number-item__number">89</span>\n      </div>\n      <div class="number-item__caption">\n      регионов России\n    </div>\n  </div>\n        </div>\n          </div>\n\n    <div class="history-numbers__media">\n      <img\n        class="history-numbers__media-text"\n        src="/assets/images/nutrients/text.svg"\n        alt="нежность, любовь и польза в каждой упаковке"\n        loading="lazy"\n      >\n\n      <img\n        class="history-numbers__media-picture"\n        src="/assets/images/history-numbers/cow-promo.webp"\n        alt="корова"\n        loading="lazy"\n      >\n    </div>\n  </div>\n</section>\n'},3842:e=>{"use strict";e.exports='\n\n\n<div\n  class="info-block "\n  >\n  \n  \n  \n  </div>\n'},126:e=>{"use strict";e.exports='\n\n\n\n<div\n  class="language-buttons "\n  >\n  </div>\n'},7626:e=>{"use strict";e.exports='\n\n\n<div\n  class="media-block"\n  >\n      <img\n      src=""\n      alt="картинка"\n      loading="lazy"\n      class="media-block__picture"\n    >\n  </div>\n'},2502:e=>{"use strict";e.exports='\n\n\n<section\n  class="milk-family"\n  >\n  \n\n\n\n\n<div\n  class="split-blocks  "\n  >\n  <div class="split-blocks__block">\n          <div class="milk-family__block">\n        \n\n\n<div\n  class="info-block "\n  >\n  \n  \n  \n  </div>\n\n              </div>\n      </div>\n\n  <div class="split-blocks__block">\n          \n\n\n<div\n  class="media-block"\n  >\n      <img\n      src=""\n      alt="картинка"\n      loading="lazy"\n      class="media-block__picture"\n    >\n  </div>\n      </div>\n</div>\n</section>\n'},7142:e=>{"use strict";e.exports='<div class="news-list">\n\t<div class="news-list__posts">\n    \n          \n\n  \n<a\n  class="post-card post-card_size_large news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-1.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из л
2учших в России. Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России.</p>\n  </div>\n</a>\n          \n\n  \n<a\n  class="post-card post-card_size_default news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024 Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России. Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России. Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России.</p>\n  </div>\n</a>\n          \n\n  \n<a\n  class="post-card post-card_size_default news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024» Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024 Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n          \n\n  \n<a\n  class="post-card post-card_size_default news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n          \n\n  \n<a\n  class="post-card post-card_size_default news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n          \n\n  \n<a\n  class="post-card post-card_size_default news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из л
2учших в России</p>\n  </div>\n</a>\n          \n\n  \n<a\n  class="post-card post-card_size_default news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n          \n\n  \n<a\n  class="post-card post-card_size_default news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n      </div>\n\n  \n\n  \n<div\n  class="pagination  news-list__pagination"\n            >\n\t<div class="pagination__pages">\n\t\t<a href="#" class="pagination__round-link pagination__round-link_prev">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon pagination__icon-arrow"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\t\t</a>\n\n          <a\n        href="#"\n        class="\n          pagination__round-link\n          pagination__round-link_active                            "\n      >\n        1\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                                      "\n      >\n        2\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                    pagination__round-link_disabled                  "\n      >\n        ...\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                              pagination__round-link_hidden        "\n      >\n        5\n      </a>\n    \n\t\t<a href="#" class="pagination__round-link">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon pagination__icon-arrow"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\t\t</a>\n\t</div>\n\n\t<div class="pagination__more">\n\t  \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_transparent-primary  pagination__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Показать еще 6</span>\n  \n</a>\n\t</div>\n</div>\n</div>\n'},7866:e=>{"use strict";e.exports='\n\n\n\n\n<section\n  class="nutrients"\n  >\n  <div class="nutrients__content">\n    <picture class="nutrients__image-container">\n      <source\n        media="(min-width: 768px)"\n        srcset="/assets/images/nutrients/sour-cream-desktop.webp"\n      >\n      <img\n        class="nutrients__image"\n        src="/assets/images/nutrients/sour-cream-mobile.webp"\n        alt="сметана сливочная"\n      >\n    </picture>\n\n    <img\n      class="nutrients__text-image"\n      src="/assets/images/nutrients/text.svg"\n      alt="нежность, любовь и польза в каждой упаковке"\n      loading="lazy"\n    >\n\n          <div class="nutrients__info nutrients__info_name_composition">\n        <img\n          class="nutrients__info-image"\n          src="/assets/images/nutrients/composition.svg"\n          alt="Натуральный состав"\n          loading="lazy"\n        >\n      </div>\n          <div class="nutrients__info nutrients__info_name_microelements">\n        <img\n          class="nutrients__info-image"\n          src="/assets/images/nutrients/microelements.svg"\n          alt="Полезные микроэлементы"\n          loading="lazy"\n        >\n      </div>\n          <div class="nutrients__info nutrients__info_name_b9">\n        <img\n          class="nutrients__info-image"\n          src="/assets/images/nutrients/b9.svg"\n          alt="B9"\n          loading="lazy"\n        >\n      </div>\n          <div class="nutrients__info nutrients__info_name_b12">\n        <img\n          class="nutrients__info-image"\n          src="/assets/images/nutrients/b12.svg"\n          alt="B12"\n          loading="lazy"\n        >\n      </div>\n          <div class="nutrients__info nutrients__info_name_ca">\n        <img\n          class="nutrients__info-image"\n          src="/assets/images/nutrients/ca.svg"\n          alt="Ca"\n          loading="lazy"\n        >\n      </div>\n          <div class="nutrients__info nutrients__info_name_zn">\n        <img\n          class="nutrients__info-image"\n          src="/assets/images/nutrients/zn.svg"\n          alt="Zn"\n          loading="lazy"\n        >\n      </div>\n    \n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_light  nutrients__button"\n  \n\t                href="#"\n      >
2\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</section>\n'},5516:e=>{"use strict";e.exports='\n\n\n<div\n  class="page-header"\n  >\n  \n\n\n  \n<ul\n  class="breadcrumbs breadcrumbs_light page-header__breadcrumbs"\n        >\n  </ul>\n\n  <h1 class="page-header__title"></h1>\n  <div class="page-header__text">\n    \n  </div>\n\n  </div>\n'},8646:e=>{"use strict";e.exports='\n\n\n\n<div\n  class="partners "\n  >\n  <div class="partners__list">\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n      </div>\n  <div class="partners__gradient"></div>\n</div>\n'},356:e=>{"use strict";e.exports='\n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url();"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime=""></time>\n    <div class="post-card__title"></div>\n    <p class="post-card__text"></p>\n  </div>\n</a>\n'},5812:e=>{"use strict";e.exports='<div class="post-card-banner">\n  <div class="post-card-banner__text">Вернуться ко&nbsp;всем новостям</div>\n</div>'},7492:e=>{"use strict";e.exports='\n\n\n\n<div\n  class="post-card-carousel js-post-card-carousel"\n  >\n  <div\n    data-count-slides="grid"\n    class="swiper js-post-card-carousel-slider"\n  >\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/recipes/slider/slide-1.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime=""></time>\n    <div class="post-card__title">Котлеты из индейки</div>\n    <p class="post-card__text">Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/recipes/slider/slide-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime=""></time>\n    <div class="post-card__title">Тарт с лимоном</div>\n    <p class="post-card__text">Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/recipes/slider/slide-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime=""></time>\n    <div class="post-card__title">Тарт с лимоном</div>\n    <p class="post-card__text">Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/recipes/slider/slide-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime=""></time>\n    <div class="post-card__title">Тарт с лимоном</div>\n    <p class="post-card__text">Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/recipes/slider/slide-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime=""></time>\n    <div class="post-card__title">Тарт с лимоном</div>\n    <p class="post-card__text">Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья</p>\n  </div>\n</a>\n        </div>\n          </div>\n  </div>\n</div>\n'},7222:e=>{"use strict";e.exports='\n\n\n<div\n  class="post-header "\n  >\n  <div class="post-header__top">\n    <h1 class="post-header__title"></h1>\n\n      </div>\n\n  \n  \n  </div>\n'},1578:e=>{"use strict";
2e.exports='\n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n  \n  <div class="product-card__image">\n\t  <img src="" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title"></div>\n\n    <div class="product-card__row">\n          </div>\n  </div>\n</a>\n'},2258:e=>{"use strict";e.exports='\n <div class="product-detail js-product-detail">\n   \n\n\n\n<ul\n  class="breadcrumbs breadcrumbs_light"\n  >\n  <li class="breadcrumbs__item"><a\n            href="main.html"\n            class="breadcrumbs__link breadcrumbs__link_type_home"\n          ><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-home"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-home" /></svg></a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="products.html"\n            class="breadcrumbs__link"\n          >Продукция</a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="category.html"\n            class="breadcrumbs__link"\n          >Кефир</a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="prodcts-detail.html"\n            class="breadcrumbs__link breadcrumbs__link_type_current"\n          >Кефир Экомилк</a></li></ul>\n\n   <div class="product-detail__card product-detail-card">\n     <h1 class="product-detail-card__name">Кефир Экомилк</h1>\n\n     <div class="product-detail-card__picture">\n       <img\n         class="js-product-image"\n         src="/assets/images/product-detail/product-detail-1.webp"\n         alt="Изображение продукта"\n       />\n     </div>\n\n     <div class="product-detail-card__properties">\n                \n\n  \n<div\n  class="product-property product-property_size_xs product-detail-card__properties-award"\n        >\n  <strong>Роскачество</strong>\n  <span>2024</span>\n</div>\n       \n       <div class="product-detail-card__properties-list js-product-props">\n                    \n\n\n<div\n  class="product-property "\n  >\n  <strong>1%</strong>\n  <span>жирности</span>\n</div>\n                    \n\n\n<div\n  class="product-property "\n  >\n  <strong>955</strong>\n  <span>мл, объем</span>\n</div>\n                    \n\n\n<div\n  class="product-property "\n  >\n  <strong>Гост</strong>\n  <span>по стандартам</span>\n</div>\n                </div>\n     </div>\n\n     \n\n  \n<div\n  class="product-nutrients product-detail-card__nutrients"\n        >\n      <div class="product-nutrients__group">\n      <div class="product-nutrients__title">Пищевая ценность на 100 гр продукта</div>\n      <div class="product-nutrients__props">\n                  <div class="product-nutrients__property">\n            <span class="product-nutrients__property-name">Белки</span>\n            <div class="product-nutrients__property-value">0,6 г</div>\n          </div>\n                  <div class="product-nutrients__property">\n            <span class="product-nutrients__property-name">Жиры</span>\n            <div class="product-nutrients__property-value">82,5 г</div>\n          </div>\n                  <div class="product-nutrients__property">\n            <span class="product-nutrients__property-name">Углеводы</span>\n            <div class="product-nutrients__property-value">0,8 г</div>\n          </div>\n                  <div class="product-nutrients__property">\n            <span class="product-nutrients__property-name">Ккал</span>\n            <div class="product-nutrients__property-value">748</div>\n          </div>\n              </div>\n    </div>\n      <div class="product-nutrients__group">\n      <div class="product-nutrients__title">Условия хранения</div>\n      <div class="product-nutrients__props">\n                  <div class="product-nutrients__property">
2\n            <span class="product-nutrients__property-name">180 суток</span>\n            <div class="product-nutrients__property-value">16±2°C</div>\n          </div>\n                  <div class="product-nutrients__property">\n            <span class="product-nutrients__property-name">120 суток</span>\n            <div class="product-nutrients__property-value">6±2°C</div>\n          </div>\n                  <div class="product-nutrients__property">\n            <span class="product-nutrients__property-name">60 суток</span>\n            <div class="product-nutrients__property-value">3±2°C</div>\n          </div>\n              </div>\n    </div>\n  </div>\n\n     <div class="product-detail-card__text">\n       Полезный кисломолочный продукт, приготовленный из&nbsp;натуральных ингредиентов. Благодаря молочнокислым бактериям, он&nbsp;благотворно влияет на&nbsp;микрофлору кишечника и&nbsp;работу органов пищеварения, хорошо очищает организм от&nbsp;шлаков и&nbsp;токсинов, регулирует обмен веществ и&nbsp;способствует похудению.\n     </div>\n\n     <div class="product-detail-card__offers">\n                <button\n           data-index="0"\n           class="product-detail-card__offers-item js-product-offer isActive"\n           type="button"\n         >\n           <span class="product-detail-card__offers-item-picture">\n             <img src="/assets/images/product-detail/product-detail-1.webp" alt="Изображение продукта">\n           </span>\n           <span class="product-detail-card__offers-item-name">955 мл 1%</span>\n         </button>\n                <button\n           data-index="1"\n           class="product-detail-card__offers-item js-product-offer "\n           type="button"\n         >\n           <span class="product-detail-card__offers-item-picture">\n             <img src="/assets/images/product-detail/product-detail-2.webp" alt="Изображение продукта">\n           </span>\n           <span class="product-detail-card__offers-item-name">944 мл 3.2%</span>\n         </button>\n                <button\n           data-index="2"\n           class="product-detail-card__offers-item js-product-offer "\n           type="button"\n         >\n           <span class="product-detail-card__offers-item-picture">\n             <img src="/assets/images/product-detail/product-detail-1.webp" alt="Изображение продукта">\n           </span>\n           <span class="product-detail-card__offers-item-name">1000 мл 5%</span>\n         </button>\n                <button\n           data-index="3"\n           class="product-detail-card__offers-item js-product-offer "\n           type="button"\n         >\n           <span class="product-detail-card__offers-item-picture">\n             <img src="/assets/images/product-detail/product-detail-2.webp" alt="Изображение продукта">\n           </span>\n           <span class="product-detail-card__offers-item-name">1200 мл 5%</span>\n         </button>\n            </div>\n   </div>\n </div>\n'},2270:e=>{"use strict";e.exports='\n\n\n<div\n  class="product-nutrients"\n  >\n  </div>\n'},4316:e=>{"use strict";e.exports='\n\n\n\n<section\n  class="products-carousel js-products-carousel "\n  >\n  <h2 class="products-carousel__title">\n    \n  </h2>\n\n  <div class="products-carousel__slider swiper js-products-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_low-in-calories product-card__promo-label"\n        >\n  Мало калорий\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-1.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творог десертный клубника 5%</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">
2\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_hit product-card__promo-label"\n        >\n  Хит\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-2.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Сыр греческий Fetica</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          275 г\n        </div>\n              <div class="\n        product-card__weight\n              ">\n          400 г\n        </div>\n          </div>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_new product-card__promo-label"\n        >\n  Новинка\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-3.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творожная масса Ваниль</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-4.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Йогурт с кленовым сиропом <br>и грецким орехом 4,2%</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          130 г\n        </div>\n          </div>\n  </div>\n</a>\n        </div>\n          </div>\n  </div>\n\n  <div class="products-carousel__bottom">\n    <div class="products-carousel__slider-controls">\n      \n\n\n\n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  js-products-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n\n\n\t\n<button\n\tclass="round-button round-button_theme_light   js-products-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    <div\n      class="products-carousel__slider-pagination swiper-pagination js-products-slider-pagination"\n    ></div>\n\n    \n\n\n\n\t\n\t\n<a\n\tclass="button button_theme_primary  products-carousel__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</section>\n'},20:e=>{"use strict";e.exports='\n\n\n\n\n<section\n  class="promo-catalog js-promo-catalog"\n  >\n  <div class="promo-catalog__content">\n    <div class="promo-catalog__top">\n      <h2 class="promo-catalog__title">Каталог</h2>\n      <div class="promo-catalog__brands-slider js-promo-catalog-brands-slider">\n        <div class="promo-catalog__brands-slider-wrapper swiper-wrapper">\n                      <div class="promo-catalog__logo-wrapper promo-catalog__brands-slide swiper-slide" data-brand="ecomilk">\n              <img\n                class="promo-catalog__logo-image"\n                src="/assets/images/catalog/logotypes/ecomilk.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n\n              <img\n                class="promo-catalog__logo-image promo-catalog__logo-active-image"\n                src="/assets/images/catalog/logotypes/ecomilk-active.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n            </div>\n                      <div class="promo-catalog__logo-wrapper promo-catalog__brands-slide swiper-slide" data-brand="cheese">\n              <img\n                class="promo-catalog__logo-image"\n                src="/assets/images/catalog/logotypes/cheese.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n\n              <img\n                class="promo-catalog__logo-image promo-catalog__logo-active-image"\n                src="/assets/images/catalog/logotypes/cheese-active.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n            </div>\n                      <div class="promo-catalog__logo-wrapper promo-catalog__brands-slide swiper-slide" data-brand="dessert">\n              <img\n                class="promo-catalog__logo-image"\n                src="/assets/images/catalog/logotypes/dessert.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n\n              <img\n                class="promo-catalog__logo-image promo-catalog__logo-active-image"\n                src="/assets/images/catalog/logotypes/dessert-active.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n            </div>\n                      <div class="promo-catalog__logo-wrapper promo-catalog__brands-slide swiper-slide" data-brand="altai">\n              <img\n                class="promo-catalog__logo-image"\n                src="/assets/images/catalog/logotypes/altai.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n\n              <img\n                class="promo-catalog__logo-image promo-catalog__logo-active-image"\n                src="/assets/images/catalog/logotypes/altai-active.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n            </div>\n                      <div class="promo-catalog__logo-wrapper promo-catalog__brands-slide swiper-slide" data-brand="cow">\n              <img\n                class="promo-catalog__logo-image"\n                src="/assets/images/catalog/logotypes/cow.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n\n              <img\n                class="promo-catalog__logo-image promo-catalog__logo-active-image"\n                src="/assets/images/catalog/logotypes/cow-active.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n            </div>\n                      <div class="promo-catalog__logo-wrapper promo-catalog__brands-slide swiper-slide" data-brand="dp">\n              <img\n                class="promo-catalog__logo-image"\n                src="/assets/images/catalog/logotypes/dp.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n\n              <img\n                class="promo-catalog__logo-image promo-catalog__logo-active-image"\n                src="/assets/images/catalog/logotypes/dp-active.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n            </div>\n                      <div class="promo-catalog__logo-wrapper promo-catalog__brands-slide swiper-slide" data-brand="horeca">\n              <img\n                class="promo-catalog__logo-image"\n                src="/assets/images/catalog/logotypes/horeca.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n\n              <img\n                class="promo-catalog__logo-image promo-catalog__logo-active-image"\n                src="/assets/images/catalog/logotypes/horeca-active.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n            </div>\n                  </div>\n      </div>\n    </div>\n    <div class="promo-catalog__bottom">\n              \n\n\n  \n<div\n  class="promo-catalog-slider js-promo-catalog-slider-container promo-catalog__slider"\n                  data-sli
2der="ecomilk"\n      >\n  <div class="swiper js-promo-catalog-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 1"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сметана сливочная 20%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    315 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    5 кг\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-2.webp"\n                alt="слайд 2"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-3.webp"\n                alt="слайд 3"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Кефир 2,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    925 мл\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-4.webp"\n                alt="слайд 4"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-5.webp"\n                alt="слайд 5"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сыр плавленный\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    400 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-6.webp"\n                alt="слайд 6"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-7.webp"\n                alt="слайд 7"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="promo-catalog-slider__bottom">\n    <div class="promo-catalog-slider__pagination js-promo-catalog-slider-pagination"></div>\n\n    <div class="promo-catalog-slider__controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white round-button_reverse  js-promo-catalog-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white   js-promo-catalog-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  promo-catalog-slider__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</div>\n              \n\n\n  \n<div\n  class="promo-catalog-slider js-promo-catalog-slider-container promo-catalog__slider"\n                  data-slider="cheese"\n      >\n  <div class="swiper js-promo-catalog-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 1"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сметана сливочная 20%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    315 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    5 кг\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 2"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 3"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Кефир 2,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    925 мл\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 4"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 5"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сыр плавленный\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    400 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 6"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 7"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="promo-catalog-slider__bottom">\n    <div class="promo-catalog-slider__pagination js-promo-catalog-slider-pagination"></div>\n\n    <div class="promo-catalog-slider__controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white round-button_reverse  js-promo-catalog-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white   js-promo-catalog-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  promo-catalog-slider__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</div>\n              \n\n\n  \n<div\n  class="promo-catalog-slider js-promo-catalog-slider-container promo-catalog__slider"\n                  data-slider="dessert"\n      >\n  <div class="swiper js-promo-catalog-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 1"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сметана сливочная 20%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    315 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    5 кг\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 2"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 3"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Кефир 2,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    925 мл\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 4"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 5"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сыр плавленный\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    400 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 6"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 7"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="promo-catalog-slider__bottom">\n    <div class="promo-catalog-slider__pagination js-promo-catalog-slider-pagination"></div>\n\n    <div class="promo-catalog-slider__controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white round-button_reverse  js-promo-catalog-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white   js-promo-catalog-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  promo-catalog-slider__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</div>\n              \n\n\n  \n<div\n  class="promo-catalog-slider js-promo-catalog-slider-container promo-catalog__slider"\n                  data-slider="altai"\n      >\n  <div class="swiper js-promo-catalog-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 1"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сметана сливочная 20%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    315 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    5 кг\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 2"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 3"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Кефир 2,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    925 мл\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 4"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 5"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сыр плавленный\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    400 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 6"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 7"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="promo-catalog-slider__bottom">\n    <div class="promo-catalog-slider__pagination js-promo-catalog-slider-pagination"></div>\n\n    <div class="promo-catalog-slider__controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white round-button_reverse  js-promo-catalog-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white   js-promo-catalog-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  promo-catalog-slider__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</div>\n              \n\n\n  \n<div\n  class="promo-catalog-slider js-promo-catalog-slider-container promo-catalog__slider"\n                  data-slider="cow"\n      >\n  <div class="swiper js-promo-catalog-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 1"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сметана сливочная 20%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    315 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    5 кг\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 2"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 3"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Кефир 2,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    925 мл\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 4"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 5"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сыр плавленный\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    400 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 6"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 7"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="promo-catalog-slider__bottom">\n    <div class="promo-catalog-slider__pagination js-promo-catalog-slider-pagination"></div>\n\n    <div class="promo-catalog-slider__controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white round-button_reverse  js-promo-catalog-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white   js-promo-catalog-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  promo-catalog-slider__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</div>\n              \n\n\n  \n<div\n  class="promo-catalog-slider js-promo-catalog-slider-container promo-catalog__slider"\n                  data-slider="dp"\n      >\n  <div class="swiper js-promo-catalog-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 1"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сметана сливочная 20%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    315 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    5 кг\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 2"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 3"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Кефир 2,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    925 мл\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 4"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 5"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сыр плавленный\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    400 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 6"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 7"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="promo-catalog-slider__bottom">\n    <div class="promo-catalog-slider__pagination js-promo-catalog-slider-pagination"></div>\n\n    <div class="promo-catalog-slider__controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white round-button_reverse  js-promo-catalog-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white   js-promo-catalog-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  promo-catalog-slider__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</div>\n              \n\n\n  \n<div\n  class="promo-catalog-slider js-promo-catalog-slider-container promo-catalog__slider"\n                  data-slider="horeca"\n      >\n  <div class="swiper js-promo-catalog-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 1"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сметана сливочная 20%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    315 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    5 кг\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-2.webp"\n                alt="слайд 2"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-3.webp"\n                alt="слайд 3"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Кефир 2,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    925 мл\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-4.webp"\n                alt="слайд 4"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-5.webp"\n                alt="слайд 5"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сыр плавленный\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    400 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-6.webp"\n                alt="слайд 6"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-7.webp"\n                alt="слайд 7"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="promo-catalog-slider__bottom">\n    <div class="promo-catalog-slider__pagination js-promo-catalog-slider-pagination"></div>\n\n    <div class="promo-catalog-slider__controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white round-button_reverse  js-promo-catalog-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white   js-promo-catalog-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  promo-catalog-slider__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</div>\n          </div>\n  </div>\n</section>\n'},6:e=>{"use strict";e.exports='\n\n\n\n<div\n  class="promo-catalog-slider js-promo-catalog-slider-container"\n  >\n  <div class="swiper js-promo-catalog-slider">\n    <div class="swiper-wrapper">\n          </div>\n  </div>\n\n  <div class="promo-catalog-slider__bottom">\n    <div class="promo-catalog-slider__pagination js-promo-catalog-slider-pagination"></div>\n\n    <div class="promo-catalog-slider__controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white round-button_reverse  js-promo-catalog-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white   js-promo-catalog-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  promo-catalog-slider__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</div>\n'},5118:e=>{"use strict";e.exports='\n\n\n<section\n  class="promo-picture-banner"\n  >\n  <div class="promo-picture-banner__content">\n    <img\n      src="/assets/images/about/family.webp"\n      alt="Изображение"\n      class="promo-picture-banner__picture"\n    >\n\n    <div class="promo-picture-banner__title">\n      Молочная семья экомилк\n    </div>\n  </div>\n</section>\n'},2508:e=>{"use strict";e.exports='\n\n\n<section\n  class="promo-video"\n  >\n  \n\n  \n<div\n  class="video js-video promo-video__video"\n        >\n  <video\n    class="video__player js-player"\n    loop\n    controls\n    preload="auto"\n    poster=""\n  >\n          </video>\n\n  <div class="video__screen js-screen">\n    <img\n      class="video__screen-preview"\n      src=""\n      alt="о нашем производстве"\n      loading="lazy"\n    >\n\n    <button\n      class="video__play-button"\n      type="button"\n    >\n      <img\n        class="video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      >\n    </button>\n  </div>\n</div>\n</section>\n'},682:e=>{"use strict";e.exports='\n\n\n\n<section\n  class="qualities"\n  >\n  <h2 class="qualities__heading">\n    Гарантии качества\n  </h2>\n\n  <div class="qualities__slider swiper js-qualities-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          \n\n\n<div\n  class="quality-card "\n  >\n  <div class="quality-card__picture">\n    <img src="/assets/images/qualities/1.webp" alt="Изображение">\n  </div>\n\n  <div class="quality-card__block">\n    <div class="quality-card__header">\n      <div class="quality-card__number">\n                  01\n              </div>\n      <div class="quality-card__title">\n        Технологичное и эффективное оборудование\n      </div>\n    </div>\n\n    <div class="quality-card__text">\n      <p>Это позволяет нам не&nbsp;только соблюдать все стандарты ГОСТ, но&nbsp;и&nbsp;следовать европейским экологическим требованиям по&nbsp;защите окружающей среды. Все это делает наше масло, молоко и&nbsp;сметану аппетитными и&nbsp;полезными&nbsp;&mdash; такими, какими вы&nbsp;любите!</p>\n    </div>\n  </div>\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<div\n  class="quality-card quality-card_theme_light"\n  >\n  <div class="quality-card__picture">\n    <img src="/assets/images/qualities/2.webp" alt="Изображение">\n  </div>\n\n  <div class="quality-card__block">\n    <div class="quality-card__header">\n      <div class="quality-card__number">\n                  02\n              </div>\n      <div class="quality-card__title">\n        Высочайший уровень качества продукции\n      </div>\n    </div>\n\n    <div class="quality-card__text">\n      <p>Мы&nbsp;гордимся нашей собственной лабораторией, сотрудники которой тщательно следя
2т за&nbsp;каждым этапом приёмки сырья и&nbsp;производства продукции.</p>\n<p>Закрытый цикл работы нашего оборудования подразумевает минимальное участие человека в&nbsp;выпуске молочной продукции&nbsp;&mdash; ошибки исключены.</p>\n    </div>\n  </div>\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<div\n  class="quality-card "\n  >\n  <div class="quality-card__picture">\n    <img src="/assets/images/qualities/3.webp" alt="Изображение">\n  </div>\n\n  <div class="quality-card__block">\n    <div class="quality-card__header">\n      <div class="quality-card__number">\n                  03\n              </div>\n      <div class="quality-card__title">\n        Сплоченная команда\n      </div>\n    </div>\n\n    <div class="quality-card__text">\n      <p>За&nbsp;каждым нашим продуктом&nbsp;&mdash; люди, которые искренне любят то, чем они занимаются. </p>\n<p>Мы&nbsp;называем нашу компанию семейной за&nbsp;ту&nbsp;теплоту и&nbsp;комфорт, которые мы&nbsp;испытываем каждый день, работая для вас. Каждый человек в&nbsp;нашем коллективе важен, и&nbsp;он&nbsp;это знает.</p>\n    </div>\n  </div>\n</div>\n        </div>\n          </div>\n\n    <div class="qualities__slider-controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  js-prev-btn"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   js-next-btn"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    <div\n      class="qualities__slider-pagination swiper-pagination js-pagination"\n    ></div>\n  </div>\n</section>\n'},5862:e=>{"use strict";e.exports='\n\n\n<div\n  class="quality-card "\n  >\n  <div class="quality-card__picture">\n    <img src="" alt="Изображение">\n  </div>\n\n  <div class="quality-card__block">\n    <div class="quality-card__header">\n      <div class="quality-card__number">\n                  0\n              </div>\n      <div class="quality-card__title">\n        \n      </div>\n    </div>\n\n    <div class="quality-card__text">\n      \n    </div>\n  </div>\n</div>\n'},7230:e=>{"use strict";e.exports='\n<section class="read-also">\n  <h2 class="read-also__title">Читайте также</h2>\n\n  \n    \n\n  \n\n<div\n  class="post-card-carousel js-post-card-carousel read-also__slider"\n        >\n  <div\n    data-count-slides="grid"\n    class="swiper js-post-card-carousel-slider"\n  >\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-1.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2025»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из л
2учших в России</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-1.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2026»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2027»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-1.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2028»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2029»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2030»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-1.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из л
2учших в России</p>\n  </div>\n</a>\n        </div>\n          </div>\n  </div>\n</div>\n  </section>\n\n'},4224:e=>{"use strict";e.exports='\n\n\n<a\n  class="recipe-card"\n    href="recipe-detail.html"\n>\n      \n\n  \n<div\n  class="video-tag recipe-card__video-tag"\n        >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon video-tag__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-play" />\n</svg>\n  <div class="video-tag__caption">\n    <span class="video-tag__caption-text video-tag__caption-text_desktop">\n      Видео-рецепт\n    </span>\n    <span class="video-tag__caption-text video-tag__caption-text_mobile">\n      Видео-рецепт\n    </span>\n  </div>\n</div>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    \n  </div>\n\n  <div class="recipe-card__text">\n    \n  </div>\n\n  <div class="recipe-card__options">\n      </div>\n</a>\n\n\n'},8470:e=>{"use strict";e.exports='\n\n\n<a\n  class="recipe-card-promo "\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      \n    </div>\n\n    <div class="recipe-card-promo__text">\n      \n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n'},7974:e=>{"use strict";e.exports='\n\n<section class="recipe-detail page-content">\n  <div class="recipe-detail__content">\n    <h3>О блюде</h3>\n\n    <div class="recipe-detail__text">\n      <p>\n        \n      </p>\n    </div>\n\n    <div class="recipe-detail__ingredients recipe-ingredients">\n      <div class="recipe-ingredients__title">\n        Ингредиенты <span>(0)</span>\n      </div>\n          </div>\n\n    \n    \n    \n<div class="sharing">\n\t<div class="sharing__text">Поделиться</div>\n\t\t\t<a class="sharing__link" href="https://vk.com/ecomilkru">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon sharing__link-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-footer-vk" />\n</svg>\n\t\t</a>\n\t</div>\n  </div>\n</section>\n'},950:e=>{"use strict";e.exports='\n\n\n<div\n  class="recipes"\n  >\n  <div class="recipes__list">\n                  \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n      \n\n  \n<div\n  class="video-tag recipe-card__video-tag"\n        >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon video-tag__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-play" />\n</svg>\n  <div class="video-tag__caption">\n    <span class="video-tag__caption-text video-tag__caption-text_desktop">\n      Видео-рецепт\n    </span>\n    <span class="video-tag__caption-text video-tag__caption-text_mobile">\n      Видео-рецепт\n    </span>\n  </div>\n</div>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n</a>\n\n\n                        \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n      \n\n  \n<div\n  class="video-tag recipe-card__video-tag"\n        >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon video-tag__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-play" />\n</svg>\n  <div class="video-tag__caption">\n    <span class="video-tag__caption-text video-tag__caption-text_desktop">\n      Видео-рецепт\n    </span>\n    <span class="video-tag__caption-text video-tag__caption-text_mobile">\n      Видео-рецепт\n    </span>\n  </div>\n</div>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n</a>\n\n\n                        \n\n  \n<a\n  class="recipe-card-promo  recipes__card"\n          href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Котлеты из индейки\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="cutlets" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-1.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#cutlets) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n                        \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n      \n\n  \n<div\n  class="video-tag recipe-card__video-tag"\n        >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon video-tag__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-play" />\n</svg>\n  <div class="video-tag__caption">\n    <span class="video-tag__caption-text video-tag__caption-text_desktop">\n      Видео-рецепт\n    </span>\n    <span class="video-tag__caption-text video-tag__caption-text_mobile">\n      Видео-рецепт\n    </span>\n  </div>\n</div>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n</a>\n\n\n                        \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n</a>\n\n\n                        \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n</a>\n\n\n                        \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n</a>\n\n\n                        \n\n  \n<a\n  class="recipe-card-promo  recipes__card"\n          href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Котлеты из индейки\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="cutlets-2" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-1.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#cutlets-2) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n      \n\n  \n<div\n  class="video-tag recipe-card-promo__video-tag"\n        >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon video-tag__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-play" />\n</svg>\n  <div class="video-tag__caption">\n    <span class="video-tag__caption-text video-tag__caption-text_desktop">\n      Видео-рецепт\n    </span>\n    <span class="video-tag__caption-text video-tag__caption-text_mobile">\n      Видео\n    </span>\n  </div>\n</div>\n  </a>\n                        \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n</a>\n\n\n                        \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n</a>\n\n\n            </div>\n\n  \n\n  \n<div\n  class="pagination  recipes__pagination"\n            >\n\t<div class="pagination__pages">\n\t\t<a href="#" class="pagination__round-link pagination__round-link_prev">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon pagination__icon-arrow"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\t\t</a>\n\n          <a\n        href="#"\n        class="\n          pagination__round-link\n          pagination__round-link_active                            "\n      >\n        1\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                                      "\n      >\n        2\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                    pagination__round-link_disabled                  "\n      >\n        ...\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                              pagination__round-link_hidden        "\n      >\n        5\n      </a>\n    \n\t\t<a href="#" class="pagination__round-link">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon pagination__icon-arrow"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\t\t</a>\n\t</div>\n\n\t<div class="pagination__more">\n\t  \n\n\n\n\t\n\t\n<a\n\tclass="button button_theme_transparent-primary  pagination__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Показать еще 6</span>\n  \n</a>\n\t</div>\n</div>\n</div>\n'},5112:e=>{"use strict";e.exports='\n\n\n\n<section\n  class="recipes-promo js-recipes-promo"\n  >\n  <div class="recipes-promo__info">\n    <h2 class="recipes-promo__title">Авторские рецепты</h2>\n    <p>\n      Делимся с вами авторскими кулинарными\n      рецептами простых домашних блюд,\n      которые будут радовать вашу семью\n      и гостей на завтрак, обед или ужин!\n    </p>\n  </div>\n\n  <div class="recipes-promo__slider swiper js-recipes-slider">\n    <div class="swiper-wrapper">\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Котлеты из индейки\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="cutlets" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-1.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#cutlets) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-1" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-1) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-2" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-2) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-3" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-3) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-4" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-4) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="recipes-promo__bottom">\n    <div class="recipes-promo__slider-controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  js-recipes-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   js-recipes-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  recipes-promo__button"\n  \n\t                href="recipes.html"\n      >\n\n      <span class="button__text">Открыть все</span>\n  \n</a>\n  </div>\n</section>\n'},9628:e=>{"use strict";e.exports='\n\n\n\n<div\n  class="review-card review-card_theme_primary  "\n  >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src=""\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            \n          </div>\n          <a class="review-card__social-link" href="">\n            \n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        \n      </div>\n    </div>\n\n    \n  </div>\n'},546:e=>{"use strict";e.exports='<div class="review-card-video" data-href="">\n    <img\n      class="review-card-video__preview"\n      src=""\n      alt="о нашем производстве"\n      loading="lazy"\n    >
2\n\n    <button class="review-card-video__play-button js-video-reviews-button">\n      <img\n        class="review-card-video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      />\n    </button>\n</div>\n'},5078:e=>{"use strict";e.exports='\n\n\n\n\n<section\n  class="reviews js-reviews-slider-container"\n  >\n  <h2 class="reviews__title">Наши гости на&nbsp;производстве</h2>\n\n  <div class="reviews__slider js-reviews-slider">\n    <div class="reviews__slider-wrapper swiper-wrapper">\n                      \n        <div class="reviews__slide swiper-slide">\n                                \n          \n\n\n  \n<div\n  class="review-card review-card_theme_primary   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/avatar-1.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Дарья Ставрович\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаловать семью. Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n                                        \n        <div class="reviews__slide reviews__slide_even swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_light  review-card__video-review reviews__slide-content"\n        >\n      <div class="review-card-video" data-href="/assets/video/promo/about.webm">\n    <img\n      class="review-card-video__preview"\n      src="/assets/images/promo-video/video-poster.webp"\n      alt="о нашем производстве"\n      loading="lazy"\n    >\n\n    <button class="review-card-video__play-button js-video-reviews-button">\n      <img\n        class="review-card-video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      />\n    </button>\n</div>\n  </div>\n        </div>\n                      \n        <div class="reviews__slide swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_soft   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/avatar-2.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Иван Иванов\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаловать семью. Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n                                        \n        <div class="reviews__slide reviews__slide_even swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_light  review-card__video-review reviews__slide-content"\n        >\n      <div class="review-card-video" data-href="/assets/video/promo/about.webm">\n    <img\n      class="review-card-video__preview"\n      src="/assets/images/promo-video/video-poster.webp"\n      alt="о нашем производстве"\n      loading="lazy"\n    >
2\n\n    <button class="review-card-video__play-button js-video-reviews-button">\n      <img\n        class="review-card-video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      />\n    </button>\n</div>\n  </div>\n        </div>\n                      \n        <div class="reviews__slide swiper-slide">\n                                \n          \n\n\n  \n<div\n  class="review-card review-card_theme_primary   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/avatar-3.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Дарья Ставрович\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаловать семью. Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n                                        \n        <div class="reviews__slide reviews__slide_even swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_light   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/avatar-4.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Иван Иванов\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаловать семью. Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n                      \n        <div class="reviews__slide swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_soft  review-card__video-review reviews__slide-content"\n        >\n      <div class="review-card-video" data-href="/assets/video/promo/about.webm">\n    <img\n      class="review-card-video__preview"\n      src="/assets/images/promo-video/video-poster.webp"\n      alt="о нашем производстве"\n      loading="lazy"\n    >\n\n    <button class="review-card-video__play-button js-video-reviews-button">\n      <img\n        class="review-card-video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      />\n    </button>\n</div>\n  </div>\n        </div>\n                                        \n        <div class="reviews__slide reviews__slide_even swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_light   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/
2avatar-5.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Дарья Ставрович\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаловать семью. Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n                      \n        <div class="reviews__slide swiper-slide">\n                                \n          \n\n\n  \n<div\n  class="review-card review-card_theme_primary   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/avatar-1.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Дарья Ставрович\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаловать семью.Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n                                        \n        <div class="reviews__slide reviews__slide_even swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_light  review-card__video-review reviews__slide-content"\n        >\n      <div class="review-card-video" data-href="/assets/video/promo/about.webm">\n    <img\n      class="review-card-video__preview"\n      src="/assets/images/promo-video/video-poster.webp"\n      alt="о нашем производстве"\n      loading="lazy"\n    >\n\n    <button class="review-card-video__play-button js-video-reviews-button">\n      <img\n        class="review-card-video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      />\n    </button>\n</div>\n  </div>\n        </div>\n                      \n        <div class="reviews__slide swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_soft   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/avatar-2.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Иван Иванов\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаÐ
2»Ð¾Ð²Ð°Ñ‚ÑŒ семью.Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n                                        \n        <div class="reviews__slide reviews__slide_even swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_light  review-card__video-review reviews__slide-content"\n        >\n      <div class="review-card-video" data-href="/assets/video/promo/about.webm">\n    <img\n      class="review-card-video__preview"\n      src="/assets/images/promo-video/video-poster.webp"\n      alt="о нашем производстве"\n      loading="lazy"\n    >\n\n    <button class="review-card-video__play-button js-video-reviews-button">\n      <img\n        class="review-card-video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      />\n    </button>\n</div>\n  </div>\n        </div>\n                      \n        <div class="reviews__slide swiper-slide">\n                                \n          \n\n\n  \n<div\n  class="review-card review-card_theme_primary   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/avatar-3.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Дарья Ставрович\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаловать семью.Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n          </div>\n  </div>\n\n  <div class="reviews__slider-pagination js-reviews-slider-pagination"></div>\n\n  <div class="reviews__slider-controls">\n    \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  js-reviews-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   js-reviews-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n  </div>\n</section>\n'},3682:e=>{"use strict";e.exports='\n\n\n\n<a\n  class="section-item section-item_theme_white  "\n  href=""\n  >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    \n  </div>\n</a>\n'},2898:e=>{"use strict";e.exports='\n\n\n\n\n<div\n  class="section-list-carousel js-section-list-carousel"\n  >\n  \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  section-list-carousel__prev js-section-list-carousel-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n  \n\n\n  \n<a\n  class="section-item section-item_theme_white  isActive section-list-carousel__all"\n  href="#"\n            class="section-list-carousel__all"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-all" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Все товары\n  </div>\n</a>\n\n  <div class="section-list-carousel__slider js-section-list-carousel-slider swiper">\n    <div class="section-list-carousel__slider-wrapper swiper-wrapper">\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-butter" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Масло сливочное\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-milk" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Молоко\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-kefir" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Кефир\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-curd" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Творог\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-sour-creme" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сметана\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-fused-cheese" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сыр плавленный\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-brine-cheese" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сыр рассольный\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-creme-cheese" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сыр творожный\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-yogurt" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Густой йогурт\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-coctail" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Коктейли\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-sour-creme-product" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сметанный продукт\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-milk" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Масло сливочное\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-kefir" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Молоко\n  </div>\n</a>\n        </div>\n          </div>\n  </div>\n\n  \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   section-list-carousel__next js-section-list-carousel-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n</div>\n'},5510:e=>{"use strict";e.exports='\n<div class="sharing">\n\t<div class="sharing__text">Поделиться</div>\n\t\t\t<a class="sharing__link" href="https://vk.com/ecomilkru">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon sharing__link-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-footer-vk" />\n</svg>\n\t\t</a>\n\t</div>\n'},7254:e=>{"use strict";e.exports='\n\n\n\n\n<div\n  class="split-blocks  "\n  >\n  <div class="split-blocks__block">\n      </div>\n\n  <div class="split-blocks__block">\n      </div>\n</div>\n'},6010:e=>{"use strict";e.exports='\n\n\n\n\n<section\n  class="title-section js-split-slider"\n  >\n      <div class="title-section__videos-slider js-title-section-videos-slider">\n      <div class="title-section__videos-slider-wrapper swiper-wrapper">\n                  <div class="title-section__video swiper-slide">\n            \n\n\n<div\n  class="media-block"\n  >\n      <video\n      class="media-block__video"\n      autoplay\n            muted\n       autoplay        loop        muted       preload="auto"\n                >\n              <source src="/assets/video/video-slider/about.mp4" type="video/mp4">\n                    <source src="/assets/video/video-slider/about.webm" type="video/webm">\n          </video>\n  </div>\n            <a href="@" class="button button_theme_outline-light title-section__slide-link">\n              <span class="button__text">Подробнее</span>\n            </a>\n          </div>\n                  <div class="title-section__video swiper-slide">\n            \n\n\n<div\n  class="media-block"\n  >\n      <video\n      class="media-block__video"\n      autoplay\n            muted\n       autoplay        loop        muted       preload="auto"\n                >\n              <source src="/assets/video/video-slider/butter.mp4" type="video/mp4">\n                    <source src="/assets/video/video-slider/butter.webm" type="video/webm">\n          </video>\n  </div>\n            <a href="@" class="button button_theme_outline-light title-section__slide-link">\n              <span class="button__text">Подробнее</span>\n            </a>\n          </div>\n              </div>\n\n      <div class="title-section__slider-navigation">\n        \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-primary round-button_reverse  js-title-video-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n        \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-primary   js-title-video-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n      </div>\n    </div>\n  \n  <div class="title-section__slider js-title-section-slider">\n    <div class="title-section__slider-wrapper swiper-wrapper">\n              <div class="title-section__slide swiper-slide">\n          <img\n            class="title-section__slide-image"\n            src="/assets/images/title-screen/slides/slide-1.webp"\n            alt="слайд 1"\n            loading="lazy"\n          >\n          <a href="@" class="button button_theme_outline-light title-section__slide-link">\n            <span class="button__text">Подробнее</span>\n          </a>\n        </div>\n              <div class="title-section__slide swiper-slide">\n          <img\n            class="title-section__slide-image"\n            src="/assets/images/title-screen/slides/slide-2.webp"\n            alt="слайд 2"\n            loading="lazy"\n          >\n          <a href="@" class="button button_theme_outline-light title-section__slide-link">
2\n            <span class="button__text">Подробнее</span>\n          </a>\n        </div>\n              <div class="title-section__slide swiper-slide">\n          <img\n            class="title-section__slide-image"\n            src="/assets/images/title-screen/slides/slide-3.webp"\n            alt="слайд 3"\n            loading="lazy"\n          >\n          <a href="@" class="button button_theme_outline-light title-section__slide-link">\n            <span class="button__text">Подробнее</span>\n          </a>\n        </div>\n          </div>\n\n    <div class="title-section__slider-navigation">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-primary round-button_reverse  js-title-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-primary   js-title-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n  </div>\n</section>\n'},3076:e=>{"use strict";e.exports='\n<div class="video-modal js-video-modal ">\n  <div class="video-modal__layout">\n  </div>\n\n  <button\n    type="button"\n    class="video-modal__close js-video-modal-close"\n  >\n    <svg aria-hidden="true" class="svg-icon popup__close-icon">\n      <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n    </svg>\n  </button>\n\n  <div class="video-modal__video">\n    \n\n\n<div\n  class="media-block"\n  >\n      <video\n      class="media-block__video"\n      autoplay\n              loop\n            muted\n                        preload="auto"\n       controls           >\n              <source src="/assets/video/promo/about.mp4" type="video/mp4">\n                    <source src="/assets/video/promo/about.webm" type="video/webm">\n          </video>\n  </div>\n  </div>\n</div>\n'},1950:e=>{"use strict";e.exports='\n\n\n\n\n<section\n  class="video-slider js-video-slider"\n  >\n  \n\n\n\n\n<div\n  class="split-blocks split-blocks_reverse "\n  >\n  <div class="split-blocks__block">\n          <div class="video-slider__main-slider">\n        <div class="swiper js-video-slider-slider">\n          <div class="swiper-wrapper">\n                          <div class="swiper-slide">\n                \n\n\n<div\n  class="info-block "\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon  info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/butter.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/nature.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n      info-block__title_h2          ">\n      Наша визитная карточка\n    </h2>\n  \n      <p class="info-block__text">Визитная карточка «Экомилк» — сливочное масло, которое миллионы семей ценят за нежный молочный вкус и исключительно натуральный состав.</p>\n  \n  </div>\n              </div>\n                          <div class="swiper-slide">\n                \n\n\n<div\n  class="info-block "\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon  info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/butter.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/nature.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n      info-block__title_h2          ">\n      Наша карточка\n    </h2>\n  \n      <p class="info-block__text">Визитная карточка «Экомилк» — сливочное масло, которое миллионы семей ценят за нежный молочный вкус и исключительно натуральный состав.</p>\n  \n  </div>\n              </div>\n                          <div class="swiper-slide">\n                \n\n\n<div\n  class="info-block "\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon  info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/butter.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/nature.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n      info-block__title_h2          ">\n      Наша визитная карточка\n    </h2>\n  \n      <p class="info-block__text">Визитная карточка «Экомилк» — сливочное масло, которое миллионы семей ценят за нежный молочный вкус и исключительно натуральный состав.</p>\n  \n  </div>\n              </div>\n                      </div>\n        </div>\n\n        <div class="video-slider__slider-navigation">\n          \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-primary round-button_reverse  js-video-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n          \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-primary   js-video-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n        </div>\n      </div>\n      </div>\n\n  <div class="split-blocks__block">\n          <div class="video-slider__thumbs-slider swiper js-video-slider-thumbs-slider">\n        <div class="swiper-wrapper">\n                      <div class="swiper-slide">\n              \n\n\n<div\n  class="media-block"\n  >\n      <video\n      class="media-block__video"\n      autoplay\n              loop\n            muted\n       autoplay        loop        muted       preload="auto"\n                    data-hls-src="https://ecomilk.artw.dev/upload/video/HSL/example_0/master.m3u8"\n          >\n              <source src="/assets/video/video-slider/butter.mp4" type="video/mp4">\n                    <source src="/assets/video/video-slider/butter.webm" type="video/webm">\n          </video>\n  </div>\n            </div>\n                      <div class="swiper-slide">\n              \n\n\n<div\n  class="media-block"\n  >\n      <video\n      class="media-block__video"\n      autoplay\n              loop\n            muted\n       autoplay        loop        muted       preload="auto"\n                    data-hls-src="https://ecomilk.artw.dev/upload/video/HSL/example_1/master.m3u8"\n          >\n              <source src="/assets/video/video-slider/about.mp4" type="video/mp4">\n                    <source src="/assets/video/video-slider/about.webm" type="video/webm">\n          </video>\n  </div>\n            </div>\n                      <div class="swiper-slide">\n              \n\n\n<div\n  class="media-block"\n  >\n      <video\n      class="media-block__video"\n      autoplay\n              loop\n            muted\n       autoplay        loop        muted       preload="auto"\n                    data-hls-src="https://ecomilk.artw.dev/upload/video/HSL/example_0/master.m3u8"\n          >\n              <source src="/assets/video/video-slider/butter.mp4" type="video/mp4">\n                    <source src="/assets/video/video-slider/butter.webm" type="video/webm">\n          </video>\n  </div>\n            </div>\n                  </div>\n      </div>\n      </div>\n</div>\n</section>\n'},4352:e=>{"use strict";e.exports='\n\n\n<section\n  class="where-to-buy "\n\t>\n    <h1 class="where-to-buy__title">\n    Где купить\n  </h1>\n\n  <div class="where-to-buy__content">\n    <div class="where-to-buy__text">\n      <p>\n        С&nbsp;проверенными продуктами готовить одно удовольствие.\n        Они не&nbsp;подведут, они гарантируют результат.\n        Именно поэтому они вдохновляют на&nbsp;новые кулинарные свершения.\n      </p>\n    </div>\n\n    \n\n\n  \n<div\n  class="partners partners_primary where-to-buy__partners"\n        >\n  <div class="partners__list">\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n      </div>\n  <div class="partners__gradient"></div>\n</div>\n\n    <div class="where-to-buy__image">\n      <img src="/assets/images/partners/where-to-buy-bg.webp" alt="">\n    </div>\n  </div>\n</section>\n'},3187:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n  <head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>
2\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n  <body>\n    \n\t\t<div class="page-layout page-layout_brand">\n                  \n\n\n\n<header\n  class="header header_theme_transparent js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n      \n\n\t\t\t<main class="page-layout__page">\n          <div class="page page-error">\n    \n\n\n\n<ul\n  class="breadcrumbs breadcrumbs_light"\n  >\n  <li class="breadcrumbs__item"><a\n            href="main.html"\n            class="breadcrumbs__link breadcrumbs__link_type_home"\n          ><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-home"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-home" /></svg></a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="404.html"\n            class="breadcrumbs__link breadcrumbs__link_type_current"\n          >404</a></li></ul>\n\n    \n\n\n<div\n  class="error"\n  >\n  <picture class="error__image-container">\n    <source media="(min-width: 768px)" srcset="/assets/images/404/404-desktop.webp" />\n    <img class="error__image" src="/assets/images/404/404-mobile.webp" alt="404" />\n  </picture>\n\n  <div class="error__text">\n    Кажется, данной страницы не существует.\n    <br />Попробуйте уточнить адрес илиначните с главного.\n  </div>\n\n  \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_transparent-light  error__button"\n  \n\t                href="main.html"\n      >\n\n      <span class="button__text">Перейти на главную</span>\n  \n</a>\n</div>\n  </div>\n\t\t\t</main>\n\n      \n<footer class="footer">\n  <div class="footer__body">\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">
2\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n\n      \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>
2\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n\t\t</div>\n\t</body>\n</html>\n'},8546:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n  <head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n  <body>\n    \n\t\t<div class="page-layout page-layout_default">\n                  \n\n\n\n<header\n  class="header  js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons  header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n      \n\n\t\t\t<main class="page-layout__page">\n          <div class="page page-about">\n    \n\n\n<section\n  class="promo-picture-banner"\n  >\n  <div class="promo-picture-banner__content">\n    <img\n      src="/assets/images/about/family.webp"\n      alt="Изображение"\n      class="promo-picture-banner__picture"\n    >\n\n    <div class="promo-picture-banner__title">\n      Молочная семья экомилк\n    </div>\n  </div>\n</section>\n\n    \n\n\n<section\n  class="milk-family"\n  >\n  \n\n\n\n\n<div\n  class="split-blocks split-blocks_reverse "\n  >\n  <div class="split-blocks__block">\n          <div class="milk-family__block">\n        \n\n\n<div\n  class="info-block "\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon  info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/butter.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/know_love.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n                ">\n      Сливочное масло\n    </h2>\n  \n      <p class="info-block__text">\n        Визитная карточка «Экомилк» — сливочное масло,\n        которое миллионы семей ценят за нежный молочный\n        вкус и исключительно натуральный состав.\n        <br><br>\n        Из года в год мы становимся лидерами по объему продаж\n        в России, в первую очередь — за счет постоянного\n        контроля качества нашей продукции.\n      </p>\n  \n  </div>\n\n                  <div class="milk-family__hint">*По данным измерения омниканального рынка Нильсен (офлайн рынок, розничные сети), 2024г</div>\n              </div>\n      </div>\n\n  <div class="split-blocks__block">\n          \n\n\n<div\n  class="media-block"\n  >\n      <video\n      class="media-block__video"\n      autoplay\n              loop\n            muted\n       autoplay        loop        muted       preload="auto"\n                >\n              <source src="/assets/video/video-slider/butter.mp4" type="video/mp4">\n                    <source src="/assets/video/video-slider/butter.webm" type="video/webm">\n          </video>\n  </div>\n      </div>\n</div>\n</section>\n\n    \n\n\n\n<section\n  class="advantages"\n  >\n  <h2 class="advantages__heading">Наши ценности</h2>\n\n  <div class="advantages__slider swiper js-advantages-carousel">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          \n\n\n<div\n  class="advantage-card "\n  >\n  <div class="advantage-card__name">Энергия</div>\n  <div class="advantage-card__text">\n    Мы ценим профессионализм и инициативу, которые помогают решать сложные задачи, вдохновлять на постоянное движение вперёд. Мы уверены, что работа должна приносить радость. Любовь к своему делу в синергии с целеустромелённостью позволяют сдвигать горы.\n  </div>\n\n  <img src="assets/images/advantages/milk-or-yogurt-realistic-splashes-on-blue-backgrou.webp" alt="Энергия" class="advantage-card__picture">\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<div\n  class="advantage-card advantage-card_theme_dark"\n  >\n  <div class="advantage-card__name">Команда</div>\n  <div class="advantage-card__text">\n    Мы достигаем результата вместе и ценим вклад каждого. Наша особая гордость – это по-настоящему дружественная атмосфера, в которой опытные профессионалы, начинающие специалисты и собственники бизнеса могут свободно общаться и слышать друг друга.\n  <
2/div>\n\n  <img src="assets/images/advantages/white-heart-shape-milk-splash-isolated-on-white-ba.webp" alt="Команда" class="advantage-card__picture">\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<div\n  class="advantage-card advantage-card_theme_primary"\n  >\n  <div class="advantage-card__name">Открытость</div>\n  <div class="advantage-card__text">\n    Мы открыто и честно высказываем своё мнение для достижения лучших результатов. Мы предлагаем новые идеи, инвестируем в освоение передовых технологий для реализации амбициозных проектов. Нестандартный подход, любознательность дают нам возможность видеть перспективы и новые горизонты.\n  </div>\n\n  <img src="assets/images/advantages/cow.webp" alt="Открытость" class="advantage-card__picture">\n</div>\n        </div>\n          </div>\n  </div>\n</section>\n\n    \n\n\n<section\n  class="promo-video"\n  >\n  \n\n  \n<div\n  class="video js-video promo-video__video"\n        >\n  <video\n    class="video__player js-player"\n    loop\n    controls\n    preload="auto"\n    poster="/assets/images/promo-video/video-poster.webp"\n  >\n          <source src="/assets/video/promo/about.mp4" type="video/mp4">\n              <source src="/assets/video/promo/about.webm" type="video/webm">\n      </video>\n\n  <div class="video__screen js-screen">\n    <img\n      class="video__screen-preview"\n      src="/assets/images/promo-video/video-poster.webp"\n      alt="о нашем производстве"\n      loading="lazy"\n    >\n\n    <button\n      class="video__play-button"\n      type="button"\n    >\n      <img\n        class="video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      >\n    </button>\n  </div>\n</div>\n</section>\n\n    \n\n\n\n<section\n  class="qualities"\n  >\n  <h2 class="qualities__heading">\n    Гарантии качества\n  </h2>\n\n  <div class="qualities__slider swiper js-qualities-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          \n\n\n<div\n  class="quality-card "\n  >\n  <div class="quality-card__picture">\n    <img src="/assets/images/qualities/1.webp" alt="Изображение">\n  </div>\n\n  <div class="quality-card__block">\n    <div class="quality-card__header">\n      <div class="quality-card__number">\n                  01\n              </div>\n      <div class="quality-card__title">\n        Технологичное и эффективное оборудование\n      </div>\n    </div>\n\n    <div class="quality-card__text">\n      <p>Это позволяет нам не&nbsp;только соблюдать все стандарты ГОСТ, но&nbsp;и&nbsp;следовать европейским экологическим требованиям по&nbsp;защите окружающей среды. Все это делает наше масло, молоко и&nbsp;сметану аппетитными и&nbsp;полезными&nbsp;&mdash; такими, какими вы&nbsp;любите!</p>\n    </div>\n  </div>\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<div\n  class="quality-card quality-card_theme_light"\n  >\n  <div class="quality-card__picture">\n    <img src="/assets/images/qualities/2.webp" alt="Изображение">\n  </div>\n\n  <div class="quality-card__block">\n    <div class="quality-card__header">\n      <div class="quality-card__number">\n                  02\n              </div>\n      <div class="quality-card__title">\n        Высочайший уровень качества продукции\n      </div>\n    </div>\n\n    <div class="quality-card__text">\n      <p>Мы&nbsp;гордимся нашей собственной лабораторией, сотрудники которой тщательно следя
2т за&nbsp;каждым этапом приёмки сырья и&nbsp;производства продукции.</p>\n<p>Закрытый цикл работы нашего оборудования подразумевает минимальное участие человека в&nbsp;выпуске молочной продукции&nbsp;&mdash; ошибки исключены.</p>\n    </div>\n  </div>\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<div\n  class="quality-card "\n  >\n  <div class="quality-card__picture">\n    <img src="/assets/images/qualities/3.webp" alt="Изображение">\n  </div>\n\n  <div class="quality-card__block">\n    <div class="quality-card__header">\n      <div class="quality-card__number">\n                  03\n              </div>\n      <div class="quality-card__title">\n        Сплоченная команда\n      </div>\n    </div>\n\n    <div class="quality-card__text">\n      <p>За&nbsp;каждым нашим продуктом&nbsp;&mdash; люди, которые искренне любят то, чем они занимаются. </p>\n<p>Мы&nbsp;называем нашу компанию семейной за&nbsp;ту&nbsp;теплоту и&nbsp;комфорт, которые мы&nbsp;испытываем каждый день, работая для вас. Каждый человек в&nbsp;нашем коллективе важен, и&nbsp;он&nbsp;это знает.</p>\n    </div>\n  </div>\n</div>\n        </div>\n          </div>\n\n    <div class="qualities__slider-controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  js-prev-btn"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   js-next-btn"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    <div\n      class="qualities__slider-pagination swiper-pagination js-pagination"\n    ></div>\n  </div>\n</section>\n\n    \n\n\n<section\n  class="milk-family"\n  >\n  \n\n\n\n\n<div\n  class="split-blocks  split-blocks_last-show"\n  >\n  <div class="split-blocks__block">\n          <div class="milk-family__block">\n        \n\n\n<div\n  class="info-block "\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon  info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/cow-head.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/command.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n            info-block__title_h3    ">\n      Наше производство\n    </h2>\n  \n      <p class="info-block__text">В своем производстве мы используем самое эффективное и технологичное оборудование, что позволяет нам не только соблюдать все стандарты ГОСТ, но и следовать европейским экологическим требованиям по защите окружающей среды.</p>\n  \n  </div>\n\n              </div>\n      </div>\n\n  <div class="split-blocks__block">\n          \n\n\n<div\n  class="media-block"\n  >\n      <img\n      src="/assets/images/split-blocks/track.webp"\n      alt="картинка"\n      loading="lazy"\n      class="media-block__picture"\n    >\n  </div>\n      </div>\n</div>\n</section>\n\n    \n\n\n\n<section\n  class="history-numbers"\n  >\n  <div class="history-numbers__content">\n    <div class="history-numbers__info">\n              <div class="history-numbers__info-item">\n          \n\n\n\n<div\n  class="number-item"\n  >\n  <div class="number-item__top">\n    <span class="number-item__number">6</span>\n      </div>\n      <div class="number-item__caption">\n      торговых марок\n    </div>\n  </div>\n        </div>\n              <div class="history-numbers__info-item">\n          \n\n\n\n<div\n  class="number-item"\n  >\n  <div class="number-item__top">\n    <span class="number-item__number">50</span>
2\n          <span class="number-item__addition">+</span>\n      </div>\n      <div class="number-item__caption">\n      наименований\n    </div>\n  </div>\n        </div>\n              <div class="history-numbers__info-item">\n          \n\n\n\n<div\n  class="number-item"\n  >\n  <div class="number-item__top">\n    <span class="number-item__number">15</span>\n      </div>\n      <div class="number-item__caption">\n      лет на рынке\n    </div>\n  </div>\n        </div>\n              <div class="history-numbers__info-item">\n          \n\n\n\n<div\n  class="number-item"\n  >\n  <div class="number-item__top">\n    <span class="number-item__number">89</span>\n      </div>\n      <div class="number-item__caption">\n      регионов России\n    </div>\n  </div>\n        </div>\n          </div>\n\n    <div class="history-numbers__media">\n      <img\n        class="history-numbers__media-text"\n        src="/assets/images/nutrients/text.svg"\n        alt="нежность, любовь и польза в каждой упаковке"\n        loading="lazy"\n      >\n\n      <img\n        class="history-numbers__media-picture"\n        src="/assets/images/history-numbers/cow-promo.webp"\n        alt="корова"\n        loading="lazy"\n      >\n    </div>\n  </div>\n</section>\n\n    \n\n\n\n<section\n  class="company-history js-company-history"\n  >\n  <div class="company-history__slider swiper js-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          \n\n\n\n\n<div\n  class="split-blocks  split-blocks_last-show"\n  >\n  <div class="split-blocks__block">\n                  <div class="info-block-container">\n                \n\n\n<div\n  class="info-block info-block_size_xs"\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon circle-brand-icon_size_xs info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/cow-head-white.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/history-white.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n                ">\n      1999 год\n    </h2>\n  \n      <p class="info-block__text">Вторым продуктом, который мы вывели на рынок, стала сметана. Этот важный шаг был сделан в 2007 году, и с тех пор наша сметана завоевала любовь покупателей, благодаря своему нежному вкусу и натуральному составу.</p>\n  \n  </div>\n              </div>\n              </div>\n\n  <div class="split-blocks__block">\n                  \n\n\n<div\n  class="media-block"\n  >\n      <img\n      src="/assets/images/split-blocks/curd.webp"\n      alt="картинка"\n      loading="lazy"\n      class="media-block__picture"\n    >\n  </div>\n              </div>\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n\n<div\n  class="split-blocks  split-blocks_last-show"\n  >\n  <div class="split-blocks__block">\n                  <div class="info-block-container">\n                \n\n\n<div\n  class="info-block info-block_size_xs"\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon circle-brand-icon_size_xs info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/cow-head-white.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/history-white.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n                ">\n      2007 год\n    </h2>\n  \n      <p class="info-block__text">Вторым продуктом, который мы вывели на рынок, стала сметана. Этот важный шаг был сделан в 2007 году, и с тех пор наша сметана завоевала любовь покупателей, благодаря своему нежному вкусу и натуральному составу.</p>\n  \n  </div>\n              </div>\n              </div>\n\n  <div class="split-blocks__block">\n                  \n\n\n<div\n  class="media-block"\n  >\n      <img\n      src="/assets/images/split-blocks/curd.webp"\n      alt="картинка"\n      loading="lazy"\n      class="media-block__picture"\n    >\n  </div>\n              </div>\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n\n<div\n  class="split-blocks  split-blocks_last-show"\n  >\n  <div class="split-blocks__block">\n                  <div class="info-block-container">\n                \n\n\n<div\n  class="info-block info-block_size_xs"\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon circle-brand-icon_size_xs info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/cow-head-white.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/history-white.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n                ">\n      2015 год\n    </h2>\n  \n      <p class="info-block__text">
2222 Вторым продуктом, который мы вывели на рынок, стала сметана. Этот важный шаг был сделан в 2007 году, и с тех пор наша сметана завоевала любовь покупателей, благодаря своему нежному вкусу и натуральному составу.</p>\n  \n  </div>\n              </div>\n              </div>\n\n  <div class="split-blocks__block">\n                  \n\n\n<div\n  class="media-block"\n  >\n      <img\n      src="/assets/images/split-blocks/curd.webp"\n      alt="картинка"\n      loading="lazy"\n      class="media-block__picture"\n    >\n  </div>\n              </div>\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n\n<div\n  class="split-blocks  split-blocks_last-show"\n  >\n  <div class="split-blocks__block">\n                  <div class="info-block-container">\n                \n\n\n<div\n  class="info-block info-block_size_xs"\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon circle-brand-icon_size_xs info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/cow-head-white.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/history-white.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n                ">\n      2017 год\n    </h2>\n  \n      <p class="info-block__text">222 Вторым продуктом, который мы вывели на рынок, стала сметана. Этот важный шаг был сделан в 2007 году, и с тех пор наша сметана завоевала любовь покупателей, благодаря своему нежному вкусу и натуральному составу.</p>\n  \n  </div>\n              </div>\n              </div>\n\n  <div class="split-blocks__block">\n                  \n\n\n<div\n  class="media-block"\n  >\n      <img\n      src="/assets/images/split-blocks/curd.webp"\n      alt="картинка"\n      loading="lazy"\n      class="media-block__picture"\n    >\n  </div>\n              </div>\n</div>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n\n<div\n  class="split-blocks  split-blocks_last-show"\n  >\n  <div class="split-blocks__block">\n                  <div class="info-block-container">\n                \n\n\n<div\n  class="info-block info-block_size_xs"\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon circle-brand-icon_size_xs info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/cow-head-white.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/history-white.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n                ">\n      2020 год\n    </h2>\n  \n      <p class="info-block__text">2020 Вторым продуктом, который мы вывели на рынок, стала сметана. Этот важный шаг был сделан в 2007 году, и с тех пор наша сметана завоевала любовь покупателей, благодаря своему нежному вкусу и натуральному составу.</p>\n  \n  </div>\n              </div>\n              </div>\n\n  <div class="split-blocks__block">\n                  \n\n\n<div\n  class="media-block"\n  >\n      <img\n      src="/assets/images/split-blocks/curd.webp"\n      alt="картинка"\n      loading="lazy"\n      class="media-block__picture"\n    >\n  </div>\n              </div>\n</div>\n        </div>\n          </div>\n  </div>\n\n  <div class="company-history__scale js-scale">\n    <div class="company-history__scale-wrapper">\n              <div\n          data-step="0"\n          class="company-history__scale-step isActive"\n        >\n          <div class="company-history__scale-step-value">\n            \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon company-history__scale-step-value-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-drop" />\n</svg>\n            <div class="company-history__scale-step-value-text">1999</div>\n          </div>\n          <div class="company-history__scale-step-track"></div>\n        </div>\n              <div\n          data-step="1"\n          class="company-history__scale-step "\n        >\n          <div class="company-history__scale-step-value">\n            \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon company-history__scale-step-value-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-drop" />\n</svg>\n            <div class="company-history__scale-step-value-text">2007</div>\n          </div>\n          <div class="company-history__scale-step-track"></div>\n        </div>\n              <div\n          data-step="2"\n          class="company-history__scale-step "\n        >\n          <div class="company-history__scale-step-value">\n            \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon company-history__scale-step-value-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-drop" />\n</svg>\n            <div class="company-history__scale-step-value-text">2015</div>\n          </div>\n          <div class="company-history__scale-step-track"></div>\n        </div>\n              <div\n          data-step="3"\n          class="company-history__scale-step "\n        >\n          <div class="company-history__scale-step-value">\n            \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon company-history__scale-step-value-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-drop" />\n</svg>\n            <div class="company-history__scale-step-value-text">2017</div>\n          </div>\n          <div class="company-history__scale-step-track"></div>\n        </div>\n              <div\n          data-step="4"\n          class="company-history__scale-step "\n        >\n          <div class="company-history__scale-step-value">\n            \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon company-history__scale-step-value-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-drop" />\n</svg>\n            <div class="company-history__scale-step-value-text">2020</div>\n          </div>\n          <div class="company-history__scale-step-track"></div>\n        </div>\n          </div>\n  </div>\n</section>\n  </div>\n\t\t\t</main>\n\n      \n<footer class="footer">\n  <div class="footer__body">
2\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>
2\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n\n      \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n\t\t</div>\n\t</body>\n</html>\n'},5988:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n  <head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>
2\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n  <body>\n    \n\t\t<div class="page-layout page-layout_light">\n                  \n\n\n\n<header\n  class="header header_theme_transparent js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n      \n\n\t\t\t<main class="page-layout__page">\n          <div class="page page-catalog">\n    \n\n\n<div\n  class="page-header"\n  >\n  \n\n\n  \n<ul\n  class="breadcrumbs breadcrumbs_light page-header__breadcrumbs"\n        >\n  <li class="breadcrumbs__item"><a\n            href="main.html"\n            class="breadcrumbs__link breadcrumbs__link_type_home"\n          ><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-home"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-home" /></svg></a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="catalog.html"\n            class="breadcrumbs__link breadcrumbs__link_type_current"\n          >Каталог</a></li></ul>\n\n  <h1 class="page-header__title">Каталог</h1>\n  <div class="page-header__text">\n    <p>С проверенными продуктами готовить одно удовольствие. Они не подведут, они гарантируют результат. Именно поэтому они вдохновляют на новые кулинарные свершения.</p>\n  </div>\n\n      <img src="/assets/images/page-header/catalog.webp" alt="" class="page-header__picture">\n  </div>\n\n    \n\n\n\n\n<div\n  class="catalog"\n  >\n  <div class="catalog__carousels">\n    \n\n\n\n<div\n  class="brand-list-carousel js-brand-list-carousel"\n  >\n  <div\n    class="brand-list-carousel__all-mobile"\n    data-popup-invoker="brands-filter"\n  >\n    <span class="brand-list-carousel__all-mobile-text">Все бренды</span>\n\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon brand-list-carousel__all-mobile-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" />\n</svg>\n  </div>\n\n  \n\n\n\n<div\n  class="popup popup_type_ordinary"\n  data-popup="brands-filter"\n  >\n  <div class="popup__wrapper">\n    <div class="popup__content">\n      <button type="button" class="popup__close js-popup-close">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon popup__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n      </button>\n\n            <div class="brand-popup__inner">\n        <div class="brand-popup__title">\n          Фильтр\n        </div>\n\n        <div class="brand-popup__brands">\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/ecomilk.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/cheese.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/dessert.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/courtyard.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/altai.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n                      <a\n              class="brand-popup__brand"\n              href="#"\n            >\n              <img\n                class="brand-popup__brand-image"\n                src="/assets/images/brand-list-popup/cow.webp"\n                alt="логотип брэнда"\n                loading="lazy"\n              >\n            </a>\n          \n          <a\n            class="brand-popup__brand-all"\n            href="#"\n          >
2\n            <span class="brand-popup__brand-all-text">Все бренды</span>\n\n            <img\n              class="brand-popup__brand-all-image"\n              src="/assets/images/brand-list-popup/all.webp"\n              alt="логотип брэнда"\n              loading="lazy"\n            >\n          </a>\n        </div>\n      </div>\n        </div>\n  </div>\n</div>\n\n  \n\n  \n<a\n  class="brand-card brand-card_theme_white isActive brand-list-carousel__all"\n  href="#"\n            class="brand-list-carousel__all"\n      >\n  <div class="brand-card__text">\n    Все бренды\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/all-brands.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n\n  <div class="brand-list-carousel__slider js-brand-list-carousel-slider swiper">\n    <div class="brand-list-carousel__slider-wrapper swiper-wrapper">\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Экомилк\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/ecomilk.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Экомилк. Сыры\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/cheese.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Экомилк Oh!Dessert\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/dessert.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Деревенское подворье\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/courtyard.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Алтайская коллекция\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/altai.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n              <div class="brand-list-carousel__slide swiper-slide">\n          \n\n  \n<a\n  class="brand-card brand-card_theme_white  brand-list-carousel__slide-content"\n  href="#"\n            class="brand-list-carousel__slide-content"\n      >\n  <div class="brand-card__text">\n    Альпийская коровка\n  </div>\n\n  <img\n    class="brand-card__image"\n    src="/assets/images/brand-list-carousel/cow.webp"\n    alt="фото"\n    loading="lazy"\n  >\n</a>\n\n\n        </div>\n          </div>\n  </div>\n</div>\n    \n\n\n\n\n<div\n  class="section-list-carousel js-section-list-carousel"\n  >\n  \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  section-list-carousel__prev js-section-list-carousel-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n  \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white isActive section-list-carousel__all"\n  href="#"\n            class="section-list-carousel__all"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-all" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Все товары\n  </div>\n</a>\n\n  <div class="section-list-carousel__slider js-section-list-carousel-slider swiper">\n    <div class="section-list-carousel__slider-wrapper swiper-wrapper">\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-butter" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Масло сливочное\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-milk" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Молоко\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-kefir" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Кефир\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-curd" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Творог\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-sour-creme" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сметана\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-fused-cheese" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сыр плавленный\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-brine-cheese" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сыр рассольный\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-creme-cheese" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сыр творожный\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-yogurt" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Густой йогурт\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-coctail" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Коктейли\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-sour-creme-product" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сметанный продукт\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-milk" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Масло сливочное\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white section-item_mobile-text-white  section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-kefir" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Молоко\n  </div>\n</a>\n        </div>\n          </div>\n  </div>\n\n  \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   section-list-carousel__next js-section-list-carousel-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n</div>\n  </div>\n\n  <div class="catalog__cards">\n    <picture class="catalog__banner">\n      <source media="(min-width: 1680px)" srcset="/assets/images/catalog-list/catalog-banner-desktop.webp">\n      <source media="(min-width: 1280px)" srcset="/assets/images/catalog-list/catalog-banner-desktop-sm.webp">\n      <source media="(min-width: 768px)" srcset="/assets/images/catalog-list/catalog-banner-tablet.webp">\n      <img class="catalog__banner-image" src="/assets/images/catalog-list/catalog-banner-mobile.webp" alt="выбор покупателей">\n    </picture>\n\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_low-in-calories product-card__promo-label"\n        >\n  Мало калорий\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-1.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творог десертный клубника 5%</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_hit product-card__promo-label"\n        >\n  Хит\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-2.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Сыр греческий Fetica</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          275 г\n        </div>\n              <div class="\n        product-card__weight\n              ">\n          400 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_new product-card__promo-label"\n        >\n  Новинка\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-3.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творожная масса Ваниль</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-4.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Йогурт с кленовым сиропом <br>и грецким орехом 4,2%</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          130 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_new product-card__promo-label"\n        >\n  Новинка\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-3.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творожная масса Ваниль</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_new product-card__promo-label"\n        >\n  Новинка\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-3.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творожная масса Ваниль</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>
2\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_low-in-calories product-card__promo-label"\n        >\n  Мало калорий\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-1.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творог десертный клубника 5%</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_hit product-card__promo-label"\n        >\n  Хит\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-2.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Сыр греческий Fetica</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          275 г\n        </div>\n              <div class="\n        product-card__weight\n              ">\n          400 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_new product-card__promo-label"\n        >\n  Новинка\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-3.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творожная масса Ваниль</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_low-in-calories product-card__promo-label"\n        >\n  Мало калорий\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-1.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творог десертный клубника 5%</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_hit product-card__promo-label"\n        >\n  Хит\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-2.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Сыр греческий Fetica</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          275 г\n        </div>\n              <div class="\n        product-card__weight\n              ">\n          400 г\n        </div>\n          </div>\n  </div>\n</a>\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_new product-card__promo-label"\n        >\n  Новинка\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-3.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творожная масса Ваниль</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>
2\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_new product-card__promo-label"\n        >\n  Новинка\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-3.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творожная масса Ваниль</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n      </div>\n\n  \n\n  \n<div\n  class="pagination pagination_theme_white catalog__pagination"\n            >\n\t<div class="pagination__pages">\n\t\t<a href="#" class="pagination__round-link pagination__round-link_prev">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon pagination__icon-arrow"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\t\t</a>\n\n          <a\n        href="#"\n        class="\n          pagination__round-link\n          pagination__round-link_active                            "\n      >\n        1\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                                      "\n      >\n        2\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                    pagination__round-link_disabled                  "\n      >\n        ...\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                              pagination__round-link_hidden        "\n      >\n        5\n      </a>\n    \n\t\t<a href="#" class="pagination__round-link">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon pagination__icon-arrow"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\t\t</a>\n\t</div>\n\n\t<div class="pagination__more">\n\t  \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_white  pagination__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Показать еще 6</span>\n  \n</a>\n\t</div>\n</div>\n</div>\n  </div>\n\t\t\t</main>\n\n      \n<footer class="footer">\n  <div class="footer__body">\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">
2\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n\n      \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>
2\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n\t\t</div>\n\t</body>\n</html>\n'},9106:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n  <head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n  <body>\n    \n\t\t<div class="page-layout page-layout_brand">\n                  \n\n\n\n<header\n  class="header header_theme_transparent js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n      \n\n\t\t\t<main class="page-layout__page">\n          <div class="page page-contacts">\n    \n\n\n\n<ul\n  class="breadcrumbs breadcrumbs_light"\n  >\n  <li class="breadcrumbs__item"><a\n            href="main.html"\n            class="breadcrumbs__link breadcrumbs__link_type_home"\n          ><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-home"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-home" /></svg></a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="contacts.html"\n            class="breadcrumbs__link breadcrumbs__link_type_current"\n          >Контакты</a></li></ul>\n\n    <div\n  class="contacts js-contacts"\n  data-pin="assets/images/contacts/mark.svg"\n>\n  <h1 class="contacts__title">Контакты</h1>\n\n  \n\n  \n<div\n  class="switch-box contacts__switcher js-contacts-switch-box"\n        >\n  <div class="switch-box__highlights js-switch-highlight"></div>\n      <button\n      type="button"\n      data-value="contacts-office"\n      class="switch-box__button"\n    >\n      Офис\n    </button>\n      <button\n      type="button"\n      data-value="contacts-factory"\n      class="switch-box__button"\n    >\n      Завод\n    </button>\n  </div>\n\n      <div\n      data-id="contacts-office"\n      class="js-contacts-tab contacts__item isActive"\n    >\n      <div class="contact-box">\n        <p>Центральный офис «Экомилк»</p>\n        <div class="contacts__address">Москва, ул. Верейская, д.17, офис 213</div>\n\n                \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_outline-white  contacts__button"\n  \n\t                href="https://yandex.ru/maps/?rtext=~55.710661, 37.443703&rtt=mt"\n                target="_blank"\n      >\n\n      <span class="button__text">Проложить маршрут</span>\n  \n</a>\n      </div>\n\n              <div class="contact-box">\n          <p>Отдел продаж</p>\n                                    <a href="tel:+7 495 771-74-23">+7 495 771-74-23</a>\n              <br>\n                                                <a href="mailto:[email protected]">[email protected]</a>\n                              </div>\n          </div>\n      <div\n      data-id="contacts-factory"\n      class="js-contacts-tab contacts__item "\n    >\n      <div class="contact-box">\n        <p>ЗАО Озерецкий молочный комбинат</p>\n        <div class="contacts__address">Московская обл., Дмитровский р-н, с. Озерецкое, 7А </div>\n\n                \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_outline-white  contacts__button"\n  \n\t                href="https://yandex.ru/maps/?rtext=~56.063273, 37.3955&rtt=mt"\n                target="_blank"\n      >\n\n      <span class="button__text">Проложить маршрут</span>\n  \n</a>\n      </div>\n\n              <div class="contact-box">\n          <p>Контакты завода</p>\n                                    <a href="tel:+7 495 987 45 17">+7 495 987 45 17</a>\n              <br>\n                                                <a href="mailto:[email protected]">[email protected]</a>\n                              </div>\n          </div>\n  \n  <div class="contact-box">\n    <p>Отдел HR</p>\n    <a href="mailto:[email protected]">[email protected]</a>\n  </div>\n\n  <div class="contact-box">\n    <p>Посмотреть актуальные вакансии</p>\n    <a\n      href="https://hh.ru"\n      target="_blank"\n      class="button button_theme_outline-white contacts__button"\n    >
2\n      <span class="button__text">Перейти на hh.ru</span>\n      <img src="assets/images/hh-logo.svg" alt="HeadHunter логотип">\n    </a>\n  </div>\n\n  <div id="map-container" class="contacts__map"></div>\n</div>\n    \n\n\n<section\n  id="feedback-app"\n  class="feedback"\n  >\n  <div class="feedback__wrapper">\n    <h2 class="feedback__heading">\n      Есть вопросы? Свяжитесь с&nbsp;нами\n    </h2>\n\n    <feedback\n      action="https://ecomilk.artw.dev/ajax/forms/feedback"\n      class="feedback__form"\n    ></feedback>\n\n    <div class="feedback__picture">\n      <img src="/assets/images/feedback/cow-big.webp" alt="Корова">\n    </div>\n  </div>\n</section>\n  </div>\n\t\t\t</main>\n\n      \n<footer class="footer">\n  <div class="footer__body">\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>
2\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n\n      \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n\t\t</div>\n\t</body>\n</html>\n'},1019:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n  <head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>
2\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n  <body>\n    \n\t\t<div class="page-layout page-layout_default">\n                  \n\n\n\n<header\n  class="header  js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons  header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n      \n\n\t\t\t<main class="page-layout__page">\n        \t<section class="page page-content">\n    \n          <h2>Публичные страницы</h2>\n      <ol class="box">\n                  <li>\n            <a href="main.html" class="true" target="_blank">\n              Главная страница\n            </a>\n          </li>\n                  <li>\n            <a href="user-agreement.html" class="true" target="_blank">\n              Пользовательское соглашение\n            </a>\n          </li>\n                  <li>\n            <a href="privacy-policy.html" class="true" target="_blank">\n              Политика конфиденциальности\n            </a>\n          </li>\n                  <li>\n            <a href="personal-data-processing-policy.html" class="true" target="_blank">\n              Политика обработки персональных данных\n            </a>\n          </li>\n                  <li>\n            <a href="news.html" class="true" target="_blank">\n              Новости\n            </a>\n          </li>\n                  <li>\n            <a href="news-detail.html" class="true" target="_blank">\n              Новость детальная страница\n            </a>\n          </li>\n                  <li>\n            <a href="catalog.html" class="true" target="_blank">\n              Каталог\n            </a>\n          </li>\n                  <li>\n            <a href="product-detail.html" class="true" target="_blank">\n              Продукт детальная страница\n            </a>\n          </li>\n                  <li>\n            <a href="recipes.html" class="true" target="_blank">\n              Рецепты\n            </a>\n          </li>\n                  <li>\n            <a href="recipe-detail.html" class="true" target="_blank">\n              Рецепт детальная страница\n            </a>\n          </li>\n                  <li>\n            <a href="404.html" class="true" target="_blank">\n              404\n            </a>\n          </li>\n                  <li>\n            <a href="where-to-buy.html" class="true" target="_blank">\n              Где купить\n            </a>\n          </li>\n                  <li>\n            <a href="about.html" class="true" target="_blank">\n              О компании\n            </a>\n          </li>\n                  <li>\n            <a href="contacts.html" class="true" target="_blank">\n              Контакты\n            </a>\n          </li>\n              </ol>\n    \t</section>\n\t\t\t</main>\n\n      \n<footer class="footer">\n  <div class="footer__body">\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">
2\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n\n      \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>
2\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n\t\t</div>\n\t</body>\n</html>\n'},642:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n<head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n<body>\n  \n  <div id="app" class="page-layout page-layout_fullpage js-full-page page-layout_default">\n              \n\n\n\n<header\n  class="header  js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons  header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n    \n\n    <main class="page-layout__page">\n        <div class="page page-index">\n    \n\n\n<div\n  class="full-page-slider swiper"\n  >\n  <div class="full-page-slider__wrapper swiper-wrapper">\n          <div class="\n        swiper-slide\n        full-page-slider__slide\n              ">\n        \n\n\n  \n\n<section\n  class="title-section js-split-slider pill-animation"\n        >\n      <div class="title-section__videos-slider js-title-section-videos-slider">\n      <div class="title-section__videos-slider-wrapper swiper-wrapper">\n                  <div class="title-section__video swiper-slide">\n            \n\n  \n<div\n  class="media-block pill-animation"\n        >\n      <video\n      class="media-block__video"\n      autoplay\n            muted\n       autoplay        loop        muted       preload="auto"\n                >\n              <source src="/assets/video/video-slider/about.mp4" type="video/mp4">\n                    <source src="/assets/video/video-slider/about.webm" type="video/webm">\n          </video>\n  </div>\n            <a href="@" class="button button_theme_outline-light title-section__slide-link">\n              <span class="button__text">Подробнее</span>\n            </a>\n          </div>\n                  <div class="title-section__video swiper-slide">\n            \n\n  \n<div\n  class="media-block pill-animation"\n        >\n      <video\n      class="media-block__video"\n      autoplay\n            muted\n       autoplay        loop        muted       preload="auto"\n                >\n              <source src="/assets/video/video-slider/butter.mp4" type="video/mp4">\n                    <source src="/assets/video/video-slider/butter.webm" type="video/webm">\n          </video>\n  </div>\n            <a href="@" class="button button_theme_outline-light title-section__slide-link">\n              <span class="button__text">Подробнее</span>\n            </a>\n          </div>\n              </div>\n\n      <div class="title-section__slider-navigation">\n        \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-primary round-button_reverse  js-title-video-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n        \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-primary   js-title-video-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n      </div>\n    </div>\n  \n  <div class="title-section__slider js-title-section-slider">\n    <div class="title-section__slider-wrapper swiper-wrapper">\n              <div class="title-section__slide swiper-slide">\n          <img\n            class="title-section__slide-image"\n            src="/assets/images/title-screen/slides/slide-1.webp"\n            alt="слайд 1"\n            loading="lazy"\n          >\n          <a href="@" class="button button_theme_outline-light title-section__slide-link">\n            <span class="button__text">Подробнее</span>\n          </a>\n        </div>\n              <div class="title-section__slide swiper-slide">\n          <img\n            class="title-section__slide-image"\n            src="/assets/images/title-screen/slides/slide-2.webp"\n            alt="слайд 2"\n            loading="lazy"\n          >\n          <a href="@" class="button button_theme_outline-light title-section__slide-link">
2\n            <span class="button__text">Подробнее</span>\n          </a>\n        </div>\n              <div class="title-section__slide swiper-slide">\n          <img\n            class="title-section__slide-image"\n            src="/assets/images/title-screen/slides/slide-3.webp"\n            alt="слайд 3"\n            loading="lazy"\n          >\n          <a href="@" class="button button_theme_outline-light title-section__slide-link">\n            <span class="button__text">Подробнее</span>\n          </a>\n        </div>\n          </div>\n\n    <div class="title-section__slider-navigation">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-primary round-button_reverse  js-title-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-primary   js-title-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n  </div>\n</section>\n      </div>\n          <div class="\n        swiper-slide\n        full-page-slider__slide\n              ">\n        \n\n\n  \n\n<section\n  class="promo-catalog js-promo-catalog pill-animation"\n        >\n  <div class="promo-catalog__content">\n    <div class="promo-catalog__top">\n      <h2 class="promo-catalog__title">Каталог</h2>\n      <div class="promo-catalog__brands-slider js-promo-catalog-brands-slider">\n        <div class="promo-catalog__brands-slider-wrapper swiper-wrapper">\n                      <div class="promo-catalog__logo-wrapper promo-catalog__brands-slide swiper-slide" data-brand="ecomilk">\n              <img\n                class="promo-catalog__logo-image"\n                src="/assets/images/catalog/logotypes/ecomilk.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n\n              <img\n                class="promo-catalog__logo-image promo-catalog__logo-active-image"\n                src="/assets/images/catalog/logotypes/ecomilk-active.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n            </div>\n                      <div class="promo-catalog__logo-wrapper promo-catalog__brands-slide swiper-slide" data-brand="cheese">\n              <img\n                class="promo-catalog__logo-image"\n                src="/assets/images/catalog/logotypes/cheese.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n\n              <img\n                class="promo-catalog__logo-image promo-catalog__logo-active-image"\n                src="/assets/images/catalog/logotypes/cheese-active.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n            </div>\n                      <div class="promo-catalog__logo-wrapper promo-catalog__brands-slide swiper-slide" data-brand="dessert">\n              <img\n                class="promo-catalog__logo-image"\n                src="/assets/images/catalog/logotypes/dessert.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n\n              <img\n                class="promo-catalog__logo-image promo-catalog__logo-active-image"\n                src="/assets/images/catalog/logotypes/dessert-active.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n            </div>\n                      <div class="promo-catalog__logo-wrapper promo-catalog__brands-slide swiper-slide" data-brand="altai">\n              <img\n                class="promo-catalog__logo-image"\n                src="/assets/images/catalog/logotypes/altai.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n\n              <img\n                class="promo-catalog__logo-image promo-catalog__logo-active-image"\n                src="/assets/images/catalog/logotypes/altai-active.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n            </div>\n                      <div class="promo-catalog__logo-wrapper promo-catalog__brands-slide swiper-slide" data-brand="cow">\n              <img\n                class="promo-catalog__logo-image"\n                src="/assets/images/catalog/logotypes/cow.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n\n              <img\n                class="promo-catalog__logo-image promo-catalog__logo-active-image"\n                src="/assets/images/catalog/logotypes/cow-active.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n            </div>\n                      <div class="promo-catalog__logo-wrapper promo-catalog__brands-slide swiper-slide" data-brand="dp">\n              <img\n                class="promo-catalog__logo-image"\n                src="/assets/images/catalog/logotypes/dp.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n\n              <img\n                class="promo-catalog__logo-image promo-catalog__logo-active-image"\n                src="/assets/images/catalog/logotypes/dp-active.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n            </div>\n                      <div class="promo-catalog__logo-wrapper promo-catalog__brands-slide swiper-slide" data-brand="horeca">\n              <img\n                class="promo-catalog__logo-image"\n                src="/assets/images/catalog/logotypes/horeca.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n\n              <img\n                class="promo-catalog__logo-image promo-catalog__logo-active-image"\n                src="/assets/images/catalog/logotypes/horeca-active.svg"\n                alt="логотип"\n                loading="lazy"\n              >\n            </div>\n                  </div>\n      </div>\n    </div>\n    <div class="promo-catalog__bottom">\n              \n\n\n  \n<div\n  class="promo-catalog-slider js-promo-catalog-slider-container promo-catalog__slider"\n                  data-sli
2der="ecomilk"\n      >\n  <div class="swiper js-promo-catalog-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 1"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сметана сливочная 20%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    315 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    5 кг\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-2.webp"\n                alt="слайд 2"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-3.webp"\n                alt="слайд 3"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Кефир 2,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    925 мл\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-4.webp"\n                alt="слайд 4"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-5.webp"\n                alt="слайд 5"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сыр плавленный\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    400 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-6.webp"\n                alt="слайд 6"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-7.webp"\n                alt="слайд 7"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="promo-catalog-slider__bottom">\n    <div class="promo-catalog-slider__pagination js-promo-catalog-slider-pagination"></div>\n\n    <div class="promo-catalog-slider__controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white round-button_reverse  js-promo-catalog-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white   js-promo-catalog-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  promo-catalog-slider__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</div>\n              \n\n\n  \n<div\n  class="promo-catalog-slider js-promo-catalog-slider-container promo-catalog__slider"\n                  data-slider="cheese"\n      >\n  <div class="swiper js-promo-catalog-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 1"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сметана сливочная 20%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    315 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    5 кг\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 2"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 3"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Кефир 2,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    925 мл\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 4"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 5"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сыр плавленный\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    400 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 6"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 7"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="promo-catalog-slider__bottom">\n    <div class="promo-catalog-slider__pagination js-promo-catalog-slider-pagination"></div>\n\n    <div class="promo-catalog-slider__controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white round-button_reverse  js-promo-catalog-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white   js-promo-catalog-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  promo-catalog-slider__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</div>\n              \n\n\n  \n<div\n  class="promo-catalog-slider js-promo-catalog-slider-container promo-catalog__slider"\n                  data-slider="dessert"\n      >\n  <div class="swiper js-promo-catalog-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 1"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сметана сливочная 20%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    315 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    5 кг\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 2"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 3"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Кефир 2,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    925 мл\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 4"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 5"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сыр плавленный\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    400 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 6"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 7"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="promo-catalog-slider__bottom">\n    <div class="promo-catalog-slider__pagination js-promo-catalog-slider-pagination"></div>\n\n    <div class="promo-catalog-slider__controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white round-button_reverse  js-promo-catalog-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white   js-promo-catalog-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  promo-catalog-slider__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</div>\n              \n\n\n  \n<div\n  class="promo-catalog-slider js-promo-catalog-slider-container promo-catalog__slider"\n                  data-slider="altai"\n      >\n  <div class="swiper js-promo-catalog-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 1"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сметана сливочная 20%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    315 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    5 кг\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 2"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 3"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Кефир 2,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    925 мл\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 4"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 5"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сыр плавленный\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    400 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 6"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 7"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="promo-catalog-slider__bottom">\n    <div class="promo-catalog-slider__pagination js-promo-catalog-slider-pagination"></div>\n\n    <div class="promo-catalog-slider__controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white round-button_reverse  js-promo-catalog-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white   js-promo-catalog-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  promo-catalog-slider__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</div>\n              \n\n\n  \n<div\n  class="promo-catalog-slider js-promo-catalog-slider-container promo-catalog__slider"\n                  data-slider="cow"\n      >\n  <div class="swiper js-promo-catalog-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 1"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сметана сливочная 20%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    315 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    5 кг\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 2"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 3"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Кефир 2,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    925 мл\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 4"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 5"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сыр плавленный\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    400 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 6"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 7"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="promo-catalog-slider__bottom">\n    <div class="promo-catalog-slider__pagination js-promo-catalog-slider-pagination"></div>\n\n    <div class="promo-catalog-slider__controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white round-button_reverse  js-promo-catalog-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white   js-promo-catalog-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  promo-catalog-slider__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</div>\n              \n\n\n  \n<div\n  class="promo-catalog-slider js-promo-catalog-slider-container promo-catalog__slider"\n                  data-slider="dp"\n      >\n  <div class="swiper js-promo-catalog-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 1"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сметана сливочная 20%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    315 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    5 кг\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 2"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 3"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Кефир 2,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    925 мл\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 4"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 5"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сыр плавленный\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    400 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 6"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 7"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="promo-catalog-slider__bottom">\n    <div class="promo-catalog-slider__pagination js-promo-catalog-slider-pagination"></div>\n\n    <div class="promo-catalog-slider__controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white round-button_reverse  js-promo-catalog-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white   js-promo-catalog-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  promo-catalog-slider__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</div>\n              \n\n\n  \n<div\n  class="promo-catalog-slider js-promo-catalog-slider-container promo-catalog__slider"\n                  data-slider="horeca"\n      >\n  <div class="swiper js-promo-catalog-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-1.webp"\n                alt="слайд 1"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сметана сливочная 20%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    315 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    5 кг\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-2.webp"\n                alt="слайд 2"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-3.webp"\n                alt="слайд 3"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Кефир 2,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    925 мл\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-4.webp"\n                alt="слайд 4"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-5.webp"\n                alt="слайд 5"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Сыр плавленный\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    200 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    400 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-6.webp"\n                alt="слайд 6"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Масло сливочное 82,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    10 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n              <div class="swiper-slide">\n          <a href="product-detail.html" class="promo-catalog-card">\n            <div class="promo-catalog-card__image">\n              <img\n                src="/assets/images/catalog/sliders/slider-1/slide-7.webp"\n                alt="слайд 7"\n                loading="lazy"\n              >\n            </div>\n\n            <div class="promo-catalog-card__bottom">\n              <div class="promo-catalog-card__text">\n                Творог 0,5%\n              </div>\n\n              <div class="promo-catalog-card__caption">
2\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    100 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                     promo-catalog-card__caption-item_selected                  ">\n                    180 г\n                  </span>\n                                  <span class="\n                    promo-catalog-card__caption-item\n                                      ">\n                    380 г\n                  </span>\n                              </div>\n            </div>\n          </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="promo-catalog-slider__bottom">\n    <div class="promo-catalog-slider__pagination js-promo-catalog-slider-pagination"></div>\n\n    <div class="promo-catalog-slider__controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white round-button_reverse  js-promo-catalog-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_white   js-promo-catalog-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  promo-catalog-slider__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</div>\n          </div>\n  </div>\n</section>\n      </div>\n          <div class="\n        swiper-slide\n        full-page-slider__slide\n              ">\n        \n\n\n  \n\n<section\n  class="nutrients pill-animation"\n        >\n  <div class="nutrients__content">\n    <picture class="nutrients__image-container">\n      <source\n        media="(min-width: 768px)"\n        srcset="/assets/images/nutrients/sour-cream-desktop.webp"\n      >\n      <img\n        class="nutrients__image"\n        src="/assets/images/nutrients/sour-cream-mobile.webp"\n        alt="сметана сливочная"\n      >\n    </picture>\n\n    <img\n      class="nutrients__text-image"\n      src="/assets/images/nutrients/text.svg"\n      alt="нежность, любовь и польза в каждой упаковке"\n      loading="lazy"\n    >\n\n          <div class="nutrients__info nutrients__info_name_composition">\n        <img\n          class="nutrients__info-image"\n          src="/assets/images/nutrients/composition.svg"\n          alt="Натуральный состав"\n          loading="lazy"\n        >\n      </div>\n          <div class="nutrients__info nutrients__info_name_microelements">\n        <img\n          class="nutrients__info-image"\n          src="/assets/images/nutrients/microelements.svg"\n          alt="Полезные микроэлементы"\n          loading="lazy"\n        >\n      </div>\n          <div class="nutrients__info nutrients__info_name_b9">\n        <img\n          class="nutrients__info-image"\n          src="/assets/images/nutrients/b9.svg"\n          alt="B9"\n          loading="lazy"\n        >\n      </div>\n          <div class="nutrients__info nutrients__info_name_b12">\n        <img\n          class="nutrients__info-image"\n          src="/assets/images/nutrients/b12.svg"\n          alt="B12"\n          loading="lazy"\n        >\n      </div>\n          <div class="nutrients__info nutrients__info_name_ca">\n        <img\n          class="nutrients__info-image"\n          src="/assets/images/nutrients/ca.svg"\n          alt="Ca"\n          loading="lazy"\n        >\n      </div>\n          <div class="nutrients__info nutrients__info_name_zn">\n        <img\n          class="nutrients__info-image"\n          src="/assets/images/nutrients/zn.svg"\n          alt="Zn"\n          loading="lazy"\n        >\n      </div>\n    \n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_light  nutrients__button"\n  \n\t                href="#"\n      >
2\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</section>\n      </div>\n          <div class="\n        swiper-slide\n        full-page-slider__slide\n              ">\n        \n\n  \n<section\n  class="milk-family pill-animation"\n        >\n  \n\n\n\n\n<div\n  class="split-blocks  "\n  >\n  <div class="split-blocks__block">\n          <div class="milk-family__block">\n        \n\n\n<div\n  class="info-block "\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon  info-block__image"\n        >\n  <img src="/assets/images/split-blocks/cow-head.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/love_prof.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n                ">\n      Молочная семья экомилк\n    </h2>\n  \n      <p class="info-block__text">\n                Из года в год мы становимся лидерами\n                по объему продаж в России,\n                в первую очередь — за счет постоянного\n                контроля качества нашей продукции.\n              </p>\n  \n      \n\n\n  \n\t\n\n<a\n\tclass="button button_theme_transparent-primary "\n  \n\t          href="#"\n      >\n\n      <span class="button__text">Подробнее о компании</span>\n  \n</a>\n  </div>\n\n              </div>\n      </div>\n\n  <div class="split-blocks__block">\n          \n\n\n<div\n  class="media-block"\n  >\n      <img\n      src="/assets/images/split-blocks/curd.webp"\n      alt="картинка"\n      loading="lazy"\n      class="media-block__picture"\n    >\n  </div>\n      </div>\n</div>\n</section>\n      </div>\n          <div class="\n        swiper-slide\n        full-page-slider__slide\n              ">\n        \n\n  \n<section\n  class="promo-video pill-animation"\n        >\n  \n\n  \n<div\n  class="video js-video promo-video__video"\n        >\n  <video\n    class="video__player js-player"\n    loop\n    controls\n    preload="auto"\n    poster="/assets/images/promo-video/video-poster.webp"\n  >\n          <source src="/assets/video/promo/about.mp4" type="video/mp4">\n              <source src="/assets/video/promo/about.webm" type="video/webm">\n      </video>\n\n  <div class="video__screen js-screen">\n    <img\n      class="video__screen-preview"\n      src="/assets/images/promo-video/video-poster.webp"\n      alt="о нашем производстве"\n      loading="lazy"\n    >\n\n    <button\n      class="video__play-button"\n      type="button"\n    >\n      <img\n        class="video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      >\n    </button>\n  </div>\n</div>\n</section>\n      </div>\n          <div class="\n        swiper-slide\n        full-page-slider__slide\n              ">\n        \n\n\n  \n\n<section\n  class="reviews js-reviews-slider-container pill-animation"\n        >\n  <h2 class="reviews__title">Наши гости на&nbsp;производстве</h2>\n\n  <div class="reviews__slider js-reviews-slider">\n    <div class="reviews__slider-wrapper swiper-wrapper">\n                      \n        <div class="reviews__slide swiper-slide">\n                                \n          \n\n\n  \n<div\n  class="review-card review-card_theme_primary   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/avatar-1.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Дарья Ставрович\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаÐ
2»Ð¾Ð²Ð°Ñ‚ÑŒ семью. Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n                                        \n        <div class="reviews__slide reviews__slide_even swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_light  review-card__video-review reviews__slide-content"\n        >\n      <div class="review-card-video" data-href="/assets/video/promo/about.webm">\n    <img\n      class="review-card-video__preview"\n      src="/assets/images/promo-video/video-poster.webp"\n      alt="о нашем производстве"\n      loading="lazy"\n    >\n\n    <button class="review-card-video__play-button js-video-reviews-button">\n      <img\n        class="review-card-video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      />\n    </button>\n</div>\n  </div>\n        </div>\n                      \n        <div class="reviews__slide swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_soft   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/avatar-2.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Иван Иванов\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаловать семью. Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n                                        \n        <div class="reviews__slide reviews__slide_even swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_light  review-card__video-review reviews__slide-content"\n        >\n      <div class="review-card-video" data-href="/assets/video/promo/about.webm">\n    <img\n      class="review-card-video__preview"\n      src="/assets/images/promo-video/video-poster.webp"\n      alt="о нашем производстве"\n      loading="lazy"\n    >\n\n    <button class="review-card-video__play-button js-video-reviews-button">\n      <img\n        class="review-card-video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      />\n    </button>\n</div>\n  </div>\n        </div>\n                      \n        <div class="reviews__slide swiper-slide">\n                                \n          \n\n\n  \n<div\n  class="review-card review-card_theme_primary   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/avatar-3.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Дарья Ставрович\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаÐ
2»Ð¾Ð²Ð°Ñ‚ÑŒ семью. Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n                                        \n        <div class="reviews__slide reviews__slide_even swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_light   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/avatar-4.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Иван Иванов\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаловать семью. Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n                      \n        <div class="reviews__slide swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_soft  review-card__video-review reviews__slide-content"\n        >\n      <div class="review-card-video" data-href="/assets/video/promo/about.webm">\n    <img\n      class="review-card-video__preview"\n      src="/assets/images/promo-video/video-poster.webp"\n      alt="о нашем производстве"\n      loading="lazy"\n    >\n\n    <button class="review-card-video__play-button js-video-reviews-button">\n      <img\n        class="review-card-video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      />\n    </button>\n</div>\n  </div>\n        </div>\n                                        \n        <div class="reviews__slide reviews__slide_even swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_light   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/avatar-5.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Дарья Ставрович\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаловать семью. Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n                      \n        <div class="reviews__slide swiper-slide">\n                                \n          \n\n\n  \n<div\n  class="review-card review-card_theme_primary   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/
2avatar-1.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Дарья Ставрович\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаловать семью.Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n                                        \n        <div class="reviews__slide reviews__slide_even swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_light  review-card__video-review reviews__slide-content"\n        >\n      <div class="review-card-video" data-href="/assets/video/promo/about.webm">\n    <img\n      class="review-card-video__preview"\n      src="/assets/images/promo-video/video-poster.webp"\n      alt="о нашем производстве"\n      loading="lazy"\n    >\n\n    <button class="review-card-video__play-button js-video-reviews-button">\n      <img\n        class="review-card-video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      />\n    </button>\n</div>\n  </div>\n        </div>\n                      \n        <div class="reviews__slide swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_soft   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/avatar-2.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Иван Иванов\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаловать семью.Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n                                        \n        <div class="reviews__slide reviews__slide_even swiper-slide">\n                                  \n          \n\n\n  \n<div\n  class="review-card review-card_theme_light  review-card__video-review reviews__slide-content"\n        >\n      <div class="review-card-video" data-href="/assets/video/promo/about.webm">\n    <img\n      class="review-card-video__preview"\n      src="/assets/images/promo-video/video-poster.webp"\n      alt="о нашем производстве"\n      loading="lazy"\n    >\n\n    <button class="review-card-video__play-button js-video-reviews-button">\n      <img\n        class="review-card-video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      />\n    </button>\n</div>\n  </div>\n        </div>\n                      \n        <div class="reviews__slide swiper-slide">\n                                \n          \n\n\n  \n<div\n  class="review-card review-card_theme_primary   reviews__slide-content"\n        >\n      <div class="review-card__container">\n      <div class="review-card__top">\n        <div class="review-card__avatar">\n          <img\n            class="review-card__avatar-image"\n            src="/assets/images/reviews/avatars/
2avatar-3.webp"\n            alt="фото"\n            loading="lazy"\n          >\n        </div>\n        <div class="review-card__info">\n          <div class="review-card__name">\n            Дарья Ставрович\n          </div>\n          <a class="review-card__social-link" href="@dadadarya">\n            @dadadarya\n          </a>\n        </div>\n      </div>\n      <div class="review-card__text">\n        Осталась в восторге от посещения производства Экомилк — чувствуется профессионализм и любовь к своему делу. Вкусное и полезное молоко, которым я могу себя иногда побаловать семью.Приятное дополнение к столу или как отдельный напиток\n      </div>\n    </div>\n\n    \n  </div>\n        </div>\n          </div>\n  </div>\n\n  <div class="reviews__slider-pagination js-reviews-slider-pagination"></div>\n\n  <div class="reviews__slider-controls">\n    \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  js-reviews-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   js-reviews-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n  </div>\n</section>\n      </div>\n          <div class="\n        swiper-slide\n        full-page-slider__slide\n              ">\n        \n\n\n  \n\n<section\n  class="video-slider js-video-slider pill-animation"\n        >\n  \n\n\n\n\n<div\n  class="split-blocks split-blocks_reverse "\n  >\n  <div class="split-blocks__block">\n          <div class="video-slider__main-slider">\n        <div class="swiper js-video-slider-slider">\n          <div class="swiper-wrapper">\n                          <div class="swiper-slide">\n                \n\n\n<div\n  class="info-block "\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon  info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/butter.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/nature.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n      info-block__title_h2          ">\n      Наша визитная карточка\n    </h2>\n  \n      <p class="info-block__text">Визитная карточка «Экомилк» — сливочное масло, которое миллионы семей ценят за нежный молочный вкус и исключительно натуральный состав.</p>\n  \n  </div>\n              </div>\n                          <div class="swiper-slide">\n                \n\n\n<div\n  class="info-block "\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon  info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/butter.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/nature.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n      info-block__title_h2          ">\n      Наша карточка\n    </h2>\n  \n      <p class="info-block__text">Визитная карточка «Экомилк» — сливочное масло, которое миллионы семей ценят за нежный молочный вкус и исключительно натуральный состав.</p>\n  \n  </div>\n              </div>\n                          <div class="swiper-slide">\n                \n\n\n<div\n  class="info-block "\n  >\n                \n    \n\n\n  \n<div\n  class="circle-brand-icon  info-block__image info-block__image_mobile-hidden"\n        >\n  <img src="/assets/images/split-blocks/butter.svg" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="/assets/images/split-blocks/nature.svg" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n  \n      <h2 class="\n      info-block__title\n      info-block__title_h2          ">\n      Наша визитная карточка\n    </h2>\n  \n      <p class="info-block__text">Визитная карточка «Экомилк» — сливочное масло, которое миллионы семей ценят за нежный молочный вкус и исключительно натуральный состав.</p>\n  \n  </div>\n              </div>\n                      </div>\n        </div>\n\n        <div class="video-slider__slider-navigation">\n          \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-primary round-button_reverse  js-video-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n          \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-primary   js-video-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n        </div>\n      </div>\n      </div>\n\n  <div class="split-blocks__block">\n          <div class="video-slider__thumbs-slider swiper js-video-slider-thumbs-slider">\n        <div class="swiper-wrapper">\n                      <div class="swiper-slide">\n              \n\n\n<div\n  class="media-block"\n  >\n      <video\n      class="media-block__video"\n      autoplay\n              loop\n            muted\n       autoplay        loop        muted       preload="auto"\n                    data-hls-src="https://ecomilk.artw.dev/upload/video/HSL/example_0/master.m3u8"\n          >\n              <source src="/assets/video/video-slider/butter.mp4" type="video/mp4">\n                    <source src="/assets/video/video-slider/butter.webm" type="video/webm">\n          </video>\n  </div>\n            </div>\n                      <div class="swiper-slide">\n              \n\n\n<div\n  class="media-block"\n  >\n      <video\n      class="media-block__video"\n      autoplay\n              loop\n            muted\n       autoplay        loop        muted       preload="auto"\n                    data-hls-src="https://ecomilk.artw.dev/upload/video/HSL/example_1/master.m3u8"\n          >\n              <source src="/assets/video/video-slider/about.mp4" type="video/mp4">\n                    <source src="/assets/video/video-slider/about.webm" type="video/webm">\n          </video>\n  </div>\n            </div>\n                      <div class="swiper-slide">\n              \n\n\n<div\n  class="media-block"\n  >\n      <video\n      class="media-block__video"\n      autoplay\n              loop\n            muted\n       autoplay        loop        muted       preload="auto"\n                    data-hls-src="https://ecomilk.artw.dev/upload/video/HSL/example_0/master.m3u8"\n          >\n              <source src="/assets/video/video-slider/butter.mp4" type="video/mp4">\n                    <source src="/assets/video/video-slider/butter.webm" type="video/webm">\n          </video>\n  </div>\n            </div>\n                  </div>\n      </div>\n      </div>\n</div>\n</section>\n      </div>\n          <div class="\n        swiper-slide\n        full-page-slider__slide\n              ">\n        \n\n  \n<section\n  class="about pill-animation"\n        >\n  <div class="about__content">\n    <img\n      class="about__bg-logo"\n      src="/assets/images/about/bg-logo.svg"\n      alt="экомилк"\n      loading="lazy"\n    >\n\n    <picture class="about__image-container">\n      <source media="(min-width: 768px)" srcset="/assets/images/about/cows-desktop.webp">\n      <img class="about__image" src="/assets/images/about/cows-mobile.webp" alt="экомилк">\n    </picture>\n\n    <div class="about__info">\n      \n\n\n  \n<div\n  class="number-item about__info-item"\n        >\n  <div class="number-item__top">\n    <span class="number-item__number">6</span>\n      </div>\n      <div class="number-item__caption">\n      торговых марок\n    </div>\n  </div>\n      \n\n\n  \n<div\n  class="number-item about__info-item"\n        >\n  <div class="number-item__top">\n    <span class="number-item__number">50</span>\n          <span class="number-item__addition">+</span>\n      </div>\n      <div class="number-item__caption">\n      наименований\n    </div>\n  </div>\n      \n\n\n  \n<div\n  class="number-item about__info-item"\n        >\n  <div class="number-item__top">\n    <span class="number-item__number">15</span>\n      </div>\n      <div class="number-item__caption">\n      лет на рынке\n    </div>\n  </div>\n    </div>\n  </div>\n</section>\n      </div>\n          <div class="\n        swiper-slide\n        full-page-slider__slide\n              ">\n        \n\n  \n\n<section\n  class="recipes-promo js-recipes-promo pill-animation"\n        >\n  <div class="recipes-promo__info">\n    <h2 class="recipes-promo__title">Авторские рецепты</h2>\n    <p>\n      Делимся с вами авторскими кулинарными\n      рецептами простых домашних блюд,\n      Ð
2ºÐ¾Ñ‚орые будут радовать вашу семью\n      и гостей на завтрак, обед или ужин!\n    </p>\n  </div>\n\n  <div class="recipes-promo__slider swiper js-recipes-slider">\n    <div class="swiper-wrapper">\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Котлеты из индейки\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="cutlets" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-1.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#cutlets) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-1" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-1) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-2" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-2) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-3" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-3) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-4" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-4) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="recipes-promo__bottom">
2\n    <div class="recipes-promo__slider-controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  js-recipes-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   js-recipes-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  recipes-promo__button"\n  \n\t                href="recipes.html"\n      >\n\n      <span class="button__text">Открыть все</span>\n  \n</a>\n  </div>\n</section>\n      </div>\n          <div class="\n        swiper-slide\n        full-page-slider__slide\n        full-page-slider__slide_autoheight      ">\n        \n<footer class="footer">\n  <div class="footer__body">\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">
2\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n      </div>\n      </div>\n</div>\n\n    \n<div class="video-modal js-video-modal ">\n  <div class="video-modal__layout">\n  </div>\n\n  <button\n    type="button"\n    class="video-modal__close js-video-modal-close"\n  >\n    <svg aria-hidden="true" class="svg-icon popup__close-icon">\n      <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n    </svg>\n  </button>\n\n  <div class="video-modal__video">\n    \n\n\n<div\n  class="media-block"\n  >\n      <video\n      class="media-block__video"\n      autoplay\n              loop\n            muted\n                        preload="auto"\n       controls           >\n              <source src="/assets/video/promo/about.mp4" type="video/mp4">\n                    <source src="/assets/video/promo/about.webm" type="video/webm">\n          </video>\n  </div>\n  </div>\n</div>\n  </div>\n    </main>\n\n    \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>
2\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n  </div>\n</body>\n</html>\n'},5716:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n  <head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n  <body>\n    \n\t\t<div class="page-layout page-layout_default">\n                  \n\n\n\n<header\n  class="header  js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons  header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n      \n\n\t\t\t<main class="page-layout__page">\n          <div class="page page-news-detail">\n    \n\n\n\n<ul\n  class="breadcrumbs "\n  >\n  <li class="breadcrumbs__item"><a\n            href="main.html"\n            class="breadcrumbs__link breadcrumbs__link_type_home"\n          ><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-home"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-home" /></svg></a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="news.html"\n            class="breadcrumbs__link"\n          >Новости</a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="news-detail.html"\n            class="breadcrumbs__link breadcrumbs__link_type_current"\n          >«Экомилк» запустил новые линии розлива молочной продукции</a></li></ul>\n\n    \n\n\n<div\n  class="post-header "\n  >\n  <div class="post-header__top">\n    <h1 class="post-header__title">&laquo;Экомилк&raquo; запустил новые линии розлива молочной продукции</h1>\n\n      </div>\n\n    <time class="post-header__date" datetime="2018-07-23">23 июля 2018</time>\n  \n  \n      <svg class="post-header__image" viewBox="0 0 1212 787" xmlns="http://www.w3.org/2000/svg">\n      <defs>\n        <pattern id="post-header-image" width="100%" height="100%" patternUnits="userSpaceOnUse">\n          <image href="/assets/images/news-detail/mask-banner.webp" width="100%" />\n        </pattern>\n      </defs>\n      <path fill="url(#post-header-image)" d="M408.707 66.6845C365.024 65.0223 345.467 53.2597 303.493 47.5488C292.506 46.0539 286.655 44.4419 275.211 44.0312C254.807 43.2989 242.319 45.2062 220.792 50.0336C193.123 56.2384 177.112 62.6137 150.643 76.0088C126.739 88.1058 114.067 97.0352 92.5983 113.152C75.0543 126.322 64.4297 133.563 50.0759 149.369C34.5579 166.456 27.5024 177.476 18.3697 196.677C8.68319 217.043 5.55635 229.172 3.69787 249.297C1.84424 269.369 2.8826 280.683 8.94525 298.177C14.9405 315.477 22.3189 323.189 33.888 337.156C43.3042 348.523 49.7743 354.013 60.9596 363.964C73.0351 374.707 80.7707 379.865 93.6552 389.876C105.841 399.344 115.296 402.422 125.124 413.871C131.521 421.323 134.445 426.073 138.618 434.957C143.131 444.567 145.289 450.315 146.773 461.262C148.502 474.018 145.69 482.214 145.192 495.597C144.486 514.592 139.758 526.663 143.998 544.096C148.828 563.953 157.419 572.776 171.33 587.062L171.803 587.548C185.075 601.179 194.201 607.844 212.576 616.397C227.491 623.338 237.477 625.127 254.313 629.317L256.225 629.794C273.19 634.02 283.38 636.559 302.206 638.299C322.353 640.162 334.49 639.127 355.561 638.382C385.014 637.34 401.972 635.093 431.944 631.834C455.159 629.31 468.719 625.272 491.578 624.296C511.879 623.429 522.979 624.15 542.295 626.067C566.245 628.443 580.156 629.595 601.313 636.936C617.516 642.558 625.646 647.17 639.408 655.79C653.234 664.448 661.041 669.522 671.695 681.062C683.032 693.342 683.914 704.068 694.593 716.846C705.067 729.378 711.489 736.226 725.468 745.724C738.237 754.399 746.189 758.72 761.867 763.862C782.276 770.556 795.728 771.58 819.249 772.176C844.038 772.804 858.794 772.278 884.855 766.22C912.424 759.812 927.864 751.944 954.595 739.606C982.253 726.84 998.762 720.084 1023.42 701.871C1046.12 685.097 1057.29 673.418 1074.98 652.664C1098.04 625.611 1105.56 608.011 1121.78 578.582C1145.92 534.809 1170.78 465.795 1172.96 459.705C1173.07 459.384 1173.18 459.124 1173.33 458.815C1175.38 454.426 1191.45 419.504 1194.13 397.191C1196.89 374.228 1195.58 361.222 1188.25 341.511C1182.3 325.513 1177.41 316.83 1164.94 305.088C1154.28 295.056 1146.47 290.81 1132.06 284.699C1112.17 276.266 1097.57 276.631 1074.8 272.704C1048.86 268.229 1032.03 270.091 1007.11 263.781C984.544 258.066 971.906 254.198 953.146 243.374C937.795 234.516 927.795 230.018 918.344 216.108C908.084 201.007 909.695 188.421 906.123 169.889C902.126 149.151 904.78 135.75 899.772 115.411L899.582 114.639C894.563 94.2501 891.587 82.1605 879.944 65.0536C869.638 49.9113 862.108 42.2234 846.207 31.7026C826.293 18.5266 811.749 14.2374 785.862 9.07351C760.087 3.93208 743.748 4.39534 715.411 5.52026C687.268 6.63746 670.943 7.84092 641.952 14.6999C605.277 23.3768 585.783 39.7111 549.122 49.7848C524.737 56.4853 510.921 59.3145 486.726 62.693C455.691 67.0266 438.333 67.8117 408.707 66.6845Z"/>\n    </svg>\n  </div>\n\n    <section class="page-content">\n      <h6>\n        Летом 2018 года группа компаний &laquo;Экомилк&raquo; открыла новое подразделение\n        в&nbsp;городе Новосибирск&nbsp;&mdash; Новосибирский Молочный Комбинат!\n      </h6>\n      <p>\n        Открытие нового комбината&nbsp;&mdash; стратегически важный этап в&nbsp;развитии Компании.\n        Сырьевая база региона дает возможность расширить ассортимент за&nbsp;счет выпуска\n        новых товарных категорий, а&nbsp;новая схема логистики позволит сделать продукцию\n        наиболее конкурентной не&nbsp;только в&nbsp;регионе, но&nbsp;и&nbsp;в&nbsp;целом на&nbsp;всей восточной части страны.\n      </p>\n\n      \n\n\n\n      \n<div class="gallery-slider js-gallery-slider">\n  <div class="gallery-slider__wrapper swiper-wrapper">\n              <div class="gallery-slider__slide swiper-slide">\n                  <div\n            class="gallery-slider__slide-image-wrapper"\n            data-popup-invoker="newsGallery"\n            data-image-number="0"\n          >\n            <img\n              class="gallery-slider__slide-image"\n              src="/assets/images/news-detail/sli
2der/image-1.webp"\n              alt="фото"\n              loading="lazy"\n            >\n          </div>\n                        </div>\n          <div class="gallery-slider__slide swiper-slide">\n                  <div\n            class="gallery-slider__slide-image-wrapper"\n            data-popup-invoker="newsGallery"\n            data-image-number="1"\n          >\n            <img\n              class="gallery-slider__slide-image"\n              src="/assets/images/news-detail/slider/image-2.webp"\n              alt="фото"\n              loading="lazy"\n            >\n          </div>\n                            <div\n            class="gallery-slider__slide-image-wrapper"\n            data-popup-invoker="newsGallery"\n            data-image-number="2"\n          >\n            <img\n              class="gallery-slider__slide-image"\n              src="/assets/images/news-detail/slider/image-3.webp"\n              alt="фото"\n              loading="lazy"\n            >\n          </div>\n                        </div>\n          <div class="gallery-slider__slide swiper-slide">\n                  <div\n            class="gallery-slider__slide-image-wrapper"\n            data-popup-invoker="newsGallery"\n            data-image-number="3"\n          >\n            <img\n              class="gallery-slider__slide-image"\n              src="/assets/images/news-detail/slider/image-4.webp"\n              alt="фото"\n              loading="lazy"\n            >\n          </div>\n                        </div>\n      </div>\n\n  <div class="gallery-slider__controls">\n    \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  gallery-slider__prev js-gallery-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   gallery-slider__next js-gallery-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n  </div>\n\n  \n\n\n\n<div\n  class="popup popup_type_gallery"\n  data-popup="newsGallery"\n  >\n  <div class="popup__wrapper">\n    <div class="popup__content">\n      <button type="button" class="popup__close js-popup-close">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon popup__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n      </button>\n\n            <div class="gallery-popup-slider js-gallery-popup-slider">\n        <div class="gallery-popup-slider__wrapper swiper-wrapper">\n                      <div class="gallery-popup-slider__slide swiper-slide">\n              <img\n                class="gallery-popup-slider__slide-image"\n                src="/assets/images/news-detail/slider/image-1.webp"\n                alt="фото"\n                loading="lazy"\n              >\n            </div>\n                      <div class="gallery-popup-slider__slide swiper-slide">\n              <img\n                class="gallery-popup-slider__slide-image"\n                src="/assets/images/news-detail/slider/image-2.webp"\n                alt="фото"\n                loading="lazy"\n              >\n            </div>\n                      <div class="gallery-popup-slider__slide swiper-slide">\n              <img\n                class="gallery-popup-slider__slide-image"\n                src="/assets/images/news-detail/slider/image-3.webp"\n                alt="фото"\n                loading="lazy"\n              >\n            </div>\n                      <div class="gallery-popup-slider__slide swiper-slide">\n              <img\n                class="gallery-popup-slider__slide-image"\n                src="/assets/images/news-detail/slider/image-4.webp"\n                alt="фото"\n                loading="lazy"\n              >\n            </div>\n                  </div>\n\n        <div class="gallery-popup-slider__controls">\n          \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-white round-button_reverse  gallery-popup-slider__prev js-gallery-popup-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n          \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_transparent-white   gallery-popup-slider__next js-gallery-popup-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n        </div>\n      </div>\n        </div>\n  </div>\n</div>\n</div>\n\n      <p>\n        Ближайшей задачей компании является вывод линии по&nbsp;производству сметаны на&nbsp;полную\n        мощность и&nbsp;запуск оборудования по&nbsp;производству и&nbsp;фасовке творога и&nbsp;пастеризованного молока.\n      </p>\n      <p>\n        Компания ставит перед собой цель войти в&nbsp;ТОП молочных предприятий Сибирского\n        региона, расширить долю торговых марок Экомилк в&nbsp;целом по&nbsp;России и&nbsp;укрепить лидирующие\n        позиции на&nbsp;рынке, обеспечив высокий уровень контроля качества и&nbsp;автоматизации всех процессов\n        на&nbsp;новом предприятии.\n      </p>\n      <p>\n        ООО &laquo;Экомилк&raquo; производит свою продукцию с&nbsp;2001 года и&nbsp;входит в&nbsp;ТОП 5&nbsp;молочных\n        предприятий центрального региона России. Предприятие оснащено самым современным\n        оборудованием и&nbsp;собственной лабораторией, которая тщательно проверяет качество на&nbsp;всех\n        этапах производства, начиная с&nbsp;входного контроля сырья и&nbsp;заканчивая контролем готовой продукции.\n      </p>\n\n      \n\n\n<div\n  class="video js-video"\n  >\n  <video\n    class="video__player js-player"\n    loop\n    controls\n    preload="auto"\n    poster="/assets/images/promo-video/video-poster.webp"\n  >\n          <source src="/assets/video/promo/about.mp4" type="video/mp4">\n              <source src="/assets/video/promo/about.webm" type="video/webm">\n      </video>\n\n  <div class="video__screen js-screen">\n    <img\n      class="video__screen-preview"\n      src="/assets/images/promo-video/video-poster.webp"\n      alt="о нашем производстве"\n      loading="lazy"\n    >\n\n    <button\n      class="video__play-button"\n      type="button"\n    >\n      <img\n        class="video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      >\n    </button>\n  </div>\n</div>\n\n      \n<div class="sharing">\n\t<div class="sharing__text">Поделиться</div>\n\t\t\t<a class="sharing__link" href="https://vk.com/ecomilkru">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon sharing__link-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-footer-vk" />\n</svg>\n\t\t</a>\n\t</div>\n    </section>\n\n    \n<section class="read-also">\n  <h2 class="read-also__title">Читайте также</h2>\n\n  \n    \n\n  \n\n<div\n  class="post-card-carousel js-post-card-carousel read-also__slider"\n        >\n  <div\n    data-count-slides="grid"\n    class="swiper js-post-card-carousel-slider"\n  >\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-1.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из л
2учших в России</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2025»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-1.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2026»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2027»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-1.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2028»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2029»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2030»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из л
2учших в России</p>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n<a\n  class="post-card "\n    href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-1.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n        </div>\n          </div>\n  </div>\n</div>\n  </section>\n\n  </div>\n\t\t\t</main>\n\n      \n<footer class="footer">\n  <div class="footer__body">\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>
2\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n\n      \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n\t\t</div>\n\t</body>\n</html>\n'},8656:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n  <head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>
2\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n  <body>\n    \n\t\t<div class="page-layout page-layout_default">\n                  \n\n\n\n<header\n  class="header  js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons  header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n      \n\n\t\t\t<main class="page-layout__page">\n        <div class="page page-news">\n  \n\n\n\n<ul\n  class="breadcrumbs "\n  >\n  <li class="breadcrumbs__item"><a\n            href="main.html"\n            class="breadcrumbs__link breadcrumbs__link_type_home"\n          ><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-home"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-home" /></svg></a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="news.html"\n            class="breadcrumbs__link breadcrumbs__link_type_current"\n          >Новости</a></li></ul>\n\n  <h1>Новости</h1>\n\n  <div class="news-list">\n\t<div class="news-list__posts">\n    \n          \n\n  \n<a\n  class="post-card post-card_size_large news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-1.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России. Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России.</p>\n  </div>\n</a>\n          \n\n  \n<a\n  class="post-card post-card_size_default news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024 Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России. Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России. Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России.</p>\n  </div>\n</a>\n          \n\n  \n<a\n  class="post-card post-card_size_default news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024» Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024 Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из л
2учших в России</p>\n  </div>\n</a>\n          \n\n  \n<a\n  class="post-card post-card_size_default news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n          \n\n  \n<a\n  class="post-card post-card_size_default news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n          \n\n  \n<a\n  class="post-card post-card_size_default news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n          \n\n  \n<a\n  class="post-card post-card_size_default news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n          \n\n  \n<a\n  class="post-card post-card_size_default news-list__post"\n          href="/news-detail.html"\n>\n  <span\n    class="post-card__image"\n    style="background-image: url(/assets/images/news/news-2.webp);"\n  >\n  </span>\n  <div class="post-card__info">\n    <time class="post-card__date" datetime="22 сентября 2024">22 сентября 2024</time>\n    <div class="post-card__title">Экомилк был удостоен премии «ВЫБОР ПОТРЕБИТЕЛЯ-2024»</div>\n    <p class="post-card__text">Компания получила награду в номинации «Лучший произовитель» категории «Сливочный вкус», став одной из лучших в России</p>\n  </div>\n</a>\n      </div>\n\n  \n\n  \n<div\n  class="pagination  news-list__pagination"\n            >\n\t<div class="pagination__pages">\n\t\t<a href="#" class="pagination__round-link pagination__round-link_prev">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon pagination__icon-arrow"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\t\t</a>\n\n          <a\n        href="#"\n        class="\n          pagination__round-link\n          pagination__round-link_active                            "\n      >\n        1\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                                      "\n      >\n        2\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                    pagination__round-link_disabled                  "\n      >\n        ...\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                              pagination__round-link_hidden        "\n      >\n        5\n      </a>\n    \n\t\t<a href="#" class="pagination__round-link">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon pagination__icon-arrow"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\t\t</a>\n\t</div>\n\n\t<div class="pagination__more">\n\t  \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_transparent-primary  pagination__button"\n  \n\t                href="#"\n      >
2\n\n      <span class="button__text">Показать еще 6</span>\n  \n</a>\n\t</div>\n</div>\n</div>\n</div>\n\t\t\t</main>\n\n      \n<footer class="footer">\n  <div class="footer__body">\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>
2\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n\n      \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n\t\t</div>\n\t</body>\n</html>\n'},4157:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n  <head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>
2\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n  <body>\n    \n\t\t<div class="page-layout page-layout_default">\n                  \n\n\n\n<header\n  class="header  js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons  header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n      \n\n\t\t\t<main class="page-layout__page">\n          <div class="page page-content">\n    \n\n\n\n<ul\n  class="breadcrumbs "\n  >\n  <li class="breadcrumbs__item"><a\n            href="main.html"\n            class="breadcrumbs__link breadcrumbs__link_type_home"\n          ><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-home"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-home" /></svg></a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="personal-data-processing-policy.html"\n            class="breadcrumbs__link breadcrumbs__link_type_current"\n          >Согласие на обработку персональных данных</a></li></ul>\n \n    <h1>\n      Согласие на обработку персональных данных\n    </h1>\n    <time datetime="2018-07-23">Редакция от 06 февраля 2026</time>\n\n<p>\nПрисоединяясь\nк настоящему Согласию (проставляя\n«галочку») и оставляя свои данные на\nсайте ecomilk.ru (далее – Сайт) посетитель\nСайта (далее – Пользователь) действуя\nсвободно, своей волей и в своем интересе,\nвыражает свое согласие владельцу сайта\nОбществу с ограниченной ответственностью\n«Экомилк», ИНН 7731417709, ОГРН 1117746970175,\nЮридический адрес: 121357, город Москва,\nВерейская ул., д. 17, эт 2 пом 213 (в дальнейшем\n— Оператор), на обработку персональных\nданных:<br/>\nа именно, на любые действия\n(операции) или совокупность действий\n(операций), совершаемые Оператором с\nиспользованием средств автоматизации\nили без использования таких средств,\nпредусмотренные п. 3 ч. 1 ст. 3 Федерального\nзакона от 27.07.2006 N 152-ФЗ «О персональных\nданных», включая сбор, запись,\nсистематизацию, накопление, хранение,\nуточнение (обновление, изменение),\nизвлечение, использование, обезличивание,\nблокирование, удаление, уничтожение,\nпередачу (распространение, предоставление,\nдоступ) указанных персональных данных\nтретьим лицам с соблюдением мер,\nобеспечивающих защиту персональных\nданных от несанкционированного доступа,\nв объеме, необходимом для достижения\nцелей настоящего Согласия.</p>\n<p>\nПродолжая\nнахождение на сайте, Пользователь\nвыражает свое согласие Обществу с\nограниченной ответственностью «Экомилк»\nна обработку своих персональных данных:</p>\n<p>\n— персональных\nданных, которые Пользователь предоставляет\nо себе самостоятельно, заполнении полей\nвеб-формы обратной связи или в процессе\nиспользования Сервисов;</p>\n<p>\n— а\nтакже любой информации, относящейся к\nличности Пользователя, которую\nПользователь пожелает оставить в поле\nвеб-формы на Сайте;</p>\n<p>\n— данные,\nкоторые автоматически передаются\nсервисам Сайта в процессе их использования\nс помощью установленного на устройстве\nПользователя программного обеспечения,\nв том числе IP-адрес, данные файлов cookie,\nинформация о браузере Пользователя\n(или иной программе, с помощью которой\nосуществляется доступ к сервисам),\nтехнические характеристики оборудования\nи программного обеспечения, используемых\nПользователем и иная подобная информация.</p>\n<p>\nОператор\nне проверяет достоверность персональных\nданных, предоставляемых Пользователем\nСайта. Оператор получает персональные\nданные, непосредственно предоставленные\nПользователем.</p>\n<p>\n1.\nНастоящим Пользователь:</p>\n<p>\n1.1.\nПодтверждает, что все указанные им в\nполях веб-формы данные принадлежат\nлично ему и что в случае указания в\nпредоставляемых Пользователем сведений\nоб иных лицах, он подтверждает, что\nпередает персональные данные с согласия\nэтих лиц Оператору на основании ч. 8 ст.\n9, п. 5 ч. 1 ст. 6 Федерального закона от\n27.07.2006 г. № 152-ФЗ «О персональных данных»,\nа также получение от любых третьих лиц\nперсональных данных Пользователя для\nосуществления законных интересов и\nправ на окаÐ
2·Ð°Ð½Ð¸Ðµ услуг.</p>\n<p>\n1.2.\nВыражает свое согласие на то, что в\nуказанных ниже целях Оператор в\nустановленном действующим законодательством\nРоссийской Федерации порядке имеет\nправо поручать совершение отдельных\nдействий с персональными данными третьим\nлицам при условии, что они обязуются\nобеспечить безопасность персональных\nданных при их обработке и предотвращение\nразглашения персональных данных. При\nэтом такие третьи лица имеют право\nосуществлять действия (операции) с\nперсональными данными Пользователя,\nаналогичные действиям, которые вправе\nосуществлять Оператор.</p>\n<p>\n1.3.\nПредоставляет Оператору согласие на\nпередачу своих персональных данных\nтретьим лицам, в целях предоставления\nи оказания услуг (исполнения соглашений\nи договоров с Пользователем).</p>\n<p>\n2.\nЦели обработки персональной информации\nПользователей</p>\n<p>\n2.1.\nСайт собирает и хранит только ту\nперсональную информацию, которая\nнеобходима для предоставления сервисов\nили исполнения соглашений и договоров\nс Пользователем, за исключением случаев,\nкогда законодательством предусмотрено\nобязательное хранение персональной\nинформации в течение определенного\nзаконом срока.</p>\n<p>\n2.2.\nЦелями сбора и обработки персональных\nданных Пользователей являются:</p>\n<p>\n— идентификация\nПользователя в рамках Сервисов, соглашений\nи договоров, заключенных Оператором;</p>\n<p>\n— улучшение\nкачества оказываемых услуг, предоставляемых\nСервисов, удобства их использования,\nразработки новых Сервисов;</p>\n<p>\n— проведение\nстатистических и иных исследований на\nоснове обезличенных данных;</p>\n<p>\n— использование\nтехнологии «cookies» для создания\nстатистической отчетности, стандартных\nжурналов учета веб-сервера для подсчета\nколичества посетителей и оценки\nтехнических возможностей Сайта;</p>\n<p>\n— подтверждение\nдостоверности и полноты персональных\nданных, предоставленных Пользователем;</p>\n<p>\n— предоставления\nПользователю клиентской и технической\nподдержки при возникновении проблем,\nсвязанных с использованием Сайта;</p>\n<p>\n3.\nОператор обязуется принимать все\nнеобходимые меры для защиты персональных\nданных Пользователя от неправомерного\nдоступа или раскрытия.</p>\n<p>\nВ\nотношении персональной информации\nПользователя сохраняется ее\nконфиденциальность, кроме случаев\nдобровольного предоставления Пользователем\nин
2формации о себе для общего доступа\nнеограниченному кругу лиц. При\nиспользовании отдельных сервисов\nПользователь соглашается с тем, что\nопределенная часть его персональной\nинформации становится общедоступной.</p>\n<p>\n4.\nПользователь согласен с тем, что настоящее\nСогласие, а также персональные данные,\nпредоставленные им в целях настоящего\nсогласия, обрабатываются с использованием\nсредств автоматизации, в том числе в\nинформационно-телекоммуникационных\nсетях.</p>\n<p>\n5.\nНастоящее согласие вступает в силу с\nмомента выражения Пользователем согласия\nна обработку персональных данных путем\nпроставления признака согласия в\nчекбоксе рядом с текстом Согласия на\nобработку персональных данных в\nграфическом интерфейсе Сервиса и\nдействует до достижения целей обработки\nперсональных данных или до момента его\nотзыва.</p>\n<p>\n6.\nСогласие может быть отозвано в любое\nвремя:</p>\n<p>\n6.1.\nВ случае договорных отношений, путем\nнаправления Оператору письменного\nофициального запроса на адрес: 121357,\nгород Москва, Верейская ул., д. 17, эт 2 пом\n213 в порядке, установленном ст. 14\nФедеральным законом РФ от 27.07.2006 г. №\n152-ФЗ «О персональных данных». В случае\nнаправления данного запроса Оператору\nчерез систему электронного документооборота,\nон должен быть подписан электронной\nподписью в соответствии с законодательством\nРФ. При этом отправка оригинала документа\nПочтой России не требуется.</p>\n<p>\n6.2.\nВ иных случаях, путем направления\nзапроса&nbsp;в виде электронного документа\nс подписью субъекта персональных данных\n(документ в формате pdf) на адрес электронной\nпочты Оператора&nbsp;[email protected].</p>\n<p>\n7.\nПользователь уведомлен о том, что\nОператор вправе продолжить обработку\nперсональных данных без его согласия\nв случаях, предусмотренных действующим\nзаконодательством.</p>\n<p>\n8.\nОператор вправе в любое время в\nодностороннем порядке вносить изменения\nв настоящее Согласие, путем публикации\nнового текста Согласия на своем сайте.\nПри внесении изменений в актуальной\nредакции указывается дата последнего\nобновления. Новая редакция Согласия\nвступает в силу с момента ее размещения,\nесли иное не предусмотрено новой\nредакцией Согласия.</p>\n  </div>\n\t\t\t</main>\n\n      \n<footer class="footer">\n  <div class="footer__body">\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>
2\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>
2\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n\n      \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n\t\t</div>\n\t</body>\n</html>\n'},6566:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n  <head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>
2\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n  <body>\n    \n\t\t<div class="page-layout page-layout_default">\n                  \n\n\n\n<header\n  class="header  js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons  header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n      \n\n\t\t\t<main class="page-layout__page">\n          <div class="page page-content">\n    \n\n\n\n<ul\n  class="breadcrumbs "\n  >\n  <li class="breadcrumbs__item"><a\n            href="main.html"\n            class="breadcrumbs__link breadcrumbs__link_type_home"\n          ><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-home"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-home" /></svg></a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="privacy-policy.html"\n            class="breadcrumbs__link breadcrumbs__link_type_current"\n          >Политика конфиденциальности</a></li></ul>\n\n    <h1>\n      Политика конфиденциальности\n    </h1>\n    <time datetime="2018-07-23">Редакция от 06 февраля 2026</time>\n\n    <div>\n\t<p>\n\t\t<strong><span>1. ОБЩИЕ ПОЛОЖЕНИЯ</span></strong>\n\t</p>\n\t<p>\n\t\t<span>1.1. Настоящий документ определяет политику Общества с ограниченной\n\t\t\tответственностью</span><span>&#xa0; </span><span>«Экомилк»\n\t\t\t(ИНН 7731417709, ОГРН 1117746970175, Юридический адрес: 121357, город Москва, Верейская ул., д. 17, эт 2 пом\n\t\t\t213),</span><span>&#xa0; </span><span>(далее – Оператор) в\n\t\t\tотношении обработки персональных данных (далее – Политика).</span>\n\t</p>\n\t<p>\n\t\t<span>1.2. Политика в области обработки персональных данных разработана в соответствии с\n\t\t\tтребованиями с п.2 ч.1 ст.18.1 Федерального закона от 27.07.2006 г. № 152-ФЗ «О персональных данных», а также в\n\t\t\tсоответствии с иными федеральными законами и подзаконными актами Российской Федерации, определяющими случаи и\n\t\t\tособенности обработки персональных и обеспечения безопасности и конфиденциальности такой информации (далее –\n\t\t\tЗаконодательство в области персональных данных).</span>\n\t</p>\n\t<p>\n\t\t<span>1.3. С момента предоставления Оператору своих персональных данных физические лица\n\t\t\tстановятся субъектами персональных данных. Субъекты персональных данных вступают во взаимоотношения с Оператором\n\t\t\tисключительно по собственной воле и инициативе.</span>\n\t</p>\n\t<p>\n\t\t<span>1.4. Оператор осуществляет защиту персональных данных и принимает соответствующие\n\t\t\tмеры по охране полученных персональных данных от субъектов персональных данных в соответствии с действующим\n\t\t\tзаконодательством РФ.</span>\n\t</p>\n\t<p>\n\t\t<span>1.5. Политика разработана в целях реализации требований законодательства о\n\t\t\tперсональных данных и распространяется на все действия и операции, совершаемые Оператором с персональными данными\n\t\t\tсубъектов персональных данных, в том числе, но не ограничиваясь: </span>\n\t</p>\n\t<p>\n\t\t<span>-персональными данными, полученными от посетителей и пользователей сайта в\n\t\t\tинформационно-телекоммуникационной сети Интернет по адресу: ecomilk.ru (далее – Сайт Экомилк);</span><span\n\t\t\tstyle="font-family:Arial">&#xa0; </span>\n\t</p>\n\t<p>\n\t\t<span>-персональными данными контрагентов Оператора, полученными Оператором в рамках его\n\t\t\tдеятельности; </span>\n\t</p>\n\t<p>\n\t\t<span>-персональными данными, полученными от работников Оператора в момент заключения\n\t\t\tтрудового договора, а также персональными данными иных лиц, указанных в разделе 5 настоящей Политики (далее –\n\t\t\tсубъекты персональных данных или субъекты ПДн
2).</span>\n\t</p>\n\t<p>\n\t\t<span>1.6. Политика устанавливает цели обработки персональных данных, классификацию\n\t\t\tперсональных данных и субъектов персональных данных, определят порядок и условия обработки персональных данных,\n\t\t\tмеры по обеспечению безопасности персональных данных в отношении информации, которую Оператор может получить от\n\t\t\tсубъектов персональных данных, в том числе от посетителей и пользователей (далее – Пользователь) во время\n\t\t\tиспользования Сайта Экомилк.</span>\n\t</p>\n\t<p>\n\t\t<span>1.7. В соответствии с настоящей Политикой ООО «Экомилк» осуществляет обработку\n\t\t\tперсональных данных как с использованием средств автоматизации, так и без использования таковых. Обработка\n\t\t\tперсональных данных не может осуществляться Оператором или его работниками в целях причинения имущественного и\n\t\t\tморального вреда субъектам персональных данных, затруднения реализации их прав и свобод. Обработка персональных\n\t\t\tданных должна осуществляться до достижения законных, конкретных и заранее определенных целей, и должна проводиться\n\t\t\tв отношении тех персональных данных и только в том объеме, которые отвечают целям обработки.</span>\n\t</p>\n\t<p>\n\t\t<span>1.8. Оператор не раскрывает третьим лицам и не распространяет персональные данные\n\t\t\tбез согласия Субъекта персональных данных (если иное не предусмотрено федеральным законом Российской\n\t\t\tФедерации).</span>\n\t</p>\n\t<p>\n\t\t<span>1.9. В случаях, когда Оператор поручает обработку персональных данных другим лицам,\n\t\t\tим соблюдаются все требования Федерального закона от 27.07.2006 г. № 152-ФЗ «О персональных данных»,\n\t\t\tпредусмотренные для поручения обработки персональных данных третьим лицам.</span>\n\t</p>\n\t<p>\n\t\t<span>1.10. Положения настоящей Политики являются основой для организации работы по\n\t\t\tобработке персональных данных Оператором, в том числе, для разработки внутренних нормативных документов,\n\t\t\tрегламентирующих процесс обработки персональных данных Оператором и обязательны для исполнения всеми работниками\n\t\t\tОператора.</span>\n\t</p>\n\t<p>\n\t\t<span>1.11. Использование сайта ecomilk.ru</span><span>&#xa0;\n\t\t</span><span>и (или) Сервисов Сайта Экомилк и предоставление Оператору своих персональных\n\t\t\tданных означает безусловное согласие Пользователя с настоящей Политикой и условиями обработки персональных данных.\n\t\t\tВ случае несогласия (полного или частичного) с условиями Политики Пользователь должен прекратить использование\n\t\t\tсайта ecomilk.ru и (или) Сервисов Сайта Экомилк.</span>\n\t</p>\n\t<p>\n\t\t<span>
21.12. Сайт ecomilk.ru</span><span>&#xa0; </span><span style="font-family:Arial">(далее – Сайт) может содержать\n\t\t\tгиперссылки на другие веб-сайты, предоставленные третьими\n\t\t\tлицами. Оператор не контролирует сторонние веб-сайты или информацию, размещенную на веб-сайтах третьих лиц.\n\t\t\tОператор не несет ответственности за защиту и конфиденциальность любой информации, предоставленной субъектом\n\t\t\tперсональных данных на веб-сайтах третьих лиц, после того как он покинул сайт Оператора.</span>\n\t</p>\n\t<p>\n\t\t<span>1.13. Оператор получает персональные данные, непосредственно предоставленные\n\t\t\tПользователем. Передача персональных данных Пользователем Оператору через веб-формы сбора данных (заявки, обратной\n\t\t\tсвязи и т.д.) означает согласие Пользователя на передачу его персональных данных. При этом Пользователь дает\n\t\t\tконкретное, предметное, информированное, сознательное и однозначное согласие на обработку своих персональных\n\t\t\tданных.</span>\n\t</p>\n\t<p>\n\t\t<span>1.14. Оператор не проверяет достоверность предоставляемых персональных данных. Вся\n\t\t\tуказанная Пользователем информация, позволяющая его прямо или косвенно идентифицировать, рассматривается\n\t\t\tОператором в качестве корректных персональных данных.</span>\n\t</p>\n\t<p>\n\t\t<span>1.15. Пользователь подтверждает, что все указанные им данные принадлежат лично ему и\n\t\t\tчто в случае указания в предоставляемых Пользователем сведений об иных лицах, он подтверждает, что передает\n\t\t\tперсональные данные с согласия этих лиц Оператору на основании ч. 8 ст. 9, п. 5 ч. 1 ст. 6 Федерального закона от\n\t\t\t27.07.2006 г. № 152-ФЗ «О персональных данных».</span>\n\t</p>\n\t<p>\n\t\t<span>1.16. Оператор использует технологию «cookies» для создания статистической\n\t\t\tотчетности. При посещении Пользователем Сайта, Оператор посредством «cookies» определяет какие страницы\n\t\t\tПользователь посетил, что было загружено, имя домена Интернет-провайдера Пользователя, страну и выбранные переходы\n\t\t\tс одной страницы на другую, а также адреса сторонних веб-сайтов, с которых совершен переход на Сайт\n\t\t\tЭкомилк.</span>\n\t</p>\n\t<p>\n\t\t<span>1.17. Сервер, на котором размещаются персональные данные Пользователей, расположен в\n\t\t\tООО «Экомилк» на территории Российской Федерации по адресу: 121357, город Москва, Верейская ул., д. 17, эт 2 пом\n\t\t\t213.</span>\n\t</p>\n\t<p>\n\t\t<span>1.19. В случае возникновения вопросов по\n\t\t\tнастоящей Политике, Пользователь может связаться с ответственным за организацию обработки персональных данных,\n\t\t\tнаправив письмо на адрес электронной почты </span>[email protected] <span>с пометкой «Запрос о Политике конфиденциальности»\n\t\t\tили по адресу: 121357, город Москва, Верейская ул., д. 17, эт 2 пом 213.</span>\n\t</p>\n\t<p>\n\t\t<span>1.20. Все вопросы, неурегулированные настоящей Политикой обработки персональных\n\t\t\tданных, регламентируются действующим законодательством Российской Федерации.</span>\n\t</p>\n\t<p>\n\t\t<span>1.21. Оператор обязуется соблюдать нормы законодательства Российской Федерации в\n\t\t\tобласти защиты и обработки персональных данных.</span>\n\t</p>\n\t<p>\n\t\t<strong><span style="font-family:Arial; ">2. ОСНОВНЫЕ ТЕРМИНЫ, ПОНЯТИЯ И ОПРЕДЕЛЕНИЯ</span></strong>\n\t</p>\n\t<p>\n\t\t<span>В настоящей Политике используются следующие основные термины и определения:</span>\n\t</p>\n\t<p>\n\t\t<span>2.1. Персональные данные (далее — ПДн) – любая информация, относящаяся к прямо или\n\t\t\tкосвенно определенному, или определяемому физическому лицу (субъекту персональных данных). </span>\n\t</p>\n\t<p>\n\t\t<span>2.2. Конфиденциальность персональных данных – обязательное для выполнения Оператором\n\t\t\tили иным лицом, получившим доступ к персональным данным, требование не допускать раскрытия персональных данных\n\t\t\tтретьим лицам, и их распространение без Согласия субъекта персональных данных или наличия иного законного\n\t\t\tоснования.</span>\n\t</p>\n\t<p>\n\t\t<span>2.3. Защита персональных данных – комплекс мероприятий теÑ
2…нического,\n\t\t\tорганизационного и организационно-технического характера, направленных на защиту сведений, относящихся к\n\t\t\tопределенному или определяемому на основании такой информации субъекту персональных данных.</span>\n\t</p>\n\t<p>\n\t\t<span>2.4. Обработка персональных данных – любое действие (операция) или совокупность\n\t\t\tдействий (операций), совершаемых с использованием средств автоматизации или без использования таких средств с\n\t\t\tперсональными данными, включая сбор, запись, систематизацию, накопление, хранение, уточнение (обновление,\n\t\t\tизменение), извлечение, использование, передачу (распространение, предоставление, доступ), обезличивание,\n\t\t\tблокирование, удаление, уничтожение персональных данных.</span>\n\t</p>\n\t<p>\n\t\t<span>2.5. Оператор персональных данных (Оператор) – государственный орган, муниципальный\n\t\t\tорган, юридическое или физическое лицо, самостоятельно или совместно с другими лицами организующие и (или)\n\t\t\tосуществляющие обработку персональных данных, а также определяющее цели обработки персональных данных, состав\n\t\t\tперсональных данных, подлежащих обработке, действия (операции), совершаемые с персональными данными. </span>\n\t</p>\n\t<p>\n\t\t<span>2.6. Обезличивание персональных данных – действия, в результате которых становится\n\t\t\tневозможным без использования дополнительной информации определить принадлежность персональных данных конкретному\n\t\t\tсубъекту ПДн.</span>\n\t</p>\n\t<p>\n\t\t<span>2.7. Блокирование персональных данных – временное прекращение обработки персональных\n\t\t\tданных (за исключением случаев, если обработка необходима для уточнения персональных данных).</span>\n\t</p>\n\t<p>\n\t\t<span>2.8. Уничтожение персональных данных – действия, в результате которых становится\n\t\t\tневозможным восстановить содержание персональных данных в информационной системе персональных данных и (или) в\n\t\t\tрезультате которых уничтожаются материальные носители ПДн.</span>\n\t</p>\n\t<p>\n\t\t<span>2.9. Предоставление персональных данных – действия, направленные на раскрытие ПДн\n\t\t\tопределенному лицу или определенному кругу лиц.</span>\n\t</p>\n\t<p>\n\t\t<span>2.10. Распространение персональных данных – действия, направленные на раскрытие\n\t\t\tперсональных данных неопределенному кругу лиц.</span>\n\t</p>\n\t<p>\n\t\t<span>2.11. Автоматизированная обработка персональных данных – обработка персональных\n\t\t\tданных с помощью средств вычислительной теÑ
2…ники.</span>\n\t</p>\n\t<p>\n\t\t<span>2.12. Смешанная обработка персональных данных — это сочетание автоматизированного и\n\t\t\tнеавтоматизированного способов обработки таких данных.</span>\n\t</p>\n\t<p>\n\t\t<span>2.13. Трансграничная передача персональных данных – передача ПДн на территорию\n\t\t\tиностранного государства органу власти иностранного государства, иностранному физическому лицу или иностранному\n\t\t\tюридическому лицу.</span>\n\t</p>\n\t<p>\n\t\t<span>2.14. Информационная система персональных данных - совокупность содержащихся в базах\n\t\t\tданных персональных данных и обеспечивающих их обработку информационных технологий и технических средств</span>\n\t</p>\n\t<p>\n\t\t<span>2.15. Контрагент (клиент) – юридическое лицо, индивидуальный предприниматель, а\n\t\t\tтакже физическое лицо, занимающееся в установленном законодательством Российской Федерации порядке\n\t\t\tпредпринимательской деятельностью, заключившее или намеревающееся заключить с Оператором договор. </span>\n\t</p>\n\t<p>\n\t\t<span>2.16. Работник – физическое лицо, заключившее с Оператором трудовой договор.</span>\n\t</p>\n\t<p>\n\t\t<span>2.17. Соискатель – это физическое лицо, которое активно выражает свое намерение\n\t\t\tзаключить трудовой договор с Оператором с целью замещения вакантной должности. </span>\n\t</p>\n\t<p>\n\t\t<span>2.18. Сайт – совокупность программ для электронных вычислительных машин и иной\n\t\t\tинформации, содержащейся в информационной системе, доступ к которой обеспечивается посредством\n\t\t\tинформационно-телекоммуникационной сети «Интернет», расположенных по адресу ecomilk.ru. </span>\n\t</p>\n\t<p>\n\t\t<span>2.19. Использование Сайта – любые действия субъекта ПДн по получению доступа к Сайту\n\t\t\tи (или) Сервисам Сайта ecomilk.ru или отдельным его частям, функциям, интерфейсам; воспроизведение,\n\t\t\tраспространение, доведение до всеобщего сведения, сообщение по кабелю и в эфир, импорт, прокат, публичное\n\t\t\tисполнение, перевод и другая переработка материалов, информации (в полном объеме или частично), размещенных на\n\t\t\tСайте и (или) в Сервисах; любые другие способы использования, независимо от того, совершаются ли соответствующие\n\t\t\tдействия в целях извлечения прибыли или без такой цели.</span>\n\t</p>\n\t<p>\n\t\t<span>2.20. Пользователь – лицо, имеющее доступ и использующее Сайт Экомилк посредством\n\t\t\tсети Интернет, и предоставившее Оператору свои персональные данные при регистрации (создании учётной записи),\n\t\t\tзаполнении форм обратной связи или на получение справочной информации.</span>\n\t</p>\n\t<p>\n\t\t<span>2.21. Файлы cookie – данные, которые передаются в процессе использования Сайта с\n\t\t\tпомощью установленного на устройстве субъекта ПДн программного обеспечения, в том числе IP-адрес, информация о\n\t\t\tбраузере (или иной программе, с помощью которой осуществляется доступ к Сайту), используемых субъектом ПДн, дата и\n\t\t\tвремя доступа к Сайту, дата и время акцепта размещенных на Сайте оферт, сведения об истории покупок на Сайте, а\n\t\t\tтакже при использовании Сервисов адреса запрашиваемых страниц и иная подобная информация.</span>\n\t</p>\n\t<p>\n\t\t<strong><span style="font-family:Arial; ">3. ЦЕЛИ СБОРА И ОБРАБОТКИ ПЕРСОНАЛЬНЫХ ДАННЫХ</span></strong>\n\t</p>\n\t<p>\n\t\t<span>Персональные данные Пользователей (Субъектов ПДн) Оператор может использовать в\n\t\t\tследующих целях:</span>\n\t</p>\n\t<p>\n\t\t<span>3.1. Осуществление своей деятельности в соответствии с уставом Оператора; </span>\n\t</p>\n\t<p>\n\t\t<span>3.2.</span><span>&#xa0; </span><span style="font-family:Arial">Соблюдение законодательства и нормативных\n\t\t\tактов, оформление и регулирование трудовых\n\t\t\tотношений, ведение кадровой документации, расчет заработной платы, уплата налогов, сборов и взносов на социальное\n\t\t\tи пенсионное страхование, предоставление установленной законодательством отчетности в отношении физических лиц, в\n\t\t\tтом числе в Социальный фонд России и Федеральную налоговую службу, передача данных в кредитные организации для\n\t\t\tоформления банковской карты и перечисления заработной платы, для организации перемещений-поездок, включая\n\t\t\tсодействие при перелетах и переездах, организацию командировок и бронирование гостиниц, а также предоставление\n\t\t\tинформации третьим лицам для оформления полиса добровольного медицинского страхования, получения налоговых\n\t\t\tвычетов, обеспечения безопасности, контроля качества и объема выполняемой работы, сохранности имущества\n\t\t\tработодателя;</span>\n\t</p>\n\t<p>\n\t\t<span>3.3. Идентификация стороны в рамках соглашений и договоров, заключаемых Оператором;\n\t\t</span>\n\t</p>\n\t<p>\n\t\t<span>3.4. Использование технологии «cookies» для создания статистической отчетности,\n\t\t\tстандартных журналов учета веб-сервера для подсчета количества посетителей и оценки технических возможностей\n\t\t\tСайта;</span>\n\t</p>\n\t<p>\n\t\t<span>3.5. Привлечение и отбор Соискателей на работу у Оператора и учёт в кадровом\n\t\t\tрезерве;</span>\n\t</p>\n\t<p>\n\t\t<strong><span style="font-family:Arial; ">4. ПРАВОВЫЕ ОСНОВАНИЯ ОБРАБОТКИ ПЕРСОНАЛЬНЫХ ДАННЫХ</span></strong>\n\t</p>\n\t<p>\n\t\t<span>Правовыми основаниями обработки персональных данных являются:</span>\n\t</p>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>Конституция Российской Федерации;</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>Гражданский кодекс РФ, часть первая от 30.11.1994 г. № 51-ФЗ;</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>Трудовой кодекс Российской Федерации от 30.12.2001 г. № 197-ФЗ; </span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>Налоговый кодекс Российской Федерации от 31.07.1998 г. № 146-ФЗ;</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>Федеральный закон от 27.07.2006 г. № 149-ФЗ «Об информации, информационных\n\t\t\t\tтехнологиях и о защите информации» (с изменениями и дополнениями);</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>Федеральный закон от 27.07.2006 г. № 152-ФЗ «О персональных данных»;</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>Постановление Правительства Российской Федерации от 01.11.2012 года № 1119\n\t\t\t\t«Об утверждении требований к защите персональных данных при их обработке в информационных системах персональных\n\t\t\t\tданных»;</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>Приказ Федеральной службы по техническому и экспортному контролю от\n\t\t\t\t18.02.2013 г. № 21 «Об утверждении Состава и содержания организационных и технических мер по обеспечению\n\t\t\t\tбезопасности персональных данных при их обработке в информационных системах персональных данных»;</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>Постановление Правительства Российской Федерации от 15.09.2008 г. № 687 «Об\n\t\t\t\tутверждении положения об особенностях обработки персональных данных, осуществляемой без использования средств\n\t\t\t\tавтоматизации»;</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>Договоры, соглашения с субъектами персональных данных;
2</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>Согласие на обработку персональных данных от субъектов ПДн, в частности\n\t\t\t\tПользователей Сайта.</span>\n\t\t</p>\n\t</div>\n\t<p>\n\t\t<strong><span style="font-family:Arial; ">5. ОБЪЕМ И КАТЕГОРИИ ОБРАБАТЫВАЕМЫХ ПЕРСОНАЛЬНЫХ ДАННЫХ, КАТЕГОРИИ\n\t\t\t\tСУБЪЕКТОВ ПЕРСОНАЛЬНЫХ ДАННЫХ</span></strong>\n\t</p>\n\t<p>\n\t\t<span>5.1. Оператором для достижения заранее определенных целей, в том числе, но не\n\t\t\tограничиваясь:</span><br><span>5.1.1. Соискатели для целей исполнения трудового\n\t\t\tзаконодательства в рамках трудовых и иных непосредственно связанных с ним отношений, осуществления пропускного\n\t\t\tрежима:</span>\n\t</p>\n\t<ul>\n\t\t<li>\n\t\t\t<span>фамилия, имя, отчество;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>пол;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>гражданство;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>дата и место рождения;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>контактные данные;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>сведения об образовании, опыте работы, квалификации;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>иные персональные данные, сообщаемые кандидатами в резюме и сопроводительных\n\t\t\t\tписьмах.</span>\n\t\t</li>\n\t</ul>\n\n\t<p>\n\t\t<span>5.1.2. Работники и бывшие работники Оператора - для целей исполнения трудового\n\t\t\tзаконодательства в рамках трудовых и иных непосредственно связанных с ним отношений, осуществления пропускного\n\t\t\tрежима:</span>\n\t</p>\n\t<ul>\n\t\t<li>\n\t\t\t<span>фамилия, имя, отчество;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>пол;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>гражданство;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>дата и место рождения;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>изображение (фотография);</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>паспортные данные;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>адрес регистрации по месту жительства;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>адрес фактического проживания;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>контактные данные;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>индивидуальный номер налогоплательщика;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>страховой номер индивидуального лицевого счета (СНИЛС);</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>сведения об образовании, квалификации, профессиональной подготовке и повышении\n\t\t\t\tквалификации;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>семейное положение, наличие детей, родственные связи;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>сведения о трудовой деятельности;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>данные о регистрации брака;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>сведения о воинском учете;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>сведения об инвалидности;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>
2иные персональные данные, предоставляемые работниками в соответствии с\n\t\t\t\tтребованиями трудового законодательства.</span>\n\t\t</li>\n\t</ul>\n\n\t<p>\n\t\t<span>5.1.3. Члены семьи работников Оператора - для целей исполнения трудового\n\t\t\tзаконодательства в рамках трудовых и иных непосредственно связанных с ним отношений:</span>\n\t</p>\n\t<ul>\n\t\t<li>\n\t\t\t<span>фамилия, имя, отчество;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>степень родства;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>год рождения;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>иные персональные данные, предоставляемые работниками в соответствии с\n\t\t\t\tтребованиями трудового законодательства.</span>\n\t\t</li>\n\t</ul>\n\n\t<p>\n\t\t<span>5.1.4. Клиенты и контрагенты Оператора (физические лица) - для целей осуществления\n\t\t\tсвоей деятельности в соответствии с уставом Оператора, осуществления пропускного режима:</span>\n\t</p>\n\t<ul>\n\t\t<li>\n\t\t\t<span>фамилия, имя, отчество;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>дата и место рождения;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>паспортные данные;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>адрес регистрации по месту жительства;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>контактные данные;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>замещаемая должность;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>индивидуальный номер налогоплательщика;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>номер расчетного счета;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>иные персональные данные, предоставляемые клиентами и контрагентами (физическими\n\t\t\t\tлицами), необходимые для заключения и исполнения договоров.</span>\n\t\t</li>\n\t</ul>\n\n\t<p>\n\t\t<span>5.1.5. Представители (работники) клиентов и контрагентов Оператора (юридических лиц)\n\t\t\t- для целей осуществления своей деятельности в соответствии с уставом Оператора, осуществления пропускного\n\t\t\tрежима:</span>\n\t</p>\n\t<ul>\n\t\t<li>\n\t\t\t<span>фамилия, имя, отчество;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>паспортные данные;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>контактные данные;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>замещаемая должность;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>иные персональные данные, предоставляемые представителями (работниками) клиентов\n\t\t\t\tи контрагентов, необходимые для заключения и исполнения договоров.</span>\n\t\t</li>\n\t</ul>\n\n\t<p>\n\t\t<span>5.1.6. В указанных в разделе 3 настоящей Политики целях Оператор, с Согласия\n\t\t\tПользователей Сайта, обрабатывает следующие персональные данные:</span>\n\t</p>\n\t<ul>\n\t\t<li>\n\t\t\t<span>фамилию, имя, отчество (указанные вместе или по отдельности);</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>контактный телефон;</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>адрес электронной почты (e-mail);</span>\n\t\t</li>\n\t\t<li>\n\t\t\t<span>а также любую информацию, относящуюся к личности Пользователя, которую\n\t\t\t\tПользователь пожелает оставить на Сайте.</span>\n\t\t</li>\n\t</ul>\n  \n\t<p>\n\t\t<span>5.2. Субъекты персональных данных подразделяются на следующие категории лиц:</span>\n\t</p>\n\t<p>\n\t\t<span>5.2.1. Пользователи, имеющие доступ и использующие Сайт и связанные с ним сайты\n\t\t\tпосредством сети Интернет;</span>\n\t</p>\n\t<p>\n\t\t<span>
25.2.2.Физические лица, являющиеся Соискателями;</span>\n\t</p>\n\t<p>\n\t\t<span>5.2.3. Физические лица, являющиеся работниками Оператора и их близкими\n\t\t\tродственниками;</span>\n\t</p>\n\t<p>\n\t\t<span>5.2.4. Физические лица, являющиеся уволенными работниками Оператора;</span>\n\t</p>\n\t<p>\n\t\t<span>5.2.5. Представители юридических лиц и физические лица, купившие или намеревающиеся\n\t\t\tприобрести товары Оператора, использующие или намеревающиеся использовать Сервисы Оператора, услуги третьих лиц\n\t\t\tпри посредничестве Оператора или не имеющие с Оператором договорных отношений при условии, что их персональные\n\t\t\tданные включены в автоматизированные системы Оператора и обрабатываются в соответствии с Законодательством о\n\t\t\tперсональных данных (Пользователь);</span>\n\t</p>\n\t<p>\n\t\t<span>5.2.6. Представители юридических лиц и физические лица, не относящиеся к Клиентам,\n\t\t\tзаключившие или намеревающиеся заключить с Оператором договоры в связи с осуществлением Оператором\n\t\t\tадминистративно-хозяйственной деятельности при условии, что их персональные данные включены в автоматизированные\n\t\t\tсистемы Оператора и обрабатываются в соответствии с законодательством о персональных данных;</span>\n\t</p>\n\t<p>\n\t\t<span>5.2.7. Физические лица, персональные данные которых сделаны ими общедоступными, а их\n\t\t\tобработка не нарушает их прав и соответствует требованиям, установленным Законодательством о персональных\n\t\t\tданных;</span>\n\t</p>\n\t<p>\n\t\t<span>5.2.8. Иные физические лица, выразившие согласие на обработку Оператором их\n\t\t\tперсональных данных или физические лица, обработка персональных данных которых необходима Оператору для достижения\n\t\t\tцелей, предусмотренных международным договором Российской Федерации или законом, для осуществления и выполнения\n\t\t\tвозложенных законодательством Российской Федерации на Оператора функций, полномочий и обязанностей.</span>\n\t</p>\n\t<p>\n\t\t<strong><span style="font-family:Arial; ">6. ПОРЯДОК И УСЛОВИЯ ОБРАБОТКИ ПЕРСОНАЛЬНЫХ ДАННЫХ</span></strong>\n\t</p>\n\t<p>\n\t\t<span>6.1. Оператор производит обработку персональных данных (ПДн) при наличии хотя бы\n\t\t\tодного из следующих условий:</span>\n\t</p>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>обработка ПДн осуществляется с конкретного, предметного, информированного,\n\t\t\t\tсознательного и однозначного согласия субъекта персональных данных на обработку его персональных данных;
2</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>обработка персональных данных необходима для достижения целей осуществления\n\t\t\t\tи выполнения, возложенных законодательством Российской Федерации на Оператора функций, полномочий и\n\t\t\t\tобязанностей;</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>обработка персональных данных необходима для исполнения договора, стороной\n\t\t\t\tкоторого является субъект персональных данных;</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>обработка персональных данных необходима для осуществления прав и законных\n\t\t\t\tинтересов Оператора или третьих лиц либо достижения общественно значимых целей при условии, что при этом не\n\t\t\t\tнарушаются права и свободы субъектов персональных данных.</span>\n\t\t</p>\n\t</div>\n\t<p>\n\t\t<span>6.2. Оператор не раскрывает третьим лицам и не распространяет персональные данные\n\t\t\tбез согласия субъекта персональных данных (если иное не предусмотрено федеральным законом РФ).</span>\n\t</p>\n\t<p>\n\t\t<span>6.3. Оператор не обрабатывает специальные категории персональных данных, касающихся\n\t\t\tрасовой, национальной принадлежности, политических взглядов, религиозных или философских убеждений, состояния\n\t\t\tздоровья, интимной жизни.</span>\n\t</p>\n\t<p>\n\t\t<span>6.4. Оператор не осуществляет обработку биометрических персональных данных,\n\t\t\tсодержащих сведения, которые характеризуют физиологические и биологические особенности человека, позволяющих\n\t\t\tустановить его личность.</span>\n\t</p>\n\t<p>\n\t\t<span>6.5. Оператор не осуществляет трансграничной передачи персональных данных.</span>\n\t</p>\n\t<p>\n\t\t<span>6.6. Оператор не принимает решений, порождающих юридические последствия в отношении\n\t\t\tсубъекта персональных данных или иным образом затрагивающих права и законные интересы субъектов, на основании\n\t\t\tисключительно автоматизированной обработки персональных данных. Данные, имеющие юридические последствия или\n\t\t\tзатрагивающие права и законные интересы субъекта персональных данных, подлежат перед их использованием проверке со\n\t\t\tстороны уполномоченных работников Оператора.</span>\n\t</p>\n\t<p>\n\t\t<span>6.7. Оператор не размещает персональные данные субъекта персональных данных в\n\t\t\tобщедоступных источниках без его предварительного согласия.</span>\n\t</p>\n\t<p>\n\t\t<span>6.8. Оператор вправе передавать персональные данные субъектов персональных данных\n\t\t\tтретьим лицам для обработки по договору поручения, с соблюдением условий конфиденциальности и требований к\n\t\t\tпоручению обработки персональных данных, предусмотренные Федеральным законом РФ от 27.07.2006 г. № 152-ФЗ «О\n\t\t\tперсональных данных».</span>\n\t</p>\n\t<p>\n\t\t<span>6.9. Оператор осуществляет обработку персональных данных с использованием средств\n\t\t\tавтоматизации и без их использования, выполняя требования к автоматизированной и неавтоматизированной обработке\n\t\t\tперсональных данных, предусмотренные Федеральным законом РФ от 27.07.2006 г. № 152-ФЗ «О персональных данных» и\n\t\t\tпринятыми в соответствии с ним нормативными правовыми актами.</span>\n\t</p>\n\t<p>\n\t\t<span>6.10. В указанных в пункте 3 настоящей Политики целях Оператор вправе совершать\n\t\t\tлюбые действия (операции) или совокупность действий (операций), с использованием средств автоматизации или без\n\t\t\tиспользования таких средств, предусмотренные п. 3 ч. 1 ст. 3 Федерального закона от 27.07.2006 N 152-ФЗ «О\n\t\t\tперсональных данных», включая сбор, запись, систематизацию, накопление, хранение, уточнение (обновление,\n\t\t\tизменение), извлечение, использование, обезличивание, блокирование, удаление, уничтожение, передачу\n\t\t\t(распространение, предоставление, доступ) персональных данных третьим лицам с соблюдением мер, обеспечивающих\n\t\t\tзащиту персональных данных от несанкционированного доступа, в объеме, необходимом для достижения целей данного\n\t\t\tсубъектом персональных данных Согласия.</span>\n\t</p>\n\t<p>\n\t\t<span>6.11. Сроки обработки персональных данных определены с учетом:</span>\n\t</p>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>установленных целей обработки персональных данных;
2</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>сроков действия договоров с субъектами персональных данных и согласий\n\t\t\t\tсубъектов персональных данных на обработку их персональных данных;</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>сроков, определенных Приказом Федерального архивного агентства от 20\n\t\t\t\tдекабря 2019 г. N 236 «Об утверждении Перечня типовых управленческих архивных документов, образующихся в\n\t\t\t\tпроцессе деятельности государственных органов, органов местного самоуправления и организаций, с указанием сроков\n\t\t\t\tих хранения».</span>\n\t\t</p>\n\t</div>\n\t<p>\n\t\t<span>6.12. Срок действия согласия субъекта персональных данных на обработку его\n\t\t\tперсональных данных определяется моментом получения Оператором от субъекта персональных данных письменного\n\t\t\tофициального запроса об отзыве субъектом персональных данных своего согласия на обработку персональных\n\t\t\tданных.</span>\n\t</p>\n\t<p>\n\t\t<span>6.13. Информация, относящаяся к персональным данным, ставшая известной Оператору\n\t\t\tявляется конфиденциальной информацией и охраняется законом.</span>\n\t</p>\n\t<p>\n\t\t<span>6.14. Оператор использует полученную от субъекта персональных данных информацию\n\t\t\tисключительно для целей обработки персональных данных.</span>\n\t</p>\n\t<p>\n\t\t<span>6.15. Договоры Оператора с контрагентами содержат условия конфиденциальности\n\t\t\tпередаваемых и получаемых персональных данных, в том числе с лицами, привлекаемыми для обработки персональных\n\t\t\tданных.</span>\n\t</p>\n\t<p>\n\t\t<strong><span style="font-family:Arial; ">7. ОБРАБОТКА ФАЙЛОВ COOKIE</span></strong>\n\t</p>\n\t<p>\n\t\t<span>7.1. Оператор вправе обрабатывать файлы cookie с использованием средств\n\t\t\tавтоматизации посредством осуществления следующих действий (операций) — сбор, запись, систематизация, накопление,\n\t\t\tхранение, уточнение (обновление, изменение), извлечение, использование, передача (предоставление, доступ),\n\t\t\tобезличивание, блокирование, удаление, уничтожение.</span>\n\t</p>\n\t<p>\n\t\t<span>7.2. Оператор будет обрабатывать файлы cookie со дня акцепта Пользователем настоящей\n\t\t\tПолитики / начала использования Пользователем Сайта и до момента достижения заявленных целей обработки файлов\n\t\t\tcookie или до момента отказа Пользователя от обработки файлов cookie, с учетом сроков действия («сроков жизни»)\n\t\t\tфайлов cookie.</span>\n\t</p>\n\t<p>\n\t\t<span>7.3. Оператор принимает все необходимые технические и организационно-правовые меры в\n\t\t\tцелях обеспечения защиты данных Пользователя (включая файлы cookie) от неправомерного или случайного доступа к\n\t\t\tним, уничтожения, изменения, блокирования, копирования, распространения, а также от иных неправомерных\n\t\t\tдействий.</span>\n\t</p>\n\t<p>\n\t\t<span>7.4. Технические меры безопасности реализованы Оператором с учетом требований\n\t\t\tприменимого законодательства, современного уровня техники, характера обрабатываемой информации и рисков, связанных\n\t\t\tс ее обработкой.</span>\n\t</p>\n\t<p>\n\t\t<strong><span style="font-family:Arial; ">8. ПРАВА СУБЪЕКТОВ ПЕРСОНАЛЬНЫХ ДАННЫХ</span></strong>\n\t</p>\n\t<p>\n\t\t<span>8.1. Субъект персональных данных, принимая решение о предоставлении Оператору своих\n\t\t\tперсональных данных, действует свободно, своей волей и в своем интересе, безусловно выражая свое согласие на их\n\t\t\tобработку.</span>\n\t</p>\n\t<p>\n\t\t<span>8.2. Согласие на обработку персональных данных может быть дано лично субъектом\n\t\t\tперсональных данных как в письменной форме, так и путем внесения персональных данных в поля веб-формы обратной\n\t\t\tсвязи на Сайте.</span>\n\t</p>\n\t<p>\n\t\t<span>8.3. Согласие на обработку персональных данных, полученное путем присоединяя к\n\t\t\tСогласию об обработке персональных данных, размещенном в сети Интернет на Сайте, признается исполненным в простой\n\t\t\tписьменной форме.</span>\n\t</p>\n\t<p>\n\t\t<span>8.4. Субъект персональных данных имеет право на получение у Оператора информации,\n\t\t\tкасающейся обработки его персональных данных, если такое право не ограничено в соответствии с законодательством\n\t\t\tРФ. Субъект персональных данных вправе требовать от Оператора уточнения его персональных данных, их блокирования\n\t\t\tили уничтожения в случае, если персональные данные явÐ
2»ÑÑŽÑ‚ся неполными, устаревшими, неточными, незаконно\n\t\t\tполученными или не являются необходимыми для заявленной цели обработки, а также принимать предусмотренные законом\n\t\t\tмеры по защите своих прав и законных интересов.</span>\n\t</p>\n\t<p>\n\t\t<span>8.5. Субъект персональных данных может получить\n\t\t\tразъяснения по вопросам обработки своих персональных данных (в том числе отозвать свое согласие на обработку\n\t\t\tперсональных данных) следующим образом: субъект персональных данных направляет письменный официальный запрос на\n\t\t\tадрес Оператора: 121357, город Москва, Верейская ул., д. 17, эт 2 пом 213 или на электронный адрес Оператора:\n\t\t</span>[email protected]<span> . в порядке,\n\t\t\tустановленном ст. 14 Федеральным законом РФ от 27.07.2006 г. № 152-ФЗ «О персональных данных». В случае\n\t\t\tнаправления данного запроса Оператору через систему электронного документооборота, он должен быть подписан\n\t\t\tэлектронной подписью в соответствии с законодательством РФ. При этом отправка оригинала документа Почтой России не\n\t\t\tтребуется.</span>\n\t</p>\n\t<p>\n\t\t<strong><span style="font-family:Arial; ">9. ОБЕСПЕЧЕНИЕ БЕЗОПАСНОСТИ ПЕРСОНАЛЬНЫХ ДАННЫХ</span></strong>\n\t</p>\n\t<p>\n\t\t<span>9.1. Оператор принимает необходимые и достаточные организационные и технические меры\n\t\t\tдля защиты персональных данных субъекта от неправомерного/случайного доступа, уничтожения, изменения,\n\t\t\tблокирования, копирования, распространения, а также от иных неправомерных действий с ними третьих лиц, включающие\n\t\t\tв себя: издание локальных актов по вопросам обработки и обеспечения безопасности персональных данных, а также\n\t\t\tлокальных актов, устанавливающих процедуры, направленные на предотвращение и выявление нарушений законодательства\n\t\t\tРФ, устранение последствий таких нарушений; использование средств защиты информации, прошедших процедуру оценки\n\t\t\tсоответствия требованиям законодательства РФ в области обеспечения безопасности информации; обнаружение фактов\n\t\t\tнесанкционированного доступа; установление правил доступа к персональным данным; проведение внутреннего контроля и\n\t\t\tоценки эффективности применяемых мер.</span>\n\t</p>\n\t<p>\n\t\t<span>9.2. Для предотвращения несанкционированного доступа к персональным данным\n\t\t\tОператором реализованы следующие требования к защите персональных данных:</span>\n\t</p>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>назначены лица, ответственные за организацию обработки и обеспечения\n\t\t\t\tбезопасности персональных данных;
2</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>ограничен состав лиц, имеющих доступ к персональным данным;</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>реализовано обеспечение сохранности носителей персональных данных;</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>разграничен доступ субъектов персональных данных к информационным ресурсам\n\t\t\t\tи программно-аппаратным средствам обработки информации;</span>\n\t\t</p>\n\t</div>\n\t<div>\n\t\t<p\n\t\t\tstyle="margin-top:0pt; margin-left:18pt; margin-bottom:0pt; text-indent:-18pt; text-align:justify; line-height:115%; font-size:10.5pt">\n\t\t\t<span style="font-family:Symbol; font-size:10pt"></span><span\n\t\t\t\tstyle="width:13.4pt; font:7pt \'Times New Roman\'; display:inline-block">&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;\n\t\t\t</span><span>организован режим ограниченного доступа в помещения обработки персональных\n\t\t\t\tданных.</span>\n\t\t</p>\n\t</div>\n\t<p>\n\t\t<strong><span style="font-family:Arial; ">10. ЗАКЛЮЧИТЕЛЬНЫЕ ПОЛОЖЕНИЯ</span></strong>\n\t</p>\n\t<p>\n\t\t<span>10.1. Оператор, а также его должностные лица и Работники несут гражданско-правовую,\n\t\t\tадминистративную и иную ответственность за несоблюдение принципов и условий обработки персональных данных\n\t\t\tфизических лиц, а также за разглашение или незаконное использование персональных данных в соответствии с\n\t\t\tзаконодательством Российской Федерации.</span>\n\t</p>\n\t<p>\n\t\t<span>10.2. Политика является общедоступной и подлежит размещению на официальном Сайте\n\t\t\tОператора или иным образом обеспечивается неограниченный доступ к настоящему документу.</span>\n\t</p>\n\t<p>\n\t\t<span>10.3. Оператор имеет право вносить изменения в Политику. Положения Политики подлежат\n\t\t\tактуализации в случае изменения законодательства Российской Федерации о персональных данных. Новая редакция\n\t\t\tПолитики вступает в силу с момента ее размещения на Сайте, если иное не предусмотрено новой редакцией Политики.\n\t\t\tДействующая редакция постоянно доступна на странице по адресу: ecomilk.ru.</span>\n\t</p>\n\t<p>\n\t\t<span>10.4. К настоящей Политике и отношениям между Субъектом ПДн и Оператором,\n\t\t\tвозникающим в связи с применением Политики, подлежит применению право Российской Федерации.</span>\n\t</p>\n\t<p>\n\t\t<span>
210.5. Политика является собственностью ООО «Экомилк».</span>\n\t</p>\n\t<p>\n\t\t<span>10.6. Оператор вправе вносить изменения в Политику без уведомления субъектов\n\t\t\tперсональных данных, в частности Пользователей.</span>\n\t</p>\n\t<p>\n\t\t<span>10.7. Политика действует бессрочно до ее замены новой редакцией.</span>\n\t</p>\n</div>\n  </div>\n\t\t\t</main>\n\n      \n<footer class="footer">\n  <div class="footer__body">\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>
2\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n\n      \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n\t\t</div>\n\t</body>\n</html>\n'},5656:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n  <head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>
2\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n  <body>\n    \n\t\t<div class="page-layout page-layout_default">\n                  \n\n\n\n<header\n  class="header header_theme_transparent js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n      \n\n\t\t\t<main class="page-layout__page">\n          <div class="page page-product-detail">\n    \n <div class="product-detail js-product-detail">\n   \n\n\n\n<ul\n  class="breadcrumbs breadcrumbs_light"\n  >\n  <li class="breadcrumbs__item"><a\n            href="main.html"\n            class="breadcrumbs__link breadcrumbs__link_type_home"\n          ><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-home"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-home" /></svg></a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="products.html"\n            class="breadcrumbs__link"\n          >Продукция</a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="category.html"\n            class="breadcrumbs__link"\n          >Кефир</a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="prodcts-detail.html"\n            class="breadcrumbs__link breadcrumbs__link_type_current"\n          >Кефир Экомилк</a></li></ul>\n\n   <div class="product-detail__card product-detail-card">\n     <h1 class="product-detail-card__name">Кефир Экомилк</h1>\n\n     <div class="product-detail-card__picture">\n       <img\n         class="js-product-image"\n         src="/assets/images/product-detail/product-detail-1.webp"\n         alt="Изображение продукта"\n       />\n     </div>\n\n     <div class="product-detail-card__properties">\n                \n\n  \n<div\n  class="product-property product-property_size_xs product-detail-card__properties-award"\n        >\n  <strong>Роскачество</strong>\n  <span>2024</span>\n</div>\n       \n       <div class="product-detail-card__properties-list js-product-props">\n                    \n\n\n<div\n  class="product-property "\n  >\n  <strong>1%</strong>\n  <span>жирности</span>\n</div>\n                    \n\n\n<div\n  class="product-property "\n  >\n  <strong>955</strong>\n  <span>мл, объем</span>\n</div>\n                    \n\n\n<div\n  class="product-property "\n  >\n  <strong>Гост</strong>\n  <span>по стандартам</span>\n</div>\n                </div>\n     </div>\n\n     \n\n  \n<div\n  class="product-nutrients product-detail-card__nutrients"\n        >\n      <div class="product-nutrients__group">\n      <div class="product-nutrients__title">Пищевая ценность на 100 гр продукта</div>\n      <div class="product-nutrients__props">\n                  <div class="product-nutrients__property">\n            <span class="product-nutrients__property-name">Белки</span>\n            <div class="product-nutrients__property-value">0,6 г</div>\n          </div>\n                  <div class="product-nutrients__property">\n            <span class="product-nutrients__property-name">Жиры</span>\n            <div class="product-nutrients__property-value">82,5 г</div>\n          </div>\n                  <div class="product-nutrients__property">\n            <span class="product-nutrients__property-name">Углеводы</span>\n            <div class="product-nutrients__property-value">0,8 г</div>\n          </div>\n                  <div class="product-nutrients__property">\n            <span class="product-nutrients__property-name">Ккал</span>\n            <div class="product-nutrients__property-value">748</div>\n          </div>\n              </div>\n    </div>\n      <div class="product-nutrients__group">\n      <div class="product-nutrients__title">Условия хранения</div>\n      <div class="product-nutrients__props">\n                  <div class="product-nutrients__property">
2\n            <span class="product-nutrients__property-name">180 суток</span>\n            <div class="product-nutrients__property-value">16±2°C</div>\n          </div>\n                  <div class="product-nutrients__property">\n            <span class="product-nutrients__property-name">120 суток</span>\n            <div class="product-nutrients__property-value">6±2°C</div>\n          </div>\n                  <div class="product-nutrients__property">\n            <span class="product-nutrients__property-name">60 суток</span>\n            <div class="product-nutrients__property-value">3±2°C</div>\n          </div>\n              </div>\n    </div>\n  </div>\n\n     <div class="product-detail-card__text">\n       Полезный кисломолочный продукт, приготовленный из&nbsp;натуральных ингредиентов. Благодаря молочнокислым бактериям, он&nbsp;благотворно влияет на&nbsp;микрофлору кишечника и&nbsp;работу органов пищеварения, хорошо очищает организм от&nbsp;шлаков и&nbsp;токсинов, регулирует обмен веществ и&nbsp;способствует похудению.\n     </div>\n\n     <div class="product-detail-card__offers">\n                <button\n           data-index="0"\n           class="product-detail-card__offers-item js-product-offer isActive"\n           type="button"\n         >\n           <span class="product-detail-card__offers-item-picture">\n             <img src="/assets/images/product-detail/product-detail-1.webp" alt="Изображение продукта">\n           </span>\n           <span class="product-detail-card__offers-item-name">955 мл 1%</span>\n         </button>\n                <button\n           data-index="1"\n           class="product-detail-card__offers-item js-product-offer "\n           type="button"\n         >\n           <span class="product-detail-card__offers-item-picture">\n             <img src="/assets/images/product-detail/product-detail-2.webp" alt="Изображение продукта">\n           </span>\n           <span class="product-detail-card__offers-item-name">944 мл 3.2%</span>\n         </button>\n                <button\n           data-index="2"\n           class="product-detail-card__offers-item js-product-offer "\n           type="button"\n         >\n           <span class="product-detail-card__offers-item-picture">\n             <img src="/assets/images/product-detail/product-detail-1.webp" alt="Изображение продукта">\n           </span>\n           <span class="product-detail-card__offers-item-name">1000 мл 5%</span>\n         </button>\n                <button\n           data-index="3"\n           class="product-detail-card__offers-item js-product-offer "\n           type="button"\n         >\n           <span class="product-detail-card__offers-item-picture">\n             <img src="/assets/images/product-detail/product-detail-2.webp" alt="Изображение продукта">\n           </span>\n           <span class="product-detail-card__offers-item-name">1200 мл 5%</span>\n         </button>\n            </div>\n   </div>\n </div>\n    \n\n\n<section\n  class="where-to-buy where-to-buy_type_promo"\n\t>\n    <h2 class="where-to-buy__title">\n    Где купить\n  </h2>\n\n  <div class="where-to-buy__content">\n    <div class="where-to-buy__text">\n      <p>\n        С&nbsp;проверенными продуктами готовить одно удовольствие.\n        Они не&nbsp;подведут, они гарантируют результат.\n        Именно поэтому они вдохновляют на&nbsp;новые кулинарные свершения.\n      </p>\n    </div>\n\n    \n\n\n  \n<div\n  class="partners  where-to-buy__partners"\n        >\n  <div class="partners__list">\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n      </div>\n  <div class="partners__gradient"></div>\n</div>\n\n    <div class="where-to-buy__image">\n      <img src="/assets/images/partners/where-to-buy-bg.webp" alt="">\n    </div>\n  </div>\n</section>\n    \n\n\n\n<section\n  class="products-carousel js-products-carousel "\n  >\n  <h2 class="products-carousel__title">\n    Другие товары\n  </h2>\n\n  <div class="products-carousel__slider swiper js-products-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">
2\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_low-in-calories product-card__promo-label"\n        >\n  Мало калорий\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-1.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творог десертный клубника 5%</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_hit product-card__promo-label"\n        >\n  Хит\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-2.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Сыр греческий Fetica</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          275 г\n        </div>\n              <div class="\n        product-card__weight\n              ">\n          400 г\n        </div>\n          </div>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_new product-card__promo-label"\n        >\n  Новинка\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-3.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творожная масса Ваниль</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-4.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Йогурт с кленовым сиропом <br>и грецким орехом 4,2%</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          130 г\n        </div>\n          </div>\n  </div>\n</a>\n        </div>\n          </div>\n  </div>\n\n  <div class="products-carousel__bottom">\n    <div class="products-carousel__slider-controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  js-products-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   js-products-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    <div\n      class="products-carousel__slider-pagination swiper-pagination js-products-slider-pagination"\n    ></div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  products-carousel__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</section>\n    \n\n\n\n<section\n  class="recipes-promo js-recipes-promo"\n  >\n  <div class="recipes-promo__info">\n    <h2 class="recipes-promo__title">Авторские рецепты</h2>\n    <p>\n      Делимся с вами авторскими кулинарными\n      рецептами простых домашних блюд,\n      Ð
2ºÐ¾Ñ‚орые будут радовать вашу семью\n      и гостей на завтрак, обед или ужин!\n    </p>\n  </div>\n\n  <div class="recipes-promo__slider swiper js-recipes-slider">\n    <div class="swiper-wrapper">\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Котлеты из индейки\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="cutlets" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-1.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#cutlets) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-1" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-1) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-2" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-2) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-3" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-3) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-4" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-4) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="recipes-promo__bottom">
2\n    <div class="recipes-promo__slider-controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  js-recipes-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   js-recipes-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  recipes-promo__button"\n  \n\t                href="recipes.html"\n      >\n\n      <span class="button__text">Открыть все</span>\n  \n</a>\n  </div>\n</section>\n  </div>\n\t\t\t</main>\n\n      \n<footer class="footer">\n  <div class="footer__body">\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">
2\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n\n      \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n\t\t</div>\n\t</body>\n</html>\n'},7771:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n  <head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>
2\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n  <body>\n    \n\t\t<div class="page-layout page-layout_default">\n                  \n\n\n\n<header\n  class="header  js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons  header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n      \n\n\t\t\t<main class="page-layout__page">\n          <div class="page page-recipe-detail">\n    \n\n\n\n<ul\n  class="breadcrumbs "\n  >\n  <li class="breadcrumbs__item"><a\n            href="main.html"\n            class="breadcrumbs__link breadcrumbs__link_type_home"\n          ><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-home"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-home" /></svg></a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="recipes.html"\n            class="breadcrumbs__link"\n          >Новости</a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="recipe-detail.html"\n            class="breadcrumbs__link breadcrumbs__link_type_current"\n          >Котлеты из индейки</a></li></ul>\n\n    \n\n\n<div\n  class="post-header post-header_type_promo"\n  >\n  <div class="post-header__top">\n    <h1 class="post-header__title">Котлеты из&nbsp;индейки</h1>\n\n          <div class="post-header__text">\n        <p>Делимся с&nbsp;вами авторскими кулинарными рецептами простых домашних блюд, которые будут радовать вашу семью и&nbsp;гостей на&nbsp;завтрак, обед или ужин!</p>\n      </div>\n      </div>\n\n  \n    <div class="post-header__options">\n          \n\n\n  \n<div\n  class="option-icon  option-icon_theme_white post-header__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon  option-icon_theme_white post-header__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n  \n      <svg class="post-header__image" viewBox="0 0 1212 787" xmlns="http://www.w3.org/2000/svg">\n      <defs>\n        <pattern id="post-header-image" width="100%" height="100%" patternUnits="userSpaceOnUse">\n          <image href="/assets/images/recipe-detail/recipe-detail-1.png" width="100%" />\n        </pattern>\n      </defs>\n      <path fill="url(#post-header-image)" d="M408.707 66.6845C365.024 65.0223 345.467 53.2597 303.493 47.5488C292.506 46.0539 286.655 44.4419 275.211 44.0312C254.807 43.2989 242.319 45.2062 220.792 50.0336C193.123 56.2384 177.112 62.6137 150.643 76.0088C126.739 88.1058 114.067 97.0352 92.5983 113.152C75.0543 126.322 64.4297 133.563 50.0759 149.369C34.5579 166.456 27.5024 177.476 18.3697 196.677C8.68319 217.043 5.55635 229.172 3.69787 249.297C1.84424 269.369 2.8826 280.683 8.94525 298.177C14.9405 315.477 22.3189 323.189 33.888 337.156C43.3042 348.523 49.7743 354.013 60.9596 363.964C73.0351 374.707 80.7707 379.865 93.6552 389.876C105.841 399.344 115.296 402.422 125.124 413.871C131.521 421.323 134.445 426.073 138.618 434.957C143.131 444.567 145.289 450.315 146.773 461.262C148.502 474.018 145.69 482.214 145.192 495.597C144.486 514.592 139.758 526.663 143.998 544.096C148.828 563.953 157.419 572.776 171.33 587.062L171.803 587.548C185.075 601.179 194.201 607.844 212.576 616.397C227.491 623.338 237.477 625.127 254.313 629.317L256.225 629.794C273.19 634.02 283.38 636.559 302.206 638.299C322.353 640.162 334.49 639.127 355.561 638.382C385.014 637.34 401.972 635.093 431.944 631.834C455.159 629.31 468.719 625.272 491.578 624.296C511.879 623.429 522.979 624.15 542.295 62
26.067C566.245 628.443 580.156 629.595 601.313 636.936C617.516 642.558 625.646 647.17 639.408 655.79C653.234 664.448 661.041 669.522 671.695 681.062C683.032 693.342 683.914 704.068 694.593 716.846C705.067 729.378 711.489 736.226 725.468 745.724C738.237 754.399 746.189 758.72 761.867 763.862C782.276 770.556 795.728 771.58 819.249 772.176C844.038 772.804 858.794 772.278 884.855 766.22C912.424 759.812 927.864 751.944 954.595 739.606C982.253 726.84 998.762 720.084 1023.42 701.871C1046.12 685.097 1057.29 673.418 1074.98 652.664C1098.04 625.611 1105.56 608.011 1121.78 578.582C1145.92 534.809 1170.78 465.795 1172.96 459.705C1173.07 459.384 1173.18 459.124 1173.33 458.815C1175.38 454.426 1191.45 419.504 1194.13 397.191C1196.89 374.228 1195.58 361.222 1188.25 341.511C1182.3 325.513 1177.41 316.83 1164.94 305.088C1154.28 295.056 1146.47 290.81 1132.06 284.699C1112.17 276.266 1097.57 276.631 1074.8 272.704C1048.86 268.229 1032.03 270.091 1007.11 263.781C984.544 258.066 971.906 254.198 953.146 243.374C937.795 234.516 927.795 230.018 918.344 216.108C908.084 201.007 909.695 188.421 906.123 169.889C902.126 149.151 904.78 135.75 899.772 115.411L899.582 114.639C894.563 94.2501 891.587 82.1605 879.944 65.0536C869.638 49.9113 862.108 42.2234 846.207 31.7026C826.293 18.5266 811.749 14.2374 785.862 9.07351C760.087 3.93208 743.748 4.39534 715.411 5.52026C687.268 6.63746 670.943 7.84092 641.952 14.6999C605.277 23.3768 585.783 39.7111 549.122 49.7848C524.737 56.4853 510.921 59.3145 486.726 62.693C455.691 67.0266 438.333 67.8117 408.707 66.6845Z"/>\n    </svg>\n  </div>\n\n    \n\n<section class="recipe-detail page-content">\n  <div class="recipe-detail__content">\n    <h3>О блюде</h3>\n\n    <div class="recipe-detail__text">\n      <p>\n        Чечевичные оладьи&nbsp;&mdash; оригинальное блюдо для вегетарианского или постного меню или гарнир к&nbsp;блюдам из&nbsp;мяса, птицы или рыбы. Неная желтая чечевица дарит яркий цвет, делает оладьи сытными и&nbsp;полезными, лук придает сочности и&nbsp;пикантности, а&nbsp;зелень добавляет освежающие нотки. В&nbsp;качестве дополнения при подаче очень хорошо подойдет сметана или любимый соус.\n      </p>\n    </div>\n\n    <div class="recipe-detail__ingredients recipe-ingredients">\n      <div class="recipe-ingredients__title">\n        Ингредиенты <span>(11)</span>\n      </div>\n            <div class="recipe-ingredients__option">\n        <div class="recipe-ingredients__option-text">Чечевица желтая</div>\n        <div class="recipe-ingredients__option-text">50 гр.</div>\n      </div>\n            <div class="recipe-ingredients__option">\n        <div class="recipe-ingredients__option-text">Мука пшеничная</div>\n        <div class="recipe-ingredients__option-text">300 мл.</div>\n      </div>\n            <div class="recipe-ingredients__option">\n        <div class="recipe-ingredients__option-text">Петрушка (свежая)</div>\n        <div class="recipe-ingredients__option-text">1 веточка</div>\n      </div>\n            <div class="recipe-ingredients__option">\n        <div class="recipe-ingredients__option-text">Сельдерей</div>\n        <div class="recipe-ingredients__option-text">1 стебель</div>\n      </div>\n            <div class="recipe-ingredients__option">\n        <div class="recipe-ingredients__option-text">Чеснок</div>\n        <div class="recipe-ingredients__option-text">1 зубчик</div>\n      </div>\n            <div class="recipe-ingredients__option">\n        <div class="recipe-ingredients__option-text">Яйцо куриное</div>\n        <div class="recipe-ingredients__option-text">1 шт.</div>\n      </div>\n            <div class="recipe-ingredients__option">\n        <div class="recipe-ingredients__option-text">Лук репчатый</div>\n        <div class="recipe-ingredients__option-text">1 шт.</div>\n      </div>\n            <div class="recipe-ingredients__option">\n        <div class="recipe-ingredients__option-text">Соль</div>\n        <div class="recipe-ingredients__option-text">по вкусу</div>\n      </div>\n            <div class="recipe-ingredients__option">\n        <div class="recipe-ingredients__option-text">Сельдерей</div>\n        <div class="recipe-ingredients__option-text">1 стебель</div>\n      </div>\n            <div class="recipe-ingredients__option">\n        <div class="recipe-ingredients__option-text">Чеснок</div>\n        <div class="recipe-ingredients__option-text">1 зубчик</div>\n      </div>\n            <div class="recipe-ingredients__option">\n        <div class="recipe-ingredients__option-text">Соль</div>\n        <div class="recipe-ingredients__option-text">по вкусу</div>\n      </div>\n          </div>\n\n                <div class="recipe-detail-step">\n        <div class="recipe-detail-step__row">\n          <div class="recipe-detail-step__num">\n            Шаг 1 / <span>3</span>\n          </div>\n          <div class="recipe-detail-step__text">В&nbsp;кипящую воду положить чечевицу и&nbsp;варить 15&nbsp;минут, снять с&nbsp;огня, остудить.</div>\n        </div>\n\n        <img class="recipe-detail-step__image" src="/assets/images/recipe-detail/recipe-detail-2.jpg" alt="экомилк">\n      </div>\n            <div class="recipe-detail-step">\n        <div class="recipe-detail-step__row">\n          <div class="recipe-detail-step__num">\n            Шаг 2 / <span>3</span>\n          </div>\n          <div class="recipe-detail-step__text">В&nbsp;блендер поместить зелень, чеснок, лук, чечевицу, соль, перец и&nbsp;все перемешать. Добавить в&nbsp;полученную массу взбитое яйцо, муку, все перемешать.</div>\n        </div>\n\n        <img class="recipe-detail-step__image" src="/assets/images/recipe-detail/recipe-detail-3.jpg" alt="экомилк">\n      </div>\n            <div class="recipe-detail-step">\n        <div class="recipe-detail-step__row">\n          <div class="recipe-detail-step__num">\n            Шаг 3 / <span>3</span>\n          </div>\n          <div class="recipe-detail-step__text">Тесто выливать половником на&nbsp;разогретую с&nbsp;маслом сковороду, обжаривать с&nbsp;двух сторон. Подавать со&nbsp;сметаной или соусом.</div>\n        </div>\n\n        <img class="recipe-detail-step__image" src="/assets/images/recipe-detail/recipe-detail-4.jpg" alt="экомилк">\n      </div>\n          \n          <div class="recipe-detail__video">\n        \n\n\n<div\n  class="video js-video"\n  >\n  <video\n    class="video__player js-player"\n    loop\n    controls\n    preload="auto"\n    poster="/assets/images/recipe-detail/recipe-detail-2.jpg"\n  >\n          <source src="/assets/video/promo/about.mp4" type="video/mp4">\n              <source src="/assets/video/promo/about.webm" type="video/webm">\n      </video>\n\n  <div class="video__screen js-screen">\n    <img\n      class="video__screen-preview"\n      src="/assets/images/recipe-detail/recipe-detail-2.jpg"\n      alt="о нашем производстве"\n      loading="lazy"\n    >\n\n    <button\n      class="video__play-button"\n      type="button"\n    >\n      <img\n        class="video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      >\n    </button>\n  </div>\n</div>\n      </div>\n    \n    \n<div class="sharing">\n\t<div class="sharing__text">Поделиться</div>\n\t\t\t<a class="sharing__link" href="https://vk.com/ecomilkru">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon sharing__link-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-footer-vk" />\n</svg>\n\t\t</a>\n\t</div>\n  </div>\n</section>\n\n    \n\n\n\n<section\n  class="products-carousel js-products-carousel "\n  >\n  <h2 class="products-carousel__title">\n    Вам понадобятся\n  </h2>\n\n  <div class="products-carousel__slider swiper js-products-slider">\n    <div class="swiper-wrapper">\n              <div class="swiper-slide">
2\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_low-in-calories product-card__promo-label"\n        >\n  Мало калорий\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-1.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творог десертный клубника 5%</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_hit product-card__promo-label"\n        >\n  Хит\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-2.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Сыр греческий Fetica</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          275 г\n        </div>\n              <div class="\n        product-card__weight\n              ">\n          400 г\n        </div>\n          </div>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n      \n\n  \n<div\n  class="promo-label promo-label_type_new product-card__promo-label"\n        >\n  Новинка\n</div>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-3.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Творожная масса Ваниль</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          180 г\n        </div>\n          </div>\n  </div>\n</a>\n        </div>\n              <div class="swiper-slide">\n          \n\n\n\n<a\n  class="product-card"\n    href="product-detail.html"\n>\n  \n  <div class="product-card__image">\n\t  <img src="/assets/images/products/products-4.png" alt="">\n  </div>\n\n  <div class="product-card__bottom">\n    <div class="product-card__title">Йогурт с кленовым сиропом <br>и грецким орехом 4,2%</div>\n\n    <div class="product-card__row">\n              <div class="\n        product-card__weight\n        product-card__weight_active      ">\n          130 г\n        </div>\n          </div>\n  </div>\n</a>\n        </div>\n          </div>\n  </div>\n\n  <div class="products-carousel__bottom">\n    <div class="products-carousel__slider-controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  js-products-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   js-products-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    <div\n      class="products-carousel__slider-pagination swiper-pagination js-products-slider-pagination"\n    ></div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  products-carousel__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Перейти в каталог</span>\n  \n</a>\n  </div>\n</section>\n\n    \n\n\n\n<section\n  class="recipes-promo js-recipes-promo"\n  >\n  <div class="recipes-promo__info">\n    <h2 class="recipes-promo__title">Авторские рецепты</h2>\n    <p>\n      Делимся с вами авторскими кулинарными\n      рецептами простых домашних блюд,\n      Ð
2ºÐ¾Ñ‚орые будут радовать вашу семью\n      и гостей на завтрак, обед или ужин!\n    </p>\n  </div>\n\n  <div class="recipes-promo__slider swiper js-recipes-slider">\n    <div class="swiper-wrapper">\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Котлеты из индейки\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="cutlets" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-1.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#cutlets) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-1" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-1) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-2" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-2) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-3" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-3) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n              <div class="recipes-promo__slider-slide swiper-slide">\n          \n\n\n<a\n  class="recipe-card-promo recipe-card-promo_type_small"\n    href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Тарт с лимоном\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="tart-4" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-2.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#tart-4) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n        </div>\n          </div>\n  </div>\n\n  <div class="recipes-promo__bottom">
2\n    <div class="recipes-promo__slider-controls">\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  js-recipes-slider-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n      \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   js-recipes-slider-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n    </div>\n\n    \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_primary  recipes-promo__button"\n  \n\t                href="recipes.html"\n      >\n\n      <span class="button__text">Открыть все</span>\n  \n</a>\n  </div>\n</section>\n  </div>\n\t\t\t</main>\n\n      \n<footer class="footer">\n  <div class="footer__body">\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">
2\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n\n      \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n\t\t</div>\n\t</body>\n</html>\n'},8604:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n  <head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>
2\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n  <body>\n    \n\t\t<div class="page-layout page-layout_default">\n                  \n\n\n\n<header\n  class="header header_theme_transparent js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n      \n\n\t\t\t<main class="page-layout__page">\n          <div class="page page-recipes">\n    \n\n\n<div\n  class="page-header"\n  >\n  \n\n\n  \n<ul\n  class="breadcrumbs breadcrumbs_light page-header__breadcrumbs"\n        >\n  <li class="breadcrumbs__item"><a\n            href="main.html"\n            class="breadcrumbs__link breadcrumbs__link_type_home"\n          ><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-home"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-home" /></svg></a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="recipes.html"\n            class="breadcrumbs__link breadcrumbs__link_type_current"\n          >Рецепты</a></li></ul>\n\n  <h1 class="page-header__title">Рецепты</h1>\n  <div class="page-header__text">\n    <p>Делимся с вами авторскими кулинарными рецептами простых домашних блюд, которые будут радовать вашу семью и гостей на завтрак, обед или ужин!</p>\n  </div>\n\n      <img src="/assets/images/page-header/recipes.webp" alt="" class="page-header__picture">\n  </div>\n\n    \n\n\n\n\n<div\n  class="section-list-carousel js-section-list-carousel"\n  >\n  \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light round-button_reverse  section-list-carousel__prev js-section-list-carousel-prev"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n\n  \n\n\n  \n<a\n  class="section-item section-item_theme_white  isActive section-list-carousel__all"\n  href="#"\n            class="section-list-carousel__all"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-all" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Все товары\n  </div>\n</a>\n\n  <div class="section-list-carousel__slider js-section-list-carousel-slider swiper">\n    <div class="section-list-carousel__slider-wrapper swiper-wrapper">\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-butter" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Масло сливочное\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-milk" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Молоко\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-kefir" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Кефир\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-curd" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Творог\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-sour-creme" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сметана\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-fused-cheese" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сыр плавленный\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-brine-cheese" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сыр рассольный\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-creme-cheese" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сыр творожный\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-yogurt" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Густой йогурт\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-coctail" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Коктейли\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-sour-creme-product" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Сметанный продукт\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-milk" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Масло сливочное\n  </div>\n</a>\n        </div>\n              <div class="section-list-carousel__slide swiper-slide">\n          \n\n\n  \n<a\n  class="section-item section-item_theme_white   section-list-carousel__slide-content"\n  href="#"\n            class="section-list-carousel__slide-content"\n      >\n  <div class="section-item__top">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon section-item__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-recipes-kefir" />\n</svg>\n  </div>\n\n  <div class="section-item__text">\n    Молоко\n  </div>\n</a>\n        </div>\n          </div>\n  </div>\n\n  \n\n\n  \n\n\t\n<button\n\tclass="round-button round-button_theme_light   section-list-carousel__next js-section-list-carousel-next"\n      type="button"\n  \n\t      >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\n</button>\n</div>\n\n    \n\n\n<div\n  class="recipes"\n  >\n  <div class="recipes__list">\n                  \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n      \n\n  \n<div\n  class="video-tag recipe-card__video-tag"\n        >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon video-tag__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-play" />\n</svg>\n  <div class="video-tag__caption">\n    <span class="video-tag__caption-text video-tag__caption-text_desktop">\n      Видео-рецепт\n    </span>\n    <span class="video-tag__caption-text video-tag__caption-text_mobile">\n      Видео-рецепт\n    </span>\n  </div>\n</div>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n</a>\n\n\n                        \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n      \n\n  \n<div\n  class="video-tag recipe-card__video-tag"\n        >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon video-tag__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-play" />\n</svg>\n  <div class="video-tag__caption">\n    <span class="video-tag__caption-text video-tag__caption-text_desktop">\n      Видео-рецепт\n    </span>\n    <span class="video-tag__caption-text video-tag__caption-text_mobile">\n      Видео-рецепт\n    </span>\n  </div>\n</div>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n</a>\n\n\n                        \n\n  \n<a\n  class="recipe-card-promo  recipes__card"\n          href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Котлеты из индейки\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="cutlets" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-1.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#cutlets) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n  </a>\n                        \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n      \n\n  \n<div\n  class="video-tag recipe-card__video-tag"\n        >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon video-tag__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-play" />\n</svg>\n  <div class="video-tag__caption">\n    <span class="video-tag__caption-text video-tag__caption-text_desktop">\n      Видео-рецепт\n    </span>\n    <span class="video-tag__caption-text video-tag__caption-text_mobile">\n      Видео-рецепт\n    </span>\n  </div>\n</div>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">
24 порции</span>\n</div>\n      </div>\n</a>\n\n\n                        \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n</a>\n\n\n                        \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n</a>\n\n\n                        \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n</a>\n\n\n                        \n\n  \n<a\n  class="recipe-card-promo  recipes__card"\n          href="recipe-detail.html"\n>\n  <div class="recipe-card-promo__top">\n    <div class="recipe-card-promo__title">\n      Котлеты из индейки\n    </div>\n\n    <div class="recipe-card-promo__text">\n      Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n    </div>\n  </div>\n\n  <div class="recipe-card-promo__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\
2n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card-promo__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n\n  <svg class="recipe-card-promo__image" viewBox="0 0 592 527" xmlns="http://www.w3.org/2000/svg">\n    <defs>\n      <pattern id="cutlets-2" width="100%" height="100%" patternUnits="userSpaceOnUse">\n        <image href="/assets/images/recipes/slider/slide-1.webp" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" />\n      </pattern>\n    </defs>\n    <path fill=url(#cutlets-2) d="M65.213 79.198C19.665 82.7 1.147 99.208.145 105.212c-1.003 6.003 3.458 23.011 5.506 30.516 2.047 7.505 21.023 47.026 44.047 65.036 22.742 17.789 35.203 18.107 50.484 18.496l.57.014c19.52.5 43.045-14.008 46.048-14.008s5.506 21.012 4.004 35.02c-2.733 25.495-1.502 42.022 2.503 65.535.34 2.001-20.478 17.51-26.028 54.53-6.397 42.673 5.869 78.216 35.538 109.561 23.524 24.853 67.07 41.023 93.598 44.524 3.503.463 15.516 11.507 38.039 12.507 22.524 1.001 36.539-11.568 41.543-12.506 24.026-4.503 75.58-23.013 99.105-51.029 23.524-28.015 36.037-62.034 31.532-96.552-4.506-34.518-27.01-55.031-27.528-59.534-.518-4.502 6.004-31.016 4.002-45.524-2.002-14.508-2.002-54.029 0-56.531 2.002-2.501 3.367 10.918 37.041 13.507 19.52 1.501 29.112-.002 46.547-8.504 6.508-3.173 30.426-22.693 43.547-42.524 15.174-22.934 24.526-55.531 21.022-65.036-3.504-9.505-41.755-25.103-71.576-23.512-18.42.982-29.132 4.096-45.547 12.507-17.017 8.719-38.039 30.015-38.039 30.015s-7.508-15.008-11.012-24.513c-.344-.933 15.636-11.92 22.524-22.513 6.506-10.005 14.014-24.013 16.016-41.021 1.598-13.584 1.092-30.915-9.009-33.019-12.013-2.502-17.724 26.515-23.526 33.019-4.97 5.572-7.318 9.007-14.514 11.005-9.009 2.502-26.027 8.005-30.031 6.504-4.004-1.5-23.525-14.508-39.542-20.511-28.734-10.77-65.07-11.006-92.598-4.002-27.527 7.003-44.045 22.012-48.049 23.512-4.004 1.5-25.026-15.008-37.539-24.513C156.31 16.163 146.8-1.847 137.29.154c-9.51 2-11.743 27.398-6.507 44.525 5.506 18.01 20.521 38.02 25.026 43.024 3.977 4.416 11.512 9.004 11.512 9.004l-11.011 24.014s-45.548-45.025-91.097-41.523Z"/>\n  </svg>\n\n      \n\n  \n<div\n  class="video-tag recipe-card-promo__video-tag"\n        >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon video-tag__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-play" />\n</svg>\n  <div class="video-tag__caption">\n    <span class="video-tag__caption-text video-tag__caption-text_desktop">\n      Видео-рецепт\n    </span>\n    <span class="video-tag__caption-text video-tag__caption-text_mobile">\n      Видео\n    </span>\n  </div>\n</div>\n  </a>\n                        \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">
24 порции</span>\n</div>\n      </div>\n</a>\n\n\n                        \n\n  \n<a\n  class="recipe-card recipes__card"\n          href="recipe-detail.html"\n>\n  \n  <div class="recipe-card__picture">\n    <img class="recipe-card__picture-img" src="/assets/images/recipes/recipe-card.png" alt="">\n  </div>\n\n  <div class="recipe-card__title">\n    Котлеты из индейки\n  </div>\n\n  <div class="recipe-card__text">\n    Вкус, знакомый с детства: сочные и сытные котлетки, которые полюбит вся семья\n  </div>\n\n  <div class="recipe-card__options">\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-clock" />\n</svg>\n    <span class="option-icon__caption">30 минут</span>\n</div>\n          \n\n\n  \n<div\n  class="option-icon   recipe-card__options-item"\n        >\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon option-icon__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-plate" />\n</svg>\n    <span class="option-icon__caption">4 порции</span>\n</div>\n      </div>\n</a>\n\n\n            </div>\n\n  \n\n  \n<div\n  class="pagination  recipes__pagination"\n            >\n\t<div class="pagination__pages">\n\t\t<a href="#" class="pagination__round-link pagination__round-link_prev">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon pagination__icon-arrow"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\t\t</a>\n\n          <a\n        href="#"\n        class="\n          pagination__round-link\n          pagination__round-link_active                            "\n      >\n        1\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                                      "\n      >\n        2\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                    pagination__round-link_disabled                  "\n      >\n        ...\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                              pagination__round-link_hidden        "\n      >\n        5\n      </a>\n    \n\t\t<a href="#" class="pagination__round-link">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon pagination__icon-arrow"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\t\t</a>\n\t</div>\n\n\t<div class="pagination__more">\n\t  \n\n\n  \n\t\n\t\n<a\n\tclass="button button_theme_transparent-primary  pagination__button"\n  \n\t                href="#"\n      >\n\n      <span class="button__text">Показать еще 6</span>\n  \n</a>\n\t</div>\n</div>\n</div>\n  </div>\n\t\t\t</main>\n\n      \n<footer class="footer">\n  <div class="footer__body">\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">
2\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n\n      \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>
2\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n\t\t</div>\n\t</body>\n</html>\n'},3365:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n  <head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n  <body>\n    \n\t\t<div class="page-layout page-layout_default">\n                  \n\n\n\n<header\n  class="header  js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons  header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n      \n\n\t\t\t<main class="page-layout__page">\n          <div class="page page-content">\n    \n\n\n\n<ul\n  class="breadcrumbs "\n  >\n  <li class="breadcrumbs__item"><a\n            href="main.html"\n            class="breadcrumbs__link breadcrumbs__link_type_home"\n          ><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-home"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-home" /></svg></a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="user-agreement.html"\n            class="breadcrumbs__link breadcrumbs__link_type_current"\n          >Пользовательское соглашение</a></li></ul>\n\n    <h1>\n      Пользовательс<wbr/>кое соглашение\n    </h1>\n    <time datetime="2018-07-23">Редакция от 06 февраля 2026</time>\n\n<p>\n\tНастоящее Соглашение является публичной офертой и определяет условия использования материалов и сервисов, размещенных\n\tна сайте в сети Интернет по адресу: ecomilk.ru, посетителями и пользователями данного интернет-сайта (далее - Сайт).\n</p>\n<p>\n\t1. Общие положения\n</p>\n<p>\n\t1.1. Владельцем Сайта, реализующим в полном объеме права по администрированию Сайта, является Общество с ограниченной\n\tответственностью «Экомилк» (ИНН 7731417709, ОГРН 1117746970175, Юридический адрес: 121357, город Москва, Верейская\n\tул., д. 17, эт 2 пом 213). Все взаимоотношения между Владельцем Сайта и Пользователями Сайта регулируются действующим\n\tзаконодательством Российской Федерации и настоящим Соглашением.\n</p>\n<p>\n\t1.2. Владелец Сайта вправе в любое время изменять настоящее Соглашение. Пользователь обязуется самостоятельно и на\n\tрегулярной основе следить за изменениями, вносимыми в Действующую редакцию Соглашения.\n</p>\n<p>\n\t1.3. Сайт создан в целях информирования потребителей об ассортименте Товаров, укрепления имиджа и повышения доверия\n\tпотребителей к Обществу с ограниченной ответственностью «Экомилк».\n</p>\n<p>\n\t2. Права и обязательства пользователя.\n</p>\n<p>\n\t2.1. Пользователем Сайта признается любое лицо, осуществляющее доступ к Сайту посредством сети Интернет.\n</p>\n<p>\n\t2.2. Права и обязанности Пользователя Сайта возникают у лица с момента первого обращения к любому из материалов Сайта\n</p>\n<p>\n\t2.3. Пользователи Сайта вправе свободно знакомиться с информационными материалами, расположенными на Сайте в открытом\n\tдоступе.\n</p>\n<p>\n\t2.4. Пользователь соглашается не предпринимать действий и не оставлять комментарии и записи, которые могут\n\tрассматриваться как нарушающие российское законодательство или нормы международного права, в том числе в сфере\n\tинтеллектуальной собственности, авторских и/или смежных прав, общепринятые нормы морали и нравственности, а также\n\tлюбых действий, которые приводят или могут привести к нарушению Ð
2½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð¹ работы Сайта и сервисов Сайта.\n</p>\n<p>\n\t2.5. Пользователям Сайта предоставляется свободный доступ к информационным материалам, размещенным на Сайте, за\n\tисключением материалов, доступ к которым должен быть ограничен в соответствии с законодательством Российской\n\tФедерации. Пользователи Сайта обязаны воздерживаться от любых действий, способных причинить вред информационному\n\tнаполнению, программному и аппаратному обеспечению Сайта\n</p>\n<p>\n\t2.6. При цитировании материалов Сайта, включая охраняемые авторские произведения, ссылка на Сайт обязательна.\n</p>\n<p>\n\t2.7. Нарушение Пользователем Сайта условий настоящего Соглашения может явиться основанием для временного либо полного\n\tотказа в доступе Пользователя к Сайту, которое принимается Владельцем Сайта. Нарушение Пользователем Сайта авторских\n\tправ Владельца Сайта является основанием для привлечения Пользователя Сайта к ответственности, предусмотренной законом\n</p>\n<p>\n\t2.8. Владелец Сайта не несет ответственности за посещение и использование им внешних ресурсов, ссылки на которые могут\n\tсодержаться на Сайте.\n</p>\n<p>\n\t2.9. Владелец Сайта не несет ответственности и не имеет прямых или косвенных обязательств перед Пользователем в связи\n\tс любыми возможными или возникшими потерями, или убытками, связанными с любым содержанием Сайта, регистрацией\n\tавторских прав и сведениями о такой регистрации, товарами или услугами, доступными на или полученными через внешние\n\tсайты или ресурсы либо иные контакты Пользователя, в которые он вступил, используя размещенную на Сайте информацию или\n\tссылки на внешние ресурсы\n</p>\n<p>\n\t3. Права и обязательства Владельца Сайта\n</p>\n<p>\n\t3.1. Пользователь использует Сайт на свой собственный риск. Сервисы Сайта предоставляются «как есть». Владелец Сайта\n\tне принимает на себя никакой ответственности, в том числе за соответствие сервисов Сайта целям Пользователя\n</p>\n<p>\n\t&#xa0;3.2. Владелец Сайта не гарантирует, что: сервисы Сайта соответствуют/будут соответствовать требованиям\n\tПользователя; сервисы Сайта будут предоставляться непрерывно, быстро, надежно и без ошибок; результаты, которые могут\n\tбыть получены с использованием Сайта, будут точными и Ð
2½Ð°Ð´ÐµÐ¶Ð½Ñ‹Ð¼Ð¸ и могут использоваться для каких-либо целей или в\n\tкаком-либо качестве (например, для установления и/или подтверждения каких-либо фактов); качество какого-либо продукта,\n\tуслуги, информации и пр., полученных с использованием Сайта, будет соответствовать ожиданиям Пользователя.\n</p>\n<p>\n\t3.3. Владелец Сайта не несет ответственности за любые виды убытков, наступившие вследствие использования Пользователем\n\tСайта или отдельных частей/функций Сайта, в том числе, но не ограничиваясь по причинам, связанным с техническими\n\tсбоями аппаратного и программного обеспечения, а также за убытки, возникшие в результате действий Пользователей Сайта.\n\tВладелец Сайта не несет финансовой и правовой ответственности за убытки, возникшие у Пользователей Сайта или третьих\n\tлиц в результате использования Пользователями Сайта размещенных на Сайте любых информационных материалов и\n\tрекомендаций. Используя материал сайта, вы соглашаетесь с тем, что все финансовые и правовые риски несёте сами.\n</p>\n<p>\n\t3.4. При любых обстоятельствах ответственность Владельца Сайта в соответствии со статьей 15 Гражданского кодекса\n\tРоссийской Федерации ограничена 5 000 (пятью тысячами) рублей РФ и возлагается на него при наличии в его действиях\n\tдоказанной документально вины.\n</p>\n<p>\n\t3.5. Владелец Сайта обладает всеми исключительными правами на использование Сайта, по собственному усмотрению в любое\n\tвремя изменяет содержание Сайта, удаляет и добавляет любые материалы, разрешает доступ к Сайту либо ограничивает такой\n\tдоступ, осуществляет иные принадлежащие ему права в отношении Сайта.\n</p>\n<p>\n\t3.6. Владелец Сайта осуществляет администрирование Сайта с целью размещения на Сайте информации о компании, ее\n\tдеятельности, а также иной информации, которая, по мнению Владельца Сайта, может оказаться полезной Пользователям\n\tСайта.\n</p>\n<p>\n\t4. Информация на сайте\n</p>\n<p>\n\t4.1. Авторские права на информационные материалы (в том числе, но не ограничиваясь перечисленным: изображения,\n\tфотографии, тексты, логотипы, дизайн отдельных блоков Сайта и всего Сайта в целом), размещенные на Сайте, принадлежат\n\tВладельцу Сайта и иным правообладателям, с согласия которых материалы размещены на Сайте. Иные лица не вправе\n\tкаким-либо образом использовать размещенные на Сайте материалы, копировать полностью или частично, распространять,\n\tвидоизменять, воспроизводить указанные материалы без предварительного разрешения Владельца Сайта и (или) иных\n\tправообладателей. Все права на информационные материалы, в том числе на изображения (фотографии), размещенные на\n\tСайте, охраняются в соответствии с национальным и международным правовыми нормами. При использовании любых\n\tинформационных материалов и изображений (фотографий) с Сайта в сети Интернет обязательным условием является указание\n\tна источник материалов – Сайт.\n</p>\n<p>\n\t4.2. Владельцем Сайта принимаются административные, организационные и технические меры по защите детей от информации,\n\tпричиняющей вред их здоровью и развитию.\n</p>\n<p>\n\t5. Иные положения\n</p>\n<p>\n\t5.1. Настоящее Соглашение регулируется и толкуется в соответствии с законодательством Российской Федерации. Ð
2’опросы,\n\tне урегулированные настоящим Соглашением, подлежат разрешению в соответствии с законодательством Российской Федерации.\n\tВсе возможные споры, вытекающие из отношений, регулируемых настоящим Соглашением, разрешаются в порядке, установленном\n\tдействующим законодательством Российской Федерации, по нормам российского права. Везде по тексту настоящего\n\tСоглашения, если явно не указано иное, под термином «законодательство» понимается законодательство Российской\n\tФедерации.\n</p>\n<p>\n\t5.2. Ничто в Соглашении не может пониматься как установление между Пользователем и Владельцем Сайта агентских\n\tотношений, отношений товарищества, отношений по совместной деятельности, отношений личного найма, либо каких-то иных\n\tотношений, прямо не предусмотренных Соглашением.\n</p>\n<p>\n\t5.3. Если по тем или иным причинам одно или несколько положений настоящего Соглашения будут признаны недействительными\n\tили не имеющими юридической силы, это не оказывает влияния на действительность или применимость остальных положений\n\tСоглашения.\n</p>\n<p>\n\t5.4. Бездействие со стороны Владельца Сайта в случае нарушения Пользователем либо иными пользователями положений\n\tСоглашений не лишает Владельца Сайта права предпринять соответствующие действия в защиту своих интересов позднее, а\n\tтакже не означает отказа Владельца Сайта от своих прав в случае совершения в последующем подобных либо сходных\n\tнарушений.\n</p>\n<p>\n\t5.5. Принятие Соглашения является обязательным условием для посещения Сайта: продолжая пользоваться Сайтом,\n\tПользователь выражает согласие с настоящим Соглашением.\n</p>\n<p>\n\t5.6. Владелец Сайта оставляет за собой право вносить изменения в настоящее Соглашение.\n</p>\n<p>\n\t5.7. Владелец Сайта вправе в любое время в одностороннем порядке изменять условия настоящего Соглашения. Такие\n\tизменения вступают в силу с момента размещения новой версии Соглашения на сайте. При несогласии Пользователя с\n\tвнесенными изменениями он обязан отказаться от доступа к Сайту, прекратить использование материалов и сервисов Сайта.\n</p>\n  </div>\n\t\t\t</main>\n\n      \n<footer class="footer">\n  <div class="footer__body">\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>
2\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>
2\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n\n      \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n\t\t</div>\n\t</body>\n</html>\n'},7865:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n  <head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>
2\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n  <body>\n    \n\t\t<div class="page-layout page-layout_brand">\n                  \n\n\n\n<header\n  class="header header_theme_transparent js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n      \n\n\t\t\t<main class="page-layout__page">\n          <div class="page page-where-to-buy">\n    \n\n\n\n<ul\n  class="breadcrumbs breadcrumbs_light"\n  >\n  <li class="breadcrumbs__item"><a\n            href="main.html"\n            class="breadcrumbs__link breadcrumbs__link_type_home"\n          ><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-home"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-home" /></svg></a></li><li class="breadcrumbs__item"><svg\n  aria-hidden="true"\n  class="svg-icon breadcrumbs__icon-arrow"\n\t    \t><use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right-sm" /></svg><a\n            href="where-to-buy.html"\n            class="breadcrumbs__link breadcrumbs__link_type_current"\n          >Где купить</a></li></ul>\n\n    \n\n\n<section\n  class="where-to-buy "\n\t>\n    <h1 class="where-to-buy__title">\n    Где купить\n  </h1>\n\n  <div class="where-to-buy__content">\n    <div class="where-to-buy__text">\n      <p>\n        С&nbsp;проверенными продуктами готовить одно удовольствие.\n        Они не&nbsp;подведут, они гарантируют результат.\n        Именно поэтому они вдохновляют на&nbsp;новые кулинарные свершения.\n      </p>\n    </div>\n\n    \n\n\n  \n<div\n  class="partners partners_primary where-to-buy__partners"\n        >\n  <div class="partners__list">\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/ozon.svg" />\n    </div>\n        <div class="partners__item">\n      <img class="partners__item-logo" src="/assets/images/partners/igooods.svg" />\n    </div>\n      </div>\n  <div class="partners__gradient"></div>\n</div>\n\n    <div class="where-to-buy__image">\n      <img src="/assets/images/partners/where-to-buy-bg.webp" alt="">\n    </div>\n  </div>\n</section>\n  </div>\n\t\t\t</main>\n\n      \n<footer class="footer">\n  <div class="footer__body">
2\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>
2\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n\n      \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n\t\t</div>\n\t</body>\n</html>\n'},1662:e=>{"use strict";e.exports="\n\n\n\n<div\n  class=\"cookie-modal js-cookie-modal\"\n  >\n  <div class=\"cookie-modal__close js-cookie-modal-close\">\n    \n\n\t\n<svg\n  aria-hidden=\"true\"\n  class=\"svg-icon cookie-modal__close-icon\"\n\t    \t>\n  <use xlink:href=\"/assets/images/sprites/sprite.svg#icon-close\" />\n</svg>\n  </div>\n\n  <div class=\"cookie-modal__content\">\n    <h3 class=\"cookie-modal__title\">Мы используем cookie – файлы</h3>\n\n    <p class=\"cookie-modal__text\">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href=\"privacy-policy.html\">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass=\"button button_theme_primary  cookie-modal__button js-cookie-modal-accept\"\n      type=\"button\"\n  \n\t      >
2\n\n      <span class=\"button__text\">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src=\"https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || 'ru';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = '6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: 'Отправить',\n      rules: 'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href=\"privacy-policy.html\">Политикой Конфиденциальности</a>',\n      serverError: 'Упс. Что-то пошло не так, попробуйте позже',\n      placeholder: {\n        name: 'Ваше имя  *',\n        email: 'Электронная почта *',\n        phone: 'Номер телефона *',\n        theme: 'Выберите тему обращения *',\n        message: 'Введите ваше сообщение',\n      },\n      error: {\n        required: 'Поле обязательно для заполнения', // 'This field is required'\n        email: 'Неверный формат адреса электронной почты', // 'Invalid email address format'\n        alpha: 'Поле может содержать только буквы', // 'The field can contain only letters'\n      },\n      infoPanelText: 'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку',\n      infoPanelTitle: 'Обращение <br>по качеству продукции',\n      recapthaText: 'Этот сайт защищен reCAPTCHA, и на него распространяются <a href=\"https://policies.google.com/privacy\">Политика конфиденциальности</a> и <a href=\"https://policies.google.com/terms\">Условия обслуживания</a> Google.',\n      successText: 'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.',\n      successTitle: 'Спасибо,<br>мы получили обращение'\n    },\n    options: [\n      { value: 'quality', caption: 'Обращение по качеству продукции', info: true },\n      { value: 'question', caption: 'Вопрос' },\n      { value: 'gratitude', caption: 'Благодарность' },\n      { value: 'offer', caption: 'Предложение' },\n    ],\n  };\n<\/script>\n"},8176:e=>{"use strict";e.exports='<head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n'},5795:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n  <head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>
2\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n  <body>\n    \n\t\t<div class="page-layout page-layout_brand">\n              \n\n\n\n<header\n  class="header header_theme_transparent js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n      \n\t\t\t<main class="page-layout__page">\n        \t\t\t</main>\n\n      \n<footer class="footer">\n  <div class="footer__body">\n    <div class="footer__corporate">\n      <a class="footer__logo" href="main.html">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n      </a>\n      <div class="footer__copyright">\n        <div class="footer__copyright-top">\n          <a href="privacy-policy.html">Политика конфиденциальности</a>\n        </div>\n        <div class="footer__copyright-top">\n          <a href="user-agreement.html">Пользовательское соглашение</a>\n        </div>\n        <div class="footer__copyright-bottom">\n          © 2024 ООО «Экомилк»\n        </div>\n      </div>\n    </div>\n    <div class="footer__info">\n      <div class="footer__info-block">\n        <div class="footer__title">\n          Центральный офис «Экомилк»\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Москва,&nbsp;ул.&nbsp;Верейская,&nbsp;д.&nbsp;17, офис&nbsp;213\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+74967717423">\n          +7 (496) 771 74 23\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ЗАО «Озерецкий молочный комбнат»\n        </div>\n        <div class="footer__address">\n          Московская&nbsp;обл.,&nbsp;Дмитровский&nbsp;р-н, с.&nbsp;Озерецкое,&nbsp;7А\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (903) 589 72 73\n        </a>\n      </div>\n      <div class="footer__info-block">\n        <div class="footer__title">\n          ООО &laquo;Новосибирский молочный комбинат&raquo;\n        </div>\n        <div class="footer__address">\n          г.&nbsp;Новосибирск,&nbsp;ул.&nbsp;Станционная,&nbsp;д.&nbsp;2&nbsp;к.&nbsp;1\n        </div>\n        <a class="footer__mail" href="mailto:[email protected]">\n          [email protected]\n        </a>\n        <a class="footer__phone" href="tel:+79035897273">\n          +7 (383) 209 17 10\n        </a>\n      </div>\n    </div>\n    <div class="footer-socials footer__socials">\n      <div class="footer-socials__text">\n        Присоединяйтесь к нам:\n      </div>\n      <div class="footer-socials__links">\n                  <a class="footer-socials__link" href="https://vk.com/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/vk.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n                  <a class="footer-socials__link" href="https://ok.ru/ecomilkru">\n            <span class="footer-socials__link-icon">\n              <img src="assets/images/footer/ok.svg" alt="social icon" loading="lazy">\n            </span>\n          </a>\n              </div>\n    </div>\n    <div class="footer__bottom">\n      <nav class="footer-navigation footer__bottom-navigation">\n        <ul class="footer-navigation__menu-list">\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="about.html">\n                О компании\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="catalog.html">\n                Продукция\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="news.html">\n                Новости\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="recipes.html">\n                Рецепты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="contacts.html">\n                Контакты\n              </a>\n            </li>\n                      <li class="footer-navigation__menu-item">\n              <a class="footer-navigation__menu-link" href="where-to-buy.html">\n                Где купить?\n              </a>\n            </li>\n                    </ul>\n      </nav>\n      <a class="footer__developer" href="https://artw.ru/" target="_blanc">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon footer__developer-logo"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-artw" />\n</svg>
2\n        <span class="footer__developer-text">\n          Разработка сайта\n        </span>\n      </a>\n    </div>\n  </div>\n</footer>\n\n      \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n\t\t</div>\n\t</body>\n</html>\n'},4913:e=>{"use strict";e.exports='<!DOCTYPE html>\n<html lang="ru">\n<head>\n  <meta charset="utf-8"/>\n  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>\n  <meta http-equiv="x-ua-compatible" content="ie=edge"/>\n\n  <title>Экомилк - официальный сайт производителя</title>\n\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Regular.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Medium.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-DemiBold.woff2" as="font" type="font/woff2" crossorigin>\n  <link rel="preload" href="/assets/fonts/TTFirsNeue/TTFirsNeue-Bold.woff2" as="font" type="font/woff2" crossorigin>\n  <script>
2\n    (function() {\n      var apiKey = window.PageData && window.PageData.apiKey ? window.PageData.apiKey : \'\';\n      if (apiKey) {\n        var script = document.createElement(\'script\');\n        script.src = \'https://api-maps.yandex.ru/v3/?apikey=\' + encodeURIComponent(apiKey) + \'&lang=ru_RU\';\n        script.async = true;\n        document.head.appendChild(script);\n      }\n    })();\n  <\/script>\n</head>\n\n<body>\n  \n  <div id="app" class="page-layout page-layout_fullpage js-full-page page-layout_brand">\n          \n\n\n\n<header\n  class="header header_theme_transparent js-header js-lock-padding"\n  >\n  <div class="mobile-screen header__mobile-screen js-mobile-screen">\n    <div class="mobile-screen__container">\n      <nav class="mobile-screen__menu">\n        <ul class="mobile-screen__menu-list">\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="about.html"\n              >\n                О компании\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="catalog.html"\n              >\n                Продукция\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="news.html"\n              >\n                Новости\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="recipes.html"\n              >\n                Рецепты\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="where-to-buy.html"\n              >\n                Где купить\n              </a>\n            </li>\n                      <li class="mobile-screen__menu-item">\n              <a\n                class="mobile-screen__menu-link js-mobile-menu-link"\n                href="contacts.html"\n              >\n                Контакты\n              </a>\n            </li>\n                  </ul>\n      </nav>\n\n      <a class="mobile-screen__phone" href=tel:+74957717423>\n          +7 495 771-74-23\n      </a>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light mobile-screen__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n    </div>\n  </div>\n\n  <div class="header__container">\n    <div class="header__body">\n      <a href=tel:+74957717423 class="header__phone">\n          +7 495 771-74-23\n      </a>\n\n      <nav class="header-menu header__menu">\n        <ul class="header-menu__list">\n                                    <li class="header-menu__item">\n                <a class="header-menu__link" href="about.html">\n                  О компании\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="catalog.html">\n                  Продукция\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="news.html">\n                  Новости\n                </a>\n              </li>\n                                                <li class="header-menu__item header-menu__item_logo">\n                <a class="header-menu__link" href="main.html">\n                  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon header-menu__logo-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-logo" />\n</svg>\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="recipes.html">\n                  Рецепты\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="where-to-buy.html">\n                  Где купить\n                </a>\n              </li>\n                                                <li class="header-menu__item">\n                <a class="header-menu__link" href="contacts.html">\n                  Контакты\n                </a>\n              </li>\n                              </ul>\n      </nav>\n\n      \n\n\n  \n<div\n  class="language-buttons language-buttons_light header__language-buttons"\n        >\n          <a\n\n      class="language-buttons__button "\n    >
2\n      <span class="language-buttons__button-text">ru</span>\n    </a>\n  </div>\n\n      <div class="header-burger header__burger js-burger">\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n        <span class="header-burger__stripe"></span>\n      </div>\n    </div>\n  </div>\n</header>\n    \n    <main class="page-layout__page">\n          </main>\n\n    \n\n\n\n<div\n  class="cookie-modal js-cookie-modal"\n  >\n  <div class="cookie-modal__close js-cookie-modal-close">\n    \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon cookie-modal__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n  </div>\n\n  <div class="cookie-modal__content">\n    <h3 class="cookie-modal__title">Мы используем cookie – файлы</h3>\n\n    <p class="cookie-modal__text">\n      Они помогают делать сайт удобнее для пользователей.\n      Продолжая работу с сайтом, вы соглашаетесь с обработкой файлов cookie, в соответствии с <a href="privacy-policy.html">Политикой конфиденциальности</a>.\n    </p>\n\n    \n\n\n  \n\n\t\n<button\n\tclass="button button_theme_primary  cookie-modal__button js-cookie-modal-accept"\n      type="button"\n  \n\t      >\n\n      <span class="button__text">Понятно</span>\n  \n</button>\n  </div>\n</div>\n\n<script src="https://www.google.com/recaptcha/api.js?onload=recapOnLoadCallBack&render=6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT" async defer><\/script>\n<script>\n  window.PageData = window.PageData || {};\n  window.PageData.lang = window.PageData?.lang || \'ru\';\n  window.PageData.recaptchaLoaded = false;\n  window.PageData.recaptchaKey = \'6Ldif30qAAAAAJEJfQKSkxzvfJ73Ts9be1Qt3pFT\';\n\n  function recapOnLoadCallBack () {\n    window.PageData.recaptchaLoaded = true;\n  }\n\n  // TODO: Удалить после интеграции с бэком\n  window.PageData.feedbackForm = {\n    translations: {\n      btnText: \'Отправить\',\n      rules: \'Нажимая кнопку “Отправить”, вы соглашаетесь с <a href="privacy-policy.html">Политикой Конфиденциальности</a>\',\n      serverError: \'Упс. Что-то пошло не так, попробуйте позже\',\n      placeholder: {\n        name: \'Ваше имя  *\',\n        email: \'Электронная почта *\',\n        phone: \'Номер телефона *\',\n        theme: \'Выберите тему обращения *\',\n        message: \'Введите ваше сообщение\',\n      },\n      error: {\n        required: \'Поле обязательно для заполнения\', // \'This field is required\'\n        email: \'Неверный формат адреса электронной почты\', // \'Invalid email address format\'\n        alpha: \'Поле может содержать только буквы\', // \'The field can contain only letters\'\n      },\n      infoPanelText: \'Если у вас вопрос по качеству продукта, не выбрасывайте упаковку\',\n      infoPanelTitle: \'Обращение <br>по качеству продукции\',\n      recapthaText: \'Этот сайт защищен reCAPTCHA, и на него распространяются <a href="https://policies.google.com/privacy">Политика конфиденциальности</a> и <a href="https://policies.google.com/terms">Условия обслуживания</a> Google.\',\n      successText: \'Как только наши специалисты с ним ознакомятся,мы свяжемся с вами по указанным контактным данным.\',\n      successTitle: \'Спасибо,<br>мы получили обращение\'\n    },\n    options: [\n      { value: \'quality\', caption: \'Обращение по качеству продукции\', info: true },\n      { value: \'question\', caption: \'Вопрос\' },\n      { value: \'gratitude\', caption: \'Благодарность\' },\n      { value: \'offer\', caption: \'Предложение\' },\n    ],\n  };\n<\/script>\n  </div>\n</body>\n</html>\n'},7920:e=>{"use strict";e.exports='\n\n\n\n<ul\n  class="breadcrumbs "\n  >\n  </ul>\n'},6346:e=>{"use strict";e.exports='\n\n\n  \n\n\n<button\n\tclass="button button_theme_primary "\n      type="button"\n  \n\t>\n\n  \n</button>\n'},2372:e=>{"use strict";e.exports='\n\n\n\n<div\n  class="circle-brand-icon "\n  >\n  <img src="" alt="Иконка" class="circle-brand-icon__picture">\n  <img src="" alt="Бренд" class="circle-brand-icon__text-icon">\n</div>\n'},9136:e=>{"use strict";e.exports='\n\n\n<svg\n  aria-hidden="true"\n  class="svg-icon"\n\t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-" />\n</svg>\n'},5450:e=>{"use strict";e.exports='\n\n\n\n<div\n  class="number-item"\n  >\n  <div class="number-item__top">\n    <span class="number-item__number"></span>\n      </div>\n  </div>\n'},1038:e=>{"use strict";e.exports='\n\n\n\n<div\n  class="option-icon  "\n  >\n    <span class="option-icon__caption"></span>\n</div>\n'},8494:e=>{"use strict";e.exports='\n\n\n<div\n  class="pagination "\n    >\n\t<div class="pagination__pages">\n\t\t<a href="#" class="pagination__round-link pagination__round-link_prev">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon pagination__icon-arrow"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\t\t</a>\n\n          <a\n        href="#"\n        class="\n          pagination__round-link\n          pagination__round-link_active                            "\n      >\n        1\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                                      "\n      >\n        2\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                    pagination__round-link_disabled                  "\n      >\n        ...\n      </a>\n          <a\n        href="#"\n        class="\n          pagination__round-link\n                              pagination__round-link_hidden        "\n      >\n        5\n      </a>\n    \n\t\t<a href="#" class="pagination__round-link">\n      \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon pagination__icon-arrow"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-arrow-right" />\n</svg>\n\t\t</a>\n\t</div>\n\n\t<div class="pagination__more">\n\t  \n\n\n\n\t\n\t\n<a\n\tclass="button button_theme_transparent-primary  pagination__button"\n  \n\t                href="#"\n      >
2\n\n      <span class="button__text">Показать еще 6</span>\n  \n</a>\n\t</div>\n</div>\n'},3280:e=>{"use strict";e.exports='\n\n\n\n<div\n  class="popup popup_type_ordinary"\n  data-popup=""\n  >\n  <div class="popup__wrapper">\n    <div class="popup__content">\n      <button type="button" class="popup__close js-popup-close">\n        \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon popup__close-icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-close" />\n</svg>\n      </button>\n\n          </div>\n  </div>\n</div>\n'},1088:e=>{"use strict";e.exports='\n\n\n<div\n  class="product-property "\n  >\n  <strong></strong>\n  <span></span>\n</div>\n'},7544:e=>{"use strict";e.exports='\n\n\n<div\n  class="promo-label "\n  >\n  \n</div>\n'},8072:e=>{"use strict";e.exports='\n\n\n\n\n\n<button\n\tclass="round-button round-button_theme_white  "\n      type="button"\n  \n\t>\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon round-button__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-" />\n</svg>\n\n</button>\n'},204:e=>{"use strict";e.exports='\n\n\n<div\n  class="switch-box"\n  >\n  <div class="switch-box__highlights js-switch-highlight"></div>\n  </div>\n'},8104:e=>{"use strict";e.exports='\n\n\n<div\n  class="video js-video"\n  >\n  <video\n    class="video__player js-player"\n    loop\n    controls\n    preload="auto"\n    poster=""\n  >\n          </video>\n\n  <div class="video__screen js-screen">\n    <img\n      class="video__screen-preview"\n      src=""\n      alt="о нашем производстве"\n      loading="lazy"\n    >\n\n    <button\n      class="video__play-button"\n      type="button"\n    >\n      <img\n        class="video__play-button-icon"\n        src="/assets/images/promo-video/play.svg"\n        alt="о нашем производстве"\n        loading="lazy"\n      >\n    </button>\n  </div>\n</div>\n'},5056:e=>{"use strict";e.exports='\n\n\n<div\n  class="video-tag"\n  >\n  \n\n\t\n<svg\n  aria-hidden="true"\n  class="svg-icon video-tag__icon"\n\t    \t>\n  <use xlink:href="/assets/images/sprites/sprite.svg#icon-play" />\n</svg>\n  <div class="video-tag__caption">\n    <span class="video-tag__caption-text video-tag__caption-text_desktop">\n      \n    </span>\n    <span class="video-tag__caption-text video-tag__caption-text_mobile">\n      \n    </span>\n  </div>\n</div>\n'},8579:(e,n,t)=>{"use strict";t.d(n,{A:()=>i});var s=t(3703);function i(e){var n=document.querySelectorAll(".".concat(e));n.length&&n.forEach((function(e){new s.A(e,{slidesPerView:"auto",spaceBetween:12,watchOverflow:!0,speed:500,grabCursor:!0,breakpoints:{1024:{spaceBetween:24}}})}))}},8497:(e,n,t)=>{"use strict";t.d(n,{A:()=>r});var s=t(3703),i=t(6405),a=t(6303);
2function r(e){document.querySelectorAll(".".concat(e)).forEach((function(e){var n=e.querySelector('[data-popup-invoker="brands-filter"]');null==n||n.addEventListener("click",(function(){i.z.openPopup("brands-filter",300)}));var t=e.querySelector(".js-popup-close");null==t||t.addEventListener("click",(function(){i.z.closePopup("brands-filter",300)}));var r=e.querySelector(".js-brand-list-carousel-slider"),o=null;function l(){r&&a.BH.matches&&!o&&(o=new s.A(r,{observer:!0,observeParents:!0,observeSlideChildren:!0,slidesPerView:"auto",spaceBetween:12,watchOverflow:!0,speed:500,preloadImages:!1,grabCursor:!0,breakpoints:{1280:{spaceBetween:20}}}))}l(),window.addEventListener("resize",(function(){a.BH.matches?l():o&&(o.destroy(),o=null)}))}))}},897:()=>{},4705:(e,n,t)=>{"use strict";t.d(n,{A:()=>i});var s=t(3703);function i(e){var n=document.querySelector(".".concat(e));if(n){var t=n.querySelector(".js-slider"),i=n.querySelector(".js-scale"),a=n.querySelectorAll("[data-step]"),r=new s.A(t,{slidesPerView:1,spaceBetween:12,speed:500,allowTouchMove:!1});a.forEach((function(e){e.addEventListener("click",(function(n){n.preventDefault(),a.forEach((function(e){return e.classList.remove("isActive")})),e.classList.add("isActive");var t=e.getAttribute("data-step"),s=120*Number.parseInt(t);r.slideTo(Number(t)),i.scrollLeft=s}))}))}}},537:(e,n,t)=>{"use strict";t.d(n,{A:()=>d});var s=t(4289);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function a(){a=function(){return n};var e,n={},t=Object.prototype,s=t.hasOwnProperty,r=Object.defineProperty||function(e,n,t){e[n]=t.value},o="function"==typeof Symbol?Symbol:{},l=o.iterator||"@@iterator",c=o.asyncIterator||"@@asyncIterator",d=o.toStringTag||"@@toStringTag";function u(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{u({},"")}catch(e){u=function(e,n,t){return e[n]=t}}function p(e,n,t,s){var i=n&&n.prototype instanceof b?n:b,a=Object.create(i.prototype),o=new P(s||[]);return r(a,"_invoke",{value:L(e,t,o)}),a}function h(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=p;var m="suspendedStart",v="suspendedYield",g="executing",f="completed",_={};function b(){}function y(){}function w(){}var k={};u(k,l,(function(){return this}));var T=Object.getPrototypeOf,E=T&&T(T(D([])));E&&E!==t&&s.call(E,l)&&(k=E);var x=w.prototype=b.prototype=Object.create(k);function S(e){["next","throw","return"].forEach((function(n){u(e,n,(function(e){return this._invoke(n,e)}))}))}function A(e,n){function t(a,r,o,l){var c=h(e[a],e,r);if("throw"!==c.type){var d=c.arg,u=d.value;return u&&"object"==i(u)&&s.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,o,l)}),(function(e){t("throw",e,o,l)})):n.resolve(u).then((function(e){d.value=e,o(d)}),(function(e){return t("throw",e,o,l)}))}l(c.arg)}var a;r(this,"_invoke",{value:function(e,s){function i(){return new n((function(n,i){t(e,s,n,i)}))}return a=a?a.then(i,i):i()}})}function L(n,t,s){var i=m;return function(a,r){if(i===g)throw Error("Generator is already running");if(i===f){if("throw"===a)throw r;return{value:e,done:!0}}for(s.method=a,s.arg=r;;){var o=s.delegate;if(o){var l=C(o,s);if(l){if(l===_)continue;return l}}if("next"===s.method)s.sent=s._sent=s.arg;else if("throw"===s.method){if(i===m)throw i=f,s.arg;s.dispatchException(s.arg)}else"return"===s.method&&s.abrupt("return",s.arg);i=g;var c=h(n,t,s);if("normal"===c.type){if(i=s.done?f:v,c.arg===_)continue;return{value:c.arg,done:s.done}}"throw"===c.type&&(i=f,s.method="throw",s.arg=c.arg)}}}function C(n,t){var s=t.method,i=n.iterator[s];if(i===e)return t.delegate=null,"throw"===s&&n.iterator.return&&(t.method="return",t.arg=e,C(n,t),"throw"===t.method)||"return"!==s&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+s+"' method")),_;var a=h(i,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,_;var r=a.arg;return r?r.done?(t[n.resultName]=r.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,_):r:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,_)}function R(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function I(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function P(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(R,this),this.reset(!0)}function D(n){if(n||""===n){var t=n[l];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var a=-1,r=function t(){for(;++a<n.length;)if(s.call(n,a))return t.value=n[a],t.done=!1,t;return t.value=e,t.done=!0,t};return r.next=r}}throw new TypeError(i(n)+" is not iterable")}return y.prototype=w,r(x,"constructor",{value:w,configurable:!0}),r(w,"constructor",{value:y,configurable:!0}),y.displayName=u(w,d,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===y||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,w):(e.__proto__=w,u(e,d,"GeneratorFunction")),e.prototype=Object.create(x),e},n.awrap=function(e){return{__await:e}},S(A.prototype),u(A.prototype,c,(function(){return this})),n.AsyncIterator=A,n.async=function(e,t,s,i,a){void 0===a&&(a=Promise);var r=new A(p(e,t,s,i),a);return n.isGeneratorFunction(t)?r:r.next().then((function(e){return e.done?e.value:r.next()}))},S(x),u(x,d,"Generator"),u(x,l,(function(){return this})),u(x,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var s in n)t.push(s);return t.reverse(),function e(){for(;t.length;){var s=t.pop();if(s in n)return e.value=s,e.done=!1,e}return e.done=!0,e}},n.values=D,P.prototype={constructor:P,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEac
2h(I),!n)for(var t in this)"t"===t.charAt(0)&&s.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function i(s,i){return o.type="throw",o.arg=n,t.next=s,i&&(t.method="next",t.arg=e),!!i}for(var a=this.tryEntries.length-1;a>=0;--a){var r=this.tryEntries[a],o=r.completion;if("root"===r.tryLoc)return i("end");if(r.tryLoc<=this.prev){var l=s.call(r,"catchLoc"),c=s.call(r,"finallyLoc");if(l&&c){if(this.prev<r.catchLoc)return i(r.catchLoc,!0);if(this.prev<r.finallyLoc)return i(r.finallyLoc)}else if(l){if(this.prev<r.catchLoc)return i(r.catchLoc,!0)}else{if(!c)throw Error("try statement without catch or finally");if(this.prev<r.finallyLoc)return i(r.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var i=this.tryEntries[t];if(i.tryLoc<=this.prev&&s.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var a=i;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var r=a?a.completion:{};return r.type=e,r.arg=n,a?(this.method="next",this.next=a.finallyLoc,_):this.complete(r)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),_},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),I(t),_}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var s=t.completion;if("throw"===s.type){var i=s.arg;I(t)}return i}}throw Error("illegal catch attempt")},delegateYield:function(n,t,s){return this.delegate={iterator:D(n),resultName:t,nextLoc:s},"next"===this.method&&(this.arg=e),_}},n}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,s)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?r(Object(t),!0).forEach((function(n){l(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):r(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n,t){return(n=function(e){var n=function(e){if("object"!=i(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=i(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(n)?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e,n,t,s,i,a,r){try{var o=e[a](r),l=o.value}catch(e){return void t(e)}o.done?n(l):Promise.resolve(l).then(s,i)}function d(){return u.apply(this,arguments)}function u(){var e;return e=a().mark((function e(){var n,t,i,r,l,c,d,u,p,h,m,v,g,f,_,b,y;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(f=function(e){var n={center:e,zoom:c};v.update({location:o(o({},n),{},{duration:400})})},g=function(e){var n={center:e,zoom:c},t=document.createElement("img");t.src=i,t.onclick=function(){return v.update({location:o(o({},n),{},{duration:400})})};var s=document.createElement("div");return s.appendChild(t),s.style.height="79px",s.style.width="64px",s.style.position="relative",s.style.top="-60px",s.style.left="-24px",new h({coordinates:e,mapFollowsOnDrag:!0},s)},n=document.querySelector(".js-contacts")){e.next=5;break}return e.abrupt("return");case 5:if(t=new s.A(".js-contacts-switch-box"),i=n.getAttribute("data-pin"),r=[37.443703,55.710661],l=[37.3955,56.063273],c=16,n&&t){e.next=12;break}return e.abrupt("return");case 12:return e.next=14,ymaps3.ready;case 14:d=ymaps3,u=d.YMap,p=d.YMapDefaultSchemeLayer,h=d.YMapMarker,m=d.YMapDefaultFeaturesLayer,v=new u(document.getElementById("map-container"),{location:{center:r,zoom:c}},[new p,new m]),_=g(r),b=g(l),v.addChild(_),v.addChild(b),y=n.querySelectorAll(".js-contacts-tab"),t.element.addEventListener("change",(function(e){var t=e.detail;
2y.forEach((function(e){return e.classList.remove("isActive")}));var s=n.querySelector('[data-id="'.concat(t,'"]'));s&&(s.classList.add("isActive"),f("contacts-office"===t?r:l))}));case 22:case"end":return e.stop()}}),e)})),u=function(){var n=this,t=arguments;return new Promise((function(s,i){var a=e.apply(n,t);function r(e){c(a,s,i,r,o,"next",e)}function o(e){c(a,s,i,r,o,"throw",e)}r(void 0)}))},u.apply(this,arguments)}},4865:(e,n,t)=>{"use strict";function s(e){var n=document.querySelector(".".concat(e));if(n)if(document.cookie.includes("ecomilk=cookie%20accepted"))n.remove();else{n.classList.add("isOpen");var t=n.querySelector(".js-cookie-modal-accept");null==t||t.addEventListener("click",(function(){n.classList.remove("isOpen"),setTimeout((function(){n.remove()}),500),document.cookie="".concat(encodeURIComponent("ecomilk"),"=").concat(encodeURIComponent("cookie accepted"),"; max-age=630720000; path=/")}));var s=n.querySelector(".js-cookie-modal-close");null==s||s.addEventListener("click",(function(){n.classList.remove("isOpen")})),document.addEventListener("keydown",(function(e){27===e.which&&n.classList.remove("isOpen")}))}}t.d(n,{A:()=>s})},4805:(e,n,t)=>{"use strict";var s={};t.r(s),t.d(s,{alpha:()=>$c,alpha_dash:()=>Uc,alpha_num:()=>Gc,alpha_spaces:()=>qc,between:()=>Vc,confirmed:()=>Hc,digits:()=>Wc,dimensions:()=>Xc,double:()=>Ld,email:()=>Qc,excluded:()=>sd,ext:()=>id,image:()=>ad,integer:()=>rd,is:()=>od,is_not:()=>ld,length:()=>cd,max:()=>ud,max_value:()=>hd,mimes:()=>md,min:()=>gd,min_value:()=>_d,numeric:()=>wd,oneOf:()=>td,regex:()=>Td,required:()=>Ed,required_if:()=>Sd,size:()=>Ad});var i=Object.freeze({}),a=Array.isArray;function r(e){return null==e}function o(e){return null!=e}function l(e){return!0===e}function c(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function d(e){return"function"==typeof e}function u(e){return null!==e&&"object"==typeof e}var p=Object.prototype.toString;function h(e){return"[object Object]"===p.call(e)}function m(e){var n=parseFloat(String(e));return n>=0&&Math.floor(n)===n&&isFinite(e)}function v(e){return o(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function g(e){return null==e?"":Array.isArray(e)||h(e)&&e.toString===p?JSON.stringify(e,f,2):String(e)}function f(e,n){return n&&n.__v_isRef?n.value:n}function _(e){var n=parseFloat(e);return isNaN(n)?e:n}function b(e,n){for(var t=Object.create(null),s=e.split(","),i=0;i<s.length;i++)t[s[i]]=!0;return n?function(e){return t[e.toLowerCase()]}:function(e){return t[e]}}var y=b("slot,component",!0),w=b("key,ref,slot,slot-scope,is");function k(e,n){var t=e.length;if(t){if(n===e[t-1])return void(e.length=t-1);var s=e.indexOf(n);if(s>-1)return e.splice(s,1)}}var T=Object.prototype.hasOwnProperty;function E(e,n){return T.call(e,n)}function x(e){var n=Object.create(null);return function(t){return n[t]||(n[t]=e(t))}}var S=/-(\w)/g,A=x((function(e){return e.replace(S,(function(e,n){return n?n.toUpperCase():""}))})),L=x((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),C=/\B([A-Z])/g,R=x((function(e){return e.replace(C,"-$1").toLowerCase()})),I=Function.prototype.bind?function(e,n){return e.bind(n)}:function(e,n){function t(t){var s=arguments.length;return s?s>1?e.apply(n,arguments):e.call(n,t):e.call(n)}return t._length=e.length,t};function P(e,n){n=n||0;for(var t=e.length-n,s=new Array(t);t--;)s[t]=e[t+n];return s}function D(e,n){for(var t in n)e[t]=n[t];return e}function O(e){for(var n={},t=0;t<e.length;t++)e[t]&&D(n,e[t]);return n}function M(e,n,t){}var F=function(e,n,t){return!1},N=function(e){return e};function $(e,n){if(e===n)return!0;var t=u(e),s=u(n);if(!t||!s)return!t&&!s&&String(e)===String(n);try{var i=Array.isArray(e),a=Array.isArray(n);if(i&&a)return e.length===n.length&&e.every((function(e,t){return $(e,n[t])}));if(e instanceof Date&&n instanceof Date)return e.getTime()===n.getTime();if(i||a)return!1;var r=Object.keys(e),o=Object.keys(n);return r.length===o.length&&r.every((function(t){return $(e[t],n[t])}))}catch(e){return!1}}function B(e,n){for(var t=0;t<e.length;t++)if($(e[t],n))return t;return-1}function U(e){var n=!1;
2return function(){n||(n=!0,e.apply(this,arguments))}}var j="data-server-rendered",G=["component","directive","filter"],z=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch","renderTracked","renderTriggered"],q={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:F,isReservedAttr:F,isUnknownElement:F,getTagNamespace:M,parsePlatformTagName:N,mustUseProp:F,async:!0,_lifecycleHooks:z},K=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function V(e){var n=(e+"").charCodeAt(0);return 36===n||95===n}function H(e,n,t,s){Object.defineProperty(e,n,{value:t,enumerable:!!s,writable:!0,configurable:!0})}var Y=new RegExp("[^".concat(K.source,".$_\\d]")),W="__proto__"in{},X="undefined"!=typeof window,Q=X&&window.navigator.userAgent.toLowerCase(),J=Q&&/msie|trident/.test(Q),Z=Q&&Q.indexOf("msie 9.0")>0,ee=Q&&Q.indexOf("edge/")>0;Q&&Q.indexOf("android");var ne=Q&&/iphone|ipad|ipod|ios/.test(Q);Q&&/chrome\/\d+/.test(Q),Q&&/phantomjs/.test(Q);var te,se=Q&&Q.match(/firefox\/(\d+)/),ie={}.watch,ae=!1;if(X)try{var re={};Object.defineProperty(re,"passive",{get:function(){ae=!0}}),window.addEventListener("test-passive",null,re)}catch(e){}var oe=function(){return void 0===te&&(te=!X&&void 0!==t.g&&t.g.process&&"server"===t.g.process.env.VUE_ENV),te},le=X&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ce(e){return"function"==typeof e&&/native code/.test(e.toString())}var de,ue="undefined"!=typeof Symbol&&ce(Symbol)&&"undefined"!=typeof Reflect&&ce(Reflect.ownKeys);de="undefined"!=typeof Set&&ce(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var pe=null;function he(e){void 0===e&&(e=null),e||pe&&pe._scope.off(),pe=e,e&&e._scope.on()}var me=function(){function e(e,n,t,s,i,a,r,o){this.tag=e,this.data=n,this.children=t,this.text=s,this.elm=i,this.ns=void 0,this.context=a,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=n&&n.key,this.componentOptions=r,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=o,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(e.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),e}(),ve=function(e){void 0===e&&(e="");var n=new me;return n.text=e,n.isComment=!0,n};function ge(e){return new me(void 0,void 0,void 0,String(e))}function fe(e){var n=new me(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return n.ns=e.ns,n.isStatic=e.isStatic,n.key=e.key,n.isComment=e.isComment,n.fnContext=e.fnContext,n.fnOptions=e.fnOptions,n.fnScopeId=e.fnScopeId,n.asyncMeta=e.asyncMeta,n.isCloned=!0,n}"function"==typeof SuppressedError&&SuppressedError;var _e=0,be=[],ye=function(){for(var e=0;e<be.length;e++){var n=be[e];n.subs=n.subs.filter((function(e){return e})),n._pending=!1}be.length=0},we=function(){function e(){this._pending=!1,this.id=_e++,this.subs=[]}return e.prototype.addSub=function(e){this.subs.push(e)},e.prototype.removeSub=function(e){this.subs[this.subs.indexOf(e)]=null,this._pending||(this._pending=!0,be.push(this))}
vendor: 4,707 bytes, line 2
2,e.prototype.depend=function(n){e.target&&e.target.addDep(this)},e.prototype.notify=function(e){for(var n=this.subs.filter((function(e){return e})),t=0,s=n.length;t<s;t++)n[t].update()},e}();we.target=null;var ke=[];function Te(e){ke.push(e),we.target=e}function Ee(){ke.pop(),we.target=ke[ke.length-1]}var xe=Array.prototype,Se=Object.create(xe);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(e){var n=xe[e];H(Se,e,(function(){for(var t=[],s=0;s<arguments.length;s++)t[s]=arguments[s];var i,a=n.apply(this,t),r=this.__ob__;switch(e){case"push":case"unshift":i=t;break;case"splice":i=t.slice(2)}return i&&r.observeArray(i),r.dep.notify(),a}))}));var Ae=Object.getOwnPropertyNames(Se),Le={},Ce=!0;function Re(e){Ce=e}var Ie={notify:M,depend:M,addSub:M,removeSub:M},Pe=function(){function e(e,n,t){if(void 0===n&&(n=!1),void 0===t&&(t=!1),this.value=e,this.shallow=n,this.mock=t,this.dep=t?Ie:new we,this.vmCount=0,H(e,"__ob__",this),a(e)){if(!t)if(W)e.__proto__=Se;else for(var s=0,i=Ae.length;s<i;s++)H(e,o=Ae[s],Se[o]);n||this.observeArray(e)}else{var r=Object.keys(e);for(s=0;s<r.length;s++){var o;Oe(e,o=r[s],Le,void 0,n,t)}}}return e.prototype.observeArray=function(e){for(var n=0,t=e.length;n<t;n++)De(e[n],!1,this.mock)},e}();function De(e,n,t){return e&&E(e,"__ob__")&&e.__ob__ instanceof Pe?e.__ob__:!Ce||!t&&oe()||!a(e)&&!h(e)||!Object.isExtensible(e)||e.__v_skip||Ue(e)||e instanceof me?void 0:new Pe(e,n,t)}function Oe(e,n,t,s,i,r,o){void 0===o&&(o=!1);var l=new we,c=Object.getOwnPropertyDescriptor(e,n);if(!c||!1!==c.configurable){var d=c&&c.get,u=c&&c.set;d&&!u||t!==Le&&2!==arguments.length||(t=e[n]);var p=i?t&&t.__ob__:De(t,!1,r);return Object.defineProperty(e,n,{enumerable:!0,configurable:!0,get:function(){var n=d?d.call(e):t;return we.target&&(l.depend(),p&&(p.dep.depend(),a(n)&&Ne(n))),Ue(n)&&!i?n.value:n},set:function(n){var s,a,o=d?d.call(e):t;if((s=o)===(a=n)?0===s&&1/s!=1/a:s==s||a==a){if(u)u.call(e,n);else{if(d)return;if(!i&&Ue(o)&&!Ue(n))return void(o.value=n);t=n}p=i?n&&n.__ob__:De(n,!1,r),l.notify()}}}),l}}function Me(e,n,t){if(!Be(e)){var s=e.__ob__;return a(e)&&m(n)?(e.length=Math.max(e.length,n),e.splice(n,1,t),s&&!s.shallow&&s.mock&&De(t,!1,!0),t):n in e&&!(n in Object.prototype)?(e[n]=t,t):e._isVue||s&&s.vmCount?t:s?(Oe(s.value,n,t,void 0,s.shallow,s.mock),s.dep.notify(),t):(e[n]=t,t)}}function Fe(e,n){if(a(e)&&m(n))e.splice(n,1);else{var t=e.__ob__;e._isVue||t&&t.vmCount||Be(e)||E(e,n)&&(delete e[n],t&&t.dep.notify())}}function Ne(e){for(var n=void 0,t=0,s=e.length;t<s;t++)(n=e[t])&&n.__ob__&&n.__ob__.dep.depend(),a(n)&&Ne(n)}function $e(e){return function(e,n){Be(e)||De(e,n,oe())}(e,!0),H(e,"__v_isShallow",!0),e}function Be(e){return!(!e||!e.__v_isReadonly)}function Ue(e){return!(!e||!0!==e.__v_isRef)}function je(e,n,t){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var e=n[t];if(Ue(e))return e.value;var s=e&&e.__ob__;return s&&s.dep.depend(),e},set:function(e){var s=n[t];Ue(s)&&!Ue(e)?s.value=e:n[t]=e}})}var Ge=x((function(e){var n="&"===e.charAt(0),t="~"===(e=n?e.slice(1):e).charAt(0),s="!"===(e=t?e.slice(1):e).charAt(0);return{name:e=s?e.slice(1):e,once:t,capture:s,passive:n}}));function ze(e,n){function t(){var e=t.fns;if(!a(e))return et(e,null,arguments,n,"v-on handler");for(var s=e.slice(),i=0;i<s.length;i++)et(s[i],null,arguments,n,"v-on handler")}return t.fns=e,t}function qe(e,n,t,s,i,a){var o,c,d,u;for(o in e)c=e[o],d=n[o],u=Ge(o),r(c)||(r(d)?(r(c.fns)&&(c=e[o]=ze(c,a)),l(u.once)&&(c=e[o]=i(u.name,c,u.capture)),t(u.name,c,u.capture,u.passive,u.params)):c!==d&&(d.fns=c,e[o]=d));for(o in n)r(e[o])&&s((u=Ge(o)).name,n[o],u.capture)}function Ke(e,n,t){var s;e instanceof me&&(e=e.data.hook||(e.data.hook={}));var i=e[n];function a(){t.apply(this,arguments),k(s.fns,a)}r(i)?s=ze([a]):o(i.fns)&&l(i.merged)?(s=i).fns.push(a):s=ze([i,a]),s.merged=!0,e[n]=s}function Ve(e,n,t,s,i){if(o(n)){if(E(n,t))return e[t]=n[t],i||delete n[t],!0;if(E(n,s))return e[t]=n[s],i||delete n[s],!0}return!1}function He(e){return c(e)?[ge(e)]:a(e)?We(e):void 0}function Ye(e){return o(e)&&o(e.text)&&!1===e.isComment}function We(e,n){var t,s,i,d,u=[];for(t=0;t<e.length;t++)r(s=e[t])||"boolean"==typeof s||(d=u[i=u.length-1],a(s)?s.length>0&&(Ye((s=We(s,"".concat(n||"","_").concat(t)))[0])&&Ye(d)&&(u[i]=ge(d.text+s[0].text),s.shift()),u.push.apply(u,s)):c(s)?Ye(d)?u[i]=ge(d.text+s):""!==s&&u.push(ge(s)):Ye(s)&&Ye(d)?u[i]=ge(d.text+s.text):(l(e._isVList)&&o(s.tag)&&r(s.key)&&o(n)&&(s.key="__vlist".concat(n,"_").concat(t,"__")),u.push(s)));return u}var Xe=1,Qe=2;function Je(e,n,t,s,i,r){return(a(t)||c(t))&&(i=s,s=t,t=void 0),l(r)&&(i=Qe),function(e,n,t,s,i){if(o(t)&&o(t.__ob__))return ve();
vendor: 4,427 bytes, line 2
2if(o(t)&&o(t.is)&&(n=t.is),!n)return ve();var r,l;if(a(s)&&d(s[0])&&((t=t||{}).scopedSlots={default:s[0]},s.length=0),i===Qe?s=He(s):i===Xe&&(s=function(e){for(var n=0;n<e.length;n++)if(a(e[n]))return Array.prototype.concat.apply([],e);return e}(s)),"string"==typeof n){var c=void 0;l=e.$vnode&&e.$vnode.ns||q.getTagNamespace(n),r=q.isReservedTag(n)?new me(q.parsePlatformTagName(n),t,s,void 0,void 0,e):t&&t.pre||!o(c=Vt(e.$options,"components",n))?new me(n,t,s,void 0,void 0,e):Ft(c,t,e,s,n)}else r=Ft(n,t,e,s);return a(r)?r:o(r)?(o(l)&&Ze(r,l),o(t)&&function(e){u(e.style)&&vt(e.style),u(e.class)&&vt(e.class)}(t),r):ve()}(e,n,t,s,i)}function Ze(e,n,t){if(e.ns=n,"foreignObject"===e.tag&&(n=void 0,t=!0),o(e.children))for(var s=0,i=e.children.length;s<i;s++){var a=e.children[s];o(a.tag)&&(r(a.ns)||l(t)&&"svg"!==a.tag)&&Ze(a,n,t)}}function en(e,n){var t,s,i,r,l=null;if(a(e)||"string"==typeof e)for(l=new Array(e.length),t=0,s=e.length;t<s;t++)l[t]=n(e[t],t);else if("number"==typeof e)for(l=new Array(e),t=0;t<e;t++)l[t]=n(t+1,t);else if(u(e))if(ue&&e[Symbol.iterator]){l=[];for(var c=e[Symbol.iterator](),d=c.next();!d.done;)l.push(n(d.value,l.length)),d=c.next()}else for(i=Object.keys(e),l=new Array(i.length),t=0,s=i.length;t<s;t++)r=i[t],l[t]=n(e[r],r,t);return o(l)||(l=[]),l._isVList=!0,l}function nn(e,n,t,s){var i,a=this.$scopedSlots[e];a?(t=t||{},s&&(t=D(D({},s),t)),i=a(t)||(d(n)?n():n)):i=this.$slots[e]||(d(n)?n():n);var r=t&&t.slot;return r?this.$createElement("template",{slot:r},i):i}function tn(e){return Vt(this.$options,"filters",e)||N}function sn(e,n){return a(e)?-1===e.indexOf(n):e!==n}function an(e,n,t,s,i){var a=q.keyCodes[n]||t;return i&&s&&!q.keyCodes[n]?sn(i,s):a?sn(a,e):s?R(s)!==n:void 0===e}function rn(e,n,t,s,i){if(t&&u(t)){a(t)&&(t=O(t));var r=void 0,o=function(a){if("class"===a||"style"===a||w(a))r=e;else{var o=e.attrs&&e.attrs.type;r=s||q.mustUseProp(n,o,a)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={})}var l=A(a),c=R(a);l in r||c in r||(r[a]=t[a],i&&((e.on||(e.on={}))["update:".concat(a)]=function(e){t[a]=e}))};for(var l in t)o(l)}return e}function on(e,n){var t=this._staticTrees||(this._staticTrees=[]),s=t[e];return s&&!n||cn(s=t[e]=this.$options.staticRenderFns[e].call(this._renderProxy,this._c,this),"__static__".concat(e),!1),s}function ln(e,n,t){return cn(e,"__once__".concat(n).concat(t?"_".concat(t):""),!0),e}function cn(e,n,t){if(a(e))for(var s=0;s<e.length;s++)e[s]&&"string"!=typeof e[s]&&dn(e[s],"".concat(n,"_").concat(s),t);else dn(e,n,t)}function dn(e,n,t){e.isStatic=!0,e.key=n,e.isOnce=t}function un(e,n){if(n&&h(n)){var t=e.on=e.on?D({},e.on):{};for(var s in n){var i=t[s],a=n[s];t[s]=i?[].concat(i,a):a}}return e}function pn(e,n,t,s){n=n||{$stable:!t};for(var i=0;i<e.length;i++){var r=e[i];a(r)?pn(r,n,t):r&&(r.proxy&&(r.fn.proxy=!0),n[r.key]=r.fn)}return s&&(n.$key=s),n}function hn(e,n){for(var t=0;t<n.length;t+=2){var s=n[t];"string"==typeof s&&s&&(e[n[t]]=n[t+1])}return e}function mn(e,n){return"string"==typeof e?n+e:e}function vn(e){e._o=ln,e._n=_,e._s=g,e._l=en,e._t=nn,e._q=$,e._i=B,e._m=on,e._f=tn,e._k=an,e._b=rn,e._v=ge,e._e=ve,e._u=pn,e._g=un,e._d=hn,e._p=mn}function gn(e,n){if(!e||!e.length)return{};for(var t={},s=0,i=e.length;s<i;s++){var a=e[s],r=a.data;if(r&&r.attrs&&r.attrs.slot&&delete r.attrs.slot,a.context!==n&&a.fnContext!==n||!r||null==r.slot)(t.default||(t.default=[])).push(a);else{var o=r.slot,l=t[o]||(t[o]=[]);"template"===a.tag?l.push.apply(l,a.children||[]):l.push(a)}}for(var c in t)t[c].every(fn)&&delete t[c];return t}function fn(e){return e.isComment&&!e.asyncFactory||" "===e.text}function _n(e){return e.isComment&&e.asyncFactory}function bn(e,n,t,s){var a,r=Object.keys(t).length>0,o=n?!!n.$stable:!r,l=n&&n.$key;if(n){if(n._normalized)return n._normalized;if(o&&s&&s!==i&&l===s.$key&&!r&&!s.$hasNormal)return s;for(var c in a={},n)n[c]&&"$"!==c[0]&&(a[c]=yn(e,t,c,n[c]))}else a={};for(var d in t)d in a||(a[d]=wn(t,d));return n&&Object.isExtensible(n)&&(n._normalized=a),H(a,"$stable",o),H(a,"$key",l),H(a,"$hasNormal",r),a}function yn(e,n,t,s){var i=function(){var n=pe;he(e);var t=arguments.length?s.apply(null,arguments):s({}),i=(t=t&&"object"==typeof t&&!a(t)?[t]:He(t))&&t[0];return he(n),t&&(!i||1===t.length&&i.isComment&&!_n(i))?void 0:t};return s.proxy&&Object.defineProperty(n,t,{get:i,enumerable:!0,configurable:!0}),i}function wn(e,n){return function(){return e[n]}}function kn(e,n,t,s,i){var a=!1;
vendor: 7,257 bytes, line 2
2for(var r in n)r in e?n[r]!==t[r]&&(a=!0):(a=!0,Tn(e,r,s,i));for(var r in e)r in n||(a=!0,delete e[r]);return a}function Tn(e,n,t,s){Object.defineProperty(e,n,{enumerable:!0,configurable:!0,get:function(){return t[s][n]}})}function En(e,n){for(var t in n)e[t]=n[t];for(var t in e)t in n||delete e[t]}var xn,Sn,An=null;function Ln(e,n){return(e.__esModule||ue&&"Module"===e[Symbol.toStringTag])&&(e=e.default),u(e)?n.extend(e):e}function Cn(e){if(a(e))for(var n=0;n<e.length;n++){var t=e[n];if(o(t)&&(o(t.componentOptions)||_n(t)))return t}}function Rn(e,n){xn.$on(e,n)}function In(e,n){xn.$off(e,n)}function Pn(e,n){var t=xn;return function s(){null!==n.apply(null,arguments)&&t.$off(e,s)}}function Dn(e,n,t){xn=e,qe(n,t||{},Rn,In,Pn,e),xn=void 0}var On=function(){function e(e){void 0===e&&(e=!1),this.detached=e,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Sn,!e&&Sn&&(this.index=(Sn.scopes||(Sn.scopes=[])).push(this)-1)}return e.prototype.run=function(e){if(this.active){var n=Sn;try{return Sn=this,e()}finally{Sn=n}}},e.prototype.on=function(){Sn=this},e.prototype.off=function(){Sn=this.parent},e.prototype.stop=function(e){if(this.active){var n=void 0,t=void 0;for(n=0,t=this.effects.length;n<t;n++)this.effects[n].teardown();for(n=0,t=this.cleanups.length;n<t;n++)this.cleanups[n]();if(this.scopes)for(n=0,t=this.scopes.length;n<t;n++)this.scopes[n].stop(!0);if(!this.detached&&this.parent&&!e){var s=this.parent.scopes.pop();s&&s!==this&&(this.parent.scopes[this.index]=s,s.index=this.index)}this.parent=void 0,this.active=!1}},e}(),Mn=null;function Fn(e){var n=Mn;return Mn=e,function(){Mn=n}}function Nn(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function $n(e,n){if(n){if(e._directInactive=!1,Nn(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var t=0;t<e.$children.length;t++)$n(e.$children[t]);Un(e,"activated")}}function Bn(e,n){if(!(n&&(e._directInactive=!0,Nn(e))||e._inactive)){e._inactive=!0;for(var t=0;t<e.$children.length;t++)Bn(e.$children[t]);Un(e,"deactivated")}}function Un(e,n,t,s){void 0===s&&(s=!0),Te();var i=pe,a=Sn;s&&he(e);var r=e.$options[n],o="".concat(n," hook");if(r)for(var l=0,c=r.length;l<c;l++)et(r[l],e,t||null,e,o);e._hasHookEvent&&e.$emit("hook:"+n),s&&(he(i),a&&a.on()),Ee()}var jn=[],Gn=[],zn={},qn=!1,Kn=!1,Vn=0,Hn=0,Yn=Date.now;if(X&&!J){var Wn=window.performance;Wn&&"function"==typeof Wn.now&&Yn()>document.createEvent("Event").timeStamp&&(Yn=function(){return Wn.now()})}var Xn=function(e,n){if(e.post){if(!n.post)return 1}else if(n.post)return-1;return e.id-n.id};function Qn(){var e,n;for(Hn=Yn(),Kn=!0,jn.sort(Xn),Vn=0;Vn<jn.length;Vn++)(e=jn[Vn]).before&&e.before(),n=e.id,zn[n]=null,e.run();var t=Gn.slice(),s=jn.slice();Vn=jn.length=Gn.length=0,zn={},qn=Kn=!1,function(e){for(var n=0;n<e.length;n++)e[n]._inactive=!0,$n(e[n],!0)}(t),function(e){for(var n=e.length;n--;){var t=e[n],s=t.vm;s&&s._watcher===t&&s._isMounted&&!s._isDestroyed&&Un(s,"updated")}}(s),ye(),le&&q.devtools&&le.emit("flush")}var Jn="watcher";function Zn(e,n,t){Te();try{if(n)for(var s=n;s=s.$parent;){var i=s.$options.errorCaptured;if(i)for(var a=0;a<i.length;a++)try{if(!1===i[a].call(s,e,n,t))return}catch(e){nt(e,s,"errorCaptured hook")}}nt(e,n,t)}finally{Ee()}}function et(e,n,t,s,i){var a;try{(a=t?e.apply(n,t):e.call(n))&&!a._isVue&&v(a)&&!a._handled&&(a.catch((function(e){return Zn(e,s,i+" (Promise/async)")})),a._handled=!0)}catch(e){Zn(e,s,i)}return a}function nt(e,n,t){if(q.errorHandler)try{return q.errorHandler.call(null,e,n,t)}catch(n){n!==e&&tt(n)}tt(e)}function tt(e,n,t){if(!X||"undefined"==typeof console)throw e;console.error(e)}"".concat(Jn," callback"),"".concat(Jn," getter"),"".concat(Jn," cleanup");var st,it=!1,at=[],rt=!1;function ot(){rt=!1;var e=at.slice(0);at.length=0;for(var n=0;n<e.length;n++)e[n]()}if("undefined"!=typeof Promise&&ce(Promise)){var lt=Promise.resolve();st=function(){lt.then(ot),ne&&setTimeout(M)},it=!0}else if(J||"undefined"==typeof MutationObserver||!ce(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())st="undefined"!=typeof setImmediate&&ce(setImmediate)?function(){setImmediate(ot)}:function(){setTimeout(ot,0)};else{var ct=1,dt=new MutationObserver(ot),ut=document.createTextNode(String(ct));dt.observe(ut,{characterData:!0}),st=function(){ct=(ct+1)%2,ut.data=String(ct)},it=!0}function pt(e,n){var t;if(at.push((function(){if(e)try{e.call(n)}catch(e){Zn(e,n,"nextTick")}else t&&t(n)})),rt||(rt=!0,st()),!e&&"undefined"!=typeof Promise)return new Promise((function(e){t=e}))}function ht(e){return function(n,t){if(void 0===t&&(t=pe),t)return function(e,n,t){var s=e.$options;s[n]=Gt(s[n],t)}(t,e,n)}}ht("beforeMount"),ht("mounted"),ht("beforeUpdate"),ht("updated"),ht("beforeDestroy"),ht("destroyed"),ht("activated"),ht("deactivated"),ht("serverPrefetch"),ht("renderTracked"),ht("renderTriggered"),ht("errorCaptured");var mt=new de;function vt(e){return gt(e,mt),mt.clear(),e}function gt(e,n){var t,s,i=a(e);if(!(!i&&!u(e)||e.__v_skip||Object.isFrozen(e)||e instanceof me)){if(e.__ob__){var r=e.__ob__.dep.id;if(n.has(r))return;n.add(r)}if(i)for(t=e.length;t--;)gt(e[t],n);else if(Ue(e))gt(e.value,n);else for(t=(s=Object.keys(e)).length;t--;)gt(e[s[t]],n)}}var ft=0,_t=function(){function e(e,n,t,s,i){var a;void 0===(a=Sn&&!Sn._vm?Sn:e?e._scope:void 0)&&(a=Sn),a&&a.active&&a.effects.push(this),(this.vm=e)&&i&&(e._watcher=this),s?(this.deep=!!s.deep,this.user=!!s.user,this.lazy=!!s.lazy,this.sync=!!s.sync,this.before=s.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=t,this.id=++ft,this.active=!0,this.post=!1,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new de,this.newDepIds=new de,this.expression="",d(n)?this.getter=n:(this.getter=function(e){if(!Y.test(e)){var n=e.split(".");return function(e){for(var t=0;t<n.length;t++){if(!e)return;e=e[n[t]]}return e}}}(n),this.getter||(this.getter=M)),this.value=this.lazy?void 0:this.get()}return e.prototype.get=function(){var e;Te(this);var n=this.vm;try{e=this.getter.call(n,n)}catch(e){if(!this.user)throw e;Zn(e,n,'getter for watcher "'.concat(this.expression,'"'))}finally{this.deep&&vt(e),Ee(),this.cleanupDeps()}return e},e.prototype.addDep=function(e){var n=e.id;this.newDepIds.has(n)||(this.newDepIds.add(n),this.newDeps.push(e),this.depIds.has(n)||e.addSub(this))},e.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var n=this.deps[e];this.newDepIds.has(n.id)||n.removeSub(this)}var t=this.depIds;this.depIds=this.newDepIds,this.newDepIds=t,this.newDepIds.clear(),t=this.deps,this.deps=this.newDeps,this.newDeps=t,this.newDeps.length=0},e.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():function(e){var n=e.id;if(null==zn[n]&&(e!==we.target||!e.noRecurse)){if(zn[n]=!0,Kn){for(var t=jn.length-1;t>Vn&&jn[t].id>e.id;)t--;jn.splice(t+1,0,e)}else jn.push(e);qn||(qn=!0,pt(Qn))}}(this)},e.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||u(e)||this.deep){var n=this.value;if(this.value=e,this.user){var t='callback for watcher "'.concat(this.expression,'"');et(this.cb,this.vm,[e,n],this.vm,t)}else this.cb.call(this.vm,e,n)}}},e.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1}
vendor: 5,859 bytes, line 2
2,e.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},e.prototype.teardown=function(){if(this.vm&&!this.vm._isBeingDestroyed&&k(this.vm._scope.effects,this),this.active){for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1,this.onStop&&this.onStop()}},e}(),bt={enumerable:!0,configurable:!0,get:M,set:M};function yt(e,n,t){bt.get=function(){return this[n][t]},bt.set=function(e){this[n][t]=e},Object.defineProperty(e,t,bt)}function wt(e){var n=e.$options;if(n.props&&function(e,n){var t=e.$options.propsData||{},s=e._props=$e({}),i=e.$options._propKeys=[];!e.$parent||Re(!1);var a=function(a){i.push(a);var r=Ht(a,n,t,e);Oe(s,a,r,void 0,!0),a in e||yt(e,"_props",a)};for(var r in n)a(r);Re(!0)}(e,n.props),function(e){var n=e.$options,t=n.setup;if(t){var s=e._setupContext=function(e){return{get attrs(){if(!e._attrsProxy){var n=e._attrsProxy={};H(n,"_v_attr_proxy",!0),kn(n,e.$attrs,i,e,"$attrs")}return e._attrsProxy},get listeners(){return e._listenersProxy||kn(e._listenersProxy={},e.$listeners,i,e,"$listeners"),e._listenersProxy},get slots(){return function(e){return e._slotsProxy||En(e._slotsProxy={},e.$scopedSlots),e._slotsProxy}(e)},emit:I(e.$emit,e),expose:function(n){n&&Object.keys(n).forEach((function(t){return je(e,n,t)}))}}}(e);he(e),Te();var a=et(t,null,[e._props||$e({}),s],e,"setup");if(Ee(),he(),d(a))n.render=a;else if(u(a))if(e._setupState=a,a.__sfc){var r=e._setupProxy={};for(var o in a)"__sfc"!==o&&je(r,a,o)}else for(var o in a)V(o)||je(e,a,o)}}(e),n.methods&&function(e,n){for(var t in e.$options.props,n)e[t]="function"!=typeof n[t]?M:I(n[t],e)}(e,n.methods),n.data)!function(e){var n=e.$options.data;h(n=e._data=d(n)?function(e,n){Te();try{return e.call(n,n)}catch(e){return Zn(e,n,"data()"),{}}finally{Ee()}}(n,e):n||{})||(n={});for(var t=Object.keys(n),s=e.$options.props,i=(e.$options.methods,t.length);i--;){var a=t[i];s&&E(s,a)||V(a)||yt(e,"_data",a)}var r=De(n);r&&r.vmCount++}(e);else{var t=De(e._data={});t&&t.vmCount++}n.computed&&function(e,n){var t=e._computedWatchers=Object.create(null),s=oe();for(var i in n){var a=n[i],r=d(a)?a:a.get;s||(t[i]=new _t(e,r||M,M,kt)),i in e||Tt(e,i,a)}}(e,n.computed),n.watch&&n.watch!==ie&&function(e,n){for(var t in n){var s=n[t];if(a(s))for(var i=0;i<s.length;i++)St(e,t,s[i]);else St(e,t,s)}}(e,n.watch)}var kt={lazy:!0};function Tt(e,n,t){var s=!oe();d(t)?(bt.get=s?Et(n):xt(t),bt.set=M):(bt.get=t.get?s&&!1!==t.cache?Et(n):xt(t.get):M,bt.set=t.set||M),Object.defineProperty(e,n,bt)}function Et(e){return function(){var n=this._computedWatchers&&this._computedWatchers[e];if(n)return n.dirty&&n.evaluate(),we.target&&n.depend(),n.value}}function xt(e){return function(){return e.call(this,this)}}function St(e,n,t,s){return h(t)&&(s=t,t=t.handler),"string"==typeof t&&(t=e[t]),e.$watch(n,t,s)}function At(e,n){if(e){for(var t=Object.create(null),s=ue?Reflect.ownKeys(e):Object.keys(e),i=0;i<s.length;i++){var a=s[i];if("__ob__"!==a){var r=e[a].from;if(r in n._provided)t[a]=n._provided[r];else if("default"in e[a]){var o=e[a].default;t[a]=d(o)?o.call(n):o}}}return t}}var Lt=0;function Ct(e){var n=e.options;if(e.super){var t=Ct(e.super);if(t!==e.superOptions){e.superOptions=t;var s=function(e){var n,t=e.options,s=e.sealedOptions;for(var i in t)t[i]!==s[i]&&(n||(n={}),n[i]=t[i]);return n}(e);s&&D(e.extendOptions,s),(n=e.options=Kt(t,e.extendOptions)).name&&(n.components[n.name]=e)}}return n}function Rt(e,n,t,s,r){var o,c=this,d=r.options;E(s,"_uid")?(o=Object.create(s))._original=s:(o=s,s=s._original);var u=l(d._compiled),p=!u;this.data=e,this.props=n,this.children=t,this.parent=s,this.listeners=e.on||i,this.injections=At(d.inject,s),this.slots=function(){return c.$slots||bn(s,e.scopedSlots,c.$slots=gn(t,s)),c.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return bn(s,e.scopedSlots,this.slots())}}),u&&(this.$options=d,this.$slots=this.slots(),this.$scopedSlots=bn(s,e.scopedSlots,this.$slots)),d._scopeId?this._c=function(e,n,t,i){var r=Je(o,e,n,t,i,p);return r&&!a(r)&&(r.fnScopeId=d._scopeId,r.fnContext=s),r}:this._c=function(e,n,t,s){return Je(o,e,n,t,s,p)}}function It(e,n,t,s,i){var a=fe(e);return a.fnContext=t,a.fnOptions=s,n.slot&&((a.data||(a.data={})).slot=n.slot),a}function Pt(e,n){for(var t in n)e[A(t)]=n[t]}function Dt(e){return e.name||e.__name||e._componentTag}vn(Rt.prototype);var Ot={init:function(e,n){if(e.componentInstance&&!e.componentInstance._isDestroyed&&e.data.keepAlive){var t=e;Ot.prepatch(t,t)}else{var s=e.componentInstance=function(e,n){var t={_isComponent:!0,_parentVnode:e,parent:n},s=e.data.inlineTemplate;return o(s)&&(t.render=s.render,t.staticRenderFns=s.staticRenderFns),new e.componentOptions.Ctor(t)}(e,Mn);s.$mount(n?e.elm:void 0,n)}},prepatch:function(e,n){var t=n.componentOptions;!function(e,n,t,s,a){var r=s.data.scopedSlots,o=e.$scopedSlots,l=!!(r&&!r.$stable||o!==i&&!o.$stable||r&&e.$scopedSlots.$key!==r.$key||!r&&e.$scopedSlots.$key),c=!!(a||e.$options._renderChildren||l),d=e.$vnode;e.$options._parentVnode=s,e.$vnode=s,e._vnode&&(e._vnode.parent=s),e.$options._renderChildren=a;var u=s.data.attrs||i;e._attrsProxy&&kn(e._attrsProxy,u,d.data&&d.data.attrs||i,e,"$attrs")&&(c=!0),e.$attrs=u,t=t||i;var p=e.$options._parentListeners;if(e._listenersProxy&&kn(e._listenersProxy,t,p||i,e,"$listeners"),e.$listeners=e.$options._parentListeners=t,Dn(e,t,p),n&&e.$options.props){Re(!1);for(var h=e._props,m=e.$options._propKeys||[],v=0;v<m.length;v++){var g=m[v],f=e.$options.props;h[g]=Ht(g,f,n,e)}Re(!0),e.$options.propsData=n}c&&(e.$slots=gn(a,s.context),e.$forceUpdate())}(n.componentInstance=e.componentInstance,t.propsData,t.listeners,n,t.children)},insert:function(e){var n,t=e.context,s=e.componentInstance;s._isMounted||(s._isMounted=!0,Un(s,"mounted")),e.data.keepAlive&&(t._isMounted?((n=s)._inactive=!1,Gn.push(n)):$n(s,
vendor: 9,359 bytes, line 2
2!0))},destroy:function(e){var n=e.componentInstance;n._isDestroyed||(e.data.keepAlive?Bn(n,!0):n.$destroy())}},Mt=Object.keys(Ot);function Ft(e,n,t,s,c){if(!r(e)){var d=t.$options._base;if(u(e)&&(e=d.extend(e)),"function"==typeof e){var p;if(r(e.cid)&&(e=function(e,n){if(l(e.error)&&o(e.errorComp))return e.errorComp;if(o(e.resolved))return e.resolved;var t=An;if(t&&o(e.owners)&&-1===e.owners.indexOf(t)&&e.owners.push(t),l(e.loading)&&o(e.loadingComp))return e.loadingComp;if(t&&!o(e.owners)){var s=e.owners=[t],i=!0,a=null,c=null;t.$on("hook:destroyed",(function(){return k(s,t)}));var d=function(e){for(var n=0,t=s.length;n<t;n++)s[n].$forceUpdate();e&&(s.length=0,null!==a&&(clearTimeout(a),a=null),null!==c&&(clearTimeout(c),c=null))},p=U((function(t){e.resolved=Ln(t,n),i?s.length=0:d(!0)})),h=U((function(n){o(e.errorComp)&&(e.error=!0,d(!0))})),m=e(p,h);return u(m)&&(v(m)?r(e.resolved)&&m.then(p,h):v(m.component)&&(m.component.then(p,h),o(m.error)&&(e.errorComp=Ln(m.error,n)),o(m.loading)&&(e.loadingComp=Ln(m.loading,n),0===m.delay?e.loading=!0:a=setTimeout((function(){a=null,r(e.resolved)&&r(e.error)&&(e.loading=!0,d(!1))}),m.delay||200)),o(m.timeout)&&(c=setTimeout((function(){c=null,r(e.resolved)&&h(null)}),m.timeout)))),i=!1,e.loading?e.loadingComp:e.resolved}}(p=e,d),void 0===e))return function(e,n,t,s,i){var a=ve();return a.asyncFactory=e,a.asyncMeta={data:n,context:t,children:s,tag:i},a}(p,n,t,s,c);n=n||{},Ct(e),o(n.model)&&function(e,n){var t=e.model&&e.model.prop||"value",s=e.model&&e.model.event||"input";(n.attrs||(n.attrs={}))[t]=n.model.value;var i=n.on||(n.on={}),r=i[s],l=n.model.callback;o(r)?(a(r)?-1===r.indexOf(l):r!==l)&&(i[s]=[l].concat(r)):i[s]=l}(e.options,n);var h=function(e,n){var t=n.options.props;if(!r(t)){var s={},i=e.attrs,a=e.props;if(o(i)||o(a))for(var l in t){var c=R(l);Ve(s,a,l,c,!0)||Ve(s,i,l,c,!1)}return s}}(n,e);if(l(e.options.functional))return function(e,n,t,s,r){var l=e.options,c={},d=l.props;if(o(d))for(var u in d)c[u]=Ht(u,d,n||i);else o(t.attrs)&&Pt(c,t.attrs),o(t.props)&&Pt(c,t.props);var p=new Rt(t,c,r,s,e),h=l.render.call(null,p._c,p);if(h instanceof me)return It(h,t,p.parent,l);if(a(h)){for(var m=He(h)||[],v=new Array(m.length),g=0;g<m.length;g++)v[g]=It(m[g],t,p.parent,l);return v}}(e,h,n,t,s);var m=n.on;if(n.on=n.nativeOn,l(e.options.abstract)){var g=n.slot;n={},g&&(n.slot=g)}!function(e){for(var n=e.hook||(e.hook={}),t=0;t<Mt.length;t++){var s=Mt[t],i=n[s],a=Ot[s];i===a||i&&i._merged||(n[s]=i?Nt(a,i):a)}}(n);var f=Dt(e.options)||c;return new me("vue-component-".concat(e.cid).concat(f?"-".concat(f):""),n,void 0,void 0,void 0,t,{Ctor:e,propsData:h,listeners:m,tag:c,children:s},p)}}}function Nt(e,n){var t=function(t,s){e(t,s),n(t,s)};return t._merged=!0,t}var $t=M,Bt=q.optionMergeStrategies;function Ut(e,n,t){if(void 0===t&&(t=!0),!n)return e;for(var s,i,a,r=ue?Reflect.ownKeys(n):Object.keys(n),o=0;o<r.length;o++)"__ob__"!==(s=r[o])&&(i=e[s],a=n[s],t&&E(e,s)?i!==a&&h(i)&&h(a)&&Ut(i,a):Me(e,s,a));return e}function jt(e,n,t){return t?function(){var s=d(n)?n.call(t,t):n,i=d(e)?e.call(t,t):e;return s?Ut(s,i):i}:n?e?function(){return Ut(d(n)?n.call(this,this):n,d(e)?e.call(this,this):e)}:n:e}function Gt(e,n){var t=n?e?e.concat(n):a(n)?n:[n]:e;return t?function(e){for(var n=[],t=0;t<e.length;t++)-1===n.indexOf(e[t])&&n.push(e[t]);return n}(t):t}function zt(e,n,t,s){var i=Object.create(e||null);return n?D(i,n):i}Bt.data=function(e,n,t){return t?jt(e,n,t):n&&"function"!=typeof n?e:jt(e,n)},z.forEach((function(e){Bt[e]=Gt})),G.forEach((function(e){Bt[e+"s"]=zt})),Bt.watch=function(e,n,t,s){if(e===ie&&(e=void 0),n===ie&&(n=void 0),!n)return Object.create(e||null);if(!e)return n;var i={};for(var r in D(i,e),n){var o=i[r],l=n[r];o&&!a(o)&&(o=[o]),i[r]=o?o.concat(l):a(l)?l:[l]}return i},Bt.props=Bt.methods=Bt.inject=Bt.computed=function(e,n,t,s){if(!e)return n;var i=Object.create(null);return D(i,e),n&&D(i,n),i},Bt.provide=function(e,n){return e?function(){var t=Object.create(null);return Ut(t,d(e)?e.call(this):e),n&&Ut(t,d(n)?n.call(this):n,!1),t}:n};var qt=function(e,n){return void 0===n?e:n};function Kt(e,n,t){if(d(n)&&(n=n.options),function(e){var n=e.props;if(n){var t,s,i={};if(a(n))for(t=n.length;t--;)"string"==typeof(s=n[t])&&(i[A(s)]={type:null});else if(h(n))for(var r in n)s=n[r],i[A(r)]=h(s)?s:{type:s};e.props=i}}(n),function(e){var n=e.inject;if(n){var t=e.inject={};if(a(n))for(var s=0;s<n.length;s++)t[n[s]]={from:n[s]};else if(h(n))for(var i in n){var r=n[i];t[i]=h(r)?D({from:i},r):{from:r}}}}(n),function(e){var n=e.directives;if(n)for(var t in n){var s=n[t];d(s)&&(n[t]={bind:s,update:s})}}(n),!n._base&&(n.extends&&(e=Kt(e,n.extends,t)),n.mixins))for(var s=0,i=n.mixins.length;s<i;s++)e=Kt(e,n.mixins[s],t);var r,o={};for(r in e)l(r);for(r in n)E(e,r)||l(r);function l(s){var i=Bt[s]||qt;o[s]=i(e[s],n[s],t,s)}return o}function Vt(e,n,t,s){if("string"==typeof t){var i=e[n];if(E(i,t))return i[t];var a=A(t);if(E(i,a))return i[a];var r=L(a);return E(i,r)?i[r]:i[t]||i[a]||i[r]}}function Ht(e,n,t,s){var i=n[e],a=!E(t,e),r=t[e],o=Qt(Boolean,i.type);if(o>-1)if(a&&!E(i,"default"))r=!1;else if(""===r||r===R(e)){var l=Qt(String,i.type);(l<0||o<l)&&(r=!0)}if(void 0===r){r=function(e,n,t){if(E(n,"default")){var s=n.default;return e&&e.$options.propsData&&void 0===e.$options.propsData[t]&&void 0!==e._props[t]?e._props[t]:d(s)&&"Function"!==Wt(n.type)?s.call(e):s}}(s,i,e);var c=Ce;Re(!0),De(r),Re(c)}return r}var Yt=/^\s*function (\w+)/;function Wt(e){var n=e&&e.toString().match(Yt);return n?n[1]:""}function Xt(e,n){return Wt(e)===Wt(n)}function Qt(e,n){if(!a(n))return Xt(n,e)?0:-1;for(var t=0,s=n.length;t<s;t++)if(Xt(n[t],e))return t;return-1}function Jt(e){this._init(e)}function Zt(e){return e&&(Dt(e.Ctor.options)||e.tag)}function es(e,n){return a(e)?e.indexOf(n)>-1:"string"==typeof e?e.split(",").indexOf(n)>-1:(t=e,!("[object RegExp]"!==p.call(t))&&e.test(n));var t}function ns(e,n){var t=e.cache,s=e.keys,i=e._vnode,a=e.$vnode;for(var r in t){var o=t[r];if(o){var l=o.name;l&&!n(l)&&ts(t,r,s,i)}}a.componentOptions.children=void 0}function ts(e,n,t,s){var i=e[n];!i||s&&i.tag===s.tag||i.componentInstance.$destroy(),e[n]=null,k(t,n)}!function(e){e.prototype._init=function(e){var n=this;n._uid=Lt++,n._isVue=!0,n.__v_skip=!0,n._scope=new On(!0),n._scope.parent=void 0,n._scope._vm=!0,e&&e._isComponent?function(e,n){var t=e.$options=Object.create(e.constructor.options),s=n._parentVnode;t.parent=n.parent,t._parentVnode=s;var i=s.componentOptions;t.propsData=i.propsData,t._parentListeners=i.listeners,t._renderChildren=i.children,t._componentTag=i.tag,n.render&&(t.render=n.render,t.staticRenderFns=n.staticRenderFns)}(n,e):n.$options=Kt(Ct(n.constructor),e||{},n),n._renderProxy=n,n._self=n,function(e){var n=e.$options,t=n.parent;if(t&&!n.abstract){for(;t.$options.abstract&&t.$parent;)t=t.$parent;t.$children.push(e)}e.$parent=t,e.$root=t?t.$root:e,e.$children=[],e.$refs={},e._provided=t?t._provided:Object.create(null),e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var n=e.$options._parentListeners;n&&Dn(e,n)}(n),function(e){e._vnode=null,e._staticTrees=null;var n=e.$options,t=e.$vnode=n._parentVnode,s=t&&t.context;e.$slots=gn(n._renderChildren,s),e.$scopedSlots=t?bn(e.$parent,t.data.scopedSlots,e.$slots):i,e._c=function(n,t,s,i){return Je(e,n,t,s,i,!1)},e.$createElement=function(n,t,s,i){return Je(e,n,t,s,i,!0)};var a=t&&t.data;Oe(e,"$attrs",a&&a.attrs||i,null,!0),Oe(e,"$listeners",n._parentListeners||i,null,!0)}(n),Un(n,"beforeCreate",void 0,!1),function(e){var n=At(e.$options.inject,e);n&&(Re(!1),Object.keys(n).forEach((function(t){Oe(e,t,n[t])})),Re(!0))}(n),wt(n),function(e){var n=e.$options.provide;if(n){var t=d(n)?n.call(e):n;if(!u(t))return;for(var s=function(e){var n=e._provided,t=e.$parent&&e.$parent._provided;return t===n?e._provided=Object.create(t):n}(e),i=ue?Reflect.ownKeys(t):Object.keys(t),a=0;a<i.length;a++){var r=i[a];Object.defineProperty(s,r,Object.getOwnPropertyDescriptor(t,r))}}}(n),Un(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(Jt),function(e){Object.defineProperty(e.prototype,"$data",{get:function(){return this._data}}),Object.defineProperty(e.prototype,"$props",{get:function(){return this._props}}),e.prototype.$set=Me,e.prototype.$delete=Fe,e.prototype.$watch=function(e,n,t){var s=this;if(h(n))return St(s,e,n,t);(t=t||{}).user=!0;var i=new _t(s,e,n,t);if(t.immediate){var a='callback for immediate watcher "'.concat(i.expression,'"');Te(),et(n,s,[i.value],s,a),Ee()}return function(){i.teardown()}}}(Jt),function(e){var n=/^hook:/;e.prototype.$on=function(e,t){var s=this;if(a(e))for(var i=0,r=e.length;i<r;i++)s.$on(e[i],t);else(s._events[e]||(s._events[e]=[])).push(t),n.test(e)&&(s._hasHookEvent=!0);return s},e.prototype.$once=function(e,n){var t=this;function s(){t.$off(e,s),n.apply(t,arguments)}return s.fn=n,t.$on(e,s),t},e.prototype.$off=function(e,n){var t=this;if(!arguments.length)return t._events=Object.create(null),t;if(a(e)){for(var s=0,i=e.length;s<i;s++)t.$off(e[s],n);return t}var r,o=t._events[e];if(!o)return t;if(!n)return t._events[e]=null,t;for(var l=o.length;l--;)if((r=o[l])===n||r.fn===n){o.splice(l,1);break}return t},e.prototype.$emit=function(e){var n=this,t=n._events[e];if(t){t=t.length>1?P(t):t;
vendor: 20,530 bytes, line 2
2for(var s=P(arguments,1),i='event handler for "'.concat(e,'"'),a=0,r=t.length;a<r;a++)et(t[a],n,s,n,i)}return n}}(Jt),function(e){e.prototype._update=function(e,n){var t=this,s=t.$el,i=t._vnode,a=Fn(t);t._vnode=e,t.$el=i?t.__patch__(i,e):t.__patch__(t.$el,e,n,!1),a(),s&&(s.__vue__=null),t.$el&&(t.$el.__vue__=t);for(var r=t;r&&r.$vnode&&r.$parent&&r.$vnode===r.$parent._vnode;)r.$parent.$el=r.$el,r=r.$parent},e.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){Un(e,"beforeDestroy"),e._isBeingDestroyed=!0;var n=e.$parent;!n||n._isBeingDestroyed||e.$options.abstract||k(n.$children,e),e._scope.stop(),e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,e.__patch__(e._vnode,null),Un(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.$vnode&&(e.$vnode.parent=null)}}}(Jt),function(e){vn(e.prototype),e.prototype.$nextTick=function(e){return pt(e,this)},e.prototype._render=function(){var e=this,n=e.$options,t=n.render,s=n._parentVnode;s&&e._isMounted&&(e.$scopedSlots=bn(e.$parent,s.data.scopedSlots,e.$slots,e.$scopedSlots),e._slotsProxy&&En(e._slotsProxy,e.$scopedSlots)),e.$vnode=s;var i,r=pe,o=An;try{he(e),An=e,i=t.call(e._renderProxy,e.$createElement)}catch(n){Zn(n,e,"render"),i=e._vnode}finally{An=o,he(r)}return a(i)&&1===i.length&&(i=i[0]),i instanceof me||(i=ve()),i.parent=s,i}}(Jt);var ss=[String,RegExp,Array],is={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:ss,exclude:ss,max:[String,Number]},methods:{cacheVNode:function(){var e=this,n=e.cache,t=e.keys,s=e.vnodeToCache,i=e.keyToCache;if(s){var a=s.tag,r=s.componentInstance,o=s.componentOptions;n[i]={name:Zt(o),tag:a,componentInstance:r},t.push(i),this.max&&t.length>parseInt(this.max)&&ts(n,t[0],t,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)ts(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch("include",(function(n){ns(e,(function(e){return es(n,e)}))})),this.$watch("exclude",(function(n){ns(e,(function(e){return!es(n,e)}))}))},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,n=Cn(e),t=n&&n.componentOptions;if(t){var s=Zt(t),i=this.include,a=this.exclude;if(i&&(!s||!es(i,s))||a&&s&&es(a,s))return n;var r=this.cache,o=this.keys,l=null==n.key?t.Ctor.cid+(t.tag?"::".concat(t.tag):""):n.key;r[l]?(n.componentInstance=r[l].componentInstance,k(o,l),o.push(l)):(this.vnodeToCache=n,this.keyToCache=l),n.data.keepAlive=!0}return n||e&&e[0]}}};!function(e){var n={get:function(){return q}};Object.defineProperty(e,"config",n),e.util={warn:$t,extend:D,mergeOptions:Kt,defineReactive:Oe},e.set=Me,e.delete=Fe,e.nextTick=pt,e.observable=function(e){return De(e),e},e.options=Object.create(null),G.forEach((function(n){e.options[n+"s"]=Object.create(null)})),e.options._base=e,D(e.options.components,is),function(e){e.use=function(e){var n=this._installedPlugins||(this._installedPlugins=[]);if(n.indexOf(e)>-1)return this;var t=P(arguments,1);return t.unshift(this),d(e.install)?e.install.apply(e,t):d(e)&&e.apply(null,t),n.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=Kt(this.options,e),this}}(e),function(e){e.cid=0;var n=1;e.extend=function(e){e=e||{};var t=this,s=t.cid,i=e._Ctor||(e._Ctor={});if(i[s])return i[s];var a=Dt(e)||Dt(t.options),r=function(e){this._init(e)};return(r.prototype=Object.create(t.prototype)).constructor=r,r.cid=n++,r.options=Kt(t.options,e),r.super=t,r.options.props&&function(e){var n=e.options.props;for(var t in n)yt(e.prototype,"_props",t)}(r),r.options.computed&&function(e){var n=e.options.computed;for(var t in n)Tt(e.prototype,t,n[t])}(r),r.extend=t.extend,r.mixin=t.mixin,r.use=t.use,G.forEach((function(e){r[e]=t[e]})),a&&(r.options.components[a]=r),r.superOptions=t.options,r.extendOptions=e,r.sealedOptions=D({},r.options),i[s]=r,r}}(e),function(e){G.forEach((function(n){e[n]=function(e,t){return t?("component"===n&&h(t)&&(t.name=t.name||e,t=this.options._base.extend(t)),"directive"===n&&d(t)&&(t={bind:t,update:t}),this.options[n+"s"][e]=t,t):this.options[n+"s"][e]}}))}(e)}(Jt),Object.defineProperty(Jt.prototype,"$isServer",{get:oe}),Object.defineProperty(Jt.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Jt,"FunctionalRenderContext",{value:Rt}),Jt.version="2.7.16";var as=b("style,class"),rs=b("input,textarea,option,select,progress"),os=function(e,n,t){return"value"===t&&rs(e)&&"button"!==n||"selected"===t&&"option"===e||"checked"===t&&"input"===e||"muted"===t&&"video"===e},ls=b("contenteditable,draggable,spellcheck"),cs=b("events,caret,typing,plaintext-only"),ds=function(e,n){return vs(n)||"false"===n?"false":"contenteditable"===e&&cs(n)?n:"true"},us=b("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ps="http://www.w3.org/1999/xlink",hs=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},ms=function(e){return hs(e)?e.slice(6,e.length):""},vs=function(e){return null==e||!1===e};function gs(e,n){return{staticClass:fs(e.staticClass,n.staticClass),class:o(e.class)?[e.class,n.class]:n.class}}function fs(e,n){return e?n?e+" "+n:e:n||""}function _s(e){return Array.isArray(e)?function(e){for(var n,t="",s=0,i=e.length;s<i;s++)o(n=_s(e[s]))&&""!==n&&(t&&(t+=" "),t+=n);return t}(e):u(e)?function(e){var n="";for(var t in e)e[t]&&(n&&(n+=" "),n+=t);return n}(e):"string"==typeof e?e:""}var bs={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},ys=b("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),ws=b("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),ks=function(e){return ys(e)||ws(e)};function Ts(e){return ws(e)?"svg":"math"===e?"math":void 0}var Es=Object.create(null),xs=b("text,number,password,search,email,tel,url");function Ss(e){return"string"==typeof e?document.querySelector(e)||document.createElement("div"):e}var As=Object.freeze({__proto__:null,createElement:function(e,n){var t=document.createElement(e);return"select"!==e||n.data&&n.data.attrs&&void 0!==n.data.attrs.multiple&&t.setAttribute("multiple","multiple"),t},createElementNS:function(e,n){return document.createElementNS(bs[e],n)},createTextNode:function(e){return document.createTextNode(e)},createComment:function(e){return document.createComment(e)},insertBefore:function(e,n,t){e.insertBefore(n,t)},removeChild:function(e,n){e.removeChild(n)},appendChild:function(e,n){e.appendChild(n)},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.tagName},setTextContent:function(e,n){e.textContent=n},setStyleScope:function(e,n){e.setAttribute(n,"")}}),Ls={create:function(e,n){Cs(n)},update:function(e,n){e.data.ref!==n.data.ref&&(Cs(e,!0),Cs(n))},destroy:function(e){Cs(e,!0)}};function Cs(e,n){var t=e.data.ref;if(o(t)){var s=e.context,i=e.componentInstance||e.elm,r=n?null:i,l=n?void 0:i;if(d(t))et(t,s,[r],s,"template ref function");else{var c=e.data.refInFor,u="string"==typeof t||"number"==typeof t,p=Ue(t),h=s.$refs;if(u||p)if(c){var m=u?h[t]:t.value;n?a(m)&&k(m,i):a(m)?m.includes(i)||m.push(i):u?(h[t]=[i],Rs(s,t,h[t])):t.value=[i]}else if(u){if(n&&h[t]!==i)return;h[t]=l,Rs(s,t,r)}else if(p){if(n&&t.value!==i)return;t.value=r}}}}function Rs(e,n,t){var s=e._setupState;s&&E(s,n)&&(Ue(s[n])?s[n].value=t:s[n]=t)}var Is=new me("",{},[]),Ps=["create","activate","update","remove","destroy"];function Ds(e,n){return e.key===n.key&&e.asyncFactory===n.asyncFactory&&(e.tag===n.tag&&e.isComment===n.isComment&&o(e.data)===o(n.data)&&function(e,n){if("input"!==e.tag)return!0;var t,s=o(t=e.data)&&o(t=t.attrs)&&t.type,i=o(t=n.data)&&o(t=t.attrs)&&t.type;return s===i||xs(s)&&xs(i)}(e,n)||l(e.isAsyncPlaceholder)&&r(n.asyncFactory.error))}function Os(e,n,t){var s,i,a={};for(s=n;s<=t;++s)o(i=e[s].key)&&(a[i]=s);return a}var Ms={create:Fs,update:Fs,destroy:function(e){Fs(e,Is)}};function Fs(e,n){(e.data.directives||n.data.directives)&&function(e,n){var t,s,i,a=e===Is,r=n===Is,o=$s(e.data.directives,e.context),l=$s(n.data.directives,n.context),c=[],d=[];for(t in l)s=o[t],i=l[t],s?(i.oldValue=s.value,i.oldArg=s.arg,Us(i,"update",n,e),i.def&&i.def.componentUpdated&&d.push(i)):(Us(i,"bind",n,e),i.def&&i.def.inserted&&c.push(i));if(c.length){var u=function(){for(var t=0;t<c.length;t++)Us(c[t],"inserted",n,e)};a?Ke(n,"insert",u):u()}if(d.length&&Ke(n,"postpatch",(function(){for(var t=0;t<d.length;t++)Us(d[t],"componentUpdated",n,e)})),!a)for(t in o)l[t]||Us(o[t],"unbind",e,e,r)}(e,n)}var Ns=Object.create(null);function $s(e,n){var t,s,i=Object.create(null);if(!e)return i;for(t=0;t<e.length;t++){if((s=e[t]).modifiers||(s.modifiers=Ns),i[Bs(s)]=s,n._setupState&&n._setupState.__sfc){var a=s.def||Vt(n,"_setupState","v-"+s.name);s.def="function"==typeof a?{bind:a,update:a}:a}s.def=s.def||Vt(n.$options,"directives",s.name)}return i}function Bs(e){return e.rawName||"".concat(e.name,".").concat(Object.keys(e.modifiers||{}).join("."))}function Us(e,n,t,s,i){var a=e.def&&e.def[n];if(a)try{a(t.elm,e,t,s,i)}catch(s){Zn(s,t.context,"directive ".concat(e.name," ").concat(n," hook"))}}var js=[Ls,Ms];function Gs(e,n){var t=n.componentOptions;if(!(o(t)&&!1===t.Ctor.options.inheritAttrs||r(e.data.attrs)&&r(n.data.attrs))){var s,i,a=n.elm,c=e.data.attrs||{},d=n.data.attrs||{};for(s in(o(d.__ob__)||l(d._v_attr_proxy))&&(d=n.data.attrs=D({},d)),d)i=d[s],c[s]!==i&&zs(a,s,i,n.data.pre);for(s in(J||ee)&&d.value!==c.value&&zs(a,"value",d.value),c)r(d[s])&&(hs(s)?a.removeAttributeNS(ps,ms(s)):ls(s)||a.removeAttribute(s))}}function zs(e,n,t,s){s||e.tagName.indexOf("-")>-1?qs(e,n,t):us(n)?vs(t)?e.removeAttribute(n):(t="allowfullscreen"===n&&"EMBED"===e.tagName?"true":n,e.setAttribute(n,t)):ls(n)?e.setAttribute(n,ds(n,t)):hs(n)?vs(t)?e.removeAttributeNS(ps,ms(n)):e.setAttributeNS(ps,n,t):qs(e,n,t)}function qs(e,n,t){if(vs(t))e.removeAttribute(n);else{if(J&&!Z&&"TEXTAREA"===e.tagName&&"placeholder"===n&&""!==t&&!e.__ieph){var s=function(n){n.stopImmediatePropagation(),e.removeEventListener("input",s)};e.addEventListener("input",s),e.__ieph=!0}e.setAttribute(n,t)}}var Ks={create:Gs,update:Gs};function Vs(e,n){var t=n.elm,s=n.data,i=e.data;if(!(r(s.staticClass)&&r(s.class)&&(r(i)||r(i.staticClass)&&r(i.class)))){var a=function(e){for(var n=e.data,t=e,s=e;o(s.componentInstance);)(s=s.componentInstance._vnode)&&s.data&&(n=gs(s.data,n));for(;o(t=t.parent);)t&&t.data&&(n=gs(n,t.data));return i=n.staticClass,a=n.class,o(i)||o(a)?fs(i,_s(a)):"";var i,a}(n),l=t._transitionClasses;o(l)&&(a=fs(a,_s(l))),a!==t._prevClass&&(t.setAttribute("class",a),t._prevClass=a)}}var Hs,Ys,Ws,Xs,Qs,Js,Zs={create:Vs,update:Vs},ei=/[\w).+\-_$\]]/;function ni(e){var n,t,s,i,a,r=!1,o=!1,l=!1,c=!1,d=0,u=0,p=0,h=0;for(s=0;s<e.length;s++)if(t=n,n=e.charCodeAt(s),r)39===n&&92!==t&&(r=!1);else if(o)34===n&&92!==t&&(o=!1);else if(l)96===n&&92!==t&&(l=!1);else if(c)47===n&&92!==t&&(c=!1);else if(124!==n||124===e.charCodeAt(s+1)||124===e.charCodeAt(s-1)||d||u||p){switch(n){case 34:o=!0;break;case 39:r=!0;break;case 96:l=!0;break;case 40:p++;break;case 41:p--;break;case 91:u++;break;case 93:u--;break;case 123:d++;break;case 125:d--}if(47===n){for(var m=s-1,v=void 0;m>=0&&" "===(v=e.charAt(m));m--);v&&ei.test(v)||(c=!0)}}else void 0===i?(h=s+1,i=e.slice(0,s).trim()):g();function g(){(a||(a=[])).push(e.slice(h,s).trim()),h=s+1}if(void 0===i?i=e.slice(0,s).trim():0!==h&&g(),a)for(s=0;s<a.length;s++)i=ti(i,a[s]);return i}function ti(e,n){var t=n.indexOf("(");if(t<0)return'_f("'.concat(n,'")(').concat(e,")");var s=n.slice(0,t),i=n.slice(t+1);return'_f("'.concat(s,'")(').concat(e).concat(")"!==i?","+i:i)}function si(e,n){console.error("[Vue compiler]: ".concat(e))}function ii(e,n){return e?e.map((function(e){return e[n]})).filter((function(e){return e})):[]}function ai(e,n,t,s,i){(e.props||(e.props=[])).push(mi({name:n,value:t,dynamic:i},s)),e.plain=!1}function ri(e,n,t,s,i){(i?e.dynamicAttrs||(e.dynamicAttrs=[]):e.attrs||(e.attrs=[])).push(mi({name:n,value:t,dynamic:i},s)),e.plain=!1}function oi(e,n,t,s){e.attrsMap[n]=t,e.attrsList.push(mi({name:n,value:t},s))}function li(e,n,t,s,i,a,r,o){(e.directives||(e.directives=[])).push(mi({name:n,rawName:t,value:s,arg:i,isDynamicArg:a,modifiers:r},o)),e.plain=!1}function ci(e,n,t){return t?"_p(".concat(n,',"').concat(e,'")'):e+n}function di(e,n,t,s,a,r,o,l){var c;(s=s||i).right?l?n="(".concat(n,")==='click'?'contextmenu':(").concat(n,")"):"click"===n&&(n="contextmenu",delete s.right):s.middle&&(l?n="(".concat(n,")==='click'?'mouseup':(").concat(n,")"):"click"===n&&(n="mouseup")),s.capture&&(delete s.capture,n=ci("!",n,l)),s.once&&(delete s.once,n=ci("~",n,l)),s.passive&&(delete s.passive,n=ci("&",n,l)),s.native?(delete s.native,c=e.nativeEvents||(e.nativeEvents={})):c=e.events||(e.events={});var d=mi({value:t.trim(),dynamic:l},o);s!==i&&(d.modifiers=s);var u=c[n];Array.isArray(u)?a?u.unshift(d):u.push(d):c[n]=u?a?[d,u]:[u,d]:d,e.plain=!1}function ui(e,n,t){var s=pi(e,":"+n)||pi(e,"v-bind:"+n);if(null!=s)return ni(s);if(!1!==t){var i=pi(e,n);if(null!=i)return JSON.stringify(i)}}function pi(e,n,t){var s;if(null!=(s=e.attrsMap[n]))for(var i=e.attrsList,a=0,r=i.length;a<r;a++)if(i[a].name===n){i.splice(a,1);break}return t&&delete e.attrsMap[n],s}function hi(e,n){for(var t=e.attrsList,s=0,i=t.length;s<i;s++){var a=t[s];if(n.test(a.name))return t.splice(s,1),a}}function mi(e,n){return n&&(null!=n.start&&(e.start=n.start),null!=n.end&&(e.end=n.end)),e}function vi(e,n,t){var s=t||{},i=s.number,a="$$v",r=a;s.trim&&(r="(typeof ".concat(a," === 'string'")+"? ".concat(a,".trim()")+": ".concat(a,")")),i&&(r="_n(".concat(r,")"));var o=gi(n,r);e.model={value:"(".concat(n,")"),expression:JSON.stringify(n),callback:"function (".concat(a,") {").concat(o,"}")}}function gi(e,n){var t=function(e){if(e=e.trim(),Hs=e.length,e.indexOf("[")<0||e.lastIndexOf("]")<Hs-1)return(Xs=e.lastIndexOf("."))>-1?{exp:e.slice(0,Xs),key:'"'+e.slice(Xs+1)+'"'}:{exp:e,key:null};for(Ys=e,Xs=Qs=Js=0;!_i();)bi(Ws=fi())?wi(Ws):91===Ws&&yi(Ws);return{exp:e.slice(0,Qs),key:e.slice(Qs+1,Js)}}(e);return null===t.key?"".concat(e,"=").concat(n):"$set(".concat(t.exp,", ").concat(t.key,", ").concat(n,")")}function fi(){return Ys.charCodeAt(++Xs)}function _i(){return Xs>=Hs}function bi(e){return 34===e||39===e}function yi(e){var n=1;for(Qs=Xs;!_i();)if(bi(e=fi()))wi(e);else if(91===e&&n++,93===e&&n--,0===n){Js=Xs;break}}function wi(e){for(var n=e;!_i()&&(e=fi())!==n;);}var ki,Ti="__r",Ei="__c";function xi(e,n,t){var s=ki;return function i(){null!==n.apply(null,arguments)&&Li(e,i,t,s)}}var Si=it&&!(se&&Number(se[1])<=53);function Ai(e,n,t,s){if(Si){var i=Hn,a=n;n=a._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return a.apply(this,arguments)}}ki.addEventListener(e,n,ae?{capture:t,passive:s}:t)}function Li(e,n,t,s){(s||ki).removeEventListener(e,n._wrapper||n,t)}function Ci(e,n){if(!r(e.data.on)||!r(n.data.on)){var t=n.data.on||{},s=e.data.on||{};ki=n.elm||e.elm,function(e){if(o(e[Ti])){var n=J?"change":"input";e[n]=[].concat(e[Ti],e[n]||[]),delete e[Ti]}o(e[Ei])&&(e.change=[].concat(e[Ei],e.change||[]),delete e[Ei])}(t),qe(t,s,Ai,Li,xi,n.context),ki=void 0}}var Ri,Ii={create:Ci,update:Ci,destroy:function(e){return Ci(e,Is)}};function Pi(e,n){if(!r(e.data.domProps)||!r(n.data.domProps)){var t,s,i=n.elm,a=e.data.domProps||{},c=n.data.domProps||{};for(t in(o(c.__ob__)||l(c._v_attr_proxy))&&(c=n.data.domProps=D({},c)),a)t in c||(i[t]="");for(t in c){if(s=c[t],"textContent"===t||"innerHTML"===t){if(n.children&&(n.children.length=0),s===a[t])continue;1===i.childNodes.length&&i.removeChild(i.childNodes[0])}if("value"===t&&"PROGRESS"!==i.tagName){i._value=s;var d=r(s)?"":String(s);Di(i,d)&&(i.value=d)}else if("innerHTML"===t&&ws(i.tagName)&&r(i.innerHTML)){(Ri=Ri||document.createElement("div")).innerHTML="<svg>".concat(s,"</svg>");for(var u=Ri.firstChild;i.firstChild;)i.removeChild(i.firstChild);for(;u.firstChild;)i.appendChild(u.firstChild)}else if(s!==a[t])try{i[t]=s}catch(e){}}}}function Di(e,n){return!e.composing&&("OPTION"===e.tagName||function(e,n){var t=!0;try{t=document.activeElement!==e}catch(e){}return t&&e.value!==n}(e,n)||function(e,n){var t=e.value,s=e._vModifiers;if(o(s)){if(s.number)return _(t)!==_(n);if(s.trim)return t.trim()!==n.trim()}return t!==n}(e,n))}var Oi={create:Pi,update:Pi},Mi=x((function(e){var n={},t=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach((function(e){if(e){var s=e.split(t);s.length>1&&(n[s[0].trim()]=s[1].trim())}})),n}));function Fi(e){var n=Ni(e.style);return e.staticStyle?D(e.staticStyle,n):n}function Ni(e){return Array.isArray(e)?O(e):"string"==typeof e?Mi(e):e}var $i,Bi=/^--/,Ui=/\s*!important$/,ji=function(e,n,t){if(Bi.test(n))e.style.setProperty(n,t);else if(Ui.test(t))e.style.setProperty(R(n),t.replace(Ui,""),"important");else{var s=zi(n);if(Array.isArray(t))for(var i=0,a=t.length;i<a;i++)e.style[s]=t[i];else e.style[s]=t}},Gi=["Webkit","Moz","ms"],zi=x((function(e){if($i=$i||document.createElement("div").style,"filter"!==(e=A(e))&&e in $i)return e;for(var n=e.charAt(0).toUpperCase()+e.slice(1),t=0;t<Gi.length;t++){var s=Gi[t]+n;if(s in $i)return s}}));function qi(e,n){var t=n.data,s=e.data;if(!(r(t.staticStyle)&&r(t.style)&&r(s.staticStyle)&&r(s.style))){var i,a,l=n.elm,c=s.staticStyle,d=s.normalizedStyle||s.style||{},u=c||d,p=Ni(n.data.style)||{};n.data.normalizedStyle=o(p.__ob__)?D({},p):p;var h=function(e){for(var n,t={},s=e;s.componentInstance;)(s=s.componentInstance._vnode)&&s.data&&(n=Fi(s.data))&&D(t,n);(n=Fi(e.data))&&D(t,n);for(var i=e;i=i.parent;)i.data&&(n=Fi(i.data))&&D(t,n);return t}(n);for(a in u)r(h[a])&&ji(l,a,"");for(a in h)i=h[a],ji(l,a,null==i?"":i)}}var Ki={create:qi,update:qi},Vi=/\s+/;function Hi(e,n){if(n&&(n=n.trim()))if(e.classList)n.indexOf(" ")>-1?n.split(Vi).forEach((function(n){return e.classList.add(n)})):e.classList.add(n);else{var t=" ".concat(e.getAttribute("class")||""," ");t.indexOf(" "+n+" ")<0&&e.setAttribute("class",(t+n).trim())}}function Yi(e,n){if(n&&(n=n.trim()))if(e.classList)n.indexOf(" ")>-1?n.split(Vi).forEach((function(n){return e.classList.remove(n)})):e.classList.remove(n),e.classList.length||e.removeAttribute("class");else{for(var t=" ".concat(e.getAttribute("class")||""," "),s=" "+n+" ";t.indexOf(s)>=0;)t=t.replace(s," ");(t=t.trim())?e.setAttribute("class",t):e.removeAttribute("class")}}function Wi(e){if(e){if("object"==typeof e){var n={};return!1!==e.css&&D(n,Xi(e.name||"v")),D(n,e),n}return"string"==typeof e?Xi(e):void 0}}var Xi=x((function(e){return{enterClass:"".concat(e,"-enter"),enterToClass:"".concat(e,"-enter-to"),enterActiveClass:"".concat(e,"-enter-active"),leaveClass:"".concat(e,"-leave"),leaveToClass:"".concat(e,"-leave-to"),leaveActiveClass:"".concat(e,"-leave-active")}})),Qi=X&&!Z,Ji="transition",Zi="animation",ea="transition",na="transitionend",ta="animation",sa="animationend";Qi&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ea="WebkitTransition",na="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(ta="WebkitAnimation",sa="webkitAnimationEnd"));var ia=X?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function aa(e){ia((function(){ia(e)}))}function ra(e,n){var t=e._transitionClasses||(e._transitionClasses=[]);t.indexOf(n)<0&&(t.push(n),Hi(e,n))}
vendor: 6,606 bytes, line 2
2function oa(e,n){e._transitionClasses&&k(e._transitionClasses,n),Yi(e,n)}function la(e,n,t){var s=da(e,n),i=s.type,a=s.timeout,r=s.propCount;if(!i)return t();var o=i===Ji?na:sa,l=0,c=function(){e.removeEventListener(o,d),t()},d=function(n){n.target===e&&++l>=r&&c()};setTimeout((function(){l<r&&c()}),a+1),e.addEventListener(o,d)}var ca=/\b(transform|all)(,|$)/;function da(e,n){var t,s=window.getComputedStyle(e),i=(s[ea+"Delay"]||"").split(", "),a=(s[ea+"Duration"]||"").split(", "),r=ua(i,a),o=(s[ta+"Delay"]||"").split(", "),l=(s[ta+"Duration"]||"").split(", "),c=ua(o,l),d=0,u=0;return n===Ji?r>0&&(t=Ji,d=r,u=a.length):n===Zi?c>0&&(t=Zi,d=c,u=l.length):u=(t=(d=Math.max(r,c))>0?r>c?Ji:Zi:null)?t===Ji?a.length:l.length:0,{type:t,timeout:d,propCount:u,hasTransform:t===Ji&&ca.test(s[ea+"Property"])}}function ua(e,n){for(;e.length<n.length;)e=e.concat(e);return Math.max.apply(null,n.map((function(n,t){return pa(n)+pa(e[t])})))}function pa(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}function ha(e,n){var t=e.elm;o(t._leaveCb)&&(t._leaveCb.cancelled=!0,t._leaveCb());var s=Wi(e.data.transition);if(!r(s)&&!o(t._enterCb)&&1===t.nodeType){for(var i=s.css,a=s.type,l=s.enterClass,c=s.enterToClass,p=s.enterActiveClass,h=s.appearClass,m=s.appearToClass,v=s.appearActiveClass,g=s.beforeEnter,f=s.enter,b=s.afterEnter,y=s.enterCancelled,w=s.beforeAppear,k=s.appear,T=s.afterAppear,E=s.appearCancelled,x=s.duration,S=Mn,A=Mn.$vnode;A&&A.parent;)S=A.context,A=A.parent;var L=!S._isMounted||!e.isRootInsert;if(!L||k||""===k){var C=L&&h?h:l,R=L&&v?v:p,I=L&&m?m:c,P=L&&w||g,D=L&&d(k)?k:f,O=L&&T||b,M=L&&E||y,F=_(u(x)?x.enter:x),N=!1!==i&&!Z,$=ga(D),B=t._enterCb=U((function(){N&&(oa(t,I),oa(t,R)),B.cancelled?(N&&oa(t,C),M&&M(t)):O&&O(t),t._enterCb=null}));e.data.show||Ke(e,"insert",(function(){var n=t.parentNode,s=n&&n._pending&&n._pending[e.key];s&&s.tag===e.tag&&s.elm._leaveCb&&s.elm._leaveCb(),D&&D(t,B)})),P&&P(t),N&&(ra(t,C),ra(t,R),aa((function(){oa(t,C),B.cancelled||(ra(t,I),$||(va(F)?setTimeout(B,F):la(t,a,B)))}))),e.data.show&&(n&&n(),D&&D(t,B)),N||$||B()}}}function ma(e,n){var t=e.elm;o(t._enterCb)&&(t._enterCb.cancelled=!0,t._enterCb());var s=Wi(e.data.transition);if(r(s)||1!==t.nodeType)return n();if(!o(t._leaveCb)){var i=s.css,a=s.type,l=s.leaveClass,c=s.leaveToClass,d=s.leaveActiveClass,p=s.beforeLeave,h=s.leave,m=s.afterLeave,v=s.leaveCancelled,g=s.delayLeave,f=s.duration,b=!1!==i&&!Z,y=ga(h),w=_(u(f)?f.leave:f),k=t._leaveCb=U((function(){t.parentNode&&t.parentNode._pending&&(t.parentNode._pending[e.key]=null),b&&(oa(t,c),oa(t,d)),k.cancelled?(b&&oa(t,l),v&&v(t)):(n(),m&&m(t)),t._leaveCb=null}));g?g(T):T()}function T(){k.cancelled||(!e.data.show&&t.parentNode&&((t.parentNode._pending||(t.parentNode._pending={}))[e.key]=e),p&&p(t),b&&(ra(t,l),ra(t,d),aa((function(){oa(t,l),k.cancelled||(ra(t,c),y||(va(w)?setTimeout(k,w):la(t,a,k)))}))),h&&h(t,k),b||y||k())}}function va(e){return"number"==typeof e&&!isNaN(e)}function ga(e){if(r(e))return!1;var n=e.fns;return o(n)?ga(Array.isArray(n)?n[0]:n):(e._length||e.length)>1}function fa(e,n){!0!==n.data.show&&ha(n)}var _a=function(e){var n,t,s={},i=e.modules,d=e.nodeOps;for(n=0;n<Ps.length;++n)for(s[Ps[n]]=[],t=0;t<i.length;++t)o(i[t][Ps[n]])&&s[Ps[n]].push(i[t][Ps[n]]);function u(e){var n=d.parentNode(e);o(n)&&d.removeChild(n,e)}function p(e,n,t,i,a,r,c){if(o(e.elm)&&o(r)&&(e=r[c]=fe(e)),e.isRootInsert=!a,!function(e,n,t,i){var a=e.data;if(o(a)){var r=o(e.componentInstance)&&a.keepAlive;if(o(a=a.hook)&&o(a=a.init)&&a(e,!1),o(e.componentInstance))return h(e,n),m(t,e.elm,i),l(r)&&function(e,n,t,i){for(var a,r=e;r.componentInstance;)if(o(a=(r=r.componentInstance._vnode).data)&&o(a=a.transition)){for(a=0;a<s.activate.length;++a)s.activate[a](Is,r);n.push(r);break}m(t,e.elm,i)}(e,n,t,i),!0}}(e,n,t,i)){var u=e.data,p=e.children,g=e.tag;o(g)?(e.elm=e.ns?d.createElementNS(e.ns,g):d.createElement(g,e),_(e),v(e,p,n),o(u)&&f(e,n),m(t,e.elm,i)):l(e.isComment)?(e.elm=d.createComment(e.text),m(t,e.elm,i)):(e.elm=d.createTextNode(e.text),m(t,e.elm,i))}}function h(e,n){o(e.data.pendingInsert)&&(n.push.apply(n,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,g(e)?(f(e,n),_(e)):(Cs(e),n.push(e))}function m(e,n,t){o(e)&&(o(t)?d.parentNode(t)===e&&d.insertBefore(e,n,t):d.appendChild(e,n))}function v(e,n,t){if(a(n))for(var s=0;s<n.length;++s)p(n[s],t,e.elm,null,!0,n,s);else c(e.text)&&d.appendChild(e.elm,d.createTextNode(String(e.text)))}function g(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return o(e.tag)}function f(e,t){for(var i=0;i<s.create.length;++i)s.create[i](Is,e);o(n=e.data.hook)&&(o(n.create)&&n.create(Is,e),o(n.insert)&&t.push(e))}function _(e){var n;if(o(n=e.fnScopeId))d.setStyleScope(e.elm,n);else for(var t=e;t;)o(n=t.context)&&o(n=n.$options._scopeId)&&d.setStyleScope(e.elm,n),t=t.parent;o(n=Mn)&&n!==e.context&&n!==e.fnContext&&o(n=n.$options._scopeId)&&d.setStyleScope(e.elm,n)}function y(e,n,t,s,i,a){for(;s<=i;++s)p(t[s],a,e,n,!1,t,s)}function w(e){var n,t,i=e.data;if(o(i))for(o(n=i.hook)&&o(n=n.destroy)&&n(e),n=0;n<s.destroy.length;++n)s.destroy[n](e);if(o(n=e.children))for(t=0;t<e.children.length;++t)w(e.children[t])}function k(e,n,t){for(;n<=t;++n){var s=e[n];o(s)&&(o(s.tag)?(T(s),w(s)):u(s.elm))}}function T(e,n){if(o(n)||o(e.data)){var t,i=s.remove.length+1;for(o(n)?n.listeners+=i:n=function(e,n){function t(){0==--t.listeners&&u(e)}return t.listeners=n,t}(e.elm,i),o(t=e.componentInstance)&&o(t=t._vnode)&&o(t.data)&&T(t,n),t=0;t<s.remove.length;++t)s.remove[t](e,n);o(t=e.data.hook)&&o(t=t.remove)?t(e,n):n()}else u(e.elm)}function E(e,n,t,s){for(var i=t;i<s;i++){var a=n[i];if(o(a)&&Ds(e,a))return i}}function x(e,n,t,i,a,c){if(e!==n){o(n.elm)&&o(i)&&(n=i[a]=fe(n));var u=n.elm=e.elm;if(l(e.isAsyncPlaceholder))o(n.asyncFactory.resolved)?L(e.elm,n,t):n.isAsyncPlaceholder=!0;else if(l(n.isStatic)&&l(e.isStatic)&&n.key===e.key&&(l(n.isCloned)||l(n.isOnce)))n.componentInstance=e.componentInstance;else{var h,m=n.data;o(m)&&o(h=m.hook)&&o(h=h.prepatch)&&h(e,n);var v=e.children,f=n.children;if(o(m)&&g(n)){for(h=0;h<s.update.length;++h)s.update[h](e,n);o(h=m.hook)&&o(h=h.update)&&h(e,n)}r(n.text)?o(v)&&o(f)?v!==f&&function(e,n,t,s,i){for(var a,l,c,u=0,h=0,m=n.length-1,v=n[0],g=n[m],f=t.length-1,_=t[0],b=t[f],w=!i;u<=m&&h<=f;)r(v)?v=n[++u]:r(g)?g=n[--m]:Ds(v,_)?(x(v,_,s,t,h),v=n[++u],_=t[++h]):Ds(g,b)?(x(g,b,s,t,f),g=n[--m],b=t[--f]):Ds(v,b)?(x(v,b,s,t,f),w&&d.insertBefore(e,v.elm,d.nextSibling(g.elm)),v=n[++u],b=t[--f]):Ds(g,_)?(x(g,_,s,t,h),w&&d.insertBefore(e,g.elm,v.elm),g=n[--m],_=t[++h]):(r(a)&&(a=Os(n,u,m)),r(l=o(_.ke
vendor: 4,393 bytes, line 2
2y)?a[_.key]:E(_,n,u,m))?p(_,s,e,v.elm,!1,t,h):Ds(c=n[l],_)?(x(c,_,s,t,h),n[l]=void 0,w&&d.insertBefore(e,c.elm,v.elm)):p(_,s,e,v.elm,!1,t,h),_=t[++h]);u>m?y(e,r(t[f+1])?null:t[f+1].elm,t,h,f,s):h>f&&k(n,u,m)}(u,v,f,t,c):o(f)?(o(e.text)&&d.setTextContent(u,""),y(u,null,f,0,f.length-1,t)):o(v)?k(v,0,v.length-1):o(e.text)&&d.setTextContent(u,""):e.text!==n.text&&d.setTextContent(u,n.text),o(m)&&o(h=m.hook)&&o(h=h.postpatch)&&h(e,n)}}}function S(e,n,t){if(l(t)&&o(e.parent))e.parent.data.pendingInsert=n;else for(var s=0;s<n.length;++s)n[s].data.hook.insert(n[s])}var A=b("attrs,class,staticClass,staticStyle,key");function L(e,n,t,s){var i,a=n.tag,r=n.data,c=n.children;if(s=s||r&&r.pre,n.elm=e,l(n.isComment)&&o(n.asyncFactory))return n.isAsyncPlaceholder=!0,!0;if(o(r)&&(o(i=r.hook)&&o(i=i.init)&&i(n,!0),o(i=n.componentInstance)))return h(n,t),!0;if(o(a)){if(o(c))if(e.hasChildNodes())if(o(i=r)&&o(i=i.domProps)&&o(i=i.innerHTML)){if(i!==e.innerHTML)return!1}else{for(var d=!0,u=e.firstChild,p=0;p<c.length;p++){if(!u||!L(u,c[p],t,s)){d=!1;break}u=u.nextSibling}if(!d||u)return!1}else v(n,c,t);if(o(r)){var m=!1;for(var g in r)if(!A(g)){m=!0,f(n,t);break}!m&&r.class&&vt(r.class)}}else e.data!==n.text&&(e.data=n.text);return!0}return function(e,n,t,i){if(!r(n)){var a,c=!1,u=[];if(r(e))c=!0,p(n,u);else{var h=o(e.nodeType);if(!h&&Ds(e,n))x(e,n,u,null,null,i);else{if(h){if(1===e.nodeType&&e.hasAttribute(j)&&(e.removeAttribute(j),t=!0),l(t)&&L(e,n,u))return S(n,u,!0),e;a=e,e=new me(d.tagName(a).toLowerCase(),{},[],void 0,a)}var m=e.elm,v=d.parentNode(m);if(p(n,u,m._leaveCb?null:v,d.nextSibling(m)),o(n.parent))for(var f=n.parent,_=g(n);f;){for(var b=0;b<s.destroy.length;++b)s.destroy[b](f);if(f.elm=n.elm,_){for(var y=0;y<s.create.length;++y)s.create[y](Is,f);var T=f.data.hook.insert;if(T.merged)for(var E=T.fns.slice(1),A=0;A<E.length;A++)E[A]()}else Cs(f);f=f.parent}o(v)?k([e],0,0):o(e.tag)&&w(e)}}return S(n,u,c),n.elm}o(e)&&w(e)}}({nodeOps:As,modules:[Ks,Zs,Ii,Oi,Ki,X?{create:fa,activate:fa,remove:function(e,n){!0!==e.data.show?ma(e,n):n()}}:{}].concat(js)});Z&&document.addEventListener("selectionchange",(function(){var e=document.activeElement;e&&e.vmodel&&Sa(e,"input")}));var ba={inserted:function(e,n,t,s){"select"===t.tag?(s.elm&&!s.elm._vOptions?Ke(t,"postpatch",(function(){ba.componentUpdated(e,n,t)})):ya(e,n,t.context),e._vOptions=[].map.call(e.options,Ta)):("textarea"===t.tag||xs(e.type))&&(e._vModifiers=n.modifiers,n.modifiers.lazy||(e.addEventListener("compositionstart",Ea),e.addEventListener("compositionend",xa),e.addEventListener("change",xa),Z&&(e.vmodel=!0)))},componentUpdated:function(e,n,t){if("select"===t.tag){ya(e,n,t.context);var s=e._vOptions,i=e._vOptions=[].map.call(e.options,Ta);i.some((function(e,n){return!$(e,s[n])}))&&(e.multiple?n.value.some((function(e){return ka(e,i)})):n.value!==n.oldValue&&ka(n.value,i))&&Sa(e,"change")}}};function ya(e,n,t){wa(e,n),(J||ee)&&setTimeout((function(){wa(e,n)}),0)}function wa(e,n,t){var s=n.value,i=e.multiple;if(!i||Array.isArray(s)){for(var a,r,o=0,l=e.options.length;o<l;o++)if(r=e.options[o],i)a=B(s,Ta(r))>-1,r.selected!==a&&(r.selected=a);else if($(Ta(r),s))return void(e.selectedIndex!==o&&(e.selectedIndex=o));i||(e.selectedIndex=-1)}}function ka(e,n){return n.every((function(n){return!$(n,e)}))}function Ta(e){return"_value"in e?e._value:e.value}function Ea(e){e.target.composing=!0}function xa(e){e.target.composing&&(e.target.composing=!1,Sa(e.target,"input"))}function Sa(e,n){var t=document.createEvent("HTMLEvents");t.initEvent(n,!0,!0),e.dispatchEvent(t)}function Aa(e){return!e.componentInstance||e.data&&e.data.transition?e:Aa(e.componentInstance._vnode)}var La={model:ba,show:{bind:function(e,n,t){var s=n.value,i=(t=Aa(t)).data&&t.data.transition,a=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;s&&i?(t.data.show=!0,ha(t,(function(){e.style.display=a}))):e.style.display=s?a:"none"},update:function(e,n,t){var s=n.value;!s!=!n.oldValue&&((t=Aa(t)).data&&t.data.transition?(t.data.show=!0,s?ha(t,(function(){e.style.display=e.__vOriginalDisplay})):ma(t,(function(){e.style.display="none"}))):e.style.display=s?e.__vOriginalDisplay:"none")},unbind:function(e,n,t,s,i){i||(e.style.display=e.__vOriginalDisplay)}}},Ca={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterA
vendor: 13,622 bytes, line 2
2ctiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ra(e){var n=e&&e.componentOptions;return n&&n.Ctor.options.abstract?Ra(Cn(n.children)):e}function Ia(e){var n={},t=e.$options;for(var s in t.propsData)n[s]=e[s];var i=t._parentListeners;for(var s in i)n[A(s)]=i[s];return n}function Pa(e,n){if(/\d-keep-alive$/.test(n.tag))return e("keep-alive",{props:n.componentOptions.propsData})}var Da=function(e){return e.tag||_n(e)},Oa=function(e){return"show"===e.name},Ma={name:"transition",props:Ca,abstract:!0,render:function(e){var n=this,t=this.$slots.default;if(t&&(t=t.filter(Da)).length){var s=this.mode,i=t[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return i;var a=Ra(i);if(!a)return i;if(this._leaving)return Pa(e,i);var r="__transition-".concat(this._uid,"-");a.key=null==a.key?a.isComment?r+"comment":r+a.tag:c(a.key)?0===String(a.key).indexOf(r)?a.key:r+a.key:a.key;var o=(a.data||(a.data={})).transition=Ia(this),l=this._vnode,d=Ra(l);if(a.data.directives&&a.data.directives.some(Oa)&&(a.data.show=!0),d&&d.data&&!function(e,n){return n.key===e.key&&n.tag===e.tag}(a,d)&&!_n(d)&&(!d.componentInstance||!d.componentInstance._vnode.isComment)){var u=d.data.transition=D({},o);if("out-in"===s)return this._leaving=!0,Ke(u,"afterLeave",(function(){n._leaving=!1,n.$forceUpdate()})),Pa(e,i);if("in-out"===s){if(_n(a))return l;var p,h=function(){p()};Ke(o,"afterEnter",h),Ke(o,"enterCancelled",h),Ke(u,"delayLeave",(function(e){p=e}))}}return i}}},Fa=D({tag:String,moveClass:String},Ca);function Na(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function $a(e){e.data.newPos=e.elm.getBoundingClientRect()}function Ba(e){var n=e.data.pos,t=e.data.newPos,s=n.left-t.left,i=n.top-t.top;if(s||i){e.data.moved=!0;var a=e.elm.style;a.transform=a.WebkitTransform="translate(".concat(s,"px,").concat(i,"px)"),a.transitionDuration="0s"}}delete Fa.mode;var Ua={Transition:Ma,TransitionGroup:{props:Fa,beforeMount:function(){var e=this,n=this._update;this._update=function(t,s){var i=Fn(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),n.call(e,t,s)}},render:function(e){for(var n=this.tag||this.$vnode.data.tag||"span",t=Object.create(null),s=this.prevChildren=this.children,i=this.$slots.default||[],a=this.children=[],r=Ia(this),o=0;o<i.length;o++)(d=i[o]).tag&&null!=d.key&&0!==String(d.key).indexOf("__vlist")&&(a.push(d),t[d.key]=d,(d.data||(d.data={})).transition=r);if(s){var l=[],c=[];for(o=0;o<s.length;o++){var d;(d=s[o]).data.transition=r,d.data.pos=d.elm.getBoundingClientRect(),t[d.key]?l.push(d):c.push(d)}this.kept=e(n,null,l),this.removed=c}return e(n,null,a)},updated:function(){var e=this.prevChildren,n=this.moveClass||(this.name||"v")+"-move";e.length&&this.hasMove(e[0].elm,n)&&(e.forEach(Na),e.forEach($a),e.forEach(Ba),this._reflow=document.body.offsetHeight,e.forEach((function(e){if(e.data.moved){var t=e.elm,s=t.style;ra(t,n),s.transform=s.WebkitTransform=s.transitionDuration="",t.addEventListener(na,t._moveCb=function e(s){s&&s.target!==t||s&&!/transform$/.test(s.propertyName)||(t.removeEventListener(na,e),t._moveCb=null,oa(t,n))})}})))},methods:{hasMove:function(e,n){if(!Qi)return!1;if(this._hasMove)return this._hasMove;var t=e.cloneNode();e._transitionClasses&&e._transitionClasses.forEach((function(e){Yi(t,e)})),Hi(t,n),t.style.display="none",this.$el.appendChild(t);var s=da(t);return this.$el.removeChild(t),this._hasMove=s.hasTransform}}}};Jt.config.mustUseProp=os,Jt.config.isReservedTag=ks,Jt.config.isReservedAttr=as,Jt.config.getTagNamespace=Ts,Jt.config.isUnknownElement=function(e){if(!X)return!0;if(ks(e))return!1;if(e=e.toLowerCase(),null!=Es[e])return Es[e];var n=document.createElement(e);return e.indexOf("-")>-1?Es[e]=n.constructor===window.HTMLUnknownElement||n.constructor===window.HTMLElement:Es[e]=/HTMLUnknownElement/.test(n.toString())},D(Jt.options.directives,La),D(Jt.options.components,Ua),Jt.prototype.__patch__=X?_a:M,Jt.prototype.$mount=function(e,n){return function(e,n,t){var s;e.$el=n,e.$options.render||(e.$options.render=ve),Un(e,"beforeMount"),s=function(){e._update(e._render(),t)},new _t(e,s,M,{before:function(){e._isMounted&&!e._isDestroyed&&Un(e,"beforeUpdate")}},!0),t=!1;var i=e._preWatchers;if(i)for(var a=0;a<i.length;a++)i[a].run();return null==e.$vnode&&(e._isMounted=!0,Un(e,"mounted")),e}(this,e=e&&X?Ss(e):void 0,n)},X&&setTimeout((function(){q.devtools&&le&&le.emit("init",Jt)}),0);var ja,Ga=/\{\{((?:.|\r?\n)+?)\}\}/g,za=/[-.*+?^${}()|[\]\/\\]/g,qa=x((function(e){var n=e[0].replace(za,"\\$&"),t=e[1].replace(za,"\\$&");return new RegExp(n+"((?:.|\\n)+?)"+t,"g")})),Ka={staticKeys:["staticClass"],transformNode:function(e,n){n.warn;var t=pi(e,"class");t&&(e.staticClass=JSON.stringify(t.replace(/\s+/g," ").trim()));var s=ui(e,"class",!1);s&&(e.classBinding=s)},genData:function(e){var n="";return e.staticClass&&(n+="staticClass:".concat(e.staticClass,",")),e.classBinding&&(n+="class:".concat(e.classBinding,",")),n}},Va={staticKeys:["staticStyle"],transformNode:function(e,n){n.warn;var t=pi(e,"style");t&&(e.staticStyle=JSON.stringify(Mi(t)));var s=ui(e,"style",!1);s&&(e.styleBinding=s)},genData:function(e){var n="";return e.staticStyle&&(n+="staticStyle:".concat(e.staticStyle,",")),e.styleBinding&&(n+="style:(".concat(e.styleBinding,"),")),n}},Ha=b("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),Ya=b("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),Wa=b("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Xa=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Qa=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Ja="[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(K.source,"]*"),Za="((?:".concat(Ja,"\\:)?").concat(Ja,")"),er=new RegExp("^<".concat(Za)),nr=/^\s*(\/?)>/,tr=new RegExp("^<\\/".concat(Za,"[^>]*>")),sr=/^<!DOCTYPE [^>]+>/i,ir=/^<!\--/,ar=/^<!\[/,rr=b("script,style,textarea",!0),or={},lr={"&lt;":"<","&gt;":">","&quot;":'"',"&amp;":"&","&#10;":"\n","&#9;":"\t","&#39;":"'"},cr=/&(?:lt|gt|quot|amp|#39);/g,dr=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,ur=b("pre,textarea",!0),pr=function(e,n){return e&&ur(e)&&"\n"===n[0]};function hr(e,n){var t=n?dr:cr;return e.replace(t,(function(e){return lr[e]}))}var mr,vr,gr,fr,_r,br,yr,wr,kr=/^@|^v-on:/,Tr=/^v-|^@|^:|^#/,Er=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,xr=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Sr=/^\(|\)$/g,Ar=/^\[.*\]$/,Lr=/:(.*)$/,Cr=/^:|^\.|^v-bind:/,Rr=/\.[^.\]]+(?=[^\]]*$)/g,Ir=/^v-slot(:|$)|^#/,Pr=/[\r\n]/,Dr=/[ \f\t\r\n]+/g,Or=x((function(e){return(ja=ja||document.createElement("div")).innerHTML=e,ja.textContent})),Mr="_empty_";function Fr(e,n,t){return{type:1,tag:e,attrsList:n,attrsMap:zr(n),rawAttrsMap:{},parent:t,children:[]}}function Nr(e,n){mr=n.warn||si,br=n.isPreTag||F,yr=n.mustUseProp||F,wr=n.getTagNamespace||F;n.isReservedTag;gr=ii(n.modules,"transformNode"),fr=ii(n.modules,"preTransformNode"),_r=ii(n.modules,"postTransformNode"),vr=n.delimiters;var t,s,i=[],a=!1!==n.preserveWhitespace,r=n.whitespace,o=!1,l=!1;function c(e){if(d(e),o||e.processed||(e=$r(e,n)),i.length||e===t||t.if&&(e.elseif||e.else)&&Ur(t,{exp:e.elseif,block:e}),s&&!e.forbidden)if(e.elseif||e.else)r=e,c=function(e){for(var n=e.length;n--;){if(1===e[n].type)return e[n];e.pop()}}(s.children),c&&c.if&&Ur(c,{exp:r.elseif,block:r});else{if(e.slotScope){var a=e.slotTarget||'"default"';(s.scopedSlots||(s.scopedSlots={}))[a]=e}s.children.push(e),e.parent=s}var r,c;e.children=e.children.filter((function(e){return!e.slotScope})),d(e),e.pre&&(o=!1),br(e.tag)&&(l=!1);for(var u=0;u<_r.length;u++)_r[u](e,n)}function d(e){if(!l)for(var n=void 0;(n=e.children[e.children.length-1])&&3===n.type&&" "===n.text;)e.children.pop()}return function(e,n){for(var t,s,i=[],a=n.expectHTML,r=n.isUnaryTag||F,o=n.canBeLeftOpenTag||F,l=0,c=function(){if(t=e,s&&rr(s)){var c=0,p=s.toLowerCase(),h=or[p]||(or[p]=new RegExp("([\\s\\S]*?)(</"+p+"[^>]*>)","i"));k=e.replace(h,(function(e,t,s){return c=s.length,rr(p)||"noscript"===p||(t=t.replace(/<!\--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),pr(p,t)&&(t=t.slice(1)),n.chars&&n.chars(t),""})),l+=e.length-k.length,e=k,u(p,l-c,l)}else{var m=e.indexOf("<");if(0===m){if(ir.test(e)){var v=e.indexOf("--\x3e");if(v>=0)return n.shouldKeepComment&&n.comment&&n.comment(e.substring(4,v),l,l+v+3),d(v+3),"continue"}if(ar.test(e)){var g=e.indexOf("]>");if(g>=0)return d(g+2),"continue"}var f=e.match(sr);if(f)return d(f[0].length),"continue";var _=e.match(tr);if(_){var b=l;return d(_[0].length),u(_[1],b,l),"continue"}var y=function(){var n=e.match(er);if(n){var t={tagName:n[1],attrs:[],start:l};d(n[0].length);for(var s=void 0,i=void 0;!(s=e.match(nr))&&(i=e.match(Qa)||e.match(Xa));)i.start=l,d(i[0].length),i.end=l,t.attrs.push(i);if(s)return t.unarySlash=s[1],d(s[0].length),t.end=l,t}}();if(y)return function(e){var t=e.tagName,l=e.unarySlash;a&&("p"===s&&Wa(t)&&u(s),o(t)&&s===t&&u(t));for(var c=r(t)||!!l,d=e.attrs.length,p=new Array(d),h=0;h<d;h++){var m=e.attrs[h],v=m[3]||m[4]||m[5]||"",g="a"===t&&"href"===m[1]?n.shouldDecodeNewlinesForHref:n.shouldDecodeNewlines;p[h]={name:m[1],value:hr(v,g)}}c||(i.push({tag:t,lowerCasedTag:t.toLowerCase(),attrs:p,start:e.start,end:e.end}),s=t),n.start&&n.start(t,p,c,e.start,e.end)}(y),pr(y.tagName,e)&&d(1),"continue"}var w=void 0,k=void 0,T=void 0;if(m>=0){for(k=e.slice(m);!(tr.test(k)||er.test(k)||ir.test(k)||ar.test(k)||(T=k.indexOf("<",1))<0);)m+=T,k=e.slice(m);w=e.substring(0,m)}m<0&&(w=e),w&&d(w.length),n.chars&&w&&n.chars(w,l-w.length,l)}if(e===t)return n.chars&&n.chars(e),"break"};e&&"break"!==c(););function d(n){l+=n,e=e.substring(n)}function u(e,t,a){var r,o;if(null==t&&(t=l),null==a&&(a=l),e)for(o=e.toLowerCase(),r=i.length-1;r>=0&&i[r].lowerCasedTag!==o;r--);else r=0;if(r>=0){for(var c=i.length-1;c>=r;c--)n.end&&n.end(i[c].tag,t,a);i.length=r,s=r&&i[r-1].tag}else"br"===o?n.start&&n.start(e,[],!0,t,a):"p"===o&&(n.start&&n.start(e,[],!1,t,a),n.end&&n.end(e,t,a))}u()}(e,{warn:mr,expectHTML:n.expectHTML,isUnaryTag:n.isUnaryTag,canBeLeftOpenTag:n.canBeLeftOpenTag,shouldDecodeNewlines:n.shouldDecodeNewlines,shouldDecodeNewlinesForHref:n.shouldDecodeNewlinesForHref,shouldKeepComment:n.comments,outputSourceRange:n.outputSourceRange,start:function(e,a,r,d,u){var p=s&&s.ns||wr(e);J&&"svg"===p&&(a=function(e){for(var n=[],t=0;t<e.length;t++){var s=e[t];qr.test(s.name)||(s.name=s.name.replace(Kr,""),n.push(s))}return n}(a));var h,m=Fr(e,a,s);p&&(m.ns=p),"style"!==(h=m).tag&&("script"!==h.tag||h.attrsMap.type&&"text/javascript"!==h.attrsMap.type)||oe()||(m.forbidden=!0);for(var v=0;v<fr.length;v++)m=fr[v](m,n)||m;o||(function(e){null!=pi(e,"v-pre")&&(e.pre=!0)}(m),m.pre&&(o=!0)),br(m.tag)&&(l=!0),o?function(e){var n=e.attrsList,t=n.length;if(t)for(var s=e.attrs=new Array(t),i=0;i<t;i++)s[i]={name:n[i].name,value:JSON.stringify(n[i].value)},null!=n[i].start&&(s[i].start=n[i].start,s[i].end=n[i].end);else e.pre||(e.plain=!0)}(m):m.processed||(Br(m),function(e){var n=pi(e,"v-if");if(n)e.if=n,Ur(e,{exp:n,block:e});else{null!=pi(e,"v-else")&&(e.else=!0);var t=pi(e,"v-else-if");t&&(e.elseif=t)}}(m),function(e){null!=pi(e,"v-once")&&(e.once=!0)}(m)),t||(t=m),r?c(m):(s=m,i.push(m))},end:function(e,n,t){var a=i[i.length-1];i.length-=1,s=i[i.length-1],c(a)},chars:function(e,n,t){if(s&&(!J||"textarea"!==s.tag||s.attrsMap.placeholder!==e)){var i,c=s.children;if(e=l||e.trim()?"script"===(i=s).tag||"style"===i.tag?e:Or(e):c.length?r?"condense"===r&&Pr.test(e)?"":" ":a?" ":"":""){l||"condense"!==r||(e=e.replace(Dr," "));var d=void 0,u=void 0;!o&&" "!==e&&(d=function(e,n){var t=n?qa(n):Ga;if(t.test(e)){for(var s,i,a,r=[],o=[],l=t.lastIndex=0;s=t.exec(e);){(i=s.index)>l&&(o.push(a=e.slice(l,i)),r.push(JSON.stringify(a)));var c=ni(s[1].trim());r.push("_s(".concat(c,")")),o.push({"@binding":c}),l=i+s[0].length}return l<e.length&&(o.push(a=e.slice(l)),r.push(JSON.stringify(a))),{expression:r.join("+"),tokens:o}}}(e,vr))?u={type:2,expression:d.expression,tokens:d.tokens,text:e}:" "===e&&c.length&&" "===c[c.length-1].text||(u={type:3,text:e}),u&&c.push(u)}}},comment:function(e,n,t){if(s){var i={type:3,text:e,isComment:!0};s.children.push(i)}}}),t}function $r(e,n){var t;!function(e){var n=ui(e,"key");n&&(e.key=n)}(e),e.plain=!e.key&&!e.scopedSlots&&!e.attrsList.length,function(e){var n=ui(e,"ref");n&&(e.ref=n,e.refInFor=function(e){for(var n=e;n;){if(void 0!==n.for)return!0;n=n.parent}return!1}(e))}(e),function(e){var n;"template"===e.tag?(n=pi(e,"scope"),e.slotScope=n||pi(e,"slot-scope")):(n=pi(e,"slot-scope"))&&(e.slotScope=n);var t,s=ui(e,"slot");if(s&&(e.slotTarget='""'===s?'"default"':s,e.slotTargetDynamic=!(!e.attrsMap[":slot"]&&!e.attrsMap["v-bind:slot"]),"template"===e.tag||e.slotScope||ri(e,"slot",s,function(e,n){return e.rawAttrsMap[":"+n]||e.rawAttrsMap["v-bind:"+n]||e.rawAttrsMap[n]}(e,"slot"))),"template"===e.tag){if(t=hi(e,Ir)){var i=jr(t),a=i.name,r=i.dynamic;e.slotTarget=a,e.slotTargetDynamic=r,e.slotScope=t.value||Mr}}else if(t=hi(e,Ir)){var o=e.scopedSlots||(e.scopedSlots={}),l=jr(t),c=l.name,d=(r=l.dynamic,o[c]=Fr("template",[],e));d.slotTarget=c,d.slotTargetDynamic=r,d.children=e.children.filter((function(e){if(!e.slotScope)return e.parent=d,!0})),d.slotScope=t.value||Mr,e.children=[],e.plain=!1}
vendor: 1,701 bytes, line 2
2}(e),"slot"===(t=e).tag&&(t.slotName=ui(t,"name")),function(e){var n;(n=ui(e,"is"))&&(e.component=n),null!=pi(e,"inline-template")&&(e.inlineTemplate=!0)}(e);for(var s=0;s<gr.length;s++)e=gr[s](e,n)||e;return function(e){var n,t,s,i,a,r,o,l,c=e.attrsList;for(n=0,t=c.length;n<t;n++)if(s=i=c[n].name,a=c[n].value,Tr.test(s))if(e.hasBindings=!0,(r=Gr(s.replace(Tr,"")))&&(s=s.replace(Rr,"")),Cr.test(s))s=s.replace(Cr,""),a=ni(a),(l=Ar.test(s))&&(s=s.slice(1,-1)),r&&(r.prop&&!l&&"innerHtml"===(s=A(s))&&(s="innerHTML"),r.camel&&!l&&(s=A(s)),r.sync&&(o=gi(a,"$event"),l?di(e,'"update:"+('.concat(s,")"),o,null,!1,0,c[n],!0):(di(e,"update:".concat(A(s)),o,null,!1,0,c[n]),R(s)!==A(s)&&di(e,"update:".concat(R(s)),o,null,!1,0,c[n])))),r&&r.prop||!e.component&&yr(e.tag,e.attrsMap.type,s)?ai(e,s,a,c[n],l):ri(e,s,a,c[n],l);else if(kr.test(s))s=s.replace(kr,""),(l=Ar.test(s))&&(s=s.slice(1,-1)),di(e,s,a,r,!1,0,c[n],l);else{var d=(s=s.replace(Tr,"")).match(Lr),u=d&&d[1];l=!1,u&&(s=s.slice(0,-(u.length+1)),Ar.test(u)&&(u=u.slice(1,-1),l=!0)),li(e,s,i,a,u,l,r,c[n])}else ri(e,s,JSON.stringify(a),c[n]),!e.component&&"muted"===s&&yr(e.tag,e.attrsMap.type,s)&&ai(e,s,"true",c[n])}(e),e}function Br(e){var n;if(n=pi(e,"v-for")){var t=function(e){var n=e.match(Er);if(n){var t={};t.for=n[2].trim();var s=n[1].trim().replace(Sr,""),i=s.match(xr);return i?(t.alias=s.replace(xr,"").trim(),t.iterator1=i[1].trim(),i[2]&&(t.iterator2=i[2].trim())):t.alias=s,t}}(n);t&&D(e,t)}}function Ur(e,n){e.ifConditions||(e.ifConditions=[]),e.ifConditions.push(n)}function jr(e){var n=e.name.replace(Ir,"");return n||"#"!==e.name[0]&&(n="default"),Ar.test(n)?{name:n.slice(1,-1),dynamic:!0}:{name:'"'.concat(n,'"'),dynamic:!1}
vendor: 12,945 bytes, line 2
2}function Gr(e){var n=e.match(Rr);if(n){var t={};return n.forEach((function(e){t[e.slice(1)]=!0})),t}}function zr(e){for(var n={},t=0,s=e.length;t<s;t++)n[e[t].name]=e[t].value;return n}var qr=/^xmlns:NS\d+/,Kr=/^NS\d+:/;function Vr(e){return Fr(e.tag,e.attrsList.slice(),e.parent)}var Hr,Yr,Wr={preTransformNode:function(e,n){if("input"===e.tag){var t=e.attrsMap;if(!t["v-model"])return;var s=void 0;if((t[":type"]||t["v-bind:type"])&&(s=ui(e,"type")),t.type||s||!t["v-bind"]||(s="(".concat(t["v-bind"],").type")),s){var i=pi(e,"v-if",!0),a=i?"&&(".concat(i,")"):"",r=null!=pi(e,"v-else",!0),o=pi(e,"v-else-if",!0),l=Vr(e);Br(l),oi(l,"type","checkbox"),$r(l,n),l.processed=!0,l.if="(".concat(s,")==='checkbox'")+a,Ur(l,{exp:l.if,block:l});var c=Vr(e);pi(c,"v-for",!0),oi(c,"type","radio"),$r(c,n),Ur(l,{exp:"(".concat(s,")==='radio'")+a,block:c});var d=Vr(e);return pi(d,"v-for",!0),oi(d,":type",s),$r(d,n),Ur(l,{exp:i,block:d}),r?l.else=!0:o&&(l.elseif=o),l}}}},Xr=[Ka,Va,Wr],Qr={expectHTML:!0,modules:Xr,directives:{model:function(e,n,t){var s=n.value,i=n.modifiers,a=e.tag,r=e.attrsMap.type;if(e.component)return vi(e,s,i),!1;if("select"===a)!function(e,n,t){var s=t&&t.number,i='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;'+"return ".concat(s?"_n(val)":"val","})"),a="var $$selectedVal = ".concat(i,";");di(e,"change",a="".concat(a," ").concat(gi(n,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]")),null,!0)}(e,s,i);else if("input"===a&&"checkbox"===r)!function(e,n,t){var s=t&&t.number,i=ui(e,"value")||"null",a=ui(e,"true-value")||"true",r=ui(e,"false-value")||"false";ai(e,"checked","Array.isArray(".concat(n,")")+"?_i(".concat(n,",").concat(i,")>-1")+("true"===a?":(".concat(n,")"):":_q(".concat(n,",").concat(a,")"))),di(e,"change","var $$a=".concat(n,",")+"$$el=$event.target,"+"$$c=$$el.checked?(".concat(a,"):(").concat(r,");")+"if(Array.isArray($$a)){"+"var $$v=".concat(s?"_n("+i+")":i,",")+"$$i=_i($$a,$$v);"+"if($$el.checked){$$i<0&&(".concat(gi(n,"$$a.concat([$$v])"),")}")+"else{$$i>-1&&(".concat(gi(n,"$$a.slice(0,$$i).concat($$a.slice($$i+1))"),")}")+"}else{".concat(gi(n,"$$c"),"}"),null,!0)}(e,s,i);else if("input"===a&&"radio"===r)!function(e,n,t){var s=t&&t.number,i=ui(e,"value")||"null";i=s?"_n(".concat(i,")"):i,ai(e,"checked","_q(".concat(n,",").concat(i,")")),di(e,"change",gi(n,i),null,!0)}(e,s,i);else if("input"===a||"textarea"===a)!function(e,n,t){var s=e.attrsMap.type,i=t||{},a=i.lazy,r=i.number,o=i.trim,l=!a&&"range"!==s,c=a?"change":"range"===s?Ti:"input",d="$event.target.value";o&&(d="$event.target.value.trim()"),r&&(d="_n(".concat(d,")"));var u=gi(n,d);l&&(u="if($event.target.composing)return;".concat(u)),ai(e,"value","(".concat(n,")")),di(e,c,u,null,!0),(o||r)&&di(e,"blur","$forceUpdate()")}(e,s,i);else if(!q.isReservedTag(a))return vi(e,s,i),!1;return!0},text:function(e,n){n.value&&ai(e,"textContent","_s(".concat(n.value,")"),n)},html:function(e,n){n.value&&ai(e,"innerHTML","_s(".concat(n.value,")"),n)}},isPreTag:function(e){return"pre"===e},isUnaryTag:Ha,mustUseProp:os,canBeLeftOpenTag:Ya,isReservedTag:ks,getTagNamespace:Ts,staticKeys:function(e){return e.reduce((function(e,n){return e.concat(n.staticKeys||[])}),[]).join(",")}(Xr)},Jr=x((function(e){return b("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))}));function Zr(e,n){e&&(Hr=Jr(n.staticKeys||""),Yr=n.isReservedTag||F,eo(e),no(e,!1))}function eo(e){if(e.static=function(e){return 2!==e.type&&(3===e.type||!(!e.pre&&(e.hasBindings||e.if||e.for||y(e.tag)||!Yr(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(Hr))))}(e),1===e.type){if(!Yr(e.tag)&&"slot"!==e.tag&&null==e.attrsMap["inline-template"])return;for(var n=0,t=e.children.length;n<t;n++){var s=e.children[n];eo(s),s.static||(e.static=!1)}if(e.ifConditions)for(n=1,t=e.ifConditions.length;n<t;n++){var i=e.ifConditions[n].block;eo(i),i.static||(e.static=!1)}}}function no(e,n){if(1===e.type){if((e.static||e.once)&&(e.staticInFor=n),e.static&&e.children.length&&(1!==e.children.length||3!==e.children[0].type))return void(e.staticRoot=!0);if(e.staticRoot=!1,e.children)for(var t=0,s=e.children.length;t<s;t++)no(e.children[t],n||!!e.for);if(e.ifConditions)for(t=1,s=e.ifConditions.length;t<s;t++)no(e.ifConditions[t].block,n)}}var to=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,so=/\([^)]*?\);*$/,io=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,ao={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},ro={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},oo=function(e){return"if(".concat(e,")return null;")},lo={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:oo("$event.target !== $event.currentTarget"),ctrl:oo("!$event.ctrlKey"),shift:oo("!$event.shiftKey"),alt:oo("!$event.altKey"),meta:oo("!$event.metaKey"),left:oo("'button' in $event && $event.button !== 0"),middle:oo("'button' in $event && $event.button !== 1"),right:oo("'button' in $event && $event.button !== 2")};function co(e,n){var t=n?"nativeOn:":"on:",s="",i="";for(var a in e){var r=uo(e[a]);e[a]&&e[a].dynamic?i+="".concat(a,",").concat(r,","):s+='"'.concat(a,'":').concat(r,",")}return s="{".concat(s.slice(0,-1),"}"),i?t+"_d(".concat(s,",[").concat(i.slice(0,-1),"])"):t+s}function uo(e){if(!e)return"function(){}";if(Array.isArray(e))return"[".concat(e.map((function(e){return uo(e)})).join(","),"]");var n=io.test(e.value),t=to.test(e.value),s=io.test(e.value.replace(so,""));if(e.modifiers){var i="",a="",r=[],o=function(n){if(lo[n])a+=lo[n],ao[n]&&r.push(n);else if("exact"===n){var t=e.modifiers;a+=oo(["ctrl","shift","alt","meta"].filter((function(e){return!t[e]})).map((function(e){return"$event.".concat(e,"Key")})).join("||"))}else r.push(n)};for(var l in e.modifiers)o(l);r.length&&(i+=function(e){return"if(!$event.type.indexOf('key')&&"+"".concat(e.map(po).join("&&"),")return null;")}(r)),a&&(i+=a);var c=n?"return ".concat(e.value,".apply(null, arguments)"):t?"return (".concat(e.value,").apply(null, arguments)"):s?"return ".concat(e.value):e.value;return"function($event){".concat(i).concat(c,"}")}return n||t?e.value:"function($event){".concat(s?"return ".concat(e.value):e.value,"}")}function po(e){var n=parseInt(e,10);if(n)return"$event.keyCode!==".concat(n);var t=ao[e],s=ro[e];return"_k($event.keyCode,"+"".concat(JSON.stringify(e),",")+"".concat(JSON.stringify(t),",")+"$event.key,"+"".concat(JSON.stringify(s))+")"}var ho={on:function(e,n){e.wrapListeners=function(e){return"_g(".concat(e,",").concat(n.value,")")}},bind:function(e,n){e.wrapData=function(t){return"_b(".concat(t,",'").concat(e.tag,"',").concat(n.value,",").concat(n.modifiers&&n.modifiers.prop?"true":"false").concat(n.modifiers&&n.modifiers.sync?",true":"",")")}},cloak:M},mo=function(e){this.options=e,this.warn=e.warn||si,this.transforms=ii(e.modules,"transformCode"),this.dataGenFns=ii(e.modules,"genData"),this.directives=D(D({},ho),e.directives);var n=e.isReservedTag||F;this.maybeComponent=function(e){return!!e.component||!n(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function vo(e,n){var t=new mo(n),s=e?"script"===e.tag?"null":go(e,t):'_c("div")';return{render:"with(this){return ".concat(s,"}"),staticRenderFns:t.staticRenderFns}}function go(e,n){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return fo(e,n);if(e.once&&!e.onceProcessed)return _o(e,n);if(e.for&&!e.forProcessed)return wo(e,n);if(e.if&&!e.ifProcessed)return bo(e,n);if("template"!==e.tag||e.slotTarget||n.pre){if("slot"===e.tag)return function(e,n){var t=e.slotName||'"default"',s=xo(e,n),i="_t(".concat(t).concat(s?",function(){return ".concat(s,"}"):""),a=e.attrs||e.dynamicAttrs?Lo((e.attrs||[]).concat(e.dynamicAttrs||[]).map((function(e){return{name:A(e.name),value:e.value,dynamic:e.dynamic}}))):null,r=e.attrsMap["v-bind"];return!a&&!r||s||(i+=",null"),a&&(i+=",".concat(a)),r&&(i+="".concat(a?"":",null",",").concat(r)),i+")"}(e,n);var t=void 0;if(e.component)t=function(e,n,t){var s=n.inlineTemplate?null:xo(n,t,!0);return"_c(".concat(e,",").concat(ko(n,t)).concat(s?",".concat(s):"",")")}(e.component,e,n);else{var s=void 0,i=n.maybeComponent(e);(!e.plain||e.pre&&i)&&(s=ko(e,n));var a=void 0,r=n.options.bindings;i&&r&&!1!==r.__isScriptSetup&&(a=function(e,n){var t=A(n),s=L(t),i=function(i){return e[n]===i?n:e[t]===i?t:e[s]===i?s:void 0},a=i("setup-const")||i("setup-reactive-const");if(a)return a;var r=i("setup-let")||i("setup-ref")||i("setup-maybe-ref");return r||void 0}(r,e.tag)),a||(a="'".concat(e.tag,"'"));var o=e.inlineTemplate?null:xo(e,n,!0);t="_c(".concat(a).concat(s?",".concat(s):"").concat(o?",".concat(o):"",")")}for(var l=0;l<n.transforms.length;l++)t=n.transforms[l](e,t);return t}return xo(e,n)||"void 0"}function fo(e,n){e.staticProcessed=!0;var t=n.pre;return e.pre&&(n.pre=e.pre),n.staticRenderFns.push("with(this){return ".concat(go(e,n),"}")),n.pre=t,"_m(".concat(n.staticRenderFns.length-1).concat(e.staticInFor?",true":"",")")}function _o(e,n){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return bo(e,n);if(e.staticInFor){for(var t="",s=e.parent;s;){if(s.for){t=s.key;break}s=s.parent}return t?"_o(".concat(go(e,n),",").concat(n.onceId++,",").concat(t,")"):go(e,n)}return fo(e,n)}function bo(e,n,t,s){return e.ifProcessed=!0,yo(e.ifConditions.slice(),n,t,s)}function yo(e,n,t,s){if(!e.length)return s||"_e()";var i=e.shift();return i.exp?"(".concat(i.exp,")?").concat(a(i.block),":").concat(yo(e,n,t,s)):"".concat(a(i.block));function a(e){return t?t(e,n):e.once?_o(e,n):go(e,n)}}function wo(e,n,t,s){var i=e.for,a=e.alias,r=e.iterator1?",".concat(e.iterator1):"",o=e.iterator2?",".concat(e.iterator2):"";return e.forProcessed=!0,"".concat(s||"_l","((").concat(i,"),")+"function(".concat(a).concat(r).concat(o,"){")+"return ".concat((t||go)(e,n))+"})"}function ko(e,n){var t="{",s=function(e,n){var t=e.directives;if(t){var s,i,a,r,o="directives:[",l=!1;for(s=0,i=t.length;s<i;s++){a=t[s],r=!0;var c=n.directives[a.name];c&&(r=!!c(e,a,n.warn)),r&&(l=!0,o+='{name:"'.concat(a.name,'",rawName:"').concat(a.rawName,'"').concat(a.value?",value:(".concat(a.value,"),expression:").concat(JSON.stringify(a.value)):"").concat(a.arg?",arg:".concat(a.isDynamicArg?a.arg:'"'.concat(a.arg,'"')):"").concat(a.modifiers?",modifiers:".concat(JSON.stringify(a.modifiers)):"","},"))}return l?o.slice(0,-1)+"]":void 0}}(e,n);s&&(t+=s+","),e.key&&(t+="key:".concat(e.key,",")),e.ref&&(t+="ref:".concat(e.ref,",")),e.refInFor&&(t+="refInFor:true,"),e.pre&&(t+="pre:true,"),e.component&&(t+='tag:"'.concat(e.tag,'",'));for(var i=0;i<n.dataGenFns.length;i++)t+=n.dataGenFns[i](e);if(e.attrs&&(t+="attrs:".concat(Lo(e.attrs),",")),e.props&&(t+="domProps:".concat(Lo(e.props),",")),e.events&&(t+="".concat(co(e.events,!1),",")),e.nativeEvents&&(t+="".concat(co(e.nativeEvents,!0),",")),e.slotTarget&&!e.slotScope&&(t+="slot:".concat(e.slotTarget,",")),e.scopedSlots&&(t+="".concat(function(e,n,t){var s=e.for||Object.keys(n).some((function(e){var t=n[e];return t.slotTargetDynamic||t.if||t.for||To(t)})),i=!!e.if;if(!s)for(var a=e.parent;a;){if(a.slotScope&&a.slotScope!==Mr||a.for){s=!0;break}a.if&&(i=!0),a=a.parent}var r=Object.keys(n).map((function(e){return Eo(n[e],t)})).join(",");return"scopedSlots:_u([".concat(r,"]").concat(s?",null,true":"").concat(!s&&i?",null,false,".concat(function(e){for(var n=5381,t=e.length;t;)n=33*n^e.charCodeAt(--t);return n>>>0}(r)):"",")")}(e,e.scopedSlots,n),",")),e.model&&(t+="model:{value:".concat(e.model.value,",callback:").concat(e.model.callback,",expression:").concat(e.model.expression,"},")),e.inlineTemplate){var a=function(e,n){var t=e.children[0];if(t&&1===t.type){var s=vo(t,n.options);return"inlineTemplate:{render:function(){".concat(s.render,"},staticRenderFns:[").concat(s.staticRenderFns.map((function(e){return"function(){".concat(e,"}")})).join(","),"]}")}}(e,n);a&&(t+="".concat(a,","))}return t=t.replace(/,$/,"")+"}",e.dynamicAttrs&&(t="_b(".concat(t,',"').concat(e.tag,'",').concat(Lo(e.dynamicAttrs),")")),e.wrapData&&(t=e.wrapData(t)),e.wrapListeners&&(t=e.wrapListeners(t)),t}function To(e){return 1===e.type&&("slot"===e.tag||e.children.some(To))}function Eo(e,n){var t=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!t)return bo(e,n,Eo,"null");if(e.for&&!e.forProcessed)return wo(e,n,Eo);var s=e.slotScope===Mr?"":String(e.slotScope),i="function(".concat(s,"){")+"return ".concat("template"===e.tag?e.if&&t?"(".concat(e.if,")?").concat(xo(e,n)||"undefined",":undefined"):xo(e,n)||"undefined":go(e,n),"}"),a=s?"":",proxy:true";return"{key:".concat(e.slotTarget||'"default"',",fn:").concat(i).c
2oncat(a,"}")}function xo(e,n,t,s,i){var a=e.children;if(a.length){var r=a[0];if(1===a.length&&r.for&&"template"!==r.tag&&"slot"!==r.tag){var o=t?n.maybeComponent(r)?",1":",0":"";return"".concat((s||go)(r,n)).concat(o)}var l=t?function(e,n){for(var t=0,s=0;s<e.length;s++){var i=e[s];if(1===i.type){if(So(i)||i.ifConditions&&i.ifConditions.some((function(e){return So(e.block)}))){t=2;break}(n(i)||i.ifConditions&&i.ifConditions.some((function(e){return n(e.block)})))&&(t=1)}}return t}(a,n.maybeComponent):0,c=i||Ao;return"[".concat(a.map((function(e){return c(e,n)})).join(","),"]").concat(l?",".concat(l):"")}}function So(e){return void 0!==e.for||"template"===e.tag||"slot"===e.tag}function Ao(e,n){return 1===e.type?go(e,n):3===e.type&&e.isComment?function(e){return"_e(".concat(JSON.stringify(e.text),")")}(e):"_v(".concat(2===(t=e).type?t.expression:Co(JSON.stringify(t.text)),")");var t}function Lo(e){for(var n="",t="",s=0;s<e.length;s++){var i=e[s],a=Co(i.value);i.dynamic?t+="".concat(i.name,",").concat(a,","):n+='"'.concat(i.name,'":').concat(a,",")}return n="{".concat(n.slice(0,-1),"}"),t?"_d(".concat(n,",[").concat(t.slice(0,-1),"])"):n}function Co(e){return e.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function Ro(e,n){try{return new Function(e)}catch(t){return n.push({err:t,code:e}),M}}function Io(e){var n=Object.create(null);return function(t,s,i){(s=D({},s)).warn,delete s.warn;var a=s.delimiters?String(s.delimiters)+t:t;if(n[a])return n[a];var r=e(t,s),o={},l=[];return o.render=Ro(r.render,l),o.staticRenderFns=r.staticRenderFns.map((function(e){return Ro(e,l)})),n[a]=o}}new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)");var Po,Do,Oo=(Po=function(e,n){var t=Nr(e.trim(),n);!1!==n.optimize&&Zr(t,n);var s=vo(t,n);return{ast:t,render:s.render,staticRenderFns:s.staticRenderFns}},function(e){function n(n,t){var s=Object.create(e),i=[],a=[];if(t)for(var r in t.modules&&(s.modules=(e.modules||[]).concat(t.modules)),t.directives&&(s.directives=D(Object.create(e.directives||null),t.directives)),t)"modules"!==r&&"directives"!==r&&(s[r]=t[r]);s.warn=function(e,n,t){(t?a:i).push(e)};var o=Po(n.trim(),s);return o.errors=i,o.tips=a,o}return{compile:n,compileToFunctions:Io(n)}}),Mo=Oo(Qr).compileToFunctions;function Fo(e){return(Do=Do||document.createElement("div")).innerHTML=e?'<a href="\n"/>':'<div a="\n"/>',Do.innerHTML.indexOf("&#10;")>0}var No=!!X&&Fo(!1),$o=!!X&&Fo(!0),Bo=x((function(e){var n=Ss(e);return n&&n.innerHTML})),Uo=Jt.prototype.$mount;Jt.prototype.$mount=function(e,n){if((e=e&&Ss(e))===document.body||e===document.documentElement)return this;var t=this.$options;if(!t.render){var s=t.template;if(s)if("string"==typeof s)"#"===s.charAt(0)&&(s=Bo(s));else{if(!s.nodeType)return this;s=s.innerHTML}else e&&(s=function(e){if(e.outerHTML)return e.outerHTML;var n=document.createElement("div");return n.appendChild(e.cloneNode(!0)),n.innerHTML}(e));if(s){var i=Mo(s,{outputSourceRange:!1,shouldDecodeNewlines:No,shouldDecodeNewlinesForHref:$o,delimiters:t.delimiters,comments:t.comments},this),a=i.render,r=i.staticRenderFns;t.render=a,t.staticRenderFns=r}}return Uo.call(this,e,n)},Jt.compile=Mo;var jo=function(){var e,n,t,s,i=this,a=i._self._c;return a("div",{staticClass:"feedback-form"},[a("Popup",{attrs:{"is-show":i.isSuccessModal,type:"decor"},on:{close:function(e){i.isSuccessModal=!1}}},[null!==(e=i.translations)&&void 0!==e&&e.successTitle?a("h3",{staticClass:"popup-title",domProps:{innerHTML:i._s(i.translations.successTitle)}}):i._e(),i._v(" "),null!==(n=i.translations)&&void 0!==n&&n.successText?a("div",{staticClass:"popup-text"},[a("p",[i._v(i._s(i.translations.successText))])]):i._e(),i._v(" "),a("button",{staticClass:"button button_theme_primary popup-button",attrs:{type:"button"},on:{click:function(e){e.preventDefault(),i.isSuccessModal=!1}}},[i._v("\n      "+i._s("ru"===i.language?"Понятно":"Ok")+"\n    ")])]),i._v(" "),a("Popup",{attrs:{"is-show":i.isQualityModal},on:{close:function(e){i.isQualityModal=!1}}},[null!==(t=i.translations)&&void 0!==t&&t.infoPanelTitle?a("h3",{staticClass:"popup-title",domProps:{innerHTML:i._s(i.translations.infoPanelTitle)}}):i._e(),i._v(" "),a("div",{staticClass:"popup-text"},[null!==(s=i.translations)&&void 0!==s&&s.infoPanelText?a("p",[i._v("\n        "+i._s(i.translations.infoPanelText)+"\n      ")]):i._e()]),i._v(" "),a("button",{staticClass:"button button_theme_primary popup-button",attrs:{type:"button"},on:{click:function(e){e.preventDefault(),i.isQualityModal=!1}}},[i._v("\n      "+i._s("ru"===i.language?"Понятно":"Ok")+"\n    ")])]),i._v(" "),a("ValidationObserver",{ref:"form",scopedSlots:i._u([{key:"default",fn:function(e){var n,t,s;return[a("form",{on:{submit:function(n){return n.preventDefault(),e.handleSubmit(i.onSubmit)}}},[a("div",{staticClass:"feedback-form__field"},[a("div",{staticClass:"field-error"},[i._v("\n          "+i._s(i.error)+"\n        ")])]),i._v(" "),a("ValidationProvider",{attrs:{rules:"required|alpha"},scopedSlots:i._u([{key:"default",fn:function(e){var n,t=e.untouched,s=e.invalid,r=e.errors;return[a("div",{staticClass:"feedback-form__field"},[a("input",{directives:[{name:"model",rawName:"v-model",value:i.form.name,expression:"form.name"}],staticClass:"field-input",class:{isInvalid:s&&!t},attrs:{type:"text",name:"name",placeholder:null===(n=i.translations)||void 0===n?void 0:n.placeholder.name,maxlength:"30"},domProps:{value:i.form.name},on:{input:function(e){e.target.composing||i.$set(i.form,"name",e.target.value)}}}),i._v(" "),a("div",{staticClass:"field-error"},[i._v("\n            "+i._s(r[0])+"\n          ")])])]}}],null,!0)}),i._v(" "),a("ValidationProvider",{attrs:{rules:"required|email"},scopedSlots:i._u([{key:"default",fn:function(e){var n,t=e.untouched,s=e.invalid,r=e.errors;return[a("div",{staticClass:"feedback-form__field"},[a("input",{directives:[{name:"model",rawName:"v-model",value:i.form.email,expression:"form.email"}],staticClass:"field-input",class:{isInvalid:s&&!t},attrs:{type:"text",name:"email",placeholder:null===(n=i.translations)||void 0===n?void 0:n.placeholder.email,maxlength:"30"},domProps:{value:i.form.email},on:{input:function(e){e.target.composing||i.$set(i.form,"email",e.target.value)}}}),i._v(" "),a("div",{staticClass:"field-error"},[i._v("\n            "+i._s(r[0])+"\n          ")])])]}}],null,!0)}),i._v(" "),a("ValidationProvider",{attrs:{rules:"required"},scopedSlots:i._u([{key:"default",fn:function(e){var n,t=e.untouched,s=e.invalid,r=e.errors;return[a("div",{staticClass:"feedback-form__field"},[a("input",{directives:[{name:"model",rawName:"v-model",value:i.form.phone,expression:"form.phone"},{name:"mask",rawName:"v-mask",value:"+7(###)-###-####",expression:"'+7(###)-###-####'"}],staticClass:"field-input",class:{isInvalid:s&&!t},attrs:{type:"tel",name:"phone",placeholder:null===(n=i.translations)||void 0===n?void 0:n.placeholder.phone},domProps:{value:i.form.phone},on:{input:function(e){e.target.composing||i.$set(i.form,"phone",e.target.value)}}}),i._v(" "),a("div",{staticClass:"field-error"},[i._v("\n            "+i._s(r[0])+"\n          ")])])]}}],null,!0)}),i._v(" "),a("ValidationProvider",{attrs:{rules:"required"},scopedSlots:i._u([{key:"default",fn:function(e){var n,t=e.errors;return[a("div",{staticClass:"feedback-form__field"},[a("VSelect",{staticClass:"field-select",class:{isInvalid:t.length},attrs:{name:"theme",options:i.options,label:"caption",placeholder:null===(n=i.translations)||void 0===n?void 0:n.placeholder.theme},scopedSlots:i._u([{key:"option",fn:function(e){return[i._v("\n              "+i._s(e.caption)+"\n              "),e.info?a("span",{staticClass:"info-toggler",on:{click:function(e){return e.stopPropagation(),i.showModalQuality.apply(null,arguments)}}}):i._e()]}}],null,!0),model:{value:i.form.theme,callback:function(e){i.$set(i.form,"theme",e)},expression:"form.theme"}}),i._v(" "),a("div",{staticClass:"field-error"},[i._v("\n            "+i._s(t[0])+"\n          ")])],1)]}}],null,!0)}),i._v(" "),a("div",{staticClass:"feedback-form__field"},[a("textarea",{directives:[{name:"model",rawName:"v-model",value:i.form.message,expression:"form.message"}],staticClass:"field-input field-input_textarea",attrs:{name:"message",rows:"4",cols:"30",placeholder:null===(n=i.translations)||void 0===n?void 0:n.placeholder.message},domProps:{value:i.form.message},on:{input:function(e){e.target.composing||i.$set(i.form,"message",e.target.value)}}})]),i._v(" "),a("ValidationProvider",{attrs:{rules:"accepted",vid:"isAcceptedRules"},scopedSlots:i._u([{key:"default",fn:function(e){var n=e.untouched,t=e.invalid,s=e.errors;return[a("div",{staticClass:"feedback-form__field feedback-form__checkbox feedback-form__policy"},[a("label",{staticClass:"checkbox-label"},[a("input",{directives:[{name:"model",rawName:"v-model",value:i.form.isAcceptedRules,expression:"form.isAcceptedRules"}],staticClass:"checkbox-input",class:{isInvalid:t&&!n},attrs:{type:"checkbox",name:"isAcceptedRules"},domProps:{checked:Array.isArray(i.form.isAcceptedRules)?i._i(i.form.isAcceptedRules,null)>-1:i.form.isAcceptedRules},on:{change:function(e){var n=i.form.isAcceptedRules,t=e.target,s=!!t.checked;if(Array.isArray(n)){var a=i._i(n,null);t.checked?a<0&&i.$set(i.form,"isAcceptedRules",n.concat([null])):a>-1&&i.$set(i.form,"isAcceptedRules",n.slice(0,a).concat(n.slice(a+1)))}else i.$set(i.form,"isAcceptedRules",s)}}}),i._v(" "),a("span",{staticClass:"checkbox-custom"}),i._v(" "),a("span",{staticClass:"checkbox-text"},[i._v("\n              Я даю "),a("a",{attrs:{href:"/personal-data-processing-policy/"}},[i._v("согласие на обработку своих персональных данных")]),i._v('\n              на основании Федерального закона №152-ФЗ "О персональных данных" от 27.07.2006 в соответствии с\n              '),a("a",{attrs:{href:"/policy/"}},[i._v("Политикой конфиденциальности")]),i._v(".\n            ")])]),i._v(" "),a("div",{staticClass:"field-error feedback-form__policy-error"},[i._v("\n            "+i._s(s[0])+"\n          ")])])]}}],null,!0)}),i._v(" "),a("div",{staticClass:"feedback-form__actions"},[a("button",{staticClass:"button button_theme_primary",attrs:{disabled:e.invalid||!i.form.isAcceptedRules,type:"submit"}},[i._v("\n          "+i._s(null===(t=i.translations)||void 0===t?void 0:t.btnText)+"\n        ")]),i._v(" "),a("p",{staticClass:"feedback-form__text",domProps:{innerHTML:i._s(null===(s=i.translations)||void 0===s?void 0:s.rules)}}
2)])],1)]}}])})],1)};jo._withStripped=!0;var Go=function(){var e=this,n=e._self._c;return n("Teleport",{attrs:{to:"body"}},[n("div",{staticClass:"popup",class:e.classNames},[n("div",{staticClass:"popup__wrapper"},[n("div",{staticClass:"popup__content"},[n("button",{staticClass:"popup__close",attrs:{type:"button"},on:{click:function(n){return n.preventDefault(),e.close.apply(null,arguments)}}},[n("svg",{staticClass:"svg-icon popup__close-icon",attrs:{"aria-hidden":"true"}},[n("use",{attrs:{"xlink:href":"/assets/images/sprites/sprite.svg#icon-close"}})])]),e._v(" "),e._t("default")],2)])])])};Go._withStripped=!0;var zo=t(1372),qo={name:"teleport",props:{to:{type:String,required:!0},where:{type:String,default:"after"},disabled:Boolean},data:function(){return{nodes:[],waiting:!1,observer:null,parent:null}},watch:{to:"maybeMove",where:"maybeMove",disabled:function(e){var n=this;e?(this.disable(),this.$nextTick((function(){n.teardownObserver()}))):(this.bootObserver(),this.move())}},mounted:function(){this.nodes=Array.from(this.$el.childNodes),this.disabled||this.bootObserver(),this.maybeMove()},beforeDestroy:function(){this.nodes=this.getComponentChildrenNode(),this.disable(),this.teardownObserver()},computed:{classes:function(){return this.disabled?["teleporter"]:["teleporter","hidden"]}},methods:{maybeMove:function(){this.disabled||this.move()},move:function(){if(this.waiting=!1,this.parent=document.querySelector(this.to),!this.parent)return this.disable(),void(this.waiting=!0);"before"===this.where?this.parent.prepend(this.getFragment()):this.parent.appendChild(this.getFragment())},disable:function(){this.$el.appendChild(this.getFragment()),this.parent=null},getFragment:function(){var e=document.createDocumentFragment();return this.nodes.forEach((function(n){return e.appendChild(n)})),e},onMutations:function(e){for(var n=this,t=!1,s=0;s<e.length;s++){var i=e[s],a=Array.from(i.addedNodes).filter((function(e){return!n.nodes.includes(e)}));Array.from(i.removedNodes).includes(this.parent)?(this.disable(),this.waiting=!this.disabled):this.waiting&&a.length>0&&(t=!0)}t&&this.move()},bootObserver:function(){var e=this;this.observer||(this.observer=new MutationObserver((function(n){return e.onMutations(n)})),this.observer.observe(document.body,{childList:!0,subtree:!0,attributes:!1,characterData:!1}),this.childObserver||(this.childObserver=new MutationObserver((function(n){n.find((function(n){return n.target===e.$el}))&&(e.nodes.forEach((function(e){return e.parentNode&&e.parentNode.removeChild(e)})),e.nodes=e.getComponentChildrenNode(),e.maybeMove())})),this.childObserver.observe(this.$el,{childList:!0,subtree:!1,attributes:!1,characterData:!1})))},teardownObserver:function(){this.observer&&(this.observer.disconnect(),this.observer=null),this.childObserver&&(this.childObserver.disconnect(),this.childObserver=null)},getComponentChildrenNode:function(){return this.$vnode.componentOptions.children.map((function(e){return e.elm})).filter((function(e){return e}))}}};function Ko(e,n,t,s,i,a,r,o,l,c){"boolean"!=typeof r&&(l=o,o=r,r=!1);var d,u="function"==typeof t?t.options:t;if(e&&e.render&&(u.render=e.render,u.staticRenderFns=e.staticRenderFns,u._compiled=!0,i&&(u.functional=!0)),s&&(u._scopeId=s),a?(d=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),n&&n.call(this,l(e)),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=d):n&&(d=r?function(e){n.call(this,c(e,this.$root.$options.shadowRoot))}:function(e){n.call(this,o(e))}),d)if(u.functional){var p=u.render;u.render=function(e,n){return d.call(n),p(e,n)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,d):[d]}return t}var Vo,Ho="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());function Yo(e){return function(e,n){return function(e,n){var t=Ho?n.media||"default":e,s=Wo[t]||(Wo[t]={ids:new Set,styles:[]});if(!s.ids.has(e)){s.ids.add(e);var i=n.source;if(n.map&&(i+="\n/*# sourceURL="+n.map.sources[0]+" */",i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(n.map))))+" */"),s.element||(s.element=document.createElement("style"),s.element.type="text/css",n.media&&s.element.setAttribute("media",n.media),void 0===Vo&&(Vo=document.head||document.getElementsByTagName("head")[0]),Vo.appendChild(s.element)),"styleSheet"in s.element)s.styles.push(i),s.element.styleSheet.cssText=s.styles.filter(
2Boolean).join("\n");else{var a=s.ids.size-1,r=document.createTextNode(i),o=s.element.childNodes;o[a]&&s.element.removeChild(o[a]),o.length?s.element.insertBefore(r,o[a]):s.element.appendChild(r)}}}(e,n)}}var Wo={},Xo=qo,Qo=function(){var e=this,n=e.$createElement;return(e._self._c||n)("div",{class:e.classes},[e._t("default")],2)};Qo._withStripped=!0;var Jo=Ko({render:Qo,staticRenderFns:[]},(function(e){e&&e("data-v-50f4b45b_0",{source:".hidden[data-v-50f4b45b] {\n  visibility: hidden;\n  display: none;\n}\n\n/*# sourceMappingURL=Teleport.vue.map */",map:{version:3,sources:["/home/shodan/Projects/vue2-teleport/src/Teleport.vue","Teleport.vue"],names:[],mappings:"AA2LA;EACA,kBAAA;EACA,aAAA;AC1LA;;AAEA,uCAAuC",file:"Teleport.vue",sourcesContent:["<template>\n  <div :class=\"classes\">\n    <slot/>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: 'teleport',\n  props: {\n    to: {\n      type: String,\n      required: true,\n    },\n    where: {\n      type: String,\n      default: 'after',\n    },\n    disabled: Boolean,\n  },\n  data() {\n    return {\n      nodes: [],\n      waiting: false,\n      observer: null,\n      parent: null,\n    };\n  },\n  watch: {\n    to: 'maybeMove',\n    where: 'maybeMove',\n    disabled(value) {\n      if (value) {\n        this.disable();\n        // Ensure all event done.\n        this.$nextTick(() => {\n          this.teardownObserver();\n        });\n      } else {\n        this.bootObserver();\n        this.move();\n      }\n    },\n  },\n  mounted() {\n    // Store a reference to the nodes\n    this.nodes = Array.from(this.$el.childNodes);\n\n    if (!this.disabled) {\n      this.bootObserver();\n    }\n\n    // Move slot content to target\n    this.maybeMove();\n  },\n  beforeDestroy() {\n    // Fix nodes reference\n    this.nodes = this.getComponentChildrenNode();\n\n    // Move back\n    this.disable();\n\n    // Stop observing\n    this.teardownObserver();\n  },\n  computed: {\n    classes() {\n      if (this.disabled) {\n        return ['teleporter'];\n      }\n\n      return ['teleporter', 'hidden'];\n    },\n  },\n  methods: {\n    maybeMove() {\n      if (!this.disabled) {\n        this.move();\n      }\n    },\n    move() {\n      this.waiting = false;\n\n      this.parent = document.querySelector(this.to);\n\n      if (!this.parent) {\n        this.disable();\n\n        this.waiting = true;\n\n        return;\n      }\n\n      if (this.where === 'before') {\n        this.parent.prepend(this.getFragment());\n      } else {\n        this.parent.appendChild(this.getFragment());\n      }\n    },\n    disable() {\n      this.$el.appendChild(this.getFragment());\n      this.parent = null;\n    },\n    // Using a fragment is faster because it'll trigger only a single reflow\n    // See https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment\n    getFragment() {\n      const fragment = document.createDocumentFragment();\n\n      this.nodes.forEach(node => fragment.appendChild(node));\n\n      return fragment;\n    },\n    onMutations(mutations) {\n      // Makes sure the move operation is only done once\n      let shouldMove = false;\n\n      for (let i = 0; i < mutations.length; i++) {\n        const mutation = mutations[i];\n        const filteredAddedNodes = Array.from(mutation.addedNodes).filter(node => !this.nodes.includes(node));\n\n        if (Array.from(mutation.removedNodes).includes(this.parent)) {\n          this.disable();\n          this.waiting = !this.disabled;\n        } else if (this.waiting && filteredAddedNodes.length > 0) {\n          shouldMove = true;\n        }\n      }\n\n      if (shouldMove) {\n        this.move();\n      }\n    },\n    bootObserver() {\n      if (this.observer) {\n        return;\n      }\n\n      this.observer = new MutationObserver(mutations => this.onMutations(mutations));\n\n      this.observer.observe(document.body, {\n        childList: true,\n        subtree: true,\n        attributes: false,\n        characterData: false,\n      });\n\n      if (this.childObserver) {\n        return;\n      }\n      // watch childNodes change\n      this.childObserver = new MutationObserver(mutations =>
2 {\n        const childChangeRecord = mutations.find(i => i.target === this.$el);\n        if (childChangeRecord) {\n          // Remove old nodes before update position.\n          this.nodes.forEach((node) => node.parentNode && node.parentNode.removeChild(node));\n          this.nodes = this.getComponentChildrenNode();\n          this.maybeMove();\n        }\n      });\n\n      this.childObserver.observe(this.$el, {\n        childList: true,\n        subtree: false,\n        attributes: false,\n        characterData: false,\n      });\n    },\n    teardownObserver() {\n      if (this.observer) {\n        this.observer.disconnect();\n        this.observer = null;\n      }\n      if (this.childObserver) {\n        this.childObserver.disconnect();\n        this.childObserver = null;\n      }\n    },\n    getComponentChildrenNode() {\n      return this.$vnode.componentOptions.children\n        .map((i) => i.elm)\n        .filter((i) => i);\n    },\n  },\n};\n<\/script>\n\n<style scoped lang=\"scss\">\n.hidden {\n  visibility: hidden;\n  display: none;\n}\n</style>\n",".hidden {\n  visibility: hidden;\n  display: none;\n}\n\n/*# sourceMappingURL=Teleport.vue.map */"]},media:void 0})}),Xo,"data-v-50f4b45b",!1,void 0,!1,Yo,void 0,void 0),Zo={install:function e(n){e.installed||(e.installed=!0,n.component("Teleport",Jo))}},el=null;function nl(e,n,t,s,i,a,r,o){var l,c="function"==typeof e?e.options:e;if(n&&(c.render=n,c.staticRenderFns=t,c._compiled=!0),s&&(c.functional=!0),a&&(c._scopeId="data-v-"+a),r?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(r)},c._ssrRegister=l):i&&(l=o?function(){i.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:i),l)if(c.functional){c._injectStyles=l;var d=c.render;c.render=function(e,n){return l.call(n),d(e,n)}}else{var u=c.beforeCreate;c.beforeCreate=u?[].concat(u,l):[l]}return{exports:e,options:c}}"undefined"!=typeof window?el=window.Vue:void 0!==t.g&&(el=t.g.Vue),el&&el.use(Zo);const tl=nl({name:"Popup",components:{Teleport:Jo},props:{isShow:{type:Boolean,default:!1},type:{type:String,default:"ordinary",validator:function(e){return["ordinary","decor","gallery"].includes(e)}}},emits:["close"],computed:{classNames:function(){return[this.isShow&&"isPopupActive",this.type&&"popup_type_".concat(this.type)]}},watch:{isShow:{immediate:!0,handler:function(e){e?(0,zo.s2)():(0,zo.Tl)()}}},beforeUnmount:function(){this.isShow&&(0,zo.Tl)()},methods:{close:function(){this.$emit("close")}}},Go,[],!1,null,null,null).exports;function sl(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,s)}return t}function il(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?sl(Object(t),!0).forEach((function(n){rl(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):sl(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function al(e){return al="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},al(e)}function rl(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}var ol="_",ll="function",cl=[];function dl(e){return Array.isArray&&Array.isArray(e)||e instanceof Array}var ul="[]",pl=[],hl="";function ml(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:hl,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:pl,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!dl(n)){if(al(n)!==ll)throw new Error("Text-mask:conformToMask; The mask property must be an array.");n=function(e){for(var n,t=[];-1!==(n=e.indexOf(ul));)t.push(n),e.splice(n,1);return{maskWithoutCaretTraps:e,indexes:t}}(n=n(e,t)).maskWithoutCaretTraps}var s=t.guide,i=void 0===s||s,a=t.previousConformedValue,r=void 0===a?hl:a,o=t.placeholderChar,l=void 0===o?ol:o,c=t.placeholder,d=void 0===c?function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:cl,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ol;if(!dl(e))throw new Error("Text-mask:convertMaskToPlaceholder; The mask property must be an array.");if(-1!==e.indexOf(n))throw new Error("Placeholder character must not be used as part of the mask. Please specify a character that is not present in your mask as your placeholder character.\n\n"+"The placeholder character that was received is: ".concat(JSON.stringify(n),"\n\n")+"The mask that was received is: ".concat(JSON.stringify(e)));return e.map((function(e){return e instanceof RegExp?n:e})).join("")}(n,l):c,u=t.currentCaretPosition,p=t.keepCharPositions,h=!1===i&&void 0!==r,m=e.length,v=r.length,g=d.length,f=n.length,_=m-v,b=_>0,y=u+(b?-_:0),w=y+Math.abs(_);if(!0===p&&!b){for(var k=hl,T=y;T<w;T++)d[T]===l&&(k+=l);e=e.slice(0,y)+k+e.slice(y,m)}for(var E=e.split(hl).map((function(e,n){return{char:e,isNew:n>=y&&n<w}})),x=m-1;x>=0;x--){var S=E[x].char;S!==l&&S===d[x>
2=y&&v===f?x-_:x]&&E.splice(x,1)}var A=hl,L=!1;e:for(var C=0;C<g;C++){var R=d[C];if(R===l){if(E.length>0)for(;E.length>0;){var I=E.shift(),P=I.char,D=I.isNew;if(P===l&&!0!==h){A+=l;continue e}if(n[C].test(P)){if(!0===p&&!1!==D&&r!==hl&&!1!==i&&b){for(var O=E.length,M=null,F=0;F<O;F++){var N=E[F];if(N.char!==l&&!1===N.isNew)break;if(N.char===l){M=F;break}}null!==M?(A+=P,E.splice(M,1)):C--}else A+=P;continue e}L=!0}!1===h&&(A+=d.substr(C,g));break}A+=R}if(h&&!1===b){for(var $=null,B=0;B<A.length;B++)d[B]===l&&($=B);A=null!==$?A.substr(0,$+1):hl}return{conformedValue:A,meta:{someCharsRejected:L}}}var vl={__nextCharOptional__:!0},gl={"#":/\d/,A:/[a-z]/i,N:/[a-z0-9]/i,"?":vl,X:/./},fl=function(e){return function(e){var n=e.lastIndexOf("/");return new RegExp(e.slice(1,n),e.slice(n+1))}(e.toString().replace(/.(\/)[gmiyus]{0,6}$/,(function(e){return e.replace("/","?/")})))},_l=function(e){return e instanceof RegExp?e:function(e){return new RegExp("/[".concat(function(e){return"[\\^$.|?*+()".indexOf(e)>-1?"\\".concat(e):e}(e),"]/"))}(e)};function bl(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:gl;return e.map((function(e,t,s){var i=n[e]||e,a=s[t-1],r=n[a]||a;return i===vl?null:r===vl?fl(_l(i)):i})).filter(Boolean)}var yl=function(e,n){var t=document.createEvent("HTMLEvents");t.initEvent(n,!0,!0),e.dispatchEvent(t)},wl=function(e){return e instanceof HTMLInputElement?e:e.querySelector("input")||e},kl=function(e){return"function"==typeof e},Tl=function(e){return"string"==typeof e},El=function(e){return e instanceof RegExp};function xl(e,n){return Array.isArray(e)?function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:gl;return bl(e.map((function(e){return e instanceof RegExp?e:"string"==typeof e?e.split(""):null})).filter(Boolean).reduce((function(e,n){return e.concat(n)}),[]),n)}(e,n):kl(e)?e:Tl(e)&&e.length>0?function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:gl;return bl(e.split(""),n)}(e,n):e}function Sl(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:gl;return null===e||Array.isArray(e)||"object"!==al(e)?n:Object.keys(e).reduce((function(n,t){var s=e[t];return null===s||s instanceof RegExp?il(il({},n),{},rl({},t,s)):n}),n)}var Al=function(){var e=new Map,n={previousValue:"",mask:[]};function t(t){return e.get(t)||il({},n)}return{partiallyUpdate:function(n,s){e.set(n,il(il({},t(n)),s))},remove:function(n){e.delete(n)},get:t}}();function Ll(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],t=e.value,s=Al.get(e),i=s.previousValue,a=s.mask,r=t!==i,o=t.length>i.length;if((n||t&&r&&o)&&a){var l=ml(t,a,{guide:!1}).conformedValue;e.value=l,function(e){yl(e,"input")}(e)}Al.partiallyUpdate(e,{previousValue:t})}function Cl(e,n,t){var s=xl(n,t);Al.partiallyUpdate(e,{mask:s})}function Rl(e){return(Array.isArray(e)?e:[e]).filter((function(e){return Tl(e)||El(e)})).toString()}var Il=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=Sl(e&&e.placeholders);return{bind:function(e,t){var s=t.value;Cl(e=wl(e),s,n),Ll(e)},componentUpdated:function(e,t){var s=t.value,i=t.oldValue;e=wl(e);var a=kl(s)||Rl(i)!==Rl(s);a&&Cl(e,s,n),Ll(e,a)},unbind:function(e){e=wl(e),Al.remove(e)}}}();!function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=Sl(e&&e.placeholders)}();var Pl=function(){return Pl=Object.assign||function(e){for(var n,t=1,s=arguments.length;t<s;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e},Pl.apply(this,arguments)};function Dl(e,n,t,s){return new(t||(t=Promise))((function(i,a){function r(e){try{l(s.next(e))}catch(e){a(e)}}function o(e){try{l(s.throw(e))}catch(e){a(e)}}function l(e){var n;e.done?i(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(r,o)}l((s=s.apply(e,n||[])).next())}))}function Ol(e,n){var t,s,i,a,r={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return a={next:o(0),throw:o(1),return:o(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;
2function o(a){return function(o){return function(a){if(t)throw new TypeError("Generator is already executing.");for(;r;)try{if(t=1,s&&(i=2&a[0]?s.return:a[0]?s.throw||((i=s.return)&&i.call(s),0):s.next)&&!(i=i.call(s,a[1])).done)return i;switch(s=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return r.label++,{value:a[1],done:!1};case 5:r.label++,s=a[1],a=[0];continue;case 7:a=r.ops.pop(),r.trys.pop();continue;default:if(!((i=(i=r.trys).length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){r=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){r.label=a[1];break}if(6===a[0]&&r.label<i[1]){r.label=i[1],i=a;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(a);break}i[2]&&r.ops.pop(),r.trys.pop();continue}a=n.call(e,r)}catch(e){a=[6,e],s=0}finally{t=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,o])}}}function Ml(){for(var e=0,n=0,t=arguments.length;n<t;n++)e+=arguments[n].length;var s=Array(e),i=0;for(n=0;n<t;n++)for(var a=arguments[n],r=0,o=a.length;r<o;r++,i++)s[i]=a[r];return s}function Fl(e){return e!=e}function Nl(e){return null==e}var $l=function(e){return null!==e&&e&&"object"==typeof e&&!Array.isArray(e)};function Bl(e){return""!==e&&!Nl(e)}function Ul(e){return"function"==typeof e}function jl(e){return Ul(e)&&!!e.__locatorRef}function Gl(e,n){var t=Array.isArray(e)?e:ql(e);if(Ul(t.findIndex))return t.findIndex(n);for(var s=0;s<t.length;s++)if(n(t[s],s))return s;return-1}function zl(e,n){return-1!==e.indexOf(n)}function ql(e){return Ul(Array.from)?Array.from(e):function(e){for(var n=[],t=e.length,s=0;s<t;s++)n.push(e[s]);return n}(e)}function Kl(e){return Ul(Object.values)?Object.values(e):Object.keys(e).map((function(n){return e[n]}))}function Vl(e,n){return Object.keys(n).forEach((function(t){if($l(n[t]))return e[t]||(e[t]={}),void Vl(e[t],n[t]);e[t]=n[t]})),e}function Hl(e,n,t){return void 0===n&&(n=0),void 0===t&&(t={cancelled:!1}),0===n?e:function(){for(var i=[],a=0;a<arguments.length;a++)i[a]=arguments[a];clearTimeout(s),s=setTimeout((function(){s=void 0,t.cancelled||e.apply(void 0,i)}),n)};var s}function Yl(e,n){return e.replace(/{([^}]+)}/g,(function(e,t){return t in n?n[t]:"{"+t+"}"}))}var Wl={},Xl=function(){function e(){}return e.extend=function(e,n){var t=function(e){var n;return(null===(n=e.params)||void 0===n?void 0:n.length)&&(e.params=e.params.map((function(e){return"string"==typeof e?{name:e}:e}))),e}(n);Wl[e]?Wl[e]=Vl(Wl[e],n):Wl[e]=Pl({lazy:!1,computesRequired:!1},t)},e.isLazy=function(e){var n;return!!(null===(n=Wl[e])||void 0===n?void 0:n.lazy)},e.isRequireRule=function(e){var n;return!!(null===(n=Wl[e])||void 0===n?void 0:n.computesRequired)},e.getRuleDefinition=function(e){return Wl[e]},e}();function Ql(e,n){!function(e,n){if(!Ul(n)&&!Ul(n.validate)&&!Xl.getRuleDefinition(e))throw new Error("Extension Error: The validator '"+e+"' must be a function or have a 'validate' method.")}(e,n),"object"!=typeof n?Xl.extend(e,{validate:n}):Xl.extend(e,n)}var Jl=Pl({},{defaultMessage:"{_field_} is not valid.",skipOptional:!0,classes:{touched:"touched",untouched:"untouched",valid:"valid",invalid:"invalid",pristine:"pristine",dirty:"dirty"},bails:!0,mode:"aggressive",useConstraintAttrs:!0}),Zl=function(){return Jl};function ec(e){var n={};return Object.defineProperty(n,"_$$isNormalized",{value:!0,writable:!1,enumerable:!1,configurable:!1}),e?$l(e)&&e._$$isNormalized?e:$l(e)?Object.keys(e).reduce((function(n,t){var s;return s=!0===e[t]?[]:Array.isArray(e[t])||$l(e[t])?e[t]:[e[t]],!1!==e[t]&&(n[t]=nc(t,s)),n}),n):"string"!=typeof e?(console.warn("[vee-validate] rules must be either a string or an object."),n):e.split("|").reduce((function(e,n){var t=tc(n);return t.name?(e[t.name]=nc(t.name,t.params),e):e}),n):n}function nc(e,n){var t=Xl.getRuleDefinition(e);if(!t)return n;var s,i,a={};if(!t.params&&!Array.isArray(n))throw new Error("You provided an object params to a rule that has no defined schema.");if(Array.isArray(n)&&!t.params)return n;s=!t.params||t.params.length<n.length&&Array.isArray(n)?n.map((function(e,n){var s,a=null===(s=t.params)||void 0===s?void 0:s[n];return i=a||i,a||(a=i),a})):t.params;for(var r=0;r<s.length;r++){var o=s[r],l=o.default;
2Array.isArray(n)?r in n&&(l=n[r]):o.name in n?l=n[o.name]:1===s.length&&(l=n),o.isTarget&&(l=sc(l,o.cast)),"string"==typeof l&&"@"===l[0]&&(l=sc(l.slice(1),o.cast)),!jl(l)&&o.cast&&(l=o.cast(l)),a[o.name]?(a[o.name]=Array.isArray(a[o.name])?a[o.name]:[a[o.name]],a[o.name].push(l)):a[o.name]=l}return a}var tc=function(e){var n=[],t=e.split(":")[0];return zl(e,":")&&(n=e.split(":").slice(1).join(":").split(",")),{name:t,params:n}};function sc(e,n){var t=function(t){var s=t[e];return n?n(s):s};return t.__locatorRef=e,t}function ic(e,n,t){return void 0===t&&(t={}),Dl(this,void 0,void 0,(function(){var s,i,a,r,o,l;return Ol(this,(function(c){switch(c.label){case 0:return s=null==t?void 0:t.bails,i=null==t?void 0:t.skipIfEmpty,[4,ac({name:(null==t?void 0:t.name)||"{field}",rules:ec(n),bails:null==s||s,skipIfEmpty:null==i||i,forceRequired:!1,crossTable:(null==t?void 0:t.values)||{},names:(null==t?void 0:t.names)||{},customMessages:(null==t?void 0:t.customMessages)||{}},e,t)];case 1:return a=c.sent(),r=[],o={},l={},a.errors.forEach((function(e){var n=e.msg();r.push(n),o[e.rule]=n,l[e.rule]=e.msg})),[2,{valid:a.valid,required:a.required,errors:r,failedRules:o,regenerateMap:l}]}}))}))}function ac(e,n,t){var s=(void 0===t?{}:t).isInitial,i=void 0!==s&&s;return Dl(this,void 0,void 0,(function(){var t,s,a,r,o,l,c,d,u;return Ol(this,(function(p){switch(p.label){case 0:return[4,rc(e,n)];case 1:if(t=p.sent(),s=t.shouldSkip,a=t.required,r=t.errors,s)return[2,{valid:!r.length,required:a,errors:r}];o=Object.keys(e.rules).filter((function(e){return!Xl.isRequireRule(e)})),l=o.length,c=0,p.label=2;case 2:return c<l?i&&Xl.isLazy(o[c])?[3,4]:(d=o[c],[4,oc(e,n,{name:d,params:e.rules[d]})]):[3,5];case 3:if(!(u=p.sent()).valid&&u.error&&(r.push(u.error),e.bails))return[2,{valid:!1,required:a,errors:r}];p.label=4;case 4:return c++,[3,2];case 5:return[2,{valid:!r.length,required:a,errors:r}]}}))}))}function rc(e,n){return Dl(this,void 0,void 0,(function(){var t,s,i,a,r,o,l,c,d;return Ol(this,(function(u){switch(u.label){case 0:t=Object.keys(e.rules).filter(Xl.isRequireRule),s=t.length,i=[],a=Nl(n)||""===n||(p=n,Array.isArray(p)&&0===p.length),r=a&&e.skipIfEmpty,l=0,u.label=1;case 1:return l<s?(c=t[l],[4,oc(e,n,{name:c,params:e.rules[c]})]):[3,4];case 2:if(d=u.sent(),!$l(d))throw new Error("Require rules has to return an object (see docs)");if(void 0!==d.required&&(o=d.required),!d.valid&&d.error&&(i.push(d.error),e.bails))return[2,{shouldSkip:!0,required:d.required,errors:i}];u.label=3;case 3:return l++,[3,1];case 4:return a&&!o&&!e.skipIfEmpty||!e.bails&&!r?[2,{shouldSkip:!1,required:o,errors:i}]:[2,{shouldSkip:!o&&a,required:o,errors:i}]}var p}))}))}function oc(e,n,t){return Dl(this,void 0,void 0,(function(){var s,i,a,r,o;return Ol(this,(function(l){switch(l.label){case 0:if(!(s=Xl.getRuleDefinition(t.name))||!s.validate)throw new Error("No such validator '"+t.name+"' exists.");return i=s.castValue?s.castValue(n):n,a=function(e,n){if(Array.isArray(e))return e.map((function(e){var t="string"==typeof e&&"@"===e[0]?e.slice(1):e;return t in n?n[t]:e}));var t={};return Object.keys(e).forEach((function(s){t[s]=function(e){return jl(e)?e(n):e}(e[s])})),t}(t.params,e.crossTable),[4,s.validate(i,a)];case 1:return"string"==typeof(r=l.sent())?(o=Pl(Pl({},a||{}),{_field_:e.name,_value_:n,_rule_:t.name}),[2,{valid:!1,error:{rule:t.name,msg:function(){return Yl(r,o)}}}]):($l(r)||(r={valid:r}),[2,{valid:r.valid,required:r.required,error:r.valid?void 0:lc(e,n,s,t.name,a)}])}}))}))}function lc(e,n,t,s,i){var a,r=null!==(a=e.customMessages[s])&&void 0!==a?a:t.message,o=function(e,n,t){var s=n.params;if(!s)return{};var i=s.filter((function(e){return e.isTarget})).length;if(i<=0)return{};var a={},r=e.rules[t];!Array.isArray(r)&&$l(r)&&(r=s.map((function(e){return r[e.name]})));for(var o=0;o<s.length;o++){var l=s[o],c=r[o];if(jl(c)){c=c.__locatorRef;var d=e.names[c]||c;a[l.name]=d,a["_"+l.name+"_"]=e.crossTable[c]}}return a}(e,t,s),l=function(e,n,t,s){var i={},a=e.rules[t],r=n.params||[];return a?(Object.keys(a).forEach((function(n,t){var s=a[n];if(!jl(s))return{};var o=r[t];if(!o)return{};var l=s.__locatorRef;i[o.name]=e.names[l]||l,i["_"+o.name+"_"]=e.crossTable[l]})),{userTargets:i,userMessage:s}):{}}
2(e,t,s,r),c=l.userTargets,d=l.userMessage,u=Pl(Pl(Pl(Pl({},i||{}),{_field_:e.name,_value_:n,_rule_:s}),o),c);return{msg:function(){return function(e,n,t){return"function"==typeof e?e(n,t):Yl(e,Pl(Pl({},t),{_field_:n}))}(d||Zl().defaultMessage,e.name,u)},rule:s}}var cc={aggressive:function(){return{on:["input","blur"]}},eager:function(e){return e.errors.length?{on:["input","change"]}:{on:["change","blur"]}},passive:function(){return{on:[]}},lazy:function(){return{on:["change","blur"]}}},dc=new Jt;!function(){function e(e,n){this.container={},this.locale=e,this.merge(n)}e.prototype.resolve=function(e,n,t){return this.format(this.locale,e,n,t)},e.prototype.format=function(e,n,t,s){var i,a,r,o,l,c,d,u,p,h=null===(r=null===(a=null===(i=this.container[e])||void 0===i?void 0:i.fields)||void 0===a?void 0:a[n])||void 0===r?void 0:r[t],m=null===(l=null===(o=this.container[e])||void 0===o?void 0:o.messages)||void 0===l?void 0:l[t];return(p=h||m||"")||(p="{_field_} is not valid"),n=null!==(u=null===(d=null===(c=this.container[e])||void 0===c?void 0:c.names)||void 0===d?void 0:d[n])&&void 0!==u?u:n,Ul(p)?p(n,s):Yl(p,Pl(Pl({},s),{_field_:n}))},e.prototype.merge=function(e){Vl(this.container,e)},e.prototype.hasRule=function(e){var n,t;return!!(null===(t=null===(n=this.container[this.locale])||void 0===n?void 0:n.messages)||void 0===t?void 0:t[e])}}();var uc=function e(n,t){if(n===t)return!0;if(n&&t&&"object"==typeof n&&"object"==typeof t){if(n.constructor!==t.constructor)return!1;var s,i,a;if(Array.isArray(n)){if((s=n.length)!=t.length)return!1;for(i=s;0!=i--;)if(!e(n[i],t[i]))return!1;return!0}if(n.constructor===RegExp)return n.source===t.source&&n.flags===t.flags;if(n.valueOf!==Object.prototype.valueOf)return n.valueOf()===t.valueOf();if(n.toString!==Object.prototype.toString)return n.toString()===t.toString();if((s=(a=Object.keys(n)).length)!==Object.keys(t).length)return!1;for(i=s;0!=i--;)if(!Object.prototype.hasOwnProperty.call(t,a[i]))return!1;for(i=s;0!=i--;){var r=a[i];if(!e(n[r],t[r]))return!1}return!0}return n!=n&&t!=t};var pc=function(e){var n,t=(null===(n=e.data)||void 0===n?void 0:n.attrs)||e.elm;return!("input"!==e.tag||t&&t.type)||"textarea"===e.tag||zl(["text","password","search","email","tel","url","number"],null==t?void 0:t.type)};function hc(e){if(e.data){var n,t,s,i,a=e.data;if("model"in a)return a.model;if(e.data.directives)return n=e.data.directives,t=function(e){return"model"===e.name},-1===(i=Gl(s=Array.isArray(n)?n:ql(n),t))?void 0:s[i]}}function mc(e){var n,t,s=hc(e);if(s)return{value:s.value};var i=gc(e),a=(null==i?void 0:i.prop)||"value";return(null===(n=e.componentOptions)||void 0===n?void 0:n.propsData)&&a in e.componentOptions.propsData?{value:e.componentOptions.propsData[a]}:(null===(t=e.data)||void 0===t?void 0:t.domProps)&&"value"in e.data.domProps?{value:e.data.domProps.value}:void 0}function vc(e){if(!Array.isArray(e)&&void 0!==mc(e))return[e];var n=function(e){return Array.isArray(e)?e:Array.isArray(e.children)?e.children:e.componentOptions&&Array.isArray(e.componentOptions.children)?e.componentOptions.children:[]}(e);return n.reduce((function(e,n){var t=vc(n);return t.length&&e.push.apply(e,t),e}),[])}function gc(e){return e.componentOptions?e.componentOptions.Ctor.options.model:null}function fc(e,n,t){if(Nl(e[n]))e[n]=[t];else{if(Ul(e[n])&&e[n].fns){var s=e[n];return s.fns=Array.isArray(s.fns)?s.fns:[s.fns],void(zl(s.fns,t)||s.fns.push(t))}if(Ul(e[n])){var i=e[n];e[n]=[i]}Array.isArray(e[n])&&!zl(e[n],t)&&e[n].push(t)}}function _c(e,n,t){e.componentOptions?function(e,n,t){e.componentOptions&&(e.componentOptions.listeners||(e.componentOptions.listeners={}),fc(e.componentOptions.listeners,n,t))}(e,n,t):function(e,n,t){e.data||(e.data={}),Nl(e.data.on)&&(e.data.on={}),fc(e.data.on,n,t)}(e,n,t)}function bc(e,n){return e.$scopedSlots.default?e.$scopedSlots.default(n)||[]:e.$slots.default||[]}function yc(e,n){e.initialized||(e.initialValue=n);var t=function(e,n){return!(e._ignoreImmediate||!e.immediate)||(s=n,!(Fl(t=e.value)&&Fl(s)||t===s||!e.normalizedEvents.length)||!!e._needsValidation||!e.initialized&&void 0===n);var t,s}
2(e,n);if(e._needsValidation=!1,e.value=n,e._ignoreImmediate=!0,t){var s=function(){if(e.immediate||e.flags.validated)return kc(e);e.validateSilent()};e.initialized?s():e.$once("hook:mounted",(function(){return s()}))}}function wc(e){return(Ul(e.mode)?e.mode:cc[e.mode])(e)}function kc(e){var n=e.validateSilent();return e._pendingValidation=n,n.then((function(t){return n===e._pendingValidation&&(e.applyResult(t),e._pendingValidation=void 0),t}))}var Tc=0,Ec=Jt.extend({name:"ValidationProvider",inject:{$_veeObserver:{from:"$_veeObserver",default:function(){return this.$vnode.context.$_veeObserver||(this.$vnode.context.$_veeObserver={refs:{},observe:function(e){this.refs[e.id]=e},unobserve:function(e){delete this.refs[e]}}),this.$vnode.context.$_veeObserver}}},props:{vid:{type:String,default:""},name:{type:String,default:null},mode:{type:[String,Function],default:function(){return Zl().mode}},rules:{type:[Object,String],default:null},immediate:{type:Boolean,default:!1},bails:{type:Boolean,default:function(){return Zl().bails}},skipIfEmpty:{type:Boolean,default:function(){return Zl().skipOptional}},debounce:{type:Number,default:0},tag:{type:String,default:"span"},slim:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},customMessages:{type:Object,default:function(){return{}}},detectInput:{type:Boolean,default:!0}},watch:{rules:{deep:!0,handler:function(e,n){this._needsValidation=!uc(e,n)}}},data:function(){return{errors:[],value:void 0,initialized:!1,initialValue:void 0,flags:{untouched:!0,touched:!1,dirty:!1,pristine:!0,valid:!1,invalid:!1,validated:!1,pending:!1,required:!1,changed:!1,passed:!1,failed:!1},failedRules:{},isActive:!0,fieldName:"",id:""}},computed:{fieldDeps:function(){var e=this;return Object.keys(this.normalizedRules).reduce((function(n,t){var s,i=(s=e.normalizedRules[t],Array.isArray(s)?s.filter((function(e){return jl(e)||"string"==typeof e&&"@"===e[0]})):Object.keys(s).filter((function(e){return jl(s[e])})).map((function(e){return s[e]}))).map((function(e){return jl(e)?e.__locatorRef:e.slice(1)}));
2return n.push.apply(n,i),i.forEach((function(n){xc(e,n)})),n}),[])},normalizedEvents:function(){var e=this;return(wc(this).on||[]).map((function(n){return"input"===n?e._inputEventName:n}))},isRequired:function(){var e=Pl(Pl({},this._resolvedRules),this.normalizedRules),n=Object.keys(e).some(Xl.isRequireRule);return this.flags.required=!!n,n},classes:function(){return function(e,n){for(var t={},s=Object.keys(n),i=s.length,a=function(i){var a=s[i],r=e&&e[a]||a,o=n[a];return Nl(o)?"continue":"valid"!==a&&"invalid"!==a||n.validated?void("string"==typeof r?t[r]=o:Array.isArray(r)&&r.forEach((function(e){t[e]=o}))):"continue"},r=0;r<i;r++)a(r);return t}(Zl().classes,this.flags)},normalizedRules:function(){return ec(this.rules)}},mounted:function(){var e=this,n=function(){if(e.flags.validated){var n=e._regenerateMap;if(n){var t=[],s={};return Object.keys(n).forEach((function(e){var i=n[e]();t.push(i),s[e]=i})),void e.applyResult({errors:t,failedRules:s,regenerateMap:n})}e.validate()}};dc.$on("change:locale",n),this.$on("hook:beforeDestroy",(function(){dc.$off("change:locale",n)}))},render:function(e){var n=this;this.registerField();var t,s=bc(this,Pl(Pl({},(t=this).flags),{errors:t.errors,classes:t.classes,failedRules:t.failedRules,reset:function(){return t.reset()},validate:function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return t.validate.apply(t,e)},ariaInput:{"aria-invalid":t.flags.invalid?"true":"false","aria-required":t.isRequired?"true":"false","aria-errormessage":"vee_"+t.id},ariaMsg:{id:"vee_"+t.id,"aria-live":t.errors.length?"assertive":"off"}}));if(this.detectInput){var i=vc(s);i.length&&i.forEach((function(e,t){var s,i,a,r,o,l;if(zl(["checkbox","radio"],null===(i=null===(s=e.data)||void 0===s?void 0:s.attrs)||void 0===i?void 0:i.type)||!(t>0)){var c=Zl().useConstraintAttrs?function(e){var n,t=null===(n=e.data)||void 0===n?void 0:n.attrs;if(!zl(["input","select","textarea"],e.tag)||!t)return{};var s={};return"required"in t&&!1!==t.required&&Xl.getRuleDefinition("required")&&(s.required="checkbox"!==t.type||[!0]),pc(e)?ec(Pl(Pl({},s),function(e){var n,t=null===(n=e.data)||void 0===n?void 0:n.attrs,s={};return t?("email"===t.type&&Xl.getRuleDefinition("email")&&(s.email=["multiple"in t]),t.pattern&&Xl.getRuleDefinition("regex")&&(s.regex=t.pattern),t.maxlength>=0&&Xl.getRuleDefinition("max")&&(s.max=t.maxlength),t.minlength>=0&&Xl.getRuleDefinition("min")&&(s.min=t.minlength),"number"===t.type&&(Bl(t.min)&&Xl.getRuleDefinition("min_value")&&(s.min_value=Number(t.min)),Bl(t.max)&&Xl.getRuleDefinition("max_value")&&(s.max_value=Number(t.max))),s):s}(e))):ec(s)}(e):{};uc(n._resolvedRules,c)||(n._needsValidation=!0),zl(["input","select","textarea"],e.tag)&&(n.fieldName=(null===(r=null===(a=e.data)||void 0===a?void 0:a.attrs)||void 0===r?void 0:r.name)||(null===(l=null===(o=e.data)||void 0===o?void 0:o.attrs)||void 0===l?void 0:l.id)),n._resolvedRules=c,function(e,n){var t=mc(n);e._inputEventName=e._inputEventName||function(e,n){var t;return e.componentOptions?(gc(e)||{event:"input"}).event||"input":(null===(t=null==n?void 0:n.modifiers)||void 0===t?void 0:t.lazy)?"change":pc(e)?"input":"change"}(n,hc(n)),yc(e,null==t?void 0:t.value);var s=function(e){e.$veeOnInput||(e.$veeOnInput=function(n){e.syncValue(n),e.setFlags({dirty:!0,pristine:!1})});var n=e.$veeOnInput;e.$veeOnBlur||(e.$veeOnBlur=function(){e.setFlags({touched:!0,untouched:!1})});var t=e.$veeOnBlur,s=e.$veeHandler,i=wc(e);return s&&e.$veeDebounce===e.debounce||(s=Hl((function(){e.$nextTick((function(){e._pendingReset||kc(e),e._pendingReset=!1}))}),i.debounce||e.debounce),e.$veeHandler=s,e.$veeDebounce=e.debounce),{onInput:n,onBlur:t,onValidate:s}}(e),i=s.onInput,a=s.onBlur,r=s.onValidate;_c(n,e._inputEventName,i),_c(n,"blur",a),e.normalizedEvents.forEach((function(e){_c(n,e,r)})),e.initialized=!0}(n,e)}}))}return this.slim&&s.length<=1?s[0]:e(this.tag,s)},beforeDestroy:function(){this.$_veeObserver.unobserve(this.id)},activated:function(){this.isActive=!0},deactivated:function(){this.isActive=!1},methods:{setFlags:function(e){var n=this;Object.keys(e).forEach((function(t){n.flags[t]=e[t]}))},syncValue:function(e){var n=function(e){var n,t,s;if(!(s=e)||!("undefined"!=typeof Event&&Ul(Event)&&s instanceof Event||s&&s.srcElement))return e;var i=e.target;if("file"===i.type&&i.files)return ql(i.files);if(null===(n=i._vModifiers)||void 0===n?void 0:n.number){var a=parseFloat(i.value);return Fl(a)?i.value:a}return(null===(t=i._vModifiers)||void 0===t?void 0:t.trim)&&"string"==typeof i.value?i.value.trim():i.value}(e);this.value=n,this.flags.changed=!uc(this.initialValue,n)},reset:function(){var e=this;this.errors=[],this.initialValue=this.value;var n={untouched:!0,touched:!1,dirty:!1,pristine:!0,valid:!1,invalid:!1,validated:!1,pending:!1,required:!1,changed:!1,passed:!1,failed:!1};n.required=this.isRequired,this.setFlags(n),this.failedRules={},this.validateSilent(),this._pendingValidation=void 0,this._pendingReset=!0,setTimeout((function(){e._pendingReset=!1}),this.debounce)},validate:function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return Dl(this,void 0,void 0,(function(){return Ol(this,(function(n){return e.length>0&&this.syncValue(e[0]),[2,kc(this)]}))}))},validateSilent:function(){return Dl(this,void 0,void 0,(function(){var e,n;return Ol(this,(function(t){switch(t.label){case 0:return this.setFlags({pending:!0}),e=Pl(Pl({},this._resolvedRules),this.normalizedRules),Object.defineProperty(e,"_$$isNormalized",{value:!0,writable:!1,enumerable:!1,
2configurable:!1}),[4,ic(this.value,e,Pl(Pl({name:this.name||this.fieldName},(s=this.$_veeObserver.refs,this.fieldDeps.reduce((function(e,n){return s[n]?(e.values[n]=s[n].value,e.names[n]=s[n].name,e):e}),{names:{},values:{}}))),{bails:this.bails,skipIfEmpty:this.skipIfEmpty,isInitial:!this.initialized,customMessages:this.customMessages}))];case 1:return n=t.sent(),this.setFlags({pending:!1,valid:n.valid,invalid:!n.valid}),void 0!==n.required&&this.setFlags({required:n.required}),[2,n]}var s}))}))},setErrors:function(e){this.applyResult({errors:e,failedRules:{}})},applyResult:function(e){var n=e.errors,t=e.failedRules,s=e.regenerateMap;this.errors=n,this._regenerateMap=s,this.failedRules=Pl({},t||{}),this.setFlags({valid:!n.length,passed:!n.length,invalid:!!n.length,failed:!!n.length,validated:!0,changed:!uc(this.value,this.initialValue)})},registerField:function(){var e,n,t;n=function(e){return e.vid?e.vid:e.name?e.name:e.id?e.id:e.fieldName?e.fieldName:"_vee_"+ ++Tc}(e=this),t=e.id,!e.isActive||t===n&&e.$_veeObserver.refs[t]||(t!==n&&e.$_veeObserver.refs[t]===e&&e.$_veeObserver.unobserve(t),e.id=n,e.$_veeObserver.observe(e))},checkComputesRequiredState:function(){var e=Pl(Pl({},this._resolvedRules),this.normalizedRules);return Object.keys(e).some(Xl.isRequireRule)}}});function xc(e,n,t){void 0===t&&(t=!0);var s=e.$_veeObserver.refs;if(e._veeWatchers||(e._veeWatchers={}),!s[n]&&t)return e.$once("hook:mounted",(function(){xc(e,n,!1)}));!Ul(e._veeWatchers[n])&&s[n]&&(e._veeWatchers[n]=s[n].$watch("value",(function(){var n=e.checkComputesRequiredState();e.flags.validated&&(e._needsValidation=!0,e.validate()),n&&!e.flags.validated&&e.validateSilent()})))}var Sc=[["pristine","every"],["dirty","some"],["touched","some"],["untouched","every"],["valid","every"],["invalid","some"],["pending","some"],["validated","every"],["changed","some"],["passed","every"],["failed","some"]],Ac=0,Lc=Jt.extend({name:"ValidationObserver",provide:function(){return{$_veeObserver:this}},inject:{$_veeObserver:{from:"$_veeObserver",default:function(){return this.$vnode.context.$_veeObserver?this.$vnode.context.$_veeObserver:null}}},props:{tag:{type:String,default:"span"},vid:{type:String,default:function(){return"obs_"+Ac++}},slim:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1}},data:function(){return{id:"",refs:{},observers:[],errors:{},flags:Ic(),fields:{}}},created:function(){var e=this;this.id=this.vid,Rc(this);var n=Hl((function(n){var t=n.errors,s=n.flags,i=n.fields;e.errors=t,e.flags=s,e.fields=i}),16);this.$watch(Pc,n)},activated:function(){Rc(this)},deactivated:function(){Cc(this)},beforeDestroy:function(){Cc(this)},render:function(e){var n,t=bc(this,Pl(Pl({},(n=this).flags),{errors:n.errors,fields:n.fields,validate:n.validate,validateWithInfo:n.validateWithInfo,passes:n.handleSubmit,handleSubmit:n.handleSubmit,reset:n.reset}));return this.slim&&t.length<=1?t[0]:e(this.tag,{on:this.$listeners},t)},methods:{observe:function(e,n){var t;void 0===n&&(n="provider"),"observer"!==n?this.refs=Pl(Pl({},this.refs),((t={})[e.id]=e,t)):this.observers.push(e)},unobserve:function(e,n){if(void 0===n&&(n="provider"),"provider"!==n){var t=Gl(this.observers,(function(n){return n.id===e}));-1!==t&&this.observers.splice(t,1)}else{if(!this.refs[e])return;this.$delete(this.refs,e)}},validateWithInfo:function(e){var n=(void 0===e?{}:e).silent,t=void 0!==n&&n;return Dl(this,void 0,void 0,(function(){var e,n,s,i,a,r;return Ol(this,(function(o){switch(o.label){case 0:return[4,Promise.all(Ml(Kl(this.refs).filter((function(e){return!e.disabled})).map((function(e){return e[t?"validateSilent":"validate"]().then((function(e){return e.valid}))})),this.observers.filter((function(e){return!e.disabled})).map((function(e){return e.validate({silent:t})}))))];case 1:return e=o.sent(),n=e.every((function(e){return e})),s=Pc.call(this),i=s.errors,a=s.flags,r=s.fields,this.errors=i,this.flags=a,this.fields=r,[2,{errors:i,flags:a,fields:r,isValid:n}]}}))}))},validate:function(e){var n=(void 0===e?{}:e).silent,t=void 0!==n&&n;return Dl(this,void 0,void 0,(function(){return Ol(this,(function(e){switch(e.label){case 0:return[4,this.validateWithInfo({silent:t})];case 1:return[2,e.sent().isValid]}}))}))},handleSubmit:function(e){return Dl(this,void 0,void 0,(function(){return Ol(this,(function(n){switch(n.label){case 0:return[4,this.validate()];case 1:return n.sent()&&e?[2,e()]:[2]}}))}))},reset:function(){return Ml(Kl(this.refs),this.observers).forEac
2h((function(e){return e.reset()}))},setErrors:function(e){var n=this;Object.keys(e).forEach((function(t){var s=n.refs[t];if(s){var i=e[t]||[];i="string"==typeof i?[i]:i,s.setErrors(i)}})),this.observers.forEach((function(n){n.setErrors(e)}))}}});function Cc(e){e.$_veeObserver&&e.$_veeObserver.unobserve(e.id,"observer")}function Rc(e){e.$_veeObserver&&e.$_veeObserver.observe(e,"observer")}function Ic(){return Pl(Pl({},{untouched:!0,touched:!1,dirty:!1,pristine:!0,valid:!1,invalid:!1,validated:!1,pending:!1,required:!1,changed:!1,passed:!1,failed:!1}),{valid:!0,invalid:!1})}function Pc(){for(var e=Ml(Kl(this.refs),this.observers.filter((function(e){return!e.disabled}))),n={},t=Ic(),s={},i=e.length,a=0;a<i;a++){var r=e[a];Array.isArray(r.errors)?(n[r.id]=r.errors,s[r.id]=Pl({id:r.id,name:r.name,failedRules:r.failedRules},r.flags)):(n=Pl(Pl({},n),r.errors),s=Pl(Pl({},s),r.fields))}return Sc.forEach((function(n){var s=n[0],i=n[1];t[s]=e[i]((function(e){return e.flags[s]}))})),{errors:n,flags:t,fields:s}}var Dc={en:/^[A-Z]*$/i,cs:/^[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]*$/i,da:/^[A-ZÆØÅ]*$/i,de:/^[A-ZÄÖÜß]*$/i,es:/^[A-ZÁÉÍÑÓÚÜ]*$/i,fa:/^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰپژگچکی]*$/,fr:/^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]*$/i,it:/^[A-Z\xC0-\xFF]*$/i,lt:/^[A-ZĄČĘĖĮŠŲŪŽ]*$/i,nl:/^[A-ZÉËÏÓÖÜ]*$/i,hu:/^[A-ZÁÉÍÓÖŐÚÜŰ]*$/i,pl:/^[A-ZĄĆĘŚŁŃÓŻŹ]*$/i,pt:/^[A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ]*$/i,ro:/^[A-ZĂÂÎŞŢ]*$/i,ru:/^[А-ЯЁ]*$/i,sk:/^[A-ZÁÄČĎÉÍĹĽŇÓŔŠŤÚÝŽ]*$/i,sr:/^[A-ZČĆŽŠĐ]*$/i,sv:/^[A-ZÅÄÖ]*$/i,tr:/^[A-ZÇĞİıÖŞÜ]*$/i,uk:/^[А-ЩЬЮЯЄІЇҐ]*$/i,ar:/^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]*$/,az:/^[A-ZÇƏĞİıÖŞÜ]*$/i,el:/^[Α-ώ]*$/i,ja:/^[A-Z\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\uFF00-\uFFEF\u4E00-\u9FAF]*$/i,he:/^[A-Z\u05D0-\u05EA']*$/i},Oc={en:/^[A-Z\s]*$/i,cs:/^[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ\s]*$/i,da:/^[A-ZÆØÅ\s]*$/i,de:/^[A-ZÄÖÜß\s]*$/i,es:/^[A-ZÁÉÍÑÓÚÜ\s]*$/i,fa:/^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰپژگچکی]*$/,fr:/^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ\s]*$/i,it:/^[A-Z\xC0-\xFF\s]*$/i,lt:/^[A-ZĄČĘĖĮŠŲŪŽ\s]*$/i,nl:/^[A-ZÉËÏÓÖÜ\s]*$/i,hu:/^[A-ZÁÉÍÓÖŐÚÜŰ\s]*$/i,pl:/^[A-ZĄĆĘŚŁŃÓŻŹ\s]*$/i,pt:/^[A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ\s]*$/i,ro:/^[A-ZĂÂÎŞŢ\s]*$/i,ru:/^[А-ЯЁ\s]*$/i,sk:/^[A-ZÁÄČĎÉÍĹĽŇÓŔŠŤÚÝŽ\s]*$/i,sr:/^[A-ZČĆŽŠĐ\s]*$/i,sv:/^[A-ZÅÄÖ\s]*$/i,tr:/^[A-ZÇĞİıÖŞÜ\s]*$/i,uk:/^[А-ЩЬЮЯЄІЇҐ\s]*$/i,ar:/^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ\s]*$/,az:/^[A-ZÇƏĞİıÖŞÜ\s]*$/i,el:/^[Α-ώ\s]*$/i,ja:/^[A-Z\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\uFF00-\uFFEF\u4E00-\u9FAF\s]*$/i,he:/^[A-Z\u05D0-\u05EA'\s]*$/i},Mc={en:/^[0-9A-Z]*$/i,cs:/^[0-9A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]*$/i,da:/^[0-9A-ZÆØÅ]$/i,de:/^[0-9A-ZÄÖÜß]*$/i,es:/^[0-9A-ZÁÉÍÑÓÚÜ]*$/i,fa:/^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰپژگچکی]*$/,fr:/^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]*$/i,it:/^[0-9A-Z\xC0-\xFF]*$/i,lt:/^[0-9A-ZĄČĘĖĮŠŲŪŽ]*$/i,hu:/^[0-9A-ZÁÉÍÓÖŐÚÜŰ]*$/i,nl:/^[0-9A-ZÉËÏÓÖÜ]*$/i,pl:/^[0-9A-ZĄĆĘŚŁŃÓŻŹ]*$/i,pt:/^[0-9A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ]*$/i,ro:/^[0-9A-ZĂÂÎŞŢ]*$/i,ru:/^[0-9А-ЯЁ]*$/i,sk:/^[0-9A-ZÁÄČĎÉÍĹĽŇÓŔŠŤÚÝŽ]*$/i,sr:/^[0-9A-ZČĆŽŠĐ]*$/i,sv:/^[0-9A-ZÅÄÖ]*$/i,tr:/^[0-9A-ZÇĞİıÖŞÜ]*$/i,uk:/^[0-9А-ЩЬЮЯЄІЇҐ]*$/i,ar:/^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]*$/,az:/^[0-9A-ZÇƏĞİıÖŞÜ]*$/i,el:/^[0-9Α-ώ]*$/i,ja:/^[0-9A-Z\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\uFF00-\uFFEF\u4E00-\u9FAF]*$/i,he:/^[0-9A-Z\u05D0-\u05EA']*$/i},Fc={en:/^[0-9A-Z_-]*$/i,cs:/^[0-9A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ_-]*$/i,da:/^[0-9A-ZÆØÅ_-]*$/i,de:/^[0-9A-ZÄÖÜß_-]*$/i,es:/^[0-9A-ZÁÉÍÑÓÚÜ_-]*$/i,fa:/^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰپژگچکی]*$/,fr:/^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ_-]*$/i,it:/^[0-9A-Z\xC0-\xFF_-]*$/i,lt:/^[0-9A-ZĄČĘĖĮŠŲŪŽ_-]*$/i,nl:/^[0-9A-ZÉËÏÓÖÜ_-]*$/i,hu:/^[0-9A-ZÁÉÍÓÖŐÚÜŰ_-]*$/i,pl:/^[0-9A-ZĄĆĘŚŁŃÓŻŹ_-]*$/i,pt:/^[0-9A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ_-]*$/i,ro:/^[0-9A-ZĂÂÎŞŢ_-]*$/i,ru:/^[0-9А-ЯЁ_-]*$/i,sk:/^[0-9A-ZÁÄČĎÉÍĹĽŇÓŔŠŤÚÝŽ_-]*$/i,sr:/^[0-9A-ZČĆŽŠĐ_-]*$/i,sv:/^[0-9A-ZÅÄÖ_-]*$/i,tr:/^[0-9A-ZÇĞİıÖŞÜ_-]*$/i,uk:/^[0-9А-ЩЬЮЯЄІЇҐ_-]*$/i,ar:/^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ_-]*$/,az:/^[0-9A-ZÇƏĞİıÖŞÜ_-]*$/i,el:/^[0-9Α-ώ_-]*$/i,ja:/^[0-9A-Z\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\uFF00-\uFFEF\u4E00-\u9FAF_-]*$/i,he:/^[0-9A-Z\u05D0-\u05EA'_-]*$/i},Nc=function(e,n){var t=(void 0===n?{}:n).locale,s=void 0===t?"":t;return Array.isArray(e)?e.every((function(e){return Nc(e,{locale:s})})):s?(Dc[s]||Dc.en).test(e):Object.keys(Dc).some((function(n){return Dc[n].test(e)}))},$c={validate:Nc,params:[{name:"locale"}]},Bc=function(e,n){var t=(void 0===n?{}:n).locale,s=void 0===t?"":t;return Array.isArray(e)?e.every((function(e){return Bc(e,{locale:s})})):s?(Fc[s]||Fc.en).test(e):Object.keys(Fc).some((function(n){return Fc[n].test(e)}))},Uc={validate:Bc,params:[{name:"locale"}]},jc=function(e,n){var t=(void 0===n?{}:n).locale,s=void 0===t?"":t;return Array.isArray(e)?e.every((function(e){return jc(e,{locale:s})})):s?(Mc[s]||Mc.en).test(e):Object.keys(Mc).some((function(n){return Mc[n].test(e)}))},Gc={validate:jc,params:[{name:"locale"}]},zc=function(e,n){var t=(void 0===n?{}:n).locale,s=void 0===t?"":t;return Array.isArray(e)?e.every((function(e){return zc(e,{locale:s})})):s?(Oc[s]||Oc.en).test(e):Object.keys(Oc).some((function(n){return Oc[n].test(e)}))},qc={validate:zc,params:[{name:"locale"}]},Kc=function(e,n){var t=void 0===n?{}:n,s=t.min,i=t.max;return Array.isArray(e)?e.every((function(e){return!!Kc(e,{min:s,max:i})})):Number(s)<=e&&Number(i)>=e},Vc={validate:Kc,params:[{name:"min"},{name:"max"}]},Hc={validate:function(e,n){var t=n.target;return String(e)===String(t)},params:[{name:"target",isTarget:!0}]},Yc=function(e,n){var t=n.length;if(Array.isArray(e))return e.every((function(e){return Yc(e,{length:t})}));var s=String(e);return/^[0-9]*$/.test(s)&&s.length===t},Wc={validate:Yc,params:[{name:"length",cast:function(e){return Number(e)}}]},Xc={validate:function(e,n){var t=n.width,s=n.height,i=[];e=Array.isArray(e)?e:[e];for(var a=0;a<e.length;a++){if(!/\.(jpg|svg|jpeg|png|bmp|gif)$/i.test(e[a].name))return Promise.resolve(!1);i.push(e[a])}return Promise.all(i.map((function(e){return function(e,n,t){var s=window.URL||window.webkitURL;return new Promise((function(i){var a=new Image;a.onerror=function(){return i(!1)},a.onload=function(){return i(a.width===n&&a.height===t)},a.src=s.createObjectURL(e)}))}(e,t,s)}))).then((function(e){return e.every((function(e){return e}))}))},params:[{name:"width",cast:function(e){return Number(e)}},{name:"height",cast:function(e){return Number(e)}}]},Qc={validate:function(e,n){var t=(void 0===n?{}:n).multiple,s=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return t&&!Array.isArray(e)&&(e=String(e).split(",").map((function(e){return e.trim()}))),Array.isArray(e)?e.every((function(e){return s.test(String(e))})):s.test(String(e))},params:[{name:"multiple",default:!1}]};
2function Jc(e){return null==e}function Zc(e){return Array.isArray(e)&&0===e.length}function ed(e){return"function"==typeof Array.from?Array.from(e):function(e){for(var n=[],t=e.length,s=0;s<t;s++)n.push(e[s]);return n}(e)}var nd=function(e,n){return Array.isArray(e)?e.every((function(e){return nd(e,n)})):ed(n).some((function(n){return n==e}))},td={validate:nd},sd={validate:function(e,n){return!nd(e,n)}},id={validate:function(e,n){var t=new RegExp(".("+n.join("|")+")$","i");return Array.isArray(e)?e.every((function(e){return t.test(e.name)})):t.test(e.name)}},ad={validate:function(e){var n=/\.(jpg|svg|jpeg|png|bmp|gif|webp)$/i;return Array.isArray(e)?e.every((function(e){return n.test(e.name)})):n.test(e.name)}},rd={validate:function(e){return Array.isArray(e)?e.every((function(e){return/^-?[0-9]+$/.test(String(e))})):/^-?[0-9]+$/.test(String(e))}},od={validate:function(e,n){return e===n.other},params:[{name:"other"}]},ld={validate:function(e,n){return e!==n.other},params:[{name:"other"}]},cd={validate:function(e,n){var t=n.length;return!Jc(e)&&("string"==typeof e&&(e=ed(e)),"number"==typeof e&&(e=String(e)),e.length||(e=ed(e)),e.length===t)},params:[{name:"length",cast:function(e){return Number(e)}}]},dd=function(e,n){var t=n.length;return Jc(e)?t>=0:Array.isArray(e)?e.every((function(e){return dd(e,{length:t})})):String(e).length<=t},ud={validate:dd,params:[{name:"length",cast:function(e){return Number(e)}}]},pd=function(e,n){var t=n.max;return!Jc(e)&&""!==e&&(Array.isArray(e)?e.length>0&&e.every((function(e){return pd(e,{max:t})})):Number(e)<=t)},hd={validate:pd,params:[{name:"max",cast:function(e){return Number(e)}}]},md={validate:function(e,n){var t=new RegExp(n.join("|").replace("*",".+")+"$","i");return Array.isArray(e)?e.every((function(e){return t.test(e.type)})):t.test(e.type)}},vd=function(e,n){var t=n.length;return!Jc(e)&&(Array.isArray(e)?e.every((function(e){return vd(e,{length:t})})):String(e).length>=t)},gd={validate:vd,params:[{name:"length",cast:function(e){return Number(e)}}]},fd=function(e,n){var t=n.min;return!Jc(e)&&""!==e&&(Array.isArray(e)?e.length>0&&e.every((function(e){return fd(e,{min:t})})):Number(e)>=t)},_d={validate:fd,params:[{name:"min",cast:function(e){return Number(e)}}]},bd=/^[٠١٢٣٤٥٦٧٨٩]+$/,yd=/^[0-9]+$/,wd={validate:function(e){var n=function(e){var n=String(e);return yd.test(n)||bd.test(n)};return Array.isArray(e)?e.every(n):n(e)}},kd=function(e,n){var t=n.regex;return Array.isArray(e)?e.every((function(e){return kd(e,{regex:t})})):t.test(String(e))},Td={validate:kd,params:[{name:"regex",cast:function(e){return"string"==typeof e?new RegExp(e):e}}]},Ed={validate:function(e,n){var t=(void 0===n?{allowFalse:!0}:n).allowFalse,s={valid:!1,required:!0};return Jc(e)||Zc(e)?s:!1!==e||t?(s.valid=!!String(e).trim().length,s):s},params:[{name:"allowFalse",default:!0}],computesRequired:!0},xd=function(e){return Zc(e)||-1!==[!1,null,void 0].indexOf(e)||!String(e).trim().length},Sd={validate:function(e,n){var t,s=n.target,i=n.values;return i&&i.length?(Array.isArray(i)||"string"!=typeof i||(i=[i]),t=i.some((function(e){return e==String(s).trim()}))):t=!xd(s),t?{valid:!xd(e),required:t}:{valid:!0,required:t}},params:[{name:"target",isTarget:!0},{name:"values"}],computesRequired:!0},Ad={validate:function(e,n){var t=n.size;if(isNaN(t))return!1;var s=1024*t;if(!Array.isArray(e))return e.size<=s;for(var i=0;i<e.length;i++)if(e[i].size>s)return!1;return!0},params:[{name:"size",cast:function(e){return Number(e)}}]},Ld={validate:function(e,n){var t=n||{},s=t.decimals,i=void 0===s?0:s,a=t.separator,r=new RegExp("^-?\\d+"+("comma"===(void 0===a?"dot":a)?",?":"\\.?")+(0===i?"\\d*":"(\\d{"+i+"})?")+"$");return Array.isArray(e)?e.every((function(e){return r.test(String(e))})):r.test(String(e))},params:[{name:"decimals",default:0},{name:"separator",default:"dot"}]},Cd=t(7293),Rd=t.n(Cd);function Id(e){return Id="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Id(e)}function Pd(){Pd=function(){return n};var e,n={},t=Object.prototype,s=t.hasOwnProperty,i=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},r=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function c(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{c({},"")}catch(e){c=function(e,n,t){return e[n]=t}}function d(e,n,t,s){var a=n&&n.prototype instanceof f?n:f,r=Object.create(a.prototype),o=new R(s||[]);return i(r,"_invoke",{value:S(e,t,o)}),r}function u(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=d;var p="suspendedStart",h="suspendedYield",m="executing",v="completed",g={};function f(){}function _(){}function b(){}var y={};c(y,r,(function(){return this}));var w=Object.getPrototypeOf,k=w&&w(w(I([])));k&&k!==t&&s.call(k,r)&&(y=k);var T=b.prototype=f.prototype=Object.create(y);function E(e){["next","throw","return"].forEach((function(n){c(e,n,(function(e){return this._invoke(n,e)}))}))}function x(e,n){function t(i,a,r,o){var l=u(e[i],e,a);if("throw"!==l.type){var c=l.arg,d=c.value;return d&&"object"==Id(d)&&s.call(d,"__await")?n.resolve(d.__await).then((function(e){t("next",e,r,o)}),(function(e){t("throw",e,r,o)})):n.resolve(d).then((function(e){c.value=e,r(c)}),(function(e){return t("throw",e,r,o)}))}o(l.arg)}var a;i(this,"_invoke",{value:function(e,s){function i(){return new n((function(n,i){t(e,s,n,i)}))}return a=a?a.then(i,i):i()}})}function S(n,t,s){var i=p;return function(a,r){if(i===m)throw Error("Generator is already running");if(i===v){if("throw"===a)throw r;return{value:e,done:!0}}for(s.method=a,s.arg=r;;){var o=s.delegate;if(o){var l=A(o,s);if(l){if(l===g)continue;return l}}if("next"===s.method)s.sent=s._sent=s.arg;else if("throw"===s.method){if(i===p)throw i=v,s.arg;s.dispatchException(s.arg)}else"return"===s.method&&s.abrupt("return",s.arg);i=m;var c=u(n,t,s);if("normal"===c.type){if(i=s.done?v:h,c.arg===g)continue;return{value:c.arg,done:s.done}}"throw"===c.type&&(i=v,s.method="throw",s.arg=c.arg)}}}function A(n,t){var s=t.method,i=n.iterator[s];if(i===e)return t.delegate=null,"throw"===s&&n.iterator.return&&
vendor: 1,569 bytes, line 2
2(t.method="return",t.arg=e,A(n,t),"throw"===t.method)||"return"!==s&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+s+"' method")),g;var a=u(i,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,g;var r=a.arg;return r?r.done?(t[n.resultName]=r.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,g):r:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,g)}function L(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function C(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function R(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(L,this),this.reset(!0)}function I(n){if(n||""===n){var t=n[r];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var i=-1,a=function t(){for(;++i<n.length;)if(s.call(n,i))return t.value=n[i],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(Id(n)+" is not iterable")}return _.prototype=b,i(T,"constructor",{value:b,configurable:!0}),i(b,"constructor",{value:_,configurable:!0}),_.displayName=c(b,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===_||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,b):(e.__proto__=b,c(e,l,"GeneratorFunction")),e.prototype=Object.create(T),e},n.awrap=function(e){return{__await:e}}
2,E(x.prototype),c(x.prototype,o,(function(){return this})),n.AsyncIterator=x,n.async=function(e,t,s,i,a){void 0===a&&(a=Promise);var r=new x(d(e,t,s,i),a);return n.isGeneratorFunction(t)?r:r.next().then((function(e){return e.done?e.value:r.next()}))},E(T),c(T,l,"Generator"),c(T,r,(function(){return this})),c(T,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var s in n)t.push(s);return t.reverse(),function e(){for(;t.length;){var s=t.pop();if(s in n)return e.value=s,e.done=!1,e}return e.done=!0,e}},n.values=I,R.prototype={constructor:R,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(C),!n)for(var t in this)"t"===t.charAt(0)&&s.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function i(s,i){return o.type="throw",o.arg=n,t.next=s,i&&(t.method="next",t.arg=e),!!i}for(var a=this.tryEntries.length-1;a>=0;--a){var r=this.tryEntries[a],o=r.completion;if("root"===r.tryLoc)return i("end");if(r.tryLoc<=this.prev){var l=s.call(r,"catchLoc"),c=s.call(r,"finallyLoc");if(l&&c){if(this.prev<r.catchLoc)return i(r.catchLoc,!0);if(this.prev<r.finallyLoc)return i(r.finallyLoc)}else if(l){if(this.prev<r.catchLoc)return i(r.catchLoc,!0)}else{if(!c)throw Error("try statement without catch or finally");if(this.prev<r.finallyLoc)return i(r.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var i=this.tryEntries[t];if(i.tryLoc<=this.prev&&s.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var a=i;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var r=a?a.completion:{};return r.type=e,r.arg=n,a?(this.method="next",this.next=a.finallyLoc,g):this.complete(r)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),g},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),C(t),g}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var s=t.completion;if("throw"===s.type){var i=s.arg;C(t)}return i}}throw Error("illegal catch attempt")},delegateYield:function(n,t,s){return this.delegate={iterator:I(n),resultName:t,nextLoc:s},"next"===this.method&&(this.arg=e),g}},n}function Dd(e,n,t,s,i,a,r){try{var o=e[a](r),l=o.value}catch(e){return void t(e)}o.done?n(l):Promise.resolve(l).then(s,i)}function Od(e){return function(){var n=this,t=arguments;return new Promise((function(s,i){var a=e.apply(n,t);function r(e){Dd(a,s,i,r,o,"next",e)}function o(e){Dd(a,s,i,r,o,"throw",e)}r(void 0)}))}}function Md(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,s)}return t}function Fd(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?Md(Object(t),!0).forEach((function(n){Nd(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):Md(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function Nd(e,n,t){return(n=function(e){var n=function(e){if("object"!=Id(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=Id(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Id(n)?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}Object.keys(s).forEach((function(e){var n;Ql(e,Fd(Fd({},s[e]),{},{message:(null===(n=window.PageData)||void 0===n||null===(n=n.feedbackForm)||void 0===n||null===(n=n.translations)||void 0===n||null===(n=n.error)||void 0===n?void 0:n[e])||s[e].message}))})),Ql("accepted",{validate:function(e){return!0===e},message:"Необходимо дать согласие на обработку персональных данных"});const $d=nl({name:"Feedback",directives:{mask:Il},components:{Popup:tl,VSelect:Rd(),ValidationProvider:Ec,ValidationObserver:Lc},props:{action:String},data:function(){var e,n;return{error:null,language:window.PageData.lang,options:(null===(e=window.PageData)||void 0===e||null===(e=e.feedbackForm)||void 0===e?void 0:e.options)||[],translations:(null===(n=window.PageData)||void 0===n||null===(n=n.feedbackForm)||void 0===n?void 0:n.translations)||null,isSuccessModal:!1,isQualityModal:!1,form:{name:"",email:"",ph
2one:"",message:"",theme:"",token:null,isAcceptedRules:!1}}},methods:{showModalQuality:function(){this.isQualityModal=!0},getFormData:function(e){var n=new FormData;return Object.keys(e).forEach((function(t){return n.append(t,e[t])})),n},resetForm:function(){this.$refs.form.reset(),this.form={name:"",email:"",phone:"",message:"",theme:"",token:null,isAcceptedRules:!1}},onSubmit:function(){var e=this;return Od(Pd().mark((function n(){var t;return Pd().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(n.prev=0,grecaptcha){n.next=3;break}return n.abrupt("return");case 3:grecaptcha.ready((function(){grecaptcha.execute(window.PageData.recaptchaKey,{action:"submit"}).then(function(){var n=Od(Pd().mark((function n(t){var s,i,a,r;return Pd().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return e.form.token=t,s={method:"POST",body:e.getFormData(Fd(Fd({},e.form),{},{theme:e.form.theme.value}))},n.next=4,fetch(e.action,s);case 4:if((i=n.sent).ok){n.next=8;break}return a=i.status,n.abrupt("return",Promise.reject(a));case 8:return n.next=10,i.json();case 10:if("error"===(r=n.sent).status){n.next=16;break}return e.isSuccessModal=!0,e.error=null,e.$nextTick((function(){e.resetForm()})),n.abrupt("return");case 16:e.error=r.message;case 17:case"end":return n.stop()}}),n)})));return function(e){return n.apply(this,arguments)}}())})),n.next=10;break;case 6:n.prev=6,n.t0=n.catch(0),e.error=null===(t=e.translations)||void 0===t?void 0:t.serverError,console.error("There was an error!",n.t0);case 10:case"end":return n.stop()}}),n,null,[[0,6]])})))()}}},jo,[],!1,null,null,null).exports;document.addEventListener("DOMContentLoaded",(function(){if(document.getElementById("feedback-app"))return new Jt({el:"#feedback-app",components:{Feedback:$d}})}))},6613:(e,n,t)=>{"use strict";t.d(n,{A:()=>a});var s=t(3703),i=t(4128);function a(){var e=document.querySelector(".js-full-page");if(e){var n,t=e.querySelector(".swiper"),a=function(){n=new s.A(t,{modules:[i.FJ],slidesPerView:"auto",spaceBetween:0,watchOverflow:!0,speed:800,preloadImages:!1,direction:"vertical",mousewheel:{enable:!0,thresholdDelta:5,releaseOnEdges:!0}})},r=function(){if(!(window.innerWidth<1281&&void 0!==n))return a();n.destroy(!0,!0)};a(),r(),window.addEventListener("resize",r)}}},2577:(e,n,t)=>{"use strict";t.d(n,{A:()=>r});var s=t(3703),i=t(4128),a=t(6405);function r(e){var n=document.querySelectorAll(".".concat(e));n.length&&n.forEach((function(e){var n=e.querySelector(".js-gallery-slider-prev"),t=e.querySelector(".js-gallery-slider-next");if(n&&t){new s.A(e,{modules:[i.Vx],observer:!0,observeParents:!0,observeSlideChildren:!0,slidesPerView:"auto",spaceBetween:0,watchOverflow:!0,speed:500,loop:!0,grabCursor:!0,navigation:{nextEl:t,prevEl:n}});var r=null;e.querySelectorAll('[data-popup-invoker="newsGallery"]').forEach((function(n){n.addEventListener("click",(function(){a.z.openPopup("newsGallery",300,(function(){if(!r){!function(){var n=e.querySelector(".js-gallery-popup-slider");if(n){var t=n.querySelector(".js-gallery-popup-slider-prev"),a=n.querySelector(".js-gallery-popup-slider-next");t&&a&&(r=new s.A(n,{modules:[i.Vx],observer:!0,observeParents:!0,observeSlideChildren:!0,slidesPerView:1,spaceBetween:0,watchOverflow:!0,speed:500,loop:!0,grabCursor:!0,navigation:{nextEl:a,prevEl:t}}))}}();var t=n.getAttribute("data-image-number");r.slideTo(t,0)}}))}))})),e.querySelectorAll(".js-popup-close").forEach((function(e){e.addEventListener("click",(function(){a.z.closePopup("newsGallery",300,o)}))})),document.addEventListener("keydown",(function(e){27===e.which&&a.z.closePopup("newsGallery",300,o)}))}function o(){r&&(r.destroy(),r=null)}}))}},3457:(e,n,t)=>{"use strict";t.d(n,{N:()=>l,w:()=>o});var s=t(1372);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function a(e,n){for(var t=0;t<n.length;t++){var s=n[t];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(e,r(s.key),s)}}function r(e){var n=function(e){if("object"!=i(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=i(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(n)?n:n+""}var o=function(){return e=function e(n){!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),this.buttonClass=n.buttonClass,this.activeButtonClass=n.activeButtonClass,this.menuClass=n.menuClass,this.activeMenuClass=n.activeMenuClass,this.closingElementClasses=n.closingElementClasses,this.lockPaddingElementClass=n.lockPaddingElementClass,this.showHideTime=n.showHideTime},(n=[{key:"onBurgerClick",value:function(e,n,t,i){e.addEventListener("click",(function(){t.classList.contains(i)?(0,s.Tl)():(0,s.s2)(),e.classList.toggle(n),t.classList.toggle(i)}))}},{key:"onClosingElementClick",value:function(e,n,t,i,a){t.addEventListener("click",(function(r){t.classList.contains(i)&&(null==a||a.forEach((function(a){r.target.closest(a)&&(e.classList.remove(n),t.classList.remove(i),(0,s.Tl)())})))}))}},{key:"init",value:function(){var e=document.querySelector(".".concat(this.buttonClass)),n=document.querySelector(".".concat(this.menuClass));if(e&&n){var t=this.activeButtonClass,s=this.activeMenuClass,i=this.closingElementClasses,a=document.querySelectorAll(".".concat(this.lockPaddingElementClass)),r=this.showHideTime;this.onBurgerClick(e,t,n,s,a,r),this.onClosingElementClick(e,t,n,s,i,a,r)}}}])&&a(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n}();function l(e){var n=document.querySelector(".".concat(e));if(n){var t=function(){window.pageYOffset>=20?n.classList.add("isScrolled"):n.classList.remove("isScrolled")};t(),window.addEventListener("scroll",(function(){t()}))}}},4268:()=>{"use strict";const e=Number.isFinite||function(e){return"number"==typeof e&&isFinite(e)},n=Number.isSafeInteger||function(e){return"number"==typeof e&&Math.abs(e)<=t},t=Number.MAX_SAFE_INTEGER||9007199254740991;
2let s=function(e){return e.NETWORK_ERROR="networkError",e.MEDIA_ERROR="mediaError",e.KEY_SYSTEM_ERROR="keySystemError",e.MUX_ERROR="muxError",e.OTHER_ERROR="otherError",e}({}),i=function(e){return e.KEY_SYSTEM_NO_KEYS="keySystemNoKeys",e.KEY_SYSTEM_NO_ACCESS="keySystemNoAccess",e.KEY_SYSTEM_NO_SESSION="keySystemNoSession",e.KEY_SYSTEM_NO_CONFIGURED_LICENSE="keySystemNoConfiguredLicense",e.KEY_SYSTEM_LICENSE_REQUEST_FAILED="keySystemLicenseRequestFailed",e.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED="keySystemServerCertificateRequestFailed",e.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED="keySystemServerCertificateUpdateFailed",e.KEY_SYSTEM_SESSION_UPDATE_FAILED="keySystemSessionUpdateFailed",e.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED="keySystemStatusOutputRestricted",e.KEY_SYSTEM_STATUS_INTERNAL_ERROR="keySystemStatusInternalError",e.KEY_SYSTEM_DESTROY_MEDIA_KEYS_ERROR="keySystemDestroyMediaKeysError",e.KEY_SYSTEM_DESTROY_CLOSE_SESSION_ERROR="keySystemDestroyCloseSessionError",e.KEY_SYSTEM_DESTROY_REMOVE_SESSION_ERROR="keySystemDestroyRemoveSessionError",e.MANIFEST_LOAD_ERROR="manifestLoadError",e.MANIFEST_LOAD_TIMEOUT="manifestLoadTimeOut",e.MANIFEST_PARSING_ERROR="manifestParsingError",e.MANIFEST_INCOMPATIBLE_CODECS_ERROR="manifestIncompatibleCodecsError",e.LEVEL_EMPTY_ERROR="levelEmptyError",e.LEVEL_LOAD_ERROR="levelLoadError",e.LEVEL_LOAD_TIMEOUT="levelLoadTimeOut",e.LEVEL_PARSING_ERROR="levelParsingError",e.LEVEL_SWITCH_ERROR="levelSwitchError",e.AUDIO_TRACK_LOAD_ERROR="audioTrackLoadError",e.AUDIO_TRACK_LOAD_TIMEOUT="audioTrackLoadTimeOut",e.SUBTITLE_LOAD_ERROR="subtitleTrackLoadError",e.SUBTITLE_TRACK_LOAD_TIMEOUT="subtitleTrackLoadTimeOut",e.FRAG_LOAD_ERROR="fragLoadError",e.FRAG_LOAD_TIMEOUT="fragLoadTimeOut",e.FRAG_DECRYPT_ERROR="fragDecryptError",e.FRAG_PARSING_ERROR="fragParsingError",e.FRAG_GAP="fragGap",e.REMUX_ALLOC_ERROR="remuxAllocError",e.KEY_LOAD_ERROR="keyLoadError",e.KEY_LOAD_TIMEOUT="keyLoadTimeOut",e.BUFFER_ADD_CODEC_ERROR="bufferAddCodecError",e.BUFFER_INCOMPATIBLE_CODECS_ERROR="bufferIncompatibleCodecsError",e.BUFFER_APPEND_ERROR="bufferAppendError",e.BUFFER_APPENDING_ERROR="bufferAppendingError",e.BUFFER_STALLED_ERROR="bufferStalledError",e.BUFFER_FULL_ERROR="bufferFullError",e.BUFFER_SEEK_OVER_HOLE="bufferSeekOverHole",e.BUFFER_NUDGE_ON_STALL="bufferNudgeOnStall",e.ASSET_LIST_LOAD_ERROR="assetListLoadError",e.ASSET_LIST_LOAD_TIMEOUT="assetListLoadTimeout",e.ASSET_LIST_PARSING_ERROR="assetListParsingError",e.INTERSTITIAL_ASSET_ITEM_ERROR="interstitialAssetItemError",e.INTERNAL_EXCEPTION="internalException",e.INTERNAL_ABORTED="aborted",e.ATTACH_MEDIA_ERROR="attachMediaError",e.UNKNOWN="unknown",e}({}),a=function(e){return e.MEDIA_ATTACHING="hlsMediaAttaching",e.MEDIA_ATTACHED="hlsMediaAttached",e.MEDIA_DETACHING="hlsMediaDetaching",e.MEDIA_DETACHED="hlsMediaDetached",e.MEDIA_ENDED="hlsMediaEnded",e.STALL_RESOLVED="hlsStallResolved",e.BUFFER_RESET="hlsBufferReset",e.BUFFER_CODECS="hlsBufferCodecs",e.BUFFER_CREATED="hlsBufferCreated",e.BUFFER_APPENDING="hlsBufferAppending",e.BUFFER_APPENDED="hlsBufferAppended",e.BUFFER_EOS="hlsBufferEos",e.BUFFERED_TO_END="hlsBufferedToEnd",e.BUFFER_FLUSHING="hlsBufferFlushing",e.BUFFER_FLUSHED="hlsBufferFlushed",e.MANIFEST_LOADING="hlsManifestLoading",e.MANIFEST_LOADED="hlsManifestLoaded",e.MANIFEST_PARSED="hlsManifestParsed",e.LEVEL_SWITCHING="hlsLevelSwitching",e.LEVEL_SWITCHED="hlsLevelSwitched",e.LEVEL_LOADING="hlsLevelLoading",e.LEVEL_LOADED="hlsLevelLoaded",e.LEVEL_UPDATED="hlsLevelUpdated",e.LEVEL_PTS_UPDATED="hlsLevelPtsUpdated",e.LEVELS_UPDATED="hlsLevelsUpdated",e.AUDIO_TRACKS_UPDATED="hlsAudioTracksUpdated",e.AUDIO_TRACK_SWITCHING="hlsAudioTrackSwitching",e.AUDIO_TRACK_SWITCHED="hlsAudioTrackSwitched",e.AUDIO_TRACK_LOADING="hlsAudioTrackLoading",e.AUDIO_TRACK_LOADED="hlsAudioTrackLoaded",e.AUDIO_TRACK_UPDATED="hlsAudioTrackUpdated",e.SUBTITLE_TRACKS_UPDATED="hlsSubtitleTracksUpdated",e.SUBTITLE_TRACKS_CLEARED="hlsSubtitleTracksCleared",e.SUBTITLE_TRACK_SWITCH="hlsSubtitleTrackSwitch",e.SUBTITLE_TRACK_LOADING="hlsSubtitleTrackLoading",e.SUBTITLE_TRACK_LOADED="hlsSubtitleTrackLoaded",e.SUBTITLE_TRACK_UPDATED="hlsSubtitleTrackUpdated",e.SUBTITLE_FRAG_PROCESSED="hl
2sSubtitleFragProcessed",e.CUES_PARSED="hlsCuesParsed",e.NON_NATIVE_TEXT_TRACKS_FOUND="hlsNonNativeTextTracksFound",e.INIT_PTS_FOUND="hlsInitPtsFound",e.FRAG_LOADING="hlsFragLoading",e.FRAG_LOAD_EMERGENCY_ABORTED="hlsFragLoadEmergencyAborted",e.FRAG_LOADED="hlsFragLoaded",e.FRAG_DECRYPTED="hlsFragDecrypted",e.FRAG_PARSING_INIT_SEGMENT="hlsFragParsingInitSegment",e.FRAG_PARSING_USERDATA="hlsFragParsingUserdata",e.FRAG_PARSING_METADATA="hlsFragParsingMetadata",e.FRAG_PARSED="hlsFragParsed",e.FRAG_BUFFERED="hlsFragBuffered",e.FRAG_CHANGED="hlsFragChanged",e.FPS_DROP="hlsFpsDrop",e.FPS_DROP_LEVEL_CAPPING="hlsFpsDropLevelCapping",e.MAX_AUTO_LEVEL_UPDATED="hlsMaxAutoLevelUpdated",e.ERROR="hlsError",e.DESTROYING="hlsDestroying",e.KEY_LOADING="hlsKeyLoading",e.KEY_LOADED="hlsKeyLoaded",e.LIVE_BACK_BUFFER_REACHED="hlsLiveBackBufferReached",e.BACK_BUFFER_REACHED="hlsBackBufferReached",e.STEERING_MANIFEST_LOADED="hlsSteeringManifestLoaded",e.ASSET_LIST_LOADING="hlsAssetListLoading",e.ASSET_LIST_LOADED="hlsAssetListLoaded",e.INTERSTITIALS_UPDATED="hlsInterstitialsUpdated",e.INTERSTITIALS_BUFFERED_TO_BOUNDARY="hlsInterstitialsBufferedToBoundary",e.INTERSTITIAL_ASSET_PLAYER_CREATED="hlsInterstitialAssetPlayerCreated",e.INTERSTITIAL_STARTED="hlsInterstitialStarted",e.INTERSTITIAL_ASSET_STARTED="hlsInterstitialAssetStarted",e.INTERSTITIAL_ASSET_ENDED="hlsInterstitialAssetEnded",e.INTERSTITIAL_ASSET_ERROR="hlsInterstitialAssetError",e.INTERSTITIAL_ENDED="hlsInterstitialEnded",e.INTERSTITIALS_PRIMARY_RESUMED="hlsInterstitialsPrimaryResumed",e.PLAYOUT_LIMIT_REACHED="hlsPlayoutLimitReached",e.EVENT_CUE_ENTER="hlsEventCueEnter",e}({});var r="manifest",o="level",l="audioTrack",c="subtitleTrack",d="main",u="audio",p="subtitle";class h{constructor(e,n=0,t=0){this.halfLife=void 0,this.alpha_=void 0,this.estimate_=void 0,this.totalWeight_=void 0,this.halfLife=e,this.alpha_=e?Math.exp(Math.log(.5)/e):0,this.estimate_=n,this.totalWeight_=t}sample(e,n){const t=Math.pow(this.alpha_,e);this.estimate_=n*(1-t)+t*this.estimate_,this.totalWeight_+=e}getTotalWeight(){return this.totalWeight_}getEstimate(){if(this.alpha_){const e=1-Math.pow(this.alpha_,this.totalWeight_);if(e)return this.estimate_/e}return this.estimate_}}class m{constructor(e,n,t,s=100){this.defaultEstimate_=void 0,this.minWeight_=void 0,this.minDelayMs_=void 0,this.slow_=void 0,this.fast_=void 0,this.defaultTTFB_=void 0,this.ttfb_=void 0,this.defaultEstimate_=t,this.minWeight_=.001,this.minDelayMs_=50,this.slow_
vendor: 4,321 bytes, line 2
2=new h(e),this.fast_=new h(n),this.defaultTTFB_=s,this.ttfb_=new h(e)}update(e,n){const{slow_:t,fast_:s,ttfb_:i}=this;t.halfLife!==e&&(this.slow_=new h(e,t.getEstimate(),t.getTotalWeight())),s.halfLife!==n&&(this.fast_=new h(n,s.getEstimate(),s.getTotalWeight())),i.halfLife!==e&&(this.ttfb_=new h(e,i.getEstimate(),i.getTotalWeight()))}sample(e,n){const t=(e=Math.max(e,this.minDelayMs_))/1e3,s=8*n/t;this.fast_.sample(t,s),this.slow_.sample(t,s)}sampleTTFB(e){const n=e/1e3,t=Math.sqrt(2)*Math.exp(-Math.pow(n,2)/2);this.ttfb_.sample(t,Math.max(e,5))}canEstimate(){return this.fast_.getTotalWeight()>=this.minWeight_}getEstimate(){return this.canEstimate()?Math.min(this.fast_.getEstimate(),this.slow_.getEstimate()):this.defaultEstimate_}getEstimateTTFB(){return this.ttfb_.getTotalWeight()>=this.minWeight_?this.ttfb_.getEstimate():this.defaultTTFB_}get defaultEstimate(){return this.defaultEstimate_}destroy(){}}function v(e,n,t){return(n=function(e){var n=function(e,n){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var s=t.call(e,n);if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"==typeof n?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function g(){return g=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var s in t)({}).hasOwnProperty.call(t,s)&&(e[s]=t[s])}return e},g.apply(null,arguments)}function f(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,s)}return t}function _(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?f(Object(t),!0).forEach((function(n){v(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):f(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}class b{constructor(e,n){this.trace=void 0,this.debug=void 0,this.log=void 0,this.warn=void 0,this.info=void 0,this.error=void 0;const t=`[${e}]:`;this.trace=y,this.debug=n.debug.bind(null,t),this.log=n.log.bind(null,t),this.warn=n.warn.bind(null,t),this.info=n.info.bind(null,t),this.error=n.error.bind(null,t)}}const y=function(){},w={trace:y,debug:y,log:y,warn:y,info:y,error:y};function k(){return g({},w)}function T(e,n,t){return n[e]?n[e].bind(n):function(e,n){const t=self.console[e];return t?t.bind(self.console,`${n?"["+n+"] ":""}[${e}] >`):y}(e,t)}const E=k(),x=E;function S(e=!0){if("undefined"!=typeof self)return(e||!self.MediaSource)&&self.ManagedMediaSource||self.MediaSource||self.WebKitMediaSource}function A(e,n){const t=Object.keys(e),s=Object.keys(n),i=t.length,a=s.length;return!i||!a||i===a&&!t.some((e=>-1===s.indexOf(e)))}function L(e,n=!1){if("undefined"!=typeof TextDecoder){const t=new TextDecoder("utf-8").decode(e);if(n){const e=t.indexOf("\0");return-1!==e?t.substring(0,e):t}return t.replace(/\0/g,"")}const t=e.length;let s,i,a,r="",o=0;for(;o<t;){if(s=e[o++],0===s&&n)return r;if(0!==s&&3!==s)switch(s>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:r+=String.fromCharCode(s);break;case 12:case 13:i=e[o++],r+=String.fromCharCode((31&s)<<6|63&i);break;case 14:i=e[o++],a=e[o++],r+=String.fromCharCode((15&s)<<12|(63&i)<<6|63&a)}}return r}const C=function(e){let n="";for(let t=0;t<e.length;t++){let s=e[t].toString(16);s.length<2&&(s="0"+s),n+=s}return n};function R(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var I,P,D,O,M,F,N={exports:{}},$=(I||(I=1,P=/^(?=((?:[a-zA-Z0-9+\-.]+:)?))\1(?=((?:\/\/[^\/?#]*)?))\2(?=((?:(?:[^?#\/]*\/)*[^;?#\/]*)?))\3((?:;[^?#]*)?)(\?[^#]*)?(#[^]*)?$/,D=/^(?=([^\/?#]*))\1([^]*)$/,O=/(?:\/|^)\.(?=\/)/g,M=/(?:\/|^)\.\.\/(?!\.\.\/)[^\/]*(?=\/)/g,N.exports=F={buildAbsoluteURL:function(e,n,t){if(t=t||{},e=e.trim(),!(n=n.trim())){if(!t.alwaysNormalize)return e;var s=F.parseURL(e);if(!s)throw new Error("Error trying to parse base URL.");return s.path=F.normalizePath(s.path),F.buildURLFromParts(s)}var i=F.parseURL(n);if(!i)throw new Error("Error trying to parse relative URL.");
vendor: 4,211 bytes, line 2
2if(i.scheme)return t.alwaysNormalize?(i.path=F.normalizePath(i.path),F.buildURLFromParts(i)):n;var a=F.parseURL(e);if(!a)throw new Error("Error trying to parse base URL.");if(!a.netLoc&&a.path&&"/"!==a.path[0]){var r=D.exec(a.path);a.netLoc=r[1],a.path=r[2]}a.netLoc&&!a.path&&(a.path="/");var o={scheme:a.scheme,netLoc:i.netLoc,path:null,params:i.params,query:i.query,fragment:i.fragment};if(!i.netLoc&&(o.netLoc=a.netLoc,"/"!==i.path[0]))if(i.path){var l=a.path,c=l.substring(0,l.lastIndexOf("/")+1)+i.path;o.path=F.normalizePath(c)}else o.path=a.path,i.params||(o.params=a.params,i.query||(o.query=a.query));return null===o.path&&(o.path=t.alwaysNormalize?F.normalizePath(i.path):i.path),F.buildURLFromParts(o)},parseURL:function(e){var n=P.exec(e);return n?{scheme:n[1]||"",netLoc:n[2]||"",path:n[3]||"",params:n[4]||"",query:n[5]||"",fragment:n[6]||""}:null},normalizePath:function(e){for(e=e.split("").reverse().join("").replace(O,"");e.length!==(e=e.replace(M,"")).length;);return e.split("").reverse().join("")},buildURLFromParts:function(e){return e.scheme+e.netLoc+e.path+e.params+e.query+e.fragment}}),N.exports);class B{constructor(){this.aborted=!1,this.loaded=0,this.retry=0,this.total=0,this.chunkCount=0,this.bwEstimate=0,this.loading={start:0,first:0,end:0},this.parsing={start:0,end:0},this.buffering={start:0,first:0,end:0}}}var U="audio",j="video",G="audiovideo";class z{constructor(e){this._byteRange=null,this._url=null,this._stats=null,this._streams=null,this.base=void 0,this.relurl=void 0,"string"==typeof e&&(e={url:e}),this.base=e,function(e,n){const t=H(e,n);t&&(t.enumerable=!0,Object.defineProperty(e,n,t))}(this,"stats")}setByteRange(e,n){const t=e.split("@",2);let s;s=1===t.length?(null==n?void 0:n.byteRangeEndOffset)||0:parseInt(t[1]),this._byteRange=[s,parseInt(t[0])+s]}get baseurl(){return this.base.url}get byteRange(){return null===this._byteRange?[]:this._byteRange}get byteRangeStartOffset(){return this.byteRange[0]}get byteRangeEndOffset(){return this.byteRange[1]}get elementaryStreams(){return null===this._streams&&(this._streams={[U]:null,[j]:null,[G]:null}),this._streams}set elementaryStreams(e){this._streams=e}get hasStats(){return null!==this._stats}get hasStreams(){return null!==this._streams}get stats(){return null===this._stats&&(this._stats=new B),this._stats}set stats(e){this._stats=e}get url(){return!this._url&&this.baseurl&&this.relurl&&(this._url=$.buildAbsoluteURL(this.baseurl,this.relurl,{alwaysNormalize:!0})),this._url||""}set url(e){this._url=e}clearElementaryStreamInfo(){const{elementaryStreams:e}=this;e[U]=null,e[j]=null,e[G]=null}}function q(e){return"initSegment"!==e.sn}class K extends z{constructor(e,n){super(n),this._decryptdata=null,this._programDateTime=null,this._ref=null,this._bitrate=void 0,this.rawProgramDateTime=null,this.tagList=[],this.duration=0,this.sn=0,this.levelkeys=void 0,this.type=void 0,this.loader=null,this.keyLoader=null,this.level=-1,this.cc=0,this.startPTS=void 0,this.endPTS=void 0,this.startDTS=void 0,this.endDTS=void 0,this.start=0,this.playlistOffset=0,this.deltaPTS=void 0,this.maxStartPTS=void 0,this.minEndPTS=void 0,this.data=void 0,this.bitrateTest=!1,this.title=null,this.initSegment=null,this.endList=void 0,this.gap=void 0,this.urlId=0,this.type=e}get byteLength(){if(this.hasStats){const e=this.stats.total;if(e)return e}if(this.byteRange){const n=this.byteRange[0],t=this.byteRange[1];if(e(n)&&e(t))return t-n}return null}get bitrate(){return this.byteLength?8*this.byteLength/this.duration:this._bitrate?this._bitrate:null}set bitrate(e){this._bitrate=e}get decryptdata(){const{levelkeys:e}=this;if(!e&&!this._decryptdata)return null;if(!this._decryptdata&&this.levelkeys&&!this.levelkeys.NONE){const e=this.levelkeys.identity;if(e)this._decryptdata=e.getDecryptData(this.sn);else{const e=Object.keys(this.levelkeys);if(1===e.length)return this._decryptdata=this.levelkeys[e[0]].getDecryptData(this.sn)}}return this._decryptdata}get end(){return this.start+this.duration}get endProgramDateTime(){if(null===this.programDateTime)return null;const n=e(this.duration)?this.duration:0;return this.programDateTime+1e3*n}get encrypted(){var e;if(null!=(e=this._decryptdata)&&e.encrypted)return!0;
vendor: 4,973 bytes, line 2
2if(this.levelkeys){const e=Object.keys(this.levelkeys),n=e.length;if(n>1||1===n&&this.levelkeys[e[0]].encrypted)return!0}return!1}get programDateTime(){return null===this._programDateTime&&this.rawProgramDateTime&&(this.programDateTime=Date.parse(this.rawProgramDateTime)),this._programDateTime}set programDateTime(n){e(n)?this._programDateTime=n:this._programDateTime=this.rawProgramDateTime=null}get ref(){return q(this)?(this._ref||(this._ref={base:this.base,start:this.start,duration:this.duration,sn:this.sn,programDateTime:this.programDateTime}),this._ref):null}addStart(e){this.setStart(this.start+e)}setStart(e){this.start=e,this._ref&&(this._ref.start=e)}setDuration(e){this.duration=e,this._ref&&(this._ref.duration=e)}setKeyFormat(e){if(this.levelkeys){const n=this.levelkeys[e];n&&!this._decryptdata&&(this._decryptdata=n.getDecryptData(this.sn))}}abortRequests(){var e,n;null==(e=this.loader)||e.abort(),null==(n=this.keyLoader)||n.abort()}setElementaryStreamInfo(e,n,t,s,i,a=!1){const{elementaryStreams:r}=this,o=r[e];o?(o.startPTS=Math.min(o.startPTS,n),o.endPTS=Math.max(o.endPTS,t),o.startDTS=Math.min(o.startDTS,s),o.endDTS=Math.max(o.endDTS,i)):r[e]={startPTS:n,endPTS:t,startDTS:s,endDTS:i,partial:a}}}class V extends z{constructor(e,n,t,s,i){super(t),this.fragOffset=0,this.duration=0,this.gap=!1,this.independent=!1,this.relurl=void 0,this.fragment=void 0,this.index=void 0,this.duration=e.decimalFloatingPoint("DURATION"),this.gap=e.bool("GAP"),this.independent=e.bool("INDEPENDENT"),this.relurl=e.enumeratedString("URI"),this.fragment=n,this.index=s;const a=e.enumeratedString("BYTERANGE");a&&this.setByteRange(a,i),i&&(this.fragOffset=i.fragOffset+i.duration)}get start(){return this.fragment.start+this.fragOffset}get end(){return this.start+this.duration}get loaded(){const{elementaryStreams:e}=this;return!!(e.audio||e.video||e.audiovideo)}}function H(e,n){const t=Object.getPrototypeOf(e);if(t){return Object.getOwnPropertyDescriptor(t,n)||H(t,n)}}const Y=Math.pow(2,32)-1,W=[].push,X={video:1,audio:2,id3:3,text:4};function Q(e){return String.fromCharCode.apply(null,e)}function J(e,n){const t=e[n]<<8|e[n+1];return t<0?65536+t:t}function Z(e,n){const t=ne(e,n);return t<0?4294967296+t:t}function ee(e,n){let t=Z(e,n);return t*=Math.pow(2,32),t+=Z(e,n+4),t}function ne(e,n){return e[n]<<24|e[n+1]<<16|e[n+2]<<8|e[n+3]}function te(e,n){const t=[];if(!n.length)return t;const s=e.byteLength;for(let i=0;i<s;){const a=Z(e,i),r=a>1?i+a:s;if(Q(e.subarray(i+4,i+8))===n[0])if(1===n.length)t.push(e.subarray(i+8,r));else{const s=te(e.subarray(i+8,r),n.slice(1));s.length&&W.apply(t,s)}i=r}return t}function se(e){const n=[],t=e[0];let s=8;const i=Z(e,s);s+=4;let a=0,r=0;0===t?(a=Z(e,s),r=Z(e,s+4),s+=8):(a=ee(e,s),r=ee(e,s+8),s+=16),s+=2;let o=e.length+r;const l=J(e,s);s+=2;for(let t=0;t<l;t++){let t=s;const a=Z(e,t);t+=4;const r=2147483647&a;if(1==(2147483648&a)>>>31)return x.warn("SIDX has hierarchical references (not supported)"),null;const l=Z(e,t);t+=4,n.push({referenceSize:r,subsegmentDuration:l,info:{duration:l/i,start:o,end:o+r-1}}),o+=r,t+=4,s=t}return{earliestPresentationTime:a,timescale:i,version:t,referencesCount:l,references:n}}function ie(e){const n=[],t=te(e,["moov","trak"]);for(let e=0;e<t.length;e++){const s=t[e],i=te(s,["tkhd"])[0];if(i){let e=i[0];const t=Z(i,0===e?12:20),a=te(s,["mdia","mdhd"])[0];if(a){e=a[0];const i=Z(a,0===e?12:20),r=te(s,["mdia","hdlr"])[0];if(r){const e=Q(r.subarray(8,12)),a={soun:U,vide:j}[e],o=ae(te(s,["mdia","minf","stbl","stsd"])[0]);a?(n[t]={timescale:i,type:a,stsd:o},n[a]=_({timescale:i,id:t},o)):n[t]={timescale:i,type:e,stsd:o}}}}}return te(e,["moov","mvex","trex"]).forEach((e=>{const t=Z(e,4),s=n[t];s&&(s.default={duration:Z(e,12),flags:Z(e,20)})})),n}function ae(e){const n=e.subarray(8),t=n.subarray(86),s=Q(n.subarray(4,8));let i,a=s;const r="enca"===s||"encv"===s;if(r){const e=te(n,[s])[0];te(e.subarray("enca"===s?28:78),["sinf"]).forEach((e=>{const n=te(e,["schm"])[0];if(n){const t=Q(n.subarray(4,8));if("cbcs"===t||"cenc"===t){const n=te(e,["frma"])[0];n&&(a=Q(n))}}}))}const o=a;switch(a){case"avc1":case"avc2":case"avc3":case"avc4":{const e=te(t,["avcC"])[0];e&&e.length>3&&(a+="."+le(e[1])+le(e[2])+le(e[3]),i=re("avc1"===o?"dva1":"dvav",t));break}case"mp4a":{const e=te(n,[s])[0],t=te(e.subarray(28),["esds"])[0];if(t&&t.length>7){let e=4;if(3!==t[e++])break;e=oe(t,e),e+=2;const n=t[e++];if(128&n&&(e+=2),64&n&&(e+=t[e++]),4!==t[e++])break;e=oe(t,e);const s=t[e++];if(64!==s)break;if(a+="."+le(s),e+=12,5!==t[e++])break;e=oe(t,e);const i=t[e++];let r=(248&i)>>3;31===r&&(r+=1+((7&i)<<3)+((224&t[e])>>5)),a+="."+r}break}case"hvc1":case"hev1":{const e=te(t,["hvcC"])[0];if(e&&e.length>12){const n=e[1],t=["","A","B","C"][n>>6],s=31&n,i=Z(e,2),r=(32&n)>>5?"H":"L",o=e[12],l=e.subarray(6,12);a+="."+t+s,a+="."+function(e){let n=0;for(let t=0;t<32;t++)n|=(e>>t&1)<<31-t;return n>>>0}(i).toString(16).toUpperCase(),a+="."+r+o;let c="";for(let e=l.length;e--;){const n=l[e];
vendor: 4,725 bytes, line 2
2(n||c)&&(c="."+n.toString(16).toUpperCase()+c)}a+=c}i=re("hev1"==o?"dvhe":"dvh1",t);break}case"dvh1":case"dvhe":case"dvav":case"dva1":case"dav1":a=re(a,t)||a;break;case"vp09":{const e=te(t,["vpcC"])[0];if(e&&e.length>6){const n=e[4],t=e[5],s=e[6]>>4&15;a+="."+ce(n)+"."+ce(t)+"."+ce(s)}break}case"av01":{const e=te(t,["av1C"])[0];if(e&&e.length>2){const n=e[1]>>>5,s=31&e[1],r=e[2]>>>7?"H":"M",o=(64&e[2])>>6,l=(32&e[2])>>5,c=2===n&&o?l?12:10:o?10:8,d=(16&e[2])>>4,u=(8&e[2])>>3,p=(4&e[2])>>2,h=3&e[2],m=1,v=1,g=1,f=0;a+="."+n+"."+ce(s)+r+"."+ce(c)+"."+d+"."+u+p+h+"."+ce(m)+"."+ce(v)+"."+ce(g)+"."+f,i=re("dav1",t)}break}}return{codec:a,encrypted:r,supplemental:i}}function re(e,n){const t=te(n,["dvvC"]),s=t.length?t[0]:te(n,["dvcC"])[0];if(s){const n=s[2]>>1&127,t=s[2]<<5&32|s[3]>>3&31;return e+"."+ce(n)+"."+ce(t)}}function oe(e,n){const t=n+5;for(;128&e[n++]&&n<t;);return n}function le(e){return("0"+e.toString(16).toUpperCase()).slice(-2)}function ce(e){return(e<10?"0":"")+e}function de(e){const n=te(e,["schm"])[0];if(n){const t=Q(n.subarray(4,8));if("cbcs"===t||"cenc"===t)return te(e,["schi","tenc"])[0]}return null}function ue(e,n){const t=new Uint8Array(e.length+n.length);return t.set(e),t.set(n,e.length),t}function pe(e,n){const t=[],s=n.samples,i=n.timescale,a=n.id;let r=!1;return te(s,["moof"]).map((o=>{const l=o.byteOffset-8;te(o,["traf"]).map((o=>{const c=te(o,["tfdt"]).map((e=>{const n=e[0];let t=Z(e,4);return 1===n&&(t*=Math.pow(2,32),t+=Z(e,8)),t/i}))[0];return void 0!==c&&(e=c),te(o,["tfhd"]).map((c=>{const d=Z(c,4),u=16777215&Z(c,0);let p=0;const h=!!(16&u);let m=0;const v=!!(32&u);let g=8;d===a&&(!!(1&u)&&(g+=8),!!(2&u)&&(g+=4),!!(8&u)&&(p=Z(c,g),g+=4),h&&(m=Z(c,g),g+=4),v&&(g+=4),"video"===n.type&&(r=he(n.codec)),te(o,["trun"]).map((a=>{const o=a[0],c=16777215&Z(a,0),d=!!(1&c);let u=0;const h=!!(4&c),v=!!(256&c);let g=0;const f=!!(512&c);let _=0;const b=!!(1024&c),y=!!(2048&c);let w=0;const k=Z(a,4);let T=8;d&&(u=Z(a,T),T+=4),h&&(T+=4);let E=u+l;for(let l=0;l<k;l++){if(v?(g=Z(a,T),T+=4):g=p,f?(_=Z(a,T),T+=4):_=m,b&&(T+=4),y&&(w=0===o?Z(a,T):ne(a,T),T+=4),n.type===j){let n=0;for(;n<_;){const a=Z(s,E);E+=4,me(r,s[E])&&ve(s.subarray(E,E+a),r?2:1,e+w/i,t),E+=a,n+=a+4}}e+=g/i}})))}))}))})),t}function he(e){if(!e)return!1;const n=e.substring(0,4);return"hvc1"===n||"hev1"===n||"dvh1"===n||"dvhe"===n}function me(e,n){if(e){const e=n>>1&63;return 39===e||40===e}return 6==(31&n)}function ve(e,n,t,s){const i=ge(e);let a=0;a+=n;let r=0,o=0,l=0;for(;a<i.length;){r=0;do{if(a>=i.length)break;l=i[a++],r+=l}while(255===l);o=0;do{if(a>=i.length)break;l=i[a++],o+=l}while(255===l);const e=i.length-a;let n=a;if(o<e)a+=o;else if(o>e){x.error(`Malformed SEI payload. ${o} is too small, only ${e} bytes left to parse.`);break}if(4===r){if(181===i[n++]){const e=J(i,n);if(n+=2,49===e){const e=Z(i,n);if(n+=4,1195456820===e){const e=i[n++];if(3===e){const a=i[n++],o=64&a,l=o?2+3*(31&a):0,c=new Uint8Array(l);if(o){c[0]=a;for(let e=1;e<l;e++)c[e]=i[n++]}s.push({type:e,payloadType:r,pts:t,bytes:c})}}}}}else if(5===r&&o>16){const e=[];for(let t=0;t<16;t++){const s=i[n++].toString(16);e.push(1==s.length?"0"+s:s),3!==t&&5!==t&&7!==t&&9!==t||e.push("-")}const a=o-16,l=new Uint8Array(a);for(let e=0;e<a;e++)l[e]=i[n++];s.push({payloadType:r,pts:t,uuid:e.join(""),userData:L(l),userDataBytes:l})}}}function ge(e){const n=e.byteLength,t=[];let s=1;for(;s<n-2;)0===e[s]&&0===e[s+1]&&3===e[s+2]?(t.push(s+2),s+=2):s++;if(0===t.length)return e;const i=n-t.length,a=new Uint8Array(i);let r=0;for(s=0;s<i;r++,s++)r===t[0]&&(r++,t.shift()),a[s]=e[r];return a}function fe(e){const n=e.getUint32(0),t=e.byteOffset,s=e.byteLength;if(s<n)return{offset:t,size:s};if(1886614376!==e.getUint32(4))return{offset:t,size:n};const i=e.getUint32(8)>>>24;if(0!==i&&1!==i)return{offset:t,size:n};const a=e.buffer,r=C(new Uint8Array(a,t+12,16));let o=null,l=null,c=0;if(0===i)c=28;else if(1===i){const i=e.getUint32(28);if(!i||s<32+16*i)return{offset:t,size:n};o=[];for(let e=0;e<i;e++)o.push(new Uint8Array(a,t+32+16*e,16));c=32+16*i}if(!c)return{offset:t,size:n};const d=e.getUint32(c);return n-32<d?{offset:t,size:n}:(l=new Uint8Array(a,t+c+4,d),{version:i,systemId:r,kids:o,data:l,offset:t,size:n})}const _e=()=>/\(Windows.+Firefox\//i.test(navigator.userAgent),be={audio:{a3ds:1,"ac-3":.95,"ac-4":1,alac:.9,alaw:1,dra1:1,"dts+":1,"dts-":1,dtsc:1,dtse:1,dtsh:1,"ec-3":.9,enca:1,fLaC:.9,flac:.9,FLAC:.9,g719:1,g726:1,m4ae:1,mha1:1,mha2:1,mhm1:1,mhm2:1,mlpa:1,mp4a:1,"raw ":1,Opus:1,opus:1,samr:1,sawb:1,sawp:1,sevc:1,sqcp:1,ssmv:1,twos:1,ulaw:1},video:{avc1:1,avc2:1,avc3:1,avc4:1,avcp:1,av01:.8,dav1:.8,drac:1,dva1:1,dvav:1,dvh1:.7,dvhe:.7,encv:1,hev1:.75,hvc1:.75,mjp2:1,mp4v:1,mvc1:1,mvc2:1,mvc3:1,mvc4:1,resv:1,rv
vendor: 12,825 bytes, line 2
260:1,s263:1,svc1:1,svc2:1,"vc-1":1,vp08:1,vp09:.9},text:{stpp:1,wvtt:1}};function ye(e,n){const t=be[n];return!!t&&!!t[e.slice(0,4)]}function we(e,n,t=!0){return!e.split(",").some((e=>!ke(e,n,t)))}function ke(e,n,t=!0){var s;const i=S(t);return null!=(s=null==i?void 0:i.isTypeSupported(Te(e,n)))&&s}function Te(e,n){return`${n}/mp4;codecs=${e}`}function Ee(e){if(e){const n=e.substring(0,4);return be.video[n]}return 2}function xe(e){const n=_e();return e.split(",").reduce(((e,t)=>{const s=n&&he(t)?9:be.video[t];return s?(2*s+e)/(e?3:2):(be.audio[t]+e)/(e?2:1)}),0)}const Se={},Ae=/flac|opus|mp4a\.40\.34/i;function Le(e,n=!0){return e.replace(Ae,(e=>function(e,n=!0){if(Se[e])return Se[e];const t={flac:["flac","fLaC","FLAC"],opus:["opus","Opus"],"mp4a.40.34":["mp3"]}[e];for(let i=0;i<t.length;i++){var s;if(ke(t[i],"audio",n))return Se[e]=t[i],t[i];if("mp3"===t[i]&&null!=(s=S(n))&&s.isTypeSupported("audio/mpeg"))return""}return e}(e.toLowerCase(),n)))}function Ce(e,n){if(e&&(e.length>4||-1!==["ac-3","ec-3","alac","fLaC","Opus"].indexOf(e))&&(Re(e,"audio")||Re(e,"video")))return e;if(n){const t=n.split(",");if(t.length>1){if(e)for(let n=t.length;n--;)if(t[n].substring(0,4)===e.substring(0,4))return t[n];return t[0]}}return n||e}function Re(e,n){return ye(e,n)&&ke(e,n)}function Ie(e){if(e.startsWith("av01.")){const n=e.split("."),t=["0","111","01","01","01","0"];for(let e=n.length;e>4&&e<10;e++)n[e]=t[e-4];return n.join(".")}return e}function Pe(e){const n=S(e)||{isTypeSupported:()=>!1};return{mpeg:n.isTypeSupported("audio/mpeg"),mp3:n.isTypeSupported('audio/mp4; codecs="mp3"'),ac3:n.isTypeSupported('audio/mp4; codecs="ac-3"')}}function De(e){return e.replace(/^.+codecs=["']?([^"']+).*$/,"$1")}const Oe={supported:!0,configurations:[],decodingInfoResults:[{supported:!0,powerEfficient:!0,smooth:!0}]};function Me(e,n){return{supported:!1,configurations:n,decodingInfoResults:[{supported:!1,smooth:!1,powerEfficient:!1}],error:e}}function Fe(n,t,s,i,a,r){const o=n.videoCodec,l=n.audioCodec?n.audioGroups:null,c=null==r?void 0:r.audioCodec,d=null==r?void 0:r.channels,u=d?parseInt(d):c?1/0:2;let p=null;if(null!=l&&l.length)try{p=1===l.length&&l[0]?t.groups[l[0]].channels:l.reduce(((e,n)=>{if(n){const s=t.groups[n];if(!s)throw new Error(`Audio track group ${n} not found`);Object.keys(s.channels).forEach((n=>{e[n]=(e[n]||0)+s.channels[n]}))}return e}),{2:0})}catch(e){return!0}return void 0!==o&&(o.split(",").some((e=>he(e)))||n.width>1920&&n.height>1088||n.height>1920&&n.width>1088||n.frameRate>Math.max(i,30)||"SDR"!==n.videoRange&&n.videoRange!==s||n.bitrate>Math.max(a,8e6))||!!p&&e(u)&&Object.keys(p).some((e=>parseInt(e)>u))}function Ne(e,n,t,s={}){const i=e.videoCodec;if(!i&&!e.audioCodec||!t)return Promise.resolve(Oe);const a=[],r=function(e){var n;const t=null==(n=e.videoCodec)?void 0:n.split(","),s=Be(e),i=e.width||640,a=e.height||480,r=e.frameRate||30,o=e.videoRange.toLowerCase();return t?t.map((e=>{const n={contentType:Te(Ie(e),"video"),width:i,height:a,bitrate:s,framerate:r};return"sdr"!==o&&(n.transferFunction=o),n})):[]}(e),o=r.length,l=function(e,n,t){var s;const i=null==(s=e.audioCodec)?void 0:s.split(","),a=Be(e);return i&&e.audioGroups?e.audioGroups.reduce(((e,s)=>{var r;const o=s?null==(r=n.groups[s])?void 0:r.tracks:null;return o?o.reduce(((e,n)=>{if(n.groupId===s){const s=parseFloat(n.channels||"");i.forEach((n=>{const i={contentType:Te(n,"audio"),bitrate:t?$e(n,a):a};s&&(i.channels=""+s),e.push(i)}))}return e}),e):e}),[]):[]}(e,n,o>0),c=l.length;for(let e=o||1*c||1;e--;){const n={type:"media-source"};if(o&&(n.video=r[e%o]),c){n.audio=l[e%c];const t=n.audio.bitrate;n.video&&t&&(n.video.bitrate-=t)}a.push(n)}if(i){const e=navigator.userAgent;if(i.split(",").some((e=>he(e)))&&_e())return Promise.resolve(Me(new Error(`Overriding Windows Firefox HEVC MediaCapabilities result based on user-agent string: (${e})`),a))}return Promise.all(a.map((e=>{const n=function(e){let n="";const{audio:t,video:s}=e;return s&&(n+=`${De(s.contentType)}_r${s.height}x${s.width}f${Math.ceil(s.framerate)}${s.transferFunction||"sd"}_${Math.ceil(s.bitrate/1e5)}`),t&&(n+=`${s?"_":""}${De(t.contentType)}_c${t.channels}`),n}(e);return s[n]||(s[n]=t.decodingInfo(e))}))).then((e=>({supported:!e.some((e=>!e.supported)),configurations:a,decodingInfoResults:e}))).catch((e=>({supported:!1,configurations:a,decodingInfoResults:[],error:e})))}function $e(e,n){if(n<=1)return 1;let t=128e3;return"ec-3"===e?t=768e3:"ac-3"===e&&(t=64e4),Math.min(n/2,t)}function Be(e){return 1e3*Math.ceil(Math.max(.9*e.bitrate,e.averageBitrate)/1e3)||1}const Ue=["NONE","TYPE-0","TYPE-1",null],je=["SDR","PQ","HLG"];function Ge(e){const{canSkipUntil:n,canSkipDateRanges:t,age:s}=e;return n&&s<n/2?t?"v2":"YES":""}class ze{constructor(e,n,t){this.msn=void 0,this.part=void 0,this.skip=void 0,this.msn=e,this.part=n,this.skip=t}addDirectives(e){const n=new self.URL(e);return void 0!==this.msn&&n.searchParams.set("_HLS_msn",this.msn.toString()),void 0!==this.part&&n.searchParams.set("_HLS_part",this.part.toString()),this.skip&&n.searchParams.set("_HLS_skip",this.skip),n.href}}class qe{constructor(e){if(this._attrs=void 0,this.audioCodec=void 0,this.bitrate=void 0,this.codecSet=void 0,this.url=void 0,this.frameRate=void 0,this.height=void 0,this.id=void 0,this.name=void 0,this.supplemental=void 0,this.videoCodec=void 0,this.width=void 0,this.details=void 0,this.fragmentError=0,this.loadError=0,this.loaded=void 0,this.realBitrate=0,this.supportedPromise=void 0,this.supportedResult=void 0,this._avgBitrate=0,this._audioGroups=void 0,this._subtitleGroups=void 0,this._urlId=0,this.url=[e.url],this._attrs=[e.attrs],this.bitrate=e.bitrate,e.details&&(this.details=e.details),this.id=e.id||0,this.name=e.name,this.width=e.width||0,this.height=e.height||0,this.frameRate=e.attrs.optionalFloat("FRAME-RATE",0),this._avgBitrate=e.attrs.decimalInteger("AVERAGE-BANDWIDTH"),this.audioCodec=e.audioCodec,this.videoCodec=e.videoCodec,this.codecSet=[e.videoCodec,e.audioCodec].filter((e=>!!e)).map((e=>e.substring(0,4))).join(","),"supplemental"in e){var n;this.supplemental=e.supplemental;const t=null==(n=e.supplemental)?void 0:n.videoCodec;t&&t!==e.videoCodec&&(this.codecSet+=`,${t.substring(0,4)}`)}this.addGroupId("audio",e.attrs.AUDIO),this.addGroupId("text",e.attrs.SUBTITLES)}get maxBitrate(){return Math.max(this.realBitrate,this.bitrate)}get averageBitrate(){return this._avgBitrate||this.realBitrate||this.bitrate}get attrs(){return this._attrs[0]}get codecs(){return this.attrs.CODECS||""}get pathwayId(){return this.attrs["PATHWAY-ID"]||"."}get videoRange(){return this.attrs["VIDEO-RANGE"]||"SDR"}get score(){return this.attrs.optionalFloat("SCORE",0)}get uri(){return this.url[0]||""}hasAudioGroup(e){return Ke(this._audioGroups,e)}hasSubtitleGroup(e){return Ke(this._subtitleGroups,e)}get audioGroups(){return this._audioGroups}get subtitleGroups(){return this._subtitleGroups}addGroupId(e,n){if(n)if("audio"===e){let e=this._audioGroups;e||(e=this._audioGroups=[]),-1===e.indexOf(n)&&e.push(n)}else if("text"===e){let e=this._subtitleGroups;e||(e=this._subtitleGroups=[]),-1===e.indexOf(n)&&e.push(n)}}get urlId(){return 0}set urlId(e){}get audioGroupIds(){return this.audioGroups?[this.audioGroupId]:void 0}get textGroupIds(){return this.subtitleGroups?[this.textGroupId]:void 0}get audioGroupId(){var e;return null==(e=this.audioGroups)?void 0:e[0]}get textGroupId(){var e;return null==(e=this.subtitleGroups)?void 0:e[0]}addFallback(){}}function Ke(e,n){return!(!n||!e)&&-1!==e.indexOf(n)}const Ve=(e,n)=>JSON.stringify(e,(e=>{const n=new WeakSet;return(t,s)=>{if(e&&(s=e(t,s)),"object"==typeof s&&null!==s){if(n.has(s))return;n.add(s)}return s}})(n));function He(e,n){x.log(`[abr] start candidates with "${e}" ignored because ${n}`)}function Ye(e){return e.reduce(((e,n)=>{let t=e.groups[n.groupId];t||(t=e.groups[n.groupId]={tracks:[],channels:{2:0},hasDefault:!1,hasAutoSelect:!1}),t.tracks.push(n);const s=n.channels||"2";return t.channels[s]=(t.channels[s]||0)+1,t.hasDefault=t.hasDefault||n.default,t.hasAutoSelect=t.hasAutoSelect||n.autoselect,t.hasDefault&&(e.hasDefaultAudio=!0),t.hasAutoSelect&&(e.hasAutoSelectAudio=!0),e}),{hasDefaultAudio:!1,hasAutoSelectAudio:!1,groups:{}})}function We(e){if(!e)return e;const{lang:n,assocLang:t,characteristics:s,channels:i,audioCodec:a}=e;return{lang:n,assocLang:t,characteristics:s,channels:i,audioCodec:a}}function Xe(e,n,t){if("attrs"in e){const t=n.indexOf(e);if(-1!==t)return t}for(let s=0;s<n.length;s++)if(Qe(e,n[s],t))return s;return-1}function Qe(e,n,t){const{groupId:s,name:i,lang:a,assocLang:r,default:o}=e,l=e.forced;return(void 0===s||n.groupId===s)&&(void 0===i||n.name===i)&&(void 0===a||function(e,n="--"){return e.length===n.length?e===n:e.startsWith(n)||n.startsWith(e)}(a,n.lang))&&(void 0===a||n.assocLang===r)&&(void 0===o||n.default===o)&&(void 0===l||n.forced===l)&&(!("characteristics"in e)||function(e,n=""){const t=e.split(","),s=n.split(",");return t.length===s.length&&!t.some((e=>-1===s.indexOf(e)))}(e.characteristics||"",n.characteristics))&&(void 0===t||t(e,n))}function Je(e,n){const{audioCodec:t,channels:s}=e;return!(void 0!==t&&(n.audioCodec||"").substring(0,4)!==t.substring(0,4)||void 0!==s&&s!==(n.channels||"2"))}function Ze(e,n,t){for(let s=n;s>-1;s--)if(t(e[s]))return s;for(let s=n+1;s<e.length;s++)if(t(e[s]))return s;return-1}function en(e,n){var t;return!!e&&e!==(null==(t=n.loadLevelObj)?void 0:t.uri)}const nn=function(e,n){let t=0,s=e.length-1,i=null,a=null;for(;t<=s;){i=(t+s)/2|0,a=e[i];const r=n(a);if(r>0)t=i+1;else{if(!(r<0))return a;s=i-1}}return null};function tn(e,n,t=0,s=0,i=.005){let a=null;if(e){a=n[1+e.sn-n[0].sn]||null;const s=e.endDTS-t;s>0&&s<15e-7&&(t+=15e-7),a&&e.level!==a.level&&a.end<=e.end&&(a=n[2+e.sn-n[0].sn]||null)}else 0===t&&0===n[0].start&&(a=n[0]);if(a&&((!e||e.level===a.level)&&0===sn(t,s,a)||function(e,n,t){if(n&&0===n.start&&n.level<e.level&&(n.endPTS||0)>0){const s=n.tagList.reduce(((e,n)=>("INF"===n[0]&&(e+=parseFloat(n[1])),e)),t);return e.start<=s}return!1}(a,e,Math.min(i,s))))return a;const r=nn(n,sn.bind(null,t,s));return!r||r===e&&a?a:r}function sn(e=0,n=0,t){if(t.start<=e&&t.start+t.duration>e)return 0;const s=Math.min(n,t.duration+(t.deltaPTS?t.deltaPTS:0));return t.start+t.duration-s<=e?1:t.start-s>e&&t.start?-1:0}function an(e,n,t){const s=1e3*Math.min(n,t.duration+(t.deltaPTS?t.deltaPTS:0));return(t.endProgramDateTime||0)-s>e}function rn(e,n,t){if(e&&e.startCC<=n&&e.endCC>=n){let s=e.fragments;const{fragmentHint:i}=e;let a;return i&&(s=s.concat(i)),nn(s,(e=>e.cc<n?1:e.cc>n?-1:(a=e,e.end<=t?1:e.start>t?-1:0))),a||null}return null}function on(e){switch(e.details){case i.FRAG_LOAD_TIMEOUT:case i.KEY_LOAD_TIMEOUT:case i.LEVEL_LOAD_TIMEOUT:case i.MANIFEST_LOAD_TIMEOUT:return!0}return!1}function ln(e,n){const t=on(n);return e.default[(t?"timeout":"error")+"Retry"]}function cn(e,n){const t="linear"===e.backoff?1:Math.pow(2,n);return Math.min(t*e.retryDelayMs,e.maxRetryDelayMs)}function dn(e){return _(_({},e),{errorRetry:null,timeoutRetry:null})}function un(e,n,t,s){if(!e)return!1;const i=null==s?void 0:s.code,a=n<e.maxNumRetry&&(function(e){return 0===e&&!1===navigator.onLine||!!e&&(e<400||e>499)}(i)||!!t);return e.shouldRetry?e.shouldRetry(e,n,t,s,a):a}function pn(e){const n={action:0,flags:0};return e&&(n.resolved=!0),n}var hn="NOT_LOADED",mn="APPENDING",vn="PARTIAL",gn="OK";class fn{constructor(e){this.activePartLists=Object.create(null),this.endListFragments=Object.create(null),this.fragments=Object.create(null),this.timeRanges=Object.create(null),this.bufferPadding=.2,this.hls=void 0,this.hasGaps=!1,this.hls=e,this._registerListeners()}_registerListeners(){const{hls:e}=this;e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.BUFFER_APPENDED,this.onBufferAppended,this),e.on(a.FRAG_BUFFERED,this.onFragBuffered,this),e.on(a.FRAG_LOADED,this.onFragLoaded,this)}_unregisterListeners(){const{hls:e}=this;e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.BUFFER_APPENDED,this.onBufferAppended,this),e.off(a.FRAG_BUFFERED,this.onFragBuffered,this),e.off(a.FRAG_LOADED,this.onFragLoaded,this)}destroy(){this._unregisterListeners(),this.fragments=this.activePartLists=this.endListFragments=this.timeRanges=null}getAppendedFrag(e,n){const t=this.activePartLists[n];if(t)for(let n=t.length;n--;){const s=t[n];if(!s)break;const i=s.end;if(s.start<=e&&null!==i&&e<=i)return s}return this.getBufferedFrag(e,n)}getBufferedFrag(e,n){return this.getFragAtPos(e,n,!0)}getFragAtPos(e,n,t){const{fragments:s}=this,i=Object.keys(s);for(let a=i.length;a--;){const r=s[i[a]];if((null==r?void 0:r.body.type)===n&&(!t||r.buffered)){const n=r.body;if(n.start<=e&&e<=n.end)return n}}return null}detectEvictedFragments(e,n,t,s,i){this.timeRanges&&(this.timeRanges[e]=n);const a=(null==s?void 0:s.fragment.sn)||-1;
vendor: 4,452 bytes, line 2
2Object.keys(this.fragments).forEach((s=>{const r=this.fragments[s];if(!r)return;if(a>=r.body.sn)return;if(!r.buffered&&(!r.loaded||i))return void(r.body.type===t&&this.removeFragment(r.body));const o=r.range[e];o&&(0!==o.time.length?o.time.some((e=>{const t=!this.isTimeBuffered(e.startPTS,e.endPTS,n);return t&&this.removeFragment(r.body),t})):this.removeFragment(r.body))}))}detectPartialFragments(e){const n=this.timeRanges;if(!n||"initSegment"===e.frag.sn)return;const t=e.frag,s=bn(t),i=this.fragments[s];if(!i||i.buffered&&t.gap)return;const a=!t.relurl;Object.keys(n).forEach((s=>{const r=t.elementaryStreams[s];if(!r)return;const o=n[s],l=a||!0===r.partial;i.range[s]=this.getBufferedTimes(t,e.part,l,o)})),i.loaded=null,Object.keys(i.range).length?(i.buffered=!0,(i.body.endList=t.endList||i.body.endList)&&(this.endListFragments[i.body.type]=i),_n(i)||this.removeParts(t.sn-1,t.type)):this.removeFragment(i.body)}removeParts(e,n){const t=this.activePartLists[n];t&&(this.activePartLists[n]=yn(t,(n=>n.fragment.sn>=e)))}fragBuffered(e,n){const t=bn(e);let s=this.fragments[t];!s&&n&&(s=this.fragments[t]={body:e,appendedPTS:null,loaded:null,buffered:!1,range:Object.create(null)},e.gap&&(this.hasGaps=!0)),s&&(s.loaded=null,s.buffered=!0)}getBufferedTimes(e,n,t,s){const i={time:[],partial:t},a=e.start,r=e.end,o=e.minEndPTS||r,l=e.maxStartPTS||a;for(let e=0;e<s.length;e++){const n=s.start(e)-this.bufferPadding,t=s.end(e)+this.bufferPadding;if(l>=n&&o<=t){i.time.push({startPTS:Math.max(a,s.start(e)),endPTS:Math.min(r,s.end(e))});break}if(a<t&&r>n){const n=Math.max(a,s.start(e)),t=Math.min(r,s.end(e));t>n&&(i.partial=!0,i.time.push({startPTS:n,endPTS:t}))}else if(r<=n)break}return i}getPartialFragment(e){let n,t,s,i=null,a=0;const{bufferPadding:r,fragments:o}=this;return Object.keys(o).forEach((l=>{const c=o[l];c&&_n(c)&&(t=c.body.start-r,s=c.body.end+r,e>=t&&e<=s&&(n=Math.min(e-t,s-e),a<=n&&(i=c.body,a=n)))})),i}isEndListAppended(e){const n=this.endListFragments[e];return void 0!==n&&(n.buffered||_n(n))}getState(e){const n=bn(e),t=this.fragments[n];return t?t.buffered?_n(t)?vn:gn:mn:hn}isTimeBuffered(e,n,t){let s,i;for(let a=0;a<t.length;a++){if(s=t.start(a)-this.bufferPadding,i=t.end(a)+this.bufferPadding,e>=s&&n<=i)return!0;if(n<=s)return!1}return!1}onManifestLoading(){this.removeAllFragments()}onFragLoaded(e,n){if("initSegment"===n.frag.sn||n.frag.bitrateTest)return;const t=n.frag,s=n.part?null:n,i=bn(t);this.fragments[i]={body:t,appendedPTS:null,loaded:s,buffered:!1,range:Object.create(null)}}onBufferAppended(e,n){const{frag:t,part:s,timeRanges:i,type:a}=n;if("initSegment"===t.sn)return;const r=t.type;if(s){let e=this.activePartLists[r];e||(this.activePartLists[r]=e=[]),e.push(s)}this.timeRanges=i;const o=i[a];this.detectEvictedFragments(a,o,r,s)}onFragBuffered(e,n){this.detectPartialFragments(n)}hasFragment(e){const n=bn(e);return!!this.fragments[n]}hasFragments(e){const{fragments:n}=this,t=Object.keys(n);if(!e)return t.length>0;for(let s=t.length;s--;){const i=n[t[s]];if((null==i?void 0:i.body.type)===e)return!0}return!1}hasParts(e){var n;return!(null==(n=this.activePartLists[e])||!n.length)}removeFragmentsInRange(e,n,t,s,i){s&&!this.hasGaps||Object.keys(this.fragments).forEach((a=>{const r=this.fragments[a];if(!r)return;const o=r.body;o.type!==t||s&&!o.gap||o.start<n&&o.end>e&&(r.buffered||i)&&this.removeFragment(o)}))}removeFragment(e){const n=bn(e);e.clearElementaryStreamInfo();const t=this.activePartLists[e.type];if(t){const n=e.sn;this.activePartLists[e.type]=yn(t,(e=>e.fragment.sn!==n))}delete this.fragments[n],e.endList&&delete this.endListFragments[e.type]}removeAllFragments(){var e,n;this.fragments=Object.create(null),this.endListFragments=Object.create(null),this.activePartLists=Object.create(null),this.hasGaps=!1;const t=null==(e=this.hls)||null==(n=e.latestLevelDetails)?void 0:n.partList;t&&t.forEach((e=>e.clearElementaryStreamInfo()))}}function _n(e){var n,t,s;return e.buffered&&(e.body.gap||(null==(n=e.range.video)?void 0:n.partial)||(null==(t=e.range.audio)?void 0:t.partial)||(null==(s=e.range.audiovideo)?void 0:s.partial))}function bn(e){return`${e.type}_${e.level}_${e.sn}`}function yn(e,n){return e.filter((e=>{const t=n(e);return t||e.clearElementaryStreamInfo(),t}))}class wn{constructor(e,n,t){this.subtle=void 0,this.aesIV=void 0,this.aesMode=void 0,this.subtle=e,this.aesIV=n,this.aesMode=t}decrypt(e,n){switch(this.aesMode){case 0:return this.subtle.decrypt({
vendor: 6,842 bytes, line 2
2name:"AES-CBC",iv:this.aesIV},n,e);case 1:return this.subtle.decrypt({name:"AES-CTR",counter:this.aesIV,length:64},n,e);default:throw new Error(`[AESCrypto] invalid aes mode ${this.aesMode}`)}}}class kn{constructor(){this.rcon=[0,1,2,4,8,16,32,64,128,27,54],this.subMix=[new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)],this.invSubMix=[new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)],this.sBox=new Uint32Array(256),this.invSBox=new Uint32Array(256),this.key=new Uint32Array(0),this.ksRows=0,this.keySize=0,this.keySchedule=void 0,this.invKeySchedule=void 0,this.initTable()}uint8ArrayToUint32Array_(e){const n=new DataView(e),t=new Uint32Array(4);for(let e=0;e<4;e++)t[e]=n.getUint32(4*e);return t}initTable(){const e=this.sBox,n=this.invSBox,t=this.subMix,s=t[0],i=t[1],a=t[2],r=t[3],o=this.invSubMix,l=o[0],c=o[1],d=o[2],u=o[3],p=new Uint32Array(256);let h=0,m=0,v=0;for(v=0;v<256;v++)p[v]=v<128?v<<1:v<<1^283;for(v=0;v<256;v++){let t=m^m<<1^m<<2^m<<3^m<<4;t=t>>>8^255&t^99,e[h]=t,n[t]=h;const o=p[h],v=p[o],g=p[v];let f=257*p[t]^16843008*t;s[h]=f<<24|f>>>8,i[h]=f<<16|f>>>16,a[h]=f<<8|f>>>24,r[h]=f,f=16843009*g^65537*v^257*o^16843008*h,l[t]=f<<24|f>>>8,c[t]=f<<16|f>>>16,d[t]=f<<8|f>>>24,u[t]=f,h?(h=o^p[p[p[g^o]]],m^=p[p[m]]):h=m=1}}expandKey(e){const n=this.uint8ArrayToUint32Array_(e);let t=!0,s=0;for(;s<n.length&&t;)t=n[s]===this.key[s],s++;if(t)return;this.key=n;const i=this.keySize=n.length;if(4!==i&&6!==i&&8!==i)throw new Error("Invalid aes key size="+i);const a=this.ksRows=4*(i+6+1);let r,o;const l=this.keySchedule=new Uint32Array(a),c=this.invKeySchedule=new Uint32Array(a),d=this.sBox,u=this.rcon,p=this.invSubMix,h=p[0],m=p[1],v=p[2],g=p[3];let f,_;for(r=0;r<a;r++)r<i?f=l[r]=n[r]:(_=f,r%i==0?(_=_<<8|_>>>24,_=d[_>>>24]<<24|d[_>>>16&255]<<16|d[_>>>8&255]<<8|d[255&_],_^=u[r/i|0]<<24):i>6&&r%i==4&&(_=d[_>>>24]<<24|d[_>>>16&255]<<16|d[_>>>8&255]<<8|d[255&_]),l[r]=f=(l[r-i]^_)>>>0);for(o=0;o<a;o++)r=a-o,_=3&o?l[r]:l[r-4],c[o]=o<4||r<=4?_:h[d[_>>>24]]^m[d[_>>>16&255]]^v[d[_>>>8&255]]^g[d[255&_]],c[o]=c[o]>>>0}networkToHostOrderSwap(e){return e<<24|(65280&e)<<8|(16711680&e)>>8|e>>>24}decrypt(e,n,t){const s=this.keySize+6,i=this.invKeySchedule,a=this.invSBox,r=this.invSubMix,o=r[0],l=r[1],c=r[2],d=r[3],u=this.uint8ArrayToUint32Array_(t);let p=u[0],h=u[1],m=u[2],v=u[3];const g=new Int32Array(e),f=new Int32Array(g.length);let _,b,y,w,k,T,E,x,S,A,L,C,R,I;const P=this.networkToHostOrderSwap;for(;n<g.length;){for(S=P(g[n]),A=P(g[n+1]),L=P(g[n+2]),C=P(g[n+3]),k=S^i[0],T=C^i[1],E=L^i[2],x=A^i[3],R=4,I=1;I<s;I++)_=o[k>>>24]^l[T>>16&255]^c[E>>8&255]^d[255&x]^i[R],b=o[T>>>24]^l[E>>16&255]^c[x>>8&255]^d[255&k]^i[R+1],y=o[E>>>24]^l[x>>16&255]^c[k>>8&255]^d[255&T]^i[R+2],w=o[x>>>24]^l[k>>16&255]^c[T>>8&255]^d[255&E]^i[R+3],k=_,T=b,E=y,x=w,R+=4;_=a[k>>>24]<<24^a[T>>16&255]<<16^a[E>>8&255]<<8^a[255&x]^i[R],b=a[T>>>24]<<24^a[E>>16&255]<<16^a[x>>8&255]<<8^a[255&k]^i[R+1],y=a[E>>>24]<<24^a[x>>16&255]<<16^a[k>>8&255]<<8^a[255&T]^i[R+2],w=a[x>>>24]<<24^a[k>>16&255]<<16^a[T>>8&255]<<8^a[255&E]^i[R+3],f[n]=P(_^p),f[n+1]=P(w^h),f[n+2]=P(y^m),f[n+3]=P(b^v),p=S,h=A,m=L,v=C,n+=4}return f.buffer}}class Tn{constructor(e,n,t){this.subtle=void 0,this.key=void 0,this.aesMode=void 0,this.subtle=e,this.key=n,this.aesMode=t}expandKey(){const e=function(e){switch(e){case 0:return"AES-CBC";case 1:return"AES-CTR";default:throw new Error(`[FastAESKey] invalid aes mode ${e}`)}}(this.aesMode);return this.subtle.importKey("raw",this.key,{name:e},!1,["encrypt","decrypt"])}}class En{constructor(e,{removePKCS7Padding:n=!0}={}){if(this.logEnabled=!0,this.removePKCS7Padding=void 0,this.subtle=null,this.softwareDecrypter=null,this.key=null,this.fastAesKey=null,this.remainderData=null,this.currentIV=null,this.currentResult=null,this.useSoftware=void 0,this.enableSoftwareAES=void 0,this.enableSoftwareAES=e.enableSoftwareAES,this.removePKCS7Padding=n,n)try{const e=self.crypto;e&&(this.subtle=e.subtle||e.webkitSubtle)}catch(e){}this.useSoftware=!this.subtle}destroy(){this.subtle=null,this.softwareDecrypter=null,this.key=null,this.fastAesKey=null,this.remainderData=null,this.currentIV=null,this.currentResult=null}isSync(){return this.useSoftware}flush(){const{currentResult:e,remainderData:n}=this;if(!e||n)return this.reset(),null;const t=new Uint8Array(e);return this.reset(),this.removePKCS7Padding?function(e){const n=e.byteLength,t=n&&new DataView(e.buffer).getUint8(n-1);return t?e.slice(0,n-t):e}(t):t}reset(){this.currentResult=null,this.currentIV=null,this.remainderData=null,this.softwareDecrypter&&(this.softwareDecrypter=null)}decrypt(e,n,t,s){return this.useSoftware?new Promise(((i,a)=>{const r=ArrayBuffer.isView(e)?e:new Uint8Array(e);this.softwareDecrypt(r,n,t,s);const o=this.flush();o?i(o.buffer):a(new Error("[softwareDecrypt] Failed to decrypt data"))})):this.webCryptoDecrypt(new Uint8Array(e),n,t,s)}softwareDecrypt(e,n,t,s){const{currentIV:i,currentResult:a,remainderData:r}=this;if(0!==s||16!==n.byteLength)return x.warn("SoftwareDecrypt: can only handle AES-128-CBC"),null;this.logOnce("JS AES decrypt"),r&&(e=ue(r,e),this.remainderData=null);const o=this.getValidChunk(e);if(!o.length)return null;i&&(t=i);let l=this.softwareDecrypter;l||(l=this.softwareDecrypter=new kn),l.expandKey(n);const c=a;return this.currentResult=l.decrypt(o.buffer,0,t),this.currentIV=o.slice(-16).buffer,c||null}webCryptoDecrypt(e,n,t,s){if(this.key!==n||!this.fastAesKey){if(!this.subtle)return Promise.resolve(this.onWebCryptoError(e,n,t,s));this.key=n,this.fastAesKey=new Tn(this.subtle,n,s)}return this.fastAesKey.expandKey().then((n=>this.subtle?(this.logOnce("WebCrypto AES decrypt"),new wn(this.subtle,new Uint8Array(t),s).decrypt(e.buffer,n)):Promise.reject(new Error("web crypto not initialized")))).catch((i=>(x.warn(`[decrypter]: WebCrypto Error, disable WebCrypto API, ${i.name}: ${i.message}`),this.onWebCryptoError(e,n,t,s))))}onWebCryptoError(e,n,t,s){const i=this.enableSoftwareAES;if(i){this.useSoftware=!0,this.logEnabled=!0,this.softwareDecrypt(e,n,t,s);const i=this.flush();if(i)return i.buffer}throw new Error("WebCrypto"+(i?" and softwareDecrypt":"")+": failed to decrypt data")}getValidChunk(e){let n=e;const t=e.length-e.length%16;return t!==e.length&&(n=e.slice(0,t),this.remainderData=e.slice(t)),n}logOnce(e){this.logEnabled&&(x.log(`[decrypter]: ${e}`),this.logEnabled=!1)}}const xn=Math.pow(2,17);class Sn{constructor(e){this.config=void 0,this.loader=null,this.partLoadTimeout=-1,this.config=e}destroy(){this.loader&&(this.loader.destroy(),this.loader=null)}abort(){this.loader&&this.loader.abort()}load(e,n){const t=e.url;if(!t)return Promise.reject(new Cn({type:s.NETWORK_ERROR,details:i.FRAG_LOAD_ERROR,fatal:!1,frag:e,error:new Error("Fragment does not have a "+(t?"part list":"url")),networkDetails:null}));this.abort();
vendor: 6,320 bytes, line 2
2const a=this.config,r=a.fLoader,o=a.loader;return new Promise(((l,c)=>{if(this.loader&&this.loader.destroy(),e.gap){if(e.tagList.some((e=>"GAP"===e[0])))return void c(Ln(e));e.gap=!1}const d=this.loader=r?new r(a):new o(a),u=An(e);e.loader=d;const p=dn(a.fragLoadPolicy.default),h={loadPolicy:p,timeout:p.maxLoadTimeMs,maxRetry:0,retryDelay:0,maxRetryDelay:0,highWaterMark:"initSegment"===e.sn?1/0:xn};e.stats=d.stats;const m={onSuccess:(n,t,s,i)=>{this.resetLoader(e,d);let a=n.data;s.resetIV&&e.decryptdata&&(e.decryptdata.iv=new Uint8Array(a.slice(0,16)),a=a.slice(16)),l({frag:e,part:null,payload:a,networkDetails:i})},onError:(n,a,r,o)=>{this.resetLoader(e,d),c(new Cn({type:s.NETWORK_ERROR,details:i.FRAG_LOAD_ERROR,fatal:!1,frag:e,response:_({url:t,data:void 0},n),error:new Error(`HTTP Error ${n.code} ${n.text}`),networkDetails:r,stats:o}))},onAbort:(n,t,a)=>{this.resetLoader(e,d),c(new Cn({type:s.NETWORK_ERROR,details:i.INTERNAL_ABORTED,fatal:!1,frag:e,error:new Error("Aborted"),networkDetails:a,stats:n}))},onTimeout:(n,t,a)=>{this.resetLoader(e,d),c(new Cn({type:s.NETWORK_ERROR,details:i.FRAG_LOAD_TIMEOUT,fatal:!1,frag:e,error:new Error(`Timeout after ${h.timeout}ms`),networkDetails:a,stats:n}))}};n&&(m.onProgress=(t,s,i,a)=>n({frag:e,part:null,payload:i,networkDetails:a})),d.load(u,h,m)}))}loadPart(e,n,t){this.abort();const a=this.config,r=a.fLoader,o=a.loader;return new Promise(((l,c)=>{if(this.loader&&this.loader.destroy(),e.gap||n.gap)return void c(Ln(e,n));const d=this.loader=r?new r(a):new o(a),u=An(e,n);e.loader=d;const p=dn(a.fragLoadPolicy.default),h={loadPolicy:p,timeout:p.maxLoadTimeMs,maxRetry:0,retryDelay:0,maxRetryDelay:0,highWaterMark:xn};n.stats=d.stats,d.load(u,h,{onSuccess:(s,i,a,r)=>{this.resetLoader(e,d),this.updateStatsFromPart(e,n);const o={frag:e,part:n,payload:s.data,networkDetails:r};t(o),l(o)},onError:(t,a,r,o)=>{this.resetLoader(e,d),c(new Cn({type:s.NETWORK_ERROR,details:i.FRAG_LOAD_ERROR,fatal:!1,frag:e,part:n,response:_({url:u.url,data:void 0},t),error:new Error(`HTTP Error ${t.code} ${t.text}`),networkDetails:r,stats:o}))},onAbort:(t,a,r)=>{e.stats.aborted=n.stats.aborted,this.resetLoader(e,d),c(new Cn({type:s.NETWORK_ERROR,details:i.INTERNAL_ABORTED,fatal:!1,frag:e,part:n,error:new Error("Aborted"),networkDetails:r,stats:t}))},onTimeout:(t,a,r)=>{this.resetLoader(e,d),c(new Cn({type:s.NETWORK_ERROR,details:i.FRAG_LOAD_TIMEOUT,fatal:!1,frag:e,part:n,error:new Error(`Timeout after ${h.timeout}ms`),networkDetails:r,stats:t}))}})}))}updateStatsFromPart(e,n){const t=e.stats,s=n.stats,i=s.total;if(t.loaded+=s.loaded,i){const s=Math.round(e.duration/n.duration),a=Math.min(Math.round(t.loaded/i),s),r=(s-a)*Math.round(t.loaded/a);t.total=t.loaded+r}else t.total=Math.max(t.loaded,t.total);const a=t.loading,r=s.loading;a.start?a.first+=r.first-r.start:(a.start=r.start,a.first=r.first),a.end=r.end}resetLoader(e,n){e.loader=null,this.loader===n&&(self.clearTimeout(this.partLoadTimeout),this.loader=null),n.destroy()}}function An(n,t=null){const s=t||n,i={frag:n,part:t,responseType:"arraybuffer",url:s.url,headers:{},rangeStart:0,rangeEnd:0},a=s.byteRangeStartOffset,r=s.byteRangeEndOffset;if(e(a)&&e(r)){var o;let e=a,t=r;if("initSegment"===n.sn&&("AES-128"===(l=null==(o=n.decryptdata)?void 0:o.method)||"AES-256"===l)){const n=r-a;n%16&&(t=r+(16-n%16)),0!==a&&(i.resetIV=!0,e=a-16)}i.rangeStart=e,i.rangeEnd=t}var l;return i}function Ln(e,n){const t=new Error(`GAP ${e.gap?"tag":"attribute"} found`),a={type:s.MEDIA_ERROR,details:i.FRAG_GAP,fatal:!1,frag:e,error:t,networkDetails:null};return n&&(a.part=n),(n||e).stats.aborted=!0,new Cn(a)}class Cn extends Error{constructor(e){super(e.error.message),this.data=void 0,this.data=e}}class Rn extends b{constructor(e,n){super(e,n),this._boundTick=void 0,this._tickTimer=null,this._tickInterval=null,this._tickCallCount=0,this._boundTick=this.tick.bind(this)}destroy(){this.onHandlerDestroying(),this.onHandlerDestroyed()}onHandlerDestroying(){this.clearNextTick(),this.clearInterval()}onHandlerDestroyed(){}hasInterval(){return!!this._tickInterval}hasNextTick(){return!!this._tickTimer}setInterval(e){return!this._tickInterval&&(this._tickCallCount=0,this._tickInterval=self.setInterval(this._boundTick,e),!0)}clearInterval(){return!!this._tickInterval&&(self.clearInterval(this._tickInterval),this._tickInterval=null,!0)}clearNextTick(){return!!this._tickTimer&&(self.clearTimeout(this._tickTimer),this._tickTimer=null,!0)}tick(){this._tickCallCount++,1===this._tickCallCount&&(this.doTick(),this._tickCallCount>1&&this.tickImmediate(),this._tickCallCount=0)}tickImmediate(){this.clearNextTick(),this._tickTimer=self.setTimeout(this._boundTick,0)}doTick(){}}class In{constructor(e,n,t,s=0,i=-1,a=!1){this.level=void 0,this.sn=void 0,this.part=void 0,this.id=void 0,this.size=void 0,this.partial=void 0,this.transmuxing={start:0,executeStart:0,executeEnd:0,end:0},this.buffering={audio:{start:0,executeStart:0,executeEnd:0,end:0},video:{start:0,executeStart:0,executeEnd:0,end:0},audiovideo:{start:0,executeStart:0,executeEnd:0,end:0}},this.level=e,this.sn=n,this.id=t,this.size=s,this.part=i,this.partial=a}}const Pn={length:0,start:()=>0,end:()=>0};class Dn{static isBuffered(e,n){if(e){const t=Dn.getBuffered(e);for(let e=t.length;e--;)if(n>=t.start(e)&&n<=t.end(e))return!0}return!1}static bufferedRanges(e){if(e){const n=Dn.getBuffered(e);return Dn.timeRangesToArray(n)}return[]}static timeRangesToArray(e){const n=[];for(let t=0;t<e.length;t++)n.push({start:e.start(t),end:e.end(t)});return n}static bufferInfo(e,n,t){if(e){const s=Dn.bufferedRanges(e);if(s.length)return Dn.bufferedInfo(s,n,t)}return{len:0,start:n,end:n,bufferedIndex:-1}}static bufferedInfo(e,n,t){n=Math.max(0,n),e.length>1&&e.sort(((e,n)=>e.start-n.start||n.end-e.end));let s=-1,i=[];if(t)for(let a=0;a<e.length;a++){n>=e[a].start&&n<=e[a].end&&(s=a);const r=i.length;if(r){const n=i[r-1].end;e[a].start-n<t?e[a].end>n&&(i[r-1].end=e[a].end):i.push(e[a])}else i.push(e[a])}else i=e;let a,r=0,o=n,l=n;for(let e=0;e<i.length;e++){const c=i[e].start,d=i[e].end;if(-1===s&&n>=c&&n<=d&&(s=e),n+t>=c&&n<d)o=c,l=d,r=l-n;else if(n+t<c){a=c;break}}return{len:r,start:o||0,end:l||0,nextStart:a,buffered:e,bufferedIndex:s}}static getBuffered(e){try{return e.buffered||Pn}catch(e){return x.log("failed to get media.buffered",e),Pn}}}
vendor: 6,309 bytes, line 2
2const On=/\{\$([a-zA-Z0-9-_]+)\}/g;function Mn(e){return On.test(e)}function Fn(e,n){if(null!==e.variableList||e.hasVariableRefs){const t=e.variableList;return n.replace(On,(n=>{const s=n.substring(2,n.length-1),i=null==t?void 0:t[s];return void 0===i?(e.playlistParsingError||(e.playlistParsingError=new Error(`Missing preceding EXT-X-DEFINE tag for Variable Reference: "${s}"`)),n):i}))}return n}function Nn(e,n,t){let s,i,a=e.variableList;if(a||(e.variableList=a={}),"QUERYPARAM"in n){s=n.QUERYPARAM;try{const e=new self.URL(t).searchParams;if(!e.has(s))throw new Error(`"${s}" does not match any query parameter in URI: "${t}"`);i=e.get(s)}catch(n){e.playlistParsingError||(e.playlistParsingError=new Error(`EXT-X-DEFINE QUERYPARAM: ${n.message}`))}}else s=n.NAME,i=n.VALUE;s in a?e.playlistParsingError||(e.playlistParsingError=new Error(`EXT-X-DEFINE duplicate Variable Name declarations: "${s}"`)):a[s]=i||""}function $n(e,n,t){const s=n.IMPORT;if(t&&s in t){let n=e.variableList;n||(e.variableList=n={}),n[s]=t[s]}else e.playlistParsingError||(e.playlistParsingError=new Error(`EXT-X-DEFINE IMPORT attribute not found in Multivariant Playlist: "${s}"`))}const Bn=/^(\d+)x(\d+)$/,Un=/(.+?)=(".*?"|.*?)(?:,|$)/g;class jn{constructor(e,n){"string"==typeof e&&(e=jn.parseAttrList(e,n)),g(this,e)}get clientAttrs(){return Object.keys(this).filter((e=>"X-"===e.substring(0,2)))}decimalInteger(e){const n=parseInt(this[e],10);return n>Number.MAX_SAFE_INTEGER?1/0:n}hexadecimalInteger(e){if(this[e]){let n=(this[e]||"0x").slice(2);n=(1&n.length?"0":"")+n;const t=new Uint8Array(n.length/2);for(let e=0;e<n.length/2;e++)t[e]=parseInt(n.slice(2*e,2*e+2),16);return t}return null}hexadecimalIntegerAsNumber(e){const n=parseInt(this[e],16);return n>Number.MAX_SAFE_INTEGER?1/0:n}decimalFloatingPoint(e){return parseFloat(this[e])}optionalFloat(e,n){const t=this[e];return t?parseFloat(t):n}enumeratedString(e){return this[e]}enumeratedStringList(e,n){const t=this[e];return(t?t.split(/[ ,]+/):[]).reduce(((e,n)=>(e[n.toLowerCase()]=!0,e)),n)}bool(e){return"YES"===this[e]}decimalResolution(e){const n=Bn.exec(this[e]);if(null!==n)return{width:parseInt(n[1],10),height:parseInt(n[2],10)}}static parseAttrList(e,n){let t;const s={};for(Un.lastIndex=0;null!==(t=Un.exec(e));){const i=t[1].trim();let a=t[2];const r=0===a.indexOf('"')&&a.lastIndexOf('"')===a.length-1;let o=!1;if(r)a=a.slice(1,-1);else switch(i){case"IV":case"SCTE35-CMD":case"SCTE35-IN":case"SCTE35-OUT":o=!0}if(n&&(r||o))a=Fn(n,a);else if(!o&&!r)switch(i){case"CLOSED-CAPTIONS":if("NONE"===a)break;case"ALLOWED-CPC":case"CLASS":case"ASSOC-LANGUAGE":case"AUDIO":case"BYTERANGE":case"CHANNELS":case"CHARACTERISTICS":case"CODECS":case"DATA-ID":case"END-DATE":case"GROUP-ID":case"ID":case"IMPORT":case"INSTREAM-ID":case"KEYFORMAT":case"KEYFORMATVERSIONS":case"LANGUAGE":case"NAME":case"PATHWAY-ID":case"QUERYPARAM":case"RECENTLY-REMOVED-DATERANGES":case"SERVER-URI":case"STABLE-RENDITION-ID":case"STABLE-VARIANT-ID":case"START-DATE":case"SUBTITLES":case"SUPPLEMENTAL-CODECS":case"URI":case"VALUE":case"VIDEO":case"X-ASSET-LIST":case"X-ASSET-URI":x.warn(`${e}: attribute ${i} is missing quotes`)}s[i]=a}return s}}function Gn(e){return"SCTE35-OUT"===e||"SCTE35-IN"===e||"SCTE35-CMD"===e}class zn{constructor(n,t,s=0){var i;if(this.attr=void 0,this.tagAnchor=void 0,this.tagOrder=void 0,this._startDate=void 0,this._endDate=void 0,this._dateAtEnd=void 0,this._cue=void 0,this._badValueForSameId=void 0,this.tagAnchor=(null==t?void 0:t.tagAnchor)||null,this.tagOrder=null!=(i=null==t?void 0:t.tagOrder)?i:s,t){const e=t.attr;for(const t in e)if(Object.prototype.hasOwnProperty.call(n,t)&&n[t]!==e[t]){x.warn(`DATERANGE tag attribute: "${t}" does not match for tags with ID: "${n.ID}"`),this._badValueForSameId=t;break}n=g(new jn({}),e,n)}if(this.attr=n,t?(this._startDate=t._startDate,this._cue=t._cue,this._endDate=t._endDate,this._dateAtEnd=t._dateAtEnd):this._startDate=new Date(n["START-DATE"]),"END-DATE"in this.attr){const n=(null==t?void 0:t.endDate)||new Date(this.attr["END-DATE"]);e(n.getTime())&&(this._endDate=n)}}get id(){return this.attr.ID}get class(){return this.attr.CLASS}get cue(){const e=this._cue;return void 0===e?this._cue=this.attr.enumeratedStringList(this.attr.CUE?"CUE":"X-CUE",{pre:!1,post:!1,once:!1}):e}get startTime(){const{tagAnchor:e}=this;return null===e||null===e.programDateTime?(x.warn(`Expected tagAnchor Fragment with PDT set for DateRange "${this.id}": ${e}`),NaN):e.start+(this.startDate.getTime()-e.programDateTime)/1e3}get startDate(){return this._startDate}get endDate(){const e=this._endDate||this._dateAtEnd;if(e)return e;const n=this.duration;return null!==n?this._dateAtEnd=new Date(this._startDate.getTime()+1e3*n):null}get duration(){if("DURATION"in this.attr){const n=this.attr.decimalFloatingPoint("DURATION");if(e(n))return n}else if(this._endDate)return(this._endDate.getTime()-this._startDate.getTime())/1e3;return null}get plannedDuration(){return"PLANNED-DURATION"in this.attr?this.attr.decimalFloatingPoint("PLANNED-DURATION"):null}get endOnNext(){return this.attr.bool("END-ON-NEXT")}get isInterstitial(){return"com.apple.hls.interstitial"===this.class}get isValid(){return!!this.id&&!this._badValueForSameId&&e(this.startDate.getTime())&&(null===this.duration||this.duration>=0)&&(!this.endOnNext||!!this.class)&&(!this.attr.CUE||!this.cue.pre&&!this.cue.post||this.cue.pre!==this.cue.post)&&(!this.isInterstitial||"X-ASSET-URI"in this.attr||"X-ASSET-LIST"in this.attr)}}class qn{constructor(e){this.PTSKnown=!1,this.alignedSliding=!1,this.averagetargetduration=void 0,this.endCC=0,this.endSN=0,this.fragments=void 0,this.fragmentHint=void 0,this.partList=null,this.dateRanges=void 0,this.dateRangeTagCount=0,this.live=!0,this.requestScheduled=-1,this.ageHeader=0,this.advancedDateTime=void 0,this.updated=!0,this.advanced=!0,this.misses=0,this.startCC=0,this.startSN=0,this.startTimeOffset=null,this.targetduration=0,this.totalduration=0,this.type=null,this.url=void 0,this.m3u8="",this.version=null,this.canBlockReload=!1,this.canSkipUntil=0,this.canSkipDateRanges=!1,this.skippedSegments=0,this.recentlyRemovedDateranges=void 0,this.partHoldBack=0,this.holdBack=0,this.partTarget=0,this.preloadHint=void 0,this.renditionReports=void 0,this.tuneInGoal=0,this.deltaUpdateFailed=void 0,this.drift
2StartTime=0,this.driftEndTime=0,this.driftStart=0,this.driftEnd=0,this.encryptedFragments=void 0,this.playlistParsingError=null,this.variableList=null,this.hasVariableRefs=!1,this.appliedTimelineOffset=void 0,this.fragments=[],this.encryptedFragments=[],this.dateRanges={},this.url=e}reloaded(e){if(!e)return this.advanced=!0,void(this.updated=!0);const n=this.lastPartSn-e.lastPartSn,t=this.lastPartIndex-e.lastPartIndex;this.updated=this.endSN!==e.endSN||!!t||!!n||!this.live,this.advanced=this.endSN>e.endSN||n>0||0===n&&t>0,this.updated||this.advanced?this.misses=Math.floor(.6*e.misses):this.misses=e.misses+1}get hasProgramDateTime(){return!!this.fragments.length&&e(this.fragments[this.fragments.length-1].programDateTime)}get levelTargetDuration(){return this.averagetargetduration||this.targetduration||10}get drift(){const e=this.driftEndTime-this.driftStartTime;return e>0?1e3*(this.driftEnd-this.driftStart)/e:1}get edge(){return this.partEnd||this.fragmentEnd}get partEnd(){var e;return null!=(e=this.partList)&&e.length?this.partList[this.partList.length-1].end:this.fragmentEnd}get fragmentEnd(){var e;return null!=(e=this.fragments)&&e.length?this.fragments[this.fragments.length-1].end:0}get fragmentStart(){var e;return null!=(e=this.fragments)&&e.length?this.fragments[0].start:0}get age(){return this.advancedDateTime?Math.max(Date.now()-this.advancedDateTime,0)/1e3:0}get lastPartIndex(){var e;return null!=(e=this.partList)&&e.length?this.partList[this.partList.length-1].index:-1}get maxPartIndex(){const e=this.partList;if(e){const n=this.lastPartIndex;if(-1!==n){for(let t=e.length;t--;)if(e[t].index>n)return e[t].index;return n}}return 0}get lastPartSn(){var e;return null!=(e=this.partList)&&e.length?this.partList[this.partList.length-1].fragment.sn:this.endSN}get expired(){if(this.live&&this.age&&this.misses<3){const e=this.partEnd-this.fragmentStart;return this.age>Math.max(e,this.totalduration)+this.levelTargetDuration}return!1}}function Kn(e){return"AES-128"===e||"AES-256"===e||"AES-256-CTR"===e}function Vn(e){switch(e){case"AES-128":case"AES-256":return 0;case"AES-256-CTR":return 1;default:throw new Error(`invalid full segment method ${e}`)}}function Hn(e){return Uint8Array.from(atob(e),(e=>e.charCodeAt(0)))}function Yn(e){return Uint8Array.from(unescape(encodeURIComponent(e)),(e=>e.charCodeAt(0)))}const Wn="undefined"!=typeof self?self:void 0;var Xn={CLEARKEY:"org.w3.clearkey",FAIRPLAY:"com.apple.fps",PLAYREADY:"com.microsoft.playready",WIDEVINE:"com.widevine.alpha"},Qn="org.w3.clearkey",Jn="com.apple.streamingkeydelivery",Zn="com.microsoft.playready",et="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed";function nt(e){switch(e){case Jn:return Xn.FAIRPLAY;case Zn:return Xn.PLAYREADY;case et:return Xn.WIDEVINE;case Qn:return Xn.CLEARKEY}}function tt(e){return"edef8ba979d64acea3c827dcd51d21ed"===e?Xn.WIDEVINE:"9a04f07998404286ab92e65be0885f95"===e?Xn.PLAYREADY:"1077efecc0b24d02ace33c1e52e2fb4b"===e||"e2719d58a985b3c9781ab030af78d30e"===e?Xn.CLEARKEY:void 0}function st(e){switch(e){case Xn.FAIRPLAY:return Jn;case Xn.PLAYREADY:return Zn;case Xn.WIDEVINE:return et;case Xn.CLEARKEY:return Qn}}function it(e){const{drmSystems:n,widevineLicenseUrl:t}=e,s=n?[Xn.FAIRPLAY,Xn.WIDEVINE,Xn.PLAYREADY,Xn.CLEARKEY].filter((e=>!!n[e])):[];return!s[Xn.WIDEVINE]&&t&&s.push(Xn.WIDEVINE),s}const at=null!=Wn&&null!=(rt=Wn.navigator)&&rt.requestMediaKeySystemAccess?self.navigator.requestMediaKeySystemAccess.bind(self.navigator):null;var rt;function ot(e){const n=new Uint16Array(e.buffer,e.byteOffset,e.byteLength/2),t=String.fromCharCode.apply(null,Array.from(n)),s=t.substring(t.indexOf("<"),t.length),i=(new DOMParser).parseFromString(s,"text/xml").getElementsByTagName("KID")[0];if(i){const e=i.childNodes[0]?i.childNodes[0].nodeValue:i.getAttribute("VALUE");if(e){const n=Hn(e).subarray(0,16);return function(e){const n=function(e,n,t){const s=e[n];e[n]=e[t],e[t]=s};n(e,0,3),n(e,1,2),n(e,4,5),n(e,6,7)}(n),n}}return null}let lt={};class ct{static clearKeyUriToKeyIdMap(){lt={}}constructor(e,n,t,s=[1],i=null){this.uri=void 0,this.method=void 0,this.keyFormat=void 0,this.keyFormatVersions=void 0,this.encrypted=void 0,this.isCommonEncryption=void 0,this.iv=null,this.key=null,this.keyId=null,this.pss
2h=null,this.method=e,this.uri=n,this.keyFormat=t,this.keyFormatVersions=s,this.iv=i,this.encrypted=!!e&&"NONE"!==e,this.isCommonEncryption=this.encrypted&&!Kn(e)}isSupported(){if(this.method){if(Kn(this.method)||"NONE"===this.method)return!0;if("identity"===this.keyFormat)return"SAMPLE-AES"===this.method;switch(this.keyFormat){case Jn:case et:case Zn:case Qn:return-1!==["ISO-23001-7","SAMPLE-AES","SAMPLE-AES-CENC","SAMPLE-AES-CTR"].indexOf(this.method)}}return!1}getDecryptData(e){if(!this.encrypted||!this.uri)return null;if(Kn(this.method)&&this.uri&&!this.iv){"number"!=typeof e&&(x.warn(`missing IV for initialization segment with method="${this.method}" - compliance issue`),e=0);const n=function(e){const n=new Uint8Array(16);for(let t=12;t<16;t++)n[t]=e>>8*(15-t)&255;return n}(e);return new ct(this.method,this.uri,"identity",this.keyFormatVersions,n)}const n=function(e){const n=e.split(":");let t=null;if("data"===n[0]&&2===n.length){const e=n[1].split(";"),s=e[e.length-1].split(",");if(2===s.length){const n="base64"===s[0],i=s[1];n?(e.splice(-1,1),t=Hn(i)):t=function(e){const n=Yn(e).subarray(0,16),t=new Uint8Array(16);return t.set(n,16-n.length),t}(i)}}return t}(this.uri);if(n)switch(this.keyFormat){case et:this.pssh=n,n.length>=22&&(this.keyId=n.subarray(n.length-22,n.length-6));break;case Zn:{const e=new Uint8Array([154,4,240,121,152,64,66,134,171,146,230,91,224,136,95,149]);this.pssh=function(e,n,t){if(16!==e.byteLength)throw new RangeError("Invalid system id");let s,i,a;s=0,i=new Uint8Array,a=new Uint8Array;const r=new Uint8Array(4);return t&&t.byteLength>0&&new DataView(r.buffer).setUint32(0,t.byteLength,!1),function(e,...n){const t=n.length;let s=8,i=t;for(;i--;)s+=n[i].byteLength;const a=new Uint8Array(s);for(a[0]=s>>24&255,a[1]=s>>16&255,a[2]=s>>8&255,a[3]=255&s,a.set(e,4),i=0,s=8;i<t;i++)a.set(n[i],s),s+=n[i].byteLength;return a}([112,115,115,104],new Uint8Array([0,0,0,0]),e,a,i,r,t||new Uint8Array)}(e,0,n),this.keyId=ot(n);break}default:{let e=n.subarray(0,16);if(16!==e.length){const n=new Uint8Array(16);n.set(e,16-e.length),e=n}this.keyId=e;break}}if(!this.keyId||16!==this.keyId.byteLength){let e=lt[this.uri];if(!e){const n=Object.keys(lt).length%Number.MAX_SAFE_INTEGER;e=new Uint8Array(16),new DataView(e.buffer,12,4).setUint32(0,n),lt[this.uri]=e}this.keyId=e}return this}}const dt=/#EXT-X-STREAM-INF:([^\r\n]*)(?:[\r\n](?:#[^\r\n]*)?)*([^\r\n]+)|#EXT-X-(SESSION-DATA|SESSION-KEY|DEFINE|CONTENT-STEERING|START):([^\r\n]*)[\r\n]+/g,ut=/#EXT-X-MEDIA:(.*)/g,pt=/^#EXT(?:INF|-X-TARGETDURATION):/m,ht=new RegExp([/#EXTINF:\s*(\d*(?:\.\d+)?)(?:,(.*)\s+)?/.source,/(?!#) *(\S[^\r\n]*)/.source,/#.*/.source].join("|"),"g"),mt=new RegExp([/#EXT-X-(PROGRAM-DATE-TIME|BYTERANGE|DATERANGE|DEFINE|KEY|MAP|PART|PART-INF|PLAYLIST-TYPE|PRELOAD-HINT|RENDITION-REPORT|SERVER-CONTROL|SKIP|START):(.+)/.source,/#EXT-X-(BITRATE|DISCONTINUITY-SEQUENCE|MEDIA-SEQUENCE|TARGETDURATION|VERSION): *(\d+)/.source,/#EXT-X-(DISCONTINUITY|ENDLIST|GAP|INDEPENDENT-SEGMENTS)/.source,/(#)([^:]*):(.*)/.source,/(#)(.*)(?:.*)\r?\n?/.source].join("|"));class vt{static findGroup(e,n){for(let t=0;t<e.length;t++){const s=e[t];if(s.id===n)return s}}static resolve(e,n){return $.buildAbsoluteURL(n,e,{alwaysNormalize:!0})}static isMediaPlaylist(e){return pt.test(e)}static parseMasterPlaylist(e,n){const t={contentSteering:null,levels:[],playlistParsingError:null,sessionData:null,sessionKeys:null,startTimeOffset:null,variableList:null,hasVariableRefs:Mn(e)},s=[];let i;for(dt.lastIndex=0;null!=(i=dt.exec(e));)if(i[1]){var a;const e=new jn(i[1],t),r=Fn(t,i[2]),o={attrs:e,bitrate:e.decimalInteger("BANDWIDTH")||e.decimalInteger("AVERAGE-BANDWIDTH"),name:e.NAME,url:vt.resolve(r,n)},l=e.decimalResolution("RESOLUTION");l&&(o.width=l.width,o.height=l.height),yt(e.CODECS,o);const c=e["SUPPLEMENTAL-CODECS"];c&&(o.supplemental={},yt(c,o.supplemental)),null!=(a=o.unknownCodecs)&&a.length||s.push(o),t.levels.push(o)}else if(i[3]){const e=i[3],s=i[4];switch(e){case"SESSION-DATA":{const e=new jn(s,t),n=e["DATA-ID"];n&&(null===t.sessionData&&(t.sessionData={}),t.sessionData[n]=e);break}case"SESSION-KEY":{const e=_t(s,n,t);e.encrypted&&e.isSupported()?(null===t.sessionKeys&&(t.sessionKeys=[]),t.sessionKeys.push(e)):x.warn(`[Keys] Ignoring invalid EXT-X-SESSION-KEY tag: "${s}"`);break}case"DEFINE":Nn(t,new jn(s,t),n);break;case"CONTENT-STEERING":{const e=new jn(s,t);t.contentSteering={uri:vt.resolve(e["SERVER-URI"],n),pathwayId:e["PATHWAY-ID"]||"."};break}case"START":t.startTimeOffset=bt(s)}}const r=s.length>0&&s.length<t.levels.length;return t.levels=r?s:t.levels,0===t.levels.length&&(t.playlistParsingError=new Error("no levels found in manifest")),t}static parseMasterPlaylistMedia(e,n,t){let s;const i={},a=t.levels,r={AUDIO:a.map((e=>({id:e.attrs.AUDIO,audioCodec:e.audioCodec}))),SUBTITLES:a.map((e=>({id:e.attrs.SUBTITLES,textCodec:e.textCodec}))),"CLOSED-CAPTIONS":[]};let o=0;for(ut.lastIndex=0;null!==(s=ut.exec(e));){const e=new jn(s[1],t),a=e.TYPE;if(a){const t=r[a],s=i[a]||[];i[a]=s;const l=e.LANGUAGE,c=e["ASSOC-LANGUAGE"],d=e.CHANNELS,u=e.CHARACTERISTICS,p=e["INSTREAM-ID"],h={attrs:e,bitrate:0,id:o++,groupId:e["GROUP-ID"]||"",name:e.NAME||l||"",type:a,default:e.bool("DEFAULT"),autoselect:e.bool("AUTOSELECT"),forced:e.bool("FORCED"),lang:l,url:e.URI?vt.resolve(e.URI,n):""};if(c&&(h.assocLang=c),d&&(h.channels=d),u&&(h.characteristics=u),p&&(h.instreamId=p),null!=t&&t.length){const e=vt.findGroup(t,h.groupId)||t[0];wt(h,e,"audioCodec"),wt(h,e,"textCodec")}s.push(h)}}return i}static parseLevelPlaylist(n,t,s,i,a,r){var o;const l={url:t},c=new qn(t),d=c.fragments,u=[];let p,h,m,v,f=null,_=0,b=0,y=0,w=0,k=0,T=null,E=new K(i,l),S=-1,A=!1,L=null;if(ht.lastIndex=0,c.m3u8=n,c.hasVariableRefs=Mn(n),"#EXTM3U"!==(null==(o=ht.exec(n))?void 0:o[0]))return c.playlistParsingError=new Error("Missing format identifier #EXTM3U"),c;for(;null!==(p=ht.exec(n));){A&&(A=!1,E=new K(i,l),E.playlistOffset=y,E.start=y,E.sn=_,E.cc=w,k&&(E.bitrate=k),E.level=s,f&&(E.initSegment=f,f.rawProgramDateTime&&(E.rawProgramDateTime=f.rawProgramDateTime,f.rawProgramDateTime=null),L&&(E.setByteRange(L),L=null)));const n=p[1];if(n){E.duration=parseFloat(n);const e=(" "+p[2]).slice(1);E.title=e||null,E.tagList.push(e?["INF",n,e]:["INF",n])}else if(p[3]){if(e(E.duration)){E.playlistOffset=y,E.start=y,m&&Et(E,m,c),E.sn=_,E.level=s,E.cc=w,d.push(E);const e=(" "+p[3]).slice(1);E.relurl=Fn(c,e),kt(E,T,u),T=E,y+=E.duration,_++,b=0,A=!0}}
vendor: 10,986 bytes, line 2
2else{if(p=p[0].match(mt),!p){x.warn("No matches on slow regex match for level playlist!");continue}for(h=1;h<p.length&&void 0===p[h];h++);const n=(" "+p[h]).slice(1),a=(" "+p[h+1]).slice(1),o=p[h+2]?(" "+p[h+2]).slice(1):null;switch(n){case"BYTERANGE":T?E.setByteRange(a,T):E.setByteRange(a);break;case"PROGRAM-DATE-TIME":E.rawProgramDateTime=a,E.tagList.push(["PROGRAM-DATE-TIME",a]),-1===S&&(S=d.length);break;case"PLAYLIST-TYPE":c.type&&xt(c,n,p),c.type=a.toUpperCase();break;case"MEDIA-SEQUENCE":0!==c.startSN?xt(c,n,p):d.length>0&&St(c,n,p),_=c.startSN=parseInt(a);break;case"SKIP":{c.skippedSegments&&xt(c,n,p);const t=new jn(a,c),s=t.decimalInteger("SKIPPED-SEGMENTS");if(e(s)){c.skippedSegments+=s;for(let e=s;e--;)d.push(null);_+=s}const i=t.enumeratedString("RECENTLY-REMOVED-DATERANGES");i&&(c.recentlyRemovedDateranges=(c.recentlyRemovedDateranges||[]).concat(i.split("\t")));break}case"TARGETDURATION":0!==c.targetduration&&xt(c,n,p),c.targetduration=Math.max(parseInt(a),1);break;case"VERSION":null!==c.version&&xt(c,n,p),c.version=parseInt(a);break;case"INDEPENDENT-SEGMENTS":break;case"ENDLIST":c.live||xt(c,n,p),c.live=!1;break;case"#":(a||o)&&E.tagList.push(o?[a,o]:[a]);break;case"DISCONTINUITY":w++,E.tagList.push(["DIS"]);break;case"GAP":E.gap=!0,E.tagList.push([n]);break;case"BITRATE":E.tagList.push([n,a]),k=1e3*parseInt(a),e(k)?E.bitrate=k:k=0;break;case"DATERANGE":{const e=new jn(a,c),n=new zn(e,c.dateRanges[e.ID],c.dateRangeTagCount);c.dateRangeTagCount++,n.isValid||c.skippedSegments?c.dateRanges[n.id]=n:x.warn(`Ignoring invalid DATERANGE tag: "${a}"`),E.tagList.push(["EXT-X-DATERANGE",a]);break}case"DEFINE":{const e=new jn(a,c);"IMPORT"in e?$n(c,e,r):Nn(c,e,t)}break;case"DISCONTINUITY-SEQUENCE":0!==c.startCC?xt(c,n,p):d.length>0&&St(c,n,p),c.startCC=w=parseInt(a);break;case"KEY":{const e=_t(a,t,c);if(e.isSupported()){if("NONE"===e.method){m=void 0;break}m||(m={}),m[e.keyFormat]&&(m=g({},m)),m[e.keyFormat]=e}else x.warn(`[Keys] Ignoring invalid EXT-X-KEY tag: "${a}"`);break}case"START":c.startTimeOffset=bt(a);break;case"MAP":{const e=new jn(a,c);if(E.duration){const n=new K(i,l);Tt(n,e,s,m),f=n,E.initSegment=f,f.rawProgramDateTime&&!E.rawProgramDateTime&&(E.rawProgramDateTime=f.rawProgramDateTime)}else{const n=E.byteRangeEndOffset;if(n){const e=E.byteRangeStartOffset;L=`${n-e}@${e}`}else L=null;Tt(E,e,s,m),f=E,A=!0}f.cc=w;break}case"SERVER-CONTROL":v&&xt(c,n,p),v=new jn(a),c.canBlockReload=v.bool("CAN-BLOCK-RELOAD"),c.canSkipUntil=v.optionalFloat("CAN-SKIP-UNTIL",0),c.canSkipDateRanges=c.canSkipUntil>0&&v.bool("CAN-SKIP-DATERANGES"),c.partHoldBack=v.optionalFloat("PART-HOLD-BACK",0),c.holdBack=v.optionalFloat("HOLD-BACK",0);break;case"PART-INF":{c.partTarget&&xt(c,n,p);const e=new jn(a);c.partTarget=e.decimalFloatingPoint("PART-TARGET");break}case"PART":{let e=c.partList;e||(e=c.partList=[]);const n=b>0?e[e.length-1]:void 0,t=b++,s=new jn(a,c),i=new V(s,E,l,t,n);e.push(i),E.duration+=i.duration;break}case"PRELOAD-HINT":{const e=new jn(a,c);c.preloadHint=e;break}case"RENDITION-REPORT":{const e=new jn(a,c);c.renditionReports=c.renditionReports||[],c.renditionReports.push(e);break}default:x.warn(`line parsed but not handled: ${p}`)}}}T&&!T.relurl?(d.pop(),y-=T.duration,c.partList&&(c.fragmentHint=T)):c.partList&&(kt(E,T,u),E.cc=w,c.fragmentHint=E,m&&Et(E,m,c)),c.targetduration||(c.playlistParsingError=new Error("#EXT-X-TARGETDURATION is required"));const C=d.length,R=d[0],I=d[C-1];if(y+=c.skippedSegments*c.targetduration,y>0&&C&&I){c.averagetargetduration=y/C;const e=I.sn;c.endSN="initSegment"!==e?e:0,c.live||(I.endList=!0),R&&void 0===c.startCC&&(c.startCC=R.cc),S>0&&(function(e,n){let t=e[n];for(let s=n;s--;){const n=e[s];if(!n)return;n.programDateTime=t.programDateTime-1e3*n.duration,t=n}}(d,S),R&&u.unshift(R))}else c.endSN=0,c.startCC=0;return c.fragmentHint&&(y+=c.fragmentHint.duration),c.totalduration=y,u.length&&c.dateRangeTagCount&&R&&gt(u,c),c.endCC=w,c}}function gt(e,n){const t=e.length;if(!t)return;const s=e[t-1],i=n.live?1/0:n.totalduration,a=Object.keys(n.dateRanges);for(let r=a.length;r--;){const o=n.dateRanges[a[r]],l=o.startDate.getTime();o.tagAnchor=s.ref;for(let s=t;s--;){const t=ft(n,l,e,s,i);if(-1!==t){o.tagAnchor=n.fragments[t].ref;break}}}}function ft(e,n,t,s,i){const a=t[s];if(a){const o=a.programDateTime;var r;if(n>=o||0===s)if(n<=o+1e3*(((null==(r=t[s+1])?void 0:r.start)||i)-a.start)){const i=t[s].sn-e.startSN,a=e.fragments;if(a.length>t.length)for(let r=(t[s+1]||a[a.length-1]).sn-e.startSN;r>i;r--){const e=a[r].programDateTime;if(n>=e&&n<e+1e3*a[r].duration)return r}return i}}return-1}function _t(e,n,t){var s,i;const a=new jn(e,t),r=null!=(s=a.METHOD)?s:"",o=a.URI,l=a.hexadecimalInteger("IV"),c=a.KEYFORMATVERSIONS,d=null!=(i=a.KEYFORMAT)?i:"identity";o&&a.IV&&!l&&x.error(`Invalid IV: ${a.IV}`);const u=o?vt.resolve(o,n):"",p=(c||"1").split("/").map(Number).filter(Number.isFinite);return new ct(r,u,d,p,l)}function bt(n){const t=new jn(n).decimalFloatingPoint("TIME-OFFSET");return e(t)?t:null}function yt(e,n){let t=(e||"").split(/[ ,]+/).filter((e=>e));["video","audio","text"].forEach((e=>{const s=t.filter((n=>ye(n,e)));s.length&&(n[`${e}Codec`]=s.map((e=>e.split("/")[0])).join(","),t=t.filter((e=>-1===s.indexOf(e))))})),n.unknownCodecs=t}function wt(e,n,t){const s=n[t];s&&(e[t]=s)}function kt(e,n,t){e.rawProgramDateTime?t.push(e):null!=n&&n.programDateTime&&(e.programDateTime=n.endProgramDateTime)}function Tt(e,n,t,s){e.relurl=n.URI,n.BYTERANGE&&e.setByteRange(n.BYTERANGE),e.level=t,e.sn="initSegment",s&&(e.levelkeys=s),e.initSegment=null}function Et(e,n,t){e.levelkeys=n;const{encryptedFragments:s}=t;s.length&&s[s.length-1].levelkeys===n||!Object.keys(n).some((e=>n[e].isCommonEncryption))||s.push(e)}function xt(e,n,t){e.playlistParsingError=new Error(`#EXT-X-${n} must not appear more than once (${t[0]})`)}function St(e,n,t){e.playlistParsingError=new Error(`#EXT-X-${n} must appear before the first Media Segment (${t[0]})`)}function At(n,t){const s=t.startPTS;if(e(s)){let e,i=0;t.sn>n.sn?(i=s-n.start,e=n):(i=n.start-s,e=t),e.duration!==i&&e.setDuration(i)}else t.sn>n.sn?n.cc===t.cc&&n.minEndPTS?t.setStart(n.start+(n.minEndPTS-n.start)):t.setStart(n.start+n.duration):t.setStart(Math.max(n.start-t.duration,0))}function Lt(n,t,s,i,a,r){i-s<=0&&(x.warn("Fragment should have a positive duration",t),i=s+t.duration,r=a+t.duration);let o=s,l=i;const c=t.startPTS,d=t.endPTS;if(e(c)){const n=Math.abs(c-s);e(t.deltaPTS)?t.deltaPTS=Math.max(n,t.deltaPTS):t.deltaPTS=n,o=Math.max(s,c),s=Math.min(s,c),a=Math.min(a,t.startDTS),l=Math.min(i,d),i=Math.max(i,d),r=Math.max(r,t.endDTS)}const u=s-t.start;0!==t.start&&t.setStart(s),t.setDuration(i-t.start),t.startPTS=s,t.maxStartPTS=o,t.startDTS=a,t.endPTS=i,t.minEndPTS=l,t.endDTS=r;const p=t.sn;if(!n||p<n.startSN||p>n.endSN)return 0;let h;const m=p-n.startSN,v=n.fragments;for(v[m]=t,h=m;h>0;h--)At(v[h],v[h-1]);for(h=m;h<v.length-1;h++)At(v[h],v[h+1]);return n.fragmentHint&&At(v[v.length-1],n.fragmentHint),n.PTSKnown=n.alignedSliding=!0,u}function Ct(e,n,t,s,i){return new Error(`${e} ${i.url}\nPlaylist starting @${n.startSN}\n${n.m3u8}\n\nPlaylist starting @${t.startSN}\n${t.m3u8}`)}function Rt(e,n,t=!0){const s=n.startSN+n.skippedSegments-e.startSN,i=e.fragments,a=s>=0;let r=0;if(a&&s<i.length)r=i[s].start;else if(a&&n.startSN===e.endSN+1)r=e.fragmentEnd;else if(a&&t)r=e.fragmentStart+s*n.levelTargetDuration;else{if(n.skippedSegments||0!==n.fragmentStart)return;r=e.fragmentStart}It(n,r)}function It(e,n){if(n){const t=e.fragments;for(let s=e.skippedSegments;s<t.length;s++)t[s].addStart(n);e.fragmentHint&&e.fragmentHint.addStart(n)}}function Pt(e,n=1/0){let t=1e3*e.targetduration;if(e.updated){const s=e.fragments,i=4;if(s.length&&t*i>n){const e=1e3*s[s.length-1].duration;e<t&&(t=e)}}else t/=2;return Math.round(t)}function Dt(e,n,t){if(!e)return null;let s=e.fragments[n-e.startSN];return s||(s=e.fragmentHint,s&&s.sn===n?s:n<e.startSN&&t&&t.sn===n?t:null)}function Ot(e,n,t){return e?Mt(e.partList,n,t):null}function Mt(e,n,t){if(e)for(let s=e.length;s--;){const i=e[s];if(i.index===t&&i.fragment.sn===n)return i}return null}function Ft(e){e.forEach(((e,n)=>{var t;null==(t=e.details)||t.fragments.forEach((e=>{e.level=n,e.initSegment&&(e.initSegment.level=n)}))}))}function Nt(e,n){for(let s=0,i=e.length;s<i;s++){var t;if((null==(t=e[s])?void 0:t.cc)===n)return e[s]}return null}function $t(e,n){if(e){const t=e.start+n;e.start=e.startPTS=t,e.endPTS=t+e.duration}}function Bt(e,n){const t=n.fragments;for(let n=0,s=t.length;n<s;n++)$t(t[n],e);n.fragmentHint&&$t(n.fragmentHint,e),n.alignedSliding=!0}function Ut(e,n){if(!function(e,n){return!!(e&&n.startCC<e.endCC&&n.endCC>e.startCC)}(n,e))return;const t=Math.min(n.endCC,e.endCC),s=Nt(n.fragments,t),i=Nt(e.fragments,t);s&&i&&(x.log(`Aligning playlist at start of dicontinuity sequence ${t}`),Bt(s.start-i.start,e))}function jt(e,n){if(!e.hasProgramDateTime||!n.hasProgramDateTime)return;const t=e.fragments,s=n.fragments;if(!t.length||!s.length)return;let i,a;const r=Math.min(n.endCC,e.endCC);n.startCC<r&&e.startCC<r&&(i=Nt(s,r),a=Nt(t,r)),i&&a||(i=s[Math.floor(s.length/2)],a=Nt(t,i.cc)||t[Math.floor(t.length/2)]);const o=i.programDateTime,l=a.programDateTime;o&&l&&Bt((l-o)/1e3-(a.start-i.start),e)}const Gt={STOPPED:"STOPPED",IDLE:"IDLE",KEY_LOADING:"KEY_LOADING",FRAG_LOADING:"FRAG_LOADING",FRAG_LOADING_WAITING_RETRY:"FRAG_LOADING_WAITING_RETRY",WAITING_TRACK:"WAITING_TRACK",PARSING:"PARSING",PARSED:"PARSED",ENDED:"ENDED",ERROR:"ERROR",WAITING_INIT_PTS:"WAITING_INIT_PTS",WAITING_LEVEL:"WAITING_LEVEL"};class zt extends Rn{constructor(n,t,s,i,a){super(i,n.logger),this.hls=void 0,this.fragPrevious=null,this.fragCurrent=null,this.fragmentTracker=void 0,this.transmuxer=null,this._state=Gt.STOPPED,this.playlistType=void 0,this.media=null,this.mediaBuffer=null,this.config=void 0,this.bitrateTest=!1,this.lastCurrentTime=0,this.nextLoadPosition=0,this.startPosition=0,this.startTimeOffset=null,this.retryDate=0,this.levels=null,this.fragmentLoader=void 0,this.keyLoader=void 0,this.levelLastLoaded=null,this.startFragRequested=!1,this.decrypter=void 0,this.initPTS=[],this.buffering=!0,this.loadingParts=!1,this.loopSn=void 0,this.onMediaSeeking=()=>{const{config:n,fragCurrent:t,media:s,mediaBuffer:i,state:a}=this,r=s?s.currentTime:0,o=Dn.bufferInfo(i||s,r,n.maxBufferHole),l=!o.len;if(this.log(`Media seeking to ${e(r)?r.toFixed(3):r}, state: ${a}, ${l?"out of":"in"} buffer`),this.state===Gt.ENDED)this.resetLoadingState();else if(t){const e=n.maxFragLookUpTolerance,s=t.start-e,i=t.start+t.duration+e;if(l||i<o.start||s>o.end){const e=r>i;(r<s||e)&&(e&&t.loader&&(this.log(`Cancelling fragment load for seek (sn: ${t.sn})`),t.abortRequests(),this.resetLoadingState()),this.fragPrevious=null)}}if(s&&(this.fragmentTracker.removeFragmentsInRange(r,1/0,this.playlistType,!0),r>this.lastCurrentTime&&(this.lastCurrentTime=r),!this.loadingParts)){const e=Math.max(o.end,r),n=this.shouldLoadParts(this.getLevelDetails(),e);
vendor: 10,013 bytes, line 2
2n&&(this.log(`LL-Part loading ON after seeking to ${r.toFixed(2)} with buffer @${e.toFixed(2)}`),this.loadingParts=n)}this.hls.hasEnoughToStart||(this.log(`Setting ${l?"startPosition":"nextLoadPosition"} to ${r} for seek without enough to start`),this.nextLoadPosition=r,l&&(this.startPosition=r)),this.tickImmediate()},this.onMediaEnded=()=>{this.log("setting startPosition to 0 because media ended"),this.startPosition=this.lastCurrentTime=0},this.playlistType=a,this.hls=n,this.fragmentLoader=new Sn(n.config),this.keyLoader=s,this.fragmentTracker=t,this.config=n.config,this.decrypter=new En(n.config)}registerListeners(){const{hls:e}=this;e.on(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.on(a.ERROR,this.onError,this)}unregisterListeners(){const{hls:e}=this;e.off(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.off(a.ERROR,this.onError,this)}doTick(){this.onTickEnd()}onTickEnd(){}startLoad(e){}stopLoad(){if(this.state===Gt.STOPPED)return;this.fragmentLoader.abort(),this.keyLoader.abort(this.playlistType);const e=this.fragCurrent;null!=e&&e.loader&&(e.abortRequests(),this.fragmentTracker.removeFragment(e)),this.resetTransmuxer(),this.fragCurrent=null,this.fragPrevious=null,this.clearInterval(),this.clearNextTick(),this.state=Gt.STOPPED}get startPositionValue(){const{nextLoadPosition:e,startPosition:n}=this;return-1===n&&e?e:n}get bufferingEnabled(){return this.buffering}pauseBuffering(){this.buffering=!1}resumeBuffering(){this.buffering=!0}get inFlightFrag(){return{frag:this.fragCurrent,state:this.state}}_streamEnded(e,n){if(n.live||!this.media)return!1;const t=e.end||0,s=this.config.timelineOffset||0;if(t<=s)return!1;const i=e.buffered;this.config.maxBufferHole&&i&&i.length>1&&(e=Dn.bufferedInfo(i,e.start,0));const a=e.nextStart;if(a&&a>s&&a<n.edge)return!1;if(this.media.currentTime<e.start)return!1;const r=n.partList;if(null!=r&&r.length){const e=r[r.length-1];return Dn.isBuffered(this.media,e.start+e.duration/2)}const o=n.fragments[n.fragments.length-1].type;return this.fragmentTracker.isEndListAppended(o)}getLevelDetails(){var e;if(this.levels&&null!==this.levelLastLoaded)return null==(e=this.levelLastLoaded)?void 0:e.details}get timelineOffset(){const e=this.config.timelineOffset;var n;return e?(null==(n=this.getLevelDetails())?void 0:n.appliedTimelineOffset)||e:0}onMediaAttached(e,n){const t=this.media=this.mediaBuffer=n.media;t.removeEventListener("seeking",this.onMediaSeeking),t.removeEventListener("ended",this.onMediaEnded),t.addEventListener("seeking",this.onMediaSeeking),t.addEventListener("ended",this.onMediaEnded);const s=this.config;this.levels&&s.autoStartLoad&&this.state===Gt.STOPPED&&this.startLoad(s.startPosition)}onMediaDetaching(e,n){const t=!!n.transferMedia,s=this.media;if(null!==s){if(s.ended&&(this.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0),s.removeEventListener("seeking",this.onMediaSeeking),s.removeEventListener("ended",this.onMediaEnded),this.keyLoader&&!t&&this.keyLoader.detach(),this.media=this.mediaBuffer=null,this.loopSn=void 0,t)return this.resetLoadingState(),void this.resetTransmuxer();this.loadingParts=!1,this.fragmentTracker.removeAllFragments(),this.stopLoad()}}onManifestLoading(){this.initPTS=[],this.levels=this.levelLastLoaded=this.fragCurrent=null,this.lastCurrentTime=this.startPosition=0,this.startFragRequested=!1}onError(e,n){}onManifestLoaded(e,n){this.startTimeOffset=n.startTimeOffset}onHandlerDestroying(){this.stopLoad(),this.transmuxer&&(this.transmuxer.destroy(),this.transmuxer=null),super.onHandlerDestroying(),this.hls=this.onMediaSeeking=this.onMediaEnded=null}onHandlerDestroyed(){this.state=Gt.STOPPED,this.fragmentLoader&&this.fragmentLoader.destroy(),this.keyLoader&&this.keyLoader.destroy(),this.decrypter&&this.decrypter.destroy(),this.hls=this.log=this.warn=this.decrypter=this.keyLoader=this.fragmentLoader=this.fragmentTracker=null,super.onHandlerDestroyed()}loadFragment(e,n,t){this.startFragRequested=!0,this._loadFragForPlayback(e,n,t)}_loadFragForPlayback(e,n,t){this._doFragLoad(e,n,t,(e=>{const n=e.frag;if(this.fragContextChanged(n))return this.warn(`${n.type} sn: ${n.sn}${e.part?" part: "+e.part.index:""} of ${this.fragInfo(n,!1,e.part)}) was dropped during download.`),void this.fragmentTracker.removeFragment(n);n.stats.chunkCount++,this._handleFragmentLoadProgress(e)})).then((e=>{if(!e)return;const n=this.state,t=e.frag;this.fragContextChanged(t)?(n===Gt.FRAG_LOADING||!this.fragCurrent&&n===Gt.PARSING)&&(this.fragmentTracker.removeFragment(t),this.state=Gt.IDLE):("payload"in e&&(this.log(`Loaded ${t.type} sn: ${t.sn} of ${this.playlistLabel()} ${t.level}`),this.hls.trigger(a.FRAG_LOADED,e)),this._handleFragmentLoadComplete(e))})).catch((n=>{this.state!==Gt.STOPPED&&this.state!==Gt.ERROR&&(this.warn(`Frag error: ${(null==n?void 0:n.message)||n}`),this.resetFragmentLoading(e))}))}clearTrackerIfNeeded(e){var n;const{fragmentTracker:t}=this;if(t.getState(e)===mn){const n=e.type,s=this.getFwdBufferInfo(this.mediaBuffer,n),i=Math.max(e.duration,s?s.len:this.config.maxBufferLength),a=this.backtrackFragment;(1==(a?e.sn-a.sn:0)||this.reduceMaxBufferLength(i,e.duration))&&t.removeFragment(e)}else 0===(null==(n=this.mediaBuffer)?void 0:n.buffered.length)?t.removeAllFragments():t.hasParts(e.type)&&(t.detectPartialFragments({frag:e,part:null,stats:e.stats,id:e.type}),t.getState(e)===vn&&t.removeFragment(e))}checkLiveUpdate(e){if(e.updated&&!e.live){const n=e.fragments[e.fragments.length-1];this.fragmentTracker.detectPartialFragments({frag:n,part:null,stats:n.stats,id:n.type})}e.fragments[0]||(e.deltaUpdateFailed=!0)}waitForLive(e){const n=e.details;return(null==n?void 0:n.live)&&"EVENT"!==n.type&&(this.levelLastLoaded!==e||n.expired)}flushMainBuffer(e,n,t=null){if(!(e-n))return;const s={startOffset:e,endOffset:n,type:t};this.hls.trigger(a.BUFFER_FLUSHING,s)}_loadInitSegment(e,n){this._doFragLoad(e,n).then((e=>{const n=null==e?void 0:e.frag;if(!n||this.fragContextChanged(n)||!this.levels)throw new Error("init load aborted");return e})).then((e=>{const{hls:n}=this,{frag:t,payload:r}=e,o=t.decryptdata;if(r&&r.byteLength>0&&null!=o&&o.key&&o.iv&&Kn(o.method)){const l=self.performance.now();return this.decrypter.decrypt(new Uint8Array(r),o.key.buffer,o.iv.buffer,Vn(o.method)).catch((e=>{throw n.trigger(a.ERROR,{type:s.MEDIA_ERROR,details:i.FRAG_DECRYPT_ERROR,fatal:!1,error:e,reason:e.message,frag:t}),e})).then((s=>{const i=self.performance.now();return n.trigger(a.FRAG_DECRYPTED,{frag:t,payload:s,stats:{tstart:l,tdecrypt:i}}),e.payload=s,this.completeInitSegmentLoad(e)}))}return this.completeInitSegmentLoad(e)})).catch((n=>{this.state!==Gt.STOPPED&&this.state!==Gt.ERROR&&(this.warn(n),this.resetFragmentLoading(e))}))}completeInitSegmentLoad(e){const{levels:n}=this;if(!n)throw new Error("init load aborted, missing levels");const t=e.frag.stats;this.state!==Gt.STOPPED&&(this.state=Gt.IDLE),e.frag.data=new Uint8Array(e.payload),t.parsing.start=t.buffering.start=self.performance.now(),t.parsing.end=t.buffering.end=self.performance.now(),this.tick()}fragContextChanged(e){const{fragCurrent:n}=this;return!e||!n||e.sn!==n.sn||e.level!==n.level}fragBufferedComplete(e,n){const t=this.mediaBuffer?this.mediaBuffer:this.media;if(this.log(`Buffered ${e.type} sn: ${e.sn}${n?" part: "+n.index:""} of ${this.fragInfo(e,!1,n)} > buffer:${t?function(e){let n="";const t=e.length;for(let s=0;s<t;s++)n+=`[${e.start(s).toFixed(3)}-${e.end(s).toFixed(3)}]`;return n}(Dn.getBuffered(t)):"(detached)"})`),q(e)){var s;if(e.type!==p){const n=e.elementaryStreams;if(!Object.keys(n).some((e=>!!n[e])))return void(this.state=Gt.IDLE)}const n=null==(s=this.levels)?void 0:s[e.level];null!=n&&n.fragmentError&&(this.log(`Resetting level fragment error count of ${n.fragmentError} on frag buffered`),n.fragmentError=0)}this.state=Gt.IDLE}_handleFragmentLoadComplete(e){const{transmuxer:n}=this;if(!n)return;const{frag:t,part:s,partsLoaded:i}=e,a=!i||0===i.length||i.some((e=>!e)),r=new In(t.level,t.sn,t.stats.chunkCount+1,0,s?s.index:-1,!a);n.flush(r)}_handleFragmentLoadProgress(e){}_doFragLoad(n,t,s=null,i){var r;this.fragCurrent=n;const o=null==t?void 0:t.details;if(!this.levels||!o)throw new Error(`frag load aborted, missing level${o?"":" detail"}s`);let l=null;!n.encrypted||null!=(r=n.decryptdata)&&r.key?n.encrypted||(l=this.keyLoader.loadClear(n,o.encryptedFragments),l&&this.log("[eme] blocking frag load until media-keys acquired")):(this.log(`Loading key for ${n.sn} of [${o.startSN}-${o.endSN}], ${this.playlistLabel()} ${n.level}`),this.state=Gt.KEY_LOADING,this.fragCurrent=n,l=this.keyLoader.load(n).then((e=>{if(!this.fragContextChanged(e.frag))return this.hls.trigger(a.KEY_LOADED,e),this.state===Gt.KEY_LOADING&&(this.state=Gt.IDLE),e})),this.hls.trigger(a.KEY_LOADING,{frag:n}),null===this.fragCurrent&&(l=Promise.reject(new Error("frag load aborted, context changed in KEY_LOADING"))));const c=this.fragPrevious;if(q(n)&&(!c||n.sn!==c.sn)){const e=this.shouldLoadParts(t.details,n.end);e!==this.loadingParts&&(this.log(`LL-Part loading ${e?"ON":"OFF"} loading sn ${null==c?void 0:c.sn}->${n.sn}`),this.loadingParts=e)}if(s=Math.max(n.start,s||0),this.loadingParts&&q(n)){const e=o.partList;if(e&&i){s>n.end&&o.fragmentHint&&(n=o.fragmentHint);const r=this.getNextPart(e,n,s);if(r>-1){const c=e[r];let d;return n=this.fragCurrent=c.fragment,this.log(`Loading ${n.type} sn: ${n.sn} part: ${c.index} (${r}/${e.length-1}) of ${this.fragInfo(n,!1,c)}) cc: ${n.cc} [${o.startSN}-${o.endSN}], target: ${parseFloat(s.toFixed(3))}`),this.nextLoadPosition=c.start+c.duration,this.state=Gt.FRAG_LOADING,d=l?l.then((e=>!e||this.fragContextChanged(e.frag)?null:this.doFragPartsLoad(n,c,t,i))).c
2atch((e=>this.handleFragLoadError(e))):this.doFragPartsLoad(n,c,t,i).catch((e=>this.handleFragLoadError(e))),this.hls.trigger(a.FRAG_LOADING,{frag:n,part:c,targetBufferTime:s}),null===this.fragCurrent?Promise.reject(new Error("frag load aborted, context changed in FRAG_LOADING parts")):d}if(!n.url||this.loadedEndOfParts(e,s))return Promise.resolve(null)}}if(q(n)&&this.loadingParts)this.log(`LL-Part loading OFF after next part miss @${s.toFixed(2)}`),this.loadingParts=!1;else if(!n.url)return Promise.resolve(null);this.log(`Loading ${n.type} sn: ${n.sn} of ${this.fragInfo(n,!1)}) cc: ${n.cc} ${o?"["+o.startSN+"-"+o.endSN+"]":""}, target: ${parseFloat(s.toFixed(3))}`),e(n.sn)&&!this.bitrateTest&&(this.nextLoadPosition=n.start+n.duration),this.state=Gt.FRAG_LOADING;const d=this.config.progressive;let u;return u=d&&l?l.then((e=>!e||this.fragContextChanged(null==e?void 0:e.frag)?null:this.fragmentLoader.load(n,i))).catch((e=>this.handleFragLoadError(e))):Promise.all([this.fragmentLoader.load(n,d?i:void 0),l]).then((([e])=>(!d&&e&&i&&i(e),e))).catch((e=>this.handleFragLoadError(e))),this.hls.trigger(a.FRAG_LOADING,{frag:n,targetBufferTime:s}),null===this.fragCurrent?Promise.reject(new Error("frag load aborted, context changed in FRAG_LOADING")):u}doFragPartsLoad(e,n,t,s){return new Promise(((i,r)=>{var o;const l=[],c=null==(o=t.details)?void 0:o.partList,d=n=>{this.fragmentLoader.loadPart(e,n,s).then((s=>{l[n.index]=s;const r=s.part;this.hls.trigger(a.FRAG_LOADED,s);const o=Ot(t.details,e.sn,n.index+1)||Mt(c,e.sn,n.index+1);if(!o)return i({frag:e,part:r,partsLoaded:l});d(o)})).catch(r)};d(n)}))}handleFragLoadError(e){if("data"in e){const n=e.data;e.data&&n.details===i.INTERNAL_ABORTED?this.handleFragLoadAborted(n.frag,n.part):this.hls.trigger(a.ERROR,n)}else this.hls.trigger(a.ERROR,{type:s.OTHER_ERROR,details:i.INTERNAL_EXCEPTION,err:e,error:e,fatal:!0});return null}_handleTransmuxerFlush(e){const n=this.getCurrentContext(e);if(!n||this.state!==Gt.PARSING)return void(this.fragCurrent||this.state===Gt.STOPPED||this.state===Gt.ERROR||(this.state=Gt.IDLE));const{frag:t,part:s,level:i}=n,a=self.performance.now();t.stats.parsing.end=a,s&&(s.stats.parsing.end=a);const r=this.getLevelDetails(),o=r&&t.sn>r.endSN||this.shouldLoadParts(r,t.end);o!==this.loadingParts&&(this.log(`LL-Part loading ${o?"ON":"OFF"} after parsing segment ending @${t.end.toFixed(2)}`),this.loadingParts=o),this.updateLevelTiming(t,s,i,e.partial)}shouldLoadParts(e,n){if(this.config.lowLatencyMode){if(!e)return this.loadingParts;if(null!=e&&e.partList){var t;const i=e.partList[0];var s;if(n>=i.end+((null==(t=e.fragmentHint)?void 0:t.duration)||0))if((this.hls.hasEnoughToStart?(null==(s=this.media)?void 0:s.currentTime)||this.lastCurrentTime:this.getLoadPosition())>i.start-i.fragment.duration)return!0}}return!1}getCurrentContext(e){const{levels:n,fragCurrent:t}=this,{level:s,sn:i,part:a}=e;if(null==n||!n[s])return this.warn(`Levels object was unset while buffering fragment ${i} of ${this.playlistLabel()} ${s}. The current chunk will not be buffered.`),null;const r=n[s],o=r.details,l=a>-1?Ot(o,i,a):null,c=l?l.fragment:Dt(o,i,t);return c?(t&&t!==c&&(c.stats=t.stats),{frag:c,part:l,level:r}):null}bufferFragmentData(e,n,t,s,i){var r;if(!e||this.state!==Gt.PARSING)return;const{data1:o,data2:l}=e;let c=o;if(o&&l&&(c=ue(o,l)),null==(r=c)||!r.length)return;const d=this.initPTS[n.cc],u=d?-d.baseTime/d.timescale:void 0,p={type:e.type,frag:n,part:t,chunkMeta:s,offset:u,parent:n.type,data:c};if(this.hls.trigger(a.BUFFER_APPENDING,p),e.dropped&&e.independent&&!t){if(i)return;this.flushBufferGap(n)}}flushBufferGap(e){const n=this.media;if(!n)return;if(!Dn.isBuffered(n,n.currentTime))return void this.flushMainBuffer(0,e.start);const t=n.currentTime,s=Dn.bufferInfo(n,t,0),i=e.duration,a=Math.min(2*this.config.maxFragLookUpTolerance,.25*i),r=M
vendor: 2,847 bytes, line 2
2ath.max(Math.min(e.start-a,s.end-a),t+a);e.start-r>a&&this.flushMainBuffer(r,e.start)}getFwdBufferInfo(n,t){var s;const i=this.getLoadPosition();if(!e(i))return null;const a=this.lastCurrentTime>i||null!=(s=this.media)&&s.paused?0:this.config.maxBufferHole;return this.getFwdBufferInfoAtPos(n,i,t,a)}getFwdBufferInfoAtPos(e,n,t,s){const i=Dn.bufferInfo(e,n,s);if(0===i.len&&void 0!==i.nextStart){const a=this.fragmentTracker.getBufferedFrag(n,t);if(a&&(i.nextStart<=a.end||a.gap)){const t=Math.max(Math.min(i.nextStart,a.end)-n,s);return Dn.bufferInfo(e,n,t)}}return i}getMaxBufferLength(e){const{config:n}=this;let t;return t=e?Math.max(8*n.maxBufferSize/e,n.maxBufferLength):n.maxBufferLength,Math.min(t,n.maxMaxBufferLength)}reduceMaxBufferLength(e,n){const t=this.config,s=Math.max(Math.min(e-n,t.maxBufferLength),n),i=Math.max(e-3*n,t.maxMaxBufferLength/2,s);return i>=s&&(t.maxMaxBufferLength=i,this.warn(`Reduce max buffer length to ${i}s`),!0)}getAppendedFrag(e,n=d){var t;const s=null==(t=this.fragmentTracker)?void 0:t.getAppendedFrag(e,n);return s&&"fragment"in s?s.fragment:s}getNextFragment(e,n){const t=n.fragments,s=t.length;if(!s)return null;const{config:i}=this,a=t[0].start,r=i.lowLatencyMode&&!!n.partList;let o=null;if(n.live){const t=i.initialLiveManifestSize;if(s<t)return this.warn(`Not enough fragments to start playback (have: ${s}, need: ${t})`),null;if(!n.PTSKnown&&!this.startFragRequested&&-1===this.startPosition||e<a){var l;r&&!this.loadingParts&&(this.log("LL-Part loading ON for initial live fragment"),this.loadingParts=!0),o=this.getInitialLiveFragment(n);const t=this.hls.startPosition,s=this.hls.liveSyncPosition,i=o?(-1!==t&&t>=a?t:s)||o.start:e;this.log(`Setting startPosition to ${i} to match start frag at live edge. mainStart: ${t} liveSyncPosition: ${s} frag.start: ${null==(l=o)?void 0:l.start}`),this.startPosition=this.nextLoadPosition=i}}else e<=a&&(o=t[0]);if(!o){const t=this.loadingParts?n.partEnd:n.fragmentEnd;o=this.getFragmentAtPosition(e,t,n)}let c=this.filterReplacedPrimary(o,n);if(!c&&o){const e=o.sn-n.startSN;c=this.filterReplacedPrimary(t[e+1]||null,n)}return this.mapToInitFragWhenRequired(c)}isLoopLoading(e,n){const t=this.fragmentTracker.getState(e);return(t===gn||t===vn&&!!e.gap)&&this.nextLoadPosition>n}getNextFragmentLoopLoading(e,n,t,s,i){let a=null;if(e.gap&&(a=this.getNextFragment(this.nextLoadPosition,n),a&&!a.gap&&t.nextStart)){const e=this.getFwdBufferInfoAtPos(this.mediaBuffer?this.mediaBuffer:this.media,t.nextStart,s,0);if(null!==e&&t.len+e.len>=i){const e=a.sn;return this.loopSn!==e&&(this.log(`buffer full after gaps in "${s}" playlist starting at sn: ${e}`),this.loopSn=e),null}}return this.loopSn=void 0,a}get primaryPrefetch(){var e,n;if(qt(this.hls.config)&&(null==(e=this.hls.interstitialsManager)||null==(n=e.playingItem)?void 0:n.event))return!0;return!1}
2filterReplacedPrimary(e,n){if(!e)return e;if(qt(this.hls.config)&&e.type!==p){const t=this.hls.interstitialsManager,s=null==t?void 0:t.bufferingItem;if(s){const t=s.event;if(t){if(t.appendInPlace||Math.abs(e.start-s.start)>1||0===s.start)return null}else{if(e.end<=s.start&&!1===(null==n?void 0:n.live))return null;if(e.start>s.end&&s.nextEvent&&(s.nextEvent.appendInPlace||e.start-s.end>1))return null}}const i=null==t?void 0:t.playerQueue;if(i)for(let n=i.length;n--;){const t=i[n].interstitial;if(t.appendInPlace&&e.start>=t.startTime&&e.end<=t.resumeTime)return null}}return e}mapToInitFragWhenRequired(e){return null==e||!e.initSegment||null!=e&&e.initSegment.data||this.bitrateTest?e:e.initSegment}getNextPart(e,n,t){let s=-1,i=!1,a=!0;for(let r=0,o=e.length;r<o;r++){const o=e[r];if(a=a&&!o.independent,s>-1&&t<o.start)break;const l=o.loaded;l?s=-1:(i||o.independent||a)&&o.fragment===n&&(s=r),i=l}return s}loadedEndOfParts(e,n){const t=e[e.length-1];return t&&n>t.start&&t.loaded}getInitialLiveFragment(n){const t=n.fragments,s=this.fragPrevious;let i=null;if(s){if(n.hasProgramDateTime&&(this.log(`Live playlist, switching playlist, load frag with same PDT: ${s.programDateTime}`),i=function(n,t,s){if(null===t||!Array.isArray(n)||!n.length||!e(t))return null;if(t<(n[0].programDateTime||0))return null;if(t>=(n[n.length-1].endProgramDateTime||0))return null;for(let e=0;e<n.length;++e){const i=n[e];if(an(t,s,i))return i}return null}(t,s.endProgramDateTime,this.config.maxFragLookUpTolerance)),!i){const e=s.sn+1;if(e>=n.startSN&&e<=n.endSN){const a=t[e-n.startSN];s.cc===a.cc&&(i=a,this.log(`Live playlist, switching playlist, load frag with next SN: ${i.sn}`))}i||(i=rn(n,s.cc,s.end),i&&this.log(`Live playlist, switching playlist, load frag with same CC: ${i.sn}`))}}else{const e=this.hls.liveSyncPosition;null!==e&&(i=this.getFragmentAtPosition(e,this.bitrateTest?n.fragmentEnd:n.edge,n))}return i}getFragmentAtPosition(e,n,t){const{config:s}=this;let{fragPrevious:i}=this,{fragments:a,endSN:r}=t;const{fragmentHint:o}=t,{maxFragLookUpTolerance:l}=s,c=t.partList,d=!!(this.loadingParts&&null!=c&&c.length&&o);let u;var p;(d&&o&&!this.bitrateTest&&c[c.length-1].fragment.sn===o.sn&&(a=a.concat(o),r=o.sn),e<n)?u=tn(i,a,e,e<this.lastCurrentTime||e>n-l||null!=(p=this.media)&&p.paused||!this.startFragRequested?0:l):u=a[a.length-1];if(u){const e=u.sn-t.startSN,n=this.fragmentTracker.getState(u);if((n===gn||n===vn&&u.gap)&&(i=u),i&&u.sn===i.sn&&(!d||c[0].fragment.sn>u.sn||!t.live&&!d)&&i&&u.level===i.level){const n=a[e+1];u=u.sn<r&&this.fragmentTracker.getState(n)!==gn?n:null}}return u}alignPlaylists(n,t,s){const i=n.fragments.length;if(!i)return this.warn("No fragments in live playlist"),0;const a=n.fragmentStart,r=!t,o=n.alignedSliding&&e(a);if(r||!o&&!a){!function(e,n){e&&(Ut(n,e),!n.alignedSliding&&e&&jt(n,e),n.alignedSliding||!e||n.skippedSegments||Rt(e,n,!1))}(s,n);const e=n.fragmentStart;return this.log(`Live playlist sliding: ${e.toFixed(2)} start-sn: ${t?t.startSN:"na"}->${n.startSN} fragments: ${i}`),e}return a}waitForCdnTuneIn(e){return e.live&&e.canBlockReload&&e.partTarget&&e.tuneInGoal>Math.max(e.partHoldBack,3*e.partTarget)}setStartPosition(n,t){let s=this.startPosition;s<t&&(s=-1);const i=this.timelineOffset;if(-1===s){const a=null!==this.startTimeOffset,r=a?this.startTimeOffset:n.startTimeOffset;null!==r&&e(r)?(s=t+r,r<0&&(s+=n.edge),s=Math.min(Math.max(t,s),t+n.totalduration),this.log(`Setting startPosition to ${s} for start time offset ${r} found in ${a?"multivariant":"media"} playlist`),this.startPosition=s):n.live?(s=this.hls.liveSyncPosition||t,this.log(`Setting startPosition to -1 to start at live edge ${s}`),this.startPosition=-1):(this.log("setting startPosition to 0 by default"),this.startPosition=s=0),this.lastCurrentTime=s+i}this.nextLoadPosition=s+i}getLoadPosition(){var e;const{media:n}=this;let t=0;return null!=(e=this.hls)&&e.hasEnoughToStart&&n?t=n.currentTime:this.nextLoadPosition>=0&&(t=this.nextLoadPosition),t}handleFragLoadAborted(e,n){this.transmuxer&&e.type===this.playlistType&&q(e)&&e.stats.aborted&&(this.log(`Fragment ${e.sn}${n?" part "+n.index:""} of ${this.playlistLabel()} ${e.level} was aborted`),this.resetFragmentLoading(e))}resetFragmentLoading(e){this.fragCurrent&&(this.fragContextChanged(e)||this.state===Gt.FRAG_LOADING_WAITING_RETRY)||(this.state=Gt.IDLE)}onFragmentOrKeyLoadError(e,n){if(n.chunkMeta&&!n.frag){const e=this.getCurrentContext(n.chunkMeta);e&&(n.frag=e.frag)}const t=n.frag;if(!t||t.type!==e||!this.levels)return;var s;if(this.fragContextChanged(t))return void this.warn(`Frag load error must match current frag to retry ${t.url} > ${null==(s=this.fragCurrent)?void 0:s.url}`);const a=n.details===i.FRAG_GAP;a&&this.fragmentTracker.fragBuffered(t,!0);const r=n.errorAction,{action:o,flags:l,retryCount:c=0,retryConfig:d}=r||{},u=!!r&&!!d,p=u&&5===o,h=u&&!r.resolved&&1===l;if(!p&&h&&q(t)&&!t.endList)this.resetFragmentErrors(e),this.treatAsGap(t),r.resolved=!0;else if((p||h)&&c<d.maxNumRetry){this.resetStartWhenNotLoaded(this.levelLastLoaded);const s=cn(d,c);this.warn(`Fragment ${t.sn} of ${e} ${t.level} errored with ${n.details}, retrying loading ${c+1}/${d.maxNumRetry} in ${s}ms`),r.resolved=!0,this.retryDate=self.performance.now()+s,this.state=Gt.FRAG_LOADING_WAITING_RETRY}else if(d&&r){if(this.resetFragmentErrors(e),!(c<d.maxNumRetry))return void this.warn(`${n.details} reached or exceeded max retry (${c})`);a||3===o||(r.resolved=!0)}else this.state=2===o?Gt.WAITING_LEVEL:Gt.ERROR;this.tickImmediate()}reduceLengthAndFlushBuffer(e){if(this.state===Gt.PARSING||this.state===Gt.PARSED){const n=e.frag,t=e.parent,s=this.getFwdBufferInfo(this.mediaBuffer,t),i=s&&s.len>.5;i&&this.reduceMaxBufferLength(s.len,(null==n?void 0:n.duration)||10);const a=!i;return a&&this.warn(`Buffer full error while media.currentTime is not buffered, flush ${t} buffer`),n&&(this.fragmentTracker.removeFragment(n),this.nextLoadPosition=n.start),this.resetLoadingState(),a}return!1}resetFragmentErrors(e){e===u&&(this.fragCurrent=null),this.hls.hasEnoughToStart||(this.startFragRequested=!1),this.state!==Gt.STOPPED&&(this.state=Gt.IDLE)}afterBufferFlushed(e,n,t){if(!e)return;const s=Dn.getBuffered(e);this.fragmentTracker.detectEvictedFragments(n,s,t),this.state===Gt.ENDED&&this.resetLoadingState()}
vendor: 5,112 bytes, line 2
2resetLoadingState(){this.log("Reset loading state"),this.fragCurrent=null,this.fragPrevious=null,this.state!==Gt.STOPPED&&(this.state=Gt.IDLE)}resetStartWhenNotLoaded(e){if(!this.hls.hasEnoughToStart){this.startFragRequested=!1;const n=e?e.details:null;null!=n&&n.live?(this.log("resetting startPosition for live start"),this.startPosition=-1,this.setStartPosition(n,n.fragmentStart),this.resetLoadingState()):this.nextLoadPosition=this.startPosition}}resetWhenMissingContext(e){this.warn(`The loading context changed while buffering fragment ${e.sn} of ${this.playlistLabel()} ${e.level}. This chunk will not be buffered.`),this.removeUnbufferedFrags(),this.resetStartWhenNotLoaded(this.levelLastLoaded),this.resetLoadingState()}removeUnbufferedFrags(e=0){this.fragmentTracker.removeFragmentsInRange(e,1/0,this.playlistType,!1,!0)}updateLevelTiming(e,n,t,r){const o=t.details;if(o){var l;if(!Object.keys(e.elementaryStreams).reduce(((n,s)=>{const i=e.elementaryStreams[s];if(i){const l=i.endPTS-i.startPTS;if(l<=0)return this.warn(`Could not parse fragment ${e.sn} ${s} duration reliably (${l})`),n||!1;const c=r?0:Lt(o,e,i.startPTS,i.endPTS,i.startDTS,i.endDTS);return this.hls.trigger(a.LEVEL_PTS_UPDATED,{details:o,level:t,drift:c,type:s,frag:e,start:i.startPTS,end:i.endPTS}),!0}return n}),!1)&&(0===t.fragmentError&&this.treatAsGap(e,t),null===(null==(l=this.transmuxer)?void 0:l.error))){const n=new Error(`Found no media in fragment ${e.sn} of ${this.playlistLabel()} ${e.level} resetting transmuxer to fallback to playlist timing`);if(this.warn(n.message),this.hls.trigger(a.ERROR,{type:s.MEDIA_ERROR,details:i.FRAG_PARSING_ERROR,fatal:!1,error:n,frag:e,reason:`Found no media in msn ${e.sn} of ${this.playlistLabel()} "${t.url}"`}),!this.hls)return;this.resetTransmuxer()}this.state=Gt.PARSED,this.log(`Parsed ${e.type} sn: ${e.sn}${n?" part: "+n.index:""} of ${this.fragInfo(e,!1,n)})`),this.hls.trigger(a.FRAG_PARSED,{frag:e,part:n})}else this.warn("level.details undefined")}playlistLabel(){return this.playlistType===d?"level":"track"}fragInfo(e,n=!0,t){var s,i;return`${this.playlistLabel()} ${e.level} (${t?"part":"frag"}:[${(null!=(s=n&&!t?e.startPTS:(t||e).start)?s:NaN).toFixed(3)}-${(null!=(i=n&&!t?e.endPTS:(t||e).end)?i:NaN).toFixed(3)}]${t&&"main"===e.type?"INDEPENDENT="+(t.independent?"YES":"NO"):""}`}treatAsGap(e,n){n&&n.fragmentError++,e.gap=!0,this.fragmentTracker.removeFragment(e),this.fragmentTracker.fragBuffered(e,!0)}resetTransmuxer(){var e;null==(e=this.transmuxer)||e.reset()}recoverWorkerError(e){"demuxerWorker"===e.event&&(this.fragmentTracker.removeAllFragments(),this.transmuxer&&(this.transmuxer.destroy(),this.transmuxer=null),this.resetStartWhenNotLoaded(this.levelLastLoaded),this.resetLoadingState())}set state(e){const n=this._state;n!==e&&(this._state=e,this.log(`${n}->${e}`))}get state(){return this._state}}function qt(e){return!!e.interstitialsController&&!1!==e.enableInterstitialPlayback}class Kt{constructor(){this.chunks=[],this.dataLength=0}push(e){this.chunks.push(e),this.dataLength+=e.length}flush(){const{chunks:e,dataLength:n}=this;let t;return e.length?(t=1===e.length?e[0]:function(e,n){const t=new Uint8Array(n);let s=0;for(let n=0;n<e.length;n++){const i=e[n];t.set(i,s),s+=i.length}return t}(e,n),this.reset(),t):new Uint8Array(0)}reset(){this.chunks.length=0,this.dataLength=0}}var Vt,Ht={exports:{}},Yt=(Vt||(Vt=1,function(e){var n=Object.prototype.hasOwnProperty,t="~";function s(){}function i(e,n,t){this.fn=e,this.context=n,this.once=t||!1}function a(e,n,s,a,r){if("function"!=typeof s)throw new TypeError("The listener must be a function");var o=new i(s,a||e,r),l=t?t+n:n;return e._events[l]?e._events[l].fn?e._events[l]=[e._events[l],o]:e._events[l].push(o):(e._events[l]=o,e._eventsCount++),e}function r(e,n){0==--e._eventsCount?e._events=new s:delete e._events[n]}function o(){this._events=new s,this._eventsCount=0}Object.create&&(s.prototype=Object.create(null),(new s).__proto__||(t=!1)),o.prototype.eventNames=function(){var e,s,i=[];if(0===this._eventsCount)return i;for(s in e=this._events)n.call(e,s)&&i.push(t?s.slice(1):s);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},o.prototype.listeners=function(e){var n=t?t+e:e,s=this._events[n];if(!s)return[];if(s.fn)return[s.fn];for(var i=0,a=s.length,r=new Array(a);i<a;i++)r[i]=s[i].fn;return r},o.prototype.listenerCount=function(e){var n=t?t+e:e,s=this._events[n];return s?s.fn?1:s.length:0},o.prototype.emit=function(e,n,s,i,a,r){var o=t?t+e:e;if(!this._events[o])return!1;var l,c,d=this._events[o],u=arguments.length;if(d.fn){switch(d.once&&this.removeListener(e,d.fn,void 0,!0),u){case 1:return d.fn.call(d.context),!0;case 2:return d.fn.call(d.context,n),!0;case 3:return d.fn.call(d.context,n,s),!0;case 4:return d.fn.call(d.context,n,s,i),!0;case 5:return d.fn.call(d.context,n,s,i,a),!0;case 6:return d.fn.call(d.context,n,s,i,a,r),!0}for(c=1,l=new Array(u-1);c<u;c++)l[c-1]=arguments[c];d.fn.apply(d.context,l)}else{var p,h=d.length;for(c=0;c<h;c++)switch(d[c].once&&this.removeListener(e,d[c].fn,void 0,!0),u){case 1:d[c].fn.call(d[c].c
vendor: 5,290 bytes, line 2
2ontext);break;case 2:d[c].fn.call(d[c].context,n);break;case 3:d[c].fn.call(d[c].context,n,s);break;case 4:d[c].fn.call(d[c].context,n,s,i);break;default:if(!l)for(p=1,l=new Array(u-1);p<u;p++)l[p-1]=arguments[p];d[c].fn.apply(d[c].context,l)}}return!0},o.prototype.on=function(e,n,t){return a(this,e,n,t,!1)},o.prototype.once=function(e,n,t){return a(this,e,n,t,!0)},o.prototype.removeListener=function(e,n,s,i){var a=t?t+e:e;if(!this._events[a])return this;if(!n)return r(this,a),this;var o=this._events[a];if(o.fn)o.fn!==n||i&&!o.once||s&&o.context!==s||r(this,a);else{for(var l=0,c=[],d=o.length;l<d;l++)(o[l].fn!==n||i&&!o[l].once||s&&o[l].context!==s)&&c.push(o[l]);c.length?this._events[a]=1===c.length?c[0]:c:r(this,a)}return this},o.prototype.removeAllListeners=function(e){var n;return e?(n=t?t+e:e,this._events[n]&&r(this,n)):(this._events=new s,this._eventsCount=0),this},o.prototype.off=o.prototype.removeListener,o.prototype.addListener=o.prototype.on,o.prefixed=t,o.EventEmitter=o,e.exports=o}(Ht)),Ht.exports),Wt=R(Yt);const Xt="1.6.6",Qt={};function Jt(e,n){return n+10<=e.length&&51===e[n]&&68===e[n+1]&&73===e[n+2]&&e[n+3]<255&&e[n+4]<255&&e[n+6]<128&&e[n+7]<128&&e[n+8]<128&&e[n+9]<128}function Zt(e,n){return n+10<=e.length&&73===e[n]&&68===e[n+1]&&51===e[n+2]&&e[n+3]<255&&e[n+4]<255&&e[n+6]<128&&e[n+7]<128&&e[n+8]<128&&e[n+9]<128}function es(e,n){let t=0;return t=(127&e[n])<<21,t|=(127&e[n+1])<<14,t|=(127&e[n+2])<<7,t|=127&e[n+3],t}function ns(e,n){const t=n;let s=0;for(;Zt(e,n);)s+=10,s+=es(e,n+6),Jt(e,n+10)&&(s+=10),n+=s;if(s>0)return e.subarray(t,t+s)}function ts(e,n){return 255===e[n]&&240==(246&e[n+1])}function ss(e,n){return 1&e[n+1]?7:9}function is(e,n){return(3&e[n+3])<<11|e[n+4]<<3|(224&e[n+5])>>>5}function as(e,n){return n+1<e.length&&ts(e,n)}function rs(e,n){if(as(e,n)){const t=ss(e,n);if(n+t>=e.length)return!1;const s=is(e,n);if(s<=t)return!1;const i=n+s;return i===e.length||as(e,i)}return!1}function os(e,n,t,r,o){if(!e.samplerate){const l=function(e,n,t,r){const o=n[t+2],l=o>>2&15;if(l>12){const n=new Error(`invalid ADTS sampling index:${l}`);return void e.emit(a.ERROR,a.ERROR,{type:s.MEDIA_ERROR,details:i.FRAG_PARSING_ERROR,fatal:!0,error:n,reason:n.message})}const c=1+(o>>6&3),d=n[t+3]>>6&3|(1&o)<<2,u="mp4a.40."+c,p=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350][l];let h=l;5!==c&&29!==c||(h-=3);const m=[c<<3|(14&h)>>1,(1&h)<<7|d<<3];return x.log(`manifest codec:${r}, parsed codec:${u}, channels:${d}, rate:${p} (ADTS object type:${c} sampling index:${l})`),{config:m,samplerate:p,channelCount:d,codec:u,parsedCodec:u,manifestCodec:r}}(n,t,r,o);if(!l)return;g(e,l)}}function ls(e){return 9216e4/e}function cs(e,n,t,s,i){const a=s+i*ls(e.samplerate),r=function(e,n){const t=ss(e,n);if(n+t<=e.length){const s=is(e,n)-t;if(s>0)return{headerLength:t,frameLength:s}}}(n,t);let o;if(r){const{frameLength:s,headerLength:i}=r,l=i+s,c=Math.max(0,t+l-n.length);c?(o=new Uint8Array(l-i),o.set(n.subarray(t+i,n.length),0)):o=n.subarray(t+i,t+l);const d={unit:o,pts:a};return c||e.samples.push(d),{sample:d,length:l,missing:c}}const l=n.length-t;return o=new Uint8Array(l),o.set(n.subarray(t,n.length),0),{sample:{unit:o,pts:a},length:l,missing:-1}}function ds(e,n){return Zt(e,n)&&es(e,n+6)+10<=e.length-n}function us(e,n=0,t=1/0){return function(e,n,t,s){const i=(a=e)instanceof ArrayBuffer?a:a.buffer;var a;let r=1;"BYTES_PER_ELEMENT"in s&&(r=s.BYTES_PER_ELEMENT);const o=(u=e)&&u.buffer instanceof ArrayBuffer&&void 0!==u.byteLength&&void 0!==u.byteOffset?e.byteOffset:0,l=(o+e.byteLength)/r,c=(o+n)/r,d=Math.floor(Math.max(0,Math.min(c,l)));var u;return new s(i,d,Math.floor(Math.min(d+Math.max(t,0),l))-d)}(e,n,t,Uint8Array)}function ps(e){return"PRIV"===e.type?function(e){if(e.size<2)return;const n=L(e.data,!0),t=new Uint8Array(e.data.subarray(n.length+1));return{key:e.type,info:n,data:t.buffer}}(e):"W"===e.type[0]?function(e){if("WXXX"===e.type){if(e.size<2)return;let n=1;const t=L(e.data.subarray(n),!0);n+=t.length+1;const s=L(e.data.subarray(n));return{key:e.type,info:t,data:s}}const n=L(e.data);return{key:e.type,info:"",data:n}}(e):"APIC"===e.type?function(e){const n={key:e.type,description:"",data:"",mimeType:null,pictureType:null};if(e.size<2)return;if(3!==e.data[0])return void console.log("Ignore frame with unrecognized character encoding");const t=e.data.subarray(1).indexOf(0);if(-1===t)return;const s=L(us(e.data,1,t)),i=e.data[2+t],a=e.data.subarray(3+t).indexOf(0);if(-1===a)return;const r=L(us(e.data,3+t,a));let o;return o="--\x3e"===s?L(us(e.data,4+t+a)):(l=e.data.subarray(4+t+a))instanceof ArrayBuffer?l:0==l.byteOffset&&l.byteLength==l.buffer.byteLength?l.buffer:new Uint8Array(l).buffer,n.mimeType=s,n.pictureType=i,n.description=r,n.data=o,n;var l}(e):function(e){if(e.size<2)return;if("TXXX"===e.type){let n=1;const t=L(e.data.subarray(n),!0);n+=t.length+1;const s=L(e.data.subarray(n));return{key:e.type,info:t,data:s}}const n=L(e.data.subarray(1));return{key:e.type,info:"",data:n}}(e)}function hs(e){const n=String.fromCharCode(e[0],e[1],e[2],e[3]),t=es(e,4);return{type:n,size:t,data:e.subarray(10,10+t)}}const ms=10,vs=10;function gs(e){let n=0;const t=[];for(;Zt(e,n);){const s=es(e,n+6);e[n+5]>>6&1&&(n+=ms),n+=ms;const i=n+s;for(;n+vs<i;){const s=hs(e.subarray(n)),i=ps(s);
vendor: 9,855 bytes, line 2
2i&&t.push(i),n+=s.size+ms}Jt(e,n)&&(n+=ms)}return t}function fs(e){return e&&"PRIV"===e.key&&"com.apple.streaming.transportStreamTimestamp"===e.info}function _s(e){if(8===e.data.byteLength){const n=new Uint8Array(e.data),t=1&n[3];let s=(n[4]<<23)+(n[5]<<15)+(n[6]<<7)+n[7];return s/=45,t&&(s+=47721858.84),Math.round(s)}}function bs(e){const n=gs(e);for(let e=0;e<n.length;e++){const t=n[e];if(fs(t))return _s(t)}}let ys=function(e){return e.audioId3="org.id3",e.dateRange="com.apple.quicktime.HLS",e.emsg="https://aomedia.org/emsg/ID3",e.misbklv="urn:misb:KLV:bin:1910.1",e}({});function ws(e="",n=9e4){return{type:e,id:-1,pid:-1,inputTimeScale:n,sequenceNumber:-1,samples:[],dropped:0}}class ks{constructor(){this._audioTrack=void 0,this._id3Track=void 0,this.frameIndex=0,this.cachedData=null,this.basePTS=null,this.initPTS=null,this.lastPTS=null}resetInitSegment(e,n,t,s){this._id3Track={type:"id3",id:3,pid:-1,inputTimeScale:9e4,sequenceNumber:0,samples:[],dropped:0}}resetTimeStamp(e){this.initPTS=e,this.resetContiguity()}resetContiguity(){this.basePTS=null,this.lastPTS=null,this.frameIndex=0}canParse(e,n){return!1}appendFrame(e,n,t){}demux(n,t){this.cachedData&&(n=ue(this.cachedData,n),this.cachedData=null);let s,i=ns(n,0),a=i?i.length:0;const r=this._audioTrack,o=this._id3Track,l=i?bs(i):void 0,c=n.length;for((null===this.basePTS||0===this.frameIndex&&e(l))&&(this.basePTS=Ts(l,t,this.initPTS),this.lastPTS=this.basePTS),null===this.lastPTS&&(this.lastPTS=this.basePTS),i&&i.length>0&&o.samples.push({pts:this.lastPTS,dts:this.lastPTS,data:i,type:ys.audioId3,duration:Number.POSITIVE_INFINITY});a<c;){if(this.canParse(n,a)){const e=this.appendFrame(r,n,a);e?(this.frameIndex++,this.lastPTS=e.sample.pts,a+=e.length,s=a):a=c}else ds(n,a)?(i=ns(n,a),o.samples.push({pts:this.lastPTS,dts:this.lastPTS,data:i,type:ys.audioId3,duration:Number.POSITIVE_INFINITY}),a+=i.length,s=a):a++;if(a===c&&s!==c){const e=n.slice(s);this.cachedData?this.cachedData=ue(this.cachedData,e):this.cachedData=e}}return{audioTrack:r,videoTrack:ws(),id3Track:o,textTrack:ws()}}demuxSampleAes(e,n,t){return Promise.reject(new Error(`[${this}] This demuxer does not support Sample-AES decryption`))}flush(e){const n=this.cachedData;return n&&(this.cachedData=null,this.demux(n,0)),{audioTrack:this._audioTrack,videoTrack:ws(),id3Track:this._id3Track,textTrack:ws()}}destroy(){this.cachedData=null,this._audioTrack=this._id3Track=void 0}}const Ts=(n,t,s)=>e(n)?90*n:9e4*t+(s?9e4*s.baseTime/s.timescale:0);let Es=null;const xs=[32,64,96,128,160,192,224,256,288,320,352,384,416,448,32,48,56,64,80,96,112,128,160,192,224,256,320,384,32,40,48,56,64,80,96,112,128,160,192,224,256,320,32,48,56,64,80,96,112,128,144,160,176,192,224,256,8,16,24,32,40,48,56,64,80,96,112,128,144,160],Ss=[44100,48e3,32e3,22050,24e3,16e3,11025,12e3,8e3],As=[[0,72,144,12],[0,0,0,0],[0,72,144,12],[0,144,144,12]],Ls=[0,1,1,4];function Cs(e,n,t,s,i){if(t+24>n.length)return;const a=Rs(n,t);if(a&&t+a.frameLength<=n.length){const r=s+i*(9e4*a.samplesPerFrame/a.sampleRate),o={unit:n.subarray(t,t+a.frameLength),pts:r,dts:r};return e.config=[],e.channelCount=a.channelCount,e.samplerate=a.sampleRate,e.samples.push(o),{sample:o,length:a.frameLength,missing:0}}}function Rs(e,n){const t=e[n+1]>>3&3,s=e[n+1]>>1&3,i=e[n+2]>>4&15,a=e[n+2]>>2&3;if(1!==t&&0!==i&&15!==i&&3!==a){const r=e[n+2]>>1&1,o=e[n+3]>>6,l=1e3*xs[14*(3===t?3-s:3===s?3:4)+i-1],c=Ss[3*(3===t?0:2===t?1:2)+a],d=3===o?1:2,u=As[t][s],p=Ls[s],h=8*u*p,m=Math.floor(u*l/c+r)*p;if(null===Es){const e=(navigator.userAgent||"").match(/Chrome\/(\d+)/i);Es=e?parseInt(e[1]):0}return!!Es&&Es<=87&&2===s&&l>=224e3&&0===o&&(e[n+3]=128|e[n+3]),{sampleRate:c,channelCount:d,frameLength:m,samplesPerFrame:h}}}function Is(e,n){return!(255!==e[n]||224&~e[n+1]||!(6&e[n+1]))}function Ps(e,n){return n+1<e.length&&Is(e,n)}function Ds(e,n){if(n+1<e.length&&Is(e,n)){const t=4,s=Rs(e,n);let i=t;null!=s&&s.frameLength&&(i=s.frameLength);const a=n+i;return a===e.length||Ps(e,a)}return!1}const Os=(e,n)=>{let t=0,s=5;n+=s;const i=new Uint32Array(1),a=new Uint32Array(1),r=new Uint8Array(1);for(;s>0;){r[0]=e[n];const o=Math.min(s,8),l=8-o;a[0]=4278190080>>>24+l<<l,i[0]=(r[0]&a[0])>>l,t=t?t<<o|i[0]:i[0],n+=1,s-=o}return t};function Ms(e,n,t,s,i){if(t+8>n.length)return-1;if(11!==n[t]||119!==n[t+1])return-1;const a=n[t+4]>>6;if(a>=3)return-1;const r=[48e3,44100,32e3][a],o=63&n[t+4],l=2*[64,69,96,64,70,96,80,87,120,80,88,120,96,104,144,96,105,144,112,121,168,112,122,168,128,139,192,128,140,192,160,174,240,160,175,240,192,208,288,192,209,288,224,243,336,224,244,336,256,278,384,256,279,384,320,348,480,320,349,480,384,417,576,384,418,576,448,487,672,448,488,672,512,557,768,512,558,768,640,696,960,640,697,960,768,835,1152,768,836,1152,896,975,1344,896,976,1344,1024,1114,1536,1024,1115,1536,1152,1253,1728,1152,1254,1728,1280,1393,1920,1280,1394,1920][3*o+a];if(t+l>n.length)return-1;const c=n[t+6]>>5;let d=0;2===c?d+=2:(1&c&&1!==c&&(d+=2),4&c&&(d+=2));const u=(n[t+6]<<8|n[t+7])>>12-d&1,p=[2,1,2,3,3,4,4,5][c]+u,h=n[t+5]>>3,m=7&n[t+5],v=new Uint8Array([a<<6|h<<1|m>>2,(3&m)<<6|c<<3|u<<2|o>>4,o<<4&224]),g=s+i*(1536/r*9e4),f=n.subarray(t,t+l);return e.config=v,e.channelCount=p,e.samplerate=r,e.samples.push({unit:f,pts:g}),l}const Fs=/\/emsg[-/]ID3/i;function Ns(n,t){return e(n.presentationTime)?n.presentationTime/n.timeScale:t+n.presentationTimeDelta/n.timeScale}class $s{constructor(e,n,t){this.keyData=void 0,this.decrypter=void 0,this.keyData=t,this.decrypter=new En(n,{removePKCS7Padding:!1})}decryptBuffer(e){return this.decrypter.decrypt(e,this.keyData.key.buffer,this.keyData.iv.buffer,0)}decryptAacSample(e,n,t){const s=e[n].unit;if(s.length<=16)return;const i=s.subarray(16,s.length-s.length%16),a=i.buffer.slice(i.byteOffset,i.byteOffset+i.length);this.decryptBuffer(a).then((i=>{const a=new Uint8Array(i);s.set(a,16),this.decrypter.isSync()||this.decryptAacSamples(e,n+1,t)}))}decryptAacSamples(e,n,t){for(;;n++){if(n>=e.length)return void t();if(!(e[n].unit.length<32||(this.decryptAacSample(e,n,t),this.decrypter.isSync())))return}}getAvcEncryptedData(e){const n=16*Math.floor((e.length-48)/160)+16,t=new Int8Array(n);let s=0;for(let n=32;n<e.length-16;n+=160,s+=16)t.set(e.subarray(n,n+16),s);return t}getAvcDecryptedUnit(e,n){const t=new Uint8Array(n);let s=0;for(let n=32;n<e.length-16;n+=160,s+=16)e.set(t.subarray(s,s+16),n);return e}decryptAvcSample(e,n,t,s,i){const a=ge(i.data),r=this.getAvcEncryptedData(a);this.decryptBuffer(r.buffer).then((r=>{i.data=this.getAvcDecryptedUnit(a,r),this.decrypter.isSync()||this.decryptAvcSamples(e,n,t+1,s)}))}decryptAvcSamples(e,n,t,s){if(e instanceof Uint8Array)throw new Error("Cannot decrypt samples of type Uint8Array");for(;;n++,t=0){if(n>=e.length)return void s();const i=e[n].units;for(;!(t>=i.length);t++){const a=i[t];if(!(a.data.length<=48||1!==a.type&&5!==a.type||(this.decryptAvcSample(e,n,t,s,a),this.decrypter.isSync())))return}}}}class Bs{constructor(){this.VideoSample=null}createVideoSample(e,n,t){return{key:e,frame:!1,pts:n,dts:t,units:[],length:0}}getLastNalUnit(e){var n;let t,s=this.VideoSample;if(s&&0!==s.units.length||(s=e[e.length-1]),null!=(n=s)&&n.units){const e=s.units;t=e[e.length-1]}return t}pushAccessUnit(e,n){if(e.units.length&&e.frame){if(void 0===e.pts){const t=n.samples,s=t.length;if(!s)return void n.dropped++;{const n=t[s-1];e.pts=n.pts,e.dts=n.dts}}n.samples.push(e)}}parseNALu(e,n,t){const s=n.byteLength;let i=e.naluState||0;const a=i,r=[];let o,l,c,d=0,u=-1,p=0;for(-1===i&&(u=0,p=this.getNALuType(n,0),i=0,d=1);d<s;)if(o=n[d++],i)if(1!==i)if(o)if(1===o){if(l=d-i-1,u>=0){const e={data:n.subarray(u,l),type:p};r.push(e)}else{const t=this.getLastNalUnit(e.samples);t&&(a&&d<=4-a&&t.state&&(t.data=t.data.subarray(0,t.data.byteLength-a)),l>0&&(t.data=ue(t.data,n.subarray(0,l)),t.state=0))}d<s?(c=this.getNALuType(n,d),u=d,p=c,i=0):i=-1}else i=0;else i=3;else i=o?0:2;else i=o?0:1;if(u>=0&&i>=0){const e={data:n.subarray(u,s),type:p,state:i};r.push(e)}if(0===r.length){const t=this.getLastNalUnit(e.samples);t&&(t.data=ue(t.data,n))}return e.naluState=i,r}}class Us{constructor(e){this.data=void 0,this.bytesAvailable=void 0,this.word=void 0,this.bitsAvailable=void 0,this.data=e,this.bytesAvailable=e.byteLength,this.word=0,this.bitsAvailable=0}loadWord(){const e=this.data,n=this.bytesAvailable,t=e.byteLength-n,s=new Uint8Array(4),i=Math.min(4,n);if(0===i)throw new Error("no bytes available");s.set(e.subarray(t,t+i)),this.word=new DataView(s.buffer).getUint32(0),this.bitsAvailable=8*i,this.bytesAvailable-=i}skipBits(e){let n;e=Math.min(e,8*this.bytesAvailable+this.bitsAvailable),this.bitsAvailable>e?(this.word<<=e,this.bitsAvailable-=e):(n=(e-=this.bitsAvailable)>>3,e-=n<<3,this.bytesAvailable-=n,this.loadWord(),this.word<<=e,this.bitsAvailable-=e)}readBits(e){let n=Math.min(this.bitsAvailable,e);const t=this.word>>>32-n;if(e>32&&x.error("Cannot read more than 32 bits at a time"),this.bitsAvailable-=n,this.bitsAvailable>0)this.word<<=n;else{if(!(this.bytesAvailable>0))throw new Error("no bits available");this.loadWord()}return n=e-n,n>0&&this.bitsAvailable?t<<n|this.readBits(n):t}skipLZ(){let e;for(e=0;e<this.bitsAvailable;++e)if(this.word&2147483648>>>e)return this.word<<=e,this.bitsAvailable-=e,e;return this.loadWord(),e+this.skipLZ()}skipUEG(){this.skipBits(1+this.skipLZ())}skipEG(){this.skipBits(1+this.skipLZ())}readUEG(){const e=this.skipLZ();return this.readBits(e+1)-1}readEG(){const e=this.readUEG();return 1&e?1+e>>>1:-1*(e>>>1)}readBoolean(){return 1===this.readBits(1)}readUByte(){return this.readBits(8)}readUShort(){return this.readBits(16)}readUInt(){return this.readBits(32)}}class js extends Bs{parsePES(e,n,t,s){const i=this.parseNALu(e,t.data,s);let a,r=this.VideoSample,o=!1;t.data=null,r&&i.length&&!e.audFound&&(this.pushAccessUnit(r,e),r=this.VideoSample=this.createVideoSample(!1,t.pts,t.dts)),i.forEac
vendor: 9,598 bytes, line 2
2h((s=>{var i,l;switch(s.type){case 1:{let n=!1;a=!0;const i=s.data;if(o&&i.length>4){const e=this.readSliceType(i);2!==e&&4!==e&&7!==e&&9!==e||(n=!0)}var c;n&&null!=(c=r)&&c.frame&&!r.key&&(this.pushAccessUnit(r,e),r=this.VideoSample=null),r||(r=this.VideoSample=this.createVideoSample(!0,t.pts,t.dts)),r.frame=!0,r.key=n;break}case 5:a=!0,null!=(i=r)&&i.frame&&!r.key&&(this.pushAccessUnit(r,e),r=this.VideoSample=null),r||(r=this.VideoSample=this.createVideoSample(!0,t.pts,t.dts)),r.key=!0,r.frame=!0;break;case 6:a=!0,ve(s.data,1,t.pts,n.samples);break;case 7:{var d,u;a=!0,o=!0;const n=s.data,t=this.readSPS(n);if(!e.sps||e.width!==t.width||e.height!==t.height||(null==(d=e.pixelRatio)?void 0:d[0])!==t.pixelRatio[0]||(null==(u=e.pixelRatio)?void 0:u[1])!==t.pixelRatio[1]){e.width=t.width,e.height=t.height,e.pixelRatio=t.pixelRatio,e.sps=[n];const s=n.subarray(1,4);let i="avc1.";for(let e=0;e<3;e++){let n=s[e].toString(16);n.length<2&&(n="0"+n),i+=n}e.codec=i}break}case 8:a=!0,e.pps=[s.data];break;case 9:a=!0,e.audFound=!0,null!=(l=r)&&l.frame&&(this.pushAccessUnit(r,e),r=null),r||(r=this.VideoSample=this.createVideoSample(!1,t.pts,t.dts));break;case 12:a=!0;break;default:a=!1}r&&a&&r.units.push(s)})),s&&r&&(this.pushAccessUnit(r,e),this.VideoSample=null)}getNALuType(e,n){return 31&e[n]}readSliceType(e){const n=new Us(e);return n.readUByte(),n.readUEG(),n.readUEG()}skipScalingList(e,n){let t,s=8,i=8;for(let a=0;a<e;a++)0!==i&&(t=n.readEG(),i=(s+t+256)%256),s=0===i?s:i}readSPS(e){const n=new Us(e);let t,s,i,a=0,r=0,o=0,l=0;const c=n.readUByte.bind(n),d=n.readBits.bind(n),u=n.readUEG.bind(n),p=n.readBoolean.bind(n),h=n.skipBits.bind(n),m=n.skipEG.bind(n),v=n.skipUEG.bind(n),g=this.skipScalingList.bind(this);c();const f=c();if(d(5),h(3),c(),v(),100===f||110===f||122===f||244===f||44===f||83===f||86===f||118===f||128===f){const e=u();if(3===e&&h(1),v(),v(),h(1),p())for(s=3!==e?8:12,i=0;i<s;i++)p()&&g(i<6?16:64,n)}v();const _=u();if(0===_)u();else if(1===_)for(h(1),m(),m(),t=u(),i=0;i<t;i++)m();v(),h(1);const b=u(),y=u(),w=d(1);0===w&&h(1),h(1),p()&&(a=u(),r=u(),o=u(),l=u());let k=[1,1];if(p()&&p())switch(c()){case 1:k=[1,1];break;case 2:k=[12,11];break;case 3:k=[10,11];break;case 4:k=[16,11];break;case 5:k=[40,33];break;case 6:k=[24,11];break;case 7:k=[20,11];break;case 8:k=[32,11];break;case 9:k=[80,33];break;case 10:k=[18,11];break;case 11:k=[15,11];break;case 12:k=[64,33];break;case 13:k=[160,99];break;case 14:k=[4,3];break;case 15:k=[3,2];break;case 16:k=[2,1];break;case 255:k=[c()<<8|c(),c()<<8|c()]}return{width:Math.ceil(16*(b+1)-2*a-2*r),height:(2-w)*(y+1)*16-(w?2:4)*(o+l),pixelRatio:k}}}class Gs extends Bs{constructor(...e){super(...e),this.initVPS=null}parsePES(e,n,t,s){const i=this.parseNALu(e,t.data,s);let a,r=this.VideoSample,o=!1;t.data=null,r&&i.length&&!e.audFound&&(this.pushAccessUnit(r,e),r=this.VideoSample=this.createVideoSample(!1,t.pts,t.dts)),i.forEach((s=>{var i,l;switch(s.type){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:r||(r=this.VideoSample=this.createVideoSample(!1,t.pts,t.dts)),r.frame=!0,a=!0;break;case 16:case 17:case 18:case 21:var c;a=!0,o&&null!=(c=r)&&c.frame&&!r.key&&(this.pushAccessUnit(r,e),r=this.VideoSample=null),r||(r=this.VideoSample=this.createVideoSample(!0,t.pts,t.dts)),r.key=!0,r.frame=!0;break;case 19:case 20:a=!0,null!=(i=r)&&i.frame&&!r.key&&(this.pushAccessUnit(r,e),r=this.VideoSample=null),r||(r=this.VideoSample=this.createVideoSample(!0,t.pts,t.dts)),r.key=!0,r.frame=!0;break;case 39:a=!0,ve(s.data,2,t.pts,n.samples);break;case 32:a=!0,e.vps||("object"!=typeof e.params&&(e.params={}),e.params=g(e.params,this.readVPS(s.data)),this.initVPS=s.data),e.vps=[s.data];break;case 33:if(a=!0,o=!0,void 0===e.vps||e.vps[0]===this.initVPS||void 0===e.sps||this.matchSPS(e.sps[0],s.data)||(this.initVPS=e.vps[0],e.sps=e.pps=void 0),!e.sps){const n=this.readSPS(s.data);e.width=n.width,e.height=n.height,e.pixelRatio=n.pixelRatio,e.codec=n.codecString,e.sps=[],"object"!=typeof e.params&&(e.params={});for(const t in n.params)e.params[t]=n.params[t]}this.pushParameterSet(e.sps,s.data,e.vps),r||(r=this.VideoSample=this.createVideoSample(!0,t.pts,t.dts)),r.key=!0;break;case 34:if(a=!0,"object"==typeof e.params){if(!e.pps){e.pps=[];const n=this.readPPS(s.data);for(const t in n)e.params[t]=n[t]}this.pushParameterSet(e.pps,s.data,e.vps)}break;case 35:a=!0,e.audFound=!0,null!=(l=r)&&l.frame&&(this.pushAccessUnit(r,e),r=null),r||(r=this.VideoSample=this.createVideoSample(!1,t.pts,t.dts));break;default:a=!1}r&&a&&r.units.push(s)})),s&&r&&(this.pushAccessUnit(r,e),this.VideoSample=null)}pushParameterSet(e,n,t){(t&&t[0]===this.initVPS||!t&&!e.length)&&e.push(n)}getNALuType(e,n){return(126&e[n])>>>1}ebsp2rbsp(e){const n=new Uint8Array(e.byteLength);let t=0;for(let s=0;s<e.byteLength;s++)s>=2&&3===e[s]&&0===e[s-1]&&0===e[s-2]||(n[t]=e[s],t++);return new Uint8Array(n.buffer,0,t)}pushAccessUnit(e,n){super.pushAccessUnit(e,n),this.initVPS&&(this.initVPS=null)}readVPS(e){const n=new Us(e);return n.readUByte(),n.readUByte(),n.readBits(4),n.skipBits(2),n.readBits(6),{numTemporalLayers:n.readBits(3)+1,temporalIdNested:n.readBoolean()}}readSPS(e){const n=new Us(this.ebsp2rbsp(e));n.readUByte(),n.readUByte(),n.readBits(4);const t=n.readBits(3);n.readBoolean();const s=n.readBits(2),i=n.readBoolean(),a=n.readBits(5),r=n.readUByte(),o=n.readUByte(),l=n.readUByte(),c=n.readUByte(),d=n.readUByte(),u=n.readUByte(),p=n.readUByte(),h=n.readUByte(),m=n.readUByte(),v=n.readUByte(),g=n.readUByte(),f=[],_=[];for(let e=0;e<t;e++)f.push(n.readBoolean()),_.push(n.readBoolean());if(t>0)for(let e=t;e<8;e++)n.readBits(2);for(let e=0;e<t;e++)f[e]&&(n.readUByte(),n.readUByte(),n.readUByte(),n.readUByte(),n.readUByte(),n.readUByte(),n.readUByte(),n.readUByte(),n.readUByte(),n.readUByte(),n.readUByte()),_[e]&&n.readUByte();n.readUEG();const b=n.readUEG();3==b&&n.skipBits(1);const y=n.readUEG(),w=n.readUEG(),k=n.readBoolean();let T=0,E=0,x=0,S=0;k&&(T+=n.readUEG(),E+=n.readUEG(),x+=n.readUEG(),S+=n.readUEG());const A=n.readUEG(),L=n.readUEG(),C=n.readUEG();for(let e=n.readBoolean()?0:t;e<=t;e++)n.skipUEG(),n.skipUEG(),n.skipUEG();if(n.skipUEG(),n.skipUEG(),n.skipUEG(),n.skipUEG(),n.skipUEG(),n.skipUEG(),n.readBoolean()&&n.readBoolean())for(let e=0;e<4;e++)for(let t=0;t<(3===e?2:6);t++)if(n.readBoolean()){const t=Math.min(64,1<<4+(e<<1));e>1&&n.readEG();for(let e=0;e<t;e++)n.readEG()}else n.readUEG();n.readBoolean(),n.readBoolean(),n.readBoolean()&&(n.readUByte(),n.skipUEG(),n.skipUEG(),n.readBoolean());const R=n.readUEG();let I=0;for(let e=0;e<R;e++){let t=!1;if(0!==e&&(t=n.readBoolean()),t){e===R&&n.readUEG(),n.readBoolean(),n.readUEG();let t=0;for(let e=0;e<=I;e++){const e=n.readBoolean();let s=!1;e||(s=n.readBoolean()),(e||s)&&t++}I=t}else{const e=n.readUEG(),t=n.readUEG();I=e+t;for(let t=0;t<e;t++)n.readUEG(),n.readBoolean();for(let e=0;e<t;e++)n.readUEG(),n.readBoolean()}}if(n.readBoolean()){const e=n.readUEG();for(let t=0;t<e;t++){for(let e=0;e<C+4;e++)n.readBits(1);n.readBits(1)}}let P=0,D=1,O=1,M=!0,F=1,N=0;n.readBoolean(),n.readBoolean();let $=!1;if(n.readBoolean()){if(n.readBoolean()){const e=n.readUByte();e>0&&e<16?(D=[1,12,10,16,40,24,20,32,80,18,15,64,160,4,3,2][e-1],O=[1,11,11,11,33,11,11,11,33,11,11,33,99,3,2,1][e-1]):255===e&&(D=n.readBits(16),O=n.readBits(16))}if(n.readBoolean()&&n.readBoolean(),n.readBoolean()&&(n.readBits(3),n.readBoolean(),n.readBoolean()&&(n.readUByte(),n.readUByte(),n.readUByte())),n.readBoolean()&&(n.readUEG(),n.readUEG()),n.readBoolean(),n.readBoolean(),n.readBoolean(),$=n.readBoolean(),$&&(T+=n.readUEG(),E+=n.readUEG(),x+=n.readUEG(),S+=n.readUEG()),n.readBoolean()&&(F=n.readBits(32),N=n.readBits(32),n.readBoolean()&&n.readUEG(),n.readBoolean())){const e=n.readBoolean(),s=n.readBoolean();let i=!1;(e||s)&&(i=n.readBoolean(),i&&(n.readUByte(),n.readBits(5),n.readBoolean(),n.readBits(5)),n.readBits(4),n.readBits(4),i&&n.readBits(4),n.readBits(5),n.readBits(5),n.readBits(5));for(let a=0;a<=t;a++){M=n.readBoolean();let t=!1;M||n.readBoolean()?n.readEG():t=n.readBoolean();const a=t?1:n.readUEG()+1;if(e)for(let e=0;e<a;e++)n.readUEG(),n.readUEG(),i&&(n.readUEG(),n.readUEG()),n.skipBits(1);if(s)for(let e=0;e<a;e++)n.readUEG(),n.readUEG(),i&&(n.readUEG(),n.readUEG()),n.skipBits(1)}}n.readBoolean()&&(n.readBoolean(),n.readBoolean(),n.readBoolean(),P=n.readUEG())}let B=y,U=w;if(k||$){let e=1,n=1;1===b?e=n=2:2==b&&(e=2),B=y-e*E-e*T,U=w-n*S-n*x}const j=s?["A","B","C"][s]:"",G=r<<24|o<<16|l<<8|c;let z=0;for(let e=0;e<32;e++)z=(z|(G>>e&1)<<31-e)>>>0;let q=z.toString(16);return 1===a&&"2"===q&&(q="6"),{codecString:`hvc1.${j}${a}.${q}.${i?"H":"L"}${g}.B0`,params:{general_tier_flag:i,general_profile_idc:a,general_profile_space:s,general_profile_compatibility_flags:[r,o,l,c],general_constraint_indicator_flags:[d,u,p,h,m,v],general_level_idc:g,bit_depth:A+8,bit_depth_luma_minus8:A,bit_depth_chroma_minus8:L,min_spatial_segmentation_idc:P,chroma_format_idc:b,frame_rate:{fixed:M,fps:N/F}},width:B,height:U,pixelRatio:[D,O]}}readPPS(e){const n=new Us(this.ebsp2rbsp(e));n.readUByte(),n.readUByte(),n.skipUEG(),n.skipUEG(),n.skipBits(2),n.skipBits(3),n.skipBits(2),n.skipUEG(),n.skipUEG(),n.skipEG(),n.skipBits(2),n.readBoolean()&&n.skipUEG(),n.skipEG(),n.skipEG(),n.skipBits(4);const t=n.readBoolean(),s=n.readBoolean();let i=1;return s&&t?i=0:s?i=3:t&&(i=2),{parallelismType:i}}matchSPS(e,n){return String.fromCharCode.apply(null,e).substr(3)===String.fromCharCode.apply(null,n).substr(3)}}const zs=188;class qs{constructor(e,n,t,s){this.logger=void 0,this.observer=void 0,this.config=void 0,this.typeSupp
vendor: 5,118 bytes, line 2
2orted=void 0,this.sampleAes=null,this.pmtParsed=!1,this.audioCodec=void 0,this.videoCodec=void 0,this._pmtId=-1,this._videoTrack=void 0,this._audioTrack=void 0,this._id3Track=void 0,this._txtTrack=void 0,this.aacOverFlow=null,this.remainderData=null,this.videoParser=void 0,this.observer=e,this.config=n,this.typeSupported=t,this.logger=s,this.videoParser=null}static probe(e,n){const t=qs.syncOffset(e);return t>0&&n.warn(`MPEG2-TS detected but first sync word found @ offset ${t}`),-1!==t}static syncOffset(e){const n=e.length;let t=Math.min(940,n-zs)+1,s=0;for(;s<t;){let i=!1,a=-1,r=0;for(let o=s;o<n;o+=zs){if(71!==e[o]||n-o!==zs&&71!==e[o+zs]){if(r)return-1;break}if(r++,-1===a&&(a=o,0!==a&&(t=Math.min(a+18612,e.length-zs)+1)),i||(i=0===Ks(e,o)),i&&r>1&&(0===a&&r>2||o+zs>t))return a}s++}return-1}static createTrack(e,n){return{container:"video"===e||"audio"===e?"video/mp2t":void 0,type:e,id:X[e],pid:-1,inputTimeScale:9e4,sequenceNumber:0,samples:[],dropped:0,duration:"audio"===e?n:void 0}}resetInitSegment(e,n,t,s){this.pmtParsed=!1,this._pmtId=-1,this._videoTrack=qs.createTrack("video"),this._videoTrack.duration=s,this._audioTrack=qs.createTrack("audio",s),this._id3Track=qs.createTrack("id3"),this._txtTrack=qs.createTrack("text"),this._audioTrack.segmentCodec="aac",this.aacOverFlow=null,this.remainderData=null,this.audioCodec=n,this.videoCodec=t}resetTimeStamp(){}resetContiguity(){const{_audioTrack:e,_videoTrack:n,_id3Track:t}=this;e&&(e.pesData=null),n&&(n.pesData=null),t&&(t.pesData=null),this.aacOverFlow=null,this.remainderData=null}demux(e,n,t=!1,s=!1){let i;t||(this.sampleAes=null);const a=this._videoTrack,r=this._audioTrack,o=this._id3Track,l=this._txtTrack;let c=a.pid,d=a.pesData,u=r.pid,p=o.pid,h=r.pesData,m=o.pesData,v=null,g=this.pmtParsed,f=this._pmtId,_=e.length;if(this.remainderData&&(_=(e=ue(this.remainderData,e)).length,this.remainderData=null),_<zs&&!s)return this.remainderData=e,{audioTrack:r,videoTrack:a,id3Track:o,textTrack:l};const b=Math.max(0,qs.syncOffset(e));_-=(_-b)%zs,_<e.byteLength&&!s&&(this.remainderData=new Uint8Array(e.buffer,_,e.buffer.byteLength-_));let y=0;for(let n=b;n<_;n+=zs)if(71===e[n]){const s=!!(64&e[n+1]),_=Ks(e,n);let y;if((48&e[n+3])>>4>1){if(y=n+5+e[n+4],y===n+zs)continue}else y=n+4;switch(_){case c:if(s){if(d&&(i=Xs(d,this.logger))){if(null===this.videoParser)switch(a.segmentCodec){case"avc":this.videoParser=new js;break;case"hevc":this.videoParser=new Gs}null!==this.videoParser&&this.videoParser.parsePES(a,l,i,!1)}d={data:[],size:0}}d&&(d.data.push(e.subarray(y,n+zs)),d.size+=n+zs-y);break;case u:if(s){if(h&&(i=Xs(h,this.logger)))switch(r.segmentCodec){case"aac":this.parseAACPES(r,i);break;case"mp3":this.parseMPEGPES(r,i);break;case"ac3":this.parseAC3PES(r,i)}h={data:[],size:0}}h&&(h.data.push(e.subarray(y,n+zs)),h.size+=n+zs-y);break;case p:s&&(m&&(i=Xs(m,this.logger))&&this.parseID3PES(o,i),m={data:[],size:0}),m&&(m.data.push(e.subarray(y,n+zs)),m.size+=n+zs-y);break;case 0:s&&(y+=e[y]+1),f=this._pmtId=Vs(e,y);break;case f:{s&&(y+=e[y]+1);const i=Hs(e,y,this.typeSupported,t,this.observer,this.logger);c=i.videoPid,c>0&&(a.pid=c,a.segmentCodec=i.segmentVideoCodec),u=i.audioPid,u>0&&(r.pid=u,r.segmentCodec=i.segmentAudioCodec),p=i.id3Pid,p>0&&(o.pid=p),null===v||g||(this.logger.warn(`MPEG-TS PMT found at ${n} after unknown PID '${v}'. Backtracking to sync byte @${b} to parse all TS packets.`),v=null,n=b-188),g=this.pmtParsed=!0;break}case 17:case 8191:break;default:v=_}}else y++;y>0&&Ys(this.observer,new Error(`Found ${y} TS packet/s that do not start with 0x47`),void 0,this.logger),a.pesData=d,r.pesData=h,o.pesData=m;const w={audioTrack:r,videoTrack:a,id3Track:o,textTrack:l};return s&&this.extractRemainingSamples(w),w}flush(){const{remainderData:e}=this;let n;return this.remainderData=null,n=e?this.demux(e,-1,!1,!0):{videoTrack:this._videoTrack,audioTrack:this._audioTrack,id3Track:this._id3Track,textTrack:this._txtTrack},this.extractRemainingSamples(n),this.sampleAes?this.decrypt(n,this.sampleAes):n}extractRemainingSamples(e){const{audioTrack:n,videoTrack:t,id3Track:s,textTrack:i}=e,a=t.pesData,r=n.pesData,o=s.pesData;let l;if(a&&(l=Xs(a,this.logger))){if(null===this.videoParser)switch(t.segmentCodec){case"avc":this.videoParser=new js;break;case"hevc":this.videoParser=new Gs}null!==this.videoParser&&(this.videoParser.parsePES(t,i,l,!0),t.pesData=null)}else t.pesData=a;if(r&&(l=Xs(r,this.logger))){switch(n.segmentCodec){case"aac":this.parseAACPES(n,l);break;case"mp3":this.parseMPEGPES(n,l);break;case"ac3":this.parseAC3PES(n,l)}n.pesData=null}else null!=r&&r.size&&this.logger.log("last AAC PES packet truncated,might overlap between fragments"),n.pesData=r;o&&(l=Xs(o,this.logger))?(this.parseID3PES(s,l),s.pesData=null):s.pesData=o}demuxSampleAes(e,n,t){const s=this.demux(e,t,!0,!this.config.progressive),i=this.sampleAes=new $s(this.observer,this.config,n);return this.decrypt(s,i)}decrypt(e,n){return new Promise((t=>{const{audioTrack:s,videoTrack:i}=e;s.samples&&"aac"===s.segmentCodec?n.decryptAacSamples(s.samples,0,(()=>{i.samples?n.decryptAvcSamples(i.samples,0,0,(()=>{t(e)})):t(e)}
vendor: 6,383 bytes, line 2
2)):i.samples&&n.decryptAvcSamples(i.samples,0,0,(()=>{t(e)}))}))}destroy(){this.observer&&this.observer.removeAllListeners(),this.config=this.logger=this.observer=null,this.aacOverFlow=this.videoParser=this.remainderData=this.sampleAes=null,this._videoTrack=this._audioTrack=this._id3Track=this._txtTrack=void 0}parseAACPES(e,n){let t=0;const s=this.aacOverFlow;let i,a,r,o=n.data;if(s){this.aacOverFlow=null;const n=s.missing,i=s.sample.unit.byteLength;if(-1===n)o=ue(s.sample.unit,o);else{const a=i-n;s.sample.unit.set(o.subarray(0,n),a),e.samples.push(s.sample),t=s.missing}}for(i=t,a=o.length;i<a-1&&!as(o,i);i++);if(i!==t){let e;const n=i<a-1;if(e=n?`AAC PES did not start with ADTS header,offset:${i}`:"No ADTS header found in AAC PES",Ys(this.observer,new Error(e),n,this.logger),!n)return}if(os(e,this.observer,o,i,this.audioCodec),void 0!==n.pts)r=n.pts;else{if(!s)return void this.logger.warn("[tsdemuxer]: AAC PES unknown PTS");{const n=ls(e.samplerate);r=s.sample.pts+n}}let l,c=0;for(;i<a;){if(l=cs(e,o,i,r,c),i+=l.length,l.missing){this.aacOverFlow=l;break}for(c++;i<a-1&&!as(o,i);i++);}}parseMPEGPES(e,n){const t=n.data,s=t.length;let i=0,a=0;const r=n.pts;if(void 0!==r)for(;a<s;)if(Ps(t,a)){const n=Cs(e,t,a,r,i);if(!n)break;a+=n.length,i++}else a++;else this.logger.warn("[tsdemuxer]: MPEG PES unknown PTS")}parseAC3PES(e,n){{const t=n.data,s=n.pts;if(void 0===s)return void this.logger.warn("[tsdemuxer]: AC3 PES unknown PTS");const i=t.length;let a,r=0,o=0;for(;o<i&&(a=Ms(e,t,o,s,r++))>0;)o+=a}}parseID3PES(e,n){if(void 0===n.pts)return void this.logger.warn("[tsdemuxer]: ID3 PES unknown PTS");const t=g({},n,{type:this._videoTrack?ys.emsg:ys.audioId3,duration:Number.POSITIVE_INFINITY});e.samples.push(t)}}function Ks(e,n){return((31&e[n+1])<<8)+e[n+2]}function Vs(e,n){return(31&e[n+10])<<8|e[n+11]}function Hs(e,n,t,s,i,a){const r={audioPid:-1,videoPid:-1,id3Pid:-1,segmentVideoCodec:"avc",segmentAudioCodec:"aac"},o=n+3+((15&e[n+1])<<8|e[n+2])-4;for(n+=12+((15&e[n+10])<<8|e[n+11]);n<o;){const o=Ks(e,n),l=(15&e[n+3])<<8|e[n+4];switch(e[n]){case 207:if(!s){Ws("ADTS AAC",a);break}case 15:-1===r.audioPid&&(r.audioPid=o);break;case 21:-1===r.id3Pid&&(r.id3Pid=o);break;case 219:if(!s){Ws("H.264",a);break}case 27:-1===r.videoPid&&(r.videoPid=o);break;case 3:case 4:t.mpeg||t.mp3?-1===r.audioPid&&(r.audioPid=o,r.segmentAudioCodec="mp3"):a.log("MPEG audio found, not supported in this browser");break;case 193:if(!s){Ws("AC-3",a);break}case 129:t.ac3?-1===r.audioPid&&(r.audioPid=o,r.segmentAudioCodec="ac3"):a.log("AC-3 audio found, not supported in this browser");break;case 6:if(-1===r.audioPid&&l>0){let s=n+5,i=l;for(;i>2;){106===e[s]&&(!0!==t.ac3?a.log("AC-3 audio found, not supported in this browser for now"):(r.audioPid=o,r.segmentAudioCodec="ac3"));const n=e[s+1]+2;s+=n,i-=n}}break;case 194:case 135:return Ys(i,new Error("Unsupported EC-3 in M2TS found"),void 0,a),r;case 36:-1===r.videoPid&&(r.videoPid=o,r.segmentVideoCodec="hevc",a.log("HEVC in M2TS found"))}n+=l+5}return r}function Ys(e,n,t,r){r.warn(`parsing error: ${n.message}`),e.emit(a.ERROR,a.ERROR,{type:s.MEDIA_ERROR,details:i.FRAG_PARSING_ERROR,fatal:!1,levelRetry:t,error:n,reason:n.message})}function Ws(e,n){n.log(`${e} with AES-128-CBC encryption found in unencrypted stream`)}function Xs(e,n){let t,s,i,a,r,o=0;const l=e.data;if(!e||0===e.size)return null;for(;l[0].length<19&&l.length>1;)l[0]=ue(l[0],l[1]),l.splice(1,1);if(t=l[0],1===(t[0]<<16)+(t[1]<<8)+t[2]){if(s=(t[4]<<8)+t[5],s&&s>e.size-6)return null;const c=t[7];192&c&&(a=536870912*(14&t[9])+4194304*(255&t[10])+16384*(254&t[11])+128*(255&t[12])+(254&t[13])/2,64&c?(r=536870912*(14&t[14])+4194304*(255&t[15])+16384*(254&t[16])+128*(255&t[17])+(254&t[18])/2,a-r>54e5&&(n.warn(`${Math.round((a-r)/9e4)}s delta between PTS and DTS, align them`),a=r)):r=a),i=t[8];let d=i+9;if(e.size<=d)return null;e.size-=d;const u=new Uint8Array(e.size);for(let e=0,n=l.length;e<n;e++){t=l[e];let n=t.byteLength;if(d){if(d>n){d-=n;continue}t=t.subarray(d),n-=d,d=0}u.set(t,o),o+=n}return s&&(s-=i+3),{data:u,pts:a,dts:r,len:s}}return null}class Qs{static getSilentFrame(e,n){if("mp4a.40.2"===e){if(1===n)return new Uint8Array([0,200,0,128,35,128]);if(2===n)return new Uint8Array([33,0,73,144,2,25,0,35,128]);if(3===n)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,142]);if(4===n)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,128,44,128,8,2,56]);if(5===n)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,56]);if(6===n)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,0,178,0,32,8,224])}else{if(1===n)return new Uint8Array([1,64,34,128,163,78,230,128,186,8,0,0,0,28,6,241,193,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(2===n)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(3===n)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94])}}}const Js=Math.pow(2,32)-1;class Zs{static init(){let e;for(e in Zs.types={avc1:[],avcC:[],hvc1:[],hvcC:[],btrt:[],dinf:[],dref:[],esds:[],ftyp:[],hdlr:[],mdat:[],mdhd:[],mdia:[],mfhd:[],minf:[],moof:[],moov:[],mp4a:[],".mp3":[],dac3:[],"ac-3":[],mvex:[],mvhd:[],pasp:[],sdtp:[],stbl:[],stco:[],stsc:[],stsd:[],stsz:[],stts:[],tfdt:[],tfhd:[],traf:[],trak:[],trun:[],trex:[],tkhd:[],vmhd:[],smhd:[]},Zs.types)Zs.types.hasOwnProperty(e)&&(Zs.types[e]=[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)]);const n=new Uint8Array([0,0,0,0,0,0,0,0,118,105,100,101,0,0,0,0,0,0,0,0,0,0,0,0,86,105,100,101,111,72,97,110,100,108,101,114,0]),t=new Uint8Array([0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0,83,111,117,110,100,72,97,110,100,108,101,114,0]);Zs.HDLR_TYPES={video:n,audio:t};const s=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1]),i=new Uint8Array([0,0,0,0,0,0,0,0]);Zs.STTS=Zs.STSC=Zs.STCO=i,Zs.STSZ=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]),Zs.VMHD=new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0]),Zs.SMHD=new Uint8Array([0,0,0,0,0,0,0,0]),Zs.STSD=new Uint8Array([0,0,0,0,0,0,0,1]);
vendor: 2,090 bytes, line 2
2const a=new Uint8Array([105,115,111,109]),r=new Uint8Array([97,118,99,49]),o=new Uint8Array([0,0,0,1]);Zs.FTYP=Zs.box(Zs.types.ftyp,a,o,a,r),Zs.DINF=Zs.box(Zs.types.dinf,Zs.box(Zs.types.dref,s))}static box(e,...n){let t=8,s=n.length;const i=s;for(;s--;)t+=n[s].byteLength;const a=new Uint8Array(t);for(a[0]=t>>24&255,a[1]=t>>16&255,a[2]=t>>8&255,a[3]=255&t,a.set(e,4),s=0,t=8;s<i;s++)a.set(n[s],t),t+=n[s].byteLength;return a}static hdlr(e){return Zs.box(Zs.types.hdlr,Zs.HDLR_TYPES[e])}static mdat(e){return Zs.box(Zs.types.mdat,e)}static mdhd(e,n){n*=e;const t=Math.floor(n/(Js+1)),s=Math.floor(n%(Js+1));return Zs.box(Zs.types.mdhd,new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,e>>24&255,e>>16&255,e>>8&255,255&e,t>>24,t>>16&255,t>>8&255,255&t,s>>24,s>>16&255,s>>8&255,255&s,85,196,0,0]))}static mdia(e){return Zs.box(Zs.types.mdia,Zs.mdhd(e.timescale||0,e.duration||0),Zs.hdlr(e.type),Zs.minf(e))}static mfhd(e){return Zs.box(Zs.types.mfhd,new Uint8Array([0,0,0,0,e>>24,e>>16&255,e>>8&255,255&e]))}static minf(e){return"audio"===e.type?Zs.box(Zs.types.minf,Zs.box(Zs.types.smhd,Zs.SMHD),Zs.DINF,Zs.stbl(e)):Zs.box(Zs.types.minf,Zs.box(Zs.types.vmhd,Zs.VMHD),Zs.DINF,Zs.stbl(e))}static moof(e,n,t){return Zs.box(Zs.types.moof,Zs.mfhd(e),Zs.traf(t,n))}static moov(e){let n=e.length;const t=[];for(;n--;)t[n]=Zs.trak(e[n]);return Zs.box.apply(null,[Zs.types.moov,Zs.mvhd(e[0].timescale||0,e[0].duration||0)].concat(t).concat(Zs.mvex(e)))}static mvex(e){let n=e.length;const t=[];for(;n--;)t[n]=Zs.trex(e[n]);return Zs.box.apply(null,[Zs.types.mvex,...t])}static mvhd(e,n){n*=e;const t=Math.floor(n/(Js+1)),s=Math.floor(n%(Js+1)),i=new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,e>>24&255,e>>16&255,e>>8&255,255&e,t>>24,t>>16&255,t>>8&255,255&t,s>>24,s>>16&255,s>>8&255,255&s,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return Zs.box(Zs.types.mvhd,i)}static sdtp(e){const n=e.samples||[],t=new Uint8Array(4+n.length);let s,i;for(s=0;s<n.length;
vendor: 6,359 bytes, line 2
2s++)i=n[s].flags,t[s+4]=i.dependsOn<<4|i.isDependedOn<<2|i.hasRedundancy;return Zs.box(Zs.types.sdtp,t)}static stbl(e){return Zs.box(Zs.types.stbl,Zs.stsd(e),Zs.box(Zs.types.stts,Zs.STTS),Zs.box(Zs.types.stsc,Zs.STSC),Zs.box(Zs.types.stsz,Zs.STSZ),Zs.box(Zs.types.stco,Zs.STCO))}static avc1(e){let n,t,s,i=[],a=[];for(n=0;n<e.sps.length;n++)t=e.sps[n],s=t.byteLength,i.push(s>>>8&255),i.push(255&s),i=i.concat(Array.prototype.slice.call(t));for(n=0;n<e.pps.length;n++)t=e.pps[n],s=t.byteLength,a.push(s>>>8&255),a.push(255&s),a=a.concat(Array.prototype.slice.call(t));const r=Zs.box(Zs.types.avcC,new Uint8Array([1,i[3],i[4],i[5],255,224|e.sps.length].concat(i).concat([e.pps.length]).concat(a))),o=e.width,l=e.height,c=e.pixelRatio[0],d=e.pixelRatio[1];return Zs.box(Zs.types.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,o>>8&255,255&o,l>>8&255,255&l,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),r,Zs.box(Zs.types.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])),Zs.box(Zs.types.pasp,new Uint8Array([c>>24,c>>16&255,c>>8&255,255&c,d>>24,d>>16&255,d>>8&255,255&d])))}static esds(e){const n=e.config;return new Uint8Array([0,0,0,0,3,25,0,1,0,4,17,64,21,0,0,0,0,0,0,0,0,0,0,0,5,2,...n,6,1,2])}static audioStsd(e){const n=e.samplerate||0;return new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,e.channelCount||0,0,16,0,0,0,0,n>>8&255,255&n,0,0])}static mp4a(e){return Zs.box(Zs.types.mp4a,Zs.audioStsd(e),Zs.box(Zs.types.esds,Zs.esds(e)))}static mp3(e){return Zs.box(Zs.types[".mp3"],Zs.audioStsd(e))}static ac3(e){return Zs.box(Zs.types["ac-3"],Zs.audioStsd(e),Zs.box(Zs.types.dac3,e.config))}static stsd(e){const{segmentCodec:n}=e;if("audio"===e.type){if("aac"===n)return Zs.box(Zs.types.stsd,Zs.STSD,Zs.mp4a(e));if("ac3"===n&&e.config)return Zs.box(Zs.types.stsd,Zs.STSD,Zs.ac3(e));if("mp3"===n&&"mp3"===e.codec)return Zs.box(Zs.types.stsd,Zs.STSD,Zs.mp3(e))}else{if(!e.pps||!e.sps)throw new Error("video track missing pps or sps");if("avc"===n)return Zs.box(Zs.types.stsd,Zs.STSD,Zs.avc1(e));if("hevc"===n&&e.vps)return Zs.box(Zs.types.stsd,Zs.STSD,Zs.hvc1(e))}throw new Error(`unsupported ${e.type} segment codec (${n}/${e.codec})`)}static tkhd(e){const n=e.id,t=(e.duration||0)*(e.timescale||0),s=e.width||0,i=e.height||0,a=Math.floor(t/(Js+1)),r=Math.floor(t%(Js+1));return Zs.box(Zs.types.tkhd,new Uint8Array([1,0,0,7,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,n>>24&255,n>>16&255,n>>8&255,255&n,0,0,0,0,a>>24,a>>16&255,a>>8&255,255&a,r>>24,r>>16&255,r>>8&255,255&r,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,s>>8&255,255&s,0,0,i>>8&255,255&i,0,0]))}static traf(e,n){const t=Zs.sdtp(e),s=e.id,i=Math.floor(n/(Js+1)),a=Math.floor(n%(Js+1));return Zs.box(Zs.types.traf,Zs.box(Zs.types.tfhd,new Uint8Array([0,0,0,0,s>>24,s>>16&255,s>>8&255,255&s])),Zs.box(Zs.types.tfdt,new Uint8Array([1,0,0,0,i>>24,i>>16&255,i>>8&255,255&i,a>>24,a>>16&255,a>>8&255,255&a])),Zs.trun(e,t.length+16+20+8+16+8+8),t)}static trak(e){return e.duration=e.duration||4294967295,Zs.box(Zs.types.trak,Zs.tkhd(e),Zs.mdia(e))}static trex(e){const n=e.id;return Zs.box(Zs.types.trex,new Uint8Array([0,0,0,0,n>>24,n>>16&255,n>>8&255,255&n,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]))}static trun(e,n){const t=e.samples||[],s=t.length,i=12+16*s,a=new Uint8Array(i);let r,o,l,c,d,u;for(n+=8+i,a.set(["video"===e.type?1:0,0,15,1,s>>>24&255,s>>>16&255,s>>>8&255,255&s,n>>>24&255,n>>>16&255,n>>>8&255,255&n],0),r=0;r<s;r++)o=t[r],l=o.duration,c=o.size,d=o.flags,u=o.cts,a.set([l>>>24&255,l>>>16&255,l>>>8&255,255&l,c>>>24&255,c>>>16&255,c>>>8&255,255&c,d.isLeading<<2|d.dependsOn,d.isDependedOn<<6|d.hasRedundancy<<4|d.paddingValue<<1|d.isNonSync,61440&d.degradPrio,15&d.degradPrio,u>>>24&255,u>>>16&255,u>>>8&255,255&u],12+16*r);return Zs.box(Zs.types.trun,a)}static initSegment(e){Zs.types||Zs.init();const n=Zs.moov(e);return ue(Zs.FTYP,n)}static hvc1(e){const n=e.params,t=[e.vps,e.sps,e.pps],s=new Uint8Array([1,n.general_profile_space<<6|(n.general_tier_flag?32:0)|n.general_profile_idc,n.general_profile_compatibility_flags[0],n.general_profile_compatibility_flags[1],n.general_profile_compatibility_flags[2],n.general_profile_compatibility_flags[3],n.general_constraint_indicator_flags[0],n.general_constraint_indicator_flags[1],n.general_constraint_indicator_flags[2],n.general_constraint_indicator_flags[3],n.general_constraint_indicator_flags[4],n.general_constraint_indicator_flags[5],n.general_level_idc,240|n.min_spatial_segmentation_idc>>8,255&n.min_spatial_segmentation_idc,252|n.parallelismType,252|n.chroma_format_idc,248|n.bit_depth_luma_minus8,248|n.bit_depth_chroma_minus8,0,parseInt(n.frame_rate.fps),3|n.temporal_id_nested<<2|n.num_temporal_layers<<3|(n.frame_rate.fixed?64:0),t.length]);let i=s.length;for(let e=0;e<t.length;e+=1){i+=3;for(let n=0;n<t[e].length;n+=1)i+=2+t[e][n].length}const a=new Uint8Array(i);a.set(s,0),i=s.length;const r=t.length-1;for(let e=0;e<t.length;e+=1){a.set(new Uint8Array([32+e|(e===r?128:0),0,t[e].length]),i),i+=3;for(let n=0;n<t[e].length;n+=1)a.set(new Uint8Array([t[e][n].length>>8,255&t[e][n].length]),i),i+=2,a.set(t[e][n],i),i+=t[e][n].length}const o=Zs.box(Zs.types.hvcC,a),l=e.width,c=e.height,d=e.pixelRatio[0],u=e.pixelRatio[1];return Zs.box(Zs.types.hvc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,l>>8&255,255&l,c>>8&255,255&c,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),o,Zs.box(Zs.types.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])),Zs.box(Zs.types.pasp,new Uint8Array([d>>24,d>>16&255,d>>8&255,255&d,u>>24,u>>16&255,u>>8&255,255&u])))}}Zs.types=void 0,Zs.HDLR_TYPES=void 0,Zs.STTS=void 0,Zs.STSC=void 0,Zs.STCO=void 0,Zs.STSZ=void 0,Zs.VMHD=void 0,Zs.SMHD=void 0,Zs.STSD=void 0,Zs.FTYP=void 0,Zs.DINF=void 0;function ei(e,n,t=1,s=!1){const i=e*n*t;return s?Math.round(i):i}function ni(e,n=!1){return ei(e,1e3,1/9e4,n)}let ti,si=null,ii=null;function ai(e,n,t,s){return{duration:n,size:t,cts:s,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0,dependsOn:e?2:1,isNonSync:e?0:1}}}class ri extends b{constructor(e,n,t,s){if(super("mp4-remuxer",s),this.observer=void 0,this.config=void 0,this.typeSupp
vendor: 8,193 bytes, line 2
2orted=void 0,this.ISGenerated=!1,this._initPTS=null,this._initDTS=null,this.nextVideoTs=null,this.nextAudioTs=null,this.videoSampleDuration=null,this.isAudioContiguous=!1,this.isVideoContiguous=!1,this.videoTrackConfig=void 0,this.observer=e,this.config=n,this.typeSupported=t,this.ISGenerated=!1,null===si){const e=(navigator.userAgent||"").match(/Chrome\/(\d+)/i);si=e?parseInt(e[1]):0}if(null===ii){const e=navigator.userAgent.match(/Safari\/(\d+)/i);ii=e?parseInt(e[1]):0}}destroy(){this.config=this.videoTrackConfig=this._initPTS=this._initDTS=null}resetTimeStamp(e){this.log("initPTS & initDTS reset"),this._initPTS=this._initDTS=e}resetNextTimestamp(){this.log("reset next timestamp"),this.isVideoContiguous=!1,this.isAudioContiguous=!1}resetInitSegment(){this.log("ISGenerated flag reset"),this.ISGenerated=!1,this.videoTrackConfig=void 0}getVideoStartPts(e){let n=!1;const t=e[0].pts,s=e.reduce(((e,s)=>{let i=s.pts,a=i-e;return a<-4294967296&&(n=!0,i=oi(i,t),a=i-e),a>0?e:i}),t);return n&&this.debug("PTS rollover detected"),s}remux(e,n,t,s,i,a,r,o){let l,c,d,p,h,m,v=i,g=i;const f=e.pid>-1,_=n.pid>-1,b=n.samples.length,y=e.samples.length>0,w=r&&b>0||b>1;if((!f||y)&&(!_||w)||this.ISGenerated||r){if(this.ISGenerated){var k,T,E,x;const e=this.videoTrackConfig;(e&&(n.width!==e.width||n.height!==e.height||(null==(k=n.pixelRatio)?void 0:k[0])!==(null==(T=e.pixelRatio)?void 0:T[0])||(null==(E=n.pixelRatio)?void 0:E[1])!==(null==(x=e.pixelRatio)?void 0:x[1]))||!e&&w||null===this.nextAudioTs&&y)&&this.resetInitSegment()}this.ISGenerated||(d=this.generateIS(e,n,i,a));const t=this.isVideoContiguous;let s,r=-1;if(w&&(r=function(e){for(let n=0;n<e.length;n++)if(e[n].key)return n;return-1}(n.samples),!t&&this.config.forceKeyFrameOnDiscontinuity))if(m=!0,r>0){this.warn(`Dropped ${r} out of ${b} video samples due to a missing keyframe`);const e=this.getVideoStartPts(n.samples);n.samples=n.samples.slice(r),n.dropped+=r,g+=(n.samples[0].pts-e)/n.inputTimeScale,s=g}else-1===r&&(this.warn(`No keyframe found out of ${b} video samples`),m=!1);if(this.ISGenerated){if(y&&w){const t=this.getVideoStartPts(n.samples),s=(oi(e.samples[0].pts,t)-t)/n.inputTimeScale;v+=Math.max(0,s),g+=Math.max(0,-s)}if(y){if(e.samplerate||(this.warn("regenerate InitSegment as audio detected"),d=this.generateIS(e,n,i,a)),c=this.remuxAudio(e,v,this.isAudioContiguous,a,_||w||o===u?g:void 0),w){const s=c?c.endPTS-c.startPTS:0;n.inputTimeScale||(this.warn("regenerate InitSegment as video detected"),d=this.generateIS(e,n,i,a)),l=this.remuxVideo(n,g,t,s)}}else w&&(l=this.remuxVideo(n,g,t,0));l&&(l.firstKeyFrame=r,l.independent=-1!==r,l.firstKeyFramePTS=s)}}return this.ISGenerated&&this._initPTS&&this._initDTS&&(t.samples.length&&(h=li(t,i,this._initPTS,this._initDTS)),s.samples.length&&(p=ci(s,i,this._initPTS))),{audio:c,video:l,initSegment:d,independent:m,text:p,id3:h}}generateIS(e,n,t,s){const i=e.samples,a=n.samples,r=this.typeSupported,o={},l=this._initPTS;let c,d,u,p,h=!l||s,m="audio/mp4";if(h&&(c=d=1/0),e.config&&i.length){switch(e.timescale=e.samplerate,e.segmentCodec){case"mp3":r.mpeg?(m="audio/mpeg",e.codec=""):r.mp3&&(e.codec="mp3");break;case"ac3":e.codec="ac-3"}o.audio={id:"audio",container:m,codec:e.codec,initSegment:"mp3"===e.segmentCodec&&r.mpeg?new Uint8Array(0):Zs.initSegment([e]),metadata:{channelCount:e.channelCount}},h&&(p=e.id,u=e.inputTimeScale,l&&u===l.timescale?h=!1:c=d=i[0].pts-Math.round(u*t))}if(n.sps&&n.pps&&a.length){if(n.timescale=n.inputTimeScale,o.video={id:"main",container:"video/mp4",codec:n.codec,initSegment:Zs.initSegment([n]),metadata:{width:n.width,height:n.height}},h)if(p=n.id,u=n.inputTimeScale,l&&u===l.timescale)h=!1;else{const e=this.getVideoStartPts(a),n=Math.round(u*t);d=Math.min(d,oi(a[0].dts,e)-n),c=Math.min(c,e-n)}this.videoTrackConfig={width:n.width,height:n.height,pixelRatio:n.pixelRatio}}if(Object.keys(o).length)return this.ISGenerated=!0,h?(this._initPTS={baseTime:c,timescale:u},this._initDTS={baseTime:d,timescale:u}):c=u=void 0,{tracks:o,initPTS:c,timescale:u,trackId:p}}remuxVideo(e,n,t,r){const o=e.inputTimeScale,l=e.samples,c=[],d=l.length,u=this._initPTS,p=u.baseTime*o/u.timescale;let h,m,v=this.nextVideoTs,f=8,_=this.videoSampleDuration,b=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,w=!1;if(!t||null===v){const e=p+n*o,s=l[0].pts-oi(l[0].dts,l[0].pts);si&&null!==v&&Math.abs(e-s-(v+p))<15e3?t=!0:v=e-s-p}const k=v+p;for(let e=0;e<d;e++){const n=l[e];n.pts=oi(n.pts,k),n.dts=oi(n.dts,k),n.dts<l[e>0?e-1:e].dts&&(w=!0)}w&&l.sort((function(e,n){const t=e.dts-n.dts,s=e.pts-n.pts;return t||s})),h=l[0].dts,m=l[l.length-1].dts;const T=m-h,E=T?Math.round(T/(d-1)):_||e.inputTimeScale/30;if(t){const t=h-k,s=t>E,i=t<-1;if((s||i)&&(s?this.warn(`${(e.segmentCodec||"").toUpperCase()}: ${ni(t,!0)} ms (${t}dts) hole between fragments detected at ${n.toFixed(3)}`):this.warn(`${(e.segmentCodec||"").toUpperCase()}: ${ni(-t,!0)} ms (${t}dts) overlapping between fragments detected at ${n.toFixed(3)}`),!i||k>=l[0].pts||si)){h=k;const e=l[0].pts-t;if(s)l[0].dts=h,l[0].pts=e;else{let n=!0;for(let s=0;s<l.length&&!(l[s].dts>e&&n);s++){const e=l[s].pts;if(l[s].dts-=t,l[s].pts-=t,s<l.length-1){const t=l[s+1].pts;n=t<=l[s].pts==t<=e}}}this.log(`Video: Initial PTS/DTS adjusted: ${ni(e,!0)}/${ni(h,!0)}, delta: ${ni(t,!0)} ms`)}}h=Math.max(0,h);let x=0,S=0,A=h;for(let e=0;e<d;e++){const n=l[e],t=n.units,s=t.length;let i=0;for(let e=0;e<s;e++)i+=t[e].data.length;S+=i,x+=s,n.length=i,n.dts<A?(n.dts=A,A+=E/4|0||1):A=n.dts,b=Math.min(n.pts,b),y=Math.max(n.pts,y)}m=l[d-1].dts;const L=S+4*x+8;let C;try{C=new Uint8Array(L)}catch(e){return void this.observer.emit(a.ERROR,a.ERROR,{type:s.MUX_ERROR,details:i.REMUX_ALLOC_ERROR,fatal:!1,error:e,bytes:L,reason:`fail allocating video mdat ${L}`})}const R=new DataView(C.buffer);R.setUint32(0,L),C.set(Zs.types.mdat,4);let I=!1,P=Number.POSITIVE_INFINITY,D=Number.POSITIVE_INFINITY,O=Number.NEGATIVE_INFINITY,M=Number.NEGATIVE_INFINITY;for(let e=0;e<d;e++){const n=l[e],t=n.units;let s,i=0;for(let e=0,n=t.length;e<n;e++){const n=t[e],s=n.data,a=n.data.byteLength;R.setUint32(f,a),f+=4,C.set(s,f),f+=a,i+=4+a}if(e<d-1)_=l[e+1].dts-n.dts,s=l[e+1].pts-n.pts;else{const t=this.config,i=e>0?n.dts-l[e-1].dts:E;if(s=e>0?n.pts-l[e-1].pts:E,t.stretchShortVideoTrack&&null!==this.nextAudioTs){const e=Math.floor(t.maxBufferHole*o),s=(r?b+r*o:this.nextAudioTs+p)-n.pts;s>e?(_=s-i,_<0?_=i:I=!0,this.log(`It is approximately ${s/90} ms to the next segment; using duration ${_/90} ms for the last video frame.`)):_=i}else _=i}const a=Math.round(n.pts-n.dts);P=Math.min(P,_),O=Math.max(O,_),D=Math.min(D,s),M=Math.max(M,s),c.push(ai(n.key,_,i,a))}if(c.length)if(si){if(si<70){const e=c[0].flags;e.dependsOn=2,e.isNonSync=0}}else if(ii&&M-D<O-P&&E/O<.025&&0===c[0].cts){this.warn("Found irregular gaps in sample duration. Using PTS instead of DTS to determine MP4 sample duration.");let e=h;for(let n=0,t=c.length;n<t;n++){const s=e+c[n].duration,i=e+c[n].cts;if(n<t-1){const e=s+c[n+1].cts;c[n].duration=e-i}else c[n].duration=n?c[n-1].duration:E;c[n].cts=0,e=s}}_=I||!_?E:_;const F=m+_;this.nextVideoTs=v=F-p,this.videoSampleDuration=_,this.isVideoContiguous=!0;const N={data1:Zs.moof(e.sequenceNumber++,h,g(e,{samples:c})),data2:C,startPTS:(b-p)/o,endPTS:(y+_-p)/o,startDTS:(h-p)/o,endDTS:v/o,type:"video",hasAudio:!1,hasVideo:!0,nb:c.length,dropped:e.dropped};return e.samples=[],e.dropped=0,N}getSamplesPerFrame(e){switch(e.segmentCodec){case"mp3":return 1152;case"ac3":return 1536;default:return 1024}}remuxAudio(e,n,t,r,o){const l=e.inputTimeScale,c=l/(e.samplerate?e.samplerate:l),d=this.getSamplesPerFrame(e),u=d*c,p=this._initPTS,h="mp3"===e.segmentCodec&&this.typeSupported.mpeg,m=[],v=void 0!==o;let f=e.samples,_=h?0:8,b=this.nextAudioTs||-1;const y=p.baseTime*l/p.timescale,w=y+n*l;if(this.isAudioContiguous=t=t||f.length&&b>0&&(r&&Math.abs(w-(b+y))<9e3||Math.abs(oi(f[0].pts,w)-(b+y))<20*u),f.forEach((function(e){e.pts=oi(e.pts,w)})),!t||b<0){if(f=f.filter((e=>e.pts>=0)),!f.length)return;b=0===o?0:r&&!v?Math.max(0,w-y):f[0].pts-y}if("aac"===e.segmentCodec){const n=this.config.maxAudioFramesDrift;for(let t=0,s=b+y;t<f.length;t++){const i=f[t],a=i.pts,r=a-s,o=Math.abs(1e3*r/l);
vendor: 4,519 bytes, line 2
2if(r<=-n*u&&v)0===t&&(this.warn(`Audio frame @ ${(a/l).toFixed(3)}s overlaps marker by ${Math.round(1e3*r/l)} ms.`),this.nextAudioTs=b=a-y,s=a);else if(r>=n*u&&o<1e4&&v){let n=Math.round(r/u);for(s=a-n*u;s<0&&n&&u;)n--,s+=u;0===t&&(this.nextAudioTs=b=s-y),this.warn(`Injecting ${n} audio frames @ ${((s-y)/l).toFixed(3)}s due to ${Math.round(1e3*r/l)} ms gap.`);for(let a=0;a<n;a++){let n=Qs.getSilentFrame(e.parsedCodec||e.manifestCodec||e.codec,e.channelCount);n||(this.log("Unable to get silent frame for given audio codec; duplicating last frame instead."),n=i.unit.subarray()),f.splice(t,0,{unit:n,pts:s}),s+=u,t++}}i.pts=s,s+=u}}let k,T=null,E=null,x=0,S=f.length;for(;S--;)x+=f[S].unit.byteLength;for(let n=0,r=f.length;n<r;n++){const r=f[n],o=r.unit;let l=r.pts;if(null!==E)m[n-1].duration=Math.round((l-E)/c);else{if(t&&"aac"===e.segmentCodec&&(l=b+y),T=l,!(x>0))return;x+=_;try{k=new Uint8Array(x)}catch(e){return void this.observer.emit(a.ERROR,a.ERROR,{type:s.MUX_ERROR,details:i.REMUX_ALLOC_ERROR,fatal:!1,error:e,bytes:x,reason:`fail allocating audio mdat ${x}`})}h||(new DataView(k.buffer).setUint32(0,x),k.set(Zs.types.mdat,4))}k.set(o,_);const u=o.byteLength;_+=u,m.push(ai(!0,d,u,0)),E=l}const A=m.length;if(!A)return;const L=m[m.length-1];b=E-y,this.nextAudioTs=b+c*L.duration;const C=h?new Uint8Array(0):Zs.moof(e.sequenceNumber++,T/c,g({},e,{samples:m}));e.samples=[];const R=(T-y)/l,I=b/l,P={data1:C,data2:k,startPTS:R,endPTS:I,startDTS:R,endDTS:I,type:"audio",hasAudio:!0,hasVideo:!1,nb:A};return this.isAudioContiguous=!0,P}}function oi(e,n){let t;if(null===n)return e;for(t=n<e?-8589934592:8589934592;Math.abs(e-n)>4294967296;)e+=t;return e}function li(e,n,t,s){const i=e.samples.length;if(!i)return;const a=e.inputTimeScale;for(let r=0;r<i;r++){const i=e.samples[r];i.pts=oi(i.pts-t.baseTime*a/t.timescale,n*a)/a,i.dts=oi(i.dts-s.baseTime*a/s.timescale,n*a)/a}const r=e.samples;return e.samples=[],{samples:r}}function ci(e,n,t){const s=e.samples.length;if(!s)return;const i=e.inputTimeScale;for(let a=0;a<s;a++){const s=e.samples[a];s.pts=oi(s.pts-t.baseTime*i/t.timescale,n*i)/i}e.samples.sort(((e,n)=>e.pts-n.pts));const a=e.samples;return e.samples=[],{samples:a}}function di(e,n,t=!1){return void 0!==(null==e?void 0:e.start)?(e.start+(t?e.duration:0))/e.timescale:n}function ui(e,n,t){const s=null==e?void 0:e.codec;return s&&s.length>4?s:n===U?"ec-3"===s||"ac-3"===s||"alac"===s?s:"fLaC"===s||"Opus"===s?Le(s,!1):(t.warn(`Unhandled audio codec "${s}" in mp4 MAP`),s||"mp4a"):(t.warn(`Unhandled video codec "${s}" in mp4 MAP`),s||"avc1")}try{ti=self.performance.now.bind(self.performance)}catch(e){ti=Date.now}const pi=[{demux:class{constructor(e,n){this.remainderData=null,this.timeOffset=0,this.config=void 0,this.videoTrack=void 0,this.audioTrack=void 0,this.id3Track=void 0,this.txtTrack=void 0,this.config=n}resetTimeStamp(){}resetInitSegment(e,n,t,s){const i=this.videoTrack=ws("video",1),a=this.audioTrack=ws("audio",1),r=this.txtTrack=ws("text",1);if(this.id3Track=ws("id3",1),this.timeOffset=0,null==e||!e.byteLength)return;const o=ie(e);if(o.video){const{id:e,timescale:n,codec:t,supplemental:s}=o.video;i.id=e,i.timescale=r.timescale=n,i.codec=t,i.supplemental=s}if(o.audio){const{id:e,timescale:n,codec:t}=o.audio;a.id=e,a.timescale=n,a.codec=t}r.id=X.text,i.sampleDuration=0,i.duration=a.duration=s}resetContiguity(){this.remainderData=null}static probe(e){return function(e){const n=e.byteLength;for(let t=0;t<n;){const s=Z(e,t);if(s>8&&109===e[t+4]&&111===e[t+5]&&111===e[t+6]&&102===e[t+7])return!0;t=s>1?t+s:n}return!1}(e)}demux(e,n){this.timeOffset=n;let t=e;const s=this.videoTrack,i=this.txtTrack;if(this.config.progressive){this.remainderData&&(t=ue(this.remainderData,e));const n=function(e){const n={valid:null,remainder:null},t=te(e,["moof"]);if(t.length<2)return n.remainder=e,n;const s=t[t.length-1];return n.valid=e.slice(0,s.byteOffset-8),n.remainder=e.slice(s.byteOffset-8),n}(t);this.remainderData=n.remainder,s.samples=n.valid||new Uint8Array}else s.samples=t;const a=this.extractID3Track(s,n);return i.samples=pe(n,s),{videoTrack:s,audioTrack:this.audioTrack,id3Track:a,textTrack:this.txtTrack}}flush(){const e=this.timeOffset,n=this.videoTrack,t=this.txtTrack;n.samples=this.remainderData||new Uint8Array,this.remainderData=null;const s=this.extractID3Track(n,this.timeOffset);return t.samples=pe(e,n),{videoTrack:n,audioTrack:ws(),id3Track:s,textTrack:ws()}}extractID3Track(e,t){const s=this.id3Track;if(e.samples.length){const i=te(e.samples,["emsg"]);
2i&&i.forEach((e=>{const i=function(e){const t=e[0];let s="",i="",a=0,r=0,o=0,l=0,c=0,d=0;if(0===t){for(;"\0"!==Q(e.subarray(d,d+1));)s+=Q(e.subarray(d,d+1)),d+=1;for(s+=Q(e.subarray(d,d+1)),d+=1;"\0"!==Q(e.subarray(d,d+1));)i+=Q(e.subarray(d,d+1)),d+=1;i+=Q(e.subarray(d,d+1)),d+=1,a=Z(e,12),r=Z(e,16),l=Z(e,20),c=Z(e,24),d=28}else if(1===t){d+=4,a=Z(e,d),d+=4;const t=Z(e,d);d+=4;const r=Z(e,d);for(d+=4,o=2**32*t+r,n(o)||(o=Number.MAX_SAFE_INTEGER,x.warn("Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box")),l=Z(e,d),d+=4,c=Z(e,d),d+=4;"\0"!==Q(e.subarray(d,d+1));)s+=Q(e.subarray(d,d+1)),d+=1;for(s+=Q(e.subarray(d,d+1)),d+=1;"\0"!==Q(e.subarray(d,d+1));)i+=Q(e.subarray(d,d+1)),d+=1;i+=Q(e.subarray(d,d+1)),d+=1}return{schemeIdUri:s,value:i,timeScale:a,presentationTime:o,presentationTimeDelta:r,eventDuration:l,id:c,payload:e.subarray(d,e.byteLength)}}(e);if(Fs.test(i.schemeIdUri)){const e=Ns(i,t);let n=4294967295===i.eventDuration?Number.POSITIVE_INFINITY:i.eventDuration/i.timeScale;n<=.001&&(n=Number.POSITIVE_INFINITY);const a=i.payload;s.samples.push({data:a,len:a.byteLength,dts:e,pts:e,type:ys.emsg,duration:n})}else if(this.config.enableEmsgKLVMetadata&&i.schemeIdUri.startsWith("urn:misb:KLV:bin:1910.1")){const e=Ns(i,t);s.samples.push({data:i.payload,len:i.payload.byteLength,dts:e,pts:e,type:ys.misbklv,duration:Number.POSITIVE_INFINITY})}}))}return s}demuxSampleAes(e,n,t){return Promise.reject(new Error("The MP4 demuxer does not support SAMPLE-AES decryption"))}destroy(){this.config=null,this.remainderData=null,this.videoTrack=this.audioTrack=this.id3Track=this.txtTrack=void 0}},remux:class extends b{constructor(e,n,t,s){super("passthrough-remuxer",s),this.emitInitSegment=!1,this.audioCodec=void 0,this.videoCodec=void 0,this.initData=void 0,this.initPTS=null,this.initTracks=void 0,this.lastEndTime=null,this.isVideoContiguous=!1}destroy(){}resetTimeStamp(e){this.lastEndTime=null;const n=this.initPTS;n&&e&&n.baseTime===e.baseTime&&n.timescale===e.timescale||(this.initPTS=e)}resetNextTimestamp(){this.isVideoContiguous=!1,this.lastEndTime=null}resetInitSegment(e,n,t,s){this.audioCodec=n,this.videoCodec=t,this.generateInitSegment(function(e,n){if(!e||!n)return e;const t=n.keyId;return t&&n.isCommonEncryption&&te(e,["moov","trak"]).forEach((e=>{const n=te(e,["mdia","minf","stbl","stsd"])[0].subarray(8);let s=te(n,["enca"]);const i=s.length>0;i||(s=te(n,["encv"])),s.forEach((e=>{te(i?e.subarray(28):e.subarray(78),["sinf"]).forEach((e=>{const n=de(e);if(n){const e=n.subarray(8,24);e.some((e=>0!==e))||(x.log(`[eme] Patching keyId in 'enc${i?"a":"v"}>sinf>>tenc' box: ${C(e)} -> ${C(t)}`),n.set(t,8))}}))}))})),e}(e,s)),this.emitInitSegment=!0}generateInitSegment(e){let{audioCodec:n,videoCodec:t}=this;if(null==e||!e.byteLength)return this.initTracks=void 0,void(this.initData=void 0);const s=this.initData=ie(e);s.audio&&(n=ui(s.audio,U,this)),s.video&&(t=ui(s.video,j,this));const i={};s.audio&&s.video?i.audiovideo={container:"video/mp4",codec:n+","+t,supplemental:s.video.supplemental,initSegment:e,id:"main"}:s.audio?i.audio={container:"audio/mp4",codec:n,initSegment:e,id:"audio"}:s.video?i.video={container:"video/mp4",codec:t,supplemental:s.video.supplemental,initSegment:e,id:"main"}:this.warn("initSegment does not contain moov or trak boxes."),this.initTracks=i}remux(n,t,s,i,a,r){var o,l;let{initPTS:c,lastEndTime:d}=this;const u={audio:void 0,video:void 0,text:i,id3:s,initSegment:void 0};e(d)||(d=this.lastEndTime=a||0);const p=t.samples;if(null==p||!p.length)return u;const h={initPTS:void 0,timescale:void 0,trackId:void 0};let m=this.initData;if(null!=(o=m)&&o.length||(this.generateInitSegment(p),m=this.initData),null==(l=m)||!l.length)return this.warn("Failed to generate initSegment."),u;this.emitInitSegment&&(h.tracks=this.initTracks,this.emitInitSegment=!1);const v=function(n,t,s){const i={},a=te(n,["moof","traf"]);for(let n=0;n<a.length;n++){const r=a[n],o=te(r,["tfhd"])[0],l=Z(o,4),c=t[l];if(!c)continue;const d=i[l]||(i[l]={start:NaN,duration:0,sampleCount:0,timescale:c.timescale,type:c.type}),u=te(r,["tfdt"])[0];if(u){const n=u[0];let t=Z(u,4);
vendor: 1,135 bytes, line 2
21===n&&(t===Y?s.warn("[mp4-demuxer]: Ignoring assumed invalid signed 64-bit track fragment decode time"):(t*=Y+1,t+=Z(u,8))),e(t)&&(!e(d.start)||t<d.start)&&(d.start=t)}const p=c.default,h=Z(o,0)|(null==p?void 0:p.flags);let m=(null==p?void 0:p.duration)||0;8&h&&(m=Z(o,2&h?12:8));const v=te(r,["trun"]);let g=d.start||0,f=0,_=m;for(let e=0;e<v.length;e++){const n=v[e],t=Z(n,4),s=d.sampleCount;d.sampleCount+=t;const i=1&n[3],a=4&n[3],r=1&n[2],o=2&n[2],l=4&n[2],c=8&n[2];let u=8,p=t;for(i&&(u+=4),a&&t&&(1&n[u+1]||void 0!==d.keyFrameIndex||(d.keyFrameIndex=s),u+=4,r?(_=Z(n,u),u+=4):_=m,o&&(u+=4),c&&(u+=4),g+=_,f+=_,p--);p--;)r?(_=Z(n,u),u+=4):_=m,o&&(u+=4),l&&(1&n[u+1]||void 0===d.keyFrameIndex&&(d.keyFrameIndex=d.sampleCount-(p+1),d.keyFrameStart=g),u+=4),c&&(u+=4),g+=_,f+=_;!f&&m&&(f+=m*t)}d.duration+=f}if(!Object.keys(i).some((e=>i[e].duration))){let t=1/0,s=0;const a=te(n,["sidx"]);for(let e=0;e<a.length;e++){const n=se(a[e]);if(null!=n&&n.references){t=Math.min(t,n.earliestPresentationTime/n.timescale);const e=n.references.reduce(((e,n)=>e+n.info.duration||0),0);s=Math.max(s,e+n.earliestPresentationTime/n.timescale)}}
2s&&e(s)&&Object.keys(i).forEach((e=>{i[e].duration||(i[e].duration=s*i[e].timescale-i[e].start)}))}return i}(p,m,this),g=m.audio?v[m.audio.id]:null,f=m.video?v[m.video.id]:null,_=di(f,1/0),b=di(g,1/0),y=di(f,0,!0),w=di(g,0,!0);let k,T=a,E=0;if(g&&(!f||!c&&b<_||c&&c.trackId===m.audio.id)?(h.trackId=m.audio.id,k=g,E=w-b):f&&(h.trackId=m.video.id,k=f,E=y-_),k){const e=k.timescale;T=k.start/e,h.initPTS=k.start-a*e,h.timescale=e,c||(this.initPTS=c={baseTime:h.initPTS,timescale:e,trackId:h.trackId})}!r&&c||!function(e,n,t,s){if(null===e)return!0;const i=Math.max(s,1),a=n-e.baseTime/e.timescale;return Math.abs(a-t)>i}(c,T,a,E)&&h.timescale===c.timescale||(h.initPTS=T-a,h.timescale=1,c&&1===c.timescale&&this.warn(`Adjusting initPTS @${a} from ${c.baseTime/c.timescale} to ${h.initPTS}`),this.initPTS=c={baseTime:h.initPTS,timescale:1});const x=n?T-c.baseTime/c.timescale:d,S=x+E;E>0?this.lastEndTime=S:(this.warn("Duration parsed from mp4 should be greater than zero"),this.resetNextTimestamp());const A=!!m.audio,L=!!m.video;let C="";A&&(C+="audio"),L&&(C+="video");const R={data1:p,startPTS:x,startDTS:x,endPTS:S,endDTS:S,type:C,hasAudio:A,hasVideo:L,nb:1,dropped:0};u.audio=A&&!L?R:void 0,u.video=L?R:void 0;const I=null==f?void 0:f.sampleCount;if(I){const e=f.keyFrameIndex,n=-1!==e;R.nb=I,R.dropped=0===e||this.isVideoContiguous?0:n?e:I,R.independent=n,R.firstKeyFrame=e,n&&f.keyFrameStart&&(R.firstKeyFramePTS=(f.keyFrameStart-c.baseTime)/c.timescale),this.isVideoContiguous||(u.independent=n),this.isVideoContiguous||(this.isVideoContiguous=n),R.dropped&&this.warn(`fmp4 does not start with IDR: firstIDR ${e}/${I} dropped: ${R.dropped} start: ${R.firstKeyFramePTS||"NA"}`)}return u.initSegment=h,u.id3=li(s,a,c,c),i.samples.length&&(u.text=ci(i,a,c)),u}}},{demux:qs,remux:ri},{demux:class extends ks{constructor(e,n){super(),this.observer=void 0,this.config=void 0,this.observer=e,this.config=n}resetInitSegment(e,n,t,s){super.resetInitSegment(e,n,t,s),this._audioTrack={container:"audio/adts",type:"audio",id:2,pid:-1,sequenceNumber:0,segmentCodec:"aac",samples:[],manifestCodec:n,duration:s,inputTimeScale:9e4,dropped:0}}static probe(e,n){if(!e)return!1;const t=ns(e,0);let s=(null==t?void 0:t.length)||0;if(Ds(e,s))return!1;for(let t=e.length;s<t;s++)if(rs(e,s))return n.log("ADTS sync word found !"),!0;return!1}canParse(e,n){return function(e,n){return function(e,n){return n+5<e.length}(e,n)&&ts(e,n)&&is(e,n)<=e.length-n}(e,n)}appendFrame(e,n,t){os(e,this.observer,n,t,e.manifestCodec);const s=cs(e,n,t,this.basePTS,this.frameIndex);if(s&&0===s.missing)return s}},remux:ri},{demux:class extends ks{resetInitSegment(e,n,t,s){super.resetInitSegment(e,n,t,s),this._audioTrack={container:"audio/mpeg",type:"audio",id:2,pid:-1,sequenceNumber:0,segmentCodec:"mp3",samples:[],manifestCodec:n,duration:s,inputTimeScale:9e4,dropped:0}}static probe(e){if(!e)return!1;const n=ns(e,0);let t=(null==n?void 0:n.length)||0;if(n&&11===e[t]&&119===e[t+1]&&void 0!==bs(n)&&Os(e,t)<=16)return!1;for(let n=e.length;t<n;t++)if(Ds(e,t))return x.log("MPEG Audio sync word found !"),!0;return!1}canParse(e,n){return function(e,n){return Is(e,n)&&4<=e.length-n}(e,n)}appendFrame(e,n,t){if(null!==this.basePTS)return Cs(e,n,t,this.basePTS,this.frameIndex)}},remux:ri}];pi.splice(2,0,{demux:class extends ks{constructor(e){super(),this.observer=void 0,this.observer=e}resetInitSegment(e,n,t,s){super.resetInitSegment(e,n,t,s),this._audioTrack={container:"audio/ac-3",type:"audio",id:2,pid:-1,sequenceNumber:0,segmentCodec:"ac3",samples:[],manifestCodec:n,duration:s,inputTimeScale:9e4,dropped:0}}canParse(e,n){return n+64<e.length}appendFrame(e,n,t){const s=Ms(e,n,t,this.basePTS,this.frameIndex);if(-1!==s)return{sample:e.samples[e.samples.length-1],length:s,missing:0}}static probe(e){if(!e)return!1;const n=ns(e,0);if(!n)return!1;const t=n.length;return 11===e[t]&&119===e[t+1]&&void 0!==bs(n)&&Os(e,t)<16}},remux:ri});class hi{constructor(e,n,t,s,i,a){this.asyncResult=!1,this.logger=void 0,this.observer=void 0,this.typeSupported=void 0,this.config=void 0,this.id=void 0,this.demuxer=void 0,this.remuxer=void 0,this.decrypter=void 0,this.probe=void 0,this.decryptionPromise=null,this.transmuxConfig=void 0,this.currentTransmuxState=void 0,this.observer=e,this.typeSupp
vendor: 4,590 bytes, line 2
2orted=n,this.config=t,this.id=i,this.logger=a}configure(e){this.transmuxConfig=e,this.decrypter&&this.decrypter.reset()}push(e,n,t,r){const o=t.transmuxing;o.executeStart=ti();let l=new Uint8Array(e);const{currentTransmuxState:c,transmuxConfig:d}=this;r&&(this.currentTransmuxState=r);const{contiguous:u,discontinuity:p,trackSwitch:h,accurateTimeOffset:m,timeOffset:v,initSegmentChange:g}=r||c,{audioCodec:f,videoCodec:_,defaultInitPts:b,duration:y,initSegmentData:w}=d,k=function(e,n){let t=null;return e.byteLength>0&&null!=(null==n?void 0:n.key)&&null!==n.iv&&null!=n.method&&(t=n),t}(l,n);if(k&&Kn(k.method)){const e=this.getDecrypter(),n=Vn(k.method);if(!e.isSync())return this.asyncResult=!0,this.decryptionPromise=e.webCryptoDecrypt(l,k.key.buffer,k.iv.buffer,n).then((e=>{const n=this.push(e,null,t);return this.decryptionPromise=null,n})),this.decryptionPromise;{let s=e.softwareDecrypt(l,k.key.buffer,k.iv.buffer,n);if(t.part>-1){const n=e.flush();s=n?n.buffer:n}if(!s)return o.executeEnd=ti(),mi(t);l=new Uint8Array(s)}}const T=this.needsProbing(p,h);if(T){const e=this.configureTransmuxer(l);if(e)return this.logger.warn(`[transmuxer] ${e.message}`),this.observer.emit(a.ERROR,a.ERROR,{type:s.MEDIA_ERROR,details:i.FRAG_PARSING_ERROR,fatal:!1,error:e,reason:e.message}),o.executeEnd=ti(),mi(t)}(p||h||g||T)&&this.resetInitSegment(w,f,_,y,n),(p||g||T)&&this.resetInitialTimestamp(b),u||this.resetContiguity();const E=this.transmux(l,k,v,m,t);this.asyncResult=vi(E);const x=this.currentTransmuxState;return x.contiguous=!0,x.discontinuity=!1,x.trackSwitch=!1,o.executeEnd=ti(),E}flush(e){const n=e.transmuxing;n.executeStart=ti();const{decrypter:t,currentTransmuxState:s,decryptionPromise:i}=this;if(i)return this.asyncResult=!0,i.then((()=>this.flush(e)));const a=[],{timeOffset:r}=s;if(t){const n=t.flush();n&&a.push(this.push(n.buffer,null,e))}const{demuxer:o,remuxer:l}=this;if(!o||!l){n.executeEnd=ti();const t=[mi(e)];return this.asyncResult?Promise.resolve(t):t}const c=o.flush(r);return vi(c)?(this.asyncResult=!0,c.then((n=>(this.flushRemux(a,n,e),a)))):(this.flushRemux(a,c,e),this.asyncResult?Promise.resolve(a):a)}flushRemux(e,n,t){const{audioTrack:s,videoTrack:i,id3Track:a,textTrack:r}=n,{accurateTimeOffset:o,timeOffset:l}=this.currentTransmuxState;this.logger.log(`[transmuxer.ts]: Flushed ${this.id} sn: ${t.sn}${t.part>-1?" part: "+t.part:""} of ${this.id===d?"level":"track"} ${t.level}`);const c=this.remuxer.remux(s,i,a,r,l,o,!0,this.id);e.push({remuxResult:c,chunkMeta:t}),t.transmuxing.executeEnd=ti()}resetInitialTimestamp(e){const{demuxer:n,remuxer:t}=this;n&&t&&(n.resetTimeStamp(e),t.resetTimeStamp(e))}resetContiguity(){const{demuxer:e,remuxer:n}=this;e&&n&&(e.resetContiguity(),n.resetNextTimestamp())}resetInitSegment(e,n,t,s,i){const{demuxer:a,remuxer:r}=this;a&&r&&(a.resetInitSegment(e,n,t,s),r.resetInitSegment(e,n,t,i))}destroy(){this.demuxer&&(this.demuxer.destroy(),this.demuxer=void 0),this.remuxer&&(this.remuxer.destroy(),this.remuxer=void 0)}transmux(e,n,t,s,i){let a;return a=n&&"SAMPLE-AES"===n.method?this.transmuxSampleAes(e,n,t,s,i):this.transmuxUnencrypted(e,t,s,i),a}transmuxUnencrypted(e,n,t,s){const{audioTrack:i,videoTrack:a,id3Track:r,textTrack:o}=this.demuxer.demux(e,n,!1,!this.config.progressive);return{remuxResult:this.remuxer.remux(i,a,r,o,n,t,!1,this.id),chunkMeta:s}}transmuxSampleAes(e,n,t,s,i){return this.demuxer.demuxSampleAes(e,n,t).then((e=>({remuxResult:this.remuxer.remux(e.audioTrack,e.videoTrack,e.id3Track,e.textTrack,t,s,!1,this.id),chunkMeta:i})))}configureTransmuxer(e){const{config:n,observer:t,typeSupported:s}=this;let i;for(let n=0,t=pi.length;n<t;n++){var a;if(null!=(a=pi[n].demux)&&a.probe(e,this.logger)){i=pi[n];break}}if(!i)return new Error("Failed to find demuxer by probing fragment data");const r=this.demuxer,o=this.remuxer,l=i.remux,c=i.demux;o&&o instanceof l||(this.remuxer=new l(t,n,s,this.logger)),r&&r instanceof c||(this.demuxer=new c(t,n,s,this.logger),this.probe=c.probe)}needsProbing(e,n){return!this.demuxer||!this.remuxer||e||n}getDecrypter(){let e=this.decrypter;return e||(e=this.decrypter=new En(this.config)),e}}const mi=e=>({remuxResult:{},chunkMeta:e});function vi(e){return"then"in e&&e.then instanceof Function}class gi{constructor(e,n,t,s,i){this.audioCodec=void 0,this.videoCodec=void 0,this.initSegmentData=void 0,this.duration=void 0,this.defaultInitPts=void 0,this.audioCodec=e,this.videoCodec=n,this.initSegmentData=t,this.duration=s,this.defaultInitPts=i||null}}class fi{constructor(e,n,t,s,i,a){this.discontinuity=void 0,this.contiguous=void 0,this.accurateTimeOff
vendor: 3,298 bytes, line 2
2set=void 0,this.trackSwitch=void 0,this.timeOffset=void 0,this.initSegmentChange=void 0,this.discontinuity=e,this.contiguous=n,this.accurateTimeOffset=t,this.trackSwitch=s,this.timeOffset=i,this.initSegmentChange=a}}let _i=0;class bi{constructor(e,n,t,r){this.error=null,this.hls=void 0,this.id=void 0,this.instanceNo=_i++,this.observer=void 0,this.frag=null,this.part=null,this.useWorker=void 0,this.workerContext=null,this.transmuxer=null,this.onTransmuxComplete=void 0,this.onFlush=void 0,this.onWorkerMessage=e=>{const n=e.data,t=this.hls;if(t&&null!=n&&n.event&&n.instanceNo===this.instanceNo)switch(n.event){case"init":{var s;const e=null==(s=this.workerContext)?void 0:s.objectURL;e&&self.URL.revokeObjectURL(e);break}case"transmuxComplete":this.handleTransmuxComplete(n.data);break;case"flush":this.onFlush(n.data);break;case"workerLog":t.logger[n.data.logType]&&t.logger[n.data.logType](n.data.message);break;default:n.data=n.data||{},n.data.frag=this.frag,n.data.part=this.part,n.data.id=this.id,t.trigger(n.event,n.data)}},this.onWorkerError=e=>{if(!this.hls)return;const n=new Error(`${e.message}  (${e.filename}:${e.lineno})`);this.hls.config.enableWorker=!1,this.hls.logger.warn(`Error in "${this.id}" Web Worker, fallback to inline`),this.hls.trigger(a.ERROR,{type:s.OTHER_ERROR,details:i.INTERNAL_EXCEPTION,fatal:!1,event:"demuxerWorker",error:n})};const o=e.config;this.hls=e,this.id=n,this.useWorker=!!o.enableWorker,this.onTransmuxComplete=t,this.onFlush=r;const l=(e,n)=>{(n=n||{}).frag=this.frag||void 0,e===a.ERROR&&(n.parent=this.id,n.part=this.part,this.error=n.error),this.hls.trigger(e,n)};this.observer=new Wt,this.observer.on(a.FRAG_DECRYPTED,l),this.observer.on(a.ERROR,l);const c=Pe(o.preferManagedMediaSource);if(this.useWorker&&"undefined"!=typeof Worker){const t=this.hls.logger;if(o.workerPath||"function"==typeof __HLS_WORKER_BUNDLE__){try{o.workerPath?(t.log(`loading Web Worker ${o.workerPath} for "${n}"`),this.workerContext=function(e){const n=Qt[e];if(n)return n.clientCount++,n;const t=new self.URL(e,self.location.href).href,s={worker:new self.Worker(t),scriptURL:t,clientCount:1};return Qt[e]=s,s}(o.workerPath)):(t.log(`injecting Web Worker for "${n}"`),this.workerContext=function(){const e=Qt[Xt];if(e)return e.clientCount++,e;const n=new self.Blob([`var exports={};var module={exports:exports};function define(f){f()};define.amd=true;(${__HLS_WORKER_BUNDLE__.toString()})(true);`],{type:"text/javascript"}),t=self.URL.createObjectURL(n),s={worker:new self.Worker(t),objectURL:t,clientCount:1};return Qt[Xt]=s,s}());const{worker:e}=this.workerContext;e.addEventListener("message",this.onWorkerMessage),e.addEventListener("error",this.onWorkerError),e.postMessage({instanceNo:this.instanceNo,cmd:"init",typeSupported:c,id:n,config:Ve(o)})}catch(s){t.warn(`Error setting up "${n}" Web Worker, fallback to inline`,s),this.terminateWorker(),this.error=null,this.transmuxer=new hi(this.observer,c,o,"",n,e.logger)}return}}this.transmuxer=new hi(this.observer,c,o,"",n,e.logger)}reset(){if(this.frag=null,this.part=null,this.workerContext){const e=this.instanceNo;this.instanceNo=_i++;const n=this.hls.config,t=Pe(n.preferManagedMediaSource);this.workerContext.worker.postMessage({instanceNo:this.instanceNo,cmd:"reset",resetNo:e,typeSupported:t,id:this.id,c
vendor: 4,516 bytes, line 2
2onfig:Ve(n)})}}terminateWorker(){if(this.workerContext){const{worker:e}=this.workerContext;this.workerContext=null,e.removeEventListener("message",this.onWorkerMessage),e.removeEventListener("error",this.onWorkerError),function(e){const n=Qt[e||Xt];if(n&&1==n.clientCount--){const{worker:t,objectURL:s}=n;delete Qt[e||Xt],s&&self.URL.revokeObjectURL(s),t.terminate()}}(this.hls.config.workerPath)}}destroy(){if(this.workerContext)this.terminateWorker(),this.onWorkerMessage=this.onWorkerError=null;else{const e=this.transmuxer;e&&(e.destroy(),this.transmuxer=null)}const e=this.observer;e&&e.removeAllListeners(),this.frag=null,this.part=null,this.observer=null,this.hls=null}push(e,n,t,s,i,a,r,o,l,c){var u,p;l.transmuxing.start=self.performance.now();const{instanceNo:h,transmuxer:m}=this,v=a?a.start:i.start,g=i.decryptdata,f=this.frag,_=!(f&&i.cc===f.cc),b=!(f&&l.level===f.level),y=f?l.sn-f.sn:-1,w=this.part?l.part-this.part.index:-1,k=0===y&&l.id>1&&l.id===(null==f?void 0:f.stats.chunkCount),T=!b&&(1===y||0===y&&(1===w||k&&w<=0)),E=self.performance.now();(b||y||0===i.stats.parsing.start)&&(i.stats.parsing.start=E),!a||!w&&T||(a.stats.parsing.start=E);const x=!(f&&(null==(u=i.initSegment)?void 0:u.url)===(null==(p=f.initSegment)?void 0:p.url)),S=new fi(_,T,o,b,v,x);if(!T||_||x){this.hls.logger.log(`[transmuxer-interface]: Starting new transmux session for ${i.type} sn: ${l.sn}${l.part>-1?" part: "+l.part:""} ${this.id===d?"level":"track"}: ${l.level} id: ${l.id}\n        discontinuity: ${_}\n        trackSwitch: ${b}\n        contiguous: ${T}\n        accurateTimeOffset: ${o}\n        timeOffset: ${v}\n        initSegmentChange: ${x}`);const e=new gi(t,s,n,r,c);this.configureTransmuxer(e)}if(this.frag=i,this.part=a,this.workerContext)this.workerContext.worker.postMessage({instanceNo:h,cmd:"demux",data:e,decryptdata:g,chunkMeta:l,state:S},e instanceof ArrayBuffer?[e]:[]);else if(m){const n=m.push(e,g,l,S);vi(n)?n.then((e=>{this.handleTransmuxComplete(e)})).catch((e=>{this.transmuxerError(e,l,"transmuxer-interface push error")})):this.handleTransmuxComplete(n)}}flush(e){e.transmuxing.start=self.performance.now();const{instanceNo:n,transmuxer:t}=this;if(this.workerContext)this.workerContext.worker.postMessage({instanceNo:n,cmd:"flush",chunkMeta:e});else if(t){const n=t.flush(e);vi(n)?n.then((n=>{this.handleFlushResult(n,e)})).catch((n=>{this.transmuxerError(n,e,"transmuxer-interface flush error")})):this.handleFlushResult(n,e)}}transmuxerError(e,n,t){this.hls&&(this.error=e,this.hls.trigger(a.ERROR,{type:s.MEDIA_ERROR,details:i.FRAG_PARSING_ERROR,chunkMeta:n,frag:this.frag||void 0,part:this.part||void 0,fatal:!1,error:e,err:e,reason:t}))}handleFlushResult(e,n){e.forEach((e=>{this.handleTransmuxComplete(e)})),this.onFlush(n)}configureTransmuxer(e){const{instanceNo:n,transmuxer:t}=this;this.workerContext?this.workerContext.worker.postMessage({instanceNo:n,cmd:"configure",config:e}):t&&t.configure(e)}handleTransmuxComplete(e){e.chunkMeta.transmuxing.end=self.performance.now(),this.onTransmuxComplete(e)}}class yi extends b{constructor(e,n){super(n,e.logger),this.hls=void 0,this.canLoad=!1,this.timer=-1,this.hls=e}destroy(){this.clearTimer(),this.hls=this.log=this.warn=null}clearTimer(){-1!==this.timer&&(self.clearTimeout(this.timer),this.timer=-1)}startLoad(){this.canLoad=!0,this.loadPlaylist()}stopLoad(){this.canLoad=!1,this.clearTimer()}switchParams(e,n,t){const s=null==n?void 0:n.renditionReports;if(s){let i=-1;for(let t=0;t<s.length;t++){const a=s[t];let r;try{r=new self.URL(a.URI,n.url).href}catch(e){this.warn(`Could not construct new URL for Rendition Report: ${e}`),r=a.URI||""}if(r===e){i=t;break}r===e.substring(0,r.length)&&(i=t)}if(-1!==i){const e=s[i],a=parseInt(e["LAST-MSN"])||(null==n?void 0:n.lastPartSn);let r=parseInt(e["LAST-PART"])||(null==n?void 0:n.lastPartIndex);if(this.hls.config.lowLatencyMode){const e=Math.min(n.age-n.partTarget,n.targetduration);r>=0&&e>n.partTarget&&(r+=1)}const o=t&&Ge(t);return new ze(a,r>=0?r:void 0,o)}}}loadPlaylist(e){this.clearTimer()}loadingPlaylist(e,n){this.clearTimer()}shouldLoadPlaylist(e){return this.canLoad&&!!e&&!!e.url&&(!e.details||e.details.live)}getUrlWithDirectives(e,n){if(n)try{return n.addDirectives(e)}catch(e){this.warn(`Could not construct new URL with HLS Delivery Directives: ${e}`)}return e}playlistLoaded(n,t,r){const{details:o,stats:l}=t,c=self.performance.now(),d=l.loading.first?Math.max(0,c-l.loading.first):0;o.advancedDateTime=Date.now()-d;const u=this.hls.config.timelineOffset;
vendor: 1,966 bytes, line 2
2if(u!==o.appliedTimelineOffset){const e=Math.max(u||0,0);o.appliedTimelineOffset=e,o.fragments.forEach((n=>{n.start=n.playlistOffset+e}))}if(o.live||null!=r&&r.live){const u="levelInfo"in t?t.levelInfo:t.track;if(o.reloaded(r),r&&o.fragments.length>0){!function(n,t){if(n===t)return;let s=null;const i=n.fragments;for(let e=i.length-1;e>=0;e--){const n=i[e].initSegment;if(n){s=n;break}}let a;n.fragmentHint&&delete n.fragmentHint.endPTS,function(e,n,t){const s=n.skippedSegments,i=Math.max(e.startSN,n.startSN)-n.startSN,a=(e.fragmentHint?1:0)+(s?n.endSN:Math.min(e.endSN,n.endSN))-n.startSN,r=n.startSN-e.startSN,o=n.fragmentHint?n.fragments.concat(n.fragmentHint):n.fragments,l=e.fragmentHint?e.fragments.concat(e.fragmentHint):e.fragments;for(let c=i;c<=a;c++){const i=l[r+c];let a=o[c];if(s&&!a&&i&&(a=n.fragments[c]=i),i&&a){if(t(i,a,c,o),i.url&&i.url!==a.url)return void(n.playlistParsingError=Ct(`media sequence mismatch ${a.sn}:`,e,n,0,a));if(i.cc!==a.cc)return void(n.playlistParsingError=Ct(`discontinuity sequence mismatch (${i.cc}!=${a.cc})`,e,n,0,a))}}}(n,t,((n,i,r,o)=>{if((!t.startCC||t.skippedSegments)&&i.cc!==n.cc){const e=n.cc-i.cc;for(let n=r;n<o.length;n++)o[n].cc+=e;t.endCC=o[o.length-1].cc}e(n.startPTS)&&e(n.endPTS)&&(i.setStart(i.startPTS=n.startPTS),i.startDTS=n.startDTS,i.maxStartPTS=n.maxStartPTS,i.endPTS=n.endPTS,i.endDTS=n.endDTS,i.minEndPTS=n.minEndPTS,i.setDuration(n.endPTS-n.startPTS),i.duration&&(a=i),t.PTSKnown=t.alignedSliding=!0),n.hasStreams&&(i.elementaryStreams=n.elementaryStreams),i.loader=n.loader,n.hasStats&&(i.stats=n.stats),n.initSegment&&(i.initSegment=n.initSegment,s=n.initSegment)}));const r=t.fragments,o=t.fragmentHint?r.concat(t.fragmentHint):r;if(s&&o.forEach((e=>{var n;!e||e.initSegment&&e.initSegment.relurl!==(null==(n=s)?void 0:n.relurl)||(e.initSegment=s)})),t.skippedSegments){if(t.deltaUpdateFailed=r.some((e=>!e)),t.deltaUpdateFailed){x.warn("[level-helper] Previous playlist missing segments ski
2pped in delta playlist");for(let e=t.skippedSegments;e--;)r.shift();t.startSN=r[0].sn}else{t.canSkipDateRanges&&(t.dateRanges=function(e,n){const{dateRanges:t,recentlyRemovedDateranges:s}=n,i=g({},e);s&&s.forEach((e=>{delete i[e]}));const a=Object.keys(i).length;return a&&Object.keys(t).forEach((e=>{const n=i[e],s=new zn(t[e].attr,n);s.isValid?(i[e]=s,n||(s.tagOrder+=a)):x.warn(`Ignoring invalid Playlist Delta Update DATERANGE tag: "${Ve(t[e].attr)}"`)})),i}(n.dateRanges,t));const e=n.fragments.filter((e=>e.rawProgramDateTime));if(n.hasProgramDateTime&&!t.hasProgramDateTime)for(let n=1;n<o.length;n++)null===o[n].programDateTime&&kt(o[n],o[n-1],e);gt(e,t)}t.endCC=r[r.length-1].cc}if(!t.startCC){var l;const e=Dt(n,t.startSN-1);t.startCC=null!=(l=null==e?void 0:e.cc)?l:r[0].cc}!function(e,n,t){if(e&&n){let s=0;for(let i=0,a=e.length;i<=a;i++){const a=e[i],r=n[i+s];a&&r&&a.index===r.index&&a.fragment.sn===r.fragment.sn?t(a,r):s--}}}(n.partList,t.partList,((e,n)=>{n.elementaryStreams=e.elementaryStreams,n.stats=e.stats})),a?Lt(t,a,a.startPTS,a.endPTS,a.startDTS,a.endDTS):Rt(n,t),r.length&&(t.totalduration=t.edge-r[0].start),t.driftStartTime=n.driftStartTime,t.driftStart=n.driftStart;const c=t.advancedDateTime;if(t.advanced&&c){const e=t.edge;t.driftStart||(t.driftStartTime=c,t.driftStart=e),t.driftEndTime=c,t.driftEnd=e}else t.driftEndTime=n.driftEndTime,t.driftEnd=n.driftEnd,t.advancedDateTime=n.advancedDateTime;-1===t.requestScheduled&&(t.requestScheduled=n.requestScheduled)}(r,o);const n=o.playlistParsingError;if(n){this.warn(n);const e=this.hls;if(!e.config.ignorePlaylistParsingErrors){var p;const{networkDetails:r}=t;return void e.trigger(a.ERROR,{type:s.NETWORK_ERROR,details:i.LEVEL_PARSING_ERROR,fatal:!1,url:o.url,error:n,reason:n.message,level:t.level||void 0,parent:null==(p=o.fragments[0])?void 0:p.type,networkDetails:r,stats:l})}o.playlistParsingError=null}}-1===o.requestScheduled&&(o.requestScheduled=l.loading.start);const h=this.hls.mainForwardBufferInfo,m=h?h.end-h.len:0,v=Pt(o,1e3*(o.edge-m));if(o.requestScheduled+v<c?o.requestScheduled=c:o.requestScheduled+=v,this.log(`live playlist ${n} ${o.advanced?"REFRESHED "+o.lastPartSn+"-"+o.lastPartIndex:o.updated?"UPDATED":"MISSED"}`),!this.canLoad||!o.live)return;let f,_,b;if(o.canBlockReload&&o.endSN&&o.advanced){const e=this.hls.config.lowLatencyMode,n=o.lastPartSn,s=o.endSN,i=o.lastPartIndex,a=n===s;-1!==i?a?(_=s+1,b=e?0:i):(_=n,b=e?i+1:o.maxPartIndex):_=s+1;const l=o.age,d=l+o.ageHeader;let p=Math.min(d-o.partTarget,1.5*o.targetduration);if(p>0){if(d>3*o.targetduration)this.log(`Playlist last advanced ${l.toFixed(2)}s ago. Omitting segment and part directives.`),_=void 0,b=void 0;else if(null!=r&&r.tuneInGoal&&d-o.partTarget>r.tuneInGoal)this.warn(`CDN Tune-in goal increased from: ${r.tuneInGoal} to: ${p} with playlist age: ${o.age}`),p=0;else{const e=Math.floor(p/o.targetduration);_+=e,void 0!==b&&(b+=Math.round(p%o.targetduration/o.partTarget)),this.log(`CDN Tune-in age: ${o.ageHeader}s last advanced ${l.toFixed(2)}s goal: ${p} skip sn ${e} to part ${b}`)}o.tuneInGoal=p}if(f=this.getDeliveryDirectives(o,t.deliveryDirectives,_,b),e||!a)return o.requestScheduled=c,void this.loadingPlaylist(u,f)}else(o.canBlockReload||o.canSkipUntil)&&(f=this.getDeliveryDirectives(o,t.deliveryDirectives,_,b));f&&void 0!==_&&o.canBlockReload&&(o.requestScheduled=l.loading.first+Math.max(v-2*d,v/2)),this.scheduleLoading(u,f,o)}else this.clearTimer()}scheduleLoading(e,n,t){const s=t||e.details;if(!s)return void this.loadingPlaylist(e,n);const i=self.performance.now(),a=s.requestScheduled;if(i>=a)return void this.loadingPlaylist(e,n);const r=a-i;this.log(`reload live playlist ${e.name||e.bitrate+"bps"} in ${Math.round(r)} ms`),this.clearTimer(),this.timer=self.setTimeout((()=>this.loadingPlaylist(e,n)),r)}getDeliveryDirectives(e,n,t,s){let i=Ge(e);return null!=n&&n.skip&&e.deltaUpdateFailed&&(t=n.msn,s=n.part,i=""),new ze(t,s,i)}checkRetry(e){const n=e.details,t=on(e),s=e.errorAction,{action:i,retryCount:a=0,retryConfig:r}=s||{},o=!!s&&!!r&&(5===i||!s.resolved&&2===i);if(o){var l;if(a>=r.maxNumRetry)return!1;if(t&&null!=(l=e.context)&&l.deliveryDirectives)this.warn(`Retrying playlist loading ${a+1}/${r.maxNumRetry} after "${n}" without delivery-directives`),this.loadPlaylist();else{const e=cn(r,a);this.clearTimer(),this.timer=self.setTimeout((()=>this.loadPlaylist()),e),this.warn(`Retrying playlist loading ${a+1}/${r.maxNumRetry} after "${n}" in ${e}ms`)}e.levelRetry=!0,s.resolved=!0}return o}}function wi(e,n){if(e.length!==n.length)return!1;for(let t=0;t<e.length;t++)if(!ki(e[t].attrs,n[t].attrs))return!1;return!0}function ki(e,n,t){const s=e["STABLE-RENDITION-ID"];return s&&!t?s===n["STABLE-RENDITION-ID"]:!(t||["LANGUAGE","NAME","CHARACTERISTICS","AUTOSELECT","DEFAULT","FORCED","ASSOC-LANGUAGE"]).some((t=>e[t]!==n[t]))}function Ti(e,n){return n.label.toLowerCase()===e.name.toLowerCase()&&(!n.language||n.language.toLowerCase()===(e.lang||"").toLowerCase())}class Ei{constructor(e){this.tracks=void 0,this.queues={video:[],audio:[],audiovideo:[]},this.tracks=e}destroy(){this.tracks=this.queues=null}append(e,n,t){if(null===this.queues||null===this.tracks)return;const s=this.queues[n];s.push(e),1!==s.length||t||this.executeNext(n)}appendBlocker(e){return new Promise((n=>{const t={label:"async-blocker",execute:n,onStart:()=>{},onComplete:()=>{},onError:()=>{}};this.append(t,e)}))}prependBlocker(e){return new Promise((n=>{if(this.queues){const t={label:"async-blocker-prepend",execute:n,onStart:()=>{},onComplete:()=>{},onError:()=>{}};this.queues[e].unshift(t)}}))}removeBlockers(){null!==this.queues&&[this.queues.video,this.queues.audio,this.queues.audiovideo].forEac
vendor: 4,901 bytes, line 2
2h((e=>{var n;const t=null==(n=e[0])?void 0:n.label;"async-blocker"!==t&&"async-blocker-prepend"!==t||(e[0].execute(),e.splice(0,1))}))}unblockAudio(e){null!==this.queues&&this.queues.audio[0]===e&&this.shiftAndExecuteNext("audio")}executeNext(e){if(null===this.queues||null===this.tracks)return;const n=this.queues[e];if(n.length){const s=n[0];try{s.execute()}catch(n){var t;if(s.onError(n),null===this.queues||null===this.tracks)return;const i=null==(t=this.tracks[e])?void 0:t.buffer;null!=i&&i.updating||this.shiftAndExecuteNext(e)}}}shiftAndExecuteNext(e){null!==this.queues&&(this.queues[e].shift(),this.executeNext(e))}current(e){var n;return(null==(n=this.queues)?void 0:n[e][0])||null}toString(){const{queues:e,tracks:n}=this;return null===e||null===n?"<destroyed>":`\n${this.list("video")}\n${this.list("audio")}\n${this.list("audiovideo")}}`}list(e){var n,t;return null!=(n=this.queues)&&n[e]||null!=(t=this.tracks)&&t[e]?`${e}: (${this.listSbInfo(e)}) ${this.listOps(e)}`:""}listSbInfo(e){var n;const t=null==(n=this.tracks)?void 0:n[e],s=null==t?void 0:t.buffer;return s?`SourceBuffer${s.updating?" updating":""}${t.ended?" ended":""}${t.ending?" ending":""}`:"none"}listOps(e){var n;return(null==(n=this.queues)?void 0:n[e].map((e=>e.label)).join(", "))||""}}const xi=/(avc[1234]|hvc1|hev1|dvh[1e]|vp09|av01)(?:\.[^.,]+)+/,Si="HlsJsTrackRemovedError";class Ai extends Error{constructor(e){super(e),this.name=Si}}function Li(e){const n=e.querySelectorAll("source");[].slice.call(n).forEach((n=>{e.removeChild(n)}))}function Ci(e){return"audio"===e?1:0}class Ri{constructor(e){this.hls=void 0,this.autoLevelCapping=void 0,this.firstLevel=void 0,this.media=void 0,this.restrictedLevels=void 0,this.timer=void 0,this.clientRect=void 0,this.streamController=void 0,this.hls=e,this.autoLevelCapping=Number.POSITIVE_INFINITY,this.firstLevel=-1,this.media=null,this.restrictedLevels=[],this.timer=void 0,this.clientRect=null,this.registerListeners()}setStreamController(e){this.streamController=e}destroy(){this.hls&&this.unregisterListener(),this.timer&&this.stopCapping(),this.media=null,this.clientRect=null,this.hls=this.streamController=null}registerListeners(){const{hls:e}=this;e.on(a.FPS_DROP_LEVEL_CAPPING,this.onFpsDropLevelCapping,this),e.on(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(a.MANIFEST_PARSED,this.onManifestParsed,this),e.on(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.on(a.BUFFER_CODECS,this.onBufferCodecs,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this)}unregisterListener(){const{hls:e}=this;e.off(a.FPS_DROP_LEVEL_CAPPING,this.onFpsDropLevelCapping,this),e.off(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(a.MANIFEST_PARSED,this.onManifestParsed,this),e.off(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.off(a.BUFFER_CODECS,this.onBufferCodecs,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this)}onFpsDropLevelCapping(e,n){const t=this.hls.levels[n.droppedLevel];this.isLevelAllowed(t)&&this.restrictedLevels.push({bitrate:t.bitrate,height:t.height,width:t.width})}onMediaAttaching(e,n){this.media=n.media instanceof HTMLVideoElement?n.media:null,this.clientRect=null,this.timer&&this.hls.levels.length&&this.detectPlayerSize()}onManifestParsed(e,n){const t=this.hls;this.restrictedLevels=[],this.firstLevel=n.firstLevel,t.config.capLevelToPlayerSize&&n.video&&this.startCapping()}onLevelsUpdated(n,t){this.timer&&e(this.autoLevelCapping)&&this.detectPlayerSize()}onBufferCodecs(e,n){this.hls.config.capLevelToPlayerSize&&n.video&&this.startCapping()}onMediaDetaching(){this.stopCapping(),this.media=null}detectPlayerSize(){if(this.media){if(this.mediaHeight<=0||this.mediaWidth<=0)return void(this.clientRect=null);const e=this.hls.levels;if(e.length){const n=this.hls,t=this.getMaxLevel(e.length-1);t!==this.autoLevelCapping&&n.logger.log(`Setting autoLevelCapping to ${t}: ${e[t].height}p@${e[t].bitrate} for media ${this.mediaWidth}x${this.mediaHeight}`),n.autoLevelCapping=t,n.autoLevelEnabled&&n.autoLevelCapping>this.autoLevelCapping&&this.streamController&&this.streamController.nextLevelSwitch(),this.autoLevelCapping=n.autoLevelCapping}}}getMaxLevel(e){const n=this.hls.levels;if(!n.length)return-1;const t=n.filter(((n,t)=>this.isLevelAllowed(n)&&t<=e));return this.clientRect=null,Ri.getMaxLevelByMediaSize(t,this.mediaWidth,this.mediaHeight)}startCapping(){this.timer||(this.autoLevelCapping=Number.POSITIVE_INFINITY,self.clearInterval(this.timer),this.timer=self.setInterval(this.detectPlayerSize.bind(this),1e3),this.detectPlayerSize())}stopCapping(){this.restrictedLevels=[],this.firstLevel=-1,this.autoLevelCapping=Number.POSITIVE_INFINITY,this.timer&&(self.clearInterval(this.timer),this.timer=void 0)}getDimensions(){if(this.clientRect)return this.clientRect;const e=this.media,n={width:0,height:0};if(e){const t=e.getBoundingClientRect();n.width=t.width,n.height=t.height,n.width||n.height||(n.width=t.right-t.left||e.
2width||0,n.height=t.bottom-t.top||e.height||0)}return this.clientRect=n,n}get mediaWidth(){return this.getDimensions().width*this.contentScaleFactor}get mediaHeight(){return this.getDimensions().height*this.contentScaleFactor}get contentScaleFactor(){let e=1;if(!this.hls.config.ignoreDevicePixelRatio)try{e=self.devicePixelRatio}catch(e){}return Math.min(e,this.hls.config.maxDevicePixelRatio)}isLevelAllowed(e){return!this.restrictedLevels.some((n=>e.bitrate===n.bitrate&&e.width===n.width&&e.height===n.height))}static getMaxLevelByMediaSize(e,n,t){if(null==e||!e.length)return-1;let s=e.length-1;const i=Math.max(n,t);for(let n=0;n<e.length;n+=1){const t=e[n];if((t.width>=i||t.height>=i)&&(a=t,!(r=e[n+1])||a.width!==r.width||a.height!==r.height)){s=n;break}}var a,r;return s}}const Ii="m",Pi="a",Di="v",Oi="av",Mi="i",Fi="tt",Ni="h",$i="CMCD-Object",Bi="CMCD-Request",Ui="CMCD-Session",ji="CMCD-Status",Gi={[$i]:["br","d","ot","tb"],[Bi]:["bl","dl","mtp","nor","nrr","su"],[Ui]:["cid","pr","sf","sid","st","v"],[ji]:["bs","rtp"]};class zi{constructor(e,n){Array.isArray(e)&&(e=e.map((e=>e instanceof zi?e:new zi(e)))),this.value=e,this.params=n}}const qi="Dict";function Ki(e,n,t){return function(e,n,t,s){return new Error(`failed to ${e} "${i=n,Array.isArray(i)?JSON.stringify(i):i instanceof Map?"Map{}":i instanceof Set?"Set{}":"object"==typeof i?JSON.stringify(i):String(i)}" as ${t}`,{cause:s});var i}("serialize",e,n,t)}class Vi{constructor(e){this.description=e}}const Hi="Bare Item",Yi="Boolean",Wi="Byte Sequence";const Xi="Integer";function Qi(e){if(function(e){return e<-999999999999999||999999999999999<e}(e))throw Ki(e,Xi);return e.toString()}function Ji(e,n){if(e<0)return-Ji(-e,n);const t=Math.pow(10,n);if(Math.abs(e*t%1-.5)<Number.EPSILON){const n=Math.floor(e*t);return(n%2==0?n:n+1)/t}return Math.round(e*t)/t}const Zi="Decimal";function ea(e){const n=Ji(e,3);if(Math.floor(Math.abs(n)).toString().length>12)throw Ki(e,Zi);const t=n.toString();return t.includes(".")?t:`${t}.0`}const na="String",ta=/[\x00-\x1f\x7f]+/,sa="Token";function ia(e){const n=(t=e).description||t.toString().slice(7,-1);var t;if(!1===/^([a-zA-Z*])([!#$%&'*+\-.^_`|~\w:/]*)$/.test(n))throw Ki(n,sa);return n}function aa(n){switch(typeof n){case"number":if(!e(n))throw Ki(n,Hi);return Number.isInteger(n)?Qi(n):ea(n);case"string":return function(e){if(ta.test(e))throw Ki(e,na);return`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}(n);case"symbol":return ia(n);case"boolean":return function(e){if("boolean"!=typeof e)throw Ki(e,Yi);return e?"?1":"?0"}(n);case"object":if(n instanceof Date)return function(e){return`@${Qi(e.getTime()/1e3)}`}(n);if(n instanceof Uint8Array)return function(e){if(!1===ArrayBuffer.isView(e))throw Ki(e,Wi);return`:${n=e,btoa(String.fromCharCode(...n))}:`;var n}(n);if(n instanceof Vi)return ia(n);default:throw Ki(n,Hi)}}const ra="Key";function oa(e){if(!1===/^[a-z*][a-z0-9\-_.*]*$/.test(e))throw Ki(e,ra);return e}function la(e){return null==e?"":Object.entries(e).map((([e,n])=>!0===n?`;${oa(e)}`:`;${oa(e)}=${aa(n)}`)).join("")}function ca(e){return e instanceof zi?`${aa(e.value)}${la(e.params)}`:aa(e)}const da=e=>Math.round(e),ua=e=>100*da(e/100),pa={br:da,d:da,bl:ua,dl:ua,mtp:ua,nor:(e,n)=>((null==n?void 0:n.baseUrl)&&(e=function(e,n){const t=new URL(e),s=new URL(n);if(t.origin!==s.origin)return e;const i=t.pathname.split("/").slice(1),a=s.pathname.split("/").slice(1,-1);for(;i[0]===a[0];)i.shift(),a.shift();for(;a.length;)a.shift(),i.unshift("..");return i.join("/")}(e,n.baseUrl)),encodeURIComponent(e)),rtp:ua,tb:da};function ha(n,t={}){return n?function(e,n){return function(e,n={whitespace:!0}){if("object"!=typeof e)throw Ki(e,qi);const t=e instanceof Map?e.entries():Object.entries(e),s=(null==n?void 0:n.whitespace)?" ":"";return Array.from(t).map((([e,n])=>{n instanceof zi==0&&(n=new zi(n));let t=oa(e);var s;return!0===n.value?t+=la(n.params):(t+="=",Array.isArray(n.value)?t+=`(${(s=n).value.map(ca).join(" ")})${la(s.params)}`:t+=ca(n)),t})).join(`,${s}`)}(e,n)}(function(n,t){const s={};if(null==n||"object"!=typeof n)return s;const i=Object.keys(n).sort(),a=g({},pa,null==t?void 0:t.formatters),r=null==t?void 0:t.filter;
2return i.forEach((i=>{if(null==r?void 0:r(i))return;let o=n[i];const l=a[i];l&&(o=l(o,t)),"v"===i&&1===o||"pr"==i&&1===o||function(n){return"number"==typeof n?e(n):null!=n&&""!==n&&!1!==n}(o)&&(function(e){return"ot"===e||"sf"===e||"st"===e}(i)&&"string"==typeof o&&(o=new Vi(o)),s[i]=o)})),s}(n,t),g({whitespace:!1},t)):""}const ma=/CMCD=[^&#]+/;function va(e,n,t,s){e&&Object.keys(n).forEach((i=>{const a=e.filter((e=>e.groupId===i)).map((e=>{const a=g({},e);return a.details=void 0,a.attrs=new jn(a.attrs),a.url=a.attrs.URI=ga(e.url,e.attrs["STABLE-RENDITION-ID"],"PER-RENDITION-URIS",t),a.groupId=a.attrs["GROUP-ID"]=n[i],a.attrs["PATHWAY-ID"]=s,a}));e.push(...a)}))}function ga(e,n,t,s){const{HOST:i,PARAMS:a,[t]:r}=s;let o;n&&(o=null==r?void 0:r[n],o&&(e=o));const l=new self.URL(e);return i&&!o&&(l.host=i),a&&Object.keys(a).sort().forEach((e=>{e&&l.searchParams.set(e,a[e])})),l.href}function fa(e,n,t){_a(e,n,t),e.addEventListener(n,t)}function _a(e,n,t){e.removeEventListener(n,t)}class ba extends b{constructor(e){super("eme",e.logger),this.hls=void 0,this.config=void 0,this.media=null,this.keyFormatPromise=null,this.keySystemAccessPromises={},this._requestLicenseFailureCount=0,this.mediaKeySessions=[],this.keyIdToKeySessionPromise={},this.mediaKeys=null,this.setMediaKeysQueue=ba.CDMCleanupPromise?[ba.CDMCleanupPromise]:[],this.onMediaEncrypted=e=>{const{initDataType:n,initData:t}=e,s=`"${e.type}" event: init data type: "${n}"`;if(this.debug(s),null!==t){if(!this.keyFormatPromise){let e=Object.keys(this.keySystemAccessPromises);e.length||(e=it(this.config));const n=e.map(st).filter((e=>!!e));this.keyFormatPromise=this.getKeyFormatPromise(n)}this.keyFormatPromise.then((i=>{const a=nt(i);let r,o;if("sinf"===n){if(a!==Xn.FAIRPLAY)return void this.warn(`Ignoring unexpected "${e.type}" event with init data type: "${n}" for selected key-system ${a}`);const i=Q(new Uint8Array(t));try{const e=de(Hn(JSON.parse(i).sinf));if(!e)throw new Error("'schm' box missing or not cbcs/cenc with schi > tenc");r=new Uint8Array(e.subarray(8,24)),o=Xn.FAIRPLAY}catch(e){return void this.warn(`${s} Failed to parse sinf: ${e}`)}}else{if(a!==Xn.WIDEVINE&&a!==Xn.PLAYREADY)return void this.warn(`Ignoring unexpected "${e.type}" event with init data type: "${n}" for selected key-system ${a}`);const i=function(e){const n=[];if(e instanceof ArrayBuffer){const t=e.byteLength;let s=0;for(;s+32<t;){const t=fe(new DataView(e,s));n.push(t),s+=t.size}}return n}(t),l=i.filter((e=>!!e.systemId&&tt(e.systemId)===a));l.length>1&&this.warn(`${s} Using first of ${l.length} pssh found for selected key-system ${a}`);const c=l[0];if(!c)return void(0===i.length||i.some((e=>!e.systemId))?this.warn(`${s} contains incomplete or invalid pssh data`):this.log(`ignoring ${s} for ${i.map((e=>tt(e.systemId))).join(",")} pssh data in favor of playlist keys`));if(o=tt(c.systemId),0===c.version&&c.data)if(o===Xn.WIDEVINE){const e=c.data.length-22;r=new Uint8Array(c.data.subarray(e,e+16))}else o===Xn.PLAYREADY&&(r=ot(c.data))}if(!o||!r)return;const l=C(r),{keyIdToKeySessionPromise:c,mediaKeySessions:d}=this;let u=c[l];for(let e=0;e<d.length;e++){const s=d[e],i=s.decryptdata;if(!i.keyId)continue;const a=C(i.keyId);if(l===a||-1!==i.uri.replace(/-/g,"").indexOf(l)){if(u=c[a],i.pssh)break;delete c[a],i.pssh=new Uint8Array(t),i.keyId=r,u=c[l]=u.then((()=>this.generateRequestWithPreferredKeySession(s,n,t,"encrypted-event-key-match"))),u.catch((e=>this.handleError(e)));break}}if(!u){if(o!==a)return void this.log(`Ignoring "${e.type}" event with ${o} init data for selected key-system ${a}`);u=c[l]=this.getKeySystemSelectionPromise([o]).then((({keySystem:e,mediaKeys:s})=>{var i;this.throwIfDestroyed();const a=new ct("ISO-23001-7",l,null!=(i=st(e))?i:"");return a.pssh=new Uint8Array(t),a.keyId=r,this.attemptSetMediaKeys(e,s).then((()=>{this.throwIfDestroyed();const i=this.createMediaKeySessionContext({decryptdata:a,keySystem:e,mediaKeys:s});return this.generateRequestWithPreferredKeySession(i,n,t,"encrypted-event-no-match")}))})),u.catch((e=>this.handleError(e)))}}))}},this.onWaitingForKey=e=>{this.log(`"${e.type}" event`)},this.hls=e,this.config=e.config,this.registerListeners()}destroy(){this.onDestroying(),this.onMediaDetached();const e=this.config;e.requestMediaKeySystemAccessFunc=null,e.licenseXhrSetup=e.licenseResponseCallback=void 0,e.drmSystems=e.drmSystemOptions={},this.hls=this.config=this.keyIdToKeySessionPromise=null,this.onMediaEncrypted=this.onWaitingForKey=null}
vendor: 2,461 bytes, line 2
2registerListeners(){this.hls.on(a.MEDIA_ATTACHED,this.onMediaAttached,this),this.hls.on(a.MEDIA_DETACHED,this.onMediaDetached,this),this.hls.on(a.MANIFEST_LOADING,this.onManifestLoading,this),this.hls.on(a.MANIFEST_LOADED,this.onManifestLoaded,this),this.hls.on(a.DESTROYING,this.onDestroying,this)}unregisterListeners(){this.hls.off(a.MEDIA_ATTACHED,this.onMediaAttached,this),this.hls.off(a.MEDIA_DETACHED,this.onMediaDetached,this),this.hls.off(a.MANIFEST_LOADING,this.onManifestLoading,this),this.hls.off(a.MANIFEST_LOADED,this.onManifestLoaded,this),this.hls.off(a.DESTROYING,this.onDestroying,this)}getLicenseServerUrl(e){const{drmSystems:n,widevineLicenseUrl:t}=this.config,s=n[e];return s?s.licenseUrl:e===Xn.WIDEVINE&&t?t:void 0}getLicenseServerUrlOrThrow(e){const n=this.getLicenseServerUrl(e);if(void 0===n)throw new Error(`no license server URL configured for key-system "${e}"`);return n}getServerCertificateUrl(e){const{drmSystems:n}=this.config,t=n[e];if(t)return t.serverCertificateUrl;this.log(`No Server Certificate in config.drmSystems["${e}"]`)}attemptKeySystemAccess(e){const n=this.hls.levels,t=(e,n,t)=>!!e&&t.indexOf(e)===n,a=n.map((e=>e.audioCodec)).filter(t),r=n.map((e=>e.videoCodec)).filter(t);return a.length+r.length===0&&r.push("avc1.42e01e"),new Promise(((n,t)=>{const o=e=>{const l=e.shift();this.getMediaKeysPromise(l,a,r).then((e=>n({keySystem:l,mediaKeys:e}))).catch((n=>{e.length?o(e):t(n instanceof ya?n:new ya({type:s.KEY_SYSTEM_ERROR,details:i.KEY_SYSTEM_NO_ACCESS,error:n,fatal:!0},n.message))}))};o(e)}))}requestMediaKeySystemAccess(e,n){const{requestMediaKeySystemAccessFunc:t}=this.config;if("function"!=typeof t){let e=`Configured requestMediaKeySystemAccess is not a function ${t}`;return null===at&&"http:"===self.location.protocol&&(e=`navigator.requestMediaKeySystemAccess is not available over insecure protocol ${location.protocol}`),Promise.reject(new Error(e))}return t(e,n)}getMediaKeysPromise(e,n,t){const s=function(e,n,t,s){let i;switch(e){case Xn.FAIRPLAY:i=["cenc","sinf"];break;case Xn.WIDEVINE:case Xn.PLAYREADY:i=["cenc"];break;case Xn.CLEARKEY:i=["cenc","keyids"];break;default:throw new Error(`Unknown key-system: ${e}`)}return function(e,n,t,s){return[{initDataTypes:e,persistentState:s.persistentState||"optional",distinctiveIdentifier:s.distinctiveIdentifier||"optional",sessionTypes:s.sessionTypes||[s.sessionType||"temporary"],audioCapabilities:n.map((e=>({contentType:`audio/mp4; codecs=${e}
2`,robustness:s.audioRobustness||"",encryptionScheme:s.audioEncryptionScheme||null}))),videoCapabilities:t.map((e=>({contentType:`video/mp4; codecs=${e}`,robustness:s.videoRobustness||"",encryptionScheme:s.videoEncryptionScheme||null})))}]}(i,n,t,s)}(e,n,t,this.config.drmSystemOptions),i=this.keySystemAccessPromises[e];let a=null==i?void 0:i.keySystemAccess;if(!a){this.log(`Requesting encrypted media "${e}" key-system access with config: ${Ve(s)}`),a=this.requestMediaKeySystemAccess(e,s);const n=this.keySystemAccessPromises[e]={keySystemAccess:a};return a.catch((n=>{this.log(`Failed to obtain access to key-system "${e}": ${n}`)})),a.then((t=>{this.log(`Access for key-system "${t.keySystem}" obtained`);const s=this.fetchServerCertificate(e);return this.log(`Create media-keys for "${e}"`),n.mediaKeys=t.createMediaKeys().then((t=>(this.log(`Media-keys created for "${e}"`),n.hasMediaKeys=!0,s.then((n=>n?this.setMediaKeysServerCertificate(t,e,n):t))))),n.mediaKeys.catch((n=>{this.error(`Failed to create media-keys for "${e}"}: ${n}`)})),n.mediaKeys}))}return a.then((()=>i.mediaKeys))}createMediaKeySessionContext({decryptdata:e,keySystem:n,mediaKeys:t}){this.log(`Creating key-system session "${n}" keyId: ${C(e.keyId||[])}`);const s=t.createSession(),i={decryptdata:e,keySystem:n,mediaKeys:t,mediaKeysSession:s,keyStatus:"status-pending"};return this.mediaKeySessions.push(i),i}renewKeySession(e){const n=e.decryptdata;if(n.pssh){const t=this.createMediaKeySessionContext(e),s=this.getKeyIdString(n),i="cenc";this.keyIdToKeySessionPromise[s]=this.generateRequestWithPreferredKeySession(t,i,n.pssh.buffer,"expired")}else this.warn("Could not renew expired session. Missing pssh initData.");this.removeSession(e)}getKeyIdString(e){if(!e)throw new Error("Could not read keyId of undefined decryptdata");if(null===e.keyId)throw new Error("keyId is null");return C(e.keyId)}updateKeySession(e,n){var t;const s=e.mediaKeysSession;return this.log(`Updating key-session "${s.sessionId}" for keyID ${C((null==(t=e.decryptdata)?void 0:t.keyId)||[])}\n      } (data length: ${n?n.byteLength:n})`),s.update(n)}getSelectedKeySystemFormats(){return Object.keys(this.keySystemAccessPromises).map((e=>({keySystem:e,hasMediaKeys:this.keySystemAccessPromises[e].hasMediaKeys}))).filter((({hasMediaKeys:e})=>!!e)).map((({keySystem:e})=>st(e))).filter((e=>!!e))}getKeySystemAccess(e){return this.getKeySystemSelectionPromise(e).then((({keySystem:e,mediaKeys:n})=>this.attemptSetMediaKeys(e,n)))}selectKeySystem(e){return new Promise(((n,t)=>this.getKeySystemSelectionPromise(e).then((({keySystem:e})=>{const s=st(e);s?n(s):t(new Error(`Unable to find format for key-system "${e}"`))})).catch(t)))}selectKeySystemFormat(e){const n=Object.keys(e.levelkeys||{});return this.keyFormatPromise||(this.log(`Selecting key-system from fragment (sn: ${e.sn} ${e.type}: ${e.level}) key formats ${n.join(", ")}`),this.keyFormatPromise=this.getKeyFormatPromise(n)),this.keyFormatPromise}getKeyFormatPromise(e){const n=it(this.config),t=e.map(nt).filter((e=>!!e&&-1!==n.indexOf(e)));return this.selectKeySystem(t)}loadKey(e){const n=e.keyInfo.decryptdata,t=this.getKeyIdString(n),s=`(keyId: ${t} format: "${n.keyFormat}" method: ${n.method} uri: ${n.uri})`;this.log(`Starting session for key ${s}`);let i=this.keyIdToKeySessionPromise[t];return i||(i=this.getKeySystemForKeyPromise(n).then((({keySystem:t,mediaKeys:i})=>(this.throwIfDestroyed(),this.log(`Handle encrypted media sn: ${e.frag.sn} ${e.frag.type}: ${e.frag.level} using key ${s}`),this.attemptSetMediaKeys(t,i).then((()=>(this.throwIfDestroyed(),this.createMediaKeySessionContext({keySystem:t,mediaKeys:i,decryptdata:n}))))))),(this.keyIdToKeySessionPromise[t]=i.then((e=>{const t=n.pssh?n.pssh.buffer:null;return this.generateRequestWithPreferredKeySession(e,"cenc",t,"playlist-key")}))).catch((e=>this.handleError(e)))),i}throwIfDestroyed(e="Invalid state"){if(!this.hls)throw new Error("invalid state")}handleError(e){this.hls&&(this.error(e.message),e instanceof ya?this.hls.trigger(a.ERROR,e.data):this.hls.trigger(a.ERROR,{type:s.KEY_SYSTEM_ERROR,details:i.KEY_SYSTEM_NO_KEYS,error:e,fatal:!0}))}
2getKeySystemForKeyPromise(e){const n=this.getKeyIdString(e),t=this.keyIdToKeySessionPromise[n];if(!t){const n=nt(e.keyFormat),t=n?[n]:it(this.config);return this.attemptKeySystemAccess(t)}return t}getKeySystemSelectionPromise(e){if(e.length||(e=it(this.config)),0===e.length)throw new ya({type:s.KEY_SYSTEM_ERROR,details:i.KEY_SYSTEM_NO_CONFIGURED_LICENSE,fatal:!0},`Missing key-system license configuration options ${Ve({drmSystems:this.config.drmSystems})}`);return this.attemptKeySystemAccess(e)}attemptSetMediaKeys(e,n){if(this.mediaKeys===n)return Promise.resolve();const t=this.setMediaKeysQueue.slice();this.log(`Setting media-keys for "${e}"`);const s=Promise.all(t).then((()=>{if(!this.media)throw this.mediaKeys=null,new Error("Attempted to set mediaKeys without media element attached");return this.media.setMediaKeys(n)}));return this.mediaKeys=n,this.setMediaKeysQueue.push(s),s.then((()=>{this.log(`Media-keys set for "${e}"`),t.push(s),this.setMediaKeysQueue=this.setMediaKeysQueue.filter((e=>-1===t.indexOf(e)))}))}generateRequestWithPreferredKeySession(e,n,t,a){var r,o;const l=null==(r=this.config.drmSystems)||null==(o=r[e.keySystem])?void 0:o.generateRequest;if(l)try{const s=l.call(this.hls,n,t,e);if(!s)throw new Error("Invalid response from configured generateRequest filter");n=s.initDataType,t=s.initData?s.initData:null,e.decryptdata.pssh=t?new Uint8Array(t):null}catch(e){var c;if(this.warn(e.message),null!=(c=this.hls)&&c.config.debug)throw e}if(null===t)return this.log(`Skipping key-session request for "${a}" (no initData)`),Promise.resolve(e);const d=this.getKeyIdString(e.decryptdata);this.log(`Generating key-session request for "${a}": ${d} (init data type: ${n} length: ${t?t.byteLength:null})`);const u=new Wt,p=e._onmessage=n=>{const t=e.mediaKeysSession;if(!t)return void u.emit("error",new Error("invalid state"));const{messageType:s,message:i}=n;this.log(`"${s}" message event for session "${t.sessionId}" message size: ${i.byteLength}`),"license-request"===s||"license-renewal"===s?this.renewLicense(e,i).catch((e=>{u.eventNames().length?u.emit("error",e):this.handleError(e)})):"license-release"===s?e.keySystem===Xn.FAIRPLAY&&(this.updateKeySession(e,Yn("acknowledged")),this.removeSession(e)):this.warn(`unhandled media key message type "${s}"`)},h=e._onkeystatuseschange=n=>{if(!e.mediaKeysSession)return void u.emit("error",new Error("invalid state"));this.onKeyStatusChange(e);const t=e.keyStatus;u.emit("keyStatus",t),"expired"===t&&(this.warn(`${e.keySystem} expired for key ${d}`),this.renewKeySession(e))};fa(e.mediaKeysSession,"message",p),fa(e.mediaKeysSession,"keystatuseschange",h);const m=new Promise(((e,n)=>{u.on("error",n),u.on("keyStatus",(t=>{t.startsWith("usable")?e():"output-restricted"===t?n(new ya({type:s.KEY_SYSTEM_ERROR,details:i.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED,fatal:!1},"HDCP level output restricted")):"internal-error"===t?n(new ya({type:s.KEY_SYSTEM_ERROR,details:i.KEY_SYSTEM_STATUS_INTERNAL_ERROR,fatal:!0},`key status changed to "${t}"`)):"expired"===t?n(new Error("key expired while generating request")):this.warn(`unhandled key status change "${t}"`)}))}));return e.mediaKeysSession.generateRequest(n,t).then((()=>{var n;this.log(`Request generated for key-session "${null==(n=e.mediaKeysSession)?void 0:n.sessionId}" keyId: ${d}`)})).catch((e=>{throw new ya({type:s.KEY_SYSTEM_ERROR,details:i.KEY_SYSTEM_NO_SESSION,error:e,fatal:!1},`Error generating key-session request: ${e}`)})).then((()=>m)).catch((n=>{throw u.removeAllListeners(),this.removeSession(e),n})).then((()=>(u.removeAllListeners(),e)))}onKeyStatusChange(e){e.mediaKeysSession.keyStatuses.forEach(((n,t)=>{if("string"==typeof t&&"object"==typeof n){const e=t;t=n,n=e}this.log(`key status change "${n}" for keyStatuses keyId: ${C("buffer"in t?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t))} session keyId: ${C(new Uint8Array(e.decryptdata.keyId||[]))} uri: ${e.decryptdata.uri}`),e.keyStatus=n}))}fetchServerCertificate(e){const n=this.config,t=new(0,n.loader)(n),a=this.getServerCertificateUrl(e);return a?(this.log(`Fetching server certificate for "${e}"`),new Promise(((r,o)=>{const l={responseType:"arraybuffer",url:a}
vendor: 2,066 bytes, line 2
2,c=n.certLoadPolicy.default,d={loadPolicy:c,timeout:c.maxLoadTimeMs,maxRetry:0,retryDelay:0,maxRetryDelay:0},u={onSuccess:(e,n,t,s)=>{r(e.data)},onError:(n,t,r,c)=>{o(new ya({type:s.KEY_SYSTEM_ERROR,details:i.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,fatal:!0,networkDetails:r,response:_({url:l.url,data:void 0},n)},`"${e}" certificate request failed (${a}). Status: ${n.code} (${n.text})`))},onTimeout:(n,t,r)=>{o(new ya({type:s.KEY_SYSTEM_ERROR,details:i.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,fatal:!0,networkDetails:r,response:{url:l.url,data:void 0}},`"${e}" certificate request timed out (${a})`))},onAbort:(e,n,t)=>{o(new Error("aborted"))}};t.load(l,d,u)}))):Promise.resolve()}setMediaKeysServerCertificate(e,n,t){return new Promise(((a,r)=>{e.setServerCertificate(t).then((s=>{this.log(`setServerCertificate ${s?"success":"not supported by CDM"} (${null==t?void 0:t.byteLength}) on "${n}"`),a(e)})).catch((e=>{r(new ya({type:s.KEY_SYSTEM_ERROR,details:i.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED,error:e,fatal:!0},e.message))}))}))}renewLicense(e,n){return this.requestLicense(e,new Uint8Array(n)).then((n=>this.updateKeySession(e,new Uint8Array(n)).catch((e=>{throw new ya({type:s.KEY_SYSTEM_ERROR,details:i.KEY_SYSTEM_SESSION_UPDATE_FAILED,error:e,fatal:!0},e.message)}))))}unpackPlayReadyKeyMessage(e,n){const t=String.fromCharCode.apply(null,new Uint16Array(n.buffer));if(!t.includes("PlayReadyKeyMessage"))return e.setRequestHeader("Content-Type","text/xml; charset=utf-8"),n;const s=(new DOMParser).parseFromString(t,"application/xml"),i=s.querySelectorAll("HttpHeader");if(i.length>0){let n;for(let t=0,s=i.length;t<s;t++){var a,r;n=i[t];const s=null==(a=n.querySelector("name"))?void 0:a.textContent,o=null==(r=n.querySelector("value"))?void 0:r.textContent;s&&o&&e.setRequestHeader(s,o)}}const o=s.querySelector("Challenge"),l=null==o?void 0:o.textContent;if(!l)throw new Error("Cannot find <Challenge> in key message");return Yn(atob(l))}setupLicenseXHR(e,n,t,s){const i=this.config.licenseXhrSetup;return i?Promise.resolve().then((()=>
2{if(!t.decryptdata)throw new Error("Key removed");return i.call(this.hls,e,n,t,s)})).catch((a=>{if(!t.decryptdata)throw a;return e.open("POST",n,!0),i.call(this.hls,e,n,t,s)})).then((t=>(e.readyState||e.open("POST",n,!0),{xhr:e,licenseChallenge:t||s}))):(e.open("POST",n,!0),Promise.resolve({xhr:e,licenseChallenge:s}))}requestLicense(e,n){const t=this.config.keyLoadPolicy.default;return new Promise(((a,r)=>{const o=this.getLicenseServerUrlOrThrow(e.keySystem);this.log(`Sending license request to URL: ${o}`);const l=new XMLHttpRequest;l.responseType="arraybuffer",l.onreadystatechange=()=>{if(!this.hls||!e.mediaKeysSession)return r(new Error("invalid state"));if(4===l.readyState)if(200===l.status){this._requestLicenseFailureCount=0;let n=l.response;this.log(`License received ${n instanceof ArrayBuffer?n.byteLength:n}`);const t=this.config.licenseResponseCallback;if(t)try{n=t.call(this.hls,l,o,e)}catch(e){this.error(e)}a(n)}else{const c=t.errorRetry,d=c?c.maxNumRetry:0;if(this._requestLicenseFailureCount++,this._requestLicenseFailureCount>d||l.status>=400&&l.status<500)r(new ya({type:s.KEY_SYSTEM_ERROR,details:i.KEY_SYSTEM_LICENSE_REQUEST_FAILED,fatal:!0,networkDetails:l,response:{url:o,data:void 0,code:l.status,text:l.statusText}},`License Request XHR failed (${o}). Status: ${l.status} (${l.statusText})`));else{const t=d-this._requestLicenseFailureCount+1;this.warn(`Retrying license request, ${t} attempts left`),this.requestLicense(e,n).then(a,r)}}},e.licenseXhr&&e.licenseXhr.readyState!==XMLHttpRequest.DONE&&e.licenseXhr.abort(),e.licenseXhr=l,this.setupLicenseXHR(l,o,e,n).then((({xhr:n,licenseChallenge:t})=>{e.keySystem==Xn.PLAYREADY&&(t=this.unpackPlayReadyKeyMessage(n,t)),n.send(t)}))}))}onDestroying(){this.unregisterListeners(),this._clear()}onMediaAttached(e,n){if(!this.config.emeEnabled)return;const t=n.media;this.media=t,fa(t,"encrypted",this.onMediaEncrypted),fa(t,"waitingforkey",this.onWaitingForKey)}onMediaDetached(){const e=this.media;e&&(_a(e,"encrypted",this.onMediaEncrypted),_a(e,"waitingforkey",this.onWaitingForKey),this.media=null,this.mediaKeys=null)}_clear(){var e;if(this._requestLicenseFailureCount=0,this.keyIdToKeySessionPromise={},!this.mediaKeys&&!this.mediaKeySessions.length)return;const n=this.media,t=this.mediaKeySessions.slice();this.mediaKeySessions=[],this.mediaKeys=null,ct.clearKeyUriToKeyIdMap();const r=t.length;ba.CDMCleanupPromise=Promise.all(t.map((e=>this.removeSession(e))).concat(null==n||null==(e=n.setMediaKeys(null))?void 0:e.catch((e=>{var n;this.log(`Could not clear media keys: ${e}`),null==(n=this.hls)||n.trigger(a.ERROR,{type:s.OTHER_ERROR,details:i.KEY_SYSTEM_DESTROY_MEDIA_KEYS_ERROR,fatal:!1,error:new Error(`Could not clear media keys: ${e}`)})})))).catch((e=>{var n;this.log(`Could not close sessions and clear media keys: ${e}`),null==(n=this.hls)||n.trigger(a.ERROR,{type:s.OTHER_ERROR,details:i.KEY_SYSTEM_DESTROY_CLOSE_SESSION_ERROR,fatal:!1,error:new Error(`Could not close sessions and clear media keys: ${e}`)})})).then((()=>{r&&this.log("finished closing key sessions and clearing media keys")}))}onManifestLoading(){this.keyFormatPromise=null}onManifestLoaded(e,{sessionKeys:n}){if(n&&this.config.emeEnabled&&!this.keyFormatPromise){const e=n.reduce(((e,n)=>(-1===e.indexOf(n.keyFormat)&&e.push(n.keyFormat),e)),[]);this.log(`Selecting key-system from session-keys ${e.join(", ")}`),this.keyFormatPromise=this.getKeyFormatPromise(e)}}removeSession(e){const{mediaKeysSession:n,licenseXhr:t}=e;if(n){this.log(`Remove licenses and keys and close session ${n.sessionId}`),e._onmessage&&(n.removeEventListener("message",e._onmessage),e._onmessage=void 0),e._onkeystatuseschange&&(n.removeEventListener("keystatuseschange",e._onkeystatuseschange),e._onkeystatuseschange=void 0),t&&t.readyState!==XMLHttpRequest.DONE&&t.abort(),e.mediaKeysSession=e.decryptdata=e.licenseXhr=void 0;const r=this.mediaKeySessions.indexOf(e);r>-1&&this.mediaKeySessions.splice(r,1);const{drmSystemOptions:o}=this.config,l=function(e){var n;return"persistent-license"===e.sessionType||!(null==(n=e.sessionTypes)||!n.some((e=>"persistent-license"===e)))}(o)?new Promise(((e,t)=>{self.setTimeout((()=>t(new Error("MediaKeySession.remove() timeout"))),8e3),n.remove().then(e)})):Promise.resolve();return l.catch((e=>{var n;this.log(`Could not remove session: ${e}`),null==(n=this.hls)||n.trigger(a.ERROR,{type:s.OTHER_ERROR,details:i.KEY_SYSTEM_DESTROY_REMOVE_SESSION_ERROR,fatal:!1,error:new Error(`Could not remove session: ${e}`)})})).then((()=>n.close())).catch((e=>{var n;this.log(`Could not close session: ${e}`),null==(n=this.hls)||n.trigger(a.ERROR,{type:s.OTHER_ERROR,details:i.KEY_SYSTEM_DESTROY_CLOSE_SESSION_ERROR,fatal:!1,error:new Error(`Could not close session: ${e}`)})}))}}}ba.CDMCleanupPromise=void 0;
2class ya extends Error{constructor(e,n){super(n),this.data=void 0,e.error||(e.error=new Error(n)),this.data=e,e.err=e.error}}function wa(e,n){let t;try{t=new Event("addtrack")}catch(e){t=document.createEvent("Event"),t.initEvent("addtrack",!1,!1)}t.track=e,n.dispatchEvent(t)}function ka(e,n){const t=e.mode;if("disabled"===t&&(e.mode="hidden"),e.cues&&!e.cues.getCueById(n.id))try{if(e.addCue(n),!e.cues.getCueById(n.id))throw new Error(`addCue is failed for: ${n}`)}catch(t){x.debug(`[texttrack-utils]: ${t}`);try{const t=new self.TextTrackCue(n.startTime,n.endTime,n.text);t.id=n.id,e.addCue(t)}catch(e){x.debug(`[texttrack-utils]: Legacy TextTrackCue fallback failed: ${e}`)}}"disabled"===t&&(e.mode=t)}function Ta(e,n){const t=e.mode;if("disabled"===t&&(e.mode="hidden"),e.cues)for(let t=e.cues.length;t--;)n&&e.cues[t].removeEventListener("enter",n),e.removeCue(e.cues[t]);"disabled"===t&&(e.mode=t)}function Ea(e,n,t,s){const i=e.mode;if("disabled"===i&&(e.mode="hidden"),e.cues&&e.cues.length>0){const i=function(e,n,t){const s=[],i=function(e,n){if(n<=e[0].startTime)return 0;const t=e.length-1;if(n>e[t].endTime)return-1;let s,i=0,a=t;for(;i<=a;)if(s=Math.floor((a+i)/2),n<e[s].startTime)a=s-1;else{if(!(n>e[s].startTime&&i<t))return s;i=s+1}return e[i].startTime-n<n-e[a].startTime?i:a}(e,n);if(i>-1)for(let a=i,r=e.length;a<r;a++){const i=e[a];if(i.startTime>=n&&i.endTime<=t)s.push(i);else if(i.startTime>t)return s}return s}(e.cues,n,t);for(let n=0;n<i.length;n++)s&&!s(i[n])||e.removeCue(i[n])}"disabled"===i&&(e.mode=i)}function xa(e){const n=[];for(let t=0;t<e.length;t++){const s=e[t];"subtitles"!==s.kind&&"captions"!==s.kind||!s.label||n.push(e[t])}return n}function Sa(e){let n=5381,t=e.length;for(;t;)n=33*n^e.charCodeAt(--t);return(n>>>0).toString()}const Aa=.025;let La=function(e){return e[e.Point=0]="Point",e[e.Range=1]="Range",e}({});function Ca(e,n,t){return`${e.identifier}-${t+1}-${Sa(n)}`}class Ra{constructor(e,n){this.base=void 0,this._duration=null,this._timelineStart=null,this.appendInPlaceDisabled=void 0,this.appendInPlaceStarted=void 0,this.dateRange=void 0,this.hasPlayed=!1,this.cumulativeDuration=0,this.resumeOffset=NaN,this.playoutLimit=NaN,this.restrictions={skip:!1,jump:!1},this.snapOptions={out:!1,in:!1},this.assetList=[],this.assetListLoader=void 0,this.assetListResponse=null,this.resumeAnchor=void 0,this.error=void 0,this.resetOnResume=void 0,this.base=n,this.dateRange=e,this.setDateRange(e)}setDateRange(e){this.dateRange=e,this.resumeOffset=e.attr.optionalFloat("X-RESUME-OFFSET",this.resumeOffset),this.playoutLimit=e.attr.optionalFloat("X-PLAYOUT-LIMIT",this.playoutLimit),this.restrictions=e.attr.enumeratedStringList("X-RESTRICT",this.restrictions),this.snapOptions=e.attr.enumeratedStringList("X-SNAP",this.snapOptions)}reset(){var e;this.appendInPlaceStarted=!1,null==(e=this.assetListLoader)||e.destroy(),this.assetListLoader=void 0,this.supplementsPrimary||(this.assetListResponse=null,this.assetList=[],this._duration=null)}isAssetPastPlayoutLimit(e){var n;if(e>0&&e>=this.assetList.length)return!0;const t=this.playoutLimit;return!(e<=0||isNaN(t))&&(0===t||((null==(n=this.assetList[e])?void 0:n.startOffset)||0)>t)}findAssetIndex(e){return this.assetList.indexOf(e)}get identifier(){return this.dateRange.id}get startDate(){return this.dateRange.startDate}get startTime(){const e=this.dateRange.startTime;if(this.snapOptions.out){const n=this.dateRange.tagAnchor;if(n)return Ia(e,n)}return e}get startOffset(){return this.cue.pre?0:this.startTime}get startIsAligned(){if(0===this.startTime||this.snapOptions.out)return!0;const e=this.dateRange.tagAnchor;if(e){const n=this.dateRange.startTime;return n-Ia(n,e)<.1}return!1}get resumptionOffset(){const n=this.resumeOffset,t=e(n)?n:this.duration;return this.cumulativeDuration+t}get resumeTime(){const e=this.startOffset+this.resumptionOffset;if(this.snapOptions.in){const n=this.resumeAnchor;if(n)return Ia(e,n)}return e}get appendInPlace(){return!!this.appendInPlaceStarted||!this.appendInPlaceDisabled&&!(this.cue.once||this.cue.pre||!this.startIsAligned||!(isNaN(this.playoutLimit)&&isNaN(this.resumeOffset)||this.resumeOffset&&this.duration&&Math.abs(this.resumeOffset-this.duration)<Aa))}set appendInPlace(e){this.appendInPlaceStarted?this.resetOnResume=!e:this.appendInPlaceDisabled=!e}get timelineStart(){return null!==this._timelineStart?this._timelineStart:this.startTime}set timelineStart(e){this._timelineStart=e}get duration(){const e=this.playoutLimit;let n;return n=null!==this._duration?this._duration:this.dateRange.duration?this.dateRange.duration:this.dateRange.plannedDuration||0,!isNaN(e)&&e<n&&(n=e),n}set duration(e){this._duration=e}get cue(){return this.dateRange.cue}get timelineOccupancy(){return"RANGE"===this.dateRange.attr["X-TIMELINE-OCCUPIES"]?La.Range:La.Point}get supplementsPrimary(){return"PRIMARY"===this.dateRange.attr["X-TIMELINE-STYLE"]}get contentMayVary(){return"NO"!==this.dateRange.attr["X-CONTENT-MAY-VARY"]}get assetUrl(){return this.dateRange.attr["X-ASSET-URI"]}get assetListUrl(){return this.dateRange.attr["X-ASSET-LIST"]}get baseUrl(){return this.base.url}get assetListLoaded(){return this.assetList.length>0||null!==this.assetListResponse}toString(){return`["${(e=this).identifier}" ${e.cue.pre?"<pre>":e.cue.post?"<post>":""}${e.timelineStart.toFixed(2)}-${e.resumeTime.toFixed(2)}]`;var e}}function Ia(e,n){return e-n.start<n.duration/2&&!(Math.abs(e-(n.start+n.duration))<Aa)?n.start:n.start+n.duration}function Pa(e,n,t){const s=new self.URL(e,t);return"data:"!==s.protocol&&s.searchParams.set("_HLS_primary_id",n),s}function Da(e,n){for(;null!=(t=e.assetList[++n])&&t.error;)var t;return n}function Oa(e){const n=e.timelineStart,t=e.duration||0;return`["${e.identifier}" ${n.toFixed(2)}-${(n+t).toFixed(2)}]`}class Ma{constructor(e,n,t,s){this.hls=void 0,this.interstitial=void 0,this.assetItem=void 0,this.tracks=null,this.hasDetail
2s=!1,this.mediaAttached=null,this._currentTime=void 0,this._bufferedEosTime=void 0,this.checkPlayout=()=>{this.reachedPlayout(this.currentTime)&&this.hls.trigger(a.PLAYOUT_LIMIT_REACHED,{})};const i=this.hls=new e(n);this.interstitial=t,this.assetItem=s;let r=s.uri;try{r=Pa(r,n.primarySessionId).href}catch(e){}i.loadSource(r);const o=()=>{this.hasDetails=!0};i.once(a.LEVEL_LOADED,o),i.once(a.AUDIO_TRACK_LOADED,o),i.once(a.SUBTITLE_TRACK_LOADED,o),i.on(a.MEDIA_ATTACHING,((e,{media:n})=>{this.removeMediaListeners(),this.mediaAttached=n,this.interstitial.playoutLimit&&(n.addEventListener("timeupdate",this.checkPlayout),this.appendInPlace&&i.on(a.BUFFER_APPENDED,(()=>{const e=this.bufferedEnd;this.reachedPlayout(e)&&(this._bufferedEosTime=e,i.trigger(a.BUFFERED_TO_END,void 0))})))}))}get appendInPlace(){var e;return(null==(e=this.interstitial)?void 0:e.appendInPlace)||!1}bufferedInPlaceToEnd(e){var n;if(!this.appendInPlace)return!1;if(null!=(n=this.hls)&&n.bufferedToEnd)return!0;if(!e||!this._bufferedEosTime)return!1;const t=this.timelineOffset,s=Dn.bufferInfo(e,t,0);return this.getAssetTime(s.end)>=this._bufferedEosTime-.02}reachedPlayout(e){const n=this.interstitial.playoutLimit;return this.startOffset+e>=n}get destroyed(){var e;return!(null!=(e=this.hls)&&e.userConfig)}get assetId(){return this.assetItem.identifier}get interstitialId(){return this.assetItem.parentIdentifier}get media(){var e;return(null==(e=this.hls)?void 0:e.media)||null}get bufferedEnd(){const e=this.media||this.mediaAttached;if(!e)return this._bufferedEosTime?this._bufferedEosTime:this.currentTime;const n=Dn.bufferInfo(e,e.currentTime,.001);return this.getAssetTime(n.end)}get currentTime(){const e=this.media||this.mediaAttached;return e?this.getAssetTime(e.currentTime):this._currentTime||0}get duration(){return this.assetItem.duration||0}get remaining(){const e=this.duration;return e?Math.max(0,e-this.currentTime):0}get startOffset(){return this.assetItem.startOffset}get timelineOffset(){var e;return(null==(e=this.hls)?void 0:e.config.timelineOffset)||0}set timelineOffset(e){const n=this.timelineOffset;if(e!==n){const t=e-n;if(Math.abs(t)>1/9e4){if(this.hasDetails)throw new Error("Cannot set timelineOffset after playlists are loaded");this.hls.config.timelineOffset=e}}}getAssetTime(e){const n=this.timelineOffset,t=this.duration;return Math.min(Math.max(0,e-n),t)}removeMediaListeners(){const e=this.mediaAttached;e&&(this._currentTime=e.currentTime,this.bufferSnapShot(),e.removeEventListener("timeupdate",this.checkPlayout))}bufferSnapShot(){var e;this.mediaAttached&&null!=(e=this.hls)&&e.bufferedToEnd&&(this._bufferedEosTime=this.bufferedEnd)}destroy(){this.removeMediaListeners(),this.hls.destroy(),this.hls=this.interstitial=null,this.tracks=this.mediaAttached=this.checkPlayout=null}attachMedia(e){this.hls.attachMedia(e)}detachMedia(){this.removeMediaListeners(),this.mediaAttached=null,this.hls.detachMedia()}resumeBuffering(){this.hls.resumeBuffering()}pauseBuffering(){this.hls.pauseBuffering()}transferMedia(){return this.bufferSnapShot(),this.hls.transferMedia()}resetDetails(){const e=this.hls;if(this.hasDetails){e.stopLoad();const n=e=>delete e.details;e.levels.forEach(n),e.allAudioTracks.forEach(n),e.allSubtitleTracks.forEach(n),this.hasDetails=!1}}on(e,n,t){this.hls.on(e,n)}once(e,n,t){this.hls.once(e,n)}off(e,n,t){this.hls.off(e,n)}toString(){var e;return`HlsAssetPlayer: ${Oa(this.assetItem)} ${null==(e=this.hls)?void 0:e.sessionId} ${this.appendInPlace?"append-in-place":""}`}}class Fa extends b{constructor(e,n){super("interstitials-sched",n),this.onScheduleUpdate=void 0,this.eventMap={},this.events=null,this.items=null,this.durations={primary:0,playout:0,integrated:0},this.onScheduleUpdate=e}destroy(){this.reset(),this.onScheduleUpdate=null}reset(){this.eventMap={},this.setDurations(0,0,0),this.events&&this.events.forEach((e=>e.reset())),this.events=this.items=null}resetErrorsInRange(e,n){return this.events?this.events.reduce(((t,s)=>e<=s.startOffset&&n>s.startOffset?(delete s.error,t+1):t),0):0}get duration(){const e=this.items;return e?e[e.length-1].end:0}get length(){return this.items?this.items.length:0}getEvent(e){return e&&this.eventMap[e]||null}hasEvent(e){return e in this.eventMap}findItemIndex(e,n){if(e.event)return this.findEventIndex(e.event.i
2dentifier);let t=-1;e.nextEvent?t=this.findEventIndex(e.nextEvent.identifier)-1:e.previousEvent&&(t=this.findEventIndex(e.previousEvent.identifier)+1);const s=this.items;if(s)for(s[t]||(void 0===n&&(n=e.start),t=this.findItemIndexAtTime(n));t>=0&&null!=(i=s[t])&&i.event;){var i;t--}return t}findItemIndexAtTime(e,n){const t=this.items;if(t)for(let s=0;s<t.length;s++){let i=t[s];if(n&&"primary"!==n&&(i=i[n]),e===i.start||e>i.start&&e<i.end)return s}return-1}findJumpRestrictedIndex(e,n){const t=this.items;if(t)for(let s=e;s<=n&&t[s];s++){const e=t[s].event;if(null!=e&&e.restrictions.jump&&!e.appendInPlace)return s}return-1}findEventIndex(e){const n=this.items;if(n)for(let s=n.length;s--;){var t;if((null==(t=n[s].event)?void 0:t.identifier)===e)return s}return-1}findAssetIndex(e,n){const t=e.assetList,s=t.length;if(s>1)for(let e=0;e<s;e++){const s=t[e];if(!s.error){const t=s.timelineStart;if(n===t||n>t&&n<t+(s.duration||0))return e}}return 0}get assetIdAtEnd(){var e,n;const t=null==(e=this.items)||null==(n=e[this.length-1])?void 0:n.event;if(t){const e=t.assetList,n=e[e.length-1];if(n)return n.identifier}return null}parseInterstitialDateRanges(e,n){const t=e.main.details,{dateRanges:s}=t,i=this.events,a=this.parseDateRanges(s,{url:t.url},n),r=Object.keys(s),o=i?i.filter((e=>!r.includes(e.identifier))):[];a.length&&a.sort(((e,n)=>{const t=e.cue.pre,s=e.cue.post,i=n.cue.pre,a=n.cue.post;if(t&&!i)return-1;if(i&&!t)return 1;if(s&&!a)return 1;if(a&&!s)return-1;if(!(t||i||s||a)){const t=e.startTime,s=n.startTime;if(t!==s)return t-s}return e.dateRange.tagOrder-n.dateRange.tagOrder})),this.events=a,o.forEach((e=>{this.removeEvent(e)})),this.updateSchedule(e,o)}updateSchedule(e,n=[]){const t=this.events||[];
2if(t.length||n.length||this.length<2){const s=this.items,i=this.parseSchedule(t,e);(n.length||(null==s?void 0:s.length)!==i.length||i.some(((e,n)=>Math.abs(e.playout.start-s[n].playout.start)>.005||Math.abs(e.playout.end-s[n].playout.end)>.005)))&&(this.items=i,this.onScheduleUpdate(n,s))}}parseDateRanges(e,n,t){const s=[],i=Object.keys(e);for(let a=0;a<i.length;a++){const r=i[a],o=e[r];if(o.isInterstitial){let e=this.eventMap[r];e?e.setDateRange(o):(e=new Ra(o,n),this.eventMap[r]=e,!1===t&&(e.appendInPlace=t)),s.push(e)}}return s}parseSchedule(e,n){const t=[],s=n.main.details,i=s.live?1/0:s.edge;let a=0;if((e=e.filter((e=>!(e.error||e.cue.once&&e.hasPlayed)))).length){this.resolveOffsets(e,n);let s=0,o=0;if(e.forEach(((n,r)=>{const l=n.cue.pre,c=n.cue.post,d=e[r-1]||null,u=n.appendInPlace,p=c?i:n.startOffset,h=n.duration,m=n.timelineOccupancy===La.Range?h:0,v=n.resumptionOffset,g=(null==d?void 0:d.startTime)===p,f=p+n.cumulativeDuration;let _=u?f+h:p+v;if(l||!c&&p<=0){const e=o;o+=m,n.timelineStart=f;const s=a;a+=h,t.push({event:n,start:f,end:_,playout:{start:s,end:a},integrated:{start:e,end:o}})}else{if(!(p<=i))return;{if(!g){const i=p-s;if(i>.033){const l=s,c=o;o+=i;const d=a;a+=i;const u={previousEvent:e[r-1]||null,nextEvent:n,start:l,end:l+i,playout:{start:d,end:a},integrated:{start:c,end:o}};t.push(u)}else i>0&&d&&(d.cumulativeDuration+=i,t[t.length-1].end=p)}c&&(_=f),n.timelineStart=f;const i=o;o+=m;const l=a;a+=h,t.push({event:n,start:f,end:_,playout:{start:l,end:a},integrated:{start:i,end:o}})}}const b=n.resumeTime;s=c||b>i?i:b})),s<i){var r;const e=s,n=o,l=i-s;o+=l;const c=a;a+=l,t.push({previousEvent:(null==(r=t[t.length-1])?void 0:r.event)||null,nextEvent:null,start:s,end:e+l,playout:{start:c,end:a},integrated:{start:n,end:o}})}this.setDurations(i,a,o)}else{const e=0;t.push({previousEvent:null,nextEvent:null,start:e,end:i,playout:{start:e,end:i},integrated:{start:e,end:i}}),this.setDurations(i,i,i)}return t}setDurations(e,n,t){this.durations={primary:e,playout:n,integrated:t}}resolveOffsets(n,t){const s=t.main.details,i=s.live?1/0:s.edge;let a=0,r=-1;n.forEach(((o,l)=>{const c=o.cue.pre,d=o.cue.post,u=c?0:d?i:o.startTime;this.updateAssetDurations(o),r===u?o.cumulativeDuration=a:(a=0,r=u),!d&&o.snapOptions.in&&(o.resumeAnchor=tn(null,s.fragments,o.startOffset+o.resumptionOffset,0,0)||void 0),o.appendInPlace&&!o.appendInPlaceStarted&&(this.primaryCanResumeInPlaceAt(o,t)||(o.appendInPlace=!1)),!o.appendInPlace&&l+1<n.length&&n[l+1].startTime-n[l].resumeTime<.033&&(n[l+1].appendInPlace=!1,n[l+1].appendInPlace&&this.warn(`Could not change append strategy for abutting event ${o}`));const p=e(o.resumeOffset)?o.resumeOffset:o.duration;a+=p}))}primaryCanResumeInPlaceAt(e,n){const t=e.resumeTime,s=e.startTime+e.resumptionOffset;return Math.abs(t-s)>Aa?(this.log(`"${e.identifier}" resumption ${t} not aligned with estimated timeline end ${s}`),!1):n?!Object.keys(n).some((s=>{const i=n[s].details,a=i.edge;if(t>=a)return this.log(`"${e.identifier}" resumption ${t} past ${s} playlist end ${a}`),!1;const r=tn(null,i.fragments,t);if(!r)return this.log(`"${e.identifier}" resumption ${t} does not align with any fragments in ${s} playlist (${i.fragStart}-${i.fragmentEnd})`),!0;const o="audio"===s?.175:0;return!(Math.abs(r.start-t)<Aa+o||Math.abs(r.end-t)<Aa+o||(this.log(`"${e.identifier}" resumption ${t} not aligned with ${s} fragment bounds (${r.start}-${r.end} sn: ${r.sn} cc: ${r.cc})`),0))})):(this.log(`"${e.identifier}" resumption ${t} can not be aligned with media (none selected)`),!1)}updateAssetDurations(e){if(!e.assetListLoaded)return;const n=e.timelineStart;let t=0,s=!1,i=!1;e.assetList.forEach(((e,a)=>{const r=n+t;e.startOffset=t,e.timelineStart=r,s||(s=null===e.duration),i||(i=!!e.error);const o=e.error?0:e.duration||0;t+=o})),e.duration=s&&!i?Math.max(t,e.duration):t}removeEvent(e){e.reset(),delete this.eventMap[e.identifier]}}function Na(e){return`[${e.event?'"'+e.event.identifier+'"':"primary"}: ${e.start.toFixed(2)}-${e.end.toFixed(2)}]`}class $a{constructor(e){this.hls=void 0,this.hls=e}destroy(){this.hls=null}loadAssetList(e,n){const t=e.assetListUrl;let s;try{s=Pa(t,this.hls.sessionId,e.baseUrl)}catch(n){const s=this.assignAssetListError(e,i.ASSET_LIST_LOAD_ERROR,n,t);return void this.hls.trigger(a.ERROR,s)}n&&"data:"!==s.protocol&&s.searchParams.set("_HLS_start_offset",""+n);const r=this.hls.config,o=new(0,r.loader)(r),l={responseType:"json",url:s.href},c=r.interstitialAssetListLoadPolicy.default,d={loadPolicy:c,timeout:c.maxLoadTimeMs,maxRetry:0,retryDelay:0,maxRetryDelay:0},u={onSuccess:(n,t,s,r)=>{const o=n.data,l=null==o?void 0:o.ASSETS;if(Array.isArray(l))e.assetListResponse=o,this.hls.trigger(a.ASSET_LIST_LOADED,{event:e,assetListResponse:o,networkDetails:r});else{const n=this.assignAssetListError(e,i.ASSET_LIST_PARSING_ERROR,new Error("Invalid interstitial asset list"),s.url,t,r);this.hls.trigger(a.ERROR,n)}},onError:(n,t,s,r)=>{const o=this.assignAssetListError(e,i.ASSET_LIST_LOAD_ERROR,new Error(`Error loading X-ASSET-LIST: HTTP status ${n.code} ${n.text} (${t.url})`),t.url,r,s);this.hls.trigger(a.ERROR,o)},onTimeout:(n,t,s)=>{const r=this.assignAssetListError(e,i.ASSET_LIST_LOAD_TIMEOUT,new Error(`Timeout loading X-ASSET-LIST (${t.url})`),t.url,n,s);this.hls.trigger(a.ERROR,r)}};return o.load(l,d,u),this.hls.trigger(a.ASSET_LIST_LOADING,{event:e}),o}assignAssetListError(e,n,t,i,a,r){return e.error=t,{type:s.NETWORK_E
vendor: 13,437 bytes, line 2
2RROR,details:n,fatal:!1,interstitial:e,url:i,error:t,networkDetails:r,stats:a}}}function Ba(e){null==e||e.play().catch((()=>{}))}class Ua{constructor(e){this.buffered=void 0;const n=(n,t,s)=>{if((t>>>=0)>s-1)throw new DOMException(`Failed to execute '${n}' on 'TimeRanges': The index provided (${t}) is greater than the maximum bound (${s})`);return e[t][n]};this.buffered={get length(){return e.length},end:t=>n("end",t,e.length),start:t=>n("start",t,e.length)}}}const ja={42:225,92:233,94:237,95:243,96:250,123:231,124:247,125:209,126:241,127:9608,128:174,129:176,130:189,131:191,132:8482,133:162,134:163,135:9834,136:224,137:32,138:232,139:226,140:234,141:238,142:244,143:251,144:193,145:201,146:211,147:218,148:220,149:252,150:8216,151:161,152:42,153:8217,154:9473,155:169,156:8480,157:8226,158:8220,159:8221,160:192,161:194,162:199,163:200,164:202,165:203,166:235,167:206,168:207,169:239,170:212,171:217,172:249,173:219,174:171,175:187,176:195,177:227,178:205,179:204,180:236,181:210,182:242,183:213,184:245,185:123,186:125,187:92,188:94,189:95,190:124,191:8764,192:196,193:228,194:214,195:246,196:223,197:165,198:164,199:9475,200:197,201:229,202:216,203:248,204:9487,205:9491,206:9495,207:9499},Ga=e=>String.fromCharCode(ja[e]||e),za=15,qa=100,Ka={17:1,18:3,21:5,22:7,23:9,16:11,19:12,20:14},Va={17:2,18:4,21:6,22:8,23:10,19:13,20:15},Ha={25:1,26:3,29:5,30:7,31:9,24:11,27:12,28:14},Ya={25:2,26:4,29:6,30:8,31:10,27:13,28:15},Wa=["white","green","blue","cyan","red","yellow","magenta","black","transparent"];class Xa{constructor(){this.time=null,this.verboseLevel=0}log(e,n){if(this.verboseLevel>=e){const t="function"==typeof n?n():n;x.log(`${this.time} [${e}] ${t}`)}}}const Qa=function(e){const n=[];for(let t=0;t<e.length;t++)n.push(e[t].toString(16));return n};class Ja{constructor(){this.foreground="white",this.underline=!1,this.italics=!1,this.background="black",this.flash=!1}reset(){this.foreground="white",this.underline=!1,this.italics=!1,this.background="black",this.flash=!1}setStyles(e){const n=["foreground","underline","italics","background","flash"];for(let t=0;t<n.length;t++){const s=n[t];e.hasOwnProperty(s)&&(this[s]=e[s])}}isDefault(){return"white"===this.foreground&&!this.underline&&!this.italics&&"black"===this.background&&!this.flash}equals(e){return this.foreground===e.foreground&&this.underline===e.underline&&this.italics===e.italics&&this.background===e.background&&this.flash===e.flash}copy(e){this.foreground=e.foreground,this.underline=e.underline,this.italics=e.italics,this.background=e.background,this.flash=e.flash}toString(){return"color="+this.foreground+", underline="+this.underline+", italics="+this.italics+", background="+this.background+", flash="+this.flash}}class Za{constructor(){this.uchar=" ",this.penState=new Ja}reset(){this.uchar=" ",this.penState.reset()}setChar(e,n){this.uchar=e,this.penState.copy(n)}setPenState(e){this.penState.copy(e)}equals(e){return this.uchar===e.uchar&&this.penState.equals(e.penState)}copy(e){this.uchar=e.uchar,this.penState.copy(e.penState)}isEmpty(){return" "===this.uchar&&this.penState.isDefault()}}class er{constructor(e){this.chars=[],this.pos=0,this.currPenState=new Ja,this.cueStartTime=null,this.logger=void 0;for(let e=0;e<qa;e++)this.chars.push(new Za);this.logger=e}equals(e){for(let n=0;n<qa;n++)if(!this.chars[n].equals(e.chars[n]))return!1;return!0}copy(e){for(let n=0;n<qa;n++)this.chars[n].copy(e.chars[n])}isEmpty(){let e=!0;for(let n=0;n<qa;n++)if(!this.chars[n].isEmpty()){e=!1;break}return e}setCursor(e){this.pos!==e&&(this.pos=e),this.pos<0?(this.logger.log(3,"Negative cursor position "+this.pos),this.pos=0):this.pos>qa&&(this.logger.log(3,"Too large cursor position "+this.pos),this.pos=qa)}moveCursor(e){const n=this.pos+e;if(e>1)for(let e=this.pos+1;e<n+1;e++)this.chars[e].setPenState(this.currPenState);this.setCursor(n)}backSpace(){this.moveCursor(-1),this.chars[this.pos].setChar(" ",this.currPenState)}insertChar(e){e>=144&&this.backSpace();const n=Ga(e);this.pos>=qa?this.logger.log(0,(()=>"Cannot insert "+e.toString(16)+" ("+n+") at position "+this.pos+". Skipping it!")):(this.chars[this.pos].setChar(n,this.currPenState),this.moveCursor(1))}clearFromPos(e){let n;for(n=e;n<qa;n++)this.chars[n].reset()}clear(){this.clearFromPos(0),this.pos=0,this.currPenState.reset()}clearToEndOfRow(){this.clearFromPos(this.pos)}getTextString(){const e=[];let n=!0;for(let t=0;t<qa;t++){const s=this.chars[t].uchar;" "!==s&&(n=!1),e.push(s)}return n?"":e.join("")}setPenStyles(e){this.currPenState.setStyles(e),this.chars[this.pos].setPenState(this.currPenState)}}class nr{constructor(e){this.rows=[],this.currRow=14,this.nrRollUpRows=null,this.lastOutputScreen=null,this.logger=void 0;for(let n=0;n<za;n++)this.rows.push(new er(e));this.logger=e}reset(){for(let e=0;e<za;e++)this.rows[e].clear();this.currRow=14}equals(e){let n=!0;for(let t=0;t<za;t++)if(!this.rows[t].equals(e.rows[t])){n=!1;break}return n}copy(e){for(let n=0;n<za;n++)this.rows[n].copy(e.rows[n])}isEmpty(){let e=!0;for(let n=0;n<za;n++)if(!this.rows[n].isEmpty()){e=!1;break}return e}backSpace(){this.rows[this.currRow].backSpace()}clearToEndOfRow(){this.rows[this.currRow].clearToEndOfRow()}insertChar(e){this.rows[this.currRow].insertChar(e)}setPen(e){this.rows[this.currRow].setPenStyles(e)}moveCursor(e){this.rows[this.currRow].moveCursor(e)}setCursor(e){this.logger.log(2,"setCursor: "+e),this.rows[this.currRow].setCursor(e)}setPAC(e){this.logger.log(2,(()=>"pacData = "+Ve(e)));let n=e.row-1;if(this.nrRollUpRows&&n<this.nrRollUpRows-1&&(n=this.nrRollUpRows-1),this.nrRollUpRows&&this.currRow!==n){for(let e=0;e<za;e++)this.rows[e].clear();const e=this.currRow+1-this.nrRollUpRows,t=this.lastOutputScreen;if(t){const s=t.rows[e].cueStartTime,i=this.logger.time;if(null!==s&&null!==i&&s<i)for(let s=0;s<this.nrRollUpRows;s++)this.rows[n-this.nrRollUpRows+s+1].copy(t.rows[e+s])}}this.currRow=n;const t=this.rows[this.currRow];if(null!==e.indent){const n=e.indent,s=Math.max(n-1,0);t.setCursor(e.indent),e.color=t.chars[s].penState.foreground}const s={foreground:e.color,underline:e.underline,italics:e.italics,background:"black",flash:!1};this.setPen(s)}setBkgData(e){this.logger.log(2,(()=>"bkgData = "+Ve(e))),this.backSpace(),this.setPen(e),this.insertChar(32)}setRollUpRows(e){this.nrRollUpRows=e}rollUp(){if(null===this.nrRollUpRows)return void this.logger.log(3,"roll_up but nrRollUpRows not set yet");this.logger.log(1,(()=>this.getDisplayText()));const e=this.currRow+1-this.nrRollUpRows,n=this.rows.splice(e,1)[0];n.clear(),this.rows.splice(this.currRow,0,n),this.logger.log(2,"Rolling up")}getDisplayText(e){e=e||!1;const n=[];let t="",s=-1;for(let t=0;t<za;t++){const i=this.rows[t].getTextString();i&&(s=t+1,e?n.push("Row "+s+": '"+i+"'"):n.push(i.trim()))}return n.length>0&&(t=e?"["+n.join(" | ")+"]":n.join("\n")),t}getTextAndFormat(){return this.rows}}class tr{constructor(e,n,t){this.chNr=void 0,this.outputFilter=void 0,this.mode=void 0,this.verbose=void 0,this.displayedMemory=void 0,this.nonDisplayedMemory=void 0,this.lastOutputScreen=void 0,this.currRollUpRow=void 0,this.writeScreen=void 0,this.cueStartTime=void 0,this.logger=void 0,this.chNr=e,this.outputFilter=n,this.mode=null,this.verbose=0,this.displayedMemory=new nr(t),this.nonDisplayedMemory=new nr(t),this.lastOutputScreen=new nr(t),this.currRollUpRow=this.displayedMemory.rows[14],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null,this.logger=t}reset(){this.mode=null,this.displayedMemory.reset(),this.nonDisplayedMemory.reset(),this.lastOutputScreen.reset(),this.outputFilter.reset(),this.currRollUpRow=this.displayedMemory.rows[14],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null}getHandler(){return this.outputFilter}setHandler(e){this.outputFilter=e}setPAC(e){this.writeScreen.setPAC(e)}setBkgData(e){this.writeScreen.setBkgData(e)}setMode(e){e!==this.mode&&(this.mode=e,this.logger.log(2,(()=>"MODE="+e)),"MODE_POP-ON"===this.mode?this.writeScreen=this.nonDisplayedMemory:(this.writeScreen=this.displayedMemory,this.writeScreen.reset()),"MODE_ROLL-UP"!==this.mode&&(this.displayedMemory.nrRollUpRows=null,this.nonDisplayedMemory.nrRollUpRows=null),this.mode=e)}insertChars(e){for(let n=0;n<e.length;n++)this.writeScreen.insertChar(e[n]);const n=this.writeScreen===this.displayedMemory?"DISP":"NON_DISP";this.logger.log(2,(()=>n+": "+this.writeScreen.getDisplayText(!0))),"MODE_PAINT-ON"!==this.mode&&"MODE_ROLL-UP"!==this.mode||(this.logger.log(1,(()=>"DISPLAYED: "+this.displayedMemory.getDisplayText(!0))),this.outputDataUpdate())}ccRCL(){this.logger.log(2,"RCL - Resume Caption Loading"),this.setMode("MODE_POP-ON")}ccBS(){this.logger.log(2,"BS - BackSpace"),"MODE_TEXT"!==this.mode&&(this.writeScreen.backSpace(),this.writeScreen===this.displayedMemory&&this.outputDataUpdate())}ccAOF(){}ccAON(){}ccDER(){this.logger.log(2,"DER- Delete to End of Row"),this.writeScreen.clearToEndOfRow(),this.outputDataUpdate()}ccRU(e){this.logger.log(2,"RU("+e+") - Roll Up"),this.writeScreen=this.displayedMemory,this.setMode("MODE_ROLL-UP"),this.writeScreen.setRollUpRows(e)}ccFON(){this.logger.log(2,"FON - Flash On"),this.writeScreen.setPen({flash:!0})}ccRDC(){this.logger.log(2,"RDC - Resume Direct Captioning"),this.setMode("MODE_PAINT-ON")}ccTR(){this.logger.log(2,"TR"),this.setMode("MODE_TEXT")}ccRTD(){this.logger.log(2,"RTD"),this.setMode("MODE_TEXT")}ccEDM(){this.logger.log(2,"EDM - Erase Displayed Memory"),this.displayedMemory.reset(),this.outputDataUpdate(!0)}ccCR(){this.logger.log(2,"CR - Carriage Return"),this.writeScreen.rollUp(),this.outputDataUpdate(!0)}ccENM(){this.logger.log(2,"ENM - Erase Non-displayed Memory"),this.nonDisplayedMemory.reset()}ccEOC(){if(this.logger.log(2,"EOC - End Of Caption"),"MODE_POP-ON"===this.mode){const e=this.displayedMemory;this.displayedMemory=this.nonDisplayedMemory,this.nonDisplayedMemory=e,this.writeScreen=this.nonDisplayedMemory,this.logger.log(1,(()=>"DISP: "+this.displayedMemory.getDisplayText()))}this.outputDataUpdate(!0)}ccTO(e){this.logger.log(2,"TO("+e+") - Tab Offset"),this.writeScreen.moveCursor(e)}ccMIDROW(e){const n={flash:!1};if(n.underline=e%2==1,n.italics=e>=46,n.italics)n.foreground="white";else{const t=Math.floor(e/2)-16,s=["white","green","blue","cyan","red","yellow","magenta"];n.foreground=s[t]}this.logger.log(2,"MIDROW: "+Ve(n)),this.writeScreen.setPen(n)}outputDataUpdate(e=!1){const n=this.logger.time;null!==n&&this.outputFilter&&(null!==this.cueStartTime||this.displayedMemory.isEmpty()?this.displayedMemory.equals(this.lastOutputScreen)||(this.outputFilter.newCue(this.cueStartTime,n,this.lastOutputScreen),e&&this.outputFilter.dispatchCue&&this.outputFilter.dispatchCue(),this.cueStartTime=this.displayedMemory.isEmpty()?null:n):this.cueStartTime=n,this.lastOutputScreen.copy(this.displayedMemory))}cueSplitAtTime(e){this.outputFilter&&(this.displayedMemory.isEmpty()||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,e,this.displayedMemory),this.cueStartTime=e))}}class sr{constructor(e,n,t){this.channels=void 0,this.currentChannel=0,this.cmdHistory={a:null,b:null},this.logger=void 0;const s=this.logger=new Xa;this.channels=[null,new tr(e,n,s),new tr(e+1,t,s)]}getHandler(e){return this.channels[e].getHandler()}setHandler(e,n){this.channels[e].setHandler(n)}addData(e,n){this.logger.time=e;for(let e=0;e<n.length;e+=2){const t=127&n[e],s=127&n[e+1];let i=!1,a=null;if(0===t&&0===s)continue;this.logger.log(3,(()=>"["+Qa([n[e],n[e+1]])+"] -> ("+Qa([t,s])+")"));const r=this.cmdHistory;if(t>=16&&t<=31){if(ar(t,s,r)){ir(null,null,r),this.logger.log(3,(()=>"Repeated command ("+Qa([t,s])+") is dropped"));continue}ir(t,s,this.cmdHistory),i=this.parseCmd(t,s),i||(i=this.parseMidrow(t,s)),i||(i=this.parsePAC(t,s)),i||(i=this.parseBackgroundAttributes(t,s))}else ir(null,null,r);if(!i&&(a=this.parseChars(t,s),a)){const e=this.currentChannel;e&&e>0?this.channels[e].insertChars(a):this.logger.log(2,"No channel found yet. TEXT-MODE?")}i||a||this.logger.log(2,(()=>"Couldn't parse cleaned data "+Qa([t,s])+" orig: "+Qa([n[e],n[e+1]])))}}parseCmd(e,n){if(!((20===e||28===e||21===e||29===e)&&n>=32&&n<=47||(23===e||31===e)&&n>=33&&n<=35))return!1;const t=20===e||21===e||23===e?1:2,s=this.channels[t];return 20===e||21===e||28===e||29===e?32===n?s.ccRCL():33===n?s.ccBS():34===n?s.ccAOF():35===n?s.ccAON():36===n?s.ccDER():37===n?s.ccRU(2):38===n?s.ccRU(3):39===n?s.ccRU(4):40===n?s.ccFON():41===n?s.ccRDC():42===n?s.ccTR():43===n?s.ccRTD():44===n?s.ccEDM():45===n?s.ccCR():46===n?s.ccENM():47===n&&s.ccEOC():s.ccTO(n-32),this.currentChannel=t,!0}parseMidrow(e,n){let t=0;if((17===e||25===e)&&n>=32&&n<=47){if(t=17===e?1:2,t!==this.currentChannel)return this.logger.log(0,"Mismatch channel in midrow parsing"),!1;const s=this.channels[t];return!!s&&(s.ccMIDROW(n),this.logger.log(3,(()=>"MIDROW ("+Qa([e,n])+")")),!0)}return!1}parsePAC(e,n){let t;if(!((e>=17&&e<=23||e>=25&&e<=31)&&n>=64&&n<=127||(16===e||24===e)&&n>=64&&n<=95))return!1;const s=e<=23?1:2;t=n>=64&&n<=95?1===s?Ka[e]:Ha[e]:1===s?Va[e]:Ya[e];const i=this.channels[s];return!!i&&(i.setPAC(this.interpretPAC(t,n)),this.currentChannel=s,!0)}interpretPAC(e,n){let t;const s={color:null,italics:!1,indent:null,underline:!1,row:e};return t=n>95?n-96:n-64,s.underline=!(1&~t),t<=13?s.color=["white","green","blue","cyan","red","yellow","magenta","white"][Math.floor(t/2)]:t<=15?(s.italics=!0,s.color="white"):s.indent=4*Math.floor((t-16)/2),s}
vendor: 7,704 bytes, line 2
2parseChars(e,n){let t,s=null,i=null;if(e>=25?(t=2,i=e-8):(t=1,i=e),i>=17&&i<=19){let e;e=17===i?n+80:18===i?n+112:n+144,this.logger.log(2,(()=>"Special char '"+Ga(e)+"' in channel "+t)),s=[e]}else e>=32&&e<=127&&(s=0===n?[e]:[e,n]);return s&&this.logger.log(3,(()=>"Char codes =  "+Qa(s).join(","))),s}parseBackgroundAttributes(e,n){if(!((16===e||24===e)&&n>=32&&n<=47||(23===e||31===e)&&n>=45&&n<=47))return!1;let t;const s={};16===e||24===e?(t=Math.floor((n-32)/2),s.background=Wa[t],n%2==1&&(s.background=s.background+"_semi")):45===n?s.background="transparent":(s.foreground="black",47===n&&(s.underline=!0));const i=e<=23?1:2;return this.channels[i].setBkgData(s),!0}reset(){for(let e=0;e<Object.keys(this.channels).length;e++){const n=this.channels[e];n&&n.reset()}ir(null,null,this.cmdHistory)}cueSplitAtTime(e){for(let n=0;n<this.channels.length;n++){const t=this.channels[n];t&&t.cueSplitAtTime(e)}}}function ir(e,n,t){t.a=e,t.b=n}function ar(e,n,t){return t.a===e&&t.b===n}var rr=function(){if(null!=Wn&&Wn.VTTCue)return self.VTTCue;const e=["","lr","rl"],n=["start","middle","end","left","right"];function t(e,n){if("string"!=typeof n)return!1;if(!Array.isArray(e))return!1;const t=n.toLowerCase();return!!~e.indexOf(t)&&t}function s(e){return t(n,e)}function i(e,...n){let t=1;for(;t<arguments.length;t++){const n=arguments[t];for(const t in n)e[t]=n[t]}return e}function a(n,a,r){const o=this,l={enumerable:!0};o.hasBeenReset=!1;let c="",d=!1,u=n,p=a,h=r,m=null,v="",g=!0,f="auto",_="start",b=50,y="middle",w=50,k="middle";Object.defineProperty(o,"id",i({},l,{get:function(){return c},set:function(e){c=""+e}})),Object.defineProperty(o,"pauseOnExit",i({},l,{get:function(){return d},set:function(e){d=!!e}})),Object.defineProperty(o,"startTime",i({},l,{get:function(){return u},set:function(e){if("number"!=typeof e)throw new TypeError("Start time must be set to a number.");u=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"endTime",i({},l,{get:function(){return p},set:function(e){if("number"!=typeof e)throw new TypeError("End time must be set to a number.");p=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"text",i({},l,{get:function(){return h},set:function(e){h=""+e,this.hasBeenReset=!0}})),Object.defineProperty(o,"region",i({},l,{get:function(){return m},set:function(e){m=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"vertical",i({},l,{get:function(){return v},set:function(n){const s=function(n){return t(e,n)}(n);if(!1===s)throw new SyntaxError("An invalid or illegal string was specified.");v=s,this.hasBeenReset=!0}})),Object.defineProperty(o,"snapToLines",i({},l,{get:function(){return g},set:function(e){g=!!e,this.hasBeenReset=!0}})),Object.defineProperty(o,"line",i({},l,{get:function(){return f},set:function(e){if("number"!=typeof e&&"auto"!==e)throw new SyntaxError("An invalid number or illegal string was specified.");f=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"lineAlign",i({},l,{get:function(){return _},set:function(e){const n=s(e);if(!n)throw new SyntaxError("An invalid or illegal string was specified.");_=n,this.hasBeenReset=!0}})),Object.defineProperty(o,"position",i({},l,{get:function(){return b},set:function(e){if(e<0||e>100)throw new Error("Position must be between 0 and 100.");b=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"positionAlign",i({},l,{get:function(){return y},set:function(e){const n=s(e);if(!n)throw new SyntaxError("An invalid or illegal string was specified.");y=n,this.hasBeenReset=!0}})),Object.defineProperty(o,"size",i({},l,{get:function(){return w},set:function(e){if(e<0||e>100)throw new Error("Size must be between 0 and 100.");w=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"align",i({},l,{get:function(){return k},set:function(e){const n=s(e);if(!n)throw new SyntaxError("An invalid or illegal string was specified.");k=n,this.hasBeenReset=!0}})),o.displayState=void 0}return a.prototype.getCueAsHTML=function(){return self.WebVTT.convertCueToDOMTree(self,this.text)},a}();class or{decode(e,n){if(!e)return"";if("string"!=typeof e)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(e))}}function lr(e){function n(e,n,t,s){return 3600*(0|e)+60*(0|n)+(0|t)+parseFloat(s||0)}const t=e.match(/^(?:(\d+):)?(\d{2}):(\d{2})(\.\d+)?/);return t?parseFloat(t[2])>59?n(t[2],t[3],0,t[4]):n(t[1],t[2],t[3],t[4]):null}class cr{constructor(){this.values=Object.create(null)}set(e,n){this.get(e)||""===n||(this.values[e]=n)}get(e,n,t){return t?this.has(e)?this.values[e]:n[t]:this.has(e)?this.values[e]:n}has(e){return e in this.values}alt(e,n,t){for(let s=0;s<t.length;++s)if(n===t[s]){this.set(e,n);break}}integer(e,n){/^-?\d+$/.test(n)&&this.set(e,parseInt(n,10))}percent(e,n){if(/^([\d]{1,3})(\.[\d]*)?%$/.test(n)){const t=parseFloat(n);if(t>=0&&t<=100)return this.set(e,t),!0}return!1}}function dr(e,n,t,s){const i=s?e.split(s):[e];for(const e in i){if("string"!=typeof i[e])continue;const s=i[e].split(t);2===s.length&&n(s[0],s[1])}}const ur=new rr(0,0,""),pr="middle"===ur.align?"middle":"center";function hr(e,n,t){const s=e;function i(){const n=lr(e);if(null===n)throw new Error("Malformed timestamp: "+s);return e=e.replace(/^[^\sa-zA-Z-]+/,""),n}function a(){e=e.replace(/^\s+/,"")}if(a(),n.startTime=i(),a(),"--\x3e"!==e.slice(0,3))throw new Error("Malformed time stamp (time stamps must be separated by '--\x3e'): "+s);e=e.slice(3),a(),n.endTime=i(),a(),function(e,n){const s=new cr;dr(e,(function(e,n){let i;switch(e){case"region":for(let i=t.length-1;i>=0;i--)if(t[i].id===n){s.set(e,t[i].region);break}break;case"vertical":s.alt(e,n,["rl","lr"]);break;case"line":i=n.split(","),s.integer(e,i[0]),s.percent(e,i[0])&&s.set("snapToLines",!1),s.alt(e,i[0],["auto"]),2===i.length&&s.alt("lineAlign",i[1],["start",pr,"end"]);break;case"position":i=n.split(","),s.percent(e,i[0]),2===i.length&&s.alt("positionAlign",i[1],["start",pr,"end","line-left","line-right","auto"]);break;case"size":s.percent(e,n);break;case"align":s.alt(e,n,["start",pr,"end","left","right"])}}),/:/,/\s/),n.region=s.get("region",null),n.vertical=s.get("vertical","");let i=s.get("line","auto");"auto"===i&&-1===ur.line&&(i=-1),n.line=i,n.lineAlign=s.get("lineAlign","start"),n.snapToLines=s.get("snapToLines",!0),n.size=s.get("size",100),n.align=s.get("align",pr);let a=s.get("position","auto");"auto"===a&&50===ur.position&&(a="start"===n.align||"left"===n.align?0:"end"===n.align||"right"===n.align?100:50),n.position=a}(e,n)}function mr(e){return e.replace(/<br(?: \/)?>/gi,"\n")}class vr{constructor(){this.state="INITIAL",this.buffer="",this.decoder=new or,this.regionList=[],this.cue=null,this.oncue=void 0,this.onparsingerror=void 0,this.onflush=void 0}parse(e){const n=this;function t(){let e=n.buffer,t=0;for(e=mr(e);t<e.length&&"\r"!==e[t]&&"\n"!==e[t];)++t;const s=e.slice(0,t);return"\r"===e[t]&&++t,"\n"===e[t]&&++t,n.buffer=e.slice(t),s}e&&(n.buffer+=n.decoder.decode(e,{stream:!0}));try{let e="";if("INITIAL"===n.state){if(!/\r\n|\n/.test(n.buffer))return this;e=t();const s=e.match(/^()?WEBVTT([ \t].*)?$/);if(null==s||!s[0])throw new Error("Malformed WebVTT signature.");n.state="HEADER"}let s=!1;for(;n.buffer;){if(!/\r\n|\n/.test(n.buffer))return this;switch(s?s=!1:e=t(),n.state){case"HEADER":/:/.test(e)?dr(e,(function(e,n){}),/:/):e||(n.state="ID");continue;case"NOTE":e||(n.state="ID");continue;case"ID":if(/^NOTE($|[ \t])/.test(e)){n.state="NOTE";break}if(!e)continue;if(n.cue=new rr(0,0,""),n.state="CUE",-1===e.indexOf("--\x3e")){n.cue.id=e;continue}case"CUE":if(!n.cue){n.state="BADCUE";continue}try{hr(e,n.cue,n.regionList)}catch(e){n.cue=null,n.state="BADCUE";continue}n.state="CUETEXT";continue;case"CUETEXT":{const t=-1!==e.indexOf("--\x3e");
2if(!e||t&&(s=!0)){n.oncue&&n.cue&&n.oncue(n.cue),n.cue=null,n.state="ID";continue}if(null===n.cue)continue;n.cue.text&&(n.cue.text+="\n"),n.cue.text+=e}continue;case"BADCUE":e||(n.state="ID")}}}catch(e){"CUETEXT"===n.state&&n.cue&&n.oncue&&n.oncue(n.cue),n.cue=null,n.state="INITIAL"===n.state?"BADWEBVTT":"BADCUE"}return this}flush(){const e=this;try{if((e.cue||"HEADER"===e.state)&&(e.buffer+="\n\n",e.parse()),"INITIAL"===e.state||"BADWEBVTT"===e.state)throw new Error("Malformed WebVTT signature.")}catch(n){e.onparsingerror&&e.onparsingerror(n)}return e.onflush&&e.onflush(),this}}const gr=/\r\n|\n\r|\n|\r/g,fr=function(e,n,t=0){return e.slice(t,t+n.length)===n};function _r(e,n,t){return Sa(e.toString())+Sa(n.toString())+Sa(t)}const br="stpp.ttml.im1t",yr=/^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/,wr=/^(\d*(?:\.\d*)?)(h|m|s|ms|f|t)$/,kr={left:"start",center:"center",right:"end",start:"start",end:"end"};function Tr(e,n,t,s){const i=te(new Uint8Array(e),["mdat"]);if(0===i.length)return void s(new Error("Could not parse IMSC1 mdat"));const a=i.map((e=>L(e))),r=function(e,n,t=1,s=!1){return ei(e,n,1/t,s)}(n.baseTime,1,n.timescale);try{a.forEach((e=>t(function(e,n){const t=(new DOMParser).parseFromString(e,"text/xml").getElementsByTagName("tt")[0];if(!t)throw new Error("Invalid ttml");const s={frameRate:30,subFrameRate:1,frameRateMultiplier:0,tickRate:0},i=Object.keys(s).reduce(((e,n)=>(e[n]=t.getAttribute(`ttp:${n}`)||s[n],e)),{}),a="preserve"!==t.getAttribute("xml:space"),r=xr(Er(t,"styling","style")),o=xr(Er(t,"layout","region")),l=Er(t,"body","[begin]");return[].map.call(l,(e=>{const t=Sr(e,a);if(!t||!e.hasAttribute("begin"))return null;const s=Cr(e.getAttribute("begin"),i),l=Cr(e.getAttribute("dur"),i);let c=Cr(e.getAttribute("end"),i);if(null===s)throw Lr(e);if(null===c){if(null===l)throw Lr(e);c=s+l}const d=new rr(s-n,c-n,t);d.id=_r(d.startTime,d.endTime,d.text);const u=function(e,n,t){const s="http://www.w3.org/ns/ttml#styling";let i=null;const a=null!=e&&e.hasAttribute("style")?e.getAttribute("style"):null;return a&&t.hasOwnProperty(a)&&(i=t[a]),["displayAlign","textAlign","color","backgroundColor","fontSize","fontFamily"].reduce(((t,a)=>{const r=Ar(n,s,a)||Ar(e,s,a)||Ar(i,s,a);return r&&(t[a]=r),t}),{})}(o[e.getAttribute("region")],r[e.getAttribute("style")],r),{textAlign:p}=u;if(p){const e=kr[p];e&&(d.lineAlign=e),d.align=p}return g(d,u),d})).filter((e=>null!==e))}(e,r))))}catch(e){s(e)}}function Er(e,n,t){const s=e.getElementsByTagName(n)[0];return s?[].slice.call(s.querySelectorAll(t)):[]}function xr(e){return e.reduce(((e,n)=>{const t=n.getAttribute("xml:id");return t&&(e[t]=n),e}),{})}function Sr(e,n){return[].slice.call(e.childNodes).reduce(((e,t,s)=>{var i;return"br"===t.nodeName&&s?e+"\n":null!=(i=t.childNodes)&&i.length?Sr(t,n):n?e+t.textContent.trim().replace(/\s+/g," "):e+t.textContent}),"")}function Ar(e,n,t){return e&&e.hasAttributeNS(n,t)?e.getAttributeNS(n,t):null}function Lr(e){return new Error(`Could not parse ttml timestamp ${e}`)}function Cr(e,n){if(!e)return null;let t=lr(e);return null===t&&(yr.test(e)?t=function(e,n){const t=yr.exec(e),s=(0|t[4])+(0|t[5])/n.subFrameRate;return 3600*(0|t[1])+60*(0|t[2])+(0|t[3])+s/n.frameRate}(e,n):wr.test(e)&&(t=function(e,n){const t=wr.exec(e),s=Number(t[1]);switch(t[2]){case"h":return 3600*s;case"m":return 60*s;case"ms":return 1e3*s;case"f":return s/n.frameRate;case"t":return s/n.tickRate}return s}(e,n))),t}class Rr{constructor(e,n){this.timelineController=void 0,this.cueRanges=[],this.trackName=void 0,this.startTime=null,this.endTime=null,this.screen=null,this.timelineController=e,this.trackName=n}dispatchCue(){null!==this.startTime&&(this.timelineController.addCues(this.trackName,this.startTime,this.endTime,this.screen,this.cueRanges),this.startTime=null)}newCue(e,n,t){(null===this.startTime||this.startTime>e)&&(this.startTime=e),this.endTime=n,this.screen=t,this.timelineController.createCaptionsTrack(this.trackName)}reset(){this.cueRanges=[],this.startTime=null}}function Ir(e){return e.characteristics&&/transcribes-spoken-dialog/gi.test(e.characteristics)&&/describes-music-and-sound/gi.test(e.characteristics)?"captions":"subtitles"}function Pr(e,n){return!!e&&e.kind===Ir(n)&&Ti(n,e)}const Dr=/\s/,Or={newCue(e,n,t,s){const i=[];let a,r,o,l,c;const d=self.VTTCue||self.TextTrackCue;for(let p=0;p<s.rows.length;p++)if(a=s.rows[p],o=!0,l=0,c="",!a.isEmpty()){var u;for(let e=0;e<a.chars.length;e++)Dr.test(a.chars[e].uchar)&&o?l++:(c+=a.chars[e].uchar,o=!1);a.cueStartTime=n,n===t&&(t+=1e-4),l>=16?l--:l++;const s=mr(c.trim()),h=_r(n,t,s);null!=e&&null!=(u=e.cues)&&u.getCueById(h)||(r=new d(n,t,s),r.id=h,r.line=p+1,r.align="left",r.position=10+Math.min(80,10*Math.floor(8*l/32)),i.push(r))}return e&&i.length&&(i.sort(((e,n)=>"auto"===e.line||"auto"===n.line?0:e.line>8&&n.line>
vendor: 17,690 bytes, line 2
28?n.line-e.line:e.line-n.line)),i.forEach((n=>ka(e,n)))),i}},Mr=/(\d+)-(\d+)\/(\d+)/;class Fr{constructor(e){this.fetchSetup=void 0,this.requestTimeout=void 0,this.request=null,this.response=null,this.controller=void 0,this.context=null,this.config=null,this.callbacks=null,this.stats=void 0,this.loader=null,this.fetchSetup=e.fetchSetup||Nr,this.controller=new self.AbortController,this.stats=new B}destroy(){this.loader=this.callbacks=this.context=this.config=this.request=null,this.abortInternal(),this.response=null,this.fetchSetup=this.controller=this.stats=null}abortInternal(){this.controller&&!this.stats.loading.end&&(this.stats.aborted=!0,this.controller.abort())}abort(){var e;this.abortInternal(),null!=(e=this.callbacks)&&e.onAbort&&this.callbacks.onAbort(this.stats,this.context,this.response)}load(n,t,s){const i=this.stats;if(i.loading.start)throw new Error("Loader can only be used once.");i.loading.start=self.performance.now();const a=function(e,n){const t={method:"GET",mode:"cors",credentials:"same-origin",signal:n,headers:new self.Headers(g({},e.headers))};return e.rangeEnd&&t.headers.set("Range","bytes="+e.rangeStart+"-"+String(e.rangeEnd-1)),t}(n,this.controller.signal),r="arraybuffer"===n.responseType,o=r?"byteLength":"length",{maxTimeToFirstByteMs:l,maxLoadTimeMs:c}=t.loadPolicy;this.context=n,this.config=t,this.callbacks=s,this.request=this.fetchSetup(n,a),self.clearTimeout(this.requestTimeout),t.timeout=l&&e(l)?l:c,this.requestTimeout=self.setTimeout((()=>{this.callbacks&&(this.abortInternal(),this.callbacks.onTimeout(i,n,this.response))}),t.timeout),(vi(this.request)?this.request.then(self.fetch):self.fetch(this.request)).then((s=>{var a;this.response=this.loader=s;const o=Math.max(self.performance.now(),i.loading.start);if(self.clearTimeout(this.requestTimeout),t.timeout=c,this.requestTimeout=self.setTimeout((()=>{this.callbacks&&(this.abortInternal(),this.callbacks.onTimeout(i,n,this.response))}),c-(o-i.loading.start)),!s.ok){const{status:e,statusText:n}=s;throw new $r(n||"fetch, bad network response",e,s)}i.loading.first=o,i.total=function(n){const t=n.get("Content-Range");if(t){const n=function(e){const n=Mr.exec(e);if(n)return parseInt(n[2])-parseInt(n[1])+1}(t);if(e(n))return n}const s=n.get("Content-Length");if(s)return parseInt(s)}(s.headers)||i.total;const l=null==(a=this.callbacks)?void 0:a.onProgress;return l&&e(t.highWaterMark)?this.loadProgressively(s,i,n,t.highWaterMark,l):r?s.arrayBuffer():"json"===n.responseType?s.json():s.text()})).then((s=>{var a,r;const l=this.response;if(!l)throw new Error("loader destroyed");self.clearTimeout(this.requestTimeout),i.loading.end=Math.max(self.performance.now(),i.loading.first);const c=s[o];c&&(i.loaded=i.total=c);const d={url:l.url,data:s,code:l.status},u=null==(a=this.callbacks)?void 0:a.onProgress;u&&!e(t.highWaterMark)&&u(i,n,s,l),null==(r=this.callbacks)||r.onSuccess(d,i,n,l)})).catch((e=>{var t;if(self.clearTimeout(this.requestTimeout),i.aborted)return;const s=e&&e.code||0,a=e?e.message:null;null==(t=this.callbacks)||t.onError({code:s,text:a},n,e?e.details:null,i)}))}getCacheAge(){let e=null;if(this.response){const n=this.response.headers.get("age");e=n?parseFloat(n):null}return e}getResponseHeader(e){return this.response?this.response.headers.get(e):null}loadProgressively(e,n,t,s=0,i){const a=new Kt,r=e.body.getReader(),o=()=>r.read().then((r=>{if(r.done)return a.dataLength&&i(n,t,a.flush().buffer,e),Promise.resolve(new ArrayBuffer(0));const l=r.value,c=l.length;return n.loaded+=c,c<s||a.dataLength?(a.push(l),a.dataLength>=s&&i(n,t,a.flush().buffer,e)):i(n,t,l.buffer,e),o()})).catch((()=>Promise.reject()));return o()}}function Nr(e,n){return new self.Request(e.url,n)}class $r extends Error{constructor(e,n,t){super(e),this.code=void 0,this.details=void 0,this.code=n,this.details=t}}const Br=/^age:\s*[\d.]+\s*$/im;class Ur{constructor(e){this.xhrSetup=void 0,this.requestTimeout=void 0,this.retryTimeout=void 0,this.retryDelay=void 0,this.config=null,this.callbacks=null,this.context=null,this.loader=null,this.stats=void 0,this.xhrSetup=e&&e.xhrSetup||null,this.stats=new B,this.retryDelay=0}destroy(){this.callbacks=null,this.abortInternal(),this.loader=null,this.config=null,this.context=null,this.xhrSetup=null}abortInternal(){const e=this.loader;self.clearTimeout(this.requestTimeout),self.clearTimeout(this.retryTimeout),e&&(e.onreadystatechange=null,e.onprogress=null,4!==e.readyState&&(this.stats.aborted=!0,e.abort()))}abort(){var e;this.abortInternal(),null!=(e=this.callbacks)&&e.onAbort&&this.callbacks.onAbort(this.stats,this.context,this.loader)}load(e,n,t){if(this.stats.loading.start)throw new Error("Loader can only be used once.");this.stats.loading.start=self.performance.now(),this.context=e,this.config=n,this.callbacks=t,this.loadInternal()}loadInternal(){const{config:e,context:n}=this;if(!e||!n)return;const t=this.loader=new self.XMLHttpRequest,s=this.stats;s.loading.first=0,s.loaded=0,s.aborted=!1;const i=this.xhrSetup;i?Promise.resolve().then((()=>{if(this.loader===t&&!this.stats.aborted)return i(t,n.url)})).catch((e=>{if(this.loader===t&&!this.stats.aborted)return t.open("GET",n.url,!0),i(t,n.url)})).then((()=>{this.loader!==t||this.stats.aborted||this.openAndSendXhr(t,n,e)})).catch((e=>{var i;null==(i=this.callbacks)||i.onError({code:t.status,text:e.message},n,t,s)})):this.openAndSendXhr(t,n,e)}openAndSendXhr(n,t,s){n.readyState||n.open("GET",t.url,!0);const i=t.headers,{maxTimeToFirstByteMs:a,maxLoadTimeMs:r}=s.loadPolicy;if(i)for(const e in i)n.setRequestHeader(e,i[e]);t.rangeEnd&&n.setRequestHeader("Range","bytes="+t.rangeStart+"-"+(t.rangeEnd-1)),n.onreadystatechange=this.readystatechange.bind(this),n.onprogress=this.loadprogress.bind(this),n.responseType=t.responseType,self.clearTimeout(this.requestTimeout),s.timeout=a&&e(a)?a:r,this.requestTimeout=self.setTimeout(this.loadtimeout.bind(this),s.timeout),n.send()}readystatechange(){const{context:e,loader:n,stats:t}=this;if(!e||!n)return;const s=n.readyState,i=this.config;if(!t.aborted&&s>=2&&(0===t.loading.first&&(t.loading.first=Math.max(self.performance.now(),t.loading.start),i.timeout!==i.loadPolicy.maxLoadTimeMs&&(self.clearTimeout(this.requestTimeout),i.timeout=i.loadPolicy.maxLoadTimeMs,this.requestTimeout=self.setTimeout(this.loadtimeout.bind(this),i.loadPolicy.maxLoadTimeMs-(t.loading.first-t.loading.start)))),4===s)){self.clearTimeout(this.requestTimeout),n.onreadystatechange=null,n.onprogress=null;const s=n.status,l="text"===n.responseType?n.responseText:null;if(s>=200&&s<300){const i=null!=l?l:n.response;if(null!=i){var a,r;t.loading.end=Math.max(self.performance.now(),t.loading.first);const o="arraybuffer"===n.responseType?i.byteLength:i.length;t.loaded=t.total=o,t.bwEstimate=8e3*t.total/(t.loading.end-t.loading.first);const l=null==(a=this.callbacks)?void 0:a.onProgress;l&&l(t,e,i,n);const c={url:n.responseURL,data:i,code:s};return void(null==(r=this.callbacks)||r.onSuccess(c,t,e,n))}}const c=i.loadPolicy.errorRetry;var o;un(c,t.retry,!1,{url:e.url,data:void 0,code:s})?this.retry(c):(x.error(`${s} while loading ${e.url}`),null==(o=this.callbacks)||o.onError({code:s,text:n.statusText},e,n,t))}}loadtimeout(){if(!this.config)return;const e=this.config.loadPolicy.timeoutRetry;if(un(e,this.stats.retry,!0))this.retry(e);else{var n;x.warn(`timeout while loading ${null==(n=this.context)?void 0:n.url}`);const e=this.callbacks;e&&(this.abortInternal(),e.onTimeout(this.stats,this.context,this.loader))}}retry(e){const{context:n,stats:t}=this;this.retryDelay=cn(e,t.retry),t.retry++,x.warn(`${status?"HTTP Status "+status:"Timeout"} while loading ${null==n?void 0:n.url}, retrying ${t.retry}/${e.maxNumRetry} in ${this.retryDelay}ms`),this.abortInternal(),this.loader=null,self.clearTimeout(this.retryTimeout),this.retryTimeout=self.setTimeout(this.loadInternal.bind(this),this.retryDelay)}loadprogress(e){const n=this.stats;n.loaded=e.loaded,e.lengthComputable&&(n.total=e.total)}getCacheAge(){let e=null;if(this.loader&&Br.test(this.loader.getAllResponseHeaders())){const n=this.loader.getResponseHeader("age");e=n?parseFloat(n):null}return e}getResponseHeader(e){return this.loader&&new RegExp(`^${e}:\\s*[\\d.]+\\s*$`,"im").test(this.loader.getAllResponseHeaders())?this.loader.getResponseHeader(e):null}}const jr=_(_({autoStartLoad:!0,startPosition:-1,defaultAudioCodec:void 0,debug:!1,capLevelOnFPSDrop:!1,capLevelToPlayerSize:!1,ignoreDevicePixelRatio:!1,maxDevicePixelRatio:Number.POSITIVE_INFINITY,preferManagedMediaSource:!0,initialLiveManifestSize:1,maxBufferLength:30,backBufferLength:1/0,frontBufferFlushThreshold:1/0,startOnSegmentBoundary:!1,maxBufferSize:6e7,maxFragLookUpTolerance:.25,maxBufferHole:.1,detectStallWithCurrentTimeMs:1250,highBufferWatchdogPeriod:2,nudgeOffset:.1,nudgeMaxRetry:3,nudgeOnVideoHole:!0,liveSyncMode:"edge",liveSyncDurationCount:3,liveSyncOnStallIncrease:1,liveMaxLatencyDurationCount:1/0,liveSyncDuration:void 0,liveMaxLatencyDuration:void 0,maxLiveSyncPlaybackRate:1,liveDurationInfinity:!1,liveBackBufferLength:null,maxMaxBufferLength:600,enableWorker:!0,workerPath:null,enableSoftwareAES:!0,startLevel:void 0,startFragPrefetch:!1,fpsDroppedMonitoringPeriod:5e3,fpsDroppedMonitoringThreshold:.2,appendErrorMaxRetry:3,ignorePlaylistParsingErrors:!1,loader:Ur,fLoader:void 0,pLoader:void 0,xhrSetup:void 0,licenseXhrSetup:void 0,licenseResponseCallback:void 0,abrController:class extends b{constructor(n){super("abr",n.logger),this.hls=void 0,this.lastLevelLoadSec=0,this.lastLoadedFragLevel=-1,this.firstSelection=-1,this._nextAutoLevel=-1,this.nextAutoLevelKey="",this.audioTracksByGroup=null,this.codecTiers=null,this.timer=-1,this.fragCurrent=null,this.partCurrent=null,this.bitrateTestDelay=0,this.rebufferNotice=-1,this.supportedCache={},this.bwEstimator=void 0,this._abandonRulesCheck=n=>{var t;const{fragCurrent:s,partCurrent:i,hls:r}=this,{autoLevelEnabled:o,media:l}=r;if(!s||!l)return;const c=performance.now(),d=i?i.stats:s.stats,u=i?i.duration:s.duration,p=c-d.loading.start,h=r.minAutoLevel,m=s.level,v=this._nextAutoLevel;if(d.aborted||d.loaded&&d.loaded===d.total||m<=h)return this.clearTimer(),void(this._nextAutoLevel=-1);if(!o)return;const g=v>-1&&v!==m,f=!!n||g;if(!f&&(l.paused||!l.playbackRate||!l.readyState))return;const _=r.mainForwardBufferInfo;if(!f&&null===_)return;const b=this.bwEstimator.getEstimateTTFB(),y=Math.abs(l.playbackRate);if(p<=Math.max(b,u/(2*y)*1e3))return;const w=_?_.len/y:0,k=d.loading.first?d.loading.first-d.loading.start:-1,T=d.loaded&&k>-1,E=this.getBwEstimate(),x=r.levels,S=x[m],A=Math.max(d.loaded,Math.round(u*(s.bitrate||S.averageBitrate)/8));let L=T?p-k:p;L<1&&T&&(L=Math.min(p,8*d.loaded/E));const C=T?1e3*d.loaded/L:0,R=b/1e3,I=C?(A-d.loaded)/C:8*A/E+R;if(I<=w)return;const P=C?8*C:E,D=!0===(null==(t=(null==n?void 0:n.details)||this.hls.latestLevelDetails)?void 0:t.live),O=this.hls.config.abrBandWidthUpFactor;let M,F=Number.POSITIVE_INFINITY;for(M=m-1;M>h;M--){const e=x[M].maxBitrate,n=!x[M].details||D;if(F=this.getTimeToLoadFrag(R,P,u*e,n),F<Math.min(w,u+R))break}if(F>=I)return;if(F>10*u)return;T?this.bwEstimator.sample(p-Math.min(b,k),d.loaded):this.bwEstimator.sampleTTFB(p);const N=x[M].maxBitrate;this.getBwEstimate()*O>N&&this.resetEstimator(N);const $=this.findBestLevel(N,h,M,0,w,1,1);$>-1&&(M=$),this.warn(`Fragment ${s.sn}${i?" part "+i.index:""} of level ${m} is loading too slowly;\n      Fragment duration: ${s.duration.toFixed(3)}\n      Time to underbuffer: ${w.toFixed(3)} s\n      Estimated load time for current fragment: ${I.toFixed(3)} s\n      Estimated load time for down switch fragment: ${F.toFixed(3)} s\n      TTFB estimate: ${0|k} ms\n      Current BW estimate: ${e(E)?0|E:"Unknown"} bps\n      New BW estimate: ${0|this.getBwEstimate()} bps\n      Switching to level ${M} @ ${0|N} bps`),r.nextLoadLevel=r.nextAutoLevel=M,this.clearTimer();const B=()=>{if(this.clearTimer(),this.fragCurrent===s&&this.hls.loadLevel===M&&M>0){const e=this.getStarvationDelay();if(this.warn(`Aborting inflight request ${M>0?"and switching down":""}\n      Fragment duration: ${s.duration.toFixed(3)} s\n      Time to underbuffer: ${e.toFixed(3)} s`),s.abortRequests(),this.fragCurrent=this.partCurrent=null,M>h){let n=this.findBestLevel(this.hls.levels[h].bitrate,h,M,0,e,1,1);-1===n&&(n=h),this.hls.nextLoadLevel=this.hls.nextAutoLevel=n,this.resetEstimator(this.hls.levels[n].bitrate)}}};g||I>2*F?B():this.timer=self.setInterval(B,1e3*F),r.trigger(a.FRAG_LOAD_EMERGENCY_ABORTED,{frag:s,part:i,stats:d})},this.hls=n,this.bwEstimator=this.initEstimator(),this.registerListeners()}resetEstimator(e){e&&(this.log(`setting initial bwe to ${e}`),this.hls.config.abrEwmaDefaultEstimate=e),this.firstSelection=-1,this.bwEstimator=this.initEstimator()}initEstimator(){const e=this.hls.config;return new m(e.abrEwmaSlowVoD,e.abrEwmaFastVoD,e.abrEwmaDefaultEstimate)}registerListeners(){const{hls:e}=this;e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.FRAG_LOADING,this.onFragLoading,this),e.on(a.FRAG_LOADED,this.onFragLoaded,this),e.on(a.FRAG_BUFFERED,this.onFragBuffered,this),e.on(a.LEVEL_SWITCHING,this.onLevelSwitching,this),e.on(a.LEVEL_LOADED,this.onLevelLoaded,this),e.on(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.on(a.MAX_AUTO_LEVEL_UPDATED,this.onMaxAutoLevelUpdated,this),e.on(a.ERROR,this.onError,this)}unregisterListeners(){const{hls:e}=this;e&&(e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.FRAG_LOADING,this.onFragLoading,this),e.off(a.FRAG_LOADED,this.onFragLoaded,this),e.off(a.FRAG_BUFFERED,this.onFragBuffered,this),e.off(a.LEVEL_SWITCHING,this.onLevelSwitching,this),e.off(a.LEVEL_LOADED,this.onLevelLoaded,this),e.off(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.off(a.MAX_AUTO_LEVEL_UPDATED,this.onMaxAutoLevelUpdated,this),e.off(a.ERROR,this.onError,this))}destroy(){this.unregisterListeners(),this.clearTimer(),this.hls=this._abandonRulesCheck=this.supportedCache=null,this.fragCurrent=this.partCurrent=null}onManifestLoading(e,n){this.lastLoadedFragLevel=-1,this.firstSelection=-1,this.lastLevelLoadSec=0,this.supportedCache={},this.fragCurrent=this.partCurrent=null,this.onLevelsUpdated(),this.clearTimer()}onLevelsUpdated(){this.lastLoadedFragLevel>-1&&this.fragCurrent&&(this.lastLoadedFragLevel=this.fragCurrent.level),this._nextAutoLevel=-1,this.onMaxAutoLevelUpdated(),this.codecTiers=null,this.audioTracksByGroup=null}onMaxAutoLevelUpdated(){this.firstSelection=-1,this.nextAutoLevelKey=""}onFragLoading(e,n){const t=n.frag;var s;this.ignoreFragment(t)||(t.bitrateTest||(this.fragCurrent=t,this.partCurrent=null!=(s=n.part)?s:null),this.clearTimer(),this.timer=self.setInterval(this._abandonRulesCheck,100))}onLevelSwitching(e,n){this.clearTimer()}onError(e,n){if(!n.fatal)switch(n.details){case i.BUFFER_ADD_CODEC_ERROR:case i.BUFFER_APPEND_ERROR:this.lastLoadedFragLevel=-1,this.firstSelection=-1;break;case i.FRAG_LOAD_TIMEOUT:{const e=n.frag,{fragCurrent:t,partCurrent:s}=this;if(e&&t&&e.sn===t.sn&&e.level===t.level){const n=performance.now(),t=s?s.stats:e.stats,i=n-t.loading.start,a=t.loading.first?t.loading.first-t.loading.start:-1;if(t.loaded&&a>-1){const e=this.bwEstimator.getEstimateTTFB();this.bwEstimator.sample(i-Math.min(e,a),t.loaded)}else this.bwEstimator.sampleTTFB(i)}break}}}getTimeToLoadFrag(e,n,t,s){return e+t/n+(s?e+this.lastLevelLoadSec:0)}onLevelLoaded(n,t){const s=this.hls.config,{loading:i}=t.stats,a=i.end-i.first;e(a)&&(this.lastLevelLoadSec=a/1e3),t.details.live?this.bwEstimator.update(s.abrEwmaSlowLive,s.abrEwmaFastLive):this.bwEstimator.update(s.abrEwmaSlowVoD,s.abrEwmaFastVoD),this.timer>-1&&this._abandonRulesCheck(t.levelInfo)}onFragLoaded(e,{frag:n,part:t}){const s=t?t.stats:n.stats;if(n.type===d&&this.bwEstimator.sampleTTFB(s.loading.first-s.loading.start),!this.ignoreFragment(n)){if(this.clearTimer(),n.level===this._nextAutoLevel&&(this._nextAutoLevel=-1),this.firstSelection=-1,this.hls.config.abrMaxWithRealBitrate){const e=t?t.duration:n.duration,i=this.hls.levels[n.level],a=(i.loaded?i.loaded.bytes:0)+s.loaded,r=(i.loaded?i.loaded.duration:0)+e;i.loaded={bytes:a,duration:r},i.realBitrate=Math.round(8*a/r)}if(n.bitrateTest){const e={stats:s,frag:n,part:t,id:n.type};this.onFragBuffered(a.FRAG_BUFFERED,e),n.bitrateTest=!1}else this.lastLoadedFragLevel=n.level}}onFragBuffered(e,n){const{frag:t,part:s}=n,i=null!=s&&s.stats.loaded?s.stats:t.stats;if(i.aborted)return;if(this.ignoreFragment(t))return;const a=i.parsing.end-i.loading.start-Math.min(i.loading.first-i.loading.start,this.bwEstimator.getEstimateTTFB());this.bwEstimator.sample(a,i.loaded),i.bwEstimate=this.getBwEstimate(),t.bitrateTest?this.bitrateTestDelay=a/1e3:this.bitrateTestDelay=0}ignoreFragment(e){return e.type!==d||"initSegment"===e.sn}clearTimer(){this.timer>-1&&(self.clearInterval(this.timer),this.timer=-1)}get firstAutoLevel(){const{maxAutoLevel:e,minAutoLevel:n}=this.hls,t=this.getBwEstimate(),s=this.hls.config.maxStarvationDelay,i=this.findBestLevel(t,n,e,0,s,1,1);if(i>-1)return i;const a=this.hls.firstLevel,r=Math.min(Math.max(a,n),e);return this.warn(`Could not find best starting auto level. Defaulting to first in playlist ${a} clamped to ${r}`),r}get forcedAutoLevel(){return this.nextAutoLevelKey?-1:this._nextAutoLevel}get nextAutoLevel(){const e=this.forcedAutoLevel,n=this.bwEstimator.canEstimate(),t=this.lastLoadedFragLevel>-1;if(!(-1===e||n&&t&&this.nextAutoLevelKey!==this.getAutoLevelKey()))return e;const s=n&&t?this.getNextABRAutoLevel():this.firstAutoLevel;if(-1!==e){const n=this.hls.levels;if(n.length>Math.max(e,s)&&n[e].loadError<=n[s].loadError)return e}return this._nextAutoLevel=s,this.nextAutoLevelKey=this.getAutoLevelKey(),s}getAutoLevelKey(){return`${this.getBwEstimate()}
2_${this.getStarvationDelay().toFixed(2)}`}getNextABRAutoLevel(){const{fragCurrent:e,partCurrent:n,hls:t}=this;if(t.levels.length<=1)return t.loadLevel;const{maxAutoLevel:s,config:i,minAutoLevel:a}=t,r=n?n.duration:e?e.duration:0,o=this.getBwEstimate(),l=this.getStarvationDelay();let c=i.abrBandWidthFactor,d=i.abrBandWidthUpFactor;if(l){const e=this.findBestLevel(o,a,s,l,0,c,d);if(e>=0)return this.rebufferNotice=-1,e}let u=r?Math.min(r,i.maxStarvationDelay):i.maxStarvationDelay;if(!l){const e=this.bitrateTestDelay;e&&(u=(r?Math.min(r,i.maxLoadingDelay):i.maxLoadingDelay)-e,this.info(`bitrate test took ${Math.round(1e3*e)}ms, set first fragment max fetchDuration to ${Math.round(1e3*u)} ms`),c=d=1)}const p=this.findBestLevel(o,a,s,l,u,c,d);if(this.rebufferNotice!==p&&(this.rebufferNotice=p,this.info(`${l?"rebuffering expected":"buffer is empty"}, optimal quality level ${p}`)),p>-1)return p;const h=t.levels[a],m=t.loadLevelObj;return m&&(null==h?void 0:h.bitrate)<m.bitrate?a:t.loadLevel}getStarvationDelay(){const e=this.hls,n=e.media;if(!n)return 1/0;const t=n&&0!==n.playbackRate?Math.abs(n.playbackRate):1,s=e.mainForwardBufferInfo;return(s?s.len:0)/t}getBwEstimate(){return this.bwEstimator.canEstimate()?this.bwEstimator.getEstimate():this.hls.config.abrEwmaDefaultEstimate}findBestLevel(n,t,s,i,a,r,o){var l;const c=i+a,d=this.lastLoadedFragLevel,u=-1===d?this.hls.firstLevel:d,{fragCurrent:p,partCurrent:h}=this,{levels:m,allAudioTracks:v,loadLevel:g,config:f}=this.hls;if(1===m.length)return 0;const _=m[u],b=!(null==(l=this.hls.latestLevelDetails)||!l.live),y=-1===g||-1===d;let w,k="SDR",T=(null==_?void 0:_.frameRate)||0;const{audioPreference:E,videoPreference:x}=f,S=this.audioTracksByGroup||(this.audioTracksByGroup=Ye(v));let A=-1;if(y){if(-1!==this.firstSelection)return this.firstSelection;const i=this.codecTiers||(this.codecTiers=function(e,n,t,s){return e.slice(t,s+1).reduce(((e,t,s)=>{if(!t.codecSet)return e;const i=t.audioGroups;let a=e[t.codecSet];a||(e[t.codecSet]=a={minBitrate:1/0,minHeight:1/0,minFramerate:1/0,minIndex:s,maxScore:0,videoRanges:{SDR:0},channels:{2:0},hasDefaultAudio:!i,fragmentError:0}),a.minBitrate=Math.min(a.minBitrate,t.bitrate);const r=Math.min(t.height,t.width);return a.minHeight=Math.min(a.minHeight,r),a.minFramerate=Math.min(a.minFramerate,t.frameRate),a.minIndex=Math.min(a.minIndex,s),a.maxScore=Math.max(a.maxScore,t.score),a.fragmentError+=t.fragmentError,a.videoRanges[t.videoRange]=(a.videoRanges[t.videoRange]||0)+1,i&&i.forEach((e=>{if(!e)return;const t=n.groups[e];t&&(a.hasDefaultAudio=a.hasDefaultAudio||n.hasDefaultAudio?t.hasDefault:t.hasAutoSelect||!n.hasDefaultAudio&&!n.hasAutoSelectAudio,Object.keys(t.channels).forEach((e=>{a.channels[e]=(a.channels[e]||0)+t.channels[e]})))})),e}),{})}(m,S,t,s)),a=function(n,t,s,i,a){const r=Object.keys(n),o=null==i?void 0:i.channels,l=null==i?void 0:i.audioCodec,c=null==a?void 0:a.videoCodec,d=o&&2===parseInt(o);let u=!1,p=!1,h=1/0,m=1/0,v=1/0,g=1/0,f=0,_=[];const{preferHDR:b,allowedVideoRanges:y}=function(e,n){let t=!1,s=[];if(e&&(t="SDR"!==e,s=[e]),n){s=n.allowedVideoRanges||je.slice(0);const e="SDR"!==s.join("")&&!n.videoCodec;t=void 0!==n.preferHDR?n.preferHDR:e&&function(){if("function"==typeof matchMedia){const e=matchMedia("(dynamic-range: high)"),n=matchMedia("bad query");if(e.media!==n.media)return!0===e.matches}return!1}(),t||(s=["SDR"])}return{preferHDR:t,allowedVideoRanges:s}}(t,a);for(let e=r.length;e--;){const t=n[r[e]];u||(u=t.channels[2]>0),h=Math.min(h,t.minHeight),m=Math.min(m,t.minFramerate),v=Math.min(v,t.minBitrate),y.filter((e=>t.videoRanges[e]>0)).length>0&&(p=!0)}h=e(h)?h:0,m=e(m)?m:0;const w=Math.max(1080,h),k=Math.max(30,m);v=e(v)?v:s,s=Math.max(v,s),p||(t=void 0);const T=r.length>1;return{codecSet:r.reduce(((e,t)=>{const i=n[t];if(t===e)return e;if(_=p?y.filter((e=>i.videoRanges[e]>0)):[],T){if(i.minBitrate>s)return He(t,`min bitrate of ${i.minBitrate} > current estimate of ${s}`),e;if(!i.hasDefaultAudio)return He(t,"no renditions with default or auto-select sound found"),e;if(l&&t.indexOf(l.substring(0,4))%5!=0)return He(t,`audio codec preference "${l}" not found`),e;if(o&&!d){if(!i.channels[o])return He(t,`no renditions with ${o} channel sound found (channels options: ${Object.keys(i.channels)})`),e}else if((!l||d)&&u&&0===i.channels[2])return He(t,"no renditions with stereo sound found"),e;if(i.minHeight>w)return He(t,`min resolution of ${i.minHeight} > maximum of ${w}`),e;if(i.minFramerate>k)return He(t,`min framerate of ${i.minFramerate} > maximum of ${k}`),e;if(!_.some((e=>i.videoRanges[e]>0)))return He(t,`no variants with VIDEO-RANGE of ${Ve(_)} found`),e;if(c&&t.indexOf(c.substring(0,4))%5!=0)return He(t,`video codec preference "${c}" not found`),e;if(i.maxScore<f)return He(t,`max score of ${i.maxScore} < selected max of ${f}`),e}return e&&(xe(t)>=xe(e)||i.fragmentError>n[e].fragmentError)?e:(g=i.minIndex,f=i.maxScore,t)}),void 0),videoRanges:_,preferHDR:b,minFramerate:m,minBitrate:v,minIndex:g}}(i,k,n,E,x),{codecSet:r,videoRanges:o,minFramerate:l,minBitrate:c,minIndex:d,preferHDR:u}=a;A=d,w=r,k=u?o[o.length-1]:o[0],T=l,n=Math.max(n,c),this.log(`picked start tier ${Ve(a)}`)}else w=null==_?void 0:_.codecSet,k=null==_?void 0:_.videoRange;const L=h?h.duration:p?p.duration:0,C=this.bwEstimator.getEstimateTTFB()/1e3,R=[];for(let l=s;l>=t;l--){var I,P;const t=m[l],p=l>u;if(!t)continue;
2if(f.useMediaCapabilities&&!t.supportedResult&&!t.supportedPromise){const e=navigator.mediaCapabilities;"function"==typeof(null==e?void 0:e.decodingInfo)&&Fe(t,S,k,T,n,E)?(t.supportedPromise=Ne(t,S,e,this.supportedCache),t.supportedPromise.then((e=>{if(!this.hls)return;t.supportedResult=e;const n=this.hls.levels,s=n.indexOf(t);e.error?this.warn(`MediaCapabilities decodingInfo error: "${e.error}" for level ${s} ${Ve(e)}`):e.supported?e.decodingInfoResults.some((e=>!1===e.smooth||!1===e.powerEfficient))&&this.log(`MediaCapabilities decodingInfo for level ${s} not smooth or powerEfficient: ${Ve(e)}`):(this.warn(`Unsupported MediaCapabilities decodingInfo result for level ${s} ${Ve(e)}`),s>-1&&n.length>1&&(this.log(`Removing unsupported level ${s}`),this.hls.removeLevel(s),-1===this.hls.loadLevel&&(this.hls.nextLoadLevel=0)))}))):t.supportedResult=Oe}if((w&&t.codecSet!==w||k&&t.videoRange!==k||p&&T>t.frameRate||!p&&T>0&&T<t.frameRate||null!=(I=t.supportedResult)&&null!=(P=I.decodingInfoResults)&&P.some((e=>!1===e.smooth)))&&(!y||l!==A)){R.push(l);continue}const v=t.details,_=(h?null==v?void 0:v.partTarget:null==v?void 0:v.averagetargetduration)||L;let x;x=p?o*n:r*n;const D=L&&i>=2*L&&0===a?t.averageBitrate:t.maxBitrate,O=this.getTimeToLoadFrag(C,x,D*_,void 0===v);if(x>=D&&(l===d||0===t.loadError&&0===t.fragmentError)&&(O<=C||!e(O)||b&&!this.bitrateTestDelay||O<c)){const e=this.forcedAutoLevel;return l===g||-1!==e&&e===g||(R.length&&this.trace(`Skipped level(s) ${R.join(",")} of ${s} max with CODECS and VIDEO-RANGE:"${m[R[0]].codecs}" ${m[R[0]].videoRange}; not compatible with "${w}" ${k}`),this.info(`switch candidate:${u}->${l} adjustedbw(${Math.round(x)})-bitrate=${Math.round(x-D)} ttfb:${C.toFixed(1)} avgDuration:${_.toFixed(1)} maxFetchDuration:${c.toFixed(1)} fetchDuration:${O.toFixed(1)} firstSelection:${y} codecSet:${t.codecSet} videoRange:${t.videoRange} hls.loadLevel:${g}`)),y&&(this.firstSelection=l),l}}return-1}set nextAutoLevel(e){const n=this.deriveNextAutoLevel(e);this._nextAutoLevel!==n&&(this.nextAutoLevelKey="",this._nextAutoLevel=n)}deriveNextAutoLevel(e){const{maxAutoLevel:n,minAutoLevel:t}=this.hls;return Math.min(Math.max(e,t),n)}},bufferController:class extends b{constructor(e,n){var t;super("buffer-controller",e.logger),this.hls=void 0,this.fragmentTracker=void 0,this.details=null,this._objectUrl=null,this.operationQueue=null,this.bufferCodecEventsTotal=0,this.media=null,this.mediaSource=null,this.lastMpegAudioChunk=null,this.blockedAudioAppend=null,this.lastVideoAppendEnd=0,this.appendSource=void 0,this.transferData=void 0,this.overrides=void 0,this.appendErrors={audio:0,video:0,audiovideo:0},this.tracks={},this.sourceBuffers=[[null,null],[null,null]],this._onEndStreaming=e=>{var n;this.hls&&"open"===(null==(n=this.mediaSource)?void 0:n.readyState)&&this.hls.pauseBuffering()},this._onStartStreaming=e=>{this.hls&&this.hls.resumeBuffering()},this._onMediaSourceOpen=e=>{const{media:n,mediaSource:t}=this;e&&this.log("Media source opened"),n&&t&&(t.removeEventListener("sourceopen",this._onMediaSourceOpen),n.removeEventListener("emptied",this._onMediaEmptied),this.updateDuration(),this.hls.trigger(a.MEDIA_ATTACHED,{media:n,mediaSource:t}),null!==this.mediaSource&&this.checkPendingTracks())},this._onMediaSourceClose=()=>{this.log("Media source closed")},this._onMediaSourceEnded=()=>{this.log("Media source ended")},this._onMediaEmptied=()=>{const{mediaSrc:e,_objectUrl:n}=this;e!==n&&this.error(`Media element src was set while attaching MediaSource (${n} > ${e})`)},this.hls=e,this.fragmentTracker=n,this.appendSource=(t=S(e.config.preferManagedMediaSource),"undefined"!=typeof self&&t===self.ManagedMediaSource),this.initTracks(),this.registerListeners()}hasSourceTypes(){return Object.keys(this.tracks).length>0}destroy(){this.unregisterListeners(),this.details=null,this.lastMpegAudioChunk=this.blockedAudioAppend=null,this.transferData=this.overrides=void 0,this.operationQueue&&(this.operationQueue.destroy(),this.operationQueue=null),this.hls=this.fragmentTracker=null,this._onMediaSourceOpen=this._onMediaSourceClose=null,this._onMediaSourceEnded=null,this._onStartStreaming=this._onEndStreaming=null}registerListeners(){const{hls:e}=this;
vendor: 4,076 bytes, line 2
2e.on(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.MANIFEST_PARSED,this.onManifestParsed,this),e.on(a.BUFFER_RESET,this.onBufferReset,this),e.on(a.BUFFER_APPENDING,this.onBufferAppending,this),e.on(a.BUFFER_CODECS,this.onBufferCodecs,this),e.on(a.BUFFER_EOS,this.onBufferEos,this),e.on(a.BUFFER_FLUSHING,this.onBufferFlushing,this),e.on(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.on(a.FRAG_PARSED,this.onFragParsed,this),e.on(a.FRAG_CHANGED,this.onFragChanged,this),e.on(a.ERROR,this.onError,this)}unregisterListeners(){const{hls:e}=this;e.off(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.MANIFEST_PARSED,this.onManifestParsed,this),e.off(a.BUFFER_RESET,this.onBufferReset,this),e.off(a.BUFFER_APPENDING,this.onBufferAppending,this),e.off(a.BUFFER_CODECS,this.onBufferCodecs,this),e.off(a.BUFFER_EOS,this.onBufferEos,this),e.off(a.BUFFER_FLUSHING,this.onBufferFlushing,this),e.off(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.off(a.FRAG_PARSED,this.onFragParsed,this),e.off(a.FRAG_CHANGED,this.onFragChanged,this),e.off(a.ERROR,this.onError,this)}transferMedia(){const{media:e,mediaSource:n}=this;if(!e)return null;const t={};if(this.operationQueue){const e=this.isUpdating();e||this.operationQueue.removeBlockers();const n=this.isQueued();(e||n)&&this.warn(`Transfering MediaSource with${n?" operations in queue":""}${e?" updating SourceBuffer(s)":""} ${this.operationQueue}`),this.operationQueue.destroy()}const s=this.transferData;return!this.sourceBufferCount&&s&&s.mediaSource===n?g(t,s.tracks):this.sourceBuffers.forEach((e=>{const[n]=e;n&&(t[n]=g({},this.tracks[n]),this.removeBuffer(n)),e[0]=e[1]=null})),{media:e,mediaSource:n,tracks:t}}initTracks(){this.sourceBuffers=[[null,null],[null,null]],this.tracks={},this.resetQueue(),this.resetAppendErrors(),this.lastMpegAudioChunk=this.blockedAudioAppend=null,this.lastVideoAppendEnd=0}onManifestLoading(){this.bufferCodecEventsTotal=0,this.details=null}onManifestParsed(e,n){var t;let s=2;(n.audio&&!n.video||!n.altAudio)&&(s=1),this.bufferCodecEventsTotal=s,this.log(`${s} bufferCodec event(s) expected.`),null!=(t=this.transferData)&&t.mediaSource&&this.sourceBufferCount&&s&&this.bufferCreated()}onMediaAttaching(e,n){const t=this.media=n.media,s=S(this.appendSource);if(this.transferData=this.overrides=void 0,t&&s){const e=!!n.mediaSource;(e||n.overrides)&&(this.transferData=n,this.overrides=n.overrides);const i=this.mediaSource=n.mediaSource||new s;if(this.assignMediaSource(i),e)this._objectUrl=t.src,this.attachTransferred();else{const e=this._objectUrl=self.URL.createObjectURL(i);if(this.appendSource)try{t.removeAttribute("src");const n=self.ManagedMediaSource;t.disableRemotePlayback=t.disableRemotePlayback||n&&i instanceof n,Li(t),function(e,n){const t=self.document.createElement("source");t.type="video/mp4",t.src=n,e.appendChild(t)}(t,e),t.load()}catch(n){t.src=e}else t.src=e}t.addEventListener("emptied",this._onMediaEmptied)}}assignMediaSource(e){var n,t;this.log(`${(null==(n=this.transferData)?void 0:n.mediaSource)===e?"transferred":"created"} media source: ${null==(t=e.constructor)?void 0:t.name}`),e.addEventListener("sourceopen",this._onMediaSourceOpen),e.addEventListener("sourceended",this._onMediaSourceEnded),e.addEventListener("sourceclose",this._onMediaSourceClose),this.appendSource&&(e.addEventListener("startstreaming",this._onStartStreaming),e.addEventListener("endstreaming",this._onEndStreaming))}attachTransferred(){const e=this.media,n=this.transferData;if(!n||!e)return;const t=this.tracks,s=n.tracks,i=s?Object.keys(s):null,r=i?i.length:0,o=()=>{this.media&&this.mediaSourceOpenOrEnded&&this._onMediaSourceOpen()};if(s&&i&&r){if(!this.tracksReady)return this.hls.config.startFragPrefetch=!0,void this.log("attachTransferred: waiting for SourceBuffer track info");if(this.log(`attachTransferred: (bufferCodecEventsTotal ${this.bufferCodecEventsTotal}
2)\nrequired tracks: ${Ve(t,((e,n)=>"initSegment"===e?void 0:n))};\ntransfer tracks: ${Ve(s,((e,n)=>"initSegment"===e?void 0:n))}}`),!A(s,t)){n.mediaSource=null,n.tracks=void 0;const i=e.currentTime,r=this.details,o=Math.max(i,(null==r?void 0:r.fragments[0].start)||0);return o-i>1?void this.log(`attachTransferred: waiting for playback to reach new tracks start time ${i} -> ${o}`):(this.warn(`attachTransferred: resetting MediaSource for incompatible tracks ("${Object.keys(s)}"->"${Object.keys(t)}") start time: ${o} currentTime: ${i}`),this.onMediaDetaching(a.MEDIA_DETACHING,{}),this.onMediaAttaching(a.MEDIA_ATTACHING,n),void(e.currentTime=o))}this.transferData=void 0,i.forEach((e=>{const n=e,t=s[n];if(t){const e=t.buffer;if(e){const s=this.fragmentTracker,i=t.id;if(s.hasFragments(i)||s.hasParts(i)){const t=Dn.getBuffered(e);s.detectEvictedFragments(n,t,i,null,!0)}const a=Ci(n),r=[n,e];this.sourceBuffers[a]=r,e.updating&&this.operationQueue&&this.operationQueue.prependBlocker(n),this.trackSourceBuffer(n,t)}}})),o(),this.bufferCreated()}else this.log("attachTransferred: MediaSource w/o SourceBuffers"),o()}get mediaSourceOpenOrEnded(){var e;const n=null==(e=this.mediaSource)?void 0:e.readyState;return"open"===n||"ended"===n}onMediaDetaching(e,n){const t=!!n.transferMedia;this.transferData=this.overrides=void 0;const{media:s,mediaSource:i,_objectUrl:r}=this;if(i){if(this.log("media source "+(t?"transferring":"detaching")),t)this.sourceBuffers.forEach((([e])=>{e&&this.removeBuffer(e)})),this.resetQueue();else{if(this.mediaSourceOpenOrEnded){const e="open"===i.readyState;try{const n=i.sourceBuffers;for(let t=n.length;t--;)e&&n[t].abort(),i.removeSourceBuffer(n[t]);e&&i.endOfStream()}catch(e){this.warn(`onMediaDetaching: ${e.message} while calling endOfStream`)}}this.sourceBufferCount&&this.onBufferReset()}i.removeEventListener("sourceopen",this._onMediaSourceOpen),i.removeEventListener("sourceended",this._onMediaSourceEnded),i.removeEventListener("sourceclose",this._onMediaSourceClose),this.appendSource&&(i.removeEventListener("startstreaming",this._onStartStreaming),i.removeEventListener("endstreaming",this._onEndStreaming)),this.mediaSource=null,this._objectUrl=null}s&&(s.removeEventListener("emptied",this._onMediaEmptied),t||(r&&self.URL.revokeObjectURL(r),this.mediaSrc===r?(s.removeAttribute("src"),this.appendSource&&Li(s),s.load()):this.warn("media|source.src was changed by a third party - skip cleanup")),this.media=null),this.hls.trigger(a.MEDIA_DETACHED,n)}onBufferReset(){this.sourceBuffers.forEach((([e])=>{e&&this.resetBuffer(e)})),this.initTracks()}resetBuffer(e){var n;const t=null==(n=this.tracks[e])?void 0:n.buffer;if(this.removeBuffer(e),t)try{var s;null!=(s=this.mediaSource)&&s.sourceBuffers.length&&this.mediaSource.removeSourceBuffer(t)}catch(n){this.warn(`onBufferReset ${e}`,n)}delete this.tracks[e]}removeBuffer(e){this.removeBufferListeners(e),this.sourceBuffers[Ci(e)]=[null,null];const n=this.tracks[e];n&&(n.buffer=void 0)}resetQueue(){this.operationQueue&&this.operationQueue.destroy(),this.operationQueue=new Ei(this.tracks)}onBufferCodecs(e,n){const t=this.tracks,s=Object.keys(n);this.log(`BUFFER_CODECS: "${s}" (current SB count ${this.sourceBufferCount})`);const i="audiovideo"in n&&(t.audio||t.video)||t.audiovideo&&("audio"in n||"video"in n),a=!i&&this.sourceBufferCount&&this.media&&s.some((e=>!t[e]));i||a?this.warn(`Unsupported transition between "${Object.keys(t)}" and "${s}" SourceBuffers`):(s.forEach((e=>{var s,i,a;const r=n[e],{id:o,codec:l,levelCodec:c,container:d,metadata:u,supplemental:p}=r;let h=t[e];const m=null==(s=this.transferData)||null==(i=s.tracks)?void 0:i[e],v=null!=m&&m.buffer?m:h,g=(null==v?void 0:v.pendingCodec)||(null==v?void 0:v.codec),f=null==v?void 0:v.levelCodec;h||(h=t[e]={buffer:void 0,listeners:[],codec:l,supplemental:p,container:d,levelCodec:c,metadata:u,id:o});const _=Ce(g,f),b=null==_?void 0:_.replace(xi,"$1");let y=Ce(l,c);const w=null==(a=y)?void 0:a.replace(xi,"$1");y&&_&&b!==w&&("audio"===e.slice(0,5)&&(y=Le(y,this.appendSource)),this.log(`switching codec ${g} to ${y}`),y!==(h.pendingCodec||h.codec)&&(h.pendingCodec=y),h.container=d,this.appendChangeType(e,d,y))})),(this.tracksReady||this.sourceBufferCount)&&(n.tracks=this.sourceBufferTracks),this.sourceBufferCount||this.mediaSourceOpenOrEnded&&this.checkPendingTracks())}get sourceBufferTracks(){return Object.keys(this.tracks).reduce(((e,n)=>{const t=this.tracks[n];return e[n]={id:t.id,container:t.container,codec:t.codec,levelCodec:t.levelCodec},e}),{})}appendChangeType(e,n,t){const s=`${n};codecs=${t}`,i={label:`change-type=${s}`,execute:()=>{const i=this.tracks[e];if(i){const a=i.buffer;null!=a&&a.changeType&&(this.log(`changing ${e} sourceBuffer type to ${s}`),a.changeType(s),i.codec=t,i.container=n)}this.shiftAndExecuteNext(e)},onStart:()=>{},onComplete:()=>{},onError:n=>{this.warn(`Failed to change ${e} SourceBuffer type`,n)}};this.append(i,e,this.isPending(this.tracks[e]))}blockAudio(e){var n;const t=e.start,s=t+.05*e.duration;if(!0===(null==(n=this.fragmentTracker.getAppendedFrag(t,d))?void 0:n.gap))return;const i={label:"block-audio",execute:()=>{var e;const n=this.tracks.video;(this.lastVideoAppendEnd>s||null!=n&&n.buffer&&Dn.isBuffered(n.buffer,s)||!0===(null==(e=this.fragmentTracker.getAppendedFrag(s,d))?void 0:e.gap))&&(this.blockedAudioAppend=null,this.shiftAndExecuteNext("audio"))},onStart:()=>{},onComplete:()=>{},onError:e=>{this.warn("Error executing block-audio operation",e)}};this.blockedAudioAppend={op:i,frag:e},this.append(i,"audio",!0)}unblockAudio(){const{blockedAudioAppend:e,operationQueue:n}=this;e&&n&&(this.blockedAudioAppend=null,n.unblockAudio(e.op))}onBufferAppending(n,t){const{tracks:r}=this,{data:o,type:l,parent:c,frag:d,part:u,chunkMeta:p,offset:h}=t,m=p.buffering[l],{sn:v,cc:g}=d,f=self.performance.now();
vendor: 2,180 bytes, line 2
2m.start=f;const _=d.stats.buffering,b=u?u.stats.buffering:null;0===_.start&&(_.start=f),b&&0===b.start&&(b.start=f);const y=r.audio;let w=!1;"audio"===l&&"audio/mpeg"===(null==y?void 0:y.container)&&(w=!this.lastMpegAudioChunk||1===p.id||this.lastMpegAudioChunk.sn!==p.sn,this.lastMpegAudioChunk=p);const k=r.video,T=null==k?void 0:k.buffer;if(T&&"initSegment"!==v){const e=u||d,n=this.blockedAudioAppend;if("audio"!==l||"main"===c||this.blockedAudioAppend){if("video"===l){const t=e.end;if(n){const e=n.frag.start;(t>e||t<this.lastVideoAppendEnd||Dn.isBuffered(T,e))&&this.unblockAudio()}this.lastVideoAppendEnd=t}}else{const n=e.start+.05*e.duration,t=T.buffered,s=this.currentOp("video");t.length||s?!s&&!Dn.isBuffered(T,n)&&this.lastVideoAppendEnd<n&&this.blockAudio(e):this.blockAudio(e)}}const E=(u||d).start,x={label:`append-${l}`,execute:()=>{var n;m.executeStart=self.performance.now();const t=null==(n=this.tracks[l])?void 0:n.buffer;t&&(w?this.updateTimestampOffset(t,E,.1,l,v,g):void 0!==h&&e(h)&&this.updateTimestampOffset(t,h,1e-6,l,v,g)),this.appendExecutor(o,l)},onStart:()=>{},onComplete:()=>{const e=self.performance.now();m.executeEnd=m.end=e,0===_.first&&(_.first=e),b&&0===b.first&&(b.first=e);const n={};this.sourceBuffers.forEach((([e,t])=>{e&&(n[e]=Dn.getBuffered(t))})),this.appendErrors[l]=0,"audio"===l||"video"===l?this.appendErrors.audiovideo=0:(this.appendErrors.audio=0,this.appendErrors.video=0),this.hls.trigger(a.BUFFER_APPENDED,{type:l,frag:d,part:u,chunkMeta:p,parent:d.type,timeRanges:n})},onError:e=>{var n;const t={type:s.MEDIA_ERROR,parent:d.type,details:i.BUFFER_APPEND_ERROR,sourceBufferName:l,frag:d,part:u,chunkMeta:p,error:e,err:e,fatal:!1},r=null==(n=this.media)?void 0:n.error;if(e.code===DOMException.QUOTA_EXCEEDED_ERR||"QuotaExceededError"==e.name||"quota"in e)t.details=i.BUFFER_FULL_ERROR;else if(e.code===DOMException.INVALID_STATE_ERR&&this.mediaSourceOpenOrEnded&&!r)t.errorAction=pn(!0);else if(e.name===Si&&0===this.sourceBufferCount)t.errorAction=pn(!0);else{const e=++this.appendErrors[l];this.warn(`Failed ${e}/${this.hls.config.appendErrorMaxRetry} times to append segment in "${l}" sourceBuffer (${r||"no media error"}
2)`),(e>=this.hls.config.appendErrorMaxRetry||r)&&(t.fatal=!0)}this.hls.trigger(a.ERROR,t)}};this.append(x,l,this.isPending(this.tracks[l]))}getFlushOp(e,n,t){return this.log(`queuing "${e}" remove ${n}-${t}`),{label:"remove",execute:()=>{this.removeExecutor(e,n,t)},onStart:()=>{},onComplete:()=>{this.hls.trigger(a.BUFFER_FLUSHED,{type:e})},onError:s=>{this.warn(`Failed to remove ${n}-${t} from "${e}" SourceBuffer`,s)}}}onBufferFlushing(e,n){const{type:t,startOffset:s,endOffset:i}=n;t?this.append(this.getFlushOp(t,s,i),t):this.sourceBuffers.forEach((([e])=>{e&&this.append(this.getFlushOp(e,s,i),e)}))}onFragParsed(e,n){const{frag:t,part:s}=n,i=[],r=s?s.elementaryStreams:t.elementaryStreams;r[G]?i.push("audiovideo"):(r[U]&&i.push("audio"),r[j]&&i.push("video")),0===i.length&&this.warn(`Fragments must have at least one ElementaryStreamType set. type: ${t.type} level: ${t.level} sn: ${t.sn}`),this.blockBuffers((()=>{const e=self.performance.now();t.stats.buffering.end=e,s&&(s.stats.buffering.end=e);const n=s?s.stats:t.stats;this.hls.trigger(a.FRAG_BUFFERED,{frag:t,part:s,stats:n,id:t.type})}),i).catch((e=>{this.warn(`Fragment buffered callback ${e}`),this.stepOperationQueue(this.sourceBufferTypes)}))}onFragChanged(e,n){this.trimBuffers()}get bufferedToEnd(){return this.sourceBufferCount>0&&!this.sourceBuffers.some((([e])=>{var n,t;return e&&(!(null!=(n=this.tracks[e])&&n.ended)||(null==(t=this.tracks[e])?void 0:t.ending))}))}onBufferEos(e,n){var t;this.sourceBuffers.forEach((([e])=>{if(e){const t=this.tracks[e];n.type&&n.type!==e||(t.ending=!0,t.ended||(t.ended=!0,this.log(`${e} buffer reached EOS`)))}}));const s=!1!==(null==(t=this.overrides)?void 0:t.endOfStream);this.sourceBufferCount>0&&!this.sourceBuffers.some((([e])=>{var n;return e&&!(null!=(n=this.tracks[e])&&n.ended)}))&&(s?(this.log("Queueing EOS"),this.blockUntilOpen((()=>{this.tracksEnded();const{mediaSource:e}=this;e&&"open"===e.readyState?(this.log("Calling mediaSource.endOfStream()"),e.endOfStream(),this.hls.trigger(a.BUFFERED_TO_END,void 0)):e&&this.log(`Could not call mediaSource.endOfStream(). mediaSource.readyState: ${e.readyState}`)}))):(this.tracksEnded(),this.hls.trigger(a.BUFFERED_TO_END,void 0)))}tracksEnded(){this.sourceBuffers.forEach((([e])=>{if(null!==e){const n=this.tracks[e];n&&(n.ending=!1)}}))}onLevelUpdated(e,{details:n}){n.fragments.length&&(this.details=n,this.updateDuration())}updateDuration(){this.blockUntilOpen((()=>{const e=this.getDurationAndRange();e&&this.updateMediaSource(e)}))}onError(n,t){if(t.details===i.BUFFER_APPEND_ERROR&&t.frag){var s;const n=null==(s=t.errorAction)?void 0:s.nextAutoLevel;e(n)&&n!==t.frag.level&&this.resetAppendErrors()}}resetAppendErrors(){this.appendErrors={audio:0,video:0,audiovideo:0}}trimBuffers(){const{hls:n,details:t,media:s}=this;if(!s||null===t)return;if(!this.sourceBufferCount)return;const i=n.config,a=s.currentTime,r=t.levelTargetDuration,o=t.live&&null!==i.liveBackBufferLength?i.liveBackBufferLength:i.backBufferLength;if(e(o)&&o>=0){const e=Math.max(o,r),n=Math.floor(a/r)*r-e;this.flushBackBuffer(a,r,n)}if(e(i.frontBufferFlushThreshold)&&i.frontBufferFlushThreshold>0){const e=Math.max(i.maxBufferLength,i.frontBufferFlushThreshold),n=Math.max(e,r),t=Math.floor(a/r)*r+n;this.flushFrontBuffer(a,r,t)}}flushBackBuffer(e,n,t){this.sourceBuffers.forEach((([e,n])=>{if(n){const i=Dn.getBuffered(n);if(i.length>0&&t>i.start(0)){var s;this.hls.trigger(a.BACK_BUFFER_REACHED,{bufferEnd:t});const n=this.tracks[e];if(null!=(s=this.details)&&s.live)this.hls.trigger(a.LIVE_BACK_BUFFER_REACHED,{bufferEnd:t});else if(null!=n&&n.ended)return void this.log(`Cannot flush ${e} back buffer while SourceBuffer is in ended state`);this.hls.trigger(a.BUFFER_FLUSHING,{startOffset:0,endOffset:t,type:e})}}}))}flushFrontBuffer(e,n,t){this.sourceBuffers.forEach((([n,s])=>{if(s){const i=Dn.getBuffered(s),r=i.length;if(r<2)return;const o=i.start(r-1),l=i.end(r-1);if(t>o||e>=o&&e<=l)return;this.hls.trigger(a.BUFFER_FLUSHING,{startOffset:o,endOffset:1/0,type:n})}}))}getDurationAndRange(){var n;const{details:t,mediaSource:s}=this;if(!t||!this.media||"open"!==(null==s?void 0:s.readyState))return null;const i=t.edge;
vendor: 5,326 bytes, line 2
2if(t.live&&this.hls.config.liveDurationInfinity){if(t.fragments.length&&t.live&&s.setLiveSeekableRange){const e=Math.max(0,t.fragmentStart);return{duration:1/0,start:e,end:Math.max(e,i)}}return{duration:1/0}}const a=null==(n=this.overrides)?void 0:n.duration;if(a)return e(a)?{duration:a}:null;const r=this.media.duration;return i>(e(s.duration)?s.duration:0)&&i>r||!e(r)?{duration:i}:null}updateMediaSource({duration:n,start:t,end:s}){const i=this.mediaSource;this.media&&i&&"open"===i.readyState&&(i.duration!==n&&(e(n)&&this.log(`Updating MediaSource duration to ${n.toFixed(3)}`),i.duration=n),void 0!==t&&void 0!==s&&(this.log(`MediaSource duration is set to ${i.duration}. Setting seekable range to ${t}-${s}.`),i.setLiveSeekableRange(t,s)))}get tracksReady(){const e=this.pendingTrackCount;return e>0&&(e>=this.bufferCodecEventsTotal||this.isPending(this.tracks.audiovideo))}checkPendingTracks(){const{bufferCodecEventsTotal:e,pendingTrackCount:n,tracks:t}=this;if(this.log(`checkPendingTracks (pending: ${n} codec events expected: ${e}) ${Ve(t)}`),this.tracksReady){var s;const e=null==(s=this.transferData)?void 0:s.tracks;e&&Object.keys(e).length?this.attachTransferred():this.createSourceBuffers()}}bufferCreated(){if(this.sourceBufferCount){const e={};this.sourceBuffers.forEach((([n,t])=>{if(n){const s=this.tracks[n];e[n]={buffer:t,container:s.container,codec:s.codec,supplemental:s.supplemental,levelCodec:s.levelCodec,id:s.id,metadata:s.metadata}}})),this.hls.trigger(a.BUFFER_CREATED,{tracks:e}),this.log(`SourceBuffers created. Running queue: ${this.operationQueue}`),this.sourceBuffers.forEach((([e])=>{this.executeNext(e)}))}else{const e=new Error("could not create source buffer for media codec(s)");this.hls.trigger(a.ERROR,{type:s.MEDIA_ERROR,details:i.BUFFER_INCOMPATIBLE_CODECS_ERROR,fatal:!0,error:e,reason:e.message})}}createSourceBuffers(){const{tracks:e,sourceBuffers:n,mediaSource:t}=this;if(!t)throw new Error("createSourceBuffers called when mediaSource was null");for(const o in e){const l=o,c=e[l];if(this.isPending(c)){const e=this.getTrackCodec(c,l),o=`${c.container};codecs=${e}`;c.codec=e,this.log(`creating sourceBuffer(${o})${this.currentOp(l)?" Queued":""} ${Ve(c)}`);try{const e=t.addSourceBuffer(o),s=Ci(l),i=[l,e];n[s]=i,c.buffer=e}catch(e){var r;return this.error(`error while trying to add sourceBuffer: ${e.message}`),this.shiftAndExecuteNext(l),null==(r=this.operationQueue)||r.removeBlockers(),delete this.tracks[l],void this.hls.trigger(a.ERROR,{type:s.MEDIA_ERROR,details:i.BUFFER_ADD_CODEC_ERROR,fatal:!1,error:e,sourceBufferName:l,mimeType:o,parent:c.id})}this.trackSourceBuffer(l,c)}}this.bufferCreated()}getTrackCodec(e,n){const t=e.supplemental;let s=e.codec;t&&("video"===n||"audiovideo"===n)&&we(t,"video")&&(s=function(e,n){const t=[];if(e){const n=e.split(",");for(let e=0;e<n.length;e++)ye(n[e],"video")||t.push(n[e])}return n&&t.push(n),t.join(",")}(s,t));const i=Ce(s,e.levelCodec);return i?"audio"===n.slice(0,5)?Le(i,this.appendSource):i:""}trackSourceBuffer(e,n){const t=n.buffer;if(!t)return;const s=this.getTrackCodec(n,e);this.tracks[e]={buffer:t,codec:s,container:n.container,levelCodec:n.levelCodec,supplemental:n.supplemental,metadata:n.metadata,id:n.id,listeners:[]},this.removeBufferListeners(e),this.addBufferListener(e,"updatestart",this.onSBUpdateStart),this.addBufferListener(e,"updateend",this.onSBUpdateEnd),this.addBufferListener(e,"error",this.onSBUpdateError),this.appendSource&&this.addBufferListener(e,"bufferedchange",((e,n)=>{const t=n.removedRanges;null!=t&&t.length&&this.hls.trigger(a.BUFFER_FLUSHED,{type:e})}))}get mediaSrc(){var e,n;const t=(null==(e=this.media)||null==(n=e.querySelector)?void 0:n.call(e,"source"))||this.media;return null==t?void 0:t.src}onSBUpdateStart(e){const n=this.currentOp(e);n&&n.onStart()}onSBUpdateEnd(e){var n;if("closed"===(null==(n=this.mediaSource)?void 0:n.readyState))return void this.resetBuffer(e);const t=this.currentOp(e);t&&(t.onComplete(),this.shiftAndExecuteNext(e))}onSBUpdateError(e,n){var t;const r=new Error(`${e} SourceBuffer error. MediaSource readyState: ${null==(t=this.mediaSource)?void 0:t.readyState}`);this.error(`${r}`,n),this.hls.trigger(a.ERROR,{type:s.MEDIA_ERROR,details:i.BUFFER_APPENDING_ERROR,sourceBufferName:e,error:r,fatal:!1});const o=this.currentOp(e);o&&o.onError(r)}updateTimestampOffset(e,n,t,s,i,a){const r=n-e.timestampOffset;Math.abs(r)>=t&&(this.log(`Updating ${s} SourceBuffer timestampOffset to ${n} (sn: ${i} cc: ${a})`),e.timestampOffset=n)}removeExecutor(n,t,s){const{media:i,mediaSource:a}=this,r=this.tracks[n],o=null==r?void 0:r.buffer;if(!i||!a||!o)return this.warn(`Attempting to remove from the ${n} SourceBuffer, but it does not exist`),void this.shiftAndExecuteNext(n);const l=e(i.duration)?i.duration:1/0,c=e(a.duration)?a.duration:1/0,d=Math.max(0,t),u=Math.min(s,l,c);u>d&&(!r.ending||r.ended)?(r.ended=!1,this.log(`Removing [${d},${u}] from the ${n} SourceBuffer`),o.remove(d,u)):this.shiftAndExecuteNext(n)}appendExecutor(e,n){const t=this.tracks[n],s=null==t?void 0:t.buffer;if(!s)throw new Ai(`Attempting to append to the ${n} SourceBuffer, but it does not exist`);t.ending=!1,t.ended=!1,s.appendBuffer(e)}blockUntilOpen(e){if(this.isUpdating()||this.isQueued())this.blockBuffers(e).catch((e=>{this.warn(`SourceBuffer blocked callback ${e}
2`),this.stepOperationQueue(this.sourceBufferTypes)}));else try{e()}catch(e){this.warn(`Callback run without blocking ${this.operationQueue} ${e}`)}}isUpdating(){return this.sourceBuffers.some((([e,n])=>e&&n.updating))}isQueued(){return this.sourceBuffers.some((([e])=>e&&!!this.currentOp(e)))}isPending(e){return!!e&&!e.buffer}blockBuffers(e,n=this.sourceBufferTypes){if(!n.length)return this.log("Blocking operation requested, but no SourceBuffers exist"),Promise.resolve().then(e);const{operationQueue:t}=this,s=n.map((e=>this.appendBlocker(e)));return n.length>1&&!!this.blockedAudioAppend&&this.unblockAudio(),Promise.all(s).then((n=>{t===this.operationQueue&&(e(),this.stepOperationQueue(this.sourceBufferTypes))}))}stepOperationQueue(e){e.forEach((e=>{var n;const t=null==(n=this.tracks[e])?void 0:n.buffer;t&&!t.updating&&this.shiftAndExecuteNext(e)}))}append(e,n,t){this.operationQueue&&this.operationQueue.append(e,n,t)}appendBlocker(e){if(this.operationQueue)return this.operationQueue.appendBlocker(e)}currentOp(e){return this.operationQueue?this.operationQueue.current(e):null}executeNext(e){e&&this.operationQueue&&this.operationQueue.executeNext(e)}shiftAndExecuteNext(e){this.operationQueue&&this.operationQueue.shiftAndExecuteNext(e)}get pendingTrackCount(){return Object.keys(this.tracks).reduce(((e,n)=>e+(this.isPending(this.tracks[n])?1:0)),0)}get sourceBufferCount(){return this.sourceBuffers.reduce(((e,[n])=>e+(n?1:0)),0)}get sourceBufferTypes(){return this.sourceBuffers.map((([e])=>e)).filter((e=>!!e))}addBufferListener(e,n,t){const s=this.tracks[e];if(!s)return;const i=s.buffer;if(!i)return;const a=t.bind(this,e);s.listeners.push({event:n,listener:a}),i.addEventListener(n,a)}removeBufferListeners(e){const n=this.tracks[e];if(!n)return;const t=n.buffer;t&&(n.listeners.forEach((e=>{t.removeEventListener(e.event,e.listener)})),n.listeners.length=0)}},capLevelController:Ri,errorController:class extends b{constructor(e){super("error-controller",e.logger),this.hls=void 0,this.playlistError=0,this.penalizedRenditions={},this.hls=e,this.registerListeners()}registerListeners(){const e=this.hls;e.on(a.ERROR,this.onError,this),e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.LEVEL_UPDATED,this.onLevelUpdated,this)}unregisterListeners(){const e=this.hls;e&&(e.off(a.ERROR,this.onError,this),e.off(a.ERROR,this.onErrorOut,this),e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.LEVEL_UPDATED,this.onLevelUpdated,this))}destroy(){this.unregisterListeners(),this.hls=null,this.penalizedRenditions={}}startLoad(e){}stopLoad(){this.playlistError=0}getVariantLevelIndex(e){return(null==e?void 0:e.type)===d?e.level:this.hls.loadLevel}onManifestLoading(){this.playlistError=0,this.penalizedRenditions={}}onLevelUpdated(){this.playlistError=0}onError(e,n){var t;if(n.fatal)return;const a=this.hls,r=n.context;switch(n.details){case i.FRAG_LOAD_ERROR:case i.FRAG_LOAD_TIMEOUT:case i.KEY_LOAD_ERROR:case i.KEY_LOAD_TIMEOUT:return void(n.errorAction=this.getFragRetryOrSwitchAction(n));case i.FRAG_PARSING_ERROR:if(null!=(t=n.frag)&&t.gap)return void(n.errorAction=pn());case i.FRAG_GAP:case i.FRAG_DECRYPT_ERROR:return n.errorAction=this.getFragRetryOrSwitchAction(n),void(n.errorAction.action=2);case i.LEVEL_EMPTY_ERROR:case i.LEVEL_PARSING_ERROR:{var o,u;const e=n.parent===d?n.level:a.loadLevel;n.details===i.LEVEL_EMPTY_ERROR&&null!=(o=n.context)&&null!=(u=o.levelDetails)&&u.live?n.errorAction=this.getPlaylistRetryOrSwitchAction(n,e):(n.levelRetry=!1,n.errorAction=this.getLevelSwitchAction(n,e))}return;case i.LEVEL_LOAD_ERROR:case i.LEVEL_LOAD_TIMEOUT:return void("number"==typeof(null==r?void 0:r.level)&&(n.errorAction=this.getPlaylistRetryOrSwitchAction(n,r.level)));case i.AUDIO_TRACK_LOAD_ERROR:case i.AUDIO_TRACK_LOAD_TIMEOUT:case i.SUBTITLE_LOAD_ERROR:case i.SUBTITLE_TRACK_LOAD_TIMEOUT:if(r){const e=a.loadLevelObj;if(e&&(r.type===l&&e.hasAudioGroup(r.groupId)||r.type===c&&e.hasSubtitleGroup(r.groupId)))return n.errorAction=this.getPlaylistRetryOrSwitchAction(n,a.loadLevel),n.errorAction.action=2,void(n.errorAction.flags=1)}return;case i.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED:{const e=a.loadLevelObj,t=null==e?void 0:e.attrs["HDCP-LEVEL"];t?n.errorAction={action:2,flags:2,hdcpLevel:t}:this.keySystemError(n)}return;
2case i.BUFFER_ADD_CODEC_ERROR:case i.REMUX_ALLOC_ERROR:case i.BUFFER_APPEND_ERROR:var p;return void(n.errorAction||(n.errorAction=this.getLevelSwitchAction(n,null!=(p=n.level)?p:a.loadLevel)));case i.INTERNAL_EXCEPTION:case i.BUFFER_APPENDING_ERROR:case i.BUFFER_FULL_ERROR:case i.LEVEL_SWITCH_ERROR:case i.BUFFER_STALLED_ERROR:case i.BUFFER_SEEK_OVER_HOLE:case i.BUFFER_NUDGE_ON_STALL:return void(n.errorAction=pn())}n.type===s.KEY_SYSTEM_ERROR&&this.keySystemError(n)}keySystemError(e){const n=this.getVariantLevelIndex(e.frag);e.levelRetry=!1,e.errorAction=this.getLevelSwitchAction(e,n)}getPlaylistRetryOrSwitchAction(e,n){const t=ln(this.hls.config.playlistLoadPolicy,e),s=this.playlistError++;if(un(t,s,on(e),e.response))return{action:5,flags:0,retryConfig:t,retryCount:s};const i=this.getLevelSwitchAction(e,n);return t&&(i.retryConfig=t,i.retryCount=s),i}getFragRetryOrSwitchAction(e){const n=this.hls,t=this.getVariantLevelIndex(e.frag),s=n.levels[t],{fragLoadPolicy:a,keyLoadPolicy:r}=n.config,o=ln(e.details.startsWith("key")?r:a,e),l=n.levels.reduce(((e,n)=>e+n.fragmentError),0);if(s&&(e.details!==i.FRAG_GAP&&s.fragmentError++,un(o,l,on(e),e.response)))return{action:5,flags:0,retryConfig:o,retryCount:l};const c=this.getLevelSwitchAction(e,t);return o&&(c.retryConfig=o,c.retryCount=l),c}getLevelSwitchAction(e,n){const t=this.hls;null==n&&(n=t.loadLevel);const s=this.hls.levels[n];if(s){var a,r;const n=e.details;s.loadError++,n===i.BUFFER_APPEND_ERROR&&s.fragmentError++;let m=-1;const{levels:v,loadLevel:g,minAutoLevel:f,maxAutoLevel:_}=t;t.autoLevelEnabled||t.config.preserveManualLevelOnError||(t.loadLevel=-1);const b=null==(a=e.frag)?void 0:a.type,y=(b===u&&n===i.FRAG_PARSING_ERROR||"audio"===e.sourceBufferName&&(n===i.BUFFER_ADD_CODEC_ERROR||n===i.BUFFER_APPEND_ERROR))&&v.some((({audioCodec:e})=>s.audioCodec!==e)),w="video"===e.sourceBufferName&&(n===i.BUFFER_ADD_CODEC_ERROR||n===i.BUFFER_APPEND_ERROR)&&v.some((({codecSet:e,audioCodec:n}
2)=>s.codecSet!==e&&s.audioCodec===n)),{type:k,groupId:T}=null!=(r=e.context)?r:{};for(let t=v.length;t--;){const a=(t+g)%v.length;if(a!==g&&a>=f&&a<=_&&0===v[a].loadError){var o,h;const t=v[a];if(n===i.FRAG_GAP&&b===d&&e.frag){const n=v[a].details;if(n){const t=tn(e.frag,n.fragments,e.frag.start);if(null!=t&&t.gap)continue}}else{if(k===l&&t.hasAudioGroup(T)||k===c&&t.hasSubtitleGroup(T))continue;if(b===u&&null!=(o=s.audioGroups)&&o.some((e=>t.hasAudioGroup(e)))||b===p&&null!=(h=s.subtitleGroups)&&h.some((e=>t.hasSubtitleGroup(e)))||y&&s.audioCodec===t.audioCodec||!y&&s.audioCodec!==t.audioCodec||w&&s.codecSet===t.codecSet)continue}m=a;break}}if(m>-1&&t.loadLevel!==m)return e.levelRetry=!0,this.playlistError=0,{action:2,flags:0,nextAutoLevel:m}}return{action:2,flags:1}}onErrorOut(e,n){var t;switch(null==(t=n.errorAction)?void 0:t.action){case 0:break;case 2:this.sendAlternateToPenaltyBox(n),n.errorAction.resolved||n.details===i.FRAG_GAP?/MediaSource readyState: ended/.test(n.error.message)&&(this.warn(`MediaSource ended after "${n.sourceBufferName}" sourceBuffer append error. Attempting to recover from media error.`),this.hls.recoverMediaError()):n.fatal=!0}n.fatal&&this.hls.stopLoad()}sendAlternateToPenaltyBox(e){const n=this.hls,t=e.errorAction;if(!t)return;const{flags:s,hdcpLevel:i,nextAutoLevel:a}=t;switch(s){case 0:this.switchLevel(e,a);break;case 2:i&&(n.maxHdcpLevel=Ue[Ue.indexOf(i)-1],t.resolved=!0),this.warn(`Restricting playback to HDCP-LEVEL of "${n.maxHdcpLevel}" or lower`)}t.resolved||this.switchLevel(e,a)}switchLevel(e,n){if(void 0!==n&&e.errorAction&&(this.warn(`switching to level ${n} after ${e.details}`),this.hls.nextAutoLevel=n,e.errorAction.resolved=!0,this.hls.nextLoadLevel=this.hls.nextAutoLevel,e.details===i.BUFFER_ADD_CODEC_ERROR&&e.mimeType&&"audiovideo"!==e.sourceBufferName)){const n=De(e.mimeType),t=this.hls.levels;for(let s=t.length;s--;)t[s][`${e.sourceBufferName}Codec`]===n&&this.hls.removeLevel(s)}}},fpsController:class{constructor(e){this.hls=void 0,this.isVideoPlaybackQualityAvailable=!1,this.timer=void 0,this.media=null,this.lastTime=void 0,this.lastDroppedFrames=0,this.lastDecodedFrames=0,this.streamController=void 0,this.hls=e,this.registerListeners()}setStreamController(e){this.streamController=e}registerListeners(){this.hls.on(a.MEDIA_ATTACHING,this.onMediaAttaching,this),this.hls.on(a.MEDIA_DETACHING,this.onMediaDetaching,this)}unregisterListeners(){this.hls.off(a.MEDIA_ATTACHING,this.onMediaAttaching,this),this.hls.off(a.MEDIA_DETACHING,this.onMediaDetaching,this)}destroy(){this.timer&&clearInterval(this.timer),this.unregisterListeners(),this.isVideoPlaybackQualityAvailable=!1,this.media=null}onMediaAttaching(e,n){const t=this.hls.config;if(t.capLevelOnFPSDrop){const e=n.media instanceof self.HTMLVideoElement?n.media:null;this.media=e,e&&"function"==typeof e.getVideoPlaybackQuality&&(this.isVideoPlaybackQualityAvailable=!0),self.clearInterval(this.timer),this.timer=self.setInterval(this.checkFPSInterval.bind(this),t.fpsDroppedMonitoringPeriod)}}onMediaDetaching(){this.media=null}checkFPS(e,n,t){const s=performance.now();if(n){if(this.lastTime){const e=s-this.lastTime,i=t-this.lastDroppedFrames,r=n-this.lastDecodedFrames,o=1e3*i/e,l=this.hls;if(l.trigger(a.FPS_DROP,{currentDropped:i,currentDecoded:r,totalDroppedFrames:t}),o>0&&i>l.config.fpsDroppedMonitoringThreshold*r){let e=l.currentLevel;l.logger.warn("drop FPS ratio greater than max allowed value for currentLevel: "+e),e>0&&(-1===l.autoLevelCapping||l.autoLevelCapping>=e)&&(e-=1,l.trigger(a.FPS_DROP_LEVEL_CAPPING,{level:e,droppedLevel:l.currentLevel}),l.autoLevelCapping=e,this.streamController.nextLevelSwitch())}}this.lastTime=s,this.lastDroppedFrames=t,this.lastDecodedFrames=n}}checkFPSInterval(){const e=this.media;if(e)if(this.isVideoPlaybackQualityAvailable){const n=e.getVideoPlaybackQuality();this.checkFPS(e,n.totalVideoFrames,n.droppedVideoFrames)}else this.checkFPS(e,e.webkitDecodedFrameCount,e.webkitDroppedFrameCount)}},stretchShortVideoTrack:!1,maxAudioFramesDrift:1,forceKeyFrameOnDiscontinuity:!0,abrEwmaFastLive:3,abrEwmaSlowLive:9,abrEwmaFastVoD:3,abrEwmaSlowVoD:9,abrEwmaDefaultEstimate:5e5,abrEwmaDefaultEstimateMax:5e6,abrBandWidthFactor:.95,abrBandWidthUpFactor:.7,abrMaxWithRealBitrate:!1,maxStarvationDelay:4,maxLoadingDelay:4,minAutoBitrate:0,emeEnabled:!1,widevineLicenseUrl:void 0,drmSystems:{},drmSystemOptions:{},requestMediaKeySystemAccessFunc:at,requireKeySystemAccessOnStart:!1,testBandwidth:!0,progressive:!1,lowLatencyMode:!0,cmcd:void 0,enableDateRangeMetadataCues:!0,enableEmsgMetadataCues:!0,enableEmsgKLVMetadata:!1,enableID3MetadataCues:!0,enableInterstitialPlayback:!0,interstitialAppendInPlace:!0,interstitialLiveLookAhead:10,useMediaCapabilities:!0,preserveManualLevelOnError:!1,certLoa
2dPolicy:{default:{maxTimeToFirstByteMs:8e3,maxLoadTimeMs:2e4,timeoutRetry:null,errorRetry:null}},keyLoadPolicy:{default:{maxTimeToFirstByteMs:8e3,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:1,retryDelayMs:1e3,maxRetryDelayMs:2e4,backoff:"linear"},errorRetry:{maxNumRetry:8,retryDelayMs:1e3,maxRetryDelayMs:2e4,backoff:"linear"}}},manifestLoadPolicy:{default:{maxTimeToFirstByteMs:1/0,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:1,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},playlistLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:2,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},fragLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:12e4,timeoutRetry:{maxNumRetry:4,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:6,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},steeringManifestLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:1,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},interstitialAssetListLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:3e4,timeoutRetry:{maxNumRetry:0,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:0,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:1,manifestLoadingRetryDelay:1e3,manifestLoadingMaxRetryTimeout:64e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,levelLoadingMaxRetryTimeout:64e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingMaxRetryTimeout:64e3},{cueHandler:Or,enableWebVTT:!0,enableIMSC1:!0,enableCEA708Captions:!0,captionsTextTrack1Label:"English",captionsTextTrack1LanguageCode:"en",captionsTextTrack2Label:"Spanish",captionsTextTrack2LanguageCode:"es",captionsTextTrack3Label:"Unknown CC",captionsTextTrack3LanguageCode:"",captionsTextTrack4Label:"Unknown CC",captionsTextTrack4LanguageCode:"",renderTextTracksNatively:!0}),{},{subtitleStreamController:class extends zt{constructor(e,n,t){super(e,n,t,"subtitle-stream-controller",p),this.currentTrackId=-1,this.tracksBuffered=[],this.mainDetails=null,this.registerListeners()}onHandlerDestroying(){this.unregisterListeners(),super.onHandlerDestroying(),this.mainDetails=null}registerListeners(){super.registerListeners();const{hls:e}=this;e.on(a.LEVEL_LOADED,this.onLevelLoaded,this),e.on(a.SUBTITLE_TRACKS_UPDATED,this.onSubtitleTracksUpdated,this),e.on(a.SUBTITLE_TRACK_SWITCH,this.onSubtitleTrackSwitch,this),e.on(a.SUBTITLE_TRACK_LOADED,this.onSubtitleTrackLoaded,this),e.on(a.SUBTITLE_FRAG_PROCESSED,this.onSubtitleFragProcessed,this),e.on(a.BUFFER_FLUSHING,this.onBufferFlushing,this)}unregisterListeners(){super.unregisterListeners();const{hls:e}=this;e.off(a.LEVEL_LOADED,this.onLevelLoaded,this),e.off(a.SUBTITLE_TRACKS_UPDATED,this.onSubtitleTracksUpdated,this),e.off(a.SUBTITLE_TRACK_SWITCH,this.onSubtitleTrackSwitch,this),e.off(a.SUBTITLE_TRACK_LOADED,this.onSubtitleTrackLoaded,this),e.off(a.SUBTITLE_FRAG_PROCESSED,this.onSubtitleFragProcessed,this),e.off(a.BUFFER_FLUSHING,this.onBufferFlushing,this)}startLoad(e,n){this.stopLoad(),this.state=Gt.IDLE,this.setInterval(500),this.nextLoadPosition=this.lastCurrentTime=e+this.timelineOffset,this.startPosition=n?-1:e,this.tick()}onManifestLoading(){super.onManifestLoading(),this.mainDetails=null}onMediaDetaching(e,n){this.tracksBuffered=[],super.onMediaDetaching(e,n)}onLevelLoaded(e,n){this.mainDetails=n.details}onSubtitleFragProcessed(e,n){const{frag:t,success:s}=n;if(this.fragContextChanged(t)||(q(t)&&(this.fragPrevious=t),this.state=Gt.IDLE),!s)return;const i=this.tracksBuffered[this.currentTrackId];if(!i)return;let a;const r=t.start;for(let e=0;e<i.length;e++)if(r>=i[e].start&&r<=i[e].end){a=i[e];break}const o=t.start+t.duration;a?a.end=o:(a={start:r,end:o},i.push(a)),this.fragmentTracker.fragBuffered(t),this.fragBufferedComplete(t,null),this.media&&this.tick()}onBufferFlushing(e,n){const{startOffset:t,endOffset:s}=n;if(0===t&&s!==Number.POSITIVE_INFINITY){const e=s-1;if(e<=0)return;n.endOffsetSubtitles=Math.max(0,e),this.tracksBuffered.forEach((n=>{for(let t=0;t<n.length;)if(n[t].end<=e)n.shift();else{if(!(n[t].start<e))break;n[t].start=e,t++}})),this.fragmentTracker.removeFragmentsInRange(t,e,p)}}onError(e,n){const t=n.frag;(null==t?void 0:t.type)===p&&(n.details===i.FRAG_GAP&&this.fragmentTracker.fragBuffered(t,!0),this.fragCurrent&&this.fragCurrent.abortRequests(),this.state!==Gt.STOPPED&&(this.state=Gt.IDLE))}
2onSubtitleTracksUpdated(e,{subtitleTracks:n}){this.levels&&wi(this.levels,n)?this.levels=n.map((e=>new qe(e))):(this.tracksBuffered=[],this.levels=n.map((e=>{const n=new qe(e);return this.tracksBuffered[n.id]=[],n})),this.fragmentTracker.removeFragmentsInRange(0,Number.POSITIVE_INFINITY,p),this.fragPrevious=null,this.mediaBuffer=null)}onSubtitleTrackSwitch(e,n){var t;if(this.currentTrackId=n.id,null==(t=this.levels)||!t.length||-1===this.currentTrackId)return void this.clearInterval();const s=this.levels[this.currentTrackId];null!=s&&s.details?this.mediaBuffer=this.mediaBufferTimeRanges:this.mediaBuffer=null,s&&this.state!==Gt.STOPPED&&this.setInterval(500)}onSubtitleTrackLoaded(e,n){var t;const{currentTrackId:s,levels:i}=this,{details:r,id:o}=n;if(!i)return void this.warn(`Subtitle tracks were reset while loading level ${o}`);const l=i[o];if(o>=i.length||!l)return;this.log(`Subtitle track ${o} loaded [${r.startSN},${r.endSN}]${r.lastPartSn?`[part-${r.lastPartSn}-${r.lastPartIndex}]`:""},duration:${r.totalduration}`),this.mediaBuffer=this.mediaBufferTimeRanges;let c=0;if(r.live||null!=(t=l.details)&&t.live){if(r.deltaUpdateFailed)return;const e=this.mainDetails;if(!e)return void(this.startFragRequested=!1);const n=e.fragments[0];var d;l.details?(c=this.alignPlaylists(r,l.details,null==(d=this.levelLastLoaded)?void 0:d.details),0===c&&n&&(c=n.start,It(r,c))):r.hasProgramDateTime&&e.hasProgramDateTime?(jt(r,e),c=r.fragmentStart):n&&(c=n.start,It(r,c)),e&&!this.startFragRequested&&this.setStartPosition(e,c)}l.details=r,this.levelLastLoaded=l,o===s&&(this.hls.trigger(a.SUBTITLE_TRACK_UPDATED,{details:r,id:o,groupId:n.groupId}),this.tick(),r.live&&!this.fragCurrent&&this.media&&this.state===Gt.IDLE)&&(tn(null,r.fragments,this.media.currentTime,0)||(this.warn("Subtitle playlist not aligned with playback"),l.details=void 0))}_handleFragmentLoadComplete(e){const{frag:n,payload:t}=e,r=n.decryptdata,o=this.hls;if(!this.fragContextChanged(n)&&t&&t.byteLength>0&&null!=r&&r.key&&r.iv&&Kn(r.method)){const e=performance.now();this.decrypter.decrypt(new Uint8Array(t),r.key.buffer,r.iv.buffer,Vn(r.method)).catch((e=>{throw o.trigger(a.ERROR,{type:s.MEDIA_ERROR,details:i.FRAG_DECRYPT_ERROR,fatal:!1,error:e,reason:e.message,frag:n}),e})).then((t=>{const s=performance.now();o.trigger(a.FRAG_DECRYPTED,{frag:n,payload:t,stats:{tstart:e,tdecrypt:s}})})).catch((e=>{this.warn(`${e.name}: ${e.message}`),this.state=Gt.IDLE}))}}doTick(){if(this.media){if(this.state===Gt.IDLE){const{currentTrackId:e,levels:n}=this,t=null==n?void 0:n[e];if(!t||!n.length||!t.details)return;if(this.waitForLive(t))return;const{config:s}=this,i=this.getLoadPosition(),a=Dn.bufferedInfo(this.tracksBuffered[this.currentTrackId]||[],i,s.maxBufferHole),{end:r,len:o}=a,l=t.details;if(o>this.hls.maxBufferLength+l.levelTargetDuration)return;const c=l.fragments,d=c.length,u=l.edge;let p=null;const h=this.fragPrevious;if(r<u){const e=s.maxFragLookUpTolerance,n=r>u-e?0:e;p=tn(h,c,Math.max(c[0].start,r),n),!p&&h&&h.start<c[0].start&&(p=c[0])}else p=c[d-1];if(p=this.filterReplacedPrimary(p,t.details),!p)return;const m=c[p.sn-l.startSN-1];if(m&&m.cc===p.cc&&this.fragmentTracker.getState(m)===hn&&(p=m),this.fragmentTracker.getState(p)===hn){const e=this.mapToInitFragWhenRequired(p);e&&this.loadFragment(e,t,r)}}}else this.state=Gt.IDLE}loadFragment(e,n,t){q(e)?super.loadFragment(e,n,t):this._loadInitSegment(e,n)}get mediaBufferTimeRanges(){return new Ua(this.tracksBuffered[this.currentTrackId]||[])}},subtitleTrackController:class extends yi{constructor(e){super(e,"subtitle-track-controller"),this.media=null,this.tracks=[],this.groupIds=null,this.tracksInGroup=[],this.trackId=-1,this.currentTrack=null,this.selectDefaultTrack=!0,this.queuedDefaultTrack=-1,this.useTextTrackPolling=!1,this.subtitlePollingInterval=-1,this._subtitleDisplay=!0,this.asyncPollTrackChange=()=>this.pollTrackChange(0),this.onTextTracksChanged=()=>{if(this.useTextTrackPolling||self.clearInterval(this.subtitlePollingInterval),!this.media||!this.hls.config.renderTextTracksNatively)return;let e=null;const n=xa(this.media.textTracks);for(let t=0;t<n.length;t++)if("hidden"===n[t].mode)e=n[t];else if("showing"===n[t].mode){e=n[t];break}const t=this.findTrackForTextTrack(e);this.subtitleTrack!==t&&this.setSubtitleTrack(t)},this.registerListeners()}destroy(){this.unregisterListeners(),this.tracks.length=0,this.tracksInGroup.length=0,this.currentTrack=null,this.onTextTracksChanged=this.asyncPollTrackChange=null,super.destroy()}get subtitleDisplay(){return this._subtitleDisplay}set subtitleDisplay(e){this._subtitleDisplay=e,this.trackId>-1&&this.toggleTrackModes()}registerListeners(){const{hls:e}=this;
2e.on(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.MANIFEST_PARSED,this.onManifestParsed,this),e.on(a.LEVEL_LOADING,this.onLevelLoading,this),e.on(a.LEVEL_SWITCHING,this.onLevelSwitching,this),e.on(a.SUBTITLE_TRACK_LOADED,this.onSubtitleTrackLoaded,this),e.on(a.ERROR,this.onError,this)}unregisterListeners(){const{hls:e}=this;e.off(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.MANIFEST_PARSED,this.onManifestParsed,this),e.off(a.LEVEL_LOADING,this.onLevelLoading,this),e.off(a.LEVEL_SWITCHING,this.onLevelSwitching,this),e.off(a.SUBTITLE_TRACK_LOADED,this.onSubtitleTrackLoaded,this),e.off(a.ERROR,this.onError,this)}onMediaAttached(e,n){this.media=n.media,this.media&&(this.queuedDefaultTrack>-1&&(this.subtitleTrack=this.queuedDefaultTrack,this.queuedDefaultTrack=-1),this.useTextTrackPolling=!(this.media.textTracks&&"onchange"in this.media.textTracks),this.useTextTrackPolling?this.pollTrackChange(500):this.media.textTracks.addEventListener("change",this.asyncPollTrackChange))}pollTrackChange(e){self.clearInterval(this.subtitlePollingInterval),this.subtitlePollingInterval=self.setInterval(this.onTextTracksChanged,e)}onMediaDetaching(e,n){const t=this.media;if(!t)return;const s=!!n.transferMedia;self.clearInterval(this.subtitlePollingInterval),this.useTextTrackPolling||t.textTracks.removeEventListener("change",this.asyncPollTrackChange),this.trackId>-1&&(this.queuedDefaultTrack=this.trackId),this.subtitleTrack=-1,this.media=null,s||xa(t.textTracks).forEac
2h((e=>{Ta(e)}))}onManifestLoading(){this.tracks=[],this.groupIds=null,this.tracksInGroup=[],this.trackId=-1,this.currentTrack=null,this.selectDefaultTrack=!0}onManifestParsed(e,n){this.tracks=n.subtitleTracks}onSubtitleTrackLoaded(e,n){const{id:t,groupId:s,details:i}=n,a=this.tracksInGroup[t];if(!a||a.groupId!==s)return void this.warn(`Subtitle track with id:${t} and group:${s} not found in active group ${null==a?void 0:a.groupId}`);const r=a.details;a.details=n.details,this.log(`Subtitle track ${t} "${a.name}" lang:${a.lang} group:${s} loaded [${i.startSN}-${i.endSN}]`),t===this.trackId&&this.playlistLoaded(t,n,r)}onLevelLoading(e,n){this.switchLevel(n.level)}onLevelSwitching(e,n){this.switchLevel(n.level)}switchLevel(e){const n=this.hls.levels[e];if(!n)return;const t=n.subtitleGroups||null,s=this.groupIds;let i=this.currentTrack;if(!t||(null==s?void 0:s.length)!==(null==t?void 0:t.length)||null!=t&&t.some((e=>-1===(null==s?void 0:s.indexOf(e))))){this.groupIds=t,this.trackId=-1,this.currentTrack=null;const e=this.tracks.filter((e=>!t||-1!==t.indexOf(e.groupId)));if(e.length)this.selectDefaultTrack&&!e.some((e=>e.default))&&(this.selectDefaultTrack=!1),e.forEach(((e,n)=>{e.id=n}));else if(!i&&!this.tracksInGroup.length)return;this.tracksInGroup=e;const n=this.hls.config.subtitlePreference;if(!i&&n){this.selectDefaultTrack=!1;const t=Xe(n,e);if(t>-1)i=e[t];else{const e=Xe(n,this.tracks);i=this.tracks[e]}}let s=this.findTrackId(i);-1===s&&i&&(s=this.findTrackId(null));const r={subtitleTracks:e};this.log(`Updating subtitle tracks, ${e.length} track(s) found in "${null==t?void 0:t.join(",")}" group-id`),this.hls.trigger(a.SUBTITLE_TRACKS_UPDATED,r),-1!==s&&-1===this.trackId&&this.setSubtitleTrack(s)}}findTrackId(e){const n=this.tracksInGroup,t=this.selectDefaultTrack;for(let s=0;s<n.length;s++){const i=n[s];if((!t||i.default)&&(t||e)&&(!e||Qe(i,e)))return s}if(e){for(let t=0;t<n.length;t++){const s=n[t];if(ki(e.attrs,s.attrs,["LANGUAGE","ASSOC-LANGUAGE","CHARACTERISTICS"]))return t}for(let t=0;t<n.length;t++){const s=n[t];if(ki(e.attrs,s.attrs,["LANGUAGE"]))return t}}return-1}findTrackForTextTrack(e){if(e){const n=this.tracksInGroup;for(let t=0;t<n.length;t++)if(Ti(n[t],e))return t}return-1}onError(e,n){!n.fatal&&n.context&&(n.context.type!==c||n.context.id!==this.trackId||this.groupIds&&-1===this.groupIds.indexOf(n.context.groupId)||this.checkRetry(n))}get allSubtitleTracks(){return this.tracks}get subtitleTracks(){return this.tracksInGroup}get subtitleTrack(){return this.trackId}set subtitleTrack(e){this.selectDefaultTrack=!1,this.setSubtitleTrack(e)}setSubtitleOption(e){if(this.hls.config.subtitlePreference=e,e){if(-1===e.id)return this.setSubtitleTrack(-1),null;const n=this.allSubtitleTracks;if(this.selectDefaultTrack=!1,n.length){const t=this.currentTrack;if(t&&Qe(e,t))return t;const s=Xe(e,this.tracksInGroup);if(s>-1){const e=this.tracksInGroup[s];return this.setSubtitleTrack(s),e}if(t)return null;{const t=Xe(e,n);if(t>-1)return n[t]}}}return null}loadPlaylist(e){super.loadPlaylist(),this.shouldLoadPlaylist(this.currentTrack)&&this.scheduleLoading(this.currentTrack,e)}loadingPlaylist(e,n){super.loadingPlaylist(e,n);const t=e.id,s=e.groupId,i=this.getUrlWithDirectives(e.url,n),r=e.details,o=null==r?void 0:r.age;this.log(`Loading subtitle ${t} "${e.name}" lang:${e.lang} group:${s}${void 0!==(null==n?void 0:n.msn)?" at sn "+n.msn+" part "+n.part:""}${o&&r.live?" age "+o.toFixed(1)+(r.type?" "+r.type||0:""):""} ${i}`),this.hls.trigger(a.SUBTITLE_TRACK_LOADING,{url:i,id:t,groupId:s,deliveryDirectives:n||null,track:e})}toggleTrackModes(){const{media:e}=this;if(!e)return;const n=xa(e.textTracks),t=this.currentTrack;let s;if(t&&(s=n.filter((e=>Ti(t,e)))[0],s||this.warn(`Unable to find subtitle TextTrack with name "${t.name}" and language "${t.lang}"`)),[].slice.call(n).forEach((e=>{"disabled"!==e.mode&&e!==s&&(e.mode="disabled")})),s){const e=this.subtitleDisplay?"showing":"hidden";s.mode!==e&&(s.mode=e)}}setSubtitleTrack(n){const t=this.tracksInGroup;if(!this.media)return void(this.queuedDefaultTrack=n);if(n<-1||n>=t.length||!e(n))return void this.warn(`Invalid subtitle track id: ${n}`);this.selectDefaultTrack=!1;const s=this.currentTrack,i=t[n]||null;if(this.trackId=n,this.currentTrack=i,this.toggleTrackModes(),!i)return void this.hls.trigger(a.SUBTITLE_TRACK_SWITCH,{id:n});const r=!!i.details&&!i.details.live;if(n===this.trackId&&i===s&&r)return;this.log(`Switching to subtitle-track ${n}`+(i?` "${i.name}" lang:${i.lang} group:${i.groupId}`:""));const{id:o,groupId:l="",name:c,type:d,url:u}=i;this.hls.trigger(a.SUBTITLE_TRACK_SWITCH,{id:o,groupId:l,name:c,type:d,url:u});const p=this.switchParams(i.url,null==s?void 0:s.details,i.details);this.loadPlaylist(p)}},timelineController:class{constructor(e){this.hls=void 0,this.media=null,this.config=void 0,this.enabled=!0,this.Cues=void 0,this.textTracks=[],this.tracks=[],this.initPTS=[],this.unparsedVttFrags=[],this.captionsTracks={},this.nonNativeCaptionsTracks={},this.cea608Parser1=void 0,this.cea608Parser2=void 0,this.lastCc=-1,this.lastSn=-1,this.lastPartIndex=-1,this.prevCC=-1,this.vttCCs={ccOffset:0,presentationOffset:0,0:{start:0,prevCC:-1,new:!0}},this.captionsProperties=void 0,this.hls=e,this.config=e.config,this.Cues=e.config.cueHandler,this.captionsProperties={textTrack1:{label:this.config.captionsTextTrack1Label,languageCode:this.config.captionsTextTrack1LanguageCode},textTrack2:{label:this.config.captionsTextTrack2Label,languageCode:this.config.captionsTextTrack2LanguageCode},textTrack3:{label:this.config.captionsTextTrack3Label,languageCode:this.config.captionsTextTrack3LanguageCode},textTrack4:{label:this.config.captionsTextTrack4Label,languageCode:this.config.captionsTextTrack4LanguageCode}}
2,e.on(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.on(a.SUBTITLE_TRACKS_UPDATED,this.onSubtitleTracksUpdated,this),e.on(a.FRAG_LOADING,this.onFragLoading,this),e.on(a.FRAG_LOADED,this.onFragLoaded,this),e.on(a.FRAG_PARSING_USERDATA,this.onFragParsingUserdata,this),e.on(a.FRAG_DECRYPTED,this.onFragDecrypted,this),e.on(a.INIT_PTS_FOUND,this.onInitPtsFound,this),e.on(a.SUBTITLE_TRACKS_CLEARED,this.onSubtitleTracksCleared,this),e.on(a.BUFFER_FLUSHING,this.onBufferFlushing,this)}destroy(){const{hls:e}=this;e.off(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.off(a.SUBTITLE_TRACKS_UPDATED,this.onSubtitleTracksUpdated,this),e.off(a.FRAG_LOADING,this.onFragLoading,this),e.off(a.FRAG_LOADED,this.onFragLoaded,this),e.off(a.FRAG_PARSING_USERDATA,this.onFragParsingUserdata,this),e.off(a.FRAG_DECRYPTED,this.onFragDecrypted,this),e.off(a.INIT_PTS_FOUND,this.onInitPtsFound,this),e.off(a.SUBTITLE_TRACKS_CLEARED,this.onSubtitleTracksCleared,this),e.off(a.BUFFER_FLUSHING,this.onBufferFlushing,this),this.hls=this.config=this.media=null,this.cea608Parser1=this.cea608Parser2=void 0}initCea608Parsers(){const e=new Rr(this,"textTrack1"),n=new Rr(this,"textTrack2"),t=new Rr(this,"textTrack3"),s=new Rr(this,"textTrack4");this.cea608Parser1=new sr(1,e,n),this.cea608Parser2=new sr(3,t,s)}addCues(e,n,t,s,i){let r=!1;for(let e=i.length;e--;){const s=i[e],a=(o=s[0],l=s[1],c=n,d=t,Math.min(l,d)-Math.max(o,c));if(a>=0&&(s[0]=Math.min(s[0],n),s[1]=Math.max(s[1],t),r=!0,a/(t-n)>.5))return}var o,l,c,d;if(r||i.push([n,t]),this.config.renderTextTracksNatively){const i=this.captionsTracks[e];this.Cues.newCue(i,n,t,s)}else{const i=this.Cues.newCue(null,n,t,s);this.hls.trigger(a.CUES_PARSED,{type:"captions",cues:i,track:e})}}onInitPtsFound(e,{frag:n,id:t,initPTS:s,timescale:i}){const{unparsedVttFrags:r}=this;t===d&&(this.initPTS[n.cc]={baseTime:s,timescale:i}),r.length&&(this.unparsedVttFrags=[],r.forEach((e=>{this.initPTS[e.frag.cc]?this.onFragLoaded(a.FRAG_LOADED,e):this.hls.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:e.frag,error:new Error("Subtitle discontinuity domain does not match main")})})))}getExistingTrack(e,n){const{media:t}=this;if(t)for(let s=0;s<t.textTracks.length;s++){const i=t.textTracks[s];if(Pr(i,{name:e,lang:n,characteristics:"transcribes-spoken-dialog,describes-music-and-sound"}))return i}return null}createCaptionsTrack(e){this.config.renderTextTracksNatively?this.createNativeTrack(e):this.createNonNativeTrack(e)}createNativeTrack(e){if(this.captionsTracks[e])return;const{captionsProperties:n,captionsTracks:t,media:s}=this,{label:i,languageCode:a}=n[e],r=this.getExistingTrack(i,a);if(r)t[e]=r,Ta(t[e]),wa(t[e],s);else{const n=this.createTextTrack("captions",i,a);n&&(n[e]=!0,t[e]=n)}}createNonNativeTrack(e){if(this.nonNativeCaptionsTracks[e])return;const n=this.captionsProperties[e];if(!n)return;const t={_id:e,label:n.label,kind:"captions",default:!!n.media&&!!n.media.default,closedCaptions:n.media};this.nonNativeCaptionsTracks[e]=t,this.hls.trigger(a.NON_NATIVE_TEXT_TRACKS_FOUND,{tracks:[t]})}createTextTrack(e,n,t){const s=this.media;if(s)return s.addTextTrack(e,n,t)}onMediaAttaching(e,n){this.media=n.media,n.mediaSource||this._cleanTracks()}onMediaDetaching(e,n){const t=!!n.transferMedia;if(this.media=null,t)return;const{captionsTracks:s}=this;Object.keys(s).forEach((e=>{Ta(s[e]),delete s[e]})),this.nonNativeCaptionsTracks={}}onManifestLoading(){this.lastCc=-1,this.lastSn=-1,this.lastPartIndex=-1,this.prevCC=-1,this.vttCCs={ccOffset:0,presentationOffset:0,0:{start:0,prevCC:-1,new:!0}},this._cleanTracks(),this.tracks=[],this.captionsTracks={},this.nonNativeCaptionsTracks={},this.textTracks=[],this.unparsedVttFrags=[],this.initPTS=[],this.cea608Parser1&&this.cea608Parser2&&(this.cea608Parser1.reset(),this.cea608Parser2.reset())}_cleanTracks(){const{media:e}=this;if(!e)return;const n=e.textTracks;
vendor: 5,952 bytes, line 2
2if(n)for(let e=0;e<n.length;e++)Ta(n[e])}onSubtitleTracksUpdated(e,n){const t=n.subtitleTracks||[],s=t.some((e=>e.textCodec===br));if(this.config.enableWebVTT||s&&this.config.enableIMSC1){if(wi(this.tracks,t))return void(this.tracks=t);if(this.textTracks=[],this.tracks=t,this.config.renderTextTracksNatively){const e=this.media,n=e?xa(e.textTracks):null;if(this.tracks.forEach(((e,t)=>{let s;if(n){let t=null;for(let s=0;s<n.length;s++)if(n[s]&&Pr(n[s],e)){t=n[s],n[s]=null;break}t&&(s=t)}if(s)Ta(s);else{const n=Ir(e);s=this.createTextTrack(n,e.name,e.lang),s&&(s.mode="disabled")}s&&this.textTracks.push(s)})),null!=n&&n.length){const e=n.filter((e=>null!==e)).map((e=>e.label));e.length&&this.hls.logger.warn(`Media element contains unused subtitle tracks: ${e.join(", ")}. Replace media element for each source to clear TextTracks and captions menu.`)}}else if(this.tracks.length){const e=this.tracks.map((e=>({label:e.name,kind:e.type.toLowerCase(),default:e.default,subtitleTrack:e})));this.hls.trigger(a.NON_NATIVE_TEXT_TRACKS_FOUND,{tracks:e})}}}onManifestLoaded(e,n){this.config.enableCEA708Captions&&n.captions&&n.captions.forEach((e=>{const n=/(?:CC|SERVICE)([1-4])/.exec(e.instreamId);if(!n)return;const t=`textTrack${n[1]}`,s=this.captionsProperties[t];s&&(s.label=e.name,e.lang&&(s.languageCode=e.lang),s.media=e)}))}closedCaptionsForLevel(e){const n=this.hls.levels[e.level];return null==n?void 0:n.attrs["CLOSED-CAPTIONS"]}onFragLoading(e,n){if(this.enabled&&n.frag.type===d){var t,s;const{cea608Parser1:e,cea608Parser2:i,lastSn:a}=this,{cc:r,sn:o}=n.frag,l=null!=(t=null==(s=n.part)?void 0:s.index)?t:-1;e&&i&&(o!==a+1||o===a&&l!==this.lastPartIndex+1||r!==this.lastCc)&&(e.reset(),i.reset()),this.lastCc=r,this.lastSn=o,this.lastPartIndex=l}}onFragLoaded(e,n){const{frag:t,payload:s}=n;if(t.type===p)if(s.byteLength){const e=t.decryptdata,i="stats"in n;if(null==e||!e.encrypted||i){const e=this.tracks[t.level],i=this.vttCCs;i[t.cc]||(i[t.cc]={start:t.start,prevCC:this.prevCC,new:!0},this.prevCC=t.cc),e&&e.textCodec===br?this._parseIMSC1(t,s):this._parseVTTs(n)}}else this.hls.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:t,error:new Error("Empty subtitle payload")})}_parseIMSC1(e,n){const t=this.hls;Tr(n,this.initPTS[e.cc],(n=>{this._appendCues(n,e.level),t.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!0,frag:e})}),(n=>{t.logger.log(`Failed to parse IMSC1: ${n}`),t.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:e,error:n})}))}_parseVTTs(n){var t;const{frag:s,payload:i}=n,{initPTS:r,unparsedVttFrags:o}=this,l=r.length-1;if(!r[s.cc]&&-1===l)return void o.push(n);const c=this.hls;!function(n,t,s,i,a,r,o){const l=new vr,c=L(new Uint8Array(n)).trim().replace(gr,"\n").split("\n"),d=[],u=t?function(e,n=1){return ei(e,9e4,1/n)}(t.baseTime,t.timescale):0;let p,h="00:00.000",m=0,v=0,g=!0;l.oncue=function(e){const n=s[i];let r=s.ccOffset;const o=(m-u)/9e4;if(null!=n&&n.new&&(void 0!==v?r=s.ccOffset=n.start:function(e,n,t){let s=e[n],i=e[s.prevCC];if(!i||!i.new&&s.new)return e.ccOffset=e.presentationOffset=s.start,void(s.new=!1);for(;null!=(a=i)&&a.new;){var a;e.ccOffset+=s.start-i.start,s.new=!1,s=i,i=e[s.prevCC]}e.presentationOffset=t}(s,i,o)),o){if(!t)return void(p=new Error("Missing initPTS for VTT MPEGTS"));r=o-s.presentationOffset}const l=e.endTime-e.startTime,c=oi(9e4*(e.startTime+r-v),9e4*a)/9e4;e.startTime=Math.max(c,0),e.endTime=Math.max(c+l,0);const h=e.text.trim();e.text=decodeURIComponent(encodeURIComponent(h)),e.id||(e.id=_r(e.startTime,e.endTime,h)),e.endTime>0&&d.push(e)},l.onparsingerror=function(e){p=e},l.onflush=function(){p?o(p):r(d)},c.forEach((n=>{if(g){if(fr(n,"X-TIMESTAMP-MAP=")){g=!1,n.slice(16).split(",").forEach((e=>{fr(e,"LOCAL:")?h=e.slice(6):fr(e,"MPEGTS:")&&(m=parseInt(e.slice(7)))}));try{v=function(n){let t=parseInt(n.slice(-3));const s=parseInt(n.slice(-6,-4)),i=parseInt(n.slice(-9,-7)),a=n.length>9?parseInt(n.substring(0,n.indexOf(":"))):0;if(!(e(t)&&e(s)&&e(i)&&e(a)))throw Error(`Malformed X-TIMESTAMP-MAP: Local:${n}`);return t+=1e3*s,t+=6e4*i,t+=36e5*a,t}(h)/1e3}catch(e){p=e}return}""===n&&(g=!1)}l.parse(n+"\n")})),l.flush()}(null!=(t=s.initSegment)&&t.data?ue(s.initSegment.data,new Uint8Array(i)).buffer:i,this.initPTS[s.cc],this.vttCCs,s.cc,s.start,(e=>{this._appendCues(e,s.level),c.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!0,frag:s})}),(e=>{const t="Missing initPTS for VTT MPEGTS"===e.message;t?o.push(n):this._fallbackToIMSC1(s,i),c.logger.log(`Failed to parse VTT cue: ${e}`),t&&l>s.cc||c.trigger(a.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:s,error:e})}))}_fallbackToIMSC1(e,n){const t=this.tracks[e.level];t.textCodec||Tr(n,this.initPTS[e.cc],(()=>{t.textCodec=br,this._parseIMSC1(e,n)}),(()=>{t.textCodec="wvtt"}))}_appendCues(e,n){const t=this.hls;if(this.config.renderTextTracksNatively){const t=this.textTracks[n];if(!t||"disabled"===t.mode)return;e.forEach((e=>ka(t,e)))}else{const s=this.tracks[n];if(!s)return;const i=s.default?"default":"subtitles"+n;t.trigger(a.CUES_PARSED,{type:"subtitles",cues:e,track:i})}}onFragDecrypted(e,n){const{frag:t}=n;t.type===p&&this.onFragLoaded(a.FRAG_LOADED,n)}onSubtitleTracksCleared(){this.tracks=[],this.captionsTracks={}}onFragParsingUserdata(e,n){if(!this.enabled||!this.config.enableCEA708Captions)return;const{frag:t,samples:s}=n;if(t.type!==d||"NONE"!==this.closedCaptionsForLevel(t))for(let e=0;e<s.length;e++){const n=s[e].bytes;if(n){this.cea608Parser1||this.initCea608Parsers();const t=this.extractCea608Data(n);this.cea608Parser1.addData(s[e].pts,t[0]),this.cea608Parser2.addData(s[e].pts,t[1])}}}onBufferFlushing(e,{startOffset:n,endOffset:t,endOffsetSubtitles:s,type:i}){const{media:a}=this;if(a&&!(a.currentTime<t)){if(!i||"video"===i){const{captionsTracks:e}=this;Object.keys(e).forEach((s=>Ea(e[s],n,t)))}if(this.config.renderTextTracksNatively&&0===n&&void 0!==s){const{textTracks:e}=this;Object.keys(e).forEach((t=>Ea(e[t],n,s)))}}}extractCea608Data(e){const n=[[],[]],t=31&e[0];let s=2;
2for(let i=0;i<t;i++){const t=e[s++],i=127&e[s++],a=127&e[s++];if((0!==i||0!==a)&&4&t){const e=3&t;0!==e&&1!==e||(n[e].push(i),n[e].push(a))}}return n}},audioStreamController:class extends zt{constructor(e,n,t){super(e,n,t,"audio-stream-controller",u),this.mainAnchor=null,this.mainFragLoading=null,this.audioOnly=!1,this.bufferedTrack=null,this.switchingTrack=null,this.trackId=-1,this.waitingData=null,this.mainDetails=null,this.flushing=!1,this.bufferFlushed=!1,this.cachedTrackLoadedData=null,this.registerListeners()}onHandlerDestroying(){this.unregisterListeners(),super.onHandlerDestroying(),this.resetItem()}resetItem(){this.mainDetails=this.mainAnchor=this.mainFragLoading=this.bufferedTrack=this.switchingTrack=this.waitingData=this.cachedTrackLoadedData=null}registerListeners(){super.registerListeners();const{hls:e}=this;e.on(a.LEVEL_LOADED,this.onLevelLoaded,this),e.on(a.AUDIO_TRACKS_UPDATED,this.onAudioTracksUpdated,this),e.on(a.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.on(a.AUDIO_TRACK_LOADED,this.onAudioTrackLoaded,this),e.on(a.BUFFER_RESET,this.onBufferReset,this),e.on(a.BUFFER_CREATED,this.onBufferCreated,this),e.on(a.BUFFER_FLUSHING,this.onBufferFlushing,this),e.on(a.BUFFER_FLUSHED,this.onBufferFlushed,this),e.on(a.INIT_PTS_FOUND,this.onInitPtsFound,this),e.on(a.FRAG_LOADING,this.onFragLoading,this),e.on(a.FRAG_BUFFERED,this.onFragBuffered,this)}unregisterListeners(){const{hls:e}=this;e&&(super.unregisterListeners(),e.off(a.LEVEL_LOADED,this.onLevelLoaded,this),e.off(a.AUDIO_TRACKS_UPDATED,this.onAudioTracksUpdated,this),e.off(a.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.off(a.AUDIO_TRACK_LOADED,this.onAudioTrackLoaded,this),e.off(a.BUFFER_RESET,this.onBufferReset,this),e.off(a.BUFFER_CREATED,this.onBufferCreated,this),e.off(a.BUFFER_FLUSHING,this.onBufferFlushing,this),e.off(a.BUFFER_FLUSHED,this.onBufferFlushed,this),e.off(a.INIT_PTS_FOUND,this.onInitPtsFound,this),e.off(a.FRAG_LOADING,this.onFragLoading,this),e.off(a.FRAG_BUFFERED,this.onFragBuffered,this))}onInitPtsFound(e,{frag:n,id:t,initPTS:s,timescale:i}){if(t===d){const e=n.cc,t=this.fragCurrent;if(this.initPTS[e]={baseTime:s,timescale:i},this.log(`InitPTS for cc: ${e} found from main: ${s}/${i}`),this.mainAnchor=n,this.state===Gt.WAITING_INIT_PTS){const t=this.waitingData;(!t&&!this.loadingParts||t&&t.frag.cc!==e)&&this.syncWithAnchor(n,null==t?void 0:t.frag)}else!this.hls.hasEnoughToStart&&t&&t.cc!==e?(t.abortRequests(),this.syncWithAnchor(n,t)):this.state===Gt.IDLE&&this.tick()}}getLoadPosition(){return!this.startFragRequested&&this.nextLoadPosition>=0?this.nextLoadPosition:super.getLoadPosition()}syncWithAnchor(e,n){var t;const s=(null==(t=this.mainFragLoading)?void 0:t.frag)||null;if(n&&(null==s?void 0:s.cc)===n.cc)return;const i=(s||e).cc,a=rn(this.getLevelDetails(),i,this.getLoadPosition());a&&(this.log(`Waiting fragment cc (${null==n?void 0:n.cc}) cancelled because video is at cc ${e.cc}`),this.startFragRequested=!1,this.nextLoadPosition=a.start,this.resetLoadingState(),this.state===Gt.IDLE&&this.doTickIdle())}startLoad(e,n){if(!this.levels)return this.startPosition=e,void(this.state=Gt.STOPPED);const t=this.lastCurrentTime;this.stopLoad(),this.setInterval(100),t>0&&-1===e?(this.log(`Override startPosition with lastCurrentTime @${t.toFixed(3)}`),e=t,this.state=Gt.IDLE):this.state=Gt.WAITING_TRACK,this.nextLoadPosition=this.lastCurrentTime=e+this.timelineOffset,this.startPosition=n?-1:e,this.tick()}doTick(){switch(this.state){case Gt.IDLE:this.doTickIdle();break;case Gt.WAITING_TRACK:{const{levels:e,trackId:n}=this,t=null==e?void 0:e[n],s=null==t?void 0:t.details;if(s&&!this.waitForLive(t)){if(this.waitForCdnTuneIn(s))break;this.state=Gt.WAITING_INIT_PTS}break}case Gt.FRAG_LOADING_WAITING_RETRY:{var e;const n=performance.now(),t=this.retryDate;if(!t||n>=t||null!=(e=this.media)&&e.seeking){const{levels:e,trackId:n}=this;this.log("RetryDate reached, switch back to IDLE state"),this.resetStartWhenNotLoaded((null==e?void 0:e[n])||null),this.state=Gt.IDLE}break}case Gt.WAITING_INIT_PTS:{const e=this.waitingData;if(e){const{frag:n,part:t,cache:s,complete:i}=e,a=this.mainAnchor;if(void 0!==this.initPTS[n.cc]){this.waitingData=null,this.state=Gt.FRAG_LOADING;const e={frag:n,part:t,payload:s.flush().buffer,networkDetails:null};this._handleFragmentLoadProgress(e),i&&super._handleFragmentLoadComplete(e)}
vendor: 12,957 bytes, line 2
2else a&&a.cc!==e.frag.cc&&this.syncWithAnchor(a,e.frag)}else this.state=Gt.IDLE}}this.onTickEnd()}resetLoadingState(){const e=this.waitingData;e&&(this.fragmentTracker.removeFragment(e.frag),this.waitingData=null),super.resetLoadingState()}onTickEnd(){const{media:e}=this;null!=e&&e.readyState&&(this.lastCurrentTime=e.currentTime)}doTickIdle(){var e;const{hls:n,levels:t,media:s,trackId:i}=this,r=n.config;if(!this.buffering||!s&&!this.primaryPrefetch&&(this.startFragRequested||!r.startFragPrefetch)||null==t||!t[i])return;const o=t[i],l=o.details;if(!l||this.waitForLive(o)||this.waitForCdnTuneIn(l))return this.state=Gt.WAITING_TRACK,void(this.startFragRequested=!1);const c=this.mediaBuffer?this.mediaBuffer:this.media;this.bufferFlushed&&c&&(this.bufferFlushed=!1,this.afterBufferFlushed(c,U,u));const p=this.getFwdBufferInfo(c,u);if(null===p)return;if(!this.switchingTrack&&this._streamEnded(p,l))return n.trigger(a.BUFFER_EOS,{type:"audio"}),void(this.state=Gt.ENDED);const h=p.len,m=n.maxBufferLength,v=l.fragments,g=v[0].start,f=this.getLoadPosition(),_=this.flushing?f:p.end;if(this.switchingTrack&&s){const e=f;l.PTSKnown&&e<g&&(p.end>g||p.nextStart)&&(this.log("Alt audio track ahead of main track, seek to start of alt audio track"),s.currentTime=g+.05)}if(h>=m&&!this.switchingTrack&&_<v[v.length-1].start)return;let b=this.getNextFragment(_,l);if(b&&this.isLoopLoading(b,_)&&(b=this.getNextFragmentLoopLoading(b,l,p,d,m)),!b)return void(this.bufferFlushed=!0);let y=(null==(e=this.mainFragLoading)?void 0:e.frag)||null;if(!this.audioOnly&&this.startFragRequested&&y&&q(b)&&!b.endList&&(!l.live||!this.loadingParts&&_<this.hls.liveSyncPosition)&&(this.fragmentTracker.getState(y)===gn&&(this.mainFragLoading=y=null),y&&q(y))){if(b.start>y.end){const e=this.fragmentTracker.getFragAtPos(_,d);e&&e.end>y.end&&(y=e,this.mainFragLoading={frag:e,targetBufferTime:null})}if(b.start>y.end)return}this.loadFragment(b,o,_)}onMediaDetaching(e,n){this.bufferFlushed=this.flushing=!1,super.onMediaDetaching(e,n)}onAudioTracksUpdated(e,{audioTracks:n}){this.resetTransmuxer(),this.levels=n.map((e=>new qe(e)))}onAudioTrackSwitching(e,n){const t=!!n.url;this.trackId=n.id;const{fragCurrent:s}=this;s&&(s.abortRequests(),this.removeUnbufferedFrags(s.start)),this.resetLoadingState(),t?(this.switchingTrack=n,this.flushAudioIfNeeded(n),this.state!==Gt.STOPPED&&(this.setInterval(100),this.state=Gt.IDLE,this.tick())):(this.resetTransmuxer(),this.switchingTrack=null,this.bufferedTrack=n,this.clearInterval())}onManifestLoading(){super.onManifestLoading(),this.bufferFlushed=this.flushing=this.audioOnly=!1,this.resetItem(),this.trackId=-1}onLevelLoaded(e,n){this.mainDetails=n.details;const t=this.cachedTrackLoadedData;t&&(this.cachedTrackLoadedData=null,this.onAudioTrackLoaded(a.AUDIO_TRACK_LOADED,t))}onAudioTrackLoaded(e,n){var t;const{levels:s}=this,{details:i,id:r,groupId:o,track:l}=n;if(!s)return void this.warn(`Audio tracks reset while loading track ${r} "${l.name}" of "${o}"`);const c=this.mainDetails;if(!c||i.endCC>c.endCC||c.expired)return this.cachedTrackLoadedData=n,void(this.state!==Gt.STOPPED&&(this.state=Gt.WAITING_TRACK));this.cachedTrackLoadedData=null,this.log(`Audio track ${r} "${l.name}" of "${o}" loaded [${i.startSN},${i.endSN}]${i.lastPartSn?`[part-${i.lastPartSn}-${i.lastPartIndex}]`:""},duration:${i.totalduration}`);const d=s[r];let u=0;if(i.live||null!=(t=d.details)&&t.live){if(this.checkLiveUpdate(i),i.deltaUpdateFailed)return;var p;d.details&&(u=this.alignPlaylists(i,d.details,null==(p=this.levelLastLoaded)?void 0:p.details)),i.alignedSliding||(Ut(i,c),i.alignedSliding||jt(i,c),u=i.fragmentStart)}d.details=i,this.levelLastLoaded=d,this.startFragRequested||this.setStartPosition(c,u),this.hls.trigger(a.AUDIO_TRACK_UPDATED,{details:i,id:r,groupId:n.groupId}),this.state!==Gt.WAITING_TRACK||this.waitForCdnTuneIn(i)||(this.state=Gt.IDLE),this.tick()}_handleFragmentLoadProgress(e){var n;const t=e.frag,{part:s,payload:i}=e,{config:a,trackId:r,levels:o}=this;if(!o)return void this.warn(`Audio tracks were reset while fragment load was in progress. Fragment ${t.sn} of level ${t.level} will not be buffered`);const l=o[r];if(!l)return void this.warn("Audio track is undefined on fragment load progress");const c=l.details;if(!c)return this.warn("Audio track details undefined on fragment load progress"),void this.removeUnbufferedFrags(t.start);const d=a.defaultAudioCodec||l.audioCodec||"mp4a.40.2";let p=this.transmuxer;p||(p=this.transmuxer=new bi(this.hls,u,this._handleTransmuxComplete.bind(this),this._handleTransmuxerFlush.bind(this)));const h=this.initPTS[t.cc],m=null==(n=t.initSegment)?void 0:n.data;if(void 0!==h){const e=!1,n=s?s.index:-1,a=-1!==n,r=new In(t.level,t.sn,t.stats.chunkCount,i.byteLength,n,a);p.push(i,m,d,"",t,s,c.totalduration,e,r,h)}else{this.log(`Unknown video PTS for cc ${t.cc}, waiting for video PTS before demuxing audio frag ${t.sn} of [${c.startSN} ,${c.endSN}],track ${r}`);const{cache:e}=this.waitingData=this.waitingData||{frag:t,part:s,cache:new Kt,complete:!1};e.push(new Uint8Array(i)),this.state!==Gt.STOPPED&&(this.state=Gt.WAITING_INIT_PTS)}}_handleFragmentLoadComplete(e){this.waitingData?this.waitingData.complete=!0:super._handleFragmentLoadComplete(e)}onBufferReset(){this.mediaBuffer=null}onBufferCreated(e,n){this.bufferFlushed=this.flushing=!1;const t=n.tracks.audio;t&&(this.mediaBuffer=t.buffer||null)}onFragLoading(e,n){!this.audioOnly&&n.frag.type===d&&q(n.frag)&&(this.mainFragLoading=n,this.state===Gt.IDLE&&this.tick())}onFragBuffered(e,n){const{frag:t,part:s}=n;if(t.type===u)if(this.fragContextChanged(t))this.warn(`Fragment ${t.sn}${s?" p: "+s.index:""} of level ${t.level} finished buffering, but was aborted. state: ${this.state}, audioSwitch: ${this.switchingTrack?this.switchingTrack.name:"false"}`);else{if(q(t)){this.fragPrevious=t;const e=this.switchingTrack;e&&(this.bufferedTrack=e,this.switchingTrack=null,this.hls.trigger(a.AUDIO_TRACK_SWITCHED,_({},e)))}this.fragBufferedComplete(t,s),this.media&&this.tick()}else this.audioOnly||t.type!==d||t.elementaryStreams.video||t.elementaryStreams.audiovideo||(this.audioOnly=!0,this.mainFragLoading=null)}onError(e,n){var t;if(n.fatal)this.state=Gt.ERROR;else switch(n.details){case i.FRAG_GAP:case i.FRAG_PARSING_ERROR:case i.FRAG_DECRYPT_ERROR:case i.FRAG_LOAD_ERROR:case i.FRAG_LOAD_TIMEOUT:case i.KEY_LOAD_ERROR:case i.KEY_LOAD_TIMEOUT:this.onFragmentOrKeyLoadError(u,n);break;case i.AUDIO_TRACK_LOAD_ERROR:case i.AUDIO_TRACK_LOAD_TIMEOUT:case i.LEVEL_PARSING_ERROR:n.levelRetry||this.state!==Gt.WAITING_TRACK||(null==(t=n.context)?void 0:t.type)!==l||(this.state=Gt.IDLE);break;case i.BUFFER_ADD_CODEC_ERROR:case i.BUFFER_APPEND_ERROR:if("audio"!==n.parent)return;this.reduceLengthAndFlushBuffer(n)||this.resetLoadingState();break;case i.BUFFER_FULL_ERROR:if("audio"!==n.parent)return;this.reduceLengthAndFlushBuffer(n)&&(this.bufferedTrack=null,super.flushMainBuffer(0,Number.POSITIVE_INFINITY,"audio"));break;case i.INTERNAL_EXCEPTION:this.recoverWorkerError(n)}}onBufferFlushing(e,{type:n}){n!==j&&(this.flushing=!0)}onBufferFlushed(e,{type:n}){if(n!==j){this.flushing=!1,this.bufferFlushed=!0,this.state===Gt.ENDED&&(this.state=Gt.IDLE);const e=this.mediaBuffer||this.media;e&&(this.afterBufferFlushed(e,n,u),this.tick())}}_handleTransmuxComplete(e){var n;const t="audio",{hls:s}=this,{remuxResult:i,chunkMeta:r}=e,o=this.getCurrentContext(r);if(!o)return void this.resetWhenMissingContext(r);const{frag:l,part:c,level:d}=o,{details:u}=d,{audio:p,text:h,id3:m,initSegment:v}=i;if(!this.fragContextChanged(l)&&u){if(this.state=Gt.PARSING,this.switchingTrack&&p&&this.completeAudioSwitch(this.switchingTrack),null!=v&&v.tracks){const e=l.initSegment||l;this._bufferInitSegment(d,v.tracks,e,r),s.trigger(a.FRAG_PARSING_INIT_SEGMENT,{frag:e,id:t,tracks:v.tracks})}if(p){const{startPTS:e,endPTS:n,startDTS:t,endDTS:s}=p;c&&(c.elementaryStreams[U]={startPTS:e,endPTS:n,startDTS:t,endDTS:s}),l.setElementaryStreamInfo(U,e,n,t,s),this.bufferFragmentData(p,l,c,r)}if(null!=m&&null!=(n=m.samples)&&n.length){const e=g({id:t,frag:l,details:u},m);s.trigger(a.FRAG_PARSING_METADATA,e)}if(h){const e=g({id:t,frag:l,details:u},h);s.trigger(a.FRAG_PARSING_USERDATA,e)}}else this.fragmentTracker.removeFragment(l)}_bufferInitSegment(e,n,t,s){if(this.state!==Gt.PARSING)return;if(n.video&&delete n.video,n.audiovideo&&delete n.audiovideo,!n.audio)return;const i=n.audio;i.id=u;const r=e.audioCodec;this.log(`Init audio buffer, container:${i.container}, codecs[level/parsed]=[${r}/${i.codec}]`),r&&1===r.split(",").length&&(i.levelCodec=r),this.hls.trigger(a.BUFFER_CODECS,n);const o=i.initSegment;if(null!=o&&o.byteLength){const e={type:"audio",frag:t,part:null,chunkMeta:s,parent:t.type,data:o};this.hls.trigger(a.BUFFER_APPENDING,e)}this.tickImmediate()}loadFragment(e,n,t){const s=this.fragmentTracker.getState(e);var i;if(this.switchingTrack||s===hn||s===vn)if(q(e))if(null!=(i=n.details)&&i.live&&!this.initPTS[e.cc]){this.log(`Waiting for video PTS in continuity counter ${e.cc} of live stream before loading audio fragment ${e.sn} of level ${this.trackId}`),this.state=Gt.WAITING_INIT_PTS;const t=this.mainDetails;t&&t.fragmentStart!==n.details.fragmentStart&&jt(n.details,t)}else super.loadFragment(e,n,t);else this._loadInitSegment(e,n);else this.clearTrackerIfNeeded(e)}flushAudioIfNeeded(e){if(this.media&&this.bufferedTrack){const{name:n,lang:t,assocLang:s,characteristics:i,audioCodec:a,channels:r}=this.bufferedTrack;Qe({name:n,lang:t,assocLang:s,characteristics:i,audioCodec:a,channels:r},e,Je)||(en(e.url,this.hls)?(this.log("Switching audio track : flushing all audio"),super.flushMainBuffer(0,Number.POSITIVE_INFINITY,"audio"),this.bufferedTrack=null):this.bufferedTrack=e)}}completeAudioSwitch(e){const{hls:n}=this;this.flushAudioIfNeeded(e),this.bufferedTrack=e,this.switchingTrack=null,n.trigger(a.AUDIO_TRACK_SWITCHED,_({},e))}},audioTrackController:class extends yi{constructor(e){super(e,"audio-track-controller"),this.tracks=[],this.groupIds=null,this.tracksInGroup=[],this.trackId=-1,this.currentTrack=null,this.selectDefaultTrack=!0,this.registerListeners()}registerListeners(){const{hls:e}=this;e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.MANIFEST_PARSED,this.onManifestParsed,this),e.on(a.LEVEL_LOADING,this.onLevelLoading,this),e.on(a.LEVEL_SWITCHING,this.onLevelSwitching,this),e.on(a.AUDIO_TRACK_LOADED,this.onAudioTrackLoaded,this),e.on(a.ERROR,this.onError,this)}unregisterListeners(){const{hls:e}=this;e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.MANIFEST_PARSED,this.onManifestParsed,this),e.off(a.LEVEL_LOADING,this.onLevelLoading,this),e.off(a.LEVEL_SWITCHING,this.onLevelSwitching,this),e.off(a.AUDIO_TRACK_LOADED,this.onAudioTrackLoaded,this),e.off(a.ERROR,this.onError,this)}destroy(){this.unregisterListeners(),this.tracks.length=0,this.tracksInGroup.length=0,this.currentTrack=null,super.destroy()}onManifestLoading(){this.tracks=[],this.tracksInGroup=[],this.groupIds=null,this.currentTrack=null,this.trackId=-1,this.selectDefaultTrack=!0}onManifestParsed(e,n){this.tracks=n.audioTracks||[]}onAudioTrackLoaded(e,n){const{id:t,groupId:s,details:i}=n,a=this.tracksInGroup[t];if(!a||a.groupId!==s)return void this.warn(`Audio track with id:${t} and group:${s} not found in active group ${null==a?void 0:a.groupId}`);const r=a.details;a.details=n.details,this.log(`Audio track ${t} "${a.name}" lang:${a.lang} group:${s} loaded [${i.startSN}-${i.endSN}]`),t===this.trackId&&this.playlistLoaded(t,n,r)}onLevelLoading(e,n){this.switchLevel(n.level)}onLevelSwitching(e,n){this.switchLevel(n.level)}switchLevel(e){const n=this.hls.levels[e];if(!n)return;const t=n.audioGroups||null,r=this.groupIds;let o=this.currentTrack;if(!t||(null==r?void 0:r.length)!==(null==t?void 0:t.length)||null!=t&&t.some((e=>-1===(null==r?void 0:r.indexOf(e))))){this.groupIds=t,this.trackId=-1,this.currentTrack=null;const e=this.tracks.filter((e=>!t||-1!==t.indexOf(e.groupId)));if(e.length)this.selectDefaultTrack&&!e.some((e=>e.default))&&(this.selectDefaultTrack=!1),e.forEach(((e,n)=>{e.id=n}));else if(!o&&!this.tracksInGroup.length)return;this.tracksInGroup=e;const n=this.hls.config.audioPreference;if(!o&&n){const t=Xe(n,e,Je);if(t>-1)o=e[t];else{const e=Xe(n,this.tracks);o=this.tracks[e]}}let r=this.findTrackId(o);-1===r&&o&&(r=this.findTrackId(null));const c={audioTracks:e};this.log(`Updating audio tracks, ${e.length} track(s) found in group(s): ${null==t?void 0:t.join(",")}`),this.hls.trigger(a.AUDIO_TRACKS_UPDATED,c);const d=this.trackId;if(-1!==r&&-1===d)this.setAudioTrack(r);else if(e.length&&-1===d){var l;const n=new Error(`No audio track selected for current audio group-ID(s): ${null==(l=this.groupIds)?void 0:l.join(",")} track count: ${e.length}`);this.warn(n.message),this.hls.trigger(a.ERROR,{type:s.MEDIA_ERROR,details:i.AUDIO_TRACK_LOAD_ERROR,fatal:!0,error:n})}}}onError(e,n){!n.fatal&&n.context&&(n.context.type!==l||n.context.
2id!==this.trackId||this.groupIds&&-1===this.groupIds.indexOf(n.context.groupId)||this.checkRetry(n))}get allAudioTracks(){return this.tracks}get audioTracks(){return this.tracksInGroup}get audioTrack(){return this.trackId}set audioTrack(e){this.selectDefaultTrack=!1,this.setAudioTrack(e)}setAudioOption(e){const n=this.hls;if(n.config.audioPreference=e,e){const t=this.allAudioTracks;if(this.selectDefaultTrack=!1,t.length){const s=this.currentTrack;if(s&&Qe(e,s,Je))return s;const i=Xe(e,this.tracksInGroup,Je);if(i>-1){const e=this.tracksInGroup[i];return this.setAudioTrack(i),e}if(s){let s=n.loadLevel;-1===s&&(s=n.firstAutoLevel);const i=function(e,n,t,s,i){const a=n[s],r=n.reduce(((e,n,t)=>{const s=n.uri;return(e[s]||(e[s]=[])).push(t),e}),{})[a.uri];r.length>1&&(s=Math.max.apply(Math,r));const o=a.videoRange,l=a.frameRate,c=a.codecSet.substring(0,4),d=Ze(n,s,(n=>{if(n.videoRange!==o||n.frameRate!==l||n.codecSet.substring(0,4)!==c)return!1;const s=n.audioGroups,a=t.filter((e=>!s||-1!==s.indexOf(e.groupId)));return Xe(e,a,i)>-1}));return d>-1?d:Ze(n,s,(n=>{const s=n.audioGroups,a=t.filter((e=>!s||-1!==s.indexOf(e.groupId)));return Xe(e,a,i)>-1}))}(e,n.levels,t,s,Je);if(-1===i)return null;n.nextLoadLevel=i}if(e.channels||e.audioCodec){const n=Xe(e,t);if(n>-1)return t[n]}}}return null}setAudioTrack(e){const n=this.tracksInGroup;if(e<0||e>=n.length)return void this.warn(`Invalid audio track id: ${e}`);this.selectDefaultTrack=!1;const t=this.currentTrack,s=n[e],i=s.details&&!s.details.live;if(e===this.trackId&&s===t&&i)return;if(this.log(`Switching to audio-track ${e} "${s.name}" lang:${s.lang} group:${s.groupId} channels:${s.channels}`),this.trackId=e,this.currentTrack=s,this.hls.trigger(a.AUDIO_TRACK_SWITCHING,_({},s)),i)return;const r=this.switchParams(s.url,null==t?void 0:t.details,s.details);this.loadPlaylist(r)}findTrackId(e){const n=this.tracksInGroup;for(let t=0;t<n.length;t++){const s=n[t];if((!this.selectDefaultTrack||s.default)&&(!e||Qe(e,s,Je)))return t}if(e){const{name:t,lang:s,assocLang:i,characteristics:a,audioCodec:r,channels:o}=e;for(let e=0;e<n.length;e++)if(Qe({name:t,lang:s,assocLang:i,characteristics:a,audioCodec:r,channels:o},n[e],Je))return e;for(let t=0;t<n.length;t++){const s=n[t];if(ki(e.attrs,s.attrs,["LANGUAGE","ASSOC-LANGUAGE","CHARACTERISTICS"]))return t}for(let t=0;t<n.length;t++){const s=n[t];if(ki(e.attrs,s.attrs,["LANGUAGE"]))return t}}return-1}loadPlaylist(e){super.loadPlaylist();const n=this.currentTrack;this.shouldLoadPlaylist(n)&&en(n.url,this.hls)&&this.scheduleLoading(n,e)}loadingPlaylist(e,n){super.loadingPlaylist(e,n);const t=e.id,s=e.groupId,i=this.getUrlWithDirectives(e.url,n),r=e.details,o=null==r?void 0:r.age;this.log(`Loading audio-track ${t} "${e.name}" lang:${e.lang} group:${s}${void 0!==(null==n?void 0:n.msn)?" at sn "+n.msn+" part "+n.part:""}${o&&r.live?" age "+o.toFixed(1)+(r.type?" "+r.type||0:""):""} ${i}`),this.hls.trigger(a.AUDIO_TRACK_LOADING,{url:i,id:t,groupId:s,deliveryDirectives:n||null,track:e})}},emeController:ba,cmcdController:class{constructor(e){this.hls=void 0,this.config=void 0,this.media=void 0,this.sid=void 0,this.cid=void 0,this.useHeaders=!1,this.includeKeys=void 0,this.initialized=!1,this.starved=!1,this.buffering=!0,this.audioBuffer=void 0,this.videoBuffer=void 0,this.onWaiting=()=>{this.initialized&&(this.starved=!0),this.buffering=!0},this.onPlaying=()=>{this.initialized||(this.initialized=!0),this.buffering=!1},this.applyPlaylistData=e=>{try{this.apply(e,{ot:Ii,su:!this.initialized})}catch(e){this.hls.logger.warn("Could not generate manifest CMCD data.",e)}},this.applyFragmentData=e=>{try{const{frag:n,part:t}=e,s=this.hls.levels[n.level],i=this.getObjectType(n),a={d:1e3*(t||n).duration,ot:i};i!==Di&&i!==Pi&&i!=Oi||(a.br=s.bitrate/1e3,a.tb=this.getTopBandwidth(i)/1e3,a.bl=this.getBufferLength(i));const r=t?this.getNextPart(t):this.getNextFrag(n);null!=r&&r.url&&r.url!==n.url&&(a.nor=r.url),this.apply(e,a)}catch(e){this.hls.logger.warn("Could not generate segment CMCD data.",e)}},this.hls=e;const n=this.config=e.config,{cmcd:t}=n;null!=t&&(n.pLoader=this.createPlaylistLoader(),n.fLoader=this.createFragmentLoader(),this.sid=t.sessionId||e.sessionId,this.cid=t.contentId,this.useHeaders=!0===t.useHeaders,this.includeKeys=t.includeKeys,this.registerListeners())}registerListeners(){const e=this.hls;
2e.on(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(a.MEDIA_DETACHED,this.onMediaDetached,this),e.on(a.BUFFER_CREATED,this.onBufferCreated,this)}unregisterListeners(){const e=this.hls;e.off(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(a.MEDIA_DETACHED,this.onMediaDetached,this),e.off(a.BUFFER_CREATED,this.onBufferCreated,this)}destroy(){this.unregisterListeners(),this.onMediaDetached(),this.hls=this.config=this.audioBuffer=this.videoBuffer=null,this.onWaiting=this.onPlaying=this.media=null}onMediaAttached(e,n){this.media=n.media,this.media.addEventListener("waiting",this.onWaiting),this.media.addEventListener("playing",this.onPlaying)}onMediaDetached(){this.media&&(this.media.removeEventListener("waiting",this.onWaiting),this.media.removeEventListener("playing",this.onPlaying),this.media=null)}onBufferCreated(e,n){var t,s;this.audioBuffer=null==(t=n.tracks.audio)?void 0:t.buffer,this.videoBuffer=null==(s=n.tracks.video)?void 0:s.buffer}createData(){var e;return{v:1,sf:Ni,sid:this.sid,cid:this.cid,pr:null==(e=this.media)?void 0:e.playbackRate,mtp:this.hls.bandwidthEstimate/1e3}}apply(e,n={}){g(n,this.createData());const t=n.ot===Mi||n.ot===Di||n.ot===Oi;this.starved&&t&&(n.bs=!0,n.su=!0,this.starved=!1),null==n.su&&(n.su=this.buffering);const{includeKeys:s}=this;s&&(n=Object.keys(n).reduce(((e,t)=>(s.includes(t)&&(e[t]=n[t]),e)),{}));const i={baseUrl:e.url};this.useHeaders?(e.headers||(e.headers={}),function(e,n,t){g(e,function(e,n={}){const t={};if(!e)return t;const s=Object.entries(e),i=Object.entries(Gi).concat(Object.entries((null==n?void 0:n.customHeaderMap)||{})),a=s.reduce(((e,n)=>{var t,s;const[a,r]=n,o=(null===(t=i.find((e=>e[1].includes(a))))||void 0===t?void 0:t[0])||Bi;return null!==(s=e[o])&&void 0!==s||(e[o]={}),e[o][a]=r,e}),{});return Object.entries(a).reduce(((e,[t,s])=>(e[t]=ha(s,n),e)),t)}(n,t))}(e.headers,n,i)):e.url=function(e,n,t){const s=function(e,n={}){if(!e)return"";const t=ha(e,n);return`CMCD=${encodeURIComponent(t)}`}(n,t);if(!s)return e;if(ma.test(e))return e.replace(ma,s);const i=e.includes("?")?"&":"?";return`${e}${i}${s}`}(e.url,n,i)}getNextFrag(e){var n;const t=null==(n=this.hls.levels[e.level])?void 0:n.details;if(t){const n=e.sn-t.startSN;return t.fragments[n+1]}}getNextPart(e){var n,t;const{index:s,fragment:i}=e,a=null==(n=this.hls.levels[i.level])||null==(t=n.details)?void 0:t.partList;if(a){const{sn:e}=i;for(let n=a.length-1;n>=0;n--){const t=a[n];if(t.index===s&&t.fragment.sn===e)return a[n+1]}}}getObjectType(e){const{type:n}=e;return"subtitle"===n?Fi:"initSegment"===e.sn?Mi:"audio"===n?Pi:"main"===n?this.hls.audioTracks.length?Di:Oi:void 0}getTopBandwidth(e){let n,t=0;const s=this.hls;if(e===Pi)n=s.audioTracks;else{const e=s.maxAutoLevel,t=e>-1?e+1:s.levels.length;n=s.levels.slice(0,t)}return n.forEach((e=>{e.bitrate>t&&(t=e.bitrate)})),t>0?t:NaN}getBufferLength(e){const n=this.media,t=e===Pi?this.audioBuffer:this.videoBuffer;return t&&n?1e3*Dn.bufferInfo(t,n.currentTime,this.config.maxBufferHole).len:NaN}createPlaylistLoader(){const{pLoader:e}=this.config,n=this.applyPlaylistData,t=e||this.config.loader;return class{constructor(e){this.loader=void 0,this.loader=new t(e)}get stats(){return this.loader.stats}get context(){return this.loader.context}destroy(){this.loader.destroy()}abort(){this.loader.abort()}load(e,t,s){n(e),this.loader.load(e,t,s)}}}createFragmentLoader(){const{fLoader:e}=this.config,n=this.applyFragmentData,t=e||this.config.loader;return class{constructor(e){this.loader=void 0,this.loader=new t(e)}get stats(){return this.loader.stats}get context(){return this.loader.context}destroy(){this.loader.destroy()}abort(){this.loader.abort()}load(e,t,s){n(e),this.loader.load(e,t,s)}}}},contentSteeringController:class extends b{constructor(e){super("content-steering",e.logger),this.hls=void 0,this.loader=null,this.uri=null,this.pathwayId=".",this._pathwayPriority=null,this.timeToLoad=300,this.reloadTimer=-1,this.updated=0,this.started=!1,this.enabled=!0,this.levels=null,this.audioTracks=null,this.subtitleTracks=null,this.penalizedPathways={},this.hls=e,this.registerListeners()}registerListeners(){const e=this.hls;e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.on(a.MANIFEST_PARSED,this.onManifestParsed,this),e.on(a.ERROR,this.onError,this)}unregisterListeners(){const e=this.hls;e&&(e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.off(a.MANIFEST_PARSED,this.onManifestParsed,this),e.off(a.ERROR,this.onError,this))}pathways(){return(this.levels||[]).reduce(((e,n)=>(-1===e.indexOf(n.pathwayId)&&e.push(n.pathwayId),e)),[])}get pathwayPriority(){return this._pathwayPriority}set pathwayPriority(e){this.updatePathwayPriority(e)}
vendor: 6,869 bytes, line 2
2startLoad(){if(this.started=!0,this.clearTimeout(),this.enabled&&this.uri){if(this.updated){const e=1e3*this.timeToLoad-(performance.now()-this.updated);if(e>0)return void this.scheduleRefresh(this.uri,e)}this.loadSteeringManifest(this.uri)}}stopLoad(){this.started=!1,this.loader&&(this.loader.destroy(),this.loader=null),this.clearTimeout()}clearTimeout(){-1!==this.reloadTimer&&(self.clearTimeout(this.reloadTimer),this.reloadTimer=-1)}destroy(){this.unregisterListeners(),this.stopLoad(),this.hls=null,this.levels=this.audioTracks=this.subtitleTracks=null}removeLevel(e){const n=this.levels;n&&(this.levels=n.filter((n=>n!==e)))}onManifestLoading(){this.stopLoad(),this.enabled=!0,this.timeToLoad=300,this.updated=0,this.uri=null,this.pathwayId=".",this.levels=this.audioTracks=this.subtitleTracks=null}onManifestLoaded(e,n){const{contentSteering:t}=n;null!==t&&(this.pathwayId=t.pathwayId,this.uri=t.uri,this.started&&this.startLoad())}onManifestParsed(e,n){this.audioTracks=n.audioTracks,this.subtitleTracks=n.subtitleTracks}onError(e,n){const{errorAction:t}=n;if(2===(null==t?void 0:t.action)&&1===t.flags){const e=this.levels;let s=this._pathwayPriority,a=this.pathwayId;if(n.context){const{groupId:t,pathwayId:s,type:i}=n.context;t&&e?a=this.getPathwayForGroupId(t,i,a):s&&(a=s)}a in this.penalizedPathways||(this.penalizedPathways[a]=performance.now()),!s&&e&&(s=this.pathways()),s&&s.length>1&&(this.updatePathwayPriority(s),t.resolved=this.pathwayId!==a),n.details!==i.BUFFER_APPEND_ERROR||n.fatal?t.resolved||this.warn(`Could not resolve ${n.details} ("${n.error.message}") with content-steering for Pathway: ${a} levels: ${e?e.length:e} priorities: ${Ve(s)} penalized: ${Ve(this.penalizedPathways)}`):t.resolved=!0}}filterParsedLevels(e){this.levels=e;let n=this.getLevelsForPathway(this.pathwayId);if(0===n.length){const t=e[0].pathwayId;this.log(`No levels found in Pathway ${this.pathwayId}. Setting initial Pathway to "${t}"`),n=this.getLevelsForPathway(t),this.pathwayId=t}return n.length!==e.length&&this.log(`Found ${n.length}/${e.length} levels in Pathway "${this.pathwayId}"`),n}getLevelsForPathway(e){return null===this.levels?[]:this.levels.filter((n=>e===n.pathwayId))}updatePathwayPriority(e){let n;this._pathwayPriority=e;const t=this.penalizedPathways,s=performance.now();Object.keys(t).forEach((e=>{s-t[e]>3e5&&delete t[e]}));for(let s=0;s<e.length;s++){const i=e[s];if(i in t)continue;if(i===this.pathwayId)return;const r=this.hls.nextLoadLevel,o=this.hls.levels[r];if(n=this.getLevelsForPathway(i),n.length>0){this.log(`Setting Pathway to "${i}"`),this.pathwayId=i,Ft(n),this.hls.trigger(a.LEVELS_UPDATED,{levels:n});const e=this.hls.levels[r];o&&e&&this.levels&&(e.attrs["STABLE-VARIANT-ID"]!==o.attrs["STABLE-VARIANT-ID"]&&e.bitrate!==o.bitrate&&this.log(`Unstable Pathways change from bitrate ${o.bitrate} to ${e.bitrate}`),this.hls.nextLoadLevel=r);break}}}getPathwayForGroupId(e,n,t){const s=this.getLevelsForPathway(t).concat(this.levels||[]);for(let t=0;t<s.length;t++)if(n===l&&s[t].hasAudioGroup(e)||n===c&&s[t].hasSubtitleGroup(e))return s[t].pathwayId;return t}clonePathways(e){const n=this.levels;if(!n)return;const t={},s={};e.forEach((e=>{const{ID:i,"BASE-ID":a,"URI-REPLACEMENT":r}=e;if(n.some((e=>e.pathwayId===i)))return;const o=this.getLevelsForPathway(a).map((e=>{const n=new jn(e.attrs);n["PATHWAY-ID"]=i;const a=n.AUDIO&&`${n.AUDIO}_clone_${i}`,o=n.SUBTITLES&&`${n.SUBTITLES}_clone_${i}`;a&&(t[n.AUDIO]=a,n.AUDIO=a),o&&(s[n.SUBTITLES]=o,n.SUBTITLES=o);const l=ga(e.uri,n["STABLE-VARIANT-ID"],"PER-VARIANT-URIS",r),c=new qe({attrs:n,audioCodec:e.audioCodec,bitrate:e.bitrate,height:e.height,name:e.name,url:l,videoCodec:e.videoCodec,width:e.width});if(e.audioGroups)for(let n=1;n<e.audioGroups.length;n++)c.addGroupId("audio",`${e.audioGroups[n]}_clone_${i}`);if(e.subtitleGroups)for(let n=1;n<e.subtitleGroups.length;n++)c.addGroupId("text",`${e.subtitleGroups[n]}_clone_${i}`);return c}));n.push(...o),va(this.audioTracks,t,r,i),va(this.subtitleTracks,s,r,i)}))}loadSteeringManifest(e){const n=this.hls.config,t=n.loader;let s;this.loader&&this.loader.destroy(),this.loader=new t(n);try{s=new self.URL(e)}catch(n){return this.enabled=!1,void this.log(`Failed to parse Steering Manifest URI: ${e}`)}if("data:"!==s.protocol){const e=0|(this.hls.bandwidthEstimate||n.abrEwmaDefaultEstimate);s.searchParams.set("_HLS_pathway",this.pathwayId),s.searchParams.set("_HLS_throughput",""+e)}const i={responseType:"json",url:s.href},r=n.steeringManifestLoadPolicy.default,o=r.errorRetry||r.timeoutRetry||{},l={loadPolicy:r,timeout:r.maxLoadTimeMs,maxRetry:o.maxNumRetry||0,retryDelay:o.retryDelayMs||0,maxRetryDelay:o.maxRetryDelayMs||0},c={onSuccess:(e,n,t,i)=>{this.log(`Loaded steering manifest: "${s}"`);const r=e.data;if(1!==(null==r?void 0:r.VERSION))return void this.log(`Steering VERSION ${r.VERSION} not supported!`);this.updated=performance.now(),this.timeToLoad=r.TTL;const{"RELOAD-URI":o,"PATHWAY-CLONES":l,"PATHWAY-PRIORITY":c}=r;if(o)try{this.uri=new self.URL(o,s).href}catch(e){return this.enabled=!1,void this.log(`Failed to parse Steering Manifest RELOAD-URI: ${o}`)}this.scheduleRefresh(this.uri||t.url),l&&this.clonePathways(l);const d={steeringManifest:r,url:s.toString()};this.hls.trigger(a.STEERING_MANIFEST_LOADED,d),c&&this.updatePathwayPriority(c)},onError:(e,n,t,s)=>{if(this.log(`Error loading steering manifest: ${e.code} ${e.text} (${n.url})`),this.stopLoad(),410===e.code)return this.enabled=!1,void this.log(`Steering manifest ${n.url} no longer available`);let i=1e3*this.timeToLoad;if(429!==e.code)this.scheduleRefresh(this.uri||n.url,i);else{const e=this.loader;if("function"==typeof(null==e?void 0:e.getResponseHeader)){const n=e.getResponseHeader("Retry-After");n&&(i=1e3*parseFloat(n))}this.log(`Steering manifest ${n.url} rate limited`)}},onTimeout:(e,n,t)=>{this.log(`Timeout loading steering manifest (${n.url})`),this.scheduleRefresh(this.uri||n.url)}};this.log(`Requesting steering manifest: ${s}`),this.loader.load(i,l,c)}scheduleRefresh(e,n=1e3*this.timeToLoad){this.clearTimeout(),this.reloadTimer=self.setTimeout((()=>{var n;const t=null==(n=this.hls)?void 0:n.media;!t||t.ended?this.scheduleRefresh(e,1e3*this.timeToLoad):this.loadSteeringManifest(e)}),n)}},interstitialsController:class extends b{constructor(e,n){super("interstitials",e.logger),this.HlsPlayerClass=void 0,this.hls=void 0,this.assetListLoader=void 0,this.mediaSelection=null,this.altSelection=null,this.media=null,this.detachedData=null,this.requiredTracks=null,this.manager=null,this.playerQueue=[],this.bufferedPos=-1,this.timelinePos=-1,this.schedule=void 0,this.playingItem=null,this.bufferingItem=null,this.waitingItem=null,this.endedItem=null,this.playingAsset=null,this.endedAsset=null,this.bufferingAsset=null,this.shouldPlay=!1,this.onPlay=()=>{this.shouldPlay=!0},this.onPause=()=>{this.shouldPlay=!1}
2,this.onSeeking=()=>{const e=this.currentTime;if(void 0===e||this.playbackDisabled)return;const n=e-this.timelinePos;if(Math.abs(n)<1/7056e5)return;const t=n<=-.01;this.timelinePos=e,this.bufferedPos=e;const s=this.playingItem;if(!s)return void this.checkBuffer();if(t&&this.schedule.resetErrorsInRange(e,e-n)&&this.updateSchedule(),this.checkBuffer(),t&&e<s.start||e>=s.end){var i;const e=this.schedule.findItemIndexAtTime(this.timelinePos);if(!this.isInterstitial(s)&&null!=(i=this.media)&&i.paused&&(this.shouldPlay=!1),!t){const n=this.findItemIndex(s);if(e>n){const t=this.schedule.findJumpRestrictedIndex(n+1,e);if(t>n)return void this.setSchedulePosition(t)}}return void this.setSchedulePosition(e)}const a=this.playingAsset;if(!a){if(this.playingLastItem&&this.isInterstitial(s)){const n=s.event.assetList[0];n&&(this.endedItem=this.playingItem,this.playingItem=null,this.setScheduleToAssetAtTime(e,n))}return}const r=a.timelineStart,o=a.duration||0;(t&&e<r||e>=r+o)&&this.setScheduleToAssetAtTime(e,a)},this.onTimeupdate=()=>{const e=this.currentTime;if(void 0===e||this.playbackDisabled)return;if(!(e>this.timelinePos))return;this.timelinePos=e,e>this.bufferedPos&&this.checkBuffer();const n=this.playingItem;if(!n||this.playingLastItem)return;if(e>=n.end){this.timelinePos=n.end;const e=this.findItemIndex(n);this.setSchedulePosition(e+1)}const t=this.playingAsset;t&&e>=t.timelineStart+(t.duration||0)&&this.setScheduleToAssetAtTime(e,t)},this.onScheduleUpdate=(e,n)=>{const t=this.schedule,s=this.playingItem,i=t.events||[],r=t.items||[],o=t.durations,l=e.map((e=>e.identifier)),c=!(!i.length&&!l.length);(c||n)&&this.log(`INTERSTITIALS_UPDATED (${i.length}): ${i}\nSchedule: ${r.map((e=>Na(e)))} pos: ${this.timelinePos}`),l.length&&this.log(`Removed events ${l}`),this.playerQueue.forEach((e=>{if(e.interstitial.appendInPlace){const n=e.assetItem.timelineStart,t=e.timelineOffset-n;if(t)try{e.timelineOffset=n}catch(s){Math.abs(t)>Aa&&this.warn(`${s} ("${e.assetId}" ${e.timelineOffset}->${n})`)}}}));let d=null;if(s){const e=this.updateItem(s,this.timelinePos);this.itemsMatch(s,e)&&(this.playingItem=e,this.waitingItem=this.endedItem=null,d=()=>this.trimInPlace(e,s))}else this.waitingItem=this.updateItem(this.waitingItem),this.endedItem=this.updateItem(this.endedItem);const u=this.bufferingItem;if(u){const e=this.updateItem(u,this.bufferedPos);this.itemsMatch(u,e)?(this.bufferingItem=e,d||(d=()=>this.trimInPlace(e,u))):u.event&&(this.bufferingItem=this.playingItem,this.clearInterstitial(u.event,null))}if(e.forEach((e=>{e.assetList.forEach((e=>{this.clearAssetPlayer(e.identifier,null)}))})),c||n){if(this.hls.trigger(a.INTERSTITIALS_UPDATED,{events:i.slice(0),schedule:r.slice(0),durations:o,removedIds:l}),this.isInterstitial(s)&&l.includes(s.event.identifier))return this.warn(`Interstitial "${s.event.identifier}" removed while playing`),void this.primaryFallback(s.event);d&&d(),this.checkBuffer()}},this.hls=e,this.HlsPlayerClass=n,this.assetListLoader=new $a(e),this.schedule=new Fa(this.onScheduleUpdate,e.logger),this.registerListeners()}registerListeners(){const e=this.hls;e.on(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.on(a.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.on(a.AUDIO_TRACK_UPDATED,this.onAudioTrackUpdated,this),e.on(a.SUBTITLE_TRACK_SWITCH,this.onSubtitleTrackSwitch,this),e.on(a.SUBTITLE_TRACK_UPDATED,this.onSubtitleTrackUpdated,this),e.on(a.EVENT_CUE_ENTER,this.onInterstitialCueEnter,this),e.on(a.ASSET_LIST_LOADED,this.onAssetListLoaded,this),e.on(a.BUFFER_APPENDED,this.onBufferAppended,this),e.on(a.BUFFER_FLUSHED,this.onBufferFlushed,this),e.on(a.BUFFERED_TO_END,this.onBufferedToEnd,this),e.on(a.MEDIA_ENDED,this.onMediaEnded,this),e.on(a.ERROR,this.onError,this),e.on(a.DESTROYING,this.onDestroying,this)}unregisterListeners(){const e=this.hls;e&&(e.off(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(a.MEDIA_ATTA
2CHED,this.onMediaAttached,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.off(a.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.off(a.AUDIO_TRACK_UPDATED,this.onAudioTrackUpdated,this),e.off(a.SUBTITLE_TRACK_SWITCH,this.onSubtitleTrackSwitch,this),e.off(a.SUBTITLE_TRACK_UPDATED,this.onSubtitleTrackUpdated,this),e.off(a.EVENT_CUE_ENTER,this.onInterstitialCueEnter,this),e.off(a.ASSET_LIST_LOADED,this.onAssetListLoaded,this),e.off(a.BUFFER_CODECS,this.onBufferCodecs,this),e.off(a.BUFFER_APPENDED,this.onBufferAppended,this),e.off(a.BUFFER_FLUSHED,this.onBufferFlushed,this),e.off(a.BUFFERED_TO_END,this.onBufferedToEnd,this),e.off(a.MEDIA_ENDED,this.onMediaEnded,this),e.off(a.ERROR,this.onError,this),e.off(a.DESTROYING,this.onDestroying,this))}startLoad(){this.resumeBuffering()}stopLoad(){this.pauseBuffering()}resumeBuffering(){var e;null==(e=this.getBufferingPlayer())||e.resumeBuffering()}pauseBuffering(){var e;null==(e=this.getBufferingPlayer())||e.pauseBuffering()}destroy(){this.unregisterListeners(),this.stopLoad(),this.assetListLoader&&this.assetListLoader.destroy(),this.emptyPlayerQueue(),this.clearScheduleState(),this.schedule&&this.schedule.destroy(),this.media=this.detachedData=this.mediaSelection=this.requiredTracks=this.altSelection=this.manager=null,this.hls=this.HlsPlayerClass=this.schedule=this.log=null,this.assetListLoader=null,this.onPlay=this.onPause=this.onSeeking=this.onTimeupdate=null,this.onScheduleUpdate=null}onDestroying(){const e=this.primaryMedia||this.media;e&&this.removeMediaListeners(e)}removeMediaListeners(e){_a(e,"play",this.onPlay),_a(e,"pause",this.onPause),_a(e,"seeking",this.onSeeking),_a(e,"timeupdate",this.onTimeupdate)}onMediaAttaching(e,n){const t=this.media=n.media;fa(t,"seeking",this.onSeeking),fa(t,"timeupdate",this.onTimeupdate),fa(t,"play",this.onPlay),fa(t,"pause",this.onPause)}onMediaAttached(e,n){const t=this.effectivePlayingItem,s=this.detachedData;if(this.detachedData=null,null===t)this.checkStart();else if(!s){this.clearScheduleState();const e=this.findItemIndex(t);this.setSchedulePosition(e)}}clearScheduleState(){this.playingItem=this.bufferingItem=this.waitingItem=this.endedItem=this.playingAsset=this.endedAsset=this.bufferingAsset=null}onMediaDetaching(e,n){const t=!!n.transferMedia,s=this.media;if(this.media=null,!t&&(s&&this.removeMediaListeners(s),this.detachedData)){const e=this.getBufferingPlayer();e&&(this.playingAsset=this.endedAsset=this.bufferingAsset=this.bufferingItem=this.waitingItem=this.detachedData=null,e.detachMedia()),this.shouldPlay=!1}}get interstitialsManager(){if(!this.manager){if(!this.hls)return null;const e=this,n=()=>e.bufferingItem||e.waitingItem,t=n=>n?e.getAssetPlayer(n.identifier):n,s=(n,s,i,r,o)=>{if(n){let l=n[s].start;const c=n.event;if(c){if("playout"===s||c.timelineOccupancy!==La.Point){const e=t(i);(null==e?void 0:e.interstitial)===c&&(l+=e.assetItem.startOffset+e[o])}}else l+=("bufferedPos"===r?a():e[r])-n.start;return l}return 0},i=(n,t)=>{if(0!==n&&"primary"!==t&&e.schedule.length){var s;const i=e.schedule.findItemIndexAtTime(n),a=null==(s=e.schedule.items)?void 0:s[i];if(a)return n+(a[t].start-a.start)}return n},a=()=>{const n=e.bufferedPos;return n===Number.MAX_VALUE?r("primary"):Math.max(n,0)},r=n=>{var t;return null!=(t=e.primaryDetails)&&t.live?e.primaryDetails.edge:e.schedule.durations[n]},o=(n,i)=>{var a,r;const o=e.effectivePlayingItem;if(null!=o&&null!=(a=o.event)&&a.restrictions.skip)return;e.log(`seek to ${n} "${i}"`);const l=e.effectivePlayingItem,c=e.schedule.findItemIndexAtTime(n,i),d=null==(r=e.schedule.items)?void 0:r[c],u=e.getBufferingPlayer(),p=null==u?void 0:u.interstitial,h=null==p?void 0:p.appendInPlace,m=l&&e.itemsMatch(l,d);if(l&&(h||m)){const a=t(e.playingAsset),r=(null==a?void 0:a.media)||e.primaryMedia;if(r){const t="primary"===i?r.currentTime:s(l,i,e.playingAsset,"timelinePos","currentTime"),o=n-t,c=(h?t:r.currentTime)+o;if(c>=0&&(!a||h||c<=a.duration))return void(r.currentTime=c)}}if(d){let t=n;if("primary"!==i){const e=n-d[i].start;t=d.start+e}const s=!e.isInterstitial(d);if(e.isInterstitial(l)&&!l.event.appendInPlace||!s&&!d.event.appendInPlace){if(l){const a=e.findItemIndex(l);if(c>a){const n=e.schedule.findJumpRestrictedIndex(a+1,c);if(n>a)return void e.setSchedulePosition(n)}let r=0;if(s)e.timelinePos=t,e.checkBuffer();else{var v;const e=null==d||null==(v=d.event)?void 0:v.assetList;if(e){const t=n-(d[i]||d).start;for(let n=e.length;n--;){const s=e[n];if(s.duration&&t>=s.startOffset&&t<s.startOffset+s.duration){r=n;break}}}}e.setSchedulePosition(c,r)}}else{const n=e.media||(h?null==u?void 0:u.media:null);n&&(n.currentTime=t)}}},l=()=>{const t=e.effectivePlayingItem;if(e.isInterstitial(t))return t;const s=n();return e.isInterstitial(s)?s:null},c={get currentTime(){const n=l(),t=e.effectivePlayingItem;return t&&t===n?s(t,"playout",e.effectivePlayingAsset,"timelinePos","currentTime")-t.playout.start:0},set currentTime(n){const t=l(),s=e.effectivePlayingItem;s&&s===t&&o(n+s.playout.start,"playout")},get duration(){const e=l();return e?e.playout.end-e.playout.start:0},get assetPlayers(){var n;const t=null==(n=l())?void 0:n.event.assetList;return t?t.map((n=>e.getAssetPlayer(n.identifier))):[]},get playingIndex(){var n;const t=null==(n=l())?void 0:n.event;return t&&e.effectivePlayingAsset?t.findAssetIndex(e.effectivePlayingAsset):-1},get scheduleItem(){return l()}};this.manager={get events(){var n,t;return(null==(n=e.schedule)||null==(t=n.events)?void 0:t.slice(0))||[]},get schedule(){var n,t;return(null==(n=e.schedule)||null==(t=n.items)?void 0:t.slice(0))||[]},get interstitialPlayer(){return l()?c:null},get playerQueue(){return e.playerQueue.slice(0)},get bufferingAsset(){return e.bufferingAsset},get bufferingItem(){return n()},get bufferingIndex(){const t=n();return e.findItemIndex(t)},get playingAsset(){return e.effectivePlayingAsset},get playingItem(){return e.effectivePlayingItem},get playingIndex(){const n=e.effectivePlayingItem;return e.findItemIndex(n)},primary:{get bufferedEnd(){return a()},get currentTime(){const n=e.timelinePos;return n>0?n:0},set currentTime(e){o(e,"primary")},get duration(){return r("primary")},get seekableStart(){var n;return(null==(n=e.primaryDetails)?void 0:n.fragmentStart)||0}},integrated:{get bufferedEnd(){return s(n(),"integrated",e.bufferingAsset,"bufferedPos","bufferedEnd")},get currentTime(){return s(e.effectivePlayingItem,"integrated",e.effectivePlayingAsset,"timelinePos","currentTime")},set currentTime(e){o(e,"integrated")},get duration(){return r("integrated")},get seekableStart(){var n;return i((null==(n=e.primaryDetails)?void 0:n.fragmentStart)||0,"integrated")}},skip:()=>{const n=e.effectivePlayingItem,t=null==n?void 0:n.event;if(t&&!t.restrictions.skip){const s=e.findItemIndex(n);if(t.appendInPlace){const e=n.playout.start+n.event.duration;o(e+.001,"playout")}else e.advanceAfterAssetEnded(t,s,1/0)}}}}return this.manager}get effectivePlayingItem(){return this.waitingItem||this.playingItem||this.endedItem}get effectivePlayingAsset(){return this.playingAsset||this.endedAsset}get playingLastItem(){var e;const n=this.playingItem,t=null==(e=this.schedule)?void 0:e.items;return!!(this.playbackStarted&&n&&t)&&this.findItemIndex(n)===t.length-1}get playbackStarted(){return null!==this.effectivePlayingItem}get currentTime(){var n,t,s;if(null===this.mediaSelection)return;const i=this.waitingItem||this.playingItem;if(this.isInterstitial(i)&&!i.event.appendInPlace)return;let a=this.media;!a&&null!=(n=this.bufferingItem)&&null!=(t=n.event)&&t.appendInPlace&&(a=this.primaryMedia);const r=null==(s=a)?void 0:s.currentTime;return void 0!==r&&e(r)?r:void 0}get primaryMedia(){var e;return this.media||(null==(e=this.detachedData)?void 0:e.media)||null}isInterstitial(e){return!(null==e||!e.event)}retreiveMediaSource(e,n){const t=this.getAssetPlayer(e);t&&this.transferMediaFromPlayer(t,n)}transferMediaFromPlayer(e,n){const t=e.interstitial.appendInPlace,s=e.media;if(t&&s===this.primaryMedia){if(this.bufferingAsset=null,(!n||this.isInterstitial(n)&&!n.event.appendInPlace)&&n&&s)return void(this.detachedData={media:s});const t=e.transferMedia();this.log(`transfer MediaSource from ${e} ${Ve(t)}`),this.detachedData=t}else n&&s&&(this.shouldPlay||(this.shouldPlay=!s.paused))}transferMediaTo(e,n){var t,s;if(e.media===n)return;let i=null;const a=this.hls,r=e!==a,o=r&&e.interstitial.appendInPlace,l=null==(t=this.detachedData)?void 0:t.mediaSource;let c;if(a.media)o&&(i=a.transferMedia(),this.detachedData=i),c="Primary";
2else if(l){const e=this.getBufferingPlayer();e?(i=e.transferMedia(),c=`${e}`):c="detached MediaSource"}else c="detached media";if(!i)if(l)i=this.detachedData,this.log(`using detachedData: MediaSource ${Ve(i)}`);else if(!this.detachedData||a.media===n){const e=this.playerQueue;e.length>1&&e.forEach((e=>{if(r&&e.interstitial.appendInPlace!==o){const n=e.interstitial;this.clearInterstitial(e.interstitial,null),n.appendInPlace=!1,n.appendInPlace&&this.warn(`Could not change append strategy for queued assets ${n}`)}})),this.hls.detachMedia(),this.detachedData={media:n}}const d=i&&"mediaSource"in i&&"closed"!==(null==(s=i.mediaSource)?void 0:s.readyState),u=d&&i?i:n;if(this.log(`${d?"transfering MediaSource":"attaching media"} to ${r?e:"Primary"} from ${c}`),u===i){const n=r&&e.assetId===this.schedule.assetIdAtEnd;u.overrides={duration:this.schedule.duration,endOfStream:!r||n,cueRemoval:!r}}e.attachMedia(u)}onInterstitialCueEnter(){this.onTimeupdate()}checkStart(){const e=this.schedule,n=e.events;if(!n||this.playbackDisabled||!this.media)return;-1===this.bufferedPos&&(this.bufferedPos=0);const t=this.timelinePos,s=this.effectivePlayingItem;if(-1===t){const t=this.hls.startPosition;if(this.timelinePos=t,n.length&&n[0].cue.pre){const t=e.findEventIndex(n[0].identifier);this.setSchedulePosition(t)}else if(t>=0||!this.primaryLive){const n=this.timelinePos=t>0?t:0,s=e.findItemIndexAtTime(n);this.setSchedulePosition(s)}}else if(s&&!this.playingItem){const n=e.findItemIndex(s);this.setSchedulePosition(n)}}advanceAfterAssetEnded(e,n,t){const s=Da(e,t);if(e.isAssetPastPlayoutLimit(s)){const t=this.schedule.items;if(t){const s=n+1;if(s>=t.length)return void this.setSchedulePosition(-1);const i=e.resumeTime;this.timelinePos<i&&(this.timelinePos=i,this.checkBuffer()),this.setSchedulePosition(s)}}else this.setSchedulePosition(n,s)}setScheduleToAssetAtTime(e,n){const t=this.schedule,s=n.parentIdentifier,i=t.getEvent(s);if(i){const n=t.findEventIndex(s),a=t.findAssetIndex(i,e);this.advanceAfterAssetEnded(i,n,a-1)}}setSchedulePosition(e,n){const t=this.schedule.items;if(!t||this.playbackDisabled)return;this.log(`setSchedulePosition ${e}, ${n}`);const s=e>=0?t[e]:null,i=this.playingItem,r=this.playingLastItem;if(this.isInterstitial(i)){var o;const c=i.event,d=this.playingAsset,u=null==d?void 0:d.identifier,p=u?this.getAssetPlayer(u):null;if(p&&u&&(!this.eventItemsMatch(i,s)||void 0!==n&&u!==(null==(o=c.assetList)?void 0:o[n].identifier))){var l;const n=c.findAssetIndex(d);if(this.log(`INTERSTITIAL_ASSET_ENDED ${n+1}/${c.assetList.length} ${Oa(d)}`),this.endedAsset=d,this.playingAsset=null,this.hls.trigger(a.INTERSTITIAL_ASSET_ENDED,{asset:d,assetListIndex:n,event:c,schedule:t.slice(0),scheduleIndex:e,player:p}),i!==this.playingItem)return void(this.itemsMatch(i,this.playingItem)&&!this.playingAsset&&this.advanceAfterAssetEnded(c,this.findItemIndex(this.playingItem),n));this.retreiveMediaSource(u,s),!p.media||null!=(l=this.detachedData)&&l.mediaSource||p.detachMedia()}if(!this.eventItemsMatch(i,s)&&(this.endedItem=i,this.playingItem=null,this.log(`INTERSTITIAL_ENDED ${c} ${Na(i)}`),c.hasPlayed=!0,this.hls.trigger(a.INTERSTITIAL_ENDED,{event:c,schedule:t.slice(0),scheduleIndex:e}),c.cue.once)){this.updateSchedule();const e=this.schedule.items;if(s&&e){const t=this.findItemIndex(s);this.advanceSchedule(t,e,n,i,r)}return}}this.advanceSchedule(e,t,n,i,r)}advanceSchedule(e,n,t,s,i){const r=e>=0?n[e]:null,o=this.primaryMedia,l=this.playerQueue;if(l.length&&l.forEach((n=>{const t=n.interstitial,s=this.schedule.findEventIndex(t.identifier);(s<e||s>e+1)&&this.clearInterstitial(t,r)})),this.isInterstitial(r)){this.timelinePos=Math.min(Math.max(this.timelinePos,r.start),r.end);const i=r.event;if(void 0===t){const n=Da(i,(t=this.schedule.findAssetIndex(i,this.timelinePos))-1);if(i.isAssetPastPlayoutLimit(n))return void this.advanceAfterAssetEnded(i,e,t);t=n}const l=this.waitingItem;this.assetsBuffered(r,o)||this.setBufferingItem(r);let c=this.preloadAssets(i,t);if(this.eventItemsMatch(r,l||s)||(this.waitingItem=r,this.log(`INTERSTITIAL_STARTED ${Na(r)} ${i.appendInPlace?"append in place":""}`),this.hls.trigger(a.INTERSTITIAL_STARTED,{event:i,schedule:n.slice(0),scheduleIndex:e})),!i.assetListLoaded)return void this.log(`Waiting for ASSET-LIST to complete loading ${i}`);if(i.assetListLoader&&(i.assetListLoader.destroy(),i.assetListLoader=void 0),!o)return void this.log(`Waiting for attachMedia to start Interstitial ${i}`);this.waitingItem=this.endedItem=null,this.playingItem=r;const d=i.assetList[t];if(!d){const s=n[e+1],a=this.media;return s&&a&&!this.isInterstitial(s)&&a.currentTime<s.start&&(a.currentTime=this.timelinePos=s.start),void this.advanceAfterAssetEnded(i,e,t||0)}if(c||(c=this.getAssetPlayer(d.identifier)),null===c||c.destroyed){const e=i.assetList.length;this.warn(`asset ${t+1}/${e} player destroyed ${i}`),c=this.createAssetPlayer(i,d,t)}if(!this.eventItemsMatch(r,this.bufferingItem)&&i.appendInPlace&&this.isAssetBuffered(d))return;this.startAssetPlayer(c,t,n,e,o),this.shouldPlay&&Ba(c.media)}else null!==r?(this.resumePrimary(r,e,s),this.shouldPlay&&Ba(this.hls.media)):i&&this.isInterstitial(s)&&(this.endedItem=null,this.playingItem=s,s.event.appendInPlace||this.attachPrimary(this.schedule.durations.primary,null))}get playbackDisabled(){return!1===this.hls.config.enableInterstitialPlayback}get primaryDetails(){var e,n;return null==(e=this.mediaSelection)||null==(n=e.main)?void 0:n.details}get primaryLive(){var e;return!(null==(e=this.primaryDetails)||!e.live)}resumePrimary(e,n,t){var s;if(this.playingItem=e,this.playingAsset=this.endedAsset=null,this.waitingItem=this.endedItem=null,this.bufferedToItem(e),this.log(`resuming ${Na(e)}`),null==(s=this.detachedData)||!s.mediaSource){let t=this.timelinePos;(t<e.start||t>=e.end)&&(t=this.getPrimaryResumption(e,n),this.timelinePos=t),this.attachPrimary(t,e)}if(!t)return;const i=this.schedule.items;i&&(this.log(`INTERSTITIALS_PRIMARY_RESUMED ${Na(e)}`),this.hls.trigger(a.INTERSTITIALS_PRIMARY_RESUMED,{schedule:i.slice(0),scheduleIndex:n}),this.checkBuffer())}getPrimaryResumption(e,n){const t=e.start;if(this.primaryLive){const e=this.primaryDetails;if(0===n)return this.hls.startPosition;if(e&&(t<e.fragmentStart||t>e.edge))return this.hls.liveSyncPosition||-1}return t}isAssetBuffered(e){const n=this.getAssetPlayer(e.identifier);return null!=n&&n.hls?n.hls.bufferedToEnd:Dn.bufferInfo(this.primaryMedia,this.timelinePos,0).end+1>=e.timelineStart+(e.duration||0)}attachPrimary(e,n,t){n?this.setBufferingItem(n):this.bufferingItem=this.playingItem,this.bufferingAsset=null;const s=this.primaryMedia;if(!s)return;const i=this.hls;i.media?this.checkBuffer():(this.transferMediaTo(i,s),t&&this.startLoadingPrimaryAt(e,t)),t||(this.timelinePos=e,this.startLoadingPrimaryAt(e,t))}
2startLoadingPrimaryAt(e,n){var t;const s=this.hls;!s.loadingEnabled||!s.media||Math.abs(((null==(t=s.mainForwardBufferInfo)?void 0:t.start)||s.media.currentTime)-e)>.5?s.startLoad(e,n):s.bufferingEnabled||s.resumeBuffering()}onManifestLoading(){this.stopLoad(),this.schedule.reset(),this.emptyPlayerQueue(),this.clearScheduleState(),this.shouldPlay=!1,this.bufferedPos=this.timelinePos=-1,this.mediaSelection=this.altSelection=this.manager=this.requiredTracks=null,this.hls.off(a.BUFFER_CODECS,this.onBufferCodecs,this),this.hls.on(a.BUFFER_CODECS,this.onBufferCodecs,this)}onLevelUpdated(e,n){if(-1===n.level)return;const t=this.hls.levels[n.level],s=_(_({},this.mediaSelection||this.altSelection),{},{main:t});this.mediaSelection=s,this.schedule.parseInterstitialDateRanges(s,this.hls.config.interstitialAppendInPlace),!this.effectivePlayingItem&&this.schedule.items&&this.checkStart()}onAudioTrackUpdated(e,n){const t=this.hls.audioTracks[n.id],s=this.mediaSelection;if(!s)return void(this.altSelection=_(_({},this.altSelection),{},{audio:t}));const i=_(_({},s),{},{audio:t});this.mediaSelection=i}onSubtitleTrackUpdated(e,n){const t=this.hls.subtitleTracks[n.id],s=this.mediaSelection;if(!s)return void(this.altSelection=_(_({},this.altSelection),{},{subtitles:t}));const i=_(_({},s),{},{subtitles:t});this.mediaSelection=i}onAudioTrackSwitching(e,n){const t=We(n);this.playerQueue.forEach((e=>e.hls.setAudioOption(n)||e.hls.setAudioOption(t)))}onSubtitleTrackSwitch(e,n){const t=We(n);this.playerQueue.forEach((e=>e.hls.setSubtitleOption(n)||-1!==n.id&&e.hls.setSubtitleOption(t)))}onBufferCodecs(e,n){const t=n.tracks;t&&(this.requiredTracks=t)}onBufferAppended(e,n){this.checkBuffer()}onBufferFlushed(e,n){const t=this.playingItem;if(t&&!this.itemsMatch(t,this.bufferingItem)&&!this.isInterstitial(t)){const e=this.timelinePos;this.bufferedPos=e,this.checkBuffer()}}onBufferedToEnd(e){const n=this.schedule.events;if(this.bufferedPos<Number.MAX_VALUE&&n){for(let e=0;e<n.length;e++){const s=n[e];if(s.cue.post){var t;const e=this.schedule.findEventIndex(s.identifier),n=null==(t=this.schedule.items)?void 0:t[e];this.isInterstitial(n)&&this.eventItemsMatch(n,this.bufferingItem)&&this.bufferedToItem(n,0);break}}this.bufferedPos=Number.MAX_VALUE}}onMediaEnded(e){const n=this.playingItem;if(!this.playingLastItem&&n){const e=this.findItemIndex(n);this.setSchedulePosition(e+1)}else this.shouldPlay=!1}updateItem(e,n){const t=this.schedule.items;return e&&t&&t[this.findItemIndex(e,n)]||null}trimInPlace(e,n){if(this.isInterstitial(e)&&e.event.appendInPlace&&n.end-e.end>.25){e.event.assetList.forEach(((n,t)=>{e.event.isAssetPastPlayoutLimit(t)&&this.clearAssetPlayer(n.identifier,null)}));const n=e.end+.25,t=Dn.bufferInfo(this.primaryMedia,n,0);(t.end>n||(t.nextStart||0)>n)&&(this.attachPrimary(n,null),this.flushFrontBuffer(n))}}itemsMatch(e,n){return!!n&&(e===n||e.event&&n.event&&this.eventItemsMatch(e,n)||!e.event&&!n.event&&this.findItemIndex(e)===this.findItemIndex(n))}eventItemsMatch(e,n){var t;return!!n&&(e===n||e.event.identifier===(null==(t=n.event)?void 0:t.identifier))}findItemIndex(e,n){return e?this.schedule.findItemIndex(e,n):-1}updateSchedule(){const e=this.mediaSelection;e&&this.schedule.updateSchedule(e,[])}checkBuffer(e){const n=this.schedule.items;if(!n)return;const t=Dn.bufferInfo(this.primaryMedia,this.timelinePos,0);e&&(this.bufferedPos=this.timelinePos),e||(e=t.len<1),this.updateBufferedPos(t.end,n,e)}updateBufferedPos(e,n,t){const s=this.schedule,i=this.bufferingItem;if(this.bufferedPos>e)return;if(1===n.length&&this.itemsMatch(n[0],i))return void(this.bufferedPos=e);const a=this.playingItem,r=this.findItemIndex(a);let o=s.findItemIndexAtTime(e);if(this.bufferedPos<e){var l,c;const t=this.findItemIndex(i),s=Math.min(t+1,n.length-1),a=n[s];if((-1===o&&i&&e>=i.end||null!=(l=a.event)&&l.appendInPlace&&e+.01>=a.start)&&(o=s),s-r>1&&!1===(null==i||null==(c=i.event)?void 0:c.appendInPlace))return;if(this.bufferedPos=e,o>t&&o>r)this.bufferedToItem(a);else{const n=this.primaryDetails;this.primaryLive&&n&&e>n.edge-n.targetduration&&a.start<n.edge+this.hls.config.interstitialLiveLookAhead&&this.isInterstitial(a)&&this.preloadAssets(a.event,0)}}else t&&a&&!this.itemsMatch(a,i)&&(o===r?this.bufferedToItem(a):o===r+1&&this.bufferedToItem(n[o]))}assetsBuffered(e,n){return 0!==e.event.assetList.length&&!e.event.assetList.some((e=>{const t=this.getAssetPlayer(e.identifier);return!(null!=t&&t.bufferedInPlaceToEnd(n))}))}setBufferingItem(e){const n=this.bufferingItem,t=this.schedule;if(this.itemsMatch(e,n))this.bufferingItem!==e&&(this.bufferingItem=e);else{const{items:s,events:i}=t;if(!s||!i)return n;
2const r=this.isInterstitial(e),o=this.getBufferingPlayer();this.bufferingItem=e,this.bufferedPos=Math.max(e.start,Math.min(e.end,this.timelinePos));const l=o?o.remaining:n?n.end-this.timelinePos:0;this.log(`INTERSTITIALS_BUFFERED_TO_BOUNDARY ${Na(e)}`+(n?` (${l.toFixed(2)} remaining)`:"")),this.playbackDisabled||(r?e.event.assetList.forEach((e=>{const n=this.getAssetPlayer(e.identifier);n&&n.resumeBuffering()})):(this.hls.resumeBuffering(),this.playerQueue.forEach((e=>e.pauseBuffering())))),this.hls.trigger(a.INTERSTITIALS_BUFFERED_TO_BOUNDARY,{events:i.slice(0),schedule:s.slice(0),bufferingIndex:this.findItemIndex(e),playingIndex:this.findItemIndex(this.playingItem)})}return n}bufferedToItem(e,n=0){const t=this.setBufferingItem(e);if(!this.playbackDisabled)if(this.isInterstitial(e))this.bufferedToEvent(e,n);else if(null!==t){this.bufferingAsset=null;const n=this.detachedData;if(n)if(n.mediaSource){const n=!0;this.attachPrimary(e.start,e,n)}else this.preloadPrimary(e);else this.preloadPrimary(e)}}preloadPrimary(e){const n=this.findItemIndex(e),t=this.getPrimaryResumption(e,n);this.startLoadingPrimaryAt(t)}bufferedToEvent(e,n){const t=e.event,s=0===t.assetList.length&&!t.assetListLoader,i=t.cue.once;if(s||!i){const e=this.preloadAssets(t,n);if(null!=e&&e.interstitial.appendInPlace){const s=t.assetList[n],i=this.primaryMedia;s&&i&&this.bufferAssetPlayer(e,i)}}}preloadAssets(e,n){const t=e.assetUrl,s=e.assetList.length,i=0===s&&!e.assetListLoader,a=e.cue.once;if(i){const i=e.timelineStart;if(e.appendInPlace){var r;const n=this.playingItem;this.isInterstitial(n)||(null==n||null==(r=n.nextEvent)?void 0:r.identifier)!==e.identifier||this.flushFrontBuffer(i+.25)}let a,o=0;if(!this.playingItem&&this.primaryLive&&(o=this.hls.startPosition,-1===o&&(o=this.hls.liveSyncPosition||0)),o&&!e.cue.pre&&!e.cue.post){const e=o-i;e>0&&(a=Math.round(1e3*e)/1e3)}if(this.log(`Load interstitial asset ${n+1}/${t?1:s} ${e}${a?` live-start: ${o} start-offset: ${a}`:""}`),t)return this.createAsset(e,0,0,i,e.duration,t);const l=this.assetListLoader.loadAssetList(e,a);l&&(e.assetListLoader=l)}else if(!a&&s){for(let t=n;t<s;t++){const n=e.assetList[t],s=this.getAssetPlayerQueueIndex(n.identifier);-1!==s&&!this.playerQueue[s].destroyed||n.error||this.createAssetPlayer(e,n,t)}return this.getAssetPlayer(e.assetList[n].identifier)}return null}flushFrontBuffer(e){const n=this.requiredTracks;n&&(this.log(`Removing front buffer starting at ${e}`),Object.keys(n).forEach((n=>{this.hls.trigger(a.BUFFER_FLUSHING,{startOffset:e,endOffset:1/0,type:n})})))}getAssetPlayerQueueIndex(e){const n=this.playerQueue;for(let t=0;t<n.length;t++)if(e===n[t].assetId)return t;return-1}getAssetPlayer(e){const n=this.getAssetPlayerQueueIndex(e);return this.playerQueue[n]||null}getBufferingPlayer(){const{playerQueue:e,primaryMedia:n}=this;if(n)for(let t=0;t<e.length;t++)if(e[t].media===n)return e[t];return null}createAsset(e,n,t,s,i,a){const r={parentIdentifier:e.identifier,identifier:Ca(e,a,n),duration:i,startOffset:t,timelineStart:s,uri:a};return this.createAssetPlayer(e,r,n)}createAssetPlayer(e,n,t){const r=this.hls,o=r.userConfig;let l=o.videoPreference;const c=r.loadLevelObj||r.levels[r.currentLevel];(l||c)&&(l=g({},l),c.videoCodec&&(l.videoCodec=c.videoCodec),c.videoRange&&(l.allowedVideoRanges=[c.videoRange]));const d=r.audioTracks[r.audioTrack],u=r.subtitleTracks[r.subtitleTrack];let p=0;if(this.primaryLive||e.appendInPlace){const e=this.timelinePos-n.timelineStart;if(e>1){const t=n.duration;t&&e<t&&(p=e)}}const h=n.identifier,m=_(_({},o),{},{autoStartLoad:!0,startFragPrefetch:!0,primarySessionId:r.sessionId,assetPlayerId:h,abrEwmaDefaultEstimate:r.bandwidthEstimate,interstitialsController:void 0,startPosition:p,liveDurationInfinity:!1,testBandwidth:!1,videoPreference:l,audioPreference:d||o.audioPreference,subtitlePreference:u||o.subtitlePreference});e.appendInPlace&&(e.appendInPlaceStarted=!0,n.timelineStart&&(m.timelineOffset=n.timelineStart));const v=m.cmcd;null!=v&&v.sessionId&&v.contentId&&(m.cmcd=g({},v,{contentId:Sa(n.uri)})),this.getAssetPlayer(h)&&this.warn(`Duplicate date range identifier ${e} and asset ${h}`);const f=new Ma(this.HlsPlayerClass,m,e,n);this.playerQueue.push(f),e.assetList[t]=n;const b=a=>{if(a.live){const n=new Error(`Interstitials MUST be VOD assets ${e}`),a={fatal:!0,type:s.OTHER_ERROR,details:i.INTERSTITIAL_ASSET_ITEM_ER
2ROR,error:n};return void this.handleAssetItemError(a,e,this.schedule.findEventIndex(e.identifier),t,n.message)}const r=a.edge-a.fragmentStart,o=n.duration;(null===o||r>o)&&(this.log(`Interstitial asset "${h}" duration change ${o} > ${r}`),n.duration=r,this.updateSchedule())};f.on(a.LEVEL_UPDATED,((e,{details:n})=>b(n))),f.on(a.LEVEL_PTS_UPDATED,((e,{details:n})=>b(n)));const y=(e,n)=>{const t=this.getAssetPlayer(h);if(t&&n.tracks){t.off(a.BUFFER_CODECS,y),t.tracks=n.tracks;const e=this.primaryMedia;this.bufferingAsset===t.assetItem&&e&&!t.media&&this.bufferAssetPlayer(t,e)}};f.on(a.BUFFER_CODECS,y);const w=()=>{var t;const s=this.getAssetPlayer(h);if(this.log(`buffered to end of asset ${s}`),!s)return;const i=this.schedule.findEventIndex(e.identifier),a=null==(t=this.schedule.items)?void 0:t[i];if(this.isInterstitial(a)){const t=e.findAssetIndex(n),s=Da(e,t);if(e.isAssetPastPlayoutLimit(s)){var r;const e=null==(r=this.schedule.items)?void 0:r[i+1];e&&this.bufferedToItem(e)}else this.bufferedToItem(a,s)}};f.on(a.BUFFERED_TO_END,w);const k=n=>()=>{if(!this.getAssetPlayer(h))return;this.shouldPlay=!0;const t=this.schedule.findEventIndex(e.identifier);this.advanceAfterAssetEnded(e,t,n)};
2return f.once(a.MEDIA_ENDED,k(t)),f.once(a.PLAYOUT_LIMIT_REACHED,k(1/0)),f.on(a.ERROR,((n,s)=>{const a=this.getAssetPlayer(h);if(s.details!==i.BUFFER_STALLED_ERROR)this.handleAssetItemError(s,e,this.schedule.findEventIndex(e.identifier),t,`Asset player error ${s.error} ${e}`);else if(null!=a&&a.media){const n=a.currentTime,t=a.duration-n;n&&e.appendInPlace&&t/a.media.playbackRate<.5?(this.log(`Advancing buffer past end of asset ${h} ${e} at ${a.media.currentTime}`),w()):(this.warn(`Stalled at ${n} of ${n+t} in asset ${h} ${e}`),this.onTimeupdate(),this.checkBuffer(!0))}})),f.on(a.DESTROYING,(()=>{if(!this.getAssetPlayer(h))return;const n=new Error(`Asset player destroyed unexpectedly ${h}`),a={fatal:!0,type:s.OTHER_ERROR,details:i.INTERSTITIAL_ASSET_ITEM_ERROR,error:n};this.handleAssetItemError(a,e,this.schedule.findEventIndex(e.identifier),t,n.message)})),this.log(`INTERSTITIAL_ASSET_PLAYER_CREATED ${Oa(n)}`),this.hls.trigger(a.INTERSTITIAL_ASSET_PLAYER_CREATED,{asset:n,assetListIndex:t,event:e,player:f}),f}clearInterstitial(e,n){e.assetList.forEach((e=>{this.clearAssetPlayer(e.identifier,n)})),e.reset()}resetAssetPlayer(e){const n=this.getAssetPlayerQueueIndex(e);if(-1!==n){this.log(`reset asset player "${e}" after error`);const t=this.playerQueue[n];this.transferMediaFromPlayer(t,null),t.resetDetails()}}clearAssetPlayer(e,n){const t=this.getAssetPlayerQueueIndex(e);if(-1!==t){this.log(`clear asset player "${e}" toSegment: ${n?Na(n):n}`);const s=this.playerQueue[t];this.transferMediaFromPlayer(s,n),this.playerQueue.splice(t,1),s.destroy()}}emptyPlayerQueue(){let e;for(;e=this.playerQueue.pop();)e.destroy();this.playerQueue=[]}startAssetPlayer(e,n,t,s,i){const{interstitial:r,assetItem:o,assetId:l}=e,c=r.assetList.length,d=this.playingAsset;this.endedAsset=null,this.playingAsset=o,d&&d.identifier===l||(d&&(this.clearAssetPlayer(d.identifier,t[s]),delete d.error),this.log(`INTERSTITIAL_ASSET_STARTED ${n+1}/${c} ${Oa(o)}`),this.hls.trigger(a.INTERSTITIAL_ASSET_STARTED,{asset:o,assetListIndex:n,event:r,schedule:t.slice(0),scheduleIndex:s,player:e})),this.bufferAssetPlayer(e,i)}bufferAssetPlayer(e,n){var t,a;const{interstitial:r,assetItem:o}=e,l=this.schedule.findEventIndex(r.identifier),c=null==(t=this.schedule.items)?void 0:t[l];if(!c)return;this.setBufferingItem(c),this.bufferingAsset=o;const d=this.getBufferingPlayer();if(d===e)return;const u=r.appendInPlace;if(u&&!1===(null==d?void 0:d.interstitial.appendInPlace))return;const p=(null==d?void 0:d.tracks)||(null==(a=this.detachedData)?void 0:a.tracks)||this.requiredTracks;if(u&&o!==this.playingAsset){if(!e.tracks)return;if(p&&!A(p,e.tracks)){const n=new Error(`Asset ${Oa(o)} SourceBuffer tracks ('${Object.keys(e.tracks)}') are not compatible with primary content tracks ('${Object.keys(p)}')`),t={fatal:!0,type:s.OTHER_ERROR,details:i.INTERSTITIAL_ASSET_ITEM_ERROR,error:n},a=r.findAssetIndex(o);return void this.handleAssetItemError(t,r,l,a,n.message)}}this.transferMediaTo(e,n)}handleAssetItemError(e,n,t,s,r){if(e.details===i.BUFFER_STALLED_ERROR)return;const o=n.assetList[s];this.warn(`INTERSTITIAL_ASSET_ERROR ${o?Oa(o):o} ${e.error}`);const l=null==o?void 0:o.identifier,c=this.getAssetPlayerQueueIndex(l),d=this.playerQueue[c]||null,u=this.schedule.items,p=g({},e,{fatal:!1,errorAction:pn(!0),asset:o,assetListIndex:s,event:n,schedule:u,scheduleIndex:t,player:d});if(this.hls.trigger(a.INTERSTITIAL_ASSET_ERROR,p),!e.fatal)return;const h=this.playingAsset,m=new Error(r);if(o&&(this.clearAssetPlayer(l,null),o.error=m),n.assetList.some((e=>!e.error))){for(let e=s;e<n.assetList.length;e++)this.resetAssetPlayer(n.assetList[e].identifier);this.updateSchedule()}else n.error=m;n.error?this.primaryFallback(n):h&&h.identifier===l&&this.advanceAfterAssetEnded(n,t,s)}primaryFallback(e){const n=e.timelineStart,t=this.effectivePlayingItem;if(this.updateSchedule(),t){this.log(`Fallback to primary from event "${e.identifier}" start: ${n} pos: ${this.timelinePos} playing: ${t?Na(t):"<none>"} error: ${e.error}`);let s=this.timelinePos;-1===s&&(s=this.hls.startPosition);const i=this.updateItem(t,s);this.itemsMatch(t,i)&&this.clearInterstitial(e,null),e.appendInPlace&&(this.attachPrimary(n,null),this.flushFrontBuffer(n));const a=this.schedule.findItemIndexAtTime(s);this.setSchedulePosition(a)}else this.checkStart()}onAssetListLoaded(e,n){var t;const s=n.event,i=s.identifier,a=n.assetListResponse.ASSETS;if(!this.schedule.hasEvent(i))return;const r=s.timelineStart,o=s.duration;let l=0;a.forEach(((e,n)=>{const t=parseFloat(e.DURATION);this.createAsset(s,n,l,r+l,t,e.URI),l+=t})),s.duration=l,this.log(`Loaded asset-list with duration: ${l} (was: ${o}) ${s}`);const c=this.waitingItem,d=(null==c?void 0:c.event.identifier)===i;this.updateSchedule();const u=null==(t=this.bufferingItem)?void 0:t.event;if(d){var p;const e=this.schedule.findEventIndex(i),n=null==(p=this.schedule.items)?void 0:p[e];if(n){if(!this.playingItem&&this.timelinePos>n.end&&this.schedule.findItemIndexAtTime(this.timelinePos)!==e)return s.error=new Error(`Interstitial no longer within playback range ${this.timelinePos} ${s}`),void this.primaryFallback(s);this.setBufferingItem(n)}this.setSchedulePosition(e)}else if((null==u?void 0:u.identifier)===i&&u.appendInPlace){const e=s.assetList[0],n=this.getAssetPlayer(e.identifier),t=this.primaryMedia;e&&n&&t&&this.bufferAssetPlayer(n,t)}}onError(e,n){switch(n.details){case i.ASSET_LIST_PARSING_ERROR:case i.ASSET_LIST_LOAD_ERROR:case i.ASSET_LIST_LOAD_TIMEOUT:{const e=n.interstitial;e&&this.primaryFallback(e);break}case i.BUFFER_STALLED_ERROR:this.onTimeupdate(),this.checkBuffer(!0)}}}});function Gr(e){return e&&"object"==typeof e?Array.isArray(e)?e.map(Gr):Object.keys(e).reduce(((n,t)=>(n[t]=Gr(e[t]),n)),{}):e}class zr extends Rn{constructor(e,n){super("gap-controller",e.logger),this.hls=null,this.fragmentTracker=null,this.media=null,this.mediaSource=void 0,this.nudgeRetry=0,this.stallReported=!1,this.stalled=null,this.moved=!1,this.seeking=!1,this.buffered={},this.lastCurrentTime=0,this.ended=0,this.waiting=0,this.onMediaPlaying=()=>{this.ended=0,this.waiting=0},this.onMediaWaiting=()=>{var e;null!=(e=this.media)&&e.seeking||(this.waiting=self.performance.now(),this.tick())},this.onMediaEnded=()=>{var e;this.hls&&(this.ended=(null==(e=this.media)?void 0:e.currentTime)||1,this.hls.trigger(a.MEDIA_ENDED,{stalled:!1}))},this.hls=e,this.fragmentTracker=n,this.registerListeners()}registerListeners(){const{hls:e}=this;
vendor: 7,467 bytes, line 2
2e&&(e.on(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.BUFFER_APPENDED,this.onBufferAppended,this))}unregisterListeners(){const{hls:e}=this;e&&(e.off(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.BUFFER_APPENDED,this.onBufferAppended,this))}destroy(){super.destroy(),this.unregisterListeners(),this.media=this.hls=this.fragmentTracker=null,this.mediaSource=void 0}onMediaAttached(e,n){this.setInterval(100),this.mediaSource=n.mediaSource;const t=this.media=n.media;fa(t,"playing",this.onMediaPlaying),fa(t,"waiting",this.onMediaWaiting),fa(t,"ended",this.onMediaEnded)}onMediaDetaching(e,n){this.clearInterval();const{media:t}=this;t&&(_a(t,"playing",this.onMediaPlaying),_a(t,"waiting",this.onMediaWaiting),_a(t,"ended",this.onMediaEnded),this.media=null),this.mediaSource=void 0}onBufferAppended(e,n){this.buffered=n.timeRanges}get hasBuffered(){return Object.keys(this.buffered).length>0}tick(){var e;if(null==(e=this.media)||!e.readyState||!this.hasBuffered)return;const n=this.media.currentTime;this.poll(n,this.lastCurrentTime),this.lastCurrentTime=n}poll(e,n){var t,s;const i=null==(t=this.hls)?void 0:t.config;if(!i)return;const r=this.media;if(!r)return;const{seeking:o}=r,l=this.seeking&&!o,c=!this.seeking&&o,d=r.paused&&!o||r.ended||0===r.playbackRate;if(this.seeking=o,e!==n)return n&&(this.ended=0),this.moved=!0,o||(this.nudgeRetry=0,i.nudgeOnVideoHole&&!d&&e>n&&this.nudgeOnVideoHole(e,n)),void(0===this.waiting&&this.stallResolved(e));if(c||l)return void(l&&this.stallResolved(e));if(d)return this.nudgeRetry=0,this.stallResolved(e),void(!this.ended&&r.ended&&this.hls&&(this.ended=e||1,this.hls.trigger(a.MEDIA_ENDED,{stalled:!1})));if(!Dn.getBuffered(r).length)return void(this.nudgeRetry=0);const u=Dn.bufferInfo(r,e,0),p=u.nextStart||0,h=this.fragmentTracker;if(o&&h&&this.hls){const n=qr(this.hls.inFlightFragments,e),t=u.len>2,s=!p||n||p-e>2&&!h.getPartialFragment(e);if(t||s)return;this.moved=!1}const m=null==(s=this.hls)?void 0:s.latestLevelDetails;if(!this.moved&&null!==this.stalled&&h){if(!(u.len>0||p))return;const n=Math.max(p,u.start||0)-e,t=null!=m&&m.live?2*m.targetduration:2,s=h.getPartialFragment(e);if(n>0&&(n<=t||s))return void(r.paused||this._trySkipBufferHole(s))}const v=i.detectStallWithCurrentTimeMs,g=self.performance.now(),f=this.waiting;let _=this.stalled;if(null===_){if(!(f>0&&g-f<v))return void(this.stalled=g);_=this.stalled=f}const b=g-_;if(!o&&(b>=v||f)&&this.hls){var y;if("ended"===(null==(y=this.mediaSource)?void 0:y.readyState)&&(null==m||!m.live)&&Math.abs(e-((null==m?void 0:m.edge)||0))<1){if(this.ended)return;return this.ended=e||1,void this.hls.trigger(a.MEDIA_ENDED,{stalled:!0})}if(this._reportStall(u),!this.media||!this.hls)return}const w=Dn.bufferInfo(r,e,i.maxBufferHole);this._tryFixBufferStall(w,b,e)}stallResolved(e){const n=this.stalled;if(n&&this.hls&&(this.stalled=null,this.stallReported)){const t=self.performance.now()-n;this.log(`playback not stuck anymore @${e}, after ${Math.round(t)}ms`),this.stallReported=!1,this.waiting=0,this.hls.trigger(a.STALL_RESOLVED,{})}}nudgeOnVideoHole(e,n){var t;const r=this.buffered.video;if(this.hls&&this.media&&this.fragmentTracker&&null!=(t=this.buffered.audio)&&t.length&&r&&r.length>1&&e>r.end(0)){const t=Dn.bufferedInfo(Dn.timeRangesToArray(this.buffered.audio),e,0);if(t.len>1&&n>=t.start){const t=Dn.timeRangesToArray(r),o=Dn.bufferedInfo(t,n,0).bufferedIndex;if(o>-1&&o<t.length-1){const n=Dn.bufferedInfo(t,e,0).bufferedIndex,r=t[o].end,l=t[o+1].start;if((-1===n||n>o)&&l-r<1&&e-r<2){const t=new Error(`nudging playhead to flush pipeline after video hole. currentTime: ${e} hole: ${r} -> ${l} buffered index: ${n}`);this.warn(t.message),this.media.currentTime+=1e-6;const o=this.fragmentTracker.getPartialFragment(e)||void 0,c=Dn.bufferInfo(this.media,e,0);this.hls.trigger(a.ERROR,{type:s.MEDIA_ERROR,details:i.BUFFER_SEEK_OVER_HOLE,fatal:!1,error:t,reason:t.message,frag:o,buffer:c.len,bufferInfo:c})}}}}}_tryFixBufferStall(e,n,t){var s,i;const{fragmentTracker:a,media:r}=this,o=null==(s=this.hls)?void 0:s.config;if(!r||!a||!o)return;const l=null==(i=this.hls)?void 0:i.latestLevelDetails,c=a.getPartialFragment(t);if((c||null!=l&&l.live&&t<l.fragmentStart)&&(this._trySkipBufferHole(c)||!this.media))return;const d=e.buffered,u=this.adjacentTraversal(e,t);(d&&d.length>1&&e.len>o.maxBufferHole||e.nextStart&&(e.nextStart-t<o.maxBufferHole||u))&&(n>1e3*o.highBufferWatchdogPeriod||this.waiting)&&(this.warn("Trying to nudge playhead over buffer-hole"),this._tryNudgeBuffer(e))}adjacentTraversal(e,n){const t=this.fragmentTracker,s=e.nextStart;if(t&&s){const e=t.getFragAtPos(n,d),i=t.getFragAtPos(s,d);if(e&&i)return i.sn-e.sn<2}return!1}_reportStall(e){const{hls:n,media:t,stallReported:r,stalled:o}=this;if(!r&&null!==o&&t&&n){this.stallReported=!0;const r=new Error(`Playback stalling at @${t.currentTime} due to low buffer (${Ve(e)})`);this.warn(r.message),n.trigger(a.ERROR,{type:s.MEDIA_ERROR,details:i.BUFFER_STALLED_ERROR,fatal:!1,error:r,buffer:e.len,bufferInfo:e,stalled:{start:o}})}}_trySkipBufferHole(e){var n;const{fragmentTracker:t,media:r}=this,o=null==(n=this.hls)?void 0:n.config;if(!r||!t||!o)return 0;const l=r.currentTime,c=Dn.bufferInfo(r,l,0),u=l<c.start?c.start:c.nextStart;if(u&&this.hls){const n=c.len<=o.maxBufferHole,h=c.len>0&&c.len<1&&r.readyState<3,m=u-l;if(m>0&&(n||h)){if(m>o.maxBufferHole){let n=!1;if(0===l){const e=t.getAppendedFrag(0,d);e&&u<e.end&&(n=!0)}if(!n){const n=e||t.getAppendedFrag(l,d);if(n){var p;if(null==(p=this.hls.loadLevelObj)||!p.details)return 0;if(qr(this.hls.inFlightFragments,u))return 0;let e=!1,s=n.end;for(;s<u;){const n=t.getAppendedFrag(s,d)||t.getPartialFragment(s);if(!n){e=!0;break}s+=n.duration}if(e)return 0}}}const n=Math.max(u+.05,l+.1);if(this.warn(`skipping hole, adjusting currentTime from ${l} to ${n}`),this.moved=!0,r.currentTime=n,null==e||!e.gap){const t=new Error(`fragment loaded with buffer holes, seeking from ${l} to ${n}`);this.hls.trigger(a.ERROR,{type:s.MEDIA_ERROR,details:i.BUFFER_SEEK_OVER_HOLE,fatal:!1,error:t,reason:t.message,frag:e||void 0,buffer:c.len,bufferInfo:c})}return n}}return 0}_tryNudgeBuffer(e){const{hls:n,media:t,nudgeRetry:r}=this,o=null==n?void 0:n.config;if(!t||!o)return 0;const l=t.currentTime;if(this.nudgeRetry++,r<o.nudgeMaxRetry){const c=l+(r+1)*o.nudgeOffset,d=new Error(`Nudging 'currentTime' from ${l} to ${c}`);this.warn(d.message),t.currentTime=c,n.trigger(a.ERROR,{type:s.MEDIA_ERROR,details:i.BUFFER_NUDGE_ON_STALL,error:d,fatal:!1,buffer:e.len,bufferInfo:e})}else{const t=new Error(`Playhead still not moving while enough data buffered @${l} after ${o.nudgeMaxRetry} nudges`);this.error(t.message),n.trigger(a.ERROR,{type:s.MEDIA_ERROR,details:i.BUFFER_STALLED_ERROR,error:t,fatal:!0,buffer:e.len,bufferInfo:e})}}}function qr(e,n){const t=Kr(e.main);if(t&&t.start<=n)return t;const s=Kr(e.audio);return s&&s.start<=n?s:null}function Kr(e){if(!e)return null;switch(e.state){case Gt.IDLE:case Gt.STOPPED:case Gt.ENDED:case Gt.ERROR:return null}return e.frag}function Vr(){if("undefined"!=typeof self)return self.VTTCue||self.TextTrackCue}function Hr(e,n,t,s,i){let a=new e(n,t,"");try{a.value=s,i&&(a.type=i)}catch(r){a=new e(n,t,Ve(i?_({type:i},s):s))}return a}const Yr=(()=>{const e=Vr();try{e&&new e(0,Number.POSITIVE_INFINITY,"")}catch(e){return Number.MAX_VALUE}return Number.POSITIVE_INFINITY})();
2class Wr{constructor(e){this.hls=void 0,this.id3Track=null,this.media=null,this.dateRangeCuesAppended={},this.removeCues=!0,this.onEventCueEnter=()=>{this.hls&&this.hls.trigger(a.EVENT_CUE_ENTER,{})},this.hls=e,this._registerListeners()}destroy(){this._unregisterListeners(),this.id3Track=null,this.media=null,this.dateRangeCuesAppended={},this.hls=this.onEventCueEnter=null}_registerListeners(){const{hls:e}=this;e.on(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.FRAG_PARSING_METADATA,this.onFragParsingMetadata,this),e.on(a.BUFFER_FLUSHING,this.onBufferFlushing,this),e.on(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.on(a.LEVEL_PTS_UPDATED,this.onLevelPtsUpdated,this)}_unregisterListeners(){const{hls:e}=this;e.off(a.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.FRAG_PARSING_METADATA,this.onFragParsingMetadata,this),e.off(a.BUFFER_FLUSHING,this.onBufferFlushing,this),e.off(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.off(a.LEVEL_PTS_UPDATED,this.onLevelPtsUpdated,this)}onMediaAttaching(e,n){var t;this.media=n.media,!1===(null==(t=n.overrides)?void 0:t.cueRemoval)&&(this.removeCues=!1)}onMediaAttached(){const e=this.hls.latestLevelDetails;e&&this.updateDateRangeCues(e)}onMediaDetaching(e,n){this.media=null,n.transferMedia||(this.id3Track&&(this.removeCues&&Ta(this.id3Track,this.onEventCueEnter),this.id3Track=null),this.dateRangeCuesAppended={})}onManifestLoading(){this.dateRangeCuesAppended={}}createTrack(e){const n=this.getID3Track(e.textTracks);return n.mode="hidden",n}getID3Track(e){if(this.media){for(let n=0;n<e.length;n++){const t=e[n];if("metadata"===t.kind&&"id3"===t.label)return wa(t,this.media),t}return this.media.addTextTrack("metadata","id3")}}onFragParsingMetadata(e,n){if(!this.media)return;const{hls:{config:{enableEmsgMetadataCues:t,enableID3MetadataCues:s}}}=this;if(!t&&!s)return;const{samples:i}=n;this.id3Track||(this.id3Track=this.createTrack(this.media));const a=Vr();if(a)for(let e=0;e<i.length;e++){const n=i[e].type;if(n===ys.emsg&&!t||!s)continue;const r=gs(i[e].data);if(r){const t=i[e].pts;let s=t+i[e].duration;s>Yr&&(s=Yr),s-t<=0&&(s=t+.25);for(let e=0;e<r.length;e++){const i=r[e];if(!fs(i)){this.updateId3CueEnds(t,n);const e=Hr(a,t,s,i,n);e&&this.id3Track.addCue(e)}}}}}updateId3CueEnds(e,n){var t;const s=null==(t=this.id3Track)?void 0:t.cues;if(s)for(let t=s.length;t--;){const i=s[t];i.type===n&&i.startTime<e&&i.endTime===Yr&&(i.endTime=e)}}onBufferFlushing(e,{startOffset:n,endOffset:t,type:s}){const{id3Track:i,hls:a}=this;if(!a)return;const{config:{enableEmsgMetadataCues:r,enableID3MetadataCues:o}}=a;if(i&&(r||o)){let e;e="audio"===s?e=>e.type===ys.audioId3&&o:"video"===s?e=>e.type===ys.emsg&&r:e=>e.type===ys.audioId3&&o||e.type===ys.emsg&&r,Ea(i,n,t,e)}}onLevelUpdated(e,{details:n}){this.updateDateRangeCues(n,!0)}onLevelPtsUpdated(e,n){Math.abs(n.drift)>.01&&this.updateDateRangeCues(n.details)}updateDateRangeCues(n,t){if(!this.media||!n.hasProgramDateTime||!this.hls.config.enableDateRangeMetadataCues)return;const{id3Track:s}=this,{dateRanges:i}=n,a=Object.keys(i);let r=this.dateRangeCuesAppended;var o;if(s&&t)if(null!=(o=s.cues)&&o.length){const e=Object.keys(r).filter((e=>!a.includes(e)));for(let n=e.length;n--;){const t=e[n],i=r[t].cues;
2delete r[t],Object.keys(i).forEach((e=>{try{const n=i[e];n.removeEventListener("enter",this.onEventCueEnter),s.removeCue(n)}catch(e){}}))}}else r=this.dateRangeCuesAppended={};const l=n.fragments[n.fragments.length-1];if(0===a.length||!e(null==l?void 0:l.programDateTime))return;this.id3Track||(this.id3Track=this.createTrack(this.media));const c=Vr();for(let e=0;e<a.length;e++){const n=a[e],t=i[n],s=t.startTime,o=r[n],l=(null==o?void 0:o.cues)||{};let p=(null==o?void 0:o.durationKnown)||!1,h=Yr;const{duration:m,endDate:v}=t;if(v&&null!==m)h=s+m,p=!0;else if(t.endOnNext&&!p){const e=a.reduce(((e,n)=>{if(n!==t.id){const s=i[n];if(s.class===t.class&&s.startDate>t.startDate&&(!e||t.startDate<e.startDate))return s}return e}),null);e&&(h=e.startTime,p=!0)}const g=Object.keys(t.attr);for(let e=0;e<g.length;e++){const i=g[e];if("ID"===(u=i)||"CLASS"===u||"CUE"===u||"START-DATE"===u||"DURATION"===u||"END-DATE"===u||"END-ON-NEXT"===u)continue;const a=l[i];if(a)p&&!o.durationKnown?a.endTime=h:Math.abs(a.startTime-s)>.01&&(a.startTime=s,a.endTime=h);else if(c){let e=t.attr[i];Gn(i)&&(d=e,e=Uint8Array.from(d.replace(/^0x/,"").replace(/([\da-fA-F]{2}) ?/g,"0x$1 ").replace(/ +$/,"").split(" ")).buffer);const a=Hr(c,s,h,{key:i,data:e},ys.dateRange);a&&(a.id=n,this.id3Track.addCue(a),l[i]=a,this.hls.config.interstitialsController&&("X-ASSET-LIST"!==i&&"X-ASSET-URL"!==i||a.addEventListener("enter",this.onEventCueEnter)))}}r[n]={cues:l,dateRange:t,durationKnown:p}}var d,u}}class Xr{constructor(e){this.hls=void 0,this.config=void 0,this.media=null,this.currentTime=0,this.stallCount=0,this._latency=null,this._targetLatencyUpdated=!1,this.onTimeupdate=()=>{const{media:e}=this,n=this.levelDetails;if(!e||!n)return;this.currentTime=e.currentTime;const t=this.computeLatency();if(null===t)return;this._latency=t;const{lowLatencyMode:s,maxLiveSyncPlaybackRate:i}=this.config;if(!s||1===i||!n.live)return;const a=this.targetLatency;if(null===a)return;const r=t-a;if(r<Math.min(this.maxLatency,a+n.targetduration)&&r>.05&&this.forwardBufferLength>1){const n=Math.min(2,Math.max(1,i)),t=Math.round(2/(1+Math.exp(-.75*r-this.edgeStalled))*20)/20,s=Math.min(n,Math.max(1,t));this.changeMediaPlaybackRate(e,s)}else 1!==e.playbackRate&&0!==e.playbackRate&&this.changeMediaPlaybackRate(e,1)},this.hls=e,this.config=e.config,this.registerListeners()}get levelDetails(){var e;return(null==(e=this.hls)?void 0:e.latestLevelDetails)||null}get latency(){return this._latency||0}get maxLatency(){const{config:e}=this;if(void 0!==e.liveMaxLatencyDuration)return e.liveMaxLatencyDuration;const n=this.levelDetails;return n?e.liveMaxLatencyDurationCount*n.targetduration:0}get targetLatency(){const e=this.levelDetails;if(null===e||null===this.hls)return null;const{holdBack:n,partHoldBack:t,targetduration:s}=e,{liveSyncDuration:i,liveSyncDurationCount:a,lowLatencyMode:r}=this.config,o=this.hls.userConfig;let l=r&&t||n;(this._targetLatencyUpdated||o.liveSyncDuration||o.liveSyncDurationCount||0===l)&&(l=void 0!==i?i:a*s);const c=s;return l+Math.min(this.stallCount*this.config.liveSyncOnStallIncrease,c)}set targetLatency(e){this.stallCount=0,this.config.liveSyncDuration=e,this._targetLatencyUpdated=!0}get liveSyncPosition(){const e=this.estimateLiveEdge(),n=this.targetLatency;if(null===e||null===n)return null;const t=this.levelDetails;if(null===t)return null;const s=t.edge,i=e-n-this.edgeStalled,a=s-t.totalduration,r=s-(this.config.lowLatencyMode&&t.partTarget||t.targetduration);return Math.min(Math.max(a,i),r)}get drift(){const e=this.levelDetails;return null===e?1:e.drift}get edgeStalled(){const e=this.levelDetails;if(null===e)return 0;const n=3*(this.config.lowLatencyMode&&e.partTarget||e.targetduration);return Math.max(e.age-n,0)}get forwardBufferLength(){const{media:e}=this,n=this.levelDetails;if(!e||!n)return 0;const t=e.buffered.length;return(t?e.buffered.end(t-1):n.edge)-this.currentTime}destroy(){this.unregisterListeners(),this.onMediaDetaching(),this.hls=null}registerListeners(){const{hls:e}=this;e&&(e.on(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.on(a.ERROR,this.onError,this))}unregisterListeners(){const{hls:e}=this;
2e&&(e.off(a.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(a.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.LEVEL_UPDATED,this.onLevelUpdated,this),e.off(a.ERROR,this.onError,this))}onMediaAttached(e,n){this.media=n.media,this.media.addEventListener("timeupdate",this.onTimeupdate)}onMediaDetaching(){this.media&&(this.media.removeEventListener("timeupdate",this.onTimeupdate),this.media=null)}onManifestLoading(){this._latency=null,this.stallCount=0}onLevelUpdated(e,{details:n}){n.advanced&&this.onTimeupdate(),!n.live&&this.media&&this.media.removeEventListener("timeupdate",this.onTimeupdate)}onError(e,n){var t;n.details===i.BUFFER_STALLED_ERROR&&(this.stallCount++,this.hls&&null!=(t=this.levelDetails)&&t.live&&this.hls.logger.warn("[latency-controller]: Stall detected, adjusting target latency"))}changeMediaPlaybackRate(e,n){var t,s;e.playbackRate!==n&&(null==(t=this.hls)||t.logger.debug(`[latency-controller]: latency=${this.latency.toFixed(3)}, targetLatency=${null==(s=this.targetLatency)?void 0:s.toFixed(3)}, forwardBufferLength=${this.forwardBufferLength.toFixed(3)}: adjusting playback rate from ${e.playbackRate} to ${n}`),e.playbackRate=n)}estimateLiveEdge(){const e=this.levelDetails;return null===e?null:e.edge+e.age}computeLatency(){const e=this.estimateLiveEdge();return null===e?null:e-this.currentTime}}class Qr extends yi{constructor(e,n){super(e,"level-controller"),this._levels=[],this._firstLevel=-1,this._maxAutoLevel=-1,this._startLevel=void 0,this.currentLevel=null,this.currentLevelIndex=-1,this.manualLevelIndex=-1,this.steering=void 0,this.onParsedComplete=void 0,this.steering=n,this._registerListeners()}_registerListeners(){const{hls:e}=this;e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.on(a.LEVEL_LOADED,this.onLevelLoaded,this),e.on(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.on(a.FRAG_BUFFERED,this.onFragBuffered,this),e.on(a.ERROR,this.onError,this)}_unregisterListeners(){const{hls:e}=this;e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.MANIFEST_LOADED,this.onManifestLoaded,this),e.off(a.LEVEL_LOADED,this.onLevelLoaded,this),e.off(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.off(a.FRAG_BUFFERED,this.onFragBuffered,this),e.off(a.ERROR,this.onError,this)}destroy(){this._unregisterListeners(),this.steering=null,this.resetLevels(),super.destroy()}stopLoad(){this._levels.forEach((e=>{e.loadError=0,e.fragmentError=0})),super.stopLoad()}resetLevels(){this._startLevel=void 0,this.manualLevelIndex=-1,this.currentLevelIndex=-1,this.currentLevel=null,this._levels=[],this._maxAutoLevel=-1}onManifestLoading(e,n){this.resetLevels()}onManifestLoaded(e,n){const t=this.hls.config.preferManagedMediaSource,s=[],i={},a={};let r=!1,o=!1,l=!1;n.levels.forEach((e=>{const n=e.attrs;let{audioCodec:c,videoCodec:d}=e;c&&(e.audioCodec=c=Le(c,t)||void 0),d&&(d=e.videoCodec=function(e){const n=e.split(",");for(let e=0;e<n.length;e++){const t=n[e].split(".");t.length>2&&"avc1"===t[0]&&(n[e]=`avc1.${parseInt(t[1]).toString(16)}${("000"+parseInt(t[2]).toString(16)).slice(-4)}`)}return n.join(",")}(d));const{width:u,height:p,unknownCodecs:h}=e;let m=h?h.length:0;if(h)for(let n=m;n--;){const t=h[n];this.isAudioSupported(t)?(e.audioCodec=c=c?`${c},${t}`:t,m--,be.audio[c.substring(0,4)]=2):this.isVideoSupported(t)&&(e.videoCodec=d=d?`${d},${t}`:t,m--,be.video[d.substring(0,4)]=2)}if(r||(r=!(!u||!p)),o||(o=!!d),l||(l=!!c),m||c&&!this.isAudioSupported(c)||d&&!this.isVideoSupported(d))return void this.log(`Some or all CODECS not supported "${n.CODECS}"`);const{CODECS:v,"FRAME-RATE":g,"HDCP-LEVEL":f,"PATHWAY-ID":_,RESOLUTION:b,"VIDEO-RANGE":y}=n,w=`${_||"."}-${e.bitrate}-${b}-${g}-${v}-${y}-${f}`;if(i[w])if(i[w].uri===e.url||e.attrs["PATHWAY-ID"])i[w].addGroupId("audio",n.AUDIO),i[w].addGroupId("text",n.SUBTITLES);else{const n=a[w]+=1;e.attrs["PATHWAY-ID"]=new Array(n+1).join(".");const t=this.createLevel(e);i[w]=t,s.push(t)}else{const n=this.createLevel(e);i[w]=n,a[w]=1,s.push(n)}})),this.filterAndSortMediaOptions(s,n,r,o,l)}createLevel(e){const n=new qe(e),t=e.supplemental;if(null!=t&&t.videoCodec&&!this.isVideoSupported(t.videoCodec)){const e=new Error(`SUPPLEMENTAL-CODECS not supported "${t.videoCodec}"`);this.log(e.message),n.supportedResult=Me(e,[])}return n}isAudioSupported(e){return we(e,"audio",this.hls.config.preferManagedMediaSource)}isVideoSupported(e){return we(e,"video",this.hls.config.preferManagedMediaSource)}filterAndSortMediaOptions(e,n,t,r,o){let l=[],c=[],d=e;if((t||r)&&o&&(d=d.filter((({videoCodec:e,videoRange:n,width:t,height:s})=>{return(!!e||!(!t||!s))&&!!(i=n)&&je.indexOf(i)>-1;var i}))),0===d.length)return void Promise.resolve().then((()=>
vendor: 29,257 bytes, line 2
2{if(this.hls){let e="no level with compatible codecs found in manifest",t=e;n.levels.length&&(t=`one or more CODECS in variant not supported: ${Ve(n.levels.map((e=>e.attrs.CODECS)).filter(((e,n,t)=>t.indexOf(e)===n)))}`,this.warn(t),e+=` (${t})`);const r=new Error(e);this.hls.trigger(a.ERROR,{type:s.MEDIA_ERROR,details:i.MANIFEST_INCOMPATIBLE_CODECS_ERROR,fatal:!0,url:n.url,error:r,reason:t})}}));n.audioTracks&&(l=n.audioTracks.filter((e=>!e.audioCodec||this.isAudioSupported(e.audioCodec))),Jr(l)),n.subtitles&&(c=n.subtitles,Jr(c));const u=d.slice(0);d.sort(((e,n)=>{if(e.attrs["HDCP-LEVEL"]!==n.attrs["HDCP-LEVEL"])return(e.attrs["HDCP-LEVEL"]||"")>(n.attrs["HDCP-LEVEL"]||"")?1:-1;if(t&&e.height!==n.height)return e.height-n.height;if(e.frameRate!==n.frameRate)return e.frameRate-n.frameRate;if(e.videoRange!==n.videoRange)return je.indexOf(e.videoRange)-je.indexOf(n.videoRange);if(e.videoCodec!==n.videoCodec){const t=Ee(e.videoCodec),s=Ee(n.videoCodec);if(t!==s)return s-t}if(e.uri===n.uri&&e.codecSet!==n.codecSet){const t=xe(e.codecSet),s=xe(n.codecSet);if(t!==s)return s-t}return e.averageBitrate!==n.averageBitrate?e.averageBitrate-n.averageBitrate:0}));let p=u[0];if(this.steering&&(d=this.steering.filterParsedLevels(d),d.length!==u.length))for(let e=0;e<u.length;e++)if(u[e].pathwayId===d[0].pathwayId){p=u[e];break}this._levels=d;for(let e=0;e<d.length;e++)if(d[e]===p){var h;this._firstLevel=e;const n=p.bitrate,t=this.hls.bandwidthEstimate;if(this.log(`manifest loaded, ${d.length} level(s) found, first bitrate: ${n}`),void 0===(null==(h=this.hls.userConfig)?void 0:h.abrEwmaDefaultEstimate)){const e=Math.min(n,this.hls.config.abrEwmaDefaultEstimateMax);e>t&&t===this.hls.abrEwmaDefaultEstimate&&(this.hls.bandwidthEstimate=e)}break}const m=o&&!r,v=this.hls.config,g=!(!v.audioStreamController||!v.audioTrackController),f={levels:d,audioTracks:l,subtitleTracks:c,sessionData:n.sessionData,sessionKeys:n.sessionKeys,firstLevel:this._firstLevel,stats:n.stats,audio:o,video:r,altAudio:g&&!m&&l.some((e=>!!e.url))};this.hls.trigger(a.MANIFEST_PARSED,f)}get levels(){return 0===this._levels.length?null:this._levels}get loadLevelObj(){return this.currentLevel}get level(){return this.currentLevelIndex}set level(e){const n=this._levels;if(0===n.length)return;if(e<0||e>=n.length){const t=new Error("invalid level idx"),r=e<0;if(this.hls.trigger(a.ERROR,{type:s.OTHER_ERROR,details:i.LEVEL_SWITCH_ERROR,level:e,fatal:r,error:t,reason:t.message}),r)return;e=Math.min(e,n.length-1)}const t=this.currentLevelIndex,r=this.currentLevel,o=r?r.attrs["PATHWAY-ID"]:void 0,l=n[e],c=l.attrs["PATHWAY-ID"];if(this.currentLevelIndex=e,this.currentLevel=l,t===e&&r&&o===c)return;this.log(`Switching to level ${e} (${l.height?l.height+"p ":""}${l.videoRange?l.videoRange+" ":""}${l.codecSet?l.codecSet+" ":""}@${l.bitrate})${c?" with Pathway "+c:""} from level ${t}${o?" with Pathway "+o:""}`);const d={level:e,attrs:l.attrs,details:l.details,bitrate:l.bitrate,averageBitrate:l.averageBitrate,maxBitrate:l.maxBitrate,realBitrate:l.realBitrate,width:l.width,height:l.height,codecSet:l.codecSet,audioCodec:l.audioCodec,videoCodec:l.videoCodec,audioGroups:l.audioGroups,subtitleGroups:l.subtitleGroups,loaded:l.loaded,loadError:l.loadError,fragmentError:l.fragmentError,name:l.name,id:l.id,uri:l.uri,url:l.url,urlId:0,audioGroupIds:l.audioGroupIds,textGroupIds:l.textGroupIds};this.hls.trigger(a.LEVEL_SWITCHING,d);const u=l.details;if(!u||u.live){const e=this.switchParams(l.uri,null==r?void 0:r.details,u);this.loadPlaylist(e)}}get manualLevel(){return this.manualLevelIndex}set manualLevel(e){this.manualLevelIndex=e,void 0===this._startLevel&&(this._startLevel=e),-1!==e&&(this.level=e)}get firstLevel(){return this._firstLevel}set firstLevel(e){this._firstLevel=e}get startLevel(){if(void 0===this._startLevel){const e=this.hls.config.startLevel;return void 0!==e?e:this.hls.firstAutoLevel}return this._startLevel}set startLevel(e){this._startLevel=e}get pathways(){return this.steering?this.steering.pathways():[]}get pathwayPriority(){return this.steering?this.steering.pathwayPriority:null}set pathwayPriority(e){if(this.steering){const n=this.steering.pathways(),t=e.filter((e=>-1!==n.indexOf(e)));if(e.length<1)return void this.warn(`pathwayPriority ${e} should contain at least one pathway from list: ${n}`);this.steering.pathwayPriority=t}}onError(e,n){!n.fatal&&n.context&&n.context.type===o&&n.context.level===this.level&&this.checkRetry(n)}onFragBuffered(e,{frag:n}){if(void 0!==n&&n.type===d){const e=n.elementaryStreams;if(!Object.keys(e).some((n=>!!e[n])))return;const t=this._levels[n.level];null!=t&&t.loadError&&(this.log(`Resetting level error count of ${t.loadError} on frag buffered`),t.loadError=0)}}onLevelLoaded(e,n){var t;const{level:s,details:i}=n,a=n.levelInfo;var r;if(!a)return this.warn(`Invalid level index ${s}`),void(null!=(r=n.deliveryDirectives)&&r.skip&&(i.deltaUpdateFailed=!0));if(a===this.currentLevel||n.withoutMultiVariant){0===a.fragmentError&&(a.loadError=0);let e=a.details;e===n.details&&e.advanced&&(e=void 0),this.playlistLoaded(s,n,e)}else null!=(t=n.deliveryDirectives)&&t.skip&&(i.deltaUpdateFailed=!0)}loadPlaylist(e){super.loadPlaylist(),this.shouldLoadPlaylist(this.currentLevel)&&this.scheduleLoading(this.currentLevel,e)}loadingPlaylist(e,n){super.loadingPlaylist(e,n);const t=this.getUrlWithDirectives(e.uri,n),s=this.currentLevelIndex,i=e.attrs["PATHWAY-ID"],r=e.details,o=null==r?void 0:r.age;this.log(`Loading level index ${s}${void 0!==(null==n?void 0:n.msn)?" at sn "+n.msn+" part "+n.part:""}${i?" Pathway "+i:""}${o&&r.live?" age "+o.toFixed(1)+(r.type?" "+r.type||0:""):""} ${t}`),this.hls.trigger(a.LEVEL_LOADING,{url:t,level:s,levelInfo:e,pathwayId:e.attrs["PATHWAY-ID"],id:0,deliveryDirectives:n||null})}get nextLoadLevel(){return-1!==this.manualLevelIndex?this.manualLevelIndex:this.hls.nextAutoLevel}set nextLoadLevel(e){this.level=e,-1===this.manualLevelIndex&&(this.hls.nextAutoLevel=e)}removeLevel(e){var n;if(1===this._levels.length)return;const t=this._levels.filter(((n,t)=>t!==e||(this.steering&&this.steering.removeLevel(n),n===this.currentLevel&&(this.currentLevel=null,this.currentLevelIndex=-1,n.details&&n.details.fragments.forEach((e=>e.level=-1))),!1)));Ft(t),this._levels=t,this.currentLevelIndex>-1&&null!=(n=this.currentLevel)&&n.details&&(this.currentLevelIndex=this.currentLevel.details.fragments[0].level),this.manualLevelIndex>-1&&(this.manualLevelIndex=this.currentLevelIndex);const s=t.length-1;this._firstLevel=Math.min(this._firstLevel,s),this._startLevel&&(this._startLevel=Math.min(this._startLevel,s)),this.hls.trigger(a.LEVELS_UPDATED,{levels:t})}onLevelsUpdated(e,{levels:n}){this._levels=n}checkMaxAutoUpdated(){const{autoLevelCapping:e,maxAutoLevel:n,maxHdcpLevel:t}=this.hls;this._maxAutoLevel!==n&&(this._maxAutoLevel=n,this.hls.trigger(a.MAX_AUTO_LEVEL_UPDATED,{autoLevelCapping:e,levels:this.levels,maxAutoLevel:n,minAutoLevel:this.hls.minAutoLevel,maxHdcpLevel:t}))}}function Jr(e){const n={};e.forEach((e=>{const t=e.groupId||"";e.id=n[t]=n[t]||0,n[t]++}))}function Zr(){return self.SourceBuffer||self.WebKitSourceBuffer}function eo(){if(!S())return!1;const e=Zr();return!e||e.prototype&&"function"==typeof e.prototype.appendBuffer&&"function"==typeof e.prototype.remove}class no extends zt{constructor(n,t,s){super(n,t,s,"stream-controller",d),this.audioCodecSwap=!1,this.level=-1,this._forceStartLoad=!1,this._hasEnoughToStart=!1,this.altAudio=0,this.audioOnly=!1,this.fragPlaying=null,this.fragLastKbps=0,this.couldBacktrack=!1,this.backtrackFragment=null,this.audioCodecSwitch=!1,this.videoBuffer=null,this.onMediaPlaying=()=>{this.tick()},this.onMediaSeeked=()=>{const n=this.media,t=n?n.currentTime:null;if(null===t||!e(t))return;if(this.log(`Media seeked to ${t.toFixed(3)}`),!this.getBufferedFrag(t))return;const s=this.getFwdBufferInfoAtPos(n,t,d,0);null!==s&&0!==s.len?this.tick():this.warn(`Main forward buffer length at ${t} on "seeked" event ${s?s.len:"empty"})`)},this.registerListeners()}registerListeners(){super.registerListeners();const{hls:e}=this;e.on(a.MANIFEST_PARSED,this.onManifestParsed,this),e.on(a.LEVEL_LOADING,this.onLevelLoading,this),e.on(a.LEVEL_LOADED,this.onLevelLoaded,this),e.on(a.FRAG_LOAD_EMERGENCY_ABORTED,this.onFragLoadEmergencyAborted,this),e.on(a.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.on(a.AUDIO_TRACK_SWITCHED,this.onAudioTrackSwitched,this),e.on(a.BUFFER_CREATED,this.onBufferCreated,this),e.on(a.BUFFER_FLUSHED,this.onBufferFlushed,this),e.on(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.on(a.FRAG_BUFFERED,this.onFragBuffered,this)}unregisterListeners(){super.unregisterListeners();const{hls:e}=this;e.off(a.MANIFEST_PARSED,this.onManifestParsed,this),e.off(a.LEVEL_LOADED,this.onLevelLoaded,this),e.off(a.FRAG_LOAD_EMERGENCY_ABORTED,this.onFragLoadEmergencyAborted,this),e.off(a.AUDIO_TRACK_SWITCHING,this.onAudioTrackSwitching,this),e.off(a.AUDIO_TRACK_SWITCHED,this.onAudioTrackSwitched,this),e.off(a.BUFFER_CREATED,this.onBufferCreated,this),e.off(a.BUFFER_FLUSHED,this.onBufferFlushed,this),e.off(a.LEVELS_UPDATED,this.onLevelsUpdated,this),e.off(a.FRAG_BUFFERED,this.onFragBuffered,this)}onHandlerDestroying(){this.onMediaPlaying=this.onMediaSeeked=null,this.unregisterListeners(),super.onHandlerDestroying()}startLoad(e,n){if(this.levels){const{lastCurrentTime:t,hls:s}=this;if(this.stopLoad(),this.setInterval(100),this.level=-1,!this.startFragRequested){let e=s.startLevel;-1===e&&(s.config.testBandwidth&&this.levels.length>1?(e=0,this.bitrateTest=!0):e=s.firstAutoLevel),s.nextLoadLevel=e,this.level=s.loadLevel,this._hasEnoughToStart=!!n}t>0&&-1===e&&!n&&(this.log(`Override startPosition with lastCurrentTime @${t.toFixed(3)}`),e=t),this.state=Gt.IDLE,this.nextLoadPosition=this.lastCurrentTime=e+this.timelineOffset,this.startPosition=n?-1:e,this.tick()}else this._forceStartLoad=!0,this.state=Gt.STOPPED}stopLoad(){this._forceStartLoad=!1,super.stopLoad()}doTick(){switch(this.state){case Gt.WAITING_LEVEL:{const{levels:e,level:n}=this,t=null==e?void 0:e[n],s=null==t?void 0:t.details;if(s&&(!s.live||this.levelLastLoaded===t&&!this.waitForLive(t))){if(this.waitForCdnTuneIn(s))break;this.state=Gt.IDLE;break}if(this.hls.nextLoadLevel!==this.level){this.state=Gt.IDLE;break}break}case Gt.FRAG_LOADING_WAITING_RETRY:{var e;const n=self.performance.now(),t=this.retryDate;if(!t||n>=t||null!=(e=this.media)&&e.seeking){const{levels:e,level:n}=this,t=null==e?void 0:e[n];this.resetStartWhenNotLoaded(t||null),this.state=Gt.IDLE}}}this.state===Gt.IDLE&&this.doTickIdle(),this.onTickEnd()}onTickEnd(){var e;super.onTickEnd(),null!=(e=this.media)&&e.readyState&&!1===this.media.seeking&&(this.lastCurrentTime=this.media.currentTime),this.checkFragmentChanged()}doTickIdle(){const{hls:e,levelLastLoaded:n,levels:t,media:s}=this;if(null===n||!s&&!this.primaryPrefetch&&(this.startFragRequested||!e.config.startFragPrefetch))return;if(this.altAudio&&this.audioOnly)return;const i=this.buffering?e.nextLoadLevel:e.loadLevel;if(null==t||!t[i])return;const r=t[i],o=this.getMainFwdBufferInfo();if(null===o)return;const l=this.getLevelDetails();if(l&&this._streamEnded(o,l)){const e={};return 2===this.altAudio&&(e.type="video"),this.hls.trigger(a.BUFFER_EOS,e),void(this.state=Gt.ENDED)}if(!this.buffering)return;e.loadLevel!==i&&-1===e.manualLevel&&this.log(`Adapting to level ${i} from level ${this.level}`),this.level=e.nextLoadLevel=i;const c=r.details;if(!c||this.state===Gt.WAITING_LEVEL||this.waitForLive(r))return this.level=i,this.state=Gt.WAITING_LEVEL,void(this.startFragRequested=!1);const u=o.len,p=this.getMaxBufferLength(r.maxBitrate);if(u>=p)return;this.backtrackFragment&&this.backtrackFragment.start>o.end&&(this.backtrackFragment=null);const h=this.backtrackFragment?this.backtrackFragment.start:o.end;let m=this.getNextFragment(h,c);if(this.couldBacktrack&&!this.fragPrevious&&m&&q(m)&&this.fragmentTracker.getState(m)!==gn){var v;const e=(null!=(v=this.backtrackFragment)?v:m).sn-c.startSN,n=c.fragments[e-1];n&&m.cc===n.cc&&(m=n,this.fragmentTracker.removeFragment(n))}else this.backtrackFragment&&o.len&&(this.backtrackFragment=null);if(m&&this.isLoopLoading(m,h)){if(!m.gap){const e=this.audioOnly&&!this.altAudio?U:j,n=(e===j?this.videoBuffer:this.mediaBuffer)||this.media;n&&this.afterBufferFlushed(n,e,d)}m=this.getNextFragmentLoopLoading(m,c,o,d,p)}m&&(!m.initSegment||m.initSegment.data||this.bitrateTest||(m=m.initSegment),this.loadFragment(m,r,h))}loadFragment(e,n,t){const s=this.fragmentTracker.getState(e);s===hn||s===vn?q(e)?this.bitrateTest?(this.log(`Fragment ${e.sn} of level ${e.level} is being downloaded to test bitrate and will not be buffered`),this._loadBitrateTestFrag(e,n)):super.loadFragment(e,n,t):this._loadInitSegment(e,n):this.clearTrackerIfNeeded(e)}getBufferedFrag(e){return this.fragmentTracker.getBufferedFrag(e,d)}followingBufferedFrag(e){return e?this.getBufferedFrag(e.end+.5):null}immediateLevelSwitch(){this.abortCurrentFrag(),this.flushMainBuffer(0,Number.POSITIVE_INFINITY)}nextLevelSwitch(){const{levels:e,media:n}=this;if(null!=n&&n.readyState){let t;const s=this.getAppendedFrag(n.currentTime);s&&s.start>1&&this.flushMainBuffer(0,s.start-1);const i=this.getLevelDetails();if(null!=i&&i.live){const e=this.getMainFwdBufferInfo();if(!e||e.len<2*i.targetduration)return}if(!n.paused&&e){const n=e[this.hls.nextLoadLevel],s=this.fragLastKbps;t=s&&this.fragCurrent?this.fragCurrent.duration*n.maxBitrate/(1e3*s)+1:0}else t=0;const a=this.getBufferedFrag(n.currentTime+t);if(a){const e=this.followingBufferedFrag(a);if(e){this.abortCurrentFrag();const n=e.maxStartPTS?e.maxStartPTS:e.start,t=e.duration,s=Math.max(a.end,n+Math.min(Math.max(t-this.config.maxFragLookUpTolerance,t*(this.couldBacktrack?.5:.125)),t*(this.couldBacktrack?.75:.25)));this.flushMainBuffer(s,Number.POSITIVE_INFINITY)}}}}abortCurrentFrag(){const e=this.fragCurrent;switch(this.fragCurrent=null,this.backtrackFragment=null,e&&(e.abortRequests(),this.fragmentTracker.removeFragment(e)),this.state){case Gt.KEY_LOADING:case Gt.FRAG_LOADING:case Gt.FRAG_LOADING_WAITING_RETRY:case Gt.PARSING:case Gt.PARSED:this.state=Gt.IDLE}this.nextLoadPosition=this.getLoadPosition()}flushMainBuffer(e,n){super.flushMainBuffer(e,n,2===this.altAudio?"video":null)}onMediaAttached(e,n){super.onMediaAttached(e,n);const t=n.media;fa(t,"playing",this.onMediaPlaying),fa(t,"seeked",this.onMediaSeeked)}onMediaDetaching(e,n){const{media:t}=this;t&&(_a(t,"playing",this.onMediaPlaying),_a(t,"seeked",this.onMediaSeeked)),this.videoBuffer=null,this.fragPlaying=null,super.onMediaDetaching(e,n),n.transferMedia||(this._hasEnoughToStart=!1)}onManifestLoading(){super.onManifestLoading(),this.log("Trigger BUFFER_RESET"),this.hls.trigger(a.BUFFER_RESET,void 0),this.couldBacktrack=!1,this.fragLastKbps=0,this.fragPlaying=this.backtrackFragment=null,this.altAudio=0,this.audioOnly=!1}onManifestParsed(e,n){let t=!1,s=!1;n.levels.forEach((e=>{const n=e.audioCodec;n&&(t=t||-1!==n.indexOf("mp4a.40.2"),s=s||-1!==n.indexOf("mp4a.40.5"))})),this.audioCodecSwitch=t&&s&&!function(){var e;const n=Zr();return"function"==typeof(null==n||null==(e=n.prototype)?void 0:e.changeType)}(),this.audioCodecSwitch&&this.log("Both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"),this.levels=n.levels,this.startFragRequested=!1}onLevelLoading(e,n){const{levels:t}=this;if(!t||this.state!==Gt.IDLE)return;const s=n.levelInfo;(!s.details||s.details.live&&(this.levelLastLoaded!==s||s.details.expired)||this.waitForCdnTuneIn(s.details))&&(this.state=Gt.WAITING_LEVEL)}onLevelLoaded(e,n){var t;const{levels:s,startFragRequested:i}=this,r=n.level,o=n.details,l=o.totalduration;if(!s)return void this.warn(`Levels were reset while loading level ${r}`);this.log(`Level ${r} loaded [${o.startSN},${o.endSN}]${o.lastPartSn?`[part-${o.lastPartSn}-${o.lastPartIndex}]`:""}, cc [${o.startCC}, ${o.endCC}] duration:${l}`);const c=n.levelInfo,d=this.fragCurrent;!d||this.state!==Gt.FRAG_LOADING&&this.state!==Gt.FRAG_LOADING_WAITING_RETRY||d.level!==n.level&&d.loader&&this.abortCurrentFrag();let u=0;if(o.live||null!=(t=c.details)&&t.live){var p;if(this.checkLiveUpdate(o),o.deltaUpdateFailed)return;u=this.alignPlaylists(o,c.details,null==(p=this.levelLastLoaded)?void 0:p.details)}if(c.details=o,this.levelLastLoaded=c,i||this.setStartPosition(o,u),this.hls.trigger(a.LEVEL_UPDATED,{details:o,level:r}),this.state===Gt.WAITING_LEVEL){if(this.waitForCdnTuneIn(o))return;this.state=Gt.IDLE}i&&o.live&&this.synchronizeToLiveEdge(o),this.tick()}synchronizeToLiveEdge(e){const{config:n,media:t}=this;if(!t)return;const s=this.hls.liveSyncPosition,i=this.getLoadPosition(),a=e.fragmentStart,r=e.edge,o=i>=a-n.maxFragLookUpTolerance&&i<=r;if(null!==s&&t.duration>s&&(i<s||!o)){const a=void 0!==n.liveMaxLatencyDuration?n.liveMaxLatencyDuration:n.liveMaxLatencyDurationCount*e.targetduration;if((!o&&t.readyState<4||i<r-a)&&(this._hasEnoughToStart||(this.nextLoadPosition=s),t.readyState))if(this.warn(`Playback: ${i.toFixed(3)} is located too far from the end of live sliding playlist: ${r}, reset currentTime to : ${s.toFixed(3)}`),"buffered"===this.config.liveSyncMode){var l;const e=Dn.bufferInfo(t,s,0);if(null==e||null==(l=e.buffered)||!l.length)return void(t.currentTime=s);if(e.start<=i)return void(t.currentTime=s);const{nextStart:n}=Dn.bufferedInfo(e.buffered,i,0);n&&(t.currentTime=n)}else t.currentTime=s}}_handleFragmentLoadProgress(e){var n;const t=e.frag,{part:s,payload:i}=e,{levels:a}=this;if(!a)return void this.warn(`Levels were reset while fragment load was in progress. Fragment ${t.sn} of level ${t.level} will not be buffered`);const r=a[t.level];if(!r)return void this.warn(`Level ${t.level} not found on progress`);const o=r.details;if(!o)return this.warn(`Dropping fragment ${t.sn} of level ${t.level} after level details were reset`),void this.fragmentTracker.removeFragment(t);const l=r.videoCodec,c=o.PTSKnown||!o.live,u=null==(n=t.initSegment)?void 0:n.data,p=this._getAudioCodec(r),h=this.transmuxer=this.transmuxer||new bi(this.hls,d,this._handleTransmuxComplete.bind(this),this._handleTransmuxerFlush.bind(this)),m=s?s.index:-1,v=-1!==m,g=new In(t.level,t.sn,t.stats.chunkCount,i.byteLength,m,v),f=this.initPTS[t.cc];h.push(i,u,p,l,t,s,o.totalduration,c,g,f)}onAudioTrackSwitching(e,n){const t=this.hls,s=2===this.altAudio;if(en(n.url,t))this.altAudio=1;else{if(this.mediaBuffer!==this.media){this.log("Switching on main audio, use media.buffered to schedule main fragment loading"),this.mediaBuffer=this.media;const e=this.fragCurrent;e&&(this.log("Switching to main audio track, cancel main fragment load"),e.abortRequests(),this.fragmentTracker.removeFragment(e)),this.resetTransmuxer(),this.resetLoadingState()}else this.audioOnly&&this.resetTransmuxer();if(s)return this.fragmentTracker.removeAllFragments(),t.once(a.BUFFER_FLUSHED,(()=>{var e;null==(e=this.hls)||e.trigger(a.AUDIO_TRACK_SWITCHED,n)})),void t.trigger(a.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:null});t.trigger(a.AUDIO_TRACK_SWITCHED,n)}}onAudioTrackSwitched(e,n){const t=en(n.url,this.hls);if(t){const e=this.videoBuffer;e&&this.mediaBuffer!==e&&(this.log("Switching on alternate audio, use video.buffered to schedule main fragment loading"),this.mediaBuffer=e)}this.altAudio=t?2:0,this.tick()}onBufferCreated(e,n){const t=n.tracks;let s,i,a=!1;for(const e in t){const n=t[e];if("main"===n.id){if(i=e,s=n,"video"===e){const n=t[e];n&&(this.videoBuffer=n.buffer)}}else a=!0}a&&s?(this.log(`Alternate track found, use ${i}.buffered to schedule main fragment loading`),this.mediaBuffer=s.buffer):this.mediaBuffer=this.media}onFragBuffered(e,n){const{frag:t,part:s}=n,i=t.type===d;if(i){if(this.fragContextChanged(t))return this.warn(`Fragment ${t.sn}${s?" p: "+s.index:""} of level ${t.level} finished buffering, but was aborted. state: ${this.state}`),void(this.state===Gt.PARSED&&(this.state=Gt.IDLE));const e=s?s.stats:t.stats;this.fragLastKbps=Math.round(8*e.total/(e.buffering.end-e.loading.first)),q(t)&&(this.fragPrevious=t),this.fragBufferedComplete(t,s)}const a=this.media;a&&(!this._hasEnoughToStart&&Dn.getBuffered(a).length&&(this._hasEnoughToStart=!0,this.seekToStartPos()),i&&this.tick())}get hasEnoughToStart(){return this._hasEnoughToStart}onError(e,n){var t;if(n.fatal)this.state=Gt.ERROR;else switch(n.details){case i.FRAG_GAP:case i.FRAG_PARSING_ERROR:case i.FRAG_DECRYPT_ERROR:case i.FRAG_LOAD_ERROR:case i.FRAG_LOAD_TIMEOUT:case i.KEY_LOAD_ERROR:case i.KEY_LOAD_TIMEOUT:this.onFragmentOrKeyLoadError(d,n);break;case i.LEVEL_LOAD_ERROR:case i.LEVEL_LOAD_TIMEOUT:case i.LEVEL_PARSING_ERROR:n.levelRetry||this.state!==Gt.WAITING_LEVEL||(null==(t=n.context)?void 0:t.type)!==o||(this.state=Gt.IDLE);break;case i.BUFFER_ADD_CODEC_ERROR:case i.BUFFER_APPEND_ERROR:if("main"!==n.parent)return;this.reduceLengthAndFlushBuffer(n)&&this.resetLoadingState();break;case i.BUFFER_FULL_ERROR:if("main"!==n.parent)return;this.reduceLengthAndFlushBuffer(n)&&this.flushMainBuffer(0,Number.POSITIVE_INFINITY);break;case i.INTERNAL_EXCEPTION:this.recoverWorkerError(n)}}onFragLoadEmergencyAborted(){this.state=Gt.IDLE,this._hasEnoughToStart||(this.startFragRequested=!1,this.nextLoadPosition=this.lastCurrentTime),this.tickImmediate()}onBufferFlushed(e,{type:n}){if(n!==U||!this.altAudio){const e=(n===j?this.videoBuffer:this.mediaBuffer)||this.media;e&&(this.afterBufferFlushed(e,n,d),this.tick())}}onLevelsUpdated(e,n){this.level>-1&&this.fragCurrent&&(this.level=this.fragCurrent.level,-1===this.level&&this.resetWhenMissingContext(this.fragCurrent)),this.levels=n.levels}swapAudioCodec(){this.audioCodecSwap=!this.audioCodecSwap}seekToStartPos(){const{media:e}=this;if(!e)return;const n=e.currentTime;let t=this.startPosition;if(t>=0&&n<t){if(e.seeking)return void this.log(`could not seek to ${t}, already seeking at ${n}`);const s=this.timelineOffset;s&&t&&(t+=s);const i=this.getLevelDetails(),a=Dn.getBuffered(e),r=a.length?a.start(0):0,o=r-t,l=Math.max(this.config.maxBufferHole,this.config.maxFragLookUpTolerance);(this.config.startOnSegmentBoundary||o>0&&(o<l||this.loadingParts&&o<2*((null==i?void 0:i.partTarget)||0)))&&(this.log(`adjusting start position by ${o} to match buffer start`),t+=o,this.startPosition=t),n<t&&(this.log(`seek to target start position ${t} from current time ${n} buffer start ${r}`),e.currentTime=t)}}_getAudioCodec(e){let n=this.config.defaultAudioCodec||e.audioCodec;return this.audioCodecSwap&&n&&(this.log("Swapping audio codec"),n=-1!==n.indexOf("mp4a.40.5")?"mp4a.40.2":"mp4a.40.5"),n}_loadBitrateTestFrag(e,n){e.bitrateTest=!0,this._doFragLoad(e,n).then((e=>{const{hls:t}=this,s=null==e?void 0:e.frag;if(!s||this.fragContextChanged(s))return;n.fragmentError=0,this.state=Gt.IDLE,this.startFragRequested=!1,this.bitrateTest=!1;const i=s.stats;i.parsing.start=i.parsing.end=i.buffering.start=i.buffering.end=self.performance.now(),t.trigger(a.FRAG_LOADED,e),s.bitrateTest=!1}))}_handleTransmuxComplete(n){var t;const s=this.playlistType,{hls:i}=this,{remuxResult:r,chunkMeta:o}=n,l=this.getCurrentContext(o);if(!l)return void this.resetWhenMissingContext(o);const{frag:c,part:d,level:u}=l,{video:p,text:h,id3:m,initSegment:v}=r,{details:g}=u,f=this.altAudio?void 0:r.audio;if(this.fragContextChanged(c))this.fragmentTracker.removeFragment(c);else{if(this.state=Gt.PARSING,v){if(null!=v&&v.tracks){const e=c.initSegment||c;this._bufferInitSegment(u,v.tracks,e,o),i.trigger(a.FRAG_PARSING_INIT_SEGMENT,{frag:e,id:s,tracks:v.tracks})}const n=v.initPTS,t=v.timescale,r=this.initPTS[c.cc];!e(n)||r&&r.baseTime===n&&r.timescale===t||(this.initPTS[c.cc]={baseTime:n,timescale:t},i.trigger(a.INIT_PTS_FOUND,{frag:c,id:s,initPTS:n,timescale:t}))}if(p&&g){f&&"audiovideo"===p.type&&this.logMuxedErr(c);const e=g.fragments[c.sn-1-g.startSN],n=c.sn===g.startSN,t=!e||c.cc>e.cc;if(!1!==r.independent){const{startPTS:e,endPTS:s,startDTS:i,endDTS:a}=p;if(d)d.elementaryStreams[p.type]={startPTS:e,endPTS:s,startDTS:i,endDTS:a};else if(p.firstKeyFrame&&p.independent&&1===o.id&&!t&&(this.couldBacktrack=!0),p.dropped&&p.independent){const i=this.getMainFwdBufferInfo(),r=(i?i.end:this.getLoadPosition())+this.config.maxBufferHole,o=p.firstKeyFramePTS?p.firstKeyFramePTS:e;if(!n&&r<o-this.config.maxBufferHole&&!t)return void this.backtrack(c);t&&(c.gap=!0),c.setElementaryStreamInfo(p.type,c.start,s,c.start,a,!0)}else n&&e-(g.appliedTimelineOffset||0)>2&&(c.gap=!0);c.setElementaryStreamInfo(p.type,e,s,i,a),this.backtrackFragment&&(this.backtrackFragment=c),this.bufferFragmentData(p,c,d,o,n||t)}else{if(!n&&!t)return void this.backtrack(c);c.gap=!0}}if(f){const{startPTS:e,endPTS:n,startDTS:t,endDTS:s}=f;d&&(d.elementaryStreams[U]={startPTS:e,endPTS:n,startDTS:t,endDTS:s}),c.setElementaryStreamInfo(U,e,n,t,s),this.bufferFragmentData(f,c,d,o)}if(g&&null!=m&&null!=(t=m.samples)&&t.length){const e={id:s,frag:c,details:g,samples:m.samples};i.trigger(a.FRAG_PARSING_METADATA,e)}if(g&&h){const e={id:s,frag:c,details:g,samples:h.samples};i.trigger(a.FRAG_PARSING_USERDATA,e)}}}logMuxedErr(e){this.warn(`${q(e)?"Media":"Init"} segment with muxed audiovideo where only video expected: ${e.url}`)}_bufferInitSegment(e,n,t,s){if(this.state!==Gt.PARSING)return;this.audioOnly=!!n.audio&&!n.video,this.altAudio&&!this.audioOnly&&(delete n.audio,n.audiovideo&&this.logMuxedErr(t));const{audio:i,video:r,audiovideo:o}=n;if(i){const t=e.audioCodec;let s=Ce(i.codec,t);"mp4a"===s&&(s="mp4a.40.5");const a=navigator.userAgent.toLowerCase();if(this.audioCodecSwitch){s&&(s=-1!==s.indexOf("mp4a.40.5")?"mp4a.40.2":"mp4a.40.5");const e=i.metadata;e&&"channelCount"in e&&1!==(e.channelCount||1)&&-1===a.indexOf("firefox")&&(s="mp4a.40.5")}s&&-1!==s.indexOf("mp4a.40.5")&&-1!==a.indexOf("android")&&"audio/mpeg"!==i.container&&(s="mp4a.40.2",this.log(`Android: force audio codec to ${s}`)),t&&t!==s&&this.log(`Swapping manifest audio codec "${t}" for "${s}"`),i.levelCodec=s,i.id=d,this.log(`Init audio buffer, container:${i.container}, codecs[selected/level/parsed]=[${s||""}/${t||""}/${i.codec}]`),delete n.audiovideo}if(r){r.levelCodec=e.videoCodec,r.id=d;const t=r.codec;if(4===(null==t?void 0:t.length))switch(t){case"hvc1":case"hev1":r.codec="hvc1.1.6.L120.90";break;case"av01":r.codec="av01.0.04M.08";break;case"avc1":r.codec="avc1.42e01e"}this.log(`Init video buffer, container:${r.container}, codecs[level/parsed]=[${e.videoCodec||""}/${t}]${r.codec!==t?" parsed-corrected="+r.codec:""}${r.supplemental?" supplemental="+r.supplemental:""}`),delete n.audiovideo}o&&(this.log(`Init audiovideo buffer, container:${o.container}, codecs[level/parsed]=[${e.codecs}/${o.codec}]`),delete n.video,delete n.audio);const l=Object.keys(n);if(l.length){if(this.hls.trigger(a.BUFFER_CODECS,n),!this.hls)return;l.forEach((e=>{const i=n[e].initSegment;null!=i&&i.byteLength&&this.hls.trigger(a.BUFFER_APPENDING,{type:e,data:i,frag:t,part:null,chunkMeta:s,parent:t.type})}))}this.tickImmediate()}getMainFwdBufferInfo(){const e=this.mediaBuffer&&2===this.altAudio?this.mediaBuffer:this.media;return this.getFwdBufferInfo(e,d)}get maxBufferLength(){const{levels:e,level:n}=this,t=null==e?void 0:e[n];return t?this.getMaxBufferLength(t.maxBitrate):this.config.maxBufferLength}backtrack(e){this.couldBacktrack=!0,this.backtrackFragment=e,this.resetTransmuxer(),this.flushBufferGap(e),this.fragmentTracker.removeFragment(e),this.fragPrevious=null,this.nextLoadPosition=e.start,this.state=Gt.IDLE}checkFragmentChanged(){const e=this.media;let n=null;if(e&&e.readyState>1&&!1===e.seeking){const t=e.currentTime;if(Dn.isBuffered(e,t)?n=this.getAppendedFrag(t):Dn.isBuffered(e,t+.1)&&(n=this.getAppendedFrag(t+.1)),n){this.backtrackFragment=null;const e=this.fragPlaying,t=n.level;e&&n.sn===e.sn&&e.level===t||(this.fragPlaying=n,this.hls.trigger(a.FRAG_CHANGED,{frag:n}),e&&e.level===t||this.hls.trigger(a.LEVEL_SWITCHED,{level:t}))}}}get nextLevel(){const e=this.nextBufferedFrag;return e?e.level:-1}get currentFrag(){var n;if(this.fragPlaying)return this.fragPlaying;const t=(null==(n=this.media)?void 0:n.currentTime)||this.lastCurrentTime;return e(t)?this.getAppendedFrag(t):null}get currentProgramDateTime(){var n;const t=(null==(n=this.media)?void 0:n.currentTime)||this.lastCurrentTime;if(e(t)){const e=this.getLevelDetails(),n=this.currentFrag||(e?tn(null,e.fragments,t):null);if(n){const e=n.programDateTime;if(null!==e){const s=e+1e3*(t-n.start);return new Date(s)}}}return null}get currentLevel(){const e=this.currentFrag;return e?e.level:-1}get nextBufferedFrag(){const e=this.currentFrag;return e?this.followingBufferedFrag(e):null}get forceStartLoad(){return this._forceStartLoad}}class to{constructor(e){this.config=void 0,this.keyUriToKeyInfo={},this.emeController=null,this.config=e}abort(e){for(const t in this.keyUriToKeyInfo){const s=this.keyUriToKeyInfo[t].loader;if(s){var n;if(e&&e!==(null==(n=s.context)?void 0:n.frag.type))return;s.abort()}}}detach(){for(const e in this.keyUriToKeyInfo){const n=this.keyUriToKeyInfo[e];(n.mediaKeySessionContext||n.decryptdata.isCommonEncryption)&&delete this.keyUriToKeyInfo[e]}}destroy(){this.detach();for(const e in this.keyUriToKeyInfo){const n=this.keyUriToKeyInfo[e].loader;n&&n.destroy()}this.keyUriToKeyInfo={}}createKeyLoadError(e,n=i.KEY_LOAD_ERROR,t,a,r){return new Cn({type:s.NETWORK_E
2RROR,details:n,fatal:!1,frag:e,response:r,error:t,networkDetails:a})}loadClear(e,n){if(this.emeController&&this.config.emeEnabled&&!this.emeController.getSelectedKeySystemFormats().length)if(n.length){const{sn:t,cc:s}=e;for(let e=0;e<n.length;e++){const i=n[e];if(s<=i.cc&&("initSegment"===t||"initSegment"===i.sn||t<i.sn))return this.emeController.selectKeySystemFormat(i).then((e=>{if(i.setKeyFormat(e),this.emeController&&this.config.requireKeySystemAccessOnStart){const n=nt(e);if(n)return this.emeController.getKeySystemAccess([n])}}))}}else if(this.config.requireKeySystemAccessOnStart){const e=it(this.config);if(e.length)return this.emeController.getKeySystemAccess(e)}return null}load(e){return!e.decryptdata&&e.encrypted&&this.emeController&&this.config.emeEnabled?this.emeController.selectKeySystemFormat(e).then((n=>this.loadInternal(e,n))):this.loadInternal(e)}loadInternal(e,n){var t,s;n&&e.setKeyFormat(n);const a=e.decryptdata;if(!a){const t=new Error(n?`Expected frag.decryptdata to be defined after setting format ${n}`:"Missing decryption data on fragment in onKeyLoading");return Promise.reject(this.createKeyLoadError(e,i.KEY_LOAD_ERROR,t))}const r=a.uri;if(!r)return Promise.reject(this.createKeyLoadError(e,i.KEY_LOAD_ERROR,new Error(`Invalid key URI: "${r}"`)));let o=this.keyUriToKeyInfo[r];if(null!=(t=o)&&t.decryptdata.key)return a.key=o.decryptdata.key,Promise.resolve({frag:e,keyInfo:o});var l;if(null!=(s=o)&&s.keyLoadPromise)switch(null==(l=o.mediaKeySessionContext)?void 0:l.keyStatus){case void 0:case"status-pending":case"usable":case"usable-in-future":return o.keyLoadPromise.then((n=>(a.key=n.keyInfo.decryptdata.key,{frag:e,keyInfo:o})))}switch(o=this.keyUriToKeyInfo[r]={decryptdata:a,keyLoadPromise:null,loader:null,mediaKeySessionContext:null},a.method){case"ISO-23001-7":case"SAMPLE-AES":case"SAMPLE-AES-CENC":case"SAMPLE-AES-CTR":return"identity"===a.keyFormat?this.loadKeyHTTP(o,e):this.loadKeyEME(o,e);case"AES-128":case"AES-256":case"AES-256-CTR":return this.loadKeyHTTP(o,e);default:return Promise.reject(this.createKeyLoadError(e,i.KEY_LOAD_ERROR,new Error(`Key supplied with unsupported METHOD: "${a.method}"`)))}}loadKeyEME(e,n){const t={frag:n,keyInfo:e};if(this.emeController&&this.config.emeEnabled){const n=this.emeController.loadKey(t);if(n)return(e.keyLoadPromise=n.then((n=>(e.mediaKeySessionContext=n,t)))).catch((n=>{throw e.keyLoadPromise=null,n}))}return Promise.resolve(t)}loadKeyHTTP(e,n){const t=this.config,s=new(0,t.loader)(t);return n.keyLoader=e.loader=s,e.keyLoadPromise=new Promise(((a,r)=>{const o={keyInfo:e,frag:n,responseType:"arraybuffer",url:e.decryptdata.uri},l=t.keyLoadPolicy.default,c={loadPolicy:l,timeout:l.maxLoadTimeMs,maxRetry:0,retryDelay:0,maxRetryDelay:0},d={onSuccess:(e,n,t,s)=>{const{frag:o,keyInfo:l,url:c}=t;if(!o.decryptdata||l!==this.keyUriToKeyInfo[c])return r(this.createKeyLoadError(o,i.KEY_LOAD_ERROR,new Error("after key load, decryptdata unset or changed"),s));l.decryptdata.key=o.decryptdata.key=new Uint8Array(e.data),o.keyLoader=null,l.loader=null,a({frag:o,keyInfo:l})},onError:(e,t,s,a)=>{this.resetLoader(t),r(this.createKeyLoadError(n,i.KEY_LOAD_ERROR,new Error(`HTTP Error ${e.code} loading key ${e.text}`),s,_({url:o.url,data:void 0},e)))},onTimeout:(e,t,s)=>{this.resetLoader(t),r(this.createKeyLoadError(n,i.KEY_LOAD_TIMEOUT,new Error("key loading timed out"),s))},onAbort:(e,t,s)=>{this.resetLoader(t),r(this.createKeyLoadError(n,i.INTERNAL_ABORTED,new Error("key loading aborted"),s))}};s.load(o,c,d)}))}resetLoader(e){const{frag:n,keyInfo:t,url:s}=e,i=t.loader;n.keyLoader===i&&(n.keyLoader=null,t.loader=null),delete this.keyUriToKeyInfo[s],i&&i.destroy()}}function so(e){const{type:n}=e;switch(n){case l:return u;case c:return p;default:return d}}function io(e,n){let t=e.url;return void 0!==t&&0!==t.indexOf("data:")||(t=n.url),t}class ao{constructor(e){this.hls=void 0,this.loaders=Object.create(null),this.variableList=null,this.onManifestLoaded=this.checkAutostartLoad,this.hls=e,this.registerListeners()}startLoad(e){}stopLoad(){this.destroyInternalLoaders()}registerListeners(){const{hls:e}=this;e.on(a.MANIFEST_LOADING,this.onManifestLoading,this),e.on(a.LEVEL_LOADING,this.onLevelLoading,this),e.on(a.AUDIO_TRACK_LOADING,this.onAudioTrackLoading,this),e.on(a.SUBTITLE_TRACK_LOADING,this.onSubtitleTrackLoading,this),e.on(a.LEVELS_UPDATED,this.onLevelsUpdated,this)}unregisterListeners(){const{hls:e}=this;e.off(a.MANIFEST_LOADING,this.onManifestLoading,this),e.off(a.LEVEL_LOADING,this.onLevelLoading,this),e.off(a.AUDIO_TRACK_LOADING,this.onAudioTrackLoading,this),e.off(a.SUBTITLE_TRACK_LOADING,this.onSubtitleTrackLoading,this),e.off(a.LEVELS_UPDATED,this.onLevelsUpdated,this)}createInternalLoader(e){const n=this.hls.config,t=n.pLoader,s=n.loader,i=new(t||s)(n);return this.loaders[e.type]=i,i}getInternalLoader(e){return this.loaders[e.type]}resetInternalLoader(e){this.loaders[e]&&delete this.loaders[e]}destroyInternalLoaders(){for(const e in this.loaders){const n=this.loaders[e];n&&n.destroy(),this.resetInternalLoader(e)}}destroy(){this.variableList=null,this.unregisterListeners(),this.destroyInternalLoaders()}onManifestLoading(e,n){const{url:t}=n;this.variableList=null,this.load({id:null,level:0,responseType:"text",type:r,url:t,deliveryDirectives:null,levelOrTrack:null})}onLevelLoading(e,n){const{id:t,level:s,pathwayId:i,url:a,deliveryDirectives:r,levelInfo:l}=n;this.load({id:t,level:s,pathwayId:i,responseType:"text",type:o,url:a,deliveryDirectives:r,levelOrTrack:l})}onAudioTrackLoading(e,n){const{id:t,groupId:s,url:i,deliveryDirectives:a,track:r}=n;this.load({id:t,groupId:s,level:null,responseType:"text",type:l,url:i,deliveryDirectives:a,levelOrTrack:r})}onSubtitleTrackLoading(e,n){const{id:t,groupId:s,url:i,deliveryDirectives:a,track:r}=n;this.load({id:t,groupId:s,level:null,responseType:"text",type:c,url:i,deliveryDirectives:a,levelOrTrack:r})}onLevelsUpdated(e,n){const t=this.loaders[o];if(t){const e=t.context;e&&!n.levels.some((n=>n===e.levelOrTrack))&&(t.abort(),delete this.loaders[o])}}load(n){var t;const s=this.hls.config;let i,a=this.getInternalLoader(n);if(a){const e=this.hls.logger,t=a.context;if(t&&t.levelOrTrack===n.levelOrTrack&&(t.url===n.url||t.deliveryDirectives&&!n.deliveryDirectives))return void(t.url===n.url?e.log(`[playlist-loader]: ignore ${n.url} ongoing request`):e.log(`[playlist-loader]: ignore ${n.url} in favor of ${t.url}`));e.log(`[playlist-loader]: aborting previous loader for type: ${n.type}`),a.abort()}if(i=n.type===r?s.manifestLoadPolicy.default:g({},s.playlistLoadPolicy.default,{timeoutRetry:null,errorRetry:null}),a=this.createInternalLoader(n),e(null==(t=n.deliveryDirectives)?void 0:t.part)){let e;if(n.type===o&&null!==n.level?e=this.hls.levels[n.level].details:n.type===l&&null!==n.id?e=this.hls.audioTracks[n.id].details:n.type===c&&null!==n.id&&(e=this.hls.subtitleTracks[n.id].details),e){const n=e.partTarget,t=e.targetduration;if(n&&t){const e=1e3*Math.max(3*n,.8*t);i=g({},i,{maxTimeToFirstByteMs:Math.min(e,i.maxTimeToFirstByteMs),maxLoadTimeMs:Math.min(e,i.maxTimeToFirstByteMs)})}}}const d=i.errorRetry||i.timeoutRetry||{},u={loadPolicy:i,timeout:i.maxLoadTimeMs,maxRetry:d.maxNumRetry||0,retryDelay:d.retryDelayMs||0,maxRetryDelay:d.maxRetryDelayMs||0},p={onSuccess:(e,n,t,s)=>{const i=this.getInternalLoader(t);this.resetInternalLoader(t.type);const a=e.data;0===a.indexOf("#EXTM3U")?(n.parsing.start=performance.now(),vt.isMediaPlaylist(a)||t.type!==r?this.handleTrackOrLevelPlaylist(e,n,t,s||null,i):this.handleMasterPlaylist(e,n,t,s)):this.handleManifestParsingError(e,t,new Error("no EXTM3U delimiter"),s||null,n)},onError:(e,n,t,s)=>
2{this.handleNetworkError(n,t,!1,e,s)},onTimeout:(e,n,t)=>{this.handleNetworkError(n,t,!0,void 0,e)}};a.load(n,u,p)}checkAutostartLoad(){if(!this.hls)return;const{config:{autoStartLoad:e,startPosition:n},forceStartLoad:t}=this.hls;(e||t)&&(this.hls.logger.log(`${e?"auto":"force"} startLoad with configured startPosition ${n}`),this.hls.startLoad(n))}handleMasterPlaylist(e,n,t,s){const i=this.hls,r=e.data,o=io(e,t),l=vt.parseMasterPlaylist(r,o);if(l.playlistParsingError)return void this.handleManifestParsingError(e,t,l.playlistParsingError,s,n);const{contentSteering:c,levels:d,sessionData:u,sessionKeys:p,startTimeOffset:h,variableList:m}=l;this.variableList=m;const{AUDIO:v=[],SUBTITLES:g,"CLOSED-CAPTIONS":f}=vt.parseMasterPlaylistMedia(r,o,l);v.length&&(v.some((e=>!e.url))||!d[0].audioCodec||d[0].attrs.AUDIO||(this.hls.logger.log("[playlist-loader]: audio codec signaled in quality level, but no embedded audio track signaled, create one"),v.unshift({type:"main",name:"main",groupId:"main",default:!1,autoselect:!1,forced:!1,id:-1,attrs:new jn({}),bitrate:0,url:""}))),i.trigger(a.MANIFEST_LOADED,{levels:d,audioTracks:v,subtitles:g,captions:f,contentSteering:c,url:o,stats:n,networkDetails:s,sessionData:u,sessionKeys:p,startTimeOffset:h,variableList:m})}handleTrackOrLevelPlaylist(n,t,s,i,o){const l=this.hls,{id:c,level:d,type:u}=s,p=io(n,s),h=e(d)?d:e(c)?c:0,m=so(s),v=vt.parseLevelPlaylist(n.data,p,h,m,0,this.variableList);if(u===r){const e={attrs:new jn({}),bitrate:0,details:v,name:"",url:p};v.requestScheduled=t.loading.start+Pt(v,0),l.trigger(a.MANIFEST_LOADED,{levels:[e],audioTracks:[],url:p,stats:t,networkDetails:i,sessionData:null,sessionKeys:null,contentSteering:null,startTimeOffset:null,variableList:null})}t.parsing.end=performance.now(),s.levelDetails=v,this.handlePlaylistLoaded(v,n,t,s,i,o)}handleManifestParsingError(e,n,t,o,l){this.hls.trigger(a.ERROR,{type:s.NETWORK_ERROR,details:i.MANIFEST_PARSING_ERROR,fatal:n.type===r,url:e.url,err:t,error:t,reason:t.message,response:e,context:n,networkDetails:o,stats:l})}handleNetworkError(e,n,t=!1,d,u){let p=`A network ${t?"timeout":"error"+(d?" (status "+d.code+")":"")} occurred while loading ${e.type}`;e.type===o?p+=`: ${e.level} id: ${e.id}`:e.type!==l&&e.type!==c||(p+=` id: ${e.id} group-id: "${e.groupId}"`);const h=new Error(p);this.hls.logger.warn(`[playlist-loader]: ${p}`);let m=i.UNKNOWN,v=!1;const g=this.getInternalLoader(e);switch(e.type){case r:m=t?i.MANIFEST_LOAD_TIMEOUT:i.MANIFEST_LOAD_ERROR,v=!0;break;case o:m=t?i.LEVEL_LOAD_TIMEOUT:i.LEVEL_LOAD_ERROR,v=!1;break;case l:m=t?i.AUDIO_TRACK_LOAD_TIMEOUT:i.AUDIO_TRACK_LOAD_ERROR,v=!1;break;case c:m=t?i.SUBTITLE_TRACK_LOAD_TIMEOUT:i.SUBTITLE_LOAD_ERROR,v=!1}g&&this.resetInternalLoader(e.type);const f={type:s.NETWORK_ERROR,details:m,fatal:v,url:e.url,loader:g,context:e,error:h,networkDetails:n,stats:u};if(d){const t=(null==n?void 0:n.url)||e.url;f.response=_({url:t,data:void 0},d)}this.hls.trigger(a.ERROR,f)}handlePlaylistLoaded(e,n,t,u,p,h){const m=this.hls,{type:v,level:g,id:f,groupId:_,deliveryDirectives:b}=u,y=io(n,u),w=so(u),k="number"==typeof u.level&&w===d?g:void 0;if(!e.fragments.length){const r=e.playlistParsingError=new Error("No Segments found in Playlist");return void m.trigger(a.ERROR,{type:s.NETWORK_ERROR,details:i.LEVEL_EMPTY_ERROR,fatal:!1,url:y,error:r,reason:r.message,response:n,context:u,level:k,parent:w,networkDetails:p,stats:t})}e.targetduration||(e.playlistParsingError=new Error("Missing Target Duration"));const T=e.playlistParsingError;if(T){if(this.hls.logger.warn(T),!m.config.ignorePlaylistParsingErrors)return void m.trigger(a.ERROR,{type:s.NETWORK_ERROR,details:i.LEVEL_PARSING_ERROR,fatal:!1,url:y,error:T,reason:T.message,response:n,context:u,level:k,parent:w,networkDetails:p,stats:t});e.playlistParsingError=null}switch(e.live&&h&&(h.getCacheAge&&(e.ageHeader=h.getCacheAge()||0),h.getCacheAge&&!isNaN(e.ageHeader)||(e.ageHeader=0)),v){case r:case o:m.trigger(a.LEVEL_LOADED,{details:e,levelInfo:u.levelOrTrack||m.levels[0],level:k||0,id:f||0,stats:t,networkDetails:p,deliveryDirectives:b,withoutMultiVariant:v===r});break;case l:m.trigger(a.AUDIO_TRACK_LOADED,{details:e,track:u.levelOrTrack,id:f||0,groupId:_||"",stats:t,networkDetails:p,deliveryDirectives:b});break;case c:m.trigger(a.SUBTITLE_TRACK_LOADED,{details:e,track:u.levelOrTrack,id:f||0,groupId:_||"",stats:t,networkDetails:p,deliveryDirectives:b})}}}class ro{static get version(){return Xt}static isMSESupported(){return eo()}static isSupported(){return function(){if(!eo())return!1;const e=S();
vendor: 12,677 bytes, line 2
2return"function"==typeof(null==e?void 0:e.isTypeSupported)&&(["avc1.42E01E,mp4a.40.2","av01.0.01M.08","vp09.00.50.08"].some((n=>e.isTypeSupported(Te(n,"video"))))||["mp4a.40.2","fLaC"].some((n=>e.isTypeSupported(Te(n,"audio")))))}()}static getMediaSource(){return S()}static get Events(){return a}static get MetadataSchema(){return ys}static get ErrorTypes(){return s}static get ErrorDetails(){return i}static get DefaultConfig(){return ro.defaultConfig?ro.defaultConfig:jr}static set DefaultConfig(e){ro.defaultConfig=e}constructor(e={}){this.config=void 0,this.userConfig=void 0,this.logger=void 0,this.coreComponents=void 0,this.networkControllers=void 0,this._emitter=new Wt,this._autoLevelCapping=-1,this._maxHdcpLevel=null,this.abrController=void 0,this.bufferController=void 0,this.capLevelController=void 0,this.latencyController=void 0,this.levelController=void 0,this.streamController=void 0,this.audioStreamController=void 0,this.subtititleStreamController=void 0,this.audioTrackController=void 0,this.subtitleTrackController=void 0,this.interstitialsController=void 0,this.gapController=void 0,this.emeController=void 0,this.cmcdController=void 0,this._media=null,this._url=null,this._sessionId=void 0,this.triggeringException=void 0,this.started=!1;const n=this.logger=function(e,n,t){const s=k();if("object"==typeof console&&!0===e||"object"==typeof e){const n=["debug","log","info","warn","error"];n.forEach((n=>{s[n]=T(n,e,t)}));try{s.log('Debug logs enabled for "Hls instance" in hls.js version 1.6.6')}catch(e){return k()}n.forEach((n=>{E[n]=T(n,e)}))}else g(E,s);return s}(e.debug||!1,0,e.assetPlayerId),t=this.config=function(e,n,t){if((n.liveSyncDurationCount||n.liveMaxLatencyDurationCount)&&(n.liveSyncDuration||n.liveMaxLatencyDuration))throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration");if(void 0!==n.liveMaxLatencyDurationCount&&(void 0===n.liveSyncDurationCount||n.liveMaxLatencyDurationCount<=n.liveSyncDurationCount))throw new Error('Illegal hls.js config: "liveMaxLatencyDurationCount" must be greater than "liveSyncDurationCount"');if(void 0!==n.liveMaxLatencyDuration&&(void 0===n.liveSyncDuration||n.liveMaxLatencyDuration<=n.liveSyncDuration))throw new Error('Illegal hls.js config: "liveMaxLatencyDuration" must be greater than "liveSyncDuration"');const s=Gr(e),i=["TimeOut","MaxRetry","RetryDelay","MaxRetryTimeout"];return["manifest","level","frag"].forEach((e=>{const a=`${"level"===e?"playlist":e}LoadPolicy`,r=void 0===n[a],o=[];i.forEach((t=>{const i=`${e}Loading${t}`,l=n[i];if(void 0!==l&&r){o.push(i);const e=s[a].default;switch(n[a]={default:e},t){case"TimeOut":e.maxLoadTimeMs=l,e.maxTimeToFirstByteMs=l;break;case"MaxRetry":e.errorRetry.maxNumRetry=l,e.timeoutRetry.maxNumRetry=l;break;case"RetryDelay":e.errorRetry.retryDelayMs=l,e.timeoutRetry.retryDelayMs=l;break;case"MaxRetryTimeout":e.errorRetry.maxRetryDelayMs=l,e.timeoutRetry.maxRetryDelayMs=l}}})),o.length&&t.warn(`hls.js config: "${o.join('", "')}" setting(s) are deprecated, use "${a}": ${Ve(n[a])}`)})),_(_({},s),n)}(ro.DefaultConfig,e,n);this.userConfig=e,t.progressive&&function(e,n){const t=e.loader;t!==Fr&&t!==Ur?(n.log("[config]: Custom loader detected, cannot enable progressive streaming"),e.progressive=!1):function(){if(self.fetch&&self.AbortController&&self.ReadableStream&&self.Request)try{return new self.ReadableStream({}),!0}catch(e){}return!1}()&&(e.loader=Fr,e.progressive=!0,e.enableSoftwareAES=!0,n.log("[config]: Progressive streaming enabled, using FetchLoader"))}(t,n);const{abrController:s,bufferController:i,capLevelController:r,errorController:o,fpsController:l}=t,c=new o(this),d=this.abrController=new s(this),u=new fn(this),p=t.interstitialsController,h=p?this.interstitialsController=new p(this,ro):null,m=this.bufferController=new i(this,u),v=this.capLevelController=new r(this),f=new l(this),b=new ao(this),y=t.contentSteeringController,w=y?new y(this):null,x=this.levelController=new Qr(this,w),S=new Wr(this),A=new to(this.config),L=this.streamController=new no(this,u,A),C=this.gapController=new zr(this,u);v.setStreamController(L),f.setStreamController(L);const R=[b,x,L];h&&R.splice(1,0,h),w&&R.splice(1,0,w),this.networkControllers=R;const I=[d,m,C,v,f,S,u];this.audioTrackController=this.createController(t.audioTrackController,R);const P=t.audioStreamController;P&&R.push(this.audioStreamController=new P(this,u,A)),this.subtitleTrackController=this.createController(t.subtitleTrackController,R);const D=t.subtitleStreamController;D&&R.push(this.subtititleStreamController=new D(this,u,A)),this.createController(t.timelineController,I),A.emeController=this.emeController=this.createController(t.emeController,I),this.cmcdController=this.createController(t.cmcdController,I),this.latencyController=this.createController(Xr,I),this.coreComponents=I,R.push(c);const O=c.onErrorOut;"function"==typeof O&&this.on(a.ERROR,O,c),this.on(a.MANIFEST_LOADED,b.onManifestLoaded,b)}createController(e,n){if(e){const t=new e(this);return n&&n.push(t),t}return null}on(e,n,t=this){this._emitter.on(e,n,t)}once(e,n,t=this){this._emitter.once(e,n,t)}removeAllListeners(e){this._emitter.removeAllListeners(e)}off(e,n,t=this,s){this._emitter.off(e,n,t,s)}listeners(e){return this._emitter.listeners(e)}emit(e,n,t){return this._emitter.emit(e,n,t)}trigger(e,n){if(this.config.debug)return this.emit(e,e,n);try{return this.emit(e,e,n)}catch(n){if(this.logger.error("An internal error happened while handling event "+e+'. Error message: "'+n.message+'". Here is a stacktrace:',n),!this.triggeringException){this.triggeringException=!0;const t=e===a.ERROR;this.trigger(a.ERROR,{type:s.OTHER_ERROR,details:i.INTERNAL_EXCEPTION,fatal:t,event:e,error:n}),this.triggeringException=!1}}return!1}listenerCount(e){return this._emitter.listenerCount(e)}destroy(){this.logger.log("destroy"),this.trigger(a.DESTROYING,void 0),this.detachMedia(),this.removeAllListeners(),this._autoLevelCapping=-1,this._url=null,this.networkControllers.forEach((e=>e.destroy())),this.networkControllers.length=0,this.coreComponents.forEach((e=>e.destroy())),this.coreComponents.length=0;const e=this.config;e.xhrSetup=e.fetchSetup=void 0,this.userConfig=null}attachMedia(e){if(!e||"media"in e&&!e.media){const n=new Error(`attachMedia failed: invalid argument (${e})`);return void this.trigger(a.ERROR,{type:s.OTHER_ERROR,details:i.ATTACH_MEDIA_ERROR,fatal:!0,error:n})}this.logger.log("attachMedia"),this._media&&(this.logger.warn("media must be detached before attaching"),this.detachMedia());const n="media"in e,t=n?e.media:e,r=n?e:{media:t};this._media=t,this.trigger(a.MEDIA_ATTACHING,r)}detachMedia(){this.logger.log("detachMedia"),this.trigger(a.MEDIA_DETACHING,{}),this._media=null}transferMedia(){this._media=null;const e=this.bufferController.transferMedia();return this.trigger(a.MEDIA_DETACHING,{transferMedia:e}),e}loadSource(e){this.stopLoad();const n=this.media,t=this._url,s=this._url=$.buildAbsoluteURL(self.location.href,e,{alwaysNormalize:!0});this._autoLevelCapping=-1,this._maxHdcpLevel=null,this.logger.log(`loadSource:${s}`),n&&t&&(t!==s||this.bufferController.hasSourceTypes())&&(this.detachMedia(),this.attachMedia(n)),this.trigger(a.MANIFEST_LOADING,{url:e})}get url(){return this._url}get hasEnoughToStart(){return this.streamController.hasEnoughToStart}get startPosition(){return this.streamController.startPositionValue}startLoad(e=-1,n){this.logger.log(`startLoad(${e+(n?", <skip seek to start>":"")})`),this.started=!0,this.resumeBuffering();for(let t=0;t<this.networkControllers.length&&(this.networkControllers[t].startLoad(e,n),this.started&&this.networkControllers);t++);}stopLoad(){this.logger.log("stopLoad"),this.started=!1;for(let e=0;e<this.networkControllers.length&&(this.networkControllers[e].stopLoad(),!this.started&&this.networkControllers);e++);}get loadingEnabled(){return this.started}get bufferingEnabled(){return this.streamController.bufferingEnabled}resumeBuffering(){this.bufferingEnabled||(this.logger.log("resume buffering"),this.networkControllers.forEach((e=>{e.resumeBuffering&&e.resumeBuffering()})))}pauseBuffering(){this.bufferingEnabled&&(this.logger.log("pause buffering"),this.networkControllers.forEach((e=>{e.pauseBuffering&&e.pauseBuffering()})))}get inFlightFragments(){const e={[d]:this.streamController.inFlightFrag};return this.audioStreamController&&(e[u]=this.audioStreamController.inFlightFrag),this.subtititleStreamController&&(e[p]=this.subtititleStreamController.inFlightFrag),e}swapAudioCodec(){this.logger.log("swapAudioCodec"),this.streamController.swapAudioCodec()}recoverMediaError(){this.logger.log("recoverMediaError");const e=this._media,n=null==e?void 0:e.currentTime;this.detachMedia(),e&&(this.attachMedia(e),n&&this.startLoad(n))}removeLevel(e){this.levelController.removeLevel(e)}get sessionId(){let e=this._sessionId;return e||(e=this._sessionId=function(){try{return crypto.randomUUID()}catch(e){try{const e=URL.createObjectURL(new Blob),n=e.toString();return URL.revokeObjectURL(e),n.slice(n.lastIndexOf("/")+1)}catch(e){let n=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(e=>{const t=(n+16*Math.random())%16|0;return n=Math.floor(n/16),("x"==e?t:3&t|8).toString(16)}))}}}()),e}get levels(){return this.levelController.levels||[]}get latestLevelDetails(){return this.streamController.getLevelDetails()||null}get loadLevelObj(){return this.levelController.loadLevelObj}get currentLevel(){return this.streamController.currentLevel}set currentLevel(e){this.logger.log(`set currentLevel:${e}`),this.levelController.manualLevel=e,this.streamController.immediateLevelSwitch()}get nextLevel(){return this.streamController.nextLevel}set nextLevel(e){this.logger.log(`set nextLevel:${e}`),this.levelController.manualLevel=e,this.streamController.nextLevelSwitch()}get loadLevel(){return this.levelController.level}set loadLevel(e){this.logger.log(`set loadLevel:${e}`),this.levelController.manualLevel=e}get nextLoadLevel(){return this.levelController.nextLoadLevel}set nextLoadLevel(e){this.levelController.nextLoadLevel=e}get firstLevel(){return Math.max(this.levelController.firstLevel,this.minAutoLevel)}set firstLevel(e){this.logger.log(`set firstLevel:${e}`),this.levelController.firstLevel=e}get startLevel(){const e=this.levelController.startLevel;return-1===e&&this.abrController.forcedAutoLevel>-1?this.abrController.forcedAutoLevel:e}set startLevel(e){this.logger.log(`set startLevel:${e}`),-1!==e&&(e=Math.max(e,this.minAutoLevel)),this.levelController.startLevel=e}get capLevelToPlayerSize(){return this.config.capLevelToPlayerSize}set capLevelToPlayerSize(e){const n=!!e;n!==this.config.capLevelToPlayerSize&&(n?this.capLevelController.startCapping():(this.capLevelController.stopCapping(),this.autoLevelCapping=-1,this.streamController.nextLevelSwitch()),this.config.capLevelToPlayerSize=n)}get autoLevelCapping(){return this._autoLevelCapping}get bandwidthEstimate(){const{bwEstimator:e}=this.abrController;return e?e.getEstimate():NaN}set bandwidthEstimate(e){this.abrController.resetEstimator(e)}get abrEwmaDefaultEstimate(){const{bwEstimator:e}=this.abrController;return e?e.defaultEstimate:NaN}get ttfbEstimate(){const{bwEstimator:e}=this.abrController;return e?e.getEstimateTTFB():NaN}set autoLevelCapping(e){this._autoLevelCapping!==e&&(this.logger.log(`set autoLevelCapping:${e}`),this._autoLevelCapping=e,this.levelController.checkMaxAutoUpdated())}get maxHdcpLevel(){return this._maxHdcpLevel}set maxHdcpLevel(e){(function(e){return Ue.indexOf(e)>-1})(e)&&this._maxHdcpLevel!==e&&(this._maxHdcpLevel=e,this.levelController.checkMaxAutoUpdated())}get autoLevelEnabled(){return-1===this.levelController.manualLevel}get manualLevel(){return this.levelController.manualLevel}get minAutoLevel(){const{levels:e,config:{minAutoBitrate:n}}=this;if(!e)return 0;const t=e.length;for(let s=0;s<t;s++)if(e[s].maxBitrate>=n)return s;return 0}get maxAutoLevel(){const{levels:e,autoLevelCapping:n,maxHdcpLevel:t}=this;let s;if(s=-1===n&&null!=e&&e.length?e.length-1:n,t)for(let n=s;n--;){const s=e[n].attrs["HDCP-LEVEL"];if(s&&s<=t)return n}return s}get firstAutoLevel(){return this.abrController.firstAutoLevel}get nextAutoLevel(){return this.abrController.nextAutoLevel}set nextAutoLevel(e){this.abrController.nextAutoLevel=e}get playingDate(){return this.streamController.currentProgramDateTime}get mainForwardBufferInfo(){return this.streamController.getMainFwdBufferInfo()}get maxBufferLength(){return this.streamController.maxBufferLength}setAudioOption(e){var n;return(null==(n=this.audioTrackController)?void 0:n.setAudioOption(e))||null}
2setSubtitleOption(e){var n;return(null==(n=this.subtitleTrackController)?void 0:n.setSubtitleOption(e))||null}get allAudioTracks(){const e=this.audioTrackController;return e?e.allAudioTracks:[]}get audioTracks(){const e=this.audioTrackController;return e?e.audioTracks:[]}get audioTrack(){const e=this.audioTrackController;return e?e.audioTrack:-1}set audioTrack(e){const n=this.audioTrackController;n&&(n.audioTrack=e)}get allSubtitleTracks(){const e=this.subtitleTrackController;return e?e.allSubtitleTracks:[]}get subtitleTracks(){const e=this.subtitleTrackController;return e?e.subtitleTracks:[]}get subtitleTrack(){const e=this.subtitleTrackController;return e?e.subtitleTrack:-1}get media(){return this._media}set subtitleTrack(e){const n=this.subtitleTrackController;n&&(n.subtitleTrack=e)}get subtitleDisplay(){const e=this.subtitleTrackController;return!!e&&e.subtitleDisplay}set subtitleDisplay(e){const n=this.subtitleTrackController;n&&(n.subtitleDisplay=e)}get lowLatencyMode(){return this.config.lowLatencyMode}set lowLatencyMode(e){this.config.lowLatencyMode=e}get liveSyncPosition(){return this.latencyController.liveSyncPosition}get latency(){return this.latencyController.latency}get maxLatency(){return this.latencyController.maxLatency}get targetLatency(){return this.latencyController.targetLatency}set targetLatency(e){this.latencyController.targetLatency=e}get drift(){return this.latencyController.drift}get forceStartLoad(){return this.streamController.forceStartLoad}get pathways(){return this.levelController.pathways}get pathwayPriority(){return this.levelController.pathwayPriority}set pathwayPriority(e){this.levelController.pathwayPriority=e}get bufferedToEnd(){var e;return!(null==(e=this.bufferController)||!e.bufferedToEnd)}get interstitialsManager(){var e;return(null==(e=this.interstitialsController)?void 0:e.interstitialsManager)||null}getMediaDecodingInfo(e,n=this.allAudioTracks){return Ne(e,Ye(n),navigator.mediaCapabilities)}}ro.defaultConfig=void 0,document.addEventListener("DOMContentLoaded",(function(){document.querySelectorAll("video.media-block__video").forEach((function(e){var n=e.getAttribute("data-hls-src");if(n)if(ro.isSupported()){var t=new ro;t.loadSource(n),t.attachMedia(e),t.on(ro.Events.MANIFEST_PARSED,(function(){e.autoplay&&e.play()}))}else e.canPlayType("application/vnd.apple.mpegurl")&&(e.src=n,e.autoplay&&e.play())}))}))},119:(e,n,t)=>{"use strict";t.d(n,{A:()=>i});var s=t(3703);function i(e){var n=document.querySelectorAll(".".concat(e));n.length&&n.forEach((function(e){var n,t=e.querySelector(".js-post-card-carousel-slider"),i="grid"===(null===(n=t.dataset)||void 0===n?void 0:n.countSlides),a=i?3:"auto";new s.A(t,{slidesPerView:1,spaceBetween:4,watchOverflow:!0,speed:500,grabCursor:!0,breakpoints:{768:{slidesPerView:a,spaceBetween:24,enabled:i}}})}))}},6029:(e,n,t)=>{"use strict";t.d(n,{A:()=>p});var s=t(9965);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function a(){a=function(){return n};var e,n={},t=Object.prototype,s=t.hasOwnProperty,r=Object.defineProperty||function(e,n,t){e[n]=t.value},o="function"==typeof Symbol?Symbol:{},l=o.iterator||"@@iterator",c=o.asyncIterator||"@@asyncIterator",d=o.toStringTag||"@@toStringTag";function u(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{u({},"")}catch(e){u=function(e,n,t){return e[n]=t}}function p(e,n,t,s){var i=n&&n.prototype instanceof b?n:b,a=Object.create(i.prototype),o=new P(s||[]);return r(a,"_invoke",{value:L(e,t,o)}),a}function h(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=p;var m="suspendedStart",v="suspendedYield",g="executing",f="completed",_={};function b(){}function y(){}function w(){}var k={};u(k,l,(function(){return this}));var T=Object.getPrototypeOf,E=T&&T(T(D([])));E&&E!==t&&s.call(E,l)&&(k=E);var x=w.prototype=b.prototype=Object.create(k);function S(e){["next","throw","return"].forEach((function(n){u(e,n,(function(e){return this._invoke(n,e)}))}))}function A(e,n){function t(a,r,o,l){var c=h(e[a],e,r);if("throw"!==c.type){var d=c.arg,u=d.value;return u&&"object"==i(u)&&s.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,o,l)}),(function(e){t("throw",e,o,l)})):n.resolve(u).then((function(e){d.value=e,o(d)}),(function(e){return t("throw",e,o,l)}))}l(c.arg)}var a;r(this,"_invoke",{value:function(e,s){function i(){return new n((function(n,i){t(e,s,n,i)}))}return a=a?a.then(i,i):i()}})}function L(n,t,s){var i=m;return function(a,r){if(i===g)throw Error("Generator is already running");if(i===f){if("throw"===a)throw r;return{value:e,done:!0}}for(s.method=a,s.arg=r;;){var o=s.delegate;if(o){var l=C(o,s);if(l){if(l===_)continue;return l}}if("next"===s.method)s.sent=s._sent=s.arg;else if("throw"===s.method){if(i===m)throw i=f,s.arg;s.dispatchException(s.arg)}else"return"===s.method&&s.abrupt("return",s.arg);i=g;var c=h(n,t,s);if("normal"===c.type){if(i=s.done?f:v,c.arg===_)continue;return{value:c.arg,done:s.done}}"throw"===c.type&&(i=f,s.method="throw",s.arg=c.arg)}}}function C(n,t){var s=t.method,i=n.iterator[s];if(i===e)return t.delegate=null,"throw"===s&&n.iterator.return&&
vendor: 6,131 bytes, line 2
2(t.method="return",t.arg=e,C(n,t),"throw"===t.method)||"return"!==s&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+s+"' method")),_;var a=h(i,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,_;var r=a.arg;return r?r.done?(t[n.resultName]=r.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,_):r:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,_)}function R(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function I(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function P(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(R,this),this.reset(!0)}function D(n){if(n||""===n){var t=n[l];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var a=-1,r=function t(){for(;++a<n.length;)if(s.call(n,a))return t.value=n[a],t.done=!1,t;return t.value=e,t.done=!0,t};return r.next=r}}throw new TypeError(i(n)+" is not iterable")}return y.prototype=w,r(x,"constructor",{value:w,configurable:!0}),r(w,"constructor",{value:y,configurable:!0}),y.displayName=u(w,d,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===y||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,w):(e.__proto__=w,u(e,d,"GeneratorFunction")),e.prototype=Object.create(x),e},n.awrap=function(e){return{__await:e}},S(A.prototype),u(A.prototype,c,(function(){return this})),n.AsyncIterator=A,n.async=function(e,t,s,i,a){void 0===a&&(a=Promise);var r=new A(p(e,t,s,i),a);return n.isGeneratorFunction(t)?r:r.next().then((function(e){return e.done?e.value:r.next()}))},S(x),u(x,d,"Generator"),u(x,l,(function(){return this})),u(x,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var s in n)t.push(s);return t.reverse(),function e(){for(;t.length;){var s=t.pop();if(s in n)return e.value=s,e.done=!1,e}return e.done=!0,e}},n.values=D,P.prototype={constructor:P,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(I),!n)for(var t in this)"t"===t.charAt(0)&&s.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function i(s,i){return o.type="throw",o.arg=n,t.next=s,i&&(t.method="next",t.arg=e),!!i}for(var a=this.tryEntries.length-1;a>=0;--a){var r=this.tryEntries[a],o=r.completion;if("root"===r.tryLoc)return i("end");if(r.tryLoc<=this.prev){var l=s.call(r,"catchLoc"),c=s.call(r,"finallyLoc");if(l&&c){if(this.prev<r.catchLoc)return i(r.catchLoc,!0);if(this.prev<r.finallyLoc)return i(r.finallyLoc)}else if(l){if(this.prev<r.catchLoc)return i(r.catchLoc,!0)}else{if(!c)throw Error("try statement without catch or finally");if(this.prev<r.finallyLoc)return i(r.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var i=this.tryEntries[t];if(i.tryLoc<=this.prev&&s.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var a=i;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var r=a?a.completion:{};return r.type=e,r.arg=n,a?(this.method="next",this.next=a.finallyLoc,_):this.complete(r)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),_},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),I(t),_}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var s=t.completion;if("throw"===s.type){var i=s.arg;I(t)}return i}}throw Error("illegal catch attempt")},delegateYield:function(n,t,s){return this.delegate={iterator:D(n),resultName:t,nextLoc:s},"next"===this.method&&(this.arg=e),_}},n}function r(e,n,t,s,i,a,r){try{var o=e[a](r),l=o.value}catch(e){return void t(e)}o.done?n(l):Promise.resolve(l).then(s,i)}function o(e){return function(){var n=this,t=arguments;return new Promise((function(s,i){var a=e.apply(n,t);function o(e){r(a,s,i,o,l,"next",e)}function l(e){r(a,s,i,o,l,"throw",e)}o(void 0)}))}}function l(){return c.apply(this,arguments)}function c(){return(c=o(a().mark((function e(){var n,t,s,i;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=(null===(n=window.PageData)||void 0===n?void 0:n.productOffersAjaxUrl)||""){e.next=3;break}return e.abrupt("return");case 3:return e.prev=3,e.next=6,fetch(t);case 6:if((s=e.sent).ok){e.next=9;break}throw new Error("Ошибка запроса: ".concat(s.status));case 9:return e.next=11,s.json();case 11:if(i=e.sent,Array.isArray(i)){e.next=14;break}throw new TypeError("Некорректный формат данных: ожидается массив предложений");case 14:return e.abrupt("return",i);case 17:return e.prev=17,e.t0=e.catch(3),console.error("Не удалось получить торговые предложения:",e.t0.message),e.abrupt("return",[]);case 21:case"end":return e.stop()}}),e,null,[[3,17]])})))).apply(this,arguments)}function d(e,n,t){if(!Number.isInteger(e)||e<0||e>=t.length)console.error("Некорректный индекс предложения:",e);else{var i=t[e];if(i){var a=n.querySelector(".js-product-image");a&&i.image&&(a.src=i.image);var r=n.querySelector(".js-product-props");r&&(r.innerHTML="",i.props.forEach((function(e){var n=(0,s.A)(e);n&&r.appendChild(n)})))}else console.error("Предложение не найдено по индексу:",e)}}function u(e,n,t){e.forEach((function(s){s.addEventListener("click",(function(i){i.preventDefault(),e.forEach((function(e){return e.classList.remove("isActive")}
2)),s.classList.add("isActive");var a=Number.parseInt(s.getAttribute("data-index"),10);Number.isNaN(a)?console.error("Некорректный индекс в атрибуте data-index:",s):d(a,n,t)}))}))}function p(){return h.apply(this,arguments)}function h(){return(h=o(a().mark((function e(){var n,t,s;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=document.querySelector(".js-product-detail")){e.next=3;break}return e.abrupt("return");case 3:return e.next=5,l();case 5:if(null!=(t=e.sent)&&t.length){e.next=9;break}return console.warn("Торговые предложения отсутствуют."),e.abrupt("return");case 9:if((s=n.querySelectorAll(".js-product-offer")).length){e.next=13;break}return console.error("Кнопки торговых предложений не найдены."),e.abrupt("return");case 13:u(s,n,t),s[0].classList.add("isActive"),d(0,n,t);case 16:case"end":return e.stop()}}),e)})))).apply(this,arguments)}},7729:()=>{},1463:(e,n,t)=>{"use strict";t.d(n,{A:()=>a});var s=t(3703),i=t(4128);function a(e){var n=document.querySelectorAll(".".concat(e));n.length&&n.forEach((function(e){var n=e.querySelector(".js-products-slider"),t=e.querySelector(".js-products-slider-prev"),a=e.querySelector(".js-products-slider-next"),r=e.querySelector(".js-products-slider-pagination");n&&t&&a&&r&&new s.A(n,{modules:[i.Vx,i.dK],slidesPerView:1,spaceBetween:12,watchOverflow:!0,speed:500,grabCursor:!0,navigation:{nextEl:a,prevEl:t},pagination:{el:r},breakpoints:{768:{slidesPerView:3,spaceBetween:20},1024:{slidesPerView:3,spaceBetween:24}}})}))}},7519:(e,n,t)=>{"use strict";t.d(n,{A:()=>i});var s=t(3703);function i(e){var n=document.querySelector(".".concat(e));if(n){var t=n.querySelectorAll("[data-brand]"),i=n.querySelectorAll("[data-slider]"),a=n.querySelector(".js-promo-catalog-brands-slider");if(t.length&&i.length&&a){var r;t[0].classList.add("isActive"),i[0].classList.add("isActive"),t.forEach((function(e){e.addEventListener("click",(function(n){if(n.preventDefault(),!e.classList.contains("isActive")){t.forEach((function(e){e.classList.remove("isActive")})),i.forEach((function(e){e.classList.remove("isActive")}));var s=e.getAttribute("data-brand"),a=document.querySelector('[data-slider="'.concat(s,'"]'));e.classList.add("isActive"),a.classList.add("isActive")}}))}));var o=function(){r=new s.A(a,{slidesPerView:"auto",spaceBetween:12,freeMode:!0,grabCursor:!0})},l=function(){return window.innerWidth>768&&r?(r.destroy(!0,!0),void(r=null)):o()};o(),l(),window.addEventListener("resize",l)}}}},1973:(e,n,t)=>{"use strict";t.d(n,{A:()=>a});var s=t(3703),i=t(4128);function a(e){var n=document.querySelectorAll(".".concat(e));n.length&&n.forEach((function(e){var n=e.querySelector(".js-promo-catalog-slider"),t=e.querySelector(".js-promo-catalog-slider-prev"),a=e.querySelector(".js-promo-catalog-slider-next"),r=e.querySelector(".js-promo-catalog-slider-pagination");n&&t&&a&&r&&new s.A(n,{modules:[i.Vx,i.dK],spaceBetween:0,slidesPerView:2,speed:500,grabCursor:!0,loop:!0,centeredSlides:!0,navigation:{nextEl:a,prevEl:t},pagination:{el:r,clickable:!0},breakpoints:{768:{slidesPerView:2.5},1024:{slidesPerView:3.2},1280:{slidesPerView:4.2}}})}))}},3061:(e,n,t)=>{"use strict";t.d(n,{A:()=>a});var s=t(3703),i=t(4128);function a(e){var n=document.querySelectorAll(".".concat(e));n.length&&n.forEach((function(e){var n=e.querySelector(".js-prev-btn"),t=e.querySelector(".js-next-btn"),a=e.querySelector(".js-pagination");new s.A(e,{modules:[i.Vx,i.dK],slidesPerView:"auto",spaceBetween:12,watchOverflow:!0,speed:500,grabCursor:!0,navigation:{nextEl:t,prevEl:n},pagination:{el:a},breakpoints:{1024:{spaceBetween:24}}})}))}},4958:()=>{},3611:(e,n,t)=>{"use strict";t.d(n,{A:()=>a});var s=t(3703),i=t(4128);function a(e){var n=document.querySelectorAll(".".concat(e));n.length&&n.forEach((function(e){var n=e.querySelector(".js-recipes-slider"),t=e.querySelector(".js-recipes-slider-prev"),a=e.querySelector(".js-recipes-slider-next");n&&t&&a&&new s.A(n,{modules:[i.Vx],slidesPerView:"auto",spaceBetween:12,watchOverflow:!0,speed:500,preloadImages:!1,grabCursor:!0,navigation:{nextEl:a,prevEl:t},breakpoints:{768:{spaceBetween:24}}})}))}},953:(e,n,t)=>{"use strict";t.d(n,{A:()=>a});var s=t(3703),i=t(4128);function a(e){var n=document.querySelectorAll(".".concat(e));
2n.length&&n.forEach((function(e){var n=e.querySelector(".js-reviews-slider"),t=e.querySelector(".js-reviews-slider-prev"),a=e.querySelector(".js-reviews-slider-next"),r=e.querySelector(".js-reviews-slider-pagination");if(n&&t&&a&&r){new s.A(n,{modules:[i.Vx,i.dK],observer:!0,observeParents:!0,observeSlideChildren:!0,slidesPerView:"auto",spaceBetween:0,watchOverflow:!0,speed:500,preloadImages:!1,loop:!0,grabCursor:!0,navigation:{nextEl:a,prevEl:t},pagination:{el:r,clickable:!0}});var o=document.querySelectorAll(".review-card__video-button"),l=document.querySelectorAll(".js-video-reviews-button"),c=document.querySelector(".js-video-modal");if(c){var d=function(){c.classList.add("isOpen")};o.length&&o.forEach((function(e){e.addEventListener("click",(function(n){n.preventDefault();var t=e.getAttribute("data-video-review");c.querySelector(".media-block__video").setAttribute("src",t),d()}))})),l.length&&l.forEach((function(e){e.addEventListener("click",(function(e){e.preventDefault();var n=e.target.closest(".review-card-video").getAttribute("data-href");c.querySelector(".media-block__video").setAttribute("src",n),d()}))}))}}}))}},4829:(e,n,t)=>{"use strict";t.d(n,{A:()=>a});var s=t(3703),i=t(4128);function a(e){var n=document.querySelectorAll(".".concat(e));n.length&&n.forEach((function(e){var n=e.querySelector(".js-section-list-carousel-slider"),t=e.querySelector(".js-section-list-carousel-prev"),a=e.querySelector(".js-section-list-carousel-next");n&&t&&a&&new s.A(n,{modules:[i.Vx],slidesPerView:"auto",spaceBetween:12,watchOverflow:!0,speed:500,preloadImages:!1,grabCursor:!0,navigation:{nextEl:a,prevEl:t},breakpoints:{768:{spaceBetween:20},1280:{spaceBetween:17},1680:{spaceBetween:61}}})}))}},193:(e,n,t)=>{"use strict";t.d(n,{A:()=>l});var s=t(3703),i=t(4128);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,s)}return t}function o(e,n,t){return(n=function(e){var n=function(e){if("object"!=a(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=a(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==a(n)?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e){var n=document.querySelector(".".concat(e));if(n){var t=n.querySelector(".js-title-section-thumbs-slider"),a=n.querySelector(".js-title-section-videos-slider"),l=n.querySelector(".js-title-section-slider"),c=n.querySelector(".js-title-slider-prev"),d=n.querySelector(".js-title-slider-next"),u=n.querySelector(".js-title-video-slider-prev"),p=n.querySelector(".js-title-video-slider-next");if((t||a)&&l&&c&&d){var h;if(t&&(h=new s.A(t,{modules:[i.Vx,i.WO,i._R],slidesPerView:1,spaceBetween:12,watchOverflow:!0,speed:500,preloadImages:!1,allowTouchMove:!1,effect:"fade",breakpoints:{768:{spaceBetween:24}}})),a){var m=function(){var e=g[v.activeIndex].querySelector("video");g.forEach((function(n){var t=n.querySelector("video");t&&t!==e&&(t.pause(),t.currentTime=0)})),e&&(e.play().catch((function(e){return console.warn("Ошибка воспроизведения:",e)})),e.onended=function(){v.activeIndex===v.slides.length-1?v.slideTo(0):v.slideNext()})},v=new s.A(a,{modules:[i._R,i.Vx],init:!1,slidesPerView:1,spaceBetween:12,watchOverflow:!0,speed:500,preloadImages:!1,allowTouchMove:!1,effect:"fade",fadeEffect:{crossFade:!0},breakpoints:{768:{spaceBetween:24}},navigation:{nextEl:p,prevEl:u}}),g=document.querySelectorAll(".title-section__video");v.on("init",m),v.on("slideChange",m),v.init()}new s.A(l,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?r(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):r(Object(t)).forEac
2h((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}({modules:[i.WO,i.Vx],slidesPerView:1,spaceBetween:12,watchOverflow:!0,speed:500,preloadImages:!1,breakpoints:{768:{spaceBetween:24}},navigation:{nextEl:d,prevEl:c}},h?{thumbs:{swiper:h}}:{}))}}}},1379:()=>{"use strict";document.addEventListener("DOMContentLoaded",(function(){var e=document.querySelector(".js-video-modal"),n=e.querySelector(".js-video-modal-close");e&&n&&n.addEventListener("click",(function(){e.querySelector(".media-block__video").pause(),e.classList.remove("isOpen")}))}))},9833:(e,n,t)=>{"use strict";t.d(n,{A:()=>a});var s=t(3703),i=t(4128);function a(e){var n=document.querySelector(".".concat(e));if(n){var t=n.querySelector(".js-video-slider-thumbs-slider"),a=n.querySelector(".js-video-slider-slider"),r=n.querySelector(".js-video-slider-prev"),o=n.querySelector(".js-video-slider-next");if(t&&a&&r&&o){var l=new s.A(t,{modules:[i.Vx,i.WO,i._R],observer:!0,observeParents:!0,observeSlideChildren:!0,slidesPerView:1,spaceBetween:0,watchOverflow:!0,speed:500,preloadImages:!1,effect:"fade"});new s.A(a,{modules:[i.WO,i.Vx],observer:!0,observeParents:!0,observeSlideChildren:!0,slidesPerView:1,spaceBetween:0,watchOverflow:!0,speed:500,preloadImages:!1,grabCursor:!0,thumbs:{swiper:l},navigation:{nextEl:o,prevEl:r}})}}}},4504:(e,n,t)=>{"use strict";var s=t(3457),i=t(1463),a=t(2569);document.addEventListener("DOMContentLoaded",(function(){new s.w({buttonClass:"js-burger",activeButtonClass:"isActive",menuClass:"js-mobile-screen",activeMenuClass:"isActive",closingElementClasses:["js-mobile-menu-link"],lockPaddingElementClass:"js-lock-padding",showHideTime:300}).init(),(0,s.N)("js-header"),(0,i.A)("js-products-carousel"),(0,a.A)()}))},6303:(e,n,t)=>{"use strict";t.d(n,{BH:()=>s});var s=(window.matchMedia("(min-width: ".concat(1680,"px)")),window.matchMedia("(min-width: ".concat(1280,"px)")),window.matchMedia("(min-width: ".concat(768,"px)")));window.matchMedia("(min-width: ".concat(480,"px)"))},7639:(e,n,t)=>{"use strict";var s=t(3061),i=t(8579),a=t(4705);document.addEventListener("DOMContentLoaded",(function(){(0,s.A)("js-qualities-slider"),(0,i.A)("js-advantages-carousel"),(0,a.A)("js-company-history")}))},6857:(e,n,t)=>{"use strict";var s=t(8497);document.addEventListener("DOMContentLoaded",(function(){(0,s.A)("js-brand-list-carousel")}))},1229:(e,n,t)=>{"use strict";var s=t(537);document.addEventListener("DOMContentLoaded",(function(){(0,s.A)()}))},7581:(e,n,t)=>{"use strict";var s=t(193),i=t(953),a=t(1973),r=t(7519),o=t(1053),l=t(4865),c=t(9833),d=t(3611),u=t(6613);document.addEventListener("DOMContentLoaded",(function(){(0,u.A)(),(0,s.A)("js-split-slider"),(0,i.A)("js-reviews-slider-container"),(0,a.A)("js-promo-catalog-slider-container"),(0,r.A)("js-promo-catalog"),(0,o.A)("js-video"),(0,c.A)("js-video-slider"),(0,l.A)("js-cookie-modal"),(0,d.A)("js-recipes-promo")}))},3857:(e,n,t)=>{"use strict";var s=t(1053),i=t(2577),a=t(119);document.addEventListener("DOMContentLoaded",(function(){(0,s.A)("js-video"),(0,i.A)("js-gallery-slider"),(0,a.A)("js-post-card-carousel")}))},2635:(e,n,t)=>{"use strict";var s=t(6029),i=t(3611);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function r(){r=function(){return n};var e,n={},t=Object.prototype,s=t.hasOwnProperty,i=Object.defineProperty||function(e,n,t){e[n]=t.value},o="function"==typeof Symbol?Symbol:{},l=o.iterator||"@@iterator",c=o.asyncIterator||"@@asyncIterator",d=o.toStringTag||"@@toStringTag";function u(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{u({},"")}catch(e){u=function(e,n,t){return e[n]=t}}function p(e,n,t,s){var a=n&&n.prototype instanceof b?n:b,r=Object.create(a.prototype),o=new P(s||[]);return i(r,"_invoke",{value:L(e,t,o)}),r}function h(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=p;var m="suspendedStart",v="suspendedYield",g="executing",f="completed",_={};function b(){}function y(){}function w(){}var k={};u(k,l,(function(){return this}));var T=Object.getPrototypeOf,E=T&&T(T(D([])));E&&E!==t&&s.call(E,l)&&(k=E);var x=w.prototype=b.prototype=Object.create(k);function S(e){["next","throw","return"].forEach((function(n){u(e,n,(function(e){return this._invoke(n,e)}))}))}function A(e,n){function t(i,r,o,l){var c=h(e[i],e,r);if("throw"!==c.type){var d=c.arg,u=d.value;return u&&"object"==a(u)&&s.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,o,l)}),(function(e){t("throw",e,o,l)})):n.resolve(u).then((function(e){d.value=e,o(d)}),(function(e){return t("throw",e,o,l)}))}l(c.arg)}var r;i(this,"_invoke",{value:function(e,s){function i(){return new n((function(n,i){t(e,s,n,i)}))}return r=r?r.then(i,i):i()}})}function L(n,t,s){var i=m;return function(a,r){if(i===g)throw Error("Generator is already running");if(i===f){if("throw"===a)throw r;return{value:e,done:!0}}for(s.method=a,s.arg=r;;){var o=s.delegate;if(o){var l=C(o,s);if(l){if(l===_)continue;return l}}if("next"===s.method)s.sent=s._sent=s.arg;else if("throw"===s.method){if(i===m)throw i=f,s.arg;s.dispatchException(s.arg)}else"return"===s.method&&s.abrupt("return",s.arg);i=g;var c=h(n,t,s);if("normal"===c.type){if(i=s.done?f:v,c.arg===_)continue;return{value:c.arg,done:s.done}}"throw"===c.type&&(i=f,s.method="throw",s.arg=c.arg)}}}function C(n,t){var s=t.method,i=n.iterator[s];if(i===e)return t.delegate=null,"throw"===s&&n.iterator.return&&
2(t.method="return",t.arg=e,C(n,t),"throw"===t.method)||"return"!==s&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+s+"' method")),_;var a=h(i,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,_;var r=a.arg;return r?r.done?(t[n.resultName]=r.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,_):r:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,_)}function R(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function I(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function P(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(R,this),this.reset(!0)}function D(n){if(n||""===n){var t=n[l];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var i=-1,r=function t(){for(;++i<n.length;)if(s.call(n,i))return t.value=n[i],t.done=!1,t;return t.value=e,t.done=!0,t};return r.next=r}}throw new TypeError(a(n)+" is not iterable")}return y.prototype=w,i(x,"constructor",{value:w,configurable:!0}),i(w,"constructor",{value:y,configurable:!0}),y.displayName=u(w,d,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===y||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,w):(e.__proto__=w,u(e,d,"GeneratorFunction")),e.prototype=Object.create(x),e},n.awrap=function(e){return{__await:e}},S(A.prototype),u(A.prototype,c,(function(){return this})),n.AsyncIterator=A,n.async=function(e,t,s,i,a){void 0===a&&(a=Promise);var r=new A(p(e,t,s,i),a);return n.isGeneratorFunction(t)?r:r.next().then((function(e){return e.done?e.value:r.next()}))},S(x),u(x,d,"Generator"),u(x,l,(function(){return this})),u(x,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var s in n)t.push(s);return t.reverse(),function e(){for(;t.length;){var s=t.pop();if(s in n)return e.value=s,e.done=!1,e}return e.done=!0,e}},n.values=D,P.prototype={constructor:P,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(I),!n)for(var t in this)"t"===t.charAt(0)&&s.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function i(s,i){return o.type="throw",o.arg=n,t.next=s,i&&(t.method="next",t.arg=e),!!i}for(var a=this.tryEntries.length-1;a>=0;--a){var r=this.tryEntries[a],o=r.completion;if("root"===r.tryLoc)return i("end");if(r.tryLoc<=this.prev){var l=s.call(r,"catchLoc"),c=s.call(r,"finallyLoc");if(l&&c){if(this.prev<r.catchLoc)return i(r.catchLoc,!0);if(this.prev<r.finallyLoc)return i(r.finallyLoc)}else if(l){if(this.prev<r.catchLoc)return i(r.catchLoc,!0)}else{if(!c)throw Error("try statement without catch or finally");if(this.prev<r.finallyLoc)return i(r.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var i=this.tryEntries[t];if(i.tryLoc<=this.prev&&s.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var a=i;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var r=a?a.completion:{};return r.type=e,r.arg=n,a?(this.method="next",this.next=a.finallyLoc,_):this.complete(r)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),_},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),I(t),_}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var s=t.completion;if("throw"===s.type){var i=s.arg;I(t)}return i}}throw Error("illegal catch attempt")},delegateYield:function(n,t,s){return this.delegate={iterator:D(n),resultName:t,nextLoc:s},"next"===this.method&&(this.arg=e),_}},n}function o(e,n,t,s,i,a,r){try{var o=e[a](r),l=o.value}catch(e){return void t(e)}o.done?n(l):Promise.resolve(l).then(s,i)}function l(e){return function(){var n=this,t=arguments;return new Promise((function(s,i){var a=e.apply(n,t);function r(e){o(a,s,i,r,l,"next",e)}function l(e){o(a,s,i,r,l,"throw",e)}r(void 0)}))}}document.addEventListener("DOMContentLoaded",l(r().mark((function e(){return r().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,s.A)();case 2:(0,i.A)("js-recipes-promo");case 3:case"end":return e.stop()}}),e)}))))},6754:(e,n,t)=>{"use strict";var s=t(1053),i=t(3611);document.addEventListener("DOMContentLoaded",(function(){(0,s.A)("js-video"),(0,i.A)("js-recipes")}))},1245:(e,n,t)=>{"use strict";var s=t(4829);document.addEventListener("DOMContentLoaded",(function(){(0,s.A)("js-section-list-carousel")}))},6405:(e,n,t)=>{"use strict";t.d(n,{z:()=>i});var s=t(1372),i={openPopup:function(e,n,t){var i=document.querySelector('[data-popup="'.concat(e,'"]'));i&&((0,s.s2)(),i.classList.add("isPopupActive"),i.style.visibility="visible",t&&"function"==typeof t&&t())},closePopup:function(e,n,t){var i=document.querySelector('[data-popup="'.concat(e,'"]'));i&&(i.classList.remove("isPopupActive"),setTimeout((function(){i.style.visibility="hidden"}),n),(0,s.Tl)(),t&&"function"==typeof t&&t())}}},9965:(e,n,t)=>{"use strict";function s(e){var n=e.name,t=e.value,s=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=document.createElement("div");return i.setAttribute("class","product-property"),s&&i.setAttribute("class","product-property_size_xs"),i.innerHTML="<strong>".concat(t,"</strong><span>").concat(n,"</span>"),i}t.d(n,{A:()=>s})},4289:(e,n,t)=>{"use strict";function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function i(e,n){for(var t=0;t<n.length;t++){var s=n[t];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(e,a(s.key),s)}}function a(e){var n=function(e){if("object"!=s(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=s(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==s(n)?n:n+""}t.d(n,{A:()=>r});var r=function(){return e=function e(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=t.highlightClass,i=void 0===s?"js-switch-highlight":s,a=t.activeClass,r=void 0===a?"isActive":a;!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),this.activeClass=r,this.element=document.querySelector(n),this.element&&(this.buttons=this.element.querySelectorAll("button"),this.highlight=this.element.querySelector(".".concat(i)),this.activeBtn=this.element.querySelector("button.".concat(this.activeClass)),this.activeBtn||(this.activeBtn=this.buttons[0],this.activeBtn.classList.add(this.activeClass)),this._highlight(),this._resizeEvents(),this._addEvents())},n=[{key:"_highlight",value:function(){var e=this.activeBtn.offsetWidth,n=this.activeBtn.offsetLeft;this.highlight.style.width="".concat(e,"px"),this.highlight.style.transform="translateX(".concat(n,"px)")}},{key:"_dispatchEvent",value:function(){this.element.dispatchEvent(new CustomEvent("change",{detail:this.activeBtn.dataset.value}))}},{key:"_addEvents",value:function(){var e=this;[].forEach.call(this.buttons,(function(n){return n.addEventListener("click",(function(n){e.activeBtn!==n.target&&(e.activeBtn.classList.remove(e.activeClass),e.activeBtn=n.target,e.activeBtn.classList.add(e.activeClass),e._highlight(),e._dispatchEvent())}
2))}))}},{key:"_resizeEvents",value:function(){var e=this;window.addEventListener("resize",(function(){e._highlight()}))}}],n&&i(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n}()},2569:(e,n,t)=>{"use strict";function s(){var e=document.querySelectorAll(".js-responsive-table");e.length&&e.forEach((function(e){var n=document.createElement("div");n.className="responsive-table",e.parentNode.insertBefore(n,e),n.appendChild(e)}))}t.d(n,{A:()=>s})},1053:(e,n,t)=>{"use strict";function s(e){var n=document.querySelector(".".concat(e));if(n){var t=n.querySelector(".js-player"),s=n.querySelector(".js-screen");t&&s&&(s.addEventListener("click",(function(){t.play(),s.classList.add("isHidden")})),t.addEventListener("pause",(function(){s.classList.remove("isHidden")})),t.addEventListener("play",(function(){s.classList.add("isHidden")})))}}t.d(n,{A:()=>s})},4128:(e,n,t)=>{"use strict";t.d(n,{_R:()=>p,FJ:()=>a,Vx:()=>o,dK:()=>c,WO:()=>d});var s=t(9624),i=t(5261);function a(e){let{swiper:n,extendParams:t,on:a,emit:r}=e;const o=(0,s.a)();let l;t({mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarget:"container",thresholdDelta:null,thresholdTime:null,noMousewheelClass:"swiper-no-mousewheel"}}),n.mousewheel={enabled:!1};let c,d=(0,i.d)();const u=[];function p(){n.enabled&&(n.mouseEntered=!0)}function h(){n.enabled&&(n.mouseEntered=!1)}function m(e){return!(n.params.mousewheel.thresholdDelta&&e.delta<n.params.mousewheel.thresholdDelta||n.params.mousewheel.thresholdTime&&(0,i.d)()-d<n.params.mousewheel.thresholdTime||!(e.delta>=6&&(0,i.d)()-d<60)&&(e.direction<0?n.isEnd&&!n.params.loop||n.animating||(n.slideNext(),r("scroll",e.raw)):n.isBeginning&&!n.params.loop||n.animating||(n.slidePrev(),r("scroll",e.raw)),d=(new o.Date).getTime(),1))}function v(e){let t=e,s=!0;if(!n.enabled)return;if(e.target.closest(`.${n.params.mousewheel.noMousewheelClass}`))return;const a=n.params.mousewheel;n.params.cssMode&&t.preventDefault();let o=n.el;"container"!==n.params.mousewheel.eventsTarget&&(o=document.querySelector(n.params.mousewheel.eventsTarget));const d=o&&o.contains(t.target);if(!n.mouseEntered&&!d&&!a.releaseOnEdges)return!0;t.originalEvent&&(t=t.originalEvent);let p=0;const h=n.rtlTranslate?-1:1,v=function(e){let n=0,t=0,s=0,i=0;return"detail"in e&&(t=e.detail),"wheelDelta"in e&&(t=-e.wheelDelta/120),"wheelDeltaY"in e&&(t=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(n=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(n=t,t=0),s=10*n,i=10*t,"deltaY"in e&&(i=e.deltaY),"deltaX"in e&&(s=e.deltaX),e.shiftKey&&!s&&(s=i,i=0),(s||i)&&e.deltaMode&&(1===e.deltaMode?(s*=40,i*=40):(s*=800,i*=800)),s&&!n&&(n=s<1?-1:1),i&&!t&&(t=i<1?-1:1),{spinX:n,spinY:t,pixelX:s,pixelY:i}}(t);if(a.forceToAxis)if(n.isHorizontal()){if(!(Math.abs(v.pixelX)>Math.abs(v.pixelY)))return!0;p=-v.pixelX*h}else{if(!(Math.abs(v.pixelY)>Math.abs(v.pixelX)))return!0;p=-v.pixelY}else p=Math.abs(v.pixelX)>Math.abs(v.pixelY)?-v.pixelX*h:-v.pixelY;if(0===p)return!0;a.invert&&(p=-p);let g=n.getTranslate()+p*a.sensitivity;if(g>=n.minTranslate()&&(g=n.minTranslate()),g<=n.maxTranslate()&&(g=n.maxTranslate()),s=!!n.params.loop||!(g===n.minTranslate()||g===n.maxTranslate()),s&&n.params.nested&&t.stopPropagation(),n.params.freeMode&&n.params.freeMode.enabled){const e={time:(0,i.d)(),delta:Math.abs(p),direction:Math.sign(p)},s=c&&e.time<c.time+500&&e.delta<=c.delta&&e.direction===c.direction;if(!s){c=void 0;let o=n.getTranslate()+p*a.sensitivity;const d=n.isBeginning,h=n.isEnd;if(o>=n.minTranslate()&&(o=n.minTranslate()),o<=n.maxTranslate()&&(o=n.maxTranslate()),n.setTransition(0),n.setTranslate(o),n.updateProgress(),n.updateActiveIndex(),n.updateSlidesClasses(),(!d&&n.isBeginning||!h&&n.isEnd)&&n.updateSlidesClasses(),n.params.loop&&n.loopFix({direction:e.direction<0?"next":"prev",byMousewheel:!0}),n.params.freeMode.sticky){clearTimeout(l),l=void 0,u.length>=15&&u.shift();const t=u.length?u[u.length-1]:void 0,s=u[0];if(u.push(e),t&&(e.delta>t.delta||e.direction!==t.direction))u.splice(0);else if(u.length>=15&&e.time-s.time<500&&s.delta-e.delta>=1&&e.delta<=6){const t=p>0?.8:.2;c=e,u.splice(0),l=(0,i.n)((()=>{!n.destroyed&&n.params&&n.slideToClosest(n.params.speed,!0,void 0,t)}),0)}l||(l=(0,i.n)((()=>{!n.destroyed&&n.params&&(c=e,u.splice(0),n.slideToClosest(n.params.speed,!0,void 0,.5))}),500))}if(s||r("scroll",t),n.params.autoplay&&n.params.autoplayDisableOnInteraction&&n.autoplay.stop(),a.releaseOnEdges&&(o===n.minTranslate()||o===n.maxTranslate()))return!0}}else{const t={time:(0,i.d)(),delta:Math.abs(p),direction:Math.sign(p),raw:e};u.length>=2&&u.shift();const s=u.length?u[u.length-1]:void 0;if(u.push(t),s?(t.direction!==s.direction||t.delta>s.delta||t.time>s.time+150)&&m(t):m(t),function(e){const t=n.params.mousewheel;if(e.direction<0){if(n.isEnd&&!n.params.loop&&t.releaseOnEdges)return!0}else if(n.isBeginning&&!n.params.loop&&t.releaseOnEdges)return!0;return!1}(t))return!0}return t.preventDefault?t.preventDefault():t.returnValue=!1,!1}function g(e){let t=n.el;"container"!==n.params.mousewheel.eventsTarget&&(t=document.querySelector(n.params.mousewheel.eventsTarget)),t[e]("mouseenter",p),t[e]("mouseleave",h),t[e]("wheel",v)}
vendor: 4,306 bytes, line 2
2function f(){return n.params.cssMode?(n.wrapperEl.removeEventListener("wheel",v),!0):!n.mousewheel.enabled&&(g("addEventListener"),n.mousewheel.enabled=!0,!0)}function _(){return n.params.cssMode?(n.wrapperEl.addEventListener(event,v),!0):!!n.mousewheel.enabled&&(g("removeEventListener"),n.mousewheel.enabled=!1,!0)}a("init",(()=>{!n.params.mousewheel.enabled&&n.params.cssMode&&_(),n.params.mousewheel.enabled&&f()})),a("destroy",(()=>{n.params.cssMode&&f(),n.mousewheel.enabled&&_()})),Object.assign(n.mousewheel,{enable:f,disable:_})}function r(e,n,t,s){return e.params.createElements&&Object.keys(s).forEach((a=>{if(!t[a]&&!0===t.auto){let r=(0,i.e)(e.el,`.${s[a]}`)[0];r||(r=(0,i.c)("div",s[a]),r.className=s[a],e.el.append(r)),t[a]=r,n[a]=r}})),t}function o(e){let{swiper:n,extendParams:t,on:s,emit:a}=e;function o(e){let t;return e&&"string"==typeof e&&n.isElement&&(t=n.el.querySelector(e)||n.hostEl.querySelector(e),t)?t:(e&&("string"==typeof e&&(t=[...document.querySelectorAll(e)]),n.params.uniqueNavElements&&"string"==typeof e&&t&&t.length>1&&1===n.el.querySelectorAll(e).length?t=n.el.querySelector(e):t&&1===t.length&&(t=t[0])),e&&!t?e:t)}function l(e,t){const s=n.params.navigation;(e=(0,i.m)(e)).forEach((e=>{e&&(e.classList[t?"add":"remove"](...s.disabledClass.split(" ")),"BUTTON"===e.tagName&&(e.disabled=t),n.params.watchOverflow&&n.enabled&&e.classList[n.isLocked?"add":"remove"](s.lockClass))}))}function c(){const{nextEl:e,prevEl:t}=n.navigation;if(n.params.loop)return l(t,!1),void l(e,!1);l(t,n.isBeginning&&!n.params.rewind),l(e,n.isEnd&&!n.params.rewind)}function d(e){e.preventDefault(),(!n.isBeginning||n.params.loop||n.params.rewind)&&(n.slidePrev(),a("navigationPrev"))}function u(e){e.preventDefault(),(!n.isEnd||n.params.loop||n.params.rewind)&&(n.slideNext(),a("navigationNext"))}function p(){const e=n.params.navigation;if(n.params.navigation=r(n,n.originalParams.navigation,n.params.navigation,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),!e.nextEl&&!e.prevEl)return;let t=o(e.nextEl),s=o(e.prevEl);Object.assign(n.navigation,{nextEl:t,prevEl:s}),t=(0,i.m)(t),s=(0,i.m)(s);const a=(t,s)=>{t&&t.addEventListener("click","next"===s?u:d),!n.enabled&&t&&t.classList.add(...e.lockClass.split(" "))};t.forEach((e=>a(e,"next"))),s.forEach((e=>a(e,"prev")))}function h(){let{nextEl:e,prevEl:t}=n.navigation;e=(0,i.m)(e),t=(0,i.m)(t);const s=(e,t)=>{e.removeEventListener("click","next"===t?u:d),e.classList.remove(...n.params.navigation.disabledClass.split(" "))};e.forEach((e=>s(e,"next"))),t.forEach((e=>s(e,"prev")))}t({navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock",navigationDisabledClass:"swiper-navigation-disabled"}}),n.navigation={nextEl:null,prevEl:null},s("init",(()=>{!1===n.params.navigation.enabled?m():(p(),c())})),s("toEdge fromEdge lock unlock",(()=>{c()})),s("destroy",(()=>{h()})),s("enable disable",(()=>{let{nextEl:e,prevEl:t}=n.navigation;e=(0,i.m)(e),t=(0,i.m)(t),n.enabled?c():[...e,...t].filter((e=>!!e)).forEach((e=>e.classList.add(n.params.navigation.lockClass)))})),s("click",((e,t)=>{let{nextEl:s,prevEl:r}=n.navigation;s=(0,i.m)(s),r=(0,i.m)(r);const o=t.target;let l=r.includes(o)||s.includes(o);if(n.isElement&&!l){const e=t.path||t.composedPath&&t.composedPath();e&&(l=e.find((e=>s.includes(e)||r.includes(e))))}if(n.params.navigation.hideOnClick&&!l){if(n.pagination&&n.params.pagination&&n.params.pagination.clickable&&(n.pagination.el===o||n.pagination.el.contains(o)))return;let e;s.length?e=s[0].classList.contains(n.params.navigation.hiddenClass):r.length&&(e=r[0].classList.contains(n.params.navigation.hiddenClass)),a(!0===e?"navigationShow":"navigationHide"),[...s,...r].filter((e=>!!e)).forEach((e=>e.classList.toggle(n.params.navigation.hiddenClass)))}}));const m=()=>{n.el.classList.add(...n.params.navigation.navigationDisabledClass.split(" ")),h()};Object.assign(n.navigation,{enable:()=>{n.el.classList.remove(...n.params.navigation.navigationDisabledClass.split(" ")),p(),c()},disable:m,update:c,init:p,destroy:h})}function l(e){return void 0===e&&(e=""),`.${e.trim().replace(/([\.:!+\/])/g,"\\$1").replace(/ /g,".")}`}function c(e){let{swiper:n,extendParams:t,on:s,emit:a}=e;const o="swiper-pagination";
2let c;t({pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:e=>e,formatFractionTotal:e=>e,bulletClass:`${o}-bullet`,bulletActiveClass:`${o}-bullet-active`,modifierClass:`${o}-`,currentClass:`${o}-current`,totalClass:`${o}-total`,hiddenClass:`${o}-hidden`,progressbarFillClass:`${o}-progressbar-fill`,progressbarOppositeClass:`${o}-progressbar-opposite`,clickableClass:`${o}-clickable`,lockClass:`${o}-lock`,horizontalClass:`${o}-horizontal`,verticalClass:`${o}-vertical`,paginationDisabledClass:`${o}-disabled`}}),n.pagination={el:null,bullets:[]};let d=0;function u(){return!n.params.pagination.el||!n.pagination.el||Array.isArray(n.pagination.el)&&0===n.pagination.el.length}function p(e,t){const{bulletActiveClass:s}=n.params.pagination;e&&(e=e[("prev"===t?"previous":"next")+"ElementSibling"])&&(e.classList.add(`${s}-${t}`),(e=e[("prev"===t?"previous":"next")+"ElementSibling"])&&e.classList.add(`${s}-${t}-${t}`))}function h(e){const t=e.target.closest(l(n.params.pagination.bulletClass));if(!t)return;e.preventDefault();const s=(0,i.h)(t)*n.params.slidesPerGroup;if(n.params.loop){if(n.realIndex===s)return;const e=(a=n.realIndex,r=s,(r%=o=n.slides.length)==1+(a%=o)?"next":r===a-1?"previous":void 0);"next"===e?n.slideNext():"previous"===e?n.slidePrev():n.slideToLoop(s)}else n.slideTo(s);var a,r,o}function m(){const e=n.rtl,t=n.params.pagination;if(u())return;let s,r,o=n.pagination.el;o=(0,i.m)(o);const h=n.virtual&&n.params.virtual.enabled?n.virtual.slides.length:n.slides.length,m=n.params.loop?Math.ceil(h/n.params.slidesPerGroup):n.snapGrid.length;if(n.params.loop?(r=n.previousRealIndex||0,s=n.params.slidesPerGroup>1?Math.floor(n.realIndex/n.params.slidesPerGroup):n.realIndex):void 0!==n.snapIndex?(s=n.snapIndex,r=n.previousSnapIndex):(r=n.previousIndex||0,s=n.activeIndex||0),"bullets"===t.type&&n.pagination.bullets&&n.pagination.bullets.length>0){const a=n.pagination.bullets;let l,u,h;if(t.dynamicBullets&&(c=(0,i.f)(a[0],n.isHorizontal()?"width":"height",!0),o.forEach((e=>{e.style[n.isHorizontal()?"width":"height"]=c*(t.dynamicMainBullets+4)+"px"})),t.dynamicMainBullets>1&&void 0!==r&&(d+=s-(r||0),d>t.dynamicMainBullets-1?d=t.dynamicMainBullets-1:d<0&&(d=0)),l=Math.max(s-d,0),u=l+(Math.min(a.length,t.dynamicMainBullets)-1),h=(u+l)/2),a.forEach((e=>{const n=[...["","-next","-next-next","-prev","-prev-prev","-main"].map((e=>`${t.bulletActiveClass}${e}`))].map((e=>"string"==typeof e&&e.includes(" ")?e.split(" "):e)).flat();e.classList.remove(...n)})),o.length>1)a.forEach((e=>{const a=(0,i.h)(e);a===s?e.classList.add(...t.bulletActiveClass.split(" ")):n.isElement&&e.setAttribute("part","bullet"),t.dynamicBullets&&(a>=l&&a<=u&&e.classList.add(...`${t.bulletActiveClass}-main`.split(" ")),a===l&&p(e,"prev"),a===u&&p(e,"next"))}));else{const e=a[s];if(e&&e.classList.add(...t.bulletActiveClass.split(" ")),n.isElement&&a.forEach(((e,n)=>{e.setAttribute("part",n===s?"bullet-active":"bullet")})),t.dynamicBullets){const e=a[l],n=a[u];for(let e=l;e<=u;e+=1)a[e]&&a[e].classList.add(...`${t.bulletActiveClass}-main`.split(" "));p(e,"prev"),p(n,"next")}}if(t.dynamicBullets){const s=Math.min(a.length,t.dynamicMainBullets+4),i=(c*s-c)/2-h*c,r=e?"right":"left";a.forEach((e=>{e.style[n.isHorizontal()?r:"top"]=`${i}px`}))}}o.forEach(((e,i)=>{if("fraction"===t.type&&(e.querySelectorAll(l(t.currentClass)).forEach((e=>{e.textContent=t.formatFractionCurrent(s+1)})),e.querySelectorAll(l(t.totalClass)).forEach((e=>{e.textContent=t.formatFractionTotal(m)}))),"progressbar"===t.type){let i;i=t.progressbarOpposite?n.isHorizontal()?"vertical":"horizontal":n.isHorizontal()?"horizontal":"vertical";const a=(s+1)/m;let r=1,o=1;"horizontal"===i?r=a:o=a,e.querySelectorAll(l(t.progressbarFillClass)).forEach((e=>{e.style.transform=`translate3d(0,0,0) scaleX(${r}) scaleY(${o})`,e.style.transitionDuration=`${n.params.speed}ms`}))}"custom"===t.type&&t.renderCustom?(e.innerHTML=t.renderCustom(n,s+1,m),0===i&&a("paginationRender",e)):(0===i&&a("paginationRender",e),a("paginationUpdate",e)),n.params.watchOverflow&&n.enabled&&e.classList[n.isLocked?"add":"remove"](t.lockClass)}))}function v(){const e=n.params.pagination;if(u())return;const t=n.virtual&&n.params.virtual.enabled?n.virtual.slides.length:n.grid&&n.params.grid.rows>1?n.slides.length/Math.ceil(n.params.grid.rows):n.slides.length;let s=n.pagination.el;s=(0,i.m)(s);let r="";
vendor: 5,008 bytes, line 2
2if("bullets"===e.type){let s=n.params.loop?Math.ceil(t/n.params.slidesPerGroup):n.snapGrid.length;n.params.freeMode&&n.params.freeMode.enabled&&s>t&&(s=t);for(let t=0;t<s;t+=1)e.renderBullet?r+=e.renderBullet.call(n,t,e.bulletClass):r+=`<${e.bulletElement} ${n.isElement?'part="bullet"':""} class="${e.bulletClass}"></${e.bulletElement}>`}"fraction"===e.type&&(r=e.renderFraction?e.renderFraction.call(n,e.currentClass,e.totalClass):`<span class="${e.currentClass}"></span> / <span class="${e.totalClass}"></span>`),"progressbar"===e.type&&(r=e.renderProgressbar?e.renderProgressbar.call(n,e.progressbarFillClass):`<span class="${e.progressbarFillClass}"></span>`),n.pagination.bullets=[],s.forEach((t=>{"custom"!==e.type&&(t.innerHTML=r||""),"bullets"===e.type&&n.pagination.bullets.push(...t.querySelectorAll(l(e.bulletClass)))})),"custom"!==e.type&&a("paginationRender",s[0])}function g(){n.params.pagination=r(n,n.originalParams.pagination,n.params.pagination,{el:"swiper-pagination"});const e=n.params.pagination;if(!e.el)return;let t;"string"==typeof e.el&&n.isElement&&(t=n.el.querySelector(e.el)),t||"string"!=typeof e.el||(t=[...document.querySelectorAll(e.el)]),t||(t=e.el),t&&0!==t.length&&(n.params.uniqueNavElements&&"string"==typeof e.el&&Array.isArray(t)&&t.length>1&&(t=[...n.el.querySelectorAll(e.el)],t.length>1&&(t=t.filter((e=>(0,i.a)(e,".swiper")[0]===n.el))[0])),Array.isArray(t)&&1===t.length&&(t=t[0]),Object.assign(n.pagination,{el:t}),t=(0,i.m)(t),t.forEach((t=>{"bullets"===e.type&&e.clickable&&t.classList.add(...(e.clickableClass||"").split(" ")),t.classList.add(e.modifierClass+e.type),t.classList.add(n.isHorizontal()?e.horizontalClass:e.verticalClass),"bullets"===e.type&&e.dynamicBullets&&(t.classList.add(`${e.modifierClass}${e.type}-dynamic`),d=0,e.dynamicMainBullets<1&&(e.dynamicMainBullets=1)),"progressbar"===e.type&&e.progressbarOpposite&&t.classList.add(e.progressbarOppositeClass),e.clickable&&t.addEventListener("click",h),n.enabled||t.classList.add(e.lockClass)})))}function f(){const e=n.params.pagination;if(u())return;let t=n.pagination.el;t&&(t=(0,i.m)(t),t.forEach((t=>{t.classList.remove(e.hiddenClass),t.classList.remove(e.modifierClass+e.type),t.classList.remove(n.isHorizontal()?e.horizontalClass:e.verticalClass),e.clickable&&(t.classList.remove(...(e.clickableClass||"").split(" ")),t.removeEventListener("click",h))}))),n.pagination.bullets&&n.pagination.bullets.forEach((n=>n.classList.remove(...e.bulletActiveClass.split(" "))))}s("changeDirection",(()=>{if(!n.pagination||!n.pagination.el)return;const e=n.params.pagination;let{el:t}=n.pagination;t=(0,i.m)(t),t.forEach((t=>{t.classList.remove(e.horizontalClass,e.verticalClass),t.classList.add(n.isHorizontal()?e.horizontalClass:e.verticalClass)}))})),s("init",(()=>{!1===n.params.pagination.enabled?_():(g(),v(),m())})),s("activeIndexChange",(()=>{void 0===n.snapIndex&&m()})),s("snapIndexChange",(()=>{m()})),s("snapGridLengthChange",(()=>{v(),m()})),s("destroy",(()=>{f()})),s("enable disable",(()=>{let{el:e}=n.pagination;e&&(e=(0,i.m)(e),e.forEach((e=>e.classList[n.enabled?"remove":"add"](n.params.pagination.lockClass))))})),s("lock unlock",(()=>{m()})),s("click",((e,t)=>{const s=t.target,r=(0,i.m)(n.pagination.el);if(n.params.pagination.el&&n.params.pagination.hideOnClick&&r&&r.length>0&&!s.classList.contains(n.params.pagination.bulletClass)){if(n.navigation&&(n.navigation.nextEl&&s===n.navigation.nextEl||n.navigation.prevEl&&s===n.navigation.prevEl))return;const e=r[0].classList.contains(n.params.pagination.hiddenClass);a(!0===e?"paginationShow":"paginationHide"),r.forEach((e=>e.classList.toggle(n.params.pagination.hiddenClass)))}}));const _=()=>{n.el.classList.add(n.params.pagination.paginationDisabledClass);let{el:e}=n.pagination;e&&(e=(0,i.m)(e),e.forEach((e=>e.classList.add(n.params.pagination.paginationDisabledClass)))),f()};Object.assign(n.pagination,{enable:()=>{n.el.classList.remove(n.params.pagination.paginationDisabledClass);let{el:e}=n.pagination;e&&(e=(0,i.m)(e),e.forEach((e=>e.classList.remove(n.params.pagination.paginationDisabledClass)))),g(),v(),m()},disable:_,render:v,update:m,init:g,destroy:f})}function d(e){let{swiper:n,extendParams:t,on:a}=e;t({thumbs:{swiper:null,multipleActiveThumbs:!0,autoScrollOffset:0,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-thumbs"}});let r=!1,o=!1;function l(){const e=n.thumbs.swiper;if(!e||e.destroyed)return;const t=e.clickedIndex,s=e.clickedSlide;if(s&&s.classList.contains(n.params.thumbs.slideThumbActiveClass))return;if(null==t)return;let i;i=e.params.loop?parseInt(e.clickedSlide.getAttribute("data-swiper-slide-index"),10):t,n.params.loop?n.slideToLoop(i):n.slideTo(i)}function c(){const{thumbs:e}=n.params;if(r)return!1;r=!0;const t=n.constructor;if(e.swiper instanceof t)n.thumbs.swiper=e.swiper,Object.assign(n.thumbs.swiper.originalParams,{watchSlidesProgress:!0,slideToClickedSlide:!1}),Object.assign(n.thumbs.swiper.params,{watchSlidesProgress:!0,slideToClickedSlide:!1}
2),n.thumbs.swiper.update();else if((0,i.l)(e.swiper)){const s=Object.assign({},e.swiper);Object.assign(s,{watchSlidesProgress:!0,slideToClickedSlide:!1}),n.thumbs.swiper=new t(s),o=!0}return n.thumbs.swiper.el.classList.add(n.params.thumbs.thumbsContainerClass),n.thumbs.swiper.on("tap",l),!0}function d(e){const t=n.thumbs.swiper;if(!t||t.destroyed)return;const s="auto"===t.params.slidesPerView?t.slidesPerViewDynamic():t.params.slidesPerView;let a=1;const r=n.params.thumbs.slideThumbActiveClass;if(n.params.slidesPerView>1&&!n.params.centeredSlides&&(a=n.params.slidesPerView),n.params.thumbs.multipleActiveThumbs||(a=1),a=Math.floor(a),t.slides.forEach((e=>e.classList.remove(r))),t.params.loop||t.params.virtual&&t.params.virtual.enabled)for(let e=0;e<a;e+=1)(0,i.e)(t.slidesEl,`[data-swiper-slide-index="${n.realIndex+e}"]`).forEach((e=>{e.classList.add(r)}));else for(let e=0;e<a;e+=1)t.slides[n.realIndex+e]&&t.slides[n.realIndex+e].classList.add(r);const o=n.params.thumbs.autoScrollOffset,l=o&&!t.params.loop;if(n.realIndex!==t.realIndex||l){const i=t.activeIndex;let a,r;if(t.params.loop){const e=t.slides.filter((e=>e.getAttribute("data-swiper-slide-index")===`${n.realIndex}`))[0];a=t.slides.indexOf(e),r=n.activeIndex>n.previousIndex?"next":"prev"}else a=n.realIndex,r=a>n.previousIndex?"next":"prev";l&&(a+="next"===r?o:-1*o),t.visibleSlidesIndexes&&t.visibleSlidesIndexes.indexOf(a)<0&&(t.params.centeredSlides?a=a>i?a-Math.floor(s/2)+1:a+Math.floor(s/2)-1:a>i&&t.params.slidesPerGroup,t.slideTo(a,e?0:void 0))}}n.thumbs={swiper:null},a("beforeInit",(()=>{const{thumbs:e}=n.params;if(e&&e.swiper)if("string"==typeof e.swiper||e.swiper instanceof HTMLElement){const t=(0,s.g)(),i=()=>{const s="string"==typeof e.swiper?t.querySelector(e.swiper):e.swiper;if(s&&s.swiper)e.swiper=s.swiper,c(),d(!0);else if(s){const t=`${n.params.eventsPrefix}init`,i=a=>{e.swiper=a.detail[0],s.removeEventListener(t,i),c(),d(!0),e.swiper.update(),n.update()};s.addEventListener(t,i)}return s},a=()=>{n.destroyed||i()||requestAnimationFrame(a)};requestAnimationFrame(a)}else c(),d(!0)})),a("slideChange update resize observerUpdate",(()=>{d()})),a("setTransition",((e,t)=>{const s=n.thumbs.swiper;s&&!s.destroyed&&s.setTransition(t)})),a("beforeDestroy",(()=>{const e=n.thumbs.swiper;e&&!e.destroyed&&o&&e.destroy()})),Object.assign(n.thumbs,{init:c,update:d})}function u(e,n){const t=(0,i.g)(n);return t!==n&&(t.style.backfaceVisibility="hidden",t.style["-webkit-backface-visibility"]="hidden"),t}function p(e){let{swiper:n,extendParams:t,on:s}=e;t({fadeEffect:{crossFade:!1}}),function(e){const{effect:n,swiper:t,on:s,setTranslate:i,setTransition:a,overwriteParams:r,perspective:o,recreateShadows:l,getEffectParams:c}=e;let d;s("beforeInit",(()=>{if(t.params.effect!==n)return;t.classNames.push(`${t.params.containerModifierClass}${n}`),o&&o()&&t.classNames.push(`${t.params.containerModifierClass}3d`);const e=r?r():{};Object.assign(t.params,e),Object.assign(t.originalParams,e)})),s("setTranslate",(()=>{t.params.effect===n&&i()})),s("setTransition",((e,s)=>{t.params.effect===n&&a(s)})),s("transitionEnd",(()=>{if(t.params.effect===n&&l){if(!c||!c().slideShadows)return;t.slides.forEach((e=>{e.querySelectorAll(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").forEach((e=>e.remove()))})),l()}})),s("virtualUpdate",(()=>{t.params.effect===n&&(t.slides.length||(d=!0),requestAnimationFrame((()=>{d&&t.slides&&t.slides.length&&(i(),d=!1)})))}))}({effect:"fade",swiper:n,on:s,setTranslate:()=>{const{slides:e}=n;n.params.fadeEffect;for(let t=0;t<e.length;t+=1){const e=n.slides[t];let s=-e.swiperSlideOffset;n.params.virtualTranslate||(s-=n.translate);let i=0;n.isHorizontal()||(i=s,s=0);const a=n.params.fadeEffect.crossFade?Math.max(1-Math.abs(e.progress),0):1+Math.min(Math.max(e.progress,-1),0),r=u(0,e);r.style.opacity=a,r.style.transform=`translate3d(${s}px, ${i}px, 0px)`}},setTransition:e=>{const t=n.slides.map((e=>(0,i.g)(e)));t.forEach((n=>{n.style.transitionDuration=`${e}ms`})),function(e){let{swiper:n,duration:t,transformElements:s,allSlides:a}=e;const{activeIndex:r}=n;if(n.params.virtualTranslate&&0!==t){let e,t=!1;e=a?s:s.filter((e=>{const t=e.classList.contains("swiper-slide-transform")?(e=>e.parentElement?e.parentElement:n.slides.filter((n=>n.shadowRoot&&n.shadowRoot===e.parentNode))[0])(e):e;return n.getSlideIndex(t)===r})),e.forEach((e=>{(0,i.k)(e,(()=>{if(t)return;if(!n||n.destroyed)return;t=!0,n.animating=!1;const e=new window.CustomEvent("transitionend",{bubbles:!0,cancelable:!0});
2n.wrapperEl.dispatchEvent(e)}))}))}}({swiper:n,duration:e,transformElements:t,allSlides:!0})},overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!n.params.cssMode})})}},9624:(e,n,t)=>{"use strict";function s(e){return null!==e&&"object"==typeof e&&"constructor"in e&&e.constructor===Object}function i(e,n){void 0===e&&(e={}),void 0===n&&(n={}),Object.keys(n).forEach((t=>{void 0===e[t]?e[t]=n[t]:s(n[t])&&s(e[t])&&Object.keys(n[t]).length>0&&i(e[t],n[t])}))}t.d(n,{a:()=>l,g:()=>r});const a={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:""},querySelector:()=>null,querySelectorAll:()=>[],getElementById:()=>null,createEvent:()=>({initEvent(){}}),createElement:()=>({children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName:()=>[]}),createElementNS:()=>({}),importNode:()=>null,location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function r(){const e="undefined"!=typeof document?document:{};return i(e,a),e}const o={document:a,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle:()=>({getPropertyValue:()=>""}),Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia:()=>({}),requestAnimationFrame:e=>"undefined"==typeof setTimeout?(e(),null):setTimeout(e,0),cancelAnimationFrame(e){"undefined"!=typeof setTimeout&&clearTimeout(e)}};function l(){const e="undefined"!=typeof window?window:{};return i(e,o),e}},5261:(e,n,t)=>{"use strict";t.d(n,{a:()=>w,c:()=>g,d:()=>r,e:()=>h,f:()=>T,g:()=>p,h:()=>y,j:()=>o,k:()=>k,l:()=>l,m:()=>E,n:()=>a,p:()=>b,q:()=>_,r:()=>f,s:()=>d,t:()=>u,u:()=>v,v:()=>m,w:()=>c,x:()=>i});var s=t(9624);function i(e){const n=e;Object.keys(n).forEach((e=>{try{n[e]=null}catch(e){}try{delete n[e]}catch(e){}}))}function a(e,n){return void 0===n&&(n=0),setTimeout(e,n)}function r(){return Date.now()}function o(e,n){void 0===n&&(n="x");const t=(0,s.a)();let i,a,r;const o=function(e){const n=(0,s.a)();let t;return n.getComputedStyle&&(t=n.getComputedStyle(e,null)),!t&&e.currentStyle&&(t=e.currentStyle),t||(t=e.style),t}(e);return t.WebKitCSSMatrix?(a=o.transform||o.webkitTransform,a.split(",").length>6&&(a=a.split(", ").map((e=>e.replace(",","."))).join(", ")),r=new t.WebKitCSSMatrix("none"===a?"":a)):(r=o.MozTransform||o.OTransform||o.MsTransform||o.msTransform||o.transform||o.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),i=r.toString().split(",")),"x"===n&&(a=t.WebKitCSSMatrix?r.m41:16===i.length?parseFloat(i[12]):parseFloat(i[4])),"y"===n&&(a=t.WebKitCSSMatrix?r.m42:16===i.length?parseFloat(i[13]):parseFloat(i[5])),a||0}function l(e){return"object"==typeof e&&null!==e&&e.constructor&&"Object"===Object.prototype.toString.call(e).slice(8,-1)}function c(){const e=Object(arguments.length<=0?void 0:arguments[0]),n=["__proto__","constructor","prototype"];for(let s=1;s<arguments.length;s+=1){const i=s<0||arguments.length<=s?void 0:arguments[s];if(null!=i&&(t=i,!("undefined"!=typeof window&&void 0!==window.HTMLElement?t instanceof HTMLElement:t&&(1===t.nodeType||11===t.nodeType)))){const t=Object.keys(Object(i)).filter((e=>n.indexOf(e)<0));for(let n=0,s=t.length;n<s;n+=1){const s=t[n],a=Object.getOwnPropertyDescriptor(i,s);void 0!==a&&a.enumerable&&(l(e[s])&&l(i[s])?i[s].__swiper__?e[s]=i[s]:c(e[s],i[s]):!l(e[s])&&l(i[s])?(e[s]={},i[s].__swiper__?e[s]=i[s]:c(e[s],i[s])):e[s]=i[s])}}}var t;return e}function d(e,n,t){e.style.setProperty(n,t)}function u(e){let{swiper:n,targetPosition:t,side:i}=e;const a=(0,s.a)(),r=-n.translate;let o,l=null;const c=n.params.speed;n.wrapperEl.style.scrollSnapType="none",a.cancelAnimationFrame(n.cssModeFrameID);const d=t>r?"next":"prev",u=(e,n)=>"next"===d&&e>=n||"prev"===d&&e<=n,p=()=>{o=(new Date).getTime(),null===l&&(l=o);const e=Math.max(Math.min((o-l)/c,1),0),s=.5-Math.cos(e*Math.PI)/2;let d=r+s*(t-r);if(u(d,t)&&(d=t),n.wrapperEl.scrollTo({[i]:d}),u(d,t))return n.wrapperEl.style.overflow="hidden",n.wrapperEl.style.scrollSnapType="",setTimeout((()=>{n.wrapperEl.style.overflow="",n.wrapperEl.scrollTo({[i]:d})})),void a.cancelAnimationFrame(n.cssModeFrameID);n.cssModeFrameID=a.requestAnimationFrame(p)};p()}function p(e){return e.querySelector(".swiper-slide-transform")||e.shadowRoot&&e.shadowRoot.querySelector(".swiper-slide-transform")||e}function h(e,n){void 0===n&&(n="");const t=[...e.children];return e instanceof HTMLSlotElement&&t.push(...e.assignedElements()),n?t.filter((e=>e.matches(n))):t}function m(e,n){const t=n.contains(e);return!t&&n instanceof HTMLSlotElement?[...n.assignedElements()].includes(e):t}function v(e){try{return void console.warn(e)}catch(e){}}function g(e,n){void 0===n&&(n=[]);const t=document.createElement(e);return t.classList.add(...Array.isArray(n)?n:function(e){return void 0===e&&(e=""),e.trim().split(" ").filter((e=>!!e.trim()))}(n)),t}function f(e,n){const t=[];for(;e.previousElementSibling;){const s=e.previousElementSibling;n?s.matches(n)&&t.push(s):t.push(s),e=s}return t}function _(e,n){const t=[];for(;e.nextElementSibling;){const s=e.nextElementSibling;n?s.matches(n)&&t.push(s):t.push(s),e=s}return t}function b(e,n){return(0,s.a)().getComputedStyle(e,null).getPropertyValue(n)}function y(e){let n,t=e;if(t){for(n=0;null!==(t=t.previousSibling);)1===t.nodeType&&(n+=1);return n}}function w(e,n){const t=[];let s=e.parentElement;for(;s;)n?s.matches(n)&&t.push(s):t.push(s),s=s.parentElement;return t}function k(e,n){n&&e.addEventListener("transitionend",(function t(s){s.target===e&&(n.call(e,s),e.removeEventListener("transitionend",t))}))}function T(e,n,t){const i=(0,s.a)();return t?e["width"===n?"offsetWidth":"offsetHeight"]+parseFloat(i.getComputedStyle(e,null).getPropertyValue("width"===n?"margin-right":"margin-top"))+parseFloat(i.getComputedStyle(e,null).getPropertyValue("width"===n?"margin-left":"margin-bottom")):e.offsetWidth}function E(e){return(Array.isArray(e)?e:[e]).filter((e=>!!e))}},3703:(e,n,t)=>{"use strict";t.d(n,{A:()=>M});var s=t(9624),i=t(5261);let a,r,o;function l(){return a||(a=function(){const e=(0,s.a)(),n=(0,s.g)();return{smoothScroll:n.documentElement&&n.documentElement.style&&"scrollBehavior"in n.documentElement.style,touch:!!("ontouchstart"in e||e.DocumentTouch&&n instanceof e.DocumentTouch)}}()),a}function c(e){return void 0===e&&(e={}),r||(r=function(e){let{userAgent:n}=void 0===e?{}:e;const t=l(),i=(0,s.a)(),a=i.navigator.platform,r=n||i.navigator.userAgent,o={ios:!1,android:!1},c=i.screen.width,d=i.screen.height,u=r.match(/(Android);?[\s\/]+([\d.]+)?/);let p=r.match(/(iPad).*OS\s([\d_]+)/);const h=r.match(/(iPod)(.*OS\s([\d_]+))?/),m=!p&&r.match(/(iPhone\sOS|iOS)\s([\d_]+)/),v="Win32"===a;let g="MacIntel"===a;return!p&&g&&t.touch&&["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"].indexOf(`${c}x${d}`)>=0&&(p=r.match(/(Version)\/([\d.]+)/),p||(p=[0,1,"13_0_0"]),g=!1),u&&!v&&(o.os="android",o.android=!0),(p||m||h)&&(o.os="ios",o.ios=!0),o}(e)),r}var d={on(e,n,t){const s=this;if(!s.eventsListeners||s.destroyed)return s;if("function"!=typeof n)return s;const i=t?"unshift":"push";return e.split(" ").forEach((e=>{s.eventsListeners[e]||(s.eventsListeners[e]=[]),s.eventsListeners[e][i](n)})),s},once(e,n,t){const s=this;if(!s.eventsListeners||s.destroyed)return s;if("function"!=typeof n)return s;function i(){s.off(e,i),i.__emitterProxy&&delete i.__emitterProxy;for(var t=arguments.length,a=new Array(t),r=0;r<t;r++)a[r]=arguments[r];n.apply(s,a)}return i.__emitterProxy=n,s.on(e,i,t)},onAny(e,n){const t=this;if(!t.eventsListeners||t.destroyed)return t;if("function"!=typeof e)return t;const s=n?"unshift":"push";return t.eventsAnyListeners.indexOf(e)<0&&t.eventsAnyListeners[s](e),t},offAny(e){const n=this;if(!n.eventsListeners||n.destroyed)return n;if(!n.eventsAnyListeners)return n;const t=n.eventsAnyListeners.indexOf(e);return t>=0&&n.eventsAnyListeners.splice(t,1),n},off(e,n){const t=this;return!t.eventsListeners||t.destroyed?t:t.eventsListeners?(e.split(" ").forEach((e=>{void 0===n?t.eventsListeners[e]=[]:t.eventsListeners[e]&&t.eventsListeners[e].forEach(((s,i)=>{(s===n||s.__emitterProxy&&s.__emitterProxy===n)&&t.eventsListeners[e].splice(i,1)}))})),t):t},emit(){const e=this;if(!e.eventsListeners||e.destroyed)return e;if(!e.eventsListeners)return e;let n,t,s;for(var i=arguments.length,a=new Array(i),r=0;r<i;r++)a[r]=arguments[r];return"string"==typeof a[0]||Array.isArray(a[0])?(n=a[0],t=a.slice(1,a.length),s=e):(n=a[0].events,t=a[0].data,s=a[0].context||e),t.unshift(s),(Array.isArray(n)?n:n.split(" ")).forEac
2h((n=>{e.eventsAnyListeners&&e.eventsAnyListeners.length&&e.eventsAnyListeners.forEach((e=>{e.apply(s,[n,...t])})),e.eventsListeners&&e.eventsListeners[n]&&e.eventsListeners[n].forEach((e=>{e.apply(s,t)}))})),e}};const u=(e,n,t)=>{n&&!e.classList.contains(t)?e.classList.add(t):!n&&e.classList.contains(t)&&e.classList.remove(t)},p=(e,n,t)=>{n&&!e.classList.contains(t)?e.classList.add(t):!n&&e.classList.contains(t)&&e.classList.remove(t)},h=(e,n)=>{if(!e||e.destroyed||!e.params)return;const t=n.closest(e.isElement?"swiper-slide":`.${e.params.slideClass}`);if(t){let n=t.querySelector(`.${e.params.lazyPreloaderClass}`);!n&&e.isElement&&(t.shadowRoot?n=t.shadowRoot.querySelector(`.${e.params.lazyPreloaderClass}`):requestAnimationFrame((()=>{t.shadowRoot&&(n=t.shadowRoot.querySelector(`.${e.params.lazyPreloaderClass}`),n&&n.remove())}))),n&&n.remove()}},m=(e,n)=>{if(!e.slides[n])return;const t=e.slides[n].querySelector('[loading="lazy"]');t&&t.removeAttribute("loading")},v=e=>{if(!e||e.destroyed||!e.params)return;let n=e.params.lazyPreloadPrevNext;const t=e.slides.length;if(!t||!n||n<0)return;n=Math.min(n,t);const s="auto"===e.params.slidesPerView?e.slidesPerViewDynamic():Math.ceil(e.params.slidesPerView),i=e.activeIndex;if(e.params.grid&&e.params.grid.rows>1){const t=i,a=[t-n];return a.push(...Array.from({length:n}).map(((e,n)=>t+s+n))),void e.slides.forEach(((n,t)=>{a.includes(n.column)&&m(e,t)}))}const a=i+s-1;if(e.params.rewind||e.params.loop)for(let s=i-n;s<=a+n;s+=1){const n=(s%t+t)%t;(n<i||n>a)&&m(e,n)}else for(let s=Math.max(i-n,0);s<=Math.min(a+n,t-1);s+=1)s!==i&&(s>a||s<i)&&m(e,s)};var g={updateSize:function(){const e=this;let n,t;const s=e.el;n=void 0!==e.params.width&&null!==e.params.width?e.params.width:s.clientWidth,t=void 0!==e.params.height&&null!==e.params.height?e.params.height:s.clientHeight,0===n&&e.isHorizontal()||0===t&&e.isVertical()||(n=n-parseInt((0,i.p)(s,"padding-left")||0,10)-parseInt((0,i.p)(s,"padding-right")||0,10),t=t-parseInt((0,i.p)(s,"padding-top")||0,10)-parseInt((0,i.p)(s,"padding-bottom")||0,10),Number.isNaN(n)&&(n=0),Number.isNaN(t)&&(t=0),Object.assign(e,{width:n,height:t,size:e.isHorizontal()?n:t}))},updateSlides:function(){const e=this;function n(n,t){return parseFloat(n.getPropertyValue(e.getDirectionLabel(t))||0)}const t=e.params,{wrapperEl:s,slidesEl:a,size:r,rtlTranslate:o,wrongRTL:l}=e,c=e.virtual&&t.virtual.enabled,d=c?e.virtual.slides.length:e.slides.length,u=(0,i.e)(a,`.${e.params.slideClass}, swiper-slide`),p=c?e.virtual.slides.length:u.length;let h=[];const m=[],v=[];let g=t.slidesOffsetBefore;"function"==typeof g&&(g=t.slidesOffsetBefore.call(e));let f=t.slidesOffsetAfter;"function"==typeof f&&(f=t.slidesOffsetAfter.call(e));const _=e.snapGrid.length,b=e.slidesGrid.length;let y=t.spaceBetween,w=-g,k=0,T=0;if(void 0===r)return;"string"==typeof y&&y.indexOf("%")>=0?y=parseFloat(y.replace("%",""))/100*r:"string"==typeof y&&(y=parseFloat(y)),e.virtualSize=-y,u.forEach((e=>{o?e.style.marginLeft="":e.style.marginRight="",e.style.marginBottom="",e.style.marginTop=""})),t.centeredSlides&&t.cssMode&&((0,i.s)(s,"--swiper-centered-offset-before",""),(0,i.s)(s,"--swiper-centered-offset-after",""));const E=t.grid&&t.grid.rows>1&&e.grid;let x;E?e.grid.initSlides(u):e.grid&&e.grid.unsetSlides();const S="auto"===t.slidesPerView&&t.breakpoints&&Object.keys(t.breakpoints).filter((e=>void 0!==t.breakpoints[e].slidesPerView)).length>0;for(let s=0;s<p;s+=1){let a;if(x=0,u[s]&&(a=u[s]),E&&e.grid.updateSlide(s,a,u),!u[s]||"none"!==(0,i.p)(a,"display")){if("auto"===t.slidesPerView){S&&(u[s].style[e.getDirectionLabel("width")]="");const r=getComputedStyle(a),o=a.style.transform,l=a.style.webkitTransform;if(o&&(a.style.transform="none"),l&&(a.style.webkitTransform="none"),t.roundLengths)x=e.isHorizontal()?(0,i.f)(a,"width",!0):(0,i.f)(a,"height",!0);else{const e=n(r,"width"),t=n(r,"padding-left"),s=n(r,"padding-right"),i=n(r,"margin-left"),o=n(r,"margin-right"),l=r.getPropertyValue("box-sizing");if(l&&"border-box"===l)x=e+i+o;else{const{clientWidth:n,offsetWidth:r}=a;x=e+t+s+i+o+(r-n)}}o&&(a.style.transform=o),l&&(a.style.webkitTransform=l),t.roundLengths&&(x=Math.floor(x))}else x=(r-(t.slidesPerView-1)*y)/t.slidesPerView,t.roundLengths&&(x=Math.floor(x)),u[s]&&(u[s].style[e.getDirectionLabel("width")]=`${x}
vendor: 6,142 bytes, line 2
2px`);u[s]&&(u[s].swiperSlideSize=x),v.push(x),t.centeredSlides?(w=w+x/2+k/2+y,0===k&&0!==s&&(w=w-r/2-y),0===s&&(w=w-r/2-y),Math.abs(w)<.001&&(w=0),t.roundLengths&&(w=Math.floor(w)),T%t.slidesPerGroup==0&&h.push(w),m.push(w)):(t.roundLengths&&(w=Math.floor(w)),(T-Math.min(e.params.slidesPerGroupSkip,T))%e.params.slidesPerGroup==0&&h.push(w),m.push(w),w=w+x+y),e.virtualSize+=x+y,k=x,T+=1}}if(e.virtualSize=Math.max(e.virtualSize,r)+f,o&&l&&("slide"===t.effect||"coverflow"===t.effect)&&(s.style.width=`${e.virtualSize+y}px`),t.setWrapperSize&&(s.style[e.getDirectionLabel("width")]=`${e.virtualSize+y}px`),E&&e.grid.updateWrapperSize(x,h),!t.centeredSlides){const n=[];for(let s=0;s<h.length;s+=1){let i=h[s];t.roundLengths&&(i=Math.floor(i)),h[s]<=e.virtualSize-r&&n.push(i)}h=n,Math.floor(e.virtualSize-r)-Math.floor(h[h.length-1])>1&&h.push(e.virtualSize-r)}if(c&&t.loop){const n=v[0]+y;if(t.slidesPerGroup>1){const s=Math.ceil((e.virtual.slidesBefore+e.virtual.slidesAfter)/t.slidesPerGroup),i=n*t.slidesPerGroup;for(let e=0;e<s;e+=1)h.push(h[h.length-1]+i)}for(let s=0;s<e.virtual.slidesBefore+e.virtual.slidesAfter;s+=1)1===t.slidesPerGroup&&h.push(h[h.length-1]+n),m.push(m[m.length-1]+n),e.virtualSize+=n}if(0===h.length&&(h=[0]),0!==y){const n=e.isHorizontal()&&o?"marginLeft":e.getDirectionLabel("marginRight");u.filter(((e,n)=>!(t.cssMode&&!t.loop)||n!==u.length-1)).forEach((e=>{e.style[n]=`${y}px`}))}if(t.centeredSlides&&t.centeredSlidesBounds){let e=0;v.forEach((n=>{e+=n+(y||0)})),e-=y;const n=e>r?e-r:0;h=h.map((e=>e<=0?-g:e>n?n+f:e))}if(t.centerInsufficientSlides){let e=0;v.forEach((n=>{e+=n+(y||0)})),e-=y;const n=(t.slidesOffsetBefore||0)+(t.slidesOffsetAfter||0);if(e+n<r){const t=(r-e-n)/2;h.forEach(((e,n)=>{h[n]=e-t})),m.forEach(((e,n)=>{m[n]=e+t}))}}if(Object.assign(e,{slides:u,snapGrid:h,slidesGrid:m,slidesSizesGrid:v}),t.centeredSlides&&t.cssMode&&!t.centeredSlidesBounds){(0,i.s)(s,"--swiper-centered-offset-before",-h[0]+"px"),(0,i.s)(s,"--swiper-centered-offset-after",e.size/2-v[v.length-1]/2+"px");const n=-e.snapGrid[0],t=-e.slidesGrid[0];e.snapGrid=e.snapGrid.map((e=>e+n)),e.slidesGrid=e.slidesGrid.map((e=>e+t))}if(p!==d&&e.emit("slidesLengthChange"),h.length!==_&&(e.params.watchOverflow&&e.checkOverflow(),e.emit("snapGridLengthChange")),m.length!==b&&e.emit("slidesGridLengthChange"),t.watchSlidesProgress&&e.updateSlidesOffset(),e.emit("slidesUpdated"),!(c||t.cssMode||"slide"!==t.effect&&"fade"!==t.effect)){const n=`${t.containerModifierClass}backface-hidden`,s=e.el.classList.contains(n);p<=t.maxBackfaceHiddenSlides?s||e.el.classList.add(n):s&&e.el.classList.remove(n)}},updateAutoHeight:function(e){const n=this,t=[],s=n.virtual&&n.params.virtual.enabled;let i,a=0;"number"==typeof e?n.setTransition(e):!0===e&&n.setTransition(n.params.speed);const r=e=>s?n.slides[n.getSlideIndexByData(e)]:n.slides[e];if("auto"!==n.params.slidesPerView&&n.params.slidesPerView>1)if(n.params.centeredSlides)(n.visibleSlides||[]).forEach((e=>{t.push(e)}));else for(i=0;i<Math.ceil(n.params.slidesPerView);i+=1){const e=n.activeIndex+i;if(e>n.slides.length&&!s)break;t.push(r(e))}else t.push(r(n.activeIndex));for(i=0;i<t.length;i+=1)if(void 0!==t[i]){const e=t[i].offsetHeight;a=e>a?e:a}(a||0===a)&&(n.wrapperEl.style.height=`${a}px`)},updateSlidesOffset:function(){const e=this,n=e.slides,t=e.isElement?e.isHorizontal()?e.wrapperEl.offsetLeft:e.wrapperEl.offsetTop:0;for(let s=0;s<n.length;s+=1)n[s].swiperSlideOffset=(e.isHorizontal()?n[s].offsetLeft:n[s].offsetTop)-t-e.cssOverflowAdjustment()},updateSlidesProgress:function(e){void 0===e&&(e=this&&this.translate||0);const n=this,t=n.params,{slides:s,rtlTranslate:i,snapGrid:a}=n;if(0===s.length)return;void 0===s[0].swiperSlideOffset&&n.updateSlidesOffset();let r=-e;i&&(r=e),n.visibleSlidesIndexes=[],n.visibleSlides=[];let o=t.spaceBetween;"string"==typeof o&&o.indexOf("%")>=0?o=parseFloat(o.replace("%",""))/100*n.size:"string"==typeof o&&(o=parseFloat(o));for(let e=0;e<s.length;e+=1){const l=s[e];let c=l.swiperSlideOffset;t.cssMode&&t.centeredSlides&&(c-=s[0].swiperSlideOffset);const d=(r+(t.centeredSlides?n.minTranslate():0)-c)/(l.swiperSlideSize+o),p=(r-a[0]+(t.centeredSlides?n.minTranslate():0)-c)/(l.swiperSlideSize+o),h=-(r-c),m=h+n.slidesSizesGrid[e],v=h>=0&&h<=n.size-n.slidesSizesGrid[e],g=h>=0&&h<n.size-1||m>1&&m<=n.size||h<=0&&m>=n.size;g&&(n.visibleSlides.push(l),n.visibleSlidesIndexes.push(e)),u(l,g,t.slideVisibleClass),u(l,v,t.slideFullyVisibleClass),l.progress=i?-d:d,l.originalProgress=i?-p:p}},updateProgress:function(e){const n=this;if(void 0===e){const t=n.rtlTranslate?-1:1;e=n&&n.translate&&n.translate*t||0}const t=n.params,s=n.maxTranslate()-n.minTranslate();let{progress:i,isBeginning:a,isEnd:r,progressLoop:o}=n;const l=a,c=r;if(0===s)i=0,a=!0,r=!0;else{i=(e-n.minTranslate())/s;const t=Math.abs(e-n.minTranslate())<1,o=Math.abs(e-n.maxTranslate())<1;a=t||i<=0,r=o||i>=1,t&&(i=0),o&&(i=1)}if(t.loop){const t=n.getSlideIndexByData(0),s=n.getSlideIndexByData(n.slides.length-1),i=n.slidesGrid[t],a=n.slidesGrid[s],r=n.slidesGrid[n.slidesGrid.length-1],l=Math.abs(e);o=l>=i?(l-i)/r:(l+r-a)/r,o>1&&(o-=1)}Object.assign(n,{progress:i,progressLoop:o,isBeginning:a,isEnd:r}),(t.watchSlidesProgress||t.centeredSlides&&t.autoHeight)&&n.updateSlidesProgress(e),a&&!l&&n.emit("reachBeginning toEdge"),r&&!c&&n.emit("reachEnd toEdge"),(l&&!a||c&&!r)&&n.emit("fromEdge"),n.emit("progress",i)},updateSlidesClasses:function(){const e=this,{slides:n,params:t,slidesEl:s,activeIndex:a}=e,r=e.virtual&&t.virtual.enabled,o=e.grid&&t.grid&&t.grid.rows>1,l=e=>(0,i.e)(s,`.${t.slideClass}${e}, swiper-slide${e}`)[0];let c,d,u;if(r)if(t.loop){let n=a-e.virtual.slidesBefore;n<0&&(n=e.virtual.slides.length+n),n>=e.virtual.slides.length&&(n-=e.virtual.slides.length),c=l(`[data-swiper-slide-index="${n}"]`)}else c=l(`[data-swiper-slide-index="${a}"]`);else o?(c=n.filter((e=>e.column===a))[0],u=n.filter((e=>e.column===a+1))[0],d=n.filter((e=>e.column===a-1))[0]):c=n[a];c&&(o||(u=(0,i.q)(c,`.${t.slideClass}, swiper-slide`)[0],t.loop&&!u&&(u=n[0]),d=(0,i.r)(c,`.${t.slideClass}, swiper-slide`)[0],t.loop&&0===!d&&(d=n[n.length-1]))),n.forEac
vendor: 6,385 bytes, line 2
2h((e=>{p(e,e===c,t.slideActiveClass),p(e,e===u,t.slideNextClass),p(e,e===d,t.slidePrevClass)})),e.emitSlidesClasses()},updateActiveIndex:function(e){const n=this,t=n.rtlTranslate?n.translate:-n.translate,{snapGrid:s,params:i,activeIndex:a,realIndex:r,snapIndex:o}=n;let l,c=e;const d=e=>{let t=e-n.virtual.slidesBefore;return t<0&&(t=n.virtual.slides.length+t),t>=n.virtual.slides.length&&(t-=n.virtual.slides.length),t};if(void 0===c&&(c=function(e){const{slidesGrid:n,params:t}=e,s=e.rtlTranslate?e.translate:-e.translate;let i;for(let e=0;e<n.length;e+=1)void 0!==n[e+1]?s>=n[e]&&s<n[e+1]-(n[e+1]-n[e])/2?i=e:s>=n[e]&&s<n[e+1]&&(i=e+1):s>=n[e]&&(i=e);return t.normalizeSlideIndex&&(i<0||void 0===i)&&(i=0),i}(n)),s.indexOf(t)>=0)l=s.indexOf(t);else{const e=Math.min(i.slidesPerGroupSkip,c);l=e+Math.floor((c-e)/i.slidesPerGroup)}if(l>=s.length&&(l=s.length-1),c===a&&!n.params.loop)return void(l!==o&&(n.snapIndex=l,n.emit("snapIndexChange")));if(c===a&&n.params.loop&&n.virtual&&n.params.virtual.enabled)return void(n.realIndex=d(c));const u=n.grid&&i.grid&&i.grid.rows>1;let p;if(n.virtual&&i.virtual.enabled&&i.loop)p=d(c);else if(u){const e=n.slides.filter((e=>e.column===c))[0];let t=parseInt(e.getAttribute("data-swiper-slide-index"),10);Number.isNaN(t)&&(t=Math.max(n.slides.indexOf(e),0)),p=Math.floor(t/i.grid.rows)}else if(n.slides[c]){const e=n.slides[c].getAttribute("data-swiper-slide-index");p=e?parseInt(e,10):c}else p=c;Object.assign(n,{previousSnapIndex:o,snapIndex:l,previousRealIndex:r,realIndex:p,previousIndex:a,activeIndex:c}),n.initialized&&v(n),n.emit("activeIndexChange"),n.emit("snapIndexChange"),(n.initialized||n.params.runCallbacksOnInit)&&(r!==p&&n.emit("realIndexChange"),n.emit("slideChange"))},updateClickedSlide:function(e,n){const t=this,s=t.params;let i=e.closest(`.${s.slideClass}, swiper-slide`);!i&&t.isElement&&n&&n.length>1&&n.includes(e)&&[...n.slice(n.indexOf(e)+1,n.length)].forEach((e=>{!i&&e.matches&&e.matches(`.${s.slideClass}, swiper-slide`)&&(i=e)}));let a,r=!1;if(i)for(let e=0;e<t.slides.length;e+=1)if(t.slides[e]===i){r=!0,a=e;break}if(!i||!r)return t.clickedSlide=void 0,void(t.clickedIndex=void 0);t.clickedSlide=i,t.virtual&&t.params.virtual.enabled?t.clickedIndex=parseInt(i.getAttribute("data-swiper-slide-index"),10):t.clickedIndex=a,s.slideToClickedSlide&&void 0!==t.clickedIndex&&t.clickedIndex!==t.activeIndex&&t.slideToClickedSlide()}};function f(e){let{swiper:n,runCallbacks:t,direction:s,step:i}=e;const{activeIndex:a,previousIndex:r}=n;let o=s;if(o||(o=a>r?"next":a<r?"prev":"reset"),n.emit(`transition${i}`),t&&a!==r){if("reset"===o)return void n.emit(`slideResetTransition${i}`);n.emit(`slideChangeTransition${i}`),"next"===o?n.emit(`slideNextTransition${i}`):n.emit(`slidePrevTransition${i}`)}}var _={slideTo:function(e,n,t,s,a){void 0===e&&(e=0),void 0===t&&(t=!0),"string"==typeof e&&(e=parseInt(e,10));const r=this;let o=e;o<0&&(o=0);const{params:l,snapGrid:c,slidesGrid:d,previousIndex:u,activeIndex:p,rtlTranslate:h,wrapperEl:m,enabled:v}=r;if(!v&&!s&&!a||r.destroyed||r.animating&&l.preventInteractionOnTransition)return!1;void 0===n&&(n=r.params.speed);const g=Math.min(r.params.slidesPerGroupSkip,o);let f=g+Math.floor((o-g)/r.params.slidesPerGroup);f>=c.length&&(f=c.length-1);const _=-c[f];if(l.normalizeSlideIndex)for(let e=0;e<d.length;e+=1){const n=-Math.floor(100*_),t=Math.floor(100*d[e]),s=Math.floor(100*d[e+1]);void 0!==d[e+1]?n>=t&&n<s-(s-t)/2?o=e:n>=t&&n<s&&(o=e+1):n>=t&&(o=e)}if(r.initialized&&o!==p){if(!r.allowSlideNext&&(h?_>r.translate&&_>r.minTranslate():_<r.translate&&_<r.minTranslate()))return!1;if(!r.allowSlidePrev&&_>r.translate&&_>r.maxTranslate()&&(p||0)!==o)return!1}let b;o!==(u||0)&&t&&r.emit("beforeSlideChangeStart"),r.updateProgress(_),b=o>p?"next":o<p?"prev":"reset";const y=r.virtual&&r.params.virtual.enabled;if((!y||!a)&&(h&&-_===r.translate||!h&&_===r.translate))return r.updateActiveIndex(o),l.autoHeight&&r.updateAutoHeight(),r.updateSlidesClasses(),"slide"!==l.effect&&r.setTranslate(_),"reset"!==b&&(r.transitionStart(t,b),r.transitionEnd(t,b)),!1;if(l.cssMode){const e=r.isHorizontal(),t=h?_:-_;if(0===n)y&&(r.wrapperEl.style.scrollSnapType="none",r._immediateVirtual=!0),y&&!r._cssModeVirtualInitialSet&&r.params.initialSlide>0?(r._cssModeVirtualInitialSet=!0,requestAnimationFrame((()=>{m[e?"scrollLeft":"scrollTop"]=t}))):m[e?"scrollLeft":"scrollTop"]=t,y&&requestAnimationFrame((()=>{r.wrapperEl.style.scrollSnapType="",r._immediateVirtual=!1}));else{if(!r.support.smoothScroll)return(0,i.t)({swiper:r,targetPosition:t,side:e?"left":"top"}),!0;m.scrollTo({[e?"left":"top"]:t,behavior:"smooth"})}return!0}return r.setTransition(n),r.setTranslate(_),r.updateActiveIndex(o),r.updateSlidesClasses(),r.emit("beforeTransitionStart",n,s),r.transitionStart(t,b),0===n?r.transitionEnd(t,b):r.animating||(r.animating=!0,r.onSlideToWrapperTransitionEnd||(r.onSlideToWrapperTransitionEnd=function(e){r&&!r.destroyed&&e.target===this&&(r.wrapperEl.removeEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.onSlideToWrapperTransitionEnd=null,delete r.onSlideToWrapperTransitionEnd,r.transitionEnd(t,b))}),r.wrapperEl.addEventListener("transitionend",r.onSlideToWrapperTransitionEnd)),!0},slideToLoop:function(e,n,t,s){void 0===e&&(e=0),void 0===t&&(t=!0),"string"==typeof e&&(e=parseInt(e,10));const i=this;if(i.destroyed)return;void 0===n&&(n=i.params.speed);const a=i.grid&&i.params.grid&&i.params.grid.rows>1;let r=e;if(i.params.loop)if(i.virtual&&i.params.virtual.enabled)r+=i.virtual.slidesBefore;else{let e;if(a){const n=r*i.params.grid.rows;e=i.slides.filter((e=>1*e.getAttribute("data-swiper-slide-index")===n))[0].column}else e=i.getSlideIndexByData(r);const n=a?Math.ceil(i.slides.length/i.params.grid.rows):i.slides.length,{centeredSlides:t}=i.params;let o=i.params.slidesPerView;"auto"===o?o=i.slidesPerViewDynamic():(o=Math.ceil(parseFloat(i.params.slidesPerView,10)),t&&o%2==0&&(o+=1));let l=n-e<o;if(t&&(l=l||e<Math.ceil(o/2)),s&&t&&"auto"!==i.params.slidesPerView&&!a&&(l=!1),l){const s=t?e<i.activeIndex?"prev":"next":e-i.activeIndex-1<i.params.slidesPerView?"next":"prev";i.loopFix({direction:s,slideTo:!0,activeSlideIndex:"next"===s?e+1:e-n+1,slideRealIndex:"next"===s?i.realIndex:void 0})}if(a){const e=r*i.params.grid.rows;r=i.slides.filter((n=>1*n.getAttribute("data-swiper-slide-index")===e))[0].column}else r=i.getSlideIndexByData(r)}
2return requestAnimationFrame((()=>{i.slideTo(r,n,t,s)})),i},slideNext:function(e,n,t){void 0===n&&(n=!0);const s=this,{enabled:i,params:a,animating:r}=s;if(!i||s.destroyed)return s;void 0===e&&(e=s.params.speed);let o=a.slidesPerGroup;"auto"===a.slidesPerView&&1===a.slidesPerGroup&&a.slidesPerGroupAuto&&(o=Math.max(s.slidesPerViewDynamic("current",!0),1));const l=s.activeIndex<a.slidesPerGroupSkip?1:o,c=s.virtual&&a.virtual.enabled;if(a.loop){if(r&&!c&&a.loopPreventsSliding)return!1;if(s.loopFix({direction:"next"}),s._clientLeft=s.wrapperEl.clientLeft,s.activeIndex===s.slides.length-1&&a.cssMode)return requestAnimationFrame((()=>{s.slideTo(s.activeIndex+l,e,n,t)})),!0}return a.rewind&&s.isEnd?s.slideTo(0,e,n,t):s.slideTo(s.activeIndex+l,e,n,t)},slidePrev:function(e,n,t){void 0===n&&(n=!0);const s=this,{params:i,snapGrid:a,slidesGrid:r,rtlTranslate:o,enabled:l,animating:c}=s;if(!l||s.destroyed)return s;void 0===e&&(e=s.params.speed);const d=s.virtual&&i.virtual.enabled;if(i.loop){if(c&&!d&&i.loopPreventsSliding)return!1;s.loopFix({direction:"prev"}),s._clientLeft=s.wrapperEl.clientLeft}function u(e){return e<0?-Math.floor(Math.abs(e)):Math.floor(e)}const p=u(o?s.translate:-s.translate),h=a.map((e=>u(e)));let m=a[h.indexOf(p)-1];if(void 0===m&&i.cssMode){let e;a.forEach(((n,t)=>{p>=n&&(e=t)})),void 0!==e&&(m=a[e>0?e-1:e])}let v=0;if(void 0!==m&&(v=r.indexOf(m),v<0&&(v=s.activeIndex-1),"auto"===i.slidesPerView&&1===i.slidesPerGroup&&i.slidesPerGroupAuto&&(v=v-s.slidesPerViewDynamic("previous",!0)+1,v=Math.max(v,0))),i.rewind&&s.isBeginning){const i=s.params.virtual&&s.params.virtual.enabled&&s.virtual?s.virtual.slides.length-1:s.slides.length-1;return s.slideTo(i,e,n,t)}return i.loop&&0===s.activeIndex&&i.cssMode?(requestAnimationFrame((()=>{s.slideTo(v,e,n,t)})),!0):s.slideTo(v,e,n,t)},slideReset:function(e,n,t){void 0===n&&(n=!0);const s=this;if(!s.destroyed)return void 0===e&&(e=s.params.speed),s.slideTo(s.activeIndex,e,n,t)},slideToClosest:function(e,n,t,s){void 0===n&&(n=!0),void 0===s&&(s=.5);const i=this;if(i.destroyed)return;void 0===e&&(e=i.params.speed);let a=i.activeIndex;const r=Math.min(i.params.slidesPerGroupSkip,a),o=r+Math.floor((a-r)/i.params.slidesPerGroup),l=i.rtlTranslate?i.translate:-i.translate;if(l>=i.snapGrid[o]){const e=i.snapGrid[o];l-e>(i.snapGrid[o+1]-e)*s&&(a+=i.params.slidesPerGroup)}else{const e=i.snapGrid[o-1];l-e<=(i.snapGrid[o]-e)*s&&(a-=i.params.slidesPerGroup)}return a=Math.max(a,0),a=Math.min(a,i.slidesGrid.length-1),i.slideTo(a,e,n,t)},slideToClickedSlide:function(){const e=this;if(e.destroyed)return;const{params:n,slidesEl:t}=e,s="auto"===n.slidesPerView?e.slidesPerViewDynamic():n.slidesPerView;let a,r=e.clickedIndex;const o=e.isElement?"swiper-slide":`.${n.slideClass}`;if(n.loop){if(e.animating)return;a=parseInt(e.clickedSlide.getAttribute("data-swiper-slide-index"),10),n.centeredSlides?r<e.loopedSlides-s/2||r>e.slides.length-e.loopedSlides+s/2?(e.loopFix(),r=e.getSlideIndex((0,i.e)(t,`${o}[data-swiper-slide-index="${a}"]`)[0]),(0,i.n)((()=>{e.slideTo(r)}))):e.slideTo(r):r>e.slides.length-s?(e.loopFix(),r=e.getSlideIndex((0,i.e)(t,`${o}[data-swiper-slide-index="${a}"]`)[0]),(0,i.n)((()=>{e.slideTo(r)}))):e.slideTo(r)}else e.slideTo(r)}},b={loopCreate:function(e){const n=this,{params:t,slidesEl:s}=n;if(!t.loop||n.virtual&&n.params.virtual.enabled)return;const a=()=>{(0,i.e)(s,`.${t.slideClass}, swiper-slide`).forEach(((e,n)=>{e.setAttribute("data-swiper-slide-index",n)}))},r=n.grid&&t.grid&&t.grid.rows>1,o=t.slidesPerGroup*(r?t.grid.rows:1),l=n.slides.length%o!=0,c=r&&n.slides.length%t.grid.rows!=0,d=e=>{for(let s=0;s<e;s+=1){const e=n.isElement?(0,i.c)("swiper-slide",[t.slideBlankClass]):(0,i.c)("div",[t.slideClass,t.slideBlankClass]);n.slidesEl.append(e)}};l?(t.loopAddBlankSlides?(d(o-n.slides.length%o),n.recalcSlides(),n.updateSlides()):(0,i.u)("Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)"),a()):c?(t.loopAddBlankSlides?(d(t.grid.rows-n.slides.length%t.grid.rows),n.recalcSlides(),n.updateSlides()):(0,i.u)("Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may 
2not function properly. You need to add more slides (or make duplicates, or empty slides)"),a()):a(),n.loopFix({slideRealIndex:e,direction:t.centeredSlides?void 0:"next"})},loopFix:function(e){let{slideRealIndex:n,slideTo:t=!0,direction:s,setTranslate:a,activeSlideIndex:r,byController:o,byMousewheel:l}=void 0===e?{}:e;const c=this;if(!c.params.loop)return;c.emit("beforeLoopFix");const{slides:d,allowSlidePrev:u,allowSlideNext:p,slidesEl:h,params:m}=c,{centeredSlides:v}=m;if(c.allowSlidePrev=!0,c.allowSlideNext=!0,c.virtual&&m.virtual.enabled)return t&&(m.centeredSlides||0!==c.snapIndex?m.centeredSlides&&c.snapIndex<m.slidesPerView?c.slideTo(c.virtual.slides.length+c.snapIndex,0,!1,!0):c.snapIndex===c.snapGrid.length-1&&c.slideTo(c.virtual.slidesBefore,0,!1,!0):c.slideTo(c.virtual.slides.length,0,!1,!0)),c.allowSlidePrev=u,c.allowSlideNext=p,void c.emit("loopFix");let g=m.slidesPerView;"auto"===g?g=c.slidesPerViewDynamic():(g=Math.ceil(parseFloat(m.slidesPerView,10)),v&&g%2==0&&(g+=1));const f=m.slidesPerGroupAuto?g:m.slidesPerGroup;let _=f;_%f!=0&&(_+=f-_%f),_+=m.loopAdditionalSlides,c.loopedSlides=_;const b=c.grid&&m.grid&&m.grid.rows>1;d.length<g+_?(0,i.u)("Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters"):b&&"row"===m.grid.fill&&(0,i.u)("Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`");const y=[],w=[];let k=c.activeIndex;void 0===r?r=c.getSlideIndex(d.filter((e=>e.classList.contains(m.slideActiveClass)))[0]):k=r;const T="next"===s||!s,E="prev"===s||!s;let x=0,S=0;const A=b?Math.ceil(d.length/m.grid.rows):d.length,L=(b?d[r].column:r)+(v&&void 0===a?-g/2+.5:0);if(L<_){x=Math.max(_-L,f);for(let e=0;e<_-L;e+=1){const n=e-Math.floor(e/A)*A;if(b){const e=A-n-1;for(let n=d.length-1;n>=0;n-=1)d[n].column===e&&y.push(n)}else y.push(A-n-1)}}else if(L+g>A-_){S=Math.max(L-(A-2*_),f);for(let e=0;e<S;e+=1){const n=e-Math.floor(e/A)*A;b?d.forEach(((e,t)=>{e.column===n&&w.push(t)})):w.push(n)}}if(c.__preventObserver__=!0,requestAnimationFrame((()=>{c.__preventObserver__=!1})),E&&y.forEach((e=>{d[e].swiperLoopMoveDOM=!0,h.prepend(d[e]),d[e].swiperLoopMoveDOM=!1})),T&&w.forEach((e=>{d[e].swiperLoopMoveDOM=!0,h.append(d[e]),d[e].swiperLoopMoveDOM=!1})),c.recalcSlides(),"auto"===m.slidesPerView?c.updateSlides():b&&(y.length>0&&E||w.length>0&&T)&&c.slides.forEach(((e,n)=>{c.grid.updateSlide(n,e,c.slides)})),m.watchSlidesProgress&&c.updateSlidesOffset(),t)if(y.length>0&&E){if(void 0===n){const e=c.slidesGrid[k],n=c.slidesGrid[k+x]-e;l?c.setTranslate(c.translate-n):(c.slideTo(k+Math.ceil(x),0,!1,!0),a&&(c.touchEventsData.startTranslate=c.touchEventsData.startTranslate-n,c.touchEventsData.currentTranslate=c.touchEventsData.currentTranslate-n))}else if(a){const e=b?y.length/m.grid.rows:y.length;c.slideTo(c.activeIndex+e,0,!1,!0),c.touchEventsData.currentTranslate=c.translate}}else if(w.length>0&&T)if(void 0===n){const e=c.slidesGrid[k],n=c.slidesGrid[k-S]-e;l?c.setTranslate(c.translate-n):(c.slideTo(k-S,0,!1,!0),a&&(c.touchEventsData.startTranslate=c.touchEventsData.startTranslate-n,c.touchEventsData.currentTranslate=c.touchEventsData.currentTranslate-n))}else{const e=b?w.length/m.grid.rows:w.length;c.slideTo(c.activeIndex-e,0,!1,!0)}if(c.allowSlidePrev=u,c.allowSlideNext=p,c.controller&&c.controller.control&&!o){const e={slideRealIndex:n,direction:s,setTranslate:a,activeSlideIndex:r,byController:!0};Array.isArray(c.controller.control)?c.controller.control.forEach((n=>{!n.destroyed&&n.params.loop&&n.loopFix({...e,slideTo:n.params.slidesPerView===m.slidesPerView&&t})})):c.controller.control instanceof c.constructor&&c.controller.control.params.loop&&c.controller.control.loopFix({...e,slideTo:c.controller.control.params.slidesPerView===m.slidesPerView&&t})}c.emit("loopFix")},loopDestroy:function(){const e=this,{params:n,slidesEl:t}=e;if(!n.loop||e.virtual&&e.params.virtual.enabled)return;e.recalcSlides();const s=[];e.slides.forEach((e=>{const n=void 0===e.swiperSlideIndex?1*e.getAttribute("data-swiper-slide-index"):e.swiperSlideIndex;s[n]=e}
vendor: 5,454 bytes, line 2
2)),e.slides.forEach((e=>{e.removeAttribute("data-swiper-slide-index")})),s.forEach((e=>{t.append(e)})),e.recalcSlides(),e.slideTo(e.realIndex,0)}};function y(e,n,t){const i=(0,s.a)(),{params:a}=e,r=a.edgeSwipeDetection,o=a.edgeSwipeThreshold;return!r||!(t<=o||t>=i.innerWidth-o)||"prevent"===r&&(n.preventDefault(),!0)}function w(e){const n=this,t=(0,s.g)();let a=e;a.originalEvent&&(a=a.originalEvent);const r=n.touchEventsData;if("pointerdown"===a.type){if(null!==r.pointerId&&r.pointerId!==a.pointerId)return;r.pointerId=a.pointerId}else"touchstart"===a.type&&1===a.targetTouches.length&&(r.touchId=a.targetTouches[0].identifier);if("touchstart"===a.type)return void y(n,a,a.targetTouches[0].pageX);const{params:o,touches:l,enabled:c}=n;if(!c)return;if(!o.simulateTouch&&"mouse"===a.pointerType)return;if(n.animating&&o.preventInteractionOnTransition)return;!n.animating&&o.cssMode&&o.loop&&n.loopFix();let d=a.target;if("wrapper"===o.touchEventsTarget&&!(0,i.v)(d,n.wrapperEl))return;if("which"in a&&3===a.which)return;if("button"in a&&a.button>0)return;if(r.isTouched&&r.isMoved)return;const u=!!o.noSwipingClass&&""!==o.noSwipingClass,p=a.composedPath?a.composedPath():a.path;u&&a.target&&a.target.shadowRoot&&p&&(d=p[0]);const h=o.noSwipingSelector?o.noSwipingSelector:`.${o.noSwipingClass}`,m=!(!a.target||!a.target.shadowRoot);if(o.noSwiping&&(m?function(e,n){return void 0===n&&(n=this),function n(t){if(!t||t===(0,s.g)()||t===(0,s.a)())return null;t.assignedSlot&&(t=t.assignedSlot);const i=t.closest(e);return i||t.getRootNode?i||n(t.getRootNode().host):null}(n)}(h,d):d.closest(h)))return void(n.allowClick=!0);if(o.swipeHandler&&!d.closest(o.swipeHandler))return;l.currentX=a.pageX,l.currentY=a.pageY;const v=l.currentX,g=l.currentY;if(!y(n,a,v))return;Object.assign(r,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),l.startX=v,l.startY=g,r.touchStartTime=(0,i.d)(),n.allowClick=!0,n.updateSize(),n.swipeDirection=void 0,o.threshold>0&&(r.allowThresholdMove=!1);let f=!0;d.matches(r.focusableElements)&&(f=!1,"SELECT"===d.nodeName&&(r.isTouched=!1)),t.activeElement&&t.activeElement.matches(r.focusableElements)&&t.activeElement!==d&&("mouse"===a.pointerType||"mouse"!==a.pointerType&&!d.matches(r.focusableElements))&&t.activeElement.blur();const _=f&&n.allowTouchMove&&o.touchStartPreventDefault;!o.touchStartForcePreventDefault&&!_||d.isContentEditable||a.preventDefault(),o.freeMode&&o.freeMode.enabled&&n.freeMode&&n.animating&&!o.cssMode&&n.freeMode.onTouchStart(),n.emit("touchStart",a)}function k(e){const n=(0,s.g)(),t=this,a=t.touchEventsData,{params:r,touches:o,rtlTranslate:l,enabled:c}=t;if(!c)return;if(!r.simulateTouch&&"mouse"===e.pointerType)return;let d,u=e;if(u.originalEvent&&(u=u.originalEvent),"pointermove"===u.type){if(null!==a.touchId)return;if(u.pointerId!==a.pointerId)return}if("touchmove"===u.type){if(d=[...u.changedTouches].filter((e=>e.identifier===a.touchId))[0],!d||d.identifier!==a.touchId)return}else d=u;if(!a.isTouched)return void(a.startMoving&&a.isScrolling&&t.emit("touchMoveOpposite",u));const p=d.pageX,h=d.pageY;if(u.preventedByNestedSwiper)return o.startX=p,void(o.startY=h);if(!t.allowTouchMove)return u.target.matches(a.focusableElements)||(t.allowClick=!1),void(a.isTouched&&(Object.assign(o,{startX:p,startY:h,currentX:p,currentY:h}),a.touchStartTime=(0,i.d)()));if(r.touchReleaseOnEdges&&!r.loop)if(t.isVertical()){if(h<o.startY&&t.translate<=t.maxTranslate()||h>o.startY&&t.translate>=t.minTranslate())return a.isTouched=!1,void(a.isMoved=!1)}else if(p<o.startX&&t.translate<=t.maxTranslate()||p>o.startX&&t.translate>=t.minTranslate())return;if(n.activeElement&&n.activeElement.matches(a.focusableElements)&&n.activeElement!==u.target&&"mouse"!==u.pointerType&&n.activeElement.blur(),n.activeElement&&u.target===n.activeElement&&u.target.matches(a.focusableElements))return a.isMoved=!0,void(t.allowClick=!1);a.allowTouchCallbacks&&t.emit("touchMove",u),o.previousX=o.currentX,o.previousY=o.currentY,o.currentX=p,o.currentY=h;const m=o.currentX-o.startX,v=o.currentY-o.startY;if(t.params.threshold&&Math.sqrt(m**2+v**2)<t.params.threshold)return;if(void 0===a.isScrolling){let e;t.isHorizontal()&&o.currentY===o.startY||t.isVertical()&&o.currentX===o.startX?a.isScrolling=!1:m*m+v*v>=25&&(e=180*Math.atan2(Math.abs(v),Math.abs(m))/Math.PI,a.isScrolling=t.isHorizontal()?e>r.touchAngle:90-e>r.touchAngle)}if(a.isScrolling&&t.emit("touchMoveOpposite",u),void 0===a.startMoving&&(o.currentX===o.startX&&o.currentY===o.startY||(a.startMoving=!0)),a.isScrolling||"touchmove"===u.type&&a.preventTouchMoveFromPointerMove)return void(a.isTouched=!1);if(!a.startMoving)return;t.allowClick=!1,!r.cssMode&&u.cancelable&&u.preventDefault(),r.touchMoveStopPropagation&&!r.nested&&u.stopPropagation();let g=t.isHorizontal()?m:v,f=t.isHorizontal()?o.currentX-o.previousX:o.currentY-o.previousY;r.oneWayMovement&&(g=Math.abs(g)*(l?1:-1),f=Math.abs(f)*(l?1:-1)),o.diff=g,g*=r.touchRatio,l&&(g=-g,f=-f);const _=t.touchesDirection;t.swipeDirection=g>0?"prev":"next",t.touchesDirection=f>0?"prev":"next";const b=t.params.loop&&!r.cssMode,y="next"===t.touchesDirection&&t.allowSlideNext||"prev"===t.touchesDirection&&t.allowSlidePrev;if(!a.isMoved){if(b&&y&&t.loopFix({direction:t.swipeDirection}),a.startTranslate=t.getTranslate(),t.setTransition(0),t.animating){const e=new window.CustomEvent("transitionend",{bubbles:!0,cancelable:!0,detail:{bySwiperTouchMove:!0}});
vendor: 2,139 bytes, line 2
2t.wrapperEl.dispatchEvent(e)}a.allowMomentumBounce=!1,!r.grabCursor||!0!==t.allowSlideNext&&!0!==t.allowSlidePrev||t.setGrabCursor(!0),t.emit("sliderFirstMove",u)}if((new Date).getTime(),a.isMoved&&a.allowThresholdMove&&_!==t.touchesDirection&&b&&y&&Math.abs(g)>=1)return Object.assign(o,{startX:p,startY:h,currentX:p,currentY:h,startTranslate:a.currentTranslate}),a.loopSwapReset=!0,void(a.startTranslate=a.currentTranslate);t.emit("sliderMove",u),a.isMoved=!0,a.currentTranslate=g+a.startTranslate;let w=!0,k=r.resistanceRatio;if(r.touchReleaseOnEdges&&(k=0),g>0?(b&&y&&a.allowThresholdMove&&a.currentTranslate>(r.centeredSlides?t.minTranslate()-t.slidesSizesGrid[t.activeIndex+1]-("auto"!==r.slidesPerView&&t.slides.length-r.slidesPerView>=2?t.slidesSizesGrid[t.activeIndex+1]+t.params.spaceBetween:0)-t.params.spaceBetween:t.minTranslate())&&t.loopFix({direction:"prev",setTranslate:!0,activeSlideIndex:0}),a.currentTranslate>t.minTranslate()&&(w=!1,r.resistance&&(a.currentTranslate=t.minTranslate()-1+(-t.minTranslate()+a.startTranslate+g)**k))):g<0&&(b&&y&&a.allowThresholdMove&&a.currentTranslate<(r.centeredSlides?t.maxTranslate()+t.slidesSizesGrid[t.slidesSizesGrid.length-1]+t.params.spaceBetween+("auto"!==r.slidesPerView&&t.slides.length-r.slidesPerView>=2?t.slidesSizesGrid[t.slidesSizesGrid.length-1]+t.params.spaceBetween:0):t.maxTranslate())&&t.loopFix({direction:"next",setTranslate:!0,activeSlideIndex:t.slides.length-("auto"===r.slidesPerView?t.slidesPerViewDynamic():Math.ceil(parseFloat(r.slidesPerView,10)))}),a.currentTranslate<t.maxTranslate()&&(w=!1,r.resistance&&(a.currentTranslate=t.maxTranslate()+1-(t.maxTranslate()-a.startTranslate-g)**k))),w&&(u.preventedByNestedSwiper=!0),!t.allowSlideNext&&"next"===t.swipeDirection&&a.currentTranslate<a.startTranslate&&(a.currentTranslate=a.startTranslate),!t.allowSlidePrev&&"prev"===t.swipeDirection&&a.currentTranslate>a.startTranslate&&(a.currentTranslate=a.startTranslate),t.allowSlidePrev||t.allowSlideNext||(a.currentTranslate=a.startTranslate),r.threshold>0){if(!(Math.abs(g)>r.threshold||a.allowThresholdMove))return void(a.currentTranslate=a.startTranslate);
vendor: 6,720 bytes, line 2
2if(!a.allowThresholdMove)return a.allowThresholdMove=!0,o.startX=o.currentX,o.startY=o.currentY,a.currentTranslate=a.startTranslate,void(o.diff=t.isHorizontal()?o.currentX-o.startX:o.currentY-o.startY)}r.followFinger&&!r.cssMode&&((r.freeMode&&r.freeMode.enabled&&t.freeMode||r.watchSlidesProgress)&&(t.updateActiveIndex(),t.updateSlidesClasses()),r.freeMode&&r.freeMode.enabled&&t.freeMode&&t.freeMode.onTouchMove(),t.updateProgress(a.currentTranslate),t.setTranslate(a.currentTranslate))}function T(e){const n=this,t=n.touchEventsData;let s,a=e;if(a.originalEvent&&(a=a.originalEvent),"touchend"===a.type||"touchcancel"===a.type){if(s=[...a.changedTouches].filter((e=>e.identifier===t.touchId))[0],!s||s.identifier!==t.touchId)return}else{if(null!==t.touchId)return;if(a.pointerId!==t.pointerId)return;s=a}if(["pointercancel","pointerout","pointerleave","contextmenu"].includes(a.type)&&(!["pointercancel","contextmenu"].includes(a.type)||!n.browser.isSafari&&!n.browser.isWebView))return;t.pointerId=null,t.touchId=null;const{params:r,touches:o,rtlTranslate:l,slidesGrid:c,enabled:d}=n;if(!d)return;if(!r.simulateTouch&&"mouse"===a.pointerType)return;if(t.allowTouchCallbacks&&n.emit("touchEnd",a),t.allowTouchCallbacks=!1,!t.isTouched)return t.isMoved&&r.grabCursor&&n.setGrabCursor(!1),t.isMoved=!1,void(t.startMoving=!1);r.grabCursor&&t.isMoved&&t.isTouched&&(!0===n.allowSlideNext||!0===n.allowSlidePrev)&&n.setGrabCursor(!1);const u=(0,i.d)(),p=u-t.touchStartTime;if(n.allowClick){const e=a.path||a.composedPath&&a.composedPath();n.updateClickedSlide(e&&e[0]||a.target,e),n.emit("tap click",a),p<300&&u-t.lastClickTime<300&&n.emit("doubleTap doubleClick",a)}if(t.lastClickTime=(0,i.d)(),(0,i.n)((()=>{n.destroyed||(n.allowClick=!0)})),!t.isTouched||!t.isMoved||!n.swipeDirection||0===o.diff&&!t.loopSwapReset||t.currentTranslate===t.startTranslate&&!t.loopSwapReset)return t.isTouched=!1,t.isMoved=!1,void(t.startMoving=!1);let h;if(t.isTouched=!1,t.isMoved=!1,t.startMoving=!1,h=r.followFinger?l?n.translate:-n.translate:-t.currentTranslate,r.cssMode)return;if(r.freeMode&&r.freeMode.enabled)return void n.freeMode.onTouchEnd({currentPos:h});const m=h>=-n.maxTranslate()&&!n.params.loop;let v=0,g=n.slidesSizesGrid[0];for(let e=0;e<c.length;e+=e<r.slidesPerGroupSkip?1:r.slidesPerGroup){const n=e<r.slidesPerGroupSkip-1?1:r.slidesPerGroup;void 0!==c[e+n]?(m||h>=c[e]&&h<c[e+n])&&(v=e,g=c[e+n]-c[e]):(m||h>=c[e])&&(v=e,g=c[c.length-1]-c[c.length-2])}let f=null,_=null;r.rewind&&(n.isBeginning?_=r.virtual&&r.virtual.enabled&&n.virtual?n.virtual.slides.length-1:n.slides.length-1:n.isEnd&&(f=0));const b=(h-c[v])/g,y=v<r.slidesPerGroupSkip-1?1:r.slidesPerGroup;if(p>r.longSwipesMs){if(!r.longSwipes)return void n.slideTo(n.activeIndex);"next"===n.swipeDirection&&(b>=r.longSwipesRatio?n.slideTo(r.rewind&&n.isEnd?f:v+y):n.slideTo(v)),"prev"===n.swipeDirection&&(b>1-r.longSwipesRatio?n.slideTo(v+y):null!==_&&b<0&&Math.abs(b)>r.longSwipesRatio?n.slideTo(_):n.slideTo(v))}else{if(!r.shortSwipes)return void n.slideTo(n.activeIndex);!n.navigation||a.target!==n.navigation.nextEl&&a.target!==n.navigation.prevEl?("next"===n.swipeDirection&&n.slideTo(null!==f?f:v+y),"prev"===n.swipeDirection&&n.slideTo(null!==_?_:v)):a.target===n.navigation.nextEl?n.slideTo(v+y):n.slideTo(v)}}function E(){const e=this,{params:n,el:t}=e;if(t&&0===t.offsetWidth)return;n.breakpoints&&e.setBreakpoint();const{allowSlideNext:s,allowSlidePrev:i,snapGrid:a}=e,r=e.virtual&&e.params.virtual.enabled;e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),e.updateSlidesClasses();const o=r&&n.loop;!("auto"===n.slidesPerView||n.slidesPerView>1)||!e.isEnd||e.isBeginning||e.params.centeredSlides||o?e.params.loop&&!r?e.slideToLoop(e.realIndex,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0):e.slideTo(e.slides.length-1,0,!1,!0),e.autoplay&&e.autoplay.running&&e.autoplay.paused&&(clearTimeout(e.autoplay.resizeTimeout),e.autoplay.resizeTimeout=setTimeout((()=>{e.autoplay&&e.autoplay.running&&e.autoplay.paused&&e.autoplay.resume()}),500)),e.allowSlidePrev=i,e.allowSlideNext=s,e.params.watchOverflow&&a!==e.snapGrid&&e.checkOverflow()}function x(e){const n=this;n.enabled&&(n.allowClick||(n.params.preventClicks&&e.preventDefault(),n.params.preventClicksPropagation&&n.animating&&(e.stopPropagation(),e.stopImmediatePropagation())))}function S(){const e=this,{wrapperEl:n,rtlTranslate:t,enabled:s}=e;if(!s)return;let i;e.previousTranslate=e.translate,e.isHorizontal()?e.translate=-n.scrollLeft:e.translate=-n.scrollTop,0===e.translate&&(e.translate=0),e.updateActiveIndex(),e.updateSlidesClasses();const a=e.maxTranslate()-e.minTranslate();i=0===a?0:(e.translate-e.minTranslate())/a,i!==e.progress&&e.updateProgress(t?-e.translate:e.translate),e.emit("setTranslate",e.translate,!1)}function A(e){const n=this;h(n,e.target),n.params.cssMode||"auto"!==n.params.slidesPerView&&!n.params.autoHeight||n.update()}function L(){const e=this;e.documentTouchHandlerProceeded||(e.documentTouchHandlerProceeded=!0,e.params.touchReleaseOnEdges&&(e.el.style.touchAction="auto"))}const C=(e,n)=>{const t=(0,s.g)(),{params:i,el:a,wrapperEl:r,device:o}=e,l=!!i.nested,c="on"===n?"addEventListener":"removeEventListener",d=n;a&&"string"!=typeof a&&(t[c]("touchstart",e.onDocumentTouchStart,{passive:!1,capture:l}),a[c]("touchstart",e.onTouchStart,{passive:!1}),a[c]("pointerdown",e.onTouchStart,{passive:!1}),t[c]("touchmove",e.onTouchMove,{passive:!1,capture:l}),t[c]("pointermove",e.onTouchMove,{passive:!1,capture:l}),t[c]("touchend",e.onTouchEnd,{passive:!0}),t[c]("pointerup",e.onTouchEnd,{passive:!0}),t[c]("pointercancel",e.onTouchEnd,{passive:!0}),t[c]("touchcancel",e.onTouchEnd,{passive:!0}),t[c]("pointerout",e.onTouchEnd,{passive:!0}),t[c]("pointerleave",e.onTouchEnd,{passive:!0}),t[c]("contextmenu",e.onTouchEnd,{passive:!0}),(i.preventClicks||i.preventClicksPropagation)&&a[c]("click",e.onClick,!0),i.cssMode&&r[c]("scroll",e.onScroll),i.updateOnWindowResize?e[d](o.ios||o.android?"resize orientationchange observerUpdate":"resize observerUpdate",E,!0):e[d]("observerUpdate",E,!0),a[c]("load",e.onLoad,{capture:!0}))},R=(e,n)=>e.grid&&n.grid&&n.grid.rows>1;var I={init:!0,direction:"horizontal",oneWayMovement:!1,swiperElementNodeName:"SWIPER-CONTAINER",touchEventsTarget:"wrapper",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,eventsPrefix:"swiper",enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",
vendor: 10,106 bytes, line 2
2spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:5,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,loop:!1,loopAddBlankSlides:!0,loopAdditionalSlides:0,loopPreventsSliding:!0,rewind:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,maxBackfaceHiddenSlides:10,containerModifierClass:"swiper-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-blank",slideActiveClass:"swiper-slide-active",slideVisibleClass:"swiper-slide-visible",slideFullyVisibleClass:"swiper-slide-fully-visible",slideNextClass:"swiper-slide-next",slidePrevClass:"swiper-slide-prev",wrapperClass:"swiper-wrapper",lazyPreloaderClass:"swiper-lazy-preloader",lazyPreloadPrevNext:0,runCallbacksOnInit:!0,_emitClasses:!1};function P(e,n){return function(t){void 0===t&&(t={});const s=Object.keys(t)[0],a=t[s];"object"==typeof a&&null!==a?(!0===e[s]&&(e[s]={enabled:!0}),"navigation"===s&&e[s]&&e[s].enabled&&!e[s].prevEl&&!e[s].nextEl&&(e[s].auto=!0),["pagination","scrollbar"].indexOf(s)>=0&&e[s]&&e[s].enabled&&!e[s].el&&(e[s].auto=!0),s in e&&"enabled"in a?("object"!=typeof e[s]||"enabled"in e[s]||(e[s].enabled=!0),e[s]||(e[s]={enabled:!1}),(0,i.w)(n,t)):(0,i.w)(n,t)):(0,i.w)(n,t)}}const D={eventsEmitter:d,update:g,translate:{getTranslate:function(e){void 0===e&&(e=this.isHorizontal()?"x":"y");const{params:n,rtlTranslate:t,translate:s,wrapperEl:a}=this;if(n.virtualTranslate)return t?-s:s;if(n.cssMode)return s;let r=(0,i.j)(a,e);return r+=this.cssOverflowAdjustment(),t&&(r=-r),r||0},setTranslate:function(e,n){const t=this,{rtlTranslate:s,params:i,wrapperEl:a,progress:r}=t;let o,l=0,c=0;t.isHorizontal()?l=s?-e:e:c=e,i.roundLengths&&(l=Math.floor(l),c=Math.floor(c)),t.previousTranslate=t.translate,t.translate=t.isHorizontal()?l:c,i.cssMode?a[t.isHorizontal()?"scrollLeft":"scrollTop"]=t.isHorizontal()?-l:-c:i.virtualTranslate||(t.isHorizontal()?l-=t.cssOverflowAdjustment():c-=t.cssOverflowAdjustment(),a.style.transform=`translate3d(${l}px, ${c}px, 0px)`);const d=t.maxTranslate()-t.minTranslate();o=0===d?0:(e-t.minTranslate())/d,o!==r&&t.updateProgress(e),t.emit("setTranslate",t.translate,n)},minTranslate:function(){return-this.snapGrid[0]},maxTranslate:function(){return-this.snapGrid[this.snapGrid.length-1]},translateTo:function(e,n,t,s,a){void 0===e&&(e=0),void 0===n&&(n=this.params.speed),void 0===t&&(t=!0),void 0===s&&(s=!0);const r=this,{params:o,wrapperEl:l}=r;if(r.animating&&o.preventInteractionOnTransition)return!1;const c=r.minTranslate(),d=r.maxTranslate();let u;if(u=s&&e>c?c:s&&e<d?d:e,r.updateProgress(u),o.cssMode){const e=r.isHorizontal();if(0===n)l[e?"scrollLeft":"scrollTop"]=-u;else{if(!r.support.smoothScroll)return(0,i.t)({swiper:r,targetPosition:-u,side:e?"left":"top"}),!0;l.scrollTo({[e?"left":"top"]:-u,behavior:"smooth"})}return!0}return 0===n?(r.setTransition(0),r.setTranslate(u),t&&(r.emit("beforeTransitionStart",n,a),r.emit("transitionEnd"))):(r.setTransition(n),r.setTranslate(u),t&&(r.emit("beforeTransitionStart",n,a),r.emit("transitionStart")),r.animating||(r.animating=!0,r.onTranslateToWrapperTransitionEnd||(r.onTranslateToWrapperTransitionEnd=function(e){r&&!r.destroyed&&e.target===this&&(r.wrapperEl.removeEventListener("transitionend",r.onTranslateToWrapperTransitionEnd),r.onTranslateToWrapperTransitionEnd=null,delete r.onTranslateToWrapperTransitionEnd,r.animating=!1,t&&r.emit("transitionEnd"))}),r.wrapperEl.addEventListener("transitionend",r.onTranslateToWrapperTransitionEnd))),!0}},transition:{setTransition:function(e,n){const t=this;t.params.cssMode||(t.wrapperEl.style.transitionDuration=`${e}ms`,t.wrapperEl.style.transitionDelay=0===e?"0ms":""),t.emit("setTransition",e,n)},transitionStart:function(e,n){void 0===e&&(e=!0);const t=this,{params:s}=t;s.cssMode||(s.autoHeight&&t.updateAutoHeight(),f({swiper:t,runCallbacks:e,direction:n,step:"Start"}))},transitionEnd:function(e,n){void 0===e&&(e=!0);const t=this,{params:s}=t;t.animating=!1,s.cssMode||(t.setTransition(0),f({swiper:t,runCallbacks:e,direction:n,step:"End"}))}},slide:_,loop:b,grabCursor:{setGrabCursor:function(e){const n=this;if(!n.params.simulateTouch||n.params.watchOverflow&&n.isLocked||n.params.cssMode)return;const t="container"===n.params.touchEventsTarget?n.el:n.wrapperEl;n.isElement&&(n.__preventObserver__=!0),t.style.cursor="move",t.style.cursor=e?"grabbing":"grab",n.isElement&&requestAnimationFrame((()=>{n.__preventObserver__=!1}))},unsetGrabCursor:function(){const e=this;e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e.isElement&&(e.__preventObserver__=!0),e["container"===e.params.touchEventsTarget?"el":"wrapperEl"].style.cursor="",e.isElement&&requestAnimationFrame((()=>{e.__preventObserver__=!1})))}},events:{attachEvents:function(){const e=this,{params:n}=e;e.onTouchStart=w.bind(e),e.onTouchMove=k.bind(e),e.onTouchEnd=T.bind(e),e.onDocumentTouchStart=L.bind(e),n.cssMode&&(e.onScroll=S.bind(e)),e.onClick=x.bind(e),e.onLoad=A.bind(e),C(e,"on")},detachEvents:function(){C(this,"off")}},breakpoints:{setBreakpoint:function(){const e=this,{realIndex:n,initialized:t,params:s,el:a}=e,r=s.breakpoints;if(!r||r&&0===Object.keys(r).length)return;const o=e.getBreakpoint(r,e.params.breakpointsBase,e.el);if(!o||e.currentBreakpoint===o)return;const l=(o in r?r[o]:void 0)||e.originalParams,c=R(e,s),d=R(e,l),u=e.params.grabCursor,p=l.grabCursor,h=s.enabled;c&&!d?(a.classList.remove(`${s.containerModifierClass}grid`,`${s.containerModifierClass}grid-column`),e.emitContainerClasses()):!c&&d&&(a.classList.add(`${s.containerModifierClass}grid`),(l.grid.fill&&"column"===l.grid.fill||!l.grid.fill&&"column"===s.grid.fill)&&a.classList.add(`${s.containerModifierClass}grid-column`),e.emitContainerClasses()),u&&!p?e.unsetGrabCursor():!u&&p&&e.setGrabCursor(),["navigation","pagination","scrollbar"].forEach((n=>{if(void 0===l[n])return;const t=s[n]&&s[n].enabled,i=l[n]&&l[n].enabled;t&&!i&&e[n].disable(),!t&&i&&e[n].enable()}));const m=l.direction&&l.direction!==s.direction,v=s.loop&&(l.slidesPerView!==s.slidesPerView||m),g=s.loop;m&&t&&e.changeDirection(),(0,i.w)(e.params,l);const f=e.params.enabled,_=e.params.loop;Object.assign(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),h&&!f?e.disable():!h&&f&&e.enable(),e.currentBreakpoint=o,e.emit("_beforeBreakpoint",l),t&&(v?(e.loopDestroy(),e.loopCreate(n),e.updateSlides()):!g&&_?(e.loopCreate(n),e.updateSlides()):g&&!_&&e.loopDestroy()),e.emit("breakpoint",l)},getBreakpoint:function(e,n,t){if(void 0===n&&(n="window"),!e||"container"===n&&!t)return;let i=!1;const a=(0,s.a)(),r="window"===n?a.innerHeight:t.clientHeight,o=Object.keys(e).map((e=>{if("string"==typeof e&&0===e.indexOf("@")){const n=parseFloat(e.substr(1));return{value:r*n,point:e}}return{value:e,point:e}}));o.sort(((e,n)=>parseInt(e.value,10)-parseInt(n.value,10)));for(let e=0;e<o.length;e+=1){const{point:s,value:r}=o[e];"window"===n?a.matchMedia(`(min-width: ${r}px)`).matches&&(i=s):r<=t.clientWidth&&(i=s)}return i||"max"}},checkOverflow:{checkOverflow:function(){const e=this,{isLocked:n,params:t}=e,{slidesOffsetBefore:s}=t;if(s){const n=e.slides.length-1,t=e.slidesGrid[n]+e.slidesSizesGrid[n]+2*s;e.isLocked=e.size>t}else e.isLocked=1===e.snapGrid.length;!0===t.allowSlideNext&&(e.allowSlideNext=!e.isLocked),!0===t.allowSlidePrev&&(e.allowSlidePrev=!e.isLocked),n&&n!==e.isLocked&&(e.isEnd=!1),n!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock")}},classes:{addClasses:function(){const e=this,{classNames:n,params:t,rtl:s,el:i,device:a}=e,r=function(e,n){const t=[];return e.forEach((e=>{"object"==typeof e?Object.keys(e).forEach((s=>{e[s]&&t.push(n+s)})):"string"==typeof e&&t.push(n+e)})),t}(["initialized",t.direction,{"free-mode":e.params.freeMode&&t.freeMode.enabled},{autoheight:t.autoHeight},{rtl:s},{grid:t.grid&&t.grid.rows>1},{"grid-column":t.grid&&t.grid.rows>1&&"column"===t.grid.fill},{android:a.android},{ios:a.ios},{"css-mode":t.cssMode},{centered:t.cssMode&&t.centeredSlides},{"watch-progress":t.watchSlidesProgress}],t.containerModifierClass);n.push(...r),i.classList.add(...n),e.emitContainerClasses()},removeClasses:function(){const{el:e,classNames:n}=this;e&&"string"!=typeof e&&(e.classList.remove(...n),this.emitContainerClasses())}}},O={};class M{constructor(){let e,n;for(var t=arguments.length,a=new Array(t),r=0;r<t;r++)a[r]=arguments[r];1===a.length&&a[0].constructor&&"Object"===Object.prototype.toString.call(a[0]).slice(8,-1)?n=a[0]:[e,n]=a,n||(n={}),n=(0,i.w)({},n),e&&!n.el&&(n.el=e);const d=(0,s.g)();if(n.el&&"string"==typeof n.el&&d.querySelectorAll(n.el).length>1){const e=[];return d.querySelectorAll(n.el).forEach((t=>{const s=(0,i.w)({},n,{el:t});e.push(new M(s))})),e}const u=this;u.__swiper__=!0,u.support=l(),u.device=c({userAgent:n.userAgent}),u.browser=(o||(o=function(){const e=(0,s.a)(),n=c();let t=!1;function i(){const n=e.navigator.userAgent.toLowerCase();return n.indexOf("safari")>=0&&n.indexOf("chrome")<0&&n.indexOf("android")<0}if(i()){const n=String(e.navigator.userAgent);if(n.includes("Version/")){const[e,s]=n.split("Version/")[1].split(" ")[0].split(".").map((e=>Number(e)));t=e<16||16===e&&s<2}}const a=/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent),r=i();return{isSafari:t||r,needPerspectiveFix:t,need3dFix:r||a&&n.ios,isWebView:a}}()),o),u.eventsListeners={},u.eventsAnyListeners=[],u.modules=[...u.__modules__],n.modules&&Array.isArray(n.modules)&&u.modules.push(...n.modules);const p={};
vendor: 4,468 bytes, line 2
2u.modules.forEach((e=>{e({params:n,swiper:u,extendParams:P(n,p),on:u.on.bind(u),once:u.once.bind(u),off:u.off.bind(u),emit:u.emit.bind(u)})}));const h=(0,i.w)({},I,p);return u.params=(0,i.w)({},h,O,n),u.originalParams=(0,i.w)({},u.params),u.passedParams=(0,i.w)({},n),u.params&&u.params.on&&Object.keys(u.params.on).forEach((e=>{u.on(e,u.params.on[e])})),u.params&&u.params.onAny&&u.onAny(u.params.onAny),Object.assign(u,{enabled:u.params.enabled,el:e,classNames:[],slides:[],slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:()=>"horizontal"===u.params.direction,isVertical:()=>"vertical"===u.params.direction,activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,cssOverflowAdjustment(){return Math.trunc(this.translate/2**23)*2**23},allowSlideNext:u.params.allowSlideNext,allowSlidePrev:u.params.allowSlidePrev,touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:u.params.focusableElements,lastClickTime:0,clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,startMoving:void 0,pointerId:null,touchId:null},allowClick:!0,allowTouchMove:u.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),u.emit("_swiper"),u.params.init&&u.init(),u}getDirectionLabel(e){return this.isHorizontal()?e:{width:"height","margin-top":"margin-left","margin-bottom ":"margin-right","margin-left":"margin-top","margin-right":"margin-bottom","padding-left":"padding-top","padding-right":"padding-bottom",marginRight:"marginBottom"}[e]}getSlideIndex(e){const{slidesEl:n,params:t}=this,s=(0,i.e)(n,`.${t.slideClass}, swiper-slide`),a=(0,i.h)(s[0]);return(0,i.h)(e)-a}getSlideIndexByData(e){return this.getSlideIndex(this.slides.filter((n=>1*n.getAttribute("data-swiper-slide-index")===e))[0])}recalcSlides(){const{slidesEl:e,params:n}=this;this.slides=(0,i.e)(e,`.${n.slideClass}, swiper-slide`)}enable(){const e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit("enable"))}disable(){const e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit("disable"))}setProgress(e,n){const t=this;e=Math.min(Math.max(e,0),1);const s=t.minTranslate(),i=(t.maxTranslate()-s)*e+s;t.translateTo(i,void 0===n?0:n),t.updateActiveIndex(),t.updateSlidesClasses()}emitContainerClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const n=e.el.className.split(" ").filter((n=>0===n.indexOf("swiper")||0===n.indexOf(e.params.containerModifierClass)));e.emit("_containerClasses",n.join(" "))}getSlideClasses(e){const n=this;return n.destroyed?"":e.className.split(" ").filter((e=>0===e.indexOf("swiper-slide")||0===e.indexOf(n.params.slideClass))).join(" ")}emitSlidesClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const n=[];e.slides.forEach((t=>{const s=e.getSlideClasses(t);n.push({slideEl:t,classNames:s}),e.emit("_slideClass",t,s)})),e.emit("_slideClasses",n)}slidesPerViewDynamic(e,n){void 0===e&&(e="current"),void 0===n&&(n=!1);const{params:t,slides:s,slidesGrid:i,slidesSizesGrid:a,size:r,activeIndex:o}=this;let l=1;if("number"==typeof t.slidesPerView)return t.slidesPerView;if(t.centeredSlides){let e,n=s[o]?Math.ceil(s[o].swiperSlideSize):0;for(let t=o+1;t<s.length;t+=1)s[t]&&!e&&(n+=Math.ceil(s[t].swiperSlideSize),l+=1,n>r&&(e=!0));for(let t=o-1;t>=0;t-=1)s[t]&&!e&&(n+=s[t].swiperSlideSize,l+=1,n>r&&(e=!0))}else if("current"===e)for(let e=o+1;e<s.length;e+=1)(n?i[e]+a[e]-i[o]<r:i[e]-i[o]<r)&&(l+=1);else for(let e=o-1;e>=0;e-=1)i[o]-i[e]<r&&(l+=1);return l}update(){const e=this;if(!e||e.destroyed)return;const{snapGrid:n,params:t}=e;function s(){const n=e.rtlTranslate?-1*e.translate:e.translate,t=Math.min(Math.max(n,e.maxTranslate()),e.minTranslate());e.setTranslate(t),e.updateActiveIndex(),e.updateSlidesClasses()}let i;if(t.breakpoints&&e.setBreakpoint(),[...e.el.querySelectorAll('[loading="lazy"]')].forEach((n=>{n.complete&&h(e,n)})),e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),t.freeMode&&t.freeMode.enabled&&!t.cssMode)s(),t.autoHeight&&e.updateAutoHeight();else{if(("auto"===t.slidesPerView||t.slidesPerView>1)&&e.isEnd&&!t.centeredSlides){const n=e.virtual&&t.virtual.enabled?e.virtual.slides:e.slides;i=e.slideTo(n.length-1,0,!1,!0)}else i=e.slideTo(e.activeIndex,0,!1,!0);i||s()}
2t.watchOverflow&&n!==e.snapGrid&&e.checkOverflow(),e.emit("update")}changeDirection(e,n){void 0===n&&(n=!0);const t=this,s=t.params.direction;return e||(e="horizontal"===s?"vertical":"horizontal"),e===s||"horizontal"!==e&&"vertical"!==e||(t.el.classList.remove(`${t.params.containerModifierClass}${s}`),t.el.classList.add(`${t.params.containerModifierClass}${e}`),t.emitContainerClasses(),t.params.direction=e,t.slides.forEach((n=>{"vertical"===e?n.style.width="":n.style.height=""})),t.emit("changeDirection"),n&&t.update()),t}changeLanguageDirection(e){const n=this;n.rtl&&"rtl"===e||!n.rtl&&"ltr"===e||(n.rtl="rtl"===e,n.rtlTranslate="horizontal"===n.params.direction&&n.rtl,n.rtl?(n.el.classList.add(`${n.params.containerModifierClass}rtl`),n.el.dir="rtl"):(n.el.classList.remove(`${n.params.containerModifierClass}rtl`),n.el.dir="ltr"),n.update())}mount(e){const n=this;if(n.mounted)return!0;let t=e||n.params.el;if("string"==typeof t&&(t=document.querySelector(t)),!t)return!1;t.swiper=n,t.parentNode&&t.parentNode.host&&t.parentNode.host.nodeName===n.params.swiperElementNodeName.toUpperCase()&&(n.isElement=!0);const s=()=>`.${(n.params.wrapperClass||"").trim().split(" ").join(".")}`;let a=t&&t.shadowRoot&&t.shadowRoot.querySelector?t.shadowRoot.querySelector(s()):(0,i.e)(t,s())[0];return!a&&n.params.createElements&&(a=(0,i.c)("div",n.params.wrapperClass),t.append(a),(0,i.e)(t,`.${n.params.slideClass}`).forEach((e=>{a.append(e)}))),Object.assign(n,{el:t,wrapperEl:a,slidesEl:n.isElement&&!t.parentNode.host.slideSlots?t.parentNode.host:a,hostEl:n.isElement?t.parentNode.host:t,mounted:!0,rtl:"rtl"===t.dir.toLowerCase()||"rtl"===(0,i.p)(t,"direction"),rtlTranslate:"horizontal"===n.params.direction&&("rtl"===t.dir.toLowerCase()||"rtl"===(0,i.p)(t,"direction")),wrongRTL:"-webkit-box"===(0,i.p)(a,"display")}),!0}init(e){const n=this;if(n.initialized)return n;if(!1===n.mount(e))return n;n.emit("beforeInit"),n.params.breakpoints&&n.setBreakpoint(),n.addClasses(),n.updateSize(),n.updateSlides(),n.params.watchOverflow&&n.checkOverflow(),n.params.grabCursor&&n.enabled&&n.setGrabCursor(),n.params.loop&&n.virtual&&n.params.virtual.enabled?n.slideTo(n.params.initialSlide+n.virtual.slidesBefore,0,n.params.runCallbacksOnInit,!1,!0):n.slideTo(n.params.initialSlide,0,n.params.runCallbacksOnInit,!1,!0),n.params.loop&&n.loopCreate(),n.attachEvents();const t=[...n.el.querySelectorAll('[loading="lazy"]')];return n.isElement&&t.push(...n.hostEl.querySelectorAll('[loading="lazy"]')),t.forEach((e=>{e.complete?h(n,e):e.addEventListener("load",(e=>{h(n,e.target)}))})),v(n),n.initialized=!0,v(n),n.emit("init"),n.emit("afterInit"),n}destroy(e,n){void 0===e&&(e=!0),void 0===n&&(n=!0);const t=this,{params:s,el:a,wrapperEl:r,slides:o}=t;return void 0===t.params||t.destroyed||(t.emit("beforeDestroy"),t.initialized=!1,t.detachEvents(),s.loop&&t.loopDestroy(),n&&(t.removeClasses(),a&&"string"!=typeof a&&a.removeAttribute("style"),r&&r.removeAttribute("style"),o&&o.length&&o.forEach((e=>{e.classList.remove(s.slideVisibleClass,s.slideFullyVisibleClass,s.slideActiveClass,s.slideNextClass,s.slidePrevClass),e.removeAttribute("style"),e.removeAttribute("data-swiper-slide-index")}))),t.emit("destroy"),Object.keys(t.eventsListeners).forEach((e=>{t.off(e)})),!1!==e&&(t.el&&"string"!=typeof t.el&&(t.el.swiper=null),(0,i.x)(t)),t.destroyed=!0),null}static extendDefaults(e){(0,i.w)(O,e)}static get extendedDefaults(){return O}static get defaults(){return I}static installModule(e){M.prototype.__modules__||(M.prototype.__modules__=[]);const n=M.prototype.__modules__;"function"==typeof e&&n.indexOf(e)<0&&n.push(e)}static use(e){return Array.isArray(e)?(e.forEach((e=>M.installModule(e))),M):(M.installModule(e),M)}}Object.keys(D).forEach((e=>{Object.keys(D[e]).forEach((n=>{M.prototype[n]=D[e][n]}))})),M.use([function(e){let{swiper:n,on:t,emit:i}=e;const a=(0,s.a)();let r=null,o=null;const l=()=>{n&&!n.destroyed&&n.initialized&&(i("beforeResize"),i("resize"))},c=()=>{n&&!n.destroyed&&n.initialized&&i("orientationchange")};t("init",(()=>{n.params.resizeObserver&&void 0!==a.ResizeObserver?n&&!n.destroyed&&n.initialized&&(r=new ResizeObserver((e=>{o=a.requestAnimationFrame((()=>{const{width:t,height:s}=n;let i=t,a=s;e.forEach((e=>{let{contentBoxSize:t,contentRect:s,target:r}=e;r&&r!==n.el||(i=s?s.width:(t[0]||t).inlineSize,a=s?s.height:(t[0]||t).blockSize)})),i===t&&a===s||l()}))})),r.observe(n.el)):(a.addEventListener("resize",l),a.addEventListener("orientationchange",c))})),t("destroy",(()=>{o&&a.cancelAnimationFrame(o),r&&r.unobserve&&n.el&&(r.unobserve(n.el),r=null),a.removeEventListener("resize",l),a.removeEventListener("orientationchange",c)}))},function(e){let{swiper:n,extendParams:t,on:a,emit:r}=e;const o=[],l=(0,s.a)(),c=function(e,t){void 0===t&&(t={});const s=new(l.MutationObserver||l.WebkitMutationObserver)((e=>{if(n.__preventObserver__)return;if(1===e.length)return void r("observerUpdate",e[0]);const t=function(){r("observerUpdate",e[0])};l.requestAnimationFrame?l.requestAnimationFrame(t):l.setTimeout(t,0)}));s.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:n.isElement||(void 0===t.childList||t).childList,characterData:void 0===t.characterData||t.characterData}),o.push(s)};t({observer:!1,observeParents:!1,observeSlideChildren:!1}),a("init",(()=>{if(n.params.observer){if(n.params.observeParents){const e=(0,i.a)(n.hostEl);for(let n=0;n<e.length;n+=1)c(e[n])}c(n.hostEl,{childList:n.params.observeSlideChildren}),c(n.wrapperEl,{attributes:!1})}})),a("destroy",(()=>{o.forEach((e=>{e.disconnect()})),o.splice(0,o.length)}))}])},1372:(e,n,t)=>{"use strict";t.d(n,{Tl:()=>u,s2:()=>d});var s=function(){return"undefined"==typeof window},i=function(e){e=e||navigator.userAgent;var n=/(iPad).*OS\s([\d_]+)/.test(e);return{ios:!n&&/(iPhone\sOS)\s([\d_]+)/.test(e)||n,android:/(Android);?[\s/]+([\d.]+)?/.test(e)}};function a(e){if(s())return!1;if(!e)throw new Error("options must be provided");
2var n=!1,t={get passive(){n=!0}},i=function(){},a="__TUA_BSL_TEST_PASSIVE__";window.addEventListener(a,i,t),window.removeEventListener(a,i,t);var r=e.capture;return n?e:void 0!==r&&r}function r(){return"__BSL_PREVENT_DEFAULT__"in window||(window.__BSL_PREVENT_DEFAULT__=function(e){e.cancelable&&e.preventDefault()}),window.__BSL_PREVENT_DEFAULT__}function o(e){return e?Array.isArray(e)?e:[e]:[]}var l={lockedNum:0,lockedElements:[],unLockCallback:null,documentListenerAdded:!1,initialClientPos:{clientX:0,clientY:0}};function c(e){if(s())return l;if(!(null==e?void 0:e.useGlobalLockState))return c.lockState;var n="__BSL_LOCK_STATE__"in window?Object.assign(Object.assign({},l),window.__BSL_LOCK_STATE__):l;return window.__BSL_LOCK_STATE__=n,n}function d(e,n){if(!s()){var t,l,d,u,p=i(),h=c(n);p.ios?(o(e).filter((function(e){return e&&-1===h.lockedElements.indexOf(e)})).forEach((function(e){e.ontouchstart=function(e){var n=e.targetTouches[0],t=n.clientX,s=n.clientY;h.initialClientPos={clientX:t,clientY:s}},e.ontouchmove=function(n){!function(e,n,t){if(n){var s=n.scrollTop,i=n.scrollLeft,a=n.scrollWidth,o=n.scrollHeight,l=n.clientWidth,c=n.clientHeight,d=e.targetTouches[0].clientX-t.clientX,u=e.targetTouches[0].clientY-t.clientY,p=Math.abs(u)>Math.abs(d);if(p&&(u>0&&0===s||u<0&&s+c+1>=o)||!p&&(d>0&&0===i||d<0&&i+l+1>=a))return r()(e)}e.stopPropagation()}(n,e,h.initialClientPos)},h.lockedElements.push(e)})),function(e){i().ios&&(e.documentListenerAdded||(document.addEventListener("touchmove",r(),a({passive:!1})),e.documentListenerAdded=!0))}(h)):h.lockedNum<=0&&(h.unLockCallback=p.android?function(e){var n=document.documentElement,t=document.body,s=n.scrollTop||t.scrollTop,i=Object.assign({},n.style),a=Object.assign({},t.style);return n.style.height="100%",n.style.overflow="hidden",t.style.top="-".concat(s,"px"),t.style.width="100%",t.style.height="auto",t.style.position="fixed",t.style.overflow=(null==e?void 0:e.overflowType)||"hidden",function(){n.style.height=i.height||"",n.style.overflow=i.overflow||"",["top","width","height","overflow","position"].forEach((function(e){t.style[e]=a[e]||""})),"scrollBehavior"in document.documentElement.style?window.scrollTo({top:s,behavior:"instant"}):window.scrollTo(0,s)}}(n):(t=document.documentElement,l=Object.assign({},t.style),d=window.innerWidth-t.clientWidth,u=parseInt(window.getComputedStyle(t).paddingRight,10),t.style.overflow="hidden",t.style.boxSizing="border-box",t.style.paddingRight="".concat(d+u,"px"),function(){["overflow","boxSizing","paddingRight"].forEach((function(e){t.style[e]=l[e]||""}))})),h.lockedNum+=1}}function u(e,n){if(!s()){var t=c(n);t.lockedNum-=1,t.lockedNum>0||function(e){return!i().ios&&"function"==typeof e.unLockCallback&&(e.unLockCallback(),!0)}(t)||(o(e).forEach((function(e){var n=t.lockedElements.indexOf(e);e&&-1!==n&&(e.ontouchmove=null,e.ontouchstart=null,t.lockedElements.splice(n,1))})),function(e){e.documentListenerAdded&&(document.removeEventListener("touchmove",r(),a({passive:!1})),e.documentListenerAdded=!1)}(t))}}c.lockState=l}},e=>{var n=n=>e(e.s=n);n(1614),n(5766),n(2792),n(8214),n(7798),n(9782),n(8898),n(774),n(3670),n(234),n(4470),n(2806),n(9526),n(8910),n(3366),n(6780),n(3842),n(126),n(7626),n(2502),n(7142),n(7866),n(5516),n(8646),n(356),n(5812),n(7492),n(7222),n(1578),n(2258),n(2270),n(4316),n(20),n(6),n(5118),n(2508),n(682),n(5862),n(7230),n(4224),n(8470),n(7974),n(950),n(5112),n(9628),n(546),n(5078),n(3682),n(2898),n(5510),n(7254),n(6010),n(3076),n(1950),n(4352),n(3187),n(8546),n(5988),n(9106),n(1019),n(642),n(5716),n(8656),n(4157),n(6566),n(5656),n(7771),n(8604),n(3365),n(7865),n(1662),n(8176),n(5795),n(4913),n(7920),n(6346),n(2372),n(9136),n(5450),n(1038),n(8494),n(3280),n(1088),n(7544),n(8072),n(204),n(8104),n(5056),n(7355),n(4602),n(6850),n(6292),n(2266),n(882),n(3746),n(4386),n(322),n(4626),n(2446),n(7566),n(6006),n(2942),n(9946),n(7538),n(1396),n(1374),n(4834),n(3282),n(8382),n(2598),n(1814),n(3496),n(1438),n(7016),n(344),n(928),n(4874),n(6358),n(5630),n(3290),n(4624),n(2243),n(1798),n(7426),n(868),n(3118),n(9250),n(2986),n(4476),n(9730),n(8958),n(2690),n(8516),n(612),n(3542),n(4490),n(2454),n(9062),n(1186),n(2546),n(7362),n(476),n(2930),n(3228),n(858),n(3438),n(7372),n(9402),n(9852),n(4854),n(1966),n(9764),n(1516),n(8716),n(9758),n(1566),n(8410),n(2510),n(1072),n(6506),n(534),n(3806),n(4504),n(6303),n(7639),n(6857),n(1229),n(7581),n(3857),n(2635),n(6754),n(1245),n(8579),n(8497),n(897),n(4705),n(537),n(4865),n(4805),n(6613),n(2577),n(3457),n(4268),n(119),n(6029),n(7729),n(1463),n(7519),n(1973),n(3061),n(4958),n(3611),n(953),n(4829),n(193),n(1379),n(9833),n(6405),n(9965),n(4289),n(2569),n(1053),n(4519),n(3294),n(5010),n(9976),n(5688),n(7464),n(4824),n(7932),n(3392),n(4840),n(2274),n(6872),n(5900),n(2004),n(9892),n(5806),n(8686),n(2500),n(1600),n(3620),n(7816),n(1202),n(6736),n(6892),n(5816),n(2616),n(8008),n(6730),n(8033),n(7296),n(5539),n(9621),n(3063),n(7777),n(2380),n(4389),n(3642),n(9882),n(5967),n(3926),n(5393),n(110),n(3162),n(2617),n(7879),n(8548),n(701),n(3995),n(6644),n(4012),n(8292),n(3221),n(6671),n(1455),n(7180),n(963),n(2226)}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.