{"version":3,"file":"47e3298f.js","sources":["../lib/dom-utils/getBoundingClientRect.js","../lib/dom-utils/getWindowScroll.js","../lib/dom-utils/getWindowScrollBarX.js","../lib/dom-utils/isScrollParent.js","../lib/dom-utils/getScrollParent.js","../lib/dom-utils/listScrollParents.js","../lib/dom-utils/getViewportRect.js","../lib/dom-utils/getDocumentRect.js","../lib/utils/rectToClientRect.js","../lib/dom-utils/getClippingRect.js","../lib/utils/detectOverflow.js"],"sourcesContent":["export default function getBoundingClientRect(element) {\n var rect = element.getBoundingClientRect();\n return {\n width: rect.width,\n height: rect.height,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n x: rect.left,\n y: rect.top\n };\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = getNodeName(scrollParent) === 'body';\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n // can be obscured underneath it.\n // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n // if it isn't open, so if this isn't available, the popper will be detected\n // to overflow the bottom of the screen too early.\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n // errors due to floating point numbers, so we need to check precision.\n // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n // Feature detection fails in mobile emulation mode in Chrome.\n // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n // 0.001\n // Fallback here: \"Not Safari\" userAgent\n\n if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = element.ownerDocument.body;\n var width = Math.max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = Math.max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += Math.max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","export default function rectToClientRect(rect) {\n return Object.assign(Object.assign({}, rect), {}, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\n\nfunction getInnerBoundingClientRect(element) {\n var rect = getBoundingClientRect(element);\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent);\n accRect.top = Math.max(rect.top, accRect.top);\n accRect.right = Math.min(rect.right, accRect.right);\n accRect.bottom = Math.min(rect.bottom, accRect.bottom);\n accRect.left = Math.max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var referenceElement = state.elements.reference;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n var referenceClientRect = getBoundingClientRect(referenceElement);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign(Object.assign({}, popperRect), popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}"],"names":["getBoundingClientRect","element","rect","width","height","top","right","bottom","left","x","y","getWindowScroll","node","win","getWindow","scrollLeft","pageXOffset","scrollTop","pageYOffset","getWindowScrollBarX","getDocumentElement","isScrollParent","_getComputedStyle","getComputedStyle","overflow","overflowX","overflowY","test","getScrollParent","indexOf","getNodeName","ownerDocument","body","isHTMLElement","getParentNode","listScrollParents","list","scrollParent","isBody","target","concat","visualViewport","updatedList","getViewportRect","html","clientWidth","clientHeight","navigator","userAgent","offsetLeft","offsetTop","getDocumentRect","winScroll","Math","max","scrollWidth","scrollHeight","direction","rectToClientRect","Object","assign","getInnerBoundingClientRect","clientTop","clientLeft","getClientRectFromMixedType","clippingParent","viewport","getClippingParents","clippingParents","canEscapeClipping","position","clipperElement","getOffsetParent","isElement","filter","contains","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","reduce","accRect","min","detectOverflow","state","options","_options","_options$placement","placement","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","popper","_options$altBoundary","altBoundary","_options$padding","padding","paddingObject","mergePaddingObject","expandToHashMap","basePlacements","altContext","reference","referenceElement","elements","popperRect","rects","clippingClientRect","contextElement","referenceClientRect","popperOffsets","computeOffsets","strategy","popperClientRect","elementClientRect","overflowOffsets","offsetData","modifiersData","offset","keys","forEach","key","multiply","axis"],"mappings":"qWAAe,SAASA,sBAAsBC,GAC5C,IAAIC,EAAOD,EAAQD,wBACnB,MAAO,CACLG,MAAOD,EAAKC,MACZC,OAAQF,EAAKE,OACbC,IAAKH,EAAKG,IACVC,MAAOJ,EAAKI,MACZC,OAAQL,EAAKK,OACbC,KAAMN,EAAKM,KACXC,EAAGP,EAAKM,KACRE,EAAGR,EAAKG,KCTG,SAASM,gBAAgBC,GACtC,IAAIC,EAAMC,EAAUF,GACpB,IAAIG,EAAaF,EAAIG,YACrB,IAAIC,EAAYJ,EAAIK,YACpB,MAAO,CACLH,WAAYA,EACZE,UAAWA,GCJA,SAASE,oBAAoBlB,GAQ1C,OAAOD,sBAAsBoB,EAAmBnB,IAAUO,KAAOG,gBAAgBV,GAASc,WCV7E,SAASM,eAAepB,GAErC,IAAIqB,EAAoBC,EAAiBtB,GACrCuB,EAAWF,EAAkBE,SAC7BC,EAAYH,EAAkBG,UAC9BC,EAAYJ,EAAkBI,UAElC,MAAO,6BAA6BC,KAAKH,EAAWE,EAAYD,GCJnD,SAASG,gBAAgBhB,GACtC,MAAI,CAAC,OAAQ,OAAQ,aAAaiB,QAAQC,EAAYlB,KAAU,EAEvDA,EAAKmB,cAAcC,KAGxBC,EAAcrB,IAASS,eAAeT,GACjCA,EAGFgB,gBAAgBM,EAActB,ICFxB,SAASuB,kBAAkBlC,EAASmC,QACpC,IAATA,IACFA,EAAO,IAGT,IAAIC,EAAeT,gBAAgB3B,GACnC,IAAIqC,EAAuC,SAA9BR,EAAYO,GACzB,IAAIxB,EAAMC,EAAUuB,GACpB,IAAIE,EAASD,EAAS,CAACzB,GAAK2B,OAAO3B,EAAI4B,gBAAkB,GAAIpB,eAAegB,GAAgBA,EAAe,IAAMA,EACjH,IAAIK,EAAcN,EAAKI,OAAOD,GAC9B,OAAOD,EAASI,EAChBA,EAAYF,OAAOL,kBAAkBD,EAAcK,KCpBtC,SAASI,gBAAgB1C,GACtC,IAAIY,EAAMC,EAAUb,GACpB,IAAI2C,EAAOxB,EAAmBnB,GAC9B,IAAIwC,EAAiB5B,EAAI4B,eACzB,IAAItC,EAAQyC,EAAKC,YACjB,IAAIzC,EAASwC,EAAKE,aAClB,IAAIrC,EAAI,EACR,IAAIC,EAAI,EAMR,GAAI+B,EAAgB,CAClBtC,EAAQsC,EAAetC,MACvBC,EAASqC,EAAerC,OASxB,IAAK,iCAAiCuB,KAAKoB,UAAUC,WAAY,CAC/DvC,EAAIgC,EAAeQ,WACnBvC,EAAI+B,EAAeS,WAIvB,MAAO,CACL/C,MAAOA,EACPC,OAAQA,EACRK,EAAGA,EAAIU,oBAAoBlB,GAC3BS,EAAGA,GC/BQ,SAASyC,gBAAgBlD,GACtC,IAAI2C,EAAOxB,EAAmBnB,GAC9B,IAAImD,EAAYzC,gBAAgBV,GAChC,IAAI+B,EAAO/B,EAAQ8B,cAAcC,KACjC,IAAI7B,EAAQkD,KAAKC,IAAIV,EAAKW,YAAaX,EAAKC,YAAab,EAAOA,EAAKuB,YAAc,EAAGvB,EAAOA,EAAKa,YAAc,GAChH,IAAIzC,EAASiD,KAAKC,IAAIV,EAAKY,aAAcZ,EAAKE,aAAcd,EAAOA,EAAKwB,aAAe,EAAGxB,EAAOA,EAAKc,aAAe,GACrH,IAAIrC,GAAK2C,EAAUrC,WAAaI,oBAAoBlB,GACpD,IAAIS,GAAK0C,EAAUnC,UAE8B,QAA7CM,EAAiBS,GAAQY,GAAMa,YACjChD,GAAK4C,KAAKC,IAAIV,EAAKC,YAAab,EAAOA,EAAKa,YAAc,GAAK1C,GAGjE,MAAO,CACLA,MAAOA,EACPC,OAAQA,EACRK,EAAGA,EACHC,EAAGA,GCvBQ,SAASgD,iBAAiBxD,GACvC,OAAOyD,OAAOC,OAAOD,OAAOC,OAAO,GAAI1D,GAAO,GAAI,CAChDM,KAAMN,EAAKO,EACXJ,IAAKH,EAAKQ,EACVJ,MAAOJ,EAAKO,EAAIP,EAAKC,MACrBI,OAAQL,EAAKQ,EAAIR,EAAKE,SCS1B,SAASyD,2BAA2B5D,GAClC,IAAIC,EAAOF,sBAAsBC,GACjCC,EAAKG,IAAMH,EAAKG,IAAMJ,EAAQ6D,UAC9B5D,EAAKM,KAAON,EAAKM,KAAOP,EAAQ8D,WAChC7D,EAAKK,OAASL,EAAKG,IAAMJ,EAAQ6C,aACjC5C,EAAKI,MAAQJ,EAAKM,KAAOP,EAAQ4C,YACjC3C,EAAKC,MAAQF,EAAQ4C,YACrB3C,EAAKE,OAASH,EAAQ6C,aACtB5C,EAAKO,EAAIP,EAAKM,KACdN,EAAKQ,EAAIR,EAAKG,IACd,OAAOH,EAGT,SAAS8D,2BAA2B/D,EAASgE,GAC3C,OAAOA,IAAmBC,EAAWR,iBAAiBf,gBAAgB1C,IAAYgC,EAAcgC,GAAkBJ,2BAA2BI,GAAkBP,iBAAiBP,gBAAgB/B,EAAmBnB,KAMrN,SAASkE,mBAAmBlE,GAC1B,IAAImE,EAAkBjC,kBAAkBD,EAAcjC,IACtD,IAAIoE,EAAoB,CAAC,WAAY,SAASxC,QAAQN,EAAiBtB,GAASqE,WAAa,EAC7F,IAAIC,EAAiBF,GAAqBpC,EAAchC,GAAWuE,EAAgBvE,GAAWA,EAE9F,OAAKwE,EAAUF,GAKRH,EAAgBM,QAAO,SAAUT,GACtC,OAAOQ,EAAUR,IAAmBU,EAASV,EAAgBM,IAAmD,SAAhCzC,EAAYmC,MALrF,GAWI,SAASW,gBAAgB3E,EAAS4E,EAAUC,GACzD,IAAIC,EAAmC,oBAAbF,EAAiCV,mBAAmBlE,GAAW,GAAGuC,OAAOqC,GACnG,IAAIT,EAAkB,GAAG5B,OAAOuC,EAAqB,CAACD,IACtD,IAAIE,EAAsBZ,EAAgB,GAC1C,IAAIa,EAAeb,EAAgBc,QAAO,SAAUC,EAASlB,GAC3D,IAAI/D,EAAO8D,2BAA2B/D,EAASgE,GAC/CkB,EAAQ9E,IAAMgD,KAAKC,IAAIpD,EAAKG,IAAK8E,EAAQ9E,KACzC8E,EAAQ7E,MAAQ+C,KAAK+B,IAAIlF,EAAKI,MAAO6E,EAAQ7E,OAC7C6E,EAAQ5E,OAAS8C,KAAK+B,IAAIlF,EAAKK,OAAQ4E,EAAQ5E,QAC/C4E,EAAQ3E,KAAO6C,KAAKC,IAAIpD,EAAKM,KAAM2E,EAAQ3E,MAC3C,OAAO2E,IACNnB,2BAA2B/D,EAAS+E,IACvCC,EAAa9E,MAAQ8E,EAAa3E,MAAQ2E,EAAazE,KACvDyE,EAAa7E,OAAS6E,EAAa1E,OAAS0E,EAAa5E,IACzD4E,EAAaxE,EAAIwE,EAAazE,KAC9ByE,EAAavE,EAAIuE,EAAa5E,IAC9B,OAAO4E,ECzDM,SAASI,eAAeC,EAAOC,QAC5B,IAAZA,IACFA,EAAU,IAGZ,IAAIC,EAAWD,EACXE,EAAqBD,EAASE,UAC9BA,OAAmC,IAAvBD,EAAgCH,EAAMI,UAAYD,EAC9DE,EAAoBH,EAASX,SAC7BA,OAAiC,IAAtBc,EAA+BvB,EAAkBuB,EAC5DC,EAAwBJ,EAASV,aACjCA,OAAyC,IAA1Bc,EAAmC1B,EAAW0B,EAC7DC,EAAwBL,EAASM,eACjCA,OAA2C,IAA1BD,EAAmCE,EAASF,EAC7DG,EAAuBR,EAASS,YAChCA,OAAuC,IAAzBD,GAA0CA,EACxDE,EAAmBV,EAASW,QAC5BA,OAA+B,IAArBD,EAA8B,EAAIA,EAChD,IAAIE,EAAgBC,EAAsC,kBAAZF,EAAuBA,EAAUG,EAAgBH,EAASI,IACxG,IAAIC,EAAaV,IAAmBC,EAASU,EAAYV,EACzD,IAAIW,EAAmBpB,EAAMqB,SAASF,UACtC,IAAIG,EAAatB,EAAMuB,MAAMd,OAC7B,IAAI9F,EAAUqF,EAAMqB,SAASV,EAAcO,EAAaV,GACxD,IAAIgB,EAAqBlC,gBAAgBH,EAAUxE,GAAWA,EAAUA,EAAQ8G,gBAAkB3F,EAAmBkE,EAAMqB,SAASZ,QAASlB,EAAUC,GACvJ,IAAIkC,EAAsBhH,sBAAsB0G,GAChD,IAAIO,EAAgBC,EAAe,CACjCT,UAAWO,EACX/G,QAAS2G,EACTO,SAAU,WACVzB,UAAWA,IAEb,IAAI0B,EAAmB1D,iBAAiBC,OAAOC,OAAOD,OAAOC,OAAO,GAAIgD,GAAaK,IACrF,IAAII,EAAoBvB,IAAmBC,EAASqB,EAAmBJ,EAGvE,IAAIM,EAAkB,CACpBjH,IAAKyG,EAAmBzG,IAAMgH,EAAkBhH,IAAM+F,EAAc/F,IACpEE,OAAQ8G,EAAkB9G,OAASuG,EAAmBvG,OAAS6F,EAAc7F,OAC7EC,KAAMsG,EAAmBtG,KAAO6G,EAAkB7G,KAAO4F,EAAc5F,KACvEF,MAAO+G,EAAkB/G,MAAQwG,EAAmBxG,MAAQ8F,EAAc9F,OAE5E,IAAIiH,EAAajC,EAAMkC,cAAcC,OAErC,GAAI3B,IAAmBC,GAAUwB,EAAY,CAC3C,IAAIE,EAASF,EAAW7B,GACxB/B,OAAO+D,KAAKJ,GAAiBK,SAAQ,SAAUC,GAC7C,IAAIC,EAAW,CAACvH,EAAOC,GAAQsB,QAAQ+F,IAAQ,EAAI,GAAK,EACxD,IAAIE,EAAO,CAACzH,EAAKE,GAAQsB,QAAQ+F,IAAQ,EAAI,IAAM,IACnDN,EAAgBM,IAAQH,EAAOK,GAAQD,KAI3C,OAAOP"}