diff --git a/.gitignore b/.gitignore index 7f134bcf2..ebbba4a9e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ node_modules examples commit.json package-lock.json +.size-snapshot.json yarn.lock \ No newline at end of file diff --git a/.size-snapshot.json b/.size-snapshot.json deleted file mode 100644 index 0f839d069..000000000 --- a/.size-snapshot.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "packages/artplayer/dist/artplayer.js": { - "bundled": 190385, - "minified": 110834, - "gzipped": 26131 - }, - "packages/artplayer-plugin-backlight/dist/artplayer-plugin-backlight.js": { - "bundled": 4629, - "minified": 1985, - "gzipped": 955 - }, - "packages/artplayer-tool-github/dist/artplayer-tool-github.js": { - "bundled": 12660, - "minified": 12305, - "gzipped": 4307 - }, - "packages/artplayer-plugin-gif/dist/artplayer-plugin-gif.js": { - "bundled": 98490, - "minified": 28883, - "gzipped": 10422 - }, - "packages/artplayer-tool-thumbnail/dist/artplayer-tool-thumbnail.js": { - "bundled": 15973, - "minified": 7709, - "gzipped": 2786 - }, - "packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.js": { - "bundled": 24161, - "minified": 12813, - "gzipped": 4163 - }, - "packages/artplayer-vue/dist/artplayer-vue.js": { - "bundled": 191944, - "minified": 111758, - "gzipped": 26250 - }, - "packages/artplayer-react/dist/artplayer-react.js": { - "bundled": 273879, - "minified": 140344, - "gzipped": 35380 - }, - "artplayer-plugin-backlight.js": { - "bundled": 4678, - "minified": 2027, - "gzipped": 969 - }, - "artplayer.js": { - "bundled": 207463, - "minified": 118948, - "gzipped": 27991 - }, - "artplayer-plugin-danmuku.js": { - "bundled": 25668, - "minified": 13645, - "gzipped": 4422 - }, - "artplayer-plugin-gif.js": { - "bundled": 98584, - "minified": 28937, - "gzipped": 10434 - }, - "artplayer-react.js": { - "bundled": 294866, - "minified": 151155, - "gzipped": 37283 - }, - "artplayer-tool-github.js": { - "bundled": 12711, - "minified": 12347, - "gzipped": 4310 - }, - "artplayer-tool-thumbnail.js": { - "bundled": 17324, - "minified": 8545, - "gzipped": 3060 - }, - "artplayer-vue.js": { - "bundled": 212235, - "minified": 122243, - "gzipped": 28253 - }, - "artplayer-plugin-ass.js": { - "bundled": 2292, - "minified": 1227, - "gzipped": 611 - } -} diff --git a/README-CN.md b/README-CN.md deleted file mode 100644 index 43156dec0..000000000 --- a/README-CN.md +++ /dev/null @@ -1,132 +0,0 @@ -# ArtPlayer.js - -> :art: ArtPlayer.js 是一个现代全功能的 HTML5 视频播放器 - -[](https://www.travis-ci.org/zhw2590582/ArtPlayer) - - - -[](https://www.npmjs.com/package/artplayer) -[](https://www.codacy.com/app/zhw2590582/ArtPlayer?utm_source=github.com&utm_medium=referral&utm_content=zhw2590582/ArtPlayer&utm_campaign=Badge_Grade) - - - -## Features - -- 大小 - 缩小并压缩后的大小只有`25kb` -- 字幕 - 支持 `.VTT`, `.ASS` 和 `.SRT` 格式 -- 自定义 - `右键菜单`, `业务图层`, `视频控制器` 和 `设置面板` -- 控制器 - `画质切换`, `字幕切换`, `播放速度`, `长宽比`, `视频翻转`, `全屏`, `画中画`, `截图`, `缩略图`, `自适应尺寸`, `高亮` 和 `热键`... -- 内建 - `打开本地字幕`, `打开本地视频`, `迷你进度条`, `网络监测` 和 `字幕时间偏移` -- 集成 - 容易与其它依赖集成:`flv.js`, `hls.js`, `dash.js`, `shaka-player`, `webtorrent`... -- 代码 - 纯 `ES6` 和 `SASS`, 高解耦的代码, 清晰的结构, 容易跟踪 `Bug` 和添加新功能 -- 文档 - 详尽的接口文档和丰富的代码演示 -- 接口 - 丰富的接口和响应事件, 容易对接到业务或者自定义插件 -- 多语言 - 支持控件的国际化 - -## 生态 - -| 项目 | 描述 | 演示 | -| --------------------------------------------------------------------------------------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -| [artplayer-plugin-danmuku](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-danmuku) | 弹幕库插件 | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-danmuku.js&example=danmuku) | -| [artplayer-plugin-gif](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-gif) | GIF 生成插件 | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-gif.js&example=gif) | -| [artplayer-plugin-backlight](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-backlight) | 背光插件 | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-backlight.js&example=backlight) | -| [artplayer-tool-thumbnail](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-tool-thumbnail) | 缩略图生成工具 | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-tool-thumbnail.js&example=thumbnail) | -| [artplayer-tool-github](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-tool-github) | Github 弹幕库工具 | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-tool-github.js%0A.%2Funcompiled%2Fartplayer-plugin-danmuku.js&example=github) | | -| [artplayer-react](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-react) | React 组件 | [demo](https://codesandbox.io/s/n74859y9rl) | -| [artplayer-vue](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-vue) | Vue 组件 | [demo](https://codesandbox.io/s/thirsty-sunset-3lz7m) | - -## 主页 - -[https://artplayer.org](https://artplayer.org) - -## 手机端演示 - - - -## 文档 - -[https://artplayer.org/document](https://artplayer.org/document) - -## 安装 - -通过 `npm` 安装: - -```bash -$ npm install artplayer -``` - -或者通过 `yarn` 安装: - -```bash -$ yarn add artplayer -``` - -```js -import Artplayer from 'artplayer'; -``` - -或者直接引入`umd`文件: - -```html - -``` - -或者从 jsDelivr CDN 引入: - -```html - -``` - -将会导出全局变量到`window.Artplayer`. - -## 使用 - -```html -
-``` - -```js -var art = new Artplayer({ - container: '.artplayer-app', - url: 'path/to/video.mp4', -}); -``` - -## 贡献 - -安装依赖: - -```bash -$ npm install -$ npm run bootstrap -``` - -运行开发人员模式,然后选择要开发的项目: - -```bash -$ npm run dev -``` - -开启网页服务器: - -```bash -$ npm start -``` - -## 捐助 - -我们通过这些渠道接受捐赠: - -- [Patreon](https://www.patreon.com/artplayer) -- [Paypal](https://www.paypal.me/harveyzack) -- [微信支付](./images/wechatpay.jpg) -- [支付宝](./images/alipay.jpg) - -## QQ 群 - - - -## 证书 - -MIT © [Harvey Zack](https://sleepy.im/) diff --git a/dist/artplayer-plugin-backlight.js b/dist/artplayer-plugin-backlight.js deleted file mode 100644 index 99b9c1bd0..000000000 --- a/dist/artplayer-plugin-backlight.js +++ /dev/null @@ -1,8 +0,0 @@ -/*! - * artplayer-plugin-backlight.js v3.5.31 - * Github: https://github.com/zhw2590582/ArtPlayer#readme - * (c) 2017-2021 Harvey Zack - * Released under the MIT License. - */ - -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).artplayerPluginBacklight=e()}(this,(function(){"use strict";function t(t){for(var e=[],o=0;o<10;o+=1)for(var n=0;n<5;n+=1)0!==o&&9!==o&&0!==n&&4!==n||e.push(t(o,n,10,5));return e}return function(e){var o=e.constructor.utils.setStyles,n=e.template,a=n.$player,i=n.$video,r=e.player,c=document.createElement("div");c.classList.add("artplayer-backlight"),o(c,{position:"absolute",zIndex:9,left:0,top:0,right:0,bottom:0,width:"100%",height:"100%"});var l,s=(l=c,t((function(t,e,o,n){var a=document.createElement("div");return a.style.position="absolute",a.style.left="".concat(100*t/o,"%"),a.style.top="".concat(100*e/n,"%"),a.style.width="".concat(100/o,"%"),a.style.height="".concat(100/n,"%"),a.style.webkitBorderRadius="50%",a.style.borderRadius="50%",a.style.webkitTransition="all .2s ease",a.style.transition="all .2s ease",l.appendChild(a),{$box:a,left:0===t,right:t===o-1,top:0===e,bottom:e===n-1}}))),u=document.createElement("canvas");return a.insertBefore(c,i),function o(){setTimeout((function(){if(r.playing){var n=i.clientWidth,a=i.clientHeight;(function(e,o,n,a){var i=e.getContext("2d");return e.width=n,e.height=a,i.drawImage(o,0,0),t((function(t,e,o,r){for(var c=n/o,l=a/r,s=t*c,u=e*l,d=i.getImageData(s,u,c,l).data,f=0,h=0,p=0,g=0,y=d.length;g65535||r>65535)throw"Width/Height invalid.";e[o++]=71,e[o++]=73,e[o++]=70,e[o++]=56,e[o++]=57,e[o++]=97;if(e[o++]=255&t,e[o++]=t>>8&255,e[o++]=255&r,e[o++]=r>>8&255,e[o++]=0|(null!==s?128:0),e[o++]=0,e[o++]=0,null!==a){if(a<0||a>65535)throw"Loop count invalid.";e[o++]=33,e[o++]=255,e[o++]=11,e[o++]=78,e[o++]=69,e[o++]=84,e[o++]=83,e[o++]=67,e[o++]=65,e[o++]=80,e[o++]=69,e[o++]=50,e[o++]=46,e[o++]=48,e[o++]=3,e[o++]=1,e[o++]=255&a,e[o++]=a>>8&255,e[o++]=0}var c=!1;this.addFrame=function(t,r,i,a,d,l){if(!0===c&&(--o,c=!1),l=l===n?{}:l,t<0||r<0||t>65535||r>65535)throw"x/y invalid.";if(i<=0||a<=0||i>65535||a>65535)throw"Width/Height invalid.";if(d.length256||t&t-1)throw"Invalid code/color length, must be power of 2 and 2 .. 256.";return t}(f),m=0;g>>=1;)++m;g=1< .")}return e}(e);if(!Ot[r]){Ot[r]=!0;var n="";t&&t._owner&&t._owner!==I.current&&(n=" It was passed a child from "+F(t._owner.type)+"."),V(t),Y(!1,'Each child in a list should have a unique "key" prop.%s%s See https://fb.me/react-warning-keys for more information.',r,n),V(null)}}}function jt(t,e){if("object"==typeof t)if(Array.isArray(t))for(var r=0;r ".concat(ae(t)," ".concat(ae(t)," ".concat(ot(t)," ".concat(ot(t)," ".concat(K(t)," ".concat(K(t)," ".concat(item, " ${item} ".concat(item, " ${item} ${escape(item)} ${escape(msg)} ${escape(item)} ${escape(msg)}1){for(var d=Array(p),y=0;y0&&!r.paused&&!r.ended&&r.readyState>2)}})}(e,this),function(t,e){var r=t.template,n=r.$container,o=r.$player,i=r.$video;Qt(e,"autoSize",{get:function(){return kt(n,"art-auto-size")},set:function(r){if(r){var a=i.videoWidth,c=i.videoHeight,l=n.getBoundingClientRect(),s=l.width,u=l.height,f=a/c,p=s/u;if(xt(n,"art-auto-size"),p>f)St(o,"width","".concat(u*f/s*100,"%")),St(o,"height","100%");else{var d=s/f/u*100;St(o,"width","100%"),St(o,"height","".concat(d,"%"))}t.emit("autoSize",{width:e.width,height:e.height})}else Ot(n,"art-auto-size"),St(o,"width",null),St(o,"height",null),t.emit("autoSize")}})}(e,this),function(t,e){Qt(e,"rect",{get:function(){return t.template.$player.getBoundingClientRect()}}),["bottom","height","left","right","top","width"].forEach((function(t){Qt(e,t,{get:function(){return e.rect[t]}})})),Qt(e,"x",{get:function(){return e.left+window.pageXOffset}}),Qt(e,"y",{get:function(){return e.top+window.pageYOffset}})}(e,this),function(t,e){var r=t.template.$player,n=t.i18n,o=t.notice;Qt(e,"flip",{get:function(){return r.dataset.flip},set:function(i){i||(i="normal");var a=["normal","horizontal","vertical"];qt(a.includes(i),"'flip' only accept ".concat(a.toString()," as parameters")),"normal"===i?delete r.dataset.flip:(e.rotate=!1,r.dataset.flip=i);var c=i.replace(i[0],i[0].toUpperCase());o.show="".concat(n.get("Flip"),": ").concat(n.get(c)),t.emit("flip",i)}}),Qt(e,"flipReset",{set:function(t){if(t&&e.flip){var r=e.flip;e.flip=r}}})}(e,this),function(t,e){var r=t.template.$undercover;Qt(e,"light",{get:function(){return"none"!==Et(r,"display",!1)},set:function(e){St(r,"display",e?"block":"none"),t.emit("light",e)}})}(e,this),function(t,e){var r=t.i18n,n=t.option,o=t.storage,i=t.events.proxy,a=t.template,c=a.$player,l=a.$miniClose,s=a.$miniTitle,u=a.$miniHeader,f="",p=!1,d=0,y=0,h=0,m=0;i(u,"mousedown",(function(t){p=!0,d=t.pageX,y=t.pageY,h=e.left,m=e.top})),i(document,"mousemove",(function(t){if(p){xt(c,"art-is-dragging");var e=m+t.pageY-y,r=h+t.pageX-d;St(c,"top","".concat(e,"px")),St(c,"left","".concat(r,"px")),o.set("top",e),o.set("left",r)}})),i(document,"mouseup",(function(){p=!1,Ot(c,"art-is-dragging")})),i(l,"click",(function(){e.mini=!1,p=!1,Ot(c,"art-is-dragging")})),jt(s,n.title||r.get("Mini player")),Qt(e,"mini",{get:function(){return kt(c,"art-mini")},set:function(r){if(r){e.autoSize=!1,f=c.style.cssText,xt(c,"art-mini");var i=o.get("top"),a=o.get("left");if(i&&a)St(c,"top","".concat(i,"px")),St(c,"left","".concat(a,"px")),Tt(u)||(o.del("top"),o.del("left"),e.mini=!0);else{var l=document.body,s=l.clientHeight-e.height-50,p=l.clientWidth-e.width-50;o.set("top",s),o.set("left",p),St(c,"top","".concat(s,"px")),St(c,"left","".concat(p,"px"))}e.aspectRatio=!1,e.playbackRate=!1,t.emit("mini",!0)}else c.style.cssText=f,Ot(c,"art-mini"),St(c,"top",null),St(c,"left",null),e.aspectRatio=!1,e.playbackRate=!1,e.autoSize=n.autoSize,t.emit("mini")}}),Qt(e,"miniToggle",{set:function(t){t&&(e.mini=!e.mini)}})}(e,this),function(t,e){var r=[];Qt(e,"loop",{get:function(){return r},set:function(n){if(Array.isArray(n)&&"number"==typeof n[0]&&"number"==typeof n[1]){var o=oe(n[0],0,Math.min(n[1],e.duration)),i=oe(n[1],o,e.duration);i-o>=1?(r=[o,i],t.emit("loop",r)):(r=[],t.emit("loop"))}else r=[],t.emit("loop")}}),t.on("video:timeupdate",(function(){r.length&&(e.currentTime0&&!r.paused&&!r.ended&&r.readyState>2)}})}(r,this),function(t,e){var r=t.template,n=r.$container,o=r.$player,i=r.$video;N(e,"autoSize",{get:function(){return w(n,"art-auto-size")},set:function(r){if(r){var a=i.videoWidth,c=i.videoHeight,l=n.getBoundingClientRect(),s=l.width,u=l.height,p=a/c,f=s/u;if(m(n,"art-auto-size"),f>p)k(o,"width","".concat(u*p/s*100,"%")),k(o,"height","100%");else{var d=s/p/u*100;k(o,"width","100%"),k(o,"height","".concat(d,"%"))}t.emit("autoSize",{width:e.width,height:e.height})}else b(n,"art-auto-size"),k(o,"width",null),k(o,"height",null),t.emit("autoSize")}})}(r,this),function(t,e){N(e,"rect",{get:function(){return t.template.$player.getBoundingClientRect()}}),["bottom","height","left","right","top","width"].forEach((function(t){N(e,t,{get:function(){return e.rect[t]}})})),N(e,"x",{get:function(){return e.left+window.pageXOffset}}),N(e,"y",{get:function(){return e.top+window.pageYOffset}})}(r,this),function(t,e){var r=t.template.$player,n=t.i18n,o=t.notice;N(e,"flip",{get:function(){return r.dataset.flip},set:function(i){i||(i="normal");var a=["normal","horizontal","vertical"];M(a.includes(i),"'flip' only accept ".concat(a.toString()," as parameters")),"normal"===i?delete r.dataset.flip:(e.rotate=!1,r.dataset.flip=i);var c=i.replace(i[0],i[0].toUpperCase());o.show="".concat(n.get("Flip"),": ").concat(n.get(c)),t.emit("flip",i)}}),N(e,"flipReset",{set:function(t){if(t&&e.flip){var r=e.flip;e.flip=r}}})}(r,this),function(t,e){var r=t.template.$undercover;N(e,"light",{get:function(){return"none"!==P(r,"display",!1)},set:function(e){k(r,"display",e?"block":"none"),t.emit("light",e)}})}(r,this),function(t,e){var r=t.i18n,n=t.option,o=t.storage,i=t.events.proxy,a=t.template,c=a.$player,l=a.$miniClose,s=a.$miniTitle,u=a.$miniHeader,p="",f=!1,d=0,h=0,y=0,v=0;i(u,"mousedown",(function(t){f=!0,d=t.pageX,h=t.pageY,y=e.left,v=e.top})),i(document,"mousemove",(function(t){if(f){m(c,"art-is-dragging");var e=v+t.pageY-h,r=y+t.pageX-d;k(c,"top","".concat(e,"px")),k(c,"left","".concat(r,"px")),o.set("top",e),o.set("left",r)}})),i(document,"mouseup",(function(){f=!1,b(c,"art-is-dragging")})),i(l,"click",(function(){e.mini=!1,f=!1,b(c,"art-is-dragging")})),x(s,n.title||r.get("Mini player")),N(e,"mini",{get:function(){return w(c,"art-mini")},set:function(r){if(r){e.autoSize=!1,p=c.style.cssText,m(c,"art-mini");var i=o.get("top"),a=o.get("left");if(i&&a)k(c,"top","".concat(i,"px")),k(c,"left","".concat(a,"px")),$(u)||(o.del("top"),o.del("left"),e.mini=!0);else{var l=document.body,s=l.clientHeight-e.height-50,f=l.clientWidth-e.width-50;o.set("top",s),o.set("left",f),k(c,"top","".concat(s,"px")),k(c,"left","".concat(f,"px"))}e.aspectRatio=!1,e.playbackRate=!1,t.emit("mini",!0)}else c.style.cssText=p,b(c,"art-mini"),k(c,"top",null),k(c,"left",null),e.aspectRatio=!1,e.playbackRate=!1,e.autoSize=n.autoSize,t.emit("mini")}}),N(e,"miniToggle",{set:function(t){t&&(e.mini=!e.mini)}})}(r,this),function(t,e){var r=[];N(e,"loop",{get:function(){return r},set:function(n){if(Array.isArray(n)&&"number"==typeof n[0]&&"number"==typeof n[1]){var o=J(n[0],0,Math.min(n[1],e.duration)),i=J(n[1],o,e.duration);i-o>=1?(r=[o,i],t.emit("loop",r)):(r=[],t.emit("loop"))}else r=[],t.emit("loop")}}),t.on("video:timeupdate",(function(){r.length&&(e.currentTime
')
- .replace(/\\n/g, q === 2 ? '
' : ' ');
- }
-
- function createDialogue(dialogue) {
- var this$1 = this;
-
- var $div = document.createElement('div');
- $div.className = 'ASS-dialogue';
- var df = document.createDocumentFragment();
- var slices = dialogue.slices;
- var start = dialogue.start;
- var end = dialogue.end;
- slices.forEach(function (slice) {
- var borderStyle = slice.borderStyle;
- slice.fragments.forEach(function (fragment) {
- var text = fragment.text;
- var drawing = fragment.drawing;
- var animationName = fragment.animationName;
- var tag = assign({}, slice.tag, fragment.tag);
- var cssText = 'display:inline-block;';
- var vct = this$1.video.currentTime;
- if (!drawing) {
- cssText += "font-family:\"" + (tag.fn) + "\",Arial;";
- cssText += "font-size:" + (this$1.scale * getRealFontSize(tag.fn, tag.fs)) + "px;";
- cssText += "color:" + (color2rgba(tag.a1 + tag.c1)) + ";";
- var scale = /Yes/i.test(this$1.info.ScaledBorderAndShadow) ? this$1.scale : 1;
- if (borderStyle === 1) {
- cssText += "text-shadow:" + (createCSSStroke(tag, scale)) + ";";
- }
- if (borderStyle === 3) {
- cssText += (
- "background-color:" + (color2rgba(tag.a3 + tag.c3)) + ";"
- + "box-shadow:" + (createCSSStroke(tag, scale)) + ";"
- );
- }
- cssText += tag.b ? ("font-weight:" + (tag.b === 1 ? 'bold' : tag.b) + ";") : '';
- cssText += tag.i ? 'font-style:italic;' : '';
- cssText += (tag.u || tag.s) ? ("text-decoration:" + (tag.u ? 'underline' : '') + " " + (tag.s ? 'line-through' : '') + ";") : '';
- cssText += tag.fsp ? ("letter-spacing:" + (tag.fsp) + "px;") : '';
- // TODO: (tag.q === 0) and (tag.q === 3) are not implemented yet,
- // for now just handle it as (tag.q === 1)
- if (tag.q === 1 || tag.q === 0 || tag.q === 3) {
- cssText += 'word-break:break-all;white-space:normal;';
- }
- if (tag.q === 2) {
- cssText += 'word-break:normal;white-space:nowrap;';
- }
- }
- var hasTransfrom = transformTags.some(function (x) { return (
- /^fsc[xy]$/.test(x) ? tag[x] !== 100 : !!tag[x]
- ); });
- if (hasTransfrom) {
- cssText += (vendor.transform) + "transform:" + (createTransform(tag)) + ";";
- if (!drawing) {
- cssText += 'transform-style:preserve-3d;word-break:normal;white-space:nowrap;';
- }
- }
- if (animationName) {
- cssText += createAnimation(animationName, end - start, Math.min(0, start - vct));
- }
- if (drawing && tag.pbo) {
- var pbo = this$1.scale * -tag.pbo * (tag.fscy || 100) / 100;
- cssText += "vertical-align:" + pbo + "px;";
- }
-
- var hasRotate = /"fr[xyz]":[^0]/.test(JSON.stringify(tag));
- encodeText(text, tag.q).split('
').forEach(function (html, idx) {
- var $span = document.createElement('span');
- $span.dataset.hasRotate = hasRotate;
- if (drawing) {
- var obj = createDrawing.call(this$1, fragment, slice.tag);
- $span.style.cssText = obj.cssText;
- $span.appendChild(obj.$svg);
- } else {
- if (idx) {
- df.appendChild(document.createElement('br'));
- }
- if (!html) {
- return;
- }
- $span.innerHTML = html;
- }
- // TODO: maybe it can be optimized
- $span.style.cssText += cssText;
- df.appendChild($span);
- });
- });
- });
- $div.appendChild(df);
- return $div;
- }
-
- function allocate(dialogue) {
- var layer = dialogue.layer;
- var margin = dialogue.margin;
- var width = dialogue.width;
- var height = dialogue.height;
- var alignment = dialogue.alignment;
- var end = dialogue.end;
- var stageWidth = this.width - (this.scale * (margin.left + margin.right) | 0);
- var stageHeight = this.height;
- var vertical = this.scale * margin.vertical | 0;
- var vct = this.video.currentTime * 100;
- this._.space[layer] = this._.space[layer] || {
- left: { width: new Uint16Array(stageHeight + 1), end: new Uint16Array(stageHeight + 1) },
- center: { width: new Uint16Array(stageHeight + 1), end: new Uint16Array(stageHeight + 1) },
- right: { width: new Uint16Array(stageHeight + 1), end: new Uint16Array(stageHeight + 1) },
- };
- var channel = this._.space[layer];
- var align = ['right', 'left', 'center'][alignment % 3];
- var willCollide = function (y) {
- var lw = channel.left.width[y];
- var cw = channel.center.width[y];
- var rw = channel.right.width[y];
- var le = channel.left.end[y];
- var ce = channel.center.end[y];
- var re = channel.right.end[y];
- return (
- (align === 'left' && (
- (le > vct && lw)
- || (ce > vct && cw && 2 * width + cw > stageWidth)
- || (re > vct && rw && width + rw > stageWidth)
- ))
- || (align === 'center' && (
- (le > vct && lw && 2 * lw + width > stageWidth)
- || (ce > vct && cw)
- || (re > vct && rw && 2 * rw + width > stageWidth)
- ))
- || (align === 'right' && (
- (le > vct && lw && lw + width > stageWidth)
- || (ce > vct && cw && 2 * width + cw > stageWidth)
- || (re > vct && rw)
- ))
- );
- };
- var count = 0;
- var result = 0;
- var find = function (y) {
- count = willCollide(y) ? 0 : count + 1;
- if (count >= height) {
- result = y;
- return true;
- }
- return false;
- };
- if (alignment <= 3) {
- for (var i = stageHeight - vertical - 1; i > vertical; i--) {
- if (find(i)) { break; }
- }
- } else if (alignment >= 7) {
- for (var i$1 = vertical + 1; i$1 < stageHeight - vertical; i$1++) {
- if (find(i$1)) { break; }
- }
- } else {
- for (var i$2 = (stageHeight - height) >> 1; i$2 < stageHeight - vertical; i$2++) {
- if (find(i$2)) { break; }
- }
- }
- if (alignment > 3) {
- result -= height - 1;
- }
- for (var i$3 = result; i$3 < result + height; i$3++) {
- channel[align].width[i$3] = width;
- channel[align].end[i$3] = end * 100;
- }
- return result;
- }
-
- function getPosition(dialogue) {
- var effect = dialogue.effect;
- var move = dialogue.move;
- var alignment = dialogue.alignment;
- var width = dialogue.width;
- var height = dialogue.height;
- var margin = dialogue.margin;
- var slices = dialogue.slices;
- var x = 0;
- var y = 0;
- if (effect) {
- if (effect.name === 'banner') {
- if (alignment <= 3) { y = this.height - height - margin.vertical; }
- if (alignment >= 4 && alignment <= 6) { y = (this.height - height) / 2; }
- if (alignment >= 7) { y = margin.vertical; }
- x = effect.lefttoright ? -width : this.width;
- }
- } else if (dialogue.pos || move) {
- var pos = dialogue.pos || { x: 0, y: 0 };
- if (alignment % 3 === 1) { x = this.scale * pos.x; }
- if (alignment % 3 === 2) { x = this.scale * pos.x - width / 2; }
- if (alignment % 3 === 0) { x = this.scale * pos.x - width; }
- if (alignment <= 3) { y = this.scale * pos.y - height; }
- if (alignment >= 4 && alignment <= 6) { y = this.scale * pos.y - height / 2; }
- if (alignment >= 7) { y = this.scale * pos.y; }
- } else {
- if (alignment % 3 === 1) { x = 0; }
- if (alignment % 3 === 2) { x = (this.width - width) / 2; }
- if (alignment % 3 === 0) { x = this.width - width - this.scale * margin.right; }
- var hasT = slices.some(function (slice) { return (
- slice.fragments.some(function (ref) {
- var animationName = ref.animationName;
-
- return animationName;
- })
- ); });
- if (hasT) {
- if (alignment <= 3) { y = this.height - height - margin.vertical; }
- if (alignment >= 4 && alignment <= 6) { y = (this.height - height) / 2; }
- if (alignment >= 7) { y = margin.vertical; }
- } else {
- y = allocate.call(this, dialogue);
- }
- }
- return { x: x, y: y };
- }
-
- function createStyle(dialogue) {
- var layer = dialogue.layer;
- var start = dialogue.start;
- var end = dialogue.end;
- var alignment = dialogue.alignment;
- var effect = dialogue.effect;
- var pos = dialogue.pos;
- var margin = dialogue.margin;
- var animationName = dialogue.animationName;
- var width = dialogue.width;
- var height = dialogue.height;
- var x = dialogue.x;
- var y = dialogue.y;
- var vct = this.video.currentTime;
- var cssText = '';
- if (layer) { cssText += "z-index:" + layer + ";"; }
- if (animationName) {
- cssText += createAnimation(animationName, end - start, Math.min(0, start - vct));
- }
- cssText += "text-align:" + (['right', 'left', 'center'][alignment % 3]) + ";";
- if (!effect) {
- var mw = this.width - this.scale * (margin.left + margin.right);
- cssText += "max-width:" + mw + "px;";
- if (!pos) {
- if (alignment % 3 === 1) {
- cssText += "margin-left:" + (this.scale * margin.left) + "px;";
- }
- if (alignment % 3 === 0) {
- cssText += "margin-right:" + (this.scale * margin.right) + "px;";
- }
- if (width > this.width - this.scale * (margin.left + margin.right)) {
- cssText += "margin-left:" + (this.scale * margin.left) + "px;";
- cssText += "margin-right:" + (this.scale * margin.right) + "px;";
- }
- }
- }
- cssText += "width:" + width + "px;height:" + height + "px;left:" + x + "px;top:" + y + "px;";
- return cssText;
- }
-
- function renderer(dialogue) {
- var $div = createDialogue.call(this, dialogue);
- assign(dialogue, { $div: $div });
- this._.$stage.appendChild($div);
- var ref = $div.getBoundingClientRect();
- var width = ref.width;
- var height = ref.height;
- assign(dialogue, { width: width, height: height });
- assign(dialogue, getPosition.call(this, dialogue));
- $div.style.cssText = createStyle.call(this, dialogue);
- setTransformOrigin(dialogue);
- setClipPath.call(this, dialogue);
- return dialogue;
- }
-
- function framing() {
- var vct = this.video.currentTime;
- for (var i = this._.stagings.length - 1; i >= 0; i--) {
- var dia = this._.stagings[i];
- var end = dia.end;
- if (dia.effect && /scroll/.test(dia.effect.name)) {
- var ref = dia.effect;
- var y1 = ref.y1;
- var y2 = ref.y2;
- var delay = ref.delay;
- var duration = ((y2 || this._.resampledRes.height) - y1) / (1000 / delay);
- end = Math.min(end, dia.start + duration);
- }
- if (end < vct) {
- this._.$stage.removeChild(dia.$div);
- if (dia.$clipPath) {
- this._.$defs.removeChild(dia.$clipPath);
- }
- this._.stagings.splice(i, 1);
- }
- }
- var dias = this.dialogues;
- while (
- this._.index < dias.length
- && vct >= dias[this._.index].start
- ) {
- if (vct < dias[this._.index].end) {
- var dia$1 = renderer.call(this, dias[this._.index]);
- this._.stagings.push(dia$1);
- }
- ++this._.index;
- }
- }
-
- function play() {
- var this$1 = this;
-
- var frame = function () {
- framing.call(this$1);
- this$1._.requestId = raf(frame);
- };
- caf(this._.requestId);
- this._.requestId = raf(frame);
- this._.$stage.classList.remove('ASS-animation-paused');
- return this;
- }
-
- function pause() {
- caf(this._.requestId);
- this._.requestId = 0;
- this._.$stage.classList.add('ASS-animation-paused');
- return this;
- }
-
- function clear() {
- while (this._.$stage.lastChild) {
- this._.$stage.removeChild(this._.$stage.lastChild);
- }
- while (this._.$defs.lastChild) {
- this._.$defs.removeChild(this._.$defs.lastChild);
- }
- this._.stagings = [];
- this._.space = [];
- }
-
- function seek() {
- var vct = this.video.currentTime;
- var dias = this.dialogues;
- clear.call(this);
- this._.index = (function () {
- var from = 0;
- var to = dias.length - 1;
- while (from + 1 < to && vct > dias[(to + from) >> 1].end) {
- from = (to + from) >> 1;
- }
- if (!from) { return 0; }
- for (var i = from; i < to; i++) {
- if (
- dias[i].end > vct && vct >= dias[i].start
- || (i && dias[i - 1].end < vct && vct < dias[i].start)
- ) {
- return i;
- }
- }
- return to;
- })();
- framing.call(this);
- }
-
- function bindEvents() {
- var l = this._.listener;
- l.play = play.bind(this);
- l.pause = pause.bind(this);
- l.seeking = seek.bind(this);
- this.video.addEventListener('play', l.play);
- this.video.addEventListener('pause', l.pause);
- this.video.addEventListener('seeking', l.seeking);
- }
-
- function unbindEvents() {
- var l = this._.listener;
- this.video.removeEventListener('play', l.play);
- this.video.removeEventListener('pause', l.pause);
- this.video.removeEventListener('seeking', l.seeking);
- l.play = null;
- l.pause = null;
- l.seeking = null;
- }
-
- function resize() {
- var cw = this.video.clientWidth;
- var ch = this.video.clientHeight;
- var vw = this.video.videoWidth || cw;
- var vh = this.video.videoHeight || ch;
- var sw = this._.scriptRes.width;
- var sh = this._.scriptRes.height;
- var rw = sw;
- var rh = sh;
- var videoScale = Math.min(cw / vw, ch / vh);
- if (this.resampling === 'video_width') {
- rh = sw / vw * vh;
- }
- if (this.resampling === 'video_height') {
- rw = sh / vh * vw;
- }
- this.scale = Math.min(cw / rw, ch / rh);
- if (this.resampling === 'script_width') {
- this.scale = videoScale * (vw / rw);
- }
- if (this.resampling === 'script_height') {
- this.scale = videoScale * (vh / rh);
- }
- this.width = this.scale * rw;
- this.height = this.scale * rh;
- this._.resampledRes = { width: rw, height: rh };
-
- this.container.style.cssText = "width:" + cw + "px;height:" + ch + "px;";
- var cssText = (
- "width:" + (this.width) + "px;"
- + "height:" + (this.height) + "px;"
- + "top:" + ((ch - this.height) / 2) + "px;"
- + "left:" + ((cw - this.width) / 2) + "px;"
- );
- this._.$stage.style.cssText = cssText;
- this._.$svg.style.cssText = cssText;
- this._.$svg.setAttributeNS(null, 'viewBox', ("0 0 " + sw + " " + sh));
-
- this._.$animation.innerHTML = getKeyframes.call(this);
- seek.call(this);
-
- return this;
- }
-
- var GLOBAL_CSS = '.ASS-container,.ASS-stage{position:relative;overflow:hidden}.ASS-container video{position:absolute;top:0;left:0}.ASS-stage{pointer-events:none;position:absolute}.ASS-dialogue{font-size:0;position:absolute}.ASS-fix-font-size{position:absolute;visibility:hidden}.ASS-fix-objectBoundingBox{width:100%;height:100%;position:absolute;top:0;left:0}.ASS-animation-paused *{-webkit-animation-play-state:paused!important;animation-play-state:paused!important}';
-
- function init(source, video, options) {
- if ( options === void 0 ) options = {};
-
- this.scale = 1;
-
- // private variables
- this._ = {
- index: 0,
- stagings: [],
- space: [],
- listener: {},
- $svg: createSVGEl('svg'),
- $defs: createSVGEl('defs'),
- $stage: document.createElement('div'),
- $animation: document.createElement('style'),
- };
- this._.$svg.appendChild(this._.$defs);
- this._.$stage.className = 'ASS-stage ASS-animation-paused';
-
- this._.resampling = options.resampling || 'video_height';
-
- this.container = options.container || document.createElement('div');
- this.container.classList.add('ASS-container');
- this.container.appendChild($fixFontSize);
- this.container.appendChild(this._.$svg);
- this._.hasInitContainer = !!options.container;
-
- this.video = video;
- bindEvents.call(this);
- if (!this._.hasInitContainer) {
- var isPlaying = !video.paused;
- video.parentNode.insertBefore(this.container, video);
- this.container.appendChild(video);
- if (isPlaying && video.paused) {
- video.play();
- }
- }
- this.container.appendChild(this._.$stage);
-
- var ref = compile(source);
- var info = ref.info;
- var width = ref.width;
- var height = ref.height;
- var dialogues = ref.dialogues;
- this.info = info;
- this._.scriptRes = {
- width: width || video.videoWidth,
- height: height || video.videoHeight,
- };
- this.dialogues = dialogues;
-
- var styleRoot = getStyleRoot(this.container);
- var $style = styleRoot.querySelector('#ASS-global-style');
- if (!$style) {
- $style = document.createElement('style');
- $style.type = 'text/css';
- $style.id = 'ASS-global-style';
- $style.appendChild(document.createTextNode(GLOBAL_CSS));
- styleRoot.appendChild($style);
- }
- this._.$animation.type = 'text/css';
- this._.$animation.className = 'ASS-animation';
- styleRoot.appendChild(this._.$animation);
-
- resize.call(this);
-
- if (!this.video.paused) {
- seek.call(this);
- play.call(this);
- }
-
- return this;
- }
-
- function show() {
- this._.$stage.style.visibility = 'visible';
- return this;
- }
-
- function hide() {
- this._.$stage.style.visibility = 'hidden';
- return this;
- }
-
- function destroy() {
- pause.call(this);
- clear.call(this);
- unbindEvents.call(this, this._.listener);
-
- var styleRoot = getStyleRoot(this.container);
- if (!this._.hasInitContainer) {
- var isPlay = !this.video.paused;
- this.container.parentNode.insertBefore(this.video, this.container);
- this.container.parentNode.removeChild(this.container);
- if (isPlay && this.video.paused) {
- this.video.play();
- }
- }
- styleRoot.removeChild(this._.$animation);
-
- // eslint-disable-next-line no-restricted-syntax
- for (var key in this) {
- if (Object.prototype.hasOwnProperty.call(this, key)) {
- this[key] = null;
- }
- }
-
- return this;
- }
-
- var regex = /^(video|script)_(width|height)$/;
-
- function getter() {
- return regex.test(this._.resampling) ? this._.resampling : 'video_height';
- }
-
- function setter(r) {
- if (r === this._.resampling) { return r; }
- if (regex.test(r)) {
- this._.resampling = r;
- this.resize();
- }
- return this._.resampling;
- }
-
- var ASS = function ASS(source, video, options) {
- if (typeof source !== 'string') {
- return this;
- }
- return init.call(this, source, video, options);
- };
-
- var prototypeAccessors = { resampling: { configurable: true } };
-
- ASS.prototype.resize = function resize$1 () {
- return resize.call(this);
- };
-
- ASS.prototype.show = function show$1 () {
- return show.call(this);
- };
-
- ASS.prototype.hide = function hide$1 () {
- return hide.call(this);
- };
-
- ASS.prototype.destroy = function destroy$1 () {
- return destroy.call(this);
- };
-
- prototypeAccessors.resampling.get = function () {
- return getter.call(this);
- };
-
- prototypeAccessors.resampling.set = function (r) {
- return setter.call(this, r);
- };
-
- Object.defineProperties( ASS.prototype, prototypeAccessors );
-
- function styleInject(css, ref) {
- if ( ref === void 0 ) ref = {};
- var insertAt = ref.insertAt;
-
- if (!css || typeof document === 'undefined') { return; }
-
- var head = document.head || document.getElementsByTagName('head')[0];
- var style = document.createElement('style');
- style.type = 'text/css';
-
- if (insertAt === 'top') {
- if (head.firstChild) {
- head.insertBefore(style, head.firstChild);
- } else {
- head.appendChild(style);
- }
- } else {
- head.appendChild(style);
- }
-
- if (style.styleSheet) {
- style.styleSheet.cssText = css;
- } else {
- style.appendChild(document.createTextNode(css));
- }
- }
-
- var css_248z = ".artplayer-plugin-ass{bottom:0!important}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQ0Usa0JBQXNCIiwiZmlsZSI6InN0eWxlLnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuYXJ0cGxheWVyLXBsdWdpbi1hc3Mge1xuICBib3R0b206IDAgIWltcG9ydGFudDsgfVxuIl19 */";
- styleInject(css_248z);
-
- function artplayerPluginAss(url) {
- return function (art) {
- var ass = null;
- fetch(url).then(function (res) {
- return res.text();
- }).then(function (text) {
- var _art$template = art.template,
- $video = _art$template.$video,
- $subtitle = _art$template.$subtitle;
- $subtitle.classList.add('artplayer-plugin-ass');
- art.once('ready', function () {
- ass = new ASS(text, $video, {
- container: $subtitle,
- resampling: 'video_width'
- });
- ass.resize();
- art.emit('artplayerPluginAss', ass);
- art.on('resize', function () {
- return ass.resize();
- });
- art.on('destroy', function () {
- return ass.destroy();
- });
- });
- });
- return {
- name: 'artplayerPluginAss',
- ass: ass
- };
- };
- }
-
- return artplayerPluginAss;
-
-})));
-//# sourceMappingURL=artplayer-plugin-ass.js.map
diff --git a/docs/uncompiled/artplayer-plugin-ass.js.map b/docs/uncompiled/artplayer-plugin-ass.js.map
deleted file mode 100644
index 864c4aac5..000000000
--- a/docs/uncompiled/artplayer-plugin-ass.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"artplayer-plugin-ass.js","sources":["../../packages/artplayer-plugin-ass/node_modules/_assjs@0.0.11@assjs/dist/ass.esm.js","../../node_modules/_style-inject@0.3.0@style-inject/dist/style-inject.es.js","../../packages/artplayer-plugin-ass/src/index.js"],"sourcesContent":["function parseEffect(text) {\n var param = text\n .toLowerCase()\n .trim()\n .split(/\\s*;\\s*/);\n if (param[0] === 'banner') {\n return {\n name: param[0],\n delay: param[1] * 1 || 0,\n leftToRight: param[2] * 1 || 0,\n fadeAwayWidth: param[3] * 1 || 0,\n };\n }\n if (/^scroll\\s/.test(param[0])) {\n return {\n name: param[0],\n y1: Math.min(param[1] * 1, param[2] * 1),\n y2: Math.max(param[1] * 1, param[2] * 1),\n delay: param[3] * 1 || 0,\n fadeAwayHeight: param[4] * 1 || 0,\n };\n }\n return null;\n}\n\nfunction parseDrawing(text) {\n return text\n .toLowerCase()\n // numbers\n .replace(/([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?)/g, ' $1 ')\n // commands\n .replace(/([mnlbspc])/g, ' $1 ')\n .trim()\n .replace(/\\s+/g, ' ')\n .split(/\\s(?=[mnlbspc])/)\n .map(function (cmd) { return (\n cmd.split(' ')\n .filter(function (x, i) { return !(i && Number.isNaN(x * 1)); })\n ); });\n}\n\nvar numTags = [\n 'b', 'i', 'u', 's', 'fsp',\n 'k', 'K', 'kf', 'ko', 'kt',\n 'fe', 'q', 'p', 'pbo', 'a', 'an',\n 'fscx', 'fscy', 'fax', 'fay', 'frx', 'fry', 'frz', 'fr',\n 'be', 'blur', 'bord', 'xbord', 'ybord', 'shad', 'xshad', 'yshad' ];\n\nvar numRegexs = numTags.map(function (nt) { return ({ name: nt, regex: new RegExp((\"^\" + nt + \"-?\\\\d\")) }); });\n\nfunction parseTag(text) {\n var assign;\n\n var tag = {};\n for (var i = 0; i < numRegexs.length; i++) {\n var ref = numRegexs[i];\n var name = ref.name;\n var regex = ref.regex;\n if (regex.test(text)) {\n tag[name] = text.slice(name.length) * 1;\n return tag;\n }\n }\n if (/^fn/.test(text)) {\n tag.fn = text.slice(2);\n } else if (/^r/.test(text)) {\n tag.r = text.slice(1);\n } else if (/^fs[\\d+-]/.test(text)) {\n tag.fs = text.slice(2);\n } else if (/^\\d?c&?H?[0-9a-f]+|^\\d?c$/i.test(text)) {\n var ref$1 = text.match(/^(\\d?)c&?H?(\\w*)/);\n var num = ref$1[1];\n var color = ref$1[2];\n tag[(\"c\" + (num || 1))] = color && (\"000000\" + color).slice(-6);\n } else if (/^\\da&?H?[0-9a-f]+/i.test(text)) {\n var ref$2 = text.match(/^(\\d)a&?H?(\\w\\w)/);\n var num$1 = ref$2[1];\n var alpha = ref$2[2];\n tag[(\"a\" + num$1)] = alpha;\n } else if (/^alpha&?H?[0-9a-f]+/i.test(text)) {\n (assign = text.match(/^alpha&?H?([0-9a-f]+)/i), tag.alpha = assign[1]);\n tag.alpha = (\"00\" + (tag.alpha)).slice(-2);\n } else if (/^(?:pos|org|move|fad|fade)\\(/.test(text)) {\n var ref$3 = text.match(/^(\\w+)\\((.*?)\\)?$/);\n var key = ref$3[1];\n var value = ref$3[2];\n tag[key] = value\n .trim()\n .split(/\\s*,\\s*/)\n .map(Number);\n } else if (/^i?clip/.test(text)) {\n var p = text\n .match(/^i?clip\\((.*?)\\)?$/)[1]\n .trim()\n .split(/\\s*,\\s*/);\n tag.clip = {\n inverse: /iclip/.test(text),\n scale: 1,\n drawing: null,\n dots: null,\n };\n if (p.length === 1) {\n tag.clip.drawing = parseDrawing(p[0]);\n }\n if (p.length === 2) {\n tag.clip.scale = p[0] * 1;\n tag.clip.drawing = parseDrawing(p[1]);\n }\n if (p.length === 4) {\n tag.clip.dots = p.map(Number);\n }\n } else if (/^t\\(/.test(text)) {\n var p$1 = text\n .match(/^t\\((.*?)\\)?$/)[1]\n .trim()\n .replace(/\\\\.*/, function (x) { return x.replace(/,/g, '\\n'); })\n .split(/\\s*,\\s*/);\n if (!p$1[0]) { return tag; }\n tag.t = {\n t1: 0,\n t2: 0,\n accel: 1,\n tags: p$1[p$1.length - 1]\n .replace(/\\n/g, ',')\n .split('\\\\')\n .slice(1)\n .map(parseTag),\n };\n if (p$1.length === 2) {\n tag.t.accel = p$1[0] * 1;\n }\n if (p$1.length === 3) {\n tag.t.t1 = p$1[0] * 1;\n tag.t.t2 = p$1[1] * 1;\n }\n if (p$1.length === 4) {\n tag.t.t1 = p$1[0] * 1;\n tag.t.t2 = p$1[1] * 1;\n tag.t.accel = p$1[2] * 1;\n }\n }\n\n return tag;\n}\n\nfunction parseTags(text) {\n var tags = [];\n var depth = 0;\n var str = '';\n for (var i = 0; i < text.length; i++) {\n var x = text[i];\n if (x === '(') { depth++; }\n if (x === ')') { depth--; }\n if (depth < 0) { depth = 0; }\n if (!depth && x === '\\\\') {\n if (str) {\n tags.push(str);\n }\n str = '';\n } else {\n str += x;\n }\n }\n tags.push(str);\n return tags.map(parseTag);\n}\n\nfunction parseText(text) {\n var pairs = text.split(/{([^{}]*?)}/);\n var parsed = [];\n if (pairs[0].length) {\n parsed.push({ tags: [], text: pairs[0], drawing: [] });\n }\n for (var i = 1; i < pairs.length; i += 2) {\n var tags = parseTags(pairs[i]);\n var isDrawing = tags.reduce(function (v, tag) { return (tag.p === undefined ? v : !!tag.p); }, false);\n parsed.push({\n tags: tags,\n text: isDrawing ? '' : pairs[i + 1],\n drawing: isDrawing ? parseDrawing(pairs[i + 1]) : [],\n });\n }\n return {\n raw: text,\n combined: parsed.map(function (frag) { return frag.text; }).join(''),\n parsed: parsed,\n };\n}\n\nfunction parseTime(time) {\n var t = time.split(':');\n return t[0] * 3600 + t[1] * 60 + t[2] * 1;\n}\n\nfunction parseDialogue(text, format) {\n var fields = text.split(',');\n if (fields.length > format.length) {\n var textField = fields.slice(format.length - 1).join();\n fields = fields.slice(0, format.length - 1);\n fields.push(textField);\n }\n\n var dia = {};\n for (var i = 0; i < fields.length; i++) {\n var fmt = format[i];\n var fld = fields[i].trim();\n switch (fmt) {\n case 'Layer':\n case 'MarginL':\n case 'MarginR':\n case 'MarginV':\n dia[fmt] = fld * 1;\n break;\n case 'Start':\n case 'End':\n dia[fmt] = parseTime(fld);\n break;\n case 'Effect':\n dia[fmt] = parseEffect(fld);\n break;\n case 'Text':\n dia[fmt] = parseText(fld);\n break;\n default:\n dia[fmt] = fld;\n }\n }\n\n return dia;\n}\n\nfunction parseFormat(text) {\n return text.match(/Format\\s*:\\s*(.*)/i)[1].split(/\\s*,\\s*/);\n}\n\nfunction parseStyle(text) {\n return text.match(/Style\\s*:\\s*(.*)/i)[1].split(/\\s*,\\s*/);\n}\n\nfunction parse(text) {\n var tree = {\n info: {},\n styles: { format: [], style: [] },\n events: { format: [], comment: [], dialogue: [] },\n };\n var lines = text.split(/\\r?\\n/);\n var state = 0;\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i].trim();\n if (/^;/.test(line)) { continue; }\n\n if (/^\\[Script Info\\]/i.test(line)) { state = 1; }\n else if (/^\\[V4\\+? Styles\\]/i.test(line)) { state = 2; }\n else if (/^\\[Events\\]/i.test(line)) { state = 3; }\n else if (/^\\[.*\\]/.test(line)) { state = 0; }\n\n if (state === 0) { continue; }\n if (state === 1) {\n if (/:/.test(line)) {\n var ref = line.match(/(.*?)\\s*:\\s*(.*)/);\n var key = ref[1];\n var value = ref[2];\n tree.info[key] = value;\n }\n }\n if (state === 2) {\n if (/^Format\\s*:/i.test(line)) {\n tree.styles.format = parseFormat(line);\n }\n if (/^Style\\s*:/i.test(line)) {\n tree.styles.style.push(parseStyle(line));\n }\n }\n if (state === 3) {\n if (/^Format\\s*:/i.test(line)) {\n tree.events.format = parseFormat(line);\n }\n if (/^(?:Comment|Dialogue)\\s*:/i.test(line)) {\n var ref$1 = line.match(/^(\\w+?)\\s*:\\s*(.*)/i);\n var key$1 = ref$1[1];\n var value$1 = ref$1[2];\n tree.events[key$1.toLowerCase()].push(parseDialogue(value$1, tree.events.format));\n }\n }\n }\n\n return tree;\n}\n\nvar assign = Object.assign || (\n /* istanbul ignore next */\n function assign(target) {\n var sources = [], len = arguments.length - 1;\n while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ];\n\n for (var i = 0; i < sources.length; i++) {\n if (!sources[i]) { continue; }\n var keys = Object.keys(sources[i]);\n for (var j = 0; j < keys.length; j++) {\n // eslint-disable-next-line no-param-reassign\n target[keys[j]] = sources[i][keys[j]];\n }\n }\n return target;\n }\n);\n\nfunction createCommand(arr) {\n var cmd = {\n type: null,\n prev: null,\n next: null,\n points: [],\n };\n if (/[mnlbs]/.test(arr[0])) {\n cmd.type = arr[0]\n .toUpperCase()\n .replace('N', 'L')\n .replace('B', 'C');\n }\n for (var len = arr.length - !(arr.length & 1), i = 1; i < len; i += 2) {\n cmd.points.push({ x: arr[i] * 1, y: arr[i + 1] * 1 });\n }\n return cmd;\n}\n\nfunction isValid(cmd) {\n if (!cmd.points.length || !cmd.type) {\n return false;\n }\n if (/C|S/.test(cmd.type) && cmd.points.length < 3) {\n return false;\n }\n return true;\n}\n\nfunction getViewBox(commands) {\n var ref;\n\n var minX = Infinity;\n var minY = Infinity;\n var maxX = -Infinity;\n var maxY = -Infinity;\n (ref = []).concat.apply(ref, commands.map(function (ref) {\n var points = ref.points;\n\n return points;\n })).forEach(function (ref) {\n var x = ref.x;\n var y = ref.y;\n\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n });\n return {\n minX: minX,\n minY: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n}\n\n/**\n * Convert S command to B command\n * Reference from https://github.com/d3/d3/blob/v3.5.17/src/svg/line.js#L259\n * @param {Array} points points\n * @param {String} prev type of previous command\n * @param {String} next type of next command\n * @return {Array} converted commands\n */\nfunction s2b(points, prev, next) {\n var results = [];\n var bb1 = [0, 2 / 3, 1 / 3, 0];\n var bb2 = [0, 1 / 3, 2 / 3, 0];\n var bb3 = [0, 1 / 6, 2 / 3, 1 / 6];\n var dot4 = function (a, b) { return (a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]); };\n var px = [points[points.length - 1].x, points[0].x, points[1].x, points[2].x];\n var py = [points[points.length - 1].y, points[0].y, points[1].y, points[2].y];\n results.push({\n type: prev === 'M' ? 'M' : 'L',\n points: [{ x: dot4(bb3, px), y: dot4(bb3, py) }],\n });\n for (var i = 3; i < points.length; i++) {\n px = [points[i - 3].x, points[i - 2].x, points[i - 1].x, points[i].x];\n py = [points[i - 3].y, points[i - 2].y, points[i - 1].y, points[i].y];\n results.push({\n type: 'C',\n points: [\n { x: dot4(bb1, px), y: dot4(bb1, py) },\n { x: dot4(bb2, px), y: dot4(bb2, py) },\n { x: dot4(bb3, px), y: dot4(bb3, py) } ],\n });\n }\n if (next === 'L' || next === 'C') {\n var last = points[points.length - 1];\n results.push({ type: 'L', points: [{ x: last.x, y: last.y }] });\n }\n return results;\n}\n\nfunction toSVGPath(instructions) {\n return instructions.map(function (ref) {\n var type = ref.type;\n var points = ref.points;\n\n return (\n type + points.map(function (ref) {\n var x = ref.x;\n var y = ref.y;\n\n return (x + \",\" + y);\n }).join(',')\n );\n }).join('');\n}\n\nfunction compileDrawing(rawCommands) {\n var ref$1;\n\n var commands = [];\n var i = 0;\n while (i < rawCommands.length) {\n var arr = rawCommands[i];\n var cmd = createCommand(arr);\n if (isValid(cmd)) {\n if (cmd.type === 'S') {\n var ref = (commands[i - 1] || { points: [{ x: 0, y: 0 }] }).points.slice(-1)[0];\n var x = ref.x;\n var y = ref.y;\n cmd.points.unshift({ x: x, y: y });\n }\n if (i) {\n cmd.prev = commands[i - 1].type;\n commands[i - 1].next = cmd.type;\n }\n commands.push(cmd);\n i++;\n } else {\n if (i && commands[i - 1].type === 'S') {\n var additionPoints = {\n p: cmd.points,\n c: commands[i - 1].points.slice(0, 3),\n };\n commands[i - 1].points = commands[i - 1].points.concat(\n (additionPoints[arr[0]] || []).map(function (ref) {\n var x = ref.x;\n var y = ref.y;\n\n return ({ x: x, y: y });\n })\n );\n }\n rawCommands.splice(i, 1);\n }\n }\n var instructions = (ref$1 = []).concat.apply(\n ref$1, commands.map(function (ref) {\n var type = ref.type;\n var points = ref.points;\n var prev = ref.prev;\n var next = ref.next;\n\n return (\n type === 'S'\n ? s2b(points, prev, next)\n : { type: type, points: points }\n );\n })\n );\n\n return assign({ instructions: instructions, d: toSVGPath(instructions) }, getViewBox(commands));\n}\n\nvar tTags = [\n 'fs', 'clip',\n 'c1', 'c2', 'c3', 'c4', 'a1', 'a2', 'a3', 'a4', 'alpha',\n 'fscx', 'fscy', 'fax', 'fay', 'frx', 'fry', 'frz', 'fr',\n 'be', 'blur', 'bord', 'xbord', 'ybord', 'shad', 'xshad', 'yshad' ];\n\nfunction compileTag(tag, key, presets) {\n var obj, obj$1, obj$2;\n\n if ( presets === void 0 ) presets = {};\n var value = tag[key];\n if (value === undefined) {\n return null;\n }\n if (key === 'pos' || key === 'org') {\n return value.length === 2 ? ( obj = {}, obj[key] = { x: value[0], y: value[1] }, obj ) : null;\n }\n if (key === 'move') {\n var x1 = value[0];\n var y1 = value[1];\n var x2 = value[2];\n var y2 = value[3];\n var t1 = value[4]; if ( t1 === void 0 ) t1 = 0;\n var t2 = value[5]; if ( t2 === void 0 ) t2 = 0;\n return value.length === 4 || value.length === 6\n ? { move: { x1: x1, y1: y1, x2: x2, y2: y2, t1: t1, t2: t2 } }\n : null;\n }\n if (key === 'fad' || key === 'fade') {\n if (value.length === 2) {\n var t1$1 = value[0];\n var t2$1 = value[1];\n return { fade: { type: 'fad', t1: t1$1, t2: t2$1 } };\n }\n if (value.length === 7) {\n var a1 = value[0];\n var a2 = value[1];\n var a3 = value[2];\n var t1$2 = value[3];\n var t2$2 = value[4];\n var t3 = value[5];\n var t4 = value[6];\n return { fade: { type: 'fade', a1: a1, a2: a2, a3: a3, t1: t1$2, t2: t2$2, t3: t3, t4: t4 } };\n }\n return null;\n }\n if (key === 'clip') {\n var inverse = value.inverse;\n var scale = value.scale;\n var drawing = value.drawing;\n var dots = value.dots;\n if (drawing) {\n return { clip: { inverse: inverse, scale: scale, drawing: compileDrawing(drawing), dots: dots } };\n }\n if (dots) {\n var x1$1 = dots[0];\n var y1$1 = dots[1];\n var x2$1 = dots[2];\n var y2$1 = dots[3];\n return { clip: { inverse: inverse, scale: scale, drawing: drawing, dots: { x1: x1$1, y1: y1$1, x2: x2$1, y2: y2$1 } } };\n }\n return null;\n }\n if (/^[xy]?(bord|shad)$/.test(key)) {\n value = Math.max(value, 0);\n }\n if (key === 'bord') {\n return { xbord: value, ybord: value };\n }\n if (key === 'shad') {\n return { xshad: value, yshad: value };\n }\n if (/^c\\d$/.test(key)) {\n return ( obj$1 = {}, obj$1[key] = value || presets[key], obj$1 );\n }\n if (key === 'alpha') {\n return { a1: value, a2: value, a3: value, a4: value };\n }\n if (key === 'fr') {\n return { frz: value };\n }\n if (key === 'fs') {\n return {\n fs: /^\\+|-/.test(value)\n ? (value * 1 > -10 ? (1 + value / 10) : 1) * presets.fs\n : value * 1,\n };\n }\n if (key === 't') {\n var t1$3 = value.t1;\n var accel = value.accel;\n var tags = value.tags;\n var t2$3 = value.t2 || (presets.end - presets.start) * 1e3;\n var compiledTag = {};\n tags.forEach(function (t) {\n var k = Object.keys(t)[0];\n if (~tTags.indexOf(k) && !(k === 'clip' && !t[k].dots)) {\n assign(compiledTag, compileTag(t, k, presets));\n }\n });\n return { t: { t1: t1$3, t2: t2$3, accel: accel, tag: compiledTag } };\n }\n return ( obj$2 = {}, obj$2[key] = value, obj$2 );\n}\n\nvar a2an = [\n null, 1, 2, 3,\n null, 7, 8, 9,\n null, 4, 5, 6 ];\n\nvar globalTags = ['r', 'a', 'an', 'pos', 'org', 'move', 'fade', 'fad', 'clip'];\n\nfunction createSlice(name, styles) {\n return {\n name: name,\n borderStyle: styles[name].style.BorderStyle,\n tag: styles[name].tag,\n fragments: [],\n };\n}\n\nfunction compileText(ref) {\n var styles = ref.styles;\n var name = ref.name;\n var parsed = ref.parsed;\n var start = ref.start;\n var end = ref.end;\n\n var alignment;\n var pos;\n var org;\n var move;\n var fade;\n var clip;\n var slices = [];\n var slice = createSlice(name, styles);\n var prevTag = {};\n for (var i = 0; i < parsed.length; i++) {\n var ref$1 = parsed[i];\n var tags = ref$1.tags;\n var text = ref$1.text;\n var drawing = ref$1.drawing;\n var reset = (void 0);\n for (var j = 0; j < tags.length; j++) {\n var tag = tags[j];\n reset = tag.r === undefined ? reset : tag.r;\n }\n var fragment = {\n tag: reset === undefined ? JSON.parse(JSON.stringify(prevTag)) : {},\n text: text,\n drawing: drawing.length ? compileDrawing(drawing) : null,\n };\n for (var j$1 = 0; j$1 < tags.length; j$1++) {\n var tag$1 = tags[j$1];\n alignment = alignment || a2an[tag$1.a || 0] || tag$1.an;\n pos = pos || compileTag(tag$1, 'pos');\n org = org || compileTag(tag$1, 'org');\n move = move || compileTag(tag$1, 'move');\n fade = fade || compileTag(tag$1, 'fade') || compileTag(tag$1, 'fad');\n clip = compileTag(tag$1, 'clip') || clip;\n var key = Object.keys(tag$1)[0];\n if (key && !~globalTags.indexOf(key)) {\n var ref$2 = slice.tag;\n var c1 = ref$2.c1;\n var c2 = ref$2.c2;\n var c3 = ref$2.c3;\n var c4 = ref$2.c4;\n var fs = prevTag.fs || slice.tag.fs;\n var compiledTag = compileTag(tag$1, key, { start: start, end: end, c1: c1, c2: c2, c3: c3, c4: c4, fs: fs });\n if (key === 't') {\n fragment.tag.t = fragment.tag.t || [];\n fragment.tag.t.push(compiledTag.t);\n } else {\n assign(fragment.tag, compiledTag);\n }\n }\n }\n prevTag = fragment.tag;\n if (reset !== undefined) {\n slices.push(slice);\n slice = createSlice(styles[reset] ? reset : name, styles);\n }\n if (fragment.text || fragment.drawing) {\n var prev = slice.fragments[slice.fragments.length - 1] || {};\n if (prev.text && fragment.text && !Object.keys(fragment.tag).length) {\n // merge fragment to previous if its tag is empty\n prev.text += fragment.text;\n } else {\n slice.fragments.push(fragment);\n }\n }\n }\n slices.push(slice);\n\n return assign({ alignment: alignment, slices: slices }, pos, org, move, fade, clip);\n}\n\nfunction compileDialogues(ref) {\n var styles = ref.styles;\n var dialogues = ref.dialogues;\n\n var minLayer = Infinity;\n var results = [];\n for (var i = 0; i < dialogues.length; i++) {\n var dia = dialogues[i];\n if (dia.Start >= dia.End) {\n continue;\n }\n if (!styles[dia.Style]) {\n dia.Style = 'Default';\n }\n var stl = styles[dia.Style].style;\n var compiledText = compileText({\n styles: styles,\n name: dia.Style,\n parsed: dia.Text.parsed,\n start: dia.Start,\n end: dia.End,\n });\n var alignment = compiledText.alignment || stl.Alignment;\n minLayer = Math.min(minLayer, dia.Layer);\n results.push(assign({\n layer: dia.Layer,\n start: dia.Start,\n end: dia.End,\n // reset style by `\\r` will not effect margin and alignment\n margin: {\n left: dia.MarginL || stl.MarginL,\n right: dia.MarginR || stl.MarginR,\n vertical: dia.MarginV || stl.MarginV,\n },\n effect: dia.Effect,\n }, compiledText, { alignment: alignment }));\n }\n for (var i$1 = 0; i$1 < results.length; i$1++) {\n results[i$1].layer -= minLayer;\n }\n return results.sort(function (a, b) { return a.start - b.start || a.end - b.end; });\n}\n\n// same as Aegisub\n// https://github.com/Aegisub/Aegisub/blob/master/src/ass_style.h\nvar DEFAULT_STYLE = {\n Name: 'Default',\n Fontname: 'Arial',\n Fontsize: '20',\n PrimaryColour: '&H00FFFFFF&',\n SecondaryColour: '&H000000FF&',\n OutlineColour: '&H00000000&',\n BackColour: '&H00000000&',\n Bold: '0',\n Italic: '0',\n Underline: '0',\n StrikeOut: '0',\n ScaleX: '100',\n ScaleY: '100',\n Spacing: '0',\n Angle: '0',\n BorderStyle: '1',\n Outline: '2',\n Shadow: '2',\n Alignment: '2',\n MarginL: '10',\n MarginR: '10',\n MarginV: '10',\n Encoding: '1',\n};\n\n/**\n * @param {String} color\n * @returns {Array} [AA, BBGGRR]\n */\nfunction parseStyleColor(color) {\n if (/^(&|H|&H)[0-9a-f]{6,}/i.test(color)) {\n var ref = color.match(/&?H?([0-9a-f]{2})?([0-9a-f]{6})/i);\n var a = ref[1];\n var c = ref[2];\n return [a || '00', c];\n }\n var num = parseInt(color, 10);\n if (!Number.isNaN(num)) {\n var min = -2147483648;\n var max = 2147483647;\n if (num < min) {\n return ['00', '000000'];\n }\n var aabbggrr = (min <= num && num <= max)\n ? (\"00000000\" + ((num < 0 ? num + 4294967296 : num).toString(16))).slice(-8)\n : String(num).slice(0, 8);\n return [aabbggrr.slice(0, 2), aabbggrr.slice(2)];\n }\n return ['00', '000000'];\n}\n\nfunction compileStyles(ref) {\n var info = ref.info;\n var style = ref.style;\n var format = ref.format;\n var defaultStyle = ref.defaultStyle;\n\n var result = {};\n var styles = [\n assign({}, DEFAULT_STYLE, defaultStyle, { Name: 'Default' }) ].concat( style.map(function (stl) {\n var s = {};\n for (var i = 0; i < format.length; i++) {\n s[format[i]] = stl[i];\n }\n return s;\n }) );\n var loop = function ( i ) {\n var s = styles[i];\n // this behavior is same as Aegisub by black-box testing\n if (/^(\\*+)Default$/.test(s.Name)) {\n s.Name = 'Default';\n }\n Object.keys(s).forEach(function (key) {\n if (key !== 'Name' && key !== 'Fontname' && !/Colour/.test(key)) {\n s[key] *= 1;\n }\n });\n var ref$1 = parseStyleColor(s.PrimaryColour);\n var a1 = ref$1[0];\n var c1 = ref$1[1];\n var ref$2 = parseStyleColor(s.SecondaryColour);\n var a2 = ref$2[0];\n var c2 = ref$2[1];\n var ref$3 = parseStyleColor(s.OutlineColour);\n var a3 = ref$3[0];\n var c3 = ref$3[1];\n var ref$4 = parseStyleColor(s.BackColour);\n var a4 = ref$4[0];\n var c4 = ref$4[1];\n var tag = {\n fn: s.Fontname,\n fs: s.Fontsize,\n c1: c1,\n a1: a1,\n c2: c2,\n a2: a2,\n c3: c3,\n a3: a3,\n c4: c4,\n a4: a4,\n b: Math.abs(s.Bold),\n i: Math.abs(s.Italic),\n u: Math.abs(s.Underline),\n s: Math.abs(s.StrikeOut),\n fscx: s.ScaleX,\n fscy: s.ScaleY,\n fsp: s.Spacing,\n frz: s.Angle,\n xbord: s.Outline,\n ybord: s.Outline,\n xshad: s.Shadow,\n yshad: s.Shadow,\n q: /^[0-3]$/.test(info.WrapStyle) ? info.WrapStyle * 1 : 2,\n };\n result[s.Name] = { style: s, tag: tag };\n };\n\n for (var i = 0; i < styles.length; i++) loop( i );\n return result;\n}\n\nfunction compile(text, options) {\n if ( options === void 0 ) options = {};\n\n var tree = parse(text);\n var styles = compileStyles({\n info: tree.info,\n style: tree.styles.style,\n format: tree.styles.format,\n defaultStyle: options.defaultStyle || {},\n });\n return {\n info: tree.info,\n width: tree.info.PlayResX * 1 || null,\n height: tree.info.PlayResY * 1 || null,\n collisions: tree.info.Collisions || 'Normal',\n styles: styles,\n dialogues: compileDialogues({\n styles: styles,\n dialogues: tree.events.dialogue,\n }),\n };\n}\n\nvar raf = (\n window.requestAnimationFrame\n || window.mozRequestAnimationFrame\n || window.webkitRequestAnimationFrame\n || (function (cb) { return setTimeout(cb, 50 / 3); })\n);\n\nvar caf = (\n window.cancelAnimationFrame\n || window.mozCancelAnimationFrame\n || window.webkitCancelAnimationFrame\n || clearTimeout\n);\n\nfunction color2rgba(c) {\n var t = c.match(/(\\w\\w)(\\w\\w)(\\w\\w)(\\w\\w)/);\n var a = 1 - (\"0x\" + (t[1])) / 255;\n var b = +(\"0x\" + (t[2]));\n var g = +(\"0x\" + (t[3]));\n var r = +(\"0x\" + (t[4]));\n return (\"rgba(\" + r + \",\" + g + \",\" + b + \",\" + a + \")\");\n}\n\nfunction uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0;\n var v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\nfunction createSVGEl(name, attrs) {\n if ( attrs === void 0 ) attrs = [];\n\n var $el = document.createElementNS('http://www.w3.org/2000/svg', name);\n for (var i = 0; i < attrs.length; i++) {\n var attr = attrs[i];\n $el.setAttributeNS(\n attr[0] === 'xlink:href' ? 'http://www.w3.org/1999/xlink' : null,\n attr[0],\n attr[1]\n );\n }\n return $el;\n}\n\nfunction getVendor(prop) {\n var ref = document.body;\n var style = ref.style;\n var Prop = prop.replace(/^\\w/, function (x) { return x.toUpperCase(); });\n if (prop in style) { return ''; }\n if ((\"webkit\" + Prop) in style) { return '-webkit-'; }\n if ((\"moz\" + Prop) in style) { return '-moz-'; }\n return '';\n}\n\nvar vendor = {\n transform: getVendor('transform'),\n animation: getVendor('animation'),\n clipPath: getVendor('clipPath'),\n};\n\nfunction getStyleRoot(container) {\n var rootNode = container.getRootNode ? container.getRootNode() : document;\n return rootNode === document ? rootNode.head : rootNode;\n}\n\nvar strokeTags = ['c3', 'a3', 'c4', 'a4', 'xbord', 'ybord', 'xshad', 'yshad', 'blur', 'be'];\nvar transformTags = ['fscx', 'fscy', 'frx', 'fry', 'frz', 'fax', 'fay'];\n\nfunction createClipPath(clip) {\n var sw = this._.scriptRes.width;\n var sh = this._.scriptRes.height;\n var d = '';\n if (clip.dots !== null) {\n var ref = clip.dots;\n var x1 = ref.x1;\n var y1 = ref.y1;\n var x2 = ref.x2;\n var y2 = ref.y2;\n x1 /= sw;\n y1 /= sh;\n x2 /= sw;\n y2 /= sh;\n d = \"M\" + x1 + \",\" + y1 + \"L\" + x1 + \",\" + y2 + \",\" + x2 + \",\" + y2 + \",\" + x2 + \",\" + y1 + \"Z\";\n }\n if (clip.drawing !== null) {\n d = clip.drawing.instructions.map(function (ref) {\n var type = ref.type;\n var points = ref.points;\n\n return (\n type + points.map(function (ref) {\n var x = ref.x;\n var y = ref.y;\n\n return ((x / sw) + \",\" + (y / sh));\n }).join(',')\n );\n }).join('');\n }\n var scale = 1 / (1 << (clip.scale - 1));\n if (clip.inverse) {\n d += \"M0,0L0,\" + scale + \",\" + scale + \",\" + scale + \",\" + scale + \",0,0,0Z\";\n }\n var id = \"ASS-\" + (uuid());\n var $clipPath = createSVGEl('clipPath', [\n ['id', id],\n ['clipPathUnits', 'objectBoundingBox'] ]);\n $clipPath.appendChild(createSVGEl('path', [\n ['d', d],\n ['transform', (\"scale(\" + scale + \")\")],\n ['clip-rule', 'evenodd'] ]));\n this._.$defs.appendChild($clipPath);\n return {\n $clipPath: $clipPath,\n cssText: ((vendor.clipPath) + \"clip-path:url(#\" + id + \");\"),\n };\n}\n\nfunction setClipPath(dialogue) {\n if (!dialogue.clip) {\n return;\n }\n var $fobb = document.createElement('div');\n this._.$stage.insertBefore($fobb, dialogue.$div);\n $fobb.appendChild(dialogue.$div);\n $fobb.className = 'ASS-fix-objectBoundingBox';\n var ref = createClipPath.call(this, dialogue.clip);\n var cssText = ref.cssText;\n var $clipPath = ref.$clipPath;\n this._.$defs.appendChild($clipPath);\n $fobb.style.cssText = cssText;\n assign(dialogue, { $div: $fobb, $clipPath: $clipPath });\n}\n\nvar $fixFontSize = document.createElement('div');\n$fixFontSize.className = 'ASS-fix-font-size';\n$fixFontSize.textContent = 'M';\n\nvar cache = Object.create(null);\n\nfunction getRealFontSize(fn, fs) {\n var key = fn + \"-\" + fs;\n if (!cache[key]) {\n $fixFontSize.style.cssText = \"line-height:normal;font-size:\" + fs + \"px;font-family:\\\"\" + fn + \"\\\",Arial;\";\n cache[key] = fs * fs / $fixFontSize.clientHeight;\n }\n return cache[key];\n}\n\nfunction createSVGStroke(tag, id, scale) {\n var hasBorder = tag.xbord || tag.ybord;\n var hasShadow = tag.xshad || tag.yshad;\n var isOpaque = tag.a1 !== 'FF';\n var blur = tag.blur || tag.be || 0;\n var $filter = createSVGEl('filter', [['id', id]]);\n $filter.appendChild(createSVGEl('feGaussianBlur', [\n ['stdDeviation', hasBorder ? 0 : blur],\n ['in', 'SourceGraphic'],\n ['result', 'sg_b'] ]));\n $filter.appendChild(createSVGEl('feFlood', [\n ['flood-color', color2rgba(tag.a1 + tag.c1)],\n ['result', 'c1'] ]));\n $filter.appendChild(createSVGEl('feComposite', [\n ['operator', 'in'],\n ['in', 'c1'],\n ['in2', 'sg_b'],\n ['result', 'main'] ]));\n if (hasBorder) {\n $filter.appendChild(createSVGEl('feMorphology', [\n ['radius', ((tag.xbord * scale) + \" \" + (tag.ybord * scale))],\n ['operator', 'dilate'],\n ['in', 'SourceGraphic'],\n ['result', 'dil'] ]));\n $filter.appendChild(createSVGEl('feGaussianBlur', [\n ['stdDeviation', blur],\n ['in', 'dil'],\n ['result', 'dil_b'] ]));\n $filter.appendChild(createSVGEl('feComposite', [\n ['operator', 'out'],\n ['in', 'dil_b'],\n ['in2', 'SourceGraphic'],\n ['result', 'dil_b_o'] ]));\n $filter.appendChild(createSVGEl('feFlood', [\n ['flood-color', color2rgba(tag.a3 + tag.c3)],\n ['result', 'c3'] ]));\n $filter.appendChild(createSVGEl('feComposite', [\n ['operator', 'in'],\n ['in', 'c3'],\n ['in2', 'dil_b_o'],\n ['result', 'border'] ]));\n }\n if (hasShadow && (hasBorder || isOpaque)) {\n $filter.appendChild(createSVGEl('feOffset', [\n ['dx', tag.xshad * scale],\n ['dy', tag.yshad * scale],\n ['in', hasBorder ? 'dil' : 'SourceGraphic'],\n ['result', 'off'] ]));\n $filter.appendChild(createSVGEl('feGaussianBlur', [\n ['stdDeviation', blur],\n ['in', 'off'],\n ['result', 'off_b'] ]));\n if (!isOpaque) {\n $filter.appendChild(createSVGEl('feOffset', [\n ['dx', tag.xshad * scale],\n ['dy', tag.yshad * scale],\n ['in', 'SourceGraphic'],\n ['result', 'sg_off'] ]));\n $filter.appendChild(createSVGEl('feComposite', [\n ['operator', 'out'],\n ['in', 'off_b'],\n ['in2', 'sg_off'],\n ['result', 'off_b_o'] ]));\n }\n $filter.appendChild(createSVGEl('feFlood', [\n ['flood-color', color2rgba(tag.a4 + tag.c4)],\n ['result', 'c4'] ]));\n $filter.appendChild(createSVGEl('feComposite', [\n ['operator', 'in'],\n ['in', 'c4'],\n ['in2', isOpaque ? 'off_b' : 'off_b_o'],\n ['result', 'shadow'] ]));\n }\n var $merge = createSVGEl('feMerge', []);\n if (hasShadow && (hasBorder || isOpaque)) {\n $merge.appendChild(createSVGEl('feMergeNode', [['in', 'shadow']]));\n }\n if (hasBorder) {\n $merge.appendChild(createSVGEl('feMergeNode', [['in', 'border']]));\n }\n $merge.appendChild(createSVGEl('feMergeNode', [['in', 'main']]));\n $filter.appendChild($merge);\n return $filter;\n}\n\nfunction createCSSStroke(tag, scale) {\n var arr = [];\n var oc = color2rgba(tag.a3 + tag.c3);\n var ox = tag.xbord * scale;\n var oy = tag.ybord * scale;\n var sc = color2rgba(tag.a4 + tag.c4);\n var sx = tag.xshad * scale;\n var sy = tag.yshad * scale;\n var blur = tag.blur || tag.be || 0;\n if (!(ox + oy + sx + sy)) { return 'none'; }\n if (ox || oy) {\n for (var i = -1; i <= 1; i++) {\n for (var j = -1; j <= 1; j++) {\n for (var x = 1; x < ox; x++) {\n for (var y = 1; y < oy; y++) {\n if (i || j) {\n arr.push((oc + \" \" + (i * x) + \"px \" + (j * y) + \"px \" + blur + \"px\"));\n }\n }\n }\n arr.push((oc + \" \" + (i * ox) + \"px \" + (j * oy) + \"px \" + blur + \"px\"));\n }\n }\n }\n if (sx || sy) {\n var pnx = sx > 0 ? 1 : -1;\n var pny = sy > 0 ? 1 : -1;\n sx = Math.abs(sx);\n sy = Math.abs(sy);\n for (var x$1 = Math.max(ox, sx - ox); x$1 < sx + ox; x$1++) {\n for (var y$1 = Math.max(oy, sy - oy); y$1 < sy + oy; y$1++) {\n arr.push((sc + \" \" + (x$1 * pnx) + \"px \" + (y$1 * pny) + \"px \" + blur + \"px\"));\n }\n }\n arr.push((sc + \" \" + ((sx + ox) * pnx) + \"px \" + ((sy + oy) * pny) + \"px \" + blur + \"px\"));\n }\n return arr.join();\n}\n\nfunction createTransform(tag) {\n return [\n // TODO: I don't know why perspective is 314, it just performances well.\n 'perspective(314px)',\n (\"rotateY(\" + (tag.fry || 0) + \"deg)\"),\n (\"rotateX(\" + (tag.frx || 0) + \"deg)\"),\n (\"rotateZ(\" + (-tag.frz || 0) + \"deg)\"),\n (\"scale(\" + (tag.p ? 1 : (tag.fscx || 100) / 100) + \",\" + (tag.p ? 1 : (tag.fscy || 100) / 100) + \")\"),\n (\"skew(\" + (tag.fax || 0) + \"rad,\" + (tag.fay || 0) + \"rad)\") ].join(' ');\n}\n\nfunction setTransformOrigin(dialogue) {\n var alignment = dialogue.alignment;\n var width = dialogue.width;\n var height = dialogue.height;\n var x = dialogue.x;\n var y = dialogue.y;\n var $div = dialogue.$div;\n var org = dialogue.org;\n if (!org) {\n org = { x: 0, y: 0 };\n if (alignment % 3 === 1) { org.x = x; }\n if (alignment % 3 === 2) { org.x = x + width / 2; }\n if (alignment % 3 === 0) { org.x = x + width; }\n if (alignment <= 3) { org.y = y + height; }\n if (alignment >= 4 && alignment <= 6) { org.y = y + height / 2; }\n if (alignment >= 7) { org.y = y; }\n }\n for (var i = $div.childNodes.length - 1; i >= 0; i--) {\n var node = $div.childNodes[i];\n if (node.dataset.hasRotate === 'true') {\n // It's not extremely precise for offsets are round the value to an integer.\n var tox = org.x - x - node.offsetLeft;\n var toy = org.y - y - node.offsetTop;\n node.style.cssText += (vendor.transform) + \"transform-origin:\" + tox + \"px \" + toy + \"px;\";\n }\n }\n}\n\nfunction getKeyframeString(name, list) {\n return (\"@\" + (vendor.animation) + \"keyframes \" + name + \" {\" + list + \"}\\n\");\n}\n\nvar KeyframeBlockList = function KeyframeBlockList() {\n this.obj = {};\n};\n\nKeyframeBlockList.prototype.set = function set (keyText, prop, value) {\n if (!this.obj[keyText]) { this.obj[keyText] = {}; }\n this.obj[keyText][prop] = value;\n};\n\nKeyframeBlockList.prototype.setT = function setT (ref) {\n var t1 = ref.t1;\n var t2 = ref.t2;\n var duration = ref.duration;\n var prop = ref.prop;\n var from = ref.from;\n var to = ref.to;\n\n this.set('0.000%', prop, from);\n if (t1 < duration) {\n this.set((((t1 / duration * 100).toFixed(3)) + \"%\"), prop, from);\n }\n if (t2 < duration) {\n this.set((((t2 / duration * 100).toFixed(3)) + \"%\"), prop, to);\n }\n this.set('100.000%', prop, to);\n};\n\nKeyframeBlockList.prototype.toString = function toString () {\n var this$1 = this;\n\n return Object.keys(this.obj)\n .map(function (keyText) { return (\n (keyText + \"{\" + (Object.keys(this$1.obj[keyText])\n .map(function (prop) { return (\"\" + (vendor[prop] || '') + prop + \":\" + (this$1.obj[keyText][prop]) + \";\"); })\n .join('')) + \"}\")\n ); })\n .join('');\n};\n\n// TODO: multi \\t can't be merged directly\nfunction mergeT(ts) {\n return ts.reduceRight(function (results, t) {\n var merged = false;\n return results\n .map(function (r) {\n merged = t.t1 === r.t1 && t.t2 === r.t2 && t.accel === r.accel;\n return assign({}, r, merged ? { tag: assign({}, r.tag, t.tag) } : {});\n })\n .concat(merged ? [] : t);\n }, []);\n}\n\nfunction getKeyframes() {\n var this$1 = this;\n\n var keyframes = '';\n this.dialogues.forEach(function (dialogue) {\n var start = dialogue.start;\n var end = dialogue.end;\n var effect = dialogue.effect;\n var move = dialogue.move;\n var fade = dialogue.fade;\n var slices = dialogue.slices;\n var duration = (end - start) * 1000;\n var diaKbl = new KeyframeBlockList();\n // TODO: when effect and move both exist, its behavior is weird, for now only move works.\n if (effect && !move) {\n var name = effect.name;\n var delay = effect.delay;\n var lefttoright = effect.lefttoright;\n var y1 = effect.y1;\n var y2 = effect.y2 || this$1._.resampledRes.height;\n if (name === 'banner') {\n var tx = this$1.scale * (duration / delay) * (lefttoright ? 1 : -1);\n diaKbl.set('0.000%', 'transform', 'translateX(0)');\n diaKbl.set('100.000%', 'transform', (\"translateX(\" + tx + \"px)\"));\n }\n if (/^scroll/.test(name)) {\n var updown = /up/.test(name) ? -1 : 1;\n var tFrom = \"translateY(\" + (this$1.scale * y1 * updown) + \"px)\";\n var tTo = \"translateY(\" + (this$1.scale * y2 * updown) + \"px)\";\n var dp = (y2 - y1) / (duration / delay) * 100;\n diaKbl.set('0.000%', 'transform', tFrom);\n if (dp < 100) {\n diaKbl.set(((dp.toFixed(3)) + \"%\"), 'transform', tTo);\n }\n diaKbl.set('100.000%', 'transform', tTo);\n }\n }\n if (move) {\n var x1 = move.x1;\n var y1$1 = move.y1;\n var x2 = move.x2;\n var y2$1 = move.y2;\n var t1 = move.t1;\n var t2 = move.t2 || duration;\n var pos = dialogue.pos || { x: 0, y: 0 };\n var values = [{ x: x1, y: y1$1 }, { x: x2, y: y2$1 }].map(function (ref) {\n var x = ref.x;\n var y = ref.y;\n\n return (\n (\"translate(\" + (this$1.scale * (x - pos.x)) + \"px, \" + (this$1.scale * (y - pos.y)) + \"px)\")\n );\n });\n diaKbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'transform', from: values[0], to: values[1] });\n }\n if (fade) {\n if (fade.type === 'fad') {\n var t1$1 = fade.t1;\n var t2$1 = fade.t2;\n diaKbl.set('0.000%', 'opacity', 0);\n if (t1$1 < duration) {\n diaKbl.set((((t1$1 / duration * 100).toFixed(3)) + \"%\"), 'opacity', 1);\n if (t1$1 + t2$1 < duration) {\n diaKbl.set(((((duration - t2$1) / duration * 100).toFixed(3)) + \"%\"), 'opacity', 1);\n }\n diaKbl.set('100.000%', 'opacity', 0);\n } else {\n diaKbl.set('100.000%', 'opacity', duration / t1$1);\n }\n } else {\n var a1 = fade.a1;\n var a2 = fade.a2;\n var a3 = fade.a3;\n var t1$2 = fade.t1;\n var t2$2 = fade.t2;\n var t3 = fade.t3;\n var t4 = fade.t4;\n var keyTexts = [t1$2, t2$2, t3, t4].map(function (t) { return (((t / duration * 100).toFixed(3)) + \"%\"); });\n var values$1 = [a1, a2, a3].map(function (a) { return 1 - a / 255; });\n diaKbl.set('0.000%', 'opacity', values$1[0]);\n if (t1$2 < duration) { diaKbl.set(keyTexts[0], 'opacity', values$1[0]); }\n if (t2$2 < duration) { diaKbl.set(keyTexts[1], 'opacity', values$1[1]); }\n if (t3 < duration) { diaKbl.set(keyTexts[2], 'opacity', values$1[1]); }\n if (t4 < duration) { diaKbl.set(keyTexts[3], 'opacity', values$1[2]); }\n diaKbl.set('100.000%', 'opacity', values$1[2]);\n }\n }\n var diaList = diaKbl.toString();\n if (diaList) {\n assign(dialogue, { animationName: (\"ASS-\" + (uuid())) });\n keyframes += getKeyframeString(dialogue.animationName, diaList);\n }\n slices.forEach(function (slice) {\n slice.fragments.forEach(function (fragment) {\n if (!fragment.tag.t || !fragment.tag.t.length) {\n return;\n }\n var kbl = new KeyframeBlockList();\n var fromTag = assign({}, slice.tag, fragment.tag);\n // TODO: accel is not implemented yet\n mergeT(fragment.tag.t).forEach(function (ref) {\n var t1 = ref.t1;\n var t2 = ref.t2;\n var tag = ref.tag;\n\n if (tag.fs) {\n var from = (this$1.scale * getRealFontSize(fromTag.fn, fromTag.fs)) + \"px\";\n var to = (this$1.scale * getRealFontSize(tag.fn, fromTag.fs)) + \"px\";\n kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'font-size', from: from, to: to });\n }\n if (tag.fsp) {\n var from$1 = (this$1.scale * fromTag.fsp) + \"px\";\n var to$1 = (this$1.scale * tag.fsp) + \"px\";\n kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'letter-spacing', from: from$1, to: to$1 });\n }\n var hasAlpha = (\n tag.a1 !== undefined\n && tag.a1 === tag.a2\n && tag.a2 === tag.a3\n && tag.a3 === tag.a4\n );\n if (tag.c1 || (tag.a1 && !hasAlpha)) {\n var from$2 = color2rgba(fromTag.a1 + fromTag.c1);\n var to$2 = color2rgba((tag.a1 || fromTag.a1) + (tag.c1 || fromTag.c1));\n kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'color', from: from$2, to: to$2 });\n }\n if (hasAlpha) {\n var from$3 = 1 - parseInt(fromTag.a1, 16) / 255;\n var to$3 = 1 - parseInt(tag.a1, 16) / 255;\n kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'opacity', from: from$3, to: to$3 });\n }\n var hasStroke = strokeTags.some(function (x) { return (\n tag[x] !== undefined\n && tag[x] !== (fragment.tag[x] || slice.tag[x])\n ); });\n if (hasStroke) {\n var scale = /Yes/i.test(this$1.info.ScaledBorderAndShadow) ? this$1.scale : 1;\n var from$4 = createCSSStroke(fromTag, scale);\n var to$4 = createCSSStroke(assign({}, fromTag, tag), scale);\n kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'text-shadow', from: from$4, to: to$4 });\n }\n var hasTransfrom = transformTags.some(function (x) { return (\n tag[x] !== undefined\n && tag[x] !== (fragment.tag[x] || slice.tag[x])\n ); });\n if (hasTransfrom) {\n var toTag = assign({}, fromTag, tag);\n if (fragment.drawing) {\n // scales will be handled inside svg\n assign(toTag, {\n p: 0,\n fscx: ((tag.fscx || fromTag.fscx) / fromTag.fscx) * 100,\n fscy: ((tag.fscy || fromTag.fscy) / fromTag.fscy) * 100,\n });\n assign(fromTag, { fscx: 100, fscy: 100 });\n }\n var from$5 = createTransform(fromTag);\n var to$5 = createTransform(toTag);\n kbl.setT({ t1: t1, t2: t2, duration: duration, prop: 'transform', from: from$5, to: to$5 });\n }\n });\n var list = kbl.toString();\n assign(fragment, { animationName: (\"ASS-\" + (uuid())) });\n keyframes += getKeyframeString(fragment.animationName, list);\n });\n });\n });\n return keyframes;\n}\n\nfunction createAnimation(name, duration, delay) {\n var va = vendor.animation;\n return (\n va + \"animation-name:\" + name + \";\"\n + va + \"animation-duration:\" + duration + \"s;\"\n + va + \"animation-delay:\" + delay + \"s;\"\n + va + \"animation-timing-function:linear;\"\n + va + \"animation-iteration-count:1;\"\n + va + \"animation-fill-mode:forwards;\"\n );\n}\n\nfunction createDrawing(fragment, styleTag) {\n var tag = assign({}, styleTag, fragment.tag);\n var ref = fragment.drawing;\n var minX = ref.minX;\n var minY = ref.minY;\n var width = ref.width;\n var height = ref.height;\n var baseScale = this.scale / (1 << (tag.p - 1));\n var scaleX = (tag.fscx ? tag.fscx / 100 : 1) * baseScale;\n var scaleY = (tag.fscy ? tag.fscy / 100 : 1) * baseScale;\n var blur = tag.blur || tag.be || 0;\n var vbx = tag.xbord + (tag.xshad < 0 ? -tag.xshad : 0) + blur;\n var vby = tag.ybord + (tag.yshad < 0 ? -tag.yshad : 0) + blur;\n var vbw = width * scaleX + 2 * tag.xbord + Math.abs(tag.xshad) + 2 * blur;\n var vbh = height * scaleY + 2 * tag.ybord + Math.abs(tag.yshad) + 2 * blur;\n var $svg = createSVGEl('svg', [\n ['width', vbw],\n ['height', vbh],\n ['viewBox', ((-vbx) + \" \" + (-vby) + \" \" + vbw + \" \" + vbh)] ]);\n var strokeScale = /Yes/i.test(this.info.ScaledBorderAndShadow) ? this.scale : 1;\n var filterId = \"ASS-\" + (uuid());\n var $defs = createSVGEl('defs');\n $defs.appendChild(createSVGStroke(tag, filterId, strokeScale));\n $svg.appendChild($defs);\n var symbolId = \"ASS-\" + (uuid());\n var $symbol = createSVGEl('symbol', [\n ['id', symbolId],\n ['viewBox', (minX + \" \" + minY + \" \" + width + \" \" + height)] ]);\n $symbol.appendChild(createSVGEl('path', [['d', fragment.drawing.d]]));\n $svg.appendChild($symbol);\n $svg.appendChild(createSVGEl('use', [\n ['width', width * scaleX],\n ['height', height * scaleY],\n ['xlink:href', (\"#\" + symbolId)],\n ['filter', (\"url(#\" + filterId + \")\")] ]));\n $svg.style.cssText = (\n 'position:absolute;'\n + \"left:\" + (minX * scaleX - vbx) + \"px;\"\n + \"top:\" + (minY * scaleY - vby) + \"px;\"\n );\n return {\n $svg: $svg,\n cssText: (\"position:relative;width:\" + (width * scaleX) + \"px;height:\" + (height * scaleY) + \"px;\"),\n };\n}\n\nfunction encodeText(text, q) {\n return text\n .replace(//g, '>')\n .replace(/\\s/g, ' ')\n .replace(/\\\\h/g, ' ')\n .replace(/\\\\N/g, '
')\n .replace(/\\\\n/g, q === 2 ? '
' : ' ');\n}\n\nfunction createDialogue(dialogue) {\n var this$1 = this;\n\n var $div = document.createElement('div');\n $div.className = 'ASS-dialogue';\n var df = document.createDocumentFragment();\n var slices = dialogue.slices;\n var start = dialogue.start;\n var end = dialogue.end;\n slices.forEach(function (slice) {\n var borderStyle = slice.borderStyle;\n slice.fragments.forEach(function (fragment) {\n var text = fragment.text;\n var drawing = fragment.drawing;\n var animationName = fragment.animationName;\n var tag = assign({}, slice.tag, fragment.tag);\n var cssText = 'display:inline-block;';\n var vct = this$1.video.currentTime;\n if (!drawing) {\n cssText += \"font-family:\\\"\" + (tag.fn) + \"\\\",Arial;\";\n cssText += \"font-size:\" + (this$1.scale * getRealFontSize(tag.fn, tag.fs)) + \"px;\";\n cssText += \"color:\" + (color2rgba(tag.a1 + tag.c1)) + \";\";\n var scale = /Yes/i.test(this$1.info.ScaledBorderAndShadow) ? this$1.scale : 1;\n if (borderStyle === 1) {\n cssText += \"text-shadow:\" + (createCSSStroke(tag, scale)) + \";\";\n }\n if (borderStyle === 3) {\n cssText += (\n \"background-color:\" + (color2rgba(tag.a3 + tag.c3)) + \";\"\n + \"box-shadow:\" + (createCSSStroke(tag, scale)) + \";\"\n );\n }\n cssText += tag.b ? (\"font-weight:\" + (tag.b === 1 ? 'bold' : tag.b) + \";\") : '';\n cssText += tag.i ? 'font-style:italic;' : '';\n cssText += (tag.u || tag.s) ? (\"text-decoration:\" + (tag.u ? 'underline' : '') + \" \" + (tag.s ? 'line-through' : '') + \";\") : '';\n cssText += tag.fsp ? (\"letter-spacing:\" + (tag.fsp) + \"px;\") : '';\n // TODO: (tag.q === 0) and (tag.q === 3) are not implemented yet,\n // for now just handle it as (tag.q === 1)\n if (tag.q === 1 || tag.q === 0 || tag.q === 3) {\n cssText += 'word-break:break-all;white-space:normal;';\n }\n if (tag.q === 2) {\n cssText += 'word-break:normal;white-space:nowrap;';\n }\n }\n var hasTransfrom = transformTags.some(function (x) { return (\n /^fsc[xy]$/.test(x) ? tag[x] !== 100 : !!tag[x]\n ); });\n if (hasTransfrom) {\n cssText += (vendor.transform) + \"transform:\" + (createTransform(tag)) + \";\";\n if (!drawing) {\n cssText += 'transform-style:preserve-3d;word-break:normal;white-space:nowrap;';\n }\n }\n if (animationName) {\n cssText += createAnimation(animationName, end - start, Math.min(0, start - vct));\n }\n if (drawing && tag.pbo) {\n var pbo = this$1.scale * -tag.pbo * (tag.fscy || 100) / 100;\n cssText += \"vertical-align:\" + pbo + \"px;\";\n }\n\n var hasRotate = /\"fr[xyz]\":[^0]/.test(JSON.stringify(tag));\n encodeText(text, tag.q).split('
').forEach(function (html, idx) {\n var $span = document.createElement('span');\n $span.dataset.hasRotate = hasRotate;\n if (drawing) {\n var obj = createDrawing.call(this$1, fragment, slice.tag);\n $span.style.cssText = obj.cssText;\n $span.appendChild(obj.$svg);\n } else {\n if (idx) {\n df.appendChild(document.createElement('br'));\n }\n if (!html) {\n return;\n }\n $span.innerHTML = html;\n }\n // TODO: maybe it can be optimized\n $span.style.cssText += cssText;\n df.appendChild($span);\n });\n });\n });\n $div.appendChild(df);\n return $div;\n}\n\nfunction allocate(dialogue) {\n var layer = dialogue.layer;\n var margin = dialogue.margin;\n var width = dialogue.width;\n var height = dialogue.height;\n var alignment = dialogue.alignment;\n var end = dialogue.end;\n var stageWidth = this.width - (this.scale * (margin.left + margin.right) | 0);\n var stageHeight = this.height;\n var vertical = this.scale * margin.vertical | 0;\n var vct = this.video.currentTime * 100;\n this._.space[layer] = this._.space[layer] || {\n left: { width: new Uint16Array(stageHeight + 1), end: new Uint16Array(stageHeight + 1) },\n center: { width: new Uint16Array(stageHeight + 1), end: new Uint16Array(stageHeight + 1) },\n right: { width: new Uint16Array(stageHeight + 1), end: new Uint16Array(stageHeight + 1) },\n };\n var channel = this._.space[layer];\n var align = ['right', 'left', 'center'][alignment % 3];\n var willCollide = function (y) {\n var lw = channel.left.width[y];\n var cw = channel.center.width[y];\n var rw = channel.right.width[y];\n var le = channel.left.end[y];\n var ce = channel.center.end[y];\n var re = channel.right.end[y];\n return (\n (align === 'left' && (\n (le > vct && lw)\n || (ce > vct && cw && 2 * width + cw > stageWidth)\n || (re > vct && rw && width + rw > stageWidth)\n ))\n || (align === 'center' && (\n (le > vct && lw && 2 * lw + width > stageWidth)\n || (ce > vct && cw)\n || (re > vct && rw && 2 * rw + width > stageWidth)\n ))\n || (align === 'right' && (\n (le > vct && lw && lw + width > stageWidth)\n || (ce > vct && cw && 2 * width + cw > stageWidth)\n || (re > vct && rw)\n ))\n );\n };\n var count = 0;\n var result = 0;\n var find = function (y) {\n count = willCollide(y) ? 0 : count + 1;\n if (count >= height) {\n result = y;\n return true;\n }\n return false;\n };\n if (alignment <= 3) {\n for (var i = stageHeight - vertical - 1; i > vertical; i--) {\n if (find(i)) { break; }\n }\n } else if (alignment >= 7) {\n for (var i$1 = vertical + 1; i$1 < stageHeight - vertical; i$1++) {\n if (find(i$1)) { break; }\n }\n } else {\n for (var i$2 = (stageHeight - height) >> 1; i$2 < stageHeight - vertical; i$2++) {\n if (find(i$2)) { break; }\n }\n }\n if (alignment > 3) {\n result -= height - 1;\n }\n for (var i$3 = result; i$3 < result + height; i$3++) {\n channel[align].width[i$3] = width;\n channel[align].end[i$3] = end * 100;\n }\n return result;\n}\n\nfunction getPosition(dialogue) {\n var effect = dialogue.effect;\n var move = dialogue.move;\n var alignment = dialogue.alignment;\n var width = dialogue.width;\n var height = dialogue.height;\n var margin = dialogue.margin;\n var slices = dialogue.slices;\n var x = 0;\n var y = 0;\n if (effect) {\n if (effect.name === 'banner') {\n if (alignment <= 3) { y = this.height - height - margin.vertical; }\n if (alignment >= 4 && alignment <= 6) { y = (this.height - height) / 2; }\n if (alignment >= 7) { y = margin.vertical; }\n x = effect.lefttoright ? -width : this.width;\n }\n } else if (dialogue.pos || move) {\n var pos = dialogue.pos || { x: 0, y: 0 };\n if (alignment % 3 === 1) { x = this.scale * pos.x; }\n if (alignment % 3 === 2) { x = this.scale * pos.x - width / 2; }\n if (alignment % 3 === 0) { x = this.scale * pos.x - width; }\n if (alignment <= 3) { y = this.scale * pos.y - height; }\n if (alignment >= 4 && alignment <= 6) { y = this.scale * pos.y - height / 2; }\n if (alignment >= 7) { y = this.scale * pos.y; }\n } else {\n if (alignment % 3 === 1) { x = 0; }\n if (alignment % 3 === 2) { x = (this.width - width) / 2; }\n if (alignment % 3 === 0) { x = this.width - width - this.scale * margin.right; }\n var hasT = slices.some(function (slice) { return (\n slice.fragments.some(function (ref) {\n var animationName = ref.animationName;\n\n return animationName;\n })\n ); });\n if (hasT) {\n if (alignment <= 3) { y = this.height - height - margin.vertical; }\n if (alignment >= 4 && alignment <= 6) { y = (this.height - height) / 2; }\n if (alignment >= 7) { y = margin.vertical; }\n } else {\n y = allocate.call(this, dialogue);\n }\n }\n return { x: x, y: y };\n}\n\nfunction createStyle(dialogue) {\n var layer = dialogue.layer;\n var start = dialogue.start;\n var end = dialogue.end;\n var alignment = dialogue.alignment;\n var effect = dialogue.effect;\n var pos = dialogue.pos;\n var margin = dialogue.margin;\n var animationName = dialogue.animationName;\n var width = dialogue.width;\n var height = dialogue.height;\n var x = dialogue.x;\n var y = dialogue.y;\n var vct = this.video.currentTime;\n var cssText = '';\n if (layer) { cssText += \"z-index:\" + layer + \";\"; }\n if (animationName) {\n cssText += createAnimation(animationName, end - start, Math.min(0, start - vct));\n }\n cssText += \"text-align:\" + (['right', 'left', 'center'][alignment % 3]) + \";\";\n if (!effect) {\n var mw = this.width - this.scale * (margin.left + margin.right);\n cssText += \"max-width:\" + mw + \"px;\";\n if (!pos) {\n if (alignment % 3 === 1) {\n cssText += \"margin-left:\" + (this.scale * margin.left) + \"px;\";\n }\n if (alignment % 3 === 0) {\n cssText += \"margin-right:\" + (this.scale * margin.right) + \"px;\";\n }\n if (width > this.width - this.scale * (margin.left + margin.right)) {\n cssText += \"margin-left:\" + (this.scale * margin.left) + \"px;\";\n cssText += \"margin-right:\" + (this.scale * margin.right) + \"px;\";\n }\n }\n }\n cssText += \"width:\" + width + \"px;height:\" + height + \"px;left:\" + x + \"px;top:\" + y + \"px;\";\n return cssText;\n}\n\nfunction renderer(dialogue) {\n var $div = createDialogue.call(this, dialogue);\n assign(dialogue, { $div: $div });\n this._.$stage.appendChild($div);\n var ref = $div.getBoundingClientRect();\n var width = ref.width;\n var height = ref.height;\n assign(dialogue, { width: width, height: height });\n assign(dialogue, getPosition.call(this, dialogue));\n $div.style.cssText = createStyle.call(this, dialogue);\n setTransformOrigin(dialogue);\n setClipPath.call(this, dialogue);\n return dialogue;\n}\n\nfunction framing() {\n var vct = this.video.currentTime;\n for (var i = this._.stagings.length - 1; i >= 0; i--) {\n var dia = this._.stagings[i];\n var end = dia.end;\n if (dia.effect && /scroll/.test(dia.effect.name)) {\n var ref = dia.effect;\n var y1 = ref.y1;\n var y2 = ref.y2;\n var delay = ref.delay;\n var duration = ((y2 || this._.resampledRes.height) - y1) / (1000 / delay);\n end = Math.min(end, dia.start + duration);\n }\n if (end < vct) {\n this._.$stage.removeChild(dia.$div);\n if (dia.$clipPath) {\n this._.$defs.removeChild(dia.$clipPath);\n }\n this._.stagings.splice(i, 1);\n }\n }\n var dias = this.dialogues;\n while (\n this._.index < dias.length\n && vct >= dias[this._.index].start\n ) {\n if (vct < dias[this._.index].end) {\n var dia$1 = renderer.call(this, dias[this._.index]);\n this._.stagings.push(dia$1);\n }\n ++this._.index;\n }\n}\n\nfunction play() {\n var this$1 = this;\n\n var frame = function () {\n framing.call(this$1);\n this$1._.requestId = raf(frame);\n };\n caf(this._.requestId);\n this._.requestId = raf(frame);\n this._.$stage.classList.remove('ASS-animation-paused');\n return this;\n}\n\nfunction pause() {\n caf(this._.requestId);\n this._.requestId = 0;\n this._.$stage.classList.add('ASS-animation-paused');\n return this;\n}\n\nfunction clear() {\n while (this._.$stage.lastChild) {\n this._.$stage.removeChild(this._.$stage.lastChild);\n }\n while (this._.$defs.lastChild) {\n this._.$defs.removeChild(this._.$defs.lastChild);\n }\n this._.stagings = [];\n this._.space = [];\n}\n\nfunction seek() {\n var vct = this.video.currentTime;\n var dias = this.dialogues;\n clear.call(this);\n this._.index = (function () {\n var from = 0;\n var to = dias.length - 1;\n while (from + 1 < to && vct > dias[(to + from) >> 1].end) {\n from = (to + from) >> 1;\n }\n if (!from) { return 0; }\n for (var i = from; i < to; i++) {\n if (\n dias[i].end > vct && vct >= dias[i].start\n || (i && dias[i - 1].end < vct && vct < dias[i].start)\n ) {\n return i;\n }\n }\n return to;\n })();\n framing.call(this);\n}\n\nfunction bindEvents() {\n var l = this._.listener;\n l.play = play.bind(this);\n l.pause = pause.bind(this);\n l.seeking = seek.bind(this);\n this.video.addEventListener('play', l.play);\n this.video.addEventListener('pause', l.pause);\n this.video.addEventListener('seeking', l.seeking);\n}\n\nfunction unbindEvents() {\n var l = this._.listener;\n this.video.removeEventListener('play', l.play);\n this.video.removeEventListener('pause', l.pause);\n this.video.removeEventListener('seeking', l.seeking);\n l.play = null;\n l.pause = null;\n l.seeking = null;\n}\n\nfunction resize() {\n var cw = this.video.clientWidth;\n var ch = this.video.clientHeight;\n var vw = this.video.videoWidth || cw;\n var vh = this.video.videoHeight || ch;\n var sw = this._.scriptRes.width;\n var sh = this._.scriptRes.height;\n var rw = sw;\n var rh = sh;\n var videoScale = Math.min(cw / vw, ch / vh);\n if (this.resampling === 'video_width') {\n rh = sw / vw * vh;\n }\n if (this.resampling === 'video_height') {\n rw = sh / vh * vw;\n }\n this.scale = Math.min(cw / rw, ch / rh);\n if (this.resampling === 'script_width') {\n this.scale = videoScale * (vw / rw);\n }\n if (this.resampling === 'script_height') {\n this.scale = videoScale * (vh / rh);\n }\n this.width = this.scale * rw;\n this.height = this.scale * rh;\n this._.resampledRes = { width: rw, height: rh };\n\n this.container.style.cssText = \"width:\" + cw + \"px;height:\" + ch + \"px;\";\n var cssText = (\n \"width:\" + (this.width) + \"px;\"\n + \"height:\" + (this.height) + \"px;\"\n + \"top:\" + ((ch - this.height) / 2) + \"px;\"\n + \"left:\" + ((cw - this.width) / 2) + \"px;\"\n );\n this._.$stage.style.cssText = cssText;\n this._.$svg.style.cssText = cssText;\n this._.$svg.setAttributeNS(null, 'viewBox', (\"0 0 \" + sw + \" \" + sh));\n\n this._.$animation.innerHTML = getKeyframes.call(this);\n seek.call(this);\n\n return this;\n}\n\nvar GLOBAL_CSS = '.ASS-container,.ASS-stage{position:relative;overflow:hidden}.ASS-container video{position:absolute;top:0;left:0}.ASS-stage{pointer-events:none;position:absolute}.ASS-dialogue{font-size:0;position:absolute}.ASS-fix-font-size{position:absolute;visibility:hidden}.ASS-fix-objectBoundingBox{width:100%;height:100%;position:absolute;top:0;left:0}.ASS-animation-paused *{-webkit-animation-play-state:paused!important;animation-play-state:paused!important}';\n\nfunction init(source, video, options) {\n if ( options === void 0 ) options = {};\n\n this.scale = 1;\n\n // private variables\n this._ = {\n index: 0,\n stagings: [],\n space: [],\n listener: {},\n $svg: createSVGEl('svg'),\n $defs: createSVGEl('defs'),\n $stage: document.createElement('div'),\n $animation: document.createElement('style'),\n };\n this._.$svg.appendChild(this._.$defs);\n this._.$stage.className = 'ASS-stage ASS-animation-paused';\n\n this._.resampling = options.resampling || 'video_height';\n\n this.container = options.container || document.createElement('div');\n this.container.classList.add('ASS-container');\n this.container.appendChild($fixFontSize);\n this.container.appendChild(this._.$svg);\n this._.hasInitContainer = !!options.container;\n\n this.video = video;\n bindEvents.call(this);\n if (!this._.hasInitContainer) {\n var isPlaying = !video.paused;\n video.parentNode.insertBefore(this.container, video);\n this.container.appendChild(video);\n if (isPlaying && video.paused) {\n video.play();\n }\n }\n this.container.appendChild(this._.$stage);\n\n var ref = compile(source);\n var info = ref.info;\n var width = ref.width;\n var height = ref.height;\n var dialogues = ref.dialogues;\n this.info = info;\n this._.scriptRes = {\n width: width || video.videoWidth,\n height: height || video.videoHeight,\n };\n this.dialogues = dialogues;\n\n var styleRoot = getStyleRoot(this.container);\n var $style = styleRoot.querySelector('#ASS-global-style');\n if (!$style) {\n $style = document.createElement('style');\n $style.type = 'text/css';\n $style.id = 'ASS-global-style';\n $style.appendChild(document.createTextNode(GLOBAL_CSS));\n styleRoot.appendChild($style);\n }\n this._.$animation.type = 'text/css';\n this._.$animation.className = 'ASS-animation';\n styleRoot.appendChild(this._.$animation);\n\n resize.call(this);\n\n if (!this.video.paused) {\n seek.call(this);\n play.call(this);\n }\n\n return this;\n}\n\nfunction show() {\n this._.$stage.style.visibility = 'visible';\n return this;\n}\n\nfunction hide() {\n this._.$stage.style.visibility = 'hidden';\n return this;\n}\n\nfunction destroy() {\n pause.call(this);\n clear.call(this);\n unbindEvents.call(this, this._.listener);\n\n var styleRoot = getStyleRoot(this.container);\n if (!this._.hasInitContainer) {\n var isPlay = !this.video.paused;\n this.container.parentNode.insertBefore(this.video, this.container);\n this.container.parentNode.removeChild(this.container);\n if (isPlay && this.video.paused) {\n this.video.play();\n }\n }\n styleRoot.removeChild(this._.$animation);\n\n // eslint-disable-next-line no-restricted-syntax\n for (var key in this) {\n if (Object.prototype.hasOwnProperty.call(this, key)) {\n this[key] = null;\n }\n }\n\n return this;\n}\n\nvar regex = /^(video|script)_(width|height)$/;\n\nfunction getter() {\n return regex.test(this._.resampling) ? this._.resampling : 'video_height';\n}\n\nfunction setter(r) {\n if (r === this._.resampling) { return r; }\n if (regex.test(r)) {\n this._.resampling = r;\n this.resize();\n }\n return this._.resampling;\n}\n\nvar ASS = function ASS(source, video, options) {\n if (typeof source !== 'string') {\n return this;\n }\n return init.call(this, source, video, options);\n};\n\nvar prototypeAccessors = { resampling: { configurable: true } };\n\nASS.prototype.resize = function resize$1 () {\n return resize.call(this);\n};\n\nASS.prototype.show = function show$1 () {\n return show.call(this);\n};\n\nASS.prototype.hide = function hide$1 () {\n return hide.call(this);\n};\n\nASS.prototype.destroy = function destroy$1 () {\n return destroy.call(this);\n};\n\nprototypeAccessors.resampling.get = function () {\n return getter.call(this);\n};\n\nprototypeAccessors.resampling.set = function (r) {\n return setter.call(this, r);\n};\n\nObject.defineProperties( ASS.prototype, prototypeAccessors );\n\nexport default ASS;\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import ASS from 'assjs';\nimport './style.scss';\n\nfunction artplayerPluginAss(url) {\n return (art) => {\n let ass = null;\n fetch(url)\n .then((res) => res.text())\n .then((text) => {\n const { $video, $subtitle } = art.template;\n $subtitle.classList.add('artplayer-plugin-ass');\n\n art.once('ready', () => {\n ass = new ASS(text, $video, {\n container: $subtitle,\n resampling: 'video_width',\n });\n\n ass.resize();\n art.emit('artplayerPluginAss', ass);\n art.on('resize', () => ass.resize());\n art.on('destroy', () => ass.destroy());\n });\n });\n return {\n name: 'artplayerPluginAss',\n ass,\n };\n };\n}\n\nexport default artplayerPluginAss;\n"],"names":["artplayerPluginAss","url","art","ass","fetch","then","res","text","template","$video","$subtitle","classList","add","once","ASS","container","resampling","resize","emit","on","destroy","name"],"mappings":";;;;;;EAAA,SAAS,WAAW,CAAC,IAAI,EAAE;EAC3B,EAAE,IAAI,KAAK,GAAG,IAAI;EAClB,KAAK,WAAW,EAAE;EAClB,KAAK,IAAI,EAAE;EACX,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;EACtB,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;EAC7B,IAAI,OAAO;EACX,MAAM,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;EACpB,MAAM,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;EAC9B,MAAM,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;EACpC,MAAM,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;EACtC,KAAK,CAAC;EACN,GAAG;EACH,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;EAClC,IAAI,OAAO;EACX,MAAM,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;EACpB,MAAM,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC9C,MAAM,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC9C,MAAM,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;EAC9B,MAAM,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;EACvC,KAAK,CAAC;EACN,GAAG;EACH,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,YAAY,CAAC,IAAI,EAAE;EAC5B,EAAE,OAAO,IAAI;EACb,KAAK,WAAW,EAAE;EAClB;EACA,KAAK,OAAO,CAAC,+CAA+C,EAAE,MAAM,CAAC;EACrE;EACA,KAAK,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC;EACpC,KAAK,IAAI,EAAE;EACX,KAAK,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;EACzB,KAAK,KAAK,CAAC,iBAAiB,CAAC;EAC7B,KAAK,GAAG,CAAC,UAAU,GAAG,EAAE,EAAE;EAC1B,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;EACpB,SAAS,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;EACxE,MAAM,EAAE,CAAC,CAAC;EACV,CAAC;AACD;EACA,IAAI,OAAO,GAAG;EACd,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;EAC3B,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;EAC5B,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI;EAClC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI;EACzD,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACrE;EACA,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,GAAG,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/G;EACA,SAAS,QAAQ,CAAC,IAAI,EAAE;EACxB,EAAE,IAAI,MAAM,CAAC;AACb;EACA,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC;EACf,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC7C,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;EAC3B,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACxB,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EAC1B,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EAC1B,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;EAC9C,MAAM,OAAO,GAAG,CAAC;EACjB,KAAK;EACL,GAAG;EACH,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACxB,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC3B,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EAC9B,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,GAAG,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACrC,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC3B,GAAG,MAAM,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACtD,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;EAC/C,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACvB,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACzB,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC,QAAQ,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EACpE,GAAG,MAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EAC9C,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;EAC/C,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACzB,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACzB,IAAI,GAAG,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;EAC/B,GAAG,MAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EAChD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE;EAC3E,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EAC/C,GAAG,MAAM,IAAI,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACxD,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;EAChD,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACvB,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACzB,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;EACpB,OAAO,IAAI,EAAE;EACb,OAAO,KAAK,CAAC,SAAS,CAAC;EACvB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;EACnB,GAAG,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,IAAI,IAAI,CAAC,GAAG,IAAI;EAChB,OAAO,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;EACrC,OAAO,IAAI,EAAE;EACb,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC;EACxB,IAAI,GAAG,CAAC,IAAI,GAAG;EACf,MAAM,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;EACjC,MAAM,KAAK,EAAE,CAAC;EACd,MAAM,OAAO,EAAE,IAAI;EACnB,MAAM,IAAI,EAAE,IAAI;EAChB,KAAK,CAAC;EACN,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;EACxB,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC5C,KAAK;EACL,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;EACxB,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAChC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC5C,KAAK;EACL,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;EACxB,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EACpC,KAAK;EACL,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EAChC,IAAI,IAAI,GAAG,GAAG,IAAI;EAClB,OAAO,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;EAChC,OAAO,IAAI,EAAE;EACb,OAAO,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;EACtE,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC;EACxB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE;EAChC,IAAI,GAAG,CAAC,CAAC,GAAG;EACZ,MAAM,EAAE,EAAE,CAAC;EACX,MAAM,EAAE,EAAE,CAAC;EACX,MAAM,KAAK,EAAE,CAAC;EACd,MAAM,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;EAC/B,SAAS,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;EAC5B,SAAS,KAAK,CAAC,IAAI,CAAC;EACpB,SAAS,KAAK,CAAC,CAAC,CAAC;EACjB,SAAS,GAAG,CAAC,QAAQ,CAAC;EACtB,KAAK,CAAC;EACN,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;EAC1B,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC/B,KAAK;EACL,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;EAC1B,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC5B,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC5B,KAAK;EACL,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;EAC1B,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC5B,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC5B,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC/B,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,GAAG,CAAC;EACb,CAAC;AACD;EACA,SAAS,SAAS,CAAC,IAAI,EAAE;EACzB,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;EAChB,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;EAChB,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC;EACf,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EACxC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACpB,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;EAC/B,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;EAC/B,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;EACjC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,EAAE;EAC9B,MAAM,IAAI,GAAG,EAAE;EACf,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACvB,OAAO;EACP,MAAM,GAAG,GAAG,EAAE,CAAC;EACf,KAAK,MAAM;EACX,MAAM,GAAG,IAAI,CAAC,CAAC;EACf,KAAK;EACL,GAAG;EACH,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACjB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;EAC5B,CAAC;AACD;EACA,SAAS,SAAS,CAAC,IAAI,EAAE;EACzB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;EACxC,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;EAClB,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;EACvB,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;EAC3D,GAAG;EACH,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;EAC5C,IAAI,IAAI,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EACnC,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;EAC1G,IAAI,MAAM,CAAC,IAAI,CAAC;EAChB,MAAM,IAAI,EAAE,IAAI;EAChB,MAAM,IAAI,EAAE,SAAS,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;EACzC,MAAM,OAAO,EAAE,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;EAC1D,KAAK,CAAC,CAAC;EACP,GAAG;EACH,EAAE,OAAO;EACT,IAAI,GAAG,EAAE,IAAI;EACb,IAAI,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;EACxE,IAAI,MAAM,EAAE,MAAM;EAClB,GAAG,CAAC;EACJ,CAAC;AACD;EACA,SAAS,SAAS,CAAC,IAAI,EAAE;EACzB,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;EAC1B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC5C,CAAC;AACD;EACA,SAAS,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;EACrC,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;EAC/B,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE;EACrC,IAAI,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;EAC3D,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;EAChD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EAC3B,GAAG;AACH;EACA,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC;EACf,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC1C,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;EAC/B,IAAI,QAAQ,GAAG;EACf,MAAM,KAAK,OAAO,CAAC;EACnB,MAAM,KAAK,SAAS,CAAC;EACrB,MAAM,KAAK,SAAS,CAAC;EACrB,MAAM,KAAK,SAAS;EACpB,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;EAC3B,QAAQ,MAAM;EACd,MAAM,KAAK,OAAO,CAAC;EACnB,MAAM,KAAK,KAAK;EAChB,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;EAClC,QAAQ,MAAM;EACd,MAAM,KAAK,QAAQ;EACnB,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;EACpC,QAAQ,MAAM;EACd,MAAM,KAAK,MAAM;EACjB,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;EAClC,QAAQ,MAAM;EACd,MAAM;EACN,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;EACvB,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,GAAG,CAAC;EACb,CAAC;AACD;EACA,SAAS,WAAW,CAAC,IAAI,EAAE;EAC3B,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EAC9D,CAAC;AACD;EACA,SAAS,UAAU,CAAC,IAAI,EAAE;EAC1B,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EAC7D,CAAC;AACD;EACA,SAAS,KAAK,CAAC,IAAI,EAAE;EACrB,EAAE,IAAI,IAAI,GAAG;EACb,IAAI,IAAI,EAAE,EAAE;EACZ,IAAI,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;EACrC,IAAI,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;EACrD,GAAG,CAAC;EACJ,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;EAClC,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;EAChB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EACzC,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;EAC/B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE;AACtC;EACA,IAAI,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;EACtD,SAAS,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;EAC5D,SAAS,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;EACtD,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE;AACjD;EACA,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE;EAClC,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;EACrB,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EAC1B,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;EACjD,QAAQ,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;EACzB,QAAQ,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3B,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;EAC/B,OAAO;EACP,KAAK;EACL,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;EACrB,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACrC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;EAC/C,OAAO;EACP,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACpC,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;EACjD,OAAO;EACP,KAAK;EACL,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;EACrB,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACrC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;EAC/C,OAAO;EACP,MAAM,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACnD,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;EACtD,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC7B,QAAQ,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC/B,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;EAC1F,OAAO;EACP,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM;EAC1B;EACA,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE;EAC1B,IAAI,IAAI,OAAO,GAAG,EAAE,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;EACjD,IAAI,QAAQ,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;AAC9D;EACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC7C,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE;EACpC,MAAM,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;EACzC,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC5C;EACA,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9C,OAAO;EACP,KAAK;EACL,IAAI,OAAO,MAAM,CAAC;EAClB,GAAG;EACH,CAAC,CAAC;AACF;EACA,SAAS,aAAa,CAAC,GAAG,EAAE;EAC5B,EAAE,IAAI,GAAG,GAAG;EACZ,IAAI,IAAI,EAAE,IAAI;EACd,IAAI,IAAI,EAAE,IAAI;EACd,IAAI,IAAI,EAAE,IAAI;EACd,IAAI,MAAM,EAAE,EAAE;EACd,GAAG,CAAC;EACJ,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;EAC9B,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;EACrB,OAAO,WAAW,EAAE;EACpB,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;EACxB,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EACzB,GAAG;EACH,EAAE,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;EACzE,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;EAC1D,GAAG;EACH,EAAE,OAAO,GAAG,CAAC;EACb,CAAC;AACD;EACA,SAAS,OAAO,CAAC,GAAG,EAAE;EACtB,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;EACvC,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG;EACH,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;EACrD,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG;EACH,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,UAAU,CAAC,QAAQ,EAAE;EAC9B,EAAE,IAAI,GAAG,CAAC;AACV;EACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC;EACtB,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC;EACtB,EAAE,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;EACvB,EAAE,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;EACvB,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EAC3D,IAAI,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;AAC5B;EACA,IAAI,OAAO,MAAM,CAAC;EAClB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EAC7B,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAClB,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAClB;EACA,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EAC7B,GAAG,CAAC,CAAC;EACL,EAAE,OAAO;EACT,IAAI,IAAI,EAAE,IAAI;EACd,IAAI,IAAI,EAAE,IAAI;EACd,IAAI,KAAK,EAAE,IAAI,GAAG,IAAI;EACtB,IAAI,MAAM,EAAE,IAAI,GAAG,IAAI;EACvB,GAAG,CAAC;EACJ,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;EACjC,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;EACnB,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;EACjC,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;EACjC,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;EACrC,EAAE,IAAI,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACjG,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAChF,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAChF,EAAE,OAAO,CAAC,IAAI,CAAC;EACf,IAAI,IAAI,EAAE,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG;EAClC,IAAI,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;EACpD,GAAG,CAAC,CAAC;EACL,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC1C,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC1E,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC1E,IAAI,OAAO,CAAC,IAAI,CAAC;EACjB,MAAM,IAAI,EAAE,GAAG;EACf,MAAM,MAAM,EAAE;EACd,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;EAC9C,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;EAC9C,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;EAChD,KAAK,CAAC,CAAC;EACP,GAAG;EACH,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE;EACpC,IAAI,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;EACzC,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACpE,GAAG;EACH,EAAE,OAAO,OAAO,CAAC;EACjB,CAAC;AACD;EACA,SAAS,SAAS,CAAC,YAAY,EAAE;EACjC,EAAE,OAAO,YAAY,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EACzC,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACxB,IAAI,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;AAC5B;EACA,IAAI;EACJ,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EACrC,MAAM,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACpB,MAAM,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACpB;EACA,MAAM,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE;EAC3B,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;EAChB,IAAI;EACJ,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EACd,CAAC;AACD;EACA,SAAS,cAAc,CAAC,WAAW,EAAE;EACrC,EAAE,IAAI,KAAK,CAAC;AACZ;EACA,EAAE,IAAI,QAAQ,GAAG,EAAE,CAAC;EACpB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;EACZ,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE;EACjC,IAAI,IAAI,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;EAC7B,IAAI,IAAI,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;EACjC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;EACtB,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;EAC5B,QAAQ,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACxF,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACtB,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACtB,QAAQ,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EAC3C,OAAO;EACP,MAAM,IAAI,CAAC,EAAE;EACb,QAAQ,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;EACxC,QAAQ,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACxC,OAAO;EACP,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACzB,MAAM,CAAC,EAAE,CAAC;EACV,KAAK,MAAM;EACX,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,EAAE;EAC7C,QAAQ,IAAI,cAAc,GAAG;EAC7B,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM;EACvB,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/C,SAAS,CAAC;EACV,QAAQ,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;EAC9D,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,UAAU,GAAG,EAAE;EAC5D,YAAY,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC1B,YAAY,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC1B;EACA,YAAY,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;EACpC,SAAS,CAAC;EACV,SAAS,CAAC;EACV,OAAO;EACP,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC/B,KAAK;EACL,GAAG;EACH,EAAE,IAAI,YAAY,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK;EAC9C,IAAI,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EACvC,MAAM,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EAC1B,MAAM,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC9B,MAAM,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EAC1B,MAAM,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;AAC1B;EACA,MAAM;EACN,MAAM,IAAI,KAAK,GAAG;EAClB,UAAU,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;EACjC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;EACxC,MAAM;EACN,GAAG,CAAC;EACJ,GAAG,CAAC;AACJ;EACA,EAAE,OAAO,MAAM,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;EAClG,CAAC;AACD;EACA,IAAI,KAAK,GAAG;EACZ,EAAE,IAAI,EAAE,MAAM;EACd,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO;EACzD,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI;EACzD,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACrE;EACA,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;EACvC,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC;AACxB;EACA,EAAE,KAAK,OAAO,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;EACzC,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;EACvB,EAAE,IAAI,KAAK,KAAK,SAAS,EAAE;EAC3B,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,EAAE;EACtC,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,KAAK,GAAG,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC;EAClG,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,MAAM,EAAE;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EACnD,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EACnD,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;EACnD,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;EACpE,QAAQ,IAAI,CAAC;EACb,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE;EACvC,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;EAC5B,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,MAAM,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;EAC3D,KAAK;EACL,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;EAC5B,MAAM,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxB,MAAM,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxB,MAAM,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxB,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxB,MAAM,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxB,MAAM,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;EACpG,KAAK;EACL,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,MAAM,EAAE;EACtB,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;EAChC,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;EAC5B,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;EAChC,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;EAC1B,IAAI,IAAI,OAAO,EAAE;EACjB,MAAM,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;EACxG,KAAK;EACL,IAAI,IAAI,IAAI,EAAE;EACd,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACzB,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACzB,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACzB,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACzB,MAAM,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;EAC9H,KAAK;EACL,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;EACH,EAAE,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;EACtC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;EAC/B,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,MAAM,EAAE;EACtB,IAAI,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;EAC1C,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,MAAM,EAAE;EACtB,IAAI,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;EAC1C,GAAG;EACH,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;EACzB,IAAI,SAAS,KAAK,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE;EACrE,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,OAAO,EAAE;EACvB,IAAI,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;EAC1D,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,IAAI,EAAE;EACpB,IAAI,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;EAC1B,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,IAAI,EAAE;EACpB,IAAI,OAAO;EACX,MAAM,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;EAC7B,UAAU,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE;EAC/D,UAAU,KAAK,GAAG,CAAC;EACnB,KAAK,CAAC;EACN,GAAG;EACH,EAAE,IAAI,GAAG,KAAK,GAAG,EAAE;EACnB,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;EACxB,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;EAC5B,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;EAC1B,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC;EAC/D,IAAI,IAAI,WAAW,GAAG,EAAE,CAAC;EACzB,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EAC9B,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAChC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;EAC9D,QAAQ,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;EACvD,OAAO;EACP,KAAK,CAAC,CAAC;EACP,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC;EACzE,GAAG;EACH,EAAE,SAAS,KAAK,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,EAAE;EACnD,CAAC;AACD;EACA,IAAI,IAAI,GAAG;EACX,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EACf,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EACf,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAClB;EACA,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC/E;EACA,SAAS,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE;EACnC,EAAE,OAAO;EACT,IAAI,IAAI,EAAE,IAAI;EACd,IAAI,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW;EAC/C,IAAI,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG;EACzB,IAAI,SAAS,EAAE,EAAE;EACjB,GAAG,CAAC;EACJ,CAAC;AACD;EACA,SAAS,WAAW,CAAC,GAAG,EAAE;EAC1B,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC1B,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACtB,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC1B,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EACxB,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AACpB;EACA,EAAE,IAAI,SAAS,CAAC;EAChB,EAAE,IAAI,GAAG,CAAC;EACV,EAAE,IAAI,GAAG,CAAC;EACV,EAAE,IAAI,IAAI,CAAC;EACX,EAAE,IAAI,IAAI,CAAC;EACX,EAAE,IAAI,IAAI,CAAC;EACX,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;EAClB,EAAE,IAAI,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;EACxC,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;EACnB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC1C,IAAI,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC1B,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;EAC1B,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;EAC1B,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;EAChC,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;EACzB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC1C,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,KAAK,SAAS,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;EAClD,KAAK;EACL,IAAI,IAAI,QAAQ,GAAG;EACnB,MAAM,GAAG,EAAE,KAAK,KAAK,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;EACzE,MAAM,IAAI,EAAE,IAAI;EAChB,MAAM,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI;EAC9D,KAAK,CAAC;EACN,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;EAChD,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;EAC5B,MAAM,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;EAC9D,MAAM,GAAG,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;EAC5C,MAAM,GAAG,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;EAC5C,MAAM,IAAI,GAAG,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;EAC/C,MAAM,IAAI,GAAG,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;EAC3E,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC;EAC/C,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EACtC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;EAC5C,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;EAC9B,QAAQ,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;EAC1B,QAAQ,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;EAC1B,QAAQ,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;EAC1B,QAAQ,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;EAC1B,QAAQ,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;EAC5C,QAAQ,IAAI,WAAW,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;EACrH,QAAQ,IAAI,GAAG,KAAK,GAAG,EAAE;EACzB,UAAU,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;EAChD,UAAU,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;EAC7C,SAAS,MAAM;EACf,UAAU,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;EAC5C,SAAS;EACT,OAAO;EACP,KAAK;EACL,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC;EAC3B,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;EAC7B,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EACzB,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;EAChE,KAAK;EACL,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE;EAC3C,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;EACnE,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;EAC3E;EACA,QAAQ,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;EACnC,OAAO,MAAM;EACb,QAAQ,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;EACvC,OAAO;EACP,KAAK;EACL,GAAG;EACH,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB;EACA,EAAE,OAAO,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;EACtF,CAAC;AACD;EACA,SAAS,gBAAgB,CAAC,GAAG,EAAE;EAC/B,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC1B,EAAE,IAAI,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;AAChC;EACA,EAAE,IAAI,QAAQ,GAAG,QAAQ,CAAC;EAC1B,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;EACnB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC7C,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;EAC3B,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,EAAE;EAC9B,MAAM,SAAS;EACf,KAAK;EACL,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;EAC5B,MAAM,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC;EAC5B,KAAK;EACL,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;EACtC,IAAI,IAAI,YAAY,GAAG,WAAW,CAAC;EACnC,MAAM,MAAM,EAAE,MAAM;EACpB,MAAM,IAAI,EAAE,GAAG,CAAC,KAAK;EACrB,MAAM,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM;EAC7B,MAAM,KAAK,EAAE,GAAG,CAAC,KAAK;EACtB,MAAM,GAAG,EAAE,GAAG,CAAC,GAAG;EAClB,KAAK,CAAC,CAAC;EACP,IAAI,IAAI,SAAS,GAAG,YAAY,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC;EAC5D,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;EAC7C,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;EACxB,MAAM,KAAK,EAAE,GAAG,CAAC,KAAK;EACtB,MAAM,KAAK,EAAE,GAAG,CAAC,KAAK;EACtB,MAAM,GAAG,EAAE,GAAG,CAAC,GAAG;EAClB;EACA,MAAM,MAAM,EAAE;EACd,QAAQ,IAAI,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO;EACxC,QAAQ,KAAK,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO;EACzC,QAAQ,QAAQ,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO;EAC5C,OAAO;EACP,MAAM,MAAM,EAAE,GAAG,CAAC,MAAM;EACxB,KAAK,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;EAChD,GAAG;EACH,EAAE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;EACjD,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC;EACnC,GAAG;EACH,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;EACtF,CAAC;AACD;EACA;EACA;EACA,IAAI,aAAa,GAAG;EACpB,EAAE,IAAI,EAAE,SAAS;EACjB,EAAE,QAAQ,EAAE,OAAO;EACnB,EAAE,QAAQ,EAAE,IAAI;EAChB,EAAE,aAAa,EAAE,aAAa;EAC9B,EAAE,eAAe,EAAE,aAAa;EAChC,EAAE,aAAa,EAAE,aAAa;EAC9B,EAAE,UAAU,EAAE,aAAa;EAC3B,EAAE,IAAI,EAAE,GAAG;EACX,EAAE,MAAM,EAAE,GAAG;EACb,EAAE,SAAS,EAAE,GAAG;EAChB,EAAE,SAAS,EAAE,GAAG;EAChB,EAAE,MAAM,EAAE,KAAK;EACf,EAAE,MAAM,EAAE,KAAK;EACf,EAAE,OAAO,EAAE,GAAG;EACd,EAAE,KAAK,EAAE,GAAG;EACZ,EAAE,WAAW,EAAE,GAAG;EAClB,EAAE,OAAO,EAAE,GAAG;EACd,EAAE,MAAM,EAAE,GAAG;EACb,EAAE,SAAS,EAAE,GAAG;EAChB,EAAE,OAAO,EAAE,IAAI;EACf,EAAE,OAAO,EAAE,IAAI;EACf,EAAE,OAAO,EAAE,IAAI;EACf,EAAE,QAAQ,EAAE,GAAG;EACf,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA,SAAS,eAAe,CAAC,KAAK,EAAE;EAChC,EAAE,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;EAC5C,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;EAC9D,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;EACnB,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;EACnB,IAAI,OAAO,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;EAC1B,GAAG;EACH,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;EAChC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;EAC1B,IAAI,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC;EAC1B,IAAI,IAAI,GAAG,GAAG,UAAU,CAAC;EACzB,IAAI,IAAI,GAAG,GAAG,GAAG,EAAE;EACnB,MAAM,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;EAC9B,KAAK;EACL,IAAI,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG;EAC5C,QAAQ,CAAC,UAAU,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;EAClF,QAAQ,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAChC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EACrD,GAAG;EACH,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;EAC1B,CAAC;AACD;EACA,SAAS,aAAa,CAAC,GAAG,EAAE;EAC5B,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACtB,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EACxB,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC1B,EAAE,IAAI,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;AACtC;EACA,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;EAClB,EAAE,IAAI,MAAM,GAAG;EACf,IAAI,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EACpG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;EACjB,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC9C,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;EAC9B,OAAO;EACP,MAAM,OAAO,CAAC,CAAC;EACf,KAAK,CAAC,EAAE,CAAC;EACT,EAAE,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG;EAC5B,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACtB;EACA,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;EACvC,MAAM,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC;EACzB,KAAK;EACL,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EAC1C,MAAM,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;EACvE,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;EACpB,OAAO;EACP,KAAK,CAAC,CAAC;EACP,IAAI,IAAI,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;EACjD,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;EACnD,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;EACjD,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;EAC9C,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACtB,IAAI,IAAI,GAAG,GAAG;EACd,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ;EACpB,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ;EACpB,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,EAAE,EAAE,EAAE;EACZ,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;EACzB,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;EAC3B,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;EAC9B,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;EAC9B,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM;EACpB,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM;EACpB,MAAM,GAAG,EAAE,CAAC,CAAC,OAAO;EACpB,MAAM,GAAG,EAAE,CAAC,CAAC,KAAK;EAClB,MAAM,KAAK,EAAE,CAAC,CAAC,OAAO;EACtB,MAAM,KAAK,EAAE,CAAC,CAAC,OAAO;EACtB,MAAM,KAAK,EAAE,CAAC,CAAC,MAAM;EACrB,MAAM,KAAK,EAAE,CAAC,CAAC,MAAM;EACrB,MAAM,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC;EAChE,KAAK,CAAC;EACN,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;EAC5C,GAAG,CAAC;AACJ;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;EACpD,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC;AACD;EACA,SAAS,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE;EAChC,EAAE,KAAK,OAAO,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;AACzC;EACA,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;EACzB,EAAE,IAAI,MAAM,GAAG,aAAa,CAAC;EAC7B,IAAI,IAAI,EAAE,IAAI,CAAC,IAAI;EACnB,IAAI,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;EAC5B,IAAI,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;EAC9B,IAAI,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;EAC5C,GAAG,CAAC,CAAC;EACL,EAAE,OAAO;EACT,IAAI,IAAI,EAAE,IAAI,CAAC,IAAI;EACnB,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI;EACzC,IAAI,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI;EAC1C,IAAI,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ;EAChD,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,SAAS,EAAE,gBAAgB,CAAC;EAChC,MAAM,MAAM,EAAE,MAAM;EACpB,MAAM,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;EACrC,KAAK,CAAC;EACN,GAAG,CAAC;EACJ,CAAC;AACD;EACA,IAAI,GAAG;EACP,EAAE,MAAM,CAAC,qBAAqB;EAC9B,KAAK,MAAM,CAAC,wBAAwB;EACpC,KAAK,MAAM,CAAC,2BAA2B;EACvC,MAAM,UAAU,EAAE,EAAE,EAAE,OAAO,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;EACvD,CAAC,CAAC;AACF;EACA,IAAI,GAAG;EACP,EAAE,MAAM,CAAC,oBAAoB;EAC7B,KAAK,MAAM,CAAC,uBAAuB;EACnC,KAAK,MAAM,CAAC,0BAA0B;EACtC,KAAK,YAAY;EACjB,CAAC,CAAC;AACF;EACA,SAAS,UAAU,CAAC,CAAC,EAAE;EACvB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;EAC9C,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;EACpC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC3B,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC3B,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC3B,EAAE,QAAQ,OAAO,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE;EAC3D,CAAC;AACD;EACA,SAAS,IAAI,GAAG;EAChB,EAAE,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;EAC9E,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;EACnC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;EAC5C,IAAI,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EAC1B,GAAG,CAAC,CAAC;EACL,CAAC;AACD;EACA,SAAS,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;EAClC,EAAE,KAAK,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;AACrC;EACA,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC;EACzE,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EACzC,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxB,IAAI,GAAG,CAAC,cAAc;EACtB,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,8BAA8B,GAAG,IAAI;EACtE,MAAM,IAAI,CAAC,CAAC,CAAC;EACb,MAAM,IAAI,CAAC,CAAC,CAAC;EACb,KAAK,CAAC;EACN,GAAG;EACH,EAAE,OAAO,GAAG,CAAC;EACb,CAAC;AACD;EACA,SAAS,SAAS,CAAC,IAAI,EAAE;EACzB,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;EAC1B,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EACxB,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;EAC3E,EAAE,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;EACnC,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,KAAK,EAAE,EAAE,OAAO,UAAU,CAAC,EAAE;EACxD,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,KAAK,EAAE,EAAE,OAAO,OAAO,CAAC,EAAE;EAClD,EAAE,OAAO,EAAE,CAAC;EACZ,CAAC;AACD;EACA,IAAI,MAAM,GAAG;EACb,EAAE,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC;EACnC,EAAE,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC;EACnC,EAAE,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC;EACjC,CAAC,CAAC;AACF;EACA,SAAS,YAAY,CAAC,SAAS,EAAE;EACjC,EAAE,IAAI,QAAQ,GAAG,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC;EAC5E,EAAE,OAAO,QAAQ,KAAK,QAAQ,GAAG,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC;EAC1D,CAAC;AACD;EACA,IAAI,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;EAC5F,IAAI,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACxE;EACA,SAAS,cAAc,CAAC,IAAI,EAAE;EAC9B,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;EAClC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;EACnC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;EACb,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;EAC1B,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;EACxB,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACpB,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACpB,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACpB,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACpB,IAAI,EAAE,IAAI,EAAE,CAAC;EACb,IAAI,EAAE,IAAI,EAAE,CAAC;EACb,IAAI,EAAE,IAAI,EAAE,CAAC;EACb,IAAI,EAAE,IAAI,EAAE,CAAC;EACb,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;EACpG,GAAG;EACH,EAAE,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;EAC7B,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EACrD,MAAM,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EAC1B,MAAM,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;AAC9B;EACA,MAAM;EACN,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EACvC,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACtB,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACtB;EACA,QAAQ,QAAQ,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE;EAC3C,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;EAClB,MAAM;EACN,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EAChB,GAAG;EACH,EAAE,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;EAC1C,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;EACpB,IAAI,CAAC,IAAI,SAAS,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,SAAS,CAAC;EACjF,GAAG;EACH,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;EAC7B,EAAE,IAAI,SAAS,GAAG,WAAW,CAAC,UAAU,EAAE;EAC1C,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;EACd,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;EAC9C,EAAE,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE;EAC5C,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;EACZ,IAAI,CAAC,WAAW,GAAG,QAAQ,GAAG,KAAK,GAAG,GAAG,EAAE;EAC3C,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;EACjC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;EACtC,EAAE,OAAO;EACT,IAAI,SAAS,EAAE,SAAS;EACxB,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC;EAChE,GAAG,CAAC;EACJ,CAAC;AACD;EACA,SAAS,WAAW,CAAC,QAAQ,EAAE;EAC/B,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;EACtB,IAAI,OAAO;EACX,GAAG;EACH,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EAC5C,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;EACnD,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;EACnC,EAAE,KAAK,CAAC,SAAS,GAAG,2BAA2B,CAAC;EAChD,EAAE,IAAI,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;EACrD,EAAE,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;EAC5B,EAAE,IAAI,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;EAChC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;EACtC,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;EAChC,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;EAC1D,CAAC;AACD;EACA,IAAI,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EACjD,YAAY,CAAC,SAAS,GAAG,mBAAmB,CAAC;EAC7C,YAAY,CAAC,WAAW,GAAG,GAAG,CAAC;AAC/B;EACA,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAChC;EACA,SAAS,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE;EACjC,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;EAC1B,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;EACnB,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,GAAG,+BAA+B,GAAG,EAAE,GAAG,mBAAmB,GAAG,EAAE,GAAG,WAAW,CAAC;EAC/G,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,YAAY,CAAC;EACrD,GAAG;EACH,EAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;EACpB,CAAC;AACD;EACA,SAAS,eAAe,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE;EACzC,EAAE,IAAI,SAAS,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC;EACzC,EAAE,IAAI,SAAS,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC;EACzC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC;EACjC,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;EACrC,EAAE,IAAI,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;EACpD,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,gBAAgB,EAAE;EACpD,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC;EAC1C,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC;EAC3B,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;EAC3B,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE;EAC7C,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;EAChD,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;EACzB,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE;EACjD,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;EACtB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;EAChB,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC;EACnB,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;EAC3B,EAAE,IAAI,SAAS,EAAE;EACjB,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,EAAE;EACpD,MAAM,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE;EACnE,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC;EAC5B,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC;EAC7B,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;EAC5B,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,gBAAgB,EAAE;EACtD,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC;EAC5B,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;EACnB,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;EAC9B,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE;EACnD,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC;EACzB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;EACrB,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC;EAC9B,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;EAChC,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE;EAC/C,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;EAClD,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;EAC3B,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE;EACnD,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC;EACxB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;EAClB,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC;EACxB,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;EAC/B,GAAG;EACH,EAAE,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,EAAE;EAC5C,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE;EAChD,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EAC/B,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EAC/B,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,eAAe,CAAC;EACjD,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;EAC5B,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,gBAAgB,EAAE;EACtD,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC;EAC5B,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;EACnB,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;EAC9B,IAAI,IAAI,CAAC,QAAQ,EAAE;EACnB,MAAM,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE;EAClD,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EACjC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EACjC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;EAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;EACjC,MAAM,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE;EACrD,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;EAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;EACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;EACzB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;EAClC,KAAK;EACL,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE;EAC/C,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;EAClD,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;EAC3B,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE;EACnD,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC;EACxB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;EAClB,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;EAC7C,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;EAC/B,GAAG;EACH,EAAE,IAAI,MAAM,GAAG,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;EAC1C,EAAE,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,EAAE;EAC5C,IAAI,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;EACvE,GAAG;EACH,EAAE,IAAI,SAAS,EAAE;EACjB,IAAI,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;EACvE,GAAG;EACH,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EACnE,EAAE,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;EAC9B,EAAE,OAAO,OAAO,CAAC;EACjB,CAAC;AACD;EACA,SAAS,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE;EACrC,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC;EACf,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;EACvC,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EAC7B,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EAC7B,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;EACvC,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EAC7B,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;EAC7B,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;EACrC,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,MAAM,CAAC,EAAE;EAC9C,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;EAChB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EAClC,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EACpC,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;EACrC,UAAU,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;EACvC,YAAY,IAAI,CAAC,IAAI,CAAC,EAAE;EACxB,cAAc,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;EACrF,aAAa;EACb,WAAW;EACX,SAAS;EACT,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;EACjF,OAAO;EACP,KAAK;EACL,GAAG;EACH,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;EAChB,IAAI,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;EAC9B,IAAI,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;EAC9B,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;EACtB,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;EACtB,IAAI,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE;EAChE,MAAM,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE;EAClE,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;EACvF,OAAO;EACP,KAAK;EACL,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;EAC/F,GAAG;EACH,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;EACpB,CAAC;AACD;EACA,SAAS,eAAe,CAAC,GAAG,EAAE;EAC9B,EAAE,OAAO;EACT;EACA,IAAI,oBAAoB;EACxB,KAAK,UAAU,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM;EACzC,KAAK,UAAU,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM;EACzC,KAAK,UAAU,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM;EAC1C,KAAK,QAAQ,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG;EACzG,KAAK,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EAC9E,CAAC;AACD;EACA,SAAS,kBAAkB,CAAC,QAAQ,EAAE;EACtC,EAAE,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;EACrC,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrB,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrB,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;EAC3B,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;EACzB,EAAE,IAAI,CAAC,GAAG,EAAE;EACZ,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EACzB,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;EAC3C,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,EAAE;EACvD,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE;EACnD,IAAI,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE;EAC/C,IAAI,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE;EACrE,IAAI,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;EACtC,GAAG;EACH,EAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EACxD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;EAClC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,MAAM,EAAE;EAC3C;EACA,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;EAC5C,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;EAC3C,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,mBAAmB,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;EACjG,KAAK;EACL,GAAG;EACH,CAAC;AACD;EACA,SAAS,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE;EACvC,EAAE,QAAQ,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE;EAChF,CAAC;AACD;EACA,IAAI,iBAAiB,GAAG,SAAS,iBAAiB,GAAG;EACrD,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;EAChB,CAAC,CAAC;AACF;EACA,iBAAiB,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;EACtE,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE;EACrD,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;EAClC,CAAC,CAAC;AACF;EACA,iBAAiB,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,EAAE,GAAG,EAAE;EACvD,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACpB,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACpB,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;EAChC,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACxB,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACxB,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;AACpB;EACA,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;EACjC,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE;EACrB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;EACrE,GAAG;EACH,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE;EACrB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;EACnE,GAAG;EACH,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;EACjC,CAAC,CAAC;AACF;EACA,iBAAiB,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,IAAI;EAC5D,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC;AACtB;EACA,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;EAC9B,KAAK,GAAG,CAAC,UAAU,OAAO,EAAE,EAAE;EAC9B,OAAO,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;EACxD,WAAW,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC;EACxH,WAAW,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;EAC1B,MAAM,EAAE,CAAC;EACT,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;EACd,CAAC,CAAC;AACF;EACA;EACA,SAAS,MAAM,CAAC,EAAE,EAAE;EACpB,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,UAAU,OAAO,EAAE,CAAC,EAAE;EAC9C,IAAI,IAAI,MAAM,GAAG,KAAK,CAAC;EACvB,IAAI,OAAO,OAAO;EAClB,OAAO,GAAG,CAAC,UAAU,CAAC,EAAE;EACxB,QAAQ,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC;EACvE,QAAQ,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;EAC9E,OAAO,CAAC;EACR,OAAO,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;EAC/B,GAAG,EAAE,EAAE,CAAC,CAAC;EACT,CAAC;AACD;EACA,SAAS,YAAY,GAAG;EACxB,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC;AACpB;EACA,EAAE,IAAI,SAAS,GAAG,EAAE,CAAC;EACrB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;EAC7C,IAAI,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC/B,IAAI,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;EAC3B,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EACjC,IAAI,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;EAC7B,IAAI,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;EAC7B,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EACjC,IAAI,IAAI,QAAQ,GAAG,CAAC,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC;EACxC,IAAI,IAAI,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;EACzC;EACA,IAAI,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE;EACzB,MAAM,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;EAC7B,MAAM,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;EAC/B,MAAM,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;EAC3C,MAAM,IAAI,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;EACzB,MAAM,IAAI,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;EACzD,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE;EAC7B,QAAQ,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC5E,QAAQ,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;EAC3D,QAAQ,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,GAAG,aAAa,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;EAC1E,OAAO;EACP,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EAChC,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;EAC9C,QAAQ,IAAI,KAAK,GAAG,aAAa,IAAI,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;EACzE,QAAQ,IAAI,GAAG,GAAG,aAAa,IAAI,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;EACvE,QAAQ,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,QAAQ,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;EACtD,QAAQ,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;EACjD,QAAQ,IAAI,EAAE,GAAG,GAAG,EAAE;EACtB,UAAU,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC;EAChE,SAAS;EACT,QAAQ,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;EACjD,OAAO;EACP,KAAK;EACL,IAAI,IAAI,IAAI,EAAE;EACd,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACvB,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;EACzB,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACvB,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;EACzB,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACvB,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,QAAQ,CAAC;EACnC,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EAC/C,MAAM,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EAC/E,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACtB,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACtB;EACA,QAAQ;EACR,SAAS,YAAY,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;EACpG,QAAQ;EACR,OAAO,CAAC,CAAC;EACT,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC7G,KAAK;EACL,IAAI,IAAI,IAAI,EAAE;EACd,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;EAC/B,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;EAC3B,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;EAC3B,QAAQ,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;EAC3C,QAAQ,IAAI,IAAI,GAAG,QAAQ,EAAE;EAC7B,UAAU,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;EACjF,UAAU,IAAI,IAAI,GAAG,IAAI,GAAG,QAAQ,EAAE;EACtC,YAAY,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,IAAI,QAAQ,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;EAChG,WAAW;EACX,UAAU,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;EAC/C,SAAS,MAAM;EACf,UAAU,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC;EAC7D,SAAS;EACT,OAAO,MAAM;EACb,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACzB,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACzB,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACzB,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;EAC3B,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;EAC3B,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACzB,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;EACzB,QAAQ,IAAI,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;EACpH,QAAQ,IAAI,QAAQ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;EAC9E,QAAQ,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;EACrD,QAAQ,IAAI,IAAI,GAAG,QAAQ,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;EACjF,QAAQ,IAAI,IAAI,GAAG,QAAQ,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;EACjF,QAAQ,IAAI,EAAE,GAAG,QAAQ,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;EAC/E,QAAQ,IAAI,EAAE,GAAG,QAAQ,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;EAC/E,QAAQ,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;EACvD,OAAO;EACP,KAAK;EACL,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;EACpC,IAAI,IAAI,OAAO,EAAE;EACjB,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/D,MAAM,SAAS,IAAI,iBAAiB,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;EACtE,KAAK;EACL,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;EACpC,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;EAClD,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE;EACvD,UAAU,OAAO;EACjB,SAAS;EACT,QAAQ,IAAI,GAAG,GAAG,IAAI,iBAAiB,EAAE,CAAC;EAC1C,QAAQ,IAAI,OAAO,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;EAC1D;EACA,QAAQ,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EACtD,UAAU,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EAC1B,UAAU,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EAC1B,UAAU,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AAC5B;EACA,UAAU,IAAI,GAAG,CAAC,EAAE,EAAE;EACtB,YAAY,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;EACvF,YAAY,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;EACjF,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;EACpG,WAAW;EACX,UAAU,IAAI,GAAG,CAAC,GAAG,EAAE;EACvB,YAAY,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC;EAC7D,YAAY,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC;EACvD,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;EAC7G,WAAW;EACX,UAAU,IAAI,QAAQ;EACtB,YAAY,GAAG,CAAC,EAAE,KAAK,SAAS;EAChC,eAAe,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE;EAChC,eAAe,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE;EAChC,eAAe,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE;EAChC,WAAW,CAAC;EACZ,UAAU,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;EAC/C,YAAY,IAAI,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;EAC7D,YAAY,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;EACnF,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;EACpG,WAAW;EACX,UAAU,IAAI,QAAQ,EAAE;EACxB,YAAY,IAAI,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;EAC5D,YAAY,IAAI,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;EACtD,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;EACtG,WAAW;EACX,UAAU,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;EACzD,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS;EAChC,eAAe,GAAG,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3D,YAAY,EAAE,CAAC,CAAC;EAChB,UAAU,IAAI,SAAS,EAAE;EACzB,YAAY,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;EAC1F,YAAY,IAAI,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACzD,YAAY,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;EACxE,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;EAC1G,WAAW;EACX,UAAU,IAAI,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;EAC/D,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS;EAChC,eAAe,GAAG,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3D,YAAY,EAAE,CAAC,CAAC;EAChB,UAAU,IAAI,YAAY,EAAE;EAC5B,YAAY,IAAI,KAAK,GAAG,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;EACjD,YAAY,IAAI,QAAQ,CAAC,OAAO,EAAE;EAClC;EACA,cAAc,MAAM,CAAC,KAAK,EAAE;EAC5B,gBAAgB,CAAC,EAAE,CAAC;EACpB,gBAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,GAAG;EACvE,gBAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,GAAG;EACvE,eAAe,CAAC,CAAC;EACjB,cAAc,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;EACxD,aAAa;EACb,YAAY,IAAI,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;EAClD,YAAY,IAAI,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;EAC9C,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;EACxG,WAAW;EACX,SAAS,CAAC,CAAC;EACX,QAAQ,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;EAClC,QAAQ,MAAM,CAAC,QAAQ,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;EACjE,QAAQ,SAAS,IAAI,iBAAiB,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;EACrE,OAAO,CAAC,CAAC;EACT,KAAK,CAAC,CAAC;EACP,GAAG,CAAC,CAAC;EACL,EAAE,OAAO,SAAS,CAAC;EACnB,CAAC;AACD;EACA,SAAS,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;EAChD,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;EAC5B,EAAE;EACF,IAAI,EAAE,GAAG,iBAAiB,GAAG,IAAI,GAAG,GAAG;EACvC,MAAM,EAAE,GAAG,qBAAqB,GAAG,QAAQ,GAAG,IAAI;EAClD,MAAM,EAAE,GAAG,kBAAkB,GAAG,KAAK,GAAG,IAAI;EAC5C,MAAM,EAAE,GAAG,mCAAmC;EAC9C,MAAM,EAAE,GAAG,8BAA8B;EACzC,MAAM,EAAE,GAAG,+BAA+B;EAC1C,IAAI;EACJ,CAAC;AACD;EACA,SAAS,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE;EAC3C,EAAE,IAAI,GAAG,GAAG,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;EAC/C,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC;EAC7B,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACtB,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACtB,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EACxB,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC1B,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAClD,EAAE,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC;EAC3D,EAAE,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC;EAC3D,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;EACrC,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;EAChE,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;EAChE,EAAE,IAAI,GAAG,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;EAC5E,EAAE,IAAI,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;EAC7E,EAAE,IAAI,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE;EAChC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;EAClB,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;EACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;EACpE,EAAE,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;EAClF,EAAE,IAAI,QAAQ,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;EACnC,EAAE,IAAI,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;EAClC,EAAE,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;EACjE,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC1B,EAAE,IAAI,QAAQ,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;EACnC,EAAE,IAAI,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE;EACtC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;EACpB,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;EACrE,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACxE,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;EAC5B,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE;EACtC,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,CAAC;EAC7B,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;EAC/B,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,QAAQ,EAAE;EACpC,IAAI,CAAC,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;EAC/C,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;EACpB,IAAI,oBAAoB;EACxB,MAAM,OAAO,IAAI,IAAI,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK;EAC7C,MAAM,MAAM,IAAI,IAAI,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK;EAC5C,GAAG,CAAC;EACJ,EAAE,OAAO;EACT,IAAI,IAAI,EAAE,IAAI;EACd,IAAI,OAAO,GAAG,0BAA0B,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,YAAY,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;EACvG,GAAG,CAAC;EACJ,CAAC;AACD;EACA,SAAS,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE;EAC7B,EAAE,OAAO,IAAI;EACb,KAAK,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;EAC1B,KAAK,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;EAC1B,KAAK,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;EAC7B,KAAK,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;EAC9B,KAAK,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;EAC5B,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;EAClD,CAAC;AACD;EACA,SAAS,cAAc,CAAC,QAAQ,EAAE;EAClC,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC;AACpB;EACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EAC3C,EAAE,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC;EAClC,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAC;EAC7C,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;EACzB,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;EAClC,IAAI,IAAI,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;EACxC,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;EAChD,MAAM,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;EAC/B,MAAM,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;EACrC,MAAM,IAAI,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;EACjD,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;EACpD,MAAM,IAAI,OAAO,GAAG,uBAAuB,CAAC;EAC5C,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;EACzC,MAAM,IAAI,CAAC,OAAO,EAAE;EACpB,QAAQ,OAAO,IAAI,gBAAgB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC7D,QAAQ,OAAO,IAAI,YAAY,IAAI,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;EAC3F,QAAQ,OAAO,IAAI,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;EAClE,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;EACtF,QAAQ,IAAI,WAAW,KAAK,CAAC,EAAE;EAC/B,UAAU,OAAO,IAAI,cAAc,IAAI,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1E,SAAS;EACT,QAAQ,IAAI,WAAW,KAAK,CAAC,EAAE;EAC/B,UAAU,OAAO;EACjB,YAAY,mBAAmB,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;EACrE,cAAc,aAAa,IAAI,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG;EACjE,WAAW,CAAC;EACZ,SAAS;EACT,QAAQ,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,cAAc,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;EACxF,QAAQ,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,oBAAoB,GAAG,EAAE,CAAC;EACrD,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,kBAAkB,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;EACzI,QAAQ,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,iBAAiB,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;EAC1E;EACA;EACA,QAAQ,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;EACvD,UAAU,OAAO,IAAI,0CAA0C,CAAC;EAChE,SAAS;EACT,QAAQ,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;EACzB,UAAU,OAAO,IAAI,uCAAuC,CAAC;EAC7D,SAAS;EACT,OAAO;EACP,MAAM,IAAI,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;EAC3D,QAAQ,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EACvD,QAAQ,EAAE,CAAC,CAAC;EACZ,MAAM,IAAI,YAAY,EAAE;EACxB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,YAAY,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;EACpF,QAAQ,IAAI,CAAC,OAAO,EAAE;EACtB,UAAU,OAAO,IAAI,mEAAmE,CAAC;EACzF,SAAS;EACT,OAAO;EACP,MAAM,IAAI,aAAa,EAAE;EACzB,QAAQ,OAAO,IAAI,eAAe,CAAC,aAAa,EAAE,GAAG,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;EACzF,OAAO;EACP,MAAM,IAAI,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE;EAC9B,QAAQ,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;EACpE,QAAQ,OAAO,IAAI,iBAAiB,GAAG,GAAG,GAAG,KAAK,CAAC;EACnD,OAAO;AACP;EACA,MAAM,IAAI,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;EACjE,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,GAAG,EAAE;EACzE,QAAQ,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;EACnD,QAAQ,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;EAC5C,QAAQ,IAAI,OAAO,EAAE;EACrB,UAAU,IAAI,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;EACpE,UAAU,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;EAC5C,UAAU,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;EACtC,SAAS,MAAM;EACf,UAAU,IAAI,GAAG,EAAE;EACnB,YAAY,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;EACzD,WAAW;EACX,UAAU,IAAI,CAAC,IAAI,EAAE;EACrB,YAAY,OAAO;EACnB,WAAW;EACX,UAAU,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;EACjC,SAAS;EACT;EACA,QAAQ,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC;EACvC,QAAQ,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC9B,OAAO,CAAC,CAAC;EACT,KAAK,CAAC,CAAC;EACP,GAAG,CAAC,CAAC;EACL,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;EACvB,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,QAAQ,CAAC,QAAQ,EAAE;EAC5B,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;EACrC,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;EACzB,EAAE,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;EAChF,EAAE,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;EAChC,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;EAClD,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC;EACzC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;EAC/C,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;EAC5F,IAAI,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;EAC9F,IAAI,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;EAC7F,GAAG,CAAC;EACJ,EAAE,IAAI,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EACpC,EAAE,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;EACzD,EAAE,IAAI,WAAW,GAAG,UAAU,CAAC,EAAE;EACjC,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACnC,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACrC,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACpC,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACjC,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACnC,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAClC,IAAI;EACJ,MAAM,CAAC,KAAK,KAAK,MAAM;EACvB,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE;EACvB,YAAY,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,UAAU,CAAC;EAC1D,YAAY,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,GAAG,UAAU,CAAC;EACtD,OAAO;EACP,UAAU,KAAK,KAAK,QAAQ;EAC5B,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,UAAU;EACtD,YAAY,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC;EAC3B,YAAY,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,UAAU,CAAC;EAC1D,OAAO,CAAC;EACR,UAAU,KAAK,KAAK,OAAO;EAC3B,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,GAAG,UAAU;EAClD,YAAY,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,UAAU,CAAC;EAC1D,YAAY,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC;EAC3B,OAAO,CAAC;EACR,MAAM;EACN,GAAG,CAAC;EACJ,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;EAChB,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC;EACjB,EAAE,IAAI,IAAI,GAAG,UAAU,CAAC,EAAE;EAC1B,IAAI,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;EAC3C,IAAI,IAAI,KAAK,IAAI,MAAM,EAAE;EACzB,MAAM,MAAM,GAAG,CAAC,CAAC;EACjB,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;EACL,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG,CAAC;EACJ,EAAE,IAAI,SAAS,IAAI,CAAC,EAAE;EACtB,IAAI,KAAK,IAAI,CAAC,GAAG,WAAW,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;EAChE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE;EAC7B,KAAK;EACL,GAAG,MAAM,IAAI,SAAS,IAAI,CAAC,EAAE;EAC7B,IAAI,KAAK,IAAI,GAAG,GAAG,QAAQ,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE;EACtE,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE;EAC/B,KAAK;EACL,GAAG,MAAM;EACT,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC,WAAW,GAAG,MAAM,KAAK,CAAC,EAAE,GAAG,GAAG,WAAW,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE;EACrF,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE;EAC/B,KAAK;EACL,GAAG;EACH,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE;EACrB,IAAI,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC;EACzB,GAAG;EACH,EAAE,KAAK,IAAI,GAAG,GAAG,MAAM,EAAE,GAAG,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE;EACvD,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;EACtC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;EACxC,GAAG;EACH,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC;AACD;EACA,SAAS,WAAW,CAAC,QAAQ,EAAE;EAC/B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;EAC3B,EAAE,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;EACrC,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;EACZ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;EACZ,EAAE,IAAI,MAAM,EAAE;EACd,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;EAClC,MAAM,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE;EACzE,MAAM,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE;EAC/E,MAAM,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE;EAClD,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;EACnD,KAAK;EACL,GAAG,MAAM,IAAI,QAAQ,CAAC,GAAG,IAAI,IAAI,EAAE;EACnC,IAAI,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EAC7C,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;EACxD,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,EAAE;EACpE,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE;EAChE,IAAI,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE;EAC5D,IAAI,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE;EAClF,IAAI,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;EACnD,GAAG,MAAM;EACT,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;EACvC,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC,EAAE;EAC9D,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE;EACpF,IAAI,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,EAAE;EAC9C,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE;EAC1C,QAAQ,IAAI,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;AAC9C;EACA,QAAQ,OAAO,aAAa,CAAC;EAC7B,OAAO,CAAC;EACR,MAAM,EAAE,CAAC,CAAC;EACV,IAAI,IAAI,IAAI,EAAE;EACd,MAAM,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE;EACzE,MAAM,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE;EAC/E,MAAM,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE;EAClD,KAAK,MAAM;EACX,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;EACxC,KAAK;EACL,GAAG;EACH,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EACxB,CAAC;AACD;EACA,SAAS,WAAW,CAAC,QAAQ,EAAE;EAC/B,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;EACzB,EAAE,IAAI,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;EACrC,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;EACzB,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;EAC7C,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;EAC7B,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC/B,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrB,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrB,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;EACnC,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;EACnB,EAAE,IAAI,KAAK,EAAE,EAAE,OAAO,IAAI,UAAU,GAAG,KAAK,GAAG,GAAG,CAAC,EAAE;EACrD,EAAE,IAAI,aAAa,EAAE;EACrB,IAAI,OAAO,IAAI,eAAe,CAAC,aAAa,EAAE,GAAG,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;EACrF,GAAG;EACH,EAAE,OAAO,IAAI,aAAa,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAChF,EAAE,IAAI,CAAC,MAAM,EAAE;EACf,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;EACpE,IAAI,OAAO,IAAI,YAAY,GAAG,EAAE,GAAG,KAAK,CAAC;EACzC,IAAI,IAAI,CAAC,GAAG,EAAE;EACd,MAAM,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE;EAC/B,QAAQ,OAAO,IAAI,cAAc,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;EACvE,OAAO;EACP,MAAM,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE;EAC/B,QAAQ,OAAO,IAAI,eAAe,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;EACzE,OAAO;EACP,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE;EAC1E,QAAQ,OAAO,IAAI,cAAc,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;EACvE,QAAQ,OAAO,IAAI,eAAe,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;EACzE,OAAO;EACP,KAAK;EACL,GAAG;EACH,EAAE,OAAO,IAAI,QAAQ,GAAG,KAAK,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC;EAC/F,EAAE,OAAO,OAAO,CAAC;EACjB,CAAC;AACD;EACA,SAAS,QAAQ,CAAC,QAAQ,EAAE;EAC5B,EAAE,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;EACjD,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;EACnC,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;EAClC,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;EACzC,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EACxB,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC1B,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;EACrD,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;EACrD,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;EACxD,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;EAC/B,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;EACnC,EAAE,OAAO,QAAQ,CAAC;EAClB,CAAC;AACD;EACA,SAAS,OAAO,GAAG;EACnB,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;EACnC,EAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EACxD,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EACjC,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;EACtB,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;EACtD,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;EAC3B,MAAM,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACtB,MAAM,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;EACtB,MAAM,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EAC5B,MAAM,IAAI,QAAQ,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,IAAI,EAAE,KAAK,IAAI,GAAG,KAAK,CAAC,CAAC;EAChF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;EAChD,KAAK;EACL,IAAI,IAAI,GAAG,GAAG,GAAG,EAAE;EACnB,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;EAC1C,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE;EACzB,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;EAChD,OAAO;EACP,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACnC,KAAK;EACL,GAAG;EACH,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;EAC5B,EAAE;EACF,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;EAC9B,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK;EACtC,IAAI;EACJ,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE;EACtC,MAAM,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;EAC1D,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAClC,KAAK;EACL,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;EACnB,GAAG;EACH,CAAC;AACD;EACA,SAAS,IAAI,GAAG;EAChB,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC;AACpB;EACA,EAAE,IAAI,KAAK,GAAG,YAAY;EAC1B,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EACzB,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;EACpC,GAAG,CAAC;EACJ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;EACxB,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;EAChC,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;EACzD,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,KAAK,GAAG;EACjB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;EACxB,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;EACvB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;EACtD,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,KAAK,GAAG;EACjB,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE;EAClC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;EACvD,GAAG;EACH,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE;EACjC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EACrD,GAAG;EACH,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC;EACvB,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;EACpB,CAAC;AACD;EACA,SAAS,IAAI,GAAG;EAChB,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;EACnC,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;EAC5B,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACnB,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,YAAY;EAC9B,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;EACjB,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;EAC7B,IAAI,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE;EAC9D,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;EAC9B,KAAK;EACL,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE;EAC5B,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;EACpC,MAAM;EACN,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK;EACjD,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;EAC9D,QAAQ;EACR,QAAQ,OAAO,CAAC,CAAC;EACjB,OAAO;EACP,KAAK;EACL,IAAI,OAAO,EAAE,CAAC;EACd,GAAG,GAAG,CAAC;EACP,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACrB,CAAC;AACD;EACA,SAAS,UAAU,GAAG;EACtB,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;EAC1B,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC3B,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC7B,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC9B,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;EAC9C,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;EAChD,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;EACpD,CAAC;AACD;EACA,SAAS,YAAY,GAAG;EACxB,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;EAC1B,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;EACjD,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;EACnD,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;EACvD,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;EAChB,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;EACjB,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;EACnB,CAAC;AACD;EACA,SAAS,MAAM,GAAG;EAClB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;EAClC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;EACnC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;EACvC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;EACxC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;EAClC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;EACnC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;EACd,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;EACd,EAAE,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;EAC9C,EAAE,IAAI,IAAI,CAAC,UAAU,KAAK,aAAa,EAAE;EACzC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;EACtB,GAAG;EACH,EAAE,IAAI,IAAI,CAAC,UAAU,KAAK,cAAc,EAAE;EAC1C,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;EACtB,GAAG;EACH,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;EAC1C,EAAE,IAAI,IAAI,CAAC,UAAU,KAAK,cAAc,EAAE;EAC1C,IAAI,IAAI,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;EACxC,GAAG;EACH,EAAE,IAAI,IAAI,CAAC,UAAU,KAAK,eAAe,EAAE;EAC3C,IAAI,IAAI,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;EACxC,GAAG;EACH,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;EAC/B,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;EAChC,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAClD;EACA,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,GAAG,EAAE,GAAG,YAAY,GAAG,EAAE,GAAG,KAAK,CAAC;EAC3E,EAAE,IAAI,OAAO;EACb,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK;EACnC,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK;EACvC,MAAM,MAAM,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK;EAC/C,MAAM,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK;EAC/C,GAAG,CAAC;EACJ,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;EACxC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;EACtC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC;AACxE;EACA,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACxD,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClB;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,IAAI,UAAU,GAAG,mcAAmc,CAAC;AACrd;EACA,SAAS,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;EACtC,EAAE,KAAK,OAAO,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;AACzC;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB;EACA;EACA,EAAE,IAAI,CAAC,CAAC,GAAG;EACX,IAAI,KAAK,EAAE,CAAC;EACZ,IAAI,QAAQ,EAAE,EAAE;EAChB,IAAI,KAAK,EAAE,EAAE;EACb,IAAI,QAAQ,EAAE,EAAE;EAChB,IAAI,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC;EAC5B,IAAI,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC;EAC9B,IAAI,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;EACzC,IAAI,UAAU,EAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;EAC/C,GAAG,CAAC;EACJ,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;EACxC,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,gCAAgC,CAAC;AAC7D;EACA,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,cAAc,CAAC;AAC3D;EACA,EAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EACtE,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;EAChD,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;EAC3C,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAC1C,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;AAChD;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;EACrB,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACxB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,EAAE;EAChC,IAAI,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;EAClC,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;EACzD,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EACtC,IAAI,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE;EACnC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;EACnB,KAAK;EACL,GAAG;EACH,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5C;EACA,EAAE,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;EAC5B,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;EACtB,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EACxB,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;EAC1B,EAAE,IAAI,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;EAChC,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACnB,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG;EACrB,IAAI,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,UAAU;EACpC,IAAI,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,WAAW;EACvC,GAAG,CAAC;EACJ,EAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC7B;EACA,EAAE,IAAI,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EAC/C,EAAE,IAAI,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;EAC5D,EAAE,IAAI,CAAC,MAAM,EAAE;EACf,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;EAC7C,IAAI,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;EAC7B,IAAI,MAAM,CAAC,EAAE,GAAG,kBAAkB,CAAC;EACnC,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;EAC5D,IAAI,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;EAClC,GAAG;EACH,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC;EACtC,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,GAAG,eAAe,CAAC;EAChD,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AAC3C;EACA,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;EAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACpB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACpB,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,IAAI,GAAG;EAChB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;EAC7C,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,IAAI,GAAG;EAChB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;EAC5C,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,OAAO,GAAG;EACnB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACnB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACnB,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC3C;EACA,EAAE,IAAI,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EAC/C,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,EAAE;EAChC,IAAI,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;EACpC,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;EACvE,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EAC1D,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;EACrC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;EACxB,KAAK;EACL,GAAG;EACH,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AAC3C;EACA;EACA,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;EACxB,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;EACzD,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;EACvB,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,IAAI,KAAK,GAAG,iCAAiC,CAAC;AAC9C;EACA,SAAS,MAAM,GAAG;EAClB,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,cAAc,CAAC;EAC5E,CAAC;AACD;EACA,SAAS,MAAM,CAAC,CAAC,EAAE;EACnB,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE;EAC5C,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;EACrB,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;EAC1B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;EAClB,GAAG;EACH,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;EAC3B,CAAC;AACD;EACA,IAAI,GAAG,GAAG,SAAS,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;EAC/C,EAAE,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;EAClC,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;EACH,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;EACjD,CAAC,CAAC;AACF;EACA,IAAI,kBAAkB,GAAG,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC;AAChE;EACA,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,QAAQ,IAAI;EAC5C,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC3B,CAAC,CAAC;AACF;EACA,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,MAAM,IAAI;EACxC,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACzB,CAAC,CAAC;AACF;EACA,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,MAAM,IAAI;EACxC,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACzB,CAAC,CAAC;AACF;EACA,GAAG,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,SAAS,IAAI;EAC9C,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC5B,CAAC,CAAC;AACF;EACA,kBAAkB,CAAC,UAAU,CAAC,GAAG,GAAG,YAAY;EAChD,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC3B,CAAC,CAAC;AACF;EACA,kBAAkB,CAAC,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,EAAE;EACjD,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EAC9B,CAAC,CAAC;AACF;EACA,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAC,SAAS,EAAE,kBAAkB,EAAE;;EClgE5D,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;EAC/B,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;EACjC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B;EACA,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,EAAE;AAC1D;EACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EACvE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;EAC9C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC1B;EACA,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;EAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;EACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;EAChD,KAAK,MAAM;EACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC9B,KAAK;EACL,GAAG,MAAM;EACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC5B,GAAG;AACH;EACA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;EACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;EACnC,GAAG,MAAM;EACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;EACpD,GAAG;EACH;;;;;ECtBA,SAASA,kBAAT,CAA4BC,GAA5B,EAAiC;EAC7B,SAAO,UAACC,GAAD,EAAS;EACZ,QAAIC,GAAG,GAAG,IAAV;EACAC,IAAAA,KAAK,CAACH,GAAD,CAAL,CACKI,IADL,CACU,UAACC,GAAD;EAAA,aAASA,GAAG,CAACC,IAAJ,EAAT;EAAA,KADV,EAEKF,IAFL,CAEU,UAACE,IAAD,EAAU;EAAA,0BACkBL,GAAG,CAACM,QADtB;EAAA,UACJC,MADI,iBACJA,MADI;EAAA,UACIC,SADJ,iBACIA,SADJ;EAEZA,MAAAA,SAAS,CAACC,SAAV,CAAoBC,GAApB,CAAwB,sBAAxB;EAEAV,MAAAA,GAAG,CAACW,IAAJ,CAAS,OAAT,EAAkB,YAAM;EACpBV,QAAAA,GAAG,GAAG,IAAIW,GAAJ,CAAQP,IAAR,EAAcE,MAAd,EAAsB;EACxBM,UAAAA,SAAS,EAAEL,SADa;EAExBM,UAAAA,UAAU,EAAE;EAFY,SAAtB,CAAN;EAKAb,QAAAA,GAAG,CAACc,MAAJ;EACAf,QAAAA,GAAG,CAACgB,IAAJ,CAAS,oBAAT,EAA+Bf,GAA/B;EACAD,QAAAA,GAAG,CAACiB,EAAJ,CAAO,QAAP,EAAiB;EAAA,iBAAMhB,GAAG,CAACc,MAAJ,EAAN;EAAA,SAAjB;EACAf,QAAAA,GAAG,CAACiB,EAAJ,CAAO,SAAP,EAAkB;EAAA,iBAAMhB,GAAG,CAACiB,OAAJ,EAAN;EAAA,SAAlB;EACH,OAVD;EAWH,KAjBL;EAkBA,WAAO;EACHC,MAAAA,IAAI,EAAE,oBADH;EAEHlB,MAAAA,GAAG,EAAHA;EAFG,KAAP;EAIH,GAxBD;EAyBH;;;;;;;;"}
\ No newline at end of file
diff --git a/docs/uncompiled/artplayer-plugin-gif.js b/docs/uncompiled/artplayer-plugin-gif.js
deleted file mode 100644
index 83a08e962..000000000
--- a/docs/uncompiled/artplayer-plugin-gif.js
+++ /dev/null
@@ -1,3037 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.artplayerPluginGif = factory());
-}(this, (function () { 'use strict';
-
- function _defineProperty(obj, key, value) {
- if (key in obj) {
- Object.defineProperty(obj, key, {
- value: value,
- enumerable: true,
- configurable: true,
- writable: true
- });
- } else {
- obj[key] = value;
- }
-
- return obj;
- }
-
- var defineProperty = _defineProperty;
-
- var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
-
- function createCommonjsModule(fn, module) {
- return module = { exports: {} }, fn(module, module.exports), module.exports;
- }
-
- var gifshot = createCommonjsModule(function (module, exports) {
- (function(window, document, navigator, undefined$1) {
-
- /*
- utils.js
- ========
- */
-
- /* Copyright 2017 Yahoo Inc.
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
- */
-
- var utils = {
- URL: window.URL || window.webkitURL || window.mozURL || window.msURL,
- getUserMedia: function () {
- var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
-
- return getUserMedia ? getUserMedia.bind(navigator) : getUserMedia;
- }(),
- requestAnimFrame: window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame,
- requestTimeout: function requestTimeout(callback, delay) {
- callback = callback || utils.noop;
- delay = delay || 0;
-
- if (!utils.requestAnimFrame) {
- return setTimeout(callback, delay);
- }
-
- var start = new Date().getTime();
- var handle = new Object();
- var requestAnimFrame = utils.requestAnimFrame;
-
- var loop = function loop() {
- var current = new Date().getTime();
- var delta = current - start;
-
- delta >= delay ? callback.call() : handle.value = requestAnimFrame(loop);
- };
-
- handle.value = requestAnimFrame(loop);
-
- return handle;
- },
- Blob: window.Blob || window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder,
- btoa: function () {
- var btoa = window.btoa || function (input) {
- var output = '';
- var i = 0;
- var l = input.length;
- var key = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
- var chr1 = void 0;
- var chr2 = void 0;
- var chr3 = void 0;
- var enc1 = void 0;
- var enc2 = void 0;
- var enc3 = void 0;
- var enc4 = void 0;
-
- while (i < l) {
- chr1 = input.charCodeAt(i++);
- chr2 = input.charCodeAt(i++);
- chr3 = input.charCodeAt(i++);
- enc1 = chr1 >> 2;
- enc2 = (chr1 & 3) << 4 | chr2 >> 4;
- enc3 = (chr2 & 15) << 2 | chr3 >> 6;
- enc4 = chr3 & 63;
-
- if (isNaN(chr2)) {
- enc3 = enc4 = 64;
- } else if (isNaN(chr3)) {
- enc4 = 64;
- }
-
- output = output + key.charAt(enc1) + key.charAt(enc2) + key.charAt(enc3) + key.charAt(enc4);
- }
-
- return output;
- };
-
- return btoa ? btoa.bind(window) : utils.noop;
- }(),
- isObject: function isObject(obj) {
- return obj && Object.prototype.toString.call(obj) === '[object Object]';
- },
- isEmptyObject: function isEmptyObject(obj) {
- return utils.isObject(obj) && !Object.keys(obj).length;
- },
- isArray: function isArray(arr) {
- return arr && Array.isArray(arr);
- },
- isFunction: function isFunction(func) {
- return func && typeof func === 'function';
- },
- isElement: function isElement(elem) {
- return elem && elem.nodeType === 1;
- },
- isString: function isString(value) {
- return typeof value === 'string' || Object.prototype.toString.call(value) === '[object String]';
- },
- isSupported: {
- canvas: function canvas() {
- var el = document.createElement('canvas');
-
- return el && el.getContext && el.getContext('2d');
- },
- webworkers: function webworkers() {
- return window.Worker;
- },
- blob: function blob() {
- return utils.Blob;
- },
- Uint8Array: function Uint8Array() {
- return window.Uint8Array;
- },
- Uint32Array: function Uint32Array() {
- return window.Uint32Array;
- },
- videoCodecs: function () {
- var testEl = document.createElement('video');
- var supportObj = {
- 'mp4': false,
- 'h264': false,
- 'ogv': false,
- 'ogg': false,
- 'webm': false
- };
-
- try {
- if (testEl && testEl.canPlayType) {
- // Check for MPEG-4 support
- supportObj.mp4 = testEl.canPlayType('video/mp4; codecs="mp4v.20.8"') !== '';
-
- // Check for h264 support
- supportObj.h264 = (testEl.canPlayType('video/mp4; codecs="avc1.42E01E"') || testEl.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"')) !== '';
-
- // Check for Ogv support
- supportObj.ogv = testEl.canPlayType('video/ogg; codecs="theora"') !== '';
-
- // Check for Ogg support
- supportObj.ogg = testEl.canPlayType('video/ogg; codecs="theora"') !== '';
-
- // Check for Webm support
- supportObj.webm = testEl.canPlayType('video/webm; codecs="vp8, vorbis"') !== -1;
- }
- } catch (e) {}
-
- return supportObj;
- }()
- },
- noop: function noop() {},
- each: function each(collection, callback) {
- var x = void 0;
- var len = void 0;
-
- if (utils.isArray(collection)) {
- x = -1;
- len = collection.length;
-
- while (++x < len) {
- if (callback(x, collection[x]) === false) {
- break;
- }
- }
- } else if (utils.isObject(collection)) {
- for (x in collection) {
- if (collection.hasOwnProperty(x)) {
- if (callback(x, collection[x]) === false) {
- break;
- }
- }
- }
- }
- },
- mergeOptions: function mergeOptions(defaultOptions, userOptions) {
- if (!utils.isObject(defaultOptions) || !utils.isObject(userOptions) || !Object.keys) {
- return;
- }
-
- var newObj = {};
-
- utils.each(defaultOptions, function (key, val) {
- newObj[key] = defaultOptions[key];
- });
-
- utils.each(userOptions, function (key, val) {
- var currentUserOption = userOptions[key];
-
- if (!utils.isObject(currentUserOption)) {
- newObj[key] = currentUserOption;
- } else {
- if (!defaultOptions[key]) {
- newObj[key] = currentUserOption;
- } else {
- newObj[key] = utils.mergeOptions(defaultOptions[key], currentUserOption);
- }
- }
- });
-
- return newObj;
- },
- setCSSAttr: function setCSSAttr(elem, attr, val) {
- if (!utils.isElement(elem)) {
- return;
- }
-
- if (utils.isString(attr) && utils.isString(val)) {
- elem.style[attr] = val;
- } else if (utils.isObject(attr)) {
- utils.each(attr, function (key, val) {
- elem.style[key] = val;
- });
- }
- },
- removeElement: function removeElement(node) {
- if (!utils.isElement(node)) {
- return;
- }
- if (node.parentNode) {
- node.parentNode.removeChild(node);
- }
- },
- createWebWorker: function createWebWorker(content) {
- if (!utils.isString(content)) {
- return {};
- }
-
- try {
- var blob = new utils.Blob([content], {
- 'type': 'text/javascript'
- });
- var objectUrl = utils.URL.createObjectURL(blob);
- var worker = new Worker(objectUrl);
-
- return {
- 'objectUrl': objectUrl,
- 'worker': worker
- };
- } catch (e) {
- return '' + e;
- }
- },
- getExtension: function getExtension(src) {
- return src.substr(src.lastIndexOf('.') + 1, src.length);
- },
- getFontSize: function getFontSize() {
- var options = arguments.length > 0 && arguments[0] !== undefined$1 ? arguments[0] : {};
-
- if (!document.body || options.resizeFont === false) {
- return options.fontSize;
- }
-
- var text = options.text;
- var containerWidth = options.gifWidth;
- var fontSize = parseInt(options.fontSize, 10);
- var minFontSize = parseInt(options.minFontSize, 10);
- var div = document.createElement('div');
- var span = document.createElement('span');
-
- div.setAttribute('width', containerWidth);
- div.appendChild(span);
-
- span.innerHTML = text;
- span.style.fontSize = fontSize + 'px';
- span.style.textIndent = '-9999px';
- span.style.visibility = 'hidden';
-
- document.body.appendChild(span);
-
- while (span.offsetWidth > containerWidth && fontSize >= minFontSize) {
- span.style.fontSize = --fontSize + 'px';
- }
-
- document.body.removeChild(span);
-
- return fontSize + 'px';
- },
- webWorkerError: false
- };
-
-
-
- var utils$2 = Object.freeze({
- default: utils
- });
-
- /*
- error.js
- ========
- */
-
- /* Copyright 2017 Yahoo Inc.
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
- */
-
- // Dependencies
- var error = {
- validate: function validate(skipObj) {
- skipObj = utils.isObject(skipObj) ? skipObj : {};
-
- var errorObj = {};
-
- utils.each(error.validators, function (indece, currentValidator) {
- var errorCode = currentValidator.errorCode;
-
- if (!skipObj[errorCode] && !currentValidator.condition) {
- errorObj = currentValidator;
- errorObj.error = true;
-
- return false;
- }
- });
-
- delete errorObj.condition;
-
- return errorObj;
- },
- isValid: function isValid(skipObj) {
- var errorObj = error.validate(skipObj);
- var isValid = errorObj.error !== true ? true : false;
-
- return isValid;
- },
- validators: [{
- condition: utils.isFunction(utils.getUserMedia),
- errorCode: 'getUserMedia',
- errorMsg: 'The getUserMedia API is not supported in your browser'
- }, {
- condition: utils.isSupported.canvas(),
- errorCode: 'canvas',
- errorMsg: 'Canvas elements are not supported in your browser'
- }, {
- condition: utils.isSupported.webworkers(),
- errorCode: 'webworkers',
- errorMsg: 'The Web Workers API is not supported in your browser'
- }, {
- condition: utils.isFunction(utils.URL),
- errorCode: 'window.URL',
- errorMsg: 'The window.URL API is not supported in your browser'
- }, {
- condition: utils.isSupported.blob(),
- errorCode: 'window.Blob',
- errorMsg: 'The window.Blob File API is not supported in your browser'
- }, {
- condition: utils.isSupported.Uint8Array(),
- errorCode: 'window.Uint8Array',
- errorMsg: 'The window.Uint8Array function constructor is not supported in your browser'
- }, {
- condition: utils.isSupported.Uint32Array(),
- errorCode: 'window.Uint32Array',
- errorMsg: 'The window.Uint32Array function constructor is not supported in your browser'
- }],
- messages: {
- videoCodecs: {
- errorCode: 'videocodec',
- errorMsg: 'The video codec you are trying to use is not supported in your browser'
- }
- }
- };
-
-
-
- var error$2 = Object.freeze({
- default: error
- });
-
- /*
- defaultOptions.js
- =================
- */
-
- /* Copyright 2017 Yahoo Inc.
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
- */
-
- // Helpers
- var noop = function noop() {};
-
- var defaultOptions = {
- sampleInterval: 10,
- numWorkers: 2,
- filter: '',
- gifWidth: 200,
- gifHeight: 200,
- interval: 0.1,
- numFrames: 10,
- frameDuration: 1,
- keepCameraOn: false,
- images: [],
- video: null,
- webcamVideoElement: null,
- cameraStream: null,
- text: '',
- fontWeight: 'normal',
- fontSize: '16px',
- minFontSize: '10px',
- resizeFont: false,
- fontFamily: 'sans-serif',
- fontColor: '#ffffff',
- textAlign: 'center',
- textBaseline: 'bottom',
- textXCoordinate: null,
- textYCoordinate: null,
- progressCallback: noop,
- completeCallback: noop,
- saveRenderingContexts: false,
- savedRenderingContexts: [],
- crossOrigin: 'Anonymous'
- };
-
-
-
- var defaultOptions$2 = Object.freeze({
- default: defaultOptions
- });
-
- /*
- isSupported.js
- ==============
- */
-
- /* Copyright 2017 Yahoo Inc.
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
- */
-
- // Dependencies
- function isSupported() {
- return error.isValid();
- }
-
- /*
- isWebCamGIFSupported.js
- =======================
- */
-
- /* Copyright 2017 Yahoo Inc.
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
- */
-
- function isWebCamGIFSupported() {
- return error.isValid();
- }
-
- /*
- isSupported.js
- ==============
- */
-
- /* Copyright 2017 Yahoo Inc.
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
- */
-
- // Dependencies
- function isSupported$1() {
- var options = {
- getUserMedia: true
- };
-
- return error.isValid(options);
- }
-
- /*
- isExistingVideoGIFSupported.js
- ==============================
- */
-
- /* Copyright 2017 Yahoo Inc.
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
- */
-
- // Dependencies
- function isExistingVideoGIFSupported(codecs) {
- var hasValidCodec = false;
-
- if (utils.isArray(codecs) && codecs.length) {
- utils.each(codecs, function (indece, currentCodec) {
- if (utils.isSupported.videoCodecs[currentCodec]) {
- hasValidCodec = true;
- }
- });
-
- if (!hasValidCodec) {
- return false;
- }
- } else if (utils.isString(codecs) && codecs.length) {
- if (!utils.isSupported.videoCodecs[codecs]) {
- return false;
- }
- }
-
- return error.isValid({
- 'getUserMedia': true
- });
- }
-
- /*
- NeuQuant.js
- ===========
- */
-
- /*
- * NeuQuant Neural-Net Quantization Algorithm
- * ------------------------------------------
- *
- * Copyright (c) 1994 Anthony Dekker
- *
- * NEUQUANT Neural-Net quantization algorithm by Anthony Dekker, 1994. See
- * "Kohonen neural networks for optimal colour quantization" in "Network:
- * Computation in Neural Systems" Vol. 5 (1994) pp 351-367. for a discussion of
- * the algorithm.
- *
- * Any party obtaining a copy of these files from the author, directly or
- * indirectly, is granted, free of charge, a full and unrestricted irrevocable,
- * world-wide, paid up, royalty-free, nonexclusive right and license to deal in
- * this software and documentation files (the "Software"), including without
- * limitation the rights to use, copy, modify, merge, publish, distribute,
- * sublicense, and/or sell copies of the Software, and to permit persons who
- * receive copies from any such party to do so, with the only requirement being
- * that this copyright notice remain intact.
- */
-
- /*
- * This class handles Neural-Net quantization algorithm
- * @author Kevin Weiner (original Java version - kweiner@fmsware.com)
- * @author Thibault Imbert (AS3 version - bytearray.org)
- * @version 0.1 AS3 implementation
- * @version 0.2 JS->AS3 "translation" by antimatter15
- * @version 0.3 JS clean up + using modern JS idioms by sole - http://soledadpenades.com
- * Also implement fix in color conversion described at http://stackoverflow.com/questions/16371712/neuquant-js-javascript-color-quantization-hidden-bug-in-js-conversion
- */
-
- function NeuQuant() {
- var netsize = 256; // number of colours used
-
- // four primes near 500 - assume no image has a length so large
- // that it is divisible by all four primes
- var prime1 = 499;
- var prime2 = 491;
- var prime3 = 487;
- var prime4 = 503;
-
- // minimum size for input image
- var minpicturebytes = 3 * prime4;
-
- // Network Definitions
-
- var maxnetpos = netsize - 1;
- var netbiasshift = 4; // bias for colour values
- var ncycles = 100; // no. of learning cycles
-
- // defs for freq and bias
- var intbiasshift = 16; // bias for fractions
- var intbias = 1 << intbiasshift;
- var gammashift = 10; // gamma = 1024
- var betashift = 10;
- var beta = intbias >> betashift; // beta = 1/1024
- var betagamma = intbias << gammashift - betashift;
-
- // defs for decreasing radius factor
- // For 256 colors, radius starts at 32.0 biased by 6 bits
- // and decreases by a factor of 1/30 each cycle
- var initrad = netsize >> 3;
- var radiusbiasshift = 6;
- var radiusbias = 1 << radiusbiasshift;
- var initradius = initrad * radiusbias;
- var radiusdec = 30;
-
- // defs for decreasing alpha factor
- // Alpha starts at 1.0 biased by 10 bits
- var alphabiasshift = 10;
- var initalpha = 1 << alphabiasshift;
- var alphadec;
-
- // radbias and alpharadbias used for radpower calculation
- var radbiasshift = 8;
- var radbias = 1 << radbiasshift;
- var alpharadbshift = alphabiasshift + radbiasshift;
- var alpharadbias = 1 << alpharadbshift;
-
- // Input image
- var thepicture;
- // Height * Width * 3
- var lengthcount;
- // Sampling factor 1..30
- var samplefac;
-
- // The network itself
- var network;
- var netindex = [];
-
- // for network lookup - really 256
- var bias = [];
-
- // bias and freq arrays for learning
- var freq = [];
- var radpower = [];
-
- function NeuQuantConstructor(thepic, len, sample) {
-
- var i;
- var p;
-
- thepicture = thepic;
- lengthcount = len;
- samplefac = sample;
-
- network = new Array(netsize);
-
- for (i = 0; i < netsize; i++) {
- network[i] = new Array(4);
- p = network[i];
- p[0] = p[1] = p[2] = (i << netbiasshift + 8) / netsize | 0;
- freq[i] = intbias / netsize | 0; // 1 / netsize
- bias[i] = 0;
- }
- }
-
- function colorMap() {
- var map = [];
- var index = new Array(netsize);
- for (var i = 0; i < netsize; i++) {
- index[network[i][3]] = i;
- }var k = 0;
- for (var l = 0; l < netsize; l++) {
- var j = index[l];
- map[k++] = network[j][0];
- map[k++] = network[j][1];
- map[k++] = network[j][2];
- }
- return map;
- }
-
- // Insertion sort of network and building of netindex[0..255]
- // (to do after unbias)
- function inxbuild() {
- var i;
- var j;
- var smallpos;
- var smallval;
- var p;
- var q;
- var previouscol;
- var startpos;
-
- previouscol = 0;
- startpos = 0;
-
- for (i = 0; i < netsize; i++) {
-
- p = network[i];
- smallpos = i;
- smallval = p[1]; // index on g
- // find smallest in i..netsize-1
- for (j = i + 1; j < netsize; j++) {
-
- q = network[j];
-
- if (q[1] < smallval) {
- // index on g
- smallpos = j;
- smallval = q[1]; // index on g
- }
- }
-
- q = network[smallpos];
-
- // swap p (i) and q (smallpos) entries
- if (i != smallpos) {
- j = q[0];
- q[0] = p[0];
- p[0] = j;
- j = q[1];
- q[1] = p[1];
- p[1] = j;
- j = q[2];
- q[2] = p[2];
- p[2] = j;
- j = q[3];
- q[3] = p[3];
- p[3] = j;
- }
-
- // smallval entry is now in position i
- if (smallval != previouscol) {
-
- netindex[previouscol] = startpos + i >> 1;
-
- for (j = previouscol + 1; j < smallval; j++) {
- netindex[j] = i;
- }
-
- previouscol = smallval;
- startpos = i;
- }
- }
-
- netindex[previouscol] = startpos + maxnetpos >> 1;
- for (j = previouscol + 1; j < 256; j++) {
- netindex[j] = maxnetpos; // really 256
- }
- }
-
- // Main Learning Loop
-
- function learn() {
- var i;
- var j;
- var b;
- var g;
- var r;
- var radius;
- var rad;
- var alpha;
- var step;
- var delta;
- var samplepixels;
- var p;
- var pix;
- var lim;
-
- if (lengthcount < minpicturebytes) {
- samplefac = 1;
- }
-
- alphadec = 30 + (samplefac - 1) / 3;
- p = thepicture;
- pix = 0;
- lim = lengthcount;
- samplepixels = lengthcount / (3 * samplefac);
- delta = samplepixels / ncycles | 0;
- alpha = initalpha;
- radius = initradius;
-
- rad = radius >> radiusbiasshift;
- if (rad <= 1) {
- rad = 0;
- }
-
- for (i = 0; i < rad; i++) {
- radpower[i] = alpha * ((rad * rad - i * i) * radbias / (rad * rad));
- }
-
- if (lengthcount < minpicturebytes) {
- step = 3;
- } else if (lengthcount % prime1 !== 0) {
- step = 3 * prime1;
- } else {
-
- if (lengthcount % prime2 !== 0) {
- step = 3 * prime2;
- } else {
- if (lengthcount % prime3 !== 0) {
- step = 3 * prime3;
- } else {
- step = 3 * prime4;
- }
- }
- }
-
- i = 0;
-
- while (i < samplepixels) {
-
- b = (p[pix + 0] & 0xff) << netbiasshift;
- g = (p[pix + 1] & 0xff) << netbiasshift;
- r = (p[pix + 2] & 0xff) << netbiasshift;
- j = contest(b, g, r);
-
- altersingle(alpha, j, b, g, r);
-
- if (rad !== 0) {
- // Alter neighbours
- alterneigh(rad, j, b, g, r);
- }
-
- pix += step;
-
- if (pix >= lim) {
- pix -= lengthcount;
- }
-
- i++;
-
- if (delta === 0) {
- delta = 1;
- }
-
- if (i % delta === 0) {
- alpha -= alpha / alphadec;
- radius -= radius / radiusdec;
- rad = radius >> radiusbiasshift;
-
- if (rad <= 1) {
- rad = 0;
- }
-
- for (j = 0; j < rad; j++) {
- radpower[j] = alpha * ((rad * rad - j * j) * radbias / (rad * rad));
- }
- }
- }
- }
-
- // Search for BGR values 0..255 (after net is unbiased) and return colour index
- function map(b, g, r) {
- var i;
- var j;
- var dist;
- var a;
- var bestd;
- var p;
- var best;
-
- // Biggest possible distance is 256 * 3
- bestd = 1000;
- best = -1;
- i = netindex[g]; // index on g
- j = i - 1; // start at netindex[g] and work outwards
-
- while (i < netsize || j >= 0) {
-
- if (i < netsize) {
-
- p = network[i];
-
- dist = p[1] - g; // inx key
-
- if (dist >= bestd) {
- i = netsize; // stop iter
- } else {
-
- i++;
-
- if (dist < 0) {
- dist = -dist;
- }
-
- a = p[0] - b;
-
- if (a < 0) {
- a = -a;
- }
-
- dist += a;
-
- if (dist < bestd) {
- a = p[2] - r;
-
- if (a < 0) {
- a = -a;
- }
-
- dist += a;
-
- if (dist < bestd) {
- bestd = dist;
- best = p[3];
- }
- }
- }
- }
-
- if (j >= 0) {
-
- p = network[j];
-
- dist = g - p[1]; // inx key - reverse dif
-
- if (dist >= bestd) {
- j = -1; // stop iter
- } else {
-
- j--;
- if (dist < 0) {
- dist = -dist;
- }
- a = p[0] - b;
- if (a < 0) {
- a = -a;
- }
- dist += a;
-
- if (dist < bestd) {
- a = p[2] - r;
- if (a < 0) {
- a = -a;
- }
- dist += a;
- if (dist < bestd) {
- bestd = dist;
- best = p[3];
- }
- }
- }
- }
- }
-
- return best;
- }
-
- function process() {
- learn();
- unbiasnet();
- inxbuild();
- return colorMap();
- }
-
- // Unbias network to give byte values 0..255 and record position i
- // to prepare for sort
- function unbiasnet() {
- var i;
-
- for (i = 0; i < netsize; i++) {
- network[i][0] >>= netbiasshift;
- network[i][1] >>= netbiasshift;
- network[i][2] >>= netbiasshift;
- network[i][3] = i; // record colour no
- }
- }
-
- // Move adjacent neurons by precomputed alpha*(1-((i-j)^2/[r]^2))
- // in radpower[|i-j|]
- function alterneigh(rad, i, b, g, r) {
-
- var j;
- var k;
- var lo;
- var hi;
- var a;
- var m;
-
- var p;
-
- lo = i - rad;
- if (lo < -1) {
- lo = -1;
- }
-
- hi = i + rad;
-
- if (hi > netsize) {
- hi = netsize;
- }
-
- j = i + 1;
- k = i - 1;
- m = 1;
-
- while (j < hi || k > lo) {
-
- a = radpower[m++];
-
- if (j < hi) {
-
- p = network[j++];
-
- try {
-
- p[0] -= a * (p[0] - b) / alpharadbias | 0;
- p[1] -= a * (p[1] - g) / alpharadbias | 0;
- p[2] -= a * (p[2] - r) / alpharadbias | 0;
- } catch (e) {}
- }
-
- if (k > lo) {
-
- p = network[k--];
-
- try {
-
- p[0] -= a * (p[0] - b) / alpharadbias | 0;
- p[1] -= a * (p[1] - g) / alpharadbias | 0;
- p[2] -= a * (p[2] - r) / alpharadbias | 0;
- } catch (e) {}
- }
- }
- }
-
- // Move neuron i towards biased (b,g,r) by factor alpha
- function altersingle(alpha, i, b, g, r) {
-
- // alter hit neuron
- var n = network[i];
- var alphaMult = alpha / initalpha;
- n[0] -= alphaMult * (n[0] - b) | 0;
- n[1] -= alphaMult * (n[1] - g) | 0;
- n[2] -= alphaMult * (n[2] - r) | 0;
- }
-
- // Search for biased BGR values
- function contest(b, g, r) {
-
- // finds closest neuron (min dist) and updates freq
- // finds best neuron (min dist-bias) and returns position
- // for frequently chosen neurons, freq[i] is high and bias[i] is negative
- // bias[i] = gamma*((1/netsize)-freq[i])
-
- var i;
- var dist;
- var a;
- var biasdist;
- var betafreq;
- var bestpos;
- var bestbiaspos;
- var bestd;
- var bestbiasd;
- var n;
-
- bestd = ~(1 << 31);
- bestbiasd = bestd;
- bestpos = -1;
- bestbiaspos = bestpos;
-
- for (i = 0; i < netsize; i++) {
-
- n = network[i];
- dist = n[0] - b;
-
- if (dist < 0) {
- dist = -dist;
- }
-
- a = n[1] - g;
-
- if (a < 0) {
- a = -a;
- }
-
- dist += a;
-
- a = n[2] - r;
-
- if (a < 0) {
- a = -a;
- }
-
- dist += a;
-
- if (dist < bestd) {
- bestd = dist;
- bestpos = i;
- }
-
- biasdist = dist - (bias[i] >> intbiasshift - netbiasshift);
-
- if (biasdist < bestbiasd) {
- bestbiasd = biasdist;
- bestbiaspos = i;
- }
-
- betafreq = freq[i] >> betashift;
- freq[i] -= betafreq;
- bias[i] += betafreq << gammashift;
- }
-
- freq[bestpos] += beta;
- bias[bestpos] -= betagamma;
- return bestbiaspos;
- }
-
- NeuQuantConstructor.apply(this, arguments);
-
- var exports = {};
- exports.map = map;
- exports.process = process;
-
- return exports;
- }
-
- /*
- processFrameWorker.js
- =====================
- */
-
- /* Copyright 2017 Yahoo Inc.
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
- */
-
- function workerCode() {
- var self = this;
-
- try {
- self.onmessage = function (ev) {
- var data = ev.data || {};
- var response;
-
- if (data.gifshot) {
- response = workerMethods.run(data);
- postMessage(response);
- }
- };
- } catch (e) {}
-
- var workerMethods = {
- dataToRGB: function dataToRGB(data, width, height) {
- var length = width * height * 4;
- var i = 0;
- var rgb = [];
-
- while (i < length) {
- rgb.push(data[i++]);
- rgb.push(data[i++]);
- rgb.push(data[i++]);
- i++; // for the alpha channel which we don't care about
- }
-
- return rgb;
- },
- componentizedPaletteToArray: function componentizedPaletteToArray(paletteRGB) {
- paletteRGB = paletteRGB || [];
-
- var paletteArray = [];
-
- for (var i = 0; i < paletteRGB.length; i += 3) {
- var r = paletteRGB[i];
- var g = paletteRGB[i + 1];
- var b = paletteRGB[i + 2];
-
- paletteArray.push(r << 16 | g << 8 | b);
- }
-
- return paletteArray;
- },
- // This is the "traditional" Animated_GIF style of going from RGBA to indexed color frames
- 'processFrameWithQuantizer': function processFrameWithQuantizer(imageData, width, height, sampleInterval) {
- var rgbComponents = this.dataToRGB(imageData, width, height);
- var nq = new NeuQuant(rgbComponents, rgbComponents.length, sampleInterval);
- var paletteRGB = nq.process();
- var paletteArray = new Uint32Array(this.componentizedPaletteToArray(paletteRGB));
- var numberPixels = width * height;
- var indexedPixels = new Uint8Array(numberPixels);
- var k = 0;
-
- for (var i = 0; i < numberPixels; i++) {
- var r = rgbComponents[k++];
- var g = rgbComponents[k++];
- var b = rgbComponents[k++];
-
- indexedPixels[i] = nq.map(r, g, b);
- }
-
- return {
- pixels: indexedPixels,
- palette: paletteArray
- };
- },
- 'run': function run(frame) {
- frame = frame || {};
-
- var _frame = frame,
- height = _frame.height,
- palette = _frame.palette,
- sampleInterval = _frame.sampleInterval,
- width = _frame.width;
-
- var imageData = frame.data;
-
- return this.processFrameWithQuantizer(imageData, width, height, sampleInterval);
- }
- };
-
- return workerMethods;
- }
-
- /*
- gifWriter.js
- ============
- */
-
- // (c) Dean McNamee